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