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