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