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