1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)******************************************************************************* 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)* 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)* Copyright (C) 1999-2006, International Business Machines 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)* Corporation and others. All Rights Reserved. 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)* 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)******************************************************************************* 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)* file name: writer.c 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)* encoding: US-ASCII 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)* tab size: 8 (not used) 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)* indentation:4 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)* 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)* created on: 2000sep5 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)* created by: Vladimir Weinstein 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)*/ 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/****************************************************************************** 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * A program to write simple binary data readable by udata - example for 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * ICU workshop 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ******************************************************************************/ 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <stdio.h> 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <stdlib.h> 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifdef WIN32 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <direct.h> 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#else 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <unistd.h> 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "unicode/utypes.h" 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "unicode/udata.h" 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)/* this is private - available only through toolutil */ 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "unewdata.h" 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define DATA_NAME "mypkg_example" 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define DATA_TYPE "dat" 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)/* UDataInfo cf. udata.h */ 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)static const UDataInfo dataInfo={ 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sizeof(UDataInfo), 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0, 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) U_IS_BIG_ENDIAN, 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) U_CHARSET_FAMILY, 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sizeof(UChar), 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0, 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0x4D, 0x79, 0x44, 0x74, /* dataFormat="MyDt" */ 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1, 0, 0, 0, /* formatVersion */ 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1, 0, 0, 0 /* dataVersion */ 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* Excersise: add writing out other data types */ 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* see icu/source/tools/toolutil/unewdata.h */ 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* for other possibilities */ 58 59extern int 60main(int argc, const char *argv[]) { 61 UNewDataMemory *pData; 62 UErrorCode errorCode=U_ZERO_ERROR; 63 char stringValue[]={'E', 'X', 'A', 'M', 'P', 'L', 'E', '\0'}; 64 uint16_t intValue=2000; 65 66 long dataLength; 67 uint32_t size; 68#ifdef WIN32 69 char *currdir = _getcwd(NULL, 0); 70#else 71 char *currdir = getcwd(NULL, 0); 72#endif 73 74 pData=udata_create(currdir, DATA_TYPE, DATA_NAME, &dataInfo, 75 U_COPYRIGHT_STRING, &errorCode); 76 77 if(currdir != NULL) { 78 free(currdir); 79 } 80 81 82 if(U_FAILURE(errorCode)) { 83 fprintf(stderr, "Error: unable to create data memory, error %d\n", errorCode); 84 exit(errorCode); 85 } 86 87 /* write the data to the file */ 88 /* a 16 bit value and a String*/ 89 printf("Writing uint16_t value of %d\n", intValue); 90 udata_write16(pData, intValue); 91 printf("Writing string value of %s\n", stringValue); 92 udata_writeString(pData, stringValue, sizeof(stringValue)); 93 94 /* finish up */ 95 dataLength=udata_finish(pData, &errorCode); 96 if(U_FAILURE(errorCode)) { 97 fprintf(stderr, "Error: error %d writing the output file\n", errorCode); 98 exit(errorCode); 99 } 100 size=sizeof(stringValue) + sizeof(intValue); 101 102 103 if(dataLength!=(long)size) { 104 fprintf(stderr, "Error: data length %ld != calculated size %lu\n", dataLength, size); 105 exit(U_INTERNAL_PROGRAM_ERROR); 106 } 107 return 0; 108} 109 110 111 112 113 114 115 116 117 118 119 120