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 #include "unicode/ucnv.h"
18 #include "unicode/ustring.h"
19 
20 #define BUF_SIZE 128
21 
22 /* Print a ustring to the specified FILE* in the default codepage */
23 void
uprint(const UChar * s,FILE * f,UErrorCode * status)24 uprint(const UChar *s,
25        FILE *f,
26        UErrorCode *status)
27 {
28   /* converter */
29   UConverter *converter;
30   char buf [BUF_SIZE];
31   int32_t sourceLen;
32   const UChar *mySource;
33   const UChar *mySourceEnd;
34   char *myTarget;
35   int32_t arraySize;
36 
37   if(s == 0) return;
38 
39   /* set up the conversion parameters */
40   sourceLen    = u_strlen(s);
41   mySource     = s;
42   mySourceEnd  = mySource + sourceLen;
43   myTarget     = buf;
44   arraySize    = BUF_SIZE;
45 
46   /* open a default converter */
47   converter = ucnv_open(0, status);
48 
49   /* if we failed, clean up and exit */
50   if(U_FAILURE(*status)) goto finish;
51 
52   /* perform the conversion */
53   do {
54     /* reset the error code */
55     *status = U_ZERO_ERROR;
56 
57     /* perform the conversion */
58     ucnv_fromUnicode(converter, &myTarget, myTarget + arraySize,
59              &mySource, mySourceEnd, NULL,
60              TRUE, status);
61 
62     /* Write the converted data to the FILE* */
63     fwrite(buf, sizeof(char), myTarget - buf, f);
64 
65     /* update the conversion parameters*/
66     myTarget     = buf;
67     arraySize    = BUF_SIZE;
68   }
69   while(*status == U_BUFFER_OVERFLOW_ERROR);
70 
71  finish:
72 
73   /* close the converter */
74   ucnv_close(converter);
75 }
76