Home | History | Annotate | Line # | Download | only in csh
      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