extensions/spellcheck/hunspell/src/csutil.cpp

Wed, 31 Dec 2014 13:27:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 13:27:57 +0100
branch
TOR_BUG_3246
changeset 6
8bccb770b82d
permissions
-rw-r--r--

Ignore runtime configuration files generated during quality assurance.

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

mercurial