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