16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 1998-2001, International Business Machines Corporation
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* and others.  All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File date.c
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History:
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*	Date		Name		Description
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*	06/14/99	stephen 	Creation.
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uprint.h"
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ucnv.h"
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h"
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define BUF_SIZE 128
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Print a ustring to the specified FILE* in the default codepage */
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orguprint(const UChar *s,
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	   FILE *f,
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	   UErrorCode *status)
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /* converter */
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UConverter *converter;
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  char buf [BUF_SIZE];
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  int32_t sourceLen;
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  const UChar *mySource;
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  const UChar *mySourceEnd;
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  char *myTarget;
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  int32_t arraySize;
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if(s == 0) return;
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /* set up the conversion parameters */
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  sourceLen    = u_strlen(s);
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  mySource	   = s;
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  mySourceEnd  = mySource + sourceLen;
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  myTarget	   = buf;
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  arraySize    = BUF_SIZE;
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /* open a default converter */
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  converter = ucnv_open(0, status);
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /* if we failed, clean up and exit */
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if(U_FAILURE(*status)) goto finish;
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /* perform the conversion */
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  do {
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	/* reset the error code */
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	*status = U_ZERO_ERROR;
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	/* perform the conversion */
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	ucnv_fromUnicode(converter, &myTarget,	myTarget + arraySize,
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			 &mySource, mySourceEnd, NULL,
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			 TRUE, status);
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	/* Write the converted data to the FILE* */
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	fwrite(buf, sizeof(char), myTarget - buf, f);
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	/* update the conversion parameters*/
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	myTarget	 = buf;
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	arraySize	 = BUF_SIZE;
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  }
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  while(*status == U_BUFFER_OVERFLOW_ERROR);
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org finish:
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /* close the converter */
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  ucnv_close(converter);
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
77