static char rcsid[] = "@(#)$Id: precompiled_sets.c,v 1.104 2006/04/09 07:37:08 hurtta Exp $";

/******************************************************************************
 *  The Elm (ME+) Mail System  -  $Revision: 1.104 $   $State: Exp $
 *
 *  Author: Kari Hurtta <hurtta+elm@posti.FMI.FI> (was hurtta+elm@ozone.FMI.FI)
 *****************************************************************************/

#include "defs.h"
#include "elmlib.h"
#include "cs_imp.h"

#define INVARIANT &precompiled_sets[0]
#define ASCII &precompiled_sets[1]
#define LATIN1 &precompiled_sets[2]
#define LATIN2 &precompiled_sets[3]       /* ISO-8859-2 */
#define LATIN5 &precompiled_sets[10]      /* ISO-8859-9 */

/* MIBenum and codeset from http://www.iana.org/assignments/character-sets  */

#ifndef ASCII_CODESET
#define ASCII_CODESET "ANSI_X3.4-1968"
#endif

struct charcode_info precompiled_sets[] = {
    { CS_charset_magic, &cs_iso646, &map_invariant, SET_valid,  "INVARIANT",  NULL, NULL, 29,   NULL },

    /* iso-ir-6 */
    { CS_charset_magic, &cs_ascii, &map_ascii, SET_valid,  "US-ASCII",
      INVARIANT, &(sets_iso_8859_X[0]),                                  3,   ASCII_CODESET },

    /* iso-ir-100 */
    { CS_charset_magic, &cs_ascii, &map_latin1, SET_valid,  "ISO-8859-1", 
      ASCII, &(sets_iso_8859_X[1]),                                      4,   "ISO_8859-1:1987" },

    /* iso-ir-101 */
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-2", 
      ASCII, &(sets_iso_8859_X[2]),                                      5,   "ISO_8859-2:1987" },

    /* iso-ir-109 */
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-3", 
      ASCII, &(sets_iso_8859_X[3]),                                      6,   "ISO_8859-3:1988" },

    /* iso-ir-110 */
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-4", 
      ASCII, &(sets_iso_8859_X[4]),                                      7,   "ISO_8859-4:1988" },

    /* iso-ir-144 */
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-5", 
      ASCII, &(sets_iso_8859_X[5]),                                      8,   "ISO_8859-5:1988" },

    /* iso-ir-127 */
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-6", 
      ASCII, &(sets_iso_8859_X[6]),                                      9,   "ISO_8859-6:1987" },

    /* iso-ir-126 */
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-7",
      ASCII, &(sets_iso_8859_X[7]),                                     10,   "ISO_8859-7:1987" },

    /* iso-ir-138 */
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-8", 
      ASCII, &(sets_iso_8859_X[8]),                                     11,   "ISO_8859-8:1988" },

    /* iso-ir-148 */
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-9", 
      ASCII, &(sets_iso_8859_X[9]),                                     12,   "ISO_8859-9:1989" },

    /* iso-ir-157 */
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-10", 
      ASCII, &(sets_iso_8859_X[10]),                                    13,   NULL },

    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-11", 
      ASCII, &(sets_iso_8859_X[11]),                                  2259,  "TIS-620" },
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-13", 
      ASCII, &set_latin7,                                              109,   NULL },

    /* iso-ir-199 */
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-14", ASCII, &set_latin8,  110,   NULL },

    { CS_charset_magic, &cs_ascii, &map_885915, SET_valid,  "ISO-8859-15", 
      ASCII, &set_latin9,                                              111,   NULL },

    /* iso-ir-226 */
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-16", 
      ASCII, &set_iso885916,                                           112,   NULL },

    { CS_charset_magic, &cs_ascii, &map_koi8r, SET_valid,  "KOI8-R", ASCII, NULL,       2084,  NULL },
    { CS_charset_magic, &cs_ascii, &map_koi8u, SET_valid,  "KOI8-U", ASCII, NULL,       2088,  NULL },
    { CS_charset_magic, &cs_ascii, &map_cp1251, SET_valid, "windows-1251", ASCII, NULL, 2251,  "CP1251" },
    { CS_charset_magic, &cs_ascii, &map_cp1252, SET_valid, "windows-1252", LATIN1,NULL, 2252,  "CP1252" },
    { CS_charset_magic, &cs_utf8,  &map_utf8,  SET_valid,  "UTF-8",  NULL, &set_utf8,    106,  NULL },
    { CS_charset_magic, &cs_utf7,  &map_utf7,  SET_valid,  "UTF-7",  NULL, NULL,        1012,  NULL },

    /* Following variants are not really handled ....
       (different directonalities are not supported) */

    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-6-E", 
      ASCII, &(sets_iso_8859_X[6]),                                     81, "ISO_8859-6-E" },
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-6-I", 
      ASCII, &(sets_iso_8859_X[6]),                                     82, "ISO_8859-6-I" },
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-8-E", 
      ASCII, &(sets_iso_8859_X[8]),                                     84, "ISO_8859-8-E" },
    { CS_charset_magic, &cs_ascii, NULL, SET_valid,  "ISO-8859-8-I", 
      ASCII, &(sets_iso_8859_X[8]),                                     85, "ISO_8859-8-E" },

    /* Following should be some kind special case */

    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid, "UNKNOWN-8BIT",  NULL,  NULL,   2079, NULL },
    
    
    /* Arbitary names from http://www.iana.org/assignments/character-sets    */

    /* Multibyte character set so cs_ascii does not work .... */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,               27,  "ISO-10646-UTF-1" },
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  NULL, INVARIANT, NULL, 
                                                                        28,  "ISO_646.basic:1983" },
    /* iso-ir-2 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "IRV",  INVARIANT, &set_iso_ir_2,              30,  "ISO_646.irv:1983" },    

    /* iso-ir-4 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-GB", INVARIANT,  &set_iso_ir_4,   
                                                                        20,  "BS_4730" },
    /* iso-ir-8-1 */
    { CS_charset_magic, &cs_iso646,  NULL,  SET_valid,  NULL,  INVARIANT,  &set_iso_ir_8_1,    31,  "NATS-SEFI" },

    /* iso-ir-8-2 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_8_2,    32,  "NATS-SEFI-ADD" },

    /* iso-ir-9-1 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_9_1,               33,  "NATS-DANO" },

    /* iso-ir-9-2 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL, NULL, &set_iso_ir_9_2,     34,  "NATS-DANO-ADD" },

    /* iso-ir-10 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-FI", INVARIANT,  &set_iso_ir_10,  
                                                                        35,  "SEN_850200_B" },

    /* iso-ir-11 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-SE2", INVARIANT,  &set_iso_ir_11,    
                                                                        21,  "SEN_850200_C" },

    /* iso-ir-149 */
    { CS_charset_magic, &cs_iso2022,  NULL,  SET_valid,  NULL,   NULL, &set_iso_ir_149,         36,  "KS_C_5601-1987" },

    { CS_charset_magic, &cs_iso2022,  &map_ISO2022_ascii,  SET_valid,  "ISO-2022-KR", NULL, 
      &set_ISO2022KR,  37,  NULL }, /* RFC 1557 */
    { CS_charset_magic, &cs_euc,      &map_EUC_ascii,      SET_valid,  "EUC-KR",    NULL,
      &set_EUCKR,  38,  NULL }, 
    { CS_charset_magic, &cs_iso2022,  &map_ISO2022_ascii,  SET_valid,  "ISO-2022-JP", NULL, 
      &set_ISO2022JP,      39,  NULL }, /* RFC 1468 */
    { CS_charset_magic, &cs_iso2022,  &map_ISO2022_ascii_latin1,  SET_valid,  "ISO-2022-JP-2", 
      NULL, &set_ISO2022JP2,    40,  NULL }, /* RFC 1554 */
    { CS_charset_magic, &cs_iso2022,  &map_ISO2022_ascii,  SET_valid,  "ISO-2022-CN", NULL,  
      &set_ISO2022CN,     104,  NULL }, /* RFC 1922 */
    { CS_charset_magic, &cs_iso2022,  &map_ISO2022_ascii,  SET_valid,  "ISO-2022-CN-EXT", NULL,
      &set_ISO2022CNEXT, 105,  NULL }, /* RFC 1922 */

    /* iso-ir-13 */
    { CS_charset_magic, &cs_iso2022,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_13,  41,  "JIS_C6220-1969-jp" },

    /* iso-ir-14 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-JP", INVARIANT,  &set_ISO646JP,        42,  "JIS_C6220-1969-ro" },

    /* iso-ir-15 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-IT", INVARIANT,  &set_iso_ir_15,   22,  "IT" },

    /* iso-ir-16 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-PT", INVARIANT,  &set_iso_ir_16,   43,  "PT" },

    /* iso-ir-17 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-ES", INVARIANT,  &set_iso_ir_17,        23,  "ES" },

    /* iso-ir-18 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,        NULL,  &set_iso_ir_18,        44,  "greek7-old" },

    /* iso-ir-19 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_19,               45,  "latin-greek" },

    /* iso-ir-21 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-DE", INVARIANT,  &set_iso_ir_21,  24,  "DIN_66003" },

    /* iso-ir-25 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-FR1", INVARIANT, &set_iso_ir_25,  46,  "NF_Z_62-010_(1973)" },

    /* iso-ir-27 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_27,     47,  "Latin-greek-1" },

    /* iso-ir-37 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_37,     48,  "ISO_5427" },


    /* iso-ir-42 */
    { CS_charset_magic, &cs_iso2022,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_42,     49,  "JIS_C6226-1978" },

    /* iso-ir-47 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_47,     50,  "BS_viewdata" },

    /* iso-ir-49 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_49,     51,  "INIS" },

    /* iso-ir-50 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_50,     52,  "INIS-8" },

    /* iso-ir-51 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_51,     53,  "INIS-cyrillic" },

    /* iso-ir-54 */ 
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_54,     54,  "ISO_5427:1981" },

    /* iso-ir-55 */ 
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_55,     55,  "ISO_5428:1980" },

    /* iso-ir-57 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-CN", INVARIANT,  &set_iso_ir_57,        56,  "GB_1988-80" },

    /* iso-ir-58 */
    { CS_charset_magic, &cs_iso2022,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_58,     57,  "GB_2312-80" },

    /* iso-ir-60 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-NO", INVARIANT,  &set_iso_ir_60,  25,  "NS_4551-1" },

    /* iso-ir-61 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-NO2", INVARIANT, &set_iso_ir_61, 58,  "NS_4551-2" },

    /* iso-ir-69 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-FR", INVARIANT,  &set_iso_ir_69, 26,  "NF_Z_62-010" },

    /* iso-ir-70 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_70,    59,  "videotex-suppl" },

    /* iso-ir-84 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-PT2", INVARIANT,  &set_iso_ir_84, 60,  "PT2" },

    /* iso-ir-85 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-ES2", INVARIANT,  &set_iso_ir_85, 61,  "ES2" },

    /* iso-ir-86 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-HU", INVARIANT,  &set_iso_ir_86,  62,  "MSZ_7795.3" },

    /* iso-ir-87 */
    { CS_charset_magic, &cs_iso2022,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_87,     63,  "JIS_C6226-1983" },

    /* iso-ir-88 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,               64,  "greek7" },

    /* iso-ir-89 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_89,     65,  "ASMO_449" },

    /* iso-ir-90 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_90,     66,  "iso-ir-90" },

    /* iso-ir-91 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_91,     67,  "JIS_C6229-1984-a" },

     /* iso-ir-92 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-JP-OCR-B", INVARIANT,  
                                                        &set_iso_ir_92,  68,  "JIS_C6229-1984-b" },

     /* iso-ir-93 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_93,     69,  "JIS_C6229-1984-b-add" },

     /* iso-ir-94 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_94,     70,  "JIS_C6229-1984-hand" },

     /* iso-ir-95 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_95,     71,  "JIS_C6229-1984-hand-add" },

     /* iso-ir-96 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_96,     72,  "JIS_C6229-1984-kana" },

     /* iso-ir-98 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_98,    73,  "ISO_2033-1983" },

     /* iso-ir-99 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_99,     74,  "ANSI_X3.110-1983" },

    /* iso-ir-102 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_102,    75,  "T.61-7bit" },

    /* iso-ir-103 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_103,    76,  "T.61-8bit" },

    /* iso-ir-111 */
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "KOI8-E",  NULL, &set_koi8e,     77,  "ECMA-cyrillic" },

    /* iso-ir-121 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-CA", INVARIANT, &set_iso_ir_121, 78,  "CSA_Z243.4-1985-1" },

    /* iso-ir-122 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-CA2", INVARIANT, &set_iso_ir_122, 79,  "CSA_Z243.4-1985-2" },

    /* iso-ir-123 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_123,    80,  "CSA_Z243.4-1985-gr" },

    /* iso-ir-128 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_128,    83,  "T.101-G2" },

    /* iso-ir-139 */
    { CS_charset_magic, &cs_ascii,  NULL,  SET_valid,  NULL,  ASCII, &set_iso_ir_139,     86,  "CSN_369103" },

    /* iso-ir-141 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-YU", INVARIANT,  &set_iso_ir_141,  87,  "JUS_I.B1.002" },

    /* iso-ir-142 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_142, 14,  "ISO_6937-2-add" },

    /* iso-ir-143 */
    { CS_charset_magic, &cs_ascii,  NULL,  SET_valid,  NULL,  ASCII, &set_iso_ir_143,     88,  "IEC_P27-1" },

    /* iso-ir-146 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_146,    89,  "JUS_I.B1.003-serb" },

    /* iso-ir-147 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_147,    90,  "JUS_I.B1.003-mac" },

    /* iso-ir-150 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_150,    91,  "greek-ccitt" },

    /* iso-ir-151 */
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-CU", INVARIANT,  
                                                    &set_iso_ir_151,   92,  "NC_NC00-10:81" },

    /* iso-ir-152 */
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  NULL,  ASCII, &set_iso_ir_152,   93,  "ISO_6937-2-25" },

    /* iso-ir-153 */
    { CS_charset_magic, &cs_ascii,  NULL,  SET_valid,  NULL,  ASCII, &set_iso_ir_153,    94,  "GOST_19768-74" },

    /* iso-ir-154 */
    { CS_charset_magic, &cs_ascii,  NULL,  SET_valid,  NULL,  ASCII, &set_iso_ir_154,    95,  "ISO_8859-supp" },

    /* iso-ir-155 */
    { CS_charset_magic, &cs_ascii,  NULL,  SET_valid,  NULL,  ASCII, &set_iso_ir_155,    96,  "ISO_10367-box" },

    /* iso-ir-158 */
    { CS_charset_magic, &cs_ascii,  NULL,  SET_valid,  NULL,  ASCII, &set_iso_ir_158,    97,  "latin-lap" },

    /* iso-ir-159 */
    { CS_charset_magic, &cs_iso2022,  NULL,  SET_valid,  NULL,  NULL, &set_iso_ir_159,   98,  "JIS_X0212-1990" },

    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-DK", INVARIANT,  NULL,        99,  "DS_2089" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,              100,  "us-dk" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,              101,  "dk-us" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,               15,  "JIS_X0201" },
    { CS_charset_magic, &cs_iso646,   NULL,  SET_valid,  "ISO646-KR", INVARIANT,  NULL,       102,  "KSC5636" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "DEC-MCS",  ASCII, NULL,       2008,  NULL },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "hp-roman8" ,  ASCII, NULL,    2004,  NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2027,  "macintosh" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2030,  "IBM273" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "CP437", ASCII, NULL,          2011,  "IBM437" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "CP775", ASCII, NULL,          2087,  "IBM775" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "CP850", ASCII, NULL,          2009,  "IBM850" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2045,  "IBM851" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "CP852", ASCII, NULL,          2010,  "IBM852" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "CP855", ASCII, NULL,          2046,  "IBM855" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "CP857", ASCII, NULL,          2047,  "IBM857" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "CP860", ASCII, NULL,          2048,  "IBM860" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "CP861", ASCII, NULL,          2049,  "IBM861" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "CP862", ASCII, NULL,          2013,  "IBM862" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "CP863", ASCII, NULL,          2050,  "IBM863" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "CP864", ASCII, NULL,          2051,  "IBM864" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "CP865", ASCII, NULL,          2052,  "IBM865" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "CP866", ASCII, NULL,          2086,  "IBM866" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2053,  "IBM868" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  "CP869", ASCII, NULL,          2054,  "IBM869" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2058,  "IBM891" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2059,  "IBM903" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2060,  "IBM904" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2063,  "IBM1026" },

    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2080,  "MNEMONIC" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2081,  "MNEM" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "VISCII",  NULL, NULL,         2082,   NULL },  /* rfc 1456 */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2083,  "VIQR" }, /* rfc 1456 */

    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM00858",  NULL, NULL,       2089,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2101,  "Big5-HKSCS" },
    { CS_charset_magic, &cs_utf7,     NULL,  SET_valid,  "UNICODE-1-1-UTF-7",NULL, NULL, 103,  NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,               16,  "JIS_Encoding" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "Shift_JIS",  NULL, NULL,        17,  NULL },
    { CS_charset_magic, &cs_euc,  &map_EUC_ascii,  SET_valid,  "EUC-JP",  
      NULL, &set_EUCJP,           18,             
      "Extended_UNIX_Code_Packed_Format_for_Japanese" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,               19,  
      "Extended_UNIX_Code_Fixed_Width_for_Japanese" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2005,  "Adobe-Standard-Encoding" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  NULL,  ASCII, NULL,            2006,  "Ventura-US" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid,  NULL,  ASCII, NULL,            2007,  "Ventura-International" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2012,  "PC8-Danish-Norwegian" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2014,  "PC8-Turkish" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2015,  "IBM-Symbols" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2016,  "IBM-Thai" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2017,  "HP-Legal" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2018,  "HP-Pi-font" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2019,  "HP-Math8" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2020,  "Adobe-Symbol-Encoding" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2021,  "HP-DeskTop" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2022,  "Ventura-Math" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2023,  "Microsoft-Publishing" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2024,  "Windows-31J" },

    /* This is really EUC-CN */ 
    { CS_charset_magic, &cs_euc,      &map_EUC_ascii,  SET_valid,  "GB2312",  NULL, 
      &set_EUCCN,         2025,  "GB2312-1980" }, /* ASCII + GB 2312-80 */

    { CS_charset_magic, &cs_ascii,    &map_latin1,      SET_valid,  "Big5",   ASCII,
      &(sets_iso_8859_X[1]),  2026,  "Big5" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid, "windows-1250", ASCII, NULL,     2250,  NULL },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid, "windows-1253", ASCII, NULL,     2253,  NULL },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid, "windows-1254", ASCII ,NULL,     2254,  NULL },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid, "windows-1255", ASCII ,NULL,     2255,  "CP1255" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid, "windows-1256", ASCII ,NULL,     2256,  "CP1256" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid, "windows-1257", ASCII ,NULL,     2257,  "CP1257" },
    { CS_charset_magic, &cs_ascii,    NULL,  SET_valid, "windows-1258", ASCII ,NULL,     2258,  NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,              2085,  "HZ-GB-2312" },

    /* How this compares to windows-1252 ... ?? */
    { CS_charset_magic, &cs_ascii, NULL, SET_valid, NULL, LATIN1, NULL,        2000, "ISO-8859-1-Windows-3.0-Latin-1" },
    { CS_charset_magic, &cs_ascii, NULL, SET_valid, NULL, LATIN2, NULL,        2001, "ISO-8859-2-Windows-Latin-2" },
    { CS_charset_magic, &cs_ascii, NULL, SET_valid, NULL, LATIN5, NULL,        2003, "ISO-8859-9-Windows-Latin-5" },

    /* Following are ebcdic character sets and therefore not suitable for ElmME+ use */
    
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM037",  NULL, NULL,         2028,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM038",  NULL, NULL,         2029,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM274",  NULL, NULL,         2031,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM275",  NULL, NULL,         2032,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM277",  NULL, NULL,         2033,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM278",  NULL, NULL,         2034,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM280",  NULL, NULL,         2035,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM281",  NULL, NULL,         2036,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM284",  NULL, NULL,         2037,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM285",  NULL, NULL,         2039,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM297",  NULL, NULL,         2040,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM420",  NULL, NULL,         2041,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM423",  NULL, NULL,         2042,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM424",  NULL, NULL,         2043,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM500",  NULL, NULL,         2044,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM870",  NULL, NULL,         2055,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM871",  NULL, NULL,         2056,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM880",  NULL, NULL,         2057,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM905",  NULL, NULL,         2061,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM918",  NULL, NULL,         2062,   NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2064,  "EBCDIC-AT-DE" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2065,  "EBCDIC-AT-DE-A" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2066,  "EBCDIC-CA-FR" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2067,  "EBCDIC-DK-NO" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2068,  "EBCDIC-DK-NO-A" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2069,  "EBCDIC-FI-SE" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2070,  "EBCDIC-FI-SE-A" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2071,  "EBCDIC-FR" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2072,  "EBCDIC-IT" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2073,  "EBCDIC-PT" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2074,  "EBCDIC-ES" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2075,  "EBCDIC-ES-A" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2076,  "EBCDIC-ES-S" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2077,  "EBCDIC-UK" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             2078,  "EBCDIC-US" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM00924",  NULL, NULL,       2090,  NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM01140",  NULL, NULL,       2091,  NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM01141",  NULL, NULL,       2092,  NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM01142",  NULL, NULL,       2093,  NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM01144",  NULL, NULL,       2095,  NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM01145",  NULL, NULL,       2096,  NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM01146",  NULL, NULL,       2097,  NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM01147",  NULL, NULL,       2098,  NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM01148",  NULL, NULL,       2099,  NULL },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  "IBM01149",  NULL, NULL,       2100,  NULL },

    /* Following are NOT valid charsets for MIME */

    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             1000,  "ISO-10646-UCS-2" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             1001,  "ISO-10646-UCS-4" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             1010,  "UNICODE-1-1" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             1011,  "SCSU" },  /* depends ... */
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             1013,  "UTF-16BE" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             1014,  "UTF-16LE" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             1015,  "UTF-16" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             1002,  "ISO-10646-UCS-Basic" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             1003,  "ISO-10646-Unicode-Latin1" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             0,     "ISO-10646-J-1" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             1005,  "ISO-Unicode-IBM-1261" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             1006,  "ISO-Unicode-IBM-1268" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             1007,  "ISO-Unicode-IBM-1276" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             1008,  "ISO-Unicode-IBM-1264" },
    { CS_charset_magic, &cs_unknown,  NULL,  SET_valid,  NULL,  NULL, NULL,             1009,  "ISO-Unicode-IBM-1265" },

    { 0, NULL, NULL, 0,       NULL, NULL, NULL }

};

CONST charset_t ASCII_SET     = ASCII;
CONST charset_t INVARIANT_SET = INVARIANT;
charset_t display_charset = ASCII;  /* current charset used by terminal */
charset_t system_charset  = ASCII;  /* the charset, the locale supports */

/* 'Raw' byte buffer -- treated as ascii -- used on buffering !!!!!!  */

static struct charcode_info raw_buffer = {
    CS_charset_magic, &cs_ascii, &map_ascii, SET_valid,  "*RAW*", ASCII, &(sets_iso_8859_X[0]),  0, NULL
};
CONST charset_t RAW_BUFFER = &raw_buffer;

#define ARRSIZE(SET) sizeof SET / sizeof (struct charcode_info)


CONST int precompiled_size = ARRSIZE(precompiled_sets);

/*
 * Local Variables:
 *  mode:c
 *  c-basic-offset:4
 *  buffer-file-coding-system: iso-8859-1
 * End:
 */


syntax highlighted by Code2HTML, v. 0.9.1