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