Annotation of coherent/g/usr/bin/ckermit/ckuxla.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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