ckuxla.c
上传用户:dufan58
上传日期:2007-01-05
资源大小:3407k
文件大小:255k
源码类别:

通讯/手机编程

开发平台:

Windows_Unix

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