Home | History | Annotate | Download | only in udata
      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 */
     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
     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
     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