1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru********************************************************************** 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Copyright (C) 1998-2001, International Business Machines Corporation 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* and others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru********************************************************************** 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* File date.c 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Modification History: 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Date Name Description 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 06/14/99 stephen Creation. 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "uprint.h" 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ucnv.h" 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ustring.h" 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define BUF_SIZE 128 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* Print a ustring to the specified FILE* in the default codepage */ 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruuprint(const UChar *s, 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru FILE *f, 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode *status) 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* converter */ 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UConverter *converter; 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char buf [BUF_SIZE]; 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t sourceLen; 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UChar *mySource; 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UChar *mySourceEnd; 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char *myTarget; 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t arraySize; 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(s == 0) return; 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* set up the conversion parameters */ 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sourceLen = u_strlen(s); 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru mySource = s; 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru mySourceEnd = mySource + sourceLen; 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru myTarget = buf; 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru arraySize = BUF_SIZE; 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* open a default converter */ 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru converter = ucnv_open(0, status); 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* if we failed, clean up and exit */ 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(*status)) goto finish; 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* perform the conversion */ 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru do { 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* reset the error code */ 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *status = U_ZERO_ERROR; 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* perform the conversion */ 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ucnv_fromUnicode(converter, &myTarget, myTarget + arraySize, 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru &mySource, mySourceEnd, NULL, 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TRUE, status); 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Write the converted data to the FILE* */ 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fwrite(buf, sizeof(char), myTarget - buf, f); 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* update the conversion parameters*/ 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru myTarget = buf; 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru arraySize = BUF_SIZE; 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while(*status == U_BUFFER_OVERFLOW_ERROR); 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru finish: 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* close the converter */ 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ucnv_close(converter); 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 77