xref: /netbsd-src/bin/csh/char.c (revision 09838d02ff4121992651d6829ddd62e2ffb97f1b)
1 /* $NetBSD: char.c,v 1.10 2012/01/19 02:42:53 christos 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
35 static char sccsid[] = "@(#)char.c	8.1 (Berkeley) 5/31/93";
36 #else
37 __RCSID("$NetBSD: char.c,v 1.10 2012/01/19 02:42:53 christos Exp $");
38 #endif
39 #endif /* not lint */
40 
41 #include "char.h"
42 
43 /* on default same as original map */
44 unsigned 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 
246 unsigned 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 
281 unsigned 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