1 /*---------------------------------------------------------------------------*
2 Project: Revolution ENC sample demo
3 File: japanese.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: japanese.c,v $
14 Revision 1.3 2006/11/14 08:34:44 yoshioka_yasuhiro
15 Deleted private area.
16
17 Revision 1.2 2006/11/01 02:52:30 yoshioka_yasuhiro
18 Removed test code.
19
20 Revision 1.1 2006/10/27 12:20:37 yoshioka_yasuhiro
21 Initial commit.
22
23 $NoKeywords: $
24 *---------------------------------------------------------------------------*/
25
26 #include <revolution.h>
27 #include <revolution/enc.h>
28
29 #include "validate.h"
30
31 static const u8 sjis[] = {
32 0x82, 0xA0, 0x82, 0xA2, 0x82, 0xA4, 0x0D, 0x0A, 0x82, 0xA6, 0x82, 0xA8, 0xB1, 0xB2, 0xB3, 0x0D,
33 0x0A, 0xB4, 0xB5, 0x88, 0x9F, 0x88, 0xC9, 0x89, 0x46, 0x0D, 0x0A, 0x8D, 0x5D, 0x94, 0xF6, 0x61,
34 0x69, 0x75, 0x0D, 0x0A, 0x65, 0x6F, 0x00
35 };
36
37 static const u8 jis[] = {
38 0x1B, 0x24, 0x42, 0x24, 0x22, 0x24, 0x24, 0x24, 0x26, 0x1B, 0x28, 0x42, 0x0D, 0x0A, 0x1B, 0x24,
39 0x42, 0x24, 0x28, 0x24, 0x2A, 0x25, 0x22, 0x25, 0x24, 0x25, 0x26, 0x1B, 0x28, 0x42, 0x0D, 0x0A,
40 0x1B, 0x24, 0x42, 0x25, 0x28, 0x25, 0x2A, 0x30, 0x21, 0x30, 0x4B, 0x31, 0x27, 0x1B, 0x28, 0x42,
41 0x0D, 0x0A, 0x1B, 0x24, 0x42, 0x39, 0x3E, 0x48, 0x78, 0x1B, 0x28, 0x42, 0x61, 0x69, 0x75, 0x0D,
42 0x0A, 0x65, 0x6F, 0x00
43 };
44
45 static const u8 jis_kana[] = {
46 0x1B, 0x24, 0x42, 0x24, 0x22, 0x24, 0x24, 0x24, 0x26, 0x1B, 0x28, 0x42, 0x0D, 0x0A, 0x1B, 0x24,
47 0x42, 0x24, 0x28, 0x24, 0x2A, 0x1B, 0x28, 0x49, 0x31, 0x32, 0x33, 0x1B, 0x28, 0x42, 0x0D, 0x0A,
48 0x1B, 0x28, 0x49, 0x34, 0x35, 0x1B, 0x24, 0x42, 0x30, 0x21, 0x30, 0x4B, 0x31, 0x27, 0x1B, 0x28,
49 0x42, 0x0D, 0x0A, 0x1B, 0x24, 0x42, 0x39, 0x3E, 0x48, 0x78, 0x1B, 0x28, 0x42, 0x61, 0x69, 0x75,
50 0x0D, 0x0A, 0x65, 0x6F, 0x00
51 };
52
53 static const u16 uni[] = {
54 0x3042, 0x3044, 0x3046, 0x000D, 0x000A, 0x3048, 0x304A, 0xFF71,
55 0xFF72, 0xFF73, 0x000D, 0x000A, 0xFF74, 0xFF75, 0x4E9C, 0x4F0A,
56 0x5B87, 0x000D, 0x000A, 0x6C5F, 0x5C3E, 0x0061, 0x0069, 0x0075,
57 0x000D, 0x000A, 0x0065, 0x006F, 0x0000
58 };
59
main()60 int main()
61 {
62 BOOL test_clear = TRUE;
63
64 OSReport("\n* SJIS str -> UNICODE str *\n");
65 test_clear = test_clear && ValidateFuncToUnicode(ENCConvertStringSjisToUnicode, uni, sjis, 8);
66
67 OSReport("\n* UNICODE str -> SJIS str *\n");
68 test_clear = test_clear && ValidateFuncFromUnicode(ENCConvertStringUnicodeToSjis, sjis, uni, 8);
69
70 OSReport("\n* JIS str -> SJIS str *\n");
71 test_clear = test_clear && ValidateFuncMultiByte(ENCConvertStringJisToSjis, sjis, jis_kana, 8);
72
73 OSReport("\n* SJIS str -> JIS str *\n");
74 test_clear = test_clear && ValidateFuncMultiByte(ENCConvertStringSjisToJis, jis, sjis, 8);
75
76 OSReport("\n* JIS str -> UNICODE str *\n");
77 test_clear = test_clear && ValidateFuncToUnicode(ENCConvertStringJisToUnicode, uni, jis_kana, 8);
78
79 OSReport("\n* UNICODE str -> JIS str *\n");
80 test_clear = test_clear && ValidateFuncFromUnicode(ENCConvertStringUnicodeToJis, jis, uni, 8);
81
82 /* character */
83 {
84 u8 char8[8];
85 u16 char16;
86 u8 mbs[8];
87 u16 wc;
88 s32 srclen, dstlen;
89 ENCResult err_code;
90
91 *mbs = 0x94;
92 *(mbs + 1) = 0x43;
93 wc = 0x4EFB;
94 /* SJIS char -> UNICODE char */
95 OSReport("\n* SJIS char -> UNICODE char *\n");
96 srclen = 2;
97 dstlen = 1;
98 err_code = ENCConvertStringSjisToUnicode(&char16, &dstlen, mbs, &srclen);
99 if (char16 == wc)
100 {
101 OSReport("SUCCESS\n");
102 }
103 else
104 {
105 OSReport("FAILURE\n");
106 test_clear = FALSE;
107 }
108 OSReport("%#x, %#x -> %#x\n", *mbs, *(mbs + 1), char16);
109
110 /* UNICODE char -> SJIS char */
111 OSReport("\n* UNICODE char -> SJIS char *\n");
112 srclen = 1;
113 err_code = ENCConvertStringUnicodeToSjis(NULL, &dstlen, &wc, &srclen);
114 err_code = ENCConvertStringUnicodeToSjis(char8, &dstlen, &wc, &srclen);
115 if (*char8 == *mbs && *(char8 + 1) == *(mbs + 1))
116 {
117 OSReport("SUCCESS\n");
118 }
119 else
120 {
121 OSReport("FAILURE\n");
122 test_clear = FALSE;
123 }
124 OSReport("%#x -> %#x, %#x\n", wc, *char8, *(char8 + 1));
125
126 /* SJIS char -> JIS char */
127 *mbs = 0x94;
128 *(mbs + 1) = 0x43;
129 OSReport("\n* SJIS char -> JIS char *\n");
130 srclen = 2;
131 err_code = ENCConvertStringSjisToJis(NULL, &dstlen, mbs, &srclen);
132 err_code = ENCConvertStringSjisToJis(char8, &dstlen, mbs, &srclen);
133 if (*(char8 + 3) == 0x47 && *(char8 + 4) == 0x24)
134 {
135 OSReport("SUCCESS\n");
136 }
137 else
138 {
139 OSReport("FAILURE\n");
140 test_clear = FALSE;
141 }
142 OSReport("%#x, %#x -> %#x, %#x\n", *mbs, *(mbs + 1), *(char8 + 3), *(char8 + 4));
143
144 /* JIS char -> SJIS char */
145 *mbs = 0x1B;
146 *(mbs + 1) = 0x24;
147 *(mbs + 2) = 0x42;
148 *(mbs + 3) = 0x47;
149 *(mbs + 4) = 0x24;
150 *(mbs + 5) = 0x1B;
151 *(mbs + 6) = 0x28;
152 *(mbs + 7) = 0x42;
153 OSReport("\n* JIS char -> SJIS char *\n");
154 srclen = 8;
155 err_code = ENCConvertStringJisToSjis(NULL, &dstlen, mbs, &srclen);
156 err_code = ENCConvertStringJisToSjis(char8, &dstlen, mbs, &srclen);
157 if (*char8 == 0x94 && *(char8 + 1) == 0x43)
158 {
159 OSReport("SUCCESS\n");
160 }
161 else
162 {
163 OSReport("FAILURE\n");
164 test_clear = FALSE;
165 }
166 OSReport("%#x, %#x -> %#x, %#x\n", *(mbs + 3), *(mbs + 4), *char8, *(char8 + 1));
167 }
168
169 if (test_clear)
170 OSReport("\nTOTAL SUCCESS\n");
171 else
172 OSReport("\nTOTAL FAILURE\n");
173
174 return 0;
175 }
176