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