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