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