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