1*16d86563SAlexander Pyhalov /*
2*16d86563SAlexander Pyhalov  * CDDL HEADER START
3*16d86563SAlexander Pyhalov  *
4*16d86563SAlexander Pyhalov  * The contents of this file are subject to the terms of the
5*16d86563SAlexander Pyhalov  * Common Development and Distribution License (the "License").
6*16d86563SAlexander Pyhalov  * You may not use this file except in compliance with the License.
7*16d86563SAlexander Pyhalov  *
8*16d86563SAlexander Pyhalov  * You can obtain a copy of the license at src/OPENSOLARIS.LICENSE
9*16d86563SAlexander Pyhalov  * or http://www.opensolaris.org/os/licensing.
10*16d86563SAlexander Pyhalov  * See the License for the specific language governing permissions
11*16d86563SAlexander Pyhalov  * and limitations under the License.
12*16d86563SAlexander Pyhalov  *
13*16d86563SAlexander Pyhalov  * When distributing Covered Code, include this CDDL HEADER in each
14*16d86563SAlexander Pyhalov  * file and include the License file at src/OPENSOLARIS.LICENSE.
15*16d86563SAlexander Pyhalov  * If applicable, add the following below this CDDL HEADER, with the
16*16d86563SAlexander Pyhalov  * fields enclosed by brackets "[]" replaced with your own identifying
17*16d86563SAlexander Pyhalov  * information: Portions Copyright [yyyy] [name of copyright owner]
18*16d86563SAlexander Pyhalov  *
19*16d86563SAlexander Pyhalov  * CDDL HEADER END
20*16d86563SAlexander Pyhalov  */
21*16d86563SAlexander Pyhalov /*
22*16d86563SAlexander Pyhalov  * Copyright (c) 1991, Sun Microsystems, Inc.
23*16d86563SAlexander Pyhalov  * Copyright (c) 1991, Nihon Sun Microsystems K.K.
24*16d86563SAlexander Pyhalov  */
25*16d86563SAlexander Pyhalov 
26*16d86563SAlexander Pyhalov #define GET(c)		((c) = *ip, ip++, ileft--)
27*16d86563SAlexander Pyhalov #define PUT(c)		(*op = (c), op++, oleft--)
28*16d86563SAlexander Pyhalov #define UNGET()		(ip--, ileft++)
29*16d86563SAlexander Pyhalov 
30*16d86563SAlexander Pyhalov #define ERR_RETURN	(-1)		/* result code on error */
31*16d86563SAlexander Pyhalov 
32*16d86563SAlexander Pyhalov /* is a valid character for ascii? */
33*16d86563SAlexander Pyhalov #define ISASC(c)		(((c) >= 0x00) && ((c) <= 0x7f))
34*16d86563SAlexander Pyhalov 
35*16d86563SAlexander Pyhalov /* is a valid character for codeset 1? */
36*16d86563SAlexander Pyhalov #define ISCS1(c)		(((c) >= 0xa1) && ((c) <= 0xfe))
37*16d86563SAlexander Pyhalov 
38*16d86563SAlexander Pyhalov /* is a valid character for codeset 2? */
39*16d86563SAlexander Pyhalov #define ISCS2(c)		(((c) >= 0xa1) && ((c) <= 0xdf))
40*16d86563SAlexander Pyhalov 
41*16d86563SAlexander Pyhalov /* is a valid character for codeset 3? */
42*16d86563SAlexander Pyhalov #define ISCS3(c)		(((c) >= 0xa1) && ((c) <= 0xfe))
43*16d86563SAlexander Pyhalov 
44*16d86563SAlexander Pyhalov /* is a valid hankaku_katakana for SJIS? */
45*16d86563SAlexander Pyhalov #define ISSJKANA(c)		(((c) >= 0xa1) && ((c) <= 0xdf))
46*16d86563SAlexander Pyhalov 
47*16d86563SAlexander Pyhalov /* is a valid character for the first byte of SJIS kanji? */
48*16d86563SAlexander Pyhalov #define ISSJKANJI1(c)	((((c) >= 0x81) && ((c) <= 0x9f)) ||\
49*16d86563SAlexander Pyhalov 						 (((c) >= 0xe0) && ((c) <= 0xef)))
50*16d86563SAlexander Pyhalov 
51*16d86563SAlexander Pyhalov /* is a valid character for the second byte of SJIS kanji? */
52*16d86563SAlexander Pyhalov #define ISSJKANJI2(c)	((((c) >= 0x40) && ((c) <= 0x7e)) ||\
53*16d86563SAlexander Pyhalov 						 (((c) >= 0x80) && ((c) <= 0xfc)))
54*16d86563SAlexander Pyhalov 
55*16d86563SAlexander Pyhalov #define CS_0			0		/* codeset 0 */
56*16d86563SAlexander Pyhalov #define CS_1			1		/* codeset 1 */
57*16d86563SAlexander Pyhalov #define CS_2			2		/* codeset 2 */
58*16d86563SAlexander Pyhalov #define CS_3			3		/* codeset 3 */
59*16d86563SAlexander Pyhalov 
60*16d86563SAlexander Pyhalov #define ST_INIT			0		/* init */
61*16d86563SAlexander Pyhalov #define ST_INCS1		1		/* in codeset 1 */
62*16d86563SAlexander Pyhalov #define ST_INCS2		2		/* in codeset 2 */
63*16d86563SAlexander Pyhalov #define ST_INCS3		3		/* in codeset 3 */
64*16d86563SAlexander Pyhalov #define ST_ESC			4		/* in ESC */
65*16d86563SAlexander Pyhalov #define ST_MBTOG0_1		5		/* in the designation of MB to G0 - 1 */
66*16d86563SAlexander Pyhalov #define ST_MBTOG0_2		6		/* in the designation of MB to G0 - 2 */
67*16d86563SAlexander Pyhalov #define ST_SBTOG0		7		/* in the designation of SB to G0 */
68*16d86563SAlexander Pyhalov 
69*16d86563SAlexander Pyhalov /*
70*16d86563SAlexander Pyhalov  * CODE SET 0
71*16d86563SAlexander Pyhalov  * ESC ( B   			: To ASCII
72*16d86563SAlexander Pyhalov  * ESC ( J				: To JIS X 0201 - 1976 ROMAN
73*16d86563SAlexander Pyhalov  * ESC ( @				: TO ISO 646 IRV
74*16d86563SAlexander Pyhalov  *
75*16d86563SAlexander Pyhalov  * CODE SET 1
76*16d86563SAlexander Pyhalov  * ESC & @ ESC $ ( B	: To JIS X 0208 - 1990		: Not implemented
77*16d86563SAlexander Pyhalov  * ESC $ ( B			: To JIS X 0208 - 1983/1990
78*16d86563SAlexander Pyhalov  * ESC $ ( @			: To JIS X 0208 - 1978
79*16d86563SAlexander Pyhalov  * ESC $ B				: To JIS X 0208 - 1983/1990
80*16d86563SAlexander Pyhalov  * ESC $ @				: To JIS X 0208 - 1978
81*16d86563SAlexander Pyhalov  * ESC & @ ESC $ B		: To JIS X 0208 - 1983/1990	: Not implemented
82*16d86563SAlexander Pyhalov  *
83*16d86563SAlexander Pyhalov  * CODE SET 2
84*16d86563SAlexander Pyhalov  * SO  					: G1 -> G
85*16d86563SAlexander Pyhalov  * SI  					: G0 -> G
86*16d86563SAlexander Pyhalov  * ESC ( I				: To JIS X 0201 - 1976 Katakana
87*16d86563SAlexander Pyhalov  *
88*16d86563SAlexander Pyhalov  * CODE SET 3
89*16d86563SAlexander Pyhalov  * ESC $ ( D			: To JIS X 0212 - 1990
90*16d86563SAlexander Pyhalov  * ESC $ D				: To JIS X 0212 - 1990
91*16d86563SAlexander Pyhalov  *
92*16d86563SAlexander Pyhalov  */
93*16d86563SAlexander Pyhalov 
94*16d86563SAlexander Pyhalov #define ESC					0x1b		/* Escape : 1/12 */
95*16d86563SAlexander Pyhalov #define SO					0x0e		/* Shift Out : 0/14 */
96*16d86563SAlexander Pyhalov #define SI					0x0f		/* SHift In  : 0/15 */
97*16d86563SAlexander Pyhalov 
98*16d86563SAlexander Pyhalov #define SBTOG0_1			0x28		/* ( : 2/8 */
99*16d86563SAlexander Pyhalov #define F_ASCII				0x42		/* B : 4/2 */
100*16d86563SAlexander Pyhalov #define F_X0201_RM			0x4a		/* J : 4/10 */
101*16d86563SAlexander Pyhalov #define F_ISO646			0x40		/* @ : 4/0 */
102*16d86563SAlexander Pyhalov #define F_X0201_KN			0x49		/* I : 4/9 */
103*16d86563SAlexander Pyhalov 
104*16d86563SAlexander Pyhalov #define MBTOG0_1			0x24		/* $ : 2/4 */
105*16d86563SAlexander Pyhalov #define MBTOG0_2			0x28		/* ( : 2/8 */
106*16d86563SAlexander Pyhalov #define F_X0208_83_90		0x42		/* B : 4/2 */
107*16d86563SAlexander Pyhalov #define F_X0208_78			0x40		/* @ : 4/0 */
108*16d86563SAlexander Pyhalov #define F_X0212_90			0x44		/* D : 4/4 */
109*16d86563SAlexander Pyhalov 
110*16d86563SAlexander Pyhalov #define	CMASK				0x7f
111*16d86563SAlexander Pyhalov #define	CMSB				0x80
112*16d86563SAlexander Pyhalov 
113*16d86563SAlexander Pyhalov /* the byte length of ESC sequences */
114*16d86563SAlexander Pyhalov #define SEQ_SBTOG0			3			/* ESC + ( + F */
115*16d86563SAlexander Pyhalov #define SEQ_MBTOG0			4			/* ESC + $ + ( + F */
116*16d86563SAlexander Pyhalov #define SEQ_MBTOG0_O		3			/* ESC + $ + F */
117*16d86563SAlexander Pyhalov 
118*16d86563SAlexander Pyhalov /* the byte length of SO/SI */
119*16d86563SAlexander Pyhalov #define SEQ_SOSI			1			/* SO or SI */
120*16d86563SAlexander Pyhalov 
121*16d86563SAlexander Pyhalov /* the byte length of SS2/SS3 */
122*16d86563SAlexander Pyhalov #define SEQ_SS				1			/* SS2 or SS3 */
123*16d86563SAlexander Pyhalov 
124*16d86563SAlexander Pyhalov /* the byte length of JIS characters */
125*16d86563SAlexander Pyhalov #define JISW0				1			/* ASCII */
126*16d86563SAlexander Pyhalov #define JISW1				2			/* Kanji */
127*16d86563SAlexander Pyhalov #define JISW2				1			/* Hankaku Katakana */
128*16d86563SAlexander Pyhalov #define JISW3				2			/* Hojo Kanji */
129*16d86563SAlexander Pyhalov 
130*16d86563SAlexander Pyhalov /* the byte length of EUC characters */
131*16d86563SAlexander Pyhalov #define EUCW0				1			/* ASCII */
132*16d86563SAlexander Pyhalov #define EUCW1				2			/* Kanji */
133*16d86563SAlexander Pyhalov #define EUCW2				1			/* Hankaku Katakana */
134*16d86563SAlexander Pyhalov #define EUCW3				2			/* Hojo Kanji */
135*16d86563SAlexander Pyhalov #define SS2W				1			/* SS2 */
136*16d86563SAlexander Pyhalov #define SS3W				1			/* SS3 */
137*16d86563SAlexander Pyhalov 
138*16d86563SAlexander Pyhalov /* the byte length of SJIS characters */
139*16d86563SAlexander Pyhalov #define SJISW0				1			/* ASCII */
140*16d86563SAlexander Pyhalov #define SJISW1				2			/* Kanji */
141*16d86563SAlexander Pyhalov #define SJISW2				1			/* Hankaku Katakana */
142*16d86563SAlexander Pyhalov 
143*16d86563SAlexander Pyhalov #define EBCDIC0				1
144*16d86563SAlexander Pyhalov #define EBCDIC1				2
145*16d86563SAlexander Pyhalov #define EBCDIC2				1
146*16d86563SAlexander Pyhalov #define EBCDIC3				2
147*16d86563SAlexander Pyhalov 
148*16d86563SAlexander Pyhalov /* the byte length of unknown characters */
149*16d86563SAlexander Pyhalov #define UNKNOWNW			1
150