charconvfw/Charconv/ongoing/test/source/otherutf/UTF7.CPP
changeset 16 56cd22a7a1cb
parent 0 1fb32624e06b
child 18 67f6b0d39020
child 21 f2f7b3284356
--- a/charconvfw/Charconv/ongoing/test/source/otherutf/UTF7.CPP	Tue Feb 02 02:02:46 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,344 +0,0 @@
-/*
-* Copyright (c) 2000-2005 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:      
-*
-*/
-/* ================================================================ */
-/*
-File:   ConvertUTF7.c
-Author: David B. Goldsmith
-Copyright (C) 1994, 1996 Taligent, Inc. All rights reserved.
-
-This code is copyrighted. Under the copyright laws, this code may not
-be copied, in whole or part, without prior written consent of Taligent. 
-
-Taligent grants the right to use this code as long as this ENTIRE
-copyright notice is reproduced in the code.  The code is provided
-AS-IS, AND TALIGENT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR
-IMPLIED, INCLUDING, BUT NOT LIMITED TO IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT
-WILL TALIGENT BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING,
-WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
-INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY
-LOSS) ARISING OUT OF THE USE OR INABILITY TO USE THIS CODE, EVEN
-IF TALIGENT HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-BECAUSE SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF
-LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE ABOVE
-LIMITATION MAY NOT APPLY TO YOU.
-
-RESTRICTED RIGHTS LEGEND: Use, duplication, or disclosure by the
-government is subject to restrictions as set forth in subparagraph
-(c)(l)(ii) of the Rights in Technical Data and Computer Software
-clause at DFARS 252.227-7013 and FAR 52.227-19.
-
-This code may be protected by one or more U.S. and International
-Patents.
-
-TRADEMARKS: Taligent and the Taligent Design Mark are registered
-trademarks of Taligent, Inc.
-*/
-
-// #include "CVTUTF7.H" // commented out by DPB
-#include "UTF7.H" // added by DPB
-#pragma warning (disable: 4706) // added by DPB (warning disabled: "assignment within conditional expression")
-
-static const char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; // "const" added by DPB
-// static short invbase64[128]; // commented out by DPB
-
-static const char direct[] = // "const" added by DPB
-	"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'(),-./:?";
-static const char optional[] = "!\"#$%&*;<=>@[]^_`{|}"; // "const" added by DPB
-static const char spaces[] = " \011\015\012";		/* space, tab, return, line feed */ // "const" added by DPB
-// static char mustshiftsafe[128]; // commented out by DPB
-// static char mustshiftopt[128]; // commented out by DPB
-
-// static int needtables = 1; // commented out by DPB
-
-#define SHIFT_IN '+'
-#define SHIFT_OUT '-'
-
-int strlen(const char* aZeroTerminatedString) // added by DPB
-	{ // added by DPB
-	const char* character=aZeroTerminatedString; // added by DPB
-	while (*character!='\0') // added by DPB
-		{ // added by DPB
-		++character; // added by DPB
-		} // added by DPB
-	return character-aZeroTerminatedString; // added by DPB
-	} // added by DPB
-
-static void
-// tabinit() // commented out by DPB
-tabinit(short invbase64[], char mustshiftsafe[], char mustshiftopt[]) // added by DPB
-{
-	int i, limit;
-
-	for (i = 0; i < 128; ++i)
-	{
-		mustshiftopt[i] = mustshiftsafe[i] = 1;
-		invbase64[i] = -1;
-	}
-	limit = strlen(direct);
-	for (i = 0; i < limit; ++i)
-		mustshiftopt[direct[i]] = mustshiftsafe[direct[i]] = 0;
-	limit = strlen(spaces);
-	for (i = 0; i < limit; ++i)
-		mustshiftopt[spaces[i]] = mustshiftsafe[spaces[i]] = 0;
-	limit = strlen(optional);
-	for (i = 0; i < limit; ++i)
-		mustshiftopt[optional[i]] = 0;
-	limit = strlen(base64);
-	for (i = 0; i < limit; ++i)
-		invbase64[base64[i]] = (short)i; // cast added by DPB
-
-//	needtables = 0; // commented out by DPB
-}
-
-#define DECLARE_BIT_BUFFER register unsigned long BITbuffer = 0, buffertemp = 0; int bufferbits = 0
-#define BITS_IN_BUFFER bufferbits
-#define WRITE_N_BITS(x, n) ((BITbuffer |= ( ((x) & ~(-1L<<(n))) << (32-(n)-bufferbits) ) ), bufferbits += (n) )
-#define READ_N_BITS(n) ((buffertemp = (BITbuffer >> (32-(n)))), (BITbuffer <<= (n)), (bufferbits -= (n)), buffertemp)
-#define TARGETCHECK  {if (target >= targetEnd) {result = targetExhausted; break;}}
-
-EXPORT_C // added by DPB
-ConversionResult ConvertUCS2toUTF7(
-                UCS2** sourceStart, UCS2* sourceEnd, 
-                char** targetStart, char* targetEnd,
-                int optional, int verbose)
-{
-	ConversionResult result = ok;
-	DECLARE_BIT_BUFFER;
-	int shifted = 0, needshift = 0, done = 0;
-	register UCS2 *source = *sourceStart;
-	register char *target = *targetStart;
-	char *mustshift;
-
-	short invbase64[128]; // added by DPB
-	char mustshiftsafe[128]; // added by DPB
-	char mustshiftopt[128]; // added by DPB
-//	if (needtables) // commented out by DPB
-//		tabinit(); // commented out by DPB
-	tabinit(invbase64, mustshiftsafe, mustshiftopt); // added by DPB
-
-	if (optional)
-		mustshift = mustshiftopt;
-	else
-		mustshift = mustshiftsafe;
-
-	do
-	{
-		register UCS2 r=0; // initialised to 0 by DPB (to avoid GCC warning)
-
-		done = source >= sourceEnd;
-		if (!done)
-			r = *source++;
-		needshift = (!done && ((r > 0x7f) || mustshift[r]));
-
-		if (needshift && !shifted)
-		{
-			TARGETCHECK;
-			*target++ = SHIFT_IN;
-			/* Special case handling of the SHIFT_IN character */
-			if (r == (UCS2)SHIFT_IN) {
-				TARGETCHECK;
-				*target++ = SHIFT_OUT;
-			}
-			else
-				shifted = 1;
-		}
-
-		if (shifted)
-		{
-			/* Either write the character to the bit buffer, or pad
-			   the bit buffer out to a full base64 character.
-			 */
-			if (needshift)
-				WRITE_N_BITS(r, 16);
-			else
-				WRITE_N_BITS(0, (6 - (BITS_IN_BUFFER % 6))%6);
-
-			/* Flush out as many full base64 characters as possible
-			   from the bit buffer.
-			 */
-			while ((target < targetEnd) && BITS_IN_BUFFER >= 6)
-			{
-				int temp=READ_N_BITS(6); // added by DPB
-//				*target++ = base64[READ_N_BITS(6)]; // commented out by DPB
-				*target++ = base64[temp]; // added by DPB
-			}
-
-			if (BITS_IN_BUFFER >= 6)
-				TARGETCHECK;
-
-			if (!needshift)
-			{
-				/* Write the explicit shift out character if
-				   1) The caller has requested we always do it, or
-				   2) The directly encoded character is in the
-				   base64 set, or
-				   3) The directly encoded character is SHIFT_OUT.
-				 */
-				if (verbose || ((!done) && (invbase64[r] >=0 || r == SHIFT_OUT)))
-				{
-					TARGETCHECK;
-					*target++ = SHIFT_OUT;
-				}
-				shifted = 0;
-			}
-		}
-
-		/* The character can be directly encoded as ASCII. */
-		if (!needshift && !done)
-		{
-			TARGETCHECK;
-			*target++ = (char) r;
-		}
-
-	}
-	while (!done);
-	
-    *sourceStart = source;
-    *targetStart = target;
-    return result;
-}
-
-EXPORT_C // added by DPB
-ConversionResult ConvertUTF7toUCS2(
-                char** sourceStart, char* sourceEnd, 
-                UCS2** targetStart, UCS2* targetEnd)
-{
-	ConversionResult result = ok;
-	DECLARE_BIT_BUFFER;
-	int shifted = 0, first = 0, wroteone = 0, base64EOF=0, base64value=0, done=0; // "base64EOF", "base64value" and "done" initialised to 0 by DPB (to avoid GCC warning)
-	unsigned int c=0, prevc; // "c" initialised to 0 by DPB (to avoid GCC warning)
-	unsigned long junk;
-	register char *source = *sourceStart;
-	register UCS2 *target = *targetStart;
-
-	short invbase64[128]; // added by DPB
-	char mustshiftsafe[128]; // added by DPB
-	char mustshiftopt[128]; // added by DPB
-//	if (needtables) // commented out by DPB
-//		tabinit(); // commented out by DPB
-	tabinit(invbase64, mustshiftsafe, mustshiftopt); // added by DPB
-
-	do
-	{
-		/* read an ASCII character c */
-		done = source >= sourceEnd;
-		if (!done)
-			c = *source++;
-		if (shifted)
-		{
-			/* We're done with a base64 string if we hit EOF, it's not a valid
-			   ASCII character, or it's not in the base64 set.
-			 */
-			base64EOF = done || (c > 0x7f) || (base64value = invbase64[c]) < 0;
-			if (base64EOF)
-			{
-				shifted = 0;
-				/* If the character causing us to drop out was SHIFT_IN or
-				   SHIFT_OUT, it may be a special escape for SHIFT_IN. The
-				   test for SHIFT_IN is not necessary, but allows an alternate
-				   form of UTF-7 where SHIFT_IN is escaped by SHIFT_IN. This
-				   only works for some values of SHIFT_IN.
-				 */
-				if (!done && (c == SHIFT_IN || c == SHIFT_OUT))
-				{
-					/* get another character c */
-					prevc = c;
-					done = source >= sourceEnd;
-					if (!done)
-						c = *source++;
-					/* If no base64 characters were encountered, and the
-					   character terminating the shift sequence was
-					   SHIFT_OUT, then it's a special escape for SHIFT_IN.
-					 */
-					if (first && prevc == SHIFT_OUT)
-					{
-						/* write SHIFT_IN unicode */
-						TARGETCHECK;
-						*target++ = (UCS2)SHIFT_IN;
-					}
-					else if (!wroteone)
-					{
-						result = sourceCorrupt;
-						/* fprintf(stderr, "UTF7: empty sequence near byte %ld in input\n", source-sourceStart) */;
-					}
-				}
-				else if (!wroteone)
-				{
-					result = sourceCorrupt;
-					/* fprintf(stderr, "UTF7: empty sequence near byte %ld in input\n", source-sourceStart) */;
-				}
-			}
-			else
-			{
-				/* Add another 6 bits of base64 to the bit buffer. */
-				WRITE_N_BITS(base64value, 6);
-				first = 0;
-			}
-
-			/* Extract as many full 16 bit characters as possible from the
-			   bit buffer.
-			 */
-			while (BITS_IN_BUFFER >= 16 && (target < targetEnd))
-			{
-				/* write a unicode */
-				*target++ = (UCS2)READ_N_BITS(16); // cast added by DPB
-				wroteone = 1;
-			}
-
-			if (BITS_IN_BUFFER >= 16)
-				TARGETCHECK;
-
-			if (base64EOF)
-			{
-				junk = READ_N_BITS(BITS_IN_BUFFER);
-				if (junk)
-				{
-					result = sourceCorrupt;
-					/* fprintf(stderr, "UTF7: non-zero pad bits near byte %ld in input\n", source-sourceStart) */;
-				}
-			}
-		}
-
-		if (!shifted && !done)
-		{
-			if (c == SHIFT_IN)
-			{
-				shifted = 1;
-				first = 1;
-				wroteone = 0;
-			}
-			else
-			{
-				/* It must be a directly encoded character. */
-				if (c > 0x7f)
-				{
-					result = sourceCorrupt;
-					/* fprintf(stderr, "UTF7: non-ASCII character near byte %ld in input\n", source-sourceStart) */;
-				}
-				/* write a unicode */
-				TARGETCHECK;
-				*target++ = (UCS2)c; // cast added by DPB
-			}
-		}
-	}
-	while (!done);
-
-    *sourceStart = source;
-    *targetStart = target;
-    return result;
-}