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