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