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