1: #ifndef NOCSETS 2: char *xlav = "Character Set Translation 5A(018), 21 Nov 92"; 3: 4: /* C K U X L A */ 5: 6: /* C-Kermit tables and functions supporting character set translation. */ 7: /* 8: Author: Frank da Cruz (fdc@columbia.edu, FDCCU@CUVMA.BITNET), 9: Columbia University Center for Computing Activities. 10: Copyright (C) 1985, 1992, Trustees of Columbia University in the City of New 11: York. Permission is granted to any individual or institution to use this 12: software as long as it is not sold for profit. This copyright notice must be 13: retained. This software may not be included in commercial products without 14: written permission of Columbia University. 15: */ 16: 17: /* 18: CAVEAT PROGRAMMOR: The mechanism used here turns out to be somewhat 19: inflexible and maybe a little dangerous. It is designed for Kermit's 20: character-at-a-time processing during protocol operations. Elaborate 21: kludges are used for translating one character into two (like stuffing an 22: extra character into the input stream), or two into one, or two into two. 23: 24: The whole translation business needs to be redesigned to be string-oriented 25: rather than character oriented, so (a) we can have more flexible 26: translations, and (b) we don't have to be concerned about which input stream 27: we are using. The current mechanism is also quite inappropriate 28: for multibyte character sets and for flexible user-defined translations. 29: 30: For the future: perhaps it would be better to represent characters 31: internally using a universal character set like UNICODE (ISO 10646 BMP), 32: the ultimate "transfer character set". 33: */ 34: #include "ckcdeb.h" /* Includes... */ 35: #include "ckcker.h" 36: #include "ckucmd.h" 37: #include "ckcxla.h" 38: 39: /* Character set translation data and functions */ 40: 41: extern int zincnt; /* File i/o macros and variables */ 42: extern char *zinptr; 43: extern int zoutcnt; 44: extern char *zoutptr; 45: 46: int tslevel = TS_L0; /* Transfer syntax level (0,1,2) */ 47: int tcharset = TC_TRANSP; /* Transfer syntax character set */ 48: int tcsr = FC_USASCII; /* Remote terminal character set */ 49: int language = L_USASCII; /* Language */ 50: 51: /* 52: Default local file and terminal character set. 53: Normally ASCII, but for some systems we know otherwise. 54: */ 55: #ifdef datageneral /* Data General AOS/VS */ 56: int fcharset = FC_DGMCS; /* uses the DG International set */ 57: int tcsl = FC_DGMCS; 58: #else 59: #ifdef NEXT /* The NeXT workstation */ 60: int fcharset = FC_NEXT; /* uses its own 8-bit set */ 61: int tcsl = FC_NEXT; 62: #else 63: #ifdef MAC /* The Macintosh */ 64: int fcharset = FC_APPQD; /* uses an extended version of */ 65: int tcsl = FC_APPQD; /* Apple Quickdraw */ 66: #else 67: #ifdef AUX 68: int fcharset = FC_APPQD; /* Ditto for Apple A/UX */ 69: int tcsl = FC_APPQD; 70: #else 71: #ifdef AMIGA /* The Commodore Amiga */ 72: int fcharset = FC_1LATIN; /* uses Latin-1 */ 73: int tcsl = FC_1LATIN; 74: #else /* All others */ 75: int fcharset = FC_USASCII; /* use ASCII by default */ 76: int tcsl = FC_USASCII; 77: #endif /* AMIGA */ 78: #endif /* AUX */ 79: #endif /* MAC */ 80: #endif /* NEXT */ 81: #endif /* datageneral */ 82: 83: 84: 85: _PROTOTYP( CHAR xnel1, (CHAR c) ); /* NeXT to Latin-1 */ 86: _PROTOTYP( CHAR xl143, (CHAR c) ); /* Latin-1 to IBM CP437 */ 87: _PROTOTYP( CHAR xl1as, (CHAR c) ); /* Latin-1 to US ASCII */ 88: _PROTOTYP( CHAR zl1as, (CHAR c) ); /* Latin-1 to US ASCII */ 89: 90: #ifdef CYRILLIC 91: _PROTOTYP( CHAR xassk, (CHAR c) ); /* ASCII to Short KOI */ 92: _PROTOTYP( CHAR xskcy, (CHAR c) ); /* Short KOI to Latin/Cyrillic */ 93: #endif /* CYRILLIC */ 94: 95: #ifdef LATIN2 96: _PROTOTYP( CHAR xnel2, (CHAR c) ); /* NeXT to Latin-2 */ 97: _PROTOTYP( CHAR xl243, (CHAR c) ); /* Latin-2 to IBM CP437 */ 98: _PROTOTYP( CHAR xl2as, (CHAR c) ); /* Latin-2 to US ASCII */ 99: _PROTOTYP( CHAR zl2as, (CHAR c) ); /* Latin-2 to US ASCII */ 100: #endif /* LATIN2 */ 101: 102: /* Transfer character-set info */ 103: 104: struct csinfo tcsinfo[] = { 105: /* Name size code designator alphabet */ 106: "TRANSPARENT, no translation", 256, TC_TRANSP, "", AL_UNK, /* 0 */ 107: "ASCII", 128, TC_USASCII, "", AL_ROMAN, /* 1 */ 108: "LATIN1, ISO 8859-1", 256, TC_1LATIN, "I6/100", AL_ROMAN, /* 2 */ 109: #ifdef LATIN2 110: "LATIN2, ISO 8859-2", 256, TC_2LATIN, "I6/101", AL_ROMAN, /* 3 */ 111: #else 112: "LATIN2 not supported", 0, TC_TRANSP, "XXX", AL_UNK, /* 3 */ 113: #endif /* LATIN2 */ 114: #ifdef CYRILLIC 115: "CYRILLIC, ISO 8859-5", 256, TC_CYRILL, "I6/144",AL_CYRIL, /* 4 */ 116: #else 117: "CYRILLIC not supported", 0, TC_TRANSP, "XXX", AL_UNK, /* 4 */ 118: #endif /* CYRILLIC */ 119: /* 120: NOTE: the second entry is obsolete, but retained temporarily. 121: The proper designator is given in the first entry. C-Kermit sends the 122: first (proper) form, but accepts either form. 123: */ 124: #ifdef KANJI 125: "KANJI (EUC)", 16384, TC_JEUC, "I14/87/13", AL_JAPAN, /* 5 */ 126: "KANJI (EUC)", 16384, TC_JEUC, "I14/87E", AL_JAPAN /* 5 */ 127: #else 128: "KANJI not supported", 0, TC_TRANSP,"XXX", AL_UNK, /* 5 */ 129: #endif /* KANJI */ 130: }; 131: int ntcsets = (sizeof(tcsinfo) / sizeof(struct csinfo)); 132: 133: struct keytab tcstab[] = { /* Keyword table for */ 134: "ascii", TC_USASCII, 0, /* SET TRANSFER CHARACTER-SET */ 135: #ifdef CYRILLIC 136: "cyrillic-iso", TC_CYRILL, 0, 137: #endif /* CYRILLIC */ 138: #ifdef KANJI 139: "japanese-euc", TC_JEUC, 0, 140: #endif /* KANJI */ 141: #ifdef LATIN2 142: /* 143: If Latin-2 is defined, let the following be invisible, non-unique 144: abbreviations for LATIN1. 145: */ 146: "l", TC_1LATIN, CM_ABR|CM_INV, 147: "la", TC_1LATIN, CM_ABR|CM_INV, 148: "lat", TC_1LATIN, CM_ABR|CM_INV, 149: "lati", TC_1LATIN, CM_ABR|CM_INV, 150: "latin", TC_1LATIN, CM_ABR|CM_INV, 151: #endif /* LATIN2 */ 152: "latin1-iso", TC_1LATIN, 0, 153: #ifdef LATIN2 154: "latin2-iso", TC_2LATIN, 0, 155: #endif /* LATIN2 */ 156: "transparent", TC_TRANSP, 0 157: }; 158: int ntcs = (sizeof(tcstab) / sizeof(struct keytab)); 159: 160: /* File character set information structure, indexed by character set code, */ 161: /* as defined in ckuxla.h. This table must be in order of file character */ 162: /* set number! */ 163: 164: struct csinfo fcsinfo[] = { /* File character set information... */ 165: /* Descriptive Name Size Designator */ 166: "US ASCII", 128, FC_USASCII, NULL, AL_ROMAN, 167: "British/UK ISO-646", 128, FC_UKASCII, NULL, AL_ROMAN, 168: "Dutch ISO-646", 128, FC_DUASCII, NULL, AL_ROMAN, 169: "Finnish ISO-646", 128, FC_FIASCII, NULL, AL_ROMAN, 170: "French ISO-646", 128, FC_FRASCII, NULL, AL_ROMAN, 171: "Canadian-French ISO-646", 128, FC_FCASCII, NULL, AL_ROMAN, 172: "German ISO-646", 128, FC_GEASCII, NULL, AL_ROMAN, 173: "Hungarian ISO-646", 128, FC_HUASCII, NULL, AL_ROMAN, 174: "Italian ISO-646", 128, FC_ITASCII, NULL, AL_ROMAN, 175: "Norwegian/Danish ISO-646", 128, FC_NOASCII, NULL, AL_ROMAN, 176: "Portuguese ISO-646", 128, FC_POASCII, NULL, AL_ROMAN, 177: "Spanish ISO-646", 128, FC_SPASCII, NULL, AL_ROMAN, 178: "Swedish ISO-646", 128, FC_SWASCII, NULL, AL_ROMAN, 179: "Swiss ISO-646", 128, FC_CHASCII, NULL, AL_ROMAN, 180: "ISO 8859-1 Latin-1", 256, FC_1LATIN, NULL, AL_ROMAN, 181: #ifdef LATIN2 182: "ISO 8859-2 Latin-2", 256, FC_2LATIN, NULL, AL_ROMAN, 183: #endif /* LATIN2 */ 184: "DEC Multinational", 256, FC_DECMCS, NULL, AL_ROMAN, 185: "NeXT Multinational", 256, FC_NEXT, NULL, AL_ROMAN, 186: "IBM Code Page 437", 256, FC_CP437, NULL, AL_ROMAN, 187: "IBM Code Page 850", 256, FC_CP850, NULL, AL_ROMAN, 188: #ifdef LATIN2 189: "IBM Code Page 852", 256, FC_CP852, NULL, AL_ROMAN, 190: #endif /* LATIN2 */ 191: "Apple Macintosh Latin", 256, FC_APPQD, NULL, AL_ROMAN, 192: "Data General International", 256, FC_DGMCS, NULL, AL_ROMAN 193: #ifdef CYRILLIC 194: , "ISO 8859-5 Latin/Cyrillic", 256, FC_CYRILL, NULL, AL_CYRIL, 195: "CP866 Cyrillic", 256, FC_CP866, NULL, AL_CYRIL, 196: "Short KOI", 128, FC_KOI7, NULL, AL_CYRIL, 197: "Old KOI-8 Cyrillic", 256, FC_KOI8, NULL, AL_CYRIL 198: #endif /* CYRILLIC */ 199: #ifdef KANJI 200: , "Japanese JIS7", 256, FC_JIS7, NULL, AL_JAPAN, 201: "Japanese Shift JIS", 16384, FC_SHJIS, NULL, AL_JAPAN, 202: "Japanese EUC", 16384, FC_JEUC, NULL, AL_JAPAN, 203: "Japanese DEC Kanji", 16384, FC_JDEC, NULL, AL_JAPAN 204: #endif /* KANJI */ 205: }; 206: 207: /* Local file character sets */ 208: /* Includes 7-bit National Replacement Character Sets of ISO 646 */ 209: /* Plus ISO Latin-1, DEC Multinational Character Set (MCS), NeXT char set */ 210: 211: struct keytab fcstab[] = { /* Keyword table for 'set file character-set' */ 212: 213: /* 214: IMPORTANT: This table is replicated below as ttcstab (terminal character 215: set table). The only differences are the addition of TRANSPARENT 216: and the removal of the Kanji sets, which are not supported yet. 217: If you make changes to this table, also change ttcstab. 218: */ 219: 220: /* Keyword Value Flags */ 221: "apple-quickdraw", FC_APPQD, CM_INV, /* Apple Quickdraw */ 222: "ascii", FC_USASCII, 0, /* ASCII */ 223: "british", FC_UKASCII, 0, /* British NRC */ 224: "canadian-french", FC_FCASCII, 0, /* French Canadian NRC */ 225: "cp437", FC_CP437, 0, /* IBM CP437 */ 226: "cp850", FC_CP850, 0, /* IBM CP850 */ 227: #ifdef LATIN2 228: "cp852", FC_CP852, 0, /* IBM CP852 */ 229: #endif /* LATIN2 */ 230: #ifdef CYRILLIC 231: "cp866-cyrillic", FC_CP866, 0, /* CP866 Cyrillic */ 232: "cyrillic-iso", FC_CYRILL, 0, /* ISO Latin/Cyrillic Alphabet */ 233: #endif /* CYRILLIC */ 234: "danish", FC_NOASCII, 0, /* Norwegian and Danish NRC */ 235: #ifdef KANJI 236: "dec-kanji", FC_JDEC, 0, /* Japanese DEC Kanji */ 237: #endif /* KANJI */ 238: "dec-multinational", FC_DECMCS, 0, /* DEC multinational character set */ 239: "dg-international", FC_DGMCS, 0, /* Data General multinational */ 240: "dutch", FC_DUASCII, 0, /* Dutch NRC */ 241: "finnish", FC_FIASCII, 0, /* Finnish NRC */ 242: "french", FC_FRASCII, 0, /* French NRC */ 243: "fr-canadian", FC_FCASCII, CM_INV, /* French Canadian NRC */ 244: "german", FC_GEASCII, 0, /* German NRC */ 245: "hungarian", FC_HUASCII, 0, /* Hungarian NRC */ 246: "italian", FC_ITASCII, 0, /* Italian NRC */ 247: #ifdef KANJI 248: "japanese-euc", FC_JEUC, 0, /* Japanese EUC */ 249: "jis7-kanji", FC_JIS7, 0, /* Japanese JIS7 7bit code */ 250: #endif /* KANJI */ 251: #ifdef CYRILLIC 252: "koi8-cyrillic", FC_KOI8, 0, /* Old KOI-8 Cyrillic */ 253: #endif /* CYRILLIC */ 254: #ifdef LATIN2 255: "l", FC_1LATIN, CM_ABR|CM_INV, 256: "la", FC_1LATIN, CM_ABR|CM_INV, 257: "lat", FC_1LATIN, CM_ABR|CM_INV, 258: "lati", FC_1LATIN, CM_ABR|CM_INV, 259: "latin", FC_1LATIN, CM_ABR|CM_INV, 260: #endif /* LATIN2 */ 261: "latin1-iso", FC_1LATIN, 0, /* ISO Latin Alphabet 1 */ 262: #ifdef LATIN2 263: "latin2-iso", FC_2LATIN, 0, /* ISO Latin Alphabet 2 */ 264: #endif /* LATIN2 */ 265: "macintosh-latin", FC_APPQD, 0, /* "Extended Mac Latin" */ 266: "next-multinational", FC_NEXT, 0, /* NeXT workstation */ 267: "norwegian", FC_NOASCII, 0, /* Norwegian and Danish NRC */ 268: "portuguese", FC_POASCII, 0, /* Portuguese NRC */ 269: #ifdef KANJI 270: "shift-jis-kanji", FC_SHJIS, 0, /* Japanese Kanji Shift-JIS */ 271: #endif /* KANJI */ 272: #ifdef CYRILLIC 273: "short-koi", FC_KOI7, 0, /* Short KOI Cyrillic */ 274: #endif /* CYRILLIC */ 275: "spanish", FC_SPASCII, 0, /* Spanish NRC */ 276: "swedish", FC_SWASCII, 0, /* Swedish NRC */ 277: "swiss", FC_CHASCII, 0 /* Swiss NRC */ 278: }; 279: int nfilc = (sizeof(fcstab) / sizeof(struct keytab)); /* size of this table */ 280: 281: 282: struct keytab ttcstab[] = { /* Keyword table for SET TERMINAL CHARACTER-SET */ 283: /* 284: IMPORTANT: This table is a replica of fcstab, immediately above, with the 285: addition of TRANSPARENT. If you make changes to this table, make the 286: corresponding changes to fcstab. 287: */ 288: /* Keyword Value Flags */ 289: "apple-quickdraw", FC_APPQD, CM_INV, /* Apple Quickdraw */ 290: "ascii", FC_USASCII, 0, /* ASCII */ 291: "british", FC_UKASCII, 0, /* British NRC */ 292: "canadian-french", FC_FCASCII, 0, /* French Canadian NRC */ 293: "cp437", FC_CP437, 0, /* IBM CP437 */ 294: "cp850", FC_CP850, 0, /* IBM CP850 */ 295: #ifdef LATIN2 296: "cp852", FC_CP852, 0, /* IBM CP852 */ 297: #endif /* LATIN2 */ 298: #ifdef CYRILLIC 299: "cp866-cyrillic", FC_CP866, 0, /* CP866 Cyrillic */ 300: "cyrillic-iso", FC_CYRILL, 0, /* ISO Latin/Cyrillic Alphabet */ 301: #endif /* CYRILLIC */ 302: "danish", FC_NOASCII, 0, /* Norwegian and Danish NRC */ 303: #ifdef COMMENT 304: #ifdef KANJI 305: "dec-kanji", FC_JDEC, 0, /* Japanese DEC Kanji */ 306: #endif /* KANJI */ 307: #endif /* COMMENT */ 308: "dec-multinational", FC_DECMCS, 0, /* DEC multinational character set */ 309: "dg-international", FC_DGMCS, 0, /* Data General multinational */ 310: "dutch", FC_DUASCII, 0, /* Dutch NRC */ 311: "finnish", FC_FIASCII, 0, /* Finnish NRC */ 312: "french", FC_FRASCII, 0, /* French NRC */ 313: "fr-canadian", FC_FCASCII, CM_INV, /* French Canadian NRC */ 314: "german", FC_GEASCII, 0, /* German NRC */ 315: "hungarian", FC_HUASCII, 0, /* Hungarian NRC */ 316: "italian", FC_ITASCII, 0, /* Italian NRC */ 317: #ifdef COMMENT 318: /* Kanji terminal character sets not implemented yet */ 319: #ifdef KANJI 320: "japanese-euc", FC_JEUC, 0, /* Japanese EUC */ 321: "jis7-kanji", FC_JIS7, 0, /* Japanese JIS7 7bit code */ 322: #endif /* KANJI */ 323: #endif /* COMMENT */ 324: #ifdef CYRILLIC 325: "koi8-cyrillic", FC_KOI8, 0, /* Old KOI-8 Cyrillic */ 326: #endif /* CYRILLIC */ 327: #ifdef LATIN2 328: "l", FC_1LATIN, CM_ABR|CM_INV, 329: "la", FC_1LATIN, CM_ABR|CM_INV, 330: "lat", FC_1LATIN, CM_ABR|CM_INV, 331: "lati", FC_1LATIN, CM_ABR|CM_INV, 332: "latin", FC_1LATIN, CM_ABR|CM_INV, 333: #endif /* LATIN2 */ 334: "latin1-iso", FC_1LATIN, 0, /* ISO Latin Alphabet 1 */ 335: #ifdef LATIN2 336: "latin2-iso", FC_2LATIN, 0, /* ISO Latin Alphabet 2 */ 337: #endif /* LATIN2 */ 338: "macintosh-latin", FC_APPQD, 0, /* "Extended Mac Latin */ 339: "next-multinational", FC_NEXT, 0, /* NeXT workstation */ 340: "norwegian", FC_NOASCII, 0, /* Norwegian and Danish NRC */ 341: "portuguese", FC_POASCII, 0, /* Portuguese NRC */ 342: #ifdef COMMENT 343: /* Kanji terminal character sets not implemented yet. */ 344: #ifdef KANJI 345: "shift-jis-kanji", FC_SHJIS, 0, /* Japanese Kanji Shift-JIS */ 346: #endif /* KANJI */ 347: #endif /* COMMENT */ 348: #ifdef CYRILLIC 349: "short-koi", FC_KOI7, 0, /* Short KOI Cyrillic */ 350: #endif /* CYRILLIC */ 351: "spanish", FC_SPASCII, 0, /* Spanish NRC */ 352: "swedish", FC_SWASCII, 0, /* Swedish NRC */ 353: "swiss", FC_CHASCII, 0, /* Swiss NRC */ 354: "transparent", FC_TRANSP, 0 /* Transparent */ 355: }; 356: int ntermc = (sizeof(ttcstab) / sizeof(struct keytab)); /* size of table */ 357: 358: /* 359: Languages: 360: 361: This table allows C-Kermit to have a SET LANGUAGE command to apply special 362: language-specific rules when translating from a character set that contains 363: national characters into plain ASCII, like German umlaut-a becomes ae. 364: 365: Originally, I thought it would be a good idea to let SET LANGUAGE also select 366: an appropriate FILE CHARACTER-SET and TRANSFER CHARACTER-SET automatically, 367: and these are included in the langinfo structure. Later I realized that this 368: was a bad idea. Users are confused by unexpected side effects. If this 369: functionality is desired, it's better to define a macro to do it. 370: */ 371: 372: struct langinfo langs[] = { 373: /* Language code File Charset Xfer Charset Name */ 374: L_USASCII, FC_USASCII, TC_USASCII, "ASCII (American English)", 375: L_DANISH, FC_NOASCII, TC_1LATIN, "Danish", 376: L_DUTCH, FC_DUASCII, TC_1LATIN, "Dutch", 377: L_FINNISH, FC_FIASCII, TC_1LATIN, "Finnish", 378: L_FRENCH, FC_FRASCII, TC_1LATIN, "French", 379: L_GERMAN, FC_GEASCII, TC_1LATIN, "German", 380: L_HUNGARIAN, FC_HUASCII, TC_2LATIN, "Hungarian", 381: L_ICELANDIC, FC_USASCII, TC_1LATIN, "Icelandic", 382: L_ITALIAN, FC_ITASCII, TC_1LATIN, "Italian", 383: #ifdef KANJI 384: L_JAPANESE, FC_JEUC, TC_JEUC, "Japanese", 385: #endif /* KANJI */ 386: L_NORWEGIAN, FC_NOASCII, TC_1LATIN, "Norwegian", 387: L_PORTUGUESE, FC_POASCII, TC_1LATIN, "Portuguese", 388: #ifdef CYRILLIC 389: L_RUSSIAN, FC_CP866, TC_CYRILL, "Russian", 390: #endif /* CYRILLIC */ 391: L_SPANISH, FC_SPASCII, TC_1LATIN, "Spanish", 392: L_SWEDISH, FC_SWASCII, TC_1LATIN, "Swedish", 393: L_SWISS, FC_CHASCII, TC_1LATIN, "Swiss" 394: }; 395: int nlangs = (sizeof(langs) / sizeof(struct langinfo)); 396: 397: /* 398: Keyword table for the SET LANGUAGE command. 399: Only a few of these (German, Scandinavian, etc) actually do anything. 400: The language is used to invoke special translation rules when converting 401: from an 8-bit character set to ASCII; for example, German u-diaeresis 402: becomes "ue", Dutch y-diaeresis becomes "ij". Languages without associated 403: rules are invisible (CM_INV). 404: */ 405: struct keytab lngtab[] = { 406: "ascii", L_USASCII, CM_INV, 407: "danish", L_DANISH, 0, 408: "dutch", L_DUTCH, 0, 409: "english", L_USASCII, CM_INV, 410: "finnish", L_FINNISH, 0, 411: "french", L_FRENCH, 0, 412: "german", L_GERMAN, 0, 413: "hungarian", L_HUNGARIAN, CM_INV, 414: "icelandic", L_ICELANDIC, 0, 415: "italian", L_ITALIAN, CM_INV, 416: #ifdef KANJI 417: "japanese", L_JAPANESE, CM_INV, 418: #endif /* KANJI */ 419: "norwegian", L_NORWEGIAN, 0, 420: "none", L_USASCII, 0, 421: "portuguese", L_PORTUGUESE, CM_INV, 422: #ifdef CYRILLIC 423: "russian", L_RUSSIAN, 0, 424: #endif /* CYRILLIC */ 425: "spanish", L_SPANISH, CM_INV, 426: "swedish", L_SWEDISH, 0, 427: #ifdef CYRILLIC 428: "ukrainian", L_RUSSIAN, 0 429: #endif /* CYRILLIC */ 430: }; 431: int nlng = (sizeof(lngtab) / sizeof(struct keytab)); /* how many languages */ 432: 433: 434: /* Translation tables ... */ 435: 436: /* 437: For each pair of (transfer,file) character sets, we need two translation 438: functions, one for sending, one for receiving. 439: */ 440: 441: /* 442: Here is the first table, Latin-1 to ASCII, fully annotated... 443: This one is absolutely NOT invertible, since we're going from an 8-bit 444: set to a 7-bit set. Accented letters are mapped to unaccented 445: equivalents, C1 control characters are all translated to "?", etc. 446: */ 447: CHAR 448: yl1as[] = { /* ISO 8859-1 Latin Alphabet 1 to US ASCII */ 449: /* Source character Description => Translation */ 450: /* Dec row/col Set */ 451: 0, /* 000 00/00 C0 NUL Ctrl-@ => (self) */ 452: 1, /* 001 00/01 C0 SOH Ctrl-A => (self) */ 453: 2, /* 002 00/02 C0 STX Ctrl-B => (self) */ 454: 3, /* 003 00/03 C0 ETX Ctrl-C => (self) */ 455: 4, /* 004 00/04 C0 EOT Ctrl-D => (self) */ 456: 5, /* 005 00/05 C0 ENQ Ctrl-E => (self) */ 457: 6, /* 006 00/06 C0 ACK Ctrl-F => (self) */ 458: 7, /* 007 00/07 C0 BEL Ctrl-G => (self) */ 459: 8, /* 008 00/08 C0 BS Ctrl-H => (self) */ 460: 9, /* 009 00/09 C0 HT Ctrl-I => (self) */ 461: 10, /* 010 00/10 C0 LF Ctrl-J => (self) */ 462: 11, /* 011 00/11 C0 VT Ctrl-K => (self) */ 463: 12, /* 012 00/12 C0 FF Ctrl-L => (self) */ 464: 13, /* 013 00/13 C0 CR Ctrl-M => (self) */ 465: 14, /* 014 00/14 C0 SO Ctrl-N => (self) */ 466: 15, /* 015 00/15 C0 SI Ctrl-O => (self) */ 467: 16, /* 016 01/00 C0 DLE Ctrl-P => (self) */ 468: 17, /* 017 01/01 C0 DC1 Ctrl-Q => (self) */ 469: 18, /* 018 01/02 C0 DC2 Ctrl-R => (self) */ 470: 19, /* 019 01/03 C0 DC3 Ctrl-S => (self) */ 471: 20, /* 020 01/04 C0 DC4 Ctrl-T => (self) */ 472: 21, /* 021 01/05 C0 NAK Ctrl-U => (self) */ 473: 22, /* 022 01/06 C0 SYN Ctrl-V => (self) */ 474: 23, /* 023 01/07 C0 ETB Ctrl-W => (self) */ 475: 24, /* 024 01/08 C0 CAN Ctrl-X => (self) */ 476: 25, /* 025 01/09 C0 EM Ctrl-Y => (self) */ 477: 26, /* 026 01/10 C0 SUB Ctrl-Z => (self) */ 478: 27, /* 027 01/11 C0 ESC Ctrl-[ => (self) */ 479: 28, /* 028 01/12 C0 FS Ctrl-\ => (self) */ 480: 29, /* 029 01/13 C0 GS Ctrl-] => (self) */ 481: 30, /* 030 01/14 C0 RS Ctrl-^ => (self) */ 482: 31, /* 031 01/15 C0 US Ctrl-_ => (self) */ 483: 32, /* 032 02/00 SP Space => (self) */ 484: 33, /* 033 02/01 G0 ! Exclamation mark => (self) */ 485: 34, /* 034 02/02 G0 " Doublequote => (self) */ 486: 35, /* 035 02/03 G0 # Number sign => (self) */ 487: 36, /* 036 02/04 G0 $ Dollar sign => (self) */ 488: 37, /* 037 02/05 G0 % Percent sign => (self) */ 489: 38, /* 038 02/06 G0 & Ampersand => (self) */ 490: 39, /* 039 02/07 G0 ' Apostrophe => (self) */ 491: 40, /* 040 02/08 G0 ( Left parenthesis => (self) */ 492: 41, /* 041 02/09 G0 ) Right parenthesis => (self) */ 493: 42, /* 042 02/10 G0 * Asterisk => (self) */ 494: 43, /* 043 02/11 G0 + Plus sign => (self) */ 495: 44, /* 044 02/12 G0 , Comma => (self) */ 496: 45, /* 045 02/13 G0 - Hyphen, minus sign => (self) */ 497: 46, /* 046 02/14 G0 . Period, full stop => (self) */ 498: 47, /* 047 02/15 G0 / Slash, solidus => (self) */ 499: 48, /* 048 03/00 G0 0 Digit 0 => (self) */ 500: 49, /* 049 03/01 G0 1 Digit 1 => (self) */ 501: 50, /* 050 03/02 G0 2 Digit 2 => (self) */ 502: 51, /* 051 03/03 G0 3 Digit 3 => (self) */ 503: 52, /* 052 03/04 G0 4 Digit 4 => (self) */ 504: 53, /* 053 03/05 G0 5 Digit 5 => (self) */ 505: 54, /* 054 03/06 G0 6 Digit 6 => (self) */ 506: 55, /* 055 03/07 G0 7 Digit 7 => (self) */ 507: 56, /* 056 03/08 G0 8 Digit 8 => (self) */ 508: 57, /* 057 03/09 G0 9 Digit 9 => (self) */ 509: 58, /* 058 03/10 G0 : Colon => (self) */ 510: 59, /* 059 03/11 G0 ; Semicolon => (self) */ 511: 60, /* 060 03/12 G0 < Less-than sign => (self) */ 512: 61, /* 061 03/13 G0 = Equals sign => (self) */ 513: 62, /* 062 03/14 G0 > Greater-than sign => (self) */ 514: 63, /* 063 03/15 G0 ? Question mark => (self) */ 515: 64, /* 064 04/00 G0 @ Commercial at sign => (self) */ 516: 65, /* 065 04/01 G0 A Letter A => (self) */ 517: 66, /* 066 04/02 G0 B Letter B => (self) */ 518: 67, /* 067 04/03 G0 C Letter C => (self) */ 519: 68, /* 068 04/04 G0 D Letter D => (self) */ 520: 69, /* 069 04/05 G0 E Letter E => (self) */ 521: 70, /* 070 04/06 G0 F Letter F => (self) */ 522: 71, /* 071 04/07 G0 G Letter G => (self) */ 523: 72, /* 072 04/08 G0 H Letter H => (self) */ 524: 73, /* 073 04/09 G0 I Letter I => (self) */ 525: 74, /* 074 04/10 G0 J Letter J => (self) */ 526: 75, /* 075 04/11 G0 K Letter K => (self) */ 527: 76, /* 076 04/12 G0 L Letter L => (self) */ 528: 77, /* 077 04/13 G0 M Letter M => (self) */ 529: 78, /* 078 04/14 G0 N Letter N => (self) */ 530: 79, /* 079 04/15 G0 O Letter O => (self) */ 531: 80, /* 080 05/00 G0 P Letter P => (self) */ 532: 81, /* 081 05/01 G0 Q Letter Q => (self) */ 533: 82, /* 082 05/02 G0 R Letter R => (self) */ 534: 83, /* 083 05/03 G0 S Letter S => (self) */ 535: 84, /* 084 05/04 G0 T Letter T => (self) */ 536: 85, /* 085 05/05 G0 U Letter U => (self) */ 537: 86, /* 086 05/06 G0 V Letter V => (self) */ 538: 87, /* 087 05/07 G0 W Letter W => (self) */ 539: 88, /* 088 05/08 G0 X Letter X => (self) */ 540: 89, /* 089 05/09 G0 Y Letter Y => (self) */ 541: 90, /* 090 05/10 G0 Z Letter Z => (self) */ 542: 91, /* 091 05/11 G0 [ Left square bracket => (self) */ 543: 92, /* 092 05/12 G0 \ Reverse slash => (self) */ 544: 93, /* 093 05/13 G0 ] Right square bracket => (self) */ 545: 94, /* 094 05/14 G0 ^ Circumflex accent => (self) */ 546: 95, /* 095 05/15 G0 _ Underline, low line => (self) */ 547: 96, /* 096 06/00 G0 ` Grave accent => (self) */ 548: 97, /* 097 06/01 G0 a Letter a => (self) */ 549: 98, /* 098 06/02 G0 b Letter b => (self) */ 550: 99, /* 099 06/03 G0 c Letter c => (self) */ 551: 100, /* 100 06/04 G0 d Letter d => (self) */ 552: 101, /* 101 06/05 G0 e Letter e => (self) */ 553: 102, /* 102 06/06 G0 f Letter f => (self) */ 554: 103, /* 103 06/07 G0 g Letter g => (self) */ 555: 104, /* 104 06/08 G0 h Letter h => (self) */ 556: 105, /* 105 06/09 G0 i Letter i => (self) */ 557: 106, /* 106 06/10 G0 j Letter j => (self) */ 558: 107, /* 107 06/11 G0 k Letter k => (self) */ 559: 108, /* 108 06/12 G0 l Letter l => (self) */ 560: 109, /* 109 06/13 G0 m Letter m => (self) */ 561: 110, /* 110 06/14 G0 n Letter n => (self) */ 562: 111, /* 111 06/15 G0 o Letter o => (self) */ 563: 112, /* 112 07/00 G0 p Letter p => (self) */ 564: 113, /* 113 07/01 G0 q Letter q => (self) */ 565: 114, /* 114 07/02 G0 r Letter r => (self) */ 566: 115, /* 115 07/03 G0 s Letter s => (self) */ 567: 116, /* 116 07/04 G0 t Letter t => (self) */ 568: 117, /* 117 07/05 G0 u Letter u => (self) */ 569: 118, /* 118 07/06 G0 v Letter v => (self) */ 570: 119, /* 119 07/07 G0 w Letter w => (self) */ 571: 120, /* 120 07/08 G0 x Letter x => (self) */ 572: 121, /* 121 07/09 G0 y Letter y => (self) */ 573: 122, /* 122 07/10 G0 z Letter z => (self) */ 574: 123, /* 123 07/11 G0 { Left curly bracket => (self) */ 575: 124, /* 124 07/12 G0 | Vertical bar => (self) */ 576: 125, /* 125 07/13 G0 } Right curly bracket => (self) */ 577: 126, /* 126 07/14 G0 ~ Tilde => (self) */ 578: 127, /* 127 07/15 DEL Delete, Rubout => (self) */ 579: UNK, /* 128 08/00 C1 => UNK */ 580: UNK, /* 129 08/01 C1 => UNK */ 581: UNK, /* 130 08/02 C1 => UNK */ 582: UNK, /* 131 08/03 C1 => UNK */ 583: UNK, /* 132 08/04 C1 IND => UNK */ 584: UNK, /* 133 08/05 C1 NEL => UNK */ 585: UNK, /* 134 08/06 C1 SSA => UNK */ 586: UNK, /* 135 08/07 C1 ESA => UNK */ 587: UNK, /* 136 08/08 C1 HTS => UNK */ 588: UNK, /* 137 08/09 C1 => UNK */ 589: UNK, /* 138 08/10 C1 => UNK */ 590: UNK, /* 139 08/11 C1 => UNK */ 591: UNK, /* 140 08/12 C1 => UNK */ 592: UNK, /* 141 08/13 C1 RI => UNK */ 593: UNK, /* 142 08/14 C1 SS2 => UNK */ 594: UNK, /* 143 08/15 C1 SS3 => UNK */ 595: UNK, /* 144 09/00 C1 DCS => UNK */ 596: UNK, /* 145 09/01 C1 => UNK */ 597: UNK, /* 146 09/02 C1 => UNK */ 598: UNK, /* 147 09/03 C1 STS => UNK */ 599: UNK, /* 148 09/04 C1 => UNK */ 600: UNK, /* 149 09/05 C1 => UNK */ 601: UNK, /* 150 09/06 C1 SPA => UNK */ 602: UNK, /* 151 09/07 C1 EPA => UNK */ 603: UNK, /* 152 09/08 C1 => UNK */ 604: UNK, /* 153 09/09 C1 => UNK */ 605: UNK, /* 154 09/10 C1 => UNK */ 606: UNK, /* 155 09/11 C1 CSI => UNK */ 607: UNK, /* 156 09/12 C1 ST => UNK */ 608: UNK, /* 157 09/13 C1 OSC => UNK */ 609: UNK, /* 158 09/14 C1 PM => UNK */ 610: UNK, /* 159 09/15 C1 APC => UNK */ 611: 32, /* 160 10/00 G1 No-break space => SP */ 612: 33, /* 161 10/01 G1 Inverted exclamation => ! */ 613: 99, /* 162 10/02 G1 Cent sign => c */ 614: 35, /* 163 10/03 G1 Pound sign => # */ 615: 36, /* 164 10/04 G1 Currency sign => $ */ 616: 89, /* 165 10/05 G1 Yen sign => Y */ 617: 124, /* 166 10/06 G1 Broken bar => | */ 618: 80, /* 167 10/07 G1 Paragraph sign => P */ 619: 34, /* 168 10/08 G1 Diaeresis => " */ 620: 67, /* 169 10/09 G1 Copyright sign => C */ 621: 97, /* 170 10/10 G1 Feminine ordinal => a */ 622: 34, /* 171 10/11 G1 Left angle quotation => " */ 623: 126, /* 172 10/12 G1 Not sign => ~ */ 624: 45, /* 173 10/13 G1 Soft hyphen => - */ 625: 82, /* 174 10/14 G1 Registered trade mark => R */ 626: 95, /* 175 10/15 G1 Macron => _ */ 627: 111, /* 176 11/00 G1 Degree sign, ring above => o */ 628: UNK, /* 177 11/01 G1 Plus-minus sign => UNK */ 629: 50, /* 178 11/02 G1 Superscript two => 2 */ 630: 51, /* 179 11/03 G1 Superscript three => 3 */ 631: 39, /* 180 11/04 G1 Acute accent => ' */ 632: 117, /* 181 11/05 G1 Micro sign => u */ 633: 45, /* 182 11/06 G1 Pilcrow sign => - */ 634: 45, /* 183 11/07 G1 Middle dot => - */ 635: 44, /* 184 11/08 G1 Cedilla => , */ 636: 49, /* 185 11/09 G1 Superscript one => 1 */ 637: 111, /* 186 11/10 G1 Masculine ordinal => o */ 638: 34, /* 187 11/11 G1 Right angle quotation => " */ 639: UNK, /* 188 11/12 G1 One quarter => UNK */ 640: UNK, /* 189 11/13 G1 One half => UNK */ 641: UNK, /* 190 11/14 G1 Three quarters => UNK */ 642: 63, /* 191 11/15 G1 Inverted question mark => ? */ 643: 65, /* 192 12/00 G1 A grave => A */ 644: 65, /* 193 12/01 G1 A acute => A */ 645: 65, /* 194 12/02 G1 A circumflex => A */ 646: 65, /* 195 12/03 G1 A tilde => A */ 647: 65, /* 196 12/04 G1 A diaeresis => A */ 648: 65, /* 197 12/05 G1 A ring above => A */ 649: 65, /* 198 12/06 G1 A with E => A */ 650: 67, /* 199 12/07 G1 C Cedilla => C */ 651: 69, /* 200 12/08 G1 E grave => E */ 652: 69, /* 201 12/09 G1 E acute => E */ 653: 69, /* 202 12/10 G1 E circumflex => E */ 654: 69, /* 203 12/11 G1 E diaeresis => E */ 655: 73, /* 204 12/12 G1 I grave => I */ 656: 73, /* 205 12/13 G1 I acute => I */ 657: 73, /* 206 12/14 G1 I circumflex => I */ 658: 73, /* 207 12/15 G1 I diaeresis => I */ 659: 68, /* 208 13/00 G1 Icelandic Eth => D */ 660: 78, /* 209 13/01 G1 N tilde => N */ 661: 79, /* 210 13/02 G1 O grave => O */ 662: 79, /* 211 13/03 G1 O acute => O */ 663: 79, /* 212 13/04 G1 O circumflex => O */ 664: 79, /* 213 13/05 G1 O tilde => O */ 665: 79, /* 214 13/06 G1 O diaeresis => O */ 666: 120, /* 215 13/07 G1 Multiplication sign => x */ 667: 79, /* 216 13/08 G1 O oblique stroke => O */ 668: 85, /* 217 13/09 G1 U grave => U */ 669: 85, /* 218 13/10 G1 U acute => U */ 670: 85, /* 219 13/11 G1 U circumflex => U */ 671: 85, /* 220 13/12 G1 U diaeresis => U */ 672: 89, /* 221 13/13 G1 Y acute => Y */ 673: 84, /* 222 13/14 G1 Icelandic Thorn => T */ 674: 115, /* 223 13/15 G1 German sharp s => s */ 675: 97, /* 224 14/00 G1 a grave => a */ 676: 97, /* 225 14/01 G1 a acute => a */ 677: 97, /* 226 14/02 G1 a circumflex => a */ 678: 97, /* 227 14/03 G1 a tilde => a */ 679: 97, /* 228 14/04 G1 a diaeresis => a */ 680: 97, /* 229 14/05 G1 a ring above => a */ 681: 97, /* 230 14/06 G1 a with e => a */ 682: 99, /* 231 14/07 G1 c cedilla => c */ 683: 101, /* 232 14/08 G1 e grave => e */ 684: 101, /* 233 14/09 G1 e acute => e */ 685: 101, /* 234 14/10 G1 e circumflex => e */ 686: 101, /* 235 14/11 G1 e diaeresis => e */ 687: 105, /* 236 14/12 G1 i grave => i */ 688: 105, /* 237 14/13 G1 i acute => i */ 689: 105, /* 238 14/14 G1 i circumflex => i */ 690: 105, /* 239 14/15 G1 i diaeresis => i */ 691: 100, /* 240 15/00 G1 Icelandic eth => d */ 692: 110, /* 241 15/01 G1 n tilde => n */ 693: 111, /* 242 15/02 G1 o grave => o */ 694: 111, /* 243 15/03 G1 o acute => o */ 695: 111, /* 244 15/04 G1 o circumflex => o */ 696: 111, /* 245 15/05 G1 o tilde => o */ 697: 111, /* 246 15/06 G1 o diaeresis => o */ 698: 47, /* 247 15/07 G1 Division sign => / */ 699: 111, /* 248 15/08 G1 o oblique stroke => o */ 700: 117, /* 249 15/09 G1 u grave => u */ 701: 117, /* 250 15/10 G1 u acute => u */ 702: 117, /* 251 15/11 G1 u circumflex => u */ 703: 117, /* 252 15/12 G1 u diaeresis => u */ 704: 121, /* 253 15/13 G1 y acute => y */ 705: 116, /* 254 15/14 G1 Icelandic thorn => t */ 706: 121 /* 255 15/15 G1 y diaeresis => y */ 707: }; 708: 709: 710: /* Translation tables for ISO Latin Alphabet 1 to local file character sets */ 711: 712: /* 713: Most of the remaining tables are not annotated like the one above, because 714: the size of the resulting source file would be ridiculous. Each row in the 715: following tables corresponds to a column of ISO 8859-1. 716: */ 717: 718: CHAR 719: yl185[] = { /* ISO 8859-1 Latin Alphabet 1 (Latin-1) to IBM Code Page 850 */ 720: /* 721: This is IBM's official invertible translation. Reference: IBM Character 722: Data Representation Architecture (CDRA), Level 1, Registry, SC09-1291-00 723: (1990), p.152. (Note: Latin-1 is IBM Code Page 00819.) Note the bizarre 724: rearrangement of C0 controls and DEL. 725: */ 726: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 727: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 728: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 729: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 730: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 731: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 732: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 733: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 734: 186, 205, 201, 187, 200, 188, 204, 185, 203, 202, 206, 223, 220, 219, 254, 242, 735: 179, 196, 218, 191, 192, 217, 195, 180, 194, 193, 197, 176, 177, 178, 213, 159, 736: 255, 173, 189, 156, 207, 190, 221, 245, 249, 184, 166, 174, 170, 240, 169, 238, 737: 248, 241, 253, 252, 239, 230, 244, 250, 247, 251, 167, 175, 172, 171, 243, 168, 738: 183, 181, 182, 199, 142, 143, 146, 128, 212, 144, 210, 211, 222, 214, 215, 216, 739: 209, 165, 227, 224, 226, 229, 153, 158, 157, 235, 233, 234, 154, 237, 232, 225, 740: 133, 160, 131, 198, 132, 134, 145, 135, 138, 130, 136, 137, 141, 161, 140, 139, 741: 208, 164, 149, 162, 147, 228, 148, 246, 155, 151, 163, 150, 129, 236, 231, 152 742: }; 743: 744: CHAR 745: y85l1[] = { /* IBM Code Page 850 to Latin-1 */ 746: /* 747: This is from IBM CDRA page 153. It is the inverse of yl185[]. 748: As of edit 183, this table is no longer pure CDRA. The translations 749: involving C0 controls have been removed. 750: */ 751: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 752: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 753: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 754: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 755: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 756: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 757: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 758: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 759: 199, 252, 233, 226, 228, 224, 229, 231, 234, 235, 232, 239, 238, 236, 196, 197, 760: 201, 230, 198, 244, 246, 242, 251, 249, 255, 214, 220, 248, 163, 216, 215, 159, 761: 225, 237, 243, 250, 241, 209, 170, 186, 191, 174, 172, 189, 188, 161, 171, 187, 762: 155, 156, 157, 144, 151, 193, 194, 192, 169, 135, 128, 131, 133, 162, 165, 147, 763: 148, 153, 152, 150, 145, 154, 227, 195, 132, 130, 137, 136, 134, 129, 138, 164, 764: 240, 208, 202, 203, 200, 158, 205, 206, 207, 149, 146, 141, 140, 166, 204, 139, 765: 211, 223, 212, 210, 245, 213, 181, 254, 222, 218, 219, 217, 253, 221, 175, 180, 766: 173, 177, 143, 190, 182, 167, 247, 184, 176, 168, 183, 185, 179, 178, 142, 160 767: }; 768: 769: CHAR 770: yl143[] = { /* Latin-1 to IBM Code Page 437 */ 771: /* 772: Although the IBM CDRA does not include an official translation between CP437 773: and ISO Latin Alphabet 1, it does include an official, invertible 774: translation between CP437 and CP850 (page 196), and another from CP850 to 775: Latin-1 (CP819) (page 153). This translation was obtained with a two-step 776: process based on those tables. 777: As of edit 183, the translation is modified to leave C0 controls alone. 778: */ 779: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 780: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 781: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 782: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 783: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 784: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 785: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 786: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 787: 186, 205, 201, 187, 200, 188, 204, 185, 203, 202, 206, 223, 220, 219, 254, 242, 788: 179, 196, 218, 191, 192, 217, 195, 180, 194, 193, 197, 176, 177, 178, 213, 159, 789: 255, 173, 155, 156, 207, 157, 221, 245, 249, 184, 166, 174, 170, 240, 169, 238, 790: 248, 241, 253, 252, 239, 230, 244, 250, 247, 251, 167, 175, 172, 171, 243, 168, 791: 183, 181, 182, 199, 142, 143, 146, 128, 212, 144, 210, 211, 222, 214, 215, 216, 792: 209, 165, 227, 224, 226, 229, 153, 158, 190, 235, 233, 234, 154, 237, 232, 225, 793: 133, 160, 131, 198, 132, 134, 145, 135, 138, 130, 136, 137, 141, 161, 140, 139, 794: 208, 164, 149, 162, 147, 228, 148, 246, 189, 151, 163, 150, 129, 236, 231, 152 795: }; 796: 797: CHAR 798: y43l1[] = { /* IBM Code Page 437 to Latin-1 */ 799: /* 800: This table is the inverse of yl143[]. 801: */ 802: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 803: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 804: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 805: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 806: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 807: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 808: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 809: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 810: 199, 252, 233, 226, 228, 224, 229, 231, 234, 235, 232, 239, 238, 236, 196, 197, 811: 201, 230, 198, 244, 246, 242, 251, 249, 255, 214, 220, 162, 163, 165, 215, 159, 812: 225, 237, 243, 250, 241, 209, 170, 186, 191, 174, 172, 189, 188, 161, 171, 187, 813: 155, 156, 157, 144, 151, 193, 194, 192, 169, 135, 128, 131, 133, 248, 216, 147, 814: 148, 153, 152, 150, 145, 154, 227, 195, 132, 130, 137, 136, 134, 129, 138, 164, 815: 240, 208, 202, 203, 200, 158, 205, 206, 207, 149, 146, 141, 140, 166, 204, 139, 816: 211, 223, 212, 210, 245, 213, 181, 254, 222, 218, 219, 217, 253, 221, 175, 180, 817: 173, 177, 143, 190, 182, 167, 247, 184, 176, 168, 183, 185, 179, 178, 142, 160 818: }; 819: 820: CHAR 821: yl1aq[] = { /* Latin-1 to Extended Mac Latin (based on Apple QuickDraw) */ 822: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 823: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 824: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 825: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 826: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 827: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 828: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 829: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 830: 182, 183, 184, 185, 189, 196, 197, 198, 206, 207, 210, 211, 217, 218, 195, 212, 831: 209, 215, 213, 226, 227, 228, 240, 245, 246, 247, 249, 250, 251, 253, 254, 255, 832: 202, 193, 162, 163, 219, 180, 201, 164, 172, 169, 187, 199, 194, 208, 168, 248, 833: 161, 177, 170, 173, 171, 181, 166, 225, 252, 176, 188, 200, 178, 179, 186, 192, 834: 203, 231, 229, 204, 128, 129, 174, 130, 233, 131, 230, 232, 237, 234, 235, 236, 835: 220, 132, 241, 238, 239, 205, 133, 165, 175, 244, 242, 243, 134, 160, 222, 167, 836: 136, 135, 137, 139, 138, 140, 190, 141, 143, 142, 144, 145, 147, 146, 148, 149, 837: 221, 150, 152, 151, 153, 155, 154, 214, 191, 157, 156, 158, 159, 224, 223, 216 838: }; 839: 840: CHAR 841: yl1du[] = { /* Latin-1 to Dutch ISO 646 */ 842: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 843: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 844: 32, 33, 34, UNK, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 845: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 846: UNK, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 847: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, UNK, UNK, UNK, 94, 95, 848: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 849: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, 39, 127, 850: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 851: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 852: 32, 33, UNK, 35, 124, UNK, UNK, 93, 123, 67, UNK, 34, UNK, 45, 82, UNK, 853: 91, UNK, UNK, UNK, 126, 117, UNK, UNK, 44, UNK, UNK, 34, 125, 92, 64, 63, 854: 65, 65, 65, 65, 91, 65, 65, 67, 69, 69, 69, 69, 73, 73, 73, 73, 855: UNK, 78, 79, 79, 79, 79, 79, 120, 79, 85, 85, 85, 85, 89, UNK, 115, 856: 97, 97, 97, 97, 97, 97, 97, 99, 101, 101, 101, 101, 105, 105, 105, 105, 857: UNK, 110, 111, 111, 111, 111, 111, 47, 111, 117, 117, 117, 117, 121, UNK, 91 858: }; 859: 860: CHAR 861: yl1fi[] = { /* Latin-1 to Finnish ISO 646 */ 862: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 863: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 864: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 865: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 866: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 867: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, UNK, UNK, UNK, UNK, 95, 868: UNK, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 869: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, UNK, UNK, 870: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 871: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 872: 32, 33, UNK, UNK, UNK, UNK, UNK, UNK, 34, 67, UNK, 34, UNK, 45, 82, UNK, 873: UNK, UNK, UNK, UNK, 39, 117, UNK, UNK, 44, UNK, UNK, 34, UNK, UNK, UNK, 63, 874: 65, 65, 65, 65, 91, 93, 65, 67, 69, 69, 69, 69, 73, 73, 73, 73, 875: UNK, 78, 79, 79, 79, 79, 92, 120, 79, 85, 85, 85, 94, 89, UNK, 115, 876: 97, 97, 97, 97, 123, 125, 97, 99, 101, 96, 101, 101, 105, 105, 105, 105, 877: UNK, 110, 111, 111, 111, 111, 124, 47, 111, 117, 117, 117, 126, 121, UNK, 121 878: }; 879: 880: CHAR 881: yl1fr[] = { /* Latin-1 to French ISO 646 */ 882: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 883: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 884: 32, 33, 34, UNK, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 885: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 886: UNK, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 887: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, UNK, UNK, UNK, 94, 95, 888: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 889: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, UNK, 127, 890: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 891: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 892: 32, 33, UNK, 35, UNK, UNK, UNK, 93, 34, 67, UNK, 34, UNK, 45, 82, UNK, 893: 91, UNK, UNK, UNK, 39, 117, UNK, UNK, 44, UNK, UNK, 34, UNK, UNK, UNK, 63, 894: 65, 65, 65, 65, 65, 65, 65, 67, 69, 69, 69, 69, 73, 73, 73, 73, 895: UNK, 78, 79, 79, 79, 79, 79, 120, 79, 85, 85, 85, 85, 89, UNK, 115, 896: 64, 97, 97, 97, 97, 97, 97, 92, 125, 123, 101, 101, 105, 105, 105, 105, 897: UNK, 110, 111, 111, 111, 111, 111, 47, 111, 124, 117, 117, 117, 121, UNK, 121 898: }; 899: 900: CHAR 901: yl1fc[] = { /* Latin-1 to French-Canadian ISO 646 */ 902: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 903: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 904: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 905: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 906: UNK, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 907: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, UNK, UNK, UNK, UNK, 95, 908: UNK, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 909: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, UNK, 127, 910: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 911: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 912: 32, 33, UNK, UNK, UNK, UNK, UNK, UNK, 34, 67, UNK, 34, UNK, 45, 82, UNK, 913: UNK, UNK, UNK, UNK, 39, 117, UNK, UNK, 44, UNK, UNK, 34, UNK, UNK, UNK, 63, 914: 65, 65, 65, 65, 65, 65, 65, 67, 69, 69, 69, 69, 73, 73, 73, 73, 915: UNK, 78, 79, 79, 79, 79, 79, 120, 79, 85, 85, 85, 85, 89, UNK, 115, 916: 64, 97, 91, 97, 97, 97, 97, 92, 125, 123, 93, 101, 105, 105, 94, 105, 917: UNK, 110, 111, 111, 96, 111, 111, 47, 111, 124, 117, 126, 117, 121, UNK, 121 918: }; 919: 920: CHAR 921: yl1ge[] = { /* Latin-1 to German ISO 646 */ 922: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 923: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 924: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 925: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 926: UNK, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 927: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, UNK, UNK, UNK, 94, 95, 928: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 929: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, UNK, 127, 930: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 931: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 932: 32, 33, UNK, UNK, UNK, UNK, UNK, 64, 34, 67, UNK, 34, UNK, 45, 82, UNK, 933: UNK, UNK, UNK, UNK, 39, 117, UNK, UNK, 44, UNK, UNK, 34, UNK, UNK, UNK, 63, 934: 65, 65, 65, 65, 91, 65, 65, 67, 69, 69, 69, 69, 73, 73, 73, 73, 935: UNK, 78, 79, 79, 79, 79, 92, 120, 79, 85, 85, 85, 93, 89, UNK, 126, 936: 97, 97, 97, 97, 123, 97, 97, 99, 101, 101, 101, 101, 105, 105, 105, 105, 937: UNK, 110, 111, 111, 111, 111, 124, 47, 111, 117, 117, 117, 125, 121, UNK, 121 938: }; 939: 940: CHAR 941: yl1hu[] = { /* Latin-1 to Hungarian ISO-646 */ 942: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 943: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 944: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 945: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 946: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 947: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 948: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 949: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 950: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 951: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 952: 32, 33, UNK, UNK, 36, UNK, UNK, UNK, 34, 67, UNK, 34, UNK, 45, 82, UNK, 953: UNK, 64, UNK, UNK, 39, 117, UNK, UNK, 44, UNK, UNK, 34, UNK, UNK, UNK, 63, 954: 65, 65, 65, 65, 65, 65, 65, 67, 69, 91, 69, 69, 73, 73, 73, 73, 955: UNK, 78, 79, 79, 79, 79, 92, 120, 79, 85, 85, 85, 93, 89, UNK, 115, 956: 97, 96, 97, 97, 97, 97, 97, 99, 101, 123, 101, 101, 105, 105, 105, 105, 957: UNK, 110, 111, 111, 111, 111, 124, 47, 111, 117, 117, 117, 125, 121, UNK, 121 958: }; 959: 960: CHAR 961: yl1it[] = { /* Latin-1 to Italian ISO 646 */ 962: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 963: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 964: 32, 33, 34, UNK, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 965: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 966: UNK, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 967: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, UNK, UNK, UNK, 94, 95, 968: UNK, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 969: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, UNK, 127, 970: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 971: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 972: 32, 33, UNK, 35, UNK, UNK, UNK, 64, 34, 67, UNK, 34, UNK, 45, 82, UNK, 973: 91, UNK, UNK, UNK, 39, 117, UNK, UNK, 44, UNK, UNK, 34, UNK, UNK, UNK, 63, 974: 65, 65, 65, 65, 65, 65, 65, 67, 69, 69, 69, 69, 73, 73, 73, 73, 975: UNK, 78, 79, 79, 79, 79, 79, 120, 79, 85, 85, 85, 85, 89, UNK, 115, 976: 123, 97, 97, 97, 97, 97, 97, 92, 125, 93, 101, 101, 126, 105, 105, 105, 977: UNK, 110, 124, 111, 111, 111, 111, 47, 111, 96, 117, 117, 117, 121, UNK, 121 978: }; 979: 980: CHAR 981: yl1ne[] = { /* Latin-1 to NeXT */ 982: /* NEED TO MAKE THIS ONE INVERTIBLE, LIKE CP850 */ 983: /* 984: Which means finding all the graphic characters in the NeXT set that have 985: no equivalent in Latin-1 and assigning them to the UNK positions (mostly 986: Latin-1 C1 controls). Then make the ynel1[] table be the inverse of this 987: one. But first we should try to get an official Latin-1/NeXT translation 988: table from NeXT, Inc. 989: */ 990: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 991: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 992: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 993: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 994: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 995: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 996: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 997: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 998: UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, 999: UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, 1000: 32, 161, 162, 163, 168, 165, 181, 167, 200, 160, 227, 171, 190, UNK, 176, 197, 1001: 202, 209, 201, 204, 194, 157, 182, 183, 203, 192, 235, 187, 210, 211, 212, 191, 1002: 129, 130, 131, 132, 133, 134, 225, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1003: 144, 145, 146, 147, 148, 149, 150, 158, 233, 151, 152, 153, 154, 155, 156, 251, 1004: 213, 214, 215, 216, 217, 218, 241, 219, 220, 221, 222, 223, 224, 226, 228, 229, 1005: 230, 231, 236, 237, 238, 239, 240, 159, 249, 242, 243, 244, 246, 247, 252, 253 1006: }; 1007: 1008: CHAR 1009: yl1no[] = { /* Latin-1 to Norwegian/Danish ISO 646 */ 1010: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1011: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1012: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1013: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1014: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1015: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, UNK, UNK, UNK, 94, 95, 1016: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1017: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, 126, 127, 1018: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1019: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1020: 32, 33, UNK, UNK, UNK, UNK, UNK, UNK, 34, 67, UNK, 34, UNK, 45, 82, UNK, 1021: UNK, UNK, UNK, UNK, 39, 117, UNK, UNK, 44, UNK, UNK, 34, UNK, UNK, UNK, 63, 1022: 65, 65, 65, 65, 65, 93, 91, 67, 69, 69, 69, 69, 73, 73, 73, 73, 1023: UNK, 78, 79, 79, 79, 79, 79, 120, 92, 85, 85, 85, 85, 89, UNK, 115, 1024: 97, 97, 97, 97, 97, 125, 123, 99, 101, 101, 101, 101, 105, 105, 105, 105, 1025: UNK, 110, 111, 111, 111, 111, 111, 47, 124, 117, 117, 117, 117, 121, UNK, 121 1026: }; 1027: 1028: CHAR 1029: yl1po[] = { /* Latin-1 to Portuguese ISO 646 */ 1030: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1031: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1032: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1033: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1034: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1035: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, UNK, UNK, UNK, 94, 95, 1036: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1037: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, 126, 127, 1038: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1039: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1040: 32, 33, UNK, UNK, UNK, UNK, UNK, UNK, 34, 67, UNK, 34, UNK, 45, 82, UNK, 1041: UNK, UNK, UNK, UNK, 39, 117, UNK, UNK, 44, UNK, UNK, 34, UNK, UNK, UNK, 63, 1042: 65, 65, 65, 91, 65, 65, 65, 92, 69, 69, 69, 69, 73, 73, 73, 73, 1043: UNK, 78, 79, 79, 79, 93, 79, 120, 79, 85, 85, 85, 85, 89, UNK, 115, 1044: 97, 97, 97, 123, 97, 97, 97, 124, 101, 101, 101, 101, 105, 105, 105, 105, 1045: UNK, 110, 111, 111, 111, 125, 111, 47, 111, 117, 117, 117, 117, 121, UNK, 121 1046: }; 1047: 1048: CHAR 1049: yl1sp[] = { /* Latin-1 to Spanish ISO 646 */ 1050: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1051: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1052: 32, 33, 34, UNK, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1053: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1054: UNK, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1055: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, UNK, UNK, UNK, 94, 95, 1056: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1057: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 96, UNK, UNK, 126, 127, 1058: 126, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1059: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1060: 32, 91, UNK, 35, UNK, UNK, UNK, 64, 34, 67, UNK, 34, UNK, 45, 82, UNK, 1061: 123, UNK, UNK, UNK, 39, 117, UNK, UNK, 44, UNK, UNK, 34, UNK, UNK, UNK, 93, 1062: 65, 65, 65, 65, 65, 65, 65, 67, 69, 69, 69, 69, 73, 73, 73, 73, 1063: UNK, 92, 79, 79, 79, 79, 79, 120, 79, 85, 85, 85, 85, 89, UNK, 115, 1064: 124, 97, 97, 97, 97, 97, 97, 125, 101, 101, 101, 101, 105, 105, 105, 105, 1065: UNK, 124, 111, 111, 111, 111, 111, 47, 111, 117, 117, 117, 117, 121, UNK, 121 1066: }; 1067: 1068: CHAR 1069: yl1sw[] = { /* Latin-1 to Swedish ISO 646 */ 1070: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1071: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1072: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1073: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1074: UNK, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1075: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, UNK, UNK, UNK, UNK, 95, 1076: UNK, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1077: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, UNK, 127, 1078: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1079: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1080: 32, 33, UNK, UNK, UNK, UNK, UNK, UNK, 34, 67, UNK, 34, UNK, 45, 82, UNK, 1081: UNK, UNK, UNK, UNK, 39, 117, UNK, UNK, 44, UNK, UNK, 34, UNK, UNK, UNK, 63, 1082: 65, 65, 65, 65, 91, 93, 65, 67, 69, 64, 69, 69, 73, 73, 73, 73, 1083: UNK, 78, 79, 79, 79, 79, 92, 120, 79, 85, 85, 85, 94, 89, UNK, 115, 1084: 97, 97, 97, 97, 123, 125, 97, 99, 101, 96, 101, 101, 105, 105, 105, 105, 1085: UNK, 110, 111, 111, 111, 111, 124, 47, 111, 117, 117, 117, 126, 121, UNK, 121 1086: }; 1087: 1088: CHAR 1089: yl1ch[] = { /* Latin-1 to Swiss ISO 646 */ 1090: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1091: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1092: 32, 33, 34, UNK, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1093: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1094: UNK, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1095: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, UNK, UNK, UNK, UNK, UNK, 1096: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1097: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, UNK, 127, 1098: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1099: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1100: 32, 33, UNK, UNK, UNK, UNK, UNK, UNK, 34, 67, UNK, 34, UNK, 45, 82, UNK, 1101: UNK, UNK, UNK, UNK, 39, 117, UNK, UNK, 44, UNK, UNK, 34, UNK, UNK, UNK, 63, 1102: 65, 65, 65, 65, 65, 65, 65, 67, 69, 69, 69, 69, 73, 73, 73, 73, 1103: UNK, 78, 79, 79, 79, 79, 79, 120, 79, 85, 85, 85, 85, 89, UNK, 115, 1104: 64, 97, 97, 97, 123, 97, 97, 92, 95, 91, 93, 101, 105, 105, 94, 105, 1105: UNK, 110, 111, 111, 96, 111, 124, 47, 111, 35, 117, 126, 125, 121, UNK, 121 1106: }; 1107: 1108: CHAR 1109: yl1dm[] = { /* Latin-1 to DEC Multinational Character Set */ 1110: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1111: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1112: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1113: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1114: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1115: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1116: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1117: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1118: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1119: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1120: 32, 161, 162, 163, 168, 165, 124, 167, 34, 169, 170, 171, 126, UNK, 82, UNK, 1121: 176, 177, 178, 179, 39, 181, 182, 183, 44, 185, 186, 187, 188, 189, UNK, 191, 1122: 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 1123: UNK, 209, 210, 211, 212, 213, 214, 120, 216, 217, 218, 219, 220, 221, UNK, 223, 1124: 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 1125: UNK, 241, 242, 243, 244, 245, 246, 47, 248, 249, 250, 251, 252, UNK, UNK, 253 1126: }; 1127: 1128: CHAR 1129: yl1dg[] = { /* Latin-1 to Data General International Character Set */ 1130: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1131: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1132: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1133: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1134: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1135: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1136: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1137: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1138: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1139: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1140: 160, 171, 167, 168, 166, 181, 191, 187, 189, 173, 169, 177, 161, 255, 174, 175, 1141: 188, 182, 164, 165, 190, 163, 178, 185, 186, 179, 170, 176, 223, 162, 220, 172, 1142: 193, 192, 194, 196, 195, 197, 198, 199, 201, 200, 202, 203, 205, 204, 206, 207, 1143: 184, 208, 210, 209, 211, 213, 212, 215, 214, 217, 216, 218, 219, 221, 222, 252, 1144: 225, 224, 226, 228, 227, 229, 230, 231, 233, 232, 234, 235, 237, 236, 238, 239, 1145: 183, 240, 242, 241, 243, 245, 244, 247, 246, 249, 248, 250, 251, 180, 254, 253 1146: }; 1147: 1148: 1149: /* Local file character sets to ISO Latin Alphabet 1 */ 1150: 1151: #ifdef NOTUSED 1152: CHAR 1153: yasl1[] = { /* ASCII to Latin-1 */ 1154: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1155: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1156: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1157: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1158: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1159: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1160: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1161: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127 1162: }; 1163: #endif /* NOTUSED */ 1164: 1165: CHAR 1166: yaql1[] = { /* Extended Mac Latin (based on Apple Quickdraw) to Latin-1 */ 1167: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1168: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1169: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1170: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1171: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1172: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1173: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1174: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1175: 196, 197, 199, 201, 209, 214, 220, 225, 224, 226, 228, 227, 229, 231, 233, 232, 1176: 234, 235, 237, 236, 238, 239, 241, 243, 242, 244, 246, 245, 250, 249, 251, 252, 1177: 221, 176, 162, 163, 167, 215, 182, 223, 174, 169, 178, 180, 168, 179, 198, 216, 1178: 185, 177, 188, 189, 165, 181, 128, 129, 130, 131, 190, 170, 186, 132, 230, 248, 1179: 191, 161, 172, 142, 133, 134, 135, 171, 187, 166, 160, 192, 195, 213, 136, 137, 1180: 173, 144, 138, 139, 143, 146, 247, 145, 255, 140, 141, 164, 208, 240, 222, 254, 1181: 253, 183, 147, 148, 149, 194, 202, 193, 203, 200, 205, 206, 207, 204, 211, 212, 1182: 150, 210, 218, 219, 217, 151, 152, 153, 175, 154, 155, 156, 184, 157, 158, 159 1183: }; 1184: 1185: CHAR 1186: ydul1[] = { /* Dutch ISO 646 to Latin-1 */ 1187: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1188: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1189: 32, 33, 34, 163, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1190: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1191: 190, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1192: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 255, 189, 124, 94, 95, 1193: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1194: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 168, 164, 188, 39, 127 1195: }; 1196: 1197: CHAR 1198: yfil1[] = { /* Finnish ISO 646 to Latin-1 */ 1199: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1200: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1201: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1202: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1203: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1204: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 196, 214, 197, 220, 95, 1205: 233, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1206: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 228, 246, 229, 252, 127 1207: }; 1208: 1209: CHAR 1210: yfrl1[] = { /* French ISO 646 to Latin-1 */ 1211: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1212: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1213: 32, 33, 34, 163, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1214: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1215: 224, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1216: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 176, 231, 167, 94, 95, 1217: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1218: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 233, 249, 232, 168, 127 1219: }; 1220: 1221: CHAR 1222: yfcl1[] = { /* French-Canadian ISO 646 to Latin-1 */ 1223: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1224: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1225: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1226: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1227: 224, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1228: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 226, 231, 234, 238, 95, 1229: 244, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1230: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 233, 249, 232, 251, 127 1231: }; 1232: 1233: CHAR 1234: ygel1[] = { /* German ISO 646 to Latin-1 */ 1235: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1236: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1237: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1238: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1239: 167, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1240: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 196, 214, 220, 94, 95, 1241: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1242: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 228, 246, 252, 223, 127 1243: }; 1244: 1245: CHAR 1246: yitl1[] = { /* Italian ISO 646 to Latin-1 */ 1247: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1248: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1249: 32, 33, 34, 163, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1250: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1251: 167, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1252: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 176, 231, 233, 94, 95, 1253: 249, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1254: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 224, 242, 232, 236, 127 1255: }; 1256: 1257: CHAR 1258: ynel1[] = { /* NeXT to Latin-1 */ 1259: /* NEED TO MAKE THIS ONE INVERTIBLE */ 1260: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1261: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1262: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1263: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1264: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1265: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1266: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1267: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1268: 160, 192, 193, 194, 195, 196, 197, 199, 200, 201, 202, 203, 204, 205, 206, 207, 1269: 208, 209, 210, 211, 212, 213, 214, 217, 218, 219, 220, 221, 222, 181, 215, 247, 1270: 169, 161, 162, 163, UNK, 165, UNK, 167, 164, UNK, UNK, 171, UNK, UNK, UNK, UNK, 1271: 174, UNK, UNK, UNK, 183, 166, 182, UNK, UNK, UNK, UNK, 187, UNK, UNK, 172, 191, 1272: 185, 96, 180, 94, 126, 175, UNK, UNK, 168, 178, 176, 184, 179, UNK, UNK, UNK, 1273: UNK, 177, 188, 189, 190, 224, 225, 226, 227, 228, 229, 231, 232, 233, 234, 235, 1274: 236, 198, 237, 170, 238, 239, 240, 241, UNK, 216, UNK, 186, 242, 243, 244, 245, 1275: 246, 230, 249, 250, 251, UNK, 252, 253, UNK, 248, UNK, 223, 254, 255, UNK, UNK 1276: }; 1277: 1278: CHAR 1279: ynol1[] = { /* Norwegian/Danish ISO 646 to Latin-1 */ 1280: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1281: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1282: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1283: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1284: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1285: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 198, 216, 197, 94, 95, 1286: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1287: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 230, 248, 229, 126, 127 1288: }; 1289: 1290: CHAR 1291: ypol1[] = { /* Portuguese ISO 646 to Latin-1 */ 1292: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1293: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1294: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1295: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1296: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1297: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 195, 199, 213, 94, 95, 1298: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1299: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 227, 231, 245, 126, 127 1300: }; 1301: 1302: CHAR 1303: yspl1[] = { /* Spanish ISO 646 to Latin-1 */ 1304: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1305: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1306: 32, 33, 34, 163, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1307: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1308: 167, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1309: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 161, 209, 191, 94, 95, 1310: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1311: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 176, 241, 231, 126, 127 1312: }; 1313: 1314: CHAR 1315: yswl1[] = { /* Swedish ISO 646 to Latin-1 */ 1316: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1317: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1318: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1319: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1320: 201, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1321: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 196, 214, 197, 220, 95, 1322: 233, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1323: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 228, 246, 229, 252, 127 1324: }; 1325: 1326: CHAR 1327: ychl1[] = { /* Swiss ISO 646 to Latin-1 */ 1328: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1329: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1330: 32, 33, 34, 249, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1331: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1332: 224, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1333: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 233, 231, 234, 238, 232, 1334: 244, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1335: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 228, 246, 252, 251, 127 1336: }; 1337: 1338: CHAR 1339: yhul1[] = { /* Hungarian ISO 646 to Latin-1 */ 1340: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1341: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1342: 32, 33, 34, 35, 164, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1343: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1344: 193, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1345: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 201, 214, 220, 94, 95, 1346: 225, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1347: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 233, 246, 252, 34, 127 1348: }; 1349: 1350: CHAR 1351: ydml1[] = { /* DEC Multinational Character Set to Latin-1 */ 1352: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1353: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1354: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1355: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1356: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1357: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1358: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1359: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1360: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1361: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1362: 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 1363: 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 1364: 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 1365: 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 1366: 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 1367: 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 1368: }; 1369: 1370: CHAR 1371: ydgl1[] = { /* Data General International to Latin-1 */ 1372: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1373: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1374: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1375: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1376: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1377: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1378: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1379: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1380: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1381: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1382: 160, 172, 189, 181, 178, 179, 164, 162, 163, 170, 186, 161, 191, 169, 174, 175, 1383: 187, 171, 182, 185, 253, 165, 177, 240, 208, 183, 184, 167, 176, 168, 180, 166, 1384: 193, 192, 194, 196, 195, 197, 198, 199, 201, 200, 202, 203, 205, 204, 206, 207, 1385: 209, 211, 210, 212, 214, 213, 216, 215, 218, 217, 219, 220, 190, 221, 222, 188, 1386: 225, 224, 226, 228, 227, 229, 230, 231, 233, 232, 234, 235, 237, 236, 238, 239, 1387: 241, 243, 242, 244, 246, 245, 248, 247, 250, 249, 251, 252, 223, 255, 254, 173 1388: }; 1389: 1390: 1391: /* Translation tables for Cyrillic character sets */ 1392: 1393: #ifdef CYRILLIC 1394: CHAR 1395: ylcac[] = { /* Latin/Cyrillic to CP866 */ 1396: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1397: 16, 17, 18, 19, 208, 209, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1398: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1399: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1400: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1401: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1402: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1403: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1404: 196, 179, 192, 217, 191, 218, 195, 193, 180, 194, 197, 176, 177, 178, 211, 216, 1405: 205, 186, 200, 188, 187, 201, 204, 202, 185, 203, 206, 223, 220, 219, 254, UNK, 1406: 255, 240, 132, 131, 242, 83, 73, 244, 74, 139, 141, 151, 138, 45, 246, 135, 1407: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1408: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1409: 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 1410: 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 1411: 252, 241, 164, 163, 243, 115, 105, 245, 106, 171, 173, 231, 170, 21, 247, 167 1412: }; 1413: 1414: CHAR 1415: ylck8[] = { /* Latin/Cyrillic to Old KOI-8 Cyrillic */ 1416: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1417: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1418: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1419: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1420: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1421: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1422: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1423: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1424: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1425: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1426: UNK, 229, UNK, UNK, UNK, 83, 73, 73, 74, UNK, UNK, UNK, 235, UNK, 245, UNK, 1427: 225, 226, 247, 231, 228, 229, 246, 250, 233, 234, 235, 236, 237, 238, 239, 240, 1428: 242, 243, 244, 245, 230, 232, 227, 254, 251, 253, 255, 249, 248, 252, 224, 241, 1429: 193, 194, 215, 199, 196, 197, 214, 218, 201, 202, 203, 204, 205, 206, 207, 208, 1430: 210, 211, 212, 213, 198, 200, 195, 222, 219, 221, 223, 217, 216, 220, 192, 209, 1431: UNK, 197, UNK, UNK, UNK, 115, 105, 105, 106, UNK, UNK, UNK, 203, UNK, 213, UNK 1432: }; 1433: 1434: CHAR 1435: yaclc[] = { /* CP866 to Latin/Cyrillic */ 1436: /* NEED TO MAKE THIS ONE INVERTIBLE */ 1437: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1438: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1439: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1440: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1441: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1442: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1443: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1444: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1445: 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 1446: 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 1447: 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 1448: UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, 1449: UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, 1450: UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, 1451: 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 1452: 161, 241, 164, 244, 167, 247, 174, 254, UNK, UNK, UNK, UNK, 240, UNK, UNK, UNK 1453: }; 1454: 1455: CHAR 1456: yk8lc[] = { /* Old KOI-8 Cyrillic to Latin/Cyrillic */ 1457: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1458: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1459: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1460: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1461: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1462: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1463: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1464: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1465: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1466: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1467: UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, 1468: UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, 1469: 238, 208, 209, 230, 212, 213, 228, 211, 229, 216, 217, 218, 219, 220, 221, 222, 1470: 223, 239, 224, 225, 226, 227, 214, 210, 236, 235, 215, 232, 237, 233, 231, 234, 1471: 206, 176, 177, 198, 180, 181, 196, 179, 197, 184, 185, 186, 187, 188, 189, 190, 1472: 191, 207, 192, 193, 194, 195, 182, 178, 204, 203, 183, 200, 205, 201, 199, 127 1473: }; 1474: 1475: CHAR 1476: ylcsk[] = { /* Latin/Cyrillic to Short KOI */ 1477: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1478: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1479: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1480: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1481: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1482: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1483: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1484: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 127, 1485: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1486: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1487: 32, 101, UNK, UNK, UNK, 83, 73, 73, 74, UNK, UNK, UNK, 107, 45, 117, UNK, 1488: 97, 98, 119, 103, 100, 101, 118, 122, 105, 106, 107, 108, 109, 110, 111, 112, 1489: 114, 115, 116, 117, 102, 104, 99, 126, 123, 125, 39, 121, 120, 124, 96, 113, 1490: 97, 98, 119, 103, 100, 101, 118, 122, 105, 106, 107, 108, 109, 110, 111, 112, 1491: 114, 115, 116, 117, 102, 104, 99, 126, 123, 125, 39, 121, 120, 124, 96, 113, 1492: UNK, 101, UNK, UNK, UNK, 83, 73, 73, 74, UNK, UNK, UNK, 107, UNK, 117, UNK 1493: }; 1494: 1495: CHAR yskcy[] = { /* Short KOI to Latin/Cyrillic */ 1496: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1497: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1498: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1499: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1500: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1501: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1502: 206, 176, 177, 198, 180, 181, 196, 179, 197, 184, 185, 186, 187, 188, 189, 190, 1503: 191, 207, 192, 193, 194, 195, 182, 178, 204, 203, 183, 200, 205, 201, 199, 127 1504: }; 1505: #endif /* CYRILLIC */ 1506: 1507: #ifdef LATIN2 1508: 1509: /* Latin-2 tables */ 1510: 1511: CHAR 1512: yl252[] = { /* Latin-2 to Code Page 852 */ 1513: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1514: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1515: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1516: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1517: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1518: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1519: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1520: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1521: 174, 175, 176, 177, 178, 179, 180, 185, 186, 187, 188, 191, 192, 193, 194, 195, 1522: 196, 197, 200, 201, 202, 203, 204, 205, 206, 217, 218, 219, 220, 223, 240, 254, 1523: 255, 164, 244, 157, 207, 149, 151, 245, 249, 230, 184, 155, 141, 170, 166, 189, 1524: 248, 165, 242, 136, 239, 150, 152, 243, 247, 231, 173, 156, 171, 241, 167, 190, 1525: 232, 181, 182, 198, 142, 145, 143, 128, 172, 144, 168, 211, 183, 214, 215, 210, 1526: 209, 227, 213, 224, 226, 138, 153, 158, 252, 222, 233, 235, 154, 237, 221, 225, 1527: 234, 160, 131, 199, 132, 146, 134, 135, 159, 130, 169, 137, 216, 161, 140, 212, 1528: 208, 228, 229, 162, 147, 139, 148, 246, 253, 133, 163, 251, 129, 236, 238, 250 1529: }; 1530: 1531: CHAR 1532: y52l2[] = { /* Code Page 852 to Latin-2 */ 1533: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1534: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1535: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1536: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1537: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1538: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1539: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1540: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1541: 199, 252, 233, 226, 228, 249, 230, 231, 179, 235, 213, 245, 238, 172, 196, 198, 1542: 201, 197, 229, 244, 246, 165, 181, 166, 182, 214, 220, 171, 187, 163, 215, 232, 1543: 225, 237, 243, 250, 161, 177, 174, 190, 202, 234, 173, 188, 200, 186, 128, 129, 1544: 130, 131, 132, 133, 134, 193, 194, 204, 170, 135, 136, 137, 138, 175, 191, 139, 1545: 140, 141, 142, 143, 144, 145, 195, 227, 146, 147, 148, 149, 150, 151, 152, 164, 1546: 240, 208, 207, 203, 239, 210, 205, 206, 236, 153, 154, 155, 156, 222, 217, 157, 1547: 211, 223, 212, 209, 241, 242, 169, 185, 192, 218, 224, 219, 253, 221, 254, 180, 1548: 158, 189, 178, 183, 162, 167, 247, 184, 176, 168, 255, 251, 216, 248, 159, 160 1549: }; 1550: 1551: CHAR 1552: yl2l1[] = { /* Latin-2 to Latin-1 */ 1553: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1554: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1555: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1556: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1557: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1558: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1559: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1560: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1561: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1562: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1563: 160, 'A', UNK, 'L', 164, 'L', 'S', 167, 168, 'S', 'S', 'T', 'Z', 173, 'Z', 'Z', 1564: 176, 'a', UNK, 'l', 180, 'l', 's', UNK, 184, 's', 's', 't', 'z', UNK, 'z', 'z', 1565: 'R', 193, 194, 'A', 196, 'L', 'C', 199, 'C', 201, 'E', 203, 'E', 205, 'I', 'D', 1566: 208, 'N', 'N', 211, 212, 'O', 214, 215, 'R', 'U', 218, 'U', 220, 221, 'T', 's', 1567: 'r', 225, 226, 'a', 228, 'l', 'c', 231, 'c', 233, 'e', 235, 'e', 237, 'i', 'd', 1568: 240, 'n', 'n', 243, 244, 'o', 246, 247, 'r', 'u', 250, 'u', 252, 253, 't', '.' 1569: }; 1570: 1571: CHAR 1572: yl1l2[] = { /* Latin-1 to Latin-2 */ 1573: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1574: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1575: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1576: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1577: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1578: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1579: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1580: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1581: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 1582: 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 1583: 160, 'A', UNK, 'L', 164, UNK, UNK, 167, 168, 'C', 'a', '<', '>', 173, 'R', UNK, 1584: 176, UNK, UNK, UNK, 180, UNK, UNK, UNK, 184, UNK, 'o', '>', UNK, UNK, UNK, UNK, 1585: 'A', 193, 194, 'A', 196, 'A', 'A', 199, 'E', 201, 'E', 203, 'I', 205, 'I', 'I', 1586: 208, 'N', 'O', 211, 212, 'O', 214, 215, 'O', 'U', 218, 'U', 220, 221, UNK, 223, 1587: 'a', 225, 226, 'a', 228, 'a', 'a', 231, 'e', 233, 'e', 235, 'i', 237, 'i', 'i', 1588: 240, 'n', 'o', 243, 244, 'o', 246, 247, 'o', 'u', 250, 'u', 252, 253, UNK, 'y' 1589: }; 1590: 1591: CHAR 1592: yl2as[] = { /* Latin-2 to ASCII */ 1593: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1594: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1595: 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1596: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1597: 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1598: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1599: 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 1600: 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 1601: UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, 1602: UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, UNK, 1603: 32, 'A', UNK, 'L', UNK, 'L', 'S', UNK, 34, 'S', 'S', 'T', 'Z', '-', 'Z', 'Z', 1604: UNK, 'a', UNK, 'l', 39, 'l', 's', UNK, 44, 's', 's', 't', 'z', UNK, 'z', 'z', 1605: 'R', 'A', 'A', 'A', 'A', 'L', 'C', 'C', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'D', 1606: 'D', 'N', 'N', 'O', 'O', 'O', 'O', 'x', 'R', 'U', 'U', 'U', 'U', 'Y', 'T', 's', 1607: 'r', 'a', 'a', 'a', 'a', 'l', 'c', 'c', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'd', 1608: 'd', 'n', 'n', 'o', 'o', 'o', 'o', '/', 'r', 'u', 'u', 'u', 'u', 'y', 't', '.' 1609: }; 1610: #endif /* LATIN2 */ 1611: 1612: /* Translation functions ... */ 1613: 1614: CHAR /* The identity translation function. */ 1615: #ifdef CK_ANSIC 1616: ident(CHAR c) /* (no longer used) */ 1617: #else 1618: ident(c) CHAR c; 1619: #endif /* CK_ANSIC */ 1620: { /* ident */ 1621: return(c); /* Instead, enter NULL in the */ 1622: } /* table of functions to avoid */ 1623: /* needless function calls. */ 1624: CHAR 1625: #ifdef CK_ANSIC 1626: xl1as(CHAR c) 1627: #else 1628: xl1as(c) CHAR c; 1629: #endif /* CK_ANSIC */ 1630: { /* xl1as */ /* Latin-1 to US ASCII... */ 1631: switch(langs[language].id) { 1632: 1633: case L_DUTCH: 1634: if (c == 255) { /* Dutch umlaut-y */ 1635: zmstuff('j'); /* becomes ij */ 1636: return('i'); 1637: } else return(yl1as[c]); /* all others by the book */ 1638: 1639: case L_GERMAN: 1640: switch (c) { /* German, special rules. */ 1641: case 196: /* umlaut-A -> Ae */ 1642: zmstuff('e'); 1643: return('A'); 1644: case 214: /* umlaut-O -> Oe */ 1645: zmstuff('e'); 1646: return('O'); 1647: case 220: /* umlaut-U -> Ue */ 1648: zmstuff('e'); 1649: return('U'); 1650: case 228: /* umlaut-a -> ae */ 1651: zmstuff('e'); 1652: return('a'); 1653: case 246: /* umlaut-o -> oe */ 1654: zmstuff('e'); 1655: return('o'); 1656: case 252: /* umlaut-u -> ue */ 1657: zmstuff('e'); 1658: return('u'); 1659: case 223: /* ess-zet -> ss */ 1660: zmstuff('s'); 1661: return('s'); 1662: default: return(yl1as[c]); /* all others by the book */ 1663: } 1664: case L_DANISH: 1665: case L_FINNISH: 1666: case L_NORWEGIAN: 1667: case L_SWEDISH: 1668: switch (c) { /* Scandanavian languages. */ 1669: case 196: /* umlaut-A -> Ae */ 1670: case 198: /* AE ligature also -> Ae */ 1671: zmstuff('e'); 1672: return('A'); 1673: case 214: /* umlaut-O -> Oe */ 1674: case 216: /* O-slash -> Oe */ 1675: zmstuff('e'); 1676: return('O'); 1677: case 220: /* umlaut-U -> Ue */ 1678: /* return('Y'); replaced by "Ue" by popular demand. */ 1679: /* Y for Umlaut-U is only used in German names. */ 1680: zmstuff('e'); 1681: return('U'); 1682: case 228: /* umlaut-a -> ae */ 1683: case 230: /* ditto for ae ligature */ 1684: zmstuff('e'); 1685: return('a'); 1686: case 246: /* umlaut-o -> oe */ 1687: case 248: /* o-slash -> oe */ 1688: zmstuff('e'); 1689: return('o'); 1690: case 252: /* umlaut-u -> ue */ 1691: /* return('y'); replaced by "ue" by popular demand. */ 1692: zmstuff('e'); 1693: return('u'); 1694: case 197: /* A-ring -> Aa */ 1695: zmstuff('a'); 1696: return('A'); 1697: case 229: /* a-ring -> aa */ 1698: zmstuff('a'); 1699: return('a'); 1700: default: return(yl1as[c]); /* All others by the book */ 1701: } 1702: case L_ICELANDIC: /* Icelandic. */ 1703: switch (c) { 1704: case 198: /* uppercase AE -> AE */ 1705: zmstuff('e'); 1706: return('A'); 1707: case 208: /* uppercase Eth -> D */ 1708: return('D'); 1709: case 214: /* uppercase O-diaeresis -> Oe */ 1710: zmstuff('e'); 1711: return('O'); 1712: case 222: /* uppercase Thorn -> Th */ 1713: zmstuff('h'); 1714: return('T'); 1715: case 230: /* lowercase ae -> ae */ 1716: zmstuff('e'); 1717: return('a'); 1718: case 240: /* lowercase Eth -> d */ 1719: return('d'); 1720: case 246: /* lowercase O-diaeresis -> oe */ 1721: zmstuff('e'); 1722: return('o'); 1723: case 254: /* lowercase Thorn -> th */ 1724: zmstuff('h'); 1725: return('t'); 1726: default: return(yl1as[c]); /* All others by the book */ 1727: } 1728: default: 1729: return(yl1as[c]); /* None of the above, by the table. */ 1730: } 1731: } 1732: 1733: CHAR /* Latin-1 to German */ 1734: #ifdef CK_ANSIC 1735: xl1ge(CHAR c) 1736: #else 1737: xl1ge(c) CHAR c; 1738: #endif /* CK_ANSIC */ 1739: { /* xl1ge */ 1740: return(yl1ge[c]); 1741: } 1742: 1743: CHAR /* German to Latin-1 */ 1744: #ifdef CK_ANSIC 1745: xgel1(CHAR c) 1746: #else 1747: xgel1(c) CHAR c; 1748: #endif /* CK_ANSIC */ 1749: { /* xgel1 */ 1750: return(ygel1[c]); 1751: } 1752: 1753: CHAR 1754: #ifdef CK_ANSIC 1755: xgeas(CHAR c) 1756: #else 1757: xgeas(c) CHAR c; 1758: #endif /* CK_ANSIC */ 1759: { /* xgeas */ /* German ISO 646 to ASCII */ 1760: switch (c) { 1761: case 91: /* umlaut-A -> Ae */ 1762: zmstuff('e'); 1763: return('A'); 1764: case 92: /* umlaut-O -> Oe */ 1765: zmstuff('e'); 1766: return('O'); 1767: case 93: /* umlaut-U -> Ue */ 1768: zmstuff('e'); 1769: return('U'); 1770: case 123: /* umlaut-a -> ae */ 1771: zmstuff('e'); 1772: return('a'); 1773: case 124: /* umlaut-o -> oe */ 1774: zmstuff('e'); 1775: return('o'); 1776: case 125: /* umlaut-u -> ue */ 1777: zmstuff('e'); 1778: return('u'); 1779: case 126: /* ess-zet -> ss */ 1780: zmstuff('s'); 1781: return('s'); 1782: default: return(c); /* all others stay the same */ 1783: } 1784: } 1785: 1786: CHAR 1787: #ifdef CK_ANSIC 1788: xduas(CHAR c) 1789: #else 1790: xduas(c) CHAR c; 1791: #endif /* CK_ANSIC */ 1792: { /* xduas */ /* Dutch ISO 646 to US ASCII */ 1793: switch (c) { 1794: case 64: return(UNK); /* 3/4 */ 1795: case 91: /* y-diaeresis */ 1796: zmstuff('j'); 1797: return('i'); 1798: case 92: return(UNK); /* 1/2 */ 1799: case 93: return(124); /* vertical bar */ 1800: case 123: return(34); /* diaeresis */ 1801: case 124: return(UNK); /* Florin */ 1802: case 125: return(UNK); /* 1/4 */ 1803: case 126: return(39); /* Apostrophe */ 1804: default: return(c); 1805: } 1806: } 1807: 1808: CHAR 1809: #ifdef CK_ANSIC 1810: xfias(CHAR c) 1811: #else 1812: xfias(c) CHAR c; 1813: #endif /* CK_ANSIC */ 1814: { /* xfias */ /* Finnish ISO 646 to US ASCII */ 1815: switch (c) { 1816: case 91: /* A-diaeresis */ 1817: zmstuff('e'); 1818: return('A'); 1819: case 92: /* O-diaeresis */ 1820: zmstuff('e'); 1821: return('O'); 1822: case 93: /* A-ring */ 1823: zmstuff('a'); 1824: return('A'); 1825: case 94: /* U-diaeresis */ 1826: /* return('Y'); */ 1827: zmstuff('e'); 1828: return('U'); 1829: case 96: /* e-acute */ 1830: return('e'); 1831: case 123: /* a-diaeresis */ 1832: zmstuff('e'); 1833: return('a'); 1834: case 124: /* o-diaeresis */ 1835: zmstuff('e'); 1836: return('o'); 1837: case 125: /* a-ring */ 1838: zmstuff('a'); 1839: return('a'); 1840: case 126: /* u-diaeresis */ 1841: /* return('y'); */ 1842: zmstuff('e'); 1843: return('U'); 1844: default: 1845: return(c); 1846: } 1847: } 1848: 1849: CHAR 1850: #ifdef CK_ANSIC 1851: xfras(CHAR c) 1852: #else 1853: xfras(c) CHAR c; 1854: #endif /* CK_ANSIC */ 1855: { /* xfras */ /* French ISO 646 to US ASCII */ 1856: switch (c) { 1857: case 64: return(97); /* a grave */ 1858: case 91: return(UNK); /* degree sign */ 1859: case 92: return(99); /* c cedilla */ 1860: case 93: return(UNK); /* paragraph sign */ 1861: case 123: return(101); /* e acute */ 1862: case 124: return(117); /* u grave */ 1863: case 125: return(101); /* e grave */ 1864: case 126: return(34); /* diaeresis */ 1865: default: return(c); 1866: } 1867: } 1868: 1869: CHAR 1870: #ifdef CK_ANSIC 1871: xfcas(CHAR c) 1872: #else 1873: xfcas(c) CHAR c; 1874: #endif /* CK_ANSIC */ 1875: { /* xfcas */ /* French Canadian ISO 646 to ASCII */ 1876: switch (c) { 1877: case 64: return('a'); /* a grave */ 1878: case 91: return('a'); /* a circumflex */ 1879: case 92: return('c'); /* c cedilla */ 1880: case 93: return('e'); /* e circumflex */ 1881: case 94: return('i'); /* i circumflex */ 1882: case 96: return('o'); /* o circumflex */ 1883: case 123: return('e'); /* e acute */ 1884: case 124: return('u'); /* u grave */ 1885: case 125: return('e'); /* e grave */ 1886: case 126: return('u'); /* u circumflex */ 1887: default: return(c); 1888: } 1889: } 1890: 1891: CHAR 1892: #ifdef CK_ANSIC 1893: xitas(CHAR c) 1894: #else 1895: xitas(c) CHAR c; 1896: #endif /* CK_ANSIC */ 1897: { /* xitas */ /* Italian ISO 646 to ASCII */ 1898: switch (c) { 1899: case 91: return(UNK); /* degree */ 1900: case 92: return('c'); /* c cedilla */ 1901: case 93: return('e'); /* e acute */ 1902: case 96: return('u'); /* u grave */ 1903: case 123: return('a'); /* a grave */ 1904: case 124: return('o'); /* o grave */ 1905: case 125: return('e'); /* e grave */ 1906: case 126: return('i'); /* i grave */ 1907: default: return(c); 1908: } 1909: } 1910: 1911: CHAR 1912: #ifdef CK_ANSIC 1913: xneas(CHAR c) 1914: #else 1915: xneas(c) CHAR c; 1916: #endif /* CK_ANSIC */ 1917: { /* xneas */ /* NeXT to ASCII */ 1918: if (langs[language].id == L_FRENCH) { /* If SET LANGUAGE FRENCH */ 1919: if (c == 234) { /* handle OE digraph. */ 1920: zmstuff('E'); 1921: return('O'); 1922: } else if (c == 250) { /* Also lowercase oe. */ 1923: zmstuff('e'); 1924: return('o'); 1925: } 1926: } 1927: c = xnel1(c); /* Convert to Latin-1 */ 1928: return(yl1as[c]); /* Convert Latin-1 to ASCII */ 1929: } 1930: 1931: CHAR 1932: #ifdef CK_ANSIC 1933: xnoas(CHAR c) 1934: #else 1935: xnoas(c) CHAR c; 1936: #endif /* CK_ANSIC */ 1937: { /* xnoas */ /* Norge/Danish ISO 646 to ASCII */ 1938: switch (c) { 1939: case 91: 1940: zmstuff('E'); /* AE digraph */ 1941: return('A'); 1942: case 92: return('O'); /* O slash */ 1943: case 93: /* A ring */ 1944: zmstuff('a'); 1945: return('A'); 1946: case 123: /* ae digraph */ 1947: zmstuff('e'); 1948: return('a'); 1949: case 124: return('o'); /* o slash */ 1950: case 125: /* a ring */ 1951: zmstuff('a'); 1952: return('a'); 1953: default: return(c); 1954: } 1955: } 1956: 1957: CHAR 1958: #ifdef CK_ANSIC 1959: xpoas(CHAR c) 1960: #else 1961: xpoas(c) CHAR c; 1962: #endif /* CK_ANSIC */ 1963: { /* xpoas */ /* Portuguese ISO 646 to ASCII */ 1964: switch (c) { 1965: case 91: return('A'); /* A tilde */ 1966: case 92: return('C'); /* C cedilla */ 1967: case 93: return('O'); /* O tilde */ 1968: case 123: return('a'); /* a tilde */ 1969: case 124: return('c'); /* c cedilla */ 1970: case 125: return('o'); /* o tilde */ 1971: default: return(c); 1972: } 1973: } 1974: 1975: CHAR 1976: #ifdef CK_ANSIC 1977: xspas(CHAR c) 1978: #else 1979: xspas(c) CHAR c; 1980: #endif /* CK_ANSIC */ 1981: { /* xspas */ /* Spanish ISO 646 to ASCII */ 1982: switch (c) { 1983: case 91: return(33); /* Inverted exclamation */ 1984: case 92: return('N'); /* N tilde */ 1985: case 93: return(63); /* Inverted question mark */ 1986: case 123: return(UNK); /* degree */ 1987: case 124: return('n'); /* n tilde */ 1988: case 125: return('c'); /* c cedilla */ 1989: default: return(c); 1990: } 1991: } 1992: 1993: CHAR 1994: #ifdef CK_ANSIC 1995: xswas(CHAR c) 1996: #else 1997: xswas(c) CHAR c; 1998: #endif /* CK_ANSIC */ 1999: { /* xswas */ /* Swedish ISO 646 to ASCII */ 2000: switch (c) { 2001: case 64: return('E'); /* E acute */ 2002: case 91: /* A diaeresis */ 2003: zmstuff('e'); 2004: return('A'); 2005: case 92: /* O diaeresis */ 2006: zmstuff('e'); 2007: return('O'); 2008: case 93: /* A ring */ 2009: zmstuff('a'); 2010: return('A'); 2011: case 94: /* U diaeresis */ 2012: /* return('Y'); */ 2013: zmstuff('e'); 2014: return('U'); 2015: case 96: return('e'); /* e acute */ 2016: case 123: /* a diaeresis */ 2017: zmstuff('e'); 2018: return('a'); 2019: case 124: /* o diaeresis */ 2020: zmstuff('e'); 2021: return('o'); 2022: case 125: /* a ring */ 2023: zmstuff('a'); 2024: return('a'); 2025: case 126: /* u diaeresis */ 2026: /* return('y'); */ 2027: zmstuff('e'); 2028: return('u'); 2029: default: return(c); 2030: } 2031: } 2032: 2033: CHAR 2034: #ifdef CK_ANSIC 2035: xchas(CHAR c) 2036: #else 2037: xchas(c) CHAR c; 2038: #endif /* CK_ANSIC */ 2039: { /* xchas */ /* Swiss ISO 646 to ASCII */ 2040: switch (c) { 2041: case 35: return('u'); /* u grave */ 2042: case 64: return('a'); /* a grave */ 2043: case 91: return('e'); /* e acute */ 2044: case 92: return('c'); /* c cedilla */ 2045: case 93: return('e'); /* e circumflex */ 2046: case 94: return('i'); /* i circumflex */ 2047: case 95: return('e'); /* e grave */ 2048: case 96: return('o'); /* o circumflex */ 2049: case 123: /* a diaeresis */ 2050: zmstuff('e'); 2051: return('a'); 2052: case 124: /* o diaeresis */ 2053: zmstuff('e'); 2054: return('o'); 2055: case 125: /* u diaeresis */ 2056: zmstuff('e'); 2057: return('u'); 2058: case 126: return('u'); /* u circumflex */ 2059: default: return(c); 2060: } 2061: } 2062: 2063: CHAR 2064: #ifdef CK_ANSIC 2065: xhuas(CHAR c) 2066: #else 2067: xhuas(c) CHAR c; 2068: #endif /* CK_ANSIC */ 2069: { /* xhuas */ /* Hungarian ISO 646 to ASCII */ 2070: switch (c) { 2071: case 64: return('A'); /* A acute */ 2072: case 91: return('E'); /* E acute */ 2073: case 92: return('O'); /* O diaeresis */ 2074: case 93: return('U'); /* U diaeresis */ 2075: case 96: return('a'); /* a acute */ 2076: case 123: return('e'); /* e acute */ 2077: case 124: return('o'); /* o acute */ 2078: case 125: return('u'); /* u acute */ 2079: case 126: return(34); /* double acute accent */ 2080: default: return(c); 2081: } 2082: } 2083: 2084: CHAR 2085: #ifdef CK_ANSIC 2086: xdmas(CHAR c) 2087: #else 2088: xdmas(c) CHAR c; 2089: #endif /* CK_ANSIC */ 2090: { /* xdmas */ /* DEC MCS to ASCII */ 2091: if (langs[language].id == L_FRENCH) { /* If SET LANGUAGE FRENCH */ 2092: if (c == 215) { /* handle OE digraph. */ 2093: zmstuff('E'); 2094: return('O'); 2095: } else if (c == 247) { /* Also lowercase oe. */ 2096: zmstuff('e'); 2097: return('o'); 2098: } 2099: } 2100: return(yl1as[c]); /* Otherwise treat like Latin-1 */ 2101: } 2102: 2103: CHAR 2104: #ifdef CK_ANSIC 2105: xdgas(CHAR c) 2106: #else 2107: xdgas(c) CHAR c; 2108: #endif /* CK_ANSIC */ 2109: { /* xdgas */ /* Data General to ASCII */ 2110: switch(c) { 2111: case 180: return('f'); /* Florin */ 2112: case 183: return('<'); /* Less-equal */ 2113: case 184: return('>'); /* Greater-equal */ 2114: case 186: return(96); /* Grave accent */ 2115: case 191: return('^'); /* Uparrow */ 2116: case 215: 2117: if (langs[language].id == L_FRENCH) { /* OE digraph */ 2118: zmstuff('E'); 2119: return('O'); 2120: } else return('O'); 2121: case 247: 2122: if (langs[language].id == L_FRENCH) { /* oe digraph */ 2123: zmstuff('e'); 2124: return('o'); 2125: } else return('o'); 2126: case 175: case 179: case 220: case 222: 2127: case 223: case 254: case 255: 2128: return(UNK); 2129: default: /* The rest, convert to Latin-1 */ 2130: return(yl1as[ydgl1[c]]); /* and from there to ASCII */ 2131: } 2132: } 2133: 2134: CHAR 2135: #ifdef CK_ANSIC 2136: xukl1(CHAR c) 2137: #else 2138: xukl1(c) CHAR c; 2139: #endif /* CK_ANSIC */ 2140: { /* xukl1 */ /* UK ASCII to Latin-1 */ 2141: if (c == 35) 2142: return(163); 2143: else return(c); 2144: } 2145: 2146: CHAR 2147: #ifdef CK_ANSIC 2148: xl1uk(CHAR c) 2149: #else 2150: xl1uk(c) CHAR c; 2151: #endif /* CK_ANSIC */ 2152: { /* xl1uk */ /* Latin-1 to UK ASCII */ 2153: if (c == 163) 2154: return(35); 2155: else return(yl1as[c]); 2156: } 2157: 2158: CHAR /* Latin-1 to French ISO 646 */ 2159: #ifdef CK_ANSIC 2160: xl1fr(CHAR c) 2161: #else 2162: xl1fr(c) CHAR c; 2163: #endif /* CK_ANSIC */ 2164: { /* xl1fr */ 2165: return(yl1fr[c]); 2166: } 2167: 2168: 2169: CHAR /* French ASCII to Latin-1 */ 2170: #ifdef CK_ANSIC 2171: xfrl1(CHAR c) 2172: #else 2173: xfrl1(c) CHAR c; 2174: #endif /* CK_ANSIC */ 2175: { /* xfrl1 */ 2176: return(yfrl1[c]); 2177: } 2178: 2179: CHAR /* Latin-1 to Dutch ASCII */ 2180: #ifdef CK_ANSIC 2181: xl1du(CHAR c) 2182: #else 2183: xl1du(c) CHAR c; 2184: #endif /* CK_ANSIC */ 2185: { /* xl1du */ 2186: return(yl1du[c]); 2187: } 2188: 2189: CHAR 2190: #ifdef CK_ANSIC 2191: xdul1(CHAR c) 2192: #else 2193: xdul1(c) CHAR c; 2194: #endif /* CK_ANSIC */ 2195: { /* xdul1 */ /* Dutch ISO 646 to Latin-1 */ 2196: return(ydul1[c]); 2197: } 2198: 2199: CHAR 2200: #ifdef CK_ANSIC 2201: xfil1(CHAR c) 2202: #else 2203: xfil1(c) CHAR c; 2204: #endif /* CK_ANSIC */ 2205: { /* xfil1 */ /* Finnish ISO 646 to Latin-1 */ 2206: return(yfil1[c]); 2207: } 2208: 2209: CHAR 2210: #ifdef CK_ANSIC 2211: xl1fi(CHAR c) 2212: #else 2213: xl1fi(c) CHAR c; 2214: #endif /* CK_ANSIC */ 2215: { /* xl1fi */ /* Latin-1 to Finnish ISO 646 */ 2216: return(yl1fi[c]); 2217: } 2218: 2219: CHAR 2220: #ifdef CK_ANSIC 2221: xfcl1(CHAR c) 2222: #else 2223: xfcl1(c) CHAR c; 2224: #endif /* CK_ANSIC */ 2225: { /* xfcl1 */ /* French Canadian ISO646 to Latin-1 */ 2226: return(yfcl1[c]); 2227: } 2228: 2229: CHAR 2230: #ifdef CK_ANSIC 2231: xl1fc(CHAR c) 2232: #else 2233: xl1fc(c) CHAR c; 2234: #endif /* CK_ANSIC */ 2235: { /* xl1fc */ /* Latin-1 to French Canadian ISO646 */ 2236: return(yl1fc[c]); 2237: } 2238: 2239: CHAR 2240: #ifdef CK_ANSIC 2241: xitl1(CHAR c) 2242: #else 2243: xitl1(c) CHAR c; 2244: #endif /* CK_ANSIC */ 2245: { /* xitl1 */ /* Italian ISO 646 to Latin-1 */ 2246: return(yitl1[c]); 2247: } 2248: 2249: CHAR 2250: #ifdef CK_ANSIC 2251: xl1it(CHAR c) 2252: #else 2253: xl1it(c) CHAR c; 2254: #endif /* CK_ANSIC */ 2255: { /* xl1it */ /* Latin-1 to Italian ISO 646 */ 2256: return(yl1it[c]); 2257: } 2258: 2259: CHAR 2260: #ifdef CK_ANSIC 2261: xnel1(CHAR c) 2262: #else 2263: xnel1(c) CHAR c; 2264: #endif /* CK_ANSIC */ 2265: { /* xnel1 */ /* NeXT to Latin-1 */ 2266: if (langs[language].id == L_FRENCH) { /* If SET LANGUAGE FRENCH */ 2267: if (c == 234) { /* handle OE digraph. */ 2268: zmstuff('E'); 2269: return('O'); 2270: } else if (c == 250) { /* Also lowercase oe. */ 2271: zmstuff('e'); 2272: return('o'); 2273: } 2274: } 2275: return(ynel1[c]); 2276: } 2277: 2278: CHAR 2279: #ifdef CK_ANSIC 2280: xl1ne(CHAR c) 2281: #else 2282: xl1ne(c) CHAR c; 2283: #endif /* CK_ANSIC */ 2284: { /* xl1ne */ /* Latin-1 to NeXT */ 2285: return(yl1ne[c]); 2286: } 2287: 2288: CHAR 2289: #ifdef CK_ANSIC 2290: xnol1(CHAR c) 2291: #else 2292: xnol1(c) CHAR c; 2293: #endif /* CK_ANSIC */ 2294: { /* xnol1 */ /* Norwegian and Danish ISO 646 to Latin-1 */ 2295: return(ynol1[c]); 2296: } 2297: 2298: CHAR 2299: #ifdef CK_ANSIC 2300: xl1no(CHAR c) 2301: #else 2302: xl1no(c) CHAR c; 2303: #endif /* CK_ANSIC */ 2304: { /* xl1no */ /* Latin-1 to Norwegian and Danish ISO 646 */ 2305: return(yl1no[c]); 2306: } 2307: 2308: CHAR 2309: #ifdef CK_ANSIC 2310: xpol1(CHAR c) 2311: #else 2312: xpol1(c) CHAR c; 2313: #endif /* CK_ANSIC */ 2314: { /* xpol1 */ /* Portuguese ISO 646 to Latin-1 */ 2315: return(ypol1[c]); 2316: } 2317: 2318: CHAR 2319: #ifdef CK_ANSIC 2320: xl1po(CHAR c) 2321: #else 2322: xl1po(c) CHAR c; 2323: #endif /* CK_ANSIC */ 2324: { /* xl1po */ /* Latin-1 to Portuguese ISO 646 */ 2325: return(yl1po[c]); 2326: } 2327: 2328: CHAR 2329: #ifdef CK_ANSIC 2330: xspl1(CHAR c) 2331: #else 2332: xspl1(c) CHAR c; 2333: #endif /* CK_ANSIC */ 2334: { /* xspl1 */ /* Spanish ISO 646 to Latin-1 */ 2335: return(yspl1[c]); 2336: } 2337: 2338: CHAR 2339: #ifdef CK_ANSIC 2340: xl1sp(CHAR c) 2341: #else 2342: xl1sp(c) CHAR c; 2343: #endif /* CK_ANSIC */ 2344: { /* xl1sp */ /* Latin-1 to Spanish ISO 646 */ 2345: return(yl1sp[c]); 2346: } 2347: 2348: CHAR 2349: #ifdef CK_ANSIC 2350: xswl1(CHAR c) 2351: #else 2352: xswl1(c) CHAR c; 2353: #endif /* CK_ANSIC */ 2354: { /* xswl1 */ /* Swedish ISO 646 to Latin-1 */ 2355: return(yswl1[c]); 2356: } 2357: 2358: CHAR 2359: #ifdef CK_ANSIC 2360: xl1sw(CHAR c) 2361: #else 2362: xl1sw(c) CHAR c; 2363: #endif /* CK_ANSIC */ 2364: { /* xl1sw */ /* Latin-1 to Swedish ISO 646 */ 2365: return(yl1sw[c]); 2366: } 2367: 2368: CHAR 2369: #ifdef CK_ANSIC 2370: xchl1(CHAR c) 2371: #else 2372: xchl1(c) CHAR c; 2373: #endif /* CK_ANSIC */ 2374: { /* xchl1 */ /* Swiss ISO 646 to Latin-1 */ 2375: return(ychl1[c]); 2376: } 2377: 2378: CHAR 2379: #ifdef CK_ANSIC 2380: xl1ch(CHAR c) 2381: #else 2382: xl1ch(c) CHAR c; 2383: #endif /* CK_ANSIC */ 2384: { /* xl1ch */ /* Latin-1 to Swiss ISO 646 */ 2385: return(yl1ch[c]); 2386: } 2387: 2388: CHAR 2389: #ifdef CK_ANSIC 2390: xhul1(CHAR c) 2391: #else 2392: xhul1(c) CHAR c; 2393: #endif /* CK_ANSIC */ 2394: { /* xhul1 */ /* Hungarian ISO 646 to Latin-1 */ 2395: return(yhul1[c]); 2396: } 2397: 2398: CHAR 2399: #ifdef CK_ANSIC 2400: xl1hu(CHAR c) 2401: #else 2402: xl1hu(c) CHAR c; 2403: #endif /* CK_ANSIC */ 2404: { /* xl1hu */ /* Latin-1 to Hungarian ISO 646 */ 2405: return(yl1hu[c]); 2406: } 2407: 2408: CHAR 2409: #ifdef CK_ANSIC 2410: xl1dm(CHAR c) 2411: #else 2412: xl1dm(c) CHAR c; 2413: #endif /* CK_ANSIC */ 2414: { /* xl1dm */ /* Latin-1 to DEC Multinational Character Set (MCS) */ 2415: return(yl1dm[c]); 2416: } 2417: 2418: CHAR 2419: #ifdef CK_ANSIC 2420: xl1dg(CHAR c) 2421: #else 2422: xl1dg(c) CHAR c; 2423: #endif /* CK_ANSIC */ 2424: { /* xl1dg */ /* Latin-1 to DG International Character Set (MCS) */ 2425: return(yl1dg[c]); 2426: } 2427: 2428: CHAR 2429: #ifdef CK_ANSIC 2430: xdml1(CHAR c) 2431: #else 2432: xdml1(c) CHAR c; 2433: #endif /* CK_ANSIC */ 2434: { /* xdml1 */ /* DEC Multinational Character Set (MCS) to Latin-1 */ 2435: if (langs[language].id == L_FRENCH) { /* If SET LANGUAGE FRENCH */ 2436: if (c == 215) { /* handle OE digraph. */ 2437: zmstuff('E'); 2438: return('O'); 2439: } else if (c == 247) { /* Also lowercase oe. */ 2440: zmstuff('e'); 2441: return('o'); 2442: } 2443: } 2444: return(ydml1[c]); 2445: } 2446: 2447: CHAR 2448: #ifdef CK_ANSIC 2449: xdgl1(CHAR c) 2450: #else 2451: xdgl1(c) CHAR c; 2452: #endif /* CK_ANSIC */ 2453: { /* xdgl1 */ /* DG International Character Set (MCS) to Latin-1 */ 2454: if (langs[language].id == L_FRENCH) { /* If SET LANGUAGE FRENCH */ 2455: if (c == 215) { /* handle OE digraph. */ 2456: zmstuff('E'); 2457: return('O'); 2458: } else if (c == 247) { /* Also lowercase oe. */ 2459: zmstuff('e'); 2460: return('o'); 2461: } 2462: } 2463: return(ydgl1[c]); 2464: } 2465: 2466: /* Translation functions for receiving files and translating them into ASCII */ 2467: 2468: CHAR 2469: #ifdef CK_ANSIC 2470: zl1as(CHAR c) 2471: #else 2472: zl1as(c) CHAR c; 2473: #endif /* CK_ANSIC */ 2474: { /* zl1as */ 2475: switch(langs[language].id) { 2476: 2477: case L_DUTCH: 2478: if (c == 255) { /* Dutch umlaut-y */ 2479: zdstuff('j'); /* becomes ij */ 2480: return('i'); 2481: } else return(yl1as[c]); /* all others by the book */ 2482: 2483: case L_GERMAN: 2484: switch (c) { /* German, special rules. */ 2485: case 196: /* umlaut-A -> Ae */ 2486: zdstuff('e'); 2487: return('A'); 2488: case 214: /* umlaut-O -> Oe */ 2489: zdstuff('e'); 2490: return('O'); 2491: case 220: /* umlaut-U -> Ue */ 2492: zdstuff('e'); 2493: return('U'); 2494: case 228: /* umlaut-a -> ae */ 2495: zdstuff('e'); 2496: return('a'); 2497: case 246: /* umlaut-o -> oe */ 2498: zdstuff('e'); 2499: return('o'); 2500: case 252: /* umlaut-u -> ue */ 2501: zdstuff('e'); 2502: return('u'); 2503: case 223: /* ess-zet -> ss */ 2504: zdstuff('s'); 2505: return('s'); 2506: default: return(yl1as[c]); /* all others by the book */ 2507: } 2508: case L_DANISH: 2509: case L_FINNISH: 2510: case L_NORWEGIAN: 2511: case L_SWEDISH: 2512: switch (c) { /* Scandanavian languages. */ 2513: case 196: /* umlaut-A -> Ae */ 2514: zdstuff('e'); 2515: return('A'); 2516: case 214: /* umlaut-O -> Oe */ 2517: case 216: /* O-slash -> Oe */ 2518: zdstuff('e'); 2519: return('O'); 2520: case 220: /* umlaut-U -> Y */ 2521: /* return('Y'); */ 2522: zdstuff('e'); 2523: return('U'); 2524: case 228: /* umlaut-a -> ae */ 2525: zdstuff('e'); 2526: return('a'); 2527: case 246: /* umlaut-o -> oe */ 2528: case 248: /* o-slash -> oe */ 2529: zdstuff('e'); 2530: return('o'); 2531: case 252: /* umlaut-u -> y */ 2532: /* return('y'); */ 2533: zdstuff('e'); 2534: return('u'); 2535: case 197: /* A-ring -> Aa */ 2536: zdstuff('a'); 2537: return('A'); 2538: case 229: /* a-ring -> aa */ 2539: zdstuff('a'); 2540: return('a'); 2541: default: return(yl1as[c]); /* All others by the book */ 2542: } 2543: default: 2544: return(yl1as[c]); /* Not German, by the table. */ 2545: } 2546: } 2547: 2548: CHAR /* IBM CP437 to Latin-1 */ 2549: #ifdef CK_ANSIC 2550: x43l1(CHAR c) 2551: #else 2552: x43l1(c) CHAR c; 2553: #endif /* CK_ANSIC */ 2554: { /* x43l1 */ 2555: return(y43l1[c]); 2556: } 2557: 2558: CHAR /* IBM CP850 to Latin-1 */ 2559: #ifdef CK_ANSIC 2560: x85l1(CHAR c) 2561: #else 2562: x85l1(c) CHAR c; 2563: #endif /* CK_ANSIC */ 2564: { /* x85l1 */ 2565: return(y85l1[c]); 2566: } 2567: 2568: CHAR /* Latin-1 to IBM CP437 */ 2569: #ifdef CK_ANSIC 2570: xl143(CHAR c) 2571: #else 2572: xl143(c) CHAR c; 2573: #endif /* CK_ANSIC */ 2574: { /* xl143 */ 2575: return(yl143[c]); 2576: } 2577: 2578: CHAR /* Latin-1 to CP850 */ 2579: #ifdef CK_ANSIC 2580: xl185(CHAR c) 2581: #else 2582: xl185(c) CHAR c; 2583: #endif /* CK_ANSIC */ 2584: { /* xl185 */ 2585: return(yl185[c]); 2586: } 2587: 2588: CHAR 2589: #ifdef CK_ANSIC 2590: x43as(CHAR c) 2591: #else 2592: x43as(c) CHAR c; 2593: #endif /* CK_ANSIC */ 2594: { /* x43as */ /* CP437 to ASCII */ 2595: c = y43l1[c]; /* Translate to Latin-1 */ 2596: return(xl143(c)); /* and from Latin-1 to ASCII. */ 2597: } 2598: 2599: CHAR 2600: #ifdef CK_ANSIC 2601: x85as(CHAR c) 2602: #else 2603: x85as(c) CHAR c; 2604: #endif /* CK_ANSIC */ 2605: { /* x85as */ /* CP850 to ASCII */ 2606: c = y85l1[c]; /* Translate to Latin-1 */ 2607: return(xl1as(c)); /* and from Latin-1 to ASCII. */ 2608: } 2609: 2610: CHAR /* Macintosh Latin to Latin-1 */ 2611: #ifdef CK_ANSIC 2612: xaql1(CHAR c) 2613: #else 2614: xaql1(c) CHAR c; 2615: #endif /* CK_ANSIC */ 2616: { /* xaql1 */ 2617: if (langs[language].id == L_FRENCH) { /* If SET LANGUAGE FRENCH */ 2618: if (c == 206) { /* handle OE digraph. */ 2619: zmstuff('E'); 2620: return('O'); 2621: } else if (c == 207) { /* Also lowercase oe. */ 2622: zmstuff('e'); 2623: return('o'); 2624: } 2625: } 2626: return(yaql1[c]); 2627: } 2628: 2629: CHAR /* Macintosh Latin to ASCII */ 2630: #ifdef CK_ANSIC 2631: xaqas(CHAR c) 2632: #else 2633: xaqas(c) CHAR c; 2634: #endif /* CK_ANSIC */ 2635: { /* xaqas */ 2636: if (langs[language].id == L_FRENCH) { /* If SET LANGUAGE FRENCH */ 2637: if (c == 206) { /* handle OE digraph. */ 2638: zmstuff('E'); 2639: return('O'); 2640: } else if (c == 207) { /* Also lowercase oe. */ 2641: zmstuff('e'); 2642: return('o'); 2643: } 2644: } 2645: c = yaql1[c]; /* Translate to Latin-1 */ 2646: return(xl1as(c)); /* then to ASCII. */ 2647: } 2648: 2649: CHAR /* Latin-1 to Macintosh Latin */ 2650: #ifdef CK_ANSIC 2651: xl1aq(CHAR c) 2652: #else 2653: xl1aq(c) CHAR c; 2654: #endif /* CK_ANSIC */ 2655: { /* xl1aq */ 2656: return(yl1aq[c]); 2657: } 2658: 2659: #ifdef LATIN2 2660: 2661: /* Translation functions for Latin Alphabet 2 */ 2662: 2663: CHAR /* Latin-2 to Latin-1 */ 2664: #ifdef CK_ANSIC 2665: xl2l1(CHAR c) 2666: #else 2667: xl2l1(c) CHAR c; 2668: #endif /* CK_ANSIC */ 2669: { /* xll2l1 */ 2670: return(yl2l1[c]); 2671: } 2672: 2673: CHAR /* Latin-1 to Latin-2 */ 2674: #ifdef CK_ANSIC 2675: xl1l2(CHAR c) 2676: #else 2677: xl1l2(c) CHAR c; 2678: #endif /* CK_ANSIC */ 2679: { /* xll1l2 */ 2680: return(yl1l2[c]); 2681: } 2682: 2683: CHAR /* Latin-2 to ASCII */ 2684: #ifdef CK_ANSIC 2685: xl2as(CHAR c) 2686: #else 2687: xl2as(c) CHAR c; 2688: #endif /* CK_ANSIC */ 2689: { /* xll2as */ 2690: return(yl2as[c]); 2691: } 2692: 2693: CHAR /* Latin-2 to CP852 */ 2694: #ifdef CK_ANSIC 2695: xl252(CHAR c) 2696: #else 2697: xl252(c) CHAR c; 2698: #endif /* CK_ANSIC */ 2699: { /* xll252 */ 2700: return(yl252[c]); 2701: } 2702: 2703: CHAR /* CP852 to Latin-2 */ 2704: #ifdef CK_ANSIC 2705: x52l2(CHAR c) 2706: #else 2707: x52l2(c) CHAR c; 2708: #endif /* CK_ANSIC */ 2709: { /* x52l2 */ 2710: return(y52l2[c]); 2711: } 2712: 2713: CHAR /* CP852 to ASCII */ 2714: #ifdef CK_ANSIC 2715: x52as(CHAR c) 2716: #else 2717: x52as(c) CHAR c; 2718: #endif /* CK_ANSIC */ 2719: { /* xl52as */ 2720: return(yl2as[y52l2[c]]); /* CP852 -> Latin-2 -> ASCII */ 2721: } 2722: 2723: CHAR /* CP852 to Latin-1 */ 2724: #ifdef CK_ANSIC 2725: x52l1(CHAR c) 2726: #else 2727: x52l1(c) CHAR c; 2728: #endif /* CK_ANSIC */ 2729: { /* xl52l1 */ 2730: return(yl2l1[y52l2[c]]); /* CP852 -> Latin-2 -> Latin-1 */ 2731: } 2732: 2733: CHAR /* Latin-1 to CP852 */ 2734: #ifdef CK_ANSIC 2735: xl152(CHAR c) 2736: #else 2737: xl152(c) CHAR c; 2738: #endif /* CK_ANSIC */ 2739: { /* xll152 */ 2740: return(yl252[yl1l2[c]]); /* Latin-1 -> Latin-2 -> CP852 */ 2741: } 2742: 2743: CHAR /* Latin-2 to NeXT */ 2744: #ifdef CK_ANSIC 2745: xl2ne(CHAR c) 2746: #else 2747: xl2ne(c) CHAR c; 2748: #endif /* CK_ANSIC */ 2749: { /* xll2ne */ 2750: switch(c) { 2751: case 162: return(198); /* Breve */ 2752: case 163: return(232); /* L with stroke */ 2753: case 178: return(206); /* Ogonek */ 2754: case 179: return(248); /* l with stroke */ 2755: case 183: return(207); /* Caron */ 2756: case 189: return(205); /* Double acute */ 2757: case 208: return(144); /* D stroke = Eth */ 2758: case 240: return(230); /* d stroke = eth */ 2759: case 255: return(199); /* Dot above */ 2760: default: return(yl1ne[yl2l1[c]]); 2761: } 2762: } 2763: 2764: CHAR /* Latin-2 to CP437 */ 2765: #ifdef CK_ANSIC 2766: xl243(CHAR c) 2767: #else 2768: xl243(c) CHAR c; 2769: #endif /* CK_ANSIC */ 2770: { /* xll243 */ 2771: return(yl1l2[y43l1[c]]); 2772: } 2773: 2774: CHAR /* Latin-2 to CP850 */ 2775: #ifdef CK_ANSIC 2776: xl285(CHAR c) 2777: #else 2778: xl285(c) CHAR c; 2779: #endif /* CK_ANSIC */ 2780: { /* xll285 */ 2781: return(yl1l2[y85l1[c]]); 2782: } 2783: 2784: CHAR /* Latin-2 to Apple */ 2785: #ifdef CK_ANSIC 2786: xl2aq(CHAR c) 2787: #else 2788: xl2aq(c) CHAR c; 2789: #endif /* CK_ANSIC */ 2790: { /* xl2aq */ 2791: return(yl1aq[yl2l1[c]]); /* Could do more... */ 2792: } 2793: 2794: CHAR /* Latin-2 to DGI */ 2795: #ifdef CK_ANSIC 2796: xl2dg(CHAR c) 2797: #else 2798: xl2dg(c) CHAR c; 2799: #endif /* CK_ANSIC */ 2800: { /* xll2dg */ 2801: return(yl1l2[ydgl1[c]]); 2802: } 2803: 2804: CHAR /* Latin-2 to Short KOI */ 2805: #ifdef CK_ANSIC 2806: xl2sk(CHAR c) 2807: #else 2808: xl2sk(c) CHAR c; 2809: #endif /* CK_ANSIC */ 2810: { /* xll2sk */ 2811: return(islower(c) ? toupper(c) : c); 2812: } 2813: 2814: CHAR /* NeXT to Latin-2 */ 2815: #ifdef CK_ANSIC 2816: xnel2(CHAR c) 2817: #else 2818: xnel2(c) CHAR c; 2819: #endif /* CK_ANSIC */ 2820: { /* xnel2 */ 2821: switch (c) { 2822: case 144: return(208); /* D stroke = Eth */ 2823: case 198: return(162); /* Breve */ 2824: case 199: return(255); /* Dot above */ 2825: case 205: return(189); /* Double acute */ 2826: case 206: return(178); /* Ogonek */ 2827: case 207: return(183); /* Caron */ 2828: case 230: return(240); /* d stroke = eth */ 2829: case 232: return(163); /* L with stroke */ 2830: case 248: return(179); /* l with stroke */ 2831: default: return(yl1l2[ynel1[c]]); /* Others, go thru Latin-1 */ 2832: } 2833: } 2834: 2835: CHAR /* CP437 to Latin-2 */ 2836: #ifdef CK_ANSIC 2837: x43l2(CHAR c) 2838: #else 2839: x43l2(c) CHAR c; 2840: #endif /* CK_ANSIC */ 2841: { /* xl43l2 */ 2842: return(yl1l2[y43l1[c]]); 2843: } 2844: 2845: CHAR /* CP850 to Latin-2 */ 2846: #ifdef CK_ANSIC 2847: x85l2(CHAR c) 2848: #else 2849: x85l2(c) CHAR c; 2850: #endif /* CK_ANSIC */ 2851: { /* xl85l2 */ 2852: return(yl1l2[y85l1[c]]); 2853: } 2854: 2855: CHAR /* Apple to Latin-2 */ 2856: #ifdef CK_ANSIC 2857: xaql2(CHAR c) 2858: #else 2859: xaql2(c) CHAR c; 2860: #endif /* CK_ANSIC */ 2861: { /* xlaql2 */ 2862: switch (c) { 2863: case 249: return(162); /* Breve accent */ 2864: case 250: return(255); /* Dot accent */ 2865: case 253: return(189); /* Double acute */ 2866: default: return(yl1l2[yaql1[c]]); 2867: } 2868: } 2869: 2870: CHAR /* DGI to Latin-2 */ 2871: #ifdef CK_ANSIC 2872: xdgl2(CHAR c) 2873: #else 2874: xdgl2(c) CHAR c; 2875: #endif /* CK_ANSIC */ 2876: { /* xldgl2 */ 2877: return(yl1l2[ydgl1[c]]); /* (for now) */ 2878: } 2879: 2880: CHAR /* Short KOI to Latin-2 */ 2881: #ifdef CK_ANSIC 2882: xskl2(CHAR c) 2883: #else 2884: xskl2(c) CHAR c; 2885: #endif /* CK_ANSIC */ 2886: { /* xlskl2 */ 2887: return(islower(c) ? toupper(c) : c); 2888: } 2889: 2890: CHAR /* Latin-2 to German */ 2891: #ifdef CK_ANSIC 2892: xl2ge(CHAR c) 2893: #else 2894: xl2ge(c) CHAR c; 2895: #endif /* CK_ANSIC */ 2896: { /* xll2ge */ 2897: switch(c) { 2898: case 167: return(64); /* Paragraph sign */ 2899: case 196: return(91); /* A-diaeresis */ 2900: case 214: return(92); /* O-diaeresis */ 2901: case 220: return(93); /* U-diaeresis */ 2902: case 223: return(126); /* double-s */ 2903: case 228: return(123); /* a-diaeresis */ 2904: case 246: return(124); /* o-diaeresis */ 2905: case 252: return(125); /* u-diaeresis */ 2906: default: return(yl2as[c]); /* Others */ 2907: } 2908: } 2909: 2910: CHAR /* German to Latin-2 */ 2911: #ifdef CK_ANSIC 2912: xgel2(CHAR c) 2913: #else 2914: xgel2(c) CHAR c; 2915: #endif /* CK_ANSIC */ 2916: { /* xlgel2 */ 2917: switch(c) { 2918: case 64: return(167); /* Paragraph sign */ 2919: case 91: return(196); /* A-diaeresis */ 2920: case 92: return(214); /* O-diaeresis */ 2921: case 93: return(220); /* U-diaeresis */ 2922: case 123: return(228); /* a-diaeresis */ 2923: case 126: return(223); /* double-s */ 2924: case 124: return(246); /* o-diaeresis */ 2925: case 125: return(252); /* u-diaeresis */ 2926: default: return(c); /* Others */ 2927: } 2928: } 2929: 2930: CHAR /* Latin-2 to Hungarian */ 2931: #ifdef CK_ANSIC 2932: xl2hu(CHAR c) 2933: #else 2934: xl2hu(c) CHAR c; 2935: #endif /* CK_ANSIC */ 2936: { /* xll2hu */ 2937: switch(c) { 2938: case 164: return(36); /* Currency symbol */ 2939: case 189: return(126); /* Double acute accent */ 2940: case 193: return(64); /* A-acute */ 2941: case 201: return(91); /* E-acute */ 2942: case 214: return(92); /* O-diaeresis */ 2943: case 220: return(93); /* U-diaeresis */ 2944: case 225: return(96); /* a-acute */ 2945: case 233: return(123); /* e-acute */ 2946: case 246: return(124); /* o-diaeresis */ 2947: case 252: return(125); /* u-diaeresis */ 2948: default: return(yl2as[c]); /* Others */ 2949: } 2950: } 2951: 2952: CHAR /* Hungarian to Latin-2 */ 2953: #ifdef CK_ANSIC 2954: xhul2(CHAR c) 2955: #else 2956: xhul2(c) CHAR c; 2957: #endif /* CK_ANSIC */ 2958: { /* xlhul2 */ 2959: switch(c) { 2960: case 36: return(164); /* Currency symbol */ 2961: case 64: return(193); /* A-acute */ 2962: case 91: return(201); /* E-acute */ 2963: case 92: return(214); /* O-diaeresis */ 2964: case 93: return(220); /* U-diaeresis */ 2965: case 96: return(225); /* a-acute */ 2966: case 123: return(233); /* e-acute */ 2967: case 124: return(246); /* o-diaeresis */ 2968: case 125: return(252); /* u-diaeresis */ 2969: case 126: return(189); /* Double acute accent */ 2970: default: return(c); /* Others */ 2971: } 2972: } 2973: #else /* NOLATIN2 */ 2974: #define xl2l1 NULL 2975: #define xl1l2 NULL 2976: #define xl2as NULL 2977: #define xl252 NULL 2978: #define x52l2 NULL 2979: #define x52as NULL 2980: #define x52l1 NULL 2981: #define xl152 NULL 2982: #define xl2ne NULL 2983: #define xl243 NULL 2984: #define xl285 NULL 2985: #define xl2aq NULL 2986: #define xl2dg NULL 2987: #define xl2sk NULL 2988: #define xnel2 NULL 2989: #define x43l2 NULL 2990: #define x85l2 NULL 2991: #define xaql2 NULL 2992: #define xdgl2 NULL 2993: #define xskl2 NULL 2994: #define xl2ge NULL 2995: #define xgel2 NULL 2996: #define xl2hu NULL 2997: #define xhul2 NULL 2998: #endif /* LATIN2 */ 2999: 3000: #ifdef CYRILLIC 3001: /* Translation functions for Cyrillic character sets */ 3002: 3003: CHAR /* Latin/Cyrillic to */ 3004: #ifdef CK_ANSIC 3005: xlcac(CHAR c) 3006: #else 3007: xlcac(c) CHAR c; 3008: #endif /* CK_ANSIC */ 3009: { /* xlcac */ /* Microsoft Code Page 866 */ 3010: return(ylcac[c]); 3011: } 3012: 3013: CHAR /* Latin/Cyrillic to Old KOI-8 */ 3014: #ifdef CK_ANSIC 3015: xlck8(CHAR c) 3016: #else 3017: xlck8(c) CHAR c; 3018: #endif /* CK_ANSIC */ 3019: { /* xlck8 */ 3020: return(ylck8[c]); 3021: } 3022: 3023: CHAR 3024: #ifdef CK_ANSIC 3025: xlcsk(CHAR c) 3026: #else 3027: xlcsk(c) CHAR c; 3028: #endif /* CK_ANSIC */ 3029: { /* xlcsk */ /* Latin/Cyrillic to Short KOI */ 3030: return(ylcsk[c]); 3031: } 3032: 3033: CHAR 3034: #ifdef CK_ANSIC 3035: xlcas(CHAR c) 3036: #else 3037: xlcas(c) CHAR c; 3038: #endif /* CK_ANSIC */ 3039: { /* xlcas */ /* Latin/Cyrillic to ASCII */ 3040: if (langs[language].id == L_RUSSIAN) 3041: return(ylcsk[c]); 3042: else 3043: return((c > 127) ? '?' : c); 3044: } 3045: 3046: CHAR /* CP866 */ 3047: #ifdef CK_ANSIC 3048: xaclc(CHAR c) 3049: #else 3050: xaclc(c) CHAR c; 3051: #endif /* CK_ANSIC */ 3052: { /* xaclc */ /* to Latin/Cyrillic */ 3053: return(yaclc[c]); 3054: } 3055: 3056: CHAR /* Old KOI-8 to Latin/Cyrillic */ 3057: #ifdef CK_ANSIC 3058: xk8lc(CHAR c) 3059: #else 3060: xk8lc(c) CHAR c; 3061: #endif /* CK_ANSIC */ 3062: { /* xk8lc */ 3063: return(yk8lc[c]); 3064: } 3065: 3066: CHAR 3067: #ifdef CK_ANSIC 3068: xskcy(CHAR c) 3069: #else 3070: xskcy(c) CHAR c; 3071: #endif /* CK_ANSIC */ 3072: { /* xskcy */ /* Short KOI to Latin/Cyrillic */ 3073: return(yskcy[c & 0x7f]); 3074: } 3075: 3076: CHAR 3077: #ifdef CK_ANSIC 3078: xascy(CHAR c) 3079: #else 3080: xascy(c) CHAR c; 3081: #endif /* CK_ANSIC */ 3082: { /* xascy */ /* ASCII to Latin/Cyrillic */ 3083: if (langs[language].id == L_RUSSIAN) { /* If LANGUAGE == RUSSIAN */ 3084: return(yskcy[c & 0x7f]); /* treat ASCII as Short KOI */ 3085: } else return((c > 127) ? '?' : c); 3086: } 3087: 3088: CHAR 3089: #ifdef CK_ANSIC 3090: xacas(CHAR c) 3091: #else 3092: xacas(c) CHAR c; 3093: #endif /* CK_ANSIC */ 3094: { /* xacas */ /* CP866 to ASCII */ 3095: if (langs[language].id == L_RUSSIAN) { 3096: c = yaclc[c]; /* First to Latin/Cyrillic */ 3097: return(ylcsk[c]); /* Then to Short KOI */ 3098: } else return((c > 127) ? '?' : c); 3099: } 3100: 3101: CHAR 3102: #ifdef CK_ANSIC 3103: xskas(CHAR c) 3104: #else 3105: xskas(c) CHAR c; 3106: #endif /* CK_ANSIC */ 3107: { /* xskas */ /* Short KOI to ASCII */ 3108: return((c > 95) ? '?' : c); 3109: } 3110: 3111: CHAR 3112: #ifdef CK_ANSIC 3113: xk8as(CHAR c) 3114: #else 3115: xk8as(c) CHAR c; 3116: #endif /* CK_ANSIC */ 3117: { /* xk8as */ /* Old KOI-8 Cyrillic to ASCII */ 3118: if (langs[language].id == L_RUSSIAN) { 3119: c = yk8lc[c]; /* First to Latin/Cyrillic */ 3120: return(ylcsk[c]); /* Then to Short KOI */ 3121: } else return((c > 127) ? '?' : c); 3122: } 3123: 3124: CHAR 3125: #ifdef CK_ANSIC 3126: xassk(CHAR c) 3127: #else 3128: xassk(c) CHAR c; 3129: #endif /* CK_ANSIC */ 3130: { /* xassk */ /* ASCII to Short KOI */ 3131: c &= 0x77; /* Force it to be ASCII */ 3132: return((c > 95) ? (c - 32) : c); /* Fold columns 6-7 to 4-5 */ 3133: } 3134: 3135: CHAR 3136: #ifdef CK_ANSIC 3137: xl1sk(CHAR c) 3138: #else 3139: xl1sk(c) CHAR c; 3140: #endif /* CK_ANSIC */ 3141: { /* xl1sk */ /* Latin-1 to Short KOI */ 3142: c = zl1as(c); /* Convert to ASCII */ 3143: return(c = xassk(c)); /* Convert ASCII to Short KOI */ 3144: } 3145: 3146: CHAR 3147: #ifdef CK_ANSIC 3148: xaslc(CHAR c) 3149: #else 3150: xaslc(c) CHAR c; 3151: #endif /* CK_ANSIC */ 3152: { /* xaslc */ /* ASCII to Latin/Cyrillic */ 3153: if (langs[language].id == L_RUSSIAN) 3154: return(yskcy[c & 0x7f]); 3155: else return(c & 0x7f); 3156: } 3157: 3158: CHAR 3159: #ifdef CK_ANSIC 3160: xasac(CHAR c) 3161: #else 3162: xasac(c) CHAR c; 3163: #endif /* CK_ANSIC */ 3164: { /* xasac */ /* ASCII to CP866 */ 3165: if (langs[language].id == L_RUSSIAN) { /* Use Short KOI */ 3166: c = xskcy(c); /* Translate to Latin/Cyrillic */ 3167: return(ylcac[c]); /* Then to CP866 */ 3168: } else return(c & 0x7f); 3169: } 3170: 3171: CHAR 3172: #ifdef CK_ANSIC 3173: xask8(CHAR c) 3174: #else 3175: xask8(c) CHAR c; 3176: #endif /* CK_ANSIC */ 3177: { /* xask8 */ /* ASCII to KOI-8 */ 3178: if (langs[language].id == L_RUSSIAN) { /* Use Short KOI */ 3179: c = xskcy(c); /* Translate to Latin/Cyrillic */ 3180: return(ylck8[c]); /* Then to KOI-8 */ 3181: } else return(c & 0x7f); 3182: } 3183: #else 3184: #define xacas NULL 3185: #define xaclc NULL 3186: #define xasac NULL 3187: #define xascy NULL 3188: #define xask8 NULL 3189: #define xaslc NULL 3190: #define xassk NULL 3191: #define xk8as NULL 3192: #define xk8lc NULL 3193: #define xl1sk NULL 3194: #define xlcac NULL 3195: #define xlcas NULL 3196: #define xlck8 NULL 3197: #define xlcsk NULL 3198: #define xskas NULL 3199: #define xskcy NULL 3200: #endif /* CYRILLIC */ 3201: 3202: /* Translation functions for Japanese Kanji character sets */ 3203: 3204: #ifdef KANJI 3205: /* 3206: Translate Kanji Transfer Character Set (EUC) to local file character set, 3207: contributed by Dr. Hirofumi Fujii, Japan High Energy Research Laboratory 3208: (KEK), Tokyo, Japan. 3209: 3210: a is a byte to be translated, which may be a single-byte character, 3211: the Katakana prefix, the first byte of a two-byte Kanji character, or the 3212: second byte of 2-byte Kanji character. 3213: 3214: fn is the output function. 3215: 3216: Returns 0 on success, -1 on failure. 3217: */ 3218: 3219: _PROTOTYP(static int jpnxas, (int, int[]) ); 3220: _PROTOTYP(static int jpnxkt, (int, int[]) ); 3221: _PROTOTYP(static int jpnxkn, (int[], int[]) ); 3222: 3223: static int jpncnt; /* byte count for Japanese */ 3224: static int jpnlst; /* last status (for JIS7) */ 3225: 3226: static int 3227: jpnxas(a, obuf) int a; int obuf[]; { /* Translate ASCII to local file code */ 3228: int r; 3229: 3230: r = 0; 3231: if (fcharset == FC_JIS7) { 3232: switch (jpnlst) { 3233: case 1: 3234: obuf[0] = 0x0f; 3235: obuf[1] = a; 3236: r = 2; 3237: break; 3238: case 2: 3239: obuf[0] = 0x1b; 3240: obuf[1] = 0x28; 3241: obuf[2] = 0x4a; 3242: obuf[3] = a; 3243: r = 4; 3244: break; 3245: default: 3246: obuf[0] = a; 3247: r = 1; 3248: break; 3249: } 3250: } else { 3251: obuf[0] = a; 3252: r = 1; 3253: } 3254: return(r); 3255: } 3256: 3257: static int 3258: jpnxkt(a, obuf) int a; int obuf[]; { 3259: /* Translate JIS X 201 Katakana to local code */ 3260: 3261: int r; 3262: 3263: r = 0; 3264: if (fcharset == FC_JIS7) { 3265: switch (jpnlst) { 3266: case 2: /* from Kanji */ 3267: obuf[r++] = 0x1b; 3268: obuf[r++] = 0x28; 3269: obuf[r++] = 0x4a; 3270: case 0: /* from Roman */ 3271: obuf[r++] = 0x0e; 3272: default: 3273: obuf[r++] = (a & 0x7f); 3274: break; 3275: } 3276: } else { 3277: if (fcharset == FC_JEUC) 3278: obuf[r++] = 0x8e; 3279: obuf[r++] = (a | 0x80); 3280: } 3281: return(r); 3282: } 3283: 3284: static int 3285: jpnxkn(ibuf, obuf) int ibuf[], obuf[]; { 3286: /* Translate JIS X 0208 Kanji to local code */ 3287: int c1, c2; 3288: int r; 3289: 3290: c1 = ibuf[0] & 0x7f; 3291: c2 = ibuf[1] & 0x7f; 3292: 3293: if (fcharset == FC_SHJIS) { 3294: if (c1 & 1) 3295: c2 += 0x1f; 3296: else 3297: c2 += 0x7d; 3298: 3299: if (c2 >= 0x7f) c2++; 3300: 3301: c1 = ((c1 - 0x21) >> 1) + 0x81; 3302: if (c1 > 0x9f) c1 += 0x40; 3303: 3304: obuf[0] = c1; 3305: obuf[1] = c2; 3306: r = 2; 3307: } else if (fcharset == FC_JIS7) { 3308: r = 0; 3309: switch (jpnlst) { 3310: case 1: 3311: obuf[r++] = 0x0f; /* From Katakana */ 3312: case 0: 3313: obuf[r++] = 0x1b; 3314: obuf[r++] = 0x24; 3315: obuf[r++] = 0x42; 3316: default: 3317: obuf[r++] = c1; 3318: obuf[r++] = c2; 3319: break; 3320: } 3321: } else { 3322: obuf[0] = (c1 | 0x80); 3323: obuf[1] = (c2 | 0x80); 3324: r = 2; 3325: } 3326: return(r); 3327: } 3328: 3329: int 3330: xkanjf() { 3331: /* Initialize parameters for xkanji */ 3332: /* This function should be called when F/X-packet is received */ 3333: jpncnt = jpnlst = 0; 3334: return(0); 3335: } 3336: 3337: int 3338: #ifdef CK_ANSIC 3339: xkanjz( int (*fn)(char) ) 3340: #else 3341: xkanjz( fn ) int (*fn)(); 3342: #endif /* CK_ANSIC */ 3343: { /* xkanjz */ 3344: /* 3345: Terminate xkanji 3346: This function must be called when Z-packet is received 3347: (before closing the file). 3348: */ 3349: static int obuf[6]; 3350: int r, i, c; 3351: 3352: if (fcharset == FC_JIS7) { 3353: c = 'A'; /* Dummy Roman character */ 3354: r = jpnxas(c, obuf) - 1; /* -1 removes Dummy character */ 3355: if (r > 0) { 3356: for (i = 0; i < r; i++) 3357: if ( ((*fn)((char) obuf[i])) < 0 ) 3358: return( -1 ); 3359: } 3360: } 3361: return( 0 ); 3362: } 3363: 3364: int 3365: #ifdef CK_ANSIC 3366: xkanji(int a, int (*fn)(char)) 3367: #else 3368: xkanji(a, fn) int a; int (*fn)(); 3369: #endif /* CK_ANSIC */ 3370: { /* xkanji */ 3371: static int xbuf[2]; 3372: static int obuf[8]; 3373: 3374: int i, r; 3375: int c7; 3376: int state; 3377: 3378: r = 0; 3379: if (jpncnt == 0) { 3380: /* 1st byte */ 3381: if ( (a & 0x80) == 0 ) { 3382: /* 8th bit is 0, i.e., single-byte code */ 3383: r = jpnxas(a, obuf); 3384: state = 0; 3385: } else { 3386: /* 8th bit is 1, check the range */ 3387: c7 = a & 0x7f; 3388: if ( ((c7 > 0x20) && (c7 < 0x7f)) || (c7 == 0x0e) ) { 3389: /* double byte code */ 3390: xbuf[jpncnt++] = a; 3391: } else { 3392: /* single byte code */ 3393: r = jpnxas(a, obuf); 3394: state = 0; 3395: } 3396: } 3397: } else { 3398: /* not the 1st byte */ 3399: xbuf[jpncnt++] = a; 3400: if (xbuf[0] == 0x8e) { 3401: r = jpnxkt( xbuf[1], obuf ); 3402: state = 1; 3403: } else { 3404: r = jpnxkn(xbuf, obuf); 3405: state = 2; 3406: } 3407: } 3408: if (r > 0) { 3409: for (i = 0; i < r; i++ ) 3410: if ( ((*fn)((char) obuf[i])) < 0 ) 3411: return( -1 ); 3412: jpnlst = state; 3413: jpncnt = 0; 3414: } 3415: return( 0 ); 3416: } 3417: 3418: /* 3419: Function for translating from Japanese file character set 3420: to Japanese EUC transfer character set. 3421: Returns a pointer to a string containing 0, 1, or 2 bytes. 3422: */ 3423: 3424: /* zkanji */ 3425: static int jpnstz; /* status for JIS-7 */ 3426: static int jpnpnd; /* number of pending bytes */ 3427: static int jpnpnt; /* pending buffer index */ 3428: static int jpnpbf[8]; /* pending buffer */ 3429: 3430: int 3431: zkanjf() { /* Initialize */ 3432: jpnstz = jpnpnd = jpnpnt = 0; 3433: return(0); 3434: } 3435: 3436: int 3437: zkanjz() { 3438: return( 0 ); 3439: } 3440: 3441: int 3442: #ifdef CK_ANSIC 3443: zkanji( int (*fn)(void) ) 3444: #else 3445: zkanji( fn ) int (*fn)(); 3446: #endif /* CK_ANSIC */ 3447: { /* zkanji */ 3448: /* Read Japanese local code and translate to Japanese EUC */ 3449: int a; 3450: int sc[3]; 3451: 3452: /* No pending characters */ 3453: if (fcharset == FC_SHJIS) { /* Translating from Shift-JIS */ 3454: if (jpnpnd) { 3455: jpnpnd--; 3456: return( jpnpbf[jpnpnt++] ); 3457: } 3458: 3459: a = (*fn)(); 3460: jpnpnd = jpnpnt = 0; 3461: if (((a >= 0x81) && (a <= 0x9f)) || 3462: ((a >= 0xe0) && (a <= 0xfc))) { /* 2-byte Kanji code */ 3463: sc[0] = a; 3464: if ((sc[1] = (*fn)()) < 0) /* Get second byte */ 3465: return( sc[1] ); 3466: if (sc[0] <= 0x9f) 3467: sc[0] -= 0x71; 3468: else 3469: sc[0] -= 0xb1; 3470: sc[0] = sc[0] * 2 + 1; 3471: if (sc[1] > 0x7f) 3472: sc[1]--; 3473: if (sc[1] >= 0x9e) { 3474: sc[1] -= 0x7d; 3475: sc[0]++; 3476: } else { 3477: sc[1] -= 0x1f; 3478: } 3479: a = (sc[0] | 0x80); 3480: jpnpbf[0] = (sc[1] | 0x80); 3481: jpnpnd = 1; 3482: jpnpnt = 0; 3483: } else if ((a >= 0xa1) && (a <= 0xdf)) { /* Katakana */ 3484: jpnpbf[0] = a; 3485: jpnpnd = 1; 3486: jpnpnt = 0; 3487: a = 0x8e; 3488: } 3489: return(a); 3490: } else if (fcharset == FC_JIS7 ) { /* 7-bit JIS X 0208 */ 3491: if (jpnpnd) { 3492: a = jpnpbf[jpnpnt++]; 3493: jpnpnd--; 3494: return(a); 3495: } 3496: jpnpnt = 0; 3497: if ((a = (*fn)()) < 0) 3498: return(a); 3499: while (jpnpnd == 0) { 3500: if ((a > 0x20) && (a < 0x7f)) { 3501: switch (jpnstz) { 3502: case 1: 3503: jpnpbf[jpnpnd++] = 0x80; /* Katakana */ 3504: jpnpbf[jpnpnd++] = (a | 0x80); 3505: break; 3506: case 2: 3507: jpnpbf[jpnpnd++] = (a | 0x80); /* Kanji */ 3508: if ((a = (*fn)()) < 0) 3509: return(a); 3510: jpnpbf[jpnpnd++] = (a | 0x80); 3511: break; 3512: default: 3513: jpnpbf[jpnpnd++] = a; /* Single byte */ 3514: break; 3515: } 3516: } else if (a == 0x0e) { 3517: jpnstz = 1; 3518: if ((a = (*fn)()) < 0) 3519: return(a); 3520: } else if (a == 0x0f) { 3521: jpnstz = 0; 3522: if ((a = (*fn)()) < 0) 3523: return(a); 3524: } else if (a == 0x1b) { 3525: jpnpbf[jpnpnd++] = a; /* Escape */ 3526: if ((a = (*fn)()) < 0) 3527: return(a); 3528: jpnpbf[jpnpnd++] = a; 3529: if (a == '$') { 3530: if ((a = (*fn)()) < 0) 3531: return(a); 3532: jpnpbf[jpnpnd++] = a; 3533: if ((a == '@') || (a == 'B')) { 3534: jpnstz = 2; 3535: jpnpnt = jpnpnd = 0; 3536: if ((a = (*fn)()) < 0) 3537: return(a); 3538: } 3539: } else if (a == '(') { 3540: if ((a = (*fn)()) < 0) 3541: return( a ); 3542: jpnpbf[jpnpnd++] = a; 3543: if ((a == 'B') || (a == 'J')) { 3544: jpnstz = 0; 3545: jpnpnt = jpnpnd = 0; 3546: if ((a = (*fn)()) < 0) 3547: return(a); 3548: } 3549: } else if (a == 0x1b) { 3550: jpnpnt = jpnpnd = 0; 3551: if ((a = (*fn)()) < 0) 3552: return(a); 3553: } 3554: } else { 3555: jpnpbf[jpnpnd++] = a; 3556: } 3557: } 3558: jpnpnt = 0; 3559: a = jpnpbf[jpnpnt++]; 3560: jpnpnd--; 3561: return(a); 3562: } else { 3563: a = (*fn)(); 3564: return(a); 3565: } 3566: } 3567: #endif /* KANJI */ 3568: 3569: 3570: /* TABLES OF TRANSLATION FUNCTIONS */ 3571: 3572: /* 3573: First, the table of translation functions for RECEIVING files. 3574: That is, *from* the TRANSFER character set *to* the FILE character set, 3575: an array of pointers to functions. The first index is the 3576: transfer syntax character set number, the second index is the file 3577: character set number. 3578: 3579: These arrays must be fully populated, even if (as is the case with 3580: Kanji character sets), all the entries are NULL. Otherwise, 3581: subscript calculations will be wrong and we'll use the wrong functions. 3582: */ 3583: 3584: #ifdef CK_ANSIC 3585: CHAR (*xlr[MAXTCSETS+1][MAXFCSETS+1])(CHAR) = 3586: #else 3587: CHAR (*xlr[MAXTCSETS+1][MAXFCSETS+1])() = 3588: #endif /* CK_ANSIC */ 3589: { 3590: NULL, /* 0,0 transparent to us ascii */ 3591: NULL, /* 0,1 transparent to uk ascii */ 3592: NULL, /* 0,2 transparent to dutch nrc */ 3593: NULL, /* 0,3 transparent to finnish nrc */ 3594: NULL, /* 0,4 transparent to french nrc */ 3595: NULL, /* 0,5 transparent to fr-canadian nrc */ 3596: NULL, /* 0,6 transparent to german nrc */ 3597: NULL, /* 0,7 transparent to hungarian nrc */ 3598: NULL, /* 0,8 transparent to italian nrc */ 3599: NULL, /* 0,9 transparent to norge/danish nrc */ 3600: NULL, /* 0,10 transparent to portuguese nrc */ 3601: NULL, /* 0,11 transparent to spanish nrc */ 3602: NULL, /* 0,12 transparent to swedish nrc */ 3603: NULL, /* 0,13 transparent to swiss nrc */ 3604: NULL, /* 0,14 transparent to latin-1 */ 3605: NULL, /* 0,15 transparent to latin-2 */ 3606: NULL, /* 0,16 transparent to DEC MCS */ 3607: NULL, /* 0,17 transparent to NeXT */ 3608: NULL, /* 0,18 transparent to CP437 */ 3609: NULL, /* 0,19 transparent to CP850 */ 3610: NULL, /* 0,20 transparent to CP852 */ 3611: NULL, /* 0,21 transparent to Macintosh Latin */ 3612: NULL, /* 0,22 transparent to DGI */ 3613: NULL, /* 0,23 transparent to Latin/Cyrillic */ 3614: NULL, /* 0,24 transparent to CP866 */ 3615: NULL, /* 0,25 transparent to Short KOI-7 */ 3616: NULL, /* 0,26 transparent to Old KOI-8 Cyrillic */ 3617: NULL, /* 0,27 transparent to JIS-7 */ 3618: NULL, /* 0,28 transparent to Shift-JIS */ 3619: NULL, /* 0,29 transparent to J-EUC */ 3620: NULL, /* 0,30 transparent to DEC Kanji */ 3621: NULL, /* 1,0 ascii to us ascii */ 3622: NULL, /* 1,1 ascii to uk ascii */ 3623: NULL, /* 1,2 ascii to dutch nrc */ 3624: NULL, /* 1,3 ascii to finnish nrc */ 3625: NULL, /* 1,4 ascii to french nrc */ 3626: NULL, /* 1,5 ascii to fr-canadian nrc */ 3627: NULL, /* 1,6 ascii to german nrc */ 3628: NULL, /* 1,7 ascii to hungarian nrc */ 3629: NULL, /* 1,8 ascii to italian nrc */ 3630: NULL, /* 1,9 ascii to norge/danish nrc */ 3631: NULL, /* 1,10 ascii to portuguese nrc */ 3632: NULL, /* 1,11 ascii to spanish nrc */ 3633: NULL, /* 1,12 ascii to swedish nrc */ 3634: NULL, /* 1,13 ascii to swiss nrc */ 3635: NULL, /* 1,14 ascii to latin-1 */ 3636: NULL, /* 1,15 ascii to latin-2 */ 3637: NULL, /* 1,16 ascii to DEC MCS */ 3638: NULL, /* 1,17 ascii to NeXT */ 3639: NULL, /* 1,18 ascii to CP437 */ 3640: NULL, /* 1,19 ascii to CP850 */ 3641: NULL, /* 1,20 ascii to CP852 */ 3642: NULL, /* 1,21 ascii to Macintosh Latin */ 3643: NULL, /* 1,22 ascii to DGI */ 3644: xaslc, /* 1,23 ascii to Latin/Cyrillic */ 3645: xasac, /* 1,24 ascii to CP866 */ 3646: xassk, /* 1,25 ascii to Short KOI */ 3647: xask8, /* 1,26 ascii to Old KOI-8 Cyrillic */ 3648: NULL, /* 1,27 ascii to JIS-7 */ 3649: NULL, /* 1,28 ascii to Shift-JIS */ 3650: NULL, /* 1,29 ascii to J-EUC */ 3651: NULL, /* 1,30 ascii to DEC Kanji */ 3652: zl1as, /* 2,0 latin-1 to us ascii */ 3653: xl1uk, /* 2,1 latin-1 to uk ascii */ 3654: xl1du, /* 2,2 latin-1 to dutch nrc */ 3655: xl1fi, /* 2,3 latin-1 to finnish nrc */ 3656: xl1fr, /* 2,4 latin-1 to french nrc */ 3657: xl1fc, /* 2,5 latin-1 to fr-canadian nrc */ 3658: xl1ge, /* 2,6 latin-1 to german nrc */ 3659: xl1it, /* 2,7 latin-1 to italian nrc */ 3660: xl1hu, /* 2,8 latin-1 to hungarian nrc */ 3661: xl1no, /* 2,9 latin-1 to norge/danish nrc */ 3662: xl1po, /* 2,10 latin-1 to portuguese nrc */ 3663: xl1sp, /* 2,11 latin-1 to spanish nrc */ 3664: xl1sw, /* 2,12 latin-1 to swedish nrc */ 3665: xl1ch, /* 2,13 latin-1 to swiss nrc */ 3666: NULL, /* 2,14 latin-1 to latin-1 */ 3667: xl1l2, /* 2,15 latin-1 to latin-2 */ 3668: xl1dm, /* 2,16 latin-1 to DEC MCS */ 3669: xl1ne, /* 2,17 latin-1 to NeXT */ 3670: xl143, /* 2,18 latin-1 to CP437 */ 3671: xl185, /* 2,19 latin-1 to CP850 */ 3672: xl152, /* 2,20 latin-1 to CP852 */ 3673: xl1aq, /* 2,21 latin-1 to Macintosh Latin */ 3674: xl1dg, /* 2,22 latin-1 to DGI */ 3675: zl1as, /* 2,23 latin-1 to Latin/Cyrillic */ 3676: zl1as, /* 2,24 latin-1 to CP866 */ 3677: xl1sk, /* 2,25 latin-1 to Short KOI */ 3678: zl1as, /* 2,26 latin-1 to Old KOI-8 Cyrillic */ 3679: NULL, /* 2,27 latin-1 to JIS-7 */ 3680: NULL, /* 2,28 latin-1 to Shift-JIS */ 3681: NULL, /* 2,29 latin-1 to J-EUC */ 3682: NULL, /* 2,30 latin-1 to DEC Kanji */ 3683: xl2as, /* 3,0 latin-2 to us ascii */ 3684: xl2as, /* 3,1 latin-2 to uk ascii */ 3685: xl2as, /* 3,2 latin-2 to dutch nrc */ 3686: xl2as, /* 3,3 latin-2 to finnish nrc */ 3687: xl2as, /* 3,4 latin-2 to french nrc */ 3688: xl2as, /* 3,5 latin-2 to fr-canadian nrc */ 3689: xl2as, /* 3,6 latin-2 to german nrc */ 3690: xl2as, /* 3,7 latin-2 to italian nrc */ 3691: xl2as, /* 3,8 latin-2 to hungarian nrc */ 3692: xl2as, /* 3,9 latin-2 to norge/danish nrc */ 3693: xl2as, /* 3,10 latin-2 to portuguese nrc */ 3694: xl2as, /* 3,11 latin-2 to spanish nrc */ 3695: xl2as, /* 3,12 latin-2 to swedish nrc */ 3696: xl2as, /* 3,13 latin-2 to swiss nrc */ 3697: xl2l1, /* 3,14 latin-2 to latin-1 */ 3698: NULL, /* 3,15 latin-2 to latin-2 */ 3699: xl2l1, /* 3,16 latin-2 to DEC MCS */ 3700: xl2ne, /* 3,17 latin-2 to NeXT */ 3701: xl243, /* 3,18 latin-2 to CP437 */ 3702: xl285, /* 3,19 latin-2 to CP850 */ 3703: xl252, /* 3,20 latin-2 to CP852 */ 3704: xl2aq, /* 3,21 latin-2 to Macintosh Latin */ 3705: xl2dg, /* 3,22 latin-2 to DGI */ 3706: xl2as, /* 3,23 latin-2 to Latin/Cyrillic */ 3707: xl2as, /* 3,24 latin-2 to CP866 */ 3708: xl2sk, /* 3,25 latin-2 to Short KOI */ 3709: xl2as, /* 3,26 latin-2 to Old KOI-8 Cyrillic */ 3710: NULL, /* 3,27 latin-2 to JIS-7 */ 3711: NULL, /* 3,28 latin-2 to Shift-JIS */ 3712: NULL, /* 3,29 latin-2 to J-EUC */ 3713: NULL, /* 3,30 latin-2 to DEC Kanji */ 3714: xlcas, /* 4,0 latin/cyrillic to us ascii */ 3715: xlcas, /* 4,1 latin/cyrillic to uk ascii */ 3716: xlcas, /* 4,2 latin/cyrillic to dutch nrc */ 3717: xlcas, /* 4,3 latin/cyrillic to finnish ascii */ 3718: xlcas, /* 4,4 latin/cyrillic to french nrc */ 3719: xlcas, /* 4,5 latin/cyrillic to fr-canadian nrc */ 3720: xlcas, /* 4,6 latin/cyrillic to german nrc */ 3721: xlcas, /* 4,7 latin/cyrillic to italian nrc */ 3722: xlcas, /* 4,8 latin/cyrillic to hungarian nrc */ 3723: xlcas, /* 4,9 latin/cyrillic to norge/danish nrc */ 3724: xlcas, /* 4,10 latin/cyrillic to portuguese nrc */ 3725: xlcas, /* 4,11 latin/cyrillic to spanish nrc */ 3726: xlcas, /* 4,12 latin/cyrillic to swedish nrc */ 3727: xlcas, /* 4,13 latin/cyrillic to swiss nrc */ 3728: xlcas, /* 4,14 latin/cyrillic to latin-1 */ 3729: xlcas, /* 4,15 latin/cyrillic to latin-2 */ 3730: xlcas, /* 4,16 latin/cyrillic to DEC MCS */ 3731: xlcas, /* 4,17 latin/cyrillic to NeXT */ 3732: xlcas, /* 4,18 latin/cyrillic to CP437 */ 3733: xlcas, /* 4,19 latin/cyrillic to CP850 */ 3734: xlcas, /* 4,20 latin/cyrillic to CP852 */ 3735: xlcas, /* 4,21 latin/cyrillic to Macintosh Latin */ 3736: xlcas, /* 4,22 latin/cyrillic to DGI */ 3737: NULL, /* 4,23 latin/cyrillic to Latin/Cyrillic */ 3738: xlcac, /* 4,24 latin/cyrillic to CP866 */ 3739: xlcsk, /* 4,25 latin/cyrillic to Short KOI */ 3740: xlck8, /* 4,26 latin/cyrillic to Old KOI-8 Cyrillic */ 3741: NULL, /* 4,27 latin/cyril to JIS-7 */ 3742: NULL, /* 4,28 latin/cyril to Shift-JIS */ 3743: NULL, /* 4,29 latin/cyril to J-EUC */ 3744: NULL, /* 4,30 latin/cyril to DEC Kanji */ 3745: 3746: /* Kanji to others ... */ 3747: 3748: NULL, /* 5,00 */ 3749: NULL, /* 5,01 */ 3750: NULL, /* 5,02 */ 3751: NULL, /* 5,03 */ 3752: NULL, /* 5,04 */ 3753: NULL, /* 5,05 */ 3754: NULL, /* 5,06 */ 3755: NULL, /* 5,07 */ 3756: NULL, /* 5,08 */ 3757: NULL, /* 5,09 */ 3758: NULL, /* 5,10 */ 3759: NULL, /* 5,11 */ 3760: NULL, /* 5,12 */ 3761: NULL, /* 5,13 */ 3762: NULL, /* 5,14 */ 3763: NULL, /* 5,15 */ 3764: NULL, /* 5,16 */ 3765: NULL, /* 5,17 */ 3766: NULL, /* 5,18 */ 3767: NULL, /* 5,19 */ 3768: NULL, /* 5,20 */ 3769: NULL, /* 5,21 */ 3770: NULL, /* 5,22 */ 3771: NULL, /* 5,23 */ 3772: NULL, /* 5,24 */ 3773: NULL, /* 5,25 */ 3774: NULL, /* 5,26 */ 3775: NULL, /* 5,27 */ 3776: NULL, /* 5,28 */ 3777: NULL, /* 5,29 */ 3778: NULL /* 5,30 */ 3779: }; 3780: 3781: /* 3782: Translation function table for sending files. 3783: Array of pointers to functions for translating from the local file 3784: character set to the transfer syntax character set. Indexed in the same 3785: way as the xlr array above. 3786: */ 3787: #ifdef CK_ANSIC 3788: CHAR (*xls[MAXTCSETS+1][MAXFCSETS+1])(CHAR) = 3789: #else 3790: CHAR (*xls[MAXTCSETS+1][MAXFCSETS+1])() = 3791: #endif /* CK_ANSIC */ 3792: { 3793: NULL, /* 0,0 us ascii to transparent */ 3794: NULL, /* 0,1 uk ascii to transparent */ 3795: NULL, /* 0,2 dutch nrc to transparent */ 3796: NULL, /* 0,3 finnish nrc to transparent */ 3797: NULL, /* 0,4 french nrc to transparent */ 3798: NULL, /* 0,5 fr-canadian nrc to transparent */ 3799: NULL, /* 0,6 german nrc to transparent */ 3800: NULL, /* 0,7 hungarian nrc to transparent */ 3801: NULL, /* 0,8 italian nrc to transparent */ 3802: NULL, /* 0,9 norge/danish nrc to transparent */ 3803: NULL, /* 0,10 portuguese nrc to transparent */ 3804: NULL, /* 0,11 spanish nrc to transparent */ 3805: NULL, /* 0,12 swedish nrc to transparent */ 3806: NULL, /* 0,13 swiss nrc to transparent */ 3807: NULL, /* 0,14 latin-1 to transparent */ 3808: NULL, /* 0,15 latin-2 to transparent */ 3809: NULL, /* 0,16 DEC MCS to transparent */ 3810: NULL, /* 0,17 NeXT to transparent */ 3811: NULL, /* 0,18 CP437 to transparent */ 3812: NULL, /* 0,19 CP850 to transparent */ 3813: NULL, /* 0,20 CP852 to transparent */ 3814: NULL, /* 0,21 Macintosh Latin to transparent */ 3815: NULL, /* 0,22 DGI to transparent */ 3816: NULL, /* 0,23 Latin/Cyrillic to transparent */ 3817: NULL, /* 0,24 CP866 to transparent */ 3818: NULL, /* 0,25 Short KOI to transparent */ 3819: NULL, /* 0,26 Old KOI-8 to transparent */ 3820: NULL, /* 0,27 JIS-7 to transparent */ 3821: NULL, /* 0,28 Shift JIS to transparent */ 3822: NULL, /* 0,29 Japanese EUC to transparent */ 3823: NULL, /* 0,30 DEC Kanji to transparent */ 3824: NULL, /* 1,0 us ascii to ascii */ 3825: NULL, /* 1,1 uk ascii to ascii */ 3826: xduas, /* 1,2 dutch nrc to ascii */ 3827: xfias, /* 1,3 finnish nrc to ascii */ 3828: xfras, /* 1,4 french nrc to ascii */ 3829: xfcas, /* 1,5 french canadian nrc to ascii */ 3830: xgeas, /* 1,6 german nrc to ascii */ 3831: xhuas, /* 1,7 hungarian nrc to ascii */ 3832: xitas, /* 1,8 italian nrc to ascii */ 3833: xnoas, /* 1,9 norwegian/danish nrc to ascii */ 3834: xpoas, /* 1,10 portuguese nrc to ascii */ 3835: xspas, /* 1,11 spanish nrc to ascii */ 3836: xswas, /* 1,12 swedish nrc to ascii */ 3837: xchas, /* 1,13 swiss nrc to ascii */ 3838: xl1as, /* 1,14 latin-1 to ascii */ 3839: xl2as, /* 1,15 latin-2 to ascii */ 3840: xdmas, /* 1,16 dec mcs to ascii */ 3841: xneas, /* 1,17 NeXT to ascii */ 3842: x43as, /* 1,18 CP437 to ascii */ 3843: x85as, /* 1,19 CP850 to ascii */ 3844: x52as, /* 1,20 CP850 to ascii */ 3845: xaqas, /* 1,21 Macintosh Latin to ascii */ 3846: xdgas, /* 1,22 DGI to ascii */ 3847: xlcas, /* 1,23 Latin/Cyrillic to ASCII */ 3848: xacas, /* 1,24 CP866 to ASCII */ 3849: xskas, /* 1,25 Short KOI to ASCII */ 3850: xk8as, /* 1,26 Old KOI-8 Cyrillic to ASCII */ 3851: NULL, /* 1,27 */ 3852: NULL, /* 1,28 */ 3853: NULL, /* 1,29 */ 3854: NULL, /* 1,30 */ 3855: NULL, /* 2,0 us ascii to latin-1 */ 3856: xukl1, /* 2,1 uk ascii to latin-1 */ 3857: xdul1, /* 2,2 dutch nrc to latin-1 */ 3858: xfil1, /* 2,3 finnish nrc to latin-1 */ 3859: xfrl1, /* 2,4 french nrc to latin-1 */ 3860: xfcl1, /* 2,5 french canadian nrc to latin-1 */ 3861: xgel1, /* 2,6 german nrc to latin-1 */ 3862: xhul1, /* 2,7 hungarian nrc to latin-1 */ 3863: xitl1, /* 2,8 italian nrc to latin-1 */ 3864: xnol1, /* 2,9 norwegian/danish nrc to latin-1 */ 3865: xpol1, /* 2,10 portuguese nrc to latin-1 */ 3866: xspl1, /* 2,11 spanish nrc to latin-1 */ 3867: xswl1, /* 2,12 swedish nrc to latin-1 */ 3868: xchl1, /* 2,13 swiss nrc to latin-1 */ 3869: NULL, /* 2,14 latin-1 to latin-1 */ 3870: xl2l1, /* 2,15 latin-2 to latin-1 */ 3871: xdml1, /* 2,16 dec mcs to latin-1 */ 3872: xnel1, /* 2,17 NeXT to Latin-1 */ 3873: x43l1, /* 2,18 CP437 to Latin-1 */ 3874: x85l1, /* 2,19 CP850 to Latin-1 */ 3875: x52l1, /* 2,20 CP852 to Latin-1 */ 3876: xaql1, /* 2,21 Macintosh Latin to Latin-1 */ 3877: xdgl1, /* 2,22 DGI to Latin-1 */ 3878: xlcas, /* 2,23 Latin/Cyrillic to Latin-1 */ 3879: xacas, /* 2,24 CP866 to Latin-1 */ 3880: xskas, /* 2,25 Short KOI to Latin-1 */ 3881: xk8as, /* 2,26 Old KOI-8 Cyrillic to Latin-1 */ 3882: NULL, /* 2,27 Kanji ... */ 3883: NULL, /* 2,28 */ 3884: NULL, /* 2,29 */ 3885: NULL, /* 2,30 */ 3886: NULL, /* 3,0 us ascii to latin-2 */ 3887: NULL, /* 3,1 uk ascii to latin-2 */ 3888: xduas, /* 3,2 dutch nrc to latin-2 */ 3889: xfias, /* 3,3 finnish nrc to latin-2 */ 3890: xfras, /* 3,4 french nrc to latin-2 */ 3891: xfcas, /* 3,5 french canadian nrc to latin-2 */ 3892: xgel2, /* 3,6 german nrc to latin-2 */ 3893: xhul2, /* 3,7 hungarian nrc to latin-2 */ 3894: xitas, /* 3,8 italian nrc to latin-2 */ 3895: xnoas, /* 3,9 norwegian/danish nrc to latin-2 */ 3896: xpoas, /* 3,10 portuguese nrc to latin-2 */ 3897: xspas, /* 3,11 spanish nrc to latin-2 */ 3898: xswas, /* 3,12 swedish nrc to latin-2 */ 3899: xchas, /* 3,13 swiss nrc to latin-2 */ 3900: xl1l2, /* 3,14 latin-1 to latin-2 */ 3901: NULL, /* 3,15 latin-2 to latin-2 */ 3902: xl1l2, /* 3,16 dec mcs to latin-2 */ 3903: xnel2, /* 3,17 NeXT to Latin-2 */ 3904: x43l2, /* 3,18 CP437 to Latin-2 */ 3905: x85l2, /* 3,19 CP850 to Latin-2 */ 3906: x52l2, /* 3,20 CP852 to Latin-2 */ 3907: xaql2, /* 3,21 Macintosh Latin to Latin-2 */ 3908: xdgl2, /* 3,22 DGI to Latin-2 */ 3909: xlcas, /* 3,23 Latin/Cyrillic to Latin-2 */ 3910: xacas, /* 3,24 CP866 to Latin-2 */ 3911: xskas, /* 3,25 Short KOI to Latin-2 */ 3912: xk8as, /* 3,26 Old KOI-8 Cyrillic to Latin-2 */ 3913: NULL, /* 3,27 Kanji ... */ 3914: NULL, /* 3,28 */ 3915: NULL, /* 3,29 */ 3916: NULL, /* 3,30 */ 3917: xaslc, /* 4,0 us ascii to latin/cyrillic */ 3918: xaslc, /* 4,1 uk ascii to latin/cyrillic */ 3919: xduas, /* 4,2 dutch nrc to latin/cyrillic */ 3920: xfias, /* 4,3 finnish nrc to latin/cyrillic */ 3921: xfras, /* 4,4 french nrc to latin/cyrillic */ 3922: xfcas, /* 4,5 french canadian nrc to latin/cyrillic */ 3923: xgeas, /* 4,6 german nrc to latin/cyrillic */ 3924: xhuas, /* 4,7 hungarian nrc to latin/cyrillic */ 3925: xitas, /* 4,8 italian nrc to latin/cyrillic */ 3926: xnoas, /* 4,9 norge/danish nrc to latin/cyrillic */ 3927: xpoas, /* 4,10 portuguese nrc to latin/cyrillic */ 3928: xspas, /* 4,11 spanish nrc to latin/cyrillic */ 3929: xswas, /* 4,12 swedish nrc to latin/cyrillic */ 3930: xchas, /* 4,13 swiss nrc to latin/cyrillic */ 3931: xl1as, /* 4,14 latin-1 to latin/cyrillic */ 3932: xl2as, /* 4,15 latin-2 to latin/cyrillic */ 3933: xdmas, /* 4,16 dec mcs to latin/cyrillic */ 3934: xneas, /* 4,17 NeXT to latin/cyrillic */ 3935: x43as, /* 4,18 CP437 to latin/cyrillic */ 3936: x85as, /* 4,19 CP850 to latin/cyrillic */ 3937: x52as, /* 4,20 CP852 to latin/cyrillic */ 3938: xaqas, /* 4,21 Macintosh Latin to latin/cyrillic */ 3939: xdgas, /* 4,22 DGI to Latin/Cyrillic */ 3940: NULL, /* 4,23 Latin/Cyrillic to Latin/Cyrillic */ 3941: xaclc, /* 4,24 CP866 to Latin/Cyrillic */ 3942: xskcy, /* 4,25 Short KOI to Latin/Cyrillic */ 3943: xk8lc, /* 4,26 Old KOI-8 Cyrillic to Latin/Cyrillic */ 3944: NULL, /* 4,27 Kanji... */ 3945: NULL, /* 4,28 */ 3946: NULL, /* 4,29 */ 3947: NULL, /* 4,30 */ 3948: NULL, /* 5,00 */ 3949: NULL, /* 5,01 */ 3950: NULL, /* 5,02 */ 3951: NULL, /* 5,03 */ 3952: NULL, /* 5,04 */ 3953: NULL, /* 5,05 */ 3954: NULL, /* 5,06 */ 3955: NULL, /* 4.07 */ 3956: NULL, /* 5,08 */ 3957: NULL, /* 5,09 */ 3958: NULL, /* 5,10 */ 3959: NULL, /* 5,11 */ 3960: NULL, /* 5,12 */ 3961: NULL, /* 5,13 */ 3962: NULL, /* 5,14 */ 3963: NULL, /* 5,15 */ 3964: NULL, /* 5,16 */ 3965: NULL, /* 5,17 */ 3966: NULL, /* 5,18 */ 3967: NULL, /* 5,19 */ 3968: NULL, /* 5,20 */ 3969: NULL, /* 5,21 */ 3970: NULL, /* 5,22 */ 3971: NULL, /* 5,23 */ 3972: NULL, /* 5,24 */ 3973: NULL, /* 5,25 */ 3974: NULL, /* 5,26 */ 3975: NULL, /* 5,27 */ 3976: NULL, /* 5,28 */ 3977: NULL, /* 5,29 */ 3978: NULL, /* 5,30 */ 3979: }; 3980: #endif /* NOCSETS */