1/* $NetBSD: char.c,v 1.9 2003/08/07 09:05:03 agc Exp $ */
2
3/*-
4 * Copyright (c) 1980, 1991, 1993
5 *	The Regents of the University of California.  All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 *    notice, this list of conditions and the following disclaimer in the
14 *    documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the University nor the names of its contributors
16 *    may be used to endorse or promote products derived from this software
17 *    without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE.
30 */
31
32#include <sys/cdefs.h>
33#ifndef lint
34#if 0
35static char sccsid[] = "@(#)char.c	8.1 (Berkeley) 5/31/93";
36#else
37__RCSID("$NetBSD: char.c,v 1.9 2003/08/07 09:05:03 agc Exp $");
38#endif
39#endif /* not lint */
40
41#include "char.h"
42
43/* on default same as original map */
44unsigned short _cmap[256] = {
45/*	  0 nul		  1 soh		  2 stx		  3 etx	*/
46	_CTR,		_CTR,		_CTR,		_CTR,
47
48/*	  4 eot		  5 enq		  6 ack		  7 bel	*/
49	_CTR,		_CTR,		_CTR,		_CTR,
50
51/*	  8 bs		  9 ht		 10 nl		 11 vt	*/
52	_CTR,		_CTR|_SP|_META,	_CTR|_NL|_META,	_CTR,
53
54/*	 12 np		 13 cr		 14 so		 15 si	*/
55	_CTR,		_CTR,		_CTR,		_CTR,
56
57/*	 16 dle		 17 dc1		 18 dc2		 19 dc3	*/
58	_CTR,		_CTR,		_CTR,		_CTR,
59
60/*	 20 dc4		 21 nak		 22 syn		 23 etb	*/
61	_CTR,		_CTR,		_CTR,		_CTR,
62
63/*	 24 can		 25 em		 26 sub		 27 esc	*/
64	_CTR,		_CTR,		_CTR,		_CTR,
65
66/*	 28 fs		 29 gs		 30 rs		 31 us	*/
67	_CTR,		_CTR,		_CTR,		_CTR,
68
69/*	 32 sp		 33 !		 34 "		 35 #	*/
70	_SP|_META,	_PUN,		_QF|_PUN,	_META|_PUN,
71
72/*	 36 $		 37 %		 38 &		 39 '	*/
73	_DOL|_PUN,	_PUN,		_META|_CMD|_PUN,_QF|_PUN,
74
75/*	 40 (		 41 )		 42 *		 43 +	*/
76	_META|_CMD|_PUN,_META|_PUN,	_GLOB|_PUN,	_PUN,
77
78/*	 44 ,		 45 -		 46 .		 47 /	*/
79	_PUN,		_PUN,		_PUN,		_PUN,
80
81/*	 48 0		 49 1		 50 2		 51 3	*/
82	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,
83
84/*	 52 4		 53 5		 54 6		 55 7	*/
85	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,	_DIG|_XD,
86
87/*	 56 8		 57 9		 58 :		 59 ;	*/
88	_DIG|_XD,	_DIG|_XD,	_PUN,		_META|_CMD|_PUN,
89
90/*	 60 <		 61 =		 62 >		 63 ?	*/
91	_META|_PUN,	_PUN,		_META|_PUN,	_GLOB|_PUN,
92
93/*	 64 @		 65 A		 66 B		 67 C	*/
94	_PUN,		_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP|_XD,
95
96/*	 68 D		 69 E		 70 F		 71 G	*/
97	_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP|_XD,	_LET|_UP,
98
99/*	 72 H		 73 I		 74 J		 75 K	*/
100	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
101
102/*	 76 L		 77 M		 78 N		 79 O	*/
103	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
104
105/*	 80 P		 81 Q		 82 R		 83 S	*/
106	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
107
108/*	 84 T		 85 U		 86 V		 87 W	*/
109	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
110
111/*	 88 X		 89 Y		 90 Z		 91 [	*/
112	_LET|_UP,	_LET|_UP,	_LET|_UP,	_GLOB|_PUN,
113
114/*	 92 \		 93 ]		 94 ^		 95 _	*/
115	_ESC|_PUN,	_PUN,		_PUN,		_PUN,
116
117/*	 96 `		 97 a		 98 b		 99 c	*/
118  _QB|_GLOB|_META|_PUN,	_LET|_LOW|_XD,	_LET|_LOW|_XD,	_LET|_LOW|_XD,
119
120/*	100 d		101 e		102 f		103 g	*/
121	_LET|_LOW|_XD,	_LET|_LOW|_XD,	_LET|_LOW|_XD,	_LET|_LOW,
122
123/*	104 h		105 i		106 j		107 k	*/
124	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,
125
126/*	108 l		109 m		110 n		111 o	*/
127	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,
128
129/*	112 p		113 q		114 r		115 s	*/
130	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,
131
132/*	116 t		117 u		118 v		119 w	*/
133	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,
134
135/*	120 x		121 y		122 z		123 {	*/
136	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,	_GLOB|_PUN,
137
138/*	124 |		125 }		126 ~		127 del	*/
139	_META|_CMD|_PUN,_PUN,		_PUN,		_CTR,
140
141#ifdef SHORT_STRINGS
142/****************************************************************/
143/* 128 - 255 The below is supposedly ISO 8859/1			*/
144/****************************************************************/
145/*	128 (undef)	129 (undef)	130 (undef)	131 (undef)	*/
146	_CTR,		_CTR,		_CTR,		_CTR,
147
148/*	132 (undef)	133 (undef)	134 (undef)	135 (undef)	*/
149	_CTR,		_CTR,		_CTR,		_CTR,
150
151/*	136 (undef)	137 (undef)	138 (undef)	139 (undef)	*/
152	_CTR,		_CTR,		_CTR,		_CTR,
153
154/*	140 (undef)	141 (undef)	142 (undef)	143 (undef)	*/
155	_CTR,		_CTR,		_CTR,		_CTR,
156
157/*	144 (undef)	145 (undef)	146 (undef)	147 (undef)	*/
158	_CTR,		_CTR,		_CTR,		_CTR,
159
160/*	148 (undef)	149 (undef)	150 (undef)	151 (undef)	*/
161	_CTR,		_CTR,		_CTR,		_CTR,
162
163/*	152 (undef)	153 (undef)	154 (undef)	155 (undef)	*/
164	_CTR,		_CTR,		_CTR,		_CTR,
165
166/*	156 (undef)	157 (undef)	158 (undef)	159 (undef)	*/
167	_CTR,		_CTR,		_CTR,		_CTR,
168
169/*	160 nobreakspace 161 exclamdown	162 cent	163 sterling	*/
170	_PUN, /* XXX */	_PUN,		_PUN,		_PUN,
171
172/*	164 currency	165 yen		166 brokenbar	167 section	*/
173	_PUN,		_PUN,		_PUN,		_PUN,
174
175/*	168 diaeresis	169 copyright	170 ordfeminine	171 guillemotleft*/
176	_PUN,		_PUN,		_PUN,		_PUN,
177
178/*	172 notsign	173 hyphen	174 registered	175 macron	*/
179	_PUN,		_PUN,		_PUN,		_PUN,
180
181/*	176 degree	177 plusminus	178 twosuperior	179 threesuperior*/
182	_PUN,		_PUN,		_PUN,		_PUN,
183
184/*	180 acute	181 mu 		182 paragraph	183 periodcentered*/
185	_PUN,		_PUN, /*XXX*/	_PUN,		_PUN,
186
187/*	184 cedilla	185 onesuperior	186 masculine	187 guillemotright*/
188	_PUN,		_PUN,		_PUN,		_PUN,
189
190/*	188 onequarter	189 onehalf	190 threequarters 191 questiondown*/
191	_PUN,		_PUN,		_PUN,		_PUN,
192
193/*	192 Agrave	193 Aacute	194 Acircumflex	195 Atilde	*/
194	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
195
196/*	196 Adiaeresis	197 Aring	198 AE		199 Ccedilla	*/
197	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
198
199/*	200 Egrave	201 Eacute	202 Ecircumflex	203 Ediaeresis	*/
200	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
201
202/*	204 Igrave	205 Iacute	206 Icircumflex	207 Idiaeresis	*/
203	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
204
205/*	208 ETH		209 Ntilde	210 Ograve	211 Oacute	*/
206	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
207
208/*	212 Ocircumflex	213 Otilde	214 Odiaeresis	215 multiply	*/
209	_LET|_UP,	_LET|_UP,	_LET|_UP,	_PUN,
210
211/*	216 Ooblique	217 Ugrave	218 Uacute	219 Ucircumflex	*/
212	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_UP,
213
214/*	220 Udiaeresis	221 Yacute	222 THORN	223 ssharp	*/
215	_LET|_UP,	_LET|_UP,	_LET|_UP,	_LET|_LOW,
216
217/*	224 agrave	225 aacute	226 acircumflex	227 atilde	*/
218	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,
219
220/*	228 adiaeresis	229 aring	230 ae		231 ccedilla	*/
221	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,
222
223/*	232 egrave	233 eacute	234 ecircumflex	235 ediaeresis	*/
224	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,
225
226/*	236 igrave	237 iacute	238 icircumflex	239 idiaeresis	*/
227	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,
228
229/*	240 eth		241 ntilde	242 ograve	243 oacute	*/
230	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,
231
232/*	244 ocircumflex	245 otilde	246 odiaeresis	247 division	*/
233	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,	_PUN,
234
235/*	248 oslash	249 ugrave	250 uacute	251 ucircumflex	*/
236	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,
237
238/*	252 udiaeresis	253 yacute	254 thorn	255 ydiaeresis	*/
239	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,	_LET|_LOW,
240#endif /* SHORT_STRINGS */
241};
242
243#ifndef NLS
244/* _cmap_lower, _cmap_upper for ISO 8859/1 */
245
246unsigned char _cmap_lower[256] = {
247	0000,	0001,	0002,	0003,	0004,	0005,	0006,	0007,
248	0010,	0011,	0012,	0013,	0014,	0015,	0016,	0017,
249	0020,	0021,	0022,	0023,	0024,	0025,	0026,	0027,
250	0030,	0031,	0032,	0033,	0034,	0035,	0036,	0037,
251	0040,	0041,	0042,	0043,	0044,	0045,	0046,	0047,
252	0050,	0051,	0052,	0053,	0054,	0055,	0056,	0057,
253	0060,	0061,	0062,	0063,	0064,	0065,	0066,	0067,
254	0070,	0071,	0072,	0073,	0074,	0075,	0076,	0077,
255	0100,	0141,	0142,	0143,	0144,	0145,	0146,	0147,
256	0150,	0151,	0152,	0153,	0154,	0155,	0156,	0157,
257	0160,	0161,	0162,	0163,	0164,	0165,	0166,	0167,
258	0170,	0171,	0172,	0133,	0134,	0135,	0136,	0137,
259	0140,	0141,	0142,	0143,	0144,	0145,	0146,	0147,
260	0150,	0151,	0152,	0153,	0154,	0155,	0156,	0157,
261	0160,	0161,	0162,	0163,	0164,	0165,	0166,	0167,
262	0170,	0171,	0172,	0173,	0174,	0175,	0176,	0177,
263	0200,	0201,	0202,	0203,	0204,	0205,	0206,	0207,
264	0210,	0211,	0212,	0213,	0214,	0215,	0216,	0217,
265	0220,	0221,	0222,	0223,	0224,	0225,	0226,	0227,
266	0230,	0231,	0232,	0233,	0234,	0235,	0236,	0237,
267	0240,	0241,	0242,	0243,	0244,	0245,	0246,	0247,
268	0250,	0251,	0252,	0253,	0254,	0255,	0256,	0257,
269	0260,	0261,	0262,	0263,	0264,	0265,	0266,	0267,
270	0270,	0271,	0272,	0273,	0274,	0275,	0276,	0277,
271	0340,	0341,	0342,	0343,	0344,	0345,	0346,	0347,
272	0350,	0351,	0352,	0353,	0354,	0355,	0356,	0357,
273	0360,	0361,	0362,	0363,	0364,	0365,	0366,	0327,
274	0370,	0371,	0372,	0373,	0374,	0375,	0376,	0337,
275	0340,	0341,	0342,	0343,	0344,	0345,	0346,	0347,
276	0350,	0351,	0352,	0353,	0354,	0355,	0356,	0357,
277	0360,	0361,	0362,	0363,	0364,	0365,	0366,	0367,
278	0370,	0371,	0372,	0373,	0374,	0375,	0376,	0377,
279};
280
281unsigned char _cmap_upper[256] = {
282	0000,	0001,	0002,	0003,	0004,	0005,	0006,	0007,
283	0010,	0011,	0012,	0013,	0014,	0015,	0016,	0017,
284	0020,	0021,	0022,	0023,	0024,	0025,	0026,	0027,
285	0030,	0031,	0032,	0033,	0034,	0035,	0036,	0037,
286	0040,	0041,	0042,	0043,	0044,	0045,	0046,	0047,
287	0050,	0051,	0052,	0053,	0054,	0055,	0056,	0057,
288	0060,	0061,	0062,	0063,	0064,	0065,	0066,	0067,
289	0070,	0071,	0072,	0073,	0074,	0075,	0076,	0077,
290	0100,	0101,	0102,	0103,	0104,	0105,	0106,	0107,
291	0110,	0111,	0112,	0113,	0114,	0115,	0116,	0117,
292	0120,	0121,	0122,	0123,	0124,	0125,	0126,	0127,
293	0130,	0131,	0132,	0133,	0134,	0135,	0136,	0137,
294	0140,	0101,	0102,	0103,	0104,	0105,	0106,	0107,
295	0110,	0111,	0112,	0113,	0114,	0115,	0116,	0117,
296	0120,	0121,	0122,	0123,	0124,	0125,	0126,	0127,
297	0130,	0131,	0132,	0173,	0174,	0175,	0176,	0177,
298	0200,	0201,	0202,	0203,	0204,	0205,	0206,	0207,
299	0210,	0211,	0212,	0213,	0214,	0215,	0216,	0217,
300	0220,	0221,	0222,	0223,	0224,	0225,	0226,	0227,
301	0230,	0231,	0232,	0233,	0234,	0235,	0236,	0237,
302	0240,	0241,	0242,	0243,	0244,	0245,	0246,	0247,
303	0250,	0251,	0252,	0253,	0254,	0255,	0256,	0257,
304	0260,	0261,	0262,	0263,	0264,	0265,	0266,	0267,
305	0270,	0271,	0272,	0273,	0274,	0275,	0276,	0277,
306	0300,	0301,	0302,	0303,	0304,	0305,	0306,	0307,
307	0310,	0311,	0312,	0313,	0314,	0315,	0316,	0317,
308	0320,	0321,	0322,	0323,	0324,	0325,	0326,	0327,
309	0330,	0331,	0332,	0333,	0334,	0335,	0336,	0337,
310	0300,	0301,	0302,	0303,	0304,	0305,	0306,	0307,
311	0310,	0311,	0312,	0313,	0314,	0315,	0316,	0317,
312	0320,	0321,	0322,	0323,	0324,	0325,	0326,	0367,
313	0330,	0331,	0332,	0333,	0334,	0335,	0336,	0377,
314};
315#endif /* NLS */
316