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