xref: /illumos-gate/usr/src/uts/common/sys/kiconv_ja.h (revision 78a2e113edb6fe0a0382b403b55d92e8f0bba78f)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef _SYS_KICONV_JA_H
28 #define	_SYS_KICONV_JA_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 #include <sys/kiconv.h>
37 
38 /*
39  * kiconv_ja specific definition
40  */
41 
42 #define	KICONV_JA_TBLID_EUCJP		(0x00)
43 #define	KICONV_JA_TBLID_EUCJP_MS	(0x01)
44 #define	KICONV_JA_TBLID_SJIS		(0x02)
45 #define	KICONV_JA_TBLID_CP932		(0x03)
46 
47 #define	KICONV_JA_MAX_MAPPING_TBLID	(0x03)
48 
49 #define	KICONV_JA_DEF_SINGLE	KICONV_ASCII_REPLACEMENT_CHAR
50 #define	KICONV_JA_REPLACE	(0xfffd)
51 #define	KICONV_JA_NODEST	(0xffff)
52 #define	KICONV_JA_IFHISUR(x)	((0xd800 <= (x)) && ((x) <= 0xdbff))
53 #define	KICONV_JA_IFLOSUR(x)	((0xdc00 <= (x)) && ((x) <= 0xdfff))
54 
55 #define	KICONV_JA_RETERROR(no) {\
56 		*errno = (no);\
57 		rv = ((size_t)-1);\
58 		goto ret;\
59 	}
60 
61 #define	KICONV_JA_NGET(c) \
62 	if (ileft == 0) {\
63 		KICONV_JA_RETERROR(EINVAL)\
64 	} else {\
65 		ileft--;\
66 		(c) = *ip++;\
67 	}
68 
69 #define	KICONV_JA_NGET_REP_FR_MB(c) \
70 	if (ileft == 0) {\
71 		KICONV_JA_PUTU(KICONV_JA_REPLACE)\
72 		rv++;\
73 		goto next;\
74 	} else {\
75 		ileft--;\
76 		(c) = *ip++;\
77 	}
78 
79 #define	KICONV_JA_NGET_REP_TO_MB(c) \
80 	if (ileft == 0) {\
81 		l = KICONV_JA_DEF_SINGLE;\
82 		*repnum = 1;\
83 		goto ret;\
84 	} else {\
85 		ileft--;\
86 		(c) = *ip++;\
87 	}
88 
89 #define	KICONV_JA_NPUT(c) \
90 	if (oleft == 0) {\
91 		KICONV_JA_RETERROR(E2BIG)\
92 	} else {\
93 		oleft--;\
94 		*op++ = (uint8_t)(c);\
95 	}
96 
97 #define	KICONV_JA_GETU(pu32, flag) \
98 	read_len = read_unicode((pu32), &ip, &ileft, errno, (flag), &rv); \
99 	switch (read_len) { \
100 	case (size_t)-1: \
101 		/* errno has been set in read_unicode() */ \
102 		rv = (size_t)-1; \
103 		goto ret; \
104 	case (size_t)0: \
105 		/* character read was handled in the read_unicode() */ \
106 		/* no further evaluation needed in caller side */ \
107 		goto next; \
108 	default: \
109 		break; \
110 	}
111 
112 #define	KICONV_JA_PUTU(u32)	\
113 	if (write_unicode((u32), &op, &oleft, errno) \
114 			== (size_t)-1) { \
115 		rv = ((size_t)-1);\
116 		goto ret; \
117 	}
118 
119 #define	KICONV_JA_CHECK_UTF8_BOM(inbuf, inleft) \
120 	if (((kiconv_state_t)kcd)->bom_processed == 0 && (inleft) >= 3 && \
121 		*(inbuf) == 0xef && \
122 		*((inbuf) + 1) == 0xbb && \
123 		*((inbuf) + 2) == 0xbf) { \
124 		(inbuf) += 3; \
125 		(inleft) -= 3; \
126 	} \
127 	((kiconv_state_t)kcd)->bom_processed = 1
128 
129 #define	KICONV_JA_CHECK_UTF8_BOM_WITHOUT_STATE(inbuf, inleft) \
130 	if ((inleft) >= 3 && *(inbuf) == 0xef && \
131 		*((inbuf) + 1) == 0xbb && \
132 		*((inbuf) + 2) == 0xbf) { \
133 		(inbuf) += 3; \
134 		(inleft) -= 3; \
135 	}
136 
137 #define	KICONV_JA_ERR_RETURN	(-1)		/* result code on error */
138 
139 /*
140  * KICONV_JA_ISXXXX(c) macros below assume (c) is of type ushort_t
141  */
142 /* is a valid code as ascii? */
143 #define	KICONV_JA_ISASC(c)		((c) <= 0x7f)
144 
145 /* is a valid code as C1 control? */
146 #define	KICONV_JA_ISC1CTRL(c)		(((c) >= 0x80) && ((c) <= 0x9f))
147 
148 /* is a valid code as C1 control allowed in EUC? */
149 #define	KICONV_JA_ISC1CTRLEUC(c)	((((c) >= 0x80) && ((c) <= 0x8d)) ||\
150 					(((c) >= 0x90) && ((c) <= 0x9f)))
151 
152 /* is a valid 1st or 2nd byte of EUC codeset 1? */
153 #define	KICONV_JA_ISCS1(c)		(((c) >= 0xa1) && ((c) <= 0xfe))
154 
155 /* is a valid 1st byte of EUC codeset 1 and in range row 1 thru 84? */
156 #define	KICONV_JA_ISCS1_0208(c)		(((c) >= 0xa1) && ((c) <= 0xf4))
157 
158 /* is a valid 1st byte of UDC area in EUC codeset 1? */
159 #define	KICONV_JA_ISCS1_UDC(c)		(((c) >= 0xf5) && ((c) <= 0xfe))
160 
161 /* is a valid 2nd (1st byte is SS2) byte of EUC codeset 2? */
162 #define	KICONV_JA_ISCS2(c)		(((c) >= 0xa1) && ((c) <= 0xdf))
163 
164 /* is a valid 2nd or 3rd (1st byte is SS3) byte of EUC codeset 3? */
165 #define	KICONV_JA_ISCS3(c)		(((c) >= 0xa1) && ((c) <= 0xfe))
166 
167 /* is a valid 2nd (1st byte is SS3) byte of UDC area in EUC codeset 3? */
168 #define	KICONV_JA_ISCS3_UDC(c)		(((c) >= 0xf5) && ((c) <= 0xfe))
169 
170 /* is a valid hankaku_katakana for SJIS? */
171 #define	KICONV_JA_ISSJKANA(c)		(((c) >= 0xa1) && ((c) <= 0xdf))
172 
173 /* is a valid character for the first byte of SJIS multibyte? */
174 #define	KICONV_JA_ISSJMB_1(c) \
175 	((((c) >= 0x81) && ((c) <= 0x9f)) || \
176 	(((c) >= 0xe0) && ((c) <= 0xfc)))
177 
178 /* is a valid character for the first byte of SJIS kanji? */
179 #define	KICONV_JA_ISSJKANJI1(c) \
180 	((((c) >= 0x81) && ((c) <= 0x9f)) || \
181 	(((c) >= 0xe0) && ((c) <= 0xea)) || \
182 	(((c) >= 0xf0) && ((c) <= 0xf4)))
183 
184 /* is a valid character for the first byte of a part of Suppl. SJIS? */
185 #define	KICONV_JA_ISSJSUPKANJI1(c)	(((c) >= 0xf5) && ((c) <= 0xf9))
186 
187 /* is a valid character for the first byte of SJIS UDC? */
188 #define	KICONV_JA_ISSJUDC_1(c)		(((c) >= 0xf0) && ((c) <= 0xf9))
189 
190 /* is a valid character for the first byte of ibm character set */
191 #define	KICONV_JA_ISSJIBM(c)		(((c) >= 0xfa) && ((c) <= 0xfc))
192 
193 /* is a valid character for the first byte of ibm character set */
194 #define	KICONV_JA_ISSJNECIBM(c)		(((c) >= 0xed) && ((c) <= 0xef))
195 
196 /* is a valid character for the second byte of SJIS kanji? */
197 #define	KICONV_JA_ISSJKANJI2(c)	\
198 	((((c) >= 0x40) && ((c) <= 0x7e)) || \
199 	(((c) >= 0x80) && ((c) <= 0xfc)))
200 
201 /* is a valid character for UTF8 UDC ? */
202 #define	KICONV_JA_ISUTF8UDC(c)	(((c) >= 0xe000) && ((c) <= 0xf8ff))
203 
204 #define	KICONV_JA_CMASK				0x7f
205 #define	KICONV_JA_CMSB				0x80
206 
207 /*
208  * Remap NEC/IBM codes to IBM codes
209  * if dest == 0xffff, that means the source
210  * code point is illegal in the current spec.
211  */
212 #define	KICONV_JA_REMAP_NEC(dest) \
213 	if ((0xed40 <= (dest)) && \
214 		((dest) <= 0xed62)) { \
215 		(dest) += 0xd1c; \
216 	} else if ((0xed63 <= (dest)) && \
217 		((dest) <= 0xed7e)) { \
218 		(dest) += 0xd1d; \
219 	} else if ((0xed80 <= (dest)) && \
220 		((dest) <= 0xede0)) { \
221 		(dest) += 0xd1c; \
222 	} else if ((0xede1 <= (dest)) && \
223 		((dest) <= 0xedfc)) { \
224 		(dest) += 0xd5f; \
225 	} else if ((0xee40 <= (dest)) && \
226 		((dest) <= 0xee62)) { \
227 		(dest) += 0xd1c; \
228 	} else if ((0xee63 <= (dest)) && \
229 		((dest) <= 0xee7e)) { \
230 		(dest) += 0xd1d; \
231 	} else if ((0xee80 <= (dest)) && \
232 		((dest) <= 0xeee0)) { \
233 		(dest) += 0xd1c; \
234 	} else if ((0xeee1 <= (dest)) && \
235 		((dest) <= 0xeeec)) { \
236 		(dest) += 0xd5f; \
237 	} else if ((0xeeef <= (dest)) && \
238 		((dest) <= 0xeef8)) { \
239 		(dest) += 0xb51; \
240 	} else if ((0xeef9 <= (dest)) && \
241 		((dest) <= 0xeefc)) { \
242 		(dest) += 0xb5b; \
243 	} else { \
244 		(dest) = 0xffff; \
245 	}
246 
247 typedef ushort_t kiconv_ja_euc16_t;
248 typedef ushort_t kiconv_ja_ucs2_t;
249 
250 /*
251  * The following 6 vectors show JIS and SJIS mapping table.
252  */
253 static const uchar_t kiconv_ja_sjtojis1[] = {
254 	0xff, 0x21, 0x23, 0x25, 0x27, 0x29, 0x2b, 0x2d,
255 	0x2f, 0x31, 0x33, 0x35, 0x37, 0x39, 0x3b, 0x3d,
256 	0x3f, 0x41, 0x43, 0x45, 0x47, 0x49, 0x4b, 0x4d,
257 	0x4f, 0x51, 0x53, 0x55, 0x57, 0x59, 0x5b, 0x5d,
258 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
259 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
260 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
261 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
262 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
263 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
264 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
265 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
266 	0x5f, 0x61, 0x63, 0x65, 0x67, 0x69, 0x6b, 0x6d,
267 	0x6f, 0x71, 0x73, 0xff, 0xff, 0xff, 0xff, 0xff,
268 	0x75, 0x77, 0x79, 0x7b, 0x7d, 0x75, 0x77, 0x79,
269 	0x7b, 0x7d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
270 };
271 static const uchar_t kiconv_ja_sjtojis2[] = {
272 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
273 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
274 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
275 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
276 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
277 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
278 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
279 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
280 	0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
281 	0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
282 	0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
283 	0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
284 	0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
285 	0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
286 	0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
287 	0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0xff,
288 	0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
289 	0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
290 	0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
291 	0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x21,
292 	0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,
293 	0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
294 	0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
295 	0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41,
296 	0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
297 	0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51,
298 	0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
299 	0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61,
300 	0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
301 	0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71,
302 	0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
303 	0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0xff, 0xff, 0xff,
304 };
305 static const uchar_t kiconv_ja_jis208tosj1[] = {
306 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
307 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
308 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
309 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
310 	0xff, 0x81, 0x81, 0x82, 0x82, 0x83, 0x83, 0x84,
311 	0x84, 0x85, 0x85, 0x86, 0x86, 0x87, 0x87, 0x88,
312 	0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b, 0x8b, 0x8c,
313 	0x8c, 0x8d, 0x8d, 0x8e, 0x8e, 0x8f, 0x8f, 0x90,
314 	0x90, 0x91, 0x91, 0x92, 0x92, 0x93, 0x93, 0x94,
315 	0x94, 0x95, 0x95, 0x96, 0x96, 0x97, 0x97, 0x98,
316 	0x98, 0x99, 0x99, 0x9a, 0x9a, 0x9b, 0x9b, 0x9c,
317 	0x9c, 0x9d, 0x9d, 0x9e, 0x9e, 0x9f, 0x9f, 0xe0,
318 	0xe0, 0xe1, 0xe1, 0xe2, 0xe2, 0xe3, 0xe3, 0xe4,
319 	0xe4, 0xe5, 0xe5, 0xe6, 0xe6, 0xe7, 0xe7, 0xe8,
320 	0xe8, 0xe9, 0xe9, 0xea, 0xea, 0xf0, 0xf0, 0xf1,
321 	0xf1, 0xf2, 0xf2, 0xf3, 0xf3, 0xf4, 0xf4, 0xff,
322 };
323 static const uchar_t kiconv_ja_jis212tosj1[] = {
324 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
325 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
326 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
327 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
328 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
329 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
330 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
331 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
332 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
333 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
334 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
335 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
336 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
337 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
338 	0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf5, 0xf6,
339 	0xf6, 0xf7, 0xf7, 0xf8, 0xf8, 0xf9, 0xf9, 0xff,
340 };
341 static const uchar_t kiconv_ja_jistosj2[] = {
342 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
343 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
344 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
345 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
346 	0xff, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
347 	0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e,
348 	0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,
349 	0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e,
350 	0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
351 	0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e,
352 	0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
353 	0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e,
354 	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
355 	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
356 	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
357 	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0xff,
358 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
359 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
360 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
361 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
362 	0xff, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5,
363 	0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad,
364 	0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5,
365 	0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd,
366 	0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5,
367 	0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd,
368 	0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5,
369 	0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd,
370 	0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5,
371 	0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed,
372 	0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5,
373 	0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xff,
374 };
375 static const ushort_t kiconv_ja_sjtoibmext[] = {
376 	0xf3f3, 0xf3f4, 0xf3f5, 0xf3f6, 0xf3f7, 0xf3f8, 0xf3f9, 0xf3fa,
377 	0xf3fb, 0xf3fc, 0xf3fd, 0xf3fe, 0xf4a1, 0xf4a2, 0xf4a3, 0xf4a4,
378 	0xf4a5, 0xf4a6, 0xf4a7, 0xf4a8, 0xffff, 0xa2c3, 0xf4a9, 0xf4aa,
379 	0xf4ab, 0xf4ac, 0xf4ad, 0xffff, 0xd4e3, 0xdcdf, 0xe4e9, 0xe3f8,
380 	0xd9a1, 0xb1bb, 0xf4ae, 0xc2ad, 0xc3fc, 0xe4d0, 0xc2bf, 0xbcf4,
381 	0xb0a9, 0xb0c8, 0xf4af, 0xb0d2, 0xb0d4, 0xb0e3, 0xb0ee, 0xb1a7,
382 	0xb1a3, 0xb1ac, 0xb1a9, 0xb1be, 0xb1df, 0xb1d8, 0xb1c8, 0xb1d7,
383 	0xb1e3, 0xb1f4, 0xb1e1, 0xb2a3, 0xf4b0, 0xb2bb, 0xb2e6, 0xffff,
384 	0xb2ed, 0xb2f5, 0xb2fc, 0xf4b1, 0xb3b5, 0xb3d8, 0xb3db, 0xb3e5,
385 	0xb3ee, 0xb3fb, 0xf4b2, 0xf4b3, 0xb4c0, 0xb4c7, 0xb4d0, 0xb4de,
386 	0xf4b4, 0xb5aa, 0xf4b5, 0xb5af, 0xb5c4, 0xb5e8, 0xf4b6, 0xb7c2,
387 	0xb7e4, 0xb7e8, 0xb7e7, 0xf4b7, 0xf4b8, 0xf4b9, 0xb8ce, 0xb8e1,
388 	0xb8f5, 0xb8f7, 0xb8f8, 0xb8fc, 0xb9af, 0xb9b7, 0xbabe, 0xbadb,
389 	0xcdaa, 0xbae1, 0xf4ba, 0xbaeb, 0xbbb3, 0xbbb8, 0xf4bb, 0xbbca,
390 	0xf4bc, 0xf4bd, 0xbbd0, 0xbbde, 0xbbf4, 0xbbf5, 0xbbf9, 0xbce4,
391 	0xbced, 0xbcfe, 0xf4be, 0xbdc2, 0xbde7, 0xf4bf, 0xbdf0, 0xbeb0,
392 	0xbeac, 0xf4c0, 0xbeb3, 0xbebd, 0xbecd, 0xbec9, 0xbee4, 0xbfa8,
393 	0xbfc9, 0xc0c4, 0xc0e4, 0xc0f4, 0xc1a6, 0xf4c1, 0xc1f5, 0xc1fc,
394 	0xf4c2, 0xc1f8, 0xc2ab, 0xc2a1, 0xc2a5, 0xf4c3, 0xc2b8, 0xc2ba,
395 	0xf4c4, 0xc2c4, 0xc2d2, 0xc2d7, 0xc2db, 0xc2de, 0xc2ed, 0xc2f0,
396 	0xf4c5, 0xc3a1, 0xc3b5, 0xc3c9, 0xc3b9, 0xf4c6, 0xc3d8, 0xc3fe,
397 	0xf4c7, 0xc4cc, 0xf4c8, 0xc4d9, 0xc4ea, 0xc4fd, 0xf4c9, 0xc5a7,
398 	0xc5b5, 0xc5b6, 0xf4ca, 0xc5d5, 0xc6b8, 0xc6d7, 0xc6e0, 0xc6ea,
399 	0xc6e3, 0xc7a1, 0xc7ab, 0xc7c7, 0xc7c3, 0xffff, 0xffff, 0xffff,
400 	0xc7cb, 0xc7cf, 0xc7d9, 0xf4cb, 0xf4cc, 0xc7e6, 0xc7ee, 0xc7fc,
401 	0xc7eb, 0xc7f0, 0xc8b1, 0xc8e5, 0xc8f8, 0xc9a6, 0xc9ab, 0xc9ad,
402 	0xf4cd, 0xc9ca, 0xc9d3, 0xc9e9, 0xc9e3, 0xc9fc, 0xc9f4, 0xc9f5,
403 	0xf4ce, 0xcab3, 0xcabd, 0xcaef, 0xcaf1, 0xcbae, 0xf4cf, 0xcbca,
404 	0xcbe6, 0xcbea, 0xcbf0, 0xcbf4, 0xcbee, 0xcca5, 0xcbf9, 0xccab,
405 	0xccae, 0xccad, 0xccb2, 0xccc2, 0xccd0, 0xccd9, 0xf4d0, 0xcdbb,
406 	0xf4d1, 0xcebb, 0xf4d2, 0xceba, 0xcec3, 0xf4d3, 0xcef2, 0xb3dd,
407 	0xcfd5, 0xcfe2, 0xcfe9, 0xcfed, 0xf4d4, 0xf4d5, 0xf4d6, 0xffff,
408 	0xf4d7, 0xd0e5, 0xf4d8, 0xd0e9, 0xd1e8, 0xf4d9, 0xf4da, 0xd1ec,
409 	0xd2bb, 0xf4db, 0xd3e1, 0xd3e8, 0xd4a7, 0xf4dc, 0xf4dd, 0xd4d4,
410 	0xd4f2, 0xd5ae, 0xf4de, 0xd7de, 0xf4df, 0xd8a2, 0xd8b7, 0xd8c1,
411 	0xd8d1, 0xd8f4, 0xd9c6, 0xd9c8, 0xd9d1, 0xf4e0, 0xf4e1, 0xf4e2,
412 	0xf4e3, 0xf4e4, 0xdcd3, 0xddc8, 0xddd4, 0xddea, 0xddfa, 0xdea4,
413 	0xdeb0, 0xf4e5, 0xdeb5, 0xdecb, 0xf4e6, 0xdfb9, 0xf4e7, 0xdfc3,
414 	0xf4e8, 0xf4e9, 0xe0d9, 0xf4ea, 0xf4eb, 0xe1e2, 0xf4ec, 0xf4ed,
415 	0xf4ee, 0xe2c7, 0xe3a8, 0xe3a6, 0xe3a9, 0xe3af, 0xe3b0, 0xe3aa,
416 	0xe3ab, 0xe3bc, 0xe3c1, 0xe3bf, 0xe3d5, 0xe3d8, 0xe3d6, 0xe3df,
417 	0xe3e3, 0xe3e1, 0xe3d4, 0xe3e9, 0xe4a6, 0xe3f1, 0xe3f2, 0xe4cb,
418 	0xe4c1, 0xe4c3, 0xe4be, 0xf4ef, 0xe4c0, 0xe4c7, 0xe4bf, 0xe4e0,
419 	0xe4de, 0xe4d1, 0xf4f0, 0xe4dc, 0xe4d2, 0xe4db, 0xe4d4, 0xe4fa,
420 	0xe4ef, 0xe5b3, 0xe5bf, 0xe5c9, 0xe5d0, 0xe5e2, 0xe5ea, 0xe5eb,
421 	0xf4f1, 0xf4f2, 0xf4f3, 0xe6e8, 0xe6ef, 0xe7ac, 0xf4f4, 0xe7ae,
422 	0xf4f5, 0xe7b1, 0xf4f6, 0xe7b2, 0xe8b1, 0xe8b6, 0xf4f7, 0xf4f8,
423 	0xe8dd, 0xf4f9, 0xf4fa, 0xe9d1, 0xf4fb, 0xffff, 0xffff, 0xffff,
424 	0xe9ed, 0xeacd, 0xf4fc, 0xeadb, 0xeae6, 0xeaea, 0xeba5, 0xebfb,
425 	0xebfa, 0xf4fd, 0xecd6, 0xf4fe, 0xffff, 0xffff, 0xffff, 0xffff,
426 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
427 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
428 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
429 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
430 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
431 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
432 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
433 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
434 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
435 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
436 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
437 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
438 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
439 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
440 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
441 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
442 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
443 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
444 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
445 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
446 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
447 	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
448 };
449 
450 #ifdef __cplusplus
451 }
452 #endif
453 
454 #endif /* _SYS_KICONV_JA_H */
455