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