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