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