// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.
//
// @@@ END COPYRIGHT @@@
/*
 * COPYRIGHT NOTICE
 * 
 * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc.
 * ALL RIGHTS RESERVED (OSF/1).  See /usr/include/COPYRIGHT.OSF1 .
 */

#include <sys/types.h>

#ifndef NA_EIDPROC
#define NA_EIDPROC
#define _resident
#endif

/*
 * Macros
 */
#define MULTIBYTE	0x80
#define SS2		0x8e
#define SS3		0x8f

#define PLANE1		0x00200
#define PLANE2		(PLANE1+PLANE_SIZE)
#define PLANE3		(PLANE2+PLANE_SIZE)
#define PLANE4		(PLANE3+PLANE_SIZE)
#define PLANE5		(PLANE4+PLANE_SIZE)
#define PLANE6		(PLANE5+PLANE_SIZE)
#define PLANE7		(PLANE6+PLANE_SIZE)
#define PLANE8		-1		/* Not used */
#define PLANE9		-1		/* Not used */
#define PLANE10		-1		/* Not used */
#define PLANE11		-1		/* Not used */
#define PLANE12		-1		/* Not used */
#define PLANE13		-1		/* Not used */
#define PLANE14		-1		/* Not used */
#define PLANE15		(PLANE7 +PLANE_SIZE)
#define PLANE16		-1		/* Not used */
#define	PLANEU		(PLANE15+PLANE_SIZE)	/* UDC plane   */
#define	PLANEXU		(PLANEU +UCS_UCNT  )	/* XUDC planes */
#define	PLANE_SIZE	0x02300
#define	MAX_TIDX	(PLANEU+PLANE_SIZE)	/* Maximum table index value */

//#define BAD		-1

/*
 * Check for C1 control characters
 */
#define	ISC1CHAR(c)  ((0x80 <= (c)) && ((c) <= 0x9f))


/*
 * The following macros are used to detect if a certain byte is a valid 
 * first or second byte of a multibyte character. A table lookup mechanism
 * is used for efficient access of valid character information. The cvtab[]
 * table can be found in the mb_iconv.c module.
 *
 * Range bit :
 *	Bit  0 - 0x21 to 0x3f
 *	Bit  1 - 0x40
 *	Bit  2 - 0x41 to 0x5a
 *	Bit  3 - 0x5b to 0x60
 *	Bit  4 - 0x61 to 0x7a
 *	Bit  5 - 0x7b to 0x7d
 *	Bit  6 - 0x7e
 *	Bit  7 - 0x80
 *	Bit  8 - 0x81 to 0x8d
 *	Bit  9 - 0x8e to 0x9d
 *	Bit 10 - 0x9e
 *	Bit 11 - 0x9f
 *	Bit 12 - 0xa0
 *	Bit 13 - 0xa1 to 0xc6
 *	Bit 14 - 0xc7 to 0xdf
 *	Bit 15 - 0xe0 to 0xf9
 *	Bit 16 - 0xfa to 0xfc
 *	Bit 17 - 0xfd
 *	Bit 18 - 0xfe
 *	Bit 19 - 0x30 to 0x39
 */
#define	VBIT_21TO3F		0x00001
#define	VBIT_40			0x00002
#define	VBIT_41TO5A		0x00004
#define	VBIT_5BTO60		0x00008
#define	VBIT_61TO7A		0x00010
#define	VBIT_7BTO7D		0x00020
#define	VBIT_7E			0x00040
#define	VBIT_80			0x00080
#define	VBIT_81TO8D		0x00100
#define	VBIT_8ETO9D		0x00200
#define	VBIT_9E			0x00400
#define	VBIT_9F			0x00800
#define	VBIT_A0			0x01000
#define	VBIT_A1TOC6		0x02000
#define	VBIT_C7TODF		0x04000
#define	VBIT_E0TOF9		0x08000
#define	VBIT_FATOFC		0x10000
#define	VBIT_FD			0x20000
#define	VBIT_FE			0x40000
#define	VBIT_30TO39		0x80000

#define	RANGE_30TO39		(VBIT_30TO39 )
#define	RANGE_81TO8D		(VBIT_81TO8D )
#define	RANGE_A0TOC6		(VBIT_A0     | VBIT_A1TOC6 )
#define	RANGE_A1TODF		(VBIT_A1TOC6 | VBIT_C7TODF)
#define	RANGE_40TO7E		(VBIT_40     | VBIT_41TO5A | VBIT_5BTO60 | \
				 VBIT_61TO7A | VBIT_7BTO7D | VBIT_7E )
#define	RANGE_81TO9F		(VBIT_81TO8D | VBIT_8ETO9D | VBIT_9E | VBIT_9F)
#define	RANGE_8ETOA0		(VBIT_8ETO9D | VBIT_9E     | VBIT_9F | VBIT_A0)
#define	RANGE_21TO7E		(VBIT_21TO3F | RANGE_40TO7E)
#define	RANGE_80TOA0		(RANGE_81TO9F| VBIT_80     | VBIT_A0     )
#define	RANGE_81TOA0		(RANGE_81TO9F| VBIT_A0	   )
#define	RANGE_A1TOFC		(RANGE_A1TODF| VBIT_E0TOF9 | VBIT_FATOFC )
#define	RANGE_A1TOFE		(RANGE_A1TOFC| VBIT_FD     | VBIT_FE     )

#define	RANGE_80TOFC		(VBIT_80     | RANGE_81TOA0| RANGE_A1TOFC)
#define	RANGE_A1TOF9		(RANGE_A1TODF| VBIT_E0TOF9 )
#define	RANGE_E0TOFC		(VBIT_E0TOF9 | VBIT_FATOFC )
#define	RANGE_FATOFE		(VBIT_FATOFC | VBIT_FD     | VBIT_FE     )
#define	RANGE_81TO9F_E0TOFC	(RANGE_81TO9F| VBIT_E0TOF9 | VBIT_FATOFC )
#define	RANGE_21TO7E_A1TOFE	(RANGE_21TO7E| RANGE_A1TOFE)
#define	RANGE_81TOFE		(RANGE_81TOA0| RANGE_A1TOFE)
#define RANGE_40TO7E_80TOA0	(RANGE_40TO7E| RANGE_80TOA0)
#define	RANGE_40TO7E_80TOFC	(RANGE_40TO7E| RANGE_80TOFC)
#define	RANGE_40TO7E_80TOFE	(RANGE_40TO7E| RANGE_80TOFC | VBIT_FD | VBIT_FE)
#define	RANGE_40TO7E_A1TOFE	(RANGE_40TO7E| RANGE_A1TOFE)
#define	RANGE_81TOA0_FATOFE	(RANGE_81TOA0| RANGE_FATOFE)
#define	RANGE_41TO5A_61TO7A_81TOFE	\
				(VBIT_41TO5A | VBIT_61TO7A | RANGE_81TOFE)
#define	RANGE_41TO5A_61TO7A_81TOA0	\
				(VBIT_41TO5A | VBIT_61TO7A | RANGE_81TOA0)

#define	VBITS_EUCTW1		RANGE_A1TOFE
#define	VBITS_EUCTW2		RANGE_A1TOFE
#define	VBITS_DECHANYU1		RANGE_A1TOFE
#define	VBITS_DECHANYU2		RANGE_21TO7E_A1TOFE
#define	VBITS_EDPC1		RANGE_A1TOFE
#define	VBITS_EDPC2		RANGE_A1TOFE
#define	VBITS_DECHANZI1		RANGE_A1TOFE
#define	VBITS_DECHANZI2		RANGE_21TO7E_A1TOFE
#define	VBITS_DECKOREAN1	RANGE_A1TOFE
#define	VBITS_DECKOREAN2	RANGE_21TO7E_A1TOFE
#define	VBITS_BIG5_1		RANGE_81TOFE
#define	VBITS_BIG5_2		RANGE_40TO7E_A1TOFE
#define	VBITS_KANA		RANGE_A1TODF
#define	VBITS_DECKANJI1		RANGE_A1TOFE
#define	VBITS_DECKANJI2		RANGE_21TO7E_A1TOFE
#define	VBITS_EUCJP1		RANGE_A1TOFE
#define	VBITS_EUCJP2		RANGE_A1TOFE
#define	VBITS_SJIS1		RANGE_81TO9F_E0TOFC
#define	VBITS_SJIS2		RANGE_40TO7E_80TOFC
#define	VBITS_JIS1		RANGE_21TO7E
#define	VBITS_JIS2		RANGE_21TO7E
#define	VBITS_GBK1		RANGE_81TOFE
#define	VBITS_GBK2		RANGE_40TO7E_80TOFE

#define	VALID_EUCTW1(c)		(__cvtab[(unsigned)(c)] & VBITS_EUCTW1	  )
#define	VALID_EUCTW2(c)		(__cvtab[(unsigned)(c)] & VBITS_EUCTW2	  )
#define	VALID_DECHANYU1(c)	(__cvtab[(unsigned)(c)] & VBITS_DECHANYU1 )
#define	VALID_DECHANYU2(c)	(__cvtab[(unsigned)(c)] & VBITS_DECHANYU2 )
#define	VALID_EDPC1(c)		(__cvtab[(unsigned)(c)] & VBITS_EDPC1	  )
#define	VALID_EDPC2(c)		(__cvtab[(unsigned)(c)] & VBITS_EDPC2	  )
#define	VALID_DECHANZI1(c)	(__cvtab[(unsigned)(c)] & VBITS_DECHANZI1 )
#define	VALID_DECHANZI2(c)	(__cvtab[(unsigned)(c)] & VBITS_DECHANZI2 )
#define	VALID_DECKOREAN1(c)	(__cvtab[(unsigned)(c)] & VBITS_DECKOREAN1)
#define	VALID_DECKOREAN2(c)	(__cvtab[(unsigned)(c)] & VBITS_DECKOREAN2)
#define	VALID_KANA(c)		(__cvtab[(unsigned)(c)] & VBITS_KANA	  )
#define	VALID_DECKANJI1(c)	(__cvtab[(unsigned)(c)] & VBITS_DECKANJI1 )
#define	VALID_DECKANJI2(c)	(__cvtab[(unsigned)(c)] & VBITS_DECKANJI2 )
#define	VALID_EUCJP1(c)		(__cvtab[(unsigned)(c)] & VBITS_EUCJP1    )
#define	VALID_EUCJP2(c)		(__cvtab[(unsigned)(c)] & VBITS_EUCJP2    )
#define	VALID_JIS1(c)		(__cvtab[(unsigned)(c)] & VBITS_JIS1      )
#define	VALID_JIS2(c)		(__cvtab[(unsigned)(c)] & VBITS_JIS2      )
#define	VALID_GBK1(c)		(__cvtab[(unsigned)(c)] & VBITS_GBK1      )
#define	VALID_GBK2(c)		(__cvtab[(unsigned)(c)] & VBITS_GBK2      )
#define	VALID_EUCTWPLANE(c)	(__cvtab[(unsigned)(c)] & VBIT_EUCTWPLANE )

/*
 * SJIS related macros
 *
 * Valid SJIS first  byte: 0x81 - 0x9f, 0xe0 - 0xfc
 * Valid SJIS second byte: 0x40 - 0x7e, 0x80 - 0xfc
 * 
 * SJIS plane 0: 0xa1 <= 1st byte <= 0xdf	(JIS X 0201 - single byte)
 * SJIS plane 1: 0x81 <= 1st byte <= 0x9f	(JIS X 0208)
 * SJIS plane 2: 0xe0 <= 1st byte <= 0xea	(JIS X 0208)
 * SJIS plane U: 0xf0 <= 1st byte <= 0xfc	(UDC)
 *		 0xeb <= 1st byte <= 0xef
 *
 * The SJIS_ROW*, SJIS_COL & SJIS_IDX* macros are used to compute index
 * for accessing the cell table. The input values must be range checked
 * before using those macros.
 *
 * All unmapped codepoints will now map to the BMP UDC area.
 */
#define	SJIS_VALID1(c)	  (__cvtab[(unsigned)(c)] & VBITS_SJIS1 )
#define	SJIS_VALID2(c)	  (__cvtab[(unsigned)(c)] & VBITS_SJIS2 )
#define	SJIS_PLANE0(c)	  (__cvtab[(unsigned)(c)] & VBITS_KANA  )
#define	SJIS_PLANE1(c)	  (__cvtab[(unsigned)(c)] & RANGE_81TO9F)
#define	SJIS_PLANE2(c)	 ((__cvtab[(unsigned)(c)] & RANGE_E0TOFC) && \
			 ((unsigned)(c) <= 0xea))
#define	SJIS_PLANEU(c)	 ((__cvtab[(unsigned)(c)] & RANGE_E0TOFC) && \
			 ((c) >=  0xeb))
#define	SJIS_ROW1(c)	 ((c) - 0x81)
#define	SJIS_ROW2(c)	 ((c) - 0xe0)
#define	SJIS_ROW3(c)	 (((c) >= 0xf0) ? ((c) - 0xf0) : \
			  ((c)  - 0xeb + (0xfc - 0xf0 + 1)))
#define	SJIS_COL(c)	 sjis_to_idx[c]
#define	SJIS_COLSIZ	 (SJIS_COL(0xfc) + 1)
#define	SJIS_IDX0(c)	 ((c) + 0x100)
#define	SJIS_IDX1(c1,c2) (PLANE1 + SJIS_ROW1(c1) * SJIS_COLSIZ + SJIS_COL(c2))
#define	SJIS_IDX2(c1,c2) (PLANE2 + SJIS_ROW2(c1) * SJIS_COLSIZ + SJIS_COL(c2))
#define	SJIS_IDXU(c1,c2) (PLANEU + SJIS_ROW3(c1) * SJIS_COLSIZ + SJIS_COL(c2))
#define	UIDX1_SJIS(idx)	 ((((idx)/SJIS_COLSIZ + 0xf0) << 8) |\
			 idx_to_sjis[(idx)%SJIS_COLSIZ])
#define	UIDX2_SJIS(idx)	 ((((idx)/SJIS_COLSIZ + 0xeb) << 8) |\
			 idx_to_sjis[(idx)%SJIS_COLSIZ])
#define UIDX_SJIS(idx)	 (((idx)  < SJIS_UCNT1) ? UIDX1_SJIS(idx) : \
			 (((idx) -= SJIS_UCNT1), 		    \
			  ((idx)  < SJIS_UCNT2) ? UIDX2_SJIS(idx) : BAD))
#define	SJIS_UCNT1	 ((0xfc - 0xf0 + 1) * SJIS_COLSIZ)
#define	SJIS_UCNT2	 ((0xef - 0xeb + 1) * SJIS_COLSIZ)
#define	SJIS_UCNT	 (SJIS_UCNT1 + SJIS_UCNT2)

/*
 * BIG-5 related macros
 *
 * Valid BIG-5 first  byte: 0x81 - 0xfe
 * Valid BIG-5 second byte: 0x40 - 0x7e, 0xa1 - 0xfe
 *
 * BIG-5 plane 1: 0xa1 <= 1st byte <= 0xf9
 *		  0x40 <= 2nd byte <= 0x7e
 * BIG-5 plane 2: 0xa1 <= 1st byte <= 0xf9
 *		  0xa1 <= 2nd byte <= 0xfe
 * BIG-5 plane U: 0xfa <= 1st byte <= 0xfe (UDC level 1)
 *		  0x8e <= 1st byte <= 0xa0 (UDC level 2)
 *		  0x81 <= 1st byte <= 0x8d (UDC level 3)
 * 
 * All the non-UDC BIG-5 characters that have no mapping are now mapped
 * to the BMP UDC area after those occupied by the plane U characters.
 */
#define	BIG5_VALID1(c)	    (__cvtab[(unsigned)(c )] & VBITS_BIG5_1)
#define	BIG5_VALID2(c)	    (__cvtab[(unsigned)(c )] & VBITS_BIG5_2)
#define BIG5_PLANE1(c1,c2) ((__cvtab[(unsigned)(c1)] & RANGE_A1TOF9) && \
			    (__cvtab[(unsigned)(c2)] & RANGE_40TO7E))
#define BIG5_PLANE2(c1,c2) ((__cvtab[(unsigned)(c1)] & RANGE_A1TOF9) && \
			    (__cvtab[(unsigned)(c2)] & RANGE_A1TOFE))
#define BIG5_PLANEU(c1,c2)  (__cvtab[(unsigned)(c1)] & RANGE_81TOA0_FATOFE)
#define	BIG5_UDC1(c)	    (__cvtab[(unsigned)(c )] & RANGE_FATOFE)
#define	BIG5_UDC2(c)	    (__cvtab[(unsigned)(c )] & RANGE_8ETOA0)
#define	BIG5_UDC3(c)	    (__cvtab[(unsigned)(c )] & RANGE_81TO8D)
#define	BIG5_COLSIZ	     157
#define	BIG5_UCNT1	   ((0xfe - 0xfa + 1) * BIG5_COLSIZ)
#define	BIG5_UCNT2	   ((0xa0 - 0x8e + 1) * BIG5_COLSIZ)
#define	BIG5_UCNT3	   ((0x8d - 0x81 + 1) * BIG5_COLSIZ)
#define	BIG5_UCNT	    (BIG5_UCNT1 + BIG5_UCNT2 + BIG5_UCNT3)
#define	BIG5_UDC1IDX(c)	  (((c) - 0xfa) * BIG5_COLSIZ)
#define	BIG5_UDC2IDX(c)	  (((c) - 0x8e) * BIG5_COLSIZ + BIG5_UCNT1)
#define	BIG5_UDC3IDX(c)	  (((c) - 0x81) * BIG5_COLSIZ + BIG5_UCNT1 + BIG5_UCNT2)
#define	BIG5_IDX1(c1,c2)    (PLANE1 + ((c1) - 0xa1) * 63 + ((c2) - 0x40))
#define	BIG5_IDX2(c1,c2)    (PLANE2 + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	BIG5_IDXU(c1,c2)    (PLANEU + (BIG5_UDC1(c1) ? BIG5_UDC1IDX(c1)	 \
				    :  BIG5_UDC2(c1) ? BIG5_UDC2IDX(c1)	 \
						     : BIG5_UDC3IDX(c1)) \
				    + big5_to_idx[c2])
#define	BIG5_UDC(c1,c2)	     BIG5_PLANEU(c1,c2)
#define	BIG5_UIDX(c1,c2)    (BIG5_IDXU(c1,c2) - PLANEU)
#define	UIDX1_BIG5(idx)	    ((((idx)/BIG5_COLSIZ + 0xfa) << 8) |\
			    idx_to_big5[(idx)%BIG5_COLSIZ])
#define	UIDX2_BIG5(idx)	    ((((idx)/BIG5_COLSIZ + 0x8e) << 8) |\
			    idx_to_big5[(idx)%BIG5_COLSIZ])
#define	UIDX3_BIG5(idx)	    ((((idx)/BIG5_COLSIZ + 0x81) << 8) |\
			    idx_to_big5[(idx)%BIG5_COLSIZ])
#define	UIDX_BIG5(idx)	    (((idx)  < BIG5_UCNT1) ? UIDX1_BIG5(idx) :	\
			    (((idx) -= BIG5_UCNT1),			\
			     ((idx)  < BIG5_UCNT2) ? UIDX2_BIG5(idx) :	\
			    (((idx) -= BIG5_UCNT2),			\
			     ((idx)  < BIG5_UCNT3) ? UIDX3_BIG5(idx) :	\
			       BAD)))
/* 
 * Number of big-5 characters remapped to the end of private use area.
 */
#define	BIG5_NUMREMAPCHAR   7

/*
 * HKSCS related macros
 *
 * Valid HKSCS first  byte: 0x81 - 0xfe
 * Valid HKSCS second byte: 0x40 - 0x7e, 0xa1 - 0xfe
 *
 * HKSCS is very similar to BIG-5. The major difference is the use of some
 * of the UDC regions to encode Hong Kong specific characters.
 *
 * HKSCS plane 1: 0xa1 <= 1st byte <= 0xfe
 *		  0x40 <= 2nd byte <= 0x7e
 * HKSCS plane 2: 0xa1 <= 1st byte <= 0xfe
 *		  0xa1 <= 2nd byte <= 0xfe
 * HKSCS plane 3: 0x88 <= 1st byte <= 0xa0
 */
#define	HKSCS_VALID1(c)	     (__cvtab[(unsigned)(c )] & VBITS_BIG5_1)
#define	HKSCS_VALID2(c)	     (__cvtab[(unsigned)(c )] & VBITS_BIG5_2)
#define HKSCS_PLANE1(c1,c2) ((__cvtab[(unsigned)(c1)] & RANGE_A1TOFE) && \
			     (__cvtab[(unsigned)(c2)] & RANGE_40TO7E))
#define HKSCS_PLANE2(c1,c2) ((__cvtab[(unsigned)(c1)] & RANGE_A1TOFE) && \
			     (__cvtab[(unsigned)(c2)] & RANGE_A1TOFE))
#define HKSCS_PLANE3(c1,c2) ((__cvtab[(unsigned)(c1)] & RANGE_81TOA0) && \
			    ((c1) >= 0x88))
#define	HKSCS_COLSIZ	     157
#define	HKSCS_IDX1(c1,c2)    (PLANE1 + ((c1) - 0xa1) * 63 + ((c2) - 0x40))
#define	HKSCS_IDX2(c1,c2)    (PLANE2 + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	HKSCS_IDX3(c1,c2)    (PLANE3 + ((c1) - 0x88) * HKSCS_COLSIZ \
				     + big5_to_idx[c2])
#define	HKSCS_UROWSIZE	     32	/* Row size of UDC to HKSCS mapping table */

/*
 * DEC Hanyu related macros
 *
 * Valid DEC Hanyu first  byte: 0xa1 - 0xfe
 * Valid DEC Hanyu second byte: 0x21 - 0x7e, 0xa1 - 0xfe
 * Leading code of DTSCS      : 0xc2 0xcb
 * 
 * DEC Hanyu plane 1: 0xa1 <= 1st byte <= 0xfe
 *		      0xa1 <= 2nd byte <= 0xfe
 * DEC Hanyu plane 2: 0xa1 <= 1st byte <= 0xfe
 *		      0x21 <= 2nd byte <= 0x7e
 * DEC Hanyu plane 3: 1st byte = 0xc2
 *		      2nd byte = 0xcb
 * 		      0xa1 <= 3rd byte <= 0xfe
 *		      0xa1 <= 4th byte <= 0xfe
 * UDC		    : 0xfdcc-0xfefe, 0xaaa1-0xc1fe, 0xf245-0xfe7e
 *
 * The following codepoints will be mapped to XUDC areas:
 *	0xc2cbe5a1 - 0xc2cbfefe
 *	0xc2cba121 - 0xc2cbfe7e
 * The other non-mappable characters will be mapped to UDC areas beyond those
 * used by the three UDC regions listed above.
 */
#define	DECHANYU_VALID1(c)	(__cvtab[(unsigned)(c)] & RANGE_A1TOFE)
#define	DECHANYU_VALID2(c)	(__cvtab[(unsigned)(c)] & RANGE_21TO7E_A1TOFE)
#define	DTSCS_VALID1(c)		(__cvtab[(unsigned)(c)] & RANGE_A1TOFE)
#define	DTSCS_VALID2(c)		(__cvtab[(unsigned)(c)] & RANGE_21TO7E_A1TOFE)
#define	DTSCS_LEADCODE(c1,c2)	(((c1) == 0xc2) && ((c2) == 0xcb))
#define	DECHANYU_PLANE1(c1,c2)	(__cvtab[(unsigned)(c2)] & RANGE_A1TOFE)
#define	DECHANYU_PLANE2(c1,c2)	(__cvtab[(unsigned)(c2)] & RANGE_21TO7E)
#define	DECHANYU_PLANE3(c1,c2)	DECHANYU_PLANE1(c1,c2)
#define	DECHANYU_PLANE4(c1,c2)	DECHANYU_PLANE2(c1,c2)
#define	DECHANYU_IDX1(c1,c2)	(PLANE1 + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	DECHANYU_IDX2(c1,c2)	(PLANE2 + ((c1) - 0xa1) * 94 + ((c2) - 0x21))
#define	DECHANYU_IDX3(c1,c2)	(PLANE3 + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))

#define	DECHANYU_UCNT11		((0xfe - 0xcc + 1) + 94)
#define	DECHANYU_UCNT12		((0xc1 - 0xaa + 1) * 94)
#define	DECHANYU_UCNT2		((0xfe - 0xf2 + 1) * 94 - (0x45 - 0x21))
#define	DECHANYU_UCNT		(DECHANYU_UCNT11+DECHANYU_UCNT12+DECHANYU_UCNT2)
#define	DECHANYU_START11	0
#define	DECHANYU_START12	DECHANYU_UCNT11
#define	DECHANYU_START2		DECHANYU_UCNT11 + DECHANYU_UCNT12
#define	DECHANYU_IDXU1(c1,c2)	(PLANEU + (((c1) >= 0xfd) \
		? ((((c1) - 0xfd) * 94 + (c2) - 0xcc) + DECHANYU_START11) \
		: ((((c1) - 0xaa) * 94 + (c2) - 0xa1) + DECHANYU_START12)))
#define	DECHANYU_IDXU2(c1,c2)	(PLANEU + (((c1) - 0xf2) * 94 + (c2) - 0x21) + \
				 DECHANYU_START2 - 0x24)

#define	UIDX11_DECHANYU(idx) ((((idx + 0x2b)/94 + 0xfd) << 8) |\
			       ((idx + 0x2b)%94 + 0xa1))
#define	UIDX12_DECHANYU(idx) ((((idx)/94 + 0xaa) << 8) | ((idx)%94 + 0xa1))
#define	UIDX2_DECHANYU(idx)  ((((idx + 0x24)/94 + 0xf2) << 8) |\
			       ((idx + 0x24)%94 + 0x21))
#define	UIDX_DECHANYU(idx)    (((idx)  < DECHANYU_UCNT11)?UIDX11_DECHANYU(idx):\
			      (((idx) -= DECHANYU_UCNT11),		       \
			       ((idx)  < DECHANYU_UCNT12)?UIDX12_DECHANYU(idx):\
			      (((idx) -= DECHANYU_UCNT12),		       \
			       ((idx)  < DECHANYU_UCNT2 )?UIDX2_DECHANYU(idx) :\
				 BAD)))
#define	DECHANYU_UDC11(c)	((0xaaa1 <= (c)) && ((c) <= 0xc1fe))
#define	DECHANYU_UDC12(c)	((0xfdcc <= (c)) && ((c) <= 0xfefe))
#define	DECHANYU_UDC1(c)	(DECHANYU_UDC11(c) || DECHANYU_UDC12(c))
#define	DECHANYU_UDC2(c)	((0xf245 <= (c)) && ((c) <= 0xfe7e))

#define	DECHANYU_ISXUDC3(c1)	 ((c1) >= 0xe5)
#define	DECHANYU_ISXUDC4(c1)	 (1)
#define	DECHANYU_XUDC3_CNT	 ((0xfe - 0xe5 + 1) * 94)
#define	DECHANYU_XUDC4_CNT	 (94 * 94)
#define	DECHANYU_TO_IDXU3(c1,c2) (PLANEXU + ((c1) - 0xe5) * 94 + (c2) - 0xa1)
#define	DECHANYU_TO_IDXU4(c1,c2) (PLANEXU + ((c1) - 0xa1) * 94 + \
				  DECHANYU_XUDC3_CNT + (c2) - 0x21)
#define	DECHANYU_FR_XUDC(ucs)	 (ucs -= UCS_XUDC_START, \
				 ((ucs) < DECHANYU_XUDC3_CNT) \
				 ? (0xc2cb0000 | (((ucs)/94 + 0xe5) << 8) |\
						  ((ucs)%94 + 0xa1)) : \
				 (ucs -= DECHANYU_XUDC3_CNT, \
				 ((ucs) < DECHANYU_XUDC4_CNT) \
				 ? (0xc2cb0000 | (((ucs)/94 + 0xa1) << 8) |\
						  ((ucs)%94 + 0x21)) : BAD))
/*
 * DEC Hanzi related macros
 *
 * Valid DEC Hanzi first  byte: 0xa1 - 0xfe
 * Valid DEC Hanzi second byte: 0x21 - 0x7e, 0xa1 - 0xfe
 * 
 * DEC Hanzi plane 1: 0xa1 <= 1st byte <= 0xfe
 *		      0xa1 <= 2nd byte <= 0xfe
 * DEC Hanzi plane U: 0xa1 <= 1st byte <= 0xfe	(UDC)
 *		      0x21 <= 2nd byte <= 0x7e
 *
 * The plane U is mapped to UDC plane 15. The other unmapped characters
 * are mapped to the BMP UDC area in the same way as GB2312.
 */
#define	DECHANZI_VALID1(c)	(__cvtab[(unsigned)(c )] & RANGE_A1TOFE)
#define	DECHANZI_VALID2(c)	(__cvtab[(unsigned)(c )] & RANGE_21TO7E_A1TOFE)
#define	DECHANZI_PLANE1(c1,c2)	(__cvtab[(unsigned)(c2)] & RANGE_A1TOFE)
#define	DECHANZI_PLANEU(c1,c2)	(__cvtab[(unsigned)(c2)] & RANGE_21TO7E)
#define	DECHANZI_IDX1(c1,c2)	(PLANE1  + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	DECHANZI_IDXU(c1,c2)	(PLANEXU + ((c1) - 0xa1) * 94 + ((c2) - 0x21))
#define	UIDX_DECHANZI(idx)	(  (idx) < DECHANZI_UCNT) ? \
				((((idx)/94 + 0xa1) << 8) | (idx)%94 + 0x21) : BAD
#define	DECHANZI_UCNT		(94*94)

/*
 * GB2312 related macros
 *
 * Valid GB2312 first  byte: 0xa1 - 0xfe
 * Valid GB2312 second byte: 0xa1 - 0xfe
 *
 * GB2312 plane 1: 0xa1 <= 1st byte <= 0xfe
 *		   0xa1 <= 2nd byte <= 0xfe
 * UDC		 : 0xaaa1-0xaffe, 0xf8a1-0xfefe
 */
#define	GB2312_VALID1(c)	(__cvtab[(unsigned)(c )] & RANGE_A1TOFE)
#define	GB2312_VALID2(c)	(__cvtab[(unsigned)(c )] & RANGE_A1TOFE)
#define	GB2312_IDX(c1,c2)	(PLANE1 + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	GB2312_UCNT11		((0xaf - 0xaa + 1) * 94)
#define	GB2312_UCNT12		((0xfe - 0xf8 + 1) * 94)
#define	GB2312_UDC11(c1,c2)	((0xaa <= (c1)) && ((c1) <= 0xaf))
#define	GB2312_UDC12(c1,c2)	((0xf8 <= (c1)) && ((c1) <= 0xfe))
#define	GB2312_UDC1(c1,c2)	(GB2312_UDC11(c1,c2) || GB2312_UDC12(c1,c2))
#define	GB2312_START11		0
#define	GB2312_START12		GB2312_UCNT11
#define	GB2312_UCNT		(GB2312_UCNT11 + GB2312_UCNT12)
#define	GB2312_IDXU(c1,c2)	(PLANEU + (((c1) <= 0xaf) \
		? ((((c1) - 0xaa) * 94 + (c2) - 0xa1) + GBK_START11) \
		: ((((c1) - 0xf8) * 94 + (c2) - 0xa1) + GBK_START12)))

#define	UIDX11_GB2312(idx)	((((idx)/94 + 0xaa) << 8) | ((idx)%94 + 0xa1))
#define	UIDX12_GB2312(idx)	((((idx)/94 + 0xf8) << 8) | ((idx)%94 + 0xa1))
#define	UIDX_GB2312(idx)	(((idx)  < GB2312_UCNT11) ? UIDX11_GB2312(idx):\
				(((idx) -= GB2312_UCNT11),		    \
				 ((idx)  < GB2312_UCNT12) ? UIDX12_GB2312(idx):\
				   BAD))

/*
 * GBK related macros
 *
 * Valid GBK first  byte: 0x81 - 0xfe
 * Valid GBK second byte: 0x40 - 0x7e, 0x80 - 0xfe
 *
 * GBK plane 1: 0xa1 <= 1st byte <= 0xfe
 *		0xa1 <= 2nd byte <= 0xfe
 * GBK plane 2: 0x81 <= 1st byte <= 0xa0
 *		0x40 <= 2nd byte <= 0x7e & 0x80 <= 2nd byte <= 0xfe
 * GBK plane 3: 0xa1 <= 1st byte <= 0xfe
 *		0x40 <= 2nd byte <= 0x7e & 0x80 <= 2nd byte <= 0xa0
 * UDC	      : 0xaaa1-0xaffe, 0xf8a1-0xfefe, 0xa140-0xa7a0
 */

#define	GBK_VALID1(c)	   (__cvtab[(unsigned)(c )] & VBITS_GBK1)
#define	GBK_VALID2(c)	   (__cvtab[(unsigned)(c )] & VBITS_GBK2)
#define GBK_PLANE1(c1,c2) ((__cvtab[(unsigned)(c1)] & RANGE_A1TOFE) && \
			   (__cvtab[(unsigned)(c2)] & RANGE_A1TOFE))
#define GBK_PLANE2(c1,c2) ((__cvtab[(unsigned)(c1)] & RANGE_81TOA0) && \
			   (__cvtab[(unsigned)(c2)] & RANGE_40TO7E_80TOFE))
#define GBK_PLANE3(c1,c2) ((__cvtab[(unsigned)(c1)] & RANGE_A1TOFE) && \
			   (__cvtab[(unsigned)(c2)] & RANGE_40TO7E_80TOA0))
#define	GBK_IDX1(c1,c2)    (PLANE1 + ((c1) - 0xa1) *  94 + ((c2) - 0xa1))
#define	GBK_IDX2(c1,c2)    (PLANE2 + ((c1) - 0x81) * 190 + __gbk_2bidx[c2])
#define	GBK_IDX3(c1,c2)    (PLANE3 + ((c1) - 0xa1) *  96 + __gbk_2bidx[c2])

#define	GBK_UCNT11	  GB2312_UCNT11
#define	GBK_UCNT12	  GB2312_UCNT12
#define	GBK_UCNT3	  ((0xa7 - 0xa1 + 1) * 96)
#define	GBK_UCNT	  (GBK_UCNT11+GBK_UCNT12+GBK_UCNT3)
#define	GBK_START11	  0
#define	GBK_START12	  GBK_UCNT11
#define	GBK_START3	  GBK_UCNT11 + GBK_UCNT12
#define	GBK_IDXU1(c1,c2)  (PLANEU + (((c1) <= 0xaf) \
		? ((((c1) - 0xaa) * 94 + (c2) - 0xa1) + GBK_START11) \
		: ((((c1) - 0xf8) * 94 + (c2) - 0xa1) + GBK_START12)))
#define	GBK_IDXU3(c1,c2)  (PLANEU + ((c1) - 0xa1) * 96 + __gbk_2bidx[c2] + \
			   GBK_START3)

#define	UIDX11_GBK(idx)   ((((idx)/94 + 0xaa) << 8) | ((idx)%94 + 0xa1))
#define	UIDX12_GBK(idx)   ((((idx)/94 + 0xf8) << 8) | ((idx)%94 + 0xa1))
#define	UIDX3_GBK(idx)    ((((idx)/96 + 0xa1) << 8) | __gbk_idx2b[(idx)%96])
#define	UIDX_GBK(idx)      (((idx)  < GBK_UCNT11) ? UIDX11_GBK(idx):\
			   (((idx) -= GBK_UCNT11),		    \
			    ((idx)  < GBK_UCNT12) ? UIDX12_GBK(idx):\
			   (((idx) -= GBK_UCNT12),		    \
			    ((idx)  < GBK_UCNT3 ) ? UIDX3_GBK(idx) :\
			      BAD)))
#define	GBK_UDC11(c1,c2)  (GBK_PLANE1(c1,c2) && GB2312_UDC11(c1,c2))
#define	GBK_UDC12(c1,c2)  (GBK_PLANE1(c1,c2) && GB2312_UDC12(c1,c2))
#define	GBK_UDC3(c1,c2)	  (GBK_PLANE3(c1,c2) && (0xa1 <= (c1)) && ((c1) <= 0xa7))

/*
 * GB18030-2000 related macros
 *
 * The 2-byte form of GB18030 is a superset of GBK.
 *
 * Valid 2-byte GB18030 - first  byte: 0x81 - 0xfe
 * Valid 2-byte GB18030 - second byte: 0x40 - 0x7e, 0x80 - 0xfe
 *
 * GB18030 plane 1: 0xa1 <= 1st byte <= 0xfe
 *		    0xa1 <= 2nd byte <= 0xfe
 * GB18030 plane 2: 0x81 <= 1st byte <= 0xa0
 *		    0x40 <= 2nd byte <= 0x7e & 0x80 <= 2nd byte <= 0xfe
 * GB18030 plane 3: 0xa1 <= 1st byte <= 0xfe
 *		    0x40 <= 2nd byte <= 0x7e & 0x80 <= 2nd byte <= 0xa0
 *
 * There are also some UDC character mapping distributed in the non-allocated
 * spaces elsewhere in plane 1,2,3.
 *
 * Valid 4-byte GB18030 - 1st byte: 0x81-0xfe
 *			- 2nd byte: 0x30-0x39
 *			- 3rd byte: 0x81-0xfe
 *			- 4th byte: 0x30-0x39
 *
 * Please see from_GB18030.c for details about converting these 4-byte
 * code to Unicode and vice versa
 *
 * 2-byte GB18030 UDC mapping:
 * 	0xaaa1-0xaffe -> U+E000-U+E233
 *	0xf8a1-0xfefe -> U+E234-U+E4C5
 *	0xa140-0xa7a0 -> U+E4C6-U+E765
 *	0xa2ab-0xa2b0 -> U+E766-U+E76B
 *	0xa2e3-0xa2e4 -> U+E76C-U+E76D
 *	0xa2ef-0xa2f0 -> U+E76E-U+E76F
 *	0xa2fd-0xa2ff -> U+E770-U+E771
 *	0xa4f4-0xa4fe -> U+E772-U+E77C
 *	0xa5f7-0xa5fe -> U+E77D-U+E784
 *		     ....
 *
 * 4-byte GB18030 UDC mapping:
 *	0x8336d030-0x84308130 -> U+E865-U+F8FF
 *
 * The mapping between UDC and GB18030 will be done algorithmically if
 * 	UDC	= U+E000-U+E765 or U+E865-U+F8FF
 *	GB18030 = 0xaaa1-0xaffe, 0xf8a1-0xfefe, 0xa140-0xa7a0,
 *		  0x8336d030-0x84308130
 * Other will be done by mapping tables.
 *
 * Plane mapping:
 *	0x81308130-0x8439fe39 (50400   codepoints) -> BMP (plane 0)
 *	0x90308130-0xe339fe39 (1058400 codepoints) -> Plane 1-16
 */
#define	GB18030_1BYTE(c)      ((unsigned)(c) < 0x80)
#define	GB18030_2BYTE(c1,c2)  (GBK_VALID1(c1) && GBK_VALID2(c2))
#define	GB18030_4BYTE(c1,c2)  (GBK_VALID1(c1) && \
			      (__cvtab[(unsigned)(c2)] & VBIT_30TO39))
#define GB18030_PLANE1(c1,c2) GBK_PLANE1(c1,c2)
#define GB18030_PLANE2(c1,c2) GBK_PLANE2(c1,c2)
#define GB18030_PLANE3(c1,c2) GBK_PLANE3(c1,c2)
#define	GB18030_IDX1(c1,c2)   GBK_IDX1  (c1,c2)
#define	GB18030_IDX2(c1,c2)   GBK_IDX2  (c1,c2)
#define	GB18030_IDX3(c1,c2)   GBK_IDX3  (c1,c2)

#define	GB18030_UCNT11	      GBK_UCNT11
#define	GB18030_UCNT12	      GBK_UCNT12
#define	GB18030_UCNT3	      GBK_UCNT3
#define	GB18030_START11	      GBK_START11
#define	GB18030_START12	      GBK_START12
#define	GB18030_START3	      GBK_START3
#define	GB18030_IDXU1(c1,c2)  GBK_IDXU1(c1,c2)
#define	GB18030_IDXU3(c1,c2)  GBK_IDXU3(c1,c2)
#define	GB18030_UDC11(c1,c2)  GBK_UDC11(c1,c2)
#define	GB18030_UDC12(c1,c2)  GBK_UDC12(c1,c2)
#define	GB18030_UDC3(c1,c2)   GBK_UDC3 (c1,c2)
#define	UIDX_GB18030(idx)     UIDX_GBK(idx)

/*
 * DEC Kanji related macros
 *
 * Valid DEC Kanji first  byte: 0xa1 - 0xfe
 * Valid DEC Kanji second byte: 0x21 - 0x7e, 0xa1 - 0xfe
 * 
 * DEC Kanji plane 1: 0xa1 <= 1st byte <= 0xfe
 *		      0xa1 <= 2nd byte <= 0xfe
 * DEC Kanji plane U: 0xa1 <= 1st byte <= 0xfe (UDC)
 *		      0x21 <= 2nd byte <= 0x7e
 *
 * The plane U of DEC Kanji are mapped to plane 15 UDC area.
 * The other unmapped codepoints are mapped to BMP UDC area in the same
 * way as eucJP.
 */
#define	DECKANJI_VALID1(c)	(__cvtab[(unsigned)(c )] & RANGE_A1TOFE)
#define	DECKANJI_VALID2(c)	(__cvtab[(unsigned)(c )] & RANGE_21TO7E_A1TOFE)
#define	DECKANJI_PLANE1(c1,c2)	(__cvtab[(unsigned)(c2)] & RANGE_A1TOFE)
#define	DECKANJI_PLANEU(c1,c2)	(__cvtab[(unsigned)(c2)] & RANGE_21TO7E)
#define	DECKANJI_IDX1(c1,c2)	(PLANE1  + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	DECKANJI_IDXU(c1,c2)	(PLANEXU + ((c1) - 0xa1) * 94 + ((c2) - 0x21))
#define	UIDX_DECKANJI(idx)	(  (idx) < DECKANJI_UCNT) ? \
				((((idx)/94 + 0xa1) << 8) | (idx)%94 + 0x21) : BAD
#define	DECKANJI_UCNT		(94*94)

/*
 * JISX-UDC macros
 *
 * Plane U: 0xa1 <= 1st byte <= 0xfe
 *	    0x21 <= 2nd byte <= 0x7e
 */
#define	JISXUDC_VALID1(c)	(__cvtab[(unsigned)(c)] & RANGE_A1TOFE)
#define	JISXUDC_VALID2(c)	(__cvtab[(unsigned)(c)] & RANGE_21TO7E)
#define	JISXUDC_IDX(c1,c2)	DECKANJI_IDXU(c1,c2)

/*
 * DEC Korean related macros
 *
 * Valid DEC Korean first  byte: 0xa1 - 0xfe
 * Valid DEC Korean second byte: 0xa1 - 0xfe
 * 
 * DEC Korean plane 2: 0xa1 <= 1st byte <= 0xfe
 *		       0xa1 <= 2nd byte <= 0xfe
 */
#define	DECKOREAN_VALID1(c)	(__cvtab[(unsigned)(c)] & RANGE_A1TOFE)
#define	DECKOREAN_VALID2(c)	(__cvtab[(unsigned)(c)] & RANGE_A1TOFE)
#define	DECKOREAN_IDX1(c1,c2)	(PLANE1 + ((c1) - 0xa1) * KSC5601_WIDTH1 + ((c2) - 0xa1))

/*
 * Taiwanese EUC related macros
 *
 * Valid eucTW 2nd last byte: 0xa1 - 0xfe
 * Valid eucTW     last	byte: 0xa1 - 0xfe
 * 
 * eucTW plane 1 : 0xa1 <= 1st byte <= 0xfe
 *		   0xa1 <= 2nd byte <= 0xfe
 * eucTW plane 2 : 1st byte = 0x8e
 *		   2nd byte = 0xa2
 * 		   0xa1 <= 3rd byte <= 0xfe
 *		   0xa1 <= 4th byte <= 0xfe
 * eucTW plane 3 : 1st byte = 0x8e
 *		   2nd byte = 0xa3
 * 		   0xa1 <= 3rd byte <= 0xfe
 *		   0xa1 <= 4th byte <= 0xfe
 * eucTW plane 4 : 1st byte = 0x8e
 *		   2nd byte = 0xa4
 * 		   0xa1 <= 3rd byte <= 0xfe
 *		   0xa1 <= 4th byte <= 0xfe
 * eucTW plane 5 : 1st byte = 0x8e
 *		   2nd byte = 0xa5
 * 		   0xa1 <= 3rd byte <= 0xfe
 *		   0xa1 <= 4th byte <= 0xfe
 * eucTW plane 6 : 1st byte = 0x8e
 *		   2nd byte = 0xa6
 * 		   0xa1 <= 3rd byte <= 0xfe
 *		   0xa1 <= 4th byte <= 0xfe
 * eucTW plane 7 : 1st byte = 0x8e
 *		   2nd byte = 0xa7
 * 		   0xa1 <= 3rd byte <= 0xfe
 *		   0xa1 <= 4th byte <= 0xfe
 * eucTW plane 15: 1st byte = 0x8e
 *		   2nd byte = 0xaf
 * 		   0xa1 <= 3rd byte <= 0xfe
 *		   0xa1 <= 4th byte <= 0xfe
 *
 * All the unmappable codepoints in plane 1-4 will be mapped to the characters
 * in the private use areas for preserving codepoints during roundtrip 
 * conversion. As the UDC area in BMP is not large enough, the following
 * codepoints will be mapped to Plane 15 UDC:
 *	0x8ea3e8a1 - 0x8ea3fefe
 *	0x8ea4efa1 - 0x8ea4fefe
 *
 * Codepoints that belong to the UDC area of DEC Hanyu will be mapped to 
 * UDC in the same way.
 */
#define	EUCTW_VALID1(c)	   (__cvtab[(unsigned)(c)] & RANGE_A1TOFE)
#define	EUCTW_VALID2(c)	   (__cvtab[(unsigned)(c)] & RANGE_A1TOFE)
#define	EUCTW_IDX1(c1,c2)  (PLANE1  + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	EUCTW_IDX2(c1,c2)  (PLANE2  + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	EUCTW_IDX3(c1,c2)  (PLANE3  + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	EUCTW_IDX4(c1,c2)  (PLANE4  + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	EUCTW_IDX5(c1,c2)  (PLANE5  + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	EUCTW_IDX6(c1,c2)  (PLANE6  + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	EUCTW_IDX7(c1,c2)  (PLANE7  + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	EUCTW_IDXF(c1,c2)  (PLANE15 + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	EUCTW_ISXUDC3(c1)  ((c1) >= 0xe8)
#define	EUCTW_ISXUDC4(c1)  ((c1) >= 0xef)
#define	EUCTW_XUDC3_CNT	   ((0xfe - 0xe8 + 1) * 94)
#define	EUCTW_XUDC4_CNT	   ((0xfe - 0xef + 1) * 94)

#define	EUCTW_TO_IDXU3(c1,c2)	(PLANEXU + ((c1) - 0xe8) * 94 + (c2) - 0xa1)
#define	EUCTW_TO_IDXU4(c1,c2)	(PLANEXU + ((c1) - 0xef) * 94 + \
				EUCTW_XUDC3_CNT +  (c2) - 0xa1)
#define	EUCTW_FR_XUDC(ucs)	(ucs -= UCS_XUDC_START, \
				((ucs) < EUCTW_XUDC3_CNT) \
				? (0x8ea30000 | (((ucs)/94 + 0xe8) << 8) |\
						 ((ucs)%94 + 0xa1)) : \
				(ucs -= EUCTW_XUDC3_CNT, \
				((ucs) < EUCTW_XUDC4_CNT) \
				? (0x8ea40000 | (((ucs)/94 + 0xef) << 8) |\
						 ((ucs)%94 + 0xa1)) : BAD))
#define	EUCTW_ISUDC1(c)		DECHANYU_UDC1(c)
#define	EUCTW_ISUDC2(c)		((0xf2c5 <= (c)) && ((c) <= 0xfefe))
#define	EUCTW_UCNT		DECHANYU_UCNT
#define	EUCTW_TO_IDXU1(c1,c2)	DECHANYU_IDXU1(c1, c2)
#define	EUCTW_TO_IDXU2(c1,c2)	DECHANYU_IDXU2(c1, (c2 & 0x7f))
#define	UIDX2_TO_EUCTW(idx)	(UIDX2_DECHANYU(idx) | 0x8ea20080)
#define	UDC_TO_EUCTW(ucs)      ((ucs) -= UCS_UDC_START,\
			      (((ucs)  < DECHANYU_UCNT11)?UIDX11_DECHANYU(ucs):\
			      (((ucs) -= DECHANYU_UCNT11),		       \
			       ((ucs)  < DECHANYU_UCNT12)?UIDX12_DECHANYU(ucs):\
			      (((ucs) -= DECHANYU_UCNT12),		       \
			       ((ucs)  < DECHANYU_UCNT2 )?UIDX2_TO_EUCTW(ucs) :\
				 BAD))))

/*
 * Japanese EUC related macros
 *
 * Valid eucJP first  byte: 0xa1 - 0xfe
 * Valid eucJP second byte: 0xa1 - 0xfe
 * 
 * eucJP plane 0 : 1st byte = 0x8e
 *		   0xa1 <= 2nd byte <= 0xfe
 * eucJP plane 1 : 0xa1 <= 1st byte <= 0xfe
 *		   0xa1 <= 2nd byte <= 0xfe
 * eucJP plane 2 : 1st byte = 0x8f
 * 		   0xa1 <= 2nd byte <= 0xfe
 *		   0xa1 <= 3rd byte <= 0xfe
 * eucJP UDC	 : 0xf5a1-0xfefe, 0x8ff5a1-0x8ffefe, 0x8feea1-0x8ff4fe
 *
 * All unmapped codepoints will now map to the BMP UDC area.
 */
#define	EUCJP_VALID1(c)	   (__cvtab[(unsigned)(c)] & RANGE_A1TOFE)
#define	EUCJP_VALID2(c)	   (__cvtab[(unsigned)(c)] & RANGE_A1TOFE)
#define	EUCJP_IDX0(c)      ((c) + 0x100)
#define	EUCJP_IDX1(c1,c2)  (PLANE1  + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))
#define	EUCJP_IDX2(c1,c2)  (PLANE2  + ((c1) - 0xa1) * 94 + ((c2) - 0xa1))

#define	EUCJP_UCNT1	   ((0xfe - 0xf5 + 1) * 94)
#define	EUCJP_UCNT21	   ((0xfe - 0xf5 + 1) * 94)
#define	EUCJP_UCNT22	   ((0xf4 - 0xee + 1) * 94)
#define	EUCJP_UCNT	   (EUCJP_UCNT1 + EUCJP_UCNT21 + EUCJP_UCNT22)
#define	EUCJP_UDC1(c1,c2)  ((c1) >= 0xf5)
#define	EUCJP_UDC2(c1,c2)  ((c1) >= 0xee)
#define	EUCJP_IDXU1(c1,c2) (PLANEU +  ((c1) - 0xf5) * 94 + ((c2) - 0xa1))
#define	EUCJP_IDXU2(c1,c2) (PLANEU + (((c1) >= 0xf5) \
		? ((((c1) - 0xf5) * 94 + ((c2) - 0xa1)) + EUCJP_UCNT1) \
		: ((((c1) - 0xee) * 94 + ((c2) - 0xa1)) + EUCJP_UCNT1 + EUCJP_UCNT21)))

#define	UIDX1_EUCJP(idx)   ((((idx)/94 + 0xf5) << 8) | ((idx)%94 + 0xa1))
#define	UIDX21_EUCJP(idx)  ((((idx)/94 + 0xf5) << 8) | ((idx)%94 + 0xa1) | 0x8f0000)
#define	UIDX22_EUCJP(idx)  ((((idx)/94 + 0xee) << 8) | ((idx)%94 + 0xa1) | 0x8f0000)
#define	UIDX_EUCJP(idx)	   (((idx)  < EUCJP_UCNT1 ) ? UIDX1_EUCJP(idx) :\
			   (((idx) -= EUCJP_UCNT1 ), 		        \
			    ((idx)  < EUCJP_UCNT21) ? UIDX21_EUCJP(idx):\
			   (((idx) -= EUCJP_UCNT21),		        \
			    ((idx)  < EUCJP_UCNT22) ? UIDX22_EUCJP(idx):\
			      BAD)))

/*
 * Super DEC Kanji related macros
 *
 * Valid sdeckanji first  byte: 0xa1 - 0xfe
 * Valid sdeckanji second byte: 0xa1 - 0xfe, 0x21 - 0x7e
 * 
 * sdeckanji plane 0 : 1st byte = 0x8e
 *		       0xa1 <= 2nd byte <= 0xfe
 * sdeckanji plane 1 : 0xa1 <= 1st byte <= 0xfe
 *		       0xa1 <= 2nd byte <= 0xfe
 * sdeckanji plane 2 : 1st byte = 0x8f
 * 		       0xa1 <= 2nd byte <= 0xfe
 *		       0xa1 <= 3rd byte <= 0xfe
 * sdeckanji plane U : 0xa1 <= 1st byte <= 0xfe
 *		       0x21 <= 2nd byte <= 0x7e
 *
 * The plane U of Super DEC Kanji are mapped to plane 15 UDC area.
 * The other unmapped codepoints are mapped to BMP UDC area in the same
 * way as eucJP.
 */
#define	SDECKANJI_VALID1(c)	(__cvtab[(unsigned)(c)] & RANGE_A1TOFE)
#define	SDECKANJI_VALID2(c)	(__cvtab[(unsigned)(c)] & RANGE_A1TOFE)
#define	SDECKANJI_UDC2(c)	(__cvtab[(unsigned)(c)] & RANGE_21TO7E)
#define	SDECKANJI_IDX0(c)	EUCJP_IDX0(c)
#define	SDECKANJI_IDX1(c1,c2)	EUCJP_IDX1(c1,c2)
#define	SDECKANJI_IDX2(c1,c2)	EUCJP_IDX2(c1,c2)
#define	SDECKANJI_IDXU(c1,c2)	DECKANJI_IDXU(c1,c2)
#define	UIDX_SDECKANJI(idx)	UIDX_DECKANJI(idx)

/*
 * Unified Hangul (KSC 5601-1992)
 *
 * It includes 2,350 characters same as Wansung (KSC 5601-1987)
 *	1st Byte = 0xa1-0xfe with 2nd Byte = 0xa1-0xfe
 * plus 8,822 characters :
 *	1st Byte = 0x81-0xa0 with 2nd Byte = 0x41-0x5a, 0x61-0x7a, 0x81-0xfe
 *	1st Byte = 0xa1-0xc6 with 2nd Byte = 0x41-0x5a, 0x61-0x7a, 0x81-0xa0
 *
 * KSC5601 plane 1 : 1st byte = 0xa1 - 0xfe
 *		     2nd byte = 0xa1 - 0xfe
 * KSC5601 plane 2 : 1st Byte = 0x81 - 0xa0
 *		     2nd Byte = 0x41 - 0x5a, 0x61 - 0x7a, 0x81 - 0xfe
 * KSC5601 plane 3 : 1st Byte = 0xa1 - 0xc6
 *		     2nd Byte = 0x41 - 0x5a, 0x61 - 0x7a, 0x81 - 0xa0
 */
#define	KSC5601_VALID1(c)	(__cvtab[(unsigned)(c)] & RANGE_81TOFE)
#define	KSC5601_VALID2(c)	(__cvtab[(unsigned)(c)] & RANGE_41TO5A_61TO7A_81TOFE)
#define	KSC5601_1_VALID1(c)	(__cvtab[(unsigned)(c)] & RANGE_A1TOFE)
#define	KSC5601_1_VALID2(c)	(__cvtab[(unsigned)(c)] & RANGE_A1TOFE)
#define	KSC5601_2_VALID1(c)	(__cvtab[(unsigned)(c)] & RANGE_81TOA0)
#define	KSC5601_2_VALID2(c)	(__cvtab[(unsigned)(c)] & RANGE_41TO5A_61TO7A_81TOFE)
#define	KSC5601_3_VALID1(c)	(__cvtab[(unsigned)(c)] & RANGE_A0TOC6)
#define	KSC5601_3_VALID2(c)	(__cvtab[(unsigned)(c)] & RANGE_41TO5A_61TO7A_81TOA0)
#define	KSC5601_IDX1(c1, c2)	(PLANE1 + ((c1) - 0xa1) * KSC5601_WIDTH1 + ((c2) - 0xa1))
#define	KSC5601_IDX2(c1, c2)	(PLANE2 + ((c1) - 0x81) * KSC5601_WIDTH2 + ((c2) - 0x41))
#define	KSC5601_IDX3(c1, c2)	(PLANE3 + ((c1) - 0xa1) * KSC5601_WIDTH3 + ((c2) - 0x41))
#define	KSC5601_WIDTH1		(0xfe - 0xa1 + 1)
#define	KSC5601_WIDTH2		(0xfe - 0x41 + 1)
#define	KSC5601_WIDTH3		(0xa0 - 0x41 + 1)

/*
 * UDC Mappings
 * ------------
 *
 * Japanese:
 *  - eucJP	0xf5a1-0xfefe, 0x8ff5a1-0x8ffefe, 0x8feea1-0x8ff4fe
 *  - deckanji	0xa121-0xfe7e
 *  - sdeckanji	0xa121-0xfe7e + eucJP UDC
 *  - SJIS	0xf040-0xfcfc
 *
 * Chinese:
 *  - dechanzi	0xa121-0xfe7e
 *  - dechanyu	0xf321-0xfe7e, 0xaaa1-0xc1fe, 0xfdcc-0xfefe
 *  - big5	0xfa40-0xfefe, 0x8e40-0xa0fe
 *
 * Unicode:	U+E000-U+F8FF, U-000F0000-U-0010FFFF
 *
 * IDXU = UIDX + PLANEU
 */
#define	UCS_UDC_START	0xe000
#define	UCS_UDC_END	0xf8ff
#define	UCS_XUDC_START	0x0f0000 /* Plane 15 & 16 are addtional UDC planes */
#define	UCS_XUDC_END	0x10ffff
#define	UCS_UCNT	(0xf8ff - 0xe000 + 1)

#define	UCS_UIDX(ucs)	(((ucs) >= UCS_XUDC_START) ? \
			 ((ucs)  - UCS_XUDC_START+UCS_UCNT) : ((ucs) - 0xe000))
#define	UCS_UDC(ucs)	(((0xe000 <= (ucs)) && ((ucs) <= 0xf8ff)) ||\
			 ((ucs)   >= UCS_XUDC_START))
#define	IDXU_UCS(idx)	(((idx) >= PLANEXU) ? \
			 ((idx)  + UCS_XUDC_START - PLANEXU) : \
			 ((idx)  + UCS_UDC_START  - PLANEU))
#define	ISIDXU(idx)	((idx) >= PLANEU)

/*
 * Macros for the mb*towc*() and wc*tomb*() routines to be used by the
 * @ucs4 locales.
 */


/*
 * External reference
 */
extern const unsigned int  __cvtab[]	;  //BRL
extern const short __gbk_2bidx[];
extern const short __gbk_idx2b[];
