• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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