Annotation of coherent/e/bin/cku179/ckuxla.c, revision 1.1.1.1

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 */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.