xref: /titanic_53/usr/src/lib/iconv_modules/euro/utils/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 (c) 1991, Sun Microsystems, Inc.
23*91e1e26aSAlexander Pyhalov  * Copyright (c) 1991, Nihon Sun Microsystems K.K.
24*91e1e26aSAlexander Pyhalov  */
25*91e1e26aSAlexander Pyhalov 
26*91e1e26aSAlexander Pyhalov #define GET(c)		((c) = *ip, ip++, ileft--)
27*91e1e26aSAlexander Pyhalov #define PUT(c)		(*op = (c), op++, oleft--)
28*91e1e26aSAlexander Pyhalov #define UNGET()		(ip--, ileft++)
29*91e1e26aSAlexander Pyhalov 
30*91e1e26aSAlexander Pyhalov #define ERR_RETURN	(-1)		/* result code on error */
31*91e1e26aSAlexander Pyhalov 
32*91e1e26aSAlexander Pyhalov /* is a valid character for ascii? */
33*91e1e26aSAlexander Pyhalov #define ISASC(c)		(((c) >= 0x00) && ((c) <= 0x7f))
34*91e1e26aSAlexander Pyhalov 
35*91e1e26aSAlexander Pyhalov /* is a valid character for codeset 1? */
36*91e1e26aSAlexander Pyhalov #define ISCS1(c)		(((c) >= 0xa1) && ((c) <= 0xfe))
37*91e1e26aSAlexander Pyhalov 
38*91e1e26aSAlexander Pyhalov /* is a valid character for codeset 2? */
39*91e1e26aSAlexander Pyhalov #define ISCS2(c)		(((c) >= 0xa1) && ((c) <= 0xdf))
40*91e1e26aSAlexander Pyhalov 
41*91e1e26aSAlexander Pyhalov /* is a valid character for codeset 3? */
42*91e1e26aSAlexander Pyhalov #define ISCS3(c)		(((c) >= 0xa1) && ((c) <= 0xfe))
43*91e1e26aSAlexander Pyhalov 
44*91e1e26aSAlexander Pyhalov /* is a valid hankaku_katakana for SJIS? */
45*91e1e26aSAlexander Pyhalov #define ISSJKANA(c)		(((c) >= 0xa1) && ((c) <= 0xdf))
46*91e1e26aSAlexander Pyhalov 
47*91e1e26aSAlexander Pyhalov /* is a valid character for the first byte of SJIS kanji? */
48*91e1e26aSAlexander Pyhalov #define ISSJKANJI1(c)	((((c) >= 0x81) && ((c) <= 0x9f)) ||\
49*91e1e26aSAlexander Pyhalov 						 (((c) >= 0xe0) && ((c) <= 0xef)))
50*91e1e26aSAlexander Pyhalov 
51*91e1e26aSAlexander Pyhalov /* is a valid character for the second byte of SJIS kanji? */
52*91e1e26aSAlexander Pyhalov #define ISSJKANJI2(c)	((((c) >= 0x40) && ((c) <= 0x7e)) ||\
53*91e1e26aSAlexander Pyhalov 						 (((c) >= 0x80) && ((c) <= 0xfc)))
54*91e1e26aSAlexander Pyhalov 
55*91e1e26aSAlexander Pyhalov #define CS_0			0		/* codeset 0 */
56*91e1e26aSAlexander Pyhalov #define CS_1			1		/* codeset 1 */
57*91e1e26aSAlexander Pyhalov #define CS_2			2		/* codeset 2 */
58*91e1e26aSAlexander Pyhalov #define CS_3			3		/* codeset 3 */
59*91e1e26aSAlexander Pyhalov 
60*91e1e26aSAlexander Pyhalov #define ST_INIT			0		/* init */
61*91e1e26aSAlexander Pyhalov #define ST_INCS1		1		/* in codeset 1 */
62*91e1e26aSAlexander Pyhalov #define ST_INCS2		2		/* in codeset 2 */
63*91e1e26aSAlexander Pyhalov #define ST_INCS3		3		/* in codeset 3 */
64*91e1e26aSAlexander Pyhalov #define ST_ESC			4		/* in ESC */
65*91e1e26aSAlexander Pyhalov #define ST_MBTOG0_1		5		/* in the designation of MB to G0 - 1 */
66*91e1e26aSAlexander Pyhalov #define ST_MBTOG0_2		6		/* in the designation of MB to G0 - 2 */
67*91e1e26aSAlexander Pyhalov #define ST_SBTOG0		7		/* in the designation of SB to G0 */
68*91e1e26aSAlexander Pyhalov 
69*91e1e26aSAlexander Pyhalov /*
70*91e1e26aSAlexander Pyhalov  * CODE SET 0
71*91e1e26aSAlexander Pyhalov  * ESC ( B   			: To ASCII
72*91e1e26aSAlexander Pyhalov  * ESC ( J				: To JIS X 0201 - 1976 ROMAN
73*91e1e26aSAlexander Pyhalov  * ESC ( @				: TO ISO 646 IRV
74*91e1e26aSAlexander Pyhalov  *
75*91e1e26aSAlexander Pyhalov  * CODE SET 1
76*91e1e26aSAlexander Pyhalov  * ESC & @ ESC $ ( B	: To JIS X 0208 - 1990		: Not implemented
77*91e1e26aSAlexander Pyhalov  * ESC $ ( B			: To JIS X 0208 - 1983/1990
78*91e1e26aSAlexander Pyhalov  * ESC $ ( @			: To JIS X 0208 - 1978
79*91e1e26aSAlexander Pyhalov  * ESC $ B				: To JIS X 0208 - 1983/1990
80*91e1e26aSAlexander Pyhalov  * ESC $ @				: To JIS X 0208 - 1978
81*91e1e26aSAlexander Pyhalov  * ESC & @ ESC $ B		: To JIS X 0208 - 1983/1990	: Not implemented
82*91e1e26aSAlexander Pyhalov  *
83*91e1e26aSAlexander Pyhalov  * CODE SET 2
84*91e1e26aSAlexander Pyhalov  * SO  					: G1 -> G
85*91e1e26aSAlexander Pyhalov  * SI  					: G0 -> G
86*91e1e26aSAlexander Pyhalov  * ESC ( I				: To JIS X 0201 - 1976 Katakana
87*91e1e26aSAlexander Pyhalov  *
88*91e1e26aSAlexander Pyhalov  * CODE SET 3
89*91e1e26aSAlexander Pyhalov  * ESC $ ( D			: To JIS X 0212 - 1990
90*91e1e26aSAlexander Pyhalov  * ESC $ D				: To JIS X 0212 - 1990
91*91e1e26aSAlexander Pyhalov  *
92*91e1e26aSAlexander Pyhalov  */
93*91e1e26aSAlexander Pyhalov 
94*91e1e26aSAlexander Pyhalov #define ESC					0x1b		/* Escape : 1/12 */
95*91e1e26aSAlexander Pyhalov #define SO					0x0e		/* Shift Out : 0/14 */
96*91e1e26aSAlexander Pyhalov #define SI					0x0f		/* SHift In  : 0/15 */
97*91e1e26aSAlexander Pyhalov 
98*91e1e26aSAlexander Pyhalov #define SBTOG0_1			0x28		/* ( : 2/8 */
99*91e1e26aSAlexander Pyhalov #define F_ASCII				0x42		/* B : 4/2 */
100*91e1e26aSAlexander Pyhalov #define F_X0201_RM			0x4a		/* J : 4/10 */
101*91e1e26aSAlexander Pyhalov #define F_ISO646			0x40		/* @ : 4/0 */
102*91e1e26aSAlexander Pyhalov #define F_X0201_KN			0x49		/* I : 4/9 */
103*91e1e26aSAlexander Pyhalov 
104*91e1e26aSAlexander Pyhalov #define MBTOG0_1			0x24		/* $ : 2/4 */
105*91e1e26aSAlexander Pyhalov #define MBTOG0_2			0x28		/* ( : 2/8 */
106*91e1e26aSAlexander Pyhalov #define F_X0208_83_90		0x42		/* B : 4/2 */
107*91e1e26aSAlexander Pyhalov #define F_X0208_78			0x40		/* @ : 4/0 */
108*91e1e26aSAlexander Pyhalov #define F_X0212_90			0x44		/* D : 4/4 */
109*91e1e26aSAlexander Pyhalov 
110*91e1e26aSAlexander Pyhalov #define	CMASK				0x7f
111*91e1e26aSAlexander Pyhalov #define	CMSB				0x80
112*91e1e26aSAlexander Pyhalov 
113*91e1e26aSAlexander Pyhalov /* the byte length of ESC sequences */
114*91e1e26aSAlexander Pyhalov #define SEQ_SBTOG0			3			/* ESC + ( + F */
115*91e1e26aSAlexander Pyhalov #define SEQ_MBTOG0			4			/* ESC + $ + ( + F */
116*91e1e26aSAlexander Pyhalov #define SEQ_MBTOG0_O		3			/* ESC + $ + F */
117*91e1e26aSAlexander Pyhalov 
118*91e1e26aSAlexander Pyhalov /* the byte length of SO/SI */
119*91e1e26aSAlexander Pyhalov #define SEQ_SOSI			1			/* SO or SI */
120*91e1e26aSAlexander Pyhalov 
121*91e1e26aSAlexander Pyhalov /* the byte length of SS2/SS3 */
122*91e1e26aSAlexander Pyhalov #define SEQ_SS				1			/* SS2 or SS3 */
123*91e1e26aSAlexander Pyhalov 
124*91e1e26aSAlexander Pyhalov /* the byte length of JIS characters */
125*91e1e26aSAlexander Pyhalov #define JISW0				1			/* ASCII */
126*91e1e26aSAlexander Pyhalov #define JISW1				2			/* Kanji */
127*91e1e26aSAlexander Pyhalov #define JISW2				1			/* Hankaku Katakana */
128*91e1e26aSAlexander Pyhalov #define JISW3				2			/* Hojo Kanji */
129*91e1e26aSAlexander Pyhalov 
130*91e1e26aSAlexander Pyhalov /* the byte length of EUC characters */
131*91e1e26aSAlexander Pyhalov #define EUCW0				1			/* ASCII */
132*91e1e26aSAlexander Pyhalov #define EUCW1				2			/* Kanji */
133*91e1e26aSAlexander Pyhalov #define EUCW2				1			/* Hankaku Katakana */
134*91e1e26aSAlexander Pyhalov #define EUCW3				2			/* Hojo Kanji */
135*91e1e26aSAlexander Pyhalov #define SS2W				1			/* SS2 */
136*91e1e26aSAlexander Pyhalov #define SS3W				1			/* SS3 */
137*91e1e26aSAlexander Pyhalov 
138*91e1e26aSAlexander Pyhalov /* the byte length of SJIS characters */
139*91e1e26aSAlexander Pyhalov #define SJISW0				1			/* ASCII */
140*91e1e26aSAlexander Pyhalov #define SJISW1				2			/* Kanji */
141*91e1e26aSAlexander Pyhalov #define SJISW2				1			/* Hankaku Katakana */
142*91e1e26aSAlexander Pyhalov 
143*91e1e26aSAlexander Pyhalov #define EBCDIC0				1
144*91e1e26aSAlexander Pyhalov #define EBCDIC1				2
145*91e1e26aSAlexander Pyhalov #define EBCDIC2				1
146*91e1e26aSAlexander Pyhalov #define EBCDIC3				2
147*91e1e26aSAlexander Pyhalov 
148*91e1e26aSAlexander Pyhalov /* the byte length of unknown characters */
149*91e1e26aSAlexander Pyhalov #define UNKNOWNW			1
150