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