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 AND PERMISSION NOTICE 23*91e1e26aSAlexander Pyhalov * 24*91e1e26aSAlexander Pyhalov * Copyright (c) 1991-2005 Unicode, Inc. All rights reserved. Distributed 25*91e1e26aSAlexander Pyhalov * under the Terms of Use in http://www.unicode.org/copyright.html. 26*91e1e26aSAlexander Pyhalov * 27*91e1e26aSAlexander Pyhalov * This file has been modified by Sun Microsystems, Inc. 28*91e1e26aSAlexander Pyhalov */ 29*91e1e26aSAlexander Pyhalov /* 30*91e1e26aSAlexander Pyhalov * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 31*91e1e26aSAlexander Pyhalov * Use is subject to license terms. 32*91e1e26aSAlexander Pyhalov */ 33*91e1e26aSAlexander Pyhalov 34*91e1e26aSAlexander Pyhalov 35*91e1e26aSAlexander Pyhalov #define GET(c) ((c) = *ip, ip++, ileft--) 36*91e1e26aSAlexander Pyhalov #define PUT(c) (*op = (c), op++, oleft--) 37*91e1e26aSAlexander Pyhalov #define UNGET() (ip--, ileft++) 38*91e1e26aSAlexander Pyhalov 39*91e1e26aSAlexander Pyhalov #if defined(DEBUG) 40*91e1e26aSAlexander Pyhalov #include <stdio.h> 41*91e1e26aSAlexander Pyhalov static const char *debugmsg = "<empty>"; 42*91e1e26aSAlexander Pyhalov #define DEBUGMSG(msg) debugmsg = (msg); 43*91e1e26aSAlexander Pyhalov #else /* ! DEBUG */ 44*91e1e26aSAlexander Pyhalov #define DEBUGMSG(msg) ; 45*91e1e26aSAlexander Pyhalov #endif /* DEBUG */ 46*91e1e26aSAlexander Pyhalov 47*91e1e26aSAlexander Pyhalov #define RETERROR(no, msg) {\ 48*91e1e26aSAlexander Pyhalov errno = (no);\ 49*91e1e26aSAlexander Pyhalov DEBUGMSG(msg);\ 50*91e1e26aSAlexander Pyhalov rv = ((size_t)-1);\ 51*91e1e26aSAlexander Pyhalov goto ret;\ 52*91e1e26aSAlexander Pyhalov } 53*91e1e26aSAlexander Pyhalov 54*91e1e26aSAlexander Pyhalov #if defined(DEBUG) 55*91e1e26aSAlexander Pyhalov #define DEBUGPRINTERROR \ 56*91e1e26aSAlexander Pyhalov if (rv == (size_t)-1) { \ 57*91e1e26aSAlexander Pyhalov if (errno == EILSEQ) { \ 58*91e1e26aSAlexander Pyhalov fprintf(stderr, "DEBUG: EILSEQ: %s\n", debugmsg); \ 59*91e1e26aSAlexander Pyhalov } else if (errno == E2BIG) { \ 60*91e1e26aSAlexander Pyhalov fprintf(stderr, "DEBUG: E2BIG: %s\n", debugmsg); \ 61*91e1e26aSAlexander Pyhalov } else if (errno == EINVAL) { \ 62*91e1e26aSAlexander Pyhalov fprintf(stderr, "DEBUG: EINVAL: %s\n", debugmsg); \ 63*91e1e26aSAlexander Pyhalov } else { \ 64*91e1e26aSAlexander Pyhalov fprintf(stderr, \ 65*91e1e26aSAlexander Pyhalov "DEBUG: errno=%d: %s\n", errno, debugmsg); \ 66*91e1e26aSAlexander Pyhalov } \ 67*91e1e26aSAlexander Pyhalov } 68*91e1e26aSAlexander Pyhalov #else /* !DEBUG */ 69*91e1e26aSAlexander Pyhalov #define DEBUGPRINTERROR /* nop */ 70*91e1e26aSAlexander Pyhalov #endif /* DEBUG */ 71*91e1e26aSAlexander Pyhalov 72*91e1e26aSAlexander Pyhalov #define NGET(c, msg) \ 73*91e1e26aSAlexander Pyhalov if (ileft-- == 0) {\ 74*91e1e26aSAlexander Pyhalov RETERROR(EINVAL, msg)\ 75*91e1e26aSAlexander Pyhalov } else {\ 76*91e1e26aSAlexander Pyhalov (c) = *ip++;\ 77*91e1e26aSAlexander Pyhalov } 78*91e1e26aSAlexander Pyhalov 79*91e1e26aSAlexander Pyhalov #define NPUT(c, msg) \ 80*91e1e26aSAlexander Pyhalov if (oleft-- == 0) {\ 81*91e1e26aSAlexander Pyhalov RETERROR(E2BIG, msg)\ 82*91e1e26aSAlexander Pyhalov } else {\ 83*91e1e26aSAlexander Pyhalov *op++ = (c);\ 84*91e1e26aSAlexander Pyhalov } 85*91e1e26aSAlexander Pyhalov 86*91e1e26aSAlexander Pyhalov /* to be obsoleted; migrate to PUTU() in jfp_iconv_unicode.h */ 87*91e1e26aSAlexander Pyhalov #if defined(JFP_ICONV_TOCODE_UCS2) 88*91e1e26aSAlexander Pyhalov #define PUTUCS2(uni, msg) \ 89*91e1e26aSAlexander Pyhalov if (write_unicode((unsigned int)uni, &op, &oleft, little, msg) \ 90*91e1e26aSAlexander Pyhalov == (size_t)-1) { \ 91*91e1e26aSAlexander Pyhalov rv = ((size_t)-1);\ 92*91e1e26aSAlexander Pyhalov goto ret; \ 93*91e1e26aSAlexander Pyhalov } 94*91e1e26aSAlexander Pyhalov #else /* !JFP_ICONV_TOCODE_UCS2 */ 95*91e1e26aSAlexander Pyhalov #define PUTUCS2(ucs2, msg) \ 96*91e1e26aSAlexander Pyhalov if (ucs2 <= 0x7f) {\ 97*91e1e26aSAlexander Pyhalov NPUT((unsigned char)(ucs2), msg);\ 98*91e1e26aSAlexander Pyhalov } else if (ucs2 <= 0x7ff) {\ 99*91e1e26aSAlexander Pyhalov NPUT((unsigned char)((((ucs2)>>6) & 0x1f) | 0xc0), msg);\ 100*91e1e26aSAlexander Pyhalov NPUT((unsigned char)((((ucs2)>>0) & 0x3f) | 0x80), msg);\ 101*91e1e26aSAlexander Pyhalov } else {\ 102*91e1e26aSAlexander Pyhalov NPUT((unsigned char)((((ucs2)>>12) & 0x0f) | 0xe0), msg);\ 103*91e1e26aSAlexander Pyhalov NPUT((unsigned char)((((ucs2)>>6) & 0x3f) | 0x80), msg);\ 104*91e1e26aSAlexander Pyhalov NPUT((unsigned char)((((ucs2)>>0) & 0x3f) | 0x80), msg);\ 105*91e1e26aSAlexander Pyhalov } 106*91e1e26aSAlexander Pyhalov #endif /* JFP_ICONV_TOCODE_UCS2 */ 107*91e1e26aSAlexander Pyhalov 108*91e1e26aSAlexander Pyhalov #if defined(JFP_ICONV_STATELESS) 109*91e1e26aSAlexander Pyhalov 110*91e1e26aSAlexander Pyhalov #include <stdlib.h> 111*91e1e26aSAlexander Pyhalov 112*91e1e26aSAlexander Pyhalov static void * 113*91e1e26aSAlexander Pyhalov _icv_open_stateless(void) 114*91e1e26aSAlexander Pyhalov { 115*91e1e26aSAlexander Pyhalov void *cd; 116*91e1e26aSAlexander Pyhalov 117*91e1e26aSAlexander Pyhalov /* 118*91e1e26aSAlexander Pyhalov * Do malloc() only to get address as unique conversion descriptor. 119*91e1e26aSAlexander Pyhalov * Though iconv() specification doesn't describe the uniqueness, 120*91e1e26aSAlexander Pyhalov * some existing applications may be assuming it. 121*91e1e26aSAlexander Pyhalov * Unless call of malloc() here is raised as a problem, keep away 122*91e1e26aSAlexander Pyhalov * from breaking the assumption. 123*91e1e26aSAlexander Pyhalov */ 124*91e1e26aSAlexander Pyhalov 125*91e1e26aSAlexander Pyhalov if ((cd = malloc((size_t)1)) == NULL) { 126*91e1e26aSAlexander Pyhalov errno = ENOMEM; 127*91e1e26aSAlexander Pyhalov return ((void *)-1); 128*91e1e26aSAlexander Pyhalov } else { 129*91e1e26aSAlexander Pyhalov return (cd); 130*91e1e26aSAlexander Pyhalov } 131*91e1e26aSAlexander Pyhalov } 132*91e1e26aSAlexander Pyhalov 133*91e1e26aSAlexander Pyhalov static void 134*91e1e26aSAlexander Pyhalov _icv_close_stateless(void *cd) 135*91e1e26aSAlexander Pyhalov { 136*91e1e26aSAlexander Pyhalov if (cd == NULL) { 137*91e1e26aSAlexander Pyhalov errno = EBADF; 138*91e1e26aSAlexander Pyhalov } else { 139*91e1e26aSAlexander Pyhalov free(cd); 140*91e1e26aSAlexander Pyhalov } 141*91e1e26aSAlexander Pyhalov return; 142*91e1e26aSAlexander Pyhalov } 143*91e1e26aSAlexander Pyhalov 144*91e1e26aSAlexander Pyhalov #endif /* ! JFP_ICONV_STATELESS */ 145*91e1e26aSAlexander Pyhalov 146*91e1e26aSAlexander Pyhalov #define ERR_RETURN (-1) /* result code on error */ 147*91e1e26aSAlexander Pyhalov 148*91e1e26aSAlexander Pyhalov /* 149*91e1e26aSAlexander Pyhalov * ISXXXX(c) macros below assume (c) is of type unsigned char 150*91e1e26aSAlexander Pyhalov */ 151*91e1e26aSAlexander Pyhalov /* is a valid code as ascii? */ 152*91e1e26aSAlexander Pyhalov #define ISASC(c) ((c) <= 0x7f) 153*91e1e26aSAlexander Pyhalov 154*91e1e26aSAlexander Pyhalov /* is a valid code as C1 control? */ 155*91e1e26aSAlexander Pyhalov #define ISC1CTRL(c) (((c) >= 0x80) && ((c) <= 0x9f)) 156*91e1e26aSAlexander Pyhalov 157*91e1e26aSAlexander Pyhalov /* is a valid code as C1 control allowed in EUC? */ 158*91e1e26aSAlexander Pyhalov #define ISC1CTRLEUC(c) ((((c) >= 0x80) && ((c) <= 0x8d)) ||\ 159*91e1e26aSAlexander Pyhalov (((c) >= 0x90) && ((c) <= 0x9f))) 160*91e1e26aSAlexander Pyhalov 161*91e1e26aSAlexander Pyhalov /* is a valid 1st or 2nd byte of EUC codeset 1? */ 162*91e1e26aSAlexander Pyhalov #define ISCS1(c) (((c) >= 0xa1) && ((c) <= 0xfe)) 163*91e1e26aSAlexander Pyhalov 164*91e1e26aSAlexander Pyhalov /* is a valid 1st byte of EUC codeset 1 and in range row 1 thru 84? */ 165*91e1e26aSAlexander Pyhalov #define ISCS1_0208(c) (((c) >= 0xa1) && ((c) <= 0xf4)) 166*91e1e26aSAlexander Pyhalov 167*91e1e26aSAlexander Pyhalov /* is a valid 1st byte of UDC area in EUC codeset 1? */ 168*91e1e26aSAlexander Pyhalov #define ISCS1_UDC(c) (((c) >= 0xf5) && ((c) <= 0xfe)) 169*91e1e26aSAlexander Pyhalov 170*91e1e26aSAlexander Pyhalov /* is a valid 2nd (1st byte is SS2) byte of EUC codeset 2? */ 171*91e1e26aSAlexander Pyhalov #define ISCS2(c) (((c) >= 0xa1) && ((c) <= 0xdf)) 172*91e1e26aSAlexander Pyhalov 173*91e1e26aSAlexander Pyhalov /* is a valid 2nd or 3rd (1st byte is SS3) byte of EUC codeset 3? */ 174*91e1e26aSAlexander Pyhalov #define ISCS3(c) (((c) >= 0xa1) && ((c) <= 0xfe)) 175*91e1e26aSAlexander Pyhalov 176*91e1e26aSAlexander Pyhalov /* is a valid 2nd (1st byte is SS3) byte of UDC area in EUC codeset 3? */ 177*91e1e26aSAlexander Pyhalov #define ISCS3_UDC(c) (((c) >= 0xf5) && ((c) <= 0xfe)) 178*91e1e26aSAlexander Pyhalov 179*91e1e26aSAlexander Pyhalov /* is a valid hankaku_katakana for SJIS? */ 180*91e1e26aSAlexander Pyhalov #define ISSJKANA(c) (((c) >= 0xa1) && ((c) <= 0xdf)) 181*91e1e26aSAlexander Pyhalov 182*91e1e26aSAlexander Pyhalov /* is a valid character for the first byte of SJIS multibyte? */ 183*91e1e26aSAlexander Pyhalov #define ISSJMB_1(c) ((((c) >= 0x81) && ((c) <= 0x9f)) ||\ 184*91e1e26aSAlexander Pyhalov (((c) >= 0xe0) && ((c) <= 0xfc))) 185*91e1e26aSAlexander Pyhalov 186*91e1e26aSAlexander Pyhalov /* is a valid character for the first byte of SJIS kanji? */ 187*91e1e26aSAlexander Pyhalov #define ISSJKANJI1(c) ((((c) >= 0x81) && ((c) <= 0x9f)) ||\ 188*91e1e26aSAlexander Pyhalov (((c) >= 0xe0) && ((c) <= 0xea)) ||\ 189*91e1e26aSAlexander Pyhalov (((c) >= 0xf0) && ((c) <= 0xf4))) 190*91e1e26aSAlexander Pyhalov 191*91e1e26aSAlexander Pyhalov /* is a valid character for the first byte of a part of Suppl. SJIS? */ 192*91e1e26aSAlexander Pyhalov #define ISSJSUPKANJI1(c) (((c) >= 0xf5) && ((c) <= 0xf9)) 193*91e1e26aSAlexander Pyhalov 194*91e1e26aSAlexander Pyhalov /* is a valid character for the first byte of SJIS UDC? */ 195*91e1e26aSAlexander Pyhalov #define ISSJUDC_1(c) (((c) >= 0xf0) && ((c) <= 0xf9)) 196*91e1e26aSAlexander Pyhalov 197*91e1e26aSAlexander Pyhalov /* is a valid character for the first byte of ibm character set */ 198*91e1e26aSAlexander Pyhalov #define ISSJIBM(c) (((c) >= 0xfa) && ((c) <= 0xfc)) 199*91e1e26aSAlexander Pyhalov 200*91e1e26aSAlexander Pyhalov /* is a valid character for the first byte of ibm character set */ 201*91e1e26aSAlexander Pyhalov #define ISSJNECIBM(c) (((c) >= 0xed) && ((c) <= 0xef)) 202*91e1e26aSAlexander Pyhalov 203*91e1e26aSAlexander Pyhalov /* is a valid character for the second byte of SJIS kanji? */ 204*91e1e26aSAlexander Pyhalov #define ISSJKANJI2(c) ((((c) >= 0x40) && ((c) <= 0x7e)) ||\ 205*91e1e26aSAlexander Pyhalov (((c) >= 0x80) && ((c) <= 0xfc))) 206*91e1e26aSAlexander Pyhalov 207*91e1e26aSAlexander Pyhalov /* is a valid character for UTF8 UDC ? */ 208*91e1e26aSAlexander Pyhalov #define ISUTF8UDC(c) (((c) >= 0xe000) && ((c) <= 0xf8ff)) 209*91e1e26aSAlexander Pyhalov 210*91e1e26aSAlexander Pyhalov #define CS_0 0 /* codeset 0 */ 211*91e1e26aSAlexander Pyhalov #define CS_1 1 /* codeset 1 */ 212*91e1e26aSAlexander Pyhalov #define CS_2 2 /* codeset 2 */ 213*91e1e26aSAlexander Pyhalov #define CS_3 3 /* codeset 3 */ 214*91e1e26aSAlexander Pyhalov 215*91e1e26aSAlexander Pyhalov #define ST_INIT 0 /* init */ 216*91e1e26aSAlexander Pyhalov #define ST_INCS1 1 /* in codeset 1 */ 217*91e1e26aSAlexander Pyhalov #define ST_INCS2 2 /* in codeset 2 */ 218*91e1e26aSAlexander Pyhalov #define ST_INCS3 3 /* in codeset 3 */ 219*91e1e26aSAlexander Pyhalov #define ST_ESC 4 /* in ESC */ 220*91e1e26aSAlexander Pyhalov #define ST_MBTOG0_1 5 /* in the designation of MB to G0 - 1 */ 221*91e1e26aSAlexander Pyhalov #define ST_MBTOG0_2 6 /* in the designation of MB to G0 - 2 */ 222*91e1e26aSAlexander Pyhalov #define ST_SBTOG0 7 /* in the designation of SB to G0 */ 223*91e1e26aSAlexander Pyhalov #define ST_208REV_1 8 /* in the designation of JISX208-1990 */ 224*91e1e26aSAlexander Pyhalov #define ST_208REV_2 9 /* in the designation of JISX208-1990 */ 225*91e1e26aSAlexander Pyhalov #define ST_REV_AFT_ESC 10 /* in the designation of JISX208-1990 */ 226*91e1e26aSAlexander Pyhalov #define ST_REV_AFT_MBTOG0_1 11 /* in the designation of JISX208-1990 */ 227*91e1e26aSAlexander Pyhalov #define ST_REV_AFT_MBTOG0_2 12 /* in the designation of JISX208-1990 */ 228*91e1e26aSAlexander Pyhalov 229*91e1e26aSAlexander Pyhalov /* 230*91e1e26aSAlexander Pyhalov * CODE SET 0 231*91e1e26aSAlexander Pyhalov * ESC ( B : To ASCII 232*91e1e26aSAlexander Pyhalov * ESC ( J : To JIS X 0201 - 1976 ROMAN 233*91e1e26aSAlexander Pyhalov * ESC ( @ : TO ISO 646 IRV 234*91e1e26aSAlexander Pyhalov * 235*91e1e26aSAlexander Pyhalov * CODE SET 1 236*91e1e26aSAlexander Pyhalov * ESC & @ ESC $ ( B : To JIS X 0208 - 1990 237*91e1e26aSAlexander Pyhalov * ESC $ ( B : To JIS X 0208 - 1983/1990 238*91e1e26aSAlexander Pyhalov * ESC $ ( @ : To JIS X 0208 - 1978 239*91e1e26aSAlexander Pyhalov * ESC $ B : To JIS X 0208 - 1983/1990 240*91e1e26aSAlexander Pyhalov * ESC $ @ : To JIS X 0208 - 1978 241*91e1e26aSAlexander Pyhalov * ESC & @ ESC $ B : To JIS X 0208 - 1983/1990 242*91e1e26aSAlexander Pyhalov * 243*91e1e26aSAlexander Pyhalov * CODE SET 2 244*91e1e26aSAlexander Pyhalov * SO : G1 -> G 245*91e1e26aSAlexander Pyhalov * SI : G0 -> G 246*91e1e26aSAlexander Pyhalov * ESC ( I : To JIS X 0201 - 1976 Katakana 247*91e1e26aSAlexander Pyhalov * 248*91e1e26aSAlexander Pyhalov * CODE SET 3 249*91e1e26aSAlexander Pyhalov * ESC $ ( D : To JIS X 0212 - 1990 250*91e1e26aSAlexander Pyhalov * ESC $ D : To JIS X 0212 - 1990 251*91e1e26aSAlexander Pyhalov * 252*91e1e26aSAlexander Pyhalov */ 253*91e1e26aSAlexander Pyhalov 254*91e1e26aSAlexander Pyhalov #define ESC 0x1b /* Escape : 1/12 */ 255*91e1e26aSAlexander Pyhalov #define SO 0x0e /* Shift Out : 0/14 */ 256*91e1e26aSAlexander Pyhalov #define SI 0x0f /* Shift In : 0/15 */ 257*91e1e26aSAlexander Pyhalov 258*91e1e26aSAlexander Pyhalov #define SBTOG0_1 0x28 /* ( : 2/8 */ 259*91e1e26aSAlexander Pyhalov #define F_ASCII 0x42 /* B : 4/2 */ 260*91e1e26aSAlexander Pyhalov #define F_X0201_RM 0x4a /* J : 4/10 */ 261*91e1e26aSAlexander Pyhalov #define F_ISO646 0x40 /* @ : 4/0 */ 262*91e1e26aSAlexander Pyhalov #define F_X0201_KN 0x49 /* I : 4/9 */ 263*91e1e26aSAlexander Pyhalov 264*91e1e26aSAlexander Pyhalov #define MBTOG0_1 0x24 /* $ : 2/4 */ 265*91e1e26aSAlexander Pyhalov #define MBTOG0_2 0x28 /* ( : 2/8 */ 266*91e1e26aSAlexander Pyhalov #define F_X0208_83_90 0x42 /* B : 4/2 */ 267*91e1e26aSAlexander Pyhalov #define F_X0208_78 0x40 /* @ : 4/0 */ 268*91e1e26aSAlexander Pyhalov #define F_X0212_90 0x44 /* D : 4/4 */ 269*91e1e26aSAlexander Pyhalov #define X208REV_1 0x26 /* & : 2/6 */ 270*91e1e26aSAlexander Pyhalov #define X208REV_2 0x40 /* @ : 4/0 */ 271*91e1e26aSAlexander Pyhalov 272*91e1e26aSAlexander Pyhalov #define CMASK 0x7f 273*91e1e26aSAlexander Pyhalov #define CMSB 0x80 274*91e1e26aSAlexander Pyhalov 275*91e1e26aSAlexander Pyhalov /* the byte length of ESC sequences */ 276*91e1e26aSAlexander Pyhalov #define SEQ_SBTOG0 3 /* ESC + ( + F */ 277*91e1e26aSAlexander Pyhalov #define SEQ_MBTOG0 4 /* ESC + $ + ( + F */ 278*91e1e26aSAlexander Pyhalov #define SEQ_MBTOG0_O 3 /* ESC + $ + F */ 279*91e1e26aSAlexander Pyhalov 280*91e1e26aSAlexander Pyhalov /* the byte length of SO/SI */ 281*91e1e26aSAlexander Pyhalov #define SEQ_SOSI 1 /* SO or SI */ 282*91e1e26aSAlexander Pyhalov 283*91e1e26aSAlexander Pyhalov /* the byte length of SS2/SS3 */ 284*91e1e26aSAlexander Pyhalov #define SEQ_SS 1 /* SS2 or SS3 */ 285*91e1e26aSAlexander Pyhalov 286*91e1e26aSAlexander Pyhalov /* the byte length of JIS characters */ 287*91e1e26aSAlexander Pyhalov #define JISW0 1 /* ASCII */ 288*91e1e26aSAlexander Pyhalov #define JISW1 2 /* Kanji */ 289*91e1e26aSAlexander Pyhalov #define JISW2 1 /* Hankaku Katakana */ 290*91e1e26aSAlexander Pyhalov #define JISW3 2 /* Hojo Kanji */ 291*91e1e26aSAlexander Pyhalov 292*91e1e26aSAlexander Pyhalov /* the byte length of EUC characters */ 293*91e1e26aSAlexander Pyhalov #define EUCW0 1 /* ASCII */ 294*91e1e26aSAlexander Pyhalov #define EUCW1 2 /* Kanji */ 295*91e1e26aSAlexander Pyhalov #define EUCW2 1 /* Hankaku Katakana */ 296*91e1e26aSAlexander Pyhalov #define EUCW3 2 /* Hojo Kanji */ 297*91e1e26aSAlexander Pyhalov #define SS2W 1 /* SS2 */ 298*91e1e26aSAlexander Pyhalov #define SS3W 1 /* SS3 */ 299*91e1e26aSAlexander Pyhalov 300*91e1e26aSAlexander Pyhalov /* the byte length of SJIS characters */ 301*91e1e26aSAlexander Pyhalov #define SJISW0 1 /* ASCII */ 302*91e1e26aSAlexander Pyhalov #define SJISW1 2 /* Kanji/UDC */ 303*91e1e26aSAlexander Pyhalov #define SJISW2 1 /* Hankaku Katakana */ 304*91e1e26aSAlexander Pyhalov 305*91e1e26aSAlexander Pyhalov #define EBCDIC0 1 306*91e1e26aSAlexander Pyhalov #define EBCDIC1 2 307*91e1e26aSAlexander Pyhalov #define EBCDIC2 1 308*91e1e26aSAlexander Pyhalov #define EBCDIC3 2 309*91e1e26aSAlexander Pyhalov 310*91e1e26aSAlexander Pyhalov /* the byte length of unknown characters */ 311*91e1e26aSAlexander Pyhalov #define UNKNOWNW 1 312*91e1e26aSAlexander Pyhalov 313*91e1e26aSAlexander Pyhalov #define TRUE (1) 314*91e1e26aSAlexander Pyhalov #define FALSE (0) 315*91e1e26aSAlexander Pyhalov 316*91e1e26aSAlexander Pyhalov /* 317*91e1e26aSAlexander Pyhalov * sjtojis1[]: 318*91e1e26aSAlexander Pyhalov * Directly convert 1st octet of Shift-JIS encoded 2bytes codes 319*91e1e26aSAlexander Pyhalov * to the 1st octet of 7bit-JIS encoded 2bytes codes. 320*91e1e26aSAlexander Pyhalov * Because the 8th bit is always ON, the size of this array 321*91e1e26aSAlexander Pyhalov * can be limited to 128. (Precisely, 1st octet can vary between 322*91e1e26aSAlexander Pyhalov * 0x81 and 0xfc, and correspondent 7bit-JIS value is between 323*91e1e26aSAlexander Pyhalov * 0x21 and 0x7e. So we can use "0xff" as indicating invalid value.) 324*91e1e26aSAlexander Pyhalov * 325*91e1e26aSAlexander Pyhalov * Principal: 326*91e1e26aSAlexander Pyhalov * 1: Subtract 0x80 327*91e1e26aSAlexander Pyhalov * 2: Index the array by using the value above as index number. 328*91e1e26aSAlexander Pyhalov * 3: Value "0xff" means the index number is invalid or, there's 329*91e1e26aSAlexander Pyhalov * no 7bit-JIS value that corresponds to. 330*91e1e26aSAlexander Pyhalov * 331*91e1e26aSAlexander Pyhalov * Note: 332*91e1e26aSAlexander Pyhalov * 1: When the 2nd octet of Shift-JIS encoded 2bytes codes is 333*91e1e26aSAlexander Pyhalov * more than 0x9f, indexed value should be augumented by 1. 334*91e1e26aSAlexander Pyhalov * 2: Some of Shift-JIS code points are mapped to JISX0208 plane 335*91e1e26aSAlexander Pyhalov * and others are JISX0212 plane. 336*91e1e26aSAlexander Pyhalov * Need to differentiate them before indexing and designate 337*91e1e26aSAlexander Pyhalov * appropriate character set. This table converts only code points 338*91e1e26aSAlexander Pyhalov * within each character set. 339*91e1e26aSAlexander Pyhalov * 340*91e1e26aSAlexander Pyhalov */ 341*91e1e26aSAlexander Pyhalov static const unsigned char sjtojis1[] = { 342*91e1e26aSAlexander Pyhalov /* Values never be indexed */ 343*91e1e26aSAlexander Pyhalov 0xff, 344*91e1e26aSAlexander Pyhalov /* Index 1KU - 62KU in JISX0208 */ 345*91e1e26aSAlexander Pyhalov 0x21, 0x23, 0x25, 0x27, 0x29, 0x2b, 0x2d, 0x2f, 346*91e1e26aSAlexander Pyhalov 0x31, 0x33, 0x35, 0x37, 0x39, 0x3b, 0x3d, 0x3f, 347*91e1e26aSAlexander Pyhalov 0x41, 0x43, 0x45, 0x47, 0x49, 0x4b, 0x4d, 0x4f, 348*91e1e26aSAlexander Pyhalov 0x51, 0x53, 0x55, 0x57, 0x59, 0x5b, 0x5d, 349*91e1e26aSAlexander Pyhalov /* Values never be indexed */ 350*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 351*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 352*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 353*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 354*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 355*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 356*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 357*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 358*91e1e26aSAlexander Pyhalov /* Index 63KU - 84KU in JISX0208 */ 359*91e1e26aSAlexander Pyhalov 0x5f, 360*91e1e26aSAlexander Pyhalov 0x61, 0x63, 0x65, 0x67, 0x69, 0x6b, 0x6d, 0x6f, 361*91e1e26aSAlexander Pyhalov 0x71, 0x73, 362*91e1e26aSAlexander Pyhalov /* Values never be indexed */ 363*91e1e26aSAlexander Pyhalov 0xff, 0xff, 364*91e1e26aSAlexander Pyhalov /* Followings will be mapped to 79KU - 84KU in JISX0212 (NEC/IBM) */ 365*91e1e26aSAlexander Pyhalov /* 0x6f, 0x71, 0x73, */ 366*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 367*91e1e26aSAlexander Pyhalov /* Followings will be mapped to 85KU - 94KU in JISX0208 (UDC) */ 368*91e1e26aSAlexander Pyhalov 0x75, 0x77, 0x79, 0x7b, 0x7d, 369*91e1e26aSAlexander Pyhalov /* Followings will be mapped to 85KU - 94KU in JISX0212 (UDC) */ 370*91e1e26aSAlexander Pyhalov 0x75, 0x77, 0x79, 0x7b, 0x7d, 371*91e1e26aSAlexander Pyhalov /* Followings will be mapped to 79KU - 84KU in JISX0212 (IBM) */ 372*91e1e26aSAlexander Pyhalov /* 0x6f, 0x71, 0x73, */ 373*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 374*91e1e26aSAlexander Pyhalov /* Values never be indexed */ 375*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff 376*91e1e26aSAlexander Pyhalov }; 377*91e1e26aSAlexander Pyhalov 378*91e1e26aSAlexander Pyhalov /* 379*91e1e26aSAlexander Pyhalov * sjtojis2[]: 380*91e1e26aSAlexander Pyhalov * Directly convert 2nd octet of Shift-JIS encoded 2bytes codes 381*91e1e26aSAlexander Pyhalov * to the 2nd octet of 7bit-JIS encoded 2bytes codes. 382*91e1e26aSAlexander Pyhalov * 2nd octet in Shift-JIS can vary between 0x40 and 0xfc(except 0x7f) 383*91e1e26aSAlexander Pyhalov * and the correspondent 7bit-JIS octet is between 0x21 and 0x7e. 384*91e1e26aSAlexander Pyhalov * (So we can use '0xff' as indicating invalid value.) 385*91e1e26aSAlexander Pyhalov * 386*91e1e26aSAlexander Pyhalov * Principal: 387*91e1e26aSAlexander Pyhalov * 1: Index the array by using the value above as index number. 388*91e1e26aSAlexander Pyhalov * 2: Value "0xff" means the index number is invalid or, there's 389*91e1e26aSAlexander Pyhalov * no 7bit-JIS value that corresponds to. 390*91e1e26aSAlexander Pyhalov * 391*91e1e26aSAlexander Pyhalov * Note: 392*91e1e26aSAlexander Pyhalov * 1: Some of Shift-JIS code points are mapped to JISX0208 plane 393*91e1e26aSAlexander Pyhalov * and others to JISX0212 plane. 394*91e1e26aSAlexander Pyhalov * Need to differentiate them before indexing and designate 395*91e1e26aSAlexander Pyhalov * appropriate character set. This table converts only code points 396*91e1e26aSAlexander Pyhalov * within each character set. 397*91e1e26aSAlexander Pyhalov * 398*91e1e26aSAlexander Pyhalov */ 399*91e1e26aSAlexander Pyhalov static const unsigned char sjtojis2[] = { 400*91e1e26aSAlexander Pyhalov /* Values never be indexed */ 401*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 402*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 403*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 404*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 405*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 406*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 407*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 408*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 409*91e1e26aSAlexander Pyhalov /* Followings are 2nd octet for 'odd' KU */ 410*91e1e26aSAlexander Pyhalov 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 411*91e1e26aSAlexander Pyhalov 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 412*91e1e26aSAlexander Pyhalov 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 413*91e1e26aSAlexander Pyhalov 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 414*91e1e26aSAlexander Pyhalov 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 415*91e1e26aSAlexander Pyhalov 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 416*91e1e26aSAlexander Pyhalov 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 417*91e1e26aSAlexander Pyhalov 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 418*91e1e26aSAlexander Pyhalov /* Values never be indexed */ 419*91e1e26aSAlexander Pyhalov 0xff, 420*91e1e26aSAlexander Pyhalov /* Followings are 2nd octet for 'odd' KU */ 421*91e1e26aSAlexander Pyhalov 0x60, 422*91e1e26aSAlexander Pyhalov 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 423*91e1e26aSAlexander Pyhalov 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 424*91e1e26aSAlexander Pyhalov 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 425*91e1e26aSAlexander Pyhalov 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 426*91e1e26aSAlexander Pyhalov /* Followings are 2nd octet for 'even' KU */ 427*91e1e26aSAlexander Pyhalov 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 428*91e1e26aSAlexander Pyhalov 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 429*91e1e26aSAlexander Pyhalov 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 430*91e1e26aSAlexander Pyhalov 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 431*91e1e26aSAlexander Pyhalov 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 432*91e1e26aSAlexander Pyhalov 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 433*91e1e26aSAlexander Pyhalov 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 434*91e1e26aSAlexander Pyhalov 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 435*91e1e26aSAlexander Pyhalov 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 436*91e1e26aSAlexander Pyhalov 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 437*91e1e26aSAlexander Pyhalov 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 438*91e1e26aSAlexander Pyhalov 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 439*91e1e26aSAlexander Pyhalov /* Values never be indexed */ 440*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff 441*91e1e26aSAlexander Pyhalov }; 442*91e1e26aSAlexander Pyhalov 443*91e1e26aSAlexander Pyhalov /* 444*91e1e26aSAlexander Pyhalov * sjtoibmext[]: 445*91e1e26aSAlexander Pyhalov * Directly convert Shift-JIS encoded 2bytes codes 446*91e1e26aSAlexander Pyhalov * to the EUC encoded 2bytes codes. 447*91e1e26aSAlexander Pyhalov * This table is used for "IBM Extended Character Set" only. 448*91e1e26aSAlexander Pyhalov * 449*91e1e26aSAlexander Pyhalov * Principal: 450*91e1e26aSAlexander Pyhalov * 1: Subtract 0xfa40. 451*91e1e26aSAlexander Pyhalov * 2: Index the array by using the value above as index number. 452*91e1e26aSAlexander Pyhalov * 3: Value "0xffff" means the index number is invalid or, there's 453*91e1e26aSAlexander Pyhalov * no EUC value that corresponds to. 454*91e1e26aSAlexander Pyhalov * 455*91e1e26aSAlexander Pyhalov * Note: The SJIS code points, 0xfa54 and 0xfa5b are mapped to JIS208 456*91e1e26aSAlexander Pyhalov * hence they are NOT mapped with tables below. 457*91e1e26aSAlexander Pyhalov * (They are mapped to 0xa2cc and 0xa2e8 in JIS208 respectively.) 458*91e1e26aSAlexander Pyhalov */ 459*91e1e26aSAlexander Pyhalov static const unsigned short sjtoibmext[] = { 460*91e1e26aSAlexander Pyhalov 0xf3f3, 0xf3f4, 0xf3f5, 0xf3f6, 0xf3f7, 0xf3f8, 0xf3f9, 0xf3fa, /* 0xfa47 */ 461*91e1e26aSAlexander Pyhalov 0xf3fb, 0xf3fc, 0xf3fd, 0xf3fe, 0xf4a1, 0xf4a2, 0xf4a3, 0xf4a4, 462*91e1e26aSAlexander Pyhalov 0xf4a5, 0xf4a6, 0xf4a7, 0xf4a8, 0xffff, 0xa2c3, 0xf4a9, 0xf4aa, 463*91e1e26aSAlexander Pyhalov 0xf4ab, 0xf4ac, 0xf4ad, 0xffff, 0xd4e3, 0xdcdf, 0xe4e9, 0xe3f8, 464*91e1e26aSAlexander Pyhalov 0xd9a1, 0xb1bb, 0xf4ae, 0xc2ad, 0xc3fc, 0xe4d0, 0xc2bf, 0xbcf4, 465*91e1e26aSAlexander Pyhalov 0xb0a9, 0xb0c8, 0xf4af, 0xb0d2, 0xb0d4, 0xb0e3, 0xb0ee, 0xb1a7, 466*91e1e26aSAlexander Pyhalov 0xb1a3, 0xb1ac, 0xb1a9, 0xb1be, 0xb1df, 0xb1d8, 0xb1c8, 0xb1d7, 467*91e1e26aSAlexander Pyhalov 0xb1e3, 0xb1f4, 0xb1e1, 0xb2a3, 0xf4b0, 0xb2bb, 0xb2e6, 0xffff, 468*91e1e26aSAlexander Pyhalov 0xb2ed, 0xb2f5, 0xb2fc, 0xf4b1, 0xb3b5, 0xb3d8, 0xb3db, 0xb3e5, 469*91e1e26aSAlexander Pyhalov 0xb3ee, 0xb3fb, 0xf4b2, 0xf4b3, 0xb4c0, 0xb4c7, 0xb4d0, 0xb4de, 470*91e1e26aSAlexander Pyhalov 0xf4b4, 0xb5aa, 0xf4b5, 0xb5af, 0xb5c4, 0xb5e8, 0xf4b6, 0xb7c2, 471*91e1e26aSAlexander Pyhalov 0xb7e4, 0xb7e8, 0xb7e7, 0xf4b7, 0xf4b8, 0xf4b9, 0xb8ce, 0xb8e1, 472*91e1e26aSAlexander Pyhalov 0xb8f5, 0xb8f7, 0xb8f8, 0xb8fc, 0xb9af, 0xb9b7, 0xbabe, 0xbadb, 473*91e1e26aSAlexander Pyhalov 0xcdaa, 0xbae1, 0xf4ba, 0xbaeb, 0xbbb3, 0xbbb8, 0xf4bb, 0xbbca, 474*91e1e26aSAlexander Pyhalov 0xf4bc, 0xf4bd, 0xbbd0, 0xbbde, 0xbbf4, 0xbbf5, 0xbbf9, 0xbce4, 475*91e1e26aSAlexander Pyhalov 0xbced, 0xbcfe, 0xf4be, 0xbdc2, 0xbde7, 0xf4bf, 0xbdf0, 0xbeb0, 476*91e1e26aSAlexander Pyhalov 0xbeac, 0xf4c0, 0xbeb3, 0xbebd, 0xbecd, 0xbec9, 0xbee4, 0xbfa8, 477*91e1e26aSAlexander Pyhalov 0xbfc9, 0xc0c4, 0xc0e4, 0xc0f4, 0xc1a6, 0xf4c1, 0xc1f5, 0xc1fc, 478*91e1e26aSAlexander Pyhalov 0xf4c2, 0xc1f8, 0xc2ab, 0xc2a1, 0xc2a5, 0xf4c3, 0xc2b8, 0xc2ba, 479*91e1e26aSAlexander Pyhalov 0xf4c4, 0xc2c4, 0xc2d2, 0xc2d7, 0xc2db, 0xc2de, 0xc2ed, 0xc2f0, 480*91e1e26aSAlexander Pyhalov 0xf4c5, 0xc3a1, 0xc3b5, 0xc3c9, 0xc3b9, 0xf4c6, 0xc3d8, 0xc3fe, 481*91e1e26aSAlexander Pyhalov 0xf4c7, 0xc4cc, 0xf4c8, 0xc4d9, 0xc4ea, 0xc4fd, 0xf4c9, 0xc5a7, 482*91e1e26aSAlexander Pyhalov 0xc5b5, 0xc5b6, 0xf4ca, 0xc5d5, 0xc6b8, 0xc6d7, 0xc6e0, 0xc6ea, 483*91e1e26aSAlexander Pyhalov 0xc6e3, 0xc7a1, 0xc7ab, 0xc7c7, 0xc7c3, 0xffff, 0xffff, 0xffff, 484*91e1e26aSAlexander Pyhalov 0xc7cb, 0xc7cf, 0xc7d9, 0xf4cb, 0xf4cc, 0xc7e6, 0xc7ee, 0xc7fc, /* 0xfb47 */ 485*91e1e26aSAlexander Pyhalov 0xc7eb, 0xc7f0, 0xc8b1, 0xc8e5, 0xc8f8, 0xc9a6, 0xc9ab, 0xc9ad, 486*91e1e26aSAlexander Pyhalov 0xf4cd, 0xc9ca, 0xc9d3, 0xc9e9, 0xc9e3, 0xc9fc, 0xc9f4, 0xc9f5, 487*91e1e26aSAlexander Pyhalov 0xf4ce, 0xcab3, 0xcabd, 0xcaef, 0xcaf1, 0xcbae, 0xf4cf, 0xcbca, 488*91e1e26aSAlexander Pyhalov 0xcbe6, 0xcbea, 0xcbf0, 0xcbf4, 0xcbee, 0xcca5, 0xcbf9, 0xccab, 489*91e1e26aSAlexander Pyhalov 0xccae, 0xccad, 0xccb2, 0xccc2, 0xccd0, 0xccd9, 0xf4d0, 0xcdbb, 490*91e1e26aSAlexander Pyhalov 0xf4d1, 0xcebb, 0xf4d2, 0xceba, 0xcec3, 0xf4d3, 0xcef2, 0xb3dd, 491*91e1e26aSAlexander Pyhalov 0xcfd5, 0xcfe2, 0xcfe9, 0xcfed, 0xf4d4, 0xf4d5, 0xf4d6, 0xffff, 492*91e1e26aSAlexander Pyhalov 0xf4d7, 0xd0e5, 0xf4d8, 0xd0e9, 0xd1e8, 0xf4d9, 0xf4da, 0xd1ec, 493*91e1e26aSAlexander Pyhalov 0xd2bb, 0xf4db, 0xd3e1, 0xd3e8, 0xd4a7, 0xf4dc, 0xf4dd, 0xd4d4, 494*91e1e26aSAlexander Pyhalov 0xd4f2, 0xd5ae, 0xf4de, 0xd7de, 0xf4df, 0xd8a2, 0xd8b7, 0xd8c1, 495*91e1e26aSAlexander Pyhalov 0xd8d1, 0xd8f4, 0xd9c6, 0xd9c8, 0xd9d1, 0xf4e0, 0xf4e1, 0xf4e2, 496*91e1e26aSAlexander Pyhalov 0xf4e3, 0xf4e4, 0xdcd3, 0xddc8, 0xddd4, 0xddea, 0xddfa, 0xdea4, 497*91e1e26aSAlexander Pyhalov 0xdeb0, 0xf4e5, 0xdeb5, 0xdecb, 0xf4e6, 0xdfb9, 0xf4e7, 0xdfc3, 498*91e1e26aSAlexander Pyhalov 0xf4e8, 0xf4e9, 0xe0d9, 0xf4ea, 0xf4eb, 0xe1e2, 0xf4ec, 0xf4ed, 499*91e1e26aSAlexander Pyhalov 0xf4ee, 0xe2c7, 0xe3a8, 0xe3a6, 0xe3a9, 0xe3af, 0xe3b0, 0xe3aa, 500*91e1e26aSAlexander Pyhalov 0xe3ab, 0xe3bc, 0xe3c1, 0xe3bf, 0xe3d5, 0xe3d8, 0xe3d6, 0xe3df, 501*91e1e26aSAlexander Pyhalov 0xe3e3, 0xe3e1, 0xe3d4, 0xe3e9, 0xe4a6, 0xe3f1, 0xe3f2, 0xe4cb, 502*91e1e26aSAlexander Pyhalov 0xe4c1, 0xe4c3, 0xe4be, 0xf4ef, 0xe4c0, 0xe4c7, 0xe4bf, 0xe4e0, 503*91e1e26aSAlexander Pyhalov 0xe4de, 0xe4d1, 0xf4f0, 0xe4dc, 0xe4d2, 0xe4db, 0xe4d4, 0xe4fa, 504*91e1e26aSAlexander Pyhalov 0xe4ef, 0xe5b3, 0xe5bf, 0xe5c9, 0xe5d0, 0xe5e2, 0xe5ea, 0xe5eb, 505*91e1e26aSAlexander Pyhalov 0xf4f1, 0xf4f2, 0xf4f3, 0xe6e8, 0xe6ef, 0xe7ac, 0xf4f4, 0xe7ae, 506*91e1e26aSAlexander Pyhalov 0xf4f5, 0xe7b1, 0xf4f6, 0xe7b2, 0xe8b1, 0xe8b6, 0xf4f7, 0xf4f8, 507*91e1e26aSAlexander Pyhalov 0xe8dd, 0xf4f9, 0xf4fa, 0xe9d1, 0xf4fb, 0xffff, 0xffff, 0xffff, 508*91e1e26aSAlexander Pyhalov 0xe9ed, 0xeacd, 0xf4fc, 0xeadb, 0xeae6, 0xeaea, 0xeba5, 0xebfb, /* 0xfc47 */ 509*91e1e26aSAlexander Pyhalov 0xebfa, 0xf4fd, 0xecd6, 0xf4fe, 0xffff, 0xffff, 0xffff, 0xffff, 510*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 511*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 512*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 513*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 514*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 515*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 516*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 517*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 518*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 519*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 520*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 521*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 522*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 523*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 524*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 525*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 526*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 527*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 528*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 529*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 530*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 531*91e1e26aSAlexander Pyhalov 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff 532*91e1e26aSAlexander Pyhalov }; 533*91e1e26aSAlexander Pyhalov /* 534*91e1e26aSAlexander Pyhalov * jis208tosj1[]: 535*91e1e26aSAlexander Pyhalov * Directly convert 1st octet of JISX0208 encoded 2bytes codes 536*91e1e26aSAlexander Pyhalov * to the 1st octet of Shift-JIS encoded 2bytes codes. 537*91e1e26aSAlexander Pyhalov * Because the 8th bit is always OFF, the size of this array 538*91e1e26aSAlexander Pyhalov * can be limited to 128. (Precisely, 1st octet can vary between 539*91e1e26aSAlexander Pyhalov * 0x21 and 0x7e, and the correspondent Shift-JIS code is 540*91e1e26aSAlexander Pyhalov * between 0x81 and 0xfc. So we can use "0xff" as indicating invalid 541*91e1e26aSAlexander Pyhalov * value.) 542*91e1e26aSAlexander Pyhalov * 543*91e1e26aSAlexander Pyhalov * Principal: 544*91e1e26aSAlexander Pyhalov * 1: Index the array by using the value above as index number. 545*91e1e26aSAlexander Pyhalov * 2: Value "0xff" means the index number is invalid or, there's 546*91e1e26aSAlexander Pyhalov * no Shift-JIS value that corresponds to. 547*91e1e26aSAlexander Pyhalov * 548*91e1e26aSAlexander Pyhalov * Note: 549*91e1e26aSAlexander Pyhalov * 1: Some of Shift-JIS code points are mapped to JISX0208 plane 550*91e1e26aSAlexander Pyhalov * and others to JISX0212 plane. 551*91e1e26aSAlexander Pyhalov * Need to differentiate them before indexing and designate 552*91e1e26aSAlexander Pyhalov * appropriate character set. This table converts only code points 553*91e1e26aSAlexander Pyhalov * within each character set. 554*91e1e26aSAlexander Pyhalov * 555*91e1e26aSAlexander Pyhalov */ 556*91e1e26aSAlexander Pyhalov static const unsigned char jis208tosj1[] = { 557*91e1e26aSAlexander Pyhalov /* Values never be indexed */ 558*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 559*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 560*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 561*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 562*91e1e26aSAlexander Pyhalov 0xff, 563*91e1e26aSAlexander Pyhalov /* Index 1KU - 62KU in JISX0208 */ 564*91e1e26aSAlexander Pyhalov 0x81, 0x81, 0x82, 0x82, 0x83, 0x83, 0x84, 565*91e1e26aSAlexander Pyhalov 0x84, 0x85, 0x85, 0x86, 0x86, 0x87, 0x87, 0x88, 566*91e1e26aSAlexander Pyhalov 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b, 0x8b, 0x8c, 567*91e1e26aSAlexander Pyhalov 0x8c, 0x8d, 0x8d, 0x8e, 0x8e, 0x8f, 0x8f, 0x90, 568*91e1e26aSAlexander Pyhalov 0x90, 0x91, 0x91, 0x92, 0x92, 0x93, 0x93, 0x94, 569*91e1e26aSAlexander Pyhalov 0x94, 0x95, 0x95, 0x96, 0x96, 0x97, 0x97, 0x98, 570*91e1e26aSAlexander Pyhalov 0x98, 0x99, 0x99, 0x9a, 0x9a, 0x9b, 0x9b, 0x9c, 571*91e1e26aSAlexander Pyhalov 0x9c, 0x9d, 0x9d, 0x9e, 0x9e, 0x9f, 0x9f, 572*91e1e26aSAlexander Pyhalov /* Index 63KU - 84KU in JISX0208 */ 573*91e1e26aSAlexander Pyhalov 0xe0, 574*91e1e26aSAlexander Pyhalov 0xe0, 0xe1, 0xe1, 0xe2, 0xe2, 0xe3, 0xe3, 0xe4, 575*91e1e26aSAlexander Pyhalov 0xe4, 0xe5, 0xe5, 0xe6, 0xe6, 0xe7, 0xe7, 0xe8, 576*91e1e26aSAlexander Pyhalov 0xe8, 0xe9, 0xe9, 0xea, 0xea, 577*91e1e26aSAlexander Pyhalov /* Followings are mapped to "UDC" area in Shift-JIS */ 578*91e1e26aSAlexander Pyhalov 0xf0, 0xf0, 0xf1, 579*91e1e26aSAlexander Pyhalov 0xf1, 0xf2, 0xf2, 0xf3, 0xf3, 0xf4, 0xf4, 580*91e1e26aSAlexander Pyhalov /* Values never be indexed */ 581*91e1e26aSAlexander Pyhalov 0xff 582*91e1e26aSAlexander Pyhalov }; 583*91e1e26aSAlexander Pyhalov 584*91e1e26aSAlexander Pyhalov /* 585*91e1e26aSAlexander Pyhalov * jis212tosj1[]: 586*91e1e26aSAlexander Pyhalov * Directly convert 1st octet of JISX0212 encoded 2bytes codes 587*91e1e26aSAlexander Pyhalov * to the 1st octet of Shift-JIS encoded 2bytes codes. 588*91e1e26aSAlexander Pyhalov * Because the 8th bit is always OFF, the size of this array 589*91e1e26aSAlexander Pyhalov * can be limited to 128. (Precisely, 1st octet can vary between 590*91e1e26aSAlexander Pyhalov * 0x21 and 0x7e, and the correspondent Shift-JIS code is 591*91e1e26aSAlexander Pyhalov * between 0x81 and 0xfc. So we can use "0xff" as indicating invalid 592*91e1e26aSAlexander Pyhalov * value.) 593*91e1e26aSAlexander Pyhalov * 594*91e1e26aSAlexander Pyhalov * Principal: 595*91e1e26aSAlexander Pyhalov * 1: Index the array by using the value above as index number. 596*91e1e26aSAlexander Pyhalov * 2: Value "0xff" means the index number is invalid or, there's 597*91e1e26aSAlexander Pyhalov * no Shift-JIS value that corresponds to. 598*91e1e26aSAlexander Pyhalov * 599*91e1e26aSAlexander Pyhalov * Note: 600*91e1e26aSAlexander Pyhalov * 1: Most G3 characters cannot map to Shift-JIS coded space. 601*91e1e26aSAlexander Pyhalov * (Such characters are mapped to unique code point. In this 602*91e1e26aSAlexander Pyhalov * table, it is 0x222e in JISX0208.) 603*91e1e26aSAlexander Pyhalov * 2: Some of Shift-JIS code points are mapped to JISX0208 plane 604*91e1e26aSAlexander Pyhalov * and others to JISX0212 plane. 605*91e1e26aSAlexander Pyhalov * Need to differentiate them before indexing and designate 606*91e1e26aSAlexander Pyhalov * appropriate character set. This table converts only code points 607*91e1e26aSAlexander Pyhalov * within each character set. 608*91e1e26aSAlexander Pyhalov * 609*91e1e26aSAlexander Pyhalov */ 610*91e1e26aSAlexander Pyhalov static const unsigned char jis212tosj1[] = { 611*91e1e26aSAlexander Pyhalov /* Values never be indexed */ 612*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 613*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 614*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 615*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 616*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 617*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 618*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 619*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 620*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 621*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 622*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 623*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 624*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 625*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 626*91e1e26aSAlexander Pyhalov /* Followings are mapped to "NEC/IBM(?)" area in Shift-JIS */ 627*91e1e26aSAlexander Pyhalov /* 0xfa, */ 628*91e1e26aSAlexander Pyhalov /* 0xfa, 0xfb, 0xfb, 0xfc, 0xfc, */ 629*91e1e26aSAlexander Pyhalov 0xff, 630*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 631*91e1e26aSAlexander Pyhalov /* Followings are mapped to "UDC" area in Shift-JIS */ 632*91e1e26aSAlexander Pyhalov 0xf5, 0xf5, 0xf6, 633*91e1e26aSAlexander Pyhalov 0xf6, 0xf7, 0xf7, 0xf8, 0xf8, 0xf9, 0xf9, 634*91e1e26aSAlexander Pyhalov /* Values never be indexed */ 635*91e1e26aSAlexander Pyhalov 0xff 636*91e1e26aSAlexander Pyhalov }; 637*91e1e26aSAlexander Pyhalov 638*91e1e26aSAlexander Pyhalov /* 639*91e1e26aSAlexander Pyhalov * jistosj2[]: 640*91e1e26aSAlexander Pyhalov * Directly convert 2nd octet of 7bit-JIS encoded 2bytes codes 641*91e1e26aSAlexander Pyhalov * to the 2nd octet of Shift-JIS encoded 2bytes codes. 642*91e1e26aSAlexander Pyhalov * Although the source code may have the same value between 643*91e1e26aSAlexander Pyhalov * JISX0208 and JISX0212, the destination code point can vary with regard to 644*91e1e26aSAlexander Pyhalov * the eveness(oddness) of 'KU' number. 645*91e1e26aSAlexander Pyhalov * 646*91e1e26aSAlexander Pyhalov * Principal: 647*91e1e26aSAlexander Pyhalov * 1: Add 0x80 if 'KU' number is even. 648*91e1e26aSAlexander Pyhalov * 2: Index the array by using the value above as index number. 649*91e1e26aSAlexander Pyhalov * 3: Value "0xff" means the index number is invalid or, there's 650*91e1e26aSAlexander Pyhalov * no Shift-JIS value that corresponds to. 651*91e1e26aSAlexander Pyhalov * 652*91e1e26aSAlexander Pyhalov * Note: 653*91e1e26aSAlexander Pyhalov * 1: Use this table to map the 2nd octet of both JISX0208 654*91e1e26aSAlexander Pyhalov * and JISX0212. 655*91e1e26aSAlexander Pyhalov * 656*91e1e26aSAlexander Pyhalov */ 657*91e1e26aSAlexander Pyhalov static const unsigned char jistosj2[] = { 658*91e1e26aSAlexander Pyhalov /* Values never be indexed */ 659*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 660*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 661*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 662*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 663*91e1e26aSAlexander Pyhalov 0xff, 664*91e1e26aSAlexander Pyhalov /* Index 1TEN - 63TEN in 'odd KU' */ 665*91e1e26aSAlexander Pyhalov 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 666*91e1e26aSAlexander Pyhalov 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 667*91e1e26aSAlexander Pyhalov 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 668*91e1e26aSAlexander Pyhalov 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 669*91e1e26aSAlexander Pyhalov 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 670*91e1e26aSAlexander Pyhalov 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 671*91e1e26aSAlexander Pyhalov 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 672*91e1e26aSAlexander Pyhalov 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 673*91e1e26aSAlexander Pyhalov /* Index 64TEN - 94TEN in 'odd KU' */ 674*91e1e26aSAlexander Pyhalov 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 675*91e1e26aSAlexander Pyhalov 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 676*91e1e26aSAlexander Pyhalov 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 677*91e1e26aSAlexander Pyhalov 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 678*91e1e26aSAlexander Pyhalov /* Values never be indexed */ 679*91e1e26aSAlexander Pyhalov 0xff, 680*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 681*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 682*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 683*91e1e26aSAlexander Pyhalov 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 684*91e1e26aSAlexander Pyhalov 0xff, 685*91e1e26aSAlexander Pyhalov /* Index 1TEN - 63TEN in 'even KU' */ 686*91e1e26aSAlexander Pyhalov 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 687*91e1e26aSAlexander Pyhalov 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 688*91e1e26aSAlexander Pyhalov 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 689*91e1e26aSAlexander Pyhalov 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 690*91e1e26aSAlexander Pyhalov 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 691*91e1e26aSAlexander Pyhalov 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 692*91e1e26aSAlexander Pyhalov 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 693*91e1e26aSAlexander Pyhalov 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 694*91e1e26aSAlexander Pyhalov 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 695*91e1e26aSAlexander Pyhalov 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 696*91e1e26aSAlexander Pyhalov 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 697*91e1e26aSAlexander Pyhalov 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 698*91e1e26aSAlexander Pyhalov /* Values never be indexed */ 699*91e1e26aSAlexander Pyhalov 0xff 700*91e1e26aSAlexander Pyhalov }; 701*91e1e26aSAlexander Pyhalov 702*91e1e26aSAlexander Pyhalov #define JGETA (0x222e) 703*91e1e26aSAlexander Pyhalov #define EGETA (0xa2ae) 704*91e1e26aSAlexander Pyhalov #define PGETA (0x81ac) 705*91e1e26aSAlexander Pyhalov 706*91e1e26aSAlexander Pyhalov /* 707*91e1e26aSAlexander Pyhalov * Remap NEC/IBM codes to IBM codes 708*91e1e26aSAlexander Pyhalov * if dest == 0xffff, that means the source 709*91e1e26aSAlexander Pyhalov * code point is illegal in the current spec. 710*91e1e26aSAlexander Pyhalov */ 711*91e1e26aSAlexander Pyhalov 712*91e1e26aSAlexander Pyhalov #define REMAP_NEC(dest) \ 713*91e1e26aSAlexander Pyhalov if ((0xed40 <= dest) && \ 714*91e1e26aSAlexander Pyhalov (dest <= 0xed62)) { \ 715*91e1e26aSAlexander Pyhalov dest += 0xd1c; \ 716*91e1e26aSAlexander Pyhalov } else if ((0xed63 <= dest) && \ 717*91e1e26aSAlexander Pyhalov (dest <= 0xed7e)) { \ 718*91e1e26aSAlexander Pyhalov dest += 0xd1d; \ 719*91e1e26aSAlexander Pyhalov } else if ((0xed80 <= dest) && \ 720*91e1e26aSAlexander Pyhalov (dest <= 0xede0)) { \ 721*91e1e26aSAlexander Pyhalov dest += 0xd1c; \ 722*91e1e26aSAlexander Pyhalov } else if ((0xede1 <= dest) && \ 723*91e1e26aSAlexander Pyhalov (dest <= 0xedfc)) { \ 724*91e1e26aSAlexander Pyhalov dest += 0xd5f; \ 725*91e1e26aSAlexander Pyhalov } else if ((0xee40 <= dest) && \ 726*91e1e26aSAlexander Pyhalov (dest <= 0xee62)) { \ 727*91e1e26aSAlexander Pyhalov dest += 0xd1c; \ 728*91e1e26aSAlexander Pyhalov } else if ((0xee63 <= dest) && \ 729*91e1e26aSAlexander Pyhalov (dest <= 0xee7e)) { \ 730*91e1e26aSAlexander Pyhalov dest += 0xd1d; \ 731*91e1e26aSAlexander Pyhalov } else if ((0xee80 <= dest) && \ 732*91e1e26aSAlexander Pyhalov (dest <= 0xeee0)) { \ 733*91e1e26aSAlexander Pyhalov dest += 0xd1c; \ 734*91e1e26aSAlexander Pyhalov } else if ((0xeee1 <= dest) && \ 735*91e1e26aSAlexander Pyhalov (dest <= 0xeeec)) { \ 736*91e1e26aSAlexander Pyhalov dest += 0xd5f; \ 737*91e1e26aSAlexander Pyhalov } else if ((0xeeef <= dest) && \ 738*91e1e26aSAlexander Pyhalov (dest <= 0xeef8)) { \ 739*91e1e26aSAlexander Pyhalov dest += 0xb51; \ 740*91e1e26aSAlexander Pyhalov } else if ((0xeef9 <= dest) && \ 741*91e1e26aSAlexander Pyhalov (dest <= 0xeefc)) { \ 742*91e1e26aSAlexander Pyhalov dest += 0xb5b; \ 743*91e1e26aSAlexander Pyhalov } else { \ 744*91e1e26aSAlexander Pyhalov dest = 0xffff; \ 745*91e1e26aSAlexander Pyhalov } 746*91e1e26aSAlexander Pyhalov 747*91e1e26aSAlexander Pyhalov #define CHECK2BIG(width,time) \ 748*91e1e26aSAlexander Pyhalov if (oleft < (width)) { \ 749*91e1e26aSAlexander Pyhalov int i; \ 750*91e1e26aSAlexander Pyhalov for (i = time; i > 0; i--) { \ 751*91e1e26aSAlexander Pyhalov UNGET(); \ 752*91e1e26aSAlexander Pyhalov } \ 753*91e1e26aSAlexander Pyhalov errno = E2BIG; \ 754*91e1e26aSAlexander Pyhalov retval = (size_t)ERR_RETURN; \ 755*91e1e26aSAlexander Pyhalov goto ret; \ 756*91e1e26aSAlexander Pyhalov } 757*91e1e26aSAlexander Pyhalov 758*91e1e26aSAlexander Pyhalov /* 759*91e1e26aSAlexander Pyhalov * halfkana2zenkakuj[]: 760*91e1e26aSAlexander Pyhalov * Directly convert JIS X 0201 Kana (half width) to JIS X 0208 761*91e1e26aSAlexander Pyhalov * Kana (full width). 762*91e1e26aSAlexander Pyhalov * This table is for ISO-2022-JP.RFC1468 mode. 763*91e1e26aSAlexander Pyhalov * 764*91e1e26aSAlexander Pyhalov * Principal: 765*91e1e26aSAlexander Pyhalov * 1: Subtract 0x21 or 0x81. 766*91e1e26aSAlexander Pyhalov * 2: Index the array by using the value above as index number. 767*91e1e26aSAlexander Pyhalov * 768*91e1e26aSAlexander Pyhalov * Note: 769*91e1e26aSAlexander Pyhalov */ 770*91e1e26aSAlexander Pyhalov static const unsigned short halfkana2zenkakuj[] = { 771*91e1e26aSAlexander Pyhalov 0x2123, 0x2156, 0x2157, 0x2122, 0x2126, 0x2572, 0x2521, 0x2523, 772*91e1e26aSAlexander Pyhalov 0x2525, 0x2527, 0x2529, 0x2563, 0x2565, 0x2567, 0x2543, 0x213c, 773*91e1e26aSAlexander Pyhalov 0x2522, 0x2524, 0x2526, 0x2528, 0x252a, 0x252b, 0x252d, 0x252f, 774*91e1e26aSAlexander Pyhalov 0x2531, 0x2533, 0x2535, 0x2537, 0x2539, 0x253b, 0x253d, 0x253f, 775*91e1e26aSAlexander Pyhalov 0x2541, 0x2544, 0x2546, 0x2548, 0x254a, 0x254b, 0x254c, 0x254d, 776*91e1e26aSAlexander Pyhalov 0x254e, 0x254f, 0x2552, 0x2555, 0x2558, 0x255b, 0x255e, 0x255f, 777*91e1e26aSAlexander Pyhalov 0x2560, 0x2561, 0x2562, 0x2564, 0x2566, 0x2568, 0x2569, 0x256a, 778*91e1e26aSAlexander Pyhalov 0x256b, 0x256c, 0x256d, 0x256f, 0x2573, 0x212b, 0x212c}; 779*91e1e26aSAlexander Pyhalov 780*91e1e26aSAlexander Pyhalov /* 781*91e1e26aSAlexander Pyhalov * halfkana2zenkakue[]: 782*91e1e26aSAlexander Pyhalov * Directly convert JIS X 0201 Kana (half width) to JIS X 0208 783*91e1e26aSAlexander Pyhalov * (eucJP). 784*91e1e26aSAlexander Pyhalov * This table is for ISO-2022-JP.RFC1468 mode. 785*91e1e26aSAlexander Pyhalov * 786*91e1e26aSAlexander Pyhalov * Principal: 787*91e1e26aSAlexander Pyhalov * 1: Subtract 0x21 or 0x81. 788*91e1e26aSAlexander Pyhalov * 2: Index the array by using the value above as index number. 789*91e1e26aSAlexander Pyhalov * 790*91e1e26aSAlexander Pyhalov * Note: 791*91e1e26aSAlexander Pyhalov */ 792*91e1e26aSAlexander Pyhalov static const unsigned short halfkana2zenkakue[] = { 793*91e1e26aSAlexander Pyhalov 0xa1a3, 0xa1d6, 0xa1d7, 0xa1a2, 0xa1a6, 0xa5f2, 0xa5a1, 794*91e1e26aSAlexander Pyhalov 0xa5a3, 0xa5a5, 0xa5a7, 0xa5a9, 0xa5e3, 0xa5e5, 0xa5e7, 795*91e1e26aSAlexander Pyhalov 0xa5c3, 0xa1bc, 0xa5a2, 0xa5a4, 0xa5a6, 0xa5a8, 0xa5aa, 796*91e1e26aSAlexander Pyhalov 0xa5ab, 0xa5ad, 0xa5af, 0xa5b1, 0xa5b3, 0xa5b5, 0xa5b7, 797*91e1e26aSAlexander Pyhalov 0xa5b9, 0xa5bb, 0xa5bd, 0xa5bf, 0xa5c1, 0xa5c4, 0xa5c6, 798*91e1e26aSAlexander Pyhalov 0xa5c8, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce, 0xa5cf, 799*91e1e26aSAlexander Pyhalov 0xa5d2, 0xa5d5, 0xa5d8, 0xa5db, 0xa5de, 0xa5df, 0xa5e0, 800*91e1e26aSAlexander Pyhalov 0xa5e1, 0xa5e2, 0xa5e4, 0xa5e6, 0xa5e8, 0xa5e9, 0xa5ea, 801*91e1e26aSAlexander Pyhalov 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ef, 0xa5f3, 0xa1ab, 0xa1ac}; 802*91e1e26aSAlexander Pyhalov 803*91e1e26aSAlexander Pyhalov /* 804*91e1e26aSAlexander Pyhalov * halfkana2zenkakus[]: 805*91e1e26aSAlexander Pyhalov * Directly convert JIS X 0201 Kana (half width) to PCK Kana 806*91e1e26aSAlexander Pyhalov * (full width). 807*91e1e26aSAlexander Pyhalov * This table is for ISO-2022-JP.RFC1468 mode. 808*91e1e26aSAlexander Pyhalov * 809*91e1e26aSAlexander Pyhalov * Principal: 810*91e1e26aSAlexander Pyhalov * 1: Subtract 0x21 or 0x81. 811*91e1e26aSAlexander Pyhalov * 2: Index the array by using the value above as index number. 812*91e1e26aSAlexander Pyhalov * 813*91e1e26aSAlexander Pyhalov * Note: 814*91e1e26aSAlexander Pyhalov */ 815*91e1e26aSAlexander Pyhalov static const unsigned short halfkana2zenkakus[] = { 816*91e1e26aSAlexander Pyhalov 0x8142, 0x8175, 0x8176, 0x8141, 0x8145, 0x8392, 0x8340, 0x8342, 817*91e1e26aSAlexander Pyhalov 0x8344, 0x8346, 0x8348, 0x8383, 0x8385, 0x8387, 0x8362, 0x815b, 818*91e1e26aSAlexander Pyhalov 0x8341, 0x8343, 0x8345, 0x8347, 0x8349, 0x834a, 0x834c, 0x834e, 819*91e1e26aSAlexander Pyhalov 0x8350, 0x8352, 0x8354, 0x8356, 0x8358, 0x835a, 0x835c, 0x835e, 820*91e1e26aSAlexander Pyhalov 0x8360, 0x8363, 0x8365, 0x8367, 0x8369, 0x836a, 0x836b, 0x836c, 821*91e1e26aSAlexander Pyhalov 0x836d, 0x836e, 0x8371, 0x8374, 0x8377, 0x837a, 0x837d, 0x837e, 822*91e1e26aSAlexander Pyhalov 0x8380, 0x8381, 0x8382, 0x8384, 0x8386, 0x8388, 0x8389, 0x838a, 823*91e1e26aSAlexander Pyhalov 0x838b, 0x838c, 0x838d, 0x838f, 0x8393, 0x814a, 0x814b}; 824