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