home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 3 Comm / 03-Comm.zip / CKPM5X_S.ZIP / CKCXLA.C < prev    next >
C/C++ Source or Header  |  1990-03-02  |  69KB  |  1,412 lines

  1. /*  C K C X L A  */
  2.  
  3. /*  C-Kermit tables and functions supporting character set translation.  */
  4. /*
  5.  Author: Frank da Cruz (fdc@columbia.edu, FDCCU@CUVMA.BITNET),
  6.  Columbia University Center for Computing Activities.
  7.  Copyright (C) 1989, Trustees of Columbia University in the City of New York.
  8.  Permission is granted to any individual or institution to use, copy, or
  9.  redistribute this software so long as it is not sold for profit, provided
  10.  this copyright notice is retained. 
  11. */
  12.  
  13. #ifndef NULL
  14. #define NULL 0
  15. #endif
  16.  
  17. #include "ckcdeb.h"            /* Includes... */
  18. #include "ckcker.h"
  19. #include "ckucmd.h"
  20. #include "ckcxla.h"
  21.  
  22. /* Character set translation data and functions */
  23.  
  24. extern int zincnt;
  25. extern CHAR *zinptr;
  26.  
  27. int tslevel  = TS_L0;            /* Transfer syntax level (0,1,2) */
  28. int tcharset = TC_USASCII;        /* Transfer syntax character set */
  29. int fcharset = FC_USASCII;        /* Local file character set */
  30. int language = L_USASCII;        /* Language */
  31.  
  32. /* Nota Bene: I6/100 is the proper designation for Latin-1, but MS-DOS */
  33. /* Kermit 3.00 uses I2/100 (this will be fixed in 3.01).  This table */
  34. /* allows C-Kermit to recognize either one when receiving a file, but */
  35. /* when sending, C-Kermit uses I6/100, which MS-DOS Kermit 3.00 will not */
  36. /* recognize.  Workaround: in MS-DOS Kermit, SET TRANSF CHAR LATIN1, */
  37. /* SET ATTR CHAR OFF. */
  38.  
  39. struct csinfo tcsinfo[] = {        /* Transfer character-set info */
  40.     "ASCII 7-bit text", 256, TC_NORMAL, "",               /* 0 */        
  41.     "Latin-1 ISO 8859-1 text", 256, TC_1LATIN, "I6/100",  /* 1 */
  42.     "Latin-1 ISO 8859-1 text", 256, TC_1LATIN, "I2/100"   /* 2 */
  43. };
  44. int ntcsets = (sizeof(tcsinfo) / sizeof(struct csinfo));
  45.  
  46. /* Grrr... Had to back off on moving this to ckuxla.h because that file */
  47. /* is included by more than one module, so link complains about multiple */
  48. /* definitions of _fcsinfo, _fcstab, etc. */
  49.  
  50. /* File character set information structure, indexed by character set code, */
  51. /* as defined immediately above.  This table must be in order of character */
  52. /* set number! */ 
  53.  
  54. struct csinfo fcsinfo[] = { /* File character set information... */
  55.   /* Descriptive Name              Size  Designator */
  56.     "US ASCII",                     128, FC_USASCII, NULL,
  57.     "British/UK NRC ISO-646",       128, FC_UKASCII, NULL,
  58.     "Dutch NRC ISO-646",            128, FC_DUASCII, NULL,
  59.     "Finnish NRC ISO-646",          128, FC_FIASCII, NULL,
  60.     "French NRC ISO-646",           128, FC_FRASCII, NULL,
  61.     "French-Canadian NRC ISO-646",  128, FC_FCASCII, NULL,
  62.     "German NRC ISO-646",           128, FC_GEASCII, NULL,
  63.     "Hungarian NRC ISO-646",        128, FC_HUASCII, NULL,
  64.     "Italian NRC ISO-646",          128, FC_ITASCII, NULL,
  65.     "Norwegian/Danish NRC ISO-646", 128, FC_NOASCII, NULL,
  66.     "Portuguese NRC ISO-646",       128, FC_POASCII, NULL,
  67.     "Spanish NRC ISO-646",          128, FC_SPASCII, NULL,
  68.     "Swedish NRC ISO-646",          128, FC_SWASCII, NULL,
  69.     "Swiss NRC ISO-646",            128, FC_CHASCII, NULL,
  70.     "ISO Latin-1",                  256, FC_1LATIN,  NULL,
  71.     "DEC Multinational",            256, FC_DECMCS,  NULL
  72. };    
  73.  
  74. /* Local file character sets */
  75. /* Includes 7-bit National Replacement Character Sets of ISO 646 */
  76. /* Plus ISO Latin-1 and DEC Multinational Character Set (MCS) */
  77.  
  78. struct keytab fcstab[] = { /* Keyword table for 'set file character-set' */
  79.  
  80. /* Keyword             Value       Flags */
  81.     "ascii",            FC_USASCII, 0,    /* ASCII */
  82.     "british",          FC_UKASCII, 0,    /* British NRC */
  83.     "dec-mcs",          FC_DECMCS,  0,  /* DEC multinational character set */
  84.     "dutch",            FC_DUASCII, 0,    /* Dutch NRC */
  85.     "finnish",          FC_FIASCII, 0,    /* Finnish NRC */
  86.     "french",           FC_FRASCII, 0,    /* French NRC */
  87.     "fr-canadian",      FC_FCASCII, 0,    /* French Canadian NRC */
  88.     "german",           FC_GEASCII, 0,    /* German NRC */
  89.     "hungarian",        FC_HUASCII, 0,    /* Hungarian NRC */
  90.     "italian",          FC_ITASCII, 0,    /* Italian NRC */
  91.     "latin-1",          FC_1LATIN,  0,    /* ISO Latin Alphabet 1 */
  92.     "norwegian/danish", FC_NOASCII, 0,    /* Norwegian and Danish NRC */
  93.     "portuguese",       FC_POASCII, 0,    /* Portuguese NRC */
  94.     "spanish",          FC_SPASCII, 0,    /* Spanish NRC */
  95.     "swedish",          FC_SWASCII, 0,    /* Swedish NRC */
  96.     "swiss",            FC_CHASCII, 0    /* Swiss NRC */
  97. };
  98. int nfilc = (sizeof(fcstab) / sizeof(struct keytab)); /* size of this table */
  99.  
  100. /*
  101.  Languages:
  102.  
  103.  This table serves two purposes.  First, it allows C-Kermit to have a
  104.  SET LANGUAGE command, which automatically selects the associated file
  105.  character set and transfer character set.  Second, it allows the program
  106.  to apply special language-specific rules when translating from a character
  107.  set that contains national characters into plain ASCII, like German umlaut-a
  108.  becomes ae.
  109. */
  110.  
  111. struct langinfo langs[] = {
  112. /*  Language code   File Charset Xfer Charset Name */
  113.     L_USASCII,      FC_USASCII,  TC_USASCII,  "ASCII (American English)",
  114.     L_BRITISH,      FC_UKASCII,  TC_1LATIN,   "British (English)",
  115.     L_DANISH,       FC_NOASCII,  TC_1LATIN,   "Danish",
  116.     L_DUTCH,        FC_DUASCII,  TC_1LATIN,   "Dutch",
  117.     L_FINNISH,      FC_FIASCII,  TC_1LATIN,   "Finnish",
  118.     L_FRENCH,       FC_FRASCII,  TC_1LATIN,   "French",
  119.     L_FR_CANADIAN,  FC_FCASCII,  TC_1LATIN,   "French-Canadian",
  120.     L_GERMAN,       FC_GEASCII,  TC_1LATIN,   "German",
  121.     L_HUNGARIAN,    FC_HUASCII,  TC_1LATIN,   "Hungarian",
  122.     L_ITALIAN,      FC_ITASCII,  TC_1LATIN,   "Italian",
  123.     L_NORWEGIAN,    FC_NOASCII,  TC_1LATIN,   "Norwegian",
  124.     L_PORTUGUESE,   FC_POASCII,  TC_1LATIN,   "Portuguese",
  125.     L_SPANISH,      FC_SPASCII,  TC_1LATIN,   "Spanish",
  126.     L_SWEDISH,      FC_SWASCII,  TC_1LATIN,   "Swedish",
  127.     L_SWISS,        FC_CHASCII,  TC_1LATIN,   "Swiss"
  128. };
  129.  
  130. /* Translation tables ... */
  131.  
  132. /*
  133.   Note, many more can and should be added.
  134.   Presently we have only ASCII and Latin-1 as transfer character sets
  135.   and ASCII, Latin-1, DEC-MCS, and many ISO-646 NRCs as file character sets
  136.   For each pair of (file,transfer) character sets, we need two translation
  137.   functions, one for sending, one for receiving.  It is recommended that
  138.   functions and tables for all computers be included in this file, preferably
  139.   without #ifdef's, so that corrections need be made only in one place.
  140. */
  141.  
  142. /* Here is the first table, fully annotated... */
  143.  
  144. CHAR
  145. yl1toas[] = {  /* ISO 8859-1 Latin-1 to ascii */
  146.       /*  Source character    Description               => Translation */
  147.       /*  Dec row/col Set
  148.   0,  /*  000  00/00  C0 NUL  Ctrl-@                    =>  (self)  */
  149.   1,  /*  001  00/01  C0 SOH  Ctrl-A                    =>  (self)  */
  150.   2,  /*  002  00/02  C0 STX  Ctrl-B                    =>  (self)  */
  151.   3,  /*  003  00/03  C0 ETX  Ctrl-C                    =>  (self)  */
  152.   4,  /*  004  00/04  C0 EOT  Ctrl-D                    =>  (self)  */
  153.   5,  /*  005  00/05  C0 ENQ  Ctrl-E                    =>  (self)  */
  154.   6,  /*  006  00/06  C0 ACK  Ctrl-F                    =>  (self)  */
  155.   7,  /*  007  00/07  C0 BEL  Ctrl-G                    =>  (self)  */
  156.   8,  /*  008  00/08  C0 BS   Ctrl-H                    =>  (self)  */
  157.   9,  /*  009  00/09  C0 HT   Ctrl-I                    =>  (self)  */
  158.  10,  /*  010  00/10  C0 LF   Ctrl-J                    =>  (self)  */
  159.  11,  /*  011  00/11  C0 VT   Ctrl-K                    =>  (self)  */
  160.  12,  /*  012  00/12  C0 FF   Ctrl-L                    =>  (self)  */
  161.  13,  /*  013  00/13  C0 CR   Ctrl-M                    =>  (self)  */
  162.  14,  /*  014  00/14  C0 SO   Ctrl-N                    =>  (self)  */
  163.  15,  /*  015  00/15  C0 SI   Ctrl-O                    =>  (self)  */
  164.  16,  /*  016  01/00  C0 DLE  Ctrl-P                    =>  (self)  */
  165.  17,  /*  017  01/01  C0 DC1  Ctrl-Q                    =>  (self)  */
  166.  18,  /*  018  01/02  C0 DC2  Ctrl-R                    =>  (self)  */
  167.  19,  /*  019  01/03  C0 DC3  Ctrl-S                    =>  (self)  */
  168.  20,  /*  020  01/04  C0 DC4  Ctrl-T                    =>  (self)  */
  169.  21,  /*  021  01/05  C0 NAK  Ctrl-U                    =>  (self)  */
  170.  22,  /*  022  01/06  C0 SYN  Ctrl-V                    =>  (self)  */
  171.  23,  /*  023  01/07  C0 ETB  Ctrl-W                    =>  (self)  */
  172.  24,  /*  024  01/08  C0 CAN  Ctrl-X                    =>  (self)  */
  173.  25,  /*  025  01/09  C0 EM   Ctrl-Y                    =>  (self)  */
  174.  26,  /*  026  01/10  C0 SUB  Ctrl-Z                    =>  (self)  */
  175.  27,  /*  027  01/11  C0 ESC  Ctrl-[                    =>  (self)  */
  176.  28,  /*  028  01/12  C0 FS   Ctrl-\                    =>  (self)  */
  177.  29,  /*  029  01/13  C0 GS   Ctrl-]                    =>  (self)  */
  178.  30,  /*  030  01/14  C0 RS   Ctrl-^                    =>  (self)  */
  179.  31,  /*  031  01/15  C0 US   Ctrl-_                    =>  (self)  */
  180.  32,  /*  032  02/00     SP   Space                     =>  (self)  */
  181.  33,  /*  033  02/01  G0 !    Exclamation mark          =>  (self)  */
  182.  34,  /*  034  02/02  G0 "    Doublequote               =>  (self)  */
  183.  35,  /*  035  02/03  G0 #    Number sign               =>  (self)  */
  184.  36,  /*  036  02/04  G0 $    Dollar sign               =>  (self)  */
  185.  37,  /*  037  02/05  G0 %    Percent sign              =>  (self)  */
  186.  38,  /*  038  02/06  G0 &    Ampersand                 =>  (self)  */
  187.  39,  /*  039  02/07  G0 '    Apostrophe                =>  (self)  */
  188.  40,  /*  040  02/08  G0 (    Left parenthesis          =>  (self)  */
  189.  41,  /*  041  02/09  G0 )    Right parenthesis         =>  (self)  */
  190.  42,  /*  042  02/10  G0 *    Asterisk                  =>  (self)  */
  191.  43,  /*  043  02/11  G0 +    Plus sign                 =>  (self)  */
  192.  44,  /*  044  02/12  G0 ,    Comma                     =>  (self)  */
  193.  45,  /*  045  02/13  G0 -    Hyphen, minus sign        =>  (self)  */
  194.  46,  /*  046  02/14  G0 .    Period, full stop         =>  (self)  */
  195.  47,  /*  047  02/15  G0 /    Slash, solidus            =>  (self)  */
  196.  48,  /*  048  03/00  G0 0    Digit 0                   =>  (self)  */
  197.  49,  /*  049  03/01  G0 1    Digit 1                   =>  (self)  */
  198.  50,  /*  050  03/02  G0 2    Digit 2                   =>  (self)  */
  199.  51,  /*  051  03/03  G0 3    Digit 3                   =>  (self)  */
  200.  52,  /*  052  03/04  G0 4    Digit 4                   =>  (self)  */
  201.  53,  /*  053  03/05  G0 5    Digit 5                   =>  (self)  */
  202.  54,  /*  054  03/06  G0 6    Digit 6                   =>  (self)  */
  203.  55,  /*  055  03/07  G0 7    Digit 7                   =>  (self)  */
  204.  56,  /*  056  03/08  G0 8    Digit 8                   =>  (self)  */
  205.  57,  /*  057  03/09  G0 9    Digit 9                   =>  (self)  */
  206.  58,  /*  058  03/10  G0 :    Colon                     =>  (self)  */
  207.  59,  /*  059  03/11  G0 ;    Semicolon                 =>  (self)  */
  208.  60,  /*  060  03/12  G0 <    Less-than sign            =>  (self)  */
  209.  61,  /*  061  03/13  G0 =    Equals sign               =>  (self)  */
  210.  62,  /*  062  03/14  G0 >    Greater-than sign         =>  (self)  */
  211.  63,  /*  063  03/15  G0 ?    Question mark             =>  (self)  */
  212.  64,  /*  064  04/00  G0 @    Commercial at sign        =>  (self)  */
  213.  65,  /*  065  04/01  G0 A    Letter A                  =>  (self)  */
  214.  66,  /*  066  04/02  G0 B    Letter B                  =>  (self)  */
  215.  67,  /*  067  04/03  G0 C    Letter C                  =>  (self)  */
  216.  68,  /*  068  04/04  G0 D    Letter D                  =>  (self)  */
  217.  69,  /*  069  04/05  G0 E    Letter E                  =>  (self)  */
  218.  70,  /*  070  04/06  G0 F    Letter F                  =>  (self)  */
  219.  71,  /*  071  04/07  G0 G    Letter G                  =>  (self)  */
  220.  72,  /*  072  04/08  G0 H    Letter H                  =>  (self)  */
  221.  73,  /*  073  04/09  G0 I    Letter I                  =>  (self)  */
  222.  74,  /*  074  04/10  G0 J    Letter J                  =>  (self)  */
  223.  75,  /*  075  04/11  G0 K    Letter K                  =>  (self)  */
  224.  76,  /*  076  04/12  G0 L    Letter L                  =>  (self)  */
  225.  77,  /*  077  04/13  G0 M    Letter M                  =>  (self)  */
  226.  78,  /*  078  04/14  G0 N    Letter N                  =>  (self)  */
  227.  79,  /*  079  04/15  G0 O    Letter O                  =>  (self)  */
  228.  80,  /*  080  05/00  G0 P    Letter P                  =>  (self)  */
  229.  81,  /*  081  05/01  G0 Q    Letter Q                  =>  (self)  */
  230.  82,  /*  082  05/02  G0 R    Letter R                  =>  (self)  */
  231.  83,  /*  083  05/03  G0 S    Letter S                  =>  (self)  */
  232.  84,  /*  084  05/04  G0 T    Letter T                  =>  (self)  */
  233.  85,  /*  085  05/05  G0 U    Letter U                  =>  (self)  */
  234.  86,  /*  086  05/06  G0 V    Letter V                  =>  (self)  */
  235.  87,  /*  087  05/07  G0 W    Letter W                  =>  (self)  */
  236.  88,  /*  088  05/08  G0 X    Letter X                  =>  (self)  */
  237.  89,  /*  089  05/09  G0 Y    Letter Y                  =>  (self)  */
  238.  90,  /*  090  05/10  G0 Z    Letter Z                  =>  (self)  */
  239.  91,  /*  091  05/11  G0 [    Left square bracket       =>  (self)  */
  240.  92,  /*  092  05/12  G0 \    Reverse slash             =>  (self)  */
  241.  93,  /*  093  05/13  G0 ]    Right square bracket      =>  (self)  */
  242.  94,  /*  094  05/14  G0 ^    Circumflex accent         =>  (self)  */
  243.  95,  /*  095  05/15  G0 _    Underline, low line       =>  (self)  */
  244.  96,  /*  096  06/00  G0 `    Grave accent              =>  (self)  */
  245.  97,  /*  097  06/01  G0 a    Letter a                  =>  (self)  */
  246.  98,  /*  098  06/02  G0 b    Letter b                  =>  (self)  */
  247.  99,  /*  099  06/03  G0 c    Letter c                  =>  (self)  */
  248. 100,  /*  100  06/04  G0 d    Letter d                  =>  (self)  */
  249. 101,  /*  101  06/05  G0 e    Letter e                  =>  (self)  */
  250. 102,  /*  102  06/06  G0 f    Letter f                  =>  (self)  */
  251. 103,  /*  103  06/07  G0 g    Letter g                  =>  (self)  */
  252. 104,  /*  104  06/08  G0 h    Letter h                  =>  (self)  */
  253. 105,  /*  105  06/09  G0 i    Letter i                  =>  (self)  */
  254. 106,  /*  106  06/10  G0 j    Letter j                  =>  (self)  */
  255. 107,  /*  107  06/11  G0 k    Letter k                  =>  (self)  */
  256. 108,  /*  108  06/12  G0 l    Letter l                  =>  (self)  */
  257. 109,  /*  109  06/13  G0 m    Letter m                  =>  (self)  */
  258. 110,  /*  110  06/14  G0 n    Letter n                  =>  (self)  */
  259. 111,  /*  111  06/15  G0 o    Letter o                  =>  (self)  */
  260. 112,  /*  112  07/00  G0 p    Letter p                  =>  (self)  */
  261. 113,  /*  113  07/01  G0 q    Letter q                  =>  (self)  */
  262. 114,  /*  114  07/02  G0 r    Letter r                  =>  (self)  */
  263. 115,  /*  115  07/03  G0 s    Letter s                  =>  (self)  */
  264. 116,  /*  116  07/04  G0 t    Letter t                  =>  (self)  */
  265. 117,  /*  117  07/05  G0 u    Letter u                  =>  (self)  */
  266. 118,  /*  118  07/06  G0 v    Letter v                  =>  (self)  */
  267. 119,  /*  119  07/07  G0 w    Letter w                  =>  (self)  */
  268. 120,  /*  120  07/08  G0 x    Letter x                  =>  (self)  */
  269. 121,  /*  121  07/09  G0 y    Letter y                  =>  (self)  */
  270. 122,  /*  122  07/10  G0 z    Letter z                  =>  (self)  */
  271. 123,  /*  123  07/11  G0 {    Left curly bracket        =>  (self)  */
  272. 124,  /*  124  07/12  G0 |    Vertical bar              =>  (self)  */
  273. 125,  /*  125  07/13  G0 }    Right curly bracket       =>  (self)  */
  274. 126,  /*  126  07/14  G0 ~    Tilde                     =>  (self)  */
  275. 127,  /*  127  07/15     DEL  Delete, Rubout            =>  (self)  */
  276. 128,  /*  128  08/00  C1      Ctrl-Meta-@               =>  (self)  */
  277. 129,  /*  129  08/01  C1      Ctrl-Meta-A               =>  (self)  */
  278. 130,  /*  130  08/02  C1      Ctrl-Meta-B               =>  (self)  */
  279. 131,  /*  131  08/03  C1      Ctrl-Meta-C               =>  (self)  */
  280. 132,  /*  132  08/04  C1 IND  Ctrl-Meta-D               =>  (self)  */
  281. 133,  /*  133  08/05  C1 NEL  Ctrl-Meta-E               =>  (self)  */
  282. 134,  /*  134  08/06  C1 SSA  Ctrl-Meta-F               =>  (self)  */
  283. 135,  /*  135  08/07  C1 ESA  Ctrl-Meta-G               =>  (self)  */
  284. 136,  /*  136  08/08  C1 HTS  Ctrl-Meta-H               =>  (self)  */
  285. 137,  /*  137  08/09  C1      Ctrl-Meta-I               =>  (self)  */
  286. 138,  /*  138  08/10  C1      Ctrl-Meta-J               =>  (self)  */
  287. 139,  /*  139  08/11  C1      Ctrl-Meta-K               =>  (self)  */
  288. 140,  /*  140  08/12  C1      Ctrl-Meta-L               =>  (self)  */
  289. 141,  /*  141  08/13  C1 RI   Ctrl-Meta-M               =>  (self)  */
  290. 142,  /*  142  08/14  C1 SS2  Ctrl-Meta-N               =>  (self)  */
  291. 143,  /*  143  08/15  C1 SS3  Ctrl-Meta-O               =>  (self)  */
  292. 144,  /*  144  09/00  C1 DCS  Ctrl-Meta-P               =>  (self)  */
  293. 145,  /*  145  09/01  C1      Ctrl-Meta-Q               =>  (self)  */
  294. 146,  /*  146  09/02  C1      Ctrl-Meta-R               =>  (self)  */
  295. 147,  /*  147  09/03  C1 STS  Ctrl-Meta-S               =>  (self)  */
  296. 148,  /*  148  09/04  C1      Ctrl-Meta-T               =>  (self)  */
  297. 149,  /*  149  09/05  C1      Ctrl-Meta-U               =>  (self)  */
  298. 150,  /*  150  09/06  C1 SPA  Ctrl-Meta-V               =>  (self)  */
  299. 151,  /*  151  09/07  C1 EPA  Ctrl-Meta-W               =>  (self)  */
  300. 152,  /*  152  09/08  C1      Ctrl-Meta-X               =>  (self)  */
  301. 153,  /*  153  09/09  C1      Ctrl-Meta-Y               =>  (self)  */
  302. 154,  /*  154  09/10  C1      Ctrl-Meta-Z               =>  (self)  */
  303. 155,  /*  155  09/11  C1 CSI  Ctrl-Meta-[               =>  (self)  */
  304. 156,  /*  156  09/12  C1 ST   Ctrl-Meta-\               =>  (self)  */
  305. 157,  /*  157  09/13  C1 OSC  Ctrl-Meta-]               =>  (self)  */
  306. 158,  /*  158  09/14  C1 PM   Ctrl-Meta-^               =>  (self)  */
  307. 159,  /*  159  09/15  C1 APC  Ctrl-Meta-_               =>  (self)  */
  308.  32,  /*  160  10/00  G1      No-break space            =>  SP      */
  309.  33,  /*  161  10/01  G1      Inverted exclamation      =>  !       */
  310. UNK,  /*  162  10/02  G1      Cent sign                 =>  UNK     */
  311. UNK,  /*  163  10/03  G1      Pound sign                =>  UNK     */
  312. UNK,  /*  164  10/04  G1      Currency sign             =>  UNK     */
  313. UNK,  /*  165  10/05  G1      Yen sign                  =>  UNK     */
  314. 124,  /*  166  10/06  G1      Broken bar                =>  |       */
  315. UNK,  /*  167  10/07  G1      Paragraph sign            =>  UNK     */
  316.  34,  /*  168  10/08  G1      Diaeresis                 =>  "       */
  317.  67,  /*  169  10/09  G1      Copyright sign            =>  C       */
  318. UNK,  /*  170  10/10  G1      Feminine ordinal          =>  UNK     */
  319.  34,  /*  171  10/11  G1      Left angle quotation      =>  "       */
  320. 126,  /*  172  10/12  G1      Not sign                  =>  ~       */
  321.  45,  /*  173  10/13  G1      Soft hyphen               =>  -       */
  322.  82,  /*  174  10/14  G1      Registered trade mark     =>  R       */
  323. UNK,  /*  175  10/15  G1      Macron                    =>  UNK     */
  324. UNK,  /*  176  11/00  G1      Degree sign, ring above   =>  UNK     */
  325. UNK,  /*  177  11/01  G1      Plus-minus sign           =>  UNK     */
  326. UNK,  /*  178  11/02  G1      Superscript two           =>  UNK     */
  327. UNK,  /*  179  11/03  G1      Superscript three         =>  UNK     */
  328.  39,  /*  180  11/04  G1      Acute accent              =>  '       */
  329. 117,  /*  181  11/05  G1      Micro sign                =>  u       */
  330. UNK,  /*  182  11/06  G1      Pilcrow sign              =>  UNK     */
  331. UNK,  /*  183  11/07  G1      Middle dot                =>  UNK     */
  332.  44,  /*  184  11/08  G1      Cedilla                   =>  ,       */
  333. UNK,  /*  185  11/09  G1      Superscript one           =>  UNK     */
  334. UNK,  /*  186  11/10  G1      Masculine ordinal         =>  UNK     */
  335.  34,  /*  187  11/11  G1      Right angle quotation     =>  "       */
  336. UNK,  /*  188  11/12  G1      One quarter               =>  UNK     */
  337. UNK,  /*  189  11/13  G1      One half                  =>  UNK     */
  338. UNK,  /*  190  11/14  G1      Three quarters            =>  UNK     */
  339.  63,  /*  191  11/15  G1      Inverted question mark    =>  ?       */
  340.  65,  /*  192  12/00  G1      A grave                   =>  A       */
  341.  65,  /*  193  12/01  G1      A acute                   =>  A       */
  342.  65,  /*  194  12/02  G1      A circumflex              =>  A       */
  343.  65,  /*  195  12/03  G1      A tilde                   =>  A       */
  344.  65,  /*  196  12/04  G1      A diaeresis               =>  A       */
  345.  65,  /*  197  12/05  G1      A ring above              =>  A       */
  346.  65,  /*  198  12/06  G1      A with E                  =>  A       */
  347.  67,  /*  199  12/07  G1      C Cedilla                 =>  C       */
  348.  69,  /*  200  12/08  G1      E grave                   =>  E       */
  349.  69,  /*  201  12/09  G1      E acute                   =>  E       */
  350.  69,  /*  202  12/10  G1      E circumflex              =>  E       */
  351.  69,  /*  203  12/11  G1      E diaeresis               =>  E       */
  352.  73,  /*  204  12/12  G1      I grave                   =>  I       */
  353.  73,  /*  205  12/13  G1      I acute                   =>  I       */
  354.  73,  /*  206  12/14  G1      I circumflex              =>  I       */
  355.  73,  /*  207  12/15  G1      I diaeresis               =>  I       */
  356. UNK,  /*  208  13/00  G1      Icelandic Eth             =>  UNK     */
  357.  78,  /*  209  13/01  G1      N tilde                   =>  N       */
  358.  79,  /*  210  13/02  G1      O grave                   =>  O       */
  359.  79,  /*  211  13/03  G1      O acute                   =>  O       */
  360.  79,  /*  212  13/04  G1      O circumflex              =>  O       */
  361.  79,  /*  213  13/05  G1      O tilde                   =>  O       */
  362.  79,  /*  214  13/06  G1      O diaeresis               =>  O       */
  363. 120,  /*  215  13/07  G1      Multiplication sign       =>  x       */
  364.  79,  /*  216  13/08  G1      O oblique stroke          =>  O       */
  365.  85,  /*  217  13/09  G1      U grave                   =>  U       */
  366.  85,  /*  218  13/10  G1      U acute                   =>  U       */
  367.  85,  /*  219  13/11  G1      U circumflex              =>  U       */
  368.  85,  /*  220  13/12  G1      U diaeresis               =>  U       */
  369.  89,  /*  221  13/13  G1      Y acute                   =>  Y       */
  370. UNK,  /*  222  13/14  G1      Icelandic Thorn           =>  UNK     */
  371. 115,  /*  223  13/15  G1      German sharp s            =>  s       */
  372.  97,  /*  224  14/00  G1      a grave                   =>  a       */
  373.  97,  /*  225  14/01  G1      a acute                   =>  a       */
  374.  97,  /*  226  14/02  G1      a circumflex              =>  a       */
  375.  97,  /*  227  14/03  G1      a tilde                   =>  a       */
  376.  97,  /*  228  14/04  G1      a diaeresis               =>  a       */
  377.  97,  /*  229  14/05  G1      a ring above              =>  a       */
  378.  97,  /*  230  14/06  G1      a with e                  =>  a       */
  379.  99,  /*  231  14/07  G1      c cedilla                 =>  c       */
  380. 101,  /*  232  14/08  G1      e grave                   =>  e       */
  381. 101,  /*  233  14/09  G1      e acute                   =>  e       */
  382. 101,  /*  234  14/10  G1      e circumflex              =>  e       */
  383. 101,  /*  235  14/11  G1      e diaeresis               =>  e       */
  384. 105,  /*  236  14/12  G1      i grave                   =>  i       */
  385. 105,  /*  237  14/13  G1      i acute                   =>  i       */
  386. 105,  /*  238  14/14  G1      i circumflex              =>  i       */
  387. 105,  /*  239  14/15  G1      i diaeresis               =>  i       */
  388. UNK,  /*  240  15/00  G1      Icelandic eth             =>  UNK     */
  389. 110,  /*  241  15/01  G1      n tilde                   =>  n       */
  390. 111,  /*  242  15/02  G1      o grave                   =>  o       */
  391. 111,  /*  243  15/03  G1      o acute                   =>  o       */
  392. 111,  /*  244  15/04  G1      o circumflex              =>  o       */
  393. 111,  /*  245  15/05  G1      o tilde                   =>  o       */
  394. 111,  /*  246  15/06  G1      o diaeresis               =>  o       */
  395.  47,  /*  247  15/07  G1      Division sign             =>  /       */
  396. 111,  /*  248  15/08  G1      o oblique stroke          =>  o       */
  397. 117,  /*  249  15/09  G1      u grave                   =>  u       */
  398. 117,  /*  250  15/10  G1      u acute                   =>  u       */
  399. 117,  /*  251  15/11  G1      u circumflex              =>  u       */
  400. 117,  /*  252  15/12  G1      u diaeresis               =>  u       */
  401. 121,  /*  253  15/13  G1      y acute                   =>  y       */
  402. UNK,  /*  254  15/14  G1      Icelandic thorn           =>  UNK     */
  403. 121   /*  255  15/15  G1      y diaeresis               =>  y       */
  404. };
  405.  
  406. /* Translation tables for ISO Latin Alphabet 1 to local file character sets */
  407.  
  408. /*
  409.   The remaining tables are not annotated like the one above, because
  410.   the size of the resulting source file would be more than 500K.
  411.   Each row in the following tables corresponds to a column of ISO 8859-1.
  412. */
  413.  
  414. CHAR
  415. yl1todu[] = {  /* Latin-1 to Dutch ISO 646 */
  416.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  417.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  418.  32,  33,  34, UNK,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  419.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  420. UNK,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  421.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, UNK, UNK, UNK,  94,  95,
  422.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  423. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK,  39, 127,
  424. 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  425. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  426.  32,  33, UNK,  35, 124, UNK, UNK,  93, 123,  67, UNK,  34, UNK,  45,  82, UNK,
  427.  91, UNK, UNK, UNK, 126, 117, UNK, UNK,  44, UNK, UNK,  34, 125,  92,  64,  63,
  428.  65,  65,  65,  65,  91,  65,  65,  67,  69,  69,  69,  69,  73,  73,  73,  73,
  429. UNK,  78,  79,  79,  79,  79,  79, 120,  79,  85,  85,  85,  85,  89, UNK, 115,
  430.  97,  97,  97,  97,  97,  97,  97,  99, 101, 101, 101, 101, 105, 105, 105, 105,
  431. UNK, 110, 111, 111, 111, 111, 111,  47, 111, 117, 117, 117, 117, 121, UNK,  91
  432. };
  433.  
  434. CHAR
  435. yl1tofi[] = {  /* Latin-1 to Finnish ISO 646 */
  436.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  437.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  438.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  439.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  440.  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  441.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, UNK, UNK, UNK, UNK,  95,
  442. UNK,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  443. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, UNK, UNK,
  444. 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  445. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  446.  32,  33, UNK, UNK, UNK, UNK, UNK, UNK,  34,  67, UNK,  34, UNK,  45,  82, UNK,
  447. UNK, UNK, UNK, UNK,  39, 117, UNK, UNK,  44, UNK, UNK,  34, UNK, UNK, UNK,  63,
  448.  65,  65,  65,  65,  91,  93,  65,  67,  69,  69,  69,  69,  73,  73,  73,  73,
  449. UNK,  78,  79,  79,  79,  79,  92, 120,  79,  85,  85,  85,  94,  89, UNK, 115,
  450.  97,  97,  97,  97, 123, 125,  97,  99, 101,  96, 101, 101, 105, 105, 105, 105,
  451. UNK, 110, 111, 111, 111, 111, 124,  47, 111, 117, 117, 117, 126, 121, UNK, 121
  452. };
  453.  
  454. CHAR
  455. yl1tofr[] = {  /* Latin-1 to French ISO 646 */
  456.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  457.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  458.  32,  33,  34, UNK,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  459.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  460. UNK,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  461.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, UNK, UNK, UNK,  94,  95,
  462.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  463. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, UNK, 127,
  464. 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  465. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  466.  32,  33, UNK,  35, UNK, UNK, UNK,  93,  34,  67, UNK,  34, UNK,  45,  82, UNK,
  467.  91, UNK, UNK, UNK,  39, 117, UNK, UNK,  44, UNK, UNK,  34, UNK, UNK, UNK,  63,
  468.  65,  65,  65,  65,  65,  65,  65,  67,  69,  69,  69,  69,  73,  73,  73,  73,
  469. UNK,  78,  79,  79,  79,  79,  79, 120,  79,  85,  85,  85,  85,  89, UNK, 115,
  470.  64,  97,  97,  97,  97,  97,  97,  92, 125, 123, 101, 101, 105, 105, 105, 105,
  471. UNK, 110, 111, 111, 111, 111, 111,  47, 111, 124, 117, 117, 117, 121, UNK, 121
  472. };
  473.  
  474. CHAR
  475. yl1tofc[] = {  /* Latin-1 to French-Canadian ISO 646 */
  476.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  477.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  478.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  479.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  480. UNK,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  481.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, UNK, UNK, UNK, UNK,  95,
  482. UNK,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  483. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, UNK, 127,
  484. 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  485. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  486.  32,  33, UNK, UNK, UNK, UNK, UNK, UNK,  34,  67, UNK,  34, UNK,  45,  82, UNK,
  487. UNK, UNK, UNK, UNK,  39, 117, UNK, UNK,  44, UNK, UNK,  34, UNK, UNK, UNK,  63,
  488.  65,  65,  65,  65,  65,  65,  65,  67,  69,  69,  69,  69,  73,  73,  73,  73,
  489. UNK,  78,  79,  79,  79,  79,  79, 120,  79,  85,  85,  85,  85,  89, UNK, 115,
  490.  64,  97,  91,  97,  97,  97,  97,  92, 125, 123,  93, 101, 105, 105,  94, 105,
  491. UNK, 110, 111, 111,  96, 111, 111,  47, 111, 124, 117, 126, 117, 121, UNK, 121
  492. };
  493.  
  494. CHAR
  495. yl1toge[] = {  /* Latin-1 to German ISO 646 */
  496.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  497.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  498.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  499.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  500. UNK,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  501.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, UNK, UNK, UNK,  94,  95,
  502.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  503. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, UNK, 127,
  504. 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  505. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  506.  32,  33, UNK, UNK, UNK, UNK, 124,  64,  34,  67, UNK,  34, 126,  45,  82, UNK,
  507. UNK, UNK, UNK, UNK,  39, 117, UNK, UNK,  44, UNK, UNK,  34, UNK, UNK, UNK,  63,
  508.  65,  65,  65,  65,  91,  65,  65,  67,  69,  69,  69,  69,  73,  73,  73,  73,
  509. UNK,  78,  79,  79,  79,  79,  92, 120,  79,  85,  85,  85,  93,  89, UNK, 126,
  510.  97,  97,  97,  97, 123,  97,  97,  99, 101, 101, 101, 101, 105, 105, 105, 105,
  511. UNK, 110, 111, 111, 111, 111, 124,  47, 111, 117, 117, 117, 125, 121, UNK, 121
  512. };
  513.  
  514. CHAR
  515. yl1tohu[] = {  /* Latin-1 to Hungarian ISO-646 */
  516.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  517.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  518.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  519.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  520.  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  521.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,
  522.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  523. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
  524. 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  525. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  526.  32,  33, UNK, UNK,  36, UNK, 124, UNK,  34,  67, UNK,  34, 126,  45,  82, UNK,
  527. UNK,  64, UNK, UNK,  39, 117, UNK, UNK,  44, UNK, UNK,  34, UNK, UNK, UNK,  63,
  528.  65,  65,  65,  65,  65,  65,  65,  67,  69,  91,  69,  69,  73,  73,  73,  73,
  529. UNK,  78,  79,  79,  79,  79,  92, 120,  79,  85,  85,  85,  93,  89, UNK, 115,
  530.  97,  96,  97,  97,  97,  97,  97,  99, 101, 123, 101, 101, 105, 105, 105, 105,
  531. UNK, 110, 111, 111, 111, 111, 124,  47, 111, 117, 117, 117, 125, 121, UNK, 121
  532. };
  533.  
  534. CHAR
  535. yl1toit[] = {  /* Latin-1 to Italian ISO 646 */
  536.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  537.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  538.  32,  33,  34, UNK,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  539.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  540. UNK,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  541.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, UNK, UNK, UNK,  94,  95,
  542. UNK,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  543. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, UNK, 127,
  544. 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  545. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  546.  32,  33, UNK,  35, UNK, UNK, UNK,  64,  34,  67, UNK,  34, UNK,  45,  82, UNK,
  547.  91, UNK, UNK, UNK,  39, 117, UNK, UNK,  44, UNK, UNK,  34, UNK, UNK, UNK,  63,
  548.  65,  65,  65,  65,  65,  65,  65,  67,  69,  69,  69,  69,  73,  73,  73,  73,
  549. UNK,  78,  79,  79,  79,  79,  79, 120,  79,  85,  85,  85,  85,  89, UNK, 115,
  550. 123,  97,  97,  97,  97,  97,  97,  92, 125,  93, 101, 101, 126, 105, 105, 105,
  551. UNK, 110, 124, 111, 111, 111, 111,  47, 111,  96, 117, 117, 117, 121, UNK, 121
  552. };
  553.  
  554. CHAR
  555. yl1tono[] = {  /* Latin-1 to Norwegian/Danish ISO 646 */
  556.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  557.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  558.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  559.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  560.  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  561.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, UNK, UNK, UNK,  94,  95,
  562.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  563. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, 126, 127,
  564. 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  565. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  566.  32,  33, UNK, UNK, UNK, UNK, UNK, UNK,  34,  67, UNK,  34, 126,  45,  82, UNK,
  567. UNK, UNK, UNK, UNK,  39, 117, UNK, UNK,  44, UNK, UNK,  34, UNK, UNK, UNK,  63,
  568.  65,  65,  65,  65,  65,  93,  91,  67,  69,  69,  69,  69,  73,  73,  73,  73,
  569. UNK,  78,  79,  79,  79,  79,  79, 120,  92,  85,  85,  85,  85,  89, UNK, 115,
  570.  97,  97,  97,  97,  97, 125, 123,  99, 101, 101, 101, 101, 105, 105, 105, 105,
  571. UNK, 110, 111, 111, 111, 111, 111,  47, 124, 117, 117, 117, 117, 121, UNK, 121
  572. };
  573.  
  574. CHAR
  575. yl1topo[] = {  /* Latin-1 to Portuguese ISO 646 */
  576.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  577.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  578.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  579.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  580.  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  581.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, UNK, UNK, UNK,  94,  95,
  582.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  583. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, 126, 127,
  584. 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  585. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  586.  32,  33, UNK, UNK, UNK, UNK, UNK, UNK,  34,  67, UNK,  34, 126,  45,  82, UNK,
  587. UNK, UNK, UNK, UNK,  39, 117, UNK, UNK,  44, UNK, UNK,  34, UNK, UNK, UNK,  63,
  588.  65,  65,  65,  91,  65,  65,  65,  92,  69,  69,  69,  69,  73,  73,  73,  73,
  589. UNK,  78,  79,  79,  79,  93,  79, 120,  79,  85,  85,  85,  85,  89, UNK, 115,
  590.  97,  97,  97, 123,  97,  97,  97, 124, 101, 101, 101, 101, 105, 105, 105, 105,
  591. UNK, 110, 111, 111, 111, 125, 111,  47, 111, 117, 117, 117, 117, 121, UNK, 121
  592. };
  593.  
  594. CHAR
  595. yl1tosp[] = {  /* Latin-1 to Spanish ISO 646 */
  596.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  597.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  598.  32,  33,  34, UNK,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  599.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  600. UNK,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  601.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, UNK, UNK, UNK,  94,  95,
  602.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  603. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,  96, UNK, UNK, 126, 127,
  604. 126, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  605. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  606.  32,  91, UNK,  35, UNK, UNK, UNK,  64,  34,  67, UNK,  34, 126,  45,  82, UNK,
  607. 123, UNK, UNK, UNK,  39, 117, UNK, UNK,  44, UNK, UNK,  34, UNK, UNK, UNK,  93,
  608.  65,  65,  65,  65,  65,  65,  65,  67,  69,  69,  69,  69,  73,  73,  73,  73,
  609. UNK,  92,  79,  79,  79,  79,  79, 120,  79,  85,  85,  85,  85,  89, UNK, 115,
  610. 124,  97,  97,  97,  97,  97,  97, 125, 101, 101, 101, 101, 105, 105, 105, 105,
  611. UNK, 124, 111, 111, 111, 111, 111,  47, 111, 117, 117, 117, 117, 121, UNK, 121
  612. };
  613.  
  614. CHAR
  615. yl1tosw[] = {  /* Latin-1 to Swedish ISO 646 */
  616.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  617.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  618.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  619.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  620. UNK,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  621.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, UNK, UNK, UNK, UNK,  95,
  622. UNK,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  623. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, UNK, 127,
  624. 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  625. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  626.  32,  33, UNK, UNK, UNK, UNK, UNK, UNK,  34,  67, UNK,  34, UNK,  45,  82, UNK,
  627. UNK, UNK, UNK, UNK,  39, 117, UNK, UNK,  44, UNK, UNK,  34, UNK, UNK, UNK,  63,
  628.  65,  65,  65,  65,  91,  93,  65,  67,  69,  64,  69,  69,  73,  73,  73,  73,
  629. UNK,  78,  79,  79,  79,  79,  92, 120,  79,  85,  85,  85,  94,  89, UNK, 115,
  630.  97,  97,  97,  97, 123, 125,  97,  99, 101,  96, 101, 101, 105, 105, 105, 105,
  631. UNK, 110, 111, 111, 111, 111, 124,  47, 111, 117, 117, 117, 126, 121, UNK, 121
  632. };
  633.  
  634. CHAR
  635. yl1toch[] = {  /* Latin-1 to Swiss ISO 646 */
  636.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  637.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  638.  32,  33,  34, UNK,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  639.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  640. UNK,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  641.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, UNK, UNK, UNK, UNK, UNK,
  642.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  643. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, UNK, UNK, UNK, UNK, 127,
  644. 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  645. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  646.  32,  33, UNK, UNK, UNK, UNK, UNK, UNK,  34,  67, UNK,  34, UNK,  45,  82, UNK,
  647. UNK, UNK, UNK, UNK,  39, 117, UNK, UNK,  44, UNK, UNK,  34, UNK, UNK, UNK,  63,
  648.  65,  65,  65,  65,  65,  65,  65,  67,  69,  69,  69,  69,  73,  73,  73,  73,
  649. UNK,  78,  79,  79,  79,  79,  79, 120,  79,  85,  85,  85,  85,  89, UNK, 115,
  650.  64,  97,  97,  97, 123,  97,  97,  92,  95,  91,  93, 101, 105, 105,  94, 105,
  651. UNK, 110, 111, 111,  96, 111, 124,  47, 111,  35, 117, 126, 125, 121, UNK, 121
  652. };
  653.  
  654. CHAR
  655. yl1todm[] = {  /* Latin-1 to DEC Multinational Character Set */
  656.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  657.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  658.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  659.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  660.  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  661.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,
  662.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  663. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
  664. 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  665. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  666.  32, 161, 162, 163, 168, 165, 124, 167,  34, 169, 170, 171, 126, UNK,  82, UNK,
  667. 176, 177, 178, 179,  39, 181, 182, 183,  44, 185, 186, 187, 188, 189, UNK, 191,
  668. 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
  669. UNK, 209, 210, 211, 212, 213, 214, 120, 216, 217, 218, 219, 220, 221, UNK, 223,
  670. 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
  671. UNK, 241, 242, 243, 244, 245, 246,  47, 248, 249, 250, 251, 252, UNK, UNK, 253
  672. };
  673.  
  674. /* Local file character sets to ISO Latin Alphabet 1 */
  675.  
  676. CHAR
  677. yastol1[] = {  /* ASCII to Latin-1 */
  678.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  679.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  680.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  681.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  682.  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  683.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,
  684.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  685. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127
  686. };
  687.  
  688. CHAR
  689. ydutol1[] = {  /* Dutch ISO 646 to Latin-1 */
  690.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  691.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  692.  32,  33,  34, 163,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  693.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  694. 190,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  695.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, 255, 189, 124,  94,  95,
  696.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  697. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 168, 164, 188,  39, 127
  698. };
  699.  
  700. CHAR
  701. yfitol1[] = {  /* Finnish ISO 646 to Latin-1 */
  702.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  703.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  704.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  705.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  706.  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  707.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, 196, 246, 197, 220,  95,
  708. 233,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  709. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 228, 246, 229, 252, 127
  710. };
  711.  
  712. CHAR
  713. yfrtol1[] = {  /* French ISO 646 to Latin-1 */
  714.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  715.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  716.  32,  33,  34, 163,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  717.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  718. 224,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  719.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, 176, 231, 167,  94,  95,
  720.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  721. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 233, 249, 232, 168, 127
  722. };
  723.  
  724. CHAR
  725. yfctol1[] = {  /* French-Canadian ISO 646 to Latin-1 */
  726.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  727.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  728.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  729.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  730. 224,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  731.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, 226, 231, 234, 238,  95,
  732. 244,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  733. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 233, 249, 232, 251, 127
  734. };
  735.  
  736. CHAR
  737. ygetol1[] = {  /* German ISO 646 to Latin-1 */
  738.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  739.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  740.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  741.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  742. 167,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  743.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, 196, 214, 220,  94,  95,
  744.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  745. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 228, 246, 252, 223, 127
  746. };
  747.  
  748. CHAR
  749. yittol1[] = {  /* Italian ISO 646 to Latin-1 */
  750.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  751.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  752.  32,  33,  34, 163,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  753.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  754. 167,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  755.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, 176, 231, 233,  94,  95,
  756. 249,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  757. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 224, 242, 232, 236, 127
  758. };
  759.  
  760. CHAR
  761. ynotol1[] = {  /* Norwegian/Danish ISO 646 to Latin-1 */
  762.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  763.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  764.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  765.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  766.  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  767.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, 198, 216, 197,  94,  95,
  768.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  769. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 230, 248, 229, 126, 127
  770. };
  771.  
  772. CHAR
  773. ypotol1[] = {  /* Portuguese ISO 646 to Latin-1 */
  774.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  775.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  776.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  777.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  778.  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  779.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, 195, 199, 213,  94,  95,
  780.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  781. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 227, 231, 245, 126, 127
  782. };
  783.  
  784. CHAR
  785. ysptol1[] = {  /* Spanish ISO 646 to Latin-1 */
  786.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  787.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  788.  32,  33,  34, 163,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  789.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  790. 167,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  791.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, 161, 209, 191,  94,  95,
  792.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  793. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 176, 241, 231, 126, 127
  794. };
  795.  
  796. CHAR
  797. yswtol1[] = {  /* Swedish ISO 646 to Latin-1 */
  798.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  799.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  800.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  801.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  802. 201,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  803.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, 196, 214, 197, 220,  95,
  804. 233,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  805. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 228, 246, 229, 252, 127
  806. };
  807.  
  808. CHAR
  809. ychtol1[] = {  /* Swiss ISO 646 to Latin-1 */
  810.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  811.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  812.  32,  33,  34, 249,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  813.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  814. 224,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  815.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, 233, 231, 234, 238, 232,
  816. 244,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  817. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 228, 246, 252, 251, 127
  818. };
  819.  
  820. CHAR
  821. yhutol1[] = {  /* Hungarian ISO 646 to Latin-1 */
  822.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  823.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  824.  32,  33,  34,  35, 164,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  825.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  826. 193,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  827.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90, 201, 214, 220,  94,  95,
  828. 225,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  829. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 233, 246, 252,  34, 127
  830. };
  831.  
  832. CHAR
  833. ydmtol1[] = {  /* DEC Multinational Character Set to Latin-1 */
  834.   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
  835.  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
  836.  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,
  837.  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,
  838.  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
  839.  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,
  840.  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  841. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
  842. 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  843. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  844. 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
  845. 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
  846. 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
  847. 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
  848. 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
  849. 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
  850. };
  851.  
  852. /* Translation functions ... */
  853.  
  854. CHAR                /* The identity translation function */
  855. ident(c) CHAR c; {
  856.     return(c);
  857. }
  858.  
  859. CHAR
  860. xl1toas(c) CHAR c; {            /* Latin-1 to US ASCII... */
  861.  
  862.     switch(langs[language].id) {
  863.       case L_GERMAN:
  864.     switch (c) {            /* German, special rules. */
  865.       case 196:            /* umlaut-A -> Ae */
  866.         zmstuff('e');
  867.         return('A');
  868.       case 214:            /* umlaut-O -> Oe */
  869.         zmstuff('e');
  870.         return('O');
  871.       case 220:            /* umlaut-U -> Ue */
  872.         zmstuff('e');
  873.         return('U');
  874.       case 228:            /* umlaut-a -> ae */
  875.         zmstuff('e');
  876.         return('a');
  877.       case 246:            /* umlaut-o -> oe */
  878.         zmstuff('e');
  879.         return('o');
  880.       case 252:            /* umlaut-u -> ue */
  881.         zmstuff('e');
  882.         return('u');
  883.       case 223:            /* ess-zet -> ss */
  884.         zmstuff('s');
  885.         return('s');
  886.       default: return(yl1toas[c]);    /* all others by the book */
  887.     }
  888.       case L_DANISH:
  889.       case L_FINNISH:
  890.       case L_NORWEGIAN:
  891.       case L_SWEDISH:
  892.     switch (c) {            /* Scandanavian languages. */
  893.       case 196:            /* umlaut-A -> Ae */
  894.         zmstuff('e');
  895.         return('A');
  896.       case 214:            /* umlaut-O -> Oe */
  897.       case 216:            /* O-slash -> Oe */
  898.         zmstuff('e');
  899.         return('O');
  900.       case 220:            /* umlaut-U -> Y */
  901.         return('Y');
  902.       case 228:            /* umlaut-a -> ae */
  903.         zmstuff('e');
  904.         return('a');
  905.       case 246:            /* umlaut-o -> oe */
  906.       case 248:            /* o-slash -> oe */
  907.         zmstuff('e');
  908.         return('o');
  909.       case 252:            /* umlaut-u -> y */
  910.         return('y');
  911.       case 197:            /* A-ring -> Aa */
  912.         zmstuff('a');
  913.         return('A');
  914.           case 229:            /* a-ring -> aa */
  915.         zmstuff('a');
  916.         return('a');
  917.       default: return(yl1toas[c]);    /* All others by the book */
  918.     }
  919.       default:
  920.     return(yl1toas[c]);        /* Not German, by the table. */
  921.     }
  922. }
  923.  
  924. CHAR                    /* Latin-1 to German ASCII */
  925. xl1toge(c) CHAR c; {
  926.     return(yl1toge[c]);
  927. }
  928.  
  929. CHAR                    /* German ASCII to Latin-1 */
  930. xgetol1(c) CHAR c; {
  931.     return(ygetol1[c]);
  932. }
  933.  
  934. CHAR
  935. xgetoas(c) CHAR c; {            /* German ISO 646 to ASCII */
  936.     switch (c) {
  937.       case 91:                /* umlaut-A -> Ae */
  938.     zmstuff('e');
  939.     return('A');
  940.       case 92:                /* umlaut-O -> Oe */
  941.     zmstuff('e');
  942.     return('O');
  943.       case 93:                /* umlaut-U -> Ue */
  944.     zmstuff('e');
  945.     return('U');
  946.       case 123:                /* umlaut-a -> ae */
  947.     zmstuff('e');
  948.     return('a');
  949.       case 124:                /* umlaut-o -> oe */
  950.     zmstuff('e');
  951.     return('o');
  952.       case 125:                /* umlaut-u -> ue */
  953.     zmstuff('e');
  954.     return('u');
  955.       case 126:                /* ess-zet -> ss */
  956.     zmstuff('s');
  957.     return('s');
  958.       default:  return(c);        /* all others stay the same */
  959.     }
  960. }
  961.  
  962. CHAR
  963. xdutoas(c) CHAR c; {            /* Dutch ISO 646 to US ASCII */
  964.     switch (c) {
  965.       case 64:  return(UNK);        /* 3/4 */
  966.       case 91:  return('y');        /* y-diaeresis */
  967.       case 92:  return(UNK);        /* 1/2 */
  968.       case 93:  return(124);        /* vertical bar */
  969.       case 123: return(34);        /* diaeresis */
  970.       case 124: return(UNK);        /* Florin */
  971.       case 125: return(UNK);        /* 1/4 */
  972.       case 126: return(39);        /* Apostrophe */
  973.       default:  return(c);
  974.     }
  975. }
  976.  
  977. CHAR
  978. xfitoas(c) CHAR c; {            /* Finnish ISO 646 to US ASCII */
  979.     switch (c) {
  980.       case 91:                /* A-diaeresis */
  981.     zmstuff('e');
  982.     return('A');
  983.       case 92:                /* O-diaeresis */
  984.     zmstuff('e');
  985.     return('O');
  986.       case 93:                /* A-ring */
  987.     zmstuff('a');
  988.     return('A');
  989.       case 94:                /* U-diaeresis */
  990.     return('Y');
  991.       case 96:                /* e-acute */
  992.     return('e');
  993.       case 123:                /* a-diaeresis */
  994.     zmstuff('e');
  995.     return('a');
  996.       case 124:                /* o-diaeresis */
  997.     zmstuff('e');
  998.     return('o');
  999.       case 125:                /* a-ring */
  1000.     zmstuff('a');
  1001.     return('a');
  1002.       case 126:                /* u-diaeresis */
  1003.     return('y');
  1004.       default:
  1005.     return(c);
  1006.     }
  1007. }
  1008.  
  1009. CHAR
  1010. xfrtoas(c) CHAR c; {            /* French ISO 646 to US ASCII */
  1011.     switch (c) {
  1012.       case 64:  return(97);        /* a grave */
  1013.       case 91:  return(UNK);        /* degree sign */
  1014.       case 92:  return(99);        /* c cedilla */
  1015.       case 93:  return(UNK);        /* paragraph sign */
  1016.       case 123: return(101);        /* e acute */
  1017.       case 124: return(117);        /* u grave */
  1018.       case 125: return(101);        /* e grave */
  1019.       case 126: return(34);        /* diaeresis */
  1020.       default:  return(c);
  1021.     }
  1022. }
  1023.  
  1024. CHAR
  1025. xfctoas(c) CHAR c; {            /* French Canadian ISO 646 to ASCII */
  1026.     switch (c) {
  1027.       case 64:  return('a');        /* a grave */
  1028.       case 91:  return('a');        /* a circumflex */
  1029.       case 92:  return('c');        /* c cedilla */
  1030.       case 93:  return('e');        /* e circumflex */
  1031.       case 94:  return('i');        /* i circumflex */
  1032.       case 96:  return('o');        /* o circumflex */
  1033.       case 123: return('e');        /* e acute */
  1034.       case 124: return('u');        /* u grave */
  1035.       case 125: return('e');        /* e grave */
  1036.       case 126: return('u');        /* u circumflex */
  1037.       default:  return(c);
  1038.     }
  1039. }
  1040.  
  1041. CHAR
  1042. xittoas(c) CHAR c; {            /* Italian ISO 646 to ASCII */
  1043.     switch (c) {
  1044.       case 91:  return(UNK);        /* degree */
  1045.       case 92:  return('c');        /* c cedilla */
  1046.       case 93:  return('e');        /* e acute */
  1047.       case 96:  return('u');        /* u grave */
  1048.       case 123: return('a');        /* a grave */
  1049.       case 124: return('o');        /* o grave */
  1050.       case 125: return('e');        /* e grave */
  1051.       case 126: return('i');        /* i grave */
  1052.       default:  return(c);
  1053.     }
  1054. }
  1055.  
  1056. CHAR
  1057. xnotoas(c) CHAR c; {            /* Norge/Danish ISO 646 to ASCII */
  1058.     switch (c) {
  1059.       case 91:
  1060.     zmstuff('E');            /* AE digraph */
  1061.     return('A');
  1062.       case 92: return('O');        /* O slash */
  1063.       case 93:                /* A ring */
  1064.     zmstuff('a');
  1065.     return('A');
  1066.       case 123:                /* ae digraph */
  1067.     zmstuff('e');
  1068.     return('a');
  1069.       case 124: return('o');        /* o slash */
  1070.       case 125:                /* a ring */
  1071.     zmstuff('a');
  1072.     return('a');
  1073.       default:  return(c);
  1074.     }
  1075. }
  1076.  
  1077. CHAR
  1078. xpotoas(c) CHAR c; {            /* Portuguese ISO 646 to ASCII */
  1079.     switch (c) {
  1080.       case 91:  return('A');        /* A tilde */
  1081.       case 92:  return('C');        /* C cedilla */
  1082.       case 93:  return('O');        /* O tilde */
  1083.       case 123: return('a');        /* a tilde */
  1084.       case 124: return('c');        /* c cedilla */
  1085.       case 125: return('o');        /* o tilde */
  1086.       default:  return(c);
  1087.     }
  1088. }
  1089.  
  1090. CHAR
  1091. xsptoas(c) CHAR c; {            /* Spanish ISO 646 to ASCII */
  1092.     switch (c) {
  1093.       case 91:  return(33);        /* Inverted exclamation */
  1094.       case 92:  return('N');        /* N tilde */
  1095.       case 93:  return(63);        /* Inverted question mark */
  1096.       case 123: return(UNK);        /* degree */
  1097.       case 124: return('n');        /* n tilde */
  1098.       case 125: return('c');        /* c cedilla */
  1099.       default:  return(c);
  1100.     }
  1101. }
  1102.  
  1103. CHAR
  1104. xswtoas(c) CHAR c; {            /* Swedish ISO 646 to ASCII */
  1105.     switch (c) {
  1106.       case 64:  return('E');        /* E acute */
  1107.       case 91:                /* A diaeresis */
  1108.     zmstuff('e');
  1109.     return('A');
  1110.       case 92:                /* O diaeresis */
  1111.     zmstuff('e');
  1112.     return('O');
  1113.       case 93:                /* A ring */
  1114.     zmstuff('a');
  1115.     return('A');
  1116.       case 94:                /* U diaeresis */
  1117.     return('Y');
  1118.       case 96:  return('e');        /* e acute */
  1119.       case 123:                /* a diaeresis */
  1120.     zmstuff('e');
  1121.     return('a');
  1122.       case 124:                /* o diaeresis */
  1123.     zmstuff('e');
  1124.     return('o');
  1125.       case 125:                /* a ring */
  1126.     zmstuff('a');
  1127.     return('a');
  1128.       case 126: return('y');        /* u diaeresis */
  1129.       default:  return(c);
  1130.     }
  1131. }
  1132.  
  1133. CHAR
  1134. xchtoas(c) CHAR c; {            /* Swiss ISO 646 to ASCII */
  1135.     switch (c) {
  1136.       case 35:  return('u');        /* u grave */
  1137.       case 64:  return('a');        /* a grave */
  1138.       case 91:  return('e');        /* e acute */
  1139.       case 92:  return('c');        /* c cedilla */
  1140.       case 93:  return('e');        /* e circumflex */
  1141.       case 94:  return('i');        /* i circumflex */
  1142.       case 95:  return('e');        /* e grave */
  1143.       case 96:  return('o');        /* o circumflex */
  1144.       case 123:                /* a diaeresis */
  1145.     zmstuff('e');
  1146.     return('a');
  1147.       case 124:                /* o diaeresis */
  1148.     zmstuff('e');
  1149.     return('o');
  1150.       case 125:                /* u diaeresis */
  1151.     zmstuff('e');
  1152.     return('u');
  1153.       case 126: return('u');        /* u circumflex */
  1154.       default:  return(c);
  1155.     }
  1156. }
  1157.  
  1158. CHAR
  1159. xhutoas(c) CHAR c; {            /* Hungarian ISO 646 to ASCII */
  1160.     switch (c) {
  1161.       case 64:  return('A');        /* A acute */
  1162.       case 91:  return('E');        /* E acute */
  1163.       case 92:  return('O');        /* O diaeresis */
  1164.       case 93:  return('U');        /* U diaeresis */
  1165.       case 96:  return('a');        /* a acute */
  1166.       case 123: return('e');        /* e acute */
  1167.       case 124: return('o');        /* o acute */
  1168.       case 125: return('u');        /* u acute */
  1169.       case 126: return(34);        /* double acute accent */
  1170.       default:  return(c);
  1171.     }
  1172. }
  1173.  
  1174. CHAR
  1175. xdmtoas(c) CHAR c; {            /* DEC MCS to ASCII */
  1176.     return(yl1toas[c]);            /* for now, treat like Latin-1 */
  1177. }
  1178.  
  1179. CHAR
  1180. xuktol1(c) CHAR c; {            /* UK ASCII to Latin-1 */
  1181.     if (c == 35)
  1182.       return(163);
  1183.     else return(c);
  1184. }
  1185.  
  1186. CHAR
  1187. xl1touk(c) CHAR c; {            /* Latin-1 to UK ASCII */
  1188.     if (c == 163)
  1189.       return(35);
  1190.     else return(yl1toas[c]);
  1191. }
  1192.  
  1193. CHAR                    /* Latin-1 to French ISO 646 */
  1194. xl1tofr(c) CHAR c; {
  1195.     return(yl1tofr[c]);
  1196. }
  1197.  
  1198. CHAR                    /* French ASCII to Latin-1 */
  1199. xfrtol1(c) CHAR c; {
  1200.     return(yfrtol1[c]);
  1201. }
  1202.  
  1203. CHAR                    /* Latin-1 to Dutch ASCII */
  1204. xl1todu(c) CHAR c; {
  1205.     return(yl1todu[c]);
  1206. }
  1207.  
  1208. CHAR
  1209. xdutol1(c) CHAR c; {            /* Dutch ISO 646 to Latin-1 */
  1210.     return(ydutol1[c]);
  1211. }
  1212.  
  1213. CHAR
  1214. xfitol1(c) CHAR c; {            /* Finnish ISO 646 to Latin-1 */
  1215.     return(yfitol1[c]); 
  1216. }
  1217.  
  1218. CHAR
  1219. xl1tofi(c) CHAR c; {            /* Latin-1 to Finnish ISO 646 */
  1220.     return(yl1tofi[c]); 
  1221. }
  1222.  
  1223. CHAR
  1224. xfctol1(c) CHAR c; {            /* French Canadian ISO646 to Latin-1 */
  1225.     return(yfctol1[c]); 
  1226. }
  1227.  
  1228. CHAR
  1229. xl1tofc(c) CHAR c; {            /* Latin-1 to French Canadian ISO646 */
  1230.     return(yl1tofc[c]); 
  1231. }
  1232.  
  1233. CHAR
  1234. xittol1(c) CHAR c; {            /* Italian ISO 646 to Latin-1 */
  1235.     return(yittol1[c]); 
  1236. }
  1237.  
  1238. CHAR
  1239. xl1toit(c) CHAR c; {            /* Latin-1 to Italian ISO 646 */
  1240.     return(yl1toit[c]); 
  1241. }
  1242.  
  1243. CHAR
  1244. xnotol1(c) CHAR c; {         /* Norwegian and Danish ISO 646 to Latin-1 */
  1245.     return(ynotol1[c]); 
  1246. }
  1247.  
  1248. CHAR
  1249. xl1tono(c) CHAR c; {         /* Latin-1 to Norwegian and Danish ISO 646 */
  1250.     return(yl1tono[c]); 
  1251. }
  1252.  
  1253. CHAR
  1254. xpotol1(c) CHAR c; {            /* Portuguese ISO 646 to Latin-1 */
  1255.     return(ypotol1[c]); 
  1256. }
  1257.  
  1258. CHAR
  1259. xl1topo(c) CHAR c; {            /* Latin-1 to Portuguese ISO 646 */
  1260.     return(yl1topo[c]); 
  1261. }
  1262.  
  1263. CHAR
  1264. xsptol1(c) CHAR c; {            /* Spanish ISO 646 to Latin-1 */
  1265.     return(ysptol1[c]); 
  1266. }
  1267.  
  1268. CHAR
  1269. xl1tosp(c) CHAR c; {            /* Latin-1 to Spanish ISO 646 */
  1270.     return(yl1tosp[c]); 
  1271. }
  1272.  
  1273. CHAR
  1274. xswtol1(c) CHAR c; {            /* Swedish ISO 646 to Latin-1 */
  1275.     return(yswtol1[c]); 
  1276. }
  1277.  
  1278. CHAR
  1279. xl1tosw(c) CHAR c; {            /* Latin-1 to Swedish ISO 646 */
  1280.     return(yl1tosw[c]); 
  1281. }
  1282.  
  1283. CHAR
  1284. xchtol1(c) CHAR c; {            /* Swiss ISO 646 to Latin-1 */
  1285.     return(ychtol1[c]); 
  1286. }
  1287.  
  1288. CHAR
  1289. xl1toch(c) CHAR c; {            /* Latin-1 to Swiss ISO 646 */
  1290.     return(yl1toch[c]); 
  1291. }
  1292.  
  1293. CHAR
  1294. xhutol1(c) CHAR c; {            /* Hungarian ISO 646 to Latin-1 */
  1295.     return(yhutol1[c]);
  1296. }
  1297.  
  1298. CHAR
  1299. xl1tohu(c) CHAR c; {            /* Latin-1 to Hungarian ISO 646 */
  1300.     return(yl1tohu[c]);
  1301. }
  1302.  
  1303.  
  1304. CHAR
  1305. xl1todm(c) CHAR c; { /* Latin-1 to DEC Multinational Character Set (MCS) */
  1306.     return(yl1todm[c]); 
  1307. }
  1308.  
  1309. CHAR
  1310. xdmtol1(c) CHAR c; { /* DEC Multinational Character Set (MCS) to Latin-1 */
  1311.     return(ydmtol1[c]); 
  1312. }
  1313.  
  1314. /*
  1315.   Table of translation functions for receiving files.
  1316.   Array of pointers to functions for translating from the transfer
  1317.   syntax to the local file character set.  The first index is the
  1318.   transfer syntax character set number, the second index is the file 
  1319.   character set number.
  1320. */
  1321.  
  1322. /*
  1323.  The following list of functions applies to Unix and VAX/VMS.  This
  1324.  list can't be moved to ckuxla.h without including a forward declaration
  1325.  for each function.  It's not clear to me how best to clean this up.
  1326.  Maybe whoever adapts this file to the Mac or OS/2 will have an idea.
  1327. */
  1328.  
  1329. /* 
  1330.  Notice the hard numbers used as indices!  C does not seem to allow
  1331.  symbols here (MAXTCSETS, MAXFCSETS), nor does the program work right
  1332.  if the brackets are left empty.  Therefore, when adapting this file to
  1333.  another computer, either figure out how to get around this, or else
  1334.  fill in your own numbers.  Sigh.
  1335. */
  1336.  
  1337. CHAR (*xlr[2][16])() = {
  1338.     ident,                /* 0,0 ascii to us ascii */
  1339.     ident,                /* 0,1 ascii to uk ascii */
  1340.     ident,                /* 0,2 ascii to dutch nrc */
  1341.     ident,                /* 0,3 ascii to finnish nrc */
  1342.     ident,                /* 0,4 ascii to french nrc */
  1343.     ident,                /* 0,5 ascii to fr-canadian nrc */
  1344.     ident,                /* 0,6 ascii to german nrc */
  1345.     ident,                /* 0,7 ascii to hungarian nrc */
  1346.     ident,                /* 0,8 ascii to italian nrc */
  1347.     ident,                /* 0,9 ascii to norge/danish nrc */
  1348.     ident,                /* 0,10 ascii to portuguese nrc */
  1349.     ident,                /* 0,11 ascii to spanish nrc */
  1350.     ident,                /* 0,12 ascii to swedish nrc */
  1351.     ident,                /* 0,13 ascii to swiss nrc */
  1352.     ident,                /* 0,14 ascii to latin-1 */
  1353.     ident,                /* 0,15 ascii to DEC MCS */
  1354.     xl1toas,                /* 1,0 latin-1 to us ascii */
  1355.     xl1touk,                /* 1,1 latin-1 to uk ascii */
  1356.     xl1todu,                /* 1,2 latin-1 to dutch nrc */
  1357.     xl1tofi,                /* 1,3 latin-1 to finnish ascii */
  1358.     xl1tofr,                /* 1,4 latin-1 to french nrc */
  1359.     xl1tofc,                /* 1,5 latin-1 to fr-canadian nrc */
  1360.     xl1toge,                /* 1,6 latin-1 to german nrc */
  1361.     xl1toit,                /* 1,7 latin-1 to italian nrc */
  1362.     xl1tohu,                /* 1,8 latin-1 to hungarian nrc */
  1363.     xl1tono,                /* 1,9 latin-1 to norge/danish nrc */
  1364.     xl1topo,                /* 1,10 latin-1 to portuguese nrc */
  1365.     xl1tosp,                /* 1,11 latin-1 to spanish nrc */
  1366.     xl1tosw,                /* 1,12 latin-1 to swedish nrc */
  1367.     xl1toch,                /* 1,13 latin-1 to swiss nrc */
  1368.     ident,                /* 1,14 latin-1 to latin-1 */
  1369.     xl1todm                /* 1,15 latin-1 to DEC MCS */
  1370. };
  1371.  
  1372. /*
  1373.   Translation functions for sending files.
  1374.   Array of pointers to functions for translating from the local file
  1375.   character set to the transfer syntax character set.  Indexed in the same
  1376.   way as the xlr array above.
  1377. */
  1378. CHAR (*xls[2][16])() = {
  1379.     ident,                /* us ascii to ascii */
  1380.     ident,                /* uk ascii to ascii */
  1381.     xdutoas,                /* dutch nrc to ascii */
  1382.     xfitoas,                /* finnish nrc to ascii */
  1383.     xfrtoas,                /* french nrc to ascii */
  1384.     xfctoas,                /* french canadian nrc to ascii */
  1385.     xgetoas,                /* german nrc to ascii */
  1386.     xhutoas,                /* hungarian nrc to ascii */
  1387.     xittoas,                /* italian nrc to ascii */
  1388.     xnotoas,                /* norwegian/danish nrc to ascii */
  1389.     xpotoas,                /* portuguese nrc to ascii */
  1390.     xsptoas,                /* spanish nrc to ascii */
  1391.     xswtoas,                /* swedish nrc to ascii */
  1392.     xchtoas,                /* swiss nrc to ascii */
  1393.     xl1toas,                /* latin-1 to ascii */
  1394.     xdmtoas,                /* dec mcs to ascii */
  1395.     ident,                /* us ascii to latin-1 */
  1396.     xuktol1,                /* uk ascii to latin-1 */
  1397.     xdutol1,                /* dutch nrc to latin-1 */
  1398.     xfitol1,                /* finnish nrc to latin-1 */
  1399.     xfrtol1,                /* french nrc to latin-1 */
  1400.     xfctol1,                /* french canadian nrc to latin-1 */
  1401.     xgetol1,                /* german nrc to latin-1 */
  1402.     xhutol1,                /* hungarian nrc to latin-1 */
  1403.     xittol1,                /* italian nrc to latin-1 */
  1404.     xnotol1,                /* norwegian/danish nrc to latin-1 */
  1405.     xpotol1,                /* portuguese nrc to latin-1 */
  1406.     xsptol1,                /* spanish nrc to latin-1 */
  1407.     xswtol1,                /* swedish nrc to latin-1 */
  1408.     xchtol1,                /* swiss nrc to latin-1 */
  1409.     ident,                /* latin-1 to latin-1 */
  1410.     xdmtol1                /* dec mcs to latin-1 */
  1411. };
  1412.