xref: /titanic_52/usr/src/lib/iconv_modules/ja/common/japanese.h (revision 91e1e26ac6a73ce959289cf7d3d96c4baedbe0b8)
1*91e1e26aSAlexander Pyhalov /*
2*91e1e26aSAlexander Pyhalov  * CDDL HEADER START
3*91e1e26aSAlexander Pyhalov  *
4*91e1e26aSAlexander Pyhalov  * The contents of this file are subject to the terms of the
5*91e1e26aSAlexander Pyhalov  * Common Development and Distribution License (the "License").
6*91e1e26aSAlexander Pyhalov  * You may not use this file except in compliance with the License.
7*91e1e26aSAlexander Pyhalov  *
8*91e1e26aSAlexander Pyhalov  * You can obtain a copy of the license at src/OPENSOLARIS.LICENSE
9*91e1e26aSAlexander Pyhalov  * or http://www.opensolaris.org/os/licensing.
10*91e1e26aSAlexander Pyhalov  * See the License for the specific language governing permissions
11*91e1e26aSAlexander Pyhalov  * and limitations under the License.
12*91e1e26aSAlexander Pyhalov  *
13*91e1e26aSAlexander Pyhalov  * When distributing Covered Code, include this CDDL HEADER in each
14*91e1e26aSAlexander Pyhalov  * file and include the License file at src/OPENSOLARIS.LICENSE.
15*91e1e26aSAlexander Pyhalov  * If applicable, add the following below this CDDL HEADER, with the
16*91e1e26aSAlexander Pyhalov  * fields enclosed by brackets "[]" replaced with your own identifying
17*91e1e26aSAlexander Pyhalov  * information: Portions Copyright [yyyy] [name of copyright owner]
18*91e1e26aSAlexander Pyhalov  *
19*91e1e26aSAlexander Pyhalov  * CDDL HEADER END
20*91e1e26aSAlexander Pyhalov  */
21*91e1e26aSAlexander Pyhalov /*
22*91e1e26aSAlexander Pyhalov  * COPYRIGHT AND PERMISSION NOTICE
23*91e1e26aSAlexander Pyhalov  *
24*91e1e26aSAlexander Pyhalov  * Copyright (c) 1991-2005 Unicode, Inc. All rights reserved. Distributed
25*91e1e26aSAlexander Pyhalov  * under the Terms of Use in http://www.unicode.org/copyright.html.
26*91e1e26aSAlexander Pyhalov  *
27*91e1e26aSAlexander Pyhalov  * This file has been modified by Sun Microsystems, Inc.
28*91e1e26aSAlexander Pyhalov  */
29*91e1e26aSAlexander Pyhalov /*
30*91e1e26aSAlexander Pyhalov  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
31*91e1e26aSAlexander Pyhalov  * Use is subject to license terms.
32*91e1e26aSAlexander Pyhalov  */
33*91e1e26aSAlexander Pyhalov 
34*91e1e26aSAlexander Pyhalov 
35*91e1e26aSAlexander Pyhalov #define GET(c)		((c) = *ip, ip++, ileft--)
36*91e1e26aSAlexander Pyhalov #define PUT(c)		(*op = (c), op++, oleft--)
37*91e1e26aSAlexander Pyhalov #define UNGET()		(ip--, ileft++)
38*91e1e26aSAlexander Pyhalov 
39*91e1e26aSAlexander Pyhalov #if	defined(DEBUG)
40*91e1e26aSAlexander Pyhalov #include <stdio.h>
41*91e1e26aSAlexander Pyhalov static const char	*debugmsg = "<empty>";
42*91e1e26aSAlexander Pyhalov #define	DEBUGMSG(msg)	debugmsg = (msg);
43*91e1e26aSAlexander Pyhalov #else	/* ! DEBUG */
44*91e1e26aSAlexander Pyhalov #define	DEBUGMSG(msg)	;
45*91e1e26aSAlexander Pyhalov #endif	/* DEBUG */
46*91e1e26aSAlexander Pyhalov 
47*91e1e26aSAlexander Pyhalov #define	RETERROR(no, msg) {\
48*91e1e26aSAlexander Pyhalov 		errno = (no);\
49*91e1e26aSAlexander Pyhalov 		DEBUGMSG(msg);\
50*91e1e26aSAlexander Pyhalov 		rv = ((size_t)-1);\
51*91e1e26aSAlexander Pyhalov 		goto ret;\
52*91e1e26aSAlexander Pyhalov 	}
53*91e1e26aSAlexander Pyhalov 
54*91e1e26aSAlexander Pyhalov #if	defined(DEBUG)
55*91e1e26aSAlexander Pyhalov #define	DEBUGPRINTERROR \
56*91e1e26aSAlexander Pyhalov 	if (rv == (size_t)-1) { \
57*91e1e26aSAlexander Pyhalov 		if (errno == EILSEQ) { \
58*91e1e26aSAlexander Pyhalov 			fprintf(stderr, "DEBUG: EILSEQ: %s\n", debugmsg); \
59*91e1e26aSAlexander Pyhalov 		} else if (errno == E2BIG) { \
60*91e1e26aSAlexander Pyhalov 			fprintf(stderr, "DEBUG: E2BIG: %s\n", debugmsg); \
61*91e1e26aSAlexander Pyhalov 		} else if (errno == EINVAL) { \
62*91e1e26aSAlexander Pyhalov 			fprintf(stderr, "DEBUG: EINVAL: %s\n", debugmsg); \
63*91e1e26aSAlexander Pyhalov 		} else { \
64*91e1e26aSAlexander Pyhalov 			fprintf(stderr, \
65*91e1e26aSAlexander Pyhalov 			"DEBUG: errno=%d: %s\n", errno, debugmsg); \
66*91e1e26aSAlexander Pyhalov 		} \
67*91e1e26aSAlexander Pyhalov 	}
68*91e1e26aSAlexander Pyhalov #else	/* !DEBUG */
69*91e1e26aSAlexander Pyhalov #define	DEBUGPRINTERROR	/* nop */
70*91e1e26aSAlexander Pyhalov #endif	/* DEBUG */
71*91e1e26aSAlexander Pyhalov 
72*91e1e26aSAlexander Pyhalov #define NGET(c, msg) \
73*91e1e26aSAlexander Pyhalov 	if (ileft-- == 0) {\
74*91e1e26aSAlexander Pyhalov 		RETERROR(EINVAL, msg)\
75*91e1e26aSAlexander Pyhalov 	} else {\
76*91e1e26aSAlexander Pyhalov 		(c) = *ip++;\
77*91e1e26aSAlexander Pyhalov 	}
78*91e1e26aSAlexander Pyhalov 
79*91e1e26aSAlexander Pyhalov #define NPUT(c, msg) \
80*91e1e26aSAlexander Pyhalov 	if (oleft-- == 0) {\
81*91e1e26aSAlexander Pyhalov 		RETERROR(E2BIG, msg)\
82*91e1e26aSAlexander Pyhalov 	} else {\
83*91e1e26aSAlexander Pyhalov 		*op++ = (c);\
84*91e1e26aSAlexander Pyhalov 	}
85*91e1e26aSAlexander Pyhalov 
86*91e1e26aSAlexander Pyhalov /* to be obsoleted; migrate to PUTU() in jfp_iconv_unicode.h */
87*91e1e26aSAlexander Pyhalov #if	defined(JFP_ICONV_TOCODE_UCS2)
88*91e1e26aSAlexander Pyhalov #define	PUTUCS2(uni, msg)	\
89*91e1e26aSAlexander Pyhalov 	if (write_unicode((unsigned int)uni, &op, &oleft, little, msg) \
90*91e1e26aSAlexander Pyhalov 			== (size_t)-1) { \
91*91e1e26aSAlexander Pyhalov 		rv = ((size_t)-1);\
92*91e1e26aSAlexander Pyhalov 		goto ret; \
93*91e1e26aSAlexander Pyhalov 	}
94*91e1e26aSAlexander Pyhalov #else	/* !JFP_ICONV_TOCODE_UCS2 */
95*91e1e26aSAlexander Pyhalov #define	PUTUCS2(ucs2, msg)	\
96*91e1e26aSAlexander Pyhalov 	if (ucs2 <= 0x7f) {\
97*91e1e26aSAlexander Pyhalov 		NPUT((unsigned char)(ucs2), msg);\
98*91e1e26aSAlexander Pyhalov 	} else if (ucs2 <= 0x7ff) {\
99*91e1e26aSAlexander Pyhalov 		NPUT((unsigned char)((((ucs2)>>6) & 0x1f) | 0xc0), msg);\
100*91e1e26aSAlexander Pyhalov 		NPUT((unsigned char)((((ucs2)>>0) & 0x3f) | 0x80), msg);\
101*91e1e26aSAlexander Pyhalov 	} else {\
102*91e1e26aSAlexander Pyhalov 		NPUT((unsigned char)((((ucs2)>>12) & 0x0f) | 0xe0), msg);\
103*91e1e26aSAlexander Pyhalov 		NPUT((unsigned char)((((ucs2)>>6) & 0x3f) | 0x80), msg);\
104*91e1e26aSAlexander Pyhalov 		NPUT((unsigned char)((((ucs2)>>0) & 0x3f) | 0x80), msg);\
105*91e1e26aSAlexander Pyhalov 	}
106*91e1e26aSAlexander Pyhalov #endif	/* JFP_ICONV_TOCODE_UCS2 */
107*91e1e26aSAlexander Pyhalov 
108*91e1e26aSAlexander Pyhalov #if	defined(JFP_ICONV_STATELESS)
109*91e1e26aSAlexander Pyhalov 
110*91e1e26aSAlexander Pyhalov #include	<stdlib.h>
111*91e1e26aSAlexander Pyhalov 
112*91e1e26aSAlexander Pyhalov static void *
113*91e1e26aSAlexander Pyhalov _icv_open_stateless(void)
114*91e1e26aSAlexander Pyhalov {
115*91e1e26aSAlexander Pyhalov 	void	*cd;
116*91e1e26aSAlexander Pyhalov 
117*91e1e26aSAlexander Pyhalov 	/*
118*91e1e26aSAlexander Pyhalov 	 * Do malloc() only to get address as unique conversion descriptor.
119*91e1e26aSAlexander Pyhalov 	 * Though iconv() specification doesn't describe the uniqueness,
120*91e1e26aSAlexander Pyhalov 	 * some existing applications may be assuming it.
121*91e1e26aSAlexander Pyhalov 	 * Unless call of malloc() here is raised as a problem, keep away
122*91e1e26aSAlexander Pyhalov 	 * from breaking the assumption.
123*91e1e26aSAlexander Pyhalov 	 */
124*91e1e26aSAlexander Pyhalov 
125*91e1e26aSAlexander Pyhalov 	if ((cd = malloc((size_t)1)) == NULL) {
126*91e1e26aSAlexander Pyhalov 		errno = ENOMEM;
127*91e1e26aSAlexander Pyhalov 		return ((void *)-1);
128*91e1e26aSAlexander Pyhalov 	} else {
129*91e1e26aSAlexander Pyhalov 		return (cd);
130*91e1e26aSAlexander Pyhalov 	}
131*91e1e26aSAlexander Pyhalov }
132*91e1e26aSAlexander Pyhalov 
133*91e1e26aSAlexander Pyhalov static void
134*91e1e26aSAlexander Pyhalov _icv_close_stateless(void *cd)
135*91e1e26aSAlexander Pyhalov {
136*91e1e26aSAlexander Pyhalov 	if (cd == NULL) {
137*91e1e26aSAlexander Pyhalov 		errno = EBADF;
138*91e1e26aSAlexander Pyhalov 	} else {
139*91e1e26aSAlexander Pyhalov 		free(cd);
140*91e1e26aSAlexander Pyhalov 	}
141*91e1e26aSAlexander Pyhalov 	return;
142*91e1e26aSAlexander Pyhalov }
143*91e1e26aSAlexander Pyhalov 
144*91e1e26aSAlexander Pyhalov #endif	/* ! JFP_ICONV_STATELESS */
145*91e1e26aSAlexander Pyhalov 
146*91e1e26aSAlexander Pyhalov #define ERR_RETURN	(-1)		/* result code on error */
147*91e1e26aSAlexander Pyhalov 
148*91e1e26aSAlexander Pyhalov /*
149*91e1e26aSAlexander Pyhalov  * ISXXXX(c) macros below assume (c) is of type unsigned char
150*91e1e26aSAlexander Pyhalov  */
151*91e1e26aSAlexander Pyhalov /* is a valid code as ascii? */
152*91e1e26aSAlexander Pyhalov #define ISASC(c)		((c) <= 0x7f)
153*91e1e26aSAlexander Pyhalov 
154*91e1e26aSAlexander Pyhalov /* is a valid code as C1 control? */
155*91e1e26aSAlexander Pyhalov #define ISC1CTRL(c)		(((c) >= 0x80) && ((c) <= 0x9f))
156*91e1e26aSAlexander Pyhalov 
157*91e1e26aSAlexander Pyhalov /* is a valid code as C1 control allowed in EUC? */
158*91e1e26aSAlexander Pyhalov #define ISC1CTRLEUC(c)		((((c) >= 0x80) && ((c) <= 0x8d)) ||\
159*91e1e26aSAlexander Pyhalov 					(((c) >= 0x90) && ((c) <= 0x9f)))
160*91e1e26aSAlexander Pyhalov 
161*91e1e26aSAlexander Pyhalov /* is a valid 1st or 2nd byte of EUC codeset 1? */
162*91e1e26aSAlexander Pyhalov #define ISCS1(c)		(((c) >= 0xa1) && ((c) <= 0xfe))
163*91e1e26aSAlexander Pyhalov 
164*91e1e26aSAlexander Pyhalov /* is a valid 1st byte of EUC codeset 1 and in range row 1 thru 84? */
165*91e1e26aSAlexander Pyhalov #define ISCS1_0208(c)		(((c) >= 0xa1) && ((c) <= 0xf4))
166*91e1e26aSAlexander Pyhalov 
167*91e1e26aSAlexander Pyhalov /* is a valid 1st byte of UDC area in EUC codeset 1? */
168*91e1e26aSAlexander Pyhalov #define ISCS1_UDC(c)		(((c) >= 0xf5) && ((c) <= 0xfe))
169*91e1e26aSAlexander Pyhalov 
170*91e1e26aSAlexander Pyhalov /* is a valid 2nd (1st byte is SS2) byte of EUC codeset 2? */
171*91e1e26aSAlexander Pyhalov #define ISCS2(c)		(((c) >= 0xa1) && ((c) <= 0xdf))
172*91e1e26aSAlexander Pyhalov 
173*91e1e26aSAlexander Pyhalov /* is a valid 2nd or 3rd (1st byte is SS3) byte of EUC codeset 3? */
174*91e1e26aSAlexander Pyhalov #define ISCS3(c)		(((c) >= 0xa1) && ((c) <= 0xfe))
175*91e1e26aSAlexander Pyhalov 
176*91e1e26aSAlexander Pyhalov /* is a valid 2nd (1st byte is SS3) byte of UDC area in EUC codeset 3? */
177*91e1e26aSAlexander Pyhalov #define ISCS3_UDC(c)		(((c) >= 0xf5) && ((c) <= 0xfe))
178*91e1e26aSAlexander Pyhalov 
179*91e1e26aSAlexander Pyhalov /* is a valid hankaku_katakana for SJIS? */
180*91e1e26aSAlexander Pyhalov #define ISSJKANA(c)		(((c) >= 0xa1) && ((c) <= 0xdf))
181*91e1e26aSAlexander Pyhalov 
182*91e1e26aSAlexander Pyhalov /* is a valid character for the first byte of SJIS multibyte? */
183*91e1e26aSAlexander Pyhalov #define ISSJMB_1(c)	((((c) >= 0x81) && ((c) <= 0x9f)) ||\
184*91e1e26aSAlexander Pyhalov 				 (((c) >= 0xe0) && ((c) <= 0xfc)))
185*91e1e26aSAlexander Pyhalov 
186*91e1e26aSAlexander Pyhalov /* is a valid character for the first byte of SJIS kanji? */
187*91e1e26aSAlexander Pyhalov #define ISSJKANJI1(c)	((((c) >= 0x81) && ((c) <= 0x9f)) ||\
188*91e1e26aSAlexander Pyhalov 				 (((c) >= 0xe0) && ((c) <= 0xea)) ||\
189*91e1e26aSAlexander Pyhalov 				 (((c) >= 0xf0) && ((c) <= 0xf4)))
190*91e1e26aSAlexander Pyhalov 
191*91e1e26aSAlexander Pyhalov /* is a valid character for the first byte of a part of Suppl. SJIS? */
192*91e1e26aSAlexander Pyhalov #define ISSJSUPKANJI1(c)	(((c) >= 0xf5) && ((c) <= 0xf9))
193*91e1e26aSAlexander Pyhalov 
194*91e1e26aSAlexander Pyhalov /* is a valid character for the first byte of SJIS UDC? */
195*91e1e26aSAlexander Pyhalov #define ISSJUDC_1(c)		(((c) >= 0xf0) && ((c) <= 0xf9))
196*91e1e26aSAlexander Pyhalov 
197*91e1e26aSAlexander Pyhalov /* is a valid character for the first byte of ibm character set */
198*91e1e26aSAlexander Pyhalov #define	ISSJIBM(c)		(((c) >= 0xfa) && ((c) <= 0xfc))
199*91e1e26aSAlexander Pyhalov 
200*91e1e26aSAlexander Pyhalov /* is a valid character for the first byte of ibm character set */
201*91e1e26aSAlexander Pyhalov #define	ISSJNECIBM(c)		(((c) >= 0xed) && ((c) <= 0xef))
202*91e1e26aSAlexander Pyhalov 
203*91e1e26aSAlexander Pyhalov /* is a valid character for the second byte of SJIS kanji? */
204*91e1e26aSAlexander Pyhalov #define ISSJKANJI2(c)	((((c) >= 0x40) && ((c) <= 0x7e)) ||\
205*91e1e26aSAlexander Pyhalov 					 (((c) >= 0x80) && ((c) <= 0xfc)))
206*91e1e26aSAlexander Pyhalov 
207*91e1e26aSAlexander Pyhalov /* is a valid character for UTF8 UDC ? */
208*91e1e26aSAlexander Pyhalov #define ISUTF8UDC(c)	(((c) >= 0xe000) && ((c) <= 0xf8ff))
209*91e1e26aSAlexander Pyhalov 
210*91e1e26aSAlexander Pyhalov #define CS_0			0		/* codeset 0 */
211*91e1e26aSAlexander Pyhalov #define CS_1			1		/* codeset 1 */
212*91e1e26aSAlexander Pyhalov #define CS_2			2		/* codeset 2 */
213*91e1e26aSAlexander Pyhalov #define CS_3			3		/* codeset 3 */
214*91e1e26aSAlexander Pyhalov 
215*91e1e26aSAlexander Pyhalov #define ST_INIT			0		/* init */
216*91e1e26aSAlexander Pyhalov #define ST_INCS1		1		/* in codeset 1 */
217*91e1e26aSAlexander Pyhalov #define ST_INCS2		2		/* in codeset 2 */
218*91e1e26aSAlexander Pyhalov #define ST_INCS3		3		/* in codeset 3 */
219*91e1e26aSAlexander Pyhalov #define ST_ESC			4		/* in ESC */
220*91e1e26aSAlexander Pyhalov #define ST_MBTOG0_1		5		/* in the designation of MB to G0 - 1 */
221*91e1e26aSAlexander Pyhalov #define ST_MBTOG0_2		6		/* in the designation of MB to G0 - 2 */
222*91e1e26aSAlexander Pyhalov #define ST_SBTOG0		7		/* in the designation of SB to G0 */
223*91e1e26aSAlexander Pyhalov #define ST_208REV_1		8		/* in the designation of JISX208-1990 */
224*91e1e26aSAlexander Pyhalov #define ST_208REV_2		9		/* in the designation of JISX208-1990 */
225*91e1e26aSAlexander Pyhalov #define ST_REV_AFT_ESC		10		/* in the designation of JISX208-1990 */
226*91e1e26aSAlexander Pyhalov #define ST_REV_AFT_MBTOG0_1	11		/* in the designation of JISX208-1990 */
227*91e1e26aSAlexander Pyhalov #define ST_REV_AFT_MBTOG0_2	12		/* in the designation of JISX208-1990 */
228*91e1e26aSAlexander Pyhalov 
229*91e1e26aSAlexander Pyhalov /*
230*91e1e26aSAlexander Pyhalov  * CODE SET 0
231*91e1e26aSAlexander Pyhalov  * ESC ( B   			: To ASCII
232*91e1e26aSAlexander Pyhalov  * ESC ( J			: To JIS X 0201 - 1976 ROMAN
233*91e1e26aSAlexander Pyhalov  * ESC ( @			: TO ISO 646 IRV
234*91e1e26aSAlexander Pyhalov  *
235*91e1e26aSAlexander Pyhalov  * CODE SET 1
236*91e1e26aSAlexander Pyhalov  * ESC & @ ESC $ ( B		: To JIS X 0208 - 1990
237*91e1e26aSAlexander Pyhalov  * ESC $ ( B			: To JIS X 0208 - 1983/1990
238*91e1e26aSAlexander Pyhalov  * ESC $ ( @			: To JIS X 0208 - 1978
239*91e1e26aSAlexander Pyhalov  * ESC $ B			: To JIS X 0208 - 1983/1990
240*91e1e26aSAlexander Pyhalov  * ESC $ @			: To JIS X 0208 - 1978
241*91e1e26aSAlexander Pyhalov  * ESC & @ ESC $ B		: To JIS X 0208 - 1983/1990
242*91e1e26aSAlexander Pyhalov  *
243*91e1e26aSAlexander Pyhalov  * CODE SET 2
244*91e1e26aSAlexander Pyhalov  * SO  					: G1 -> G
245*91e1e26aSAlexander Pyhalov  * SI  					: G0 -> G
246*91e1e26aSAlexander Pyhalov  * ESC ( I				: To JIS X 0201 - 1976 Katakana
247*91e1e26aSAlexander Pyhalov  *
248*91e1e26aSAlexander Pyhalov  * CODE SET 3
249*91e1e26aSAlexander Pyhalov  * ESC $ ( D			: To JIS X 0212 - 1990
250*91e1e26aSAlexander Pyhalov  * ESC $ D			: To JIS X 0212 - 1990
251*91e1e26aSAlexander Pyhalov  *
252*91e1e26aSAlexander Pyhalov  */
253*91e1e26aSAlexander Pyhalov 
254*91e1e26aSAlexander Pyhalov #define ESC				0x1b		/* Escape : 1/12 */
255*91e1e26aSAlexander Pyhalov #define SO				0x0e		/* Shift Out : 0/14 */
256*91e1e26aSAlexander Pyhalov #define SI				0x0f		/* Shift In  : 0/15 */
257*91e1e26aSAlexander Pyhalov 
258*91e1e26aSAlexander Pyhalov #define SBTOG0_1			0x28		/* ( : 2/8 */
259*91e1e26aSAlexander Pyhalov #define F_ASCII				0x42		/* B : 4/2 */
260*91e1e26aSAlexander Pyhalov #define F_X0201_RM			0x4a		/* J : 4/10 */
261*91e1e26aSAlexander Pyhalov #define F_ISO646			0x40		/* @ : 4/0 */
262*91e1e26aSAlexander Pyhalov #define F_X0201_KN			0x49		/* I : 4/9 */
263*91e1e26aSAlexander Pyhalov 
264*91e1e26aSAlexander Pyhalov #define MBTOG0_1			0x24		/* $ : 2/4 */
265*91e1e26aSAlexander Pyhalov #define MBTOG0_2			0x28		/* ( : 2/8 */
266*91e1e26aSAlexander Pyhalov #define F_X0208_83_90			0x42		/* B : 4/2 */
267*91e1e26aSAlexander Pyhalov #define F_X0208_78			0x40		/* @ : 4/0 */
268*91e1e26aSAlexander Pyhalov #define F_X0212_90			0x44		/* D : 4/4 */
269*91e1e26aSAlexander Pyhalov #define	X208REV_1			0x26		/* & : 2/6 */
270*91e1e26aSAlexander Pyhalov #define	X208REV_2			0x40		/* @ : 4/0 */
271*91e1e26aSAlexander Pyhalov 
272*91e1e26aSAlexander Pyhalov #define	CMASK				0x7f
273*91e1e26aSAlexander Pyhalov #define	CMSB				0x80
274*91e1e26aSAlexander Pyhalov 
275*91e1e26aSAlexander Pyhalov /* the byte length of ESC sequences */
276*91e1e26aSAlexander Pyhalov #define SEQ_SBTOG0			3			/* ESC + ( + F */
277*91e1e26aSAlexander Pyhalov #define SEQ_MBTOG0			4			/* ESC + $ + ( + F */
278*91e1e26aSAlexander Pyhalov #define SEQ_MBTOG0_O			3			/* ESC + $ + F */
279*91e1e26aSAlexander Pyhalov 
280*91e1e26aSAlexander Pyhalov /* the byte length of SO/SI */
281*91e1e26aSAlexander Pyhalov #define SEQ_SOSI			1			/* SO or SI */
282*91e1e26aSAlexander Pyhalov 
283*91e1e26aSAlexander Pyhalov /* the byte length of SS2/SS3 */
284*91e1e26aSAlexander Pyhalov #define SEQ_SS				1			/* SS2 or SS3 */
285*91e1e26aSAlexander Pyhalov 
286*91e1e26aSAlexander Pyhalov /* the byte length of JIS characters */
287*91e1e26aSAlexander Pyhalov #define JISW0				1			/* ASCII */
288*91e1e26aSAlexander Pyhalov #define JISW1				2			/* Kanji */
289*91e1e26aSAlexander Pyhalov #define JISW2				1			/* Hankaku Katakana */
290*91e1e26aSAlexander Pyhalov #define JISW3				2			/* Hojo Kanji */
291*91e1e26aSAlexander Pyhalov 
292*91e1e26aSAlexander Pyhalov /* the byte length of EUC characters */
293*91e1e26aSAlexander Pyhalov #define EUCW0				1			/* ASCII */
294*91e1e26aSAlexander Pyhalov #define EUCW1				2			/* Kanji */
295*91e1e26aSAlexander Pyhalov #define EUCW2				1			/* Hankaku Katakana */
296*91e1e26aSAlexander Pyhalov #define EUCW3				2			/* Hojo Kanji */
297*91e1e26aSAlexander Pyhalov #define SS2W				1			/* SS2 */
298*91e1e26aSAlexander Pyhalov #define SS3W				1			/* SS3 */
299*91e1e26aSAlexander Pyhalov 
300*91e1e26aSAlexander Pyhalov /* the byte length of SJIS characters */
301*91e1e26aSAlexander Pyhalov #define SJISW0				1			/* ASCII */
302*91e1e26aSAlexander Pyhalov #define SJISW1				2			/* Kanji/UDC */
303*91e1e26aSAlexander Pyhalov #define SJISW2				1			/* Hankaku Katakana */
304*91e1e26aSAlexander Pyhalov 
305*91e1e26aSAlexander Pyhalov #define EBCDIC0				1
306*91e1e26aSAlexander Pyhalov #define EBCDIC1				2
307*91e1e26aSAlexander Pyhalov #define EBCDIC2				1
308*91e1e26aSAlexander Pyhalov #define EBCDIC3				2
309*91e1e26aSAlexander Pyhalov 
310*91e1e26aSAlexander Pyhalov /* the byte length of unknown characters */
311*91e1e26aSAlexander Pyhalov #define UNKNOWNW			1
312*91e1e26aSAlexander Pyhalov 
313*91e1e26aSAlexander Pyhalov #define	TRUE	(1)
314*91e1e26aSAlexander Pyhalov #define	FALSE	(0)
315*91e1e26aSAlexander Pyhalov 
316*91e1e26aSAlexander Pyhalov /*
317*91e1e26aSAlexander Pyhalov  * sjtojis1[]:
318*91e1e26aSAlexander Pyhalov  * Directly convert 1st octet of Shift-JIS encoded 2bytes codes
319*91e1e26aSAlexander Pyhalov  * to the 1st octet of 7bit-JIS encoded 2bytes codes.
320*91e1e26aSAlexander Pyhalov  * Because the 8th bit is always ON, the size of this array
321*91e1e26aSAlexander Pyhalov  * can be limited to 128. (Precisely, 1st octet can vary between
322*91e1e26aSAlexander Pyhalov  * 0x81 and 0xfc, and correspondent 7bit-JIS value is between
323*91e1e26aSAlexander Pyhalov  * 0x21 and 0x7e. So we can use "0xff" as indicating invalid value.)
324*91e1e26aSAlexander Pyhalov  *
325*91e1e26aSAlexander Pyhalov  * Principal:
326*91e1e26aSAlexander Pyhalov  * 1: Subtract 0x80
327*91e1e26aSAlexander Pyhalov  * 2: Index the array by using the value above as index number.
328*91e1e26aSAlexander Pyhalov  * 3: Value "0xff" means the index number is invalid or, there's
329*91e1e26aSAlexander Pyhalov  *    no 7bit-JIS value that corresponds to.
330*91e1e26aSAlexander Pyhalov  *
331*91e1e26aSAlexander Pyhalov  * Note:
332*91e1e26aSAlexander Pyhalov  * 1: When the 2nd octet of Shift-JIS encoded 2bytes codes is
333*91e1e26aSAlexander Pyhalov  *    more than 0x9f, indexed value should be augumented by 1.
334*91e1e26aSAlexander Pyhalov  * 2: Some of Shift-JIS code points are mapped to JISX0208 plane
335*91e1e26aSAlexander Pyhalov  *    and others are JISX0212 plane.
336*91e1e26aSAlexander Pyhalov  *    Need to differentiate them before indexing and designate
337*91e1e26aSAlexander Pyhalov  *    appropriate character set. This table converts only code points
338*91e1e26aSAlexander Pyhalov  *    within each character set.
339*91e1e26aSAlexander Pyhalov  *
340*91e1e26aSAlexander Pyhalov  */
341*91e1e26aSAlexander Pyhalov static const unsigned char sjtojis1[] = {
342*91e1e26aSAlexander Pyhalov /* Values never be indexed */
343*91e1e26aSAlexander Pyhalov 0xff,
344*91e1e26aSAlexander Pyhalov /* Index 1KU - 62KU in JISX0208 */
345*91e1e26aSAlexander Pyhalov 0x21, 0x23, 0x25, 0x27, 0x29, 0x2b, 0x2d, 0x2f,
346*91e1e26aSAlexander Pyhalov 0x31, 0x33, 0x35, 0x37, 0x39, 0x3b, 0x3d, 0x3f,
347*91e1e26aSAlexander Pyhalov 0x41, 0x43, 0x45, 0x47, 0x49, 0x4b, 0x4d, 0x4f,
348*91e1e26aSAlexander Pyhalov 0x51, 0x53, 0x55, 0x57, 0x59, 0x5b, 0x5d,
349*91e1e26aSAlexander Pyhalov /* Values never be indexed */
350*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
351*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
352*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
353*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
354*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
355*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
356*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
357*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
358*91e1e26aSAlexander Pyhalov /* Index 63KU - 84KU in JISX0208 */
359*91e1e26aSAlexander Pyhalov                                           0x5f,
360*91e1e26aSAlexander Pyhalov 0x61, 0x63, 0x65, 0x67, 0x69, 0x6b, 0x6d, 0x6f,
361*91e1e26aSAlexander Pyhalov 0x71, 0x73,
362*91e1e26aSAlexander Pyhalov /* Values never be indexed */
363*91e1e26aSAlexander Pyhalov 0xff, 0xff,
364*91e1e26aSAlexander Pyhalov /* Followings will be mapped to 79KU - 84KU in JISX0212 (NEC/IBM) */
365*91e1e26aSAlexander Pyhalov /* 0x6f, 0x71, 0x73,						*/
366*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff,
367*91e1e26aSAlexander Pyhalov /* Followings will be mapped to 85KU - 94KU in JISX0208 (UDC) */
368*91e1e26aSAlexander Pyhalov 0x75, 0x77, 0x79, 0x7b, 0x7d,
369*91e1e26aSAlexander Pyhalov /* Followings will be mapped to 85KU - 94KU in JISX0212 (UDC) */
370*91e1e26aSAlexander Pyhalov 0x75, 0x77, 0x79, 0x7b, 0x7d,
371*91e1e26aSAlexander Pyhalov /* Followings will be mapped to 79KU - 84KU in JISX0212 (IBM) */
372*91e1e26aSAlexander Pyhalov /* 0x6f, 0x71, 0x73,						*/
373*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff,
374*91e1e26aSAlexander Pyhalov /* Values never be indexed */
375*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff
376*91e1e26aSAlexander Pyhalov };
377*91e1e26aSAlexander Pyhalov 
378*91e1e26aSAlexander Pyhalov /*
379*91e1e26aSAlexander Pyhalov  * sjtojis2[]:
380*91e1e26aSAlexander Pyhalov  * Directly convert 2nd octet of Shift-JIS encoded 2bytes codes
381*91e1e26aSAlexander Pyhalov  * to the 2nd octet of 7bit-JIS encoded 2bytes codes.
382*91e1e26aSAlexander Pyhalov  * 2nd octet in Shift-JIS can vary between 0x40 and 0xfc(except 0x7f)
383*91e1e26aSAlexander Pyhalov  * and the correspondent 7bit-JIS octet is between 0x21 and 0x7e.
384*91e1e26aSAlexander Pyhalov  * (So we can use '0xff' as indicating invalid value.)
385*91e1e26aSAlexander Pyhalov  *
386*91e1e26aSAlexander Pyhalov  * Principal:
387*91e1e26aSAlexander Pyhalov  * 1: Index the array by using the value above as index number.
388*91e1e26aSAlexander Pyhalov  * 2: Value "0xff" means the index number is invalid or, there's
389*91e1e26aSAlexander Pyhalov  *    no 7bit-JIS value that corresponds to.
390*91e1e26aSAlexander Pyhalov  *
391*91e1e26aSAlexander Pyhalov  * Note:
392*91e1e26aSAlexander Pyhalov  * 1: Some of Shift-JIS code points are mapped to JISX0208 plane
393*91e1e26aSAlexander Pyhalov  *    and others to JISX0212 plane.
394*91e1e26aSAlexander Pyhalov  *    Need to differentiate them before indexing and designate
395*91e1e26aSAlexander Pyhalov  *    appropriate character set. This table converts only code points
396*91e1e26aSAlexander Pyhalov  *    within each character set.
397*91e1e26aSAlexander Pyhalov  *
398*91e1e26aSAlexander Pyhalov  */
399*91e1e26aSAlexander Pyhalov static const unsigned char sjtojis2[] = {
400*91e1e26aSAlexander Pyhalov /* Values never be indexed */
401*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
402*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
403*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
404*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
405*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
406*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
407*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
408*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
409*91e1e26aSAlexander Pyhalov /* Followings are 2nd octet for 'odd' KU */
410*91e1e26aSAlexander Pyhalov 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
411*91e1e26aSAlexander Pyhalov 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
412*91e1e26aSAlexander Pyhalov 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
413*91e1e26aSAlexander Pyhalov 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
414*91e1e26aSAlexander Pyhalov 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
415*91e1e26aSAlexander Pyhalov 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
416*91e1e26aSAlexander Pyhalov 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
417*91e1e26aSAlexander Pyhalov 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
418*91e1e26aSAlexander Pyhalov /* Values never be indexed */
419*91e1e26aSAlexander Pyhalov 0xff,
420*91e1e26aSAlexander Pyhalov /* Followings are 2nd octet for 'odd' KU */
421*91e1e26aSAlexander Pyhalov                                           0x60,
422*91e1e26aSAlexander Pyhalov 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
423*91e1e26aSAlexander Pyhalov 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
424*91e1e26aSAlexander Pyhalov 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
425*91e1e26aSAlexander Pyhalov 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e,
426*91e1e26aSAlexander Pyhalov /* Followings are 2nd octet for 'even' KU */
427*91e1e26aSAlexander Pyhalov 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
428*91e1e26aSAlexander Pyhalov 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
429*91e1e26aSAlexander Pyhalov 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
430*91e1e26aSAlexander Pyhalov 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
431*91e1e26aSAlexander Pyhalov 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
432*91e1e26aSAlexander Pyhalov 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
433*91e1e26aSAlexander Pyhalov 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
434*91e1e26aSAlexander Pyhalov 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60,
435*91e1e26aSAlexander Pyhalov 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
436*91e1e26aSAlexander Pyhalov 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
437*91e1e26aSAlexander Pyhalov 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
438*91e1e26aSAlexander Pyhalov 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e,
439*91e1e26aSAlexander Pyhalov /* Values never be indexed */
440*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff
441*91e1e26aSAlexander Pyhalov };
442*91e1e26aSAlexander Pyhalov 
443*91e1e26aSAlexander Pyhalov /*
444*91e1e26aSAlexander Pyhalov  * sjtoibmext[]:
445*91e1e26aSAlexander Pyhalov  * Directly convert Shift-JIS encoded 2bytes codes
446*91e1e26aSAlexander Pyhalov  * to the EUC encoded 2bytes codes.
447*91e1e26aSAlexander Pyhalov  * This table is used for "IBM Extended Character Set" only.
448*91e1e26aSAlexander Pyhalov  *
449*91e1e26aSAlexander Pyhalov  * Principal:
450*91e1e26aSAlexander Pyhalov  * 1: Subtract 0xfa40.
451*91e1e26aSAlexander Pyhalov  * 2: Index the array by using the value above as index number.
452*91e1e26aSAlexander Pyhalov  * 3: Value "0xffff" means the index number is invalid or, there's
453*91e1e26aSAlexander Pyhalov  *    no EUC value that corresponds to.
454*91e1e26aSAlexander Pyhalov  *
455*91e1e26aSAlexander Pyhalov  * Note: The SJIS code points, 0xfa54 and 0xfa5b are mapped to JIS208
456*91e1e26aSAlexander Pyhalov  *       hence they are NOT mapped with tables below.
457*91e1e26aSAlexander Pyhalov  *       (They are mapped to 0xa2cc and 0xa2e8 in JIS208 respectively.)
458*91e1e26aSAlexander Pyhalov  */
459*91e1e26aSAlexander Pyhalov static const unsigned short sjtoibmext[] = {
460*91e1e26aSAlexander Pyhalov 0xf3f3, 0xf3f4, 0xf3f5, 0xf3f6, 0xf3f7, 0xf3f8, 0xf3f9, 0xf3fa, /* 0xfa47 */
461*91e1e26aSAlexander Pyhalov 0xf3fb, 0xf3fc, 0xf3fd, 0xf3fe, 0xf4a1, 0xf4a2, 0xf4a3, 0xf4a4,
462*91e1e26aSAlexander Pyhalov 0xf4a5, 0xf4a6, 0xf4a7, 0xf4a8, 0xffff, 0xa2c3, 0xf4a9, 0xf4aa,
463*91e1e26aSAlexander Pyhalov 0xf4ab, 0xf4ac, 0xf4ad, 0xffff, 0xd4e3, 0xdcdf, 0xe4e9, 0xe3f8,
464*91e1e26aSAlexander Pyhalov 0xd9a1, 0xb1bb, 0xf4ae, 0xc2ad, 0xc3fc, 0xe4d0, 0xc2bf, 0xbcf4,
465*91e1e26aSAlexander Pyhalov 0xb0a9, 0xb0c8, 0xf4af, 0xb0d2, 0xb0d4, 0xb0e3, 0xb0ee, 0xb1a7,
466*91e1e26aSAlexander Pyhalov 0xb1a3, 0xb1ac, 0xb1a9, 0xb1be, 0xb1df, 0xb1d8, 0xb1c8, 0xb1d7,
467*91e1e26aSAlexander Pyhalov 0xb1e3, 0xb1f4, 0xb1e1, 0xb2a3, 0xf4b0, 0xb2bb, 0xb2e6, 0xffff,
468*91e1e26aSAlexander Pyhalov 0xb2ed, 0xb2f5, 0xb2fc, 0xf4b1, 0xb3b5, 0xb3d8, 0xb3db, 0xb3e5,
469*91e1e26aSAlexander Pyhalov 0xb3ee, 0xb3fb, 0xf4b2, 0xf4b3, 0xb4c0, 0xb4c7, 0xb4d0, 0xb4de,
470*91e1e26aSAlexander Pyhalov 0xf4b4, 0xb5aa, 0xf4b5, 0xb5af, 0xb5c4, 0xb5e8, 0xf4b6, 0xb7c2,
471*91e1e26aSAlexander Pyhalov 0xb7e4, 0xb7e8, 0xb7e7, 0xf4b7, 0xf4b8, 0xf4b9, 0xb8ce, 0xb8e1,
472*91e1e26aSAlexander Pyhalov 0xb8f5, 0xb8f7, 0xb8f8, 0xb8fc, 0xb9af, 0xb9b7, 0xbabe, 0xbadb,
473*91e1e26aSAlexander Pyhalov 0xcdaa, 0xbae1, 0xf4ba, 0xbaeb, 0xbbb3, 0xbbb8, 0xf4bb, 0xbbca,
474*91e1e26aSAlexander Pyhalov 0xf4bc, 0xf4bd, 0xbbd0, 0xbbde, 0xbbf4, 0xbbf5, 0xbbf9, 0xbce4,
475*91e1e26aSAlexander Pyhalov 0xbced, 0xbcfe, 0xf4be, 0xbdc2, 0xbde7, 0xf4bf, 0xbdf0, 0xbeb0,
476*91e1e26aSAlexander Pyhalov 0xbeac, 0xf4c0, 0xbeb3, 0xbebd, 0xbecd, 0xbec9, 0xbee4, 0xbfa8,
477*91e1e26aSAlexander Pyhalov 0xbfc9, 0xc0c4, 0xc0e4, 0xc0f4, 0xc1a6, 0xf4c1, 0xc1f5, 0xc1fc,
478*91e1e26aSAlexander Pyhalov 0xf4c2, 0xc1f8, 0xc2ab, 0xc2a1, 0xc2a5, 0xf4c3, 0xc2b8, 0xc2ba,
479*91e1e26aSAlexander Pyhalov 0xf4c4, 0xc2c4, 0xc2d2, 0xc2d7, 0xc2db, 0xc2de, 0xc2ed, 0xc2f0,
480*91e1e26aSAlexander Pyhalov 0xf4c5, 0xc3a1, 0xc3b5, 0xc3c9, 0xc3b9, 0xf4c6, 0xc3d8, 0xc3fe,
481*91e1e26aSAlexander Pyhalov 0xf4c7, 0xc4cc, 0xf4c8, 0xc4d9, 0xc4ea, 0xc4fd, 0xf4c9, 0xc5a7,
482*91e1e26aSAlexander Pyhalov 0xc5b5, 0xc5b6, 0xf4ca, 0xc5d5, 0xc6b8, 0xc6d7, 0xc6e0, 0xc6ea,
483*91e1e26aSAlexander Pyhalov 0xc6e3, 0xc7a1, 0xc7ab, 0xc7c7, 0xc7c3, 0xffff, 0xffff, 0xffff,
484*91e1e26aSAlexander Pyhalov 0xc7cb, 0xc7cf, 0xc7d9, 0xf4cb, 0xf4cc, 0xc7e6, 0xc7ee, 0xc7fc, /* 0xfb47 */
485*91e1e26aSAlexander Pyhalov 0xc7eb, 0xc7f0, 0xc8b1, 0xc8e5, 0xc8f8, 0xc9a6, 0xc9ab, 0xc9ad,
486*91e1e26aSAlexander Pyhalov 0xf4cd, 0xc9ca, 0xc9d3, 0xc9e9, 0xc9e3, 0xc9fc, 0xc9f4, 0xc9f5,
487*91e1e26aSAlexander Pyhalov 0xf4ce, 0xcab3, 0xcabd, 0xcaef, 0xcaf1, 0xcbae, 0xf4cf, 0xcbca,
488*91e1e26aSAlexander Pyhalov 0xcbe6, 0xcbea, 0xcbf0, 0xcbf4, 0xcbee, 0xcca5, 0xcbf9, 0xccab,
489*91e1e26aSAlexander Pyhalov 0xccae, 0xccad, 0xccb2, 0xccc2, 0xccd0, 0xccd9, 0xf4d0, 0xcdbb,
490*91e1e26aSAlexander Pyhalov 0xf4d1, 0xcebb, 0xf4d2, 0xceba, 0xcec3, 0xf4d3, 0xcef2, 0xb3dd,
491*91e1e26aSAlexander Pyhalov 0xcfd5, 0xcfe2, 0xcfe9, 0xcfed, 0xf4d4, 0xf4d5, 0xf4d6, 0xffff,
492*91e1e26aSAlexander Pyhalov 0xf4d7, 0xd0e5, 0xf4d8, 0xd0e9, 0xd1e8, 0xf4d9, 0xf4da, 0xd1ec,
493*91e1e26aSAlexander Pyhalov 0xd2bb, 0xf4db, 0xd3e1, 0xd3e8, 0xd4a7, 0xf4dc, 0xf4dd, 0xd4d4,
494*91e1e26aSAlexander Pyhalov 0xd4f2, 0xd5ae, 0xf4de, 0xd7de, 0xf4df, 0xd8a2, 0xd8b7, 0xd8c1,
495*91e1e26aSAlexander Pyhalov 0xd8d1, 0xd8f4, 0xd9c6, 0xd9c8, 0xd9d1, 0xf4e0, 0xf4e1, 0xf4e2,
496*91e1e26aSAlexander Pyhalov 0xf4e3, 0xf4e4, 0xdcd3, 0xddc8, 0xddd4, 0xddea, 0xddfa, 0xdea4,
497*91e1e26aSAlexander Pyhalov 0xdeb0, 0xf4e5, 0xdeb5, 0xdecb, 0xf4e6, 0xdfb9, 0xf4e7, 0xdfc3,
498*91e1e26aSAlexander Pyhalov 0xf4e8, 0xf4e9, 0xe0d9, 0xf4ea, 0xf4eb, 0xe1e2, 0xf4ec, 0xf4ed,
499*91e1e26aSAlexander Pyhalov 0xf4ee, 0xe2c7, 0xe3a8, 0xe3a6, 0xe3a9, 0xe3af, 0xe3b0, 0xe3aa,
500*91e1e26aSAlexander Pyhalov 0xe3ab, 0xe3bc, 0xe3c1, 0xe3bf, 0xe3d5, 0xe3d8, 0xe3d6, 0xe3df,
501*91e1e26aSAlexander Pyhalov 0xe3e3, 0xe3e1, 0xe3d4, 0xe3e9, 0xe4a6, 0xe3f1, 0xe3f2, 0xe4cb,
502*91e1e26aSAlexander Pyhalov 0xe4c1, 0xe4c3, 0xe4be, 0xf4ef, 0xe4c0, 0xe4c7, 0xe4bf, 0xe4e0,
503*91e1e26aSAlexander Pyhalov 0xe4de, 0xe4d1, 0xf4f0, 0xe4dc, 0xe4d2, 0xe4db, 0xe4d4, 0xe4fa,
504*91e1e26aSAlexander Pyhalov 0xe4ef, 0xe5b3, 0xe5bf, 0xe5c9, 0xe5d0, 0xe5e2, 0xe5ea, 0xe5eb,
505*91e1e26aSAlexander Pyhalov 0xf4f1, 0xf4f2, 0xf4f3, 0xe6e8, 0xe6ef, 0xe7ac, 0xf4f4, 0xe7ae,
506*91e1e26aSAlexander Pyhalov 0xf4f5, 0xe7b1, 0xf4f6, 0xe7b2, 0xe8b1, 0xe8b6, 0xf4f7, 0xf4f8,
507*91e1e26aSAlexander Pyhalov 0xe8dd, 0xf4f9, 0xf4fa, 0xe9d1, 0xf4fb, 0xffff, 0xffff, 0xffff,
508*91e1e26aSAlexander Pyhalov 0xe9ed, 0xeacd, 0xf4fc, 0xeadb, 0xeae6, 0xeaea, 0xeba5, 0xebfb, /* 0xfc47 */
509*91e1e26aSAlexander Pyhalov 0xebfa, 0xf4fd, 0xecd6, 0xf4fe, 0xffff, 0xffff, 0xffff, 0xffff,
510*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
511*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
512*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
513*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
514*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
515*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
516*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
517*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
518*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
519*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
520*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
521*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
522*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
523*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
524*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
525*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
526*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
527*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
528*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
529*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
530*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
531*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
532*91e1e26aSAlexander Pyhalov };
533*91e1e26aSAlexander Pyhalov /*
534*91e1e26aSAlexander Pyhalov  * jis208tosj1[]:
535*91e1e26aSAlexander Pyhalov  * Directly convert 1st octet of JISX0208 encoded 2bytes codes
536*91e1e26aSAlexander Pyhalov  * to the 1st octet of Shift-JIS encoded 2bytes codes.
537*91e1e26aSAlexander Pyhalov  * Because the 8th bit is always OFF, the size of this array
538*91e1e26aSAlexander Pyhalov  * can be limited to 128. (Precisely, 1st octet can vary between
539*91e1e26aSAlexander Pyhalov  * 0x21 and 0x7e, and the correspondent Shift-JIS code is
540*91e1e26aSAlexander Pyhalov  * between 0x81 and 0xfc. So we can use "0xff" as indicating invalid
541*91e1e26aSAlexander Pyhalov  * value.)
542*91e1e26aSAlexander Pyhalov  *
543*91e1e26aSAlexander Pyhalov  * Principal:
544*91e1e26aSAlexander Pyhalov  * 1: Index the array by using the value above as index number.
545*91e1e26aSAlexander Pyhalov  * 2: Value "0xff" means the index number is invalid or, there's
546*91e1e26aSAlexander Pyhalov  *    no Shift-JIS value that corresponds to.
547*91e1e26aSAlexander Pyhalov  *
548*91e1e26aSAlexander Pyhalov  * Note:
549*91e1e26aSAlexander Pyhalov  * 1: Some of Shift-JIS code points are mapped to JISX0208 plane
550*91e1e26aSAlexander Pyhalov  *    and others to JISX0212 plane.
551*91e1e26aSAlexander Pyhalov  *    Need to differentiate them before indexing and designate
552*91e1e26aSAlexander Pyhalov  *    appropriate character set. This table converts only code points
553*91e1e26aSAlexander Pyhalov  *    within each character set.
554*91e1e26aSAlexander Pyhalov  *
555*91e1e26aSAlexander Pyhalov  */
556*91e1e26aSAlexander Pyhalov static const unsigned char jis208tosj1[] = {
557*91e1e26aSAlexander Pyhalov /* Values never be indexed */
558*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
559*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
560*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
561*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
562*91e1e26aSAlexander Pyhalov 0xff,
563*91e1e26aSAlexander Pyhalov /* Index 1KU - 62KU in JISX0208 */
564*91e1e26aSAlexander Pyhalov       0x81, 0x81, 0x82, 0x82, 0x83, 0x83, 0x84,
565*91e1e26aSAlexander Pyhalov 0x84, 0x85, 0x85, 0x86, 0x86, 0x87, 0x87, 0x88,
566*91e1e26aSAlexander Pyhalov 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b, 0x8b, 0x8c,
567*91e1e26aSAlexander Pyhalov 0x8c, 0x8d, 0x8d, 0x8e, 0x8e, 0x8f, 0x8f, 0x90,
568*91e1e26aSAlexander Pyhalov 0x90, 0x91, 0x91, 0x92, 0x92, 0x93, 0x93, 0x94,
569*91e1e26aSAlexander Pyhalov 0x94, 0x95, 0x95, 0x96, 0x96, 0x97, 0x97, 0x98,
570*91e1e26aSAlexander Pyhalov 0x98, 0x99, 0x99, 0x9a, 0x9a, 0x9b, 0x9b, 0x9c,
571*91e1e26aSAlexander Pyhalov 0x9c, 0x9d, 0x9d, 0x9e, 0x9e, 0x9f, 0x9f,
572*91e1e26aSAlexander Pyhalov /* Index 63KU - 84KU in JISX0208 */
573*91e1e26aSAlexander Pyhalov                                           0xe0,
574*91e1e26aSAlexander Pyhalov 0xe0, 0xe1, 0xe1, 0xe2, 0xe2, 0xe3, 0xe3, 0xe4,
575*91e1e26aSAlexander Pyhalov 0xe4, 0xe5, 0xe5, 0xe6, 0xe6, 0xe7, 0xe7, 0xe8,
576*91e1e26aSAlexander Pyhalov 0xe8, 0xe9, 0xe9, 0xea, 0xea,
577*91e1e26aSAlexander Pyhalov /* Followings are mapped to "UDC" area in Shift-JIS */
578*91e1e26aSAlexander Pyhalov                               0xf0, 0xf0, 0xf1,
579*91e1e26aSAlexander Pyhalov 0xf1, 0xf2, 0xf2, 0xf3, 0xf3, 0xf4, 0xf4,
580*91e1e26aSAlexander Pyhalov /* Values never be indexed */
581*91e1e26aSAlexander Pyhalov 0xff
582*91e1e26aSAlexander Pyhalov };
583*91e1e26aSAlexander Pyhalov 
584*91e1e26aSAlexander Pyhalov /*
585*91e1e26aSAlexander Pyhalov  * jis212tosj1[]:
586*91e1e26aSAlexander Pyhalov  * Directly convert 1st octet of JISX0212 encoded 2bytes codes
587*91e1e26aSAlexander Pyhalov  * to the 1st octet of Shift-JIS encoded 2bytes codes.
588*91e1e26aSAlexander Pyhalov  * Because the 8th bit is always OFF, the size of this array
589*91e1e26aSAlexander Pyhalov  * can be limited to 128. (Precisely, 1st octet can vary between
590*91e1e26aSAlexander Pyhalov  * 0x21 and 0x7e, and the correspondent Shift-JIS code is
591*91e1e26aSAlexander Pyhalov  * between 0x81 and 0xfc. So we can use "0xff" as indicating invalid
592*91e1e26aSAlexander Pyhalov  * value.)
593*91e1e26aSAlexander Pyhalov  *
594*91e1e26aSAlexander Pyhalov  * Principal:
595*91e1e26aSAlexander Pyhalov  * 1: Index the array by using the value above as index number.
596*91e1e26aSAlexander Pyhalov  * 2: Value "0xff" means the index number is invalid or, there's
597*91e1e26aSAlexander Pyhalov  *    no Shift-JIS value that corresponds to.
598*91e1e26aSAlexander Pyhalov  *
599*91e1e26aSAlexander Pyhalov  * Note:
600*91e1e26aSAlexander Pyhalov  * 1: Most G3 characters cannot map to Shift-JIS coded space.
601*91e1e26aSAlexander Pyhalov  *    (Such characters are mapped to unique code point. In this
602*91e1e26aSAlexander Pyhalov  *    table, it is 0x222e in JISX0208.)
603*91e1e26aSAlexander Pyhalov  * 2: Some of Shift-JIS code points are mapped to JISX0208 plane
604*91e1e26aSAlexander Pyhalov  *    and others to JISX0212 plane.
605*91e1e26aSAlexander Pyhalov  *    Need to differentiate them before indexing and designate
606*91e1e26aSAlexander Pyhalov  *    appropriate character set. This table converts only code points
607*91e1e26aSAlexander Pyhalov  *    within each character set.
608*91e1e26aSAlexander Pyhalov  *
609*91e1e26aSAlexander Pyhalov  */
610*91e1e26aSAlexander Pyhalov static const unsigned char jis212tosj1[] = {
611*91e1e26aSAlexander Pyhalov /* Values never be indexed */
612*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
613*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
614*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
615*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
616*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
617*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
618*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
619*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
620*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
621*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
622*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
623*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
624*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
625*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
626*91e1e26aSAlexander Pyhalov /* Followings are mapped to "NEC/IBM(?)" area in Shift-JIS */
627*91e1e26aSAlexander Pyhalov /*                                          0xfa,	*/
628*91e1e26aSAlexander Pyhalov /* 0xfa, 0xfb, 0xfb, 0xfc, 0xfc,			*/
629*91e1e26aSAlexander Pyhalov                                           0xff,
630*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff,
631*91e1e26aSAlexander Pyhalov /* Followings are mapped to "UDC" area in Shift-JIS */
632*91e1e26aSAlexander Pyhalov                               0xf5, 0xf5, 0xf6,
633*91e1e26aSAlexander Pyhalov 0xf6, 0xf7, 0xf7, 0xf8, 0xf8, 0xf9, 0xf9,
634*91e1e26aSAlexander Pyhalov /* Values never be indexed */
635*91e1e26aSAlexander Pyhalov 0xff
636*91e1e26aSAlexander Pyhalov };
637*91e1e26aSAlexander Pyhalov 
638*91e1e26aSAlexander Pyhalov /*
639*91e1e26aSAlexander Pyhalov  * jistosj2[]:
640*91e1e26aSAlexander Pyhalov  * Directly convert 2nd octet of 7bit-JIS encoded 2bytes codes
641*91e1e26aSAlexander Pyhalov  * to the 2nd octet of Shift-JIS encoded 2bytes codes.
642*91e1e26aSAlexander Pyhalov  * Although the source code may have the same value between
643*91e1e26aSAlexander Pyhalov  * JISX0208 and JISX0212, the destination code point can vary with regard to
644*91e1e26aSAlexander Pyhalov  * the eveness(oddness) of 'KU' number.
645*91e1e26aSAlexander Pyhalov  *
646*91e1e26aSAlexander Pyhalov  * Principal:
647*91e1e26aSAlexander Pyhalov  * 1: Add 0x80 if 'KU' number is even.
648*91e1e26aSAlexander Pyhalov  * 2: Index the array by using the value above as index number.
649*91e1e26aSAlexander Pyhalov  * 3: Value "0xff" means the index number is invalid or, there's
650*91e1e26aSAlexander Pyhalov  *    no Shift-JIS value that corresponds to.
651*91e1e26aSAlexander Pyhalov  *
652*91e1e26aSAlexander Pyhalov  * Note:
653*91e1e26aSAlexander Pyhalov  * 1: Use this table to map the 2nd octet of both JISX0208
654*91e1e26aSAlexander Pyhalov  *    and JISX0212.
655*91e1e26aSAlexander Pyhalov  *
656*91e1e26aSAlexander Pyhalov  */
657*91e1e26aSAlexander Pyhalov static const unsigned char jistosj2[] = {
658*91e1e26aSAlexander Pyhalov /* Values never be indexed */
659*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
660*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
661*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
662*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
663*91e1e26aSAlexander Pyhalov 0xff,
664*91e1e26aSAlexander Pyhalov /* Index 1TEN - 63TEN in 'odd KU' */
665*91e1e26aSAlexander Pyhalov       0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
666*91e1e26aSAlexander Pyhalov 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e,
667*91e1e26aSAlexander Pyhalov 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,
668*91e1e26aSAlexander Pyhalov 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e,
669*91e1e26aSAlexander Pyhalov 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
670*91e1e26aSAlexander Pyhalov 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e,
671*91e1e26aSAlexander Pyhalov 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
672*91e1e26aSAlexander Pyhalov 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e,
673*91e1e26aSAlexander Pyhalov /* Index 64TEN - 94TEN in 'odd KU' */
674*91e1e26aSAlexander Pyhalov 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
675*91e1e26aSAlexander Pyhalov 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
676*91e1e26aSAlexander Pyhalov 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
677*91e1e26aSAlexander Pyhalov 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e,
678*91e1e26aSAlexander Pyhalov /* Values never be indexed */
679*91e1e26aSAlexander Pyhalov                                           0xff,
680*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
681*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
682*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
683*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
684*91e1e26aSAlexander Pyhalov 0xff,
685*91e1e26aSAlexander Pyhalov /* Index 1TEN - 63TEN in 'even KU' */
686*91e1e26aSAlexander Pyhalov       0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5,
687*91e1e26aSAlexander Pyhalov 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad,
688*91e1e26aSAlexander Pyhalov 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5,
689*91e1e26aSAlexander Pyhalov 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd,
690*91e1e26aSAlexander Pyhalov 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5,
691*91e1e26aSAlexander Pyhalov 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd,
692*91e1e26aSAlexander Pyhalov 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5,
693*91e1e26aSAlexander Pyhalov 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd,
694*91e1e26aSAlexander Pyhalov 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5,
695*91e1e26aSAlexander Pyhalov 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed,
696*91e1e26aSAlexander Pyhalov 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5,
697*91e1e26aSAlexander Pyhalov 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc,
698*91e1e26aSAlexander Pyhalov /* Values never be indexed */
699*91e1e26aSAlexander Pyhalov 0xff
700*91e1e26aSAlexander Pyhalov };
701*91e1e26aSAlexander Pyhalov 
702*91e1e26aSAlexander Pyhalov #define	JGETA	(0x222e)
703*91e1e26aSAlexander Pyhalov #define	EGETA	(0xa2ae)
704*91e1e26aSAlexander Pyhalov #define	PGETA	(0x81ac)
705*91e1e26aSAlexander Pyhalov 
706*91e1e26aSAlexander Pyhalov /*
707*91e1e26aSAlexander Pyhalov  * Remap NEC/IBM codes to IBM codes
708*91e1e26aSAlexander Pyhalov  * if dest == 0xffff, that means the source
709*91e1e26aSAlexander Pyhalov  * code point is illegal in the current spec.
710*91e1e26aSAlexander Pyhalov  */
711*91e1e26aSAlexander Pyhalov 
712*91e1e26aSAlexander Pyhalov  #define REMAP_NEC(dest) \
713*91e1e26aSAlexander Pyhalov 	if ((0xed40 <= dest) && \
714*91e1e26aSAlexander Pyhalov 		(dest <= 0xed62)) { \
715*91e1e26aSAlexander Pyhalov 		dest += 0xd1c; \
716*91e1e26aSAlexander Pyhalov 	} else if ((0xed63 <= dest) && \
717*91e1e26aSAlexander Pyhalov 		(dest <= 0xed7e)) { \
718*91e1e26aSAlexander Pyhalov 		dest += 0xd1d; \
719*91e1e26aSAlexander Pyhalov 	} else if ((0xed80 <= dest) && \
720*91e1e26aSAlexander Pyhalov 		(dest <= 0xede0)) { \
721*91e1e26aSAlexander Pyhalov 		dest += 0xd1c; \
722*91e1e26aSAlexander Pyhalov 	} else if ((0xede1 <= dest) && \
723*91e1e26aSAlexander Pyhalov 		(dest <= 0xedfc)) { \
724*91e1e26aSAlexander Pyhalov 		dest += 0xd5f; \
725*91e1e26aSAlexander Pyhalov 	} else if ((0xee40 <= dest) && \
726*91e1e26aSAlexander Pyhalov 		(dest <= 0xee62)) { \
727*91e1e26aSAlexander Pyhalov 		dest += 0xd1c; \
728*91e1e26aSAlexander Pyhalov 	} else if ((0xee63 <= dest) && \
729*91e1e26aSAlexander Pyhalov 		(dest <= 0xee7e)) { \
730*91e1e26aSAlexander Pyhalov 		dest += 0xd1d; \
731*91e1e26aSAlexander Pyhalov 	} else if ((0xee80 <= dest) && \
732*91e1e26aSAlexander Pyhalov 		(dest <= 0xeee0)) { \
733*91e1e26aSAlexander Pyhalov 		dest += 0xd1c; \
734*91e1e26aSAlexander Pyhalov 	} else if ((0xeee1 <= dest) && \
735*91e1e26aSAlexander Pyhalov 		(dest <= 0xeeec)) { \
736*91e1e26aSAlexander Pyhalov 		dest += 0xd5f; \
737*91e1e26aSAlexander Pyhalov 	} else if ((0xeeef <= dest) && \
738*91e1e26aSAlexander Pyhalov 		(dest <= 0xeef8)) { \
739*91e1e26aSAlexander Pyhalov 		dest += 0xb51; \
740*91e1e26aSAlexander Pyhalov 	} else if ((0xeef9 <= dest) && \
741*91e1e26aSAlexander Pyhalov 		(dest <= 0xeefc)) { \
742*91e1e26aSAlexander Pyhalov 		dest += 0xb5b; \
743*91e1e26aSAlexander Pyhalov 	} else { \
744*91e1e26aSAlexander Pyhalov 		dest = 0xffff; \
745*91e1e26aSAlexander Pyhalov 	}
746*91e1e26aSAlexander Pyhalov 
747*91e1e26aSAlexander Pyhalov #define CHECK2BIG(width,time) \
748*91e1e26aSAlexander Pyhalov 	if (oleft < (width)) { \
749*91e1e26aSAlexander Pyhalov 		int i; \
750*91e1e26aSAlexander Pyhalov 		for (i = time; i > 0; i--) { \
751*91e1e26aSAlexander Pyhalov 			UNGET(); \
752*91e1e26aSAlexander Pyhalov 		} \
753*91e1e26aSAlexander Pyhalov 		errno = E2BIG; \
754*91e1e26aSAlexander Pyhalov 		retval = (size_t)ERR_RETURN; \
755*91e1e26aSAlexander Pyhalov 		goto ret; \
756*91e1e26aSAlexander Pyhalov 	}
757*91e1e26aSAlexander Pyhalov 
758*91e1e26aSAlexander Pyhalov /*
759*91e1e26aSAlexander Pyhalov  * halfkana2zenkakuj[]:
760*91e1e26aSAlexander Pyhalov  * Directly convert JIS X 0201 Kana (half width) to JIS X 0208
761*91e1e26aSAlexander Pyhalov  * Kana (full width).
762*91e1e26aSAlexander Pyhalov  * This table is for ISO-2022-JP.RFC1468 mode.
763*91e1e26aSAlexander Pyhalov  *
764*91e1e26aSAlexander Pyhalov  * Principal:
765*91e1e26aSAlexander Pyhalov  * 1: Subtract 0x21 or 0x81.
766*91e1e26aSAlexander Pyhalov  * 2: Index the array by using the value above as index number.
767*91e1e26aSAlexander Pyhalov  *
768*91e1e26aSAlexander Pyhalov  * Note:
769*91e1e26aSAlexander Pyhalov  */
770*91e1e26aSAlexander Pyhalov static const unsigned short halfkana2zenkakuj[] = {
771*91e1e26aSAlexander Pyhalov 0x2123, 0x2156, 0x2157, 0x2122, 0x2126, 0x2572, 0x2521, 0x2523,
772*91e1e26aSAlexander Pyhalov 0x2525, 0x2527, 0x2529, 0x2563, 0x2565, 0x2567, 0x2543, 0x213c,
773*91e1e26aSAlexander Pyhalov 0x2522, 0x2524, 0x2526, 0x2528, 0x252a, 0x252b, 0x252d, 0x252f,
774*91e1e26aSAlexander Pyhalov 0x2531, 0x2533, 0x2535, 0x2537, 0x2539, 0x253b, 0x253d, 0x253f,
775*91e1e26aSAlexander Pyhalov 0x2541, 0x2544, 0x2546, 0x2548, 0x254a, 0x254b, 0x254c, 0x254d,
776*91e1e26aSAlexander Pyhalov 0x254e, 0x254f, 0x2552, 0x2555, 0x2558, 0x255b, 0x255e, 0x255f,
777*91e1e26aSAlexander Pyhalov 0x2560, 0x2561, 0x2562, 0x2564, 0x2566, 0x2568, 0x2569, 0x256a,
778*91e1e26aSAlexander Pyhalov 0x256b, 0x256c, 0x256d, 0x256f, 0x2573, 0x212b, 0x212c};
779*91e1e26aSAlexander Pyhalov 
780*91e1e26aSAlexander Pyhalov /*
781*91e1e26aSAlexander Pyhalov  * halfkana2zenkakue[]:
782*91e1e26aSAlexander Pyhalov  * Directly convert JIS X 0201 Kana (half width) to JIS X 0208
783*91e1e26aSAlexander Pyhalov  * (eucJP).
784*91e1e26aSAlexander Pyhalov  * This table is for ISO-2022-JP.RFC1468 mode.
785*91e1e26aSAlexander Pyhalov  *
786*91e1e26aSAlexander Pyhalov  * Principal:
787*91e1e26aSAlexander Pyhalov  * 1: Subtract 0x21 or 0x81.
788*91e1e26aSAlexander Pyhalov  * 2: Index the array by using the value above as index number.
789*91e1e26aSAlexander Pyhalov  *
790*91e1e26aSAlexander Pyhalov  * Note:
791*91e1e26aSAlexander Pyhalov  */
792*91e1e26aSAlexander Pyhalov static const unsigned short halfkana2zenkakue[] = {
793*91e1e26aSAlexander Pyhalov 0xa1a3, 0xa1d6, 0xa1d7, 0xa1a2, 0xa1a6, 0xa5f2, 0xa5a1,
794*91e1e26aSAlexander Pyhalov 0xa5a3, 0xa5a5, 0xa5a7, 0xa5a9, 0xa5e3, 0xa5e5, 0xa5e7,
795*91e1e26aSAlexander Pyhalov 0xa5c3, 0xa1bc, 0xa5a2, 0xa5a4, 0xa5a6, 0xa5a8, 0xa5aa,
796*91e1e26aSAlexander Pyhalov 0xa5ab, 0xa5ad, 0xa5af, 0xa5b1, 0xa5b3, 0xa5b5, 0xa5b7,
797*91e1e26aSAlexander Pyhalov 0xa5b9, 0xa5bb, 0xa5bd, 0xa5bf, 0xa5c1, 0xa5c4, 0xa5c6,
798*91e1e26aSAlexander Pyhalov 0xa5c8, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce, 0xa5cf,
799*91e1e26aSAlexander Pyhalov 0xa5d2, 0xa5d5, 0xa5d8, 0xa5db, 0xa5de, 0xa5df, 0xa5e0,
800*91e1e26aSAlexander Pyhalov 0xa5e1, 0xa5e2, 0xa5e4, 0xa5e6, 0xa5e8, 0xa5e9, 0xa5ea,
801*91e1e26aSAlexander Pyhalov 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ef, 0xa5f3, 0xa1ab, 0xa1ac};
802*91e1e26aSAlexander Pyhalov 
803*91e1e26aSAlexander Pyhalov /*
804*91e1e26aSAlexander Pyhalov  * halfkana2zenkakus[]:
805*91e1e26aSAlexander Pyhalov  * Directly convert JIS X 0201 Kana (half width) to PCK Kana
806*91e1e26aSAlexander Pyhalov  * (full width).
807*91e1e26aSAlexander Pyhalov  * This table is for ISO-2022-JP.RFC1468 mode.
808*91e1e26aSAlexander Pyhalov  *
809*91e1e26aSAlexander Pyhalov  * Principal:
810*91e1e26aSAlexander Pyhalov  * 1: Subtract 0x21 or 0x81.
811*91e1e26aSAlexander Pyhalov  * 2: Index the array by using the value above as index number.
812*91e1e26aSAlexander Pyhalov  *
813*91e1e26aSAlexander Pyhalov  * Note:
814*91e1e26aSAlexander Pyhalov  */
815*91e1e26aSAlexander Pyhalov static const unsigned short halfkana2zenkakus[] = {
816*91e1e26aSAlexander Pyhalov 0x8142, 0x8175, 0x8176, 0x8141, 0x8145, 0x8392, 0x8340, 0x8342,
817*91e1e26aSAlexander Pyhalov 0x8344, 0x8346, 0x8348, 0x8383, 0x8385, 0x8387, 0x8362, 0x815b,
818*91e1e26aSAlexander Pyhalov 0x8341, 0x8343, 0x8345, 0x8347, 0x8349, 0x834a, 0x834c, 0x834e,
819*91e1e26aSAlexander Pyhalov 0x8350, 0x8352, 0x8354, 0x8356, 0x8358, 0x835a, 0x835c, 0x835e,
820*91e1e26aSAlexander Pyhalov 0x8360, 0x8363, 0x8365, 0x8367, 0x8369, 0x836a, 0x836b, 0x836c,
821*91e1e26aSAlexander Pyhalov 0x836d, 0x836e, 0x8371, 0x8374, 0x8377, 0x837a, 0x837d, 0x837e,
822*91e1e26aSAlexander Pyhalov 0x8380, 0x8381, 0x8382, 0x8384, 0x8386, 0x8388, 0x8389, 0x838a,
823*91e1e26aSAlexander Pyhalov 0x838b, 0x838c, 0x838d, 0x838f, 0x8393, 0x814a, 0x814b};
824