char.c revision 1.6 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