1 /*---------------------------------------------------------------------------*
2 Project: Revolution ENC sample demo
3 File: unicode.c
4
5 Copyright 2006 Nintendo. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Log: unicode.c,v $
14 Revision 1.1 2006/08/11 10:16:58 yoshioka_yasuhiro
15 Initial commit.
16
17 $NoKeywords: $
18 *---------------------------------------------------------------------------*/
19
20 #include <revolution.h>
21 #include <revolution/enc.h>
22
23 static u32 utf32[] = {0x00000041, 0x00000042, 0x00000043, 0x000000C0, 0x000000C1, 0x000000C2, 0x00003042, 0x00003044, 0x00003046, 0x0000FF71, 0x0000FF72, 0x0000FF73, 0x00010000, 0x00000000};
24 static u16 utf16[] = {0x0041, 0x0042, 0x0043, 0x00C0, 0x00C1, 0x00C2, 0x3042, 0x3044, 0x3046, 0xFF71, 0xFF72, 0xFF73, 0xD800, 0xDC00, 0x0000};
25 static u8 utf8[] = {0x41, 0x42, 0x43, 0xC3, 0x80, 0xC3, 0x81, 0xC3, 0x82, 0xE3, 0x81, 0x82, 0xE3, 0x81, 0x84, 0xE3, 0x81, 0x86, 0xEF, 0xBD, 0xB1, 0xEF, 0xBD, 0xB2, 0xEF, 0xBD, 0xB3, 0xF0, 0x90, 0x80, 0x80, 0x00};
26
main()27 int main()
28 {
29 #define LENGTH 32
30 BOOL test_clear = TRUE;
31 s32 srclen, dstlen;
32 ENCResult err_code;
33
34 /* UTF32 str -> UTF16 str */
35 OSReport("\n* UTF32 str -> UTF16 str *\n");
36 srclen = -1;
37 err_code = ENCConvertStringUtf32ToUtf16(NULL, &dstlen, utf32, &srclen);
38 if (err_code)
39 {
40 OSReport("ERROR: %d\n", err_code);
41 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
42 test_clear = FALSE;
43 }
44 else
45 {
46 u16 dst[LENGTH];
47 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
48 err_code = ENCConvertStringUtf32ToUtf16(dst, &dstlen, utf32, &srclen);
49 if (err_code)
50 {
51 OSReport("ERROR: %d\n", err_code);
52 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
53 test_clear = FALSE;
54 }
55 else
56 {
57 s32 i, j;
58 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
59 for (i = 0; i < dstlen; ++i)
60 {
61 if (dst[i] == utf16[i])
62 continue;
63 OSReport("FAILURE\nend @ %d\n", i);
64 OSReport("result\tanswer\n");
65 for (j = 0; j < 8; ++j)
66 OSReport("%#x\t%#x\n", dst[i + j], utf16[i + j]);
67 test_clear = FALSE;
68 break;
69 }
70 if (i == dstlen)
71 {
72 OSReport("SUCCESS\nend @ %d\n", i - 1);
73 }
74 }
75 }
76
77 /* UTF16 str -> UTF32 str */
78 OSReport("\n* UTF16 str -> UTF32 str *\n");
79 srclen = -1;
80 err_code = ENCConvertStringUtf16ToUtf32(NULL, &dstlen, utf16, &srclen);
81 if (err_code)
82 {
83 OSReport("ERROR: %d\n", err_code);
84 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
85 test_clear = FALSE;
86 }
87 else
88 {
89 u32 dst[LENGTH];
90 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
91 err_code = ENCConvertStringUtf16ToUtf32(dst, &dstlen, utf16, &srclen);
92 if (err_code)
93 {
94 OSReport("ERROR: %d\n", err_code);
95 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
96 test_clear = FALSE;
97 }
98 else
99 {
100 s32 i, j;
101 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
102 for (i = 0; i < dstlen; ++i)
103 {
104 if (dst[i] == utf32[i])
105 continue;
106 OSReport("FAILURE\nend @ %d\n", i);
107 OSReport("result\tanswer\n");
108 for (j = 0; j < 8; ++j)
109 OSReport("%#x\t%#x\n", dst[i + j], utf32[i + j]);
110 test_clear = FALSE;
111 break;
112 }
113 if (i == dstlen)
114 {
115 OSReport("SUCCESS\nend @ %d\n", i - 1);
116 }
117 }
118 }
119
120 /* UTF32 str -> UTF8 str */
121 OSReport("\n* UTF32 str -> UTF8 str *\n");
122 srclen = -1;
123 err_code = ENCConvertStringUtf32ToUtf8(NULL, &dstlen, utf32, &srclen);
124 if (err_code)
125 {
126 OSReport("ERROR: %d\n", err_code);
127 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
128 test_clear = FALSE;
129 }
130 else
131 {
132 u8 dst[LENGTH];
133 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
134 err_code = ENCConvertStringUtf32ToUtf8(dst, &dstlen, utf32, &srclen);
135 if (err_code)
136 {
137 OSReport("ERROR: %d\n", err_code);
138 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
139 test_clear = FALSE;
140 }
141 else
142 {
143 s32 i, j;
144 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
145 for (i = 0; i < dstlen; ++i)
146 {
147 if (dst[i] == utf8[i])
148 continue;
149 OSReport("FAILURE\nend @ %d\n", i);
150 OSReport("result\tanswer\n");
151 for (j = 0; j < 8; ++j)
152 OSReport("%#x\t%#x\n", dst[i + j], utf8[i + j]);
153 test_clear = FALSE;
154 break;
155 }
156 if (i == dstlen)
157 {
158 OSReport("SUCCESS\nend @ %d\n", i - 1);
159 }
160 }
161 }
162
163 /* UTF8 str -> UTF32 str */
164 OSReport("\n* UTF8 str -> UTF32 str *\n");
165 srclen = -1;
166 err_code = ENCConvertStringUtf8ToUtf32(NULL, &dstlen, utf8, &srclen);
167 if (err_code)
168 {
169 OSReport("ERROR: %d\n", err_code);
170 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
171 test_clear = FALSE;
172 }
173 else
174 {
175 u32 dst[LENGTH];
176 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
177 err_code = ENCConvertStringUtf8ToUtf32(dst, &dstlen, utf8, &srclen);
178 if (err_code)
179 {
180 OSReport("ERROR: %d\n", err_code);
181 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
182 test_clear = FALSE;
183 }
184 else
185 {
186 s32 i, j;
187 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
188 for (i = 0; i < dstlen; ++i)
189 {
190 if (dst[i] == utf32[i])
191 continue;
192 OSReport("FAILURE\nend @ %d\n", i);
193 OSReport("result\tanswer\n");
194 for (j = 0; j < 8; ++j)
195 OSReport("%#x\t%#x\n", dst[i + j], utf32[i + j]);
196 test_clear = FALSE;
197 break;
198 }
199 if (i == dstlen)
200 {
201 OSReport("SUCCESS\nend @ %d\n", i - 1);
202 }
203 }
204 }
205
206 /* UTF16 str -> UTF8 str */
207 OSReport("\n* UTF16 str -> UTF8 str *\n");
208 srclen = -1;
209 err_code = ENCConvertStringUtf16ToUtf8(NULL, &dstlen, utf16, &srclen);
210 if (err_code)
211 {
212 OSReport("ERROR: %d\n", err_code);
213 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
214 test_clear = FALSE;
215 }
216 else
217 {
218 u8 dst[LENGTH];
219 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
220 err_code = ENCConvertStringUtf16ToUtf8(dst, &dstlen, utf16, &srclen);
221 if (err_code)
222 {
223 OSReport("ERROR: %d\n", err_code);
224 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
225 test_clear = FALSE;
226 }
227 else
228 {
229 s16 i, j;
230 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
231 for (i = 0; i < dstlen; ++i)
232 {
233 if (dst[i] == utf8[i])
234 continue;
235 OSReport("FAILURE\nend @ %d\n", i);
236 OSReport("result\tanswer\n");
237 for (j = 0; j < 8; ++j)
238 OSReport("%#x\t%#x\n", dst[i + j], utf8[i + j]);
239 test_clear = FALSE;
240 break;
241 }
242 if (i == dstlen)
243 {
244 OSReport("SUCCESS\nend @ %d\n", i - 1);
245 }
246 }
247 }
248
249 /* UTF8 str -> UTF16 str */
250 OSReport("\n* UTF8 str -> UTF16 str *\n");
251 srclen = -1;
252 err_code = ENCConvertStringUtf8ToUtf16(NULL, &dstlen, utf8, &srclen);
253 if (err_code)
254 {
255 OSReport("ERROR: %d\n", err_code);
256 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
257 test_clear = FALSE;
258 }
259 else
260 {
261 u16 dst[LENGTH];
262 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
263 err_code = ENCConvertStringUtf8ToUtf16(dst, &dstlen, utf8, &srclen);
264 if (err_code)
265 {
266 OSReport("ERROR: %d\n", err_code);
267 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
268 test_clear = FALSE;
269 }
270 else
271 {
272 s16 i, j;
273 OSReport("dstlen: %d, srclen: %d\n", dstlen, srclen);
274 for (i = 0; i < dstlen; ++i)
275 {
276 if (dst[i] == utf16[i])
277 continue;
278 OSReport("FAILURE\nend @ %d\n", i);
279 OSReport("result\tanswer\n");
280 for (j = 0; j < 8; ++j)
281 OSReport("%#x\t%#x\n", dst[i + j], utf16[i + j]);
282 test_clear = FALSE;
283 break;
284 }
285 if (i == dstlen)
286 {
287 OSReport("SUCCESS\nend @ %d\n", i - 1);
288 }
289 }
290 }
291
292 if (test_clear)
293 OSReport("\nTOTAL SUCCESS\n");
294 else
295 OSReport("\nTOTAL FAILURE\n");
296
297 return 0;
298 }