1 /* $NetBSD: char.c,v 1.10 2012/01/19 02:42:53 christos 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 2012/01/19 02:42:53 christos 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