]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | ******************************************************************************* | |
3 | * | |
4 | * Copyright (C) 1999-2006, International Business Machines | |
5 | * Corporation and others. All Rights Reserved. | |
6 | * | |
7 | ******************************************************************************* | |
8 | * file name: writer.c | |
9 | * encoding: US-ASCII | |
10 | * tab size: 8 (not used) | |
11 | * indentation:4 | |
12 | * | |
13 | * created on: 2000sep5 | |
14 | * created by: Vladimir Weinstein | |
15 | */ | |
16 | ||
17 | /****************************************************************************** | |
18 | * A program to write simple binary data readable by udata - example for | |
19 | * ICU workshop | |
20 | ******************************************************************************/ | |
21 | ||
22 | ||
23 | #include <stdio.h> | |
24 | #include <stdlib.h> | |
25 | #ifdef WIN32 | |
26 | #include <direct.h> | |
27 | #else | |
28 | #include <unistd.h> | |
29 | #endif | |
30 | #include "unicode/utypes.h" | |
31 | #include "unicode/udata.h" | |
32 | ||
33 | /* this is private - available only through toolutil */ | |
34 | #include "unewdata.h" | |
35 | ||
36 | #define DATA_NAME "mypkg_example" | |
37 | #define DATA_TYPE "dat" | |
38 | ||
39 | /* UDataInfo cf. udata.h */ | |
40 | static const UDataInfo dataInfo={ | |
41 | sizeof(UDataInfo), | |
42 | 0, | |
43 | ||
44 | U_IS_BIG_ENDIAN, | |
45 | U_CHARSET_FAMILY, | |
46 | sizeof(UChar), | |
47 | 0, | |
48 | ||
49 | 0x4D, 0x79, 0x44, 0x74, /* dataFormat="MyDt" */ | |
50 | 1, 0, 0, 0, /* formatVersion */ | |
51 | 1, 0, 0, 0 /* dataVersion */ | |
52 | }; | |
53 | ||
54 | ||
55 | /* Excersise: add writing out other data types */ | |
56 | /* see icu/source/tools/toolutil/unewdata.h */ | |
57 | /* for other possibilities */ | |
58 | ||
59 | extern int | |
60 | main(int argc, const char *argv[]) { | |
61 | UNewDataMemory *pData; | |
62 | UErrorCode errorCode=U_ZERO_ERROR; | |
63 | char stringValue[]={'E', 'X', 'A', 'M', 'P', 'L', 'E', '\0'}; | |
64 | uint16_t intValue=2000; | |
65 | ||
66 | long dataLength; | |
67 | uint32_t size; | |
68 | #ifdef WIN32 | |
69 | char *currdir = _getcwd(NULL, 0); | |
70 | #else | |
71 | char *currdir = getcwd(NULL, 0); | |
72 | #endif | |
73 | ||
74 | pData=udata_create(currdir, DATA_TYPE, DATA_NAME, &dataInfo, | |
75 | U_COPYRIGHT_STRING, &errorCode); | |
76 | ||
77 | if(currdir != NULL) { | |
78 | free(currdir); | |
79 | } | |
80 | ||
81 | ||
82 | if(U_FAILURE(errorCode)) { | |
83 | fprintf(stderr, "Error: unable to create data memory, error %d\n", errorCode); | |
84 | exit(errorCode); | |
85 | } | |
86 | ||
87 | /* write the data to the file */ | |
88 | /* a 16 bit value and a String*/ | |
89 | printf("Writing uint16_t value of %d\n", intValue); | |
90 | udata_write16(pData, intValue); | |
91 | printf("Writing string value of %s\n", stringValue); | |
92 | udata_writeString(pData, stringValue, sizeof(stringValue)); | |
93 | ||
94 | /* finish up */ | |
95 | dataLength=udata_finish(pData, &errorCode); | |
96 | if(U_FAILURE(errorCode)) { | |
97 | fprintf(stderr, "Error: error %d writing the output file\n", errorCode); | |
98 | exit(errorCode); | |
99 | } | |
100 | size=sizeof(stringValue) + sizeof(intValue); | |
101 | ||
102 | ||
103 | if(dataLength!=(long)size) { | |
104 | fprintf(stderr, "Error: data length %ld != calculated size %lu\n", dataLength, size); | |
105 | exit(U_INTERNAL_PROGRAM_ERROR); | |
106 | } | |
107 | return 0; | |
108 | } | |
109 | ||
110 | ||
111 | ||
112 | ||
113 | ||
114 | ||
115 | ||
116 | ||
117 | ||
118 | ||
119 |