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