sh.char.c revision 167466
1/* $Header: /p/tcsh/cvsroot/tcsh/sh.char.c,v 3.19 2006/03/02 18:46:44 christos Exp $ */
2/*
3 * sh.char.c: Character classification tables
4 */
5/*-
6 * Copyright (c) 1980, 1991 The Regents of the University of California.
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 *    notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 *    notice, this list of conditions and the following disclaimer in the
16 *    documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of the University nor the names of its contributors
18 *    may be used to endorse or promote products derived from this software
19 *    without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33#include "sh.h"
34
35RCSID("$tcsh: sh.char.c,v 3.19 2006/03/02 18:46:44 christos Exp $")
36
37#include "sh.char.h"
38
39#if defined(KANJI) && defined(SHORT_STRINGS) && defined(DSPMBYTE)
40/* on default same as original map */
41unsigned short _cmap[256] = {
42/*	  0 nul		  1 soh		  2 stx		  3 etx	*/
43	_CTR,		_CTR,		_CTR,		_CTR,
44
45/*	  4 eot		  5 enq		  6 ack		  7 bel	*/
46	_CTR,		_CTR,		_CTR,		_CTR,
47
48/*	  8 bs		  9 ht		 10 nl		 11 vt	*/
49	_CTR,		_CTR|_SP|_META,	_CTR|_NL|_META,	_CTR,
50
51/*	 12 np		 13 cr		 14 so		 15 si	*/
52	_CTR,		_CTR,		_CTR,		_CTR,
53
54/*	 16 dle		 17 dc1		 18 dc2		 19 dc3	*/
55	_CTR,		_CTR,		_CTR,		_CTR,
56
57/*	 20 dc4		 21 nak		 22 syn		 23 etb	*/
58	_CTR,		_CTR,		_CTR,		_CTR,
59
60/*	 24 can		 25 em		 26 sub		 27 esc	*/
61	_CTR,		_CTR,		_CTR,		_CTR,
62
63/*	 28 fs		 29 gs		 30 rs		 31 us	*/
64	_CTR,		_CTR,		_CTR,		_CTR,
65
66/*	 32 sp		 33 !		 34 "		 35 #	*/
67	_SP|_META,	_PUN,		_QF|_PUN,	_META|_PUN,
68
69/*	 36 $		 37 %		 38 &		 39 '	*/
70	_DOL|_PUN,	_PUN,		_META|_CMD|_PUN,_QF|_PUN,
71
72/*	 40 (		 41 )		 42 *		 43 +	*/
73	_META|_CMD|_PUN,_META|_PUN,	_GLOB|_PUN,	_PUN,
74
75/*	 44 ,		 45 -		 46 .		 47 /	*/
76	_PUN,		_PUN,		_PUN,		_PUN,
77
78/*	 48 0		 49 1		 50 2		 51 3	*/
79	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,
80
81/*	 52 4		 53 5		 54 6		 55 7	*/
82	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,
83
84/*	 56 8		 57 9		 58 :		 59 ;	*/
85	_DIG|_XD,	_DIG|_XD,	_PUN,		_META|_CMD|_PUN,
86
87/*	 60 <		 61 =		 62 >		 63 ?	*/
88	_META|_PUN,	_PUN,		_META|_PUN,	_GLOB|_PUN,
89
90/*	 64 @		 65 A		 66 B		 67 C	*/
91	_PUN,		_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP|_XD,
92
93/*	 68 D		 69 E		 70 F		 71 G	*/
94	_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP,
95
96/*	 72 H		 73 I		 74 J		 75 K	*/
97	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
98
99/*	 76 L		 77 M		 78 N		 79 O	*/
100	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
101
102/*	 80 P		 81 Q		 82 R		 83 S	*/
103	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
104
105/*	 84 T		 85 U		 86 V		 87 W	*/
106	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
107
108/*	 88 X		 89 Y		 90 Z		 91 [	*/
109	_LET|_UP,	_LET|_UP,	_LET|_UP,	_GLOB|_PUN,
110
111/*	 92 \		 93 ]		 94 ^		 95 _	*/
112	_ESC|_PUN,	_PUN,		_PUN,		_PUN,
113
114/*	 96 `		 97 a		 98 b		 99 c	*/
115  _QB|_GLOB|_META|_PUN,	_LET|_DOW|_XD,	_LET|_DOW|_XD,	_LET|_DOW|_XD,
116
117/*	100 d		101 e		102 f		103 g	*/
118	_LET|_DOW|_XD,	_LET|_DOW|_XD,	_LET|_DOW|_XD,	_LET|_DOW,
119
120/*	104 h		105 i		106 j		107 k	*/
121	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
122
123/*	108 l		109 m		110 n		111 o	*/
124	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
125
126/*	112 p		113 q		114 r		115 s	*/
127	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
128
129/*	116 t		117 u		118 v		119 w	*/
130	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
131
132/*	120 x		121 y		122 z		123 {	*/
133	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_GLOB|_PUN,
134
135/*	124 |		125 }		126 ~		127 del	*/
136	_META|_CMD|_PUN,_PUN,		_PUN,		_CTR,
137
138/****************************************************************/
139/* 128 - 255 The below is supposedly ISO 8859/1			*/
140/****************************************************************/
141/*	128 (undef)	129 (undef)	130 (undef)	131 (undef)	*/
142	_CTR,		_CTR,		_CTR,		_CTR,
143
144/*	132 (undef)	133 (undef)	134 (undef)	135 (undef)	*/
145	_CTR,		_CTR,		_CTR,		_CTR,
146
147/*	136 (undef)	137 (undef)	138 (undef)	139 (undef)	*/
148	_CTR,		_CTR,		_CTR,		_CTR,
149
150/*	140 (undef)	141 (undef)	142 (undef)	143 (undef)	*/
151	_CTR,		_CTR,		_CTR,		_CTR,
152
153/*	144 (undef)	145 (undef)	146 (undef)	147 (undef)	*/
154	_CTR,		_CTR,		_CTR,		_CTR,
155
156/*	148 (undef)	149 (undef)	150 (undef)	151 (undef)	*/
157	_CTR,		_CTR,		_CTR,		_CTR,
158
159/*	152 (undef)	153 (undef)	154 (undef)	155 (undef)	*/
160	_CTR,		_CTR,		_CTR,		_CTR,
161
162/*	156 (undef)	157 (undef)	158 (undef)	159 (undef)	*/
163	_CTR,		_CTR,		_CTR,		_CTR,
164
165/*	160 nobreakspace 161 exclamdown	162 cent	163 sterling	*/
166	_PUN, /* XXX */	_PUN,		_PUN,		_PUN,
167
168/*	164 currency	165 yen		166 brokenbar	167 section	*/
169	_PUN,		_PUN,		_PUN,		_PUN,
170
171/*	168 diaeresis	169 copyright	170 ordfeminine	171 guillemotleft*/
172	_PUN,		_PUN,		_PUN,		_PUN,
173
174/*	172 notsign	173 hyphen	174 registered	175 macron	*/
175	_PUN,		_PUN,		_PUN,		_PUN,
176
177/*	176 degree	177 plusminus	178 twosuperior	179 threesuperior*/
178	_PUN,		_PUN,		_PUN,		_PUN,
179
180/*	180 acute	181 mu 		182 paragraph	183 periodcentered*/
181	_PUN,		_PUN, /*XXX*/	_PUN,		_PUN,
182
183/*	184 cedilla	185 onesuperior	186 masculine	187 guillemotright*/
184	_PUN,		_PUN,		_PUN,		_PUN,
185
186/*	188 onequarter	189 onehalf	190 threequarters 191 questiondown*/
187	_PUN,		_PUN,		_PUN,		_PUN,
188
189/*	192 Agrave	193 Aacute	194 Acircumflex	195 Atilde	*/
190	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
191
192/*	196 Adiaeresis	197 Aring	198 AE		199 Ccedilla	*/
193	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
194
195/*	200 Egrave	201 Eacute	202 Ecircumflex	203 Ediaeresis	*/
196	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
197
198/*	204 Igrave	205 Iacute	206 Icircumflex	207 Idiaeresis	*/
199	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
200
201/*	208 ETH		209 Ntilde	210 Ograve	211 Oacute	*/
202	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
203
204/*	212 Ocircumflex	213 Otilde	214 Odiaeresis	215 multiply	*/
205	_LET|_UP,	_LET|_UP,	_LET|_UP,	_PUN,
206
207/*	216 Ooblique	217 Ugrave	218 Uacute	219 Ucircumflex	*/
208	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
209
210/*	220 Udiaeresis	221 Yacute	222 THORN	223 ssharp	*/
211	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_DOW,
212
213/*	224 agrave	225 aacute	226 acircumflex	227 atilde	*/
214	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
215
216/*	228 adiaeresis	229 aring	230 ae		231 ccedilla	*/
217	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
218
219/*	232 egrave	233 eacute	234 ecircumflex	235 ediaeresis	*/
220	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
221
222/*	236 igrave	237 iacute	238 icircumflex	239 idiaeresis	*/
223	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
224
225/*	240 eth		241 ntilde	242 ograve	243 oacute	*/
226	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
227
228/*	244 ocircumflex	245 otilde	246 odiaeresis	247 division	*/
229	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_PUN,
230
231/*	248 oslash	249 ugrave	250 uacute	251 ucircumflex	*/
232	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
233
234/*	252 udiaeresis	253 yacute	254 thorn	255 ydiaeresis	*/
235	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
236};
237/* original table */
238unsigned short _cmap_c[256] = {
239/*	  0 nul		  1 soh		  2 stx		  3 etx	*/
240	_CTR,		_CTR,		_CTR,		_CTR,
241
242/*	  4 eot		  5 enq		  6 ack		  7 bel	*/
243	_CTR,		_CTR,		_CTR,		_CTR,
244
245/*	  8 bs		  9 ht		 10 nl		 11 vt	*/
246	_CTR,		_CTR|_SP|_META,	_CTR|_NL|_META,	_CTR,
247
248/*	 12 np		 13 cr		 14 so		 15 si	*/
249	_CTR,		_CTR,		_CTR,		_CTR,
250
251/*	 16 dle		 17 dc1		 18 dc2		 19 dc3	*/
252	_CTR,		_CTR,		_CTR,		_CTR,
253
254/*	 20 dc4		 21 nak		 22 syn		 23 etb	*/
255	_CTR,		_CTR,		_CTR,		_CTR,
256
257/*	 24 can		 25 em		 26 sub		 27 esc	*/
258	_CTR,		_CTR,		_CTR,		_CTR,
259
260/*	 28 fs		 29 gs		 30 rs		 31 us	*/
261	_CTR,		_CTR,		_CTR,		_CTR,
262
263/*	 32 sp		 33 !		 34 "		 35 #	*/
264	_SP|_META,	_PUN,		_QF|_PUN,	_META|_PUN,
265
266/*	 36 $		 37 %		 38 &		 39 '	*/
267	_DOL|_PUN,	_PUN,		_META|_CMD|_PUN,_QF|_PUN,
268
269/*	 40 (		 41 )		 42 *		 43 +	*/
270	_META|_CMD|_PUN,_META|_PUN,	_GLOB|_PUN,	_PUN,
271
272/*	 44 ,		 45 -		 46 .		 47 /	*/
273	_PUN,		_PUN,		_PUN,		_PUN,
274
275/*	 48 0		 49 1		 50 2		 51 3	*/
276	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,
277
278/*	 52 4		 53 5		 54 6		 55 7	*/
279	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,
280
281/*	 56 8		 57 9		 58 :		 59 ;	*/
282	_DIG|_XD,	_DIG|_XD,	_PUN,		_META|_CMD|_PUN,
283
284/*	 60 <		 61 =		 62 >		 63 ?	*/
285	_META|_PUN,	_PUN,		_META|_PUN,	_GLOB|_PUN,
286
287/*	 64 @		 65 A		 66 B		 67 C	*/
288	_PUN,		_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP|_XD,
289
290/*	 68 D		 69 E		 70 F		 71 G	*/
291	_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP,
292
293/*	 72 H		 73 I		 74 J		 75 K	*/
294	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
295
296/*	 76 L		 77 M		 78 N		 79 O	*/
297	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
298
299/*	 80 P		 81 Q		 82 R		 83 S	*/
300	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
301
302/*	 84 T		 85 U		 86 V		 87 W	*/
303	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
304
305/*	 88 X		 89 Y		 90 Z		 91 [	*/
306	_LET|_UP,	_LET|_UP,	_LET|_UP,	_GLOB|_PUN,
307
308/*	 92 \		 93 ]		 94 ^		 95 _	*/
309	_ESC|_PUN,	_PUN,		_PUN,		_PUN,
310
311/*	 96 `		 97 a		 98 b		 99 c	*/
312  _QB|_GLOB|_META|_PUN,	_LET|_DOW|_XD,	_LET|_DOW|_XD,	_LET|_DOW|_XD,
313
314/*	100 d		101 e		102 f		103 g	*/
315	_LET|_DOW|_XD,	_LET|_DOW|_XD,	_LET|_DOW|_XD,	_LET|_DOW,
316
317/*	104 h		105 i		106 j		107 k	*/
318	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
319
320/*	108 l		109 m		110 n		111 o	*/
321	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
322
323/*	112 p		113 q		114 r		115 s	*/
324	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
325
326/*	116 t		117 u		118 v		119 w	*/
327	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
328
329/*	120 x		121 y		122 z		123 {	*/
330	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_GLOB|_PUN,
331
332/*	124 |		125 }		126 ~		127 del	*/
333	_META|_CMD|_PUN,_PUN,		_PUN,		_CTR,
334
335/****************************************************************/
336/* 128 - 255 The below is supposedly ISO 8859/1			*/
337/****************************************************************/
338/*	128 (undef)	129 (undef)	130 (undef)	131 (undef)	*/
339	_CTR,		_CTR,		_CTR,		_CTR,
340
341/*	132 (undef)	133 (undef)	134 (undef)	135 (undef)	*/
342	_CTR,		_CTR,		_CTR,		_CTR,
343
344/*	136 (undef)	137 (undef)	138 (undef)	139 (undef)	*/
345	_CTR,		_CTR,		_CTR,		_CTR,
346
347/*	140 (undef)	141 (undef)	142 (undef)	143 (undef)	*/
348	_CTR,		_CTR,		_CTR,		_CTR,
349
350/*	144 (undef)	145 (undef)	146 (undef)	147 (undef)	*/
351	_CTR,		_CTR,		_CTR,		_CTR,
352
353/*	148 (undef)	149 (undef)	150 (undef)	151 (undef)	*/
354	_CTR,		_CTR,		_CTR,		_CTR,
355
356/*	152 (undef)	153 (undef)	154 (undef)	155 (undef)	*/
357	_CTR,		_CTR,		_CTR,		_CTR,
358
359/*	156 (undef)	157 (undef)	158 (undef)	159 (undef)	*/
360	_CTR,		_CTR,		_CTR,		_CTR,
361
362/*	160 nobreakspace 161 exclamdown	162 cent	163 sterling	*/
363	_PUN, /* XXX */	_PUN,		_PUN,		_PUN,
364
365/*	164 currency	165 yen		166 brokenbar	167 section	*/
366	_PUN,		_PUN,		_PUN,		_PUN,
367
368/*	168 diaeresis	169 copyright	170 ordfeminine	171 guillemotleft*/
369	_PUN,		_PUN,		_PUN,		_PUN,
370
371/*	172 notsign	173 hyphen	174 registered	175 macron	*/
372	_PUN,		_PUN,		_PUN,		_PUN,
373
374/*	176 degree	177 plusminus	178 twosuperior	179 threesuperior*/
375	_PUN,		_PUN,		_PUN,		_PUN,
376
377/*	180 acute	181 mu 		182 paragraph	183 periodcentered*/
378	_PUN,		_PUN, /*XXX*/	_PUN,		_PUN,
379
380/*	184 cedilla	185 onesuperior	186 masculine	187 guillemotright*/
381	_PUN,		_PUN,		_PUN,		_PUN,
382
383/*	188 onequarter	189 onehalf	190 threequarters 191 questiondown*/
384	_PUN,		_PUN,		_PUN,		_PUN,
385
386/*	192 Agrave	193 Aacute	194 Acircumflex	195 Atilde	*/
387	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
388
389/*	196 Adiaeresis	197 Aring	198 AE		199 Ccedilla	*/
390	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
391
392/*	200 Egrave	201 Eacute	202 Ecircumflex	203 Ediaeresis	*/
393	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
394
395/*	204 Igrave	205 Iacute	206 Icircumflex	207 Idiaeresis	*/
396	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
397
398/*	208 ETH		209 Ntilde	210 Ograve	211 Oacute	*/
399	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
400
401/*	212 Ocircumflex	213 Otilde	214 Odiaeresis	215 multiply	*/
402	_LET|_UP,	_LET|_UP,	_LET|_UP,	_PUN,
403
404/*	216 Ooblique	217 Ugrave	218 Uacute	219 Ucircumflex	*/
405	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
406
407/*	220 Udiaeresis	221 Yacute	222 THORN	223 ssharp	*/
408	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_DOW,
409
410/*	224 agrave	225 aacute	226 acircumflex	227 atilde	*/
411	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
412
413/*	228 adiaeresis	229 aring	230 ae		231 ccedilla	*/
414	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
415
416/*	232 egrave	233 eacute	234 ecircumflex	235 ediaeresis	*/
417	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
418
419/*	236 igrave	237 iacute	238 icircumflex	239 idiaeresis	*/
420	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
421
422/*	240 eth		241 ntilde	242 ograve	243 oacute	*/
423	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
424
425/*	244 ocircumflex	245 otilde	246 odiaeresis	247 division	*/
426	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_PUN,
427
428/*	248 oslash	249 ugrave	250 uacute	251 ucircumflex	*/
429	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
430
431/*	252 udiaeresis	253 yacute	254 thorn	255 ydiaeresis	*/
432	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
433};
434
435/* multi-byte table */
436/* BY Masaaki Koyanagi VERY THANKS */
437unsigned short _cmap_mbyte[256] = {
438/*	  0 nul		  1 soh		  2 stx		  3 etx	*/
439	_CTR,		_CTR,		_CTR,		_CTR,
440
441/*	  4 eot		  5 enq		  6 ack		  7 bel	*/
442	_CTR,		_CTR,		_CTR,		_CTR,
443
444/*	  8 bs		  9 ht		 10 nl		 11 vt	*/
445	_CTR,		_CTR|_SP|_META,	_CTR|_NL|_META,	_CTR,
446
447/*	 12 np		 13 cr		 14 so		 15 si	*/
448	_CTR,		_CTR,		_CTR,		_CTR,
449
450/*	 16 dle		 17 dc1		 18 dc2		 19 dc3	*/
451	_CTR,		_CTR,		_CTR,		_CTR,
452
453/*	 20 dc4		 21 nak		 22 syn		 23 etb	*/
454	_CTR,		_CTR,		_CTR,		_CTR,
455
456/*	 24 can		 25 em		 26 sub		 27 esc	*/
457	_CTR,		_CTR,		_CTR,		_CTR,
458
459/*	 28 fs		 29 gs		 30 rs		 31 us	*/
460	_CTR,		_CTR,		_CTR,		_CTR,
461
462/*	 32 sp		 33 !		 34 "		 35 #	*/
463	_SP|_META,	_PUN,		_QF|_PUN,	_META|_PUN,
464
465/*	 36 $		 37 %		 38 &		 39 '	*/
466	_DOL|_PUN,	_PUN,		_META|_CMD|_PUN,_QF|_PUN,
467
468/*	 40 (		 41 )		 42 *		 43 +	*/
469	_META|_CMD|_PUN,_META|_PUN,	_GLOB|_PUN,	_PUN,
470
471/*	 44 ,		 45 -		 46 .		 47 /	*/
472	_PUN,		_PUN,		_PUN,		_PUN,
473
474/*	 48 0		 49 1		 50 2		 51 3	*/
475	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,
476
477/*	 52 4		 53 5		 54 6		 55 7	*/
478	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,
479
480/*	 56 8		 57 9		 58 :		 59 ;	*/
481	_DIG|_XD,	_DIG|_XD,	_PUN,		_META|_CMD|_PUN,
482
483/*	 60 <		 61 =		 62 >		 63 ?	*/
484	_META|_PUN,	_PUN,		_META|_PUN,	_GLOB|_PUN,
485
486/*	 64 @		 65 A		 66 B		 67 C	*/
487	_PUN,		_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP|_XD,
488
489/*	 68 D		 69 E		 70 F		 71 G	*/
490	_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP,
491
492/*	 72 H		 73 I		 74 J		 75 K	*/
493	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
494
495/*	 76 L		 77 M		 78 N		 79 O	*/
496	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
497
498/*	 80 P		 81 Q		 82 R		 83 S	*/
499	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
500
501/*	 84 T		 85 U		 86 V		 87 W	*/
502	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
503
504/*	 88 X		 89 Y		 90 Z		 91 [	*/
505	_LET|_UP,	_LET|_UP,	_LET|_UP,	_GLOB|_PUN,
506
507/*	 92 \		 93 ]		 94 ^		 95 _	*/
508	_ESC|_PUN,	_PUN,		_PUN,		_PUN,
509
510/*	 96 `		 97 a		 98 b		 99 c	*/
511  _QB|_GLOB|_META|_PUN,	_LET|_DOW|_XD,	_LET|_DOW|_XD,	_LET|_DOW|_XD,
512
513/*	100 d		101 e		102 f		103 g	*/
514	_LET|_DOW|_XD,	_LET|_DOW|_XD,	_LET|_DOW|_XD,	_LET|_DOW,
515
516/*	104 h		105 i		106 j		107 k	*/
517	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
518
519/*	108 l		109 m		110 n		111 o	*/
520	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
521
522/*	112 p		113 q		114 r		115 s	*/
523	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
524
525/*	116 t		117 u		118 v		119 w	*/
526	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
527
528/*	120 x		121 y		122 z		123 {	*/
529	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_GLOB|_PUN,
530
531/*	124 |		125 }		126 ~		127 del	*/
532	_META|_CMD|_PUN,_PUN,		_PUN,		_CTR,
533
534/****************************************************************/
535/* 128 - 255 The below is supposedly ISO 8859/1			*/
536/****************************************************************/
537/*	128 (undef)	129 (undef)	130 (undef)	131 (undef)	*/
538	_PUN,		_PUN,		_PUN,		_PUN,
539
540/*	132 (undef)	133 (undef)	134 (undef)	135 (undef)	*/
541	_PUN,		_PUN,		_PUN,		_PUN,
542
543/*	136 (undef)	137 (undef)	138 (undef)	139 (undef)	*/
544	_PUN,		_PUN,		_PUN,		_PUN,
545
546/*	140 (undef)	141 (undef)	142 (undef)	143 (undef)	*/
547	_PUN,		_PUN,		_PUN,		_PUN,
548
549/*	144 (undef)	145 (undef)	146 (undef)	147 (undef)	*/
550	_PUN,		_PUN,		_PUN,		_PUN,
551
552/*	148 (undef)	149 (undef)	150 (undef)	151 (undef)	*/
553	_PUN,		_PUN,		_PUN,		_PUN,
554
555/*	152 (undef)	153 (undef)	154 (undef)	155 (undef)	*/
556	_PUN,		_PUN,		_PUN,		_PUN,
557
558/*	156 (undef)	157 (undef)	158 (undef)	159 (undef)	*/
559	_PUN,		_PUN,		_PUN,		_PUN,
560
561/*	160 nobreakspace 161 exclamdown	162 cent	163 sterling	*/
562	_PUN, /* XXX */	_PUN,		_PUN,		_PUN,
563
564/*	164 currency	165 yen		166 brokenbar	167 section	*/
565	_PUN,		_PUN,		_PUN,		_PUN,
566
567/*	168 diaeresis	169 copyright	170 ordfeminine	171 guillemotleft*/
568	_PUN,		_PUN,		_PUN,		_PUN,
569
570/*	172 notsign	173 hyphen	174 registered	175 macron	*/
571	_PUN,		_PUN,		_PUN,		_PUN,
572
573/*	176 degree	177 plusminus	178 twosuperior	179 threesuperior*/
574	_PUN,		_PUN,		_PUN,		_PUN,
575
576/*	180 acute	181 mu 		182 paragraph	183 periodcentered*/
577	_PUN,		_PUN, /*XXX*/	_PUN,		_PUN,
578
579/*	184 cedilla	185 onesuperior	186 masculine	187 guillemotright*/
580	_PUN,		_PUN,		_PUN,		_PUN,
581
582/*	188 onequarter	189 onehalf	190 threequarters 191 questiondown*/
583	_PUN,		_PUN,		_PUN,		_PUN,
584
585/*	192 Agrave	193 Aacute	194 Acircumflex	195 Atilde	*/
586	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
587
588/*	196 Adiaeresis	197 Aring	198 AE		199 Ccedilla	*/
589	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
590
591/*	200 Egrave	201 Eacute	202 Ecircumflex	203 Ediaeresis	*/
592	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
593
594/*	204 Igrave	205 Iacute	206 Icircumflex	207 Idiaeresis	*/
595	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
596
597/*	208 ETH		209 Ntilde	210 Ograve	211 Oacute	*/
598	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
599
600/*	212 Ocircumflex	213 Otilde	214 Odiaeresis	215 multiply	*/
601	_LET|_UP,	_LET|_UP,	_LET|_UP,	_PUN,
602
603/*	216 Ooblique	217 Ugrave	218 Uacute	219 Ucircumflex	*/
604	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
605
606/*	220 Udiaeresis	221 Yacute	222 THORN	223 ssharp	*/
607	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_DOW,
608
609/*	224 agrave	225 aacute	226 acircumflex	227 atilde	*/
610	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
611
612/*	228 adiaeresis	229 aring	230 ae		231 ccedilla	*/
613	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
614
615/*	232 egrave	233 eacute	234 ecircumflex	235 ediaeresis	*/
616	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
617
618/*	236 igrave	237 iacute	238 icircumflex	239 idiaeresis	*/
619	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
620
621/*	240 eth		241 ntilde	242 ograve	243 oacute	*/
622	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
623
624/*	244 ocircumflex	245 otilde	246 odiaeresis	247 division	*/
625	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_PUN,
626
627/*	248 oslash	249 ugrave	250 uacute	251 ucircumflex	*/
628	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
629
630/*	252 udiaeresis	253 yacute	254 thorn	255 ydiaeresis	*/
631	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
632};
633
634short _enable_mbdisp = 0; /* control multi-byte 0...disable 1...enable */
635
636/* multi-byte check table */
637/* default = all 0 (clear process in update_vars()/unset()) */
638unsigned short _mbmap[256];
639
640unsigned short _mbmap_euc[256] = {
641/* first byte	0x8e,0xa0 - 0xf4 */
642/* second byte 	0xa0 - 0xfe */
643/* 0 - 7f all 0 */
644    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
645    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
646    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
647    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
648/*  80		81		82		83 */
649    0,		0,		0,		0,
650/*  84		85		86		87 */
651    0,		0,		0,		0,
652/*  88		89		8a		8b */
653    0,		0,		0,		0,
654/*  8c		8d		8e		8f */
655    0,		0,		_MB1,		0,
656/* 90 - 9f all 0 */
657    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
658/*  a0		a1		a2		a3 */
659    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
660/*  a4		a5		a6		a7 */
661    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
662/*  a8		a9		aa		ab */
663    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
664/*  ac		ad		ae		af */
665    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
666/*  b0		b1		b2		b3 */
667    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
668/*  b4		b5		b6		b7 */
669    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
670/*  b8		b9		ba		bb */
671    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
672/*  bc		bd		be		bf */
673    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
674/*  c0		c1		c2		c3 */
675    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
676/*  c4		c5		c6		c7 */
677    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
678/*  c8		c9		ca		cb */
679    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
680/*  cc		cd		ce		cf */
681    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
682/*  d0		d1		d2		d3 */
683    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
684/*  d4		d5		d6		d7 */
685    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
686/*  d8		d9		da		db */
687    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
688/*  dc		dd		de		df */
689    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
690/*  e0		e1		e2		e3 */
691    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
692/*  e4		e5		e6		e7 */
693    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
694/*  e8		e9		ea		eb */
695    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
696/*  ec		ed		ee		ef */
697    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
698/*  f0		f1		f2		f3 */
699    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
700/*  f4		f5		f6		f7 */
701    _MB1|_MB2,	_MB2,		_MB2,		_MB2,
702/*  f8		f9		fa		fb */
703    _MB2,	_MB2,		_MB2,		_MB2,
704/*  fc		fd		fe		ff */
705    _MB2,	_MB2,		_MB2,		0,
706};
707
708unsigned short _mbmap_sjis[256] = {
709/* first byte	0x81-0x9f,0xe0 - 0xfc */
710/* second byte 	0x40-0x7e,0x80 - 0xfc */
711/* 0 - 3f all 0 */
712    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
713    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
714/*  40		41		42		43 */
715    _MB2,	_MB2,		_MB2,		_MB2,
716/*  44		45		46		47 */
717    _MB2,	_MB2,		_MB2,		_MB2,
718/*  48		49		4a		4b */
719    _MB2,	_MB2,		_MB2,		_MB2,
720/*  4c		4d		4e		4f */
721    _MB2,	_MB2,		_MB2,		_MB2,
722/*  50		51		52		53 */
723    _MB2,	_MB2,		_MB2,		_MB2,
724/*  54		55		56		57 */
725    _MB2,	_MB2,		_MB2,		_MB2,
726/*  58		59		5a		5b */
727    _MB2,	_MB2,		_MB2,		_MB2,
728/*  5c		5d		5e		5f */
729    _MB2,	_MB2,		_MB2,		_MB2,
730/*  60		61		62		63 */
731    _MB2,	_MB2,		_MB2,		_MB2,
732/*  64		65		66		67 */
733    _MB2,	_MB2,		_MB2,		_MB2,
734/*  68		69		6a		6b */
735    _MB2,	_MB2,		_MB2,		_MB2,
736/*  6c		6d		6e		6f */
737    _MB2,	_MB2,		_MB2,		_MB2,
738/*  70		71		72		73 */
739    _MB2,	_MB2,		_MB2,		_MB2,
740/*  74		75		76		77 */
741    _MB2,	_MB2,		_MB2,		_MB2,
742/*  78		79		7a		7b */
743    _MB2,	_MB2,		_MB2,		_MB2,
744/*  7c		7d		7e		7f */
745    _MB2,	_MB2,		_MB2,		0,
746/*  80		81		82		83 */
747    _MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
748/*  84		85		86		87 */
749    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
750/*  88		89		8a		8b */
751    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
752/*  8c		8d		8e		8f */
753    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
754/*  90		91		92		93 */
755    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
756/*  94		95		96		97 */
757    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
758/*  98		99		9a		9b */
759    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
760/*  9c		9d		9e		9f */
761    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
762/*  a0		a1		a2		a3 */
763    _MB2,	_MB2,		_MB2,		_MB2,
764/*  a4		a5		a6		a7 */
765    _MB2,	_MB2,		_MB2,		_MB2,
766/*  a8		a9		aa		ab */
767    _MB2,	_MB2,		_MB2,		_MB2,
768/*  ac		ad		ae		af */
769    _MB2,	_MB2,		_MB2,		_MB2,
770/*  b0		b1		b2		b3 */
771    _MB2,	_MB2,		_MB2,		_MB2,
772/*  b4		b5		b6		b7 */
773    _MB2,	_MB2,		_MB2,		_MB2,
774/*  b8		b9		ba		bb */
775    _MB2,	_MB2,		_MB2,		_MB2,
776/*  bc		bd		be		bf */
777    _MB2,	_MB2,		_MB2,		_MB2,
778/*  c0		c1		c2		c3 */
779    _MB2,	_MB2,		_MB2,		_MB2,
780/*  c4		c5		c6		c7 */
781    _MB2,	_MB2,		_MB2,		_MB2,
782/*  c8		c9		ca		cb */
783    _MB2,	_MB2,		_MB2,		_MB2,
784/*  cc		cd		ce		cf */
785    _MB2,	_MB2,		_MB2,		_MB2,
786/*  d0		d1		d2		d3 */
787    _MB2,	_MB2,		_MB2,		_MB2,
788/*  d4		d5		d6		d7 */
789    _MB2,	_MB2,		_MB2,		_MB2,
790/*  d8		d9		da		db */
791    _MB2,	_MB2,		_MB2,		_MB2,
792/*  dc		dd		de		df */
793    _MB2,	_MB2,		_MB2,		_MB2,
794/*  e0		e1		e2		e3 */
795    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
796/*  e4		e5		e6		e7 */
797    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
798/*  e8		e9		ea		eb */
799    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
800/*  ec		ed		ee		ef */
801    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
802/*  f0		f1		f2		f3 */
803    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
804/*  f4		f5		f6		f7 */
805    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
806/*  f8		f9		fa		fb */
807    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
808/*  fc		fd		fe		ff */
809    _MB1|_MB2,	0,		0,		0,
810};
811
812unsigned short _mbmap_big5[256] = {
813/* This is latest big5 charmap, so called "Big5+" */
814/* first byte   0x81 - 0xfe */
815/* second byte  0x40 - 0x7e, 0x80 - 0xfe */
816/* 0x00 - 0x3f = 0 */
817    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
818    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
819/* 0x40 - 0x7e = 2 */
820    _MB2,	_MB2,		_MB2,		_MB2,
821    _MB2,	_MB2,		_MB2,		_MB2,
822    _MB2,	_MB2,		_MB2,		_MB2,
823    _MB2,	_MB2,		_MB2,		_MB2,
824    _MB2,	_MB2,		_MB2,		_MB2,
825    _MB2,	_MB2,		_MB2,		_MB2,
826    _MB2,	_MB2,		_MB2,		_MB2,
827    _MB2,	_MB2,		_MB2,		_MB2,
828    _MB2,	_MB2,		_MB2,		_MB2,
829    _MB2,	_MB2,		_MB2,		_MB2,
830    _MB2,	_MB2,		_MB2,		_MB2,
831    _MB2,	_MB2,		_MB2,		_MB2,
832    _MB2,	_MB2,		_MB2,		_MB2,
833    _MB2,	_MB2,		_MB2,		_MB2,
834    _MB2,	_MB2,		_MB2,		_MB2,
835						/* 0x7f = 0 */
836    _MB2,	_MB2,		_MB2,		0,
837/* 0x80 = 2, 0x81 - 0xfe = 3 */
838    _MB2,      _MB1|_MB2,      _MB1|_MB2,      _MB1|_MB2,
839    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
840    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
841    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
842    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
843    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
844    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
845    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
846    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
847    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
848    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
849    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
850    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
851    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
852    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
853    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
854    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
855    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
856    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
857    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
858    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
859    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
860    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
861    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
862    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
863    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
864    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
865    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
866    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
867    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
868    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,
869						/* 0xff = 0 */
870    _MB1|_MB2,	_MB1|_MB2,	_MB1|_MB2,	0,
871};
872
873unsigned short _mbmap_utf8[256] = {
874/* utf8 uses up to 6 bytes */
875/* first byte        0xc0 - 0xfd */
876/* any further bytes 0x80 - 0xbf */
877/* 0 - 7f all 0 */
878    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
879    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
880    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
881    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
882/*  80 - bf : all _MB2 */
883    _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2,
884    _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2,
885    _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2,
886    _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2,
887    _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2,
888    _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2,
889    _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2,
890    _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2, _MB2,
891/* c0 - fc : all _MB1 */
892    _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, _MB1,
893    _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, _MB1,
894    _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, _MB1,
895    _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, _MB1,
896    _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, _MB1,
897    _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, _MB1,
898    _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, _MB1,
899/*  f8    f9    fa    fb    fc    fd    fe    ff*/
900    _MB1, _MB1, _MB1, _MB1, _MB1, _MB1, 0,    0
901};
902
903#else /* !(defined(KANJI) && defined(SHORT_STRINGS) && defined(DSPMBYTE)) */
904unsigned short _cmap[256] = {
905/*	  0 nul		  1 soh		  2 stx		  3 etx	*/
906	_CTR,		_CTR,		_CTR,		_CTR,
907
908/*	  4 eot		  5 enq		  6 ack		  7 bel	*/
909	_CTR,		_CTR,		_CTR,		_CTR,
910
911/*	  8 bs		  9 ht		 10 nl		 11 vt	*/
912	_CTR,		_CTR|_SP|_META,	_CTR|_NL|_META,	_CTR,
913
914/*	 12 np		 13 cr		 14 so		 15 si	*/
915	_CTR,		_CTR,		_CTR,		_CTR,
916
917/*	 16 dle		 17 dc1		 18 dc2		 19 dc3	*/
918	_CTR,		_CTR,		_CTR,		_CTR,
919
920/*	 20 dc4		 21 nak		 22 syn		 23 etb	*/
921	_CTR,		_CTR,		_CTR,		_CTR,
922
923/*	 24 can		 25 em		 26 sub		 27 esc	*/
924	_CTR,		_CTR,		_CTR,		_CTR,
925
926/*	 28 fs		 29 gs		 30 rs		 31 us	*/
927	_CTR,		_CTR,		_CTR,		_CTR,
928
929/*	 32 sp		 33 !		 34 "		 35 #	*/
930	_SP|_META,	_PUN,		_QF|_PUN,	_META|_PUN,
931
932/*	 36 $		 37 %		 38 &		 39 '	*/
933	_DOL|_PUN,	_PUN,		_META|_CMD|_PUN,_QF|_PUN,
934
935/*	 40 (		 41 )		 42 *		 43 +	*/
936	_META|_CMD|_PUN,_META|_PUN,	_GLOB|_PUN,	_PUN,
937
938/*	 44 ,		 45 -		 46 .		 47 /	*/
939	_PUN,		_PUN,		_PUN,		_PUN,
940
941/*	 48 0		 49 1		 50 2		 51 3	*/
942	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,
943
944/*	 52 4		 53 5		 54 6		 55 7	*/
945	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,
946
947/*	 56 8		 57 9		 58 :		 59 ;	*/
948	_DIG|_XD,	_DIG|_XD,	_PUN,		_META|_CMD|_PUN,
949
950/*	 60 <		 61 =		 62 >		 63 ?	*/
951	_META|_PUN,	_PUN,		_META|_PUN,	_GLOB|_PUN,
952
953/*	 64 @		 65 A		 66 B		 67 C	*/
954	_PUN,		_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP|_XD,
955
956/*	 68 D		 69 E		 70 F		 71 G	*/
957	_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP,
958
959/*	 72 H		 73 I		 74 J		 75 K	*/
960	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
961
962/*	 76 L		 77 M		 78 N		 79 O	*/
963	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
964
965/*	 80 P		 81 Q		 82 R		 83 S	*/
966	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
967
968/*	 84 T		 85 U		 86 V		 87 W	*/
969	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
970
971/*	 88 X		 89 Y		 90 Z		 91 [	*/
972	_LET|_UP,	_LET|_UP,	_LET|_UP,	_GLOB|_PUN,
973
974/*	 92 \		 93 ]		 94 ^		 95 _	*/
975	_ESC|_PUN,	_PUN,		_PUN,		_PUN,
976
977/*	 96 `		 97 a		 98 b		 99 c	*/
978  _QB|_GLOB|_META|_PUN,	_LET|_DOW|_XD,	_LET|_DOW|_XD,	_LET|_DOW|_XD,
979
980/*	100 d		101 e		102 f		103 g	*/
981	_LET|_DOW|_XD,	_LET|_DOW|_XD,	_LET|_DOW|_XD,	_LET|_DOW,
982
983/*	104 h		105 i		106 j		107 k	*/
984	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
985
986/*	108 l		109 m		110 n		111 o	*/
987	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
988
989/*	112 p		113 q		114 r		115 s	*/
990	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
991
992/*	116 t		117 u		118 v		119 w	*/
993	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
994
995/*	120 x		121 y		122 z		123 {	*/
996	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_GLOB|_PUN,
997
998/*	124 |		125 }		126 ~		127 del	*/
999	_META|_CMD|_PUN,_PUN,		_PUN,		_CTR,
1000
1001#ifdef SHORT_STRINGS
1002/****************************************************************/
1003/* 128 - 255 The below is supposedly ISO 8859/1			*/
1004/****************************************************************/
1005/*	128 (undef)	129 (undef)	130 (undef)	131 (undef)	*/
1006	_CTR,		_CTR,		_CTR,		_CTR,
1007
1008/*	132 (undef)	133 (undef)	134 (undef)	135 (undef)	*/
1009	_CTR,		_CTR,		_CTR,		_CTR,
1010
1011/*	136 (undef)	137 (undef)	138 (undef)	139 (undef)	*/
1012	_CTR,		_CTR,		_CTR,		_CTR,
1013
1014/*	140 (undef)	141 (undef)	142 (undef)	143 (undef)	*/
1015	_CTR,		_CTR,		_CTR,		_CTR,
1016
1017/*	144 (undef)	145 (undef)	146 (undef)	147 (undef)	*/
1018	_CTR,		_CTR,		_CTR,		_CTR,
1019
1020/*	148 (undef)	149 (undef)	150 (undef)	151 (undef)	*/
1021	_CTR,		_CTR,		_CTR,		_CTR,
1022
1023/*	152 (undef)	153 (undef)	154 (undef)	155 (undef)	*/
1024	_CTR,		_CTR,		_CTR,		_CTR,
1025
1026/*	156 (undef)	157 (undef)	158 (undef)	159 (undef)	*/
1027	_CTR,		_CTR,		_CTR,		_CTR,
1028
1029/*	160 nobreakspace 161 exclamdown	162 cent	163 sterling	*/
1030	_PUN, /* XXX */	_PUN,		_PUN,		_PUN,
1031
1032/*	164 currency	165 yen		166 brokenbar	167 section	*/
1033	_PUN,		_PUN,		_PUN,		_PUN,
1034
1035/*	168 diaeresis	169 copyright	170 ordfeminine	171 guillemotleft*/
1036	_PUN,		_PUN,		_PUN,		_PUN,
1037
1038/*	172 notsign	173 hyphen	174 registered	175 macron	*/
1039	_PUN,		_PUN,		_PUN,		_PUN,
1040
1041/*	176 degree	177 plusminus	178 twosuperior	179 threesuperior*/
1042	_PUN,		_PUN,		_PUN,		_PUN,
1043
1044/*	180 acute	181 mu 		182 paragraph	183 periodcentered*/
1045	_PUN,		_PUN, /*XXX*/	_PUN,		_PUN,
1046
1047/*	184 cedilla	185 onesuperior	186 masculine	187 guillemotright*/
1048	_PUN,		_PUN,		_PUN,		_PUN,
1049
1050/*	188 onequarter	189 onehalf	190 threequarters 191 questiondown*/
1051	_PUN,		_PUN,		_PUN,		_PUN,
1052
1053/*	192 Agrave	193 Aacute	194 Acircumflex	195 Atilde	*/
1054	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
1055
1056/*	196 Adiaeresis	197 Aring	198 AE		199 Ccedilla	*/
1057	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
1058
1059/*	200 Egrave	201 Eacute	202 Ecircumflex	203 Ediaeresis	*/
1060	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
1061
1062/*	204 Igrave	205 Iacute	206 Icircumflex	207 Idiaeresis	*/
1063	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
1064
1065/*	208 ETH		209 Ntilde	210 Ograve	211 Oacute	*/
1066	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
1067
1068/*	212 Ocircumflex	213 Otilde	214 Odiaeresis	215 multiply	*/
1069	_LET|_UP,	_LET|_UP,	_LET|_UP,	_PUN,
1070
1071/*	216 Ooblique	217 Ugrave	218 Uacute	219 Ucircumflex	*/
1072	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
1073
1074/*	220 Udiaeresis	221 Yacute	222 THORN	223 ssharp	*/
1075	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_DOW,
1076
1077/*	224 agrave	225 aacute	226 acircumflex	227 atilde	*/
1078	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
1079
1080/*	228 adiaeresis	229 aring	230 ae		231 ccedilla	*/
1081	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
1082
1083/*	232 egrave	233 eacute	234 ecircumflex	235 ediaeresis	*/
1084	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
1085
1086/*	236 igrave	237 iacute	238 icircumflex	239 idiaeresis	*/
1087	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
1088
1089/*	240 eth		241 ntilde	242 ograve	243 oacute	*/
1090	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
1091
1092/*	244 ocircumflex	245 otilde	246 odiaeresis	247 division	*/
1093	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_PUN,
1094
1095/*	248 oslash	249 ugrave	250 uacute	251 ucircumflex	*/
1096	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
1097
1098/*	252 udiaeresis	253 yacute	254 thorn	255 ydiaeresis	*/
1099	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,	_LET|_DOW,
1100#endif /* SHORT_STRINGS */
1101};
1102#endif /* defined(KANJI) && defined(SHORT_STRINGS) && defined(DSPMBYTE) */
1103
1104#ifndef NLS
1105/* _cmap_lower, _cmap_upper for ISO 8859/1 */
1106
1107unsigned char _cmap_lower[256] = {
1108	0000,	0001,	0002,	0003,	0004,	0005,	0006,	0007,
1109	0010,	0011,	0012,	0013,	0014,	0015,	0016,	0017,
1110	0020,	0021,	0022,	0023,	0024,	0025,	0026,	0027,
1111	0030,	0031,	0032,	0033,	0034,	0035,	0036,	0037,
1112	0040,	0041,	0042,	0043,	0044,	0045,	0046,	0047,
1113	0050,	0051,	0052,	0053,	0054,	0055,	0056,	0057,
1114	0060,	0061,	0062,	0063,	0064,	0065,	0066,	0067,
1115	0070,	0071,	0072,	0073,	0074,	0075,	0076,	0077,
1116	0100,	0141,	0142,	0143,	0144,	0145,	0146,	0147,
1117	0150,	0151,	0152,	0153,	0154,	0155,	0156,	0157,
1118	0160,	0161,	0162,	0163,	0164,	0165,	0166,	0167,
1119	0170,	0171,	0172,	0133,	0134,	0135,	0136,	0137,
1120	0140,	0141,	0142,	0143,	0144,	0145,	0146,	0147,
1121	0150,	0151,	0152,	0153,	0154,	0155,	0156,	0157,
1122	0160,	0161,	0162,	0163,	0164,	0165,	0166,	0167,
1123	0170,	0171,	0172,	0173,	0174,	0175,	0176,	0177,
1124	0200,	0201,	0202,	0203,	0204,	0205,	0206,	0207,
1125	0210,	0211,	0212,	0213,	0214,	0215,	0216,	0217,
1126	0220,	0221,	0222,	0223,	0224,	0225,	0226,	0227,
1127	0230,	0231,	0232,	0233,	0234,	0235,	0236,	0237,
1128	0240,	0241,	0242,	0243,	0244,	0245,	0246,	0247,
1129	0250,	0251,	0252,	0253,	0254,	0255,	0256,	0257,
1130	0260,	0261,	0262,	0263,	0264,	0265,	0266,	0267,
1131	0270,	0271,	0272,	0273,	0274,	0275,	0276,	0277,
1132	0340,	0341,	0342,	0343,	0344,	0345,	0346,	0347,
1133	0350,	0351,	0352,	0353,	0354,	0355,	0356,	0357,
1134	0360,	0361,	0362,	0363,	0364,	0365,	0366,	0327,
1135	0370,	0371,	0372,	0373,	0374,	0375,	0376,	0337,
1136	0340,	0341,	0342,	0343,	0344,	0345,	0346,	0347,
1137	0350,	0351,	0352,	0353,	0354,	0355,	0356,	0357,
1138	0360,	0361,	0362,	0363,	0364,	0365,	0366,	0367,
1139	0370,	0371,	0372,	0373,	0374,	0375,	0376,	0377,
1140};
1141
1142unsigned char _cmap_upper[256] = {
1143	0000,	0001,	0002,	0003,	0004,	0005,	0006,	0007,
1144	0010,	0011,	0012,	0013,	0014,	0015,	0016,	0017,
1145	0020,	0021,	0022,	0023,	0024,	0025,	0026,	0027,
1146	0030,	0031,	0032,	0033,	0034,	0035,	0036,	0037,
1147	0040,	0041,	0042,	0043,	0044,	0045,	0046,	0047,
1148	0050,	0051,	0052,	0053,	0054,	0055,	0056,	0057,
1149	0060,	0061,	0062,	0063,	0064,	0065,	0066,	0067,
1150	0070,	0071,	0072,	0073,	0074,	0075,	0076,	0077,
1151	0100,	0101,	0102,	0103,	0104,	0105,	0106,	0107,
1152	0110,	0111,	0112,	0113,	0114,	0115,	0116,	0117,
1153	0120,	0121,	0122,	0123,	0124,	0125,	0126,	0127,
1154	0130,	0131,	0132,	0133,	0134,	0135,	0136,	0137,
1155	0140,	0101,	0102,	0103,	0104,	0105,	0106,	0107,
1156	0110,	0111,	0112,	0113,	0114,	0115,	0116,	0117,
1157	0120,	0121,	0122,	0123,	0124,	0125,	0126,	0127,
1158	0130,	0131,	0132,	0173,	0174,	0175,	0176,	0177,
1159	0200,	0201,	0202,	0203,	0204,	0205,	0206,	0207,
1160	0210,	0211,	0212,	0213,	0214,	0215,	0216,	0217,
1161	0220,	0221,	0222,	0223,	0224,	0225,	0226,	0227,
1162	0230,	0231,	0232,	0233,	0234,	0235,	0236,	0237,
1163	0240,	0241,	0242,	0243,	0244,	0245,	0246,	0247,
1164	0250,	0251,	0252,	0253,	0254,	0255,	0256,	0257,
1165	0260,	0261,	0262,	0263,	0264,	0265,	0266,	0267,
1166	0270,	0271,	0272,	0273,	0274,	0275,	0276,	0277,
1167	0300,	0301,	0302,	0303,	0304,	0305,	0306,	0307,
1168	0310,	0311,	0312,	0313,	0314,	0315,	0316,	0317,
1169	0320,	0321,	0322,	0323,	0324,	0325,	0326,	0327,
1170	0330,	0331,	0332,	0333,	0334,	0335,	0336,	0337,
1171	0300,	0301,	0302,	0303,	0304,	0305,	0306,	0307,
1172	0310,	0311,	0312,	0313,	0314,	0315,	0316,	0317,
1173	0320,	0321,	0322,	0323,	0324,	0325,	0326,	0367,
1174	0330,	0331,	0332,	0333,	0334,	0335,	0336,	0377,
1175};
1176#endif /* NLS */
1177
1178#ifdef _OSD_POSIX
1179/*
1180	   Initial Port for tcsh-6.07.04 by <Martin.Kraemer@Mch.SNI.De>
1181
1182"BS2000 OSD" is a POSIX on a main frame.
1183It is made by Siemens Nixdorf AG, Germany.
1184Within the POSIX subsystem, the same character set was chosen as in
1185"native BS2000", namely EBCDIC.  Yes, tcsh now runs on EBCDIC platforms, too.
1186
1187EBCDIC Table. (Yes, in EBCDIC, the letters 'a'..'z' are not contiguous!)
1188This table is bijective, i.e. there are no ambigous or duplicate characters
118900    00 01 02 03 85 09 86 7f  87 8d 8e 0b 0c 0d 0e 0f  * ................ *
119010    10 11 12 13 8f 0a 08 97  18 19 9c 9d 1c 1d 1e 1f  * ................ *
119120    80 81 82 83 84 92 17 1b  88 89 8a 8b 8c 05 06 07  * ................ *
119230    90 91 16 93 94 95 96 04  98 99 9a 9b 14 15 9e 1a  * ................ *
119340    20 a0 e2 e4 e0 e1 e3 e5  e7 f1 60 2e 3c 28 2b 7c  *  .........`.<(+| *
119450    26 e9 ea eb e8 ed ee ef  ec df 21 24 2a 29 3b 9f  * &.........!$*);. *
119560    2d 2f c2 c4 c0 c1 c3 c5  c7 d1 5e 2c 25 5f 3e 3f  * -/........^,%_>? *
119670    f8 c9 ca cb c8 cd ce cf  cc a8 3a 23 40 27 3d 22  * ..........:#@'=" *
119780    d8 61 62 63 64 65 66 67  68 69 ab bb f0 fd fe b1  * .abcdefghi...... *
119890    b0 6a 6b 6c 6d 6e 6f 70  71 72 aa ba e6 b8 c6 a4  * .jklmnopqr...... *
1199a0    b5 af 73 74 75 76 77 78  79 7a a1 bf d0 dd de ae  * ..stuvwxyz...... *
1200b0    a2 a3 a5 b7 a9 a7 b6 bc  bd be ac 5b 5c 5d b4 d7  * ...........[\].. *
1201c0    f9 41 42 43 44 45 46 47  48 49 ad f4 f6 f2 f3 f5  * .ABCDEFGHI...... *
1202d0    a6 4a 4b 4c 4d 4e 4f 50  51 52 b9 fb fc db fa ff  * .JKLMNOPQR...... *
1203e0    d9 f7 53 54 55 56 57 58  59 5a b2 d4 d6 d2 d3 d5  * ..STUVWXYZ...... *
1204f0    30 31 32 33 34 35 36 37  38 39 b3 7b dc 7d da 7e  * 0123456789.{.}.~ *
1205*/
1206unsigned short _toascii[256] = {
1207/*00*/ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f,
1208       0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
1209/*10*/ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97,
1210       0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
1211/*20*/ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b,
1212       0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /* ................ */
1213/*30*/ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04,
1214       0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /* ................ */
1215/*40*/ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5,
1216       0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+|  */
1217/*50*/ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef,
1218       0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /* &.........!$*);. */
1219/*60*/ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5,
1220       0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /* -/........^,%_>? */
1221/*70*/ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf,
1222       0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /* ..........:#@'=" */
1223/*80*/ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
1224       0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /* .abcdefghi...... */
1225/*90*/ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
1226       0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /* .jklmnopqr...... */
1227/*a0*/ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
1228       0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /* ..stuvwxyz...... */
1229/*b0*/ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc,
1230       0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /* ...........[\].. */
1231/*c0*/ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
1232       0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /* .ABCDEFGHI...... */
1233/*d0*/ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
1234       0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /* .JKLMNOPQR...... */
1235/*e0*/ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
1236       0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /* ..STUVWXYZ...... */
1237/*f0*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
1238       0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e  /* 0123456789.{.}.~ */
1239};
1240/* The same, for ascii-in-ebcdic
124100    00 01 02 03 37 2d 2e 2f  16 05 15 0b 0c 0d 0e 0f  * ................ *
124210    10 11 12 13 3c 3d 32 26  18 19 3f 27 1c 1d 1e 1f  * ................ *
124320    40 5a 7f 7b 5b 6c 50 7d  4d 5d 5c 4e 6b 60 4b 61  *  !"#$%&'()*+,-./ *
124430    f0 f1 f2 f3 f4 f5 f6 f7  f8 f9 7a 5e 4c 7e 6e 6f  * 0123456789:;<=>? *
124540    7c c1 c2 c3 c4 c5 c6 c7  c8 c9 d1 d2 d3 d4 d5 d6  * @ABCDEFGHIJKLMNO *
124650    d7 d8 d9 e2 e3 e4 e5 e6  e7 e8 e9 bb bc bd 6a 6d  * PQRSTUVWXYZ[\]^_ *
124760    4a 81 82 83 84 85 86 87  88 89 91 92 93 94 95 96  * `abcdefghijklmno *
124870    97 98 99 a2 a3 a4 a5 a6  a7 a8 a9 fb 4f fd ff 07  * pqrstuvwxyz{|}~. *
124980    20 21 22 23 24 04 06 08  28 29 2a 2b 2c 09 0a 14  * ................ *
125090    30 31 25 33 34 35 36 17  38 39 3a 3b 1a 1b 3e 5f  * ................ *
1251a0    41 aa b0 b1 9f b2 d0 b5  79 b4 9a 8a ba ca af a1  * ................ *
1252b0    90 8f ea fa be a0 b6 b3  9d da 9b 8b b7 b8 b9 ab  * ................ *
1253c0    64 65 62 66 63 67 9e 68  74 71 72 73 78 75 76 77  * ................ *
1254d0    ac 69 ed ee eb ef ec bf  80 e0 fe dd fc ad ae 59  * ................ *
1255e0    44 45 42 46 43 47 9c 48  54 51 52 53 58 55 56 57  * ................ *
1256f0    8c 49 cd ce cb cf cc e1  70 c0 de db dc 8d 8e df  * ................ *
1257*/
1258unsigned short _toebcdic[256] = {
1259/*00*/  0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f,
1260	0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,  /* ................ */
1261/*10*/  0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26,
1262	0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,  /* ................ */
1263/*20*/  0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d,
1264	0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,  /*  !"#$%&'()*+,-./ */
1265/*30*/  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1266	0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,  /* 0123456789:;<=>? */
1267/*40*/  0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
1268	0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,  /* @ABCDEFGHIJKLMNO */
1269/*50*/  0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6,
1270	0xe7, 0xe8, 0xe9, 0xbb, 0xbc, 0xbd, 0x6a, 0x6d,  /* PQRSTUVWXYZ[\]^_ */
1271/*60*/  0x4a, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
1272	0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,  /* `abcdefghijklmno */
1273/*70*/  0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
1274	0xa7, 0xa8, 0xa9, 0xfb, 0x4f, 0xfd, 0xff, 0x07,  /* pqrstuvwxyz{|}~. */
1275/*80*/  0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08,
1276	0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14,  /* ................ */
1277/*90*/  0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17,
1278	0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0x5f,  /* ................ */
1279/*a0*/  0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0xd0, 0xb5,
1280	0x79, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xa1,  /* ................ */
1281/*b0*/  0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3,
1282	0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab,  /* ................ */
1283/*c0*/  0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68,
1284	0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77,  /* ................ */
1285/*d0*/  0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf,
1286	0x80, 0xe0, 0xfe, 0xdd, 0xfc, 0xad, 0xae, 0x59,  /* ................ */
1287/*e0*/  0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48,
1288	0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57,  /* ................ */
1289/*f0*/  0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1,
1290	0x70, 0xc0, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf   /* ................ */
1291};
1292
1293#endif /*_OSD_POSIX*/
1294
1295#ifdef __MVS__
1296/*
1297   The IBM 1047 coded char set to/from ISO 8859-1 mapping differs from
1298   the POSIX-BC mapping in several places
1299 */
1300unsigned short _toascii[256] = {
1301      0x00, 0x01, 0x02, 0x03, 0x9c, 0x09, 0x86, 0x7f,
1302      0x97, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1303      0x10, 0x11, 0x12, 0x13, 0x9d, 0x0a, 0x08, 0x87,
1304      0x18, 0x19, 0x92, 0x8f, 0x1c, 0x1d, 0x1e, 0x1f,
1305      0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x17, 0x1b,
1306      0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07,
1307      0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04,
1308      0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a,
1309      0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5,
1310      0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c,
1311      0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef,
1312      0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e,
1313      0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5,
1314      0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f,
1315      0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf,
1316      0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22,
1317      0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
1318      0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1,
1319      0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
1320      0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4,
1321      0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
1322      0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0x5b, 0xde, 0xae,
1323      0xac, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc,
1324      0xbd, 0xbe, 0xdd, 0xa8, 0xaf, 0x5d, 0xb4, 0xd7,
1325      0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
1326      0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5,
1327      0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
1328      0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff,
1329      0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
1330      0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5,
1331      0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
1332      0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f,
1333};
1334unsigned short _toebcdic[256] = {
1335      0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f,
1336      0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1337      0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26,
1338      0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,
1339      0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d,
1340      0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,
1341      0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
1342      0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,
1343      0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
1344      0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
1345      0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6,
1346      0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d,
1347      0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
1348      0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
1349      0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
1350      0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07,
1351      0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x06, 0x17,
1352      0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b,
1353      0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08,
1354      0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff,
1355      0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5,
1356      0xbb, 0xb4, 0x9a, 0x8a, 0xb0, 0xca, 0xaf, 0xbc,
1357      0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3,
1358      0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab,
1359      0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68,
1360      0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77,
1361      0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf,
1362      0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xba, 0xae, 0x59,
1363      0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48,
1364      0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57,
1365      0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1,
1366      0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf
1367};
1368#endif /*__MVS__*/
1369