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