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