1 /* 2 ******************************************************************************* 3 * 4 * Copyright (C) 1999-2009, International Business Machines 5 * Corporation and others. All Rights Reserved. 6 * 7 ******************************************************************************* 8 * file name: reader.c 9 * encoding: US-ASCII 10 * tab size: 8 (not used) 11 * indentation:4 12 * 13 * created on: 2000sep5 14 * created by: Vladimir Weinstein 15 */ 16 17 /******************************************************************************* 18 * Derived from Madhu Katragadda gentest 19 *******************************************************************************/ 20 21 22 #include <string.h> 23 #include <stdio.h> 24 #include <stdlib.h> 25 #ifdef WIN32 26 #include <direct.h> 27 #else 28 #include <unistd.h> 29 #endif 30 #include "unicode/utypes.h" 31 #include "unicode/putil.h" 32 #include "unicode/udata.h" 33 34 #define DATA_NAME "mypkg_example" 35 #define DATA_TYPE "dat" 36 37 /* UDataInfo cf. udata.h */ 38 static const UDataInfo dataInfo={ 39 sizeof(UDataInfo), 40 0, 41 42 U_IS_BIG_ENDIAN, 43 U_CHARSET_FAMILY, 44 sizeof(UChar), 45 0, 46 47 0x4D, 0x79, 0x44, 0x74, /* dataFormat="MyDt" */ 48 1, 0, 0, 0, /* formatVersion */ 49 1, 0, 0, 0 /* dataVersion */ 50 }; 51 52 static UBool 53 isAcceptable(void *context, 54 const char *type, const char *name, 55 const UDataInfo *pInfo){ 56 57 if( pInfo->size>=20 && 58 pInfo->isBigEndian==U_IS_BIG_ENDIAN && 59 pInfo->charsetFamily==U_CHARSET_FAMILY && 60 pInfo->dataFormat[0]==0x4D && /* dataFormat="MyDt" */ 61 pInfo->dataFormat[1]==0x79 && 62 pInfo->dataFormat[2]==0x44 && 63 pInfo->dataFormat[3]==0x74 && 64 pInfo->formatVersion[0]==1 && 65 pInfo->dataVersion[0]==1 ) { 66 return TRUE; 67 } else { 68 return FALSE; 69 } 70 71 72 } 73 74 extern int 75 main(int argc, const char *argv[]) { 76 UDataMemory *result = NULL; 77 UErrorCode status=U_ZERO_ERROR; 78 79 uint16_t intValue = 0; 80 81 char *string = NULL; 82 uint16_t *intPointer = NULL; 83 84 const void *dataMemory = NULL; 85 char curPathBuffer[1024]; 86 87 #ifdef WIN32 88 char *currdir = _getcwd(NULL, 0); 89 #else 90 char *currdir = getcwd(NULL, 0); 91 #endif 92 93 /* need to put "current/dir" as path */ 94 strcpy(curPathBuffer, currdir); 95 96 result=udata_openChoice(curPathBuffer, DATA_TYPE, DATA_NAME, isAcceptable, NULL, &status); 97 98 if(currdir != NULL) { 99 free(currdir); 100 } 101 102 if(U_FAILURE(status)){ 103 printf("Failed to open data file example.dat in %s with error number %d\n", curPathBuffer, status); 104 return -1; 105 } 106 107 dataMemory = udata_getMemory(result); 108 109 intPointer = (uint16_t *)dataMemory; 110 111 printf("Read value %d from data file\n", *intPointer); 112 113 string = (char *) (intPointer+1); 114 115 printf("Read string %s from data file\n", string); 116 117 if(U_SUCCESS(status)){ 118 udata_close(result); 119 } 120 121 return 0; 122 } 123 124 125 126 127 128 129 130