29 long ninput, noutput, nrunes, nerrors;
33 char obuf[UTFmax*N]; /* maximum bloat from N runes */
36 extern char version[];
39 void intable(int, long *, struct convert *);
40 void unicode_in(int, long *, struct convert *);
41 void unicode_out(Rune *, int, long *);
44 main(int argc, char **argv)
50 struct convert *t, *f;
57 from = EARGF(usage());
87 #define PROC {if(f->flags&Table)\
88 intable(fd, (long *)f->data, t);\
90 ((Infn)(f->fn))(fd, (long *)0, t);}
95 if((fd = open(*argv, 0)) < 0){
96 EPR "%s: %s: %s\n", argv0, *argv, strerror(errno));
98 if((fd = open(*argv, OREAD)) < 0){
99 EPR "%s: %s: %r\n", argv0, *argv);
101 EXIT(1, "open failure");
112 EPR "%s: %ld input bytes, %ld runes, %ld output bytes (%ld errors)\n", argv0,
113 ninput, nrunes, noutput, nerrors);
114 EXIT(((nerrors && squawk)? 1:0), ((nerrors && squawk)? "conversion error":0));
115 return(0); /* shut up compiler */
121 EPR "Usage: %s [-slv] [-f cs] [-t cs] [file ...]\n", argv0);
131 char ch = verbose?'\t':' ';
134 EPR "%s version = '%s'\n", argv0, version);
137 EPR "character sets:\n");
140 for(c = convert; c->name; c++){
141 if((c->flags&From) && c[1].name && (strcmp(c[1].name, c->name) == 0)){
142 EPR "%c%s", ch, c->name);
144 } else if(c->flags&Table)
145 EPR "%c%s", ch, c->name);
146 else if(c->flags&From)
147 EPR "%c%s(from)", ch, c->name);
149 EPR "%c%s(to)", ch, c->name);
151 EPR "\t%s\n", c->chatter);
158 aliasname(char *name)
165 /* not generated by the script */
169 "windows-874", "tis",
172 for(i=0; i<nelem(tab); i++)
173 if(cistrcmp(tab[i].alias, name) == 0)
179 conv(char *name, int from)
183 name = aliasname(name);
184 for(c = convert; c->name; c++){
185 if(cistrcmp(c->name, name) != 0)
189 if(((c->flags&From) == 0) == (from == 0))
192 EPR "%s: charset `%s' unknown\n", argv0, name);
193 EXIT(1, "unknown character set");
194 return(0); /* just shut the compiler up */
198 swab2(char *b, int n)
202 for(e = b+n; b < e; b++){
210 unicode_in(int fd, long *notused, struct convert *out)
217 if(read(fd, (char *)buf, 2) != 2)
231 while((n = read(fd, (char *)buf, 2*N)) > 0){
234 swab2((char *)buf, n);
237 EPR "%s: odd byte count in %s\n", argv0, file);
242 buf[n++/2] = Runeerror;
250 unicode_in_be(int fd, long *notused, struct convert *out)
257 while((n = read(fd, (char *)buf, 2*N)) > 0){
260 for(i=0; i<n/2; i++){
267 EPR "%s: odd byte count in %s\n", argv0, file);
272 buf[n++/2] = Runeerror;
280 unicode_in_le(int fd, long *notused, struct convert *out)
287 while((n = read(fd, (char *)buf, 2*N)) > 0){
290 for(i=0; i<n/2; i++){
297 EPR "%s: odd byte count in %s\n", argv0, file);
302 buf[n++/2] = Runeerror;
310 unicode_out(Rune *base, int n, long *notused)
312 static int first = 1;
317 unsigned short x = 0xFEFF;
319 write(1, (char *)&x, 2);
323 write(1, (char *)base, 2*n);
327 unicode_out_be(Rune *base, int n, long *notused)
342 write(1, (char *)base, 2*n);
346 unicode_out_le(Rune *base, int n, long *notused)
361 write(1, (char *)base, 2*n);
365 intable(int fd, long *table, struct convert *out)
373 while((n = read(fd, (char *)buf, N)) > 0){
376 for(p = buf, e = buf+n; p < e; p++){
380 EPR "%s: bad char 0x%x near byte %ld in %s\n", argv0, *p, ninput+(p-e), file);
388 OUT(out, runes, r-runes);
393 EPR "%s: input read: %r\n", argv0);
395 EPR "%s: input read: %s\n", argv0, strerror(errno));
397 EXIT(1, "input read error");
402 outtable(Rune *base, int n, long *map)
409 for(i = 0; i < NRUNE; i++)
411 for(i = 0; i < 256; i++)
414 for(i = 0, p = obuf; i < n; i++){
418 EPR "%s: rune 0x%x not in output cs\n", argv0, base[i]);
427 write(1, obuf, p-obuf);
432 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
433 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
434 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
435 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
436 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
437 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
438 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
439 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
440 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
441 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
442 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
443 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
444 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
445 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
446 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
447 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
450 long tabmsdos[256] = /* from jhelling@cs.ruu.nl (Jeroen Hellingman) */
452 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
453 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
454 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
455 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
456 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
457 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
458 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
459 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
460 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, /* latin */
461 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5,
462 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9,
463 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192,
464 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba,
465 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb,
466 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* forms */
467 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
468 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
469 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
470 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
471 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
472 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, /* greek */
473 0x03a6, 0x0398, 0x2126, 0x03b4, 0x221e, 0x2205, 0x2208, 0x2229,
474 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, /* math */
475 0x00b0, 0x2022, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x220e, 0x00a0,
477 long tabmsdos2[256] = /* from jhelling@cs.ruu.nl (Jeroen Hellingman) */
479 0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
480 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
481 0x25b6, 0x25c0, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x2043, 0x21a8,
482 0x2191, 0x2193, 0x2192, 0x2190, 0x2319, 0x2194, 0x25b2, 0x25bc,
483 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
484 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
485 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
486 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
487 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
488 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
489 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, /* latin */
490 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5,
491 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9,
492 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192,
493 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba,
494 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb,
495 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* forms */
496 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
497 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
498 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
499 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
500 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
501 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, /* greek */
502 0x03a6, 0x0398, 0x2126, 0x03b4, 0x221e, 0x2205, 0x2208, 0x2229,
503 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, /* math */
504 0x00b0, 0x2022, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x220e, 0x00a0,
506 struct convert convert[] =
507 { /* if two entries have the same name, put the from one first */
508 { "8859-1", "Latin-1 (Western and Northern Europe including Italian)", Table, (void *)tab8859_1 },
509 { "8859-2", "Latin-2 (Eastern Europe except Turkey and the Baltic countries)", Table, (void *)tab8859_2 },
510 { "8859-3", "Latin-3 (Mediterranean, South Africa, Esperanto)", Table, (void *)tab8859_3 },
511 { "8859-4", "Latin-4 (Scandinavia and the Baltic countries; obsolete)", Table, (void *)tab8859_4 },
512 { "8859-5", "Part 5 (Cyrillic)", Table, (void *)tab8859_5 },
513 { "8859-6", "Part 6 (Arabic)", Table, (void *)tab8859_6 },
514 { "8859-7", "Part 7 (Greek)", Table, (void *)tab8859_7 },
515 { "8859-8", "Part 8 (Hebrew)", Table, (void *)tab8859_8 },
516 { "8859-9", "Latin-5 (Turkey, Western Europe except Icelandic and Faroese)", Table, (void *)tab8859_9 },
517 { "8859-10", "Latin-6 (Northern Europe)", Table, (void *)tab8859_10 },
518 { "8859-15", "Latin-9 (Western Europe)", Table, (void *)tab8859_15 },
519 { "ascii", "7-bit ASCII", Table, (void *)tabascii },
520 { "atari", "ATARI-ST character set", Table, (void *)tabatari },
521 { "av", "Alternativnyj Variant", Table, (void *)tabav },
522 { "big5", "Big 5 (HKU)", From|Func, 0, (Fnptr)big5_in },
523 { "big5", "Big 5 (HKU)", Func, 0, (Fnptr)big5_out },
524 { "ebcdic", "EBCDIC", Table, (void *)tabebcdic }, /* 6f is recommended bad map */
525 { "euc-k", "Korean EUC: ASCII+KS C 5601 1987", From|Func, 0, (Fnptr)uksc_in },
526 { "euc-k", "Korean EUC: ASCII+KS C 5601 1987", Func, 0, (Fnptr)uksc_out },
527 { "gb2312", "GB2312-80 (Chinese)", From|Func, 0, (Fnptr)gb_in },
528 { "gb2312", "GB2312-80 (Chinese)", Func, 0, (Fnptr)gb_out },
529 { "gbk", "GBK (Chinese)", From|Func, 0, (Fnptr)gbk_in },
530 { "gbk", "GBK (Chinese)", Func, 0, (Fnptr)gbk_out },
531 { "html", "HTML", From|Func, 0, (Fnptr)html_in },
532 { "html", "HTML", Func, 0, (Fnptr)html_out },
533 { "ibm437", "IBM Code Page 437 (US)", Table, (void*)tabcp437 },
534 { "ibm720", "IBM Code Page 720 (Arabic)", Table, (void*)tabcp720 },
535 { "ibm737", "IBM Code Page 737 (Greek)", Table, (void*)tabcp737 },
536 { "ibm775", "IBM Code Page 775 (Baltic)", Table, (void*)tabcp775 },
537 { "ibm850", "IBM Code Page 850 (Multilingual Latin I)", Table, (void*)tabcp850 },
538 { "ibm852", "IBM Code Page 852 (Latin II)", Table, (void*)tabcp852 },
539 { "ibm855", "IBM Code Page 855 (Cyrillic)", Table, (void*)tabcp855 },
540 { "ibm857", "IBM Code Page 857 (Turkish)", Table, (void*)tabcp857 },
541 { "ibm858", "IBM Code Page 858 (Multilingual Latin I+Euro)", Table, (void*)tabcp858 },
542 { "ibm862", "IBM Code Page 862 (Hebrew)", Table, (void*)tabcp862 },
543 { "ibm866", "IBM Code Page 866 (Russian)", Table, (void*)tabcp866 },
544 { "ibm874", "IBM Code Page 874 (Thai)", Table, (void*)tabcp874 },
545 { "iso-2022-jp", "alias for jis-kanji (MIME)", From|Func, 0, (Fnptr)jisjis_in },
546 { "iso-2022-jp", "alias for jis-kanji (MIME)", Func, 0, (Fnptr)jisjis_out },
547 { "iso-8859-1", "alias for 8859-1 (MIME)", Table, (void *)tab8859_1 },
548 { "iso-8859-2", "alias for 8859-2 (MIME)", Table, (void *)tab8859_2 },
549 { "iso-8859-3", "alias for 8859-3 (MIME)", Table, (void *)tab8859_3 },
550 { "iso-8859-4", "alias for 8859-4 (MIME)", Table, (void *)tab8859_4 },
551 { "iso-8859-5", "alias for 8859-5 (MIME)", Table, (void *)tab8859_5 },
552 { "iso-8859-6", "alias for 8859-6 (MIME)", Table, (void *)tab8859_6 },
553 { "iso-8859-7", "alias for 8859-7 (MIME)", Table, (void *)tab8859_7 },
554 { "iso-8859-8", "alias for 8859-8 (MIME)", Table, (void *)tab8859_8 },
555 { "iso-8859-9", "alias for 8859-9 (MIME)", Table, (void *)tab8859_9 },
556 { "iso-8859-10", "alias for 8859-10 (MIME)", Table, (void *)tab8859_10 },
557 { "iso-8859-15", "alias for 8859-15 (MIME)", Table, (void *)tab8859_15 },
558 { "jis", "guesses at the JIS encoding", From|Func, 0, (Fnptr)jis_in },
559 { "jis-kanji", "ISO 2022-JP (Japanese)", From|Func, 0, (Fnptr)jisjis_in },
560 { "jis-kanji", "ISO 2022-JP (Japanese)", Func, 0, (Fnptr)jisjis_out },
561 { "koi8", "KOI-8 (GOST 19769-74)", Table, (void *)tabkoi8 },
562 { "koi8-r", "alias for koi8 (MIME)", Table, (void *)tabkoi8 },
563 { "latin1", "alias for 8859-1", Table, (void *)tab8859_1 },
564 { "macrom", "Macintosh Standard Roman character set", Table, (void *)tabmacroman },
565 { "microsoft", "alias for windows1252", Table, (void *)tabcp1252 },
566 { "ms-kanji", "Microsoft, or Shift-JIS", From|Func, 0, (Fnptr)msjis_in },
567 { "ms-kanji", "Microsoft, or Shift-JIS", Func, 0, (Fnptr)msjis_out },
568 { "msdos", "IBM PC (alias for ibm437)", Table, (void *)tabcp437 },
569 { "msdos2", "IBM PC (ibm437 with graphics in C0)", Table, (void *)tabmsdos2 },
570 { "next", "NEXTSTEP character set", Table, (void *)tabnextstep },
571 { "ov", "Osnovnoj Variant", Table, (void *)tabov },
572 { "ps2", "IBM PS/2: (alias for ibm850)", Table, (void *)tabcp850 },
573 { "sf1", "ISO-646: Finnish/Swedish SF-1 variant", Table, (void *)tabsf1 },
574 { "sf2", "ISO-646: Finnish/Swedish SF-2 variant (recommended)", Table, (void *)tabsf2 },
575 { "tis-620", "Thai+ASCII (TIS 620-1986)", Table, (void *)tabtis620 },
576 { "tune", "TUNE (Tamil)", From|Func, 0, (Fnptr)tune_in },
577 { "tune", "TUNE (Tamil)", Func, 0, (Fnptr)tune_out },
578 { "ucode", "Russian U-code", Table, (void *)tabucode },
579 { "ujis", "EUC-JX: JIS 0208", From|Func, 0, (Fnptr)ujis_in },
580 { "ujis", "EUC-JX: JIS 0208", Func, 0, (Fnptr)ujis_out },
581 { "unicode", "Unicode 1.1", From|Func, 0, (Fnptr)unicode_in },
582 { "unicode", "Unicode 1.1", Func, 0, (Fnptr)unicode_out },
583 { "unicode-be", "Unicode 1.1 big-endian", From|Func, 0, (Fnptr)unicode_in_be },
584 { "unicode-be", "Unicode 1.1 big-endian", Func, 0, (Fnptr)unicode_out_be },
585 { "unicode-le", "Unicode 1.1 little-endian", From|Func, 0, (Fnptr)unicode_in_le },
586 { "unicode-le", "Unicode 1.1 little-endian", Func, 0, (Fnptr)unicode_out_le },
587 { "us-ascii", "alias for ascii (MIME)", Table, (void *)tabascii },
588 { "utf", "FSS-UTF a.k.a. UTF-8", From|Func, 0, (Fnptr)utf_in },
589 { "utf", "FSS-UTF a.k.a. UTF-8", Func, 0, (Fnptr)utf_out },
590 { "utf1", "UTF-1 (ISO 10646 Annex A)", From|Func, 0, (Fnptr)isoutf_in },
591 { "utf1", "UTF-1 (ISO 10646 Annex A)", Func, 0, (Fnptr)isoutf_out },
592 { "utf-8", "alias for utf (MIME)", From|Func, 0, (Fnptr)utf_in },
593 { "utf-8", "alias for utf (MIME)", Func, 0, (Fnptr)utf_out },
594 { "utf-16", "alias for unicode (MIME)", From|Func, 0, (Fnptr)unicode_in },
595 { "utf-16", "alias for unicode (MIME)", Func, 0, (Fnptr)unicode_out },
596 { "utf-16be", "alias for unicode-be (MIME)", From|Func, 0, (Fnptr)unicode_in_be },
597 { "utf-16be", "alias for unicode-be (MIME)", Func, 0, (Fnptr)unicode_out_be },
598 { "utf-16le", "alias for unicode-le (MIME)", From|Func, 0, (Fnptr)unicode_in_le },
599 { "utf-16le", "alias for unicode-le (MIME)", Func, 0, (Fnptr)unicode_out_le },
600 { "viet1", "Vietnamese VSCII-1 (1993)", Table, (void *)tabviet1 },
601 { "viet2", "Vietnamese VSCII-2 (1993)", Table, (void *)tabviet2 },
602 { "vscii", "Vietnamese VISCII 1.1 (1992)", Table, (void *)tabviscii },
603 { "windows-1250", "Windows Code Page 1250 (Central Europe)", Table, (void *)tabcp1250 },
604 { "windows-1251", "Windows Code Page 1251 (Cyrillic)", Table, (void *)tabcp1251 },
605 { "windows-1252", "Windows Code Page 1252 (Latin I)", Table, (void *)tabcp1252 },
606 { "windows-1253", "Windows Code Page 1253 (Greek)", Table, (void *)tabcp1253 },
607 { "windows-1254", "Windows Code Page 1254 (Turkish)", Table, (void *)tabcp1254 },
608 { "windows-1255", "Windows Code Page 1255 (Hebrew)", Table, (void *)tabcp1255 },
609 { "windows-1256", "Windows Code Page 1256 (Arabic)", Table, (void *)tabcp1256 },
610 { "windows-1257", "Windows Code Page 1257 (Baltic)", Table, (void *)tabcp1257 },
611 { "windows-1258", "Windows Code Page 1258 (Vietnam)", Table, (void *)tabcp1258 },