1/*
2 *******************************************************************************
3 *
4 *   © 2016 and later: Unicode, Inc. and others.
5 *   License & terms of use: http://www.unicode.org/copyright.html#License
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 */
44static 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
58static UBool
59isAcceptable(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
80extern int
81main(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