1 #include "license.hunspell"
2 #include "license.myspell"
3 
4 #include <stdlib.h>
5 #include <string.h>
6 #include <stdio.h>
7 #include <ctype.h>
8 
9 #include "csutil.hxx"
10 #include "atypes.hxx"
11 #include "langnum.hxx"
12 
13 // Unicode character encoding information
14 struct unicode_info {
15   unsigned short c;
16   unsigned short cupper;
17   unsigned short clower;
18 };
19 
20 #ifdef _WIN32
21 #include <windows.h>
22 #include <wchar.h>
23 #endif
24 
25 #ifdef OPENOFFICEORG
26 #  include <unicode/uchar.h>
27 #else
28 #  ifndef MOZILLA_CLIENT
29 #    include "utf_info.cxx"
30 #    define UTF_LST_LEN (sizeof(utf_lst) / (sizeof(unicode_info)))
31 #  endif
32 #endif
33 
34 #ifdef MOZILLA_CLIENT
35 #include "nsCOMPtr.h"
36 #include "nsServiceManagerUtils.h"
37 #include "nsIUnicodeEncoder.h"
38 #include "nsIUnicodeDecoder.h"
39 #include "nsUnicharUtils.h"
40 #include "nsICharsetConverterManager.h"
41 
42 static NS_DEFINE_CID(kCharsetConverterManagerCID, NS_ICHARSETCONVERTERMANAGER_CID);
43 #endif
44 
45 struct unicode_info2 {
46   char cletter;
47   unsigned short cupper;
48   unsigned short clower;
49 };
50 
51 static struct unicode_info2 * utf_tbl = NULL;
52 static int utf_tbl_count = 0; // utf_tbl can be used by multiple Hunspell instances
53 
myfopen(const char * path,const char * mode)54 FILE * myfopen(const char * path, const char * mode) {
55 #ifdef _WIN32
56 #define WIN32_LONG_PATH_PREFIX "\\\\?\\"
57     if (strncmp(path, WIN32_LONG_PATH_PREFIX, 4) == 0) {
58         int len = MultiByteToWideChar(CP_UTF8, 0, path, -1, NULL, 0);
59         wchar_t *buff = (wchar_t *) malloc(len * sizeof(wchar_t));
60         MultiByteToWideChar(CP_UTF8, 0, path, -1, buff, len);
61         FILE * f = _wfopen(buff, (strcmp(mode, "r") == 0) ? L"r" : L"rb");
62         free(buff);
63         return f;
64     }
65 #endif
66     return fopen(path, mode);
67 }
68 
69 /* only UTF-16 (BMP) implementation */
u16_u8(char * dest,int size,const w_char * src,int srclen)70 char * u16_u8(char * dest, int size, const w_char * src, int srclen) {
71     signed char * u8 = (signed char *)dest;
72     signed char * u8_max = (signed char *)(u8 + size);
73     const w_char * u2 = src;
74     const w_char * u2_max = src + srclen;
75     while ((u2 < u2_max) && (u8 < u8_max)) {
76         if (u2->h) { // > 0xFF
77             // XXX 4-byte haven't implemented yet.
78             if (u2->h >= 0x08) {   // >= 0x800 (3-byte UTF-8 character)
79                 *u8 = 0xe0 + (u2->h >> 4);
80                 u8++;
81                 if (u8 < u8_max) {
82                     *u8 = 0x80 + ((u2->h & 0xf) << 2) + (u2->l >> 6);
83                     u8++;
84                     if (u8 < u8_max) {
85                         *u8 = 0x80 + (u2->l & 0x3f);
86                         u8++;
87                     }
88                 }
89             } else { // < 0x800 (2-byte UTF-8 character)
90                 *u8 = 0xc0 + (u2->h << 2) + (u2->l >> 6);
91                 u8++;
92                 if (u8 < u8_max) {
93                     *u8 = 0x80 + (u2->l & 0x3f);
94                     u8++;
95                 }
96             }
97         } else { // <= 0xFF
98             if (u2->l & 0x80) { // >0x80 (2-byte UTF-8 character)
99                 *u8 = 0xc0 + (u2->l >> 6);
100                 u8++;
101                 if (u8 < u8_max) {
102                     *u8 = 0x80 + (u2->l & 0x3f);
103                     u8++;
104                 }
105             } else { // < 0x80 (1-byte UTF-8 character)
106                 *u8 = u2->l;
107                 u8++;
108             }
109         }
110         u2++;
111     }
112     *u8 = '\0';
113     return dest;
114 }
115 
116 
117 /* only UTF-16 (BMP) implementation */
u8_u16(w_char * dest,int size,const char * src)118 int u8_u16(w_char * dest, int size, const char * src) {
119     const signed char * u8 = (const signed char *)src;
120     w_char * u2 = dest;
121     w_char * u2_max = u2 + size;
122 
123     while ((u2 < u2_max) && *u8) {
124     switch ((*u8) & 0xf0) {
125         case 0x00:
126         case 0x10:
127         case 0x20:
128         case 0x30:
129         case 0x40:
130         case 0x50:
131         case 0x60:
132         case 0x70: {
133             u2->h = 0;
134             u2->l = *u8;
135             break;
136         }
137         case 0x80:
138         case 0x90:
139         case 0xa0:
140         case 0xb0: {
141             HUNSPELL_WARNING(stderr, "UTF-8 encoding error. Unexpected continuation bytes in %ld. character position\n%s\n", static_cast<long>(u8 - (signed char *)src), src);
142             u2->h = 0xff;
143             u2->l = 0xfd;
144             break;
145         }
146         case 0xc0:
147         case 0xd0: {    // 2-byte UTF-8 codes
148             if ((*(u8+1) & 0xc0) == 0x80) {
149                 u2->h = (*u8 & 0x1f) >> 2;
150                 u2->l = (*u8 << 6) + (*(u8+1) & 0x3f);
151                 u8++;
152             } else {
153                 HUNSPELL_WARNING(stderr, "UTF-8 encoding error. Missing continuation byte in %ld. character position:\n%s\n", static_cast<long>(u8 - (signed char *)src), src);
154                 u2->h = 0xff;
155                 u2->l = 0xfd;
156             }
157             break;
158         }
159         case 0xe0: {    // 3-byte UTF-8 codes
160             if ((*(u8+1) & 0xc0) == 0x80) {
161                 u2->h = ((*u8 & 0x0f) << 4) + ((*(u8+1) & 0x3f) >> 2);
162                 u8++;
163                 if ((*(u8+1) & 0xc0) == 0x80) {
164                     u2->l = (*u8 << 6) + (*(u8+1) & 0x3f);
165                     u8++;
166                 } else {
167                     HUNSPELL_WARNING(stderr, "UTF-8 encoding error. Missing continuation byte in %ld. character position:\n%s\n", static_cast<long>(u8 - (signed char *)src), src);
168                     u2->h = 0xff;
169                     u2->l = 0xfd;
170                 }
171             } else {
172                 HUNSPELL_WARNING(stderr, "UTF-8 encoding error. Missing continuation byte in %ld. character position:\n%s\n", static_cast<long>(u8 - (signed char *)src), src);
173                 u2->h = 0xff;
174                 u2->l = 0xfd;
175             }
176             break;
177         }
178         case 0xf0: {    // 4 or more byte UTF-8 codes
179             HUNSPELL_WARNING(stderr, "This UTF-8 encoding can't convert to UTF-16:\n%s\n", src);
180             u2->h = 0xff;
181             u2->l = 0xfd;
182             return -1;
183         }
184     }
185     u8++;
186     u2++;
187     }
188     return (int)(u2 - dest);
189 }
190 
flag_qsort(unsigned short flags[],int begin,int end)191 void flag_qsort(unsigned short flags[], int begin, int end) {
192     unsigned short reg;
193     if (end > begin) {
194         unsigned short pivot = flags[begin];
195         int l = begin + 1;
196         int r = end;
197         while(l < r) {
198             if (flags[l] <= pivot) {
199                 l++;
200             } else {
201              r--;
202              reg = flags[l];
203              flags[l] = flags[r];
204              flags[r] = reg;
205           }
206        }
207        l--;
208        reg = flags[begin];
209        flags[begin] = flags[l];
210        flags[l] = reg;
211 
212        flag_qsort(flags, begin, l);
213        flag_qsort(flags, r, end);
214     }
215  }
216 
flag_bsearch(unsigned short flags[],unsigned short flag,int length)217 int flag_bsearch(unsigned short flags[], unsigned short flag, int length) {
218    int mid;
219    int left = 0;
220    int right = length - 1;
221    while (left <= right) {
222       mid = (left + right) / 2;
223       if (flags[mid] == flag) return 1;
224       if (flag < flags[mid]) right = mid - 1;
225       else left = mid + 1;
226    }
227    return 0;
228 }
229 
230  // strip strings into token based on single char delimiter
231  // acts like strsep() but only uses a delim char and not
232  // a delim string
233  // default delimiter: white space characters
234 
mystrsep(char ** stringp,const char delim)235  char * mystrsep(char ** stringp, const char delim)
236  {
237    char * mp = *stringp;
238    if (*mp != '\0') {
239       char * dp;
240       if (delim) {
241         dp = strchr(mp, delim);
242       } else {
243         // don't use isspace() here, the string can be in some random charset
244         // that's way different than the locale's
245         for (dp = mp; (*dp && *dp != ' ' && *dp != '\t'); dp++);
246         if (!*dp) dp = NULL;
247       }
248       if (dp) {
249          *stringp = dp+1;
250          *dp = '\0';
251       } else {
252          *stringp = mp + strlen(mp);
253       }
254       return mp;
255    }
256    return NULL;
257  }
258 
259  // replaces strdup with ansi version
mystrdup(const char * s)260  char * mystrdup(const char * s)
261  {
262    char * d = NULL;
263    if (s) {
264       size_t sl = strlen(s)+1;
265       d = (char *) malloc(sl);
266       if (d) {
267          memcpy(d,s,sl);
268       } else {
269          HUNSPELL_WARNING(stderr, "Can't allocate memory.\n");
270       }
271    }
272    return d;
273  }
274 
275  // strcat for limited length destination string
mystrcat(char * dest,const char * st,int max)276  char * mystrcat(char * dest, const char * st, int max) {
277    int len;
278    int len2;
279    if (dest == NULL || st == NULL) return dest;
280    len = strlen(dest);
281    len2 = strlen(st);
282    if (len + len2 + 1 > max) return dest;
283    strcpy(dest + len, st);
284    return dest;
285  }
286 
287  // remove cross-platform text line end characters
mychomp(char * s)288  void mychomp(char * s)
289  {
290    size_t k = strlen(s);
291    if ((k > 0) && ((*(s+k-1)=='\r') || (*(s+k-1)=='\n'))) *(s+k-1) = '\0';
292    if ((k > 1) && (*(s+k-2) == '\r')) *(s+k-2) = '\0';
293  }
294 
295 
296  //  does an ansi strdup of the reverse of a string
myrevstrdup(const char * s)297  char * myrevstrdup(const char * s)
298  {
299      char * d = NULL;
300      if (s) {
301         size_t sl = strlen(s);
302         d = (char *) malloc(sl+1);
303         if (d) {
304           const char * p = s + sl - 1;
305           char * q = d;
306           while (p >= s) *q++ = *p--;
307           *q = '\0';
308         } else {
309           HUNSPELL_WARNING(stderr, "Can't allocate memory.\n");
310         }
311      }
312      return d;
313  }
314 
315 // break text to lines
316 // return number of lines
line_tok(const char * text,char *** lines,char breakchar)317 int line_tok(const char * text, char *** lines, char breakchar) {
318     int linenum = 0;
319     if (!text) {
320         return linenum;
321     }
322     char * dup = mystrdup(text);
323     char * p = strchr(dup, breakchar);
324     while (p) {
325         linenum++;
326         *p = '\0';
327         p++;
328         p = strchr(p, breakchar);
329     }
330     linenum++;
331     *lines = (char **) malloc(linenum * sizeof(char *));
332     if (!(*lines)) {
333         free(dup);
334         return 0;
335     }
336 
337     p = dup;
338     int l = 0;
339     for (int i = 0; i < linenum; i++) {
340         if (*p != '\0') {
341             (*lines)[l] = mystrdup(p);
342             if (!(*lines)[l]) {
343                 for (i = 0; i < l; i++) free((*lines)[i]);
344                 free(dup);
345                 return 0;
346             }
347             l++;
348         }
349         p += strlen(p) + 1;
350     }
351     free(dup);
352     if (!l) free(*lines);
353     return l;
354 }
355 
356 // uniq line in place
line_uniq(char * text,char breakchar)357 char * line_uniq(char * text, char breakchar) {
358     char ** lines;
359     int linenum = line_tok(text, &lines, breakchar);
360     int i;
361     strcpy(text, lines[0]);
362     for ( i = 1; i < linenum; i++ ) {
363         int dup = 0;
364         for (int j = 0; j < i; j++) {
365             if (strcmp(lines[i], lines[j]) == 0) {
366               dup = 1;
367               break;
368             }
369         }
370         if (!dup) {
371             if ((i > 1) || (*(lines[0]) != '\0')) {
372                 sprintf(text + strlen(text), "%c", breakchar);
373             }
374             strcat(text, lines[i]);
375         }
376     }
377     for ( i = 0; i < linenum; i++ ) {
378         if (lines[i]) free(lines[i]);
379     }
380     if (lines) free(lines);
381     return text;
382 }
383 
384 // uniq and boundary for compound analysis: "1\n\2\n\1" -> " ( \1 | \2 ) "
line_uniq_app(char ** text,char breakchar)385 char * line_uniq_app(char ** text, char breakchar) {
386     if (!strchr(*text, breakchar)) {
387         return *text;
388     }
389 
390     char ** lines;
391     int i;
392     int linenum = line_tok(*text, &lines, breakchar);
393     int dup = 0;
394     for (i = 0; i < linenum; i++) {
395         for (int j = 0; j < (i - 1); j++) {
396             if (strcmp(lines[i], lines[j]) == 0) {
397                 *(lines[i]) = '\0';
398                 dup++;
399                 break;
400             }
401         }
402     }
403     if ((linenum - dup) == 1) {
404         strcpy(*text, lines[0]);
405         freelist(&lines, linenum);
406         return *text;
407     }
408     char * newtext = (char *) malloc(strlen(*text) + 2 * linenum + 3 + 1);
409     if (newtext) {
410         free(*text);
411         *text = newtext;
412     } else {
413         freelist(&lines, linenum);
414         return *text;
415     }
416     strcpy(*text," ( ");
417     for (i = 0; i < linenum; i++) if (*(lines[i])) {
418         sprintf(*text + strlen(*text), "%s%s", lines[i], " | ");
419     }
420     (*text)[strlen(*text) - 2] = ')'; // " ) "
421     freelist(&lines, linenum);
422     return *text;
423 }
424 
425  // append s to ends of every lines in text
strlinecat(char * dest,const char * s)426  void strlinecat(char * dest, const char * s)
427  {
428     char * dup = mystrdup(dest);
429     char * source = dup;
430     int len = strlen(s);
431     if (dup) {
432         while (*source) {
433             if (*source == '\n') {
434                 strncpy(dest, s, len);
435                 dest += len;
436             }
437             *dest = *source;
438             source++; dest++;
439         }
440         strcpy(dest, s);
441         free(dup);
442     }
443  }
444 
445 // change \n to char c
tr(char * text,char oldc,char newc)446 char * tr(char * text, char oldc, char newc) {
447     char * p;
448     for (p = text; *p; p++) if (*p == oldc) *p = newc;
449     return text;
450 }
451 
452 // morphcmp(): compare MORPH_DERI_SFX, MORPH_INFL_SFX and MORPH_TERM_SFX fields
453 // in the first line of the inputs
454 // return 0, if inputs equal
455 // return 1, if inputs may equal with a secondary suffix
456 // otherwise return -1
morphcmp(const char * s,const char * t)457 int morphcmp(const char * s, const char * t)
458 {
459     int se = 0;
460     int te = 0;
461     const char * sl;
462     const char * tl;
463     const char * olds;
464     const char * oldt;
465     if (!s || !t) return 1;
466     olds = s;
467     sl = strchr(s, '\n');
468     s = strstr(s, MORPH_DERI_SFX);
469     if (!s || (sl && sl < s)) s = strstr(olds, MORPH_INFL_SFX);
470     if (!s || (sl && sl < s)) {
471         s= strstr(olds, MORPH_TERM_SFX);
472         olds = NULL;
473     }
474     oldt = t;
475     tl = strchr(t, '\n');
476     t = strstr(t, MORPH_DERI_SFX);
477     if (!t || (tl && tl < t)) t = strstr(oldt, MORPH_INFL_SFX);
478     if (!t || (tl && tl < t)) {
479         t = strstr(oldt, MORPH_TERM_SFX);
480         oldt = NULL;
481     }
482     while (s && t && (!sl || sl > s) && (!tl || tl > t)) {
483         s += MORPH_TAG_LEN;
484         t += MORPH_TAG_LEN;
485         se = 0;
486         te = 0;
487         while ((*s == *t) && !se && !te) {
488             s++;
489             t++;
490             switch(*s) {
491                 case ' ':
492                 case '\n':
493                 case '\t':
494                 case '\0': se = 1;
495             }
496             switch(*t) {
497                 case ' ':
498                 case '\n':
499                 case '\t':
500                 case '\0': te = 1;
501             }
502         }
503         if (!se || !te) {
504             // not terminal suffix difference
505             if (olds) return -1;
506             return 1;
507         }
508         olds = s;
509         s = strstr(s, MORPH_DERI_SFX);
510         if (!s || (sl && sl < s)) s = strstr(olds, MORPH_INFL_SFX);
511         if (!s || (sl && sl < s)) {
512             s = strstr(olds, MORPH_TERM_SFX);
513             olds = NULL;
514         }
515         oldt = t;
516         t = strstr(t, MORPH_DERI_SFX);
517         if (!t || (tl && tl < t)) t = strstr(oldt, MORPH_INFL_SFX);
518         if (!t || (tl && tl < t)) {
519             t = strstr(oldt, MORPH_TERM_SFX);
520             oldt = NULL;
521         }
522     }
523     if (!s && !t && se && te) return 0;
524     return 1;
525 }
526 
get_sfxcount(const char * morph)527 int get_sfxcount(const char * morph)
528 {
529     if (!morph || !*morph) return 0;
530     int n = 0;
531     const char * old = morph;
532     morph = strstr(morph, MORPH_DERI_SFX);
533     if (!morph) morph = strstr(old, MORPH_INFL_SFX);
534     if (!morph) morph = strstr(old, MORPH_TERM_SFX);
535     while (morph) {
536         n++;
537         old = morph;
538         morph = strstr(morph + 1, MORPH_DERI_SFX);
539         if (!morph) morph = strstr(old + 1, MORPH_INFL_SFX);
540         if (!morph) morph = strstr(old + 1, MORPH_TERM_SFX);
541     }
542     return n;
543 }
544 
545 
fieldlen(const char * r)546 int fieldlen(const char * r)
547 {
548     int n = 0;
549     while (r && *r != ' ' && *r != '\t' && *r != '\0' && *r != '\n') {
550         r++;
551         n++;
552     }
553     return n;
554 }
555 
copy_field(char * dest,const char * morph,const char * var)556 char * copy_field(char * dest, const char * morph, const char * var)
557 {
558     if (!morph) return NULL;
559     const char * beg = strstr(morph, var);
560     if (beg) {
561        char * d = dest;
562        for (beg += MORPH_TAG_LEN; *beg != ' ' && *beg != '\t' &&
563             *beg != '\n' && *beg != '\0'; d++, beg++) {
564          *d = *beg;
565        }
566        *d = '\0';
567        return dest;
568   }
569   return NULL;
570 }
571 
mystrrep(char * word,const char * pat,const char * rep)572 char * mystrrep(char * word, const char * pat, const char * rep) {
573     char * pos = strstr(word, pat);
574     if (pos) {
575       int replen = strlen(rep);
576       int patlen = strlen(pat);
577       while (pos) {
578         if (replen < patlen) {
579             char * end = word + strlen(word);
580             char * next = pos + replen;
581             char * prev = pos + strlen(pat);
582             for (; prev < end; *next = *prev, prev++, next++);
583             *next = '\0';
584         } else if (replen > patlen) {
585             char * end = pos + patlen;
586             char * next = word + strlen(word) + replen - patlen;
587             char * prev = next - replen + patlen;
588             for (; prev >= end; *next = *prev, prev--, next--);
589         }
590         strncpy(pos, rep, replen);
591         pos = strstr(word, pat);
592       }
593     }
594     return word;
595 }
596 
597  // reverse word
reverseword(char * word)598  int reverseword(char * word) {
599    char r;
600    for (char * dest = word + strlen(word) - 1; word < dest; word++, dest--) {
601      r=*word;
602      *word = *dest;
603      *dest = r;
604    }
605    return 0;
606  }
607 
608  // reverse word (error: 1)
reverseword_utf(char * word)609  int reverseword_utf(char * word) {
610    w_char w[MAXWORDLEN];
611    w_char * p;
612    w_char r;
613    int l = u8_u16(w, MAXWORDLEN, word);
614    if (l == -1) return 1;
615    p = w;
616    for (w_char * dest = w + l - 1; p < dest; p++, dest--) {
617      r=*p;
618      *p = *dest;
619      *dest = r;
620    }
621    u16_u8(word, MAXWORDUTF8LEN, w, l);
622    return 0;
623  }
624 
uniqlist(char ** list,int n)625  int uniqlist(char ** list, int n) {
626    int i;
627    if (n < 2) return n;
628    for (i = 0; i < n; i++) {
629      for (int j = 0; j < i; j++) {
630         if (list[j] && list[i] && (strcmp(list[j], list[i]) == 0)) {
631             free(list[i]);
632             list[i] = NULL;
633             break;
634         }
635      }
636    }
637    int m = 1;
638    for (i = 1; i < n; i++) if (list[i]) {
639         list[m] = list[i];
640         m++;
641     }
642    return m;
643  }
644 
freelist(char *** list,int n)645  void freelist(char *** list, int n) {
646    if (list && *list && n > 0) {
647      for (int i = 0; i < n; i++) if ((*list)[i]) free((*list)[i]);
648      free(*list);
649      *list = NULL;
650    }
651  }
652 
653  // convert null terminated string to all caps
mkallcap(char * p,const struct cs_info * csconv)654  void mkallcap(char * p, const struct cs_info * csconv)
655  {
656    while (*p != '\0') {
657      *p = csconv[((unsigned char) *p)].cupper;
658      p++;
659    }
660  }
661 
662  // convert null terminated string to all little
mkallsmall(char * p,const struct cs_info * csconv)663  void mkallsmall(char * p, const struct cs_info * csconv)
664  {
665    while (*p != '\0') {
666      *p = csconv[((unsigned char) *p)].clower;
667      p++;
668    }
669  }
670 
mkallsmall_utf(w_char * u,int nc,int langnum)671 void mkallsmall_utf(w_char * u, int nc, int langnum) {
672     for (int i = 0; i < nc; i++) {
673         unsigned short idx = (u[i].h << 8) + u[i].l;
674         if (idx != unicodetolower(idx, langnum)) {
675             u[i].h = (unsigned char) (unicodetolower(idx, langnum) >> 8);
676             u[i].l = (unsigned char) (unicodetolower(idx, langnum) & 0x00FF);
677         }
678     }
679 }
680 
mkallcap_utf(w_char * u,int nc,int langnum)681 void mkallcap_utf(w_char * u, int nc, int langnum) {
682     for (int i = 0; i < nc; i++) {
683         unsigned short idx = (u[i].h << 8) + u[i].l;
684         if (idx != unicodetoupper(idx, langnum)) {
685             u[i].h = (unsigned char) (unicodetoupper(idx, langnum) >> 8);
686             u[i].l = (unsigned char) (unicodetoupper(idx, langnum) & 0x00FF);
687         }
688     }
689 }
690 
691  // convert null terminated string to have initial capital
mkinitcap(char * p,const struct cs_info * csconv)692  void mkinitcap(char * p, const struct cs_info * csconv)
693  {
694    if (*p != '\0') *p = csconv[((unsigned char)*p)].cupper;
695  }
696 
697  // conversion function for protected memory
store_pointer(char * dest,char * source)698  void store_pointer(char * dest, char * source)
699  {
700     memcpy(dest, &source, sizeof(char *));
701  }
702 
703  // conversion function for protected memory
get_stored_pointer(const char * s)704  char * get_stored_pointer(const char * s)
705  {
706     char * p;
707     memcpy(&p, s, sizeof(char *));
708     return p;
709  }
710 
711 #ifndef MOZILLA_CLIENT
712  // convert null terminated string to all caps using encoding
enmkallcap(char * d,const char * p,const char * encoding)713  void enmkallcap(char * d, const char * p, const char * encoding)
714 
715  {
716    struct cs_info * csconv = get_current_cs(encoding);
717    while (*p != '\0') {
718      *d++ = csconv[((unsigned char) *p)].cupper;
719      p++;
720    }
721    *d = '\0';
722  }
723 
724  // convert null terminated string to all little using encoding
enmkallsmall(char * d,const char * p,const char * encoding)725  void enmkallsmall(char * d, const char * p, const char * encoding)
726  {
727    struct cs_info * csconv = get_current_cs(encoding);
728    while (*p != '\0') {
729      *d++ = csconv[((unsigned char) *p)].clower;
730      p++;
731    }
732    *d = '\0';
733  }
734 
735  // convert null terminated string to have initial capital using encoding
enmkinitcap(char * d,const char * p,const char * encoding)736  void enmkinitcap(char * d, const char * p, const char * encoding)
737  {
738    struct cs_info * csconv = get_current_cs(encoding);
739    memcpy(d,p,(strlen(p)+1));
740    if (*p != '\0') *d= csconv[((unsigned char)*p)].cupper;
741  }
742 
743 // these are simple character mappings for the
744 // encodings supported
745 // supplying isupper, tolower, and toupper
746 
747 static struct cs_info iso1_tbl[] = {
748 { 0x00, 0x00, 0x00 },
749 { 0x00, 0x01, 0x01 },
750 { 0x00, 0x02, 0x02 },
751 { 0x00, 0x03, 0x03 },
752 { 0x00, 0x04, 0x04 },
753 { 0x00, 0x05, 0x05 },
754 { 0x00, 0x06, 0x06 },
755 { 0x00, 0x07, 0x07 },
756 { 0x00, 0x08, 0x08 },
757 { 0x00, 0x09, 0x09 },
758 { 0x00, 0x0a, 0x0a },
759 { 0x00, 0x0b, 0x0b },
760 { 0x00, 0x0c, 0x0c },
761 { 0x00, 0x0d, 0x0d },
762 { 0x00, 0x0e, 0x0e },
763 { 0x00, 0x0f, 0x0f },
764 { 0x00, 0x10, 0x10 },
765 { 0x00, 0x11, 0x11 },
766 { 0x00, 0x12, 0x12 },
767 { 0x00, 0x13, 0x13 },
768 { 0x00, 0x14, 0x14 },
769 { 0x00, 0x15, 0x15 },
770 { 0x00, 0x16, 0x16 },
771 { 0x00, 0x17, 0x17 },
772 { 0x00, 0x18, 0x18 },
773 { 0x00, 0x19, 0x19 },
774 { 0x00, 0x1a, 0x1a },
775 { 0x00, 0x1b, 0x1b },
776 { 0x00, 0x1c, 0x1c },
777 { 0x00, 0x1d, 0x1d },
778 { 0x00, 0x1e, 0x1e },
779 { 0x00, 0x1f, 0x1f },
780 { 0x00, 0x20, 0x20 },
781 { 0x00, 0x21, 0x21 },
782 { 0x00, 0x22, 0x22 },
783 { 0x00, 0x23, 0x23 },
784 { 0x00, 0x24, 0x24 },
785 { 0x00, 0x25, 0x25 },
786 { 0x00, 0x26, 0x26 },
787 { 0x00, 0x27, 0x27 },
788 { 0x00, 0x28, 0x28 },
789 { 0x00, 0x29, 0x29 },
790 { 0x00, 0x2a, 0x2a },
791 { 0x00, 0x2b, 0x2b },
792 { 0x00, 0x2c, 0x2c },
793 { 0x00, 0x2d, 0x2d },
794 { 0x00, 0x2e, 0x2e },
795 { 0x00, 0x2f, 0x2f },
796 { 0x00, 0x30, 0x30 },
797 { 0x00, 0x31, 0x31 },
798 { 0x00, 0x32, 0x32 },
799 { 0x00, 0x33, 0x33 },
800 { 0x00, 0x34, 0x34 },
801 { 0x00, 0x35, 0x35 },
802 { 0x00, 0x36, 0x36 },
803 { 0x00, 0x37, 0x37 },
804 { 0x00, 0x38, 0x38 },
805 { 0x00, 0x39, 0x39 },
806 { 0x00, 0x3a, 0x3a },
807 { 0x00, 0x3b, 0x3b },
808 { 0x00, 0x3c, 0x3c },
809 { 0x00, 0x3d, 0x3d },
810 { 0x00, 0x3e, 0x3e },
811 { 0x00, 0x3f, 0x3f },
812 { 0x00, 0x40, 0x40 },
813 { 0x01, 0x61, 0x41 },
814 { 0x01, 0x62, 0x42 },
815 { 0x01, 0x63, 0x43 },
816 { 0x01, 0x64, 0x44 },
817 { 0x01, 0x65, 0x45 },
818 { 0x01, 0x66, 0x46 },
819 { 0x01, 0x67, 0x47 },
820 { 0x01, 0x68, 0x48 },
821 { 0x01, 0x69, 0x49 },
822 { 0x01, 0x6a, 0x4a },
823 { 0x01, 0x6b, 0x4b },
824 { 0x01, 0x6c, 0x4c },
825 { 0x01, 0x6d, 0x4d },
826 { 0x01, 0x6e, 0x4e },
827 { 0x01, 0x6f, 0x4f },
828 { 0x01, 0x70, 0x50 },
829 { 0x01, 0x71, 0x51 },
830 { 0x01, 0x72, 0x52 },
831 { 0x01, 0x73, 0x53 },
832 { 0x01, 0x74, 0x54 },
833 { 0x01, 0x75, 0x55 },
834 { 0x01, 0x76, 0x56 },
835 { 0x01, 0x77, 0x57 },
836 { 0x01, 0x78, 0x58 },
837 { 0x01, 0x79, 0x59 },
838 { 0x01, 0x7a, 0x5a },
839 { 0x00, 0x5b, 0x5b },
840 { 0x00, 0x5c, 0x5c },
841 { 0x00, 0x5d, 0x5d },
842 { 0x00, 0x5e, 0x5e },
843 { 0x00, 0x5f, 0x5f },
844 { 0x00, 0x60, 0x60 },
845 { 0x00, 0x61, 0x41 },
846 { 0x00, 0x62, 0x42 },
847 { 0x00, 0x63, 0x43 },
848 { 0x00, 0x64, 0x44 },
849 { 0x00, 0x65, 0x45 },
850 { 0x00, 0x66, 0x46 },
851 { 0x00, 0x67, 0x47 },
852 { 0x00, 0x68, 0x48 },
853 { 0x00, 0x69, 0x49 },
854 { 0x00, 0x6a, 0x4a },
855 { 0x00, 0x6b, 0x4b },
856 { 0x00, 0x6c, 0x4c },
857 { 0x00, 0x6d, 0x4d },
858 { 0x00, 0x6e, 0x4e },
859 { 0x00, 0x6f, 0x4f },
860 { 0x00, 0x70, 0x50 },
861 { 0x00, 0x71, 0x51 },
862 { 0x00, 0x72, 0x52 },
863 { 0x00, 0x73, 0x53 },
864 { 0x00, 0x74, 0x54 },
865 { 0x00, 0x75, 0x55 },
866 { 0x00, 0x76, 0x56 },
867 { 0x00, 0x77, 0x57 },
868 { 0x00, 0x78, 0x58 },
869 { 0x00, 0x79, 0x59 },
870 { 0x00, 0x7a, 0x5a },
871 { 0x00, 0x7b, 0x7b },
872 { 0x00, 0x7c, 0x7c },
873 { 0x00, 0x7d, 0x7d },
874 { 0x00, 0x7e, 0x7e },
875 { 0x00, 0x7f, 0x7f },
876 { 0x00, 0x80, 0x80 },
877 { 0x00, 0x81, 0x81 },
878 { 0x00, 0x82, 0x82 },
879 { 0x00, 0x83, 0x83 },
880 { 0x00, 0x84, 0x84 },
881 { 0x00, 0x85, 0x85 },
882 { 0x00, 0x86, 0x86 },
883 { 0x00, 0x87, 0x87 },
884 { 0x00, 0x88, 0x88 },
885 { 0x00, 0x89, 0x89 },
886 { 0x00, 0x8a, 0x8a },
887 { 0x00, 0x8b, 0x8b },
888 { 0x00, 0x8c, 0x8c },
889 { 0x00, 0x8d, 0x8d },
890 { 0x00, 0x8e, 0x8e },
891 { 0x00, 0x8f, 0x8f },
892 { 0x00, 0x90, 0x90 },
893 { 0x00, 0x91, 0x91 },
894 { 0x00, 0x92, 0x92 },
895 { 0x00, 0x93, 0x93 },
896 { 0x00, 0x94, 0x94 },
897 { 0x00, 0x95, 0x95 },
898 { 0x00, 0x96, 0x96 },
899 { 0x00, 0x97, 0x97 },
900 { 0x00, 0x98, 0x98 },
901 { 0x00, 0x99, 0x99 },
902 { 0x00, 0x9a, 0x9a },
903 { 0x00, 0x9b, 0x9b },
904 { 0x00, 0x9c, 0x9c },
905 { 0x00, 0x9d, 0x9d },
906 { 0x00, 0x9e, 0x9e },
907 { 0x00, 0x9f, 0x9f },
908 { 0x00, 0xa0, 0xa0 },
909 { 0x00, 0xa1, 0xa1 },
910 { 0x00, 0xa2, 0xa2 },
911 { 0x00, 0xa3, 0xa3 },
912 { 0x00, 0xa4, 0xa4 },
913 { 0x00, 0xa5, 0xa5 },
914 { 0x00, 0xa6, 0xa6 },
915 { 0x00, 0xa7, 0xa7 },
916 { 0x00, 0xa8, 0xa8 },
917 { 0x00, 0xa9, 0xa9 },
918 { 0x00, 0xaa, 0xaa },
919 { 0x00, 0xab, 0xab },
920 { 0x00, 0xac, 0xac },
921 { 0x00, 0xad, 0xad },
922 { 0x00, 0xae, 0xae },
923 { 0x00, 0xaf, 0xaf },
924 { 0x00, 0xb0, 0xb0 },
925 { 0x00, 0xb1, 0xb1 },
926 { 0x00, 0xb2, 0xb2 },
927 { 0x00, 0xb3, 0xb3 },
928 { 0x00, 0xb4, 0xb4 },
929 { 0x00, 0xb5, 0xb5 },
930 { 0x00, 0xb6, 0xb6 },
931 { 0x00, 0xb7, 0xb7 },
932 { 0x00, 0xb8, 0xb8 },
933 { 0x00, 0xb9, 0xb9 },
934 { 0x00, 0xba, 0xba },
935 { 0x00, 0xbb, 0xbb },
936 { 0x00, 0xbc, 0xbc },
937 { 0x00, 0xbd, 0xbd },
938 { 0x00, 0xbe, 0xbe },
939 { 0x00, 0xbf, 0xbf },
940 { 0x01, 0xe0, 0xc0 },
941 { 0x01, 0xe1, 0xc1 },
942 { 0x01, 0xe2, 0xc2 },
943 { 0x01, 0xe3, 0xc3 },
944 { 0x01, 0xe4, 0xc4 },
945 { 0x01, 0xe5, 0xc5 },
946 { 0x01, 0xe6, 0xc6 },
947 { 0x01, 0xe7, 0xc7 },
948 { 0x01, 0xe8, 0xc8 },
949 { 0x01, 0xe9, 0xc9 },
950 { 0x01, 0xea, 0xca },
951 { 0x01, 0xeb, 0xcb },
952 { 0x01, 0xec, 0xcc },
953 { 0x01, 0xed, 0xcd },
954 { 0x01, 0xee, 0xce },
955 { 0x01, 0xef, 0xcf },
956 { 0x01, 0xf0, 0xd0 },
957 { 0x01, 0xf1, 0xd1 },
958 { 0x01, 0xf2, 0xd2 },
959 { 0x01, 0xf3, 0xd3 },
960 { 0x01, 0xf4, 0xd4 },
961 { 0x01, 0xf5, 0xd5 },
962 { 0x01, 0xf6, 0xd6 },
963 { 0x00, 0xd7, 0xd7 },
964 { 0x01, 0xf8, 0xd8 },
965 { 0x01, 0xf9, 0xd9 },
966 { 0x01, 0xfa, 0xda },
967 { 0x01, 0xfb, 0xdb },
968 { 0x01, 0xfc, 0xdc },
969 { 0x01, 0xfd, 0xdd },
970 { 0x01, 0xfe, 0xde },
971 { 0x00, 0xdf, 0xdf },
972 { 0x00, 0xe0, 0xc0 },
973 { 0x00, 0xe1, 0xc1 },
974 { 0x00, 0xe2, 0xc2 },
975 { 0x00, 0xe3, 0xc3 },
976 { 0x00, 0xe4, 0xc4 },
977 { 0x00, 0xe5, 0xc5 },
978 { 0x00, 0xe6, 0xc6 },
979 { 0x00, 0xe7, 0xc7 },
980 { 0x00, 0xe8, 0xc8 },
981 { 0x00, 0xe9, 0xc9 },
982 { 0x00, 0xea, 0xca },
983 { 0x00, 0xeb, 0xcb },
984 { 0x00, 0xec, 0xcc },
985 { 0x00, 0xed, 0xcd },
986 { 0x00, 0xee, 0xce },
987 { 0x00, 0xef, 0xcf },
988 { 0x00, 0xf0, 0xd0 },
989 { 0x00, 0xf1, 0xd1 },
990 { 0x00, 0xf2, 0xd2 },
991 { 0x00, 0xf3, 0xd3 },
992 { 0x00, 0xf4, 0xd4 },
993 { 0x00, 0xf5, 0xd5 },
994 { 0x00, 0xf6, 0xd6 },
995 { 0x00, 0xf7, 0xf7 },
996 { 0x00, 0xf8, 0xd8 },
997 { 0x00, 0xf9, 0xd9 },
998 { 0x00, 0xfa, 0xda },
999 { 0x00, 0xfb, 0xdb },
1000 { 0x00, 0xfc, 0xdc },
1001 { 0x00, 0xfd, 0xdd },
1002 { 0x00, 0xfe, 0xde },
1003 { 0x00, 0xff, 0xff }
1004 };
1005 
1006 
1007 static struct cs_info iso2_tbl[] = {
1008 { 0x00, 0x00, 0x00 },
1009 { 0x00, 0x01, 0x01 },
1010 { 0x00, 0x02, 0x02 },
1011 { 0x00, 0x03, 0x03 },
1012 { 0x00, 0x04, 0x04 },
1013 { 0x00, 0x05, 0x05 },
1014 { 0x00, 0x06, 0x06 },
1015 { 0x00, 0x07, 0x07 },
1016 { 0x00, 0x08, 0x08 },
1017 { 0x00, 0x09, 0x09 },
1018 { 0x00, 0x0a, 0x0a },
1019 { 0x00, 0x0b, 0x0b },
1020 { 0x00, 0x0c, 0x0c },
1021 { 0x00, 0x0d, 0x0d },
1022 { 0x00, 0x0e, 0x0e },
1023 { 0x00, 0x0f, 0x0f },
1024 { 0x00, 0x10, 0x10 },
1025 { 0x00, 0x11, 0x11 },
1026 { 0x00, 0x12, 0x12 },
1027 { 0x00, 0x13, 0x13 },
1028 { 0x00, 0x14, 0x14 },
1029 { 0x00, 0x15, 0x15 },
1030 { 0x00, 0x16, 0x16 },
1031 { 0x00, 0x17, 0x17 },
1032 { 0x00, 0x18, 0x18 },
1033 { 0x00, 0x19, 0x19 },
1034 { 0x00, 0x1a, 0x1a },
1035 { 0x00, 0x1b, 0x1b },
1036 { 0x00, 0x1c, 0x1c },
1037 { 0x00, 0x1d, 0x1d },
1038 { 0x00, 0x1e, 0x1e },
1039 { 0x00, 0x1f, 0x1f },
1040 { 0x00, 0x20, 0x20 },
1041 { 0x00, 0x21, 0x21 },
1042 { 0x00, 0x22, 0x22 },
1043 { 0x00, 0x23, 0x23 },
1044 { 0x00, 0x24, 0x24 },
1045 { 0x00, 0x25, 0x25 },
1046 { 0x00, 0x26, 0x26 },
1047 { 0x00, 0x27, 0x27 },
1048 { 0x00, 0x28, 0x28 },
1049 { 0x00, 0x29, 0x29 },
1050 { 0x00, 0x2a, 0x2a },
1051 { 0x00, 0x2b, 0x2b },
1052 { 0x00, 0x2c, 0x2c },
1053 { 0x00, 0x2d, 0x2d },
1054 { 0x00, 0x2e, 0x2e },
1055 { 0x00, 0x2f, 0x2f },
1056 { 0x00, 0x30, 0x30 },
1057 { 0x00, 0x31, 0x31 },
1058 { 0x00, 0x32, 0x32 },
1059 { 0x00, 0x33, 0x33 },
1060 { 0x00, 0x34, 0x34 },
1061 { 0x00, 0x35, 0x35 },
1062 { 0x00, 0x36, 0x36 },
1063 { 0x00, 0x37, 0x37 },
1064 { 0x00, 0x38, 0x38 },
1065 { 0x00, 0x39, 0x39 },
1066 { 0x00, 0x3a, 0x3a },
1067 { 0x00, 0x3b, 0x3b },
1068 { 0x00, 0x3c, 0x3c },
1069 { 0x00, 0x3d, 0x3d },
1070 { 0x00, 0x3e, 0x3e },
1071 { 0x00, 0x3f, 0x3f },
1072 { 0x00, 0x40, 0x40 },
1073 { 0x01, 0x61, 0x41 },
1074 { 0x01, 0x62, 0x42 },
1075 { 0x01, 0x63, 0x43 },
1076 { 0x01, 0x64, 0x44 },
1077 { 0x01, 0x65, 0x45 },
1078 { 0x01, 0x66, 0x46 },
1079 { 0x01, 0x67, 0x47 },
1080 { 0x01, 0x68, 0x48 },
1081 { 0x01, 0x69, 0x49 },
1082 { 0x01, 0x6a, 0x4a },
1083 { 0x01, 0x6b, 0x4b },
1084 { 0x01, 0x6c, 0x4c },
1085 { 0x01, 0x6d, 0x4d },
1086 { 0x01, 0x6e, 0x4e },
1087 { 0x01, 0x6f, 0x4f },
1088 { 0x01, 0x70, 0x50 },
1089 { 0x01, 0x71, 0x51 },
1090 { 0x01, 0x72, 0x52 },
1091 { 0x01, 0x73, 0x53 },
1092 { 0x01, 0x74, 0x54 },
1093 { 0x01, 0x75, 0x55 },
1094 { 0x01, 0x76, 0x56 },
1095 { 0x01, 0x77, 0x57 },
1096 { 0x01, 0x78, 0x58 },
1097 { 0x01, 0x79, 0x59 },
1098 { 0x01, 0x7a, 0x5a },
1099 { 0x00, 0x5b, 0x5b },
1100 { 0x00, 0x5c, 0x5c },
1101 { 0x00, 0x5d, 0x5d },
1102 { 0x00, 0x5e, 0x5e },
1103 { 0x00, 0x5f, 0x5f },
1104 { 0x00, 0x60, 0x60 },
1105 { 0x00, 0x61, 0x41 },
1106 { 0x00, 0x62, 0x42 },
1107 { 0x00, 0x63, 0x43 },
1108 { 0x00, 0x64, 0x44 },
1109 { 0x00, 0x65, 0x45 },
1110 { 0x00, 0x66, 0x46 },
1111 { 0x00, 0x67, 0x47 },
1112 { 0x00, 0x68, 0x48 },
1113 { 0x00, 0x69, 0x49 },
1114 { 0x00, 0x6a, 0x4a },
1115 { 0x00, 0x6b, 0x4b },
1116 { 0x00, 0x6c, 0x4c },
1117 { 0x00, 0x6d, 0x4d },
1118 { 0x00, 0x6e, 0x4e },
1119 { 0x00, 0x6f, 0x4f },
1120 { 0x00, 0x70, 0x50 },
1121 { 0x00, 0x71, 0x51 },
1122 { 0x00, 0x72, 0x52 },
1123 { 0x00, 0x73, 0x53 },
1124 { 0x00, 0x74, 0x54 },
1125 { 0x00, 0x75, 0x55 },
1126 { 0x00, 0x76, 0x56 },
1127 { 0x00, 0x77, 0x57 },
1128 { 0x00, 0x78, 0x58 },
1129 { 0x00, 0x79, 0x59 },
1130 { 0x00, 0x7a, 0x5a },
1131 { 0x00, 0x7b, 0x7b },
1132 { 0x00, 0x7c, 0x7c },
1133 { 0x00, 0x7d, 0x7d },
1134 { 0x00, 0x7e, 0x7e },
1135 { 0x00, 0x7f, 0x7f },
1136 { 0x00, 0x80, 0x80 },
1137 { 0x00, 0x81, 0x81 },
1138 { 0x00, 0x82, 0x82 },
1139 { 0x00, 0x83, 0x83 },
1140 { 0x00, 0x84, 0x84 },
1141 { 0x00, 0x85, 0x85 },
1142 { 0x00, 0x86, 0x86 },
1143 { 0x00, 0x87, 0x87 },
1144 { 0x00, 0x88, 0x88 },
1145 { 0x00, 0x89, 0x89 },
1146 { 0x00, 0x8a, 0x8a },
1147 { 0x00, 0x8b, 0x8b },
1148 { 0x00, 0x8c, 0x8c },
1149 { 0x00, 0x8d, 0x8d },
1150 { 0x00, 0x8e, 0x8e },
1151 { 0x00, 0x8f, 0x8f },
1152 { 0x00, 0x90, 0x90 },
1153 { 0x00, 0x91, 0x91 },
1154 { 0x00, 0x92, 0x92 },
1155 { 0x00, 0x93, 0x93 },
1156 { 0x00, 0x94, 0x94 },
1157 { 0x00, 0x95, 0x95 },
1158 { 0x00, 0x96, 0x96 },
1159 { 0x00, 0x97, 0x97 },
1160 { 0x00, 0x98, 0x98 },
1161 { 0x00, 0x99, 0x99 },
1162 { 0x00, 0x9a, 0x9a },
1163 { 0x00, 0x9b, 0x9b },
1164 { 0x00, 0x9c, 0x9c },
1165 { 0x00, 0x9d, 0x9d },
1166 { 0x00, 0x9e, 0x9e },
1167 { 0x00, 0x9f, 0x9f },
1168 { 0x00, 0xa0, 0xa0 },
1169 { 0x01, 0xb1, 0xa1 },
1170 { 0x00, 0xa2, 0xa2 },
1171 { 0x01, 0xb3, 0xa3 },
1172 { 0x00, 0xa4, 0xa4 },
1173 { 0x01, 0xb5, 0xa5 },
1174 { 0x01, 0xb6, 0xa6 },
1175 { 0x00, 0xa7, 0xa7 },
1176 { 0x00, 0xa8, 0xa8 },
1177 { 0x01, 0xb9, 0xa9 },
1178 { 0x01, 0xba, 0xaa },
1179 { 0x01, 0xbb, 0xab },
1180 { 0x01, 0xbc, 0xac },
1181 { 0x00, 0xad, 0xad },
1182 { 0x01, 0xbe, 0xae },
1183 { 0x01, 0xbf, 0xaf },
1184 { 0x00, 0xb0, 0xb0 },
1185 { 0x00, 0xb1, 0xa1 },
1186 { 0x00, 0xb2, 0xb2 },
1187 { 0x00, 0xb3, 0xa3 },
1188 { 0x00, 0xb4, 0xb4 },
1189 { 0x00, 0xb5, 0xa5 },
1190 { 0x00, 0xb6, 0xa6 },
1191 { 0x00, 0xb7, 0xb7 },
1192 { 0x00, 0xb8, 0xb8 },
1193 { 0x00, 0xb9, 0xa9 },
1194 { 0x00, 0xba, 0xaa },
1195 { 0x00, 0xbb, 0xab },
1196 { 0x00, 0xbc, 0xac },
1197 { 0x00, 0xbd, 0xbd },
1198 { 0x00, 0xbe, 0xae },
1199 { 0x00, 0xbf, 0xaf },
1200 { 0x01, 0xe0, 0xc0 },
1201 { 0x01, 0xe1, 0xc1 },
1202 { 0x01, 0xe2, 0xc2 },
1203 { 0x01, 0xe3, 0xc3 },
1204 { 0x01, 0xe4, 0xc4 },
1205 { 0x01, 0xe5, 0xc5 },
1206 { 0x01, 0xe6, 0xc6 },
1207 { 0x01, 0xe7, 0xc7 },
1208 { 0x01, 0xe8, 0xc8 },
1209 { 0x01, 0xe9, 0xc9 },
1210 { 0x01, 0xea, 0xca },
1211 { 0x01, 0xeb, 0xcb },
1212 { 0x01, 0xec, 0xcc },
1213 { 0x01, 0xed, 0xcd },
1214 { 0x01, 0xee, 0xce },
1215 { 0x01, 0xef, 0xcf },
1216 { 0x01, 0xf0, 0xd0 },
1217 { 0x01, 0xf1, 0xd1 },
1218 { 0x01, 0xf2, 0xd2 },
1219 { 0x01, 0xf3, 0xd3 },
1220 { 0x01, 0xf4, 0xd4 },
1221 { 0x01, 0xf5, 0xd5 },
1222 { 0x01, 0xf6, 0xd6 },
1223 { 0x00, 0xd7, 0xd7 },
1224 { 0x01, 0xf8, 0xd8 },
1225 { 0x01, 0xf9, 0xd9 },
1226 { 0x01, 0xfa, 0xda },
1227 { 0x01, 0xfb, 0xdb },
1228 { 0x01, 0xfc, 0xdc },
1229 { 0x01, 0xfd, 0xdd },
1230 { 0x01, 0xfe, 0xde },
1231 { 0x00, 0xdf, 0xdf },
1232 { 0x00, 0xe0, 0xc0 },
1233 { 0x00, 0xe1, 0xc1 },
1234 { 0x00, 0xe2, 0xc2 },
1235 { 0x00, 0xe3, 0xc3 },
1236 { 0x00, 0xe4, 0xc4 },
1237 { 0x00, 0xe5, 0xc5 },
1238 { 0x00, 0xe6, 0xc6 },
1239 { 0x00, 0xe7, 0xc7 },
1240 { 0x00, 0xe8, 0xc8 },
1241 { 0x00, 0xe9, 0xc9 },
1242 { 0x00, 0xea, 0xca },
1243 { 0x00, 0xeb, 0xcb },
1244 { 0x00, 0xec, 0xcc },
1245 { 0x00, 0xed, 0xcd },
1246 { 0x00, 0xee, 0xce },
1247 { 0x00, 0xef, 0xcf },
1248 { 0x00, 0xf0, 0xd0 },
1249 { 0x00, 0xf1, 0xd1 },
1250 { 0x00, 0xf2, 0xd2 },
1251 { 0x00, 0xf3, 0xd3 },
1252 { 0x00, 0xf4, 0xd4 },
1253 { 0x00, 0xf5, 0xd5 },
1254 { 0x00, 0xf6, 0xd6 },
1255 { 0x00, 0xf7, 0xf7 },
1256 { 0x00, 0xf8, 0xd8 },
1257 { 0x00, 0xf9, 0xd9 },
1258 { 0x00, 0xfa, 0xda },
1259 { 0x00, 0xfb, 0xdb },
1260 { 0x00, 0xfc, 0xdc },
1261 { 0x00, 0xfd, 0xdd },
1262 { 0x00, 0xfe, 0xde },
1263 { 0x00, 0xff, 0xff }
1264 };
1265 
1266 
1267 static struct cs_info iso3_tbl[] = {
1268 { 0x00, 0x00, 0x00 },
1269 { 0x00, 0x01, 0x01 },
1270 { 0x00, 0x02, 0x02 },
1271 { 0x00, 0x03, 0x03 },
1272 { 0x00, 0x04, 0x04 },
1273 { 0x00, 0x05, 0x05 },
1274 { 0x00, 0x06, 0x06 },
1275 { 0x00, 0x07, 0x07 },
1276 { 0x00, 0x08, 0x08 },
1277 { 0x00, 0x09, 0x09 },
1278 { 0x00, 0x0a, 0x0a },
1279 { 0x00, 0x0b, 0x0b },
1280 { 0x00, 0x0c, 0x0c },
1281 { 0x00, 0x0d, 0x0d },
1282 { 0x00, 0x0e, 0x0e },
1283 { 0x00, 0x0f, 0x0f },
1284 { 0x00, 0x10, 0x10 },
1285 { 0x00, 0x11, 0x11 },
1286 { 0x00, 0x12, 0x12 },
1287 { 0x00, 0x13, 0x13 },
1288 { 0x00, 0x14, 0x14 },
1289 { 0x00, 0x15, 0x15 },
1290 { 0x00, 0x16, 0x16 },
1291 { 0x00, 0x17, 0x17 },
1292 { 0x00, 0x18, 0x18 },
1293 { 0x00, 0x19, 0x19 },
1294 { 0x00, 0x1a, 0x1a },
1295 { 0x00, 0x1b, 0x1b },
1296 { 0x00, 0x1c, 0x1c },
1297 { 0x00, 0x1d, 0x1d },
1298 { 0x00, 0x1e, 0x1e },
1299 { 0x00, 0x1f, 0x1f },
1300 { 0x00, 0x20, 0x20 },
1301 { 0x00, 0x21, 0x21 },
1302 { 0x00, 0x22, 0x22 },
1303 { 0x00, 0x23, 0x23 },
1304 { 0x00, 0x24, 0x24 },
1305 { 0x00, 0x25, 0x25 },
1306 { 0x00, 0x26, 0x26 },
1307 { 0x00, 0x27, 0x27 },
1308 { 0x00, 0x28, 0x28 },
1309 { 0x00, 0x29, 0x29 },
1310 { 0x00, 0x2a, 0x2a },
1311 { 0x00, 0x2b, 0x2b },
1312 { 0x00, 0x2c, 0x2c },
1313 { 0x00, 0x2d, 0x2d },
1314 { 0x00, 0x2e, 0x2e },
1315 { 0x00, 0x2f, 0x2f },
1316 { 0x00, 0x30, 0x30 },
1317 { 0x00, 0x31, 0x31 },
1318 { 0x00, 0x32, 0x32 },
1319 { 0x00, 0x33, 0x33 },
1320 { 0x00, 0x34, 0x34 },
1321 { 0x00, 0x35, 0x35 },
1322 { 0x00, 0x36, 0x36 },
1323 { 0x00, 0x37, 0x37 },
1324 { 0x00, 0x38, 0x38 },
1325 { 0x00, 0x39, 0x39 },
1326 { 0x00, 0x3a, 0x3a },
1327 { 0x00, 0x3b, 0x3b },
1328 { 0x00, 0x3c, 0x3c },
1329 { 0x00, 0x3d, 0x3d },
1330 { 0x00, 0x3e, 0x3e },
1331 { 0x00, 0x3f, 0x3f },
1332 { 0x00, 0x40, 0x40 },
1333 { 0x01, 0x61, 0x41 },
1334 { 0x01, 0x62, 0x42 },
1335 { 0x01, 0x63, 0x43 },
1336 { 0x01, 0x64, 0x44 },
1337 { 0x01, 0x65, 0x45 },
1338 { 0x01, 0x66, 0x46 },
1339 { 0x01, 0x67, 0x47 },
1340 { 0x01, 0x68, 0x48 },
1341 { 0x01, 0x69, 0x49 },
1342 { 0x01, 0x6a, 0x4a },
1343 { 0x01, 0x6b, 0x4b },
1344 { 0x01, 0x6c, 0x4c },
1345 { 0x01, 0x6d, 0x4d },
1346 { 0x01, 0x6e, 0x4e },
1347 { 0x01, 0x6f, 0x4f },
1348 { 0x01, 0x70, 0x50 },
1349 { 0x01, 0x71, 0x51 },
1350 { 0x01, 0x72, 0x52 },
1351 { 0x01, 0x73, 0x53 },
1352 { 0x01, 0x74, 0x54 },
1353 { 0x01, 0x75, 0x55 },
1354 { 0x01, 0x76, 0x56 },
1355 { 0x01, 0x77, 0x57 },
1356 { 0x01, 0x78, 0x58 },
1357 { 0x01, 0x79, 0x59 },
1358 { 0x01, 0x7a, 0x5a },
1359 { 0x00, 0x5b, 0x5b },
1360 { 0x00, 0x5c, 0x5c },
1361 { 0x00, 0x5d, 0x5d },
1362 { 0x00, 0x5e, 0x5e },
1363 { 0x00, 0x5f, 0x5f },
1364 { 0x00, 0x60, 0x60 },
1365 { 0x00, 0x61, 0x41 },
1366 { 0x00, 0x62, 0x42 },
1367 { 0x00, 0x63, 0x43 },
1368 { 0x00, 0x64, 0x44 },
1369 { 0x00, 0x65, 0x45 },
1370 { 0x00, 0x66, 0x46 },
1371 { 0x00, 0x67, 0x47 },
1372 { 0x00, 0x68, 0x48 },
1373 { 0x00, 0x69, 0x49 },
1374 { 0x00, 0x6a, 0x4a },
1375 { 0x00, 0x6b, 0x4b },
1376 { 0x00, 0x6c, 0x4c },
1377 { 0x00, 0x6d, 0x4d },
1378 { 0x00, 0x6e, 0x4e },
1379 { 0x00, 0x6f, 0x4f },
1380 { 0x00, 0x70, 0x50 },
1381 { 0x00, 0x71, 0x51 },
1382 { 0x00, 0x72, 0x52 },
1383 { 0x00, 0x73, 0x53 },
1384 { 0x00, 0x74, 0x54 },
1385 { 0x00, 0x75, 0x55 },
1386 { 0x00, 0x76, 0x56 },
1387 { 0x00, 0x77, 0x57 },
1388 { 0x00, 0x78, 0x58 },
1389 { 0x00, 0x79, 0x59 },
1390 { 0x00, 0x7a, 0x5a },
1391 { 0x00, 0x7b, 0x7b },
1392 { 0x00, 0x7c, 0x7c },
1393 { 0x00, 0x7d, 0x7d },
1394 { 0x00, 0x7e, 0x7e },
1395 { 0x00, 0x7f, 0x7f },
1396 { 0x00, 0x80, 0x80 },
1397 { 0x00, 0x81, 0x81 },
1398 { 0x00, 0x82, 0x82 },
1399 { 0x00, 0x83, 0x83 },
1400 { 0x00, 0x84, 0x84 },
1401 { 0x00, 0x85, 0x85 },
1402 { 0x00, 0x86, 0x86 },
1403 { 0x00, 0x87, 0x87 },
1404 { 0x00, 0x88, 0x88 },
1405 { 0x00, 0x89, 0x89 },
1406 { 0x00, 0x8a, 0x8a },
1407 { 0x00, 0x8b, 0x8b },
1408 { 0x00, 0x8c, 0x8c },
1409 { 0x00, 0x8d, 0x8d },
1410 { 0x00, 0x8e, 0x8e },
1411 { 0x00, 0x8f, 0x8f },
1412 { 0x00, 0x90, 0x90 },
1413 { 0x00, 0x91, 0x91 },
1414 { 0x00, 0x92, 0x92 },
1415 { 0x00, 0x93, 0x93 },
1416 { 0x00, 0x94, 0x94 },
1417 { 0x00, 0x95, 0x95 },
1418 { 0x00, 0x96, 0x96 },
1419 { 0x00, 0x97, 0x97 },
1420 { 0x00, 0x98, 0x98 },
1421 { 0x00, 0x99, 0x99 },
1422 { 0x00, 0x9a, 0x9a },
1423 { 0x00, 0x9b, 0x9b },
1424 { 0x00, 0x9c, 0x9c },
1425 { 0x00, 0x9d, 0x9d },
1426 { 0x00, 0x9e, 0x9e },
1427 { 0x00, 0x9f, 0x9f },
1428 { 0x00, 0xa0, 0xa0 },
1429 { 0x01, 0xb1, 0xa1 },
1430 { 0x00, 0xa2, 0xa2 },
1431 { 0x00, 0xa3, 0xa3 },
1432 { 0x00, 0xa4, 0xa4 },
1433 { 0x00, 0xa5, 0xa5 },
1434 { 0x01, 0xb6, 0xa6 },
1435 { 0x00, 0xa7, 0xa7 },
1436 { 0x00, 0xa8, 0xa8 },
1437 { 0x01, 0x69, 0xa9 },
1438 { 0x01, 0xba, 0xaa },
1439 { 0x01, 0xbb, 0xab },
1440 { 0x01, 0xbc, 0xac },
1441 { 0x00, 0xad, 0xad },
1442 { 0x00, 0xae, 0xae },
1443 { 0x01, 0xbf, 0xaf },
1444 { 0x00, 0xb0, 0xb0 },
1445 { 0x00, 0xb1, 0xa1 },
1446 { 0x00, 0xb2, 0xb2 },
1447 { 0x00, 0xb3, 0xb3 },
1448 { 0x00, 0xb4, 0xb4 },
1449 { 0x00, 0xb5, 0xb5 },
1450 { 0x00, 0xb6, 0xa6 },
1451 { 0x00, 0xb7, 0xb7 },
1452 { 0x00, 0xb8, 0xb8 },
1453 { 0x00, 0xb9, 0x49 },
1454 { 0x00, 0xba, 0xaa },
1455 { 0x00, 0xbb, 0xab },
1456 { 0x00, 0xbc, 0xac },
1457 { 0x00, 0xbd, 0xbd },
1458 { 0x00, 0xbe, 0xbe },
1459 { 0x00, 0xbf, 0xaf },
1460 { 0x01, 0xe0, 0xc0 },
1461 { 0x01, 0xe1, 0xc1 },
1462 { 0x01, 0xe2, 0xc2 },
1463 { 0x00, 0xc3, 0xc3 },
1464 { 0x01, 0xe4, 0xc4 },
1465 { 0x01, 0xe5, 0xc5 },
1466 { 0x01, 0xe6, 0xc6 },
1467 { 0x01, 0xe7, 0xc7 },
1468 { 0x01, 0xe8, 0xc8 },
1469 { 0x01, 0xe9, 0xc9 },
1470 { 0x01, 0xea, 0xca },
1471 { 0x01, 0xeb, 0xcb },
1472 { 0x01, 0xec, 0xcc },
1473 { 0x01, 0xed, 0xcd },
1474 { 0x01, 0xee, 0xce },
1475 { 0x01, 0xef, 0xcf },
1476 { 0x00, 0xd0, 0xd0 },
1477 { 0x01, 0xf1, 0xd1 },
1478 { 0x01, 0xf2, 0xd2 },
1479 { 0x01, 0xf3, 0xd3 },
1480 { 0x01, 0xf4, 0xd4 },
1481 { 0x01, 0xf5, 0xd5 },
1482 { 0x01, 0xf6, 0xd6 },
1483 { 0x00, 0xd7, 0xd7 },
1484 { 0x01, 0xf8, 0xd8 },
1485 { 0x01, 0xf9, 0xd9 },
1486 { 0x01, 0xfa, 0xda },
1487 { 0x01, 0xfb, 0xdb },
1488 { 0x01, 0xfc, 0xdc },
1489 { 0x01, 0xfd, 0xdd },
1490 { 0x01, 0xfe, 0xde },
1491 { 0x00, 0xdf, 0xdf },
1492 { 0x00, 0xe0, 0xc0 },
1493 { 0x00, 0xe1, 0xc1 },
1494 { 0x00, 0xe2, 0xc2 },
1495 { 0x00, 0xe3, 0xe3 },
1496 { 0x00, 0xe4, 0xc4 },
1497 { 0x00, 0xe5, 0xc5 },
1498 { 0x00, 0xe6, 0xc6 },
1499 { 0x00, 0xe7, 0xc7 },
1500 { 0x00, 0xe8, 0xc8 },
1501 { 0x00, 0xe9, 0xc9 },
1502 { 0x00, 0xea, 0xca },
1503 { 0x00, 0xeb, 0xcb },
1504 { 0x00, 0xec, 0xcc },
1505 { 0x00, 0xed, 0xcd },
1506 { 0x00, 0xee, 0xce },
1507 { 0x00, 0xef, 0xcf },
1508 { 0x00, 0xf0, 0xf0 },
1509 { 0x00, 0xf1, 0xd1 },
1510 { 0x00, 0xf2, 0xd2 },
1511 { 0x00, 0xf3, 0xd3 },
1512 { 0x00, 0xf4, 0xd4 },
1513 { 0x00, 0xf5, 0xd5 },
1514 { 0x00, 0xf6, 0xd6 },
1515 { 0x00, 0xf7, 0xf7 },
1516 { 0x00, 0xf8, 0xd8 },
1517 { 0x00, 0xf9, 0xd9 },
1518 { 0x00, 0xfa, 0xda },
1519 { 0x00, 0xfb, 0xdb },
1520 { 0x00, 0xfc, 0xdc },
1521 { 0x00, 0xfd, 0xdd },
1522 { 0x00, 0xfe, 0xde },
1523 { 0x00, 0xff, 0xff }
1524 };
1525 
1526 static struct cs_info iso4_tbl[] = {
1527 { 0x00, 0x00, 0x00 },
1528 { 0x00, 0x01, 0x01 },
1529 { 0x00, 0x02, 0x02 },
1530 { 0x00, 0x03, 0x03 },
1531 { 0x00, 0x04, 0x04 },
1532 { 0x00, 0x05, 0x05 },
1533 { 0x00, 0x06, 0x06 },
1534 { 0x00, 0x07, 0x07 },
1535 { 0x00, 0x08, 0x08 },
1536 { 0x00, 0x09, 0x09 },
1537 { 0x00, 0x0a, 0x0a },
1538 { 0x00, 0x0b, 0x0b },
1539 { 0x00, 0x0c, 0x0c },
1540 { 0x00, 0x0d, 0x0d },
1541 { 0x00, 0x0e, 0x0e },
1542 { 0x00, 0x0f, 0x0f },
1543 { 0x00, 0x10, 0x10 },
1544 { 0x00, 0x11, 0x11 },
1545 { 0x00, 0x12, 0x12 },
1546 { 0x00, 0x13, 0x13 },
1547 { 0x00, 0x14, 0x14 },
1548 { 0x00, 0x15, 0x15 },
1549 { 0x00, 0x16, 0x16 },
1550 { 0x00, 0x17, 0x17 },
1551 { 0x00, 0x18, 0x18 },
1552 { 0x00, 0x19, 0x19 },
1553 { 0x00, 0x1a, 0x1a },
1554 { 0x00, 0x1b, 0x1b },
1555 { 0x00, 0x1c, 0x1c },
1556 { 0x00, 0x1d, 0x1d },
1557 { 0x00, 0x1e, 0x1e },
1558 { 0x00, 0x1f, 0x1f },
1559 { 0x00, 0x20, 0x20 },
1560 { 0x00, 0x21, 0x21 },
1561 { 0x00, 0x22, 0x22 },
1562 { 0x00, 0x23, 0x23 },
1563 { 0x00, 0x24, 0x24 },
1564 { 0x00, 0x25, 0x25 },
1565 { 0x00, 0x26, 0x26 },
1566 { 0x00, 0x27, 0x27 },
1567 { 0x00, 0x28, 0x28 },
1568 { 0x00, 0x29, 0x29 },
1569 { 0x00, 0x2a, 0x2a },
1570 { 0x00, 0x2b, 0x2b },
1571 { 0x00, 0x2c, 0x2c },
1572 { 0x00, 0x2d, 0x2d },
1573 { 0x00, 0x2e, 0x2e },
1574 { 0x00, 0x2f, 0x2f },
1575 { 0x00, 0x30, 0x30 },
1576 { 0x00, 0x31, 0x31 },
1577 { 0x00, 0x32, 0x32 },
1578 { 0x00, 0x33, 0x33 },
1579 { 0x00, 0x34, 0x34 },
1580 { 0x00, 0x35, 0x35 },
1581 { 0x00, 0x36, 0x36 },
1582 { 0x00, 0x37, 0x37 },
1583 { 0x00, 0x38, 0x38 },
1584 { 0x00, 0x39, 0x39 },
1585 { 0x00, 0x3a, 0x3a },
1586 { 0x00, 0x3b, 0x3b },
1587 { 0x00, 0x3c, 0x3c },
1588 { 0x00, 0x3d, 0x3d },
1589 { 0x00, 0x3e, 0x3e },
1590 { 0x00, 0x3f, 0x3f },
1591 { 0x00, 0x40, 0x40 },
1592 { 0x01, 0x61, 0x41 },
1593 { 0x01, 0x62, 0x42 },
1594 { 0x01, 0x63, 0x43 },
1595 { 0x01, 0x64, 0x44 },
1596 { 0x01, 0x65, 0x45 },
1597 { 0x01, 0x66, 0x46 },
1598 { 0x01, 0x67, 0x47 },
1599 { 0x01, 0x68, 0x48 },
1600 { 0x01, 0x69, 0x49 },
1601 { 0x01, 0x6a, 0x4a },
1602 { 0x01, 0x6b, 0x4b },
1603 { 0x01, 0x6c, 0x4c },
1604 { 0x01, 0x6d, 0x4d },
1605 { 0x01, 0x6e, 0x4e },
1606 { 0x01, 0x6f, 0x4f },
1607 { 0x01, 0x70, 0x50 },
1608 { 0x01, 0x71, 0x51 },
1609 { 0x01, 0x72, 0x52 },
1610 { 0x01, 0x73, 0x53 },
1611 { 0x01, 0x74, 0x54 },
1612 { 0x01, 0x75, 0x55 },
1613 { 0x01, 0x76, 0x56 },
1614 { 0x01, 0x77, 0x57 },
1615 { 0x01, 0x78, 0x58 },
1616 { 0x01, 0x79, 0x59 },
1617 { 0x01, 0x7a, 0x5a },
1618 { 0x00, 0x5b, 0x5b },
1619 { 0x00, 0x5c, 0x5c },
1620 { 0x00, 0x5d, 0x5d },
1621 { 0x00, 0x5e, 0x5e },
1622 { 0x00, 0x5f, 0x5f },
1623 { 0x00, 0x60, 0x60 },
1624 { 0x00, 0x61, 0x41 },
1625 { 0x00, 0x62, 0x42 },
1626 { 0x00, 0x63, 0x43 },
1627 { 0x00, 0x64, 0x44 },
1628 { 0x00, 0x65, 0x45 },
1629 { 0x00, 0x66, 0x46 },
1630 { 0x00, 0x67, 0x47 },
1631 { 0x00, 0x68, 0x48 },
1632 { 0x00, 0x69, 0x49 },
1633 { 0x00, 0x6a, 0x4a },
1634 { 0x00, 0x6b, 0x4b },
1635 { 0x00, 0x6c, 0x4c },
1636 { 0x00, 0x6d, 0x4d },
1637 { 0x00, 0x6e, 0x4e },
1638 { 0x00, 0x6f, 0x4f },
1639 { 0x00, 0x70, 0x50 },
1640 { 0x00, 0x71, 0x51 },
1641 { 0x00, 0x72, 0x52 },
1642 { 0x00, 0x73, 0x53 },
1643 { 0x00, 0x74, 0x54 },
1644 { 0x00, 0x75, 0x55 },
1645 { 0x00, 0x76, 0x56 },
1646 { 0x00, 0x77, 0x57 },
1647 { 0x00, 0x78, 0x58 },
1648 { 0x00, 0x79, 0x59 },
1649 { 0x00, 0x7a, 0x5a },
1650 { 0x00, 0x7b, 0x7b },
1651 { 0x00, 0x7c, 0x7c },
1652 { 0x00, 0x7d, 0x7d },
1653 { 0x00, 0x7e, 0x7e },
1654 { 0x00, 0x7f, 0x7f },
1655 { 0x00, 0x80, 0x80 },
1656 { 0x00, 0x81, 0x81 },
1657 { 0x00, 0x82, 0x82 },
1658 { 0x00, 0x83, 0x83 },
1659 { 0x00, 0x84, 0x84 },
1660 { 0x00, 0x85, 0x85 },
1661 { 0x00, 0x86, 0x86 },
1662 { 0x00, 0x87, 0x87 },
1663 { 0x00, 0x88, 0x88 },
1664 { 0x00, 0x89, 0x89 },
1665 { 0x00, 0x8a, 0x8a },
1666 { 0x00, 0x8b, 0x8b },
1667 { 0x00, 0x8c, 0x8c },
1668 { 0x00, 0x8d, 0x8d },
1669 { 0x00, 0x8e, 0x8e },
1670 { 0x00, 0x8f, 0x8f },
1671 { 0x00, 0x90, 0x90 },
1672 { 0x00, 0x91, 0x91 },
1673 { 0x00, 0x92, 0x92 },
1674 { 0x00, 0x93, 0x93 },
1675 { 0x00, 0x94, 0x94 },
1676 { 0x00, 0x95, 0x95 },
1677 { 0x00, 0x96, 0x96 },
1678 { 0x00, 0x97, 0x97 },
1679 { 0x00, 0x98, 0x98 },
1680 { 0x00, 0x99, 0x99 },
1681 { 0x00, 0x9a, 0x9a },
1682 { 0x00, 0x9b, 0x9b },
1683 { 0x00, 0x9c, 0x9c },
1684 { 0x00, 0x9d, 0x9d },
1685 { 0x00, 0x9e, 0x9e },
1686 { 0x00, 0x9f, 0x9f },
1687 { 0x00, 0xa0, 0xa0 },
1688 { 0x01, 0xb1, 0xa1 },
1689 { 0x00, 0xa2, 0xa2 },
1690 { 0x01, 0xb3, 0xa3 },
1691 { 0x00, 0xa4, 0xa4 },
1692 { 0x01, 0xb5, 0xa5 },
1693 { 0x01, 0xb6, 0xa6 },
1694 { 0x00, 0xa7, 0xa7 },
1695 { 0x00, 0xa8, 0xa8 },
1696 { 0x01, 0xb9, 0xa9 },
1697 { 0x01, 0xba, 0xaa },
1698 { 0x01, 0xbb, 0xab },
1699 { 0x01, 0xbc, 0xac },
1700 { 0x00, 0xad, 0xad },
1701 { 0x01, 0xbe, 0xae },
1702 { 0x00, 0xaf, 0xaf },
1703 { 0x00, 0xb0, 0xb0 },
1704 { 0x00, 0xb1, 0xa1 },
1705 { 0x00, 0xb2, 0xb2 },
1706 { 0x00, 0xb3, 0xa3 },
1707 { 0x00, 0xb4, 0xb4 },
1708 { 0x00, 0xb5, 0xa5 },
1709 { 0x00, 0xb6, 0xa6 },
1710 { 0x00, 0xb7, 0xb7 },
1711 { 0x00, 0xb8, 0xb8 },
1712 { 0x00, 0xb9, 0xa9 },
1713 { 0x00, 0xba, 0xaa },
1714 { 0x00, 0xbb, 0xab },
1715 { 0x00, 0xbc, 0xac },
1716 { 0x00, 0xbd, 0xbd },
1717 { 0x00, 0xbe, 0xae },
1718 { 0x00, 0xbf, 0xbf },
1719 { 0x01, 0xe0, 0xc0 },
1720 { 0x01, 0xe1, 0xc1 },
1721 { 0x01, 0xe2, 0xc2 },
1722 { 0x01, 0xe3, 0xc3 },
1723 { 0x01, 0xe4, 0xc4 },
1724 { 0x01, 0xe5, 0xc5 },
1725 { 0x01, 0xe6, 0xc6 },
1726 { 0x01, 0xe7, 0xc7 },
1727 { 0x01, 0xe8, 0xc8 },
1728 { 0x01, 0xe9, 0xc9 },
1729 { 0x01, 0xea, 0xca },
1730 { 0x01, 0xeb, 0xcb },
1731 { 0x01, 0xec, 0xcc },
1732 { 0x01, 0xed, 0xcd },
1733 { 0x01, 0xee, 0xce },
1734 { 0x01, 0xef, 0xcf },
1735 { 0x01, 0xf0, 0xd0 },
1736 { 0x01, 0xf1, 0xd1 },
1737 { 0x01, 0xf2, 0xd2 },
1738 { 0x01, 0xf3, 0xd3 },
1739 { 0x01, 0xf4, 0xd4 },
1740 { 0x01, 0xf5, 0xd5 },
1741 { 0x01, 0xf6, 0xd6 },
1742 { 0x00, 0xd7, 0xd7 },
1743 { 0x01, 0xf8, 0xd8 },
1744 { 0x01, 0xf9, 0xd9 },
1745 { 0x01, 0xfa, 0xda },
1746 { 0x01, 0xfb, 0xdb },
1747 { 0x01, 0xfc, 0xdc },
1748 { 0x01, 0xfd, 0xdd },
1749 { 0x01, 0xfe, 0xde },
1750 { 0x00, 0xdf, 0xdf },
1751 { 0x00, 0xe0, 0xc0 },
1752 { 0x00, 0xe1, 0xc1 },
1753 { 0x00, 0xe2, 0xc2 },
1754 { 0x00, 0xe3, 0xc3 },
1755 { 0x00, 0xe4, 0xc4 },
1756 { 0x00, 0xe5, 0xc5 },
1757 { 0x00, 0xe6, 0xc6 },
1758 { 0x00, 0xe7, 0xc7 },
1759 { 0x00, 0xe8, 0xc8 },
1760 { 0x00, 0xe9, 0xc9 },
1761 { 0x00, 0xea, 0xca },
1762 { 0x00, 0xeb, 0xcb },
1763 { 0x00, 0xec, 0xcc },
1764 { 0x00, 0xed, 0xcd },
1765 { 0x00, 0xee, 0xce },
1766 { 0x00, 0xef, 0xcf },
1767 { 0x00, 0xf0, 0xd0 },
1768 { 0x00, 0xf1, 0xd1 },
1769 { 0x00, 0xf2, 0xd2 },
1770 { 0x00, 0xf3, 0xd3 },
1771 { 0x00, 0xf4, 0xd4 },
1772 { 0x00, 0xf5, 0xd5 },
1773 { 0x00, 0xf6, 0xd6 },
1774 { 0x00, 0xf7, 0xf7 },
1775 { 0x00, 0xf8, 0xd8 },
1776 { 0x00, 0xf9, 0xd9 },
1777 { 0x00, 0xfa, 0xda },
1778 { 0x00, 0xfb, 0xdb },
1779 { 0x00, 0xfc, 0xdc },
1780 { 0x00, 0xfd, 0xdd },
1781 { 0x00, 0xfe, 0xde },
1782 { 0x00, 0xff, 0xff }
1783 };
1784 
1785 static struct cs_info iso5_tbl[] = {
1786 { 0x00, 0x00, 0x00 },
1787 { 0x00, 0x01, 0x01 },
1788 { 0x00, 0x02, 0x02 },
1789 { 0x00, 0x03, 0x03 },
1790 { 0x00, 0x04, 0x04 },
1791 { 0x00, 0x05, 0x05 },
1792 { 0x00, 0x06, 0x06 },
1793 { 0x00, 0x07, 0x07 },
1794 { 0x00, 0x08, 0x08 },
1795 { 0x00, 0x09, 0x09 },
1796 { 0x00, 0x0a, 0x0a },
1797 { 0x00, 0x0b, 0x0b },
1798 { 0x00, 0x0c, 0x0c },
1799 { 0x00, 0x0d, 0x0d },
1800 { 0x00, 0x0e, 0x0e },
1801 { 0x00, 0x0f, 0x0f },
1802 { 0x00, 0x10, 0x10 },
1803 { 0x00, 0x11, 0x11 },
1804 { 0x00, 0x12, 0x12 },
1805 { 0x00, 0x13, 0x13 },
1806 { 0x00, 0x14, 0x14 },
1807 { 0x00, 0x15, 0x15 },
1808 { 0x00, 0x16, 0x16 },
1809 { 0x00, 0x17, 0x17 },
1810 { 0x00, 0x18, 0x18 },
1811 { 0x00, 0x19, 0x19 },
1812 { 0x00, 0x1a, 0x1a },
1813 { 0x00, 0x1b, 0x1b },
1814 { 0x00, 0x1c, 0x1c },
1815 { 0x00, 0x1d, 0x1d },
1816 { 0x00, 0x1e, 0x1e },
1817 { 0x00, 0x1f, 0x1f },
1818 { 0x00, 0x20, 0x20 },
1819 { 0x00, 0x21, 0x21 },
1820 { 0x00, 0x22, 0x22 },
1821 { 0x00, 0x23, 0x23 },
1822 { 0x00, 0x24, 0x24 },
1823 { 0x00, 0x25, 0x25 },
1824 { 0x00, 0x26, 0x26 },
1825 { 0x00, 0x27, 0x27 },
1826 { 0x00, 0x28, 0x28 },
1827 { 0x00, 0x29, 0x29 },
1828 { 0x00, 0x2a, 0x2a },
1829 { 0x00, 0x2b, 0x2b },
1830 { 0x00, 0x2c, 0x2c },
1831 { 0x00, 0x2d, 0x2d },
1832 { 0x00, 0x2e, 0x2e },
1833 { 0x00, 0x2f, 0x2f },
1834 { 0x00, 0x30, 0x30 },
1835 { 0x00, 0x31, 0x31 },
1836 { 0x00, 0x32, 0x32 },
1837 { 0x00, 0x33, 0x33 },
1838 { 0x00, 0x34, 0x34 },
1839 { 0x00, 0x35, 0x35 },
1840 { 0x00, 0x36, 0x36 },
1841 { 0x00, 0x37, 0x37 },
1842 { 0x00, 0x38, 0x38 },
1843 { 0x00, 0x39, 0x39 },
1844 { 0x00, 0x3a, 0x3a },
1845 { 0x00, 0x3b, 0x3b },
1846 { 0x00, 0x3c, 0x3c },
1847 { 0x00, 0x3d, 0x3d },
1848 { 0x00, 0x3e, 0x3e },
1849 { 0x00, 0x3f, 0x3f },
1850 { 0x00, 0x40, 0x40 },
1851 { 0x01, 0x61, 0x41 },
1852 { 0x01, 0x62, 0x42 },
1853 { 0x01, 0x63, 0x43 },
1854 { 0x01, 0x64, 0x44 },
1855 { 0x01, 0x65, 0x45 },
1856 { 0x01, 0x66, 0x46 },
1857 { 0x01, 0x67, 0x47 },
1858 { 0x01, 0x68, 0x48 },
1859 { 0x01, 0x69, 0x49 },
1860 { 0x01, 0x6a, 0x4a },
1861 { 0x01, 0x6b, 0x4b },
1862 { 0x01, 0x6c, 0x4c },
1863 { 0x01, 0x6d, 0x4d },
1864 { 0x01, 0x6e, 0x4e },
1865 { 0x01, 0x6f, 0x4f },
1866 { 0x01, 0x70, 0x50 },
1867 { 0x01, 0x71, 0x51 },
1868 { 0x01, 0x72, 0x52 },
1869 { 0x01, 0x73, 0x53 },
1870 { 0x01, 0x74, 0x54 },
1871 { 0x01, 0x75, 0x55 },
1872 { 0x01, 0x76, 0x56 },
1873 { 0x01, 0x77, 0x57 },
1874 { 0x01, 0x78, 0x58 },
1875 { 0x01, 0x79, 0x59 },
1876 { 0x01, 0x7a, 0x5a },
1877 { 0x00, 0x5b, 0x5b },
1878 { 0x00, 0x5c, 0x5c },
1879 { 0x00, 0x5d, 0x5d },
1880 { 0x00, 0x5e, 0x5e },
1881 { 0x00, 0x5f, 0x5f },
1882 { 0x00, 0x60, 0x60 },
1883 { 0x00, 0x61, 0x41 },
1884 { 0x00, 0x62, 0x42 },
1885 { 0x00, 0x63, 0x43 },
1886 { 0x00, 0x64, 0x44 },
1887 { 0x00, 0x65, 0x45 },
1888 { 0x00, 0x66, 0x46 },
1889 { 0x00, 0x67, 0x47 },
1890 { 0x00, 0x68, 0x48 },
1891 { 0x00, 0x69, 0x49 },
1892 { 0x00, 0x6a, 0x4a },
1893 { 0x00, 0x6b, 0x4b },
1894 { 0x00, 0x6c, 0x4c },
1895 { 0x00, 0x6d, 0x4d },
1896 { 0x00, 0x6e, 0x4e },
1897 { 0x00, 0x6f, 0x4f },
1898 { 0x00, 0x70, 0x50 },
1899 { 0x00, 0x71, 0x51 },
1900 { 0x00, 0x72, 0x52 },
1901 { 0x00, 0x73, 0x53 },
1902 { 0x00, 0x74, 0x54 },
1903 { 0x00, 0x75, 0x55 },
1904 { 0x00, 0x76, 0x56 },
1905 { 0x00, 0x77, 0x57 },
1906 { 0x00, 0x78, 0x58 },
1907 { 0x00, 0x79, 0x59 },
1908 { 0x00, 0x7a, 0x5a },
1909 { 0x00, 0x7b, 0x7b },
1910 { 0x00, 0x7c, 0x7c },
1911 { 0x00, 0x7d, 0x7d },
1912 { 0x00, 0x7e, 0x7e },
1913 { 0x00, 0x7f, 0x7f },
1914 { 0x00, 0x80, 0x80 },
1915 { 0x00, 0x81, 0x81 },
1916 { 0x00, 0x82, 0x82 },
1917 { 0x00, 0x83, 0x83 },
1918 { 0x00, 0x84, 0x84 },
1919 { 0x00, 0x85, 0x85 },
1920 { 0x00, 0x86, 0x86 },
1921 { 0x00, 0x87, 0x87 },
1922 { 0x00, 0x88, 0x88 },
1923 { 0x00, 0x89, 0x89 },
1924 { 0x00, 0x8a, 0x8a },
1925 { 0x00, 0x8b, 0x8b },
1926 { 0x00, 0x8c, 0x8c },
1927 { 0x00, 0x8d, 0x8d },
1928 { 0x00, 0x8e, 0x8e },
1929 { 0x00, 0x8f, 0x8f },
1930 { 0x00, 0x90, 0x90 },
1931 { 0x00, 0x91, 0x91 },
1932 { 0x00, 0x92, 0x92 },
1933 { 0x00, 0x93, 0x93 },
1934 { 0x00, 0x94, 0x94 },
1935 { 0x00, 0x95, 0x95 },
1936 { 0x00, 0x96, 0x96 },
1937 { 0x00, 0x97, 0x97 },
1938 { 0x00, 0x98, 0x98 },
1939 { 0x00, 0x99, 0x99 },
1940 { 0x00, 0x9a, 0x9a },
1941 { 0x00, 0x9b, 0x9b },
1942 { 0x00, 0x9c, 0x9c },
1943 { 0x00, 0x9d, 0x9d },
1944 { 0x00, 0x9e, 0x9e },
1945 { 0x00, 0x9f, 0x9f },
1946 { 0x00, 0xa0, 0xa0 },
1947 { 0x01, 0xf1, 0xa1 },
1948 { 0x01, 0xf2, 0xa2 },
1949 { 0x01, 0xf3, 0xa3 },
1950 { 0x01, 0xf4, 0xa4 },
1951 { 0x01, 0xf5, 0xa5 },
1952 { 0x01, 0xf6, 0xa6 },
1953 { 0x01, 0xf7, 0xa7 },
1954 { 0x01, 0xf8, 0xa8 },
1955 { 0x01, 0xf9, 0xa9 },
1956 { 0x01, 0xfa, 0xaa },
1957 { 0x01, 0xfb, 0xab },
1958 { 0x01, 0xfc, 0xac },
1959 { 0x00, 0xad, 0xad },
1960 { 0x01, 0xfe, 0xae },
1961 { 0x01, 0xff, 0xaf },
1962 { 0x01, 0xd0, 0xb0 },
1963 { 0x01, 0xd1, 0xb1 },
1964 { 0x01, 0xd2, 0xb2 },
1965 { 0x01, 0xd3, 0xb3 },
1966 { 0x01, 0xd4, 0xb4 },
1967 { 0x01, 0xd5, 0xb5 },
1968 { 0x01, 0xd6, 0xb6 },
1969 { 0x01, 0xd7, 0xb7 },
1970 { 0x01, 0xd8, 0xb8 },
1971 { 0x01, 0xd9, 0xb9 },
1972 { 0x01, 0xda, 0xba },
1973 { 0x01, 0xdb, 0xbb },
1974 { 0x01, 0xdc, 0xbc },
1975 { 0x01, 0xdd, 0xbd },
1976 { 0x01, 0xde, 0xbe },
1977 { 0x01, 0xdf, 0xbf },
1978 { 0x01, 0xe0, 0xc0 },
1979 { 0x01, 0xe1, 0xc1 },
1980 { 0x01, 0xe2, 0xc2 },
1981 { 0x01, 0xe3, 0xc3 },
1982 { 0x01, 0xe4, 0xc4 },
1983 { 0x01, 0xe5, 0xc5 },
1984 { 0x01, 0xe6, 0xc6 },
1985 { 0x01, 0xe7, 0xc7 },
1986 { 0x01, 0xe8, 0xc8 },
1987 { 0x01, 0xe9, 0xc9 },
1988 { 0x01, 0xea, 0xca },
1989 { 0x01, 0xeb, 0xcb },
1990 { 0x01, 0xec, 0xcc },
1991 { 0x01, 0xed, 0xcd },
1992 { 0x01, 0xee, 0xce },
1993 { 0x01, 0xef, 0xcf },
1994 { 0x00, 0xd0, 0xb0 },
1995 { 0x00, 0xd1, 0xb1 },
1996 { 0x00, 0xd2, 0xb2 },
1997 { 0x00, 0xd3, 0xb3 },
1998 { 0x00, 0xd4, 0xb4 },
1999 { 0x00, 0xd5, 0xb5 },
2000 { 0x00, 0xd6, 0xb6 },
2001 { 0x00, 0xd7, 0xb7 },
2002 { 0x00, 0xd8, 0xb8 },
2003 { 0x00, 0xd9, 0xb9 },
2004 { 0x00, 0xda, 0xba },
2005 { 0x00, 0xdb, 0xbb },
2006 { 0x00, 0xdc, 0xbc },
2007 { 0x00, 0xdd, 0xbd },
2008 { 0x00, 0xde, 0xbe },
2009 { 0x00, 0xdf, 0xbf },
2010 { 0x00, 0xe0, 0xc0 },
2011 { 0x00, 0xe1, 0xc1 },
2012 { 0x00, 0xe2, 0xc2 },
2013 { 0x00, 0xe3, 0xc3 },
2014 { 0x00, 0xe4, 0xc4 },
2015 { 0x00, 0xe5, 0xc5 },
2016 { 0x00, 0xe6, 0xc6 },
2017 { 0x00, 0xe7, 0xc7 },
2018 { 0x00, 0xe8, 0xc8 },
2019 { 0x00, 0xe9, 0xc9 },
2020 { 0x00, 0xea, 0xca },
2021 { 0x00, 0xeb, 0xcb },
2022 { 0x00, 0xec, 0xcc },
2023 { 0x00, 0xed, 0xcd },
2024 { 0x00, 0xee, 0xce },
2025 { 0x00, 0xef, 0xcf },
2026 { 0x00, 0xf0, 0xf0 },
2027 { 0x00, 0xf1, 0xa1 },
2028 { 0x00, 0xf2, 0xa2 },
2029 { 0x00, 0xf3, 0xa3 },
2030 { 0x00, 0xf4, 0xa4 },
2031 { 0x00, 0xf5, 0xa5 },
2032 { 0x00, 0xf6, 0xa6 },
2033 { 0x00, 0xf7, 0xa7 },
2034 { 0x00, 0xf8, 0xa8 },
2035 { 0x00, 0xf9, 0xa9 },
2036 { 0x00, 0xfa, 0xaa },
2037 { 0x00, 0xfb, 0xab },
2038 { 0x00, 0xfc, 0xac },
2039 { 0x00, 0xfd, 0xfd },
2040 { 0x00, 0xfe, 0xae },
2041 { 0x00, 0xff, 0xaf }
2042 };
2043 
2044 static struct cs_info iso6_tbl[] = {
2045 { 0x00, 0x00, 0x00 },
2046 { 0x00, 0x01, 0x01 },
2047 { 0x00, 0x02, 0x02 },
2048 { 0x00, 0x03, 0x03 },
2049 { 0x00, 0x04, 0x04 },
2050 { 0x00, 0x05, 0x05 },
2051 { 0x00, 0x06, 0x06 },
2052 { 0x00, 0x07, 0x07 },
2053 { 0x00, 0x08, 0x08 },
2054 { 0x00, 0x09, 0x09 },
2055 { 0x00, 0x0a, 0x0a },
2056 { 0x00, 0x0b, 0x0b },
2057 { 0x00, 0x0c, 0x0c },
2058 { 0x00, 0x0d, 0x0d },
2059 { 0x00, 0x0e, 0x0e },
2060 { 0x00, 0x0f, 0x0f },
2061 { 0x00, 0x10, 0x10 },
2062 { 0x00, 0x11, 0x11 },
2063 { 0x00, 0x12, 0x12 },
2064 { 0x00, 0x13, 0x13 },
2065 { 0x00, 0x14, 0x14 },
2066 { 0x00, 0x15, 0x15 },
2067 { 0x00, 0x16, 0x16 },
2068 { 0x00, 0x17, 0x17 },
2069 { 0x00, 0x18, 0x18 },
2070 { 0x00, 0x19, 0x19 },
2071 { 0x00, 0x1a, 0x1a },
2072 { 0x00, 0x1b, 0x1b },
2073 { 0x00, 0x1c, 0x1c },
2074 { 0x00, 0x1d, 0x1d },
2075 { 0x00, 0x1e, 0x1e },
2076 { 0x00, 0x1f, 0x1f },
2077 { 0x00, 0x20, 0x20 },
2078 { 0x00, 0x21, 0x21 },
2079 { 0x00, 0x22, 0x22 },
2080 { 0x00, 0x23, 0x23 },
2081 { 0x00, 0x24, 0x24 },
2082 { 0x00, 0x25, 0x25 },
2083 { 0x00, 0x26, 0x26 },
2084 { 0x00, 0x27, 0x27 },
2085 { 0x00, 0x28, 0x28 },
2086 { 0x00, 0x29, 0x29 },
2087 { 0x00, 0x2a, 0x2a },
2088 { 0x00, 0x2b, 0x2b },
2089 { 0x00, 0x2c, 0x2c },
2090 { 0x00, 0x2d, 0x2d },
2091 { 0x00, 0x2e, 0x2e },
2092 { 0x00, 0x2f, 0x2f },
2093 { 0x00, 0x30, 0x30 },
2094 { 0x00, 0x31, 0x31 },
2095 { 0x00, 0x32, 0x32 },
2096 { 0x00, 0x33, 0x33 },
2097 { 0x00, 0x34, 0x34 },
2098 { 0x00, 0x35, 0x35 },
2099 { 0x00, 0x36, 0x36 },
2100 { 0x00, 0x37, 0x37 },
2101 { 0x00, 0x38, 0x38 },
2102 { 0x00, 0x39, 0x39 },
2103 { 0x00, 0x3a, 0x3a },
2104 { 0x00, 0x3b, 0x3b },
2105 { 0x00, 0x3c, 0x3c },
2106 { 0x00, 0x3d, 0x3d },
2107 { 0x00, 0x3e, 0x3e },
2108 { 0x00, 0x3f, 0x3f },
2109 { 0x00, 0x40, 0x40 },
2110 { 0x01, 0x61, 0x41 },
2111 { 0x01, 0x62, 0x42 },
2112 { 0x01, 0x63, 0x43 },
2113 { 0x01, 0x64, 0x44 },
2114 { 0x01, 0x65, 0x45 },
2115 { 0x01, 0x66, 0x46 },
2116 { 0x01, 0x67, 0x47 },
2117 { 0x01, 0x68, 0x48 },
2118 { 0x01, 0x69, 0x49 },
2119 { 0x01, 0x6a, 0x4a },
2120 { 0x01, 0x6b, 0x4b },
2121 { 0x01, 0x6c, 0x4c },
2122 { 0x01, 0x6d, 0x4d },
2123 { 0x01, 0x6e, 0x4e },
2124 { 0x01, 0x6f, 0x4f },
2125 { 0x01, 0x70, 0x50 },
2126 { 0x01, 0x71, 0x51 },
2127 { 0x01, 0x72, 0x52 },
2128 { 0x01, 0x73, 0x53 },
2129 { 0x01, 0x74, 0x54 },
2130 { 0x01, 0x75, 0x55 },
2131 { 0x01, 0x76, 0x56 },
2132 { 0x01, 0x77, 0x57 },
2133 { 0x01, 0x78, 0x58 },
2134 { 0x01, 0x79, 0x59 },
2135 { 0x01, 0x7a, 0x5a },
2136 { 0x00, 0x5b, 0x5b },
2137 { 0x00, 0x5c, 0x5c },
2138 { 0x00, 0x5d, 0x5d },
2139 { 0x00, 0x5e, 0x5e },
2140 { 0x00, 0x5f, 0x5f },
2141 { 0x00, 0x60, 0x60 },
2142 { 0x00, 0x61, 0x41 },
2143 { 0x00, 0x62, 0x42 },
2144 { 0x00, 0x63, 0x43 },
2145 { 0x00, 0x64, 0x44 },
2146 { 0x00, 0x65, 0x45 },
2147 { 0x00, 0x66, 0x46 },
2148 { 0x00, 0x67, 0x47 },
2149 { 0x00, 0x68, 0x48 },
2150 { 0x00, 0x69, 0x49 },
2151 { 0x00, 0x6a, 0x4a },
2152 { 0x00, 0x6b, 0x4b },
2153 { 0x00, 0x6c, 0x4c },
2154 { 0x00, 0x6d, 0x4d },
2155 { 0x00, 0x6e, 0x4e },
2156 { 0x00, 0x6f, 0x4f },
2157 { 0x00, 0x70, 0x50 },
2158 { 0x00, 0x71, 0x51 },
2159 { 0x00, 0x72, 0x52 },
2160 { 0x00, 0x73, 0x53 },
2161 { 0x00, 0x74, 0x54 },
2162 { 0x00, 0x75, 0x55 },
2163 { 0x00, 0x76, 0x56 },
2164 { 0x00, 0x77, 0x57 },
2165 { 0x00, 0x78, 0x58 },
2166 { 0x00, 0x79, 0x59 },
2167 { 0x00, 0x7a, 0x5a },
2168 { 0x00, 0x7b, 0x7b },
2169 { 0x00, 0x7c, 0x7c },
2170 { 0x00, 0x7d, 0x7d },
2171 { 0x00, 0x7e, 0x7e },
2172 { 0x00, 0x7f, 0x7f },
2173 { 0x00, 0x80, 0x80 },
2174 { 0x00, 0x81, 0x81 },
2175 { 0x00, 0x82, 0x82 },
2176 { 0x00, 0x83, 0x83 },
2177 { 0x00, 0x84, 0x84 },
2178 { 0x00, 0x85, 0x85 },
2179 { 0x00, 0x86, 0x86 },
2180 { 0x00, 0x87, 0x87 },
2181 { 0x00, 0x88, 0x88 },
2182 { 0x00, 0x89, 0x89 },
2183 { 0x00, 0x8a, 0x8a },
2184 { 0x00, 0x8b, 0x8b },
2185 { 0x00, 0x8c, 0x8c },
2186 { 0x00, 0x8d, 0x8d },
2187 { 0x00, 0x8e, 0x8e },
2188 { 0x00, 0x8f, 0x8f },
2189 { 0x00, 0x90, 0x90 },
2190 { 0x00, 0x91, 0x91 },
2191 { 0x00, 0x92, 0x92 },
2192 { 0x00, 0x93, 0x93 },
2193 { 0x00, 0x94, 0x94 },
2194 { 0x00, 0x95, 0x95 },
2195 { 0x00, 0x96, 0x96 },
2196 { 0x00, 0x97, 0x97 },
2197 { 0x00, 0x98, 0x98 },
2198 { 0x00, 0x99, 0x99 },
2199 { 0x00, 0x9a, 0x9a },
2200 { 0x00, 0x9b, 0x9b },
2201 { 0x00, 0x9c, 0x9c },
2202 { 0x00, 0x9d, 0x9d },
2203 { 0x00, 0x9e, 0x9e },
2204 { 0x00, 0x9f, 0x9f },
2205 { 0x00, 0xa0, 0xa0 },
2206 { 0x00, 0xa1, 0xa1 },
2207 { 0x00, 0xa2, 0xa2 },
2208 { 0x00, 0xa3, 0xa3 },
2209 { 0x00, 0xa4, 0xa4 },
2210 { 0x00, 0xa5, 0xa5 },
2211 { 0x00, 0xa6, 0xa6 },
2212 { 0x00, 0xa7, 0xa7 },
2213 { 0x00, 0xa8, 0xa8 },
2214 { 0x00, 0xa9, 0xa9 },
2215 { 0x00, 0xaa, 0xaa },
2216 { 0x00, 0xab, 0xab },
2217 { 0x00, 0xac, 0xac },
2218 { 0x00, 0xad, 0xad },
2219 { 0x00, 0xae, 0xae },
2220 { 0x00, 0xaf, 0xaf },
2221 { 0x00, 0xb0, 0xb0 },
2222 { 0x00, 0xb1, 0xb1 },
2223 { 0x00, 0xb2, 0xb2 },
2224 { 0x00, 0xb3, 0xb3 },
2225 { 0x00, 0xb4, 0xb4 },
2226 { 0x00, 0xb5, 0xb5 },
2227 { 0x00, 0xb6, 0xb6 },
2228 { 0x00, 0xb7, 0xb7 },
2229 { 0x00, 0xb8, 0xb8 },
2230 { 0x00, 0xb9, 0xb9 },
2231 { 0x00, 0xba, 0xba },
2232 { 0x00, 0xbb, 0xbb },
2233 { 0x00, 0xbc, 0xbc },
2234 { 0x00, 0xbd, 0xbd },
2235 { 0x00, 0xbe, 0xbe },
2236 { 0x00, 0xbf, 0xbf },
2237 { 0x00, 0xc0, 0xc0 },
2238 { 0x00, 0xc1, 0xc1 },
2239 { 0x00, 0xc2, 0xc2 },
2240 { 0x00, 0xc3, 0xc3 },
2241 { 0x00, 0xc4, 0xc4 },
2242 { 0x00, 0xc5, 0xc5 },
2243 { 0x00, 0xc6, 0xc6 },
2244 { 0x00, 0xc7, 0xc7 },
2245 { 0x00, 0xc8, 0xc8 },
2246 { 0x00, 0xc9, 0xc9 },
2247 { 0x00, 0xca, 0xca },
2248 { 0x00, 0xcb, 0xcb },
2249 { 0x00, 0xcc, 0xcc },
2250 { 0x00, 0xcd, 0xcd },
2251 { 0x00, 0xce, 0xce },
2252 { 0x00, 0xcf, 0xcf },
2253 { 0x00, 0xd0, 0xd0 },
2254 { 0x00, 0xd1, 0xd1 },
2255 { 0x00, 0xd2, 0xd2 },
2256 { 0x00, 0xd3, 0xd3 },
2257 { 0x00, 0xd4, 0xd4 },
2258 { 0x00, 0xd5, 0xd5 },
2259 { 0x00, 0xd6, 0xd6 },
2260 { 0x00, 0xd7, 0xd7 },
2261 { 0x00, 0xd8, 0xd8 },
2262 { 0x00, 0xd9, 0xd9 },
2263 { 0x00, 0xda, 0xda },
2264 { 0x00, 0xdb, 0xdb },
2265 { 0x00, 0xdc, 0xdc },
2266 { 0x00, 0xdd, 0xdd },
2267 { 0x00, 0xde, 0xde },
2268 { 0x00, 0xdf, 0xdf },
2269 { 0x00, 0xe0, 0xe0 },
2270 { 0x00, 0xe1, 0xe1 },
2271 { 0x00, 0xe2, 0xe2 },
2272 { 0x00, 0xe3, 0xe3 },
2273 { 0x00, 0xe4, 0xe4 },
2274 { 0x00, 0xe5, 0xe5 },
2275 { 0x00, 0xe6, 0xe6 },
2276 { 0x00, 0xe7, 0xe7 },
2277 { 0x00, 0xe8, 0xe8 },
2278 { 0x00, 0xe9, 0xe9 },
2279 { 0x00, 0xea, 0xea },
2280 { 0x00, 0xeb, 0xeb },
2281 { 0x00, 0xec, 0xec },
2282 { 0x00, 0xed, 0xed },
2283 { 0x00, 0xee, 0xee },
2284 { 0x00, 0xef, 0xef },
2285 { 0x00, 0xf0, 0xf0 },
2286 { 0x00, 0xf1, 0xf1 },
2287 { 0x00, 0xf2, 0xf2 },
2288 { 0x00, 0xf3, 0xf3 },
2289 { 0x00, 0xf4, 0xf4 },
2290 { 0x00, 0xf5, 0xf5 },
2291 { 0x00, 0xf6, 0xf6 },
2292 { 0x00, 0xf7, 0xf7 },
2293 { 0x00, 0xf8, 0xf8 },
2294 { 0x00, 0xf9, 0xf9 },
2295 { 0x00, 0xfa, 0xfa },
2296 { 0x00, 0xfb, 0xfb },
2297 { 0x00, 0xfc, 0xfc },
2298 { 0x00, 0xfd, 0xfd },
2299 { 0x00, 0xfe, 0xfe },
2300 { 0x00, 0xff, 0xff }
2301 };
2302 
2303 static struct cs_info iso7_tbl[] = {
2304 { 0x00, 0x00, 0x00 },
2305 { 0x00, 0x01, 0x01 },
2306 { 0x00, 0x02, 0x02 },
2307 { 0x00, 0x03, 0x03 },
2308 { 0x00, 0x04, 0x04 },
2309 { 0x00, 0x05, 0x05 },
2310 { 0x00, 0x06, 0x06 },
2311 { 0x00, 0x07, 0x07 },
2312 { 0x00, 0x08, 0x08 },
2313 { 0x00, 0x09, 0x09 },
2314 { 0x00, 0x0a, 0x0a },
2315 { 0x00, 0x0b, 0x0b },
2316 { 0x00, 0x0c, 0x0c },
2317 { 0x00, 0x0d, 0x0d },
2318 { 0x00, 0x0e, 0x0e },
2319 { 0x00, 0x0f, 0x0f },
2320 { 0x00, 0x10, 0x10 },
2321 { 0x00, 0x11, 0x11 },
2322 { 0x00, 0x12, 0x12 },
2323 { 0x00, 0x13, 0x13 },
2324 { 0x00, 0x14, 0x14 },
2325 { 0x00, 0x15, 0x15 },
2326 { 0x00, 0x16, 0x16 },
2327 { 0x00, 0x17, 0x17 },
2328 { 0x00, 0x18, 0x18 },
2329 { 0x00, 0x19, 0x19 },
2330 { 0x00, 0x1a, 0x1a },
2331 { 0x00, 0x1b, 0x1b },
2332 { 0x00, 0x1c, 0x1c },
2333 { 0x00, 0x1d, 0x1d },
2334 { 0x00, 0x1e, 0x1e },
2335 { 0x00, 0x1f, 0x1f },
2336 { 0x00, 0x20, 0x20 },
2337 { 0x00, 0x21, 0x21 },
2338 { 0x00, 0x22, 0x22 },
2339 { 0x00, 0x23, 0x23 },
2340 { 0x00, 0x24, 0x24 },
2341 { 0x00, 0x25, 0x25 },
2342 { 0x00, 0x26, 0x26 },
2343 { 0x00, 0x27, 0x27 },
2344 { 0x00, 0x28, 0x28 },
2345 { 0x00, 0x29, 0x29 },
2346 { 0x00, 0x2a, 0x2a },
2347 { 0x00, 0x2b, 0x2b },
2348 { 0x00, 0x2c, 0x2c },
2349 { 0x00, 0x2d, 0x2d },
2350 { 0x00, 0x2e, 0x2e },
2351 { 0x00, 0x2f, 0x2f },
2352 { 0x00, 0x30, 0x30 },
2353 { 0x00, 0x31, 0x31 },
2354 { 0x00, 0x32, 0x32 },
2355 { 0x00, 0x33, 0x33 },
2356 { 0x00, 0x34, 0x34 },
2357 { 0x00, 0x35, 0x35 },
2358 { 0x00, 0x36, 0x36 },
2359 { 0x00, 0x37, 0x37 },
2360 { 0x00, 0x38, 0x38 },
2361 { 0x00, 0x39, 0x39 },
2362 { 0x00, 0x3a, 0x3a },
2363 { 0x00, 0x3b, 0x3b },
2364 { 0x00, 0x3c, 0x3c },
2365 { 0x00, 0x3d, 0x3d },
2366 { 0x00, 0x3e, 0x3e },
2367 { 0x00, 0x3f, 0x3f },
2368 { 0x00, 0x40, 0x40 },
2369 { 0x01, 0x61, 0x41 },
2370 { 0x01, 0x62, 0x42 },
2371 { 0x01, 0x63, 0x43 },
2372 { 0x01, 0x64, 0x44 },
2373 { 0x01, 0x65, 0x45 },
2374 { 0x01, 0x66, 0x46 },
2375 { 0x01, 0x67, 0x47 },
2376 { 0x01, 0x68, 0x48 },
2377 { 0x01, 0x69, 0x49 },
2378 { 0x01, 0x6a, 0x4a },
2379 { 0x01, 0x6b, 0x4b },
2380 { 0x01, 0x6c, 0x4c },
2381 { 0x01, 0x6d, 0x4d },
2382 { 0x01, 0x6e, 0x4e },
2383 { 0x01, 0x6f, 0x4f },
2384 { 0x01, 0x70, 0x50 },
2385 { 0x01, 0x71, 0x51 },
2386 { 0x01, 0x72, 0x52 },
2387 { 0x01, 0x73, 0x53 },
2388 { 0x01, 0x74, 0x54 },
2389 { 0x01, 0x75, 0x55 },
2390 { 0x01, 0x76, 0x56 },
2391 { 0x01, 0x77, 0x57 },
2392 { 0x01, 0x78, 0x58 },
2393 { 0x01, 0x79, 0x59 },
2394 { 0x01, 0x7a, 0x5a },
2395 { 0x00, 0x5b, 0x5b },
2396 { 0x00, 0x5c, 0x5c },
2397 { 0x00, 0x5d, 0x5d },
2398 { 0x00, 0x5e, 0x5e },
2399 { 0x00, 0x5f, 0x5f },
2400 { 0x00, 0x60, 0x60 },
2401 { 0x00, 0x61, 0x41 },
2402 { 0x00, 0x62, 0x42 },
2403 { 0x00, 0x63, 0x43 },
2404 { 0x00, 0x64, 0x44 },
2405 { 0x00, 0x65, 0x45 },
2406 { 0x00, 0x66, 0x46 },
2407 { 0x00, 0x67, 0x47 },
2408 { 0x00, 0x68, 0x48 },
2409 { 0x00, 0x69, 0x49 },
2410 { 0x00, 0x6a, 0x4a },
2411 { 0x00, 0x6b, 0x4b },
2412 { 0x00, 0x6c, 0x4c },
2413 { 0x00, 0x6d, 0x4d },
2414 { 0x00, 0x6e, 0x4e },
2415 { 0x00, 0x6f, 0x4f },
2416 { 0x00, 0x70, 0x50 },
2417 { 0x00, 0x71, 0x51 },
2418 { 0x00, 0x72, 0x52 },
2419 { 0x00, 0x73, 0x53 },
2420 { 0x00, 0x74, 0x54 },
2421 { 0x00, 0x75, 0x55 },
2422 { 0x00, 0x76, 0x56 },
2423 { 0x00, 0x77, 0x57 },
2424 { 0x00, 0x78, 0x58 },
2425 { 0x00, 0x79, 0x59 },
2426 { 0x00, 0x7a, 0x5a },
2427 { 0x00, 0x7b, 0x7b },
2428 { 0x00, 0x7c, 0x7c },
2429 { 0x00, 0x7d, 0x7d },
2430 { 0x00, 0x7e, 0x7e },
2431 { 0x00, 0x7f, 0x7f },
2432 { 0x00, 0x80, 0x80 },
2433 { 0x00, 0x81, 0x81 },
2434 { 0x00, 0x82, 0x82 },
2435 { 0x00, 0x83, 0x83 },
2436 { 0x00, 0x84, 0x84 },
2437 { 0x00, 0x85, 0x85 },
2438 { 0x00, 0x86, 0x86 },
2439 { 0x00, 0x87, 0x87 },
2440 { 0x00, 0x88, 0x88 },
2441 { 0x00, 0x89, 0x89 },
2442 { 0x00, 0x8a, 0x8a },
2443 { 0x00, 0x8b, 0x8b },
2444 { 0x00, 0x8c, 0x8c },
2445 { 0x00, 0x8d, 0x8d },
2446 { 0x00, 0x8e, 0x8e },
2447 { 0x00, 0x8f, 0x8f },
2448 { 0x00, 0x90, 0x90 },
2449 { 0x00, 0x91, 0x91 },
2450 { 0x00, 0x92, 0x92 },
2451 { 0x00, 0x93, 0x93 },
2452 { 0x00, 0x94, 0x94 },
2453 { 0x00, 0x95, 0x95 },
2454 { 0x00, 0x96, 0x96 },
2455 { 0x00, 0x97, 0x97 },
2456 { 0x00, 0x98, 0x98 },
2457 { 0x00, 0x99, 0x99 },
2458 { 0x00, 0x9a, 0x9a },
2459 { 0x00, 0x9b, 0x9b },
2460 { 0x00, 0x9c, 0x9c },
2461 { 0x00, 0x9d, 0x9d },
2462 { 0x00, 0x9e, 0x9e },
2463 { 0x00, 0x9f, 0x9f },
2464 { 0x00, 0xa0, 0xa0 },
2465 { 0x00, 0xa1, 0xa1 },
2466 { 0x00, 0xa2, 0xa2 },
2467 { 0x00, 0xa3, 0xa3 },
2468 { 0x00, 0xa4, 0xa4 },
2469 { 0x00, 0xa5, 0xa5 },
2470 { 0x00, 0xa6, 0xa6 },
2471 { 0x00, 0xa7, 0xa7 },
2472 { 0x00, 0xa8, 0xa8 },
2473 { 0x00, 0xa9, 0xa9 },
2474 { 0x00, 0xaa, 0xaa },
2475 { 0x00, 0xab, 0xab },
2476 { 0x00, 0xac, 0xac },
2477 { 0x00, 0xad, 0xad },
2478 { 0x00, 0xae, 0xae },
2479 { 0x00, 0xaf, 0xaf },
2480 { 0x00, 0xb0, 0xb0 },
2481 { 0x00, 0xb1, 0xb1 },
2482 { 0x00, 0xb2, 0xb2 },
2483 { 0x00, 0xb3, 0xb3 },
2484 { 0x00, 0xb4, 0xb4 },
2485 { 0x00, 0xb5, 0xb5 },
2486 { 0x01, 0xdc, 0xb6 },
2487 { 0x00, 0xb7, 0xb7 },
2488 { 0x01, 0xdd, 0xb8 },
2489 { 0x01, 0xde, 0xb9 },
2490 { 0x01, 0xdf, 0xba },
2491 { 0x00, 0xbb, 0xbb },
2492 { 0x01, 0xfc, 0xbc },
2493 { 0x00, 0xbd, 0xbd },
2494 { 0x01, 0xfd, 0xbe },
2495 { 0x01, 0xfe, 0xbf },
2496 { 0x00, 0xc0, 0xc0 },
2497 { 0x01, 0xe1, 0xc1 },
2498 { 0x01, 0xe2, 0xc2 },
2499 { 0x01, 0xe3, 0xc3 },
2500 { 0x01, 0xe4, 0xc4 },
2501 { 0x01, 0xe5, 0xc5 },
2502 { 0x01, 0xe6, 0xc6 },
2503 { 0x01, 0xe7, 0xc7 },
2504 { 0x01, 0xe8, 0xc8 },
2505 { 0x01, 0xe9, 0xc9 },
2506 { 0x01, 0xea, 0xca },
2507 { 0x01, 0xeb, 0xcb },
2508 { 0x01, 0xec, 0xcc },
2509 { 0x01, 0xed, 0xcd },
2510 { 0x01, 0xee, 0xce },
2511 { 0x01, 0xef, 0xcf },
2512 { 0x01, 0xf0, 0xd0 },
2513 { 0x01, 0xf1, 0xd1 },
2514 { 0x00, 0xd2, 0xd2 },
2515 { 0x01, 0xf3, 0xd3 },
2516 { 0x01, 0xf4, 0xd4 },
2517 { 0x01, 0xf5, 0xd5 },
2518 { 0x01, 0xf6, 0xd6 },
2519 { 0x01, 0xf7, 0xd7 },
2520 { 0x01, 0xf8, 0xd8 },
2521 { 0x01, 0xf9, 0xd9 },
2522 { 0x01, 0xfa, 0xda },
2523 { 0x01, 0xfb, 0xdb },
2524 { 0x00, 0xdc, 0xb6 },
2525 { 0x00, 0xdd, 0xb8 },
2526 { 0x00, 0xde, 0xb9 },
2527 { 0x00, 0xdf, 0xba },
2528 { 0x00, 0xe0, 0xe0 },
2529 { 0x00, 0xe1, 0xc1 },
2530 { 0x00, 0xe2, 0xc2 },
2531 { 0x00, 0xe3, 0xc3 },
2532 { 0x00, 0xe4, 0xc4 },
2533 { 0x00, 0xe5, 0xc5 },
2534 { 0x00, 0xe6, 0xc6 },
2535 { 0x00, 0xe7, 0xc7 },
2536 { 0x00, 0xe8, 0xc8 },
2537 { 0x00, 0xe9, 0xc9 },
2538 { 0x00, 0xea, 0xca },
2539 { 0x00, 0xeb, 0xcb },
2540 { 0x00, 0xec, 0xcc },
2541 { 0x00, 0xed, 0xcd },
2542 { 0x00, 0xee, 0xce },
2543 { 0x00, 0xef, 0xcf },
2544 { 0x00, 0xf0, 0xd0 },
2545 { 0x00, 0xf1, 0xd1 },
2546 { 0x00, 0xf2, 0xd3 },
2547 { 0x00, 0xf3, 0xd3 },
2548 { 0x00, 0xf4, 0xd4 },
2549 { 0x00, 0xf5, 0xd5 },
2550 { 0x00, 0xf6, 0xd6 },
2551 { 0x00, 0xf7, 0xd7 },
2552 { 0x00, 0xf8, 0xd8 },
2553 { 0x00, 0xf9, 0xd9 },
2554 { 0x00, 0xfa, 0xda },
2555 { 0x00, 0xfb, 0xdb },
2556 { 0x00, 0xfc, 0xbc },
2557 { 0x00, 0xfd, 0xbe },
2558 { 0x00, 0xfe, 0xbf },
2559 { 0x00, 0xff, 0xff }
2560 };
2561 
2562 static struct cs_info iso8_tbl[] = {
2563 { 0x00, 0x00, 0x00 },
2564 { 0x00, 0x01, 0x01 },
2565 { 0x00, 0x02, 0x02 },
2566 { 0x00, 0x03, 0x03 },
2567 { 0x00, 0x04, 0x04 },
2568 { 0x00, 0x05, 0x05 },
2569 { 0x00, 0x06, 0x06 },
2570 { 0x00, 0x07, 0x07 },
2571 { 0x00, 0x08, 0x08 },
2572 { 0x00, 0x09, 0x09 },
2573 { 0x00, 0x0a, 0x0a },
2574 { 0x00, 0x0b, 0x0b },
2575 { 0x00, 0x0c, 0x0c },
2576 { 0x00, 0x0d, 0x0d },
2577 { 0x00, 0x0e, 0x0e },
2578 { 0x00, 0x0f, 0x0f },
2579 { 0x00, 0x10, 0x10 },
2580 { 0x00, 0x11, 0x11 },
2581 { 0x00, 0x12, 0x12 },
2582 { 0x00, 0x13, 0x13 },
2583 { 0x00, 0x14, 0x14 },
2584 { 0x00, 0x15, 0x15 },
2585 { 0x00, 0x16, 0x16 },
2586 { 0x00, 0x17, 0x17 },
2587 { 0x00, 0x18, 0x18 },
2588 { 0x00, 0x19, 0x19 },
2589 { 0x00, 0x1a, 0x1a },
2590 { 0x00, 0x1b, 0x1b },
2591 { 0x00, 0x1c, 0x1c },
2592 { 0x00, 0x1d, 0x1d },
2593 { 0x00, 0x1e, 0x1e },
2594 { 0x00, 0x1f, 0x1f },
2595 { 0x00, 0x20, 0x20 },
2596 { 0x00, 0x21, 0x21 },
2597 { 0x00, 0x22, 0x22 },
2598 { 0x00, 0x23, 0x23 },
2599 { 0x00, 0x24, 0x24 },
2600 { 0x00, 0x25, 0x25 },
2601 { 0x00, 0x26, 0x26 },
2602 { 0x00, 0x27, 0x27 },
2603 { 0x00, 0x28, 0x28 },
2604 { 0x00, 0x29, 0x29 },
2605 { 0x00, 0x2a, 0x2a },
2606 { 0x00, 0x2b, 0x2b },
2607 { 0x00, 0x2c, 0x2c },
2608 { 0x00, 0x2d, 0x2d },
2609 { 0x00, 0x2e, 0x2e },
2610 { 0x00, 0x2f, 0x2f },
2611 { 0x00, 0x30, 0x30 },
2612 { 0x00, 0x31, 0x31 },
2613 { 0x00, 0x32, 0x32 },
2614 { 0x00, 0x33, 0x33 },
2615 { 0x00, 0x34, 0x34 },
2616 { 0x00, 0x35, 0x35 },
2617 { 0x00, 0x36, 0x36 },
2618 { 0x00, 0x37, 0x37 },
2619 { 0x00, 0x38, 0x38 },
2620 { 0x00, 0x39, 0x39 },
2621 { 0x00, 0x3a, 0x3a },
2622 { 0x00, 0x3b, 0x3b },
2623 { 0x00, 0x3c, 0x3c },
2624 { 0x00, 0x3d, 0x3d },
2625 { 0x00, 0x3e, 0x3e },
2626 { 0x00, 0x3f, 0x3f },
2627 { 0x00, 0x40, 0x40 },
2628 { 0x01, 0x61, 0x41 },
2629 { 0x01, 0x62, 0x42 },
2630 { 0x01, 0x63, 0x43 },
2631 { 0x01, 0x64, 0x44 },
2632 { 0x01, 0x65, 0x45 },
2633 { 0x01, 0x66, 0x46 },
2634 { 0x01, 0x67, 0x47 },
2635 { 0x01, 0x68, 0x48 },
2636 { 0x01, 0x69, 0x49 },
2637 { 0x01, 0x6a, 0x4a },
2638 { 0x01, 0x6b, 0x4b },
2639 { 0x01, 0x6c, 0x4c },
2640 { 0x01, 0x6d, 0x4d },
2641 { 0x01, 0x6e, 0x4e },
2642 { 0x01, 0x6f, 0x4f },
2643 { 0x01, 0x70, 0x50 },
2644 { 0x01, 0x71, 0x51 },
2645 { 0x01, 0x72, 0x52 },
2646 { 0x01, 0x73, 0x53 },
2647 { 0x01, 0x74, 0x54 },
2648 { 0x01, 0x75, 0x55 },
2649 { 0x01, 0x76, 0x56 },
2650 { 0x01, 0x77, 0x57 },
2651 { 0x01, 0x78, 0x58 },
2652 { 0x01, 0x79, 0x59 },
2653 { 0x01, 0x7a, 0x5a },
2654 { 0x00, 0x5b, 0x5b },
2655 { 0x00, 0x5c, 0x5c },
2656 { 0x00, 0x5d, 0x5d },
2657 { 0x00, 0x5e, 0x5e },
2658 { 0x00, 0x5f, 0x5f },
2659 { 0x00, 0x60, 0x60 },
2660 { 0x00, 0x61, 0x41 },
2661 { 0x00, 0x62, 0x42 },
2662 { 0x00, 0x63, 0x43 },
2663 { 0x00, 0x64, 0x44 },
2664 { 0x00, 0x65, 0x45 },
2665 { 0x00, 0x66, 0x46 },
2666 { 0x00, 0x67, 0x47 },
2667 { 0x00, 0x68, 0x48 },
2668 { 0x00, 0x69, 0x49 },
2669 { 0x00, 0x6a, 0x4a },
2670 { 0x00, 0x6b, 0x4b },
2671 { 0x00, 0x6c, 0x4c },
2672 { 0x00, 0x6d, 0x4d },
2673 { 0x00, 0x6e, 0x4e },
2674 { 0x00, 0x6f, 0x4f },
2675 { 0x00, 0x70, 0x50 },
2676 { 0x00, 0x71, 0x51 },
2677 { 0x00, 0x72, 0x52 },
2678 { 0x00, 0x73, 0x53 },
2679 { 0x00, 0x74, 0x54 },
2680 { 0x00, 0x75, 0x55 },
2681 { 0x00, 0x76, 0x56 },
2682 { 0x00, 0x77, 0x57 },
2683 { 0x00, 0x78, 0x58 },
2684 { 0x00, 0x79, 0x59 },
2685 { 0x00, 0x7a, 0x5a },
2686 { 0x00, 0x7b, 0x7b },
2687 { 0x00, 0x7c, 0x7c },
2688 { 0x00, 0x7d, 0x7d },
2689 { 0x00, 0x7e, 0x7e },
2690 { 0x00, 0x7f, 0x7f },
2691 { 0x00, 0x80, 0x80 },
2692 { 0x00, 0x81, 0x81 },
2693 { 0x00, 0x82, 0x82 },
2694 { 0x00, 0x83, 0x83 },
2695 { 0x00, 0x84, 0x84 },
2696 { 0x00, 0x85, 0x85 },
2697 { 0x00, 0x86, 0x86 },
2698 { 0x00, 0x87, 0x87 },
2699 { 0x00, 0x88, 0x88 },
2700 { 0x00, 0x89, 0x89 },
2701 { 0x00, 0x8a, 0x8a },
2702 { 0x00, 0x8b, 0x8b },
2703 { 0x00, 0x8c, 0x8c },
2704 { 0x00, 0x8d, 0x8d },
2705 { 0x00, 0x8e, 0x8e },
2706 { 0x00, 0x8f, 0x8f },
2707 { 0x00, 0x90, 0x90 },
2708 { 0x00, 0x91, 0x91 },
2709 { 0x00, 0x92, 0x92 },
2710 { 0x00, 0x93, 0x93 },
2711 { 0x00, 0x94, 0x94 },
2712 { 0x00, 0x95, 0x95 },
2713 { 0x00, 0x96, 0x96 },
2714 { 0x00, 0x97, 0x97 },
2715 { 0x00, 0x98, 0x98 },
2716 { 0x00, 0x99, 0x99 },
2717 { 0x00, 0x9a, 0x9a },
2718 { 0x00, 0x9b, 0x9b },
2719 { 0x00, 0x9c, 0x9c },
2720 { 0x00, 0x9d, 0x9d },
2721 { 0x00, 0x9e, 0x9e },
2722 { 0x00, 0x9f, 0x9f },
2723 { 0x00, 0xa0, 0xa0 },
2724 { 0x00, 0xa1, 0xa1 },
2725 { 0x00, 0xa2, 0xa2 },
2726 { 0x00, 0xa3, 0xa3 },
2727 { 0x00, 0xa4, 0xa4 },
2728 { 0x00, 0xa5, 0xa5 },
2729 { 0x00, 0xa6, 0xa6 },
2730 { 0x00, 0xa7, 0xa7 },
2731 { 0x00, 0xa8, 0xa8 },
2732 { 0x00, 0xa9, 0xa9 },
2733 { 0x00, 0xaa, 0xaa },
2734 { 0x00, 0xab, 0xab },
2735 { 0x00, 0xac, 0xac },
2736 { 0x00, 0xad, 0xad },
2737 { 0x00, 0xae, 0xae },
2738 { 0x00, 0xaf, 0xaf },
2739 { 0x00, 0xb0, 0xb0 },
2740 { 0x00, 0xb1, 0xb1 },
2741 { 0x00, 0xb2, 0xb2 },
2742 { 0x00, 0xb3, 0xb3 },
2743 { 0x00, 0xb4, 0xb4 },
2744 { 0x00, 0xb5, 0xb5 },
2745 { 0x00, 0xb6, 0xb6 },
2746 { 0x00, 0xb7, 0xb7 },
2747 { 0x00, 0xb8, 0xb8 },
2748 { 0x00, 0xb9, 0xb9 },
2749 { 0x00, 0xba, 0xba },
2750 { 0x00, 0xbb, 0xbb },
2751 { 0x00, 0xbc, 0xbc },
2752 { 0x00, 0xbd, 0xbd },
2753 { 0x00, 0xbe, 0xbe },
2754 { 0x00, 0xbf, 0xbf },
2755 { 0x00, 0xc0, 0xc0 },
2756 { 0x00, 0xc1, 0xc1 },
2757 { 0x00, 0xc2, 0xc2 },
2758 { 0x00, 0xc3, 0xc3 },
2759 { 0x00, 0xc4, 0xc4 },
2760 { 0x00, 0xc5, 0xc5 },
2761 { 0x00, 0xc6, 0xc6 },
2762 { 0x00, 0xc7, 0xc7 },
2763 { 0x00, 0xc8, 0xc8 },
2764 { 0x00, 0xc9, 0xc9 },
2765 { 0x00, 0xca, 0xca },
2766 { 0x00, 0xcb, 0xcb },
2767 { 0x00, 0xcc, 0xcc },
2768 { 0x00, 0xcd, 0xcd },
2769 { 0x00, 0xce, 0xce },
2770 { 0x00, 0xcf, 0xcf },
2771 { 0x00, 0xd0, 0xd0 },
2772 { 0x00, 0xd1, 0xd1 },
2773 { 0x00, 0xd2, 0xd2 },
2774 { 0x00, 0xd3, 0xd3 },
2775 { 0x00, 0xd4, 0xd4 },
2776 { 0x00, 0xd5, 0xd5 },
2777 { 0x00, 0xd6, 0xd6 },
2778 { 0x00, 0xd7, 0xd7 },
2779 { 0x00, 0xd8, 0xd8 },
2780 { 0x00, 0xd9, 0xd9 },
2781 { 0x00, 0xda, 0xda },
2782 { 0x00, 0xdb, 0xdb },
2783 { 0x00, 0xdc, 0xdc },
2784 { 0x00, 0xdd, 0xdd },
2785 { 0x00, 0xde, 0xde },
2786 { 0x00, 0xdf, 0xdf },
2787 { 0x00, 0xe0, 0xe0 },
2788 { 0x00, 0xe1, 0xe1 },
2789 { 0x00, 0xe2, 0xe2 },
2790 { 0x00, 0xe3, 0xe3 },
2791 { 0x00, 0xe4, 0xe4 },
2792 { 0x00, 0xe5, 0xe5 },
2793 { 0x00, 0xe6, 0xe6 },
2794 { 0x00, 0xe7, 0xe7 },
2795 { 0x00, 0xe8, 0xe8 },
2796 { 0x00, 0xe9, 0xe9 },
2797 { 0x00, 0xea, 0xea },
2798 { 0x00, 0xeb, 0xeb },
2799 { 0x00, 0xec, 0xec },
2800 { 0x00, 0xed, 0xed },
2801 { 0x00, 0xee, 0xee },
2802 { 0x00, 0xef, 0xef },
2803 { 0x00, 0xf0, 0xf0 },
2804 { 0x00, 0xf1, 0xf1 },
2805 { 0x00, 0xf2, 0xf2 },
2806 { 0x00, 0xf3, 0xf3 },
2807 { 0x00, 0xf4, 0xf4 },
2808 { 0x00, 0xf5, 0xf5 },
2809 { 0x00, 0xf6, 0xf6 },
2810 { 0x00, 0xf7, 0xf7 },
2811 { 0x00, 0xf8, 0xf8 },
2812 { 0x00, 0xf9, 0xf9 },
2813 { 0x00, 0xfa, 0xfa },
2814 { 0x00, 0xfb, 0xfb },
2815 { 0x00, 0xfc, 0xfc },
2816 { 0x00, 0xfd, 0xfd },
2817 { 0x00, 0xfe, 0xfe },
2818 { 0x00, 0xff, 0xff }
2819 };
2820 
2821 static struct cs_info iso9_tbl[] = {
2822 { 0x00, 0x00, 0x00 },
2823 { 0x00, 0x01, 0x01 },
2824 { 0x00, 0x02, 0x02 },
2825 { 0x00, 0x03, 0x03 },
2826 { 0x00, 0x04, 0x04 },
2827 { 0x00, 0x05, 0x05 },
2828 { 0x00, 0x06, 0x06 },
2829 { 0x00, 0x07, 0x07 },
2830 { 0x00, 0x08, 0x08 },
2831 { 0x00, 0x09, 0x09 },
2832 { 0x00, 0x0a, 0x0a },
2833 { 0x00, 0x0b, 0x0b },
2834 { 0x00, 0x0c, 0x0c },
2835 { 0x00, 0x0d, 0x0d },
2836 { 0x00, 0x0e, 0x0e },
2837 { 0x00, 0x0f, 0x0f },
2838 { 0x00, 0x10, 0x10 },
2839 { 0x00, 0x11, 0x11 },
2840 { 0x00, 0x12, 0x12 },
2841 { 0x00, 0x13, 0x13 },
2842 { 0x00, 0x14, 0x14 },
2843 { 0x00, 0x15, 0x15 },
2844 { 0x00, 0x16, 0x16 },
2845 { 0x00, 0x17, 0x17 },
2846 { 0x00, 0x18, 0x18 },
2847 { 0x00, 0x19, 0x19 },
2848 { 0x00, 0x1a, 0x1a },
2849 { 0x00, 0x1b, 0x1b },
2850 { 0x00, 0x1c, 0x1c },
2851 { 0x00, 0x1d, 0x1d },
2852 { 0x00, 0x1e, 0x1e },
2853 { 0x00, 0x1f, 0x1f },
2854 { 0x00, 0x20, 0x20 },
2855 { 0x00, 0x21, 0x21 },
2856 { 0x00, 0x22, 0x22 },
2857 { 0x00, 0x23, 0x23 },
2858 { 0x00, 0x24, 0x24 },
2859 { 0x00, 0x25, 0x25 },
2860 { 0x00, 0x26, 0x26 },
2861 { 0x00, 0x27, 0x27 },
2862 { 0x00, 0x28, 0x28 },
2863 { 0x00, 0x29, 0x29 },
2864 { 0x00, 0x2a, 0x2a },
2865 { 0x00, 0x2b, 0x2b },
2866 { 0x00, 0x2c, 0x2c },
2867 { 0x00, 0x2d, 0x2d },
2868 { 0x00, 0x2e, 0x2e },
2869 { 0x00, 0x2f, 0x2f },
2870 { 0x00, 0x30, 0x30 },
2871 { 0x00, 0x31, 0x31 },
2872 { 0x00, 0x32, 0x32 },
2873 { 0x00, 0x33, 0x33 },
2874 { 0x00, 0x34, 0x34 },
2875 { 0x00, 0x35, 0x35 },
2876 { 0x00, 0x36, 0x36 },
2877 { 0x00, 0x37, 0x37 },
2878 { 0x00, 0x38, 0x38 },
2879 { 0x00, 0x39, 0x39 },
2880 { 0x00, 0x3a, 0x3a },
2881 { 0x00, 0x3b, 0x3b },
2882 { 0x00, 0x3c, 0x3c },
2883 { 0x00, 0x3d, 0x3d },
2884 { 0x00, 0x3e, 0x3e },
2885 { 0x00, 0x3f, 0x3f },
2886 { 0x00, 0x40, 0x40 },
2887 { 0x01, 0x61, 0x41 },
2888 { 0x01, 0x62, 0x42 },
2889 { 0x01, 0x63, 0x43 },
2890 { 0x01, 0x64, 0x44 },
2891 { 0x01, 0x65, 0x45 },
2892 { 0x01, 0x66, 0x46 },
2893 { 0x01, 0x67, 0x47 },
2894 { 0x01, 0x68, 0x48 },
2895 { 0x01, 0xfd, 0x49 },
2896 { 0x01, 0x6a, 0x4a },
2897 { 0x01, 0x6b, 0x4b },
2898 { 0x01, 0x6c, 0x4c },
2899 { 0x01, 0x6d, 0x4d },
2900 { 0x01, 0x6e, 0x4e },
2901 { 0x01, 0x6f, 0x4f },
2902 { 0x01, 0x70, 0x50 },
2903 { 0x01, 0x71, 0x51 },
2904 { 0x01, 0x72, 0x52 },
2905 { 0x01, 0x73, 0x53 },
2906 { 0x01, 0x74, 0x54 },
2907 { 0x01, 0x75, 0x55 },
2908 { 0x01, 0x76, 0x56 },
2909 { 0x01, 0x77, 0x57 },
2910 { 0x01, 0x78, 0x58 },
2911 { 0x01, 0x79, 0x59 },
2912 { 0x01, 0x7a, 0x5a },
2913 { 0x00, 0x5b, 0x5b },
2914 { 0x00, 0x5c, 0x5c },
2915 { 0x00, 0x5d, 0x5d },
2916 { 0x00, 0x5e, 0x5e },
2917 { 0x00, 0x5f, 0x5f },
2918 { 0x00, 0x60, 0x60 },
2919 { 0x00, 0x61, 0x41 },
2920 { 0x00, 0x62, 0x42 },
2921 { 0x00, 0x63, 0x43 },
2922 { 0x00, 0x64, 0x44 },
2923 { 0x00, 0x65, 0x45 },
2924 { 0x00, 0x66, 0x46 },
2925 { 0x00, 0x67, 0x47 },
2926 { 0x00, 0x68, 0x48 },
2927 { 0x00, 0x69, 0xdd },
2928 { 0x00, 0x6a, 0x4a },
2929 { 0x00, 0x6b, 0x4b },
2930 { 0x00, 0x6c, 0x4c },
2931 { 0x00, 0x6d, 0x4d },
2932 { 0x00, 0x6e, 0x4e },
2933 { 0x00, 0x6f, 0x4f },
2934 { 0x00, 0x70, 0x50 },
2935 { 0x00, 0x71, 0x51 },
2936 { 0x00, 0x72, 0x52 },
2937 { 0x00, 0x73, 0x53 },
2938 { 0x00, 0x74, 0x54 },
2939 { 0x00, 0x75, 0x55 },
2940 { 0x00, 0x76, 0x56 },
2941 { 0x00, 0x77, 0x57 },
2942 { 0x00, 0x78, 0x58 },
2943 { 0x00, 0x79, 0x59 },
2944 { 0x00, 0x7a, 0x5a },
2945 { 0x00, 0x7b, 0x7b },
2946 { 0x00, 0x7c, 0x7c },
2947 { 0x00, 0x7d, 0x7d },
2948 { 0x00, 0x7e, 0x7e },
2949 { 0x00, 0x7f, 0x7f },
2950 { 0x00, 0x80, 0x80 },
2951 { 0x00, 0x81, 0x81 },
2952 { 0x00, 0x82, 0x82 },
2953 { 0x00, 0x83, 0x83 },
2954 { 0x00, 0x84, 0x84 },
2955 { 0x00, 0x85, 0x85 },
2956 { 0x00, 0x86, 0x86 },
2957 { 0x00, 0x87, 0x87 },
2958 { 0x00, 0x88, 0x88 },
2959 { 0x00, 0x89, 0x89 },
2960 { 0x00, 0x8a, 0x8a },
2961 { 0x00, 0x8b, 0x8b },
2962 { 0x00, 0x8c, 0x8c },
2963 { 0x00, 0x8d, 0x8d },
2964 { 0x00, 0x8e, 0x8e },
2965 { 0x00, 0x8f, 0x8f },
2966 { 0x00, 0x90, 0x90 },
2967 { 0x00, 0x91, 0x91 },
2968 { 0x00, 0x92, 0x92 },
2969 { 0x00, 0x93, 0x93 },
2970 { 0x00, 0x94, 0x94 },
2971 { 0x00, 0x95, 0x95 },
2972 { 0x00, 0x96, 0x96 },
2973 { 0x00, 0x97, 0x97 },
2974 { 0x00, 0x98, 0x98 },
2975 { 0x00, 0x99, 0x99 },
2976 { 0x00, 0x9a, 0x9a },
2977 { 0x00, 0x9b, 0x9b },
2978 { 0x00, 0x9c, 0x9c },
2979 { 0x00, 0x9d, 0x9d },
2980 { 0x00, 0x9e, 0x9e },
2981 { 0x00, 0x9f, 0x9f },
2982 { 0x00, 0xa0, 0xa0 },
2983 { 0x00, 0xa1, 0xa1 },
2984 { 0x00, 0xa2, 0xa2 },
2985 { 0x00, 0xa3, 0xa3 },
2986 { 0x00, 0xa4, 0xa4 },
2987 { 0x00, 0xa5, 0xa5 },
2988 { 0x00, 0xa6, 0xa6 },
2989 { 0x00, 0xa7, 0xa7 },
2990 { 0x00, 0xa8, 0xa8 },
2991 { 0x00, 0xa9, 0xa9 },
2992 { 0x00, 0xaa, 0xaa },
2993 { 0x00, 0xab, 0xab },
2994 { 0x00, 0xac, 0xac },
2995 { 0x00, 0xad, 0xad },
2996 { 0x00, 0xae, 0xae },
2997 { 0x00, 0xaf, 0xaf },
2998 { 0x00, 0xb0, 0xb0 },
2999 { 0x00, 0xb1, 0xb1 },
3000 { 0x00, 0xb2, 0xb2 },
3001 { 0x00, 0xb3, 0xb3 },
3002 { 0x00, 0xb4, 0xb4 },
3003 { 0x00, 0xb5, 0xb5 },
3004 { 0x00, 0xb6, 0xb6 },
3005 { 0x00, 0xb7, 0xb7 },
3006 { 0x00, 0xb8, 0xb8 },
3007 { 0x00, 0xb9, 0xb9 },
3008 { 0x00, 0xba, 0xba },
3009 { 0x00, 0xbb, 0xbb },
3010 { 0x00, 0xbc, 0xbc },
3011 { 0x00, 0xbd, 0xbd },
3012 { 0x00, 0xbe, 0xbe },
3013 { 0x00, 0xbf, 0xbf },
3014 { 0x01, 0xe0, 0xc0 },
3015 { 0x01, 0xe1, 0xc1 },
3016 { 0x01, 0xe2, 0xc2 },
3017 { 0x01, 0xe3, 0xc3 },
3018 { 0x01, 0xe4, 0xc4 },
3019 { 0x01, 0xe5, 0xc5 },
3020 { 0x01, 0xe6, 0xc6 },
3021 { 0x01, 0xe7, 0xc7 },
3022 { 0x01, 0xe8, 0xc8 },
3023 { 0x01, 0xe9, 0xc9 },
3024 { 0x01, 0xea, 0xca },
3025 { 0x01, 0xeb, 0xcb },
3026 { 0x01, 0xec, 0xcc },
3027 { 0x01, 0xed, 0xcd },
3028 { 0x01, 0xee, 0xce },
3029 { 0x01, 0xef, 0xcf },
3030 { 0x01, 0xf0, 0xd0 },
3031 { 0x01, 0xf1, 0xd1 },
3032 { 0x01, 0xf2, 0xd2 },
3033 { 0x01, 0xf3, 0xd3 },
3034 { 0x01, 0xf4, 0xd4 },
3035 { 0x01, 0xf5, 0xd5 },
3036 { 0x01, 0xf6, 0xd6 },
3037 { 0x00, 0xd7, 0xd7 },
3038 { 0x01, 0xf8, 0xd8 },
3039 { 0x01, 0xf9, 0xd9 },
3040 { 0x01, 0xfa, 0xda },
3041 { 0x01, 0xfb, 0xdb },
3042 { 0x01, 0xfc, 0xdc },
3043 { 0x01, 0x69, 0xdd },
3044 { 0x01, 0xfe, 0xde },
3045 { 0x00, 0xdf, 0xdf },
3046 { 0x00, 0xe0, 0xc0 },
3047 { 0x00, 0xe1, 0xc1 },
3048 { 0x00, 0xe2, 0xc2 },
3049 { 0x00, 0xe3, 0xc3 },
3050 { 0x00, 0xe4, 0xc4 },
3051 { 0x00, 0xe5, 0xc5 },
3052 { 0x00, 0xe6, 0xc6 },
3053 { 0x00, 0xe7, 0xc7 },
3054 { 0x00, 0xe8, 0xc8 },
3055 { 0x00, 0xe9, 0xc9 },
3056 { 0x00, 0xea, 0xca },
3057 { 0x00, 0xeb, 0xcb },
3058 { 0x00, 0xec, 0xcc },
3059 { 0x00, 0xed, 0xcd },
3060 { 0x00, 0xee, 0xce },
3061 { 0x00, 0xef, 0xcf },
3062 { 0x00, 0xf0, 0xd0 },
3063 { 0x00, 0xf1, 0xd1 },
3064 { 0x00, 0xf2, 0xd2 },
3065 { 0x00, 0xf3, 0xd3 },
3066 { 0x00, 0xf4, 0xd4 },
3067 { 0x00, 0xf5, 0xd5 },
3068 { 0x00, 0xf6, 0xd6 },
3069 { 0x00, 0xf7, 0xf7 },
3070 { 0x00, 0xf8, 0xd8 },
3071 { 0x00, 0xf9, 0xd9 },
3072 { 0x00, 0xfa, 0xda },
3073 { 0x00, 0xfb, 0xdb },
3074 { 0x00, 0xfc, 0xdc },
3075 { 0x00, 0xfd, 0x49 },
3076 { 0x00, 0xfe, 0xde },
3077 { 0x00, 0xff, 0xff }
3078 };
3079 
3080 static struct cs_info iso10_tbl[] = {
3081 { 0x00, 0x00, 0x00 },
3082 { 0x00, 0x01, 0x01 },
3083 { 0x00, 0x02, 0x02 },
3084 { 0x00, 0x03, 0x03 },
3085 { 0x00, 0x04, 0x04 },
3086 { 0x00, 0x05, 0x05 },
3087 { 0x00, 0x06, 0x06 },
3088 { 0x00, 0x07, 0x07 },
3089 { 0x00, 0x08, 0x08 },
3090 { 0x00, 0x09, 0x09 },
3091 { 0x00, 0x0a, 0x0a },
3092 { 0x00, 0x0b, 0x0b },
3093 { 0x00, 0x0c, 0x0c },
3094 { 0x00, 0x0d, 0x0d },
3095 { 0x00, 0x0e, 0x0e },
3096 { 0x00, 0x0f, 0x0f },
3097 { 0x00, 0x10, 0x10 },
3098 { 0x00, 0x11, 0x11 },
3099 { 0x00, 0x12, 0x12 },
3100 { 0x00, 0x13, 0x13 },
3101 { 0x00, 0x14, 0x14 },
3102 { 0x00, 0x15, 0x15 },
3103 { 0x00, 0x16, 0x16 },
3104 { 0x00, 0x17, 0x17 },
3105 { 0x00, 0x18, 0x18 },
3106 { 0x00, 0x19, 0x19 },
3107 { 0x00, 0x1a, 0x1a },
3108 { 0x00, 0x1b, 0x1b },
3109 { 0x00, 0x1c, 0x1c },
3110 { 0x00, 0x1d, 0x1d },
3111 { 0x00, 0x1e, 0x1e },
3112 { 0x00, 0x1f, 0x1f },
3113 { 0x00, 0x20, 0x20 },
3114 { 0x00, 0x21, 0x21 },
3115 { 0x00, 0x22, 0x22 },
3116 { 0x00, 0x23, 0x23 },
3117 { 0x00, 0x24, 0x24 },
3118 { 0x00, 0x25, 0x25 },
3119 { 0x00, 0x26, 0x26 },
3120 { 0x00, 0x27, 0x27 },
3121 { 0x00, 0x28, 0x28 },
3122 { 0x00, 0x29, 0x29 },
3123 { 0x00, 0x2a, 0x2a },
3124 { 0x00, 0x2b, 0x2b },
3125 { 0x00, 0x2c, 0x2c },
3126 { 0x00, 0x2d, 0x2d },
3127 { 0x00, 0x2e, 0x2e },
3128 { 0x00, 0x2f, 0x2f },
3129 { 0x00, 0x30, 0x30 },
3130 { 0x00, 0x31, 0x31 },
3131 { 0x00, 0x32, 0x32 },
3132 { 0x00, 0x33, 0x33 },
3133 { 0x00, 0x34, 0x34 },
3134 { 0x00, 0x35, 0x35 },
3135 { 0x00, 0x36, 0x36 },
3136 { 0x00, 0x37, 0x37 },
3137 { 0x00, 0x38, 0x38 },
3138 { 0x00, 0x39, 0x39 },
3139 { 0x00, 0x3a, 0x3a },
3140 { 0x00, 0x3b, 0x3b },
3141 { 0x00, 0x3c, 0x3c },
3142 { 0x00, 0x3d, 0x3d },
3143 { 0x00, 0x3e, 0x3e },
3144 { 0x00, 0x3f, 0x3f },
3145 { 0x00, 0x40, 0x40 },
3146 { 0x01, 0x61, 0x41 },
3147 { 0x01, 0x62, 0x42 },
3148 { 0x01, 0x63, 0x43 },
3149 { 0x01, 0x64, 0x44 },
3150 { 0x01, 0x65, 0x45 },
3151 { 0x01, 0x66, 0x46 },
3152 { 0x01, 0x67, 0x47 },
3153 { 0x01, 0x68, 0x48 },
3154 { 0x01, 0x69, 0x49 },
3155 { 0x01, 0x6a, 0x4a },
3156 { 0x01, 0x6b, 0x4b },
3157 { 0x01, 0x6c, 0x4c },
3158 { 0x01, 0x6d, 0x4d },
3159 { 0x01, 0x6e, 0x4e },
3160 { 0x01, 0x6f, 0x4f },
3161 { 0x01, 0x70, 0x50 },
3162 { 0x01, 0x71, 0x51 },
3163 { 0x01, 0x72, 0x52 },
3164 { 0x01, 0x73, 0x53 },
3165 { 0x01, 0x74, 0x54 },
3166 { 0x01, 0x75, 0x55 },
3167 { 0x01, 0x76, 0x56 },
3168 { 0x01, 0x77, 0x57 },
3169 { 0x01, 0x78, 0x58 },
3170 { 0x01, 0x79, 0x59 },
3171 { 0x01, 0x7a, 0x5a },
3172 { 0x00, 0x5b, 0x5b },
3173 { 0x00, 0x5c, 0x5c },
3174 { 0x00, 0x5d, 0x5d },
3175 { 0x00, 0x5e, 0x5e },
3176 { 0x00, 0x5f, 0x5f },
3177 { 0x00, 0x60, 0x60 },
3178 { 0x00, 0x61, 0x41 },
3179 { 0x00, 0x62, 0x42 },
3180 { 0x00, 0x63, 0x43 },
3181 { 0x00, 0x64, 0x44 },
3182 { 0x00, 0x65, 0x45 },
3183 { 0x00, 0x66, 0x46 },
3184 { 0x00, 0x67, 0x47 },
3185 { 0x00, 0x68, 0x48 },
3186 { 0x00, 0x69, 0x49 },
3187 { 0x00, 0x6a, 0x4a },
3188 { 0x00, 0x6b, 0x4b },
3189 { 0x00, 0x6c, 0x4c },
3190 { 0x00, 0x6d, 0x4d },
3191 { 0x00, 0x6e, 0x4e },
3192 { 0x00, 0x6f, 0x4f },
3193 { 0x00, 0x70, 0x50 },
3194 { 0x00, 0x71, 0x51 },
3195 { 0x00, 0x72, 0x52 },
3196 { 0x00, 0x73, 0x53 },
3197 { 0x00, 0x74, 0x54 },
3198 { 0x00, 0x75, 0x55 },
3199 { 0x00, 0x76, 0x56 },
3200 { 0x00, 0x77, 0x57 },
3201 { 0x00, 0x78, 0x58 },
3202 { 0x00, 0x79, 0x59 },
3203 { 0x00, 0x7a, 0x5a },
3204 { 0x00, 0x7b, 0x7b },
3205 { 0x00, 0x7c, 0x7c },
3206 { 0x00, 0x7d, 0x7d },
3207 { 0x00, 0x7e, 0x7e },
3208 { 0x00, 0x7f, 0x7f },
3209 { 0x00, 0x80, 0x80 },
3210 { 0x00, 0x81, 0x81 },
3211 { 0x00, 0x82, 0x82 },
3212 { 0x00, 0x83, 0x83 },
3213 { 0x00, 0x84, 0x84 },
3214 { 0x00, 0x85, 0x85 },
3215 { 0x00, 0x86, 0x86 },
3216 { 0x00, 0x87, 0x87 },
3217 { 0x00, 0x88, 0x88 },
3218 { 0x00, 0x89, 0x89 },
3219 { 0x00, 0x8a, 0x8a },
3220 { 0x00, 0x8b, 0x8b },
3221 { 0x00, 0x8c, 0x8c },
3222 { 0x00, 0x8d, 0x8d },
3223 { 0x00, 0x8e, 0x8e },
3224 { 0x00, 0x8f, 0x8f },
3225 { 0x00, 0x90, 0x90 },
3226 { 0x00, 0x91, 0x91 },
3227 { 0x00, 0x92, 0x92 },
3228 { 0x00, 0x93, 0x93 },
3229 { 0x00, 0x94, 0x94 },
3230 { 0x00, 0x95, 0x95 },
3231 { 0x00, 0x96, 0x96 },
3232 { 0x00, 0x97, 0x97 },
3233 { 0x00, 0x98, 0x98 },
3234 { 0x00, 0x99, 0x99 },
3235 { 0x00, 0x9a, 0x9a },
3236 { 0x00, 0x9b, 0x9b },
3237 { 0x00, 0x9c, 0x9c },
3238 { 0x00, 0x9d, 0x9d },
3239 { 0x00, 0x9e, 0x9e },
3240 { 0x00, 0x9f, 0x9f },
3241 { 0x00, 0xa0, 0xa0 },
3242 { 0x00, 0xa1, 0xa1 },
3243 { 0x00, 0xa2, 0xa2 },
3244 { 0x00, 0xa3, 0xa3 },
3245 { 0x00, 0xa4, 0xa4 },
3246 { 0x00, 0xa5, 0xa5 },
3247 { 0x00, 0xa6, 0xa6 },
3248 { 0x00, 0xa7, 0xa7 },
3249 { 0x00, 0xa8, 0xa8 },
3250 { 0x00, 0xa9, 0xa9 },
3251 { 0x00, 0xaa, 0xaa },
3252 { 0x00, 0xab, 0xab },
3253 { 0x00, 0xac, 0xac },
3254 { 0x00, 0xad, 0xad },
3255 { 0x00, 0xae, 0xae },
3256 { 0x00, 0xaf, 0xaf },
3257 { 0x00, 0xb0, 0xb0 },
3258 { 0x00, 0xb1, 0xb1 },
3259 { 0x00, 0xb2, 0xb2 },
3260 { 0x00, 0xb3, 0xb3 },
3261 { 0x00, 0xb4, 0xb4 },
3262 { 0x00, 0xb5, 0xb5 },
3263 { 0x00, 0xb6, 0xb6 },
3264 { 0x00, 0xb7, 0xb7 },
3265 { 0x00, 0xb8, 0xb8 },
3266 { 0x00, 0xb9, 0xb9 },
3267 { 0x00, 0xba, 0xba },
3268 { 0x00, 0xbb, 0xbb },
3269 { 0x00, 0xbc, 0xbc },
3270 { 0x00, 0xbd, 0xbd },
3271 { 0x00, 0xbe, 0xbe },
3272 { 0x00, 0xbf, 0xbf },
3273 { 0x00, 0xc0, 0xc0 },
3274 { 0x00, 0xc1, 0xc1 },
3275 { 0x00, 0xc2, 0xc2 },
3276 { 0x00, 0xc3, 0xc3 },
3277 { 0x00, 0xc4, 0xc4 },
3278 { 0x00, 0xc5, 0xc5 },
3279 { 0x00, 0xc6, 0xc6 },
3280 { 0x00, 0xc7, 0xc7 },
3281 { 0x00, 0xc8, 0xc8 },
3282 { 0x00, 0xc9, 0xc9 },
3283 { 0x00, 0xca, 0xca },
3284 { 0x00, 0xcb, 0xcb },
3285 { 0x00, 0xcc, 0xcc },
3286 { 0x00, 0xcd, 0xcd },
3287 { 0x00, 0xce, 0xce },
3288 { 0x00, 0xcf, 0xcf },
3289 { 0x00, 0xd0, 0xd0 },
3290 { 0x00, 0xd1, 0xd1 },
3291 { 0x00, 0xd2, 0xd2 },
3292 { 0x00, 0xd3, 0xd3 },
3293 { 0x00, 0xd4, 0xd4 },
3294 { 0x00, 0xd5, 0xd5 },
3295 { 0x00, 0xd6, 0xd6 },
3296 { 0x00, 0xd7, 0xd7 },
3297 { 0x00, 0xd8, 0xd8 },
3298 { 0x00, 0xd9, 0xd9 },
3299 { 0x00, 0xda, 0xda },
3300 { 0x00, 0xdb, 0xdb },
3301 { 0x00, 0xdc, 0xdc },
3302 { 0x00, 0xdd, 0xdd },
3303 { 0x00, 0xde, 0xde },
3304 { 0x00, 0xdf, 0xdf },
3305 { 0x00, 0xe0, 0xe0 },
3306 { 0x00, 0xe1, 0xe1 },
3307 { 0x00, 0xe2, 0xe2 },
3308 { 0x00, 0xe3, 0xe3 },
3309 { 0x00, 0xe4, 0xe4 },
3310 { 0x00, 0xe5, 0xe5 },
3311 { 0x00, 0xe6, 0xe6 },
3312 { 0x00, 0xe7, 0xe7 },
3313 { 0x00, 0xe8, 0xe8 },
3314 { 0x00, 0xe9, 0xe9 },
3315 { 0x00, 0xea, 0xea },
3316 { 0x00, 0xeb, 0xeb },
3317 { 0x00, 0xec, 0xec },
3318 { 0x00, 0xed, 0xed },
3319 { 0x00, 0xee, 0xee },
3320 { 0x00, 0xef, 0xef },
3321 { 0x00, 0xf0, 0xf0 },
3322 { 0x00, 0xf1, 0xf1 },
3323 { 0x00, 0xf2, 0xf2 },
3324 { 0x00, 0xf3, 0xf3 },
3325 { 0x00, 0xf4, 0xf4 },
3326 { 0x00, 0xf5, 0xf5 },
3327 { 0x00, 0xf6, 0xf6 },
3328 { 0x00, 0xf7, 0xf7 },
3329 { 0x00, 0xf8, 0xf8 },
3330 { 0x00, 0xf9, 0xf9 },
3331 { 0x00, 0xfa, 0xfa },
3332 { 0x00, 0xfb, 0xfb },
3333 { 0x00, 0xfc, 0xfc },
3334 { 0x00, 0xfd, 0xfd },
3335 { 0x00, 0xfe, 0xfe },
3336 { 0x00, 0xff, 0xff }
3337 };
3338 
3339 static struct cs_info koi8r_tbl[] = {
3340 { 0x00, 0x00, 0x00 },
3341 { 0x00, 0x01, 0x01 },
3342 { 0x00, 0x02, 0x02 },
3343 { 0x00, 0x03, 0x03 },
3344 { 0x00, 0x04, 0x04 },
3345 { 0x00, 0x05, 0x05 },
3346 { 0x00, 0x06, 0x06 },
3347 { 0x00, 0x07, 0x07 },
3348 { 0x00, 0x08, 0x08 },
3349 { 0x00, 0x09, 0x09 },
3350 { 0x00, 0x0a, 0x0a },
3351 { 0x00, 0x0b, 0x0b },
3352 { 0x00, 0x0c, 0x0c },
3353 { 0x00, 0x0d, 0x0d },
3354 { 0x00, 0x0e, 0x0e },
3355 { 0x00, 0x0f, 0x0f },
3356 { 0x00, 0x10, 0x10 },
3357 { 0x00, 0x11, 0x11 },
3358 { 0x00, 0x12, 0x12 },
3359 { 0x00, 0x13, 0x13 },
3360 { 0x00, 0x14, 0x14 },
3361 { 0x00, 0x15, 0x15 },
3362 { 0x00, 0x16, 0x16 },
3363 { 0x00, 0x17, 0x17 },
3364 { 0x00, 0x18, 0x18 },
3365 { 0x00, 0x19, 0x19 },
3366 { 0x00, 0x1a, 0x1a },
3367 { 0x00, 0x1b, 0x1b },
3368 { 0x00, 0x1c, 0x1c },
3369 { 0x00, 0x1d, 0x1d },
3370 { 0x00, 0x1e, 0x1e },
3371 { 0x00, 0x1f, 0x1f },
3372 { 0x00, 0x20, 0x20 },
3373 { 0x00, 0x21, 0x21 },
3374 { 0x00, 0x22, 0x22 },
3375 { 0x00, 0x23, 0x23 },
3376 { 0x00, 0x24, 0x24 },
3377 { 0x00, 0x25, 0x25 },
3378 { 0x00, 0x26, 0x26 },
3379 { 0x00, 0x27, 0x27 },
3380 { 0x00, 0x28, 0x28 },
3381 { 0x00, 0x29, 0x29 },
3382 { 0x00, 0x2a, 0x2a },
3383 { 0x00, 0x2b, 0x2b },
3384 { 0x00, 0x2c, 0x2c },
3385 { 0x00, 0x2d, 0x2d },
3386 { 0x00, 0x2e, 0x2e },
3387 { 0x00, 0x2f, 0x2f },
3388 { 0x00, 0x30, 0x30 },
3389 { 0x00, 0x31, 0x31 },
3390 { 0x00, 0x32, 0x32 },
3391 { 0x00, 0x33, 0x33 },
3392 { 0x00, 0x34, 0x34 },
3393 { 0x00, 0x35, 0x35 },
3394 { 0x00, 0x36, 0x36 },
3395 { 0x00, 0x37, 0x37 },
3396 { 0x00, 0x38, 0x38 },
3397 { 0x00, 0x39, 0x39 },
3398 { 0x00, 0x3a, 0x3a },
3399 { 0x00, 0x3b, 0x3b },
3400 { 0x00, 0x3c, 0x3c },
3401 { 0x00, 0x3d, 0x3d },
3402 { 0x00, 0x3e, 0x3e },
3403 { 0x00, 0x3f, 0x3f },
3404 { 0x00, 0x40, 0x40 },
3405 { 0x01, 0x61, 0x41 },
3406 { 0x01, 0x62, 0x42 },
3407 { 0x01, 0x63, 0x43 },
3408 { 0x01, 0x64, 0x44 },
3409 { 0x01, 0x65, 0x45 },
3410 { 0x01, 0x66, 0x46 },
3411 { 0x01, 0x67, 0x47 },
3412 { 0x01, 0x68, 0x48 },
3413 { 0x01, 0x69, 0x49 },
3414 { 0x01, 0x6a, 0x4a },
3415 { 0x01, 0x6b, 0x4b },
3416 { 0x01, 0x6c, 0x4c },
3417 { 0x01, 0x6d, 0x4d },
3418 { 0x01, 0x6e, 0x4e },
3419 { 0x01, 0x6f, 0x4f },
3420 { 0x01, 0x70, 0x50 },
3421 { 0x01, 0x71, 0x51 },
3422 { 0x01, 0x72, 0x52 },
3423 { 0x01, 0x73, 0x53 },
3424 { 0x01, 0x74, 0x54 },
3425 { 0x01, 0x75, 0x55 },
3426 { 0x01, 0x76, 0x56 },
3427 { 0x01, 0x77, 0x57 },
3428 { 0x01, 0x78, 0x58 },
3429 { 0x01, 0x79, 0x59 },
3430 { 0x01, 0x7a, 0x5a },
3431 { 0x00, 0x5b, 0x5b },
3432 { 0x00, 0x5c, 0x5c },
3433 { 0x00, 0x5d, 0x5d },
3434 { 0x00, 0x5e, 0x5e },
3435 { 0x00, 0x5f, 0x5f },
3436 { 0x00, 0x60, 0x60 },
3437 { 0x00, 0x61, 0x41 },
3438 { 0x00, 0x62, 0x42 },
3439 { 0x00, 0x63, 0x43 },
3440 { 0x00, 0x64, 0x44 },
3441 { 0x00, 0x65, 0x45 },
3442 { 0x00, 0x66, 0x46 },
3443 { 0x00, 0x67, 0x47 },
3444 { 0x00, 0x68, 0x48 },
3445 { 0x00, 0x69, 0x49 },
3446 { 0x00, 0x6a, 0x4a },
3447 { 0x00, 0x6b, 0x4b },
3448 { 0x00, 0x6c, 0x4c },
3449 { 0x00, 0x6d, 0x4d },
3450 { 0x00, 0x6e, 0x4e },
3451 { 0x00, 0x6f, 0x4f },
3452 { 0x00, 0x70, 0x50 },
3453 { 0x00, 0x71, 0x51 },
3454 { 0x00, 0x72, 0x52 },
3455 { 0x00, 0x73, 0x53 },
3456 { 0x00, 0x74, 0x54 },
3457 { 0x00, 0x75, 0x55 },
3458 { 0x00, 0x76, 0x56 },
3459 { 0x00, 0x77, 0x57 },
3460 { 0x00, 0x78, 0x58 },
3461 { 0x00, 0x79, 0x59 },
3462 { 0x00, 0x7a, 0x5a },
3463 { 0x00, 0x7b, 0x7b },
3464 { 0x00, 0x7c, 0x7c },
3465 { 0x00, 0x7d, 0x7d },
3466 { 0x00, 0x7e, 0x7e },
3467 { 0x00, 0x7f, 0x7f },
3468 { 0x00, 0x80, 0x80 },
3469 { 0x00, 0x81, 0x81 },
3470 { 0x00, 0x82, 0x82 },
3471 { 0x00, 0x83, 0x83 },
3472 { 0x00, 0x84, 0x84 },
3473 { 0x00, 0x85, 0x85 },
3474 { 0x00, 0x86, 0x86 },
3475 { 0x00, 0x87, 0x87 },
3476 { 0x00, 0x88, 0x88 },
3477 { 0x00, 0x89, 0x89 },
3478 { 0x00, 0x8a, 0x8a },
3479 { 0x00, 0x8b, 0x8b },
3480 { 0x00, 0x8c, 0x8c },
3481 { 0x00, 0x8d, 0x8d },
3482 { 0x00, 0x8e, 0x8e },
3483 { 0x00, 0x8f, 0x8f },
3484 { 0x00, 0x90, 0x90 },
3485 { 0x00, 0x91, 0x91 },
3486 { 0x00, 0x92, 0x92 },
3487 { 0x00, 0x93, 0x93 },
3488 { 0x00, 0x94, 0x94 },
3489 { 0x00, 0x95, 0x95 },
3490 { 0x00, 0x96, 0x96 },
3491 { 0x00, 0x97, 0x97 },
3492 { 0x00, 0x98, 0x98 },
3493 { 0x00, 0x99, 0x99 },
3494 { 0x00, 0x9a, 0x9a },
3495 { 0x00, 0x9b, 0x9b },
3496 { 0x00, 0x9c, 0x9c },
3497 { 0x00, 0x9d, 0x9d },
3498 { 0x00, 0x9e, 0x9e },
3499 { 0x00, 0x9f, 0x9f },
3500 { 0x00, 0xa0, 0xa0 },
3501 { 0x00, 0xa1, 0xa1 },
3502 { 0x00, 0xa2, 0xa2 },
3503 { 0x00, 0xa3, 0xb3 },
3504 { 0x00, 0xa4, 0xa4 },
3505 { 0x00, 0xa5, 0xa5 },
3506 { 0x00, 0xa6, 0xa6 },
3507 { 0x00, 0xa7, 0xa7 },
3508 { 0x00, 0xa8, 0xa8 },
3509 { 0x00, 0xa9, 0xa9 },
3510 { 0x00, 0xaa, 0xaa },
3511 { 0x00, 0xab, 0xab },
3512 { 0x00, 0xac, 0xac },
3513 { 0x00, 0xad, 0xad },
3514 { 0x00, 0xae, 0xae },
3515 { 0x00, 0xaf, 0xaf },
3516 { 0x00, 0xb0, 0xb0 },
3517 { 0x00, 0xb1, 0xb1 },
3518 { 0x00, 0xb2, 0xb2 },
3519 { 0x01, 0xa3, 0xb3 },
3520 { 0x00, 0xb4, 0xb4 },
3521 { 0x00, 0xb5, 0xb5 },
3522 { 0x00, 0xb6, 0xb6 },
3523 { 0x00, 0xb7, 0xb7 },
3524 { 0x00, 0xb8, 0xb8 },
3525 { 0x00, 0xb9, 0xb9 },
3526 { 0x00, 0xba, 0xba },
3527 { 0x00, 0xbb, 0xbb },
3528 { 0x00, 0xbc, 0xbc },
3529 { 0x00, 0xbd, 0xbd },
3530 { 0x00, 0xbe, 0xbe },
3531 { 0x00, 0xbf, 0xbf },
3532 { 0x00, 0xc0, 0xe0 },
3533 { 0x00, 0xc1, 0xe1 },
3534 { 0x00, 0xc2, 0xe2 },
3535 { 0x00, 0xc3, 0xe3 },
3536 { 0x00, 0xc4, 0xe4 },
3537 { 0x00, 0xc5, 0xe5 },
3538 { 0x00, 0xc6, 0xe6 },
3539 { 0x00, 0xc7, 0xe7 },
3540 { 0x00, 0xc8, 0xe8 },
3541 { 0x00, 0xc9, 0xe9 },
3542 { 0x00, 0xca, 0xea },
3543 { 0x00, 0xcb, 0xeb },
3544 { 0x00, 0xcc, 0xec },
3545 { 0x00, 0xcd, 0xed },
3546 { 0x00, 0xce, 0xee },
3547 { 0x00, 0xcf, 0xef },
3548 { 0x00, 0xd0, 0xf0 },
3549 { 0x00, 0xd1, 0xf1 },
3550 { 0x00, 0xd2, 0xf2 },
3551 { 0x00, 0xd3, 0xf3 },
3552 { 0x00, 0xd4, 0xf4 },
3553 { 0x00, 0xd5, 0xf5 },
3554 { 0x00, 0xd6, 0xf6 },
3555 { 0x00, 0xd7, 0xf7 },
3556 { 0x00, 0xd8, 0xf8 },
3557 { 0x00, 0xd9, 0xf9 },
3558 { 0x00, 0xda, 0xfa },
3559 { 0x00, 0xdb, 0xfb },
3560 { 0x00, 0xdc, 0xfc },
3561 { 0x00, 0xdd, 0xfd },
3562 { 0x00, 0xde, 0xfe },
3563 { 0x00, 0xdf, 0xff },
3564 { 0x01, 0xc0, 0xe0 },
3565 { 0x01, 0xc1, 0xe1 },
3566 { 0x01, 0xc2, 0xe2 },
3567 { 0x01, 0xc3, 0xe3 },
3568 { 0x01, 0xc4, 0xe4 },
3569 { 0x01, 0xc5, 0xe5 },
3570 { 0x01, 0xc6, 0xe6 },
3571 { 0x01, 0xc7, 0xe7 },
3572 { 0x01, 0xc8, 0xe8 },
3573 { 0x01, 0xc9, 0xe9 },
3574 { 0x01, 0xca, 0xea },
3575 { 0x01, 0xcb, 0xeb },
3576 { 0x01, 0xcc, 0xec },
3577 { 0x01, 0xcd, 0xed },
3578 { 0x01, 0xce, 0xee },
3579 { 0x01, 0xcf, 0xef },
3580 { 0x01, 0xd0, 0xf0 },
3581 { 0x01, 0xd1, 0xf1 },
3582 { 0x01, 0xd2, 0xf2 },
3583 { 0x01, 0xd3, 0xf3 },
3584 { 0x01, 0xd4, 0xf4 },
3585 { 0x01, 0xd5, 0xf5 },
3586 { 0x01, 0xd6, 0xf6 },
3587 { 0x01, 0xd7, 0xf7 },
3588 { 0x01, 0xd8, 0xf8 },
3589 { 0x01, 0xd9, 0xf9 },
3590 { 0x01, 0xda, 0xfa },
3591 { 0x01, 0xdb, 0xfb },
3592 { 0x01, 0xdc, 0xfc },
3593 { 0x01, 0xdd, 0xfd },
3594 { 0x01, 0xde, 0xfe },
3595 { 0x01, 0xdf, 0xff }
3596 };
3597 
3598 static struct cs_info koi8u_tbl[] = {
3599 { 0x00, 0x00, 0x00 },
3600 { 0x00, 0x01, 0x01 },
3601 { 0x00, 0x02, 0x02 },
3602 { 0x00, 0x03, 0x03 },
3603 { 0x00, 0x04, 0x04 },
3604 { 0x00, 0x05, 0x05 },
3605 { 0x00, 0x06, 0x06 },
3606 { 0x00, 0x07, 0x07 },
3607 { 0x00, 0x08, 0x08 },
3608 { 0x00, 0x09, 0x09 },
3609 { 0x00, 0x0a, 0x0a },
3610 { 0x00, 0x0b, 0x0b },
3611 { 0x00, 0x0c, 0x0c },
3612 { 0x00, 0x0d, 0x0d },
3613 { 0x00, 0x0e, 0x0e },
3614 { 0x00, 0x0f, 0x0f },
3615 { 0x00, 0x10, 0x10 },
3616 { 0x00, 0x11, 0x11 },
3617 { 0x00, 0x12, 0x12 },
3618 { 0x00, 0x13, 0x13 },
3619 { 0x00, 0x14, 0x14 },
3620 { 0x00, 0x15, 0x15 },
3621 { 0x00, 0x16, 0x16 },
3622 { 0x00, 0x17, 0x17 },
3623 { 0x00, 0x18, 0x18 },
3624 { 0x00, 0x19, 0x19 },
3625 { 0x00, 0x1a, 0x1a },
3626 { 0x00, 0x1b, 0x1b },
3627 { 0x00, 0x1c, 0x1c },
3628 { 0x00, 0x1d, 0x1d },
3629 { 0x00, 0x1e, 0x1e },
3630 { 0x00, 0x1f, 0x1f },
3631 { 0x00, 0x20, 0x20 },
3632 { 0x00, 0x21, 0x21 },
3633 { 0x00, 0x22, 0x22 },
3634 { 0x00, 0x23, 0x23 },
3635 { 0x00, 0x24, 0x24 },
3636 { 0x00, 0x25, 0x25 },
3637 { 0x00, 0x26, 0x26 },
3638 { 0x00, 0x27, 0x27 },
3639 { 0x00, 0x28, 0x28 },
3640 { 0x00, 0x29, 0x29 },
3641 { 0x00, 0x2a, 0x2a },
3642 { 0x00, 0x2b, 0x2b },
3643 { 0x00, 0x2c, 0x2c },
3644 { 0x00, 0x2d, 0x2d },
3645 { 0x00, 0x2e, 0x2e },
3646 { 0x00, 0x2f, 0x2f },
3647 { 0x00, 0x30, 0x30 },
3648 { 0x00, 0x31, 0x31 },
3649 { 0x00, 0x32, 0x32 },
3650 { 0x00, 0x33, 0x33 },
3651 { 0x00, 0x34, 0x34 },
3652 { 0x00, 0x35, 0x35 },
3653 { 0x00, 0x36, 0x36 },
3654 { 0x00, 0x37, 0x37 },
3655 { 0x00, 0x38, 0x38 },
3656 { 0x00, 0x39, 0x39 },
3657 { 0x00, 0x3a, 0x3a },
3658 { 0x00, 0x3b, 0x3b },
3659 { 0x00, 0x3c, 0x3c },
3660 { 0x00, 0x3d, 0x3d },
3661 { 0x00, 0x3e, 0x3e },
3662 { 0x00, 0x3f, 0x3f },
3663 { 0x00, 0x40, 0x40 },
3664 { 0x01, 0x61, 0x41 },
3665 { 0x01, 0x62, 0x42 },
3666 { 0x01, 0x63, 0x43 },
3667 { 0x01, 0x64, 0x44 },
3668 { 0x01, 0x65, 0x45 },
3669 { 0x01, 0x66, 0x46 },
3670 { 0x01, 0x67, 0x47 },
3671 { 0x01, 0x68, 0x48 },
3672 { 0x01, 0x69, 0x49 },
3673 { 0x01, 0x6a, 0x4a },
3674 { 0x01, 0x6b, 0x4b },
3675 { 0x01, 0x6c, 0x4c },
3676 { 0x01, 0x6d, 0x4d },
3677 { 0x01, 0x6e, 0x4e },
3678 { 0x01, 0x6f, 0x4f },
3679 { 0x01, 0x70, 0x50 },
3680 { 0x01, 0x71, 0x51 },
3681 { 0x01, 0x72, 0x52 },
3682 { 0x01, 0x73, 0x53 },
3683 { 0x01, 0x74, 0x54 },
3684 { 0x01, 0x75, 0x55 },
3685 { 0x01, 0x76, 0x56 },
3686 { 0x01, 0x77, 0x57 },
3687 { 0x01, 0x78, 0x58 },
3688 { 0x01, 0x79, 0x59 },
3689 { 0x01, 0x7a, 0x5a },
3690 { 0x00, 0x5b, 0x5b },
3691 { 0x00, 0x5c, 0x5c },
3692 { 0x00, 0x5d, 0x5d },
3693 { 0x00, 0x5e, 0x5e },
3694 { 0x00, 0x5f, 0x5f },
3695 { 0x00, 0x60, 0x60 },
3696 { 0x00, 0x61, 0x41 },
3697 { 0x00, 0x62, 0x42 },
3698 { 0x00, 0x63, 0x43 },
3699 { 0x00, 0x64, 0x44 },
3700 { 0x00, 0x65, 0x45 },
3701 { 0x00, 0x66, 0x46 },
3702 { 0x00, 0x67, 0x47 },
3703 { 0x00, 0x68, 0x48 },
3704 { 0x00, 0x69, 0x49 },
3705 { 0x00, 0x6a, 0x4a },
3706 { 0x00, 0x6b, 0x4b },
3707 { 0x00, 0x6c, 0x4c },
3708 { 0x00, 0x6d, 0x4d },
3709 { 0x00, 0x6e, 0x4e },
3710 { 0x00, 0x6f, 0x4f },
3711 { 0x00, 0x70, 0x50 },
3712 { 0x00, 0x71, 0x51 },
3713 { 0x00, 0x72, 0x52 },
3714 { 0x00, 0x73, 0x53 },
3715 { 0x00, 0x74, 0x54 },
3716 { 0x00, 0x75, 0x55 },
3717 { 0x00, 0x76, 0x56 },
3718 { 0x00, 0x77, 0x57 },
3719 { 0x00, 0x78, 0x58 },
3720 { 0x00, 0x79, 0x59 },
3721 { 0x00, 0x7a, 0x5a },
3722 { 0x00, 0x7b, 0x7b },
3723 { 0x00, 0x7c, 0x7c },
3724 { 0x00, 0x7d, 0x7d },
3725 { 0x00, 0x7e, 0x7e },
3726 { 0x00, 0x7f, 0x7f },
3727 { 0x00, 0x80, 0x80 },
3728 { 0x00, 0x81, 0x81 },
3729 { 0x00, 0x82, 0x82 },
3730 { 0x00, 0x83, 0x83 },
3731 { 0x00, 0x84, 0x84 },
3732 { 0x00, 0x85, 0x85 },
3733 { 0x00, 0x86, 0x86 },
3734 { 0x00, 0x87, 0x87 },
3735 { 0x00, 0x88, 0x88 },
3736 { 0x00, 0x89, 0x89 },
3737 { 0x00, 0x8a, 0x8a },
3738 { 0x00, 0x8b, 0x8b },
3739 { 0x00, 0x8c, 0x8c },
3740 { 0x00, 0x8d, 0x8d },
3741 { 0x00, 0x8e, 0x8e },
3742 { 0x00, 0x8f, 0x8f },
3743 { 0x00, 0x90, 0x90 },
3744 { 0x00, 0x91, 0x91 },
3745 { 0x00, 0x92, 0x92 },
3746 { 0x00, 0x93, 0x93 },
3747 { 0x00, 0x94, 0x94 },
3748 { 0x00, 0x95, 0x95 },
3749 { 0x00, 0x96, 0x96 },
3750 { 0x00, 0x97, 0x97 },
3751 { 0x00, 0x98, 0x98 },
3752 { 0x00, 0x99, 0x99 },
3753 { 0x00, 0x9a, 0x9a },
3754 { 0x00, 0x9b, 0x9b },
3755 { 0x00, 0x9c, 0x9c },
3756 { 0x00, 0x9d, 0x9d },
3757 { 0x00, 0x9e, 0x9e },
3758 { 0x00, 0x9f, 0x9f },
3759 { 0x00, 0xa0, 0xa0 },
3760 { 0x00, 0xa1, 0xa1 },
3761 { 0x00, 0xa2, 0xa2 },
3762 { 0x00, 0xa3, 0xb3 },
3763 { 0x00, 0xa4, 0xb4 }, /* ie */
3764 { 0x00, 0xa5, 0xa5 },
3765 { 0x00, 0xa6, 0xb6 }, /* i */
3766 { 0x00, 0xa7, 0xb7 }, /* ii */
3767 { 0x00, 0xa8, 0xa8 },
3768 { 0x00, 0xa9, 0xa9 },
3769 { 0x00, 0xaa, 0xaa },
3770 { 0x00, 0xab, 0xab },
3771 { 0x00, 0xac, 0xac },
3772 { 0x00, 0xad, 0xbd }, /* g'' */
3773 { 0x00, 0xae, 0xae },
3774 { 0x00, 0xaf, 0xaf },
3775 { 0x00, 0xb0, 0xb0 },
3776 { 0x00, 0xb1, 0xb1 },
3777 { 0x00, 0xb2, 0xb2 },
3778 { 0x01, 0xa3, 0xb3 },
3779 { 0x00, 0xb4, 0xb4 }, /* IE */
3780 { 0x00, 0xb5, 0xb5 },
3781 { 0x00, 0xb6, 0xb6 }, /* I */
3782 { 0x00, 0xb7, 0xb7 }, /* II */
3783 { 0x00, 0xb8, 0xb8 },
3784 { 0x00, 0xb9, 0xb9 },
3785 { 0x00, 0xba, 0xba },
3786 { 0x00, 0xbb, 0xbb },
3787 { 0x00, 0xbc, 0xbc },
3788 { 0x00, 0xbd, 0xbd },
3789 { 0x00, 0xbe, 0xbe },
3790 { 0x00, 0xbf, 0xbf },
3791 { 0x00, 0xc0, 0xe0 },
3792 { 0x00, 0xc1, 0xe1 },
3793 { 0x00, 0xc2, 0xe2 },
3794 { 0x00, 0xc3, 0xe3 },
3795 { 0x00, 0xc4, 0xe4 },
3796 { 0x00, 0xc5, 0xe5 },
3797 { 0x00, 0xc6, 0xe6 },
3798 { 0x00, 0xc7, 0xe7 },
3799 { 0x00, 0xc8, 0xe8 },
3800 { 0x00, 0xc9, 0xe9 },
3801 { 0x00, 0xca, 0xea },
3802 { 0x00, 0xcb, 0xeb },
3803 { 0x00, 0xcc, 0xec },
3804 { 0x00, 0xcd, 0xed },
3805 { 0x00, 0xce, 0xee },
3806 { 0x00, 0xcf, 0xef },
3807 { 0x00, 0xd0, 0xf0 },
3808 { 0x00, 0xd1, 0xf1 },
3809 { 0x00, 0xd2, 0xf2 },
3810 { 0x00, 0xd3, 0xf3 },
3811 { 0x00, 0xd4, 0xf4 },
3812 { 0x00, 0xd5, 0xf5 },
3813 { 0x00, 0xd6, 0xf6 },
3814 { 0x00, 0xd7, 0xf7 },
3815 { 0x00, 0xd8, 0xf8 },
3816 { 0x00, 0xd9, 0xf9 },
3817 { 0x00, 0xda, 0xfa },
3818 { 0x00, 0xdb, 0xfb },
3819 { 0x00, 0xdc, 0xfc },
3820 { 0x00, 0xdd, 0xfd },
3821 { 0x00, 0xde, 0xfe },
3822 { 0x00, 0xdf, 0xff },
3823 { 0x01, 0xc0, 0xe0 },
3824 { 0x01, 0xc1, 0xe1 },
3825 { 0x01, 0xc2, 0xe2 },
3826 { 0x01, 0xc3, 0xe3 },
3827 { 0x01, 0xc4, 0xe4 },
3828 { 0x01, 0xc5, 0xe5 },
3829 { 0x01, 0xc6, 0xe6 },
3830 { 0x01, 0xc7, 0xe7 },
3831 { 0x01, 0xc8, 0xe8 },
3832 { 0x01, 0xc9, 0xe9 },
3833 { 0x01, 0xca, 0xea },
3834 { 0x01, 0xcb, 0xeb },
3835 { 0x01, 0xcc, 0xec },
3836 { 0x01, 0xcd, 0xed },
3837 { 0x01, 0xce, 0xee },
3838 { 0x01, 0xcf, 0xef },
3839 { 0x01, 0xd0, 0xf0 },
3840 { 0x01, 0xd1, 0xf1 },
3841 { 0x01, 0xd2, 0xf2 },
3842 { 0x01, 0xd3, 0xf3 },
3843 { 0x01, 0xd4, 0xf4 },
3844 { 0x01, 0xd5, 0xf5 },
3845 { 0x01, 0xd6, 0xf6 },
3846 { 0x01, 0xd7, 0xf7 },
3847 { 0x01, 0xd8, 0xf8 },
3848 { 0x01, 0xd9, 0xf9 },
3849 { 0x01, 0xda, 0xfa },
3850 { 0x01, 0xdb, 0xfb },
3851 { 0x01, 0xdc, 0xfc },
3852 { 0x01, 0xdd, 0xfd },
3853 { 0x01, 0xde, 0xfe },
3854 { 0x01, 0xdf, 0xff }
3855 };
3856 
3857 static struct cs_info cp1251_tbl[] = {
3858 { 0x00, 0x00, 0x00 },
3859 { 0x00, 0x01, 0x01 },
3860 { 0x00, 0x02, 0x02 },
3861 { 0x00, 0x03, 0x03 },
3862 { 0x00, 0x04, 0x04 },
3863 { 0x00, 0x05, 0x05 },
3864 { 0x00, 0x06, 0x06 },
3865 { 0x00, 0x07, 0x07 },
3866 { 0x00, 0x08, 0x08 },
3867 { 0x00, 0x09, 0x09 },
3868 { 0x00, 0x0a, 0x0a },
3869 { 0x00, 0x0b, 0x0b },
3870 { 0x00, 0x0c, 0x0c },
3871 { 0x00, 0x0d, 0x0d },
3872 { 0x00, 0x0e, 0x0e },
3873 { 0x00, 0x0f, 0x0f },
3874 { 0x00, 0x10, 0x10 },
3875 { 0x00, 0x11, 0x11 },
3876 { 0x00, 0x12, 0x12 },
3877 { 0x00, 0x13, 0x13 },
3878 { 0x00, 0x14, 0x14 },
3879 { 0x00, 0x15, 0x15 },
3880 { 0x00, 0x16, 0x16 },
3881 { 0x00, 0x17, 0x17 },
3882 { 0x00, 0x18, 0x18 },
3883 { 0x00, 0x19, 0x19 },
3884 { 0x00, 0x1a, 0x1a },
3885 { 0x00, 0x1b, 0x1b },
3886 { 0x00, 0x1c, 0x1c },
3887 { 0x00, 0x1d, 0x1d },
3888 { 0x00, 0x1e, 0x1e },
3889 { 0x00, 0x1f, 0x1f },
3890 { 0x00, 0x20, 0x20 },
3891 { 0x00, 0x21, 0x21 },
3892 { 0x00, 0x22, 0x22 },
3893 { 0x00, 0x23, 0x23 },
3894 { 0x00, 0x24, 0x24 },
3895 { 0x00, 0x25, 0x25 },
3896 { 0x00, 0x26, 0x26 },
3897 { 0x00, 0x27, 0x27 },
3898 { 0x00, 0x28, 0x28 },
3899 { 0x00, 0x29, 0x29 },
3900 { 0x00, 0x2a, 0x2a },
3901 { 0x00, 0x2b, 0x2b },
3902 { 0x00, 0x2c, 0x2c },
3903 { 0x00, 0x2d, 0x2d },
3904 { 0x00, 0x2e, 0x2e },
3905 { 0x00, 0x2f, 0x2f },
3906 { 0x00, 0x30, 0x30 },
3907 { 0x00, 0x31, 0x31 },
3908 { 0x00, 0x32, 0x32 },
3909 { 0x00, 0x33, 0x33 },
3910 { 0x00, 0x34, 0x34 },
3911 { 0x00, 0x35, 0x35 },
3912 { 0x00, 0x36, 0x36 },
3913 { 0x00, 0x37, 0x37 },
3914 { 0x00, 0x38, 0x38 },
3915 { 0x00, 0x39, 0x39 },
3916 { 0x00, 0x3a, 0x3a },
3917 { 0x00, 0x3b, 0x3b },
3918 { 0x00, 0x3c, 0x3c },
3919 { 0x00, 0x3d, 0x3d },
3920 { 0x00, 0x3e, 0x3e },
3921 { 0x00, 0x3f, 0x3f },
3922 { 0x00, 0x40, 0x40 },
3923 { 0x01, 0x61, 0x41 },
3924 { 0x01, 0x62, 0x42 },
3925 { 0x01, 0x63, 0x43 },
3926 { 0x01, 0x64, 0x44 },
3927 { 0x01, 0x65, 0x45 },
3928 { 0x01, 0x66, 0x46 },
3929 { 0x01, 0x67, 0x47 },
3930 { 0x01, 0x68, 0x48 },
3931 { 0x01, 0x69, 0x49 },
3932 { 0x01, 0x6a, 0x4a },
3933 { 0x01, 0x6b, 0x4b },
3934 { 0x01, 0x6c, 0x4c },
3935 { 0x01, 0x6d, 0x4d },
3936 { 0x01, 0x6e, 0x4e },
3937 { 0x01, 0x6f, 0x4f },
3938 { 0x01, 0x70, 0x50 },
3939 { 0x01, 0x71, 0x51 },
3940 { 0x01, 0x72, 0x52 },
3941 { 0x01, 0x73, 0x53 },
3942 { 0x01, 0x74, 0x54 },
3943 { 0x01, 0x75, 0x55 },
3944 { 0x01, 0x76, 0x56 },
3945 { 0x01, 0x77, 0x57 },
3946 { 0x01, 0x78, 0x58 },
3947 { 0x01, 0x79, 0x59 },
3948 { 0x01, 0x7a, 0x5a },
3949 { 0x00, 0x5b, 0x5b },
3950 { 0x00, 0x5c, 0x5c },
3951 { 0x00, 0x5d, 0x5d },
3952 { 0x00, 0x5e, 0x5e },
3953 { 0x00, 0x5f, 0x5f },
3954 { 0x00, 0x60, 0x60 },
3955 { 0x00, 0x61, 0x41 },
3956 { 0x00, 0x62, 0x42 },
3957 { 0x00, 0x63, 0x43 },
3958 { 0x00, 0x64, 0x44 },
3959 { 0x00, 0x65, 0x45 },
3960 { 0x00, 0x66, 0x46 },
3961 { 0x00, 0x67, 0x47 },
3962 { 0x00, 0x68, 0x48 },
3963 { 0x00, 0x69, 0x49 },
3964 { 0x00, 0x6a, 0x4a },
3965 { 0x00, 0x6b, 0x4b },
3966 { 0x00, 0x6c, 0x4c },
3967 { 0x00, 0x6d, 0x4d },
3968 { 0x00, 0x6e, 0x4e },
3969 { 0x00, 0x6f, 0x4f },
3970 { 0x00, 0x70, 0x50 },
3971 { 0x00, 0x71, 0x51 },
3972 { 0x00, 0x72, 0x52 },
3973 { 0x00, 0x73, 0x53 },
3974 { 0x00, 0x74, 0x54 },
3975 { 0x00, 0x75, 0x55 },
3976 { 0x00, 0x76, 0x56 },
3977 { 0x00, 0x77, 0x57 },
3978 { 0x00, 0x78, 0x58 },
3979 { 0x00, 0x79, 0x59 },
3980 { 0x00, 0x7a, 0x5a },
3981 { 0x00, 0x7b, 0x7b },
3982 { 0x00, 0x7c, 0x7c },
3983 { 0x00, 0x7d, 0x7d },
3984 { 0x00, 0x7e, 0x7e },
3985 { 0x00, 0x7f, 0x7f },
3986 { 0x01, 0x90, 0x80 },
3987 { 0x01, 0x83, 0x81 },
3988 { 0x00, 0x82, 0x82 },
3989 { 0x00, 0x83, 0x81 },
3990 { 0x00, 0x84, 0x84 },
3991 { 0x00, 0x85, 0x85 },
3992 { 0x00, 0x86, 0x86 },
3993 { 0x00, 0x87, 0x87 },
3994 { 0x00, 0x88, 0x88 },
3995 { 0x00, 0x89, 0x89 },
3996 { 0x01, 0x9a, 0x8a },
3997 { 0x00, 0x8b, 0x8b },
3998 { 0x01, 0x9c, 0x8c },
3999 { 0x01, 0x9d, 0x8d },
4000 { 0x01, 0x9e, 0x8e },
4001 { 0x01, 0x9f, 0x8f },
4002 { 0x00, 0x90, 0x80 },
4003 { 0x00, 0x91, 0x91 },
4004 { 0x00, 0x92, 0x92 },
4005 { 0x00, 0x93, 0x93 },
4006 { 0x00, 0x94, 0x94 },
4007 { 0x00, 0x95, 0x95 },
4008 { 0x00, 0x96, 0x96 },
4009 { 0x00, 0x97, 0x97 },
4010 { 0x00, 0x98, 0x98 },
4011 { 0x00, 0x99, 0x99 },
4012 { 0x00, 0x9a, 0x8a },
4013 { 0x00, 0x9b, 0x9b },
4014 { 0x00, 0x9c, 0x8c },
4015 { 0x00, 0x9d, 0x8d },
4016 { 0x00, 0x9e, 0x8e },
4017 { 0x00, 0x9f, 0x8f },
4018 { 0x00, 0xa0, 0xa0 },
4019 { 0x01, 0xa2, 0xa1 },
4020 { 0x00, 0xa2, 0xa1 },
4021 { 0x01, 0xbc, 0xa3 },
4022 { 0x00, 0xa4, 0xa4 },
4023 { 0x01, 0xb4, 0xa5 },
4024 { 0x00, 0xa6, 0xa6 },
4025 { 0x00, 0xa7, 0xa7 },
4026 { 0x01, 0xb8, 0xa8 },
4027 { 0x00, 0xa9, 0xa9 },
4028 { 0x01, 0xba, 0xaa },
4029 { 0x00, 0xab, 0xab },
4030 { 0x00, 0xac, 0xac },
4031 { 0x00, 0xad, 0xad },
4032 { 0x00, 0xae, 0xae },
4033 { 0x01, 0xbf, 0xaf },
4034 { 0x00, 0xb0, 0xb0 },
4035 { 0x00, 0xb1, 0xb1 },
4036 { 0x01, 0xb3, 0xb2 },
4037 { 0x00, 0xb3, 0xb2 },
4038 { 0x00, 0xb4, 0xa5 },
4039 { 0x00, 0xb5, 0xb5 },
4040 { 0x00, 0xb6, 0xb6 },
4041 { 0x00, 0xb7, 0xb7 },
4042 { 0x00, 0xb8, 0xa8 },
4043 { 0x00, 0xb9, 0xb9 },
4044 { 0x00, 0xba, 0xaa },
4045 { 0x00, 0xbb, 0xbb },
4046 { 0x00, 0xbc, 0xa3 },
4047 { 0x01, 0xbe, 0xbd },
4048 { 0x00, 0xbe, 0xbd },
4049 { 0x00, 0xbf, 0xaf },
4050 { 0x01, 0xe0, 0xc0 },
4051 { 0x01, 0xe1, 0xc1 },
4052 { 0x01, 0xe2, 0xc2 },
4053 { 0x01, 0xe3, 0xc3 },
4054 { 0x01, 0xe4, 0xc4 },
4055 { 0x01, 0xe5, 0xc5 },
4056 { 0x01, 0xe6, 0xc6 },
4057 { 0x01, 0xe7, 0xc7 },
4058 { 0x01, 0xe8, 0xc8 },
4059 { 0x01, 0xe9, 0xc9 },
4060 { 0x01, 0xea, 0xca },
4061 { 0x01, 0xeb, 0xcb },
4062 { 0x01, 0xec, 0xcc },
4063 { 0x01, 0xed, 0xcd },
4064 { 0x01, 0xee, 0xce },
4065 { 0x01, 0xef, 0xcf },
4066 { 0x01, 0xf0, 0xd0 },
4067 { 0x01, 0xf1, 0xd1 },
4068 { 0x01, 0xf2, 0xd2 },
4069 { 0x01, 0xf3, 0xd3 },
4070 { 0x01, 0xf4, 0xd4 },
4071 { 0x01, 0xf5, 0xd5 },
4072 { 0x01, 0xf6, 0xd6 },
4073 { 0x01, 0xf7, 0xd7 },
4074 { 0x01, 0xf8, 0xd8 },
4075 { 0x01, 0xf9, 0xd9 },
4076 { 0x01, 0xfa, 0xda },
4077 { 0x01, 0xfb, 0xdb },
4078 { 0x01, 0xfc, 0xdc },
4079 { 0x01, 0xfd, 0xdd },
4080 { 0x01, 0xfe, 0xde },
4081 { 0x01, 0xff, 0xdf },
4082 { 0x00, 0xe0, 0xc0 },
4083 { 0x00, 0xe1, 0xc1 },
4084 { 0x00, 0xe2, 0xc2 },
4085 { 0x00, 0xe3, 0xc3 },
4086 { 0x00, 0xe4, 0xc4 },
4087 { 0x00, 0xe5, 0xc5 },
4088 { 0x00, 0xe6, 0xc6 },
4089 { 0x00, 0xe7, 0xc7 },
4090 { 0x00, 0xe8, 0xc8 },
4091 { 0x00, 0xe9, 0xc9 },
4092 { 0x00, 0xea, 0xca },
4093 { 0x00, 0xeb, 0xcb },
4094 { 0x00, 0xec, 0xcc },
4095 { 0x00, 0xed, 0xcd },
4096 { 0x00, 0xee, 0xce },
4097 { 0x00, 0xef, 0xcf },
4098 { 0x00, 0xf0, 0xd0 },
4099 { 0x00, 0xf1, 0xd1 },
4100 { 0x00, 0xf2, 0xd2 },
4101 { 0x00, 0xf3, 0xd3 },
4102 { 0x00, 0xf4, 0xd4 },
4103 { 0x00, 0xf5, 0xd5 },
4104 { 0x00, 0xf6, 0xd6 },
4105 { 0x00, 0xf7, 0xd7 },
4106 { 0x00, 0xf8, 0xd8 },
4107 { 0x00, 0xf9, 0xd9 },
4108 { 0x00, 0xfa, 0xda },
4109 { 0x00, 0xfb, 0xdb },
4110 { 0x00, 0xfc, 0xdc },
4111 { 0x00, 0xfd, 0xdd },
4112 { 0x00, 0xfe, 0xde },
4113 { 0x00, 0xff, 0xdf }
4114 };
4115 
4116 static struct cs_info iso13_tbl[] = {
4117 { 0x00, 0x00, 0x00 },
4118 { 0x00, 0x01, 0x01 },
4119 { 0x00, 0x02, 0x02 },
4120 { 0x00, 0x03, 0x03 },
4121 { 0x00, 0x04, 0x04 },
4122 { 0x00, 0x05, 0x05 },
4123 { 0x00, 0x06, 0x06 },
4124 { 0x00, 0x07, 0x07 },
4125 { 0x00, 0x08, 0x08 },
4126 { 0x00, 0x09, 0x09 },
4127 { 0x00, 0x0A, 0x0A },
4128 { 0x00, 0x0B, 0x0B },
4129 { 0x00, 0x0C, 0x0C },
4130 { 0x00, 0x0D, 0x0D },
4131 { 0x00, 0x0E, 0x0E },
4132 { 0x00, 0x0F, 0x0F },
4133 { 0x00, 0x10, 0x10 },
4134 { 0x00, 0x11, 0x11 },
4135 { 0x00, 0x12, 0x12 },
4136 { 0x00, 0x13, 0x13 },
4137 { 0x00, 0x14, 0x14 },
4138 { 0x00, 0x15, 0x15 },
4139 { 0x00, 0x16, 0x16 },
4140 { 0x00, 0x17, 0x17 },
4141 { 0x00, 0x18, 0x18 },
4142 { 0x00, 0x19, 0x19 },
4143 { 0x00, 0x1A, 0x1A },
4144 { 0x00, 0x1B, 0x1B },
4145 { 0x00, 0x1C, 0x1C },
4146 { 0x00, 0x1D, 0x1D },
4147 { 0x00, 0x1E, 0x1E },
4148 { 0x00, 0x1F, 0x1F },
4149 { 0x00, 0x20, 0x20 },
4150 { 0x00, 0x21, 0x21 },
4151 { 0x00, 0x22, 0x22 },
4152 { 0x00, 0x23, 0x23 },
4153 { 0x00, 0x24, 0x24 },
4154 { 0x00, 0x25, 0x25 },
4155 { 0x00, 0x26, 0x26 },
4156 { 0x00, 0x27, 0x27 },
4157 { 0x00, 0x28, 0x28 },
4158 { 0x00, 0x29, 0x29 },
4159 { 0x00, 0x2A, 0x2A },
4160 { 0x00, 0x2B, 0x2B },
4161 { 0x00, 0x2C, 0x2C },
4162 { 0x00, 0x2D, 0x2D },
4163 { 0x00, 0x2E, 0x2E },
4164 { 0x00, 0x2F, 0x2F },
4165 { 0x00, 0x30, 0x30 },
4166 { 0x00, 0x31, 0x31 },
4167 { 0x00, 0x32, 0x32 },
4168 { 0x00, 0x33, 0x33 },
4169 { 0x00, 0x34, 0x34 },
4170 { 0x00, 0x35, 0x35 },
4171 { 0x00, 0x36, 0x36 },
4172 { 0x00, 0x37, 0x37 },
4173 { 0x00, 0x38, 0x38 },
4174 { 0x00, 0x39, 0x39 },
4175 { 0x00, 0x3A, 0x3A },
4176 { 0x00, 0x3B, 0x3B },
4177 { 0x00, 0x3C, 0x3C },
4178 { 0x00, 0x3D, 0x3D },
4179 { 0x00, 0x3E, 0x3E },
4180 { 0x00, 0x3F, 0x3F },
4181 { 0x00, 0x40, 0x40 },
4182 { 0x01, 0x61, 0x41 },
4183 { 0x01, 0x62, 0x42 },
4184 { 0x01, 0x63, 0x43 },
4185 { 0x01, 0x64, 0x44 },
4186 { 0x01, 0x65, 0x45 },
4187 { 0x01, 0x66, 0x46 },
4188 { 0x01, 0x67, 0x47 },
4189 { 0x01, 0x68, 0x48 },
4190 { 0x01, 0x69, 0x49 },
4191 { 0x01, 0x6A, 0x4A },
4192 { 0x01, 0x6B, 0x4B },
4193 { 0x01, 0x6C, 0x4C },
4194 { 0x01, 0x6D, 0x4D },
4195 { 0x01, 0x6E, 0x4E },
4196 { 0x01, 0x6F, 0x4F },
4197 { 0x01, 0x70, 0x50 },
4198 { 0x01, 0x71, 0x51 },
4199 { 0x01, 0x72, 0x52 },
4200 { 0x01, 0x73, 0x53 },
4201 { 0x01, 0x74, 0x54 },
4202 { 0x01, 0x75, 0x55 },
4203 { 0x01, 0x76, 0x56 },
4204 { 0x01, 0x77, 0x57 },
4205 { 0x01, 0x78, 0x58 },
4206 { 0x01, 0x79, 0x59 },
4207 { 0x01, 0x7A, 0x5A },
4208 { 0x00, 0x5B, 0x5B },
4209 { 0x00, 0x5C, 0x5C },
4210 { 0x00, 0x5D, 0x5D },
4211 { 0x00, 0x5E, 0x5E },
4212 { 0x00, 0x5F, 0x5F },
4213 { 0x00, 0x60, 0x60 },
4214 { 0x00, 0x61, 0x41 },
4215 { 0x00, 0x62, 0x42 },
4216 { 0x00, 0x63, 0x43 },
4217 { 0x00, 0x64, 0x44 },
4218 { 0x00, 0x65, 0x45 },
4219 { 0x00, 0x66, 0x46 },
4220 { 0x00, 0x67, 0x47 },
4221 { 0x00, 0x68, 0x48 },
4222 { 0x00, 0x69, 0x49 },
4223 { 0x00, 0x6A, 0x4A },
4224 { 0x00, 0x6B, 0x4B },
4225 { 0x00, 0x6C, 0x4C },
4226 { 0x00, 0x6D, 0x4D },
4227 { 0x00, 0x6E, 0x4E },
4228 { 0x00, 0x6F, 0x4F },
4229 { 0x00, 0x70, 0x50 },
4230 { 0x00, 0x71, 0x51 },
4231 { 0x00, 0x72, 0x52 },
4232 { 0x00, 0x73, 0x53 },
4233 { 0x00, 0x74, 0x54 },
4234 { 0x00, 0x75, 0x55 },
4235 { 0x00, 0x76, 0x56 },
4236 { 0x00, 0x77, 0x57 },
4237 { 0x00, 0x78, 0x58 },
4238 { 0x00, 0x79, 0x59 },
4239 { 0x00, 0x7A, 0x5A },
4240 { 0x00, 0x7B, 0x7B },
4241 { 0x00, 0x7C, 0x7C },
4242 { 0x00, 0x7D, 0x7D },
4243 { 0x00, 0x7E, 0x7E },
4244 { 0x00, 0x7F, 0x7F },
4245 { 0x00, 0x80, 0x80 },
4246 { 0x00, 0x81, 0x81 },
4247 { 0x00, 0x82, 0x82 },
4248 { 0x00, 0x83, 0x83 },
4249 { 0x00, 0x84, 0x84 },
4250 { 0x00, 0x85, 0x85 },
4251 { 0x00, 0x86, 0x86 },
4252 { 0x00, 0x87, 0x87 },
4253 { 0x00, 0x88, 0x88 },
4254 { 0x00, 0x89, 0x89 },
4255 { 0x00, 0x8A, 0x8A },
4256 { 0x00, 0x8B, 0x8B },
4257 { 0x00, 0x8C, 0x8C },
4258 { 0x00, 0x8D, 0x8D },
4259 { 0x00, 0x8E, 0x8E },
4260 { 0x00, 0x8F, 0x8F },
4261 { 0x00, 0x90, 0x90 },
4262 { 0x00, 0x91, 0x91 },
4263 { 0x00, 0x92, 0x92 },
4264 { 0x00, 0x93, 0x93 },
4265 { 0x00, 0x94, 0x94 },
4266 { 0x00, 0x95, 0x95 },
4267 { 0x00, 0x96, 0x96 },
4268 { 0x00, 0x97, 0x97 },
4269 { 0x00, 0x98, 0x98 },
4270 { 0x00, 0x99, 0x99 },
4271 { 0x00, 0x9A, 0x9A },
4272 { 0x00, 0x9B, 0x9B },
4273 { 0x00, 0x9C, 0x9C },
4274 { 0x00, 0x9D, 0x9D },
4275 { 0x00, 0x9E, 0x9E },
4276 { 0x00, 0x9F, 0x9F },
4277 { 0x00, 0xA0, 0xA0 },
4278 { 0x00, 0xA1, 0xA1 },
4279 { 0x00, 0xA2, 0xA2 },
4280 { 0x00, 0xA3, 0xA3 },
4281 { 0x00, 0xA4, 0xA4 },
4282 { 0x00, 0xA5, 0xA5 },
4283 { 0x00, 0xA6, 0xA6 },
4284 { 0x00, 0xA7, 0xA7 },
4285 { 0x01, 0xB8, 0xA8 },
4286 { 0x00, 0xA9, 0xA9 },
4287 { 0x01, 0xBA, 0xAA },
4288 { 0x00, 0xAB, 0xAB },
4289 { 0x00, 0xAC, 0xAC },
4290 { 0x00, 0xAD, 0xAD },
4291 { 0x00, 0xAE, 0xAE },
4292 { 0x01, 0xBF, 0xAF },
4293 { 0x00, 0xB0, 0xB0 },
4294 { 0x00, 0xB1, 0xB1 },
4295 { 0x00, 0xB2, 0xB2 },
4296 { 0x00, 0xB3, 0xB3 },
4297 { 0x00, 0xB4, 0xB4 },
4298 { 0x00, 0xB5, 0xB5 },
4299 { 0x00, 0xB6, 0xB6 },
4300 { 0x00, 0xB7, 0xB7 },
4301 { 0x00, 0xB8, 0xA8 },
4302 { 0x00, 0xB9, 0xB9 },
4303 { 0x00, 0xBA, 0xAA },
4304 { 0x00, 0xBB, 0xBB },
4305 { 0x00, 0xBC, 0xBC },
4306 { 0x00, 0xBD, 0xBD },
4307 { 0x00, 0xBE, 0xBE },
4308 { 0x00, 0xBF, 0xAF },
4309 { 0x01, 0xE0, 0xC0 },
4310 { 0x01, 0xE1, 0xC1 },
4311 { 0x01, 0xE2, 0xC2 },
4312 { 0x01, 0xE3, 0xC3 },
4313 { 0x01, 0xE4, 0xC4 },
4314 { 0x01, 0xE5, 0xC5 },
4315 { 0x01, 0xE6, 0xC6 },
4316 { 0x01, 0xE7, 0xC7 },
4317 { 0x01, 0xE8, 0xC8 },
4318 { 0x01, 0xE9, 0xC9 },
4319 { 0x01, 0xEA, 0xCA },
4320 { 0x01, 0xEB, 0xCB },
4321 { 0x01, 0xEC, 0xCC },
4322 { 0x01, 0xED, 0xCD },
4323 { 0x01, 0xEE, 0xCE },
4324 { 0x01, 0xEF, 0xCF },
4325 { 0x01, 0xF0, 0xD0 },
4326 { 0x01, 0xF1, 0xD1 },
4327 { 0x01, 0xF2, 0xD2 },
4328 { 0x01, 0xF3, 0xD3 },
4329 { 0x01, 0xF4, 0xD4 },
4330 { 0x01, 0xF5, 0xD5 },
4331 { 0x01, 0xF6, 0xD6 },
4332 { 0x00, 0xD7, 0xD7 },
4333 { 0x01, 0xF8, 0xD8 },
4334 { 0x01, 0xF9, 0xD9 },
4335 { 0x01, 0xFA, 0xDA },
4336 { 0x01, 0xFB, 0xDB },
4337 { 0x01, 0xFC, 0xDC },
4338 { 0x01, 0xFD, 0xDD },
4339 { 0x01, 0xFE, 0xDE },
4340 { 0x00, 0xDF, 0xDF },
4341 { 0x00, 0xE0, 0xC0 },
4342 { 0x00, 0xE1, 0xC1 },
4343 { 0x00, 0xE2, 0xC2 },
4344 { 0x00, 0xE3, 0xC3 },
4345 { 0x00, 0xE4, 0xC4 },
4346 { 0x00, 0xE5, 0xC5 },
4347 { 0x00, 0xE6, 0xC6 },
4348 { 0x00, 0xE7, 0xC7 },
4349 { 0x00, 0xE8, 0xC8 },
4350 { 0x00, 0xE9, 0xC9 },
4351 { 0x00, 0xEA, 0xCA },
4352 { 0x00, 0xEB, 0xCB },
4353 { 0x00, 0xEC, 0xCC },
4354 { 0x00, 0xED, 0xCD },
4355 { 0x00, 0xEE, 0xCE },
4356 { 0x00, 0xEF, 0xCF },
4357 { 0x00, 0xF0, 0xD0 },
4358 { 0x00, 0xF1, 0xD1 },
4359 { 0x00, 0xF2, 0xD2 },
4360 { 0x00, 0xF3, 0xD3 },
4361 { 0x00, 0xF4, 0xD4 },
4362 { 0x00, 0xF5, 0xD5 },
4363 { 0x00, 0xF6, 0xD6 },
4364 { 0x00, 0xF7, 0xF7 },
4365 { 0x00, 0xF8, 0xD8 },
4366 { 0x00, 0xF9, 0xD9 },
4367 { 0x00, 0xFA, 0xDA },
4368 { 0x00, 0xFB, 0xDB },
4369 { 0x00, 0xFC, 0xDC },
4370 { 0x00, 0xFD, 0xDD },
4371 { 0x00, 0xFE, 0xDE },
4372 { 0x00, 0xFF, 0xFF }
4373 };
4374 
4375 
4376 static struct cs_info iso14_tbl[] = {
4377 { 0x00, 0x00, 0x00 },
4378 { 0x00, 0x01, 0x01 },
4379 { 0x00, 0x02, 0x02 },
4380 { 0x00, 0x03, 0x03 },
4381 { 0x00, 0x04, 0x04 },
4382 { 0x00, 0x05, 0x05 },
4383 { 0x00, 0x06, 0x06 },
4384 { 0x00, 0x07, 0x07 },
4385 { 0x00, 0x08, 0x08 },
4386 { 0x00, 0x09, 0x09 },
4387 { 0x00, 0x0a, 0x0a },
4388 { 0x00, 0x0b, 0x0b },
4389 { 0x00, 0x0c, 0x0c },
4390 { 0x00, 0x0d, 0x0d },
4391 { 0x00, 0x0e, 0x0e },
4392 { 0x00, 0x0f, 0x0f },
4393 { 0x00, 0x10, 0x10 },
4394 { 0x00, 0x11, 0x11 },
4395 { 0x00, 0x12, 0x12 },
4396 { 0x00, 0x13, 0x13 },
4397 { 0x00, 0x14, 0x14 },
4398 { 0x00, 0x15, 0x15 },
4399 { 0x00, 0x16, 0x16 },
4400 { 0x00, 0x17, 0x17 },
4401 { 0x00, 0x18, 0x18 },
4402 { 0x00, 0x19, 0x19 },
4403 { 0x00, 0x1a, 0x1a },
4404 { 0x00, 0x1b, 0x1b },
4405 { 0x00, 0x1c, 0x1c },
4406 { 0x00, 0x1d, 0x1d },
4407 { 0x00, 0x1e, 0x1e },
4408 { 0x00, 0x1f, 0x1f },
4409 { 0x00, 0x20, 0x20 },
4410 { 0x00, 0x21, 0x21 },
4411 { 0x00, 0x22, 0x22 },
4412 { 0x00, 0x23, 0x23 },
4413 { 0x00, 0x24, 0x24 },
4414 { 0x00, 0x25, 0x25 },
4415 { 0x00, 0x26, 0x26 },
4416 { 0x00, 0x27, 0x27 },
4417 { 0x00, 0x28, 0x28 },
4418 { 0x00, 0x29, 0x29 },
4419 { 0x00, 0x2a, 0x2a },
4420 { 0x00, 0x2b, 0x2b },
4421 { 0x00, 0x2c, 0x2c },
4422 { 0x00, 0x2d, 0x2d },
4423 { 0x00, 0x2e, 0x2e },
4424 { 0x00, 0x2f, 0x2f },
4425 { 0x00, 0x30, 0x30 },
4426 { 0x00, 0x31, 0x31 },
4427 { 0x00, 0x32, 0x32 },
4428 { 0x00, 0x33, 0x33 },
4429 { 0x00, 0x34, 0x34 },
4430 { 0x00, 0x35, 0x35 },
4431 { 0x00, 0x36, 0x36 },
4432 { 0x00, 0x37, 0x37 },
4433 { 0x00, 0x38, 0x38 },
4434 { 0x00, 0x39, 0x39 },
4435 { 0x00, 0x3a, 0x3a },
4436 { 0x00, 0x3b, 0x3b },
4437 { 0x00, 0x3c, 0x3c },
4438 { 0x00, 0x3d, 0x3d },
4439 { 0x00, 0x3e, 0x3e },
4440 { 0x00, 0x3f, 0x3f },
4441 { 0x00, 0x40, 0x40 },
4442 { 0x01, 0x61, 0x41 },
4443 { 0x01, 0x62, 0x42 },
4444 { 0x01, 0x63, 0x43 },
4445 { 0x01, 0x64, 0x44 },
4446 { 0x01, 0x65, 0x45 },
4447 { 0x01, 0x66, 0x46 },
4448 { 0x01, 0x67, 0x47 },
4449 { 0x01, 0x68, 0x48 },
4450 { 0x01, 0x69, 0x49 },
4451 { 0x01, 0x6a, 0x4a },
4452 { 0x01, 0x6b, 0x4b },
4453 { 0x01, 0x6c, 0x4c },
4454 { 0x01, 0x6d, 0x4d },
4455 { 0x01, 0x6e, 0x4e },
4456 { 0x01, 0x6f, 0x4f },
4457 { 0x01, 0x70, 0x50 },
4458 { 0x01, 0x71, 0x51 },
4459 { 0x01, 0x72, 0x52 },
4460 { 0x01, 0x73, 0x53 },
4461 { 0x01, 0x74, 0x54 },
4462 { 0x01, 0x75, 0x55 },
4463 { 0x01, 0x76, 0x56 },
4464 { 0x01, 0x77, 0x57 },
4465 { 0x01, 0x78, 0x58 },
4466 { 0x01, 0x79, 0x59 },
4467 { 0x01, 0x7a, 0x5a },
4468 { 0x00, 0x5b, 0x5b },
4469 { 0x00, 0x5c, 0x5c },
4470 { 0x00, 0x5d, 0x5d },
4471 { 0x00, 0x5e, 0x5e },
4472 { 0x00, 0x5f, 0x5f },
4473 { 0x00, 0x60, 0x60 },
4474 { 0x00, 0x61, 0x41 },
4475 { 0x00, 0x62, 0x42 },
4476 { 0x00, 0x63, 0x43 },
4477 { 0x00, 0x64, 0x44 },
4478 { 0x00, 0x65, 0x45 },
4479 { 0x00, 0x66, 0x46 },
4480 { 0x00, 0x67, 0x47 },
4481 { 0x00, 0x68, 0x48 },
4482 { 0x00, 0x69, 0x49 },
4483 { 0x00, 0x6a, 0x4a },
4484 { 0x00, 0x6b, 0x4b },
4485 { 0x00, 0x6c, 0x4c },
4486 { 0x00, 0x6d, 0x4d },
4487 { 0x00, 0x6e, 0x4e },
4488 { 0x00, 0x6f, 0x4f },
4489 { 0x00, 0x70, 0x50 },
4490 { 0x00, 0x71, 0x51 },
4491 { 0x00, 0x72, 0x52 },
4492 { 0x00, 0x73, 0x53 },
4493 { 0x00, 0x74, 0x54 },
4494 { 0x00, 0x75, 0x55 },
4495 { 0x00, 0x76, 0x56 },
4496 { 0x00, 0x77, 0x57 },
4497 { 0x00, 0x78, 0x58 },
4498 { 0x00, 0x79, 0x59 },
4499 { 0x00, 0x7a, 0x5a },
4500 { 0x00, 0x7b, 0x7b },
4501 { 0x00, 0x7c, 0x7c },
4502 { 0x00, 0x7d, 0x7d },
4503 { 0x00, 0x7e, 0x7e },
4504 { 0x00, 0x7f, 0x7f },
4505 { 0x00, 0x80, 0x80 },
4506 { 0x00, 0x81, 0x81 },
4507 { 0x00, 0x82, 0x82 },
4508 { 0x00, 0x83, 0x83 },
4509 { 0x00, 0x84, 0x84 },
4510 { 0x00, 0x85, 0x85 },
4511 { 0x00, 0x86, 0x86 },
4512 { 0x00, 0x87, 0x87 },
4513 { 0x00, 0x88, 0x88 },
4514 { 0x00, 0x89, 0x89 },
4515 { 0x00, 0x8a, 0x8a },
4516 { 0x00, 0x8b, 0x8b },
4517 { 0x00, 0x8c, 0x8c },
4518 { 0x00, 0x8d, 0x8d },
4519 { 0x00, 0x8e, 0x8e },
4520 { 0x00, 0x8f, 0x8f },
4521 { 0x00, 0x90, 0x90 },
4522 { 0x00, 0x91, 0x91 },
4523 { 0x00, 0x92, 0x92 },
4524 { 0x00, 0x93, 0x93 },
4525 { 0x00, 0x94, 0x94 },
4526 { 0x00, 0x95, 0x95 },
4527 { 0x00, 0x96, 0x96 },
4528 { 0x00, 0x97, 0x97 },
4529 { 0x00, 0x98, 0x98 },
4530 { 0x00, 0x99, 0x99 },
4531 { 0x00, 0x9a, 0x9a },
4532 { 0x00, 0x9b, 0x9b },
4533 { 0x00, 0x9c, 0x9c },
4534 { 0x00, 0x9d, 0x9d },
4535 { 0x00, 0x9e, 0x9e },
4536 { 0x00, 0x9f, 0x9f },
4537 { 0x00, 0xa0, 0xa0 },
4538 { 0x01, 0xa2, 0xa1 },
4539 { 0x00, 0xa2, 0xa1 },
4540 { 0x00, 0xa3, 0xa3 },
4541 { 0x01, 0xa5, 0xa4 },
4542 { 0x00, 0xa5, 0xa4 },
4543 { 0x01, 0xa6, 0xab },
4544 { 0x00, 0xa7, 0xa7 },
4545 { 0x01, 0xb8, 0xa8 },
4546 { 0x00, 0xa9, 0xa9 },
4547 { 0x01, 0xba, 0xaa },
4548 { 0x00, 0xab, 0xa6 },
4549 { 0x01, 0xbc, 0xac },
4550 { 0x00, 0xad, 0xad },
4551 { 0x00, 0xae, 0xae },
4552 { 0x01, 0xff, 0xaf },
4553 { 0x01, 0xb1, 0xb0 },
4554 { 0x00, 0xb1, 0xb0 },
4555 { 0x01, 0xb3, 0xb2 },
4556 { 0x00, 0xb3, 0xb2 },
4557 { 0x01, 0xb5, 0xb4 },
4558 { 0x00, 0xb5, 0xb4 },
4559 { 0x00, 0xb6, 0xb6 },
4560 { 0x01, 0xb9, 0xb7 },
4561 { 0x00, 0xb8, 0xa8 },
4562 { 0x00, 0xb9, 0xb6 },
4563 { 0x00, 0xba, 0xaa },
4564 { 0x01, 0xbf, 0xbb },
4565 { 0x00, 0xbc, 0xac },
4566 { 0x01, 0xbe, 0xbd },
4567 { 0x00, 0xbe, 0xbd },
4568 { 0x00, 0xbf, 0xbb },
4569 { 0x01, 0xe0, 0xc0 },
4570 { 0x01, 0xe1, 0xc1 },
4571 { 0x01, 0xe2, 0xc2 },
4572 { 0x01, 0xe3, 0xc3 },
4573 { 0x01, 0xe4, 0xc4 },
4574 { 0x01, 0xe5, 0xc5 },
4575 { 0x01, 0xe6, 0xc6 },
4576 { 0x01, 0xe7, 0xc7 },
4577 { 0x01, 0xe8, 0xc8 },
4578 { 0x01, 0xe9, 0xc9 },
4579 { 0x01, 0xea, 0xca },
4580 { 0x01, 0xeb, 0xcb },
4581 { 0x01, 0xec, 0xcc },
4582 { 0x01, 0xed, 0xcd },
4583 { 0x01, 0xee, 0xce },
4584 { 0x01, 0xef, 0xcf },
4585 { 0x01, 0xf0, 0xd0 },
4586 { 0x01, 0xf1, 0xd1 },
4587 { 0x01, 0xf2, 0xd2 },
4588 { 0x01, 0xf3, 0xd3 },
4589 { 0x01, 0xf4, 0xd4 },
4590 { 0x01, 0xf5, 0xd5 },
4591 { 0x01, 0xf6, 0xd6 },
4592 { 0x01, 0xf7, 0xd7 },
4593 { 0x01, 0xf8, 0xd8 },
4594 { 0x01, 0xf9, 0xd9 },
4595 { 0x01, 0xfa, 0xda },
4596 { 0x01, 0xfb, 0xdb },
4597 { 0x01, 0xfc, 0xdc },
4598 { 0x01, 0xfd, 0xdd },
4599 { 0x01, 0xfe, 0xde },
4600 { 0x00, 0xdf, 0xdf },
4601 { 0x00, 0xe0, 0xc0 },
4602 { 0x00, 0xe1, 0xc1 },
4603 { 0x00, 0xe2, 0xc2 },
4604 { 0x00, 0xe3, 0xc3 },
4605 { 0x00, 0xe4, 0xc4 },
4606 { 0x00, 0xe5, 0xc5 },
4607 { 0x00, 0xe6, 0xc6 },
4608 { 0x00, 0xe7, 0xc7 },
4609 { 0x00, 0xe8, 0xc8 },
4610 { 0x00, 0xe9, 0xc9 },
4611 { 0x00, 0xea, 0xca },
4612 { 0x00, 0xeb, 0xcb },
4613 { 0x00, 0xec, 0xcc },
4614 { 0x00, 0xed, 0xcd },
4615 { 0x00, 0xee, 0xce },
4616 { 0x00, 0xef, 0xcf },
4617 { 0x00, 0xf0, 0xd0 },
4618 { 0x00, 0xf1, 0xd1 },
4619 { 0x00, 0xf2, 0xd2 },
4620 { 0x00, 0xf3, 0xd3 },
4621 { 0x00, 0xf4, 0xd4 },
4622 { 0x00, 0xf5, 0xd5 },
4623 { 0x00, 0xf6, 0xd6 },
4624 { 0x00, 0xf7, 0xd7 },
4625 { 0x00, 0xf8, 0xd8 },
4626 { 0x00, 0xf9, 0xd9 },
4627 { 0x00, 0xfa, 0xda },
4628 { 0x00, 0xfb, 0xdb },
4629 { 0x00, 0xfc, 0xdc },
4630 { 0x00, 0xfd, 0xdd },
4631 { 0x00, 0xfe, 0xde },
4632 { 0x00, 0xff, 0xff }
4633 };
4634 
4635 static struct cs_info iso15_tbl[] = {
4636 { 0x00, 0x00, 0x00 },
4637 { 0x00, 0x01, 0x01 },
4638 { 0x00, 0x02, 0x02 },
4639 { 0x00, 0x03, 0x03 },
4640 { 0x00, 0x04, 0x04 },
4641 { 0x00, 0x05, 0x05 },
4642 { 0x00, 0x06, 0x06 },
4643 { 0x00, 0x07, 0x07 },
4644 { 0x00, 0x08, 0x08 },
4645 { 0x00, 0x09, 0x09 },
4646 { 0x00, 0x0a, 0x0a },
4647 { 0x00, 0x0b, 0x0b },
4648 { 0x00, 0x0c, 0x0c },
4649 { 0x00, 0x0d, 0x0d },
4650 { 0x00, 0x0e, 0x0e },
4651 { 0x00, 0x0f, 0x0f },
4652 { 0x00, 0x10, 0x10 },
4653 { 0x00, 0x11, 0x11 },
4654 { 0x00, 0x12, 0x12 },
4655 { 0x00, 0x13, 0x13 },
4656 { 0x00, 0x14, 0x14 },
4657 { 0x00, 0x15, 0x15 },
4658 { 0x00, 0x16, 0x16 },
4659 { 0x00, 0x17, 0x17 },
4660 { 0x00, 0x18, 0x18 },
4661 { 0x00, 0x19, 0x19 },
4662 { 0x00, 0x1a, 0x1a },
4663 { 0x00, 0x1b, 0x1b },
4664 { 0x00, 0x1c, 0x1c },
4665 { 0x00, 0x1d, 0x1d },
4666 { 0x00, 0x1e, 0x1e },
4667 { 0x00, 0x1f, 0x1f },
4668 { 0x00, 0x20, 0x20 },
4669 { 0x00, 0x21, 0x21 },
4670 { 0x00, 0x22, 0x22 },
4671 { 0x00, 0x23, 0x23 },
4672 { 0x00, 0x24, 0x24 },
4673 { 0x00, 0x25, 0x25 },
4674 { 0x00, 0x26, 0x26 },
4675 { 0x00, 0x27, 0x27 },
4676 { 0x00, 0x28, 0x28 },
4677 { 0x00, 0x29, 0x29 },
4678 { 0x00, 0x2a, 0x2a },
4679 { 0x00, 0x2b, 0x2b },
4680 { 0x00, 0x2c, 0x2c },
4681 { 0x00, 0x2d, 0x2d },
4682 { 0x00, 0x2e, 0x2e },
4683 { 0x00, 0x2f, 0x2f },
4684 { 0x00, 0x30, 0x30 },
4685 { 0x00, 0x31, 0x31 },
4686 { 0x00, 0x32, 0x32 },
4687 { 0x00, 0x33, 0x33 },
4688 { 0x00, 0x34, 0x34 },
4689 { 0x00, 0x35, 0x35 },
4690 { 0x00, 0x36, 0x36 },
4691 { 0x00, 0x37, 0x37 },
4692 { 0x00, 0x38, 0x38 },
4693 { 0x00, 0x39, 0x39 },
4694 { 0x00, 0x3a, 0x3a },
4695 { 0x00, 0x3b, 0x3b },
4696 { 0x00, 0x3c, 0x3c },
4697 { 0x00, 0x3d, 0x3d },
4698 { 0x00, 0x3e, 0x3e },
4699 { 0x00, 0x3f, 0x3f },
4700 { 0x00, 0x40, 0x40 },
4701 { 0x01, 0x61, 0x41 },
4702 { 0x01, 0x62, 0x42 },
4703 { 0x01, 0x63, 0x43 },
4704 { 0x01, 0x64, 0x44 },
4705 { 0x01, 0x65, 0x45 },
4706 { 0x01, 0x66, 0x46 },
4707 { 0x01, 0x67, 0x47 },
4708 { 0x01, 0x68, 0x48 },
4709 { 0x01, 0x69, 0x49 },
4710 { 0x01, 0x6a, 0x4a },
4711 { 0x01, 0x6b, 0x4b },
4712 { 0x01, 0x6c, 0x4c },
4713 { 0x01, 0x6d, 0x4d },
4714 { 0x01, 0x6e, 0x4e },
4715 { 0x01, 0x6f, 0x4f },
4716 { 0x01, 0x70, 0x50 },
4717 { 0x01, 0x71, 0x51 },
4718 { 0x01, 0x72, 0x52 },
4719 { 0x01, 0x73, 0x53 },
4720 { 0x01, 0x74, 0x54 },
4721 { 0x01, 0x75, 0x55 },
4722 { 0x01, 0x76, 0x56 },
4723 { 0x01, 0x77, 0x57 },
4724 { 0x01, 0x78, 0x58 },
4725 { 0x01, 0x79, 0x59 },
4726 { 0x01, 0x7a, 0x5a },
4727 { 0x00, 0x5b, 0x5b },
4728 { 0x00, 0x5c, 0x5c },
4729 { 0x00, 0x5d, 0x5d },
4730 { 0x00, 0x5e, 0x5e },
4731 { 0x00, 0x5f, 0x5f },
4732 { 0x00, 0x60, 0x60 },
4733 { 0x00, 0x61, 0x41 },
4734 { 0x00, 0x62, 0x42 },
4735 { 0x00, 0x63, 0x43 },
4736 { 0x00, 0x64, 0x44 },
4737 { 0x00, 0x65, 0x45 },
4738 { 0x00, 0x66, 0x46 },
4739 { 0x00, 0x67, 0x47 },
4740 { 0x00, 0x68, 0x48 },
4741 { 0x00, 0x69, 0x49 },
4742 { 0x00, 0x6a, 0x4a },
4743 { 0x00, 0x6b, 0x4b },
4744 { 0x00, 0x6c, 0x4c },
4745 { 0x00, 0x6d, 0x4d },
4746 { 0x00, 0x6e, 0x4e },
4747 { 0x00, 0x6f, 0x4f },
4748 { 0x00, 0x70, 0x50 },
4749 { 0x00, 0x71, 0x51 },
4750 { 0x00, 0x72, 0x52 },
4751 { 0x00, 0x73, 0x53 },
4752 { 0x00, 0x74, 0x54 },
4753 { 0x00, 0x75, 0x55 },
4754 { 0x00, 0x76, 0x56 },
4755 { 0x00, 0x77, 0x57 },
4756 { 0x00, 0x78, 0x58 },
4757 { 0x00, 0x79, 0x59 },
4758 { 0x00, 0x7a, 0x5a },
4759 { 0x00, 0x7b, 0x7b },
4760 { 0x00, 0x7c, 0x7c },
4761 { 0x00, 0x7d, 0x7d },
4762 { 0x00, 0x7e, 0x7e },
4763 { 0x00, 0x7f, 0x7f },
4764 { 0x00, 0x80, 0x80 },
4765 { 0x00, 0x81, 0x81 },
4766 { 0x00, 0x82, 0x82 },
4767 { 0x00, 0x83, 0x83 },
4768 { 0x00, 0x84, 0x84 },
4769 { 0x00, 0x85, 0x85 },
4770 { 0x00, 0x86, 0x86 },
4771 { 0x00, 0x87, 0x87 },
4772 { 0x00, 0x88, 0x88 },
4773 { 0x00, 0x89, 0x89 },
4774 { 0x00, 0x8a, 0x8a },
4775 { 0x00, 0x8b, 0x8b },
4776 { 0x00, 0x8c, 0x8c },
4777 { 0x00, 0x8d, 0x8d },
4778 { 0x00, 0x8e, 0x8e },
4779 { 0x00, 0x8f, 0x8f },
4780 { 0x00, 0x90, 0x90 },
4781 { 0x00, 0x91, 0x91 },
4782 { 0x00, 0x92, 0x92 },
4783 { 0x00, 0x93, 0x93 },
4784 { 0x00, 0x94, 0x94 },
4785 { 0x00, 0x95, 0x95 },
4786 { 0x00, 0x96, 0x96 },
4787 { 0x00, 0x97, 0x97 },
4788 { 0x00, 0x98, 0x98 },
4789 { 0x00, 0x99, 0x99 },
4790 { 0x00, 0x9a, 0x9a },
4791 { 0x00, 0x9b, 0x9b },
4792 { 0x00, 0x9c, 0x9c },
4793 { 0x00, 0x9d, 0x9d },
4794 { 0x00, 0x9e, 0x9e },
4795 { 0x00, 0x9f, 0x9f },
4796 { 0x00, 0xa0, 0xa0 },
4797 { 0x00, 0xa1, 0xa1 },
4798 { 0x00, 0xa2, 0xa2 },
4799 { 0x00, 0xa3, 0xa3 },
4800 { 0x00, 0xa4, 0xa4 },
4801 { 0x00, 0xa5, 0xa5 },
4802 { 0x01, 0xa8, 0xa6 },
4803 { 0x00, 0xa7, 0xa7 },
4804 { 0x00, 0xa8, 0xa6 },
4805 { 0x00, 0xa9, 0xa9 },
4806 { 0x00, 0xaa, 0xaa },
4807 { 0x00, 0xab, 0xab },
4808 { 0x00, 0xac, 0xac },
4809 { 0x00, 0xad, 0xad },
4810 { 0x00, 0xae, 0xae },
4811 { 0x00, 0xaf, 0xaf },
4812 { 0x00, 0xb0, 0xb0 },
4813 { 0x00, 0xb1, 0xb1 },
4814 { 0x00, 0xb2, 0xb2 },
4815 { 0x00, 0xb3, 0xb3 },
4816 { 0x01, 0xb8, 0xb4 },
4817 { 0x00, 0xb5, 0xb5 },
4818 { 0x00, 0xb6, 0xb6 },
4819 { 0x00, 0xb7, 0xb7 },
4820 { 0x00, 0xb8, 0xb4 },
4821 { 0x00, 0xb9, 0xb9 },
4822 { 0x00, 0xba, 0xba },
4823 { 0x00, 0xbb, 0xbb },
4824 { 0x01, 0xbd, 0xbc },
4825 { 0x00, 0xbd, 0xbc },
4826 { 0x01, 0xff, 0xbe },
4827 { 0x00, 0xbf, 0xbf },
4828 { 0x01, 0xe0, 0xc0 },
4829 { 0x01, 0xe1, 0xc1 },
4830 { 0x01, 0xe2, 0xc2 },
4831 { 0x01, 0xe3, 0xc3 },
4832 { 0x01, 0xe4, 0xc4 },
4833 { 0x01, 0xe5, 0xc5 },
4834 { 0x01, 0xe6, 0xc6 },
4835 { 0x01, 0xe7, 0xc7 },
4836 { 0x01, 0xe8, 0xc8 },
4837 { 0x01, 0xe9, 0xc9 },
4838 { 0x01, 0xea, 0xca },
4839 { 0x01, 0xeb, 0xcb },
4840 { 0x01, 0xec, 0xcc },
4841 { 0x01, 0xed, 0xcd },
4842 { 0x01, 0xee, 0xce },
4843 { 0x01, 0xef, 0xcf },
4844 { 0x01, 0xf0, 0xd0 },
4845 { 0x01, 0xf1, 0xd1 },
4846 { 0x01, 0xf2, 0xd2 },
4847 { 0x01, 0xf3, 0xd3 },
4848 { 0x01, 0xf4, 0xd4 },
4849 { 0x01, 0xf5, 0xd5 },
4850 { 0x01, 0xf6, 0xd6 },
4851 { 0x00, 0xd7, 0xd7 },
4852 { 0x01, 0xf8, 0xd8 },
4853 { 0x01, 0xf9, 0xd9 },
4854 { 0x01, 0xfa, 0xda },
4855 { 0x01, 0xfb, 0xdb },
4856 { 0x01, 0xfc, 0xdc },
4857 { 0x01, 0xfd, 0xdd },
4858 { 0x01, 0xfe, 0xde },
4859 { 0x00, 0xdf, 0xdf },
4860 { 0x00, 0xe0, 0xc0 },
4861 { 0x00, 0xe1, 0xc1 },
4862 { 0x00, 0xe2, 0xc2 },
4863 { 0x00, 0xe3, 0xc3 },
4864 { 0x00, 0xe4, 0xc4 },
4865 { 0x00, 0xe5, 0xc5 },
4866 { 0x00, 0xe6, 0xc6 },
4867 { 0x00, 0xe7, 0xc7 },
4868 { 0x00, 0xe8, 0xc8 },
4869 { 0x00, 0xe9, 0xc9 },
4870 { 0x00, 0xea, 0xca },
4871 { 0x00, 0xeb, 0xcb },
4872 { 0x00, 0xec, 0xcc },
4873 { 0x00, 0xed, 0xcd },
4874 { 0x00, 0xee, 0xce },
4875 { 0x00, 0xef, 0xcf },
4876 { 0x00, 0xf0, 0xd0 },
4877 { 0x00, 0xf1, 0xd1 },
4878 { 0x00, 0xf2, 0xd2 },
4879 { 0x00, 0xf3, 0xd3 },
4880 { 0x00, 0xf4, 0xd4 },
4881 { 0x00, 0xf5, 0xd5 },
4882 { 0x00, 0xf6, 0xd6 },
4883 { 0x00, 0xf7, 0xf7 },
4884 { 0x00, 0xf8, 0xd8 },
4885 { 0x00, 0xf9, 0xd9 },
4886 { 0x00, 0xfa, 0xda },
4887 { 0x00, 0xfb, 0xdb },
4888 { 0x00, 0xfc, 0xdc },
4889 { 0x00, 0xfd, 0xdd },
4890 { 0x00, 0xfe, 0xde },
4891 { 0x00, 0xff, 0xbe }
4892 };
4893 
4894 static struct cs_info iscii_devanagari_tbl[] = {
4895 { 0x00, 0x00, 0x00 },
4896 { 0x00, 0x01, 0x01 },
4897 { 0x00, 0x02, 0x02 },
4898 { 0x00, 0x03, 0x03 },
4899 { 0x00, 0x04, 0x04 },
4900 { 0x00, 0x05, 0x05 },
4901 { 0x00, 0x06, 0x06 },
4902 { 0x00, 0x07, 0x07 },
4903 { 0x00, 0x08, 0x08 },
4904 { 0x00, 0x09, 0x09 },
4905 { 0x00, 0x0a, 0x0a },
4906 { 0x00, 0x0b, 0x0b },
4907 { 0x00, 0x0c, 0x0c },
4908 { 0x00, 0x0d, 0x0d },
4909 { 0x00, 0x0e, 0x0e },
4910 { 0x00, 0x0f, 0x0f },
4911 { 0x00, 0x10, 0x10 },
4912 { 0x00, 0x11, 0x11 },
4913 { 0x00, 0x12, 0x12 },
4914 { 0x00, 0x13, 0x13 },
4915 { 0x00, 0x14, 0x14 },
4916 { 0x00, 0x15, 0x15 },
4917 { 0x00, 0x16, 0x16 },
4918 { 0x00, 0x17, 0x17 },
4919 { 0x00, 0x18, 0x18 },
4920 { 0x00, 0x19, 0x19 },
4921 { 0x00, 0x1a, 0x1a },
4922 { 0x00, 0x1b, 0x1b },
4923 { 0x00, 0x1c, 0x1c },
4924 { 0x00, 0x1d, 0x1d },
4925 { 0x00, 0x1e, 0x1e },
4926 { 0x00, 0x1f, 0x1f },
4927 { 0x00, 0x20, 0x20 },
4928 { 0x00, 0x21, 0x21 },
4929 { 0x00, 0x22, 0x22 },
4930 { 0x00, 0x23, 0x23 },
4931 { 0x00, 0x24, 0x24 },
4932 { 0x00, 0x25, 0x25 },
4933 { 0x00, 0x26, 0x26 },
4934 { 0x00, 0x27, 0x27 },
4935 { 0x00, 0x28, 0x28 },
4936 { 0x00, 0x29, 0x29 },
4937 { 0x00, 0x2a, 0x2a },
4938 { 0x00, 0x2b, 0x2b },
4939 { 0x00, 0x2c, 0x2c },
4940 { 0x00, 0x2d, 0x2d },
4941 { 0x00, 0x2e, 0x2e },
4942 { 0x00, 0x2f, 0x2f },
4943 { 0x00, 0x30, 0x30 },
4944 { 0x00, 0x31, 0x31 },
4945 { 0x00, 0x32, 0x32 },
4946 { 0x00, 0x33, 0x33 },
4947 { 0x00, 0x34, 0x34 },
4948 { 0x00, 0x35, 0x35 },
4949 { 0x00, 0x36, 0x36 },
4950 { 0x00, 0x37, 0x37 },
4951 { 0x00, 0x38, 0x38 },
4952 { 0x00, 0x39, 0x39 },
4953 { 0x00, 0x3a, 0x3a },
4954 { 0x00, 0x3b, 0x3b },
4955 { 0x00, 0x3c, 0x3c },
4956 { 0x00, 0x3d, 0x3d },
4957 { 0x00, 0x3e, 0x3e },
4958 { 0x00, 0x3f, 0x3f },
4959 { 0x00, 0x40, 0x40 },
4960 { 0x01, 0x61, 0x41 },
4961 { 0x01, 0x62, 0x42 },
4962 { 0x01, 0x63, 0x43 },
4963 { 0x01, 0x64, 0x44 },
4964 { 0x01, 0x65, 0x45 },
4965 { 0x01, 0x66, 0x46 },
4966 { 0x01, 0x67, 0x47 },
4967 { 0x01, 0x68, 0x48 },
4968 { 0x01, 0x69, 0x49 },
4969 { 0x01, 0x6a, 0x4a },
4970 { 0x01, 0x6b, 0x4b },
4971 { 0x01, 0x6c, 0x4c },
4972 { 0x01, 0x6d, 0x4d },
4973 { 0x01, 0x6e, 0x4e },
4974 { 0x01, 0x6f, 0x4f },
4975 { 0x01, 0x70, 0x50 },
4976 { 0x01, 0x71, 0x51 },
4977 { 0x01, 0x72, 0x52 },
4978 { 0x01, 0x73, 0x53 },
4979 { 0x01, 0x74, 0x54 },
4980 { 0x01, 0x75, 0x55 },
4981 { 0x01, 0x76, 0x56 },
4982 { 0x01, 0x77, 0x57 },
4983 { 0x01, 0x78, 0x58 },
4984 { 0x01, 0x79, 0x59 },
4985 { 0x01, 0x7a, 0x5a },
4986 { 0x00, 0x5b, 0x5b },
4987 { 0x00, 0x5c, 0x5c },
4988 { 0x00, 0x5d, 0x5d },
4989 { 0x00, 0x5e, 0x5e },
4990 { 0x00, 0x5f, 0x5f },
4991 { 0x00, 0x60, 0x60 },
4992 { 0x00, 0x61, 0x41 },
4993 { 0x00, 0x62, 0x42 },
4994 { 0x00, 0x63, 0x43 },
4995 { 0x00, 0x64, 0x44 },
4996 { 0x00, 0x65, 0x45 },
4997 { 0x00, 0x66, 0x46 },
4998 { 0x00, 0x67, 0x47 },
4999 { 0x00, 0x68, 0x48 },
5000 { 0x00, 0x69, 0x49 },
5001 { 0x00, 0x6a, 0x4a },
5002 { 0x00, 0x6b, 0x4b },
5003 { 0x00, 0x6c, 0x4c },
5004 { 0x00, 0x6d, 0x4d },
5005 { 0x00, 0x6e, 0x4e },
5006 { 0x00, 0x6f, 0x4f },
5007 { 0x00, 0x70, 0x50 },
5008 { 0x00, 0x71, 0x51 },
5009 { 0x00, 0x72, 0x52 },
5010 { 0x00, 0x73, 0x53 },
5011 { 0x00, 0x74, 0x54 },
5012 { 0x00, 0x75, 0x55 },
5013 { 0x00, 0x76, 0x56 },
5014 { 0x00, 0x77, 0x57 },
5015 { 0x00, 0x78, 0x58 },
5016 { 0x00, 0x79, 0x59 },
5017 { 0x00, 0x7a, 0x5a },
5018 { 0x00, 0x7b, 0x7b },
5019 { 0x00, 0x7c, 0x7c },
5020 { 0x00, 0x7d, 0x7d },
5021 { 0x00, 0x7e, 0x7e },
5022 { 0x00, 0x7f, 0x7f },
5023 { 0x00, 0x80, 0x80 },
5024 { 0x00, 0x81, 0x81 },
5025 { 0x00, 0x82, 0x82 },
5026 { 0x00, 0x83, 0x83 },
5027 { 0x00, 0x84, 0x84 },
5028 { 0x00, 0x85, 0x85 },
5029 { 0x00, 0x86, 0x86 },
5030 { 0x00, 0x87, 0x87 },
5031 { 0x00, 0x88, 0x88 },
5032 { 0x00, 0x89, 0x89 },
5033 { 0x00, 0x8a, 0x8a },
5034 { 0x00, 0x8b, 0x8b },
5035 { 0x00, 0x8c, 0x8c },
5036 { 0x00, 0x8d, 0x8d },
5037 { 0x00, 0x8e, 0x8e },
5038 { 0x00, 0x8f, 0x8f },
5039 { 0x00, 0x90, 0x90 },
5040 { 0x00, 0x91, 0x91 },
5041 { 0x00, 0x92, 0x92 },
5042 { 0x00, 0x93, 0x93 },
5043 { 0x00, 0x94, 0x94 },
5044 { 0x00, 0x95, 0x95 },
5045 { 0x00, 0x96, 0x96 },
5046 { 0x00, 0x97, 0x97 },
5047 { 0x00, 0x98, 0x98 },
5048 { 0x00, 0x99, 0x99 },
5049 { 0x00, 0x9a, 0x9a },
5050 { 0x00, 0x9b, 0x9b },
5051 { 0x00, 0x9c, 0x9c },
5052 { 0x00, 0x9d, 0x9d },
5053 { 0x00, 0x9e, 0x9e },
5054 { 0x00, 0x9f, 0x9f },
5055 { 0x00, 0xa0, 0xa0 },
5056 { 0x00, 0xa1, 0xa1 },
5057 { 0x00, 0xa2, 0xa2 },
5058 { 0x00, 0xa3, 0xa3 },
5059 { 0x00, 0xa4, 0xa4 },
5060 { 0x00, 0xa5, 0xa5 },
5061 { 0x00, 0xa6, 0xa6 },
5062 { 0x00, 0xa7, 0xa7 },
5063 { 0x00, 0xa8, 0xa8 },
5064 { 0x00, 0xa9, 0xa9 },
5065 { 0x00, 0xaa, 0xaa },
5066 { 0x00, 0xab, 0xab },
5067 { 0x00, 0xac, 0xac },
5068 { 0x00, 0xad, 0xad },
5069 { 0x00, 0xae, 0xae },
5070 { 0x00, 0xaf, 0xaf },
5071 { 0x00, 0xb0, 0xb0 },
5072 { 0x00, 0xb1, 0xb1 },
5073 { 0x00, 0xb2, 0xb2 },
5074 { 0x00, 0xb3, 0xb3 },
5075 { 0x00, 0xb4, 0xb4 },
5076 { 0x00, 0xb5, 0xb5 },
5077 { 0x00, 0xb6, 0xb6 },
5078 { 0x00, 0xb7, 0xb7 },
5079 { 0x00, 0xb8, 0xb8 },
5080 { 0x00, 0xb9, 0xb9 },
5081 { 0x00, 0xba, 0xba },
5082 { 0x00, 0xbb, 0xbb },
5083 { 0x00, 0xbc, 0xbc },
5084 { 0x00, 0xbd, 0xbd },
5085 { 0x00, 0xbe, 0xbe },
5086 { 0x00, 0xbf, 0xbf },
5087 { 0x00, 0xc0, 0xc0 },
5088 { 0x00, 0xc1, 0xc1 },
5089 { 0x00, 0xc2, 0xc2 },
5090 { 0x00, 0xc3, 0xc3 },
5091 { 0x00, 0xc4, 0xc4 },
5092 { 0x00, 0xc5, 0xc5 },
5093 { 0x00, 0xc6, 0xc6 },
5094 { 0x00, 0xc7, 0xc7 },
5095 { 0x00, 0xc8, 0xc8 },
5096 { 0x00, 0xc9, 0xc9 },
5097 { 0x00, 0xca, 0xca },
5098 { 0x00, 0xcb, 0xcb },
5099 { 0x00, 0xcc, 0xcc },
5100 { 0x00, 0xcd, 0xcd },
5101 { 0x00, 0xce, 0xce },
5102 { 0x00, 0xcf, 0xcf },
5103 { 0x00, 0xd0, 0xd0 },
5104 { 0x00, 0xd1, 0xd1 },
5105 { 0x00, 0xd2, 0xd2 },
5106 { 0x00, 0xd3, 0xd3 },
5107 { 0x00, 0xd4, 0xd4 },
5108 { 0x00, 0xd5, 0xd5 },
5109 { 0x00, 0xd6, 0xd6 },
5110 { 0x00, 0xd7, 0xd7 },
5111 { 0x00, 0xd8, 0xd8 },
5112 { 0x00, 0xd9, 0xd9 },
5113 { 0x00, 0xda, 0xda },
5114 { 0x00, 0xdb, 0xdb },
5115 { 0x00, 0xdc, 0xdc },
5116 { 0x00, 0xdd, 0xdd },
5117 { 0x00, 0xde, 0xde },
5118 { 0x00, 0xdf, 0xdf },
5119 { 0x00, 0xe0, 0xe0 },
5120 { 0x00, 0xe1, 0xe1 },
5121 { 0x00, 0xe2, 0xe2 },
5122 { 0x00, 0xe3, 0xe3 },
5123 { 0x00, 0xe4, 0xe4 },
5124 { 0x00, 0xe5, 0xe5 },
5125 { 0x00, 0xe6, 0xe6 },
5126 { 0x00, 0xe7, 0xe7 },
5127 { 0x00, 0xe8, 0xe8 },
5128 { 0x00, 0xe9, 0xe9 },
5129 { 0x00, 0xea, 0xea },
5130 { 0x00, 0xeb, 0xeb },
5131 { 0x00, 0xec, 0xec },
5132 { 0x00, 0xed, 0xed },
5133 { 0x00, 0xee, 0xee },
5134 { 0x00, 0xef, 0xef },
5135 { 0x00, 0xf0, 0xf0 },
5136 { 0x00, 0xf1, 0xf1 },
5137 { 0x00, 0xf2, 0xf2 },
5138 { 0x00, 0xf3, 0xf3 },
5139 { 0x00, 0xf4, 0xf4 },
5140 { 0x00, 0xf5, 0xf5 },
5141 { 0x00, 0xf6, 0xf6 },
5142 { 0x00, 0xf7, 0xf7 },
5143 { 0x00, 0xf8, 0xf8 },
5144 { 0x00, 0xf9, 0xf9 },
5145 { 0x00, 0xfa, 0xfa },
5146 { 0x00, 0xfb, 0xfb },
5147 { 0x00, 0xfc, 0xfc },
5148 { 0x00, 0xfd, 0xfd },
5149 { 0x00, 0xfe, 0xfe },
5150 { 0x00, 0xff, 0xff }
5151 };
5152 
5153 static struct cs_info tis620_tbl[] = {
5154 { 0x00, 0x00, 0x00 },
5155 { 0x00, 0x01, 0x01 },
5156 { 0x00, 0x02, 0x02 },
5157 { 0x00, 0x03, 0x03 },
5158 { 0x00, 0x04, 0x04 },
5159 { 0x00, 0x05, 0x05 },
5160 { 0x00, 0x06, 0x06 },
5161 { 0x00, 0x07, 0x07 },
5162 { 0x00, 0x08, 0x08 },
5163 { 0x00, 0x09, 0x09 },
5164 { 0x00, 0x0a, 0x0a },
5165 { 0x00, 0x0b, 0x0b },
5166 { 0x00, 0x0c, 0x0c },
5167 { 0x00, 0x0d, 0x0d },
5168 { 0x00, 0x0e, 0x0e },
5169 { 0x00, 0x0f, 0x0f },
5170 { 0x00, 0x10, 0x10 },
5171 { 0x00, 0x11, 0x11 },
5172 { 0x00, 0x12, 0x12 },
5173 { 0x00, 0x13, 0x13 },
5174 { 0x00, 0x14, 0x14 },
5175 { 0x00, 0x15, 0x15 },
5176 { 0x00, 0x16, 0x16 },
5177 { 0x00, 0x17, 0x17 },
5178 { 0x00, 0x18, 0x18 },
5179 { 0x00, 0x19, 0x19 },
5180 { 0x00, 0x1a, 0x1a },
5181 { 0x00, 0x1b, 0x1b },
5182 { 0x00, 0x1c, 0x1c },
5183 { 0x00, 0x1d, 0x1d },
5184 { 0x00, 0x1e, 0x1e },
5185 { 0x00, 0x1f, 0x1f },
5186 { 0x00, 0x20, 0x20 },
5187 { 0x00, 0x21, 0x21 },
5188 { 0x00, 0x22, 0x22 },
5189 { 0x00, 0x23, 0x23 },
5190 { 0x00, 0x24, 0x24 },
5191 { 0x00, 0x25, 0x25 },
5192 { 0x00, 0x26, 0x26 },
5193 { 0x00, 0x27, 0x27 },
5194 { 0x00, 0x28, 0x28 },
5195 { 0x00, 0x29, 0x29 },
5196 { 0x00, 0x2a, 0x2a },
5197 { 0x00, 0x2b, 0x2b },
5198 { 0x00, 0x2c, 0x2c },
5199 { 0x00, 0x2d, 0x2d },
5200 { 0x00, 0x2e, 0x2e },
5201 { 0x00, 0x2f, 0x2f },
5202 { 0x00, 0x30, 0x30 },
5203 { 0x00, 0x31, 0x31 },
5204 { 0x00, 0x32, 0x32 },
5205 { 0x00, 0x33, 0x33 },
5206 { 0x00, 0x34, 0x34 },
5207 { 0x00, 0x35, 0x35 },
5208 { 0x00, 0x36, 0x36 },
5209 { 0x00, 0x37, 0x37 },
5210 { 0x00, 0x38, 0x38 },
5211 { 0x00, 0x39, 0x39 },
5212 { 0x00, 0x3a, 0x3a },
5213 { 0x00, 0x3b, 0x3b },
5214 { 0x00, 0x3c, 0x3c },
5215 { 0x00, 0x3d, 0x3d },
5216 { 0x00, 0x3e, 0x3e },
5217 { 0x00, 0x3f, 0x3f },
5218 { 0x00, 0x40, 0x40 },
5219 { 0x01, 0x61, 0x41 },
5220 { 0x01, 0x62, 0x42 },
5221 { 0x01, 0x63, 0x43 },
5222 { 0x01, 0x64, 0x44 },
5223 { 0x01, 0x65, 0x45 },
5224 { 0x01, 0x66, 0x46 },
5225 { 0x01, 0x67, 0x47 },
5226 { 0x01, 0x68, 0x48 },
5227 { 0x01, 0x69, 0x49 },
5228 { 0x01, 0x6a, 0x4a },
5229 { 0x01, 0x6b, 0x4b },
5230 { 0x01, 0x6c, 0x4c },
5231 { 0x01, 0x6d, 0x4d },
5232 { 0x01, 0x6e, 0x4e },
5233 { 0x01, 0x6f, 0x4f },
5234 { 0x01, 0x70, 0x50 },
5235 { 0x01, 0x71, 0x51 },
5236 { 0x01, 0x72, 0x52 },
5237 { 0x01, 0x73, 0x53 },
5238 { 0x01, 0x74, 0x54 },
5239 { 0x01, 0x75, 0x55 },
5240 { 0x01, 0x76, 0x56 },
5241 { 0x01, 0x77, 0x57 },
5242 { 0x01, 0x78, 0x58 },
5243 { 0x01, 0x79, 0x59 },
5244 { 0x01, 0x7a, 0x5a },
5245 { 0x00, 0x5b, 0x5b },
5246 { 0x00, 0x5c, 0x5c },
5247 { 0x00, 0x5d, 0x5d },
5248 { 0x00, 0x5e, 0x5e },
5249 { 0x00, 0x5f, 0x5f },
5250 { 0x00, 0x60, 0x60 },
5251 { 0x00, 0x61, 0x41 },
5252 { 0x00, 0x62, 0x42 },
5253 { 0x00, 0x63, 0x43 },
5254 { 0x00, 0x64, 0x44 },
5255 { 0x00, 0x65, 0x45 },
5256 { 0x00, 0x66, 0x46 },
5257 { 0x00, 0x67, 0x47 },
5258 { 0x00, 0x68, 0x48 },
5259 { 0x00, 0x69, 0x49 },
5260 { 0x00, 0x6a, 0x4a },
5261 { 0x00, 0x6b, 0x4b },
5262 { 0x00, 0x6c, 0x4c },
5263 { 0x00, 0x6d, 0x4d },
5264 { 0x00, 0x6e, 0x4e },
5265 { 0x00, 0x6f, 0x4f },
5266 { 0x00, 0x70, 0x50 },
5267 { 0x00, 0x71, 0x51 },
5268 { 0x00, 0x72, 0x52 },
5269 { 0x00, 0x73, 0x53 },
5270 { 0x00, 0x74, 0x54 },
5271 { 0x00, 0x75, 0x55 },
5272 { 0x00, 0x76, 0x56 },
5273 { 0x00, 0x77, 0x57 },
5274 { 0x00, 0x78, 0x58 },
5275 { 0x00, 0x79, 0x59 },
5276 { 0x00, 0x7a, 0x5a },
5277 { 0x00, 0x7b, 0x7b },
5278 { 0x00, 0x7c, 0x7c },
5279 { 0x00, 0x7d, 0x7d },
5280 { 0x00, 0x7e, 0x7e },
5281 { 0x00, 0x7f, 0x7f },
5282 { 0x00, 0x80, 0x80 },
5283 { 0x00, 0x81, 0x81 },
5284 { 0x00, 0x82, 0x82 },
5285 { 0x00, 0x83, 0x83 },
5286 { 0x00, 0x84, 0x84 },
5287 { 0x00, 0x85, 0x85 },
5288 { 0x00, 0x86, 0x86 },
5289 { 0x00, 0x87, 0x87 },
5290 { 0x00, 0x88, 0x88 },
5291 { 0x00, 0x89, 0x89 },
5292 { 0x00, 0x8a, 0x8a },
5293 { 0x00, 0x8b, 0x8b },
5294 { 0x00, 0x8c, 0x8c },
5295 { 0x00, 0x8d, 0x8d },
5296 { 0x00, 0x8e, 0x8e },
5297 { 0x00, 0x8f, 0x8f },
5298 { 0x00, 0x90, 0x90 },
5299 { 0x00, 0x91, 0x91 },
5300 { 0x00, 0x92, 0x92 },
5301 { 0x00, 0x93, 0x93 },
5302 { 0x00, 0x94, 0x94 },
5303 { 0x00, 0x95, 0x95 },
5304 { 0x00, 0x96, 0x96 },
5305 { 0x00, 0x97, 0x97 },
5306 { 0x00, 0x98, 0x98 },
5307 { 0x00, 0x99, 0x99 },
5308 { 0x00, 0x9a, 0x9a },
5309 { 0x00, 0x9b, 0x9b },
5310 { 0x00, 0x9c, 0x9c },
5311 { 0x00, 0x9d, 0x9d },
5312 { 0x00, 0x9e, 0x9e },
5313 { 0x00, 0x9f, 0x9f },
5314 { 0x00, 0xa0, 0xa0 },
5315 { 0x00, 0xa1, 0xa1 },
5316 { 0x00, 0xa2, 0xa2 },
5317 { 0x00, 0xa3, 0xa3 },
5318 { 0x00, 0xa4, 0xa4 },
5319 { 0x00, 0xa5, 0xa5 },
5320 { 0x00, 0xa6, 0xa6 },
5321 { 0x00, 0xa7, 0xa7 },
5322 { 0x00, 0xa8, 0xa8 },
5323 { 0x00, 0xa9, 0xa9 },
5324 { 0x00, 0xaa, 0xaa },
5325 { 0x00, 0xab, 0xab },
5326 { 0x00, 0xac, 0xac },
5327 { 0x00, 0xad, 0xad },
5328 { 0x00, 0xae, 0xae },
5329 { 0x00, 0xaf, 0xaf },
5330 { 0x00, 0xb0, 0xb0 },
5331 { 0x00, 0xb1, 0xb1 },
5332 { 0x00, 0xb2, 0xb2 },
5333 { 0x00, 0xb3, 0xb3 },
5334 { 0x00, 0xb4, 0xb4 },
5335 { 0x00, 0xb5, 0xb5 },
5336 { 0x00, 0xb6, 0xb6 },
5337 { 0x00, 0xb7, 0xb7 },
5338 { 0x00, 0xb8, 0xb8 },
5339 { 0x00, 0xb9, 0xb9 },
5340 { 0x00, 0xba, 0xba },
5341 { 0x00, 0xbb, 0xbb },
5342 { 0x00, 0xbc, 0xbc },
5343 { 0x00, 0xbd, 0xbd },
5344 { 0x00, 0xbe, 0xbe },
5345 { 0x00, 0xbf, 0xbf },
5346 { 0x00, 0xc0, 0xc0 },
5347 { 0x00, 0xc1, 0xc1 },
5348 { 0x00, 0xc2, 0xc2 },
5349 { 0x00, 0xc3, 0xc3 },
5350 { 0x00, 0xc4, 0xc4 },
5351 { 0x00, 0xc5, 0xc5 },
5352 { 0x00, 0xc6, 0xc6 },
5353 { 0x00, 0xc7, 0xc7 },
5354 { 0x00, 0xc8, 0xc8 },
5355 { 0x00, 0xc9, 0xc9 },
5356 { 0x00, 0xca, 0xca },
5357 { 0x00, 0xcb, 0xcb },
5358 { 0x00, 0xcc, 0xcc },
5359 { 0x00, 0xcd, 0xcd },
5360 { 0x00, 0xce, 0xce },
5361 { 0x00, 0xcf, 0xcf },
5362 { 0x00, 0xd0, 0xd0 },
5363 { 0x00, 0xd1, 0xd1 },
5364 { 0x00, 0xd2, 0xd2 },
5365 { 0x00, 0xd3, 0xd3 },
5366 { 0x00, 0xd4, 0xd4 },
5367 { 0x00, 0xd5, 0xd5 },
5368 { 0x00, 0xd6, 0xd6 },
5369 { 0x00, 0xd7, 0xd7 },
5370 { 0x00, 0xd8, 0xd8 },
5371 { 0x00, 0xd9, 0xd9 },
5372 { 0x00, 0xda, 0xda },
5373 { 0x00, 0xdb, 0xdb },
5374 { 0x00, 0xdc, 0xdc },
5375 { 0x00, 0xdd, 0xdd },
5376 { 0x00, 0xde, 0xde },
5377 { 0x00, 0xdf, 0xdf },
5378 { 0x00, 0xe0, 0xe0 },
5379 { 0x00, 0xe1, 0xe1 },
5380 { 0x00, 0xe2, 0xe2 },
5381 { 0x00, 0xe3, 0xe3 },
5382 { 0x00, 0xe4, 0xe4 },
5383 { 0x00, 0xe5, 0xe5 },
5384 { 0x00, 0xe6, 0xe6 },
5385 { 0x00, 0xe7, 0xe7 },
5386 { 0x00, 0xe8, 0xe8 },
5387 { 0x00, 0xe9, 0xe9 },
5388 { 0x00, 0xea, 0xea },
5389 { 0x00, 0xeb, 0xeb },
5390 { 0x00, 0xec, 0xec },
5391 { 0x00, 0xed, 0xed },
5392 { 0x00, 0xee, 0xee },
5393 { 0x00, 0xef, 0xef },
5394 { 0x00, 0xf0, 0xf0 },
5395 { 0x00, 0xf1, 0xf1 },
5396 { 0x00, 0xf2, 0xf2 },
5397 { 0x00, 0xf3, 0xf3 },
5398 { 0x00, 0xf4, 0xf4 },
5399 { 0x00, 0xf5, 0xf5 },
5400 { 0x00, 0xf6, 0xf6 },
5401 { 0x00, 0xf7, 0xf7 },
5402 { 0x00, 0xf8, 0xf8 },
5403 { 0x00, 0xf9, 0xf9 },
5404 { 0x00, 0xfa, 0xfa },
5405 { 0x00, 0xfb, 0xfb },
5406 { 0x00, 0xfc, 0xfc },
5407 { 0x00, 0xfd, 0xfd },
5408 { 0x00, 0xfe, 0xfe },
5409 { 0x00, 0xff, 0xff }
5410 };
5411 
5412 struct enc_entry {
5413   const char * enc_name;
5414   struct cs_info * cs_table;
5415 };
5416 
5417 static struct enc_entry encds[] = {
5418   {"iso88591",iso1_tbl},                     //ISO-8859-1
5419   {"iso88592",iso2_tbl},                     //ISO-8859-2
5420   {"iso88593",iso3_tbl},                     //ISO-8859-3
5421   {"iso88594",iso4_tbl},                     //ISO-8859-4
5422   {"iso88595",iso5_tbl},                     //ISO-8859-5
5423   {"iso88596",iso6_tbl},                     //ISO-8859-6
5424   {"iso88597",iso7_tbl},                     //ISO-8859-7
5425   {"iso88598",iso8_tbl},                     //ISO-8859-8
5426   {"iso88599",iso9_tbl},                     //ISO-8859-9
5427   {"iso885910",iso10_tbl},                   //ISO-8859-10
5428   {"tis620",tis620_tbl},                     //TIS-620/ISO-8859-11
5429   {"tis6202533",tis620_tbl},                 //TIS-620/ISO-8859-11
5430   {"iso885911",tis620_tbl},                  //TIS-620/ISO-8859-11
5431   {"iso885913", iso13_tbl},                  //ISO-8859-13
5432   {"iso885914", iso14_tbl},                  //ISO-8859-14
5433   {"iso885915", iso15_tbl},                  //ISO-8859-15
5434   {"koi8r",koi8r_tbl},                       //KOI8-R
5435   {"koi8u",koi8u_tbl},                       //KOI8-U
5436   {"cp1251",cp1251_tbl},                     //CP-1251
5437   {"microsoftcp1251",cp1251_tbl},            //microsoft-cp1251
5438   {"xisciias", iscii_devanagari_tbl},        //x-iscii-as
5439   {"isciidevanagari", iscii_devanagari_tbl}  //ISCII-DEVANAGARI
5440 };
5441 
5442 /* map to lower case and remove non alphanumeric chars */
toAsciiLowerAndRemoveNonAlphanumeric(const char * pName,char * pBuf)5443 static void toAsciiLowerAndRemoveNonAlphanumeric( const char* pName, char* pBuf )
5444 {
5445     while ( *pName )
5446     {
5447         /* A-Z */
5448         if ( (*pName >= 0x41) && (*pName <= 0x5A) )
5449         {
5450             *pBuf = (*pName)+0x20;  /* toAsciiLower */
5451             pBuf++;
5452         }
5453         /* a-z, 0-9 */
5454         else if ( ((*pName >= 0x61) && (*pName <= 0x7A)) ||
5455                   ((*pName >= 0x30) && (*pName <= 0x39)) )
5456         {
5457             *pBuf = *pName;
5458             pBuf++;
5459         }
5460 
5461         pName++;
5462     }
5463 
5464     *pBuf = '\0';
5465 }
5466 
get_current_cs(const char * es)5467 struct cs_info * get_current_cs(const char * es) {
5468   char *normalized_encoding = new char[strlen(es)+1];
5469   toAsciiLowerAndRemoveNonAlphanumeric(es, normalized_encoding);
5470 
5471   struct cs_info * ccs = NULL;
5472   int n = sizeof(encds) / sizeof(encds[0]);
5473   for (int i = 0; i < n; i++) {
5474     if (strcmp(normalized_encoding,encds[i].enc_name) == 0) {
5475       ccs = encds[i].cs_table;
5476       break;
5477     }
5478   }
5479 
5480   delete[] normalized_encoding;
5481 
5482   if (!ccs) {
5483     HUNSPELL_WARNING(stderr, "error: unknown encoding %s: using %s as fallback\n", es, encds[0].enc_name);
5484     ccs = encds[0].cs_table;
5485   }
5486 
5487   return ccs;
5488 }
5489 #else
5490 // XXX This function was rewritten for mozilla. Instead of storing the
5491 // conversion tables static in this file, create them when needed
5492 // with help the mozilla backend.
get_current_cs(const char * es)5493 struct cs_info * get_current_cs(const char * es) {
5494   struct cs_info *ccs = new cs_info[256];
5495   // Initialze the array with dummy data so that we wouldn't need
5496   // to return null in case of failures.
5497   for (int i = 0; i <= 0xff; ++i) {
5498     ccs[i].ccase = false;
5499     ccs[i].clower = i;
5500     ccs[i].cupper = i;
5501   }
5502 
5503 
5504   nsCOMPtr<nsIUnicodeEncoder> encoder;
5505   nsCOMPtr<nsIUnicodeDecoder> decoder;
5506 
5507   nsresult rv;
5508   nsCOMPtr<nsICharsetConverterManager> ccm = do_GetService(kCharsetConverterManagerCID, &rv);
5509   if (NS_FAILED(rv))
5510     return ccs;
5511 
5512   rv = ccm->GetUnicodeEncoder(es, getter_AddRefs(encoder));
5513   if (NS_FAILED(rv))
5514     return ccs;
5515   encoder->SetOutputErrorBehavior(encoder->kOnError_Signal, nsnull, '?');
5516   rv = ccm->GetUnicodeDecoder(es, getter_AddRefs(decoder));
5517   if (NS_FAILED(rv))
5518     return ccs;
5519   decoder->SetInputErrorBehavior(decoder->kOnError_Signal);
5520 
5521   if (NS_FAILED(rv))
5522     return ccs;
5523 
5524   for (unsigned int i = 0; i <= 0xff; ++i) {
5525     PRBool success = PR_FALSE;
5526     // We want to find the upper/lowercase equivalents of each byte
5527     // in this 1-byte character encoding.  Call our encoding/decoding
5528     // APIs separately for each byte since they may reject some of the
5529     // bytes, and we want to handle errors separately for each byte.
5530     char lower, upper;
5531     do {
5532       if (i == 0)
5533         break;
5534       const char source = char(i);
5535       PRUnichar uni, uniCased;
5536       PRInt32 charLength = 1, uniLength = 1;
5537 
5538       rv = decoder->Convert(&source, &charLength, &uni, &uniLength);
5539       // Explicitly check NS_OK because we don't want to allow
5540       // NS_OK_UDEC_MOREOUTPUT or NS_OK_UDEC_MOREINPUT.
5541       if (rv != NS_OK || charLength != 1 || uniLength != 1)
5542         break;
5543       uniCased = ToLowerCase(uni);
5544       rv = encoder->Convert(&uniCased, &uniLength, &lower, &charLength);
5545       // Explicitly check NS_OK because we don't want to allow
5546       // NS_OK_UDEC_MOREOUTPUT or NS_OK_UDEC_MOREINPUT.
5547       if (rv != NS_OK || charLength != 1 || uniLength != 1)
5548         break;
5549 
5550       uniCased = ToUpperCase(uni);
5551       rv = encoder->Convert(&uniCased, &uniLength, &upper, &charLength);
5552       // Explicitly check NS_OK because we don't want to allow
5553       // NS_OK_UDEC_MOREOUTPUT or NS_OK_UDEC_MOREINPUT.
5554       if (rv != NS_OK || charLength != 1 || uniLength != 1)
5555         break;
5556 
5557       success = PR_TRUE;
5558     } while (0);
5559 
5560     if (success) {
5561       ccs[i].cupper = upper;
5562       ccs[i].clower = lower;
5563     } else {
5564       ccs[i].cupper = i;
5565       ccs[i].clower = i;
5566     }
5567 
5568     if (ccs[i].clower != (unsigned char)i)
5569       ccs[i].ccase = true;
5570     else
5571       ccs[i].ccase = false;
5572   }
5573 
5574   return ccs;
5575 }
5576 #endif
5577 
5578 // primitive isalpha() replacement for tokenization
get_casechars(const char * enc)5579 char * get_casechars(const char * enc) {
5580     struct cs_info * csconv = get_current_cs(enc);
5581     char expw[MAXLNLEN];
5582     char * p =  expw;
5583     for (int i = 0; i <= 255; i++) {
5584         if ((csconv[i].cupper != csconv[i].clower)) {
5585     	    *p = (char) i;
5586     	    p++;
5587         }
5588     }
5589     *p = '\0';
5590 #ifdef MOZILLA_CLIENT
5591     delete [] csconv;
5592 #endif
5593     return mystrdup(expw);
5594 }
5595 
5596 // language to encoding default map
5597 
5598 struct lang_map {
5599   const char * lang;
5600   int num;
5601 };
5602 
5603 static struct lang_map lang2enc[] = {
5604 {"ar", LANG_ar},
5605 {"az", LANG_az},
5606 {"az_AZ", LANG_az}, // for back-compatibility
5607 {"bg", LANG_bg},
5608 {"ca", LANG_ca},
5609 {"cs", LANG_cs},
5610 {"da", LANG_da},
5611 {"de", LANG_de},
5612 {"el", LANG_el},
5613 {"en", LANG_en},
5614 {"es", LANG_es},
5615 {"eu", LANG_eu},
5616 {"gl", LANG_gl},
5617 {"fr", LANG_fr},
5618 {"hr", LANG_hr},
5619 {"hu", LANG_hu},
5620 {"hu_HU", LANG_hu}, // for back-compatibility
5621 {"it", LANG_it},
5622 {"la", LANG_la},
5623 {"lv", LANG_lv},
5624 {"nl", LANG_nl},
5625 {"pl", LANG_pl},
5626 {"pt", LANG_pt},
5627 {"sv", LANG_sv},
5628 {"tr", LANG_tr},
5629 {"tr_TR", LANG_tr}, // for back-compatibility
5630 {"ru", LANG_ru},
5631 {"uk", LANG_uk}
5632 };
5633 
5634 
get_lang_num(const char * lang)5635 int get_lang_num(const char * lang) {
5636   int n = sizeof(lang2enc) / sizeof(lang2enc[0]);
5637   for (int i = 0; i < n; i++) {
5638     if (strcmp(lang, lang2enc[i].lang) == 0) {
5639       return lang2enc[i].num;
5640     }
5641   }
5642   return LANG_xx;
5643 }
5644 
5645 #ifndef OPENOFFICEORG
5646 #ifndef MOZILLA_CLIENT
initialize_utf_tbl()5647 int initialize_utf_tbl() {
5648   utf_tbl_count++;
5649   if (utf_tbl) return 0;
5650   utf_tbl = (unicode_info2 *) malloc(CONTSIZE * sizeof(unicode_info2));
5651   if (utf_tbl) {
5652     size_t j;
5653     for (j = 0; j < CONTSIZE; j++) {
5654       utf_tbl[j].cletter = 0;
5655       utf_tbl[j].clower = (unsigned short) j;
5656       utf_tbl[j].cupper = (unsigned short) j;
5657     }
5658     for (j = 0; j < UTF_LST_LEN; j++) {
5659       utf_tbl[utf_lst[j].c].cletter = 1;
5660       utf_tbl[utf_lst[j].c].clower = utf_lst[j].clower;
5661       utf_tbl[utf_lst[j].c].cupper = utf_lst[j].cupper;
5662     }
5663   } else return 1;
5664   return 0;
5665 }
5666 #endif
5667 #endif
5668 
free_utf_tbl()5669 void free_utf_tbl() {
5670   if (utf_tbl_count > 0) utf_tbl_count--;
5671   if (utf_tbl && (utf_tbl_count == 0)) {
5672     free(utf_tbl);
5673     utf_tbl = NULL;
5674   }
5675 }
5676 
unicodetoupper(unsigned short c,int langnum)5677 unsigned short unicodetoupper(unsigned short c, int langnum)
5678 {
5679   // In Azeri and Turkish, I and i dictinct letters:
5680   // There are a dotless lower case i pair of upper `I',
5681   // and an upper I with dot pair of lower `i'.
5682   if (c == 0x0069 && ((langnum == LANG_az) || (langnum == LANG_tr)))
5683     return 0x0130;
5684 #ifdef OPENOFFICEORG
5685   return static_cast<unsigned short>(u_toupper(c));
5686 #else
5687 #ifdef MOZILLA_CLIENT
5688   return ToUpperCase((PRUnichar) c);
5689 #else
5690   return (utf_tbl) ? utf_tbl[c].cupper : c;
5691 #endif
5692 #endif
5693 }
5694 
unicodetolower(unsigned short c,int langnum)5695 unsigned short unicodetolower(unsigned short c, int langnum)
5696 {
5697   // In Azeri and Turkish, I and i dictinct letters:
5698   // There are a dotless lower case i pair of upper `I',
5699   // and an upper I with dot pair of lower `i'.
5700   if (c == 0x0049 && ((langnum == LANG_az) || (langnum == LANG_tr)))
5701     return 0x0131;
5702 #ifdef OPENOFFICEORG
5703   return static_cast<unsigned short>(u_tolower(c));
5704 #else
5705 #ifdef MOZILLA_CLIENT
5706   return ToLowerCase((PRUnichar) c);
5707 #else
5708   return (utf_tbl) ? utf_tbl[c].clower : c;
5709 #endif
5710 #endif
5711 }
5712 
unicodeisalpha(unsigned short c)5713 int unicodeisalpha(unsigned short c)
5714 {
5715 #ifdef OPENOFFICEORG
5716   return u_isalpha(c);
5717 #else
5718   return (utf_tbl) ? utf_tbl[c].cletter : 0;
5719 #endif
5720 }
5721 
5722 /* get type of capitalization */
get_captype(char * word,int nl,cs_info * csconv)5723 int get_captype(char * word, int nl, cs_info * csconv) {
5724    // now determine the capitalization type of the first nl letters
5725    int ncap = 0;
5726    int nneutral = 0;
5727    int firstcap = 0;
5728    if (csconv == NULL) return NOCAP;
5729    for (char * q = word; *q != '\0'; q++) {
5730       if (csconv[*((unsigned char *)q)].ccase) ncap++;
5731       if (csconv[*((unsigned char *)q)].cupper == csconv[*((unsigned char *)q)].clower) nneutral++;
5732    }
5733    if (ncap) {
5734      firstcap = csconv[*((unsigned char *) word)].ccase;
5735    }
5736 
5737    // now finally set the captype
5738    if (ncap == 0) {
5739         return NOCAP;
5740    } else if ((ncap == 1) && firstcap) {
5741         return INITCAP;
5742    } else if ((ncap == nl) || ((ncap + nneutral) == nl)) {
5743         return ALLCAP;
5744    } else if ((ncap > 1) && firstcap) {
5745         return HUHINITCAP;
5746    }
5747    return HUHCAP;
5748 }
5749 
get_captype_utf8(w_char * word,int nl,int langnum)5750 int get_captype_utf8(w_char * word, int nl, int langnum) {
5751    // now determine the capitalization type of the first nl letters
5752    int ncap = 0;
5753    int nneutral = 0;
5754    int firstcap = 0;
5755    unsigned short idx;
5756    // don't check too long words
5757    if (nl >= MAXWORDLEN) return 0;
5758    // big Unicode character (non BMP area)
5759    if (nl == -1) return NOCAP;
5760    for (int i = 0; i < nl; i++) {
5761      idx = (word[i].h << 8) + word[i].l;
5762      if (idx != unicodetolower(idx, langnum)) ncap++;
5763      if (unicodetoupper(idx, langnum) == unicodetolower(idx, langnum)) nneutral++;
5764    }
5765    if (ncap) {
5766       idx = (word[0].h << 8) + word[0].l;
5767       firstcap = (idx != unicodetolower(idx, langnum));
5768   }
5769 
5770    // now finally set the captype
5771    if (ncap == 0) {
5772         return NOCAP;
5773    } else if ((ncap == 1) && firstcap) {
5774         return INITCAP;
5775    } else if ((ncap == nl) || ((ncap + nneutral) == nl)) {
5776         return ALLCAP;
5777    } else if ((ncap > 1) && firstcap) {
5778         return HUHINITCAP;
5779    }
5780    return HUHCAP;
5781 }
5782 
5783 
5784 // strip all ignored characters in the string
remove_ignored_chars_utf(char * word,unsigned short ignored_chars[],int ignored_len)5785 void remove_ignored_chars_utf(char * word, unsigned short ignored_chars[], int ignored_len)
5786 {
5787    w_char w[MAXWORDLEN];
5788    w_char w2[MAXWORDLEN];
5789    int i;
5790    int j;
5791    int len = u8_u16(w, MAXWORDLEN, word);
5792    for (i = 0, j = 0; i < len; i++) {
5793       if (!flag_bsearch(ignored_chars, ((unsigned short *) w)[i], ignored_len)) {
5794          w2[j] = w[i];
5795          j++;
5796       }
5797    }
5798    if (j < i) u16_u8(word, MAXWORDUTF8LEN, w2, j);
5799 }
5800 
5801 // strip all ignored characters in the string
remove_ignored_chars(char * word,char * ignored_chars)5802 void remove_ignored_chars(char * word, char * ignored_chars)
5803 {
5804    for (char * p = word; *p != '\0'; p++) {
5805       if (!strchr(ignored_chars, *p)) {
5806         *word = *p;
5807         word++;
5808       }
5809    }
5810    *word = '\0';
5811 }
5812 
parse_string(char * line,char ** out,int ln)5813 int parse_string(char * line, char ** out, int ln)
5814 {
5815    char * tp = line;
5816    char * piece;
5817    int i = 0;
5818    int np = 0;
5819    if (*out) {
5820       HUNSPELL_WARNING(stderr, "error: line %d: multiple definitions\n", ln);
5821       return 1;
5822    }
5823    piece = mystrsep(&tp, 0);
5824    while (piece) {
5825       if (*piece != '\0') {
5826           switch(i) {
5827               case 0: { np++; break; }
5828               case 1: {
5829                 *out = mystrdup(piece);
5830                 if (!*out) return 1;
5831                 np++;
5832                 break;
5833               }
5834               default: break;
5835           }
5836           i++;
5837       }
5838       // free(piece);
5839       piece = mystrsep(&tp, 0);
5840    }
5841    if (np != 2) {
5842       HUNSPELL_WARNING(stderr, "error: line %d: missing data\n", ln);
5843       return 1;
5844    }
5845    return 0;
5846 }
5847 
parse_array(char * line,char ** out,unsigned short ** out_utf16,int * out_utf16_len,int utf8,int ln)5848 int parse_array(char * line, char ** out, unsigned short ** out_utf16,
5849        int * out_utf16_len, int utf8, int ln) {
5850    if (parse_string(line, out, ln)) return 1;
5851    if (utf8) {
5852         w_char w[MAXWORDLEN];
5853         int n = u8_u16(w, MAXWORDLEN, *out);
5854         if (n > 0) {
5855             flag_qsort((unsigned short *) w, 0, n);
5856             *out_utf16 = (unsigned short *) malloc(n * sizeof(unsigned short));
5857             if (!*out_utf16) return 1;
5858             memcpy(*out_utf16, w, n * sizeof(unsigned short));
5859         }
5860         *out_utf16_len = n;
5861    }
5862    return 0;
5863 }
5864