|
|
1.1 ! root 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 ([email protected], [email protected]), ! 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 */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.