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