ee93c4f4b185857407fe308951b614207823eda9
[dragonfly.git] / contrib / tcsh-6 / sh.char.c
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
35 RCSID("$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 */
41 unsigned 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 */
238 unsigned 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 */
437 unsigned 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
634 short _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()) */
638 unsigned short _mbmap[256];
639
640 unsigned 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
708 unsigned 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
812 unsigned 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
873 unsigned 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)) */
904 unsigned 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
1107 unsigned 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
1142 unsigned 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.
1183 It is made by Siemens Nixdorf AG, Germany.
1184 Within 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
1187 EBCDIC Table. (Yes, in EBCDIC, the letters 'a'..'z' are not contiguous!)
1188 This table is bijective, i.e. there are no ambigous or duplicate characters
1189 00    00 01 02 03 85 09 86 7f  87 8d 8e 0b 0c 0d 0e 0f  * ................ *
1190 10    10 11 12 13 8f 0a 08 97  18 19 9c 9d 1c 1d 1e 1f  * ................ *
1191 20    80 81 82 83 84 92 17 1b  88 89 8a 8b 8c 05 06 07  * ................ *
1192 30    90 91 16 93 94 95 96 04  98 99 9a 9b 14 15 9e 1a  * ................ *
1193 40    20 a0 e2 e4 e0 e1 e3 e5  e7 f1 60 2e 3c 28 2b 7c  *  .........`.<(+| *
1194 50    26 e9 ea eb e8 ed ee ef  ec df 21 24 2a 29 3b 9f  * &.........!$*);. *
1195 60    2d 2f c2 c4 c0 c1 c3 c5  c7 d1 5e 2c 25 5f 3e 3f  * -/........^,%_>? *
1196 70    f8 c9 ca cb c8 cd ce cf  cc a8 3a 23 40 27 3d 22  * ..........:#@'=" *
1197 80    d8 61 62 63 64 65 66 67  68 69 ab bb f0 fd fe b1  * .abcdefghi...... *
1198 90    b0 6a 6b 6c 6d 6e 6f 70  71 72 aa ba e6 b8 c6 a4  * .jklmnopqr...... *
1199 a0    b5 af 73 74 75 76 77 78  79 7a a1 bf d0 dd de ae  * ..stuvwxyz...... *
1200 b0    a2 a3 a5 b7 a9 a7 b6 bc  bd be ac 5b 5c 5d b4 d7  * ...........[\].. *
1201 c0    f9 41 42 43 44 45 46 47  48 49 ad f4 f6 f2 f3 f5  * .ABCDEFGHI...... *
1202 d0    a6 4a 4b 4c 4d 4e 4f 50  51 52 b9 fb fc db fa ff  * .JKLMNOPQR...... *
1203 e0    d9 f7 53 54 55 56 57 58  59 5a b2 d4 d6 d2 d3 d5  * ..STUVWXYZ...... *
1204 f0    30 31 32 33 34 35 36 37  38 39 b3 7b dc 7d da 7e  * 0123456789.{.}.~ *
1205 */
1206 unsigned 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
1241 00    00 01 02 03 37 2d 2e 2f  16 05 15 0b 0c 0d 0e 0f  * ................ *
1242 10    10 11 12 13 3c 3d 32 26  18 19 3f 27 1c 1d 1e 1f  * ................ *
1243 20    40 5a 7f 7b 5b 6c 50 7d  4d 5d 5c 4e 6b 60 4b 61  *  !"#$%&'()*+,-./ *
1244 30    f0 f1 f2 f3 f4 f5 f6 f7  f8 f9 7a 5e 4c 7e 6e 6f  * 0123456789:;<=>? *
1245 40    7c c1 c2 c3 c4 c5 c6 c7  c8 c9 d1 d2 d3 d4 d5 d6  * @ABCDEFGHIJKLMNO *
1246 50    d7 d8 d9 e2 e3 e4 e5 e6  e7 e8 e9 bb bc bd 6a 6d  * PQRSTUVWXYZ[\]^_ *
1247 60    4a 81 82 83 84 85 86 87  88 89 91 92 93 94 95 96  * `abcdefghijklmno *
1248 70    97 98 99 a2 a3 a4 a5 a6  a7 a8 a9 fb 4f fd ff 07  * pqrstuvwxyz{|}~. *
1249 80    20 21 22 23 24 04 06 08  28 29 2a 2b 2c 09 0a 14  * ................ *
1250 90    30 31 25 33 34 35 36 17  38 39 3a 3b 1a 1b 3e 5f  * ................ *
1251 a0    41 aa b0 b1 9f b2 d0 b5  79 b4 9a 8a ba ca af a1  * ................ *
1252 b0    90 8f ea fa be a0 b6 b3  9d da 9b 8b b7 b8 b9 ab  * ................ *
1253 c0    64 65 62 66 63 67 9e 68  74 71 72 73 78 75 76 77  * ................ *
1254 d0    ac 69 ed ee eb ef ec bf  80 e0 fe dd fc ad ae 59  * ................ *
1255 e0    44 45 42 46 43 47 9c 48  54 51 52 53 58 55 56 57  * ................ *
1256 f0    8c 49 cd ce cb cf cc e1  70 c0 de db dc 8d 8e df  * ................ *
1257 */
1258 unsigned 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  */
1300 unsigned 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 };
1334 unsigned 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__*/