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