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