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