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