1 #ifndef PLAN9 2 #include <sys/types.h> 3 #include <stdio.h> 4 #include <unistd.h> 5 #include <stdlib.h> 6 #include <fcntl.h> 7 #include <string.h> 8 #include <errno.h> 9 #include "plan9.h" 10 #else /* PLAN9 */ 11 #include <u.h> 12 #include <libc.h> 13 #include <bio.h> 14 #endif /* PLAN9 */ 15 #include "cyrillic.h" 16 #include "big5.h" 17 #include "gb.h" 18 #include "hdr.h" 19 #include "conv.h" 20 21 void usage(void); 22 void list(void); 23 int squawk = 1; 24 int clean = 0; 25 int verbose = 0; 26 long ninput, noutput, nrunes, nerrors; 27 char *file = "stdin"; 28 char *argv0; 29 Rune runes[N]; 30 char obuf[UTFmax*N]; /* maximum bloat from N runes */ 31 long tab[NRUNE]; 32 #ifndef PLAN9 33 extern char version[]; 34 #endif 35 36 void intable(int, long *, struct convert *); 37 void unicode_in(int, long *, struct convert *); 38 void unicode_out(Rune *, int, long *); 39 40 int 41 main(int argc, char **argv) 42 { 43 char *from = "utf"; 44 char *to = "utf"; 45 int fd; 46 int listem = 0; 47 struct convert *t, *f; 48 49 ARGBEGIN{ 50 case 'c': clean = 1; break; 51 case 'f': from = ARGF(); break; 52 case 'l': listem = 1; break; 53 case 's': squawk = 0; break; 54 case 't': to = ARGF(); break; 55 case 'v': verbose = 1; break; 56 default: usage(); break; 57 }ARGEND 58 USED(argc); 59 if(verbose) 60 squawk = 1; 61 if(listem){ 62 list(); 63 EXIT(0, 0); 64 } 65 if(!from || !to) 66 usage(); 67 f = conv(from, 1); 68 t = conv(to, 0); 69 #define PROC {if(f->flags&Table)\ 70 intable(fd, (long *)f->data, t);\ 71 else\ 72 ((Infn)(f->fn))(fd, (long *)0, t);} 73 if(*argv){ 74 while(*argv){ 75 file = *argv; 76 #ifndef PLAN9 77 if((fd = open(*argv, 0)) < 0){ 78 EPR "%s: %s: %s\n", argv0, *argv, strerror(errno)); 79 #else /* PLAN9 */ 80 if((fd = open(*argv, OREAD)) < 0){ 81 EPR "%s: %s: %r\n", argv0, *argv); 82 #endif /* PLAN9 */ 83 EXIT(1, "open failure"); 84 } 85 PROC 86 close(fd); 87 argv++; 88 } 89 } else { 90 fd = 0; 91 PROC 92 } 93 if(verbose) 94 EPR "%s: %ld input bytes, %ld runes, %ld output bytes (%ld errors)\n", argv0, 95 ninput, nrunes, noutput, nerrors); 96 EXIT(((nerrors && squawk)? 1:0), ((nerrors && squawk)? "conversion error":0)); 97 return(0); /* shut up compiler */ 98 } 99 100 void 101 usage(void) 102 { 103 EPR "Usage: %s [-slv] [-f cs] [-t cs] [file ...]\n", argv0); 104 list(); 105 EXIT(1, "usage"); 106 } 107 108 void 109 list(void) 110 { 111 struct convert *c; 112 char ch = verbose?'\t':' '; 113 114 #ifndef PLAN9 115 EPR "%s version = '%s'\n", argv0, version); 116 #endif 117 if(verbose) 118 EPR "character sets:\n"); 119 else 120 EPR "cs:"); 121 for(c = convert; c->name; c++){ 122 if((c->flags&From) && c[1].name && (strcmp(c[1].name, c->name) == 0)){ 123 EPR "%c%s", ch, c->name); 124 c++; 125 } else if(c->flags&Table) 126 EPR "%c%s", ch, c->name); 127 else if(c->flags&From) 128 EPR "%c%s(from)", ch, c->name); 129 else 130 EPR "%c%s(to)", ch, c->name); 131 if(verbose) 132 EPR "\t%s\n", c->chatter); 133 } 134 if(!verbose) 135 EPR "\n"); 136 } 137 138 struct convert * 139 conv(char *name, int from) 140 { 141 struct convert *c; 142 143 for(c = convert; c->name; c++){ 144 if(strcmp(c->name, name) != 0) 145 continue; 146 if(c->flags&Table) 147 return(c); 148 if(((c->flags&From) == 0) == (from == 0)) 149 return(c); 150 } 151 EPR "%s: charset `%s' unknown\n", argv0, name); 152 EXIT(1, "unknown character set"); 153 return(0); /* just shut the compiler up */ 154 } 155 156 void 157 swab2(char *b, int n) 158 { 159 char *e, p; 160 161 for(e = b+n; b < e; b++){ 162 p = *b; 163 *b = b[1]; 164 *++b = p; 165 } 166 } 167 168 void 169 unicode_in(int fd, long *notused, struct convert *out) 170 { 171 Rune buf[N]; 172 int n; 173 int swabme; 174 175 USED(notused); 176 if(read(fd, (char *)buf, 2) != 2) 177 return; 178 ninput += 2; 179 switch(buf[0]) 180 { 181 default: 182 OUT(out, buf, 1); 183 case 0xFEFF: 184 swabme = 0; 185 break; 186 case 0xFFFE: 187 swabme = 1; 188 break; 189 } 190 while((n = read(fd, (char *)buf, 2*N)) > 0){ 191 ninput += n; 192 if(n&1){ 193 if(squawk) 194 EPR "%s: odd byte count in %s\n", argv0, file); 195 nerrors++; 196 if(clean) 197 n--; 198 else { 199 n++; 200 buf[n/2] = Runeerror; 201 if(swabme) /* swab so later swab undoes it */ 202 swab2((char *)&buf[n/2], 2); 203 } 204 } 205 if(swabme) 206 swab2((char *)buf, n); 207 OUT(out, buf, n/2); 208 } 209 } 210 211 void 212 unicode_out(Rune *base, int n, long *notused) 213 { 214 static int first = 1; 215 216 USED(notused); 217 nrunes += n; 218 if(first){ 219 unsigned short x = 0xFEFF; 220 noutput += 2; 221 write(1, (char *)&x, 2); 222 first = 0; 223 } 224 noutput += 2*n; 225 write(1, (char *)base, 2*n); 226 } 227 228 void 229 intable(int fd, long *table, struct convert *out) 230 { 231 uchar buf[N]; 232 uchar *p, *e; 233 Rune *r; 234 int n; 235 long c; 236 237 while((n = read(fd, (char *)buf, N)) > 0){ 238 ninput += n; 239 r = runes; 240 for(p = buf, e = buf+n; p < e; p++){ 241 c = table[*p]; 242 if(c < 0){ 243 if(squawk) 244 EPR "%s: bad char 0x%x near byte %ld in %s\n", argv0, *p, ninput+(p-e), file); 245 nerrors++; 246 if(clean) 247 continue; 248 c = BADMAP; 249 } 250 *r++ = c; 251 } 252 OUT(out, runes, r-runes); 253 } 254 if(n < 0){ 255 #ifdef PLAN9 256 EPR "%s: input read: %r\n", argv0); 257 #else 258 EPR "%s: input read: %s\n", argv0, strerror(errno)); 259 #endif 260 EXIT(1, "input read error"); 261 } 262 } 263 264 void 265 outtable(Rune *base, int n, long *map) 266 { 267 long c; 268 char *p; 269 int i; 270 271 nrunes += n; 272 for(i = 0; i < NRUNE; i++) 273 tab[i] = -1; 274 for(i = 0; i < 256; i++) 275 if(map[i] >= 0) 276 tab[map[i]] = i; 277 for(i = 0, p = obuf; i < n; i++){ 278 c = tab[base[i]]; 279 if(c < 0){ 280 if(squawk) 281 EPR "%s: rune 0x%x not in output cs\n", argv0, base[i]); 282 nerrors++; 283 if(clean) 284 continue; 285 c = BADMAP; 286 } 287 *p++ = c; 288 } 289 noutput += p-obuf; 290 write(1, obuf, p-obuf); 291 } 292 293 long tabascii[256] = 294 { 295 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 296 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 297 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 298 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 299 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 300 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 301 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 302 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 303 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 304 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 305 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 306 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 307 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 308 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 309 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 310 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 311 }; 312 313 long tab8859_1[256] = 314 { 315 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 316 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 317 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 318 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 319 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 320 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 321 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 322 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 323 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 324 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, 325 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf, 326 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, 327 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf, 328 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, 329 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef, 330 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff, 331 }; 332 333 long tab8859_2[256] = 334 { 335 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 336 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 337 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 338 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 339 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 340 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 341 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 342 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 343 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 344 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, 345 0x00a0,0x0104,0x02d8,0x0141,0x00a4,0x013d,0x015a,0x00a7, 346 0x00a8,0x0160,0x015e,0x0164,0x0179,0x00ad,0x017d,0x017b, 347 0x00b0,0x0105,0x02db,0x0142,0x00b4,0x013e,0x015b,0x02c7, 348 0x00b8,0x0161,0x015f,0x0165,0x017a,0x02dd,0x017e,0x017c, 349 0x0154,0x00c1,0x00c2,0x0102,0x00c4,0x0139,0x0106,0x00c7, 350 0x010c,0x00c9,0x0118,0x00cb,0x011a,0x00cd,0x00ce,0x010e, 351 0x0110,0x0143,0x0147,0x00d3,0x00d4,0x0150,0x00d6,0x00d7, 352 0x0158,0x016e,0x00da,0x0170,0x00dc,0x00dd,0x0162,0x00df, 353 0x0155,0x00e1,0x00e2,0x0103,0x00e4,0x013a,0x0107,0x00e7, 354 0x010d,0x00e9,0x0119,0x00eb,0x011b,0x00ed,0x00ee,0x010f, 355 0x0111,0x0144,0x0148,0x00f3,0x00f4,0x0151,0x00f6,0x00f7, 356 0x0159,0x016f,0x00fa,0x0171,0x00fc,0x00fd,0x0163,0x02d9, 357 }; 358 359 long tab8859_3[256] = 360 { 361 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 362 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 363 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 364 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 365 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 366 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 367 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 368 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 369 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 370 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, 371 0x00a0,0x0126,0x02d8,0x00a3,0x00a4, -1,0x0124,0x00a7, 372 0x00a8,0x0130,0x015e,0x011e,0x0134,0x00ad, -1,0x017b, 373 0x00b0,0x0127,0x00b2,0x00b3,0x00b4,0x00b5,0x0125,0x00b7, 374 0x00b8,0x0131,0x015f,0x011f,0x0135,0x00bd, -1,0x017c, 375 0x00c0,0x00c1,0x00c2, -1,0x00c4,0x010a,0x0108,0x00c7, 376 0x00c8,0x00c9,0x00ca,0x00cb,0x00cc,0x00cd,0x00ce,0x00cf, 377 -1,0x00d1,0x00d2,0x00d3,0x00d4,0x0120,0x00d6,0x00d7, 378 0x011c,0x00d9,0x00da,0x00db,0x00dc,0x016c,0x015c,0x00df, 379 0x00e0,0x00e1,0x00e2, -1,0x00e4,0x010b,0x0109,0x00e7, 380 0x00e8,0x00e9,0x00ea,0x00eb,0x00ec,0x00ed,0x00ee,0x00ef, 381 -1,0x00f1,0x00f2,0x00f3,0x00f4,0x0121,0x00f6,0x00f7, 382 0x011d,0x00f9,0x00fa,0x00fb,0x00fc,0x016d,0x015d,0x02d9, 383 }; 384 385 long tab8859_4[256] = 386 { 387 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 388 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 389 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 390 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 391 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 392 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 393 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 394 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 395 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 396 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, 397 0x00a0,0x0104,0x0138,0x0156,0x00a4,0x0128,0x013b,0x00a7, 398 0x00a8,0x0160,0x0112,0x0122,0x0166,0x00ad,0x017d,0x00af, 399 0x00b0,0x0105,0x02db,0x0157,0x00b4,0x0129,0x013c,0x02c7, 400 0x00b8,0x0161,0x0113,0x0123,0x0167,0x014a,0x017e,0x014b, 401 0x0100,0x00c1,0x00c2,0x00c3,0x00c4,0x00c5,0x00c6,0x012e, 402 0x010c,0x00c9,0x0118,0x00cb,0x0116,0x00cd,0x00ce,0x012a, 403 0x0110,0x0145,0x014c,0x0136,0x00d4,0x00d5,0x00d6,0x00d7, 404 0x00d8,0x0172,0x00da,0x00db,0x00dc,0x0168,0x016a,0x00df, 405 0x0101,0x00e1,0x00e2,0x00e3,0x00e4,0x00e5,0x00e6,0x012f, 406 0x010d,0x00e9,0x0119,0x00eb,0x0117,0x00ed,0x00ee,0x012b, 407 0x0111,0x0146,0x014d,0x0137,0x00f4,0x00f5,0x00f6,0x00f7, 408 0x00f8,0x0173,0x00fa,0x00fb,0x00fc,0x0169,0x016b,0x02d9, 409 }; 410 411 long tab8859_5[256] = 412 { 413 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 414 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 415 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 416 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 417 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 418 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 419 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 420 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 421 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 422 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, 423 0x00a0,0x0401,0x0402,0x0403,0x0404,0x0405,0x0406,0x0407, 424 0x0408,0x0409,0x040a,0x040b,0x040c,0x00ad,0x040e,0x040f, 425 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, 426 0x0418,0x0419,0x041a,0x041b,0x041c,0x041d,0x041e,0x041f, 427 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, 428 0x0428,0x0429,0x042a,0x042b,0x042c,0x042d,0x042e,0x042f, 429 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437, 430 0x0438,0x0439,0x043a,0x043b,0x043c,0x043d,0x043e,0x043f, 431 0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447, 432 0x0448,0x0449,0x044a,0x044b,0x044c,0x044d,0x044e,0x044f, 433 0x2116,0x0451,0x0452,0x0453,0x0454,0x0455,0x0456,0x0457, 434 0x0458,0x0459,0x045a,0x045b,0x045c,0x00a7,0x045e,0x045f, 435 }; 436 437 long tab8859_6[256] = 438 { 439 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 440 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 441 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 442 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 443 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 444 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 445 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 446 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 447 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 448 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, 449 0x00a0, -1, -1, -1,0x00a4, -1, -1, -1, 450 -1, -1, -1, -1,0x060c,0x00ad, -1, -1, 451 -1, -1, -1, -1, -1, -1, -1, -1, 452 -1, -1, -1,0x061b, -1, -1, -1,0x061f, 453 -1,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627, 454 0x0628,0x0629,0x062a,0x062b,0x062c,0x062d,0x062e,0x062f, 455 0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x0637, 456 0x0638,0x0639,0x063a, -1, -1, -1, -1, -1, 457 0x0640,0x0641,0x0642,0x0643,0x0644,0x0645,0x0646,0x0647, 458 0x0648,0x0649,0x064a,0x064b,0x064c,0x064d,0x064e,0x064f, 459 0x0650,0x0651,0x0652, -1, -1, -1, -1, -1, 460 -1, -1, -1, -1, -1, -1, -1, -1, 461 }; 462 463 long tab8859_7[256] = 464 { 465 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 466 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 467 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 468 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 469 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 470 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 471 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 472 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 473 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 474 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, 475 0x00a0,0x2018,0x2019,0x00a3, -1, -1,0x00a6,0x00a7, 476 0x00a8,0x00a9, -1,0x00ab,0x00ac,0x00ad, -1,0x2015, 477 0x00b0,0x00b1,0x00b2,0x00b3,0x0384,0x0385,0x0386,0x00b7, 478 0x0388,0x0389,0x038a,0x00bb,0x038c,0x00bd,0x038e,0x038f, 479 0x0390,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397, 480 0x0398,0x0399,0x039a,0x039b,0x039c,0x039d,0x039e,0x039f, 481 0x03a0,0x03a1, -1,0x03a3,0x03a4,0x03a5,0x03a6,0x03a7, 482 0x03a8,0x03a9,0x03aa,0x03ab,0x03ac,0x03ad,0x03ae,0x03af, 483 0x03b0,0x03b1,0x03b2,0x03b3,0x03b4,0x03b5,0x03b6,0x03b7, 484 0x03b8,0x03b9,0x03ba,0x03bb,0x03bc,0x03bd,0x03be,0x03bf, 485 0x03c0,0x03c1,0x03c2,0x03c3,0x03c4,0x03c5,0x03c6,0x03c7, 486 0x03c8,0x03c9,0x03ca,0x03cb,0x03cc,0x03cd,0x03ce, -1, 487 }; 488 489 long tab8859_8[256] = 490 { 491 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 492 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 493 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 494 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 495 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 496 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 497 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 498 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 499 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 500 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, 501 0x00a0, -1,0x00a2,0x00a3,0x00a4,0x00a5,0x00a6,0x00a7, 502 0x00a8,0x00a9,0x00d7,0x00ab,0x00ac,0x00ad,0x00ae,0x203e, 503 0x00b0,0x00b1,0x00b2,0x00b3,0x00b4,0x00b5,0x00b6,0x00b7, 504 0x00b8,0x00b9,0x00f7,0x00bb,0x00bc,0x00bd,0x00be, -1, 505 -1, -1, -1, -1, -1, -1, -1, -1, 506 -1, -1, -1, -1, -1, -1, -1, -1, 507 -1, -1, -1, -1, -1, -1, -1, -1, 508 -1, -1, -1, -1, -1, -1, -1,0x2017, 509 0x05d0,0x05d1,0x05d2,0x05d3,0x05d4,0x05d5,0x05d6,0x05d7, 510 0x05d8,0x05d9,0x05da,0x05db,0x05dc,0x05dd,0x05de,0x05df, 511 0x05e0,0x05e1,0x05e2,0x05e3,0x05e4,0x05e5,0x05e6,0x05e7, 512 0x05e8,0x05e9,0x05ea, -1, -1, -1, -1, -1, 513 }; 514 515 long tab8859_9[256] = 516 { 517 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 518 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 519 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 520 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 521 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 522 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 523 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 524 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 525 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 526 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, 527 0x00a0,0x00a1,0x00a2,0x00a3,0x00a4,0x00a5,0x00a6,0x00a7, 528 0x00a8,0x00a9,0x00aa,0x00ab,0x00ac,0x00ad,0x00ae,0x00af, 529 0x00b0,0x00b1,0x00b2,0x00b3,0x00b4,0x00b5,0x00b6,0x00b7, 530 0x00b8,0x00b9,0x00ba,0x00bb,0x00bc,0x00bd,0x00be,0x00bf, 531 0x00c0,0x00c1,0x00c2,0x00c3,0x00c4,0x00c5,0x00c6,0x00c7, 532 0x00c8,0x00c9,0x00ca,0x00cb,0x00cc,0x00cd,0x00ce,0x00cf, 533 0x011e,0x00d1,0x00d2,0x00d3,0x00d4,0x00d5,0x00d6,0x00d7, 534 0x00d8,0x00d9,0x00da,0x00db,0x00dc,0x0130,0x015e,0x00df, 535 0x00e0,0x00e1,0x00e2,0x00e3,0x00e4,0x00e5,0x00e6,0x00e7, 536 0x00e8,0x00e9,0x00ea,0x00eb,0x00ec,0x00ed,0x00ee,0x00ef, 537 0x011f,0x00f1,0x00f2,0x00f3,0x00f4,0x00f5,0x00f6,0x00f7, 538 0x00f8,0x00f9,0x00fa,0x00fb,0x00fc,0x0131,0x015f,0x00ff, 539 }; 540 long tabsf2[256] = /* from wirzeniu@cc.helsinki.fi (Lars Wirzenius) */ 541 { 542 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 543 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 544 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 545 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 546 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 547 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0xc4,0xd6,0xc5,0x5e,0x5f, 548 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 549 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0xe4,0xf6,0xe5,0x7e,0x7f, 550 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 551 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 552 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 553 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 554 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 555 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 556 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 557 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 558 }; 559 long tabtis620[256] = /* from jhelling@cs.ruu.nl (Jeroen Hellingman) */ 560 { 561 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 562 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 563 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 564 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 565 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 566 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 567 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 568 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 569 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 570 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 571 -1, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, 572 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, 573 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, 574 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, 575 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, 576 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, 577 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, 578 0x0e38, 0x0e39, 0x0e3a, -1, -1, -1, -1, 0x0e3f, 579 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, 580 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f, 581 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, 582 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, -1, -1, -1, -1, 583 }; 584 long tabatari[256] = /* from jhelling@cs.ruu.nl (Jeroen Hellingman) */ 585 { 586 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 587 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 588 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 589 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 590 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 591 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 592 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 593 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 594 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, /* accented latin */ 595 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, 596 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, 597 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x00df, 0x0192, 598 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, 599 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, 600 0x00e3, 0x00f5, 0x00d8, 0x00f8, 0x0153, 0x0152, 0x00c0, 0x00c3, 601 0x00d5, 0x00a8, 0x00b4, 0x2020, 0x00b6, 0x00a9, 0x00ae, 0x2122, 602 0x0133, 0x0132, 603 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, /* hebrew */ 604 0x05d6, 0x05d7, 0x05d8, 0x05d9, 0x05db, 0x05dc, 0x05de, 0x05e0, 605 0x05e1, 0x05e2, 0x05e4, 0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 606 0x05df, 0x05da, 0x05dd, 0x05e3, 0x05e5, 607 0x00a7, 0x2038, 0x221e, /* math */ 608 0x03b1, 0x03b2, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, /* greek */ 609 0x03a6, 0x03b8, 0x2126, 0x03b4, 610 0x222e, 0x03c6, 0x2208, 0x220f, /* math */ 611 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, 612 0x00b0, 0x2022, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x00b3, 0x00af, 613 }; 614 long tabebcdic[256] = /* from jhelling@cs.ruu.nl (Jeroen Hellingman) */ 615 { 616 0x00, 0x01, 0x02, 0x03, -1, 0x09, -1, 0x7f, 617 -1, -1, -1, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 618 0x10, 0x11, 0x12, 0x13, -1, -1, 0x08, -1, 619 0x18, 0x09, -1, -1, 0x1c, 0x1d, 0x1e, 0x1f, 620 -1, -1, -1, -1, -1, 0x0a, 0x17, 0x1b, 621 -1, -1, -1, -1, -1, 0x05, 0x06, 0x07, 622 -1, -1, 0x16, -1, -1, -1, -1, 0x04, 623 -1, -1, -1, -1, 0x14, 0x15, -1, 0x1a, 624 0x20, -1, -1, -1, -1, -1, -1, -1, 625 -1, -1, 0x5b, 0x2e, 0x3c, 0x28, 0x2b, 0x21, 626 0x26, -1, -1, -1, -1, -1, -1, -1, 627 -1, -1, 0x5d, 0x24, 0x2a, 0x29, 0x3b, 0x5e, /* not-sign 0xac -> circumflex 0x5e */ 628 0x2d, 0x2f, -1, -1, -1, -1, -1, -1, 629 -1, -1, 0x7c, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, 630 -1, -1, -1, -1, -1, -1, -1, -1, 631 -1, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, 632 -1, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 633 0x68, 0x69, -1, -1, -1, -1, -1, -1, 634 -1, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 635 0x71, 0x72, -1, -1, -1, -1, -1, -1, 636 -1, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* non-spacing macron 0xaf -> tilde 0x7e */ 637 0x79, 0x7a, -1, -1, -1, -1, -1, -1, 638 -1, -1, -1, -1, -1, -1, -1, -1, 639 -1, -1, -1, -1, -1, -1, -1, -1, 640 0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 641 0x48, 0x49, -1, -1, -1, -1, -1, -1, 642 0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 643 0x51, 0x52, -1, -1, -1, -1, -1, -1, 644 0x5c, -1, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 645 0x59, 0x5a, -1, -1, -1, -1, -1, -1, 646 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 647 0x38, 0x39, -1, -1, -1, -1, -1, -1, 648 }; 649 long tabmsdos[256] = /* from jhelling@cs.ruu.nl (Jeroen Hellingman) */ 650 { 651 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 652 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 653 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 654 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 655 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 656 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 657 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 658 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 659 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, /* latin */ 660 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, 661 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, 662 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192, 663 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, 664 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, 665 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* forms */ 666 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, 667 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, 668 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, 669 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, 670 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, 671 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, /* greek */ 672 0x03a6, 0x0398, 0x2126, 0x03b4, 0x221e, 0x2205, 0x2208, 0x2229, 673 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, /* math */ 674 0x00b0, 0x2022, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x220e, 0x00a0, 675 }; 676 long tabmsdos2[256] = /* from jhelling@cs.ruu.nl (Jeroen Hellingman) */ 677 { 678 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022, 679 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c, 680 0x25b6, 0x25c0, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x2043, 0x21a8, 681 0x2191, 0x2193, 0x2192, 0x2190, 0x2319, 0x2194, 0x25b2, 0x25bc, 682 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 683 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 684 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 685 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 686 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 687 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 688 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, /* latin */ 689 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, 690 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, 691 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192, 692 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, 693 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, 694 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* forms */ 695 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, 696 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, 697 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, 698 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, 699 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, 700 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, /* greek */ 701 0x03a6, 0x0398, 0x2126, 0x03b4, 0x221e, 0x2205, 0x2208, 0x2229, 702 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, /* math */ 703 0x00b0, 0x2022, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x220e, 0x00a0, 704 }; 705 long tabps2[256] = /* from jhelling@cs.ruu.nl (Jeroen Hellingman) */ 706 { 707 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 708 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 709 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 710 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 711 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 712 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 713 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 714 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 715 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, /* latin-1 repertoire with forms */ 716 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, 717 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, 718 0x00ff, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x00d7, 0x0192, 719 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, 720 0x00bf, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, 721 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x00c0, 722 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510, 723 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x00e3, 0x00c3, 724 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4, 725 0x00f0, 0x00d0, 0x00ca, 0x00cb, 0x00c8, 0x0131, 0x00cd, 0x00ce, 726 0x00cf, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0x00cc, 0x2580, 727 0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0x00fe, 728 0x00de, 0x00da, 0x00db, 0x00d9, 0x00fd, 0x00dd, 0x00af, 0x00b4, 729 0x00ad, 0x00b1, 0x2017, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8, 730 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x220e, 0x00a0, 731 }; 732 long tabsf1[256] = /* From Kari.Hurtta@Helsinki.FI (Kari E. Hurtta) */ 733 { 734 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 735 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 736 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 737 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 738 0xc9,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 739 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0xc4,0xd6,0xc5,0xdc,0x5f, 740 0xe9,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 741 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0xe4,0xf6,0xe5,0xfc,0x7f, 742 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 743 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 744 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 745 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 746 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 747 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 748 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 749 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 750 }; 751 long tabviet1[256] = /* From jdo@sjc.mentorg.com (James Do) */ 752 { 753 -1, 0xda, 0x1ee4, -1, 0x1eea, 0x1eec, 0x1eee, 0x7, 754 -1, -1, 0xa, -1, -1, 0xc, -1, -1, 755 -1, 0x1ee8, 0x1ef0, 0x1ef2, 0x1ef6, 0x1ef8, 0xdd, 0x1ef4, 756 -1, -1, -1, -1, -1, -1, -1, -1, 757 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 758 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 759 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 760 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 761 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 762 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 763 0xc0, 0x1ea2, 0xc3, 0xc1, 0x1ea0, 0x1eb6, 0x1eac, 0xc8, 764 0x1eba, 0x1ebc, 0xc9, 0x1eb8, 0x1ec6, 0xcc, 0x1ec8, 0x0128, 765 0xcd, 0x1eca, 0xd2, 0x1ece, 0xd5, 0xd3, 0x1ecc, 0x1ed8, 766 0x1edc, 0x1ede, 0x1ee0, 0x1eda, 0x1ee2, 0xd9, 0x1ee6, 0x0168, 767 0xa0, 0x0102, 0xc2, 0xca, 0xd4, 0x01a0, 0x01af, 0x0110, 768 0x0103, 0xe2, 0xea, 0xf4, 0x01a1, 0x01b0, 0x0111, 0x1eb0, 769 0x0300, 0x0309, 0x0303, 0x0301, 0x0323, 0xe0, 0x1ea3, 0xe3, 770 0xe1, 0x1ea1, 0x1eb2, 0x1eb1, 0x1eb3, 0x1eb5, 0x1eaf, 0x1eb4, 771 0x1eae, 0x1ea6, 0x1ea8, 0x1eaa, 0x1ea4, 0x1ec0, 0x1eb7, 0x1ea7, 772 0x1ea9, 0x1eab, 0x1ea5, 0x1ead, 0xe8, 0x1ec2, 0x1ebb, 0x1ebd, 773 0xe9, 0x1eb9, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ebf, 0x1ec7, 0xec, 774 0x1ec9, 0x1ec4, 0x1ebe, 0x1ed2, 0x0129, 0xed, 0x1ecb, 0xf2, 775 0x1ed4, 0x1ecf, 0xf5, 0xf3, 0x1ecd, 0x1ed3, 0x1ed5, 0x1ed7, 776 0x1ed1, 0x1ed9, 0x1edd, 0x1edf, 0x1ee1, 0x1edb, 0x1ee3, 0xf9, 777 0x1ed6, 0x1ee7, 0x0169, 0xfa, 0x1ee5, 0x1eeb, 0x1eed, 0x1eef, 778 0x1ee9, 0x1ef1, 0x1ef3, 0x1ef7, 0x1ef9, 0xfd, 0x1ef5, 0x1ed0 779 }; 780 long tabviet2[256] = /* From jdo@sjc.mentorg.com (James Do) */ 781 { 782 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 783 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 784 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 785 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 786 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 787 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 788 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 789 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 790 -1, -1, -1, -1, -1, -1, -1, -1, 791 -1, -1, -1, -1, -1, -1, -1, -1, 792 -1, -1, -1, -1, -1, -1, -1, -1, 793 -1, -1, -1, -1, -1, -1, -1, -1, 794 0xa0, 0x0102, 0xc2, 0xca, 0xd4, 0x01a0, 0x01af, 0x0110, 795 0x0103, 0xe2, 0xea, 0xf4, 0x01a1, 0x01b0, 0x0111, 0x1eb0, 796 0x0300, 0x0309, 0x0303, 0x0301, 0x0323, 0xe0, 0x1ea3, 0xe3, 797 0xe1, 0x1ea1, 0x1eb2, 0x1eb1, 0x1eb3, 0x1eb5, 0x1eaf, 0x1eb4, 798 0x1eae, 0x1ea6, 0x1ea8, 0x1eaa, 0x1ea4, 0x1ec0, 0x1eb7, 0x1ea7, 799 0x1ea9, 0x1eab, 0x1ea5, 0x1ead, 0xe8, 0x1ec2, 0x1ebb, 0x1ebd, 800 0xe9, 0x1eb9, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ebf, 0x1ec7, 0xec, 801 0x1ec9, 0x1ec4, 0x1ebe, 0x1ed2, 0x0129, 0xed, 0x1ecb, 0xf2, 802 0x1ed4, 0x1ecf, 0xf5, 0xf3, 0x1ecd, 0x1ed3, 0x1ed5, 0x1ed7, 803 0x1ed1, 0x1ed9, 0x1edd, 0x1edf, 0x1ee1, 0x1edb, 0x1ee3, 0xf9, 804 0x1ed6, 0x1ee7, 0x0169, 0xfa, 0x1ee5, 0x1eeb, 0x1eed, 0x1eef, 805 0x1ee9, 0x1ef1, 0x1ef3, 0x1ef7, 0x1ef9, 0xfd, 0x1ef5, 0x1ed0 806 }; 807 long tabviscii[256] = /* From cuong@haydn.Stanford.EDU (Cuong T. Nguyen) */ 808 { 809 0x0000, 0x0001, 0x1EB2, 0x0003, 0x0004, 0x1EB4, 0x1EAA, 0x0007, 810 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 811 0x0010, 0x0011, 0x0012, 0x0013, 0x1EF6, 0x0015, 0x0016, 0x0017, 812 0x0018, 0x1EF8, 0x001a, 0x001b, 0x001c, 0x001d, 0x1EF4, 0x001f, 813 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 814 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 815 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 816 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 817 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 818 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 819 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 820 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 821 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 822 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 823 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 824 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, 825 0x1EA0, 0x1EAE, 0x1EB0, 0x1EB6, 0x1EA4, 0x1EA6, 0x1EA8, 0x1EAC, 826 0x1EBC, 0x1EB8, 0x1EBE, 0x1EC0, 0x1EC2, 0x1EC4, 0x1EC6, 0x1ED0, 827 0x1ED2, 0x1ED4, 0x1ED6, 0x1ED8, 0x1EE2, 0x1EDA, 0x1EDC, 0x1EDE, 828 0x1ECA, 0x1ECE, 0x1ECC, 0x1EC8, 0x1EE6, 0x0168, 0x1EE4, 0x1EF2, 829 0x00D5, 0x1EAF, 0x1EB1, 0x1EB7, 0x1EA5, 0x1EA7, 0x1EA9, 0x1EAD, 830 0x1EBD, 0x1EB9, 0x1EBF, 0x1EC1, 0x1EC3, 0x1EC5, 0x1EC7, 0x1ED1, 831 0x1ED3, 0x1ED5, 0x1ED7, 0x1EE0, 0x01A0, 0x1ED9, 0x1EDD, 0x1EDF, 832 0x1ECB, 0x1EF0, 0x1EE8, 0x1EEA, 0x1EEC, 0x01A1, 0x1EDB, 0x01AF, 833 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x1EA2, 0x0102, 0x1EB3, 0x1EB5, 834 0x00C8, 0x00C9, 0x00CA, 0x1EBA, 0x00CC, 0x00CD, 0x0128, 0x1EF3, 835 0x0110, 0x1EE9, 0x00D2, 0x00D3, 0x00D4, 0x1EA1, 0x1EF7, 0x1EEB, 836 0x1EED, 0x00D9, 0x00DA, 0x1EF9, 0x1EF5, 0x00DD, 0x1EE1, 0x01B0, 837 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x1EA3, 0x0103, 0x1EEF, 0x1EAB, 838 0x00E8, 0x00E9, 0x00EA, 0x1EBB, 0x00EC, 0x00ED, 0x0129, 0x1EC9, 839 0x0111, 0x1EF1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x1ECF, 0x1ECD, 840 0x1EE5, 0x00F9, 0x00FA, 0x0169, 0x1EE7, 0x00FD, 0x1EE3, 0x1EEE 841 }; 842 long tab8859_10[256] = /* from dkuug.dk:i18n/charmaps/ISO_8859-10:1993 */ 843 { 844 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 845 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 846 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 847 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 848 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 849 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 850 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 851 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 852 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 853 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, 854 0x00a0,0x0104,0x0112,0x0122,0x012a,0x0128,0x0136,0x00a7, 855 0x013b,0x0110,0x0160,0x0166,0x017d,0x00ad,0x016a,0x014a, 856 0x00b0,0x0105,0x0113,0x0123,0x012b,0x0129,0x0137,0x00b7, 857 0x013c,0x0110,0x0161,0x0167,0x017e,0x2014,0x016b,0x014b, 858 0x0100,0x00c1,0x00c2,0x00c3,0x00c4,0x00c5,0x00c6,0x012e, 859 0x010c,0x00c9,0x0118,0x00cb,0x0116,0x00cd,0x00ce,0x00cf, 860 0x00d0,0x0145,0x014c,0x00d3,0x00d4,0x00d5,0x00d6,0x0168, 861 0x00d8,0x0172,0x00da,0x00db,0x00dc,0x00dd,0x00de,0x00df, 862 0x0101,0x00e1,0x00e2,0x00e3,0x00e4,0x00e5,0x00e6,0x012f, 863 0x010d,0x00e9,0x0119,0x00eb,0x0117,0x00ed,0x00ee,0x00ef, 864 0x00f0,0x0146,0x014d,0x00f3,0x00f4,0x00f5,0x00f6,0x0169, 865 0x00f8,0x0173,0x00fa,0x00fb,0x00fc,0x00fd,0x00fe,0x0138, 866 }; 867 long tabMacRoman[256] = /* (modified via world.std.com!choupt) from mduerst@ifi.unizh.ch (Martin J. Du"rst) */ 868 { 869 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, 870 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 871 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, 872 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, 873 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, 874 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, 875 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 876 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, 877 0x00c4,0x00c5,0x00c7,0x00c9,0x00d1,0x00d6,0x00dc,0x00e1, 878 0x00e0,0x00e2,0x00e4,0x00e3,0x00e5,0x00e7,0x00e9,0x00e8, 879 0x00ea,0x00eb,0x00ed,0x00ec,0x00ee,0x00ef,0x00f1,0x00f3, 880 0x00f2,0x00f4,0x00f6,0x00f5,0x00fa,0x00f9,0x00fb,0x00fc, 881 0x2020,0x00b0,0x00a2,0x00a3,0x00a7,0x2022,0x00b6,0x00df, 882 0x00ae,0x00a9,0x2122,0x00b4,0x00a8,0x2260,0x00c6,0x00d8, 883 0x221e,0x00b1,0x2264,0x2265,0x00a5,0x00b5,0x2202,0x2211, 884 0x220f,0x03c0,0x222b,0x00aa,0x00ba,0x2126,0x00e6,0x00f8, 885 0x00bf,0x00a1,0x00ac,0x221a,0x0192,0x2248,0x2206,0x00ab, 886 0x00bb,0x2026,0x00a0,0x00c0,0x00c3,0x00d5,0x0152,0x0153, 887 0x2013,0x2014,0x2012,0x201d,0x2018,0x2019,0x00f7,0x25ca, /*2013 en dash suggested by Glenn A. Adams*/ 888 0x00ff,0x0178,0x2044,0x00a4,0x2039,0x203a,0xfb01,0xfb02, 889 0x2021,0x00b7,0x201a,0x201e,0x2030,0x00c2,0x00ca,0x00c1, 890 0x00cb,0x00c8,0x00cd,0x00ce,0x00cf,0x00cc,0x00d3,0x00d4, 891 0xf7ff,0x00d2,0x00da,0x00db,0x00d9,0x0131,0x02c6,0x02dc, 892 0x00af,0x02d8,0x02d9,0x02da,0x00b8,0x02dd,0x02db,0x02c7, 893 }; 894 895 long tabnextstep[256] = /* From mduerst@ifi.unizh.ch (Martin J. Du"rst) */ 896 /* From NEXTSTEP Encoding Vector / Character Code Palette */ 897 /* quote (0027) and quoteright (2019) should be exchanged */ 898 /* if visual form is considered exactly; left as is */ 899 /* for compatibility with other low-end systems */ 900 { 901 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 902 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 903 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 904 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 905 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 906 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 907 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 908 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 909 0x2007, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C7, 910 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 911 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D9, 912 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00B5, 0x00D7, 0x00F7, 913 0x00A9, 0x00A1, 0x00A2, 0x00A3, 0x2044, 0x00A5, 0x0192, 0x00A7, 914 0x00A4, 0x2019, 0x201C, 0x00AB, 0x2039, 0x2040, 0xFB01, 0xFB02, 915 0x00AE, 0x2013, 0x2020, 0x2021, 0x00B7, 0x254E, 0x00B6, 0x2022, 916 0x201A, 0x201E, 0x201D, 0x00BB, 0x2026, 0x2030, 0x00AC, 0x00BF, 917 0x00B9, 0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0306, 0x0307, 918 0x0308, 0x00B2, 0x030A, 0x0327, 0x00B3, 0x030B, 0x0328, 0x030C, 919 0x2014, 0x00B1, 0x00BC, 0x00BD, 0x00BE, 0x00E0, 0x00E1, 0x00E2, 920 0x00E3, 0x00E4, 0x00E5, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 921 0x00EC, 0x00C6, 0x00ED, 0x00AA, 0x00EE, 0x00EF, 0x00F0, 0x00F1, 922 0x0141, 0x00D8, 0x0152, 0x00BA, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 923 0x00F6, 0x00E6, 0x00F9, 0x00FA, 0x00FB, 0x0131, 0x00FC, 0x00FD, 924 0x0142, 0x00F8, 0x0153, 0x00DF, 0x00FE, 0x00FF, 0xFFFF, 0xFFFF 925 }; 926 927 928 struct convert convert[] = 929 { /* if two entries have the same name, put the from one first */ 930 { "utf", "FSS-UTF a.k.a. UTF-8", From|Func, 0, (Fnptr)utf_in }, 931 { "utf", "FSS-UTF a.k.a. UTF-8", Func, 0, (Fnptr)utf_out }, 932 { "utf1", "UTF-1 (ISO 10646 Annex A)", From|Func, 0, (Fnptr)isoutf_in }, 933 { "utf1", "UTF-1 (ISO 10646 Annex A)", Func, 0, (Fnptr)isoutf_out }, 934 { "ascii", "7-bit ASCII", Table, (void *)tabascii }, 935 { "8859-1", "Latin-1 (Western and Northern Europe including Italian)", Table, (void *)tab8859_1 }, 936 { "latin1", "ISO 8859-1", Table, (void *)tab8859_1 }, 937 { "8859-2", "Latin-2 (Eastern Europe except Turkey and the Baltic countries)", Table, (void *)tab8859_2 }, 938 { "8859-3", "Latin-3 (Mediterranean, South Africa, Esperanto)", Table, (void *)tab8859_3 }, 939 { "8859-4", "Latin-4 (Scandinavia and the Baltic countries; obsolete)", Table, (void *)tab8859_4 }, 940 { "8859-5", "Part 5 (Cyrillic)", Table, (void *)tab8859_5 }, 941 { "8859-6", "Part 6 (Arabic)", Table, (void *)tab8859_6 }, 942 { "8859-7", "Part 7 (Greek)", Table, (void *)tab8859_7 }, 943 { "8859-8", "Part 8 (Hebrew)", Table, (void *)tab8859_8 }, 944 { "8859-9", "Latin-5 (Turkey, Western Europe except Icelandic and Faroese)", Table, (void *)tab8859_9 }, 945 { "8859-10", "Latin-6 (Northern Europe)", Table, (void *)tab8859_10 }, 946 { "koi8", "KOI-8 (GOST 19769-74)", Table, (void *)tabkoi8 }, 947 { "ucode", "Russian U-code", Table, (void *)tabucode }, 948 { "cp866", "Russian MS-DOS encoding (CP 866)", Table, (void *)tab866 }, 949 { "av", "Alternativnyj Variant", Table, (void *)tabav }, 950 { "cp1251", "Russian MS-DOS encoding (CP 1251)", Table, (void *)tabcp1251 }, 951 { "ov", "Osnovnoj Variant", Table, (void *)tabov }, 952 { "sf1", "ISO-646: Finnish/Swedish SF-1 variant", Table, (void *)tabsf1 }, 953 { "sf2", "ISO-646: Finnish/Swedish SF-2 variant (recommended)", Table, (void *)tabsf2 }, 954 { "jis", "guesses at the JIS encoding", From|Func, 0, (Fnptr)jis_in }, 955 { "jis-kanji", "ISO 2022-JP", From|Func, 0, (Fnptr)jisjis_in }, 956 { "jis-kanji", "ISO 2022-JP", Func, 0, (Fnptr)jisjis_out }, 957 { "ujis", "EUC-JX: JIS 0208", From|Func, 0, (Fnptr)ujis_in }, 958 { "ujis", "EUC-JX: JIS 0208", Func, 0, (Fnptr)ujis_out }, 959 { "ms-kanji", "Microsoft, or Shift-JIS", From|Func, 0, (Fnptr)msjis_in }, 960 { "ms-kanji", "Microsoft, or Shift-JIS", Func, 0, (Fnptr)msjis_out }, 961 { "big5", "Big 5 (HKU)", From|Func, 0, (Fnptr)big5_in }, 962 { "big5", "Big 5 (HKU)", Func, 0, (Fnptr)big5_out }, 963 { "gb", "GB2312-80", From|Func, 0, (Fnptr)gb_in }, 964 { "gb", "GB2312-80", Func, 0, (Fnptr)gb_out }, 965 { "euc-k", "Korean EUC: ASCII+KS C 5601 1987", From|Func, 0, (Fnptr)uksc_in }, 966 { "euc-k", "Korean EUC: ASCII+KS C 5601 1987", Func, 0, (Fnptr)uksc_out }, 967 { "tis", "Thai+ASCII (TIS 620-1986)", Table, (void *)tabtis620 }, 968 { "viet1", "Vietnamese VSCII-1 (1993)", Table, (void *)tabviet1 }, 969 { "viet2", "Vietnamese VSCII-2 (1993)", Table, (void *)tabviet2 }, 970 { "viscii", "Vietnamese VISCII 1.1 (1992)", Table, (void *)tabviscii }, 971 { "msdos", "IBM PC: CP 437", Table, (void *)tabmsdos }, 972 { "msdos2", "IBM PC: CP 437 with graphics in C0", Table, (void *)tabmsdos2 }, 973 { "ps2", "IBM PS/2: CP 850 (Multilingual)", Table, (void *)tabps2 }, 974 { "macrom", "Macintosh Standard Roman character set", Table, (void *)tabMacRoman }, 975 { "next", "NEXTSTEP character set", Table, (void *)tabnextstep }, 976 { "atari", "ATARI-ST character set", Table, (void *)tabatari }, 977 { "unicode", "Unicode 1.1", From|Func, 0, (Fnptr)unicode_in }, 978 { "unicode", "Unicode 1.1", Func, 0, (Fnptr)unicode_out }, 979 { "ebcdic", "EBCDIC", Table, (void *)tabebcdic }, /* 6f is recommended bad map */ 980 { "utf-l2", "from", From|Func, 0, (Fnptr)utf_in }, 981 { "utf-l2", "to", Func, 0, (Fnptr)utf_out }, 982 { 0 }, 983 }; 984