/*
 **********************************************************************
 *   Copyright (C) 1996-2001, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 **********************************************************************
*/
// $Revision: 1.20 $
//
// Provides functionality for mapping between
// LCID and Posix IDs.
//
// Note: All classes and code in this file are
//       intended for internal use only.
//
// Methods of interest:
//   unsigned long convertToLCID(const int8_t*);
//   const int8_t* convertToPosix(unsigned long);
//
// Kathleen Wilson, 4/30/96
//
//  Date        Name        Description
//  3/11/97     aliu        Fixed off-by-one bug in assignment operator. Added
//                          setId() method and safety check against 
//                          MAX_ID_LENGTH.
// 04/23/99     stephen     Added C wrapper for convertToPosix.
// 09/18/00     george      Removed the memory leaks.

#ifdef WIN32

/*
 * Note:
 * This code is used only internally by putil.c/uprv_getDefaultLocaleID().
 * This means that this could be much simpler code, and the mapping
 * from Win32 locale ID numbers to POSIX locale strings should
 * be the faster one.
 */

#include "locmap.h"
#include "unicode/locid.h"
#include "unicode/uloc.h"
#include "mutex.h"
#include "cstring.h"

/////////////////////////////////////////////////
//
// Internal Classes for LCID <--> POSIX Mapping
//
/////////////////////////////////////////////////

struct ILcidPosixElement
{
    uint16_t hostID;
    const char *posixID;
};

struct ILcidPosixMap
{
    const char* posixID(uint32_t fromHostID) const;

    /**
     * Searches for a Windows LCID
     *
     * @param posixid the Posix style locale id.
     * @param status gets set to U_ILLEGAL_ARGUMENT_ERROR when the Posix ID has
     *               no equivalent Windows LCID.
     * @return the LCID
     */
    uint32_t hostID(const char* fromPosixID) const;

    /**
     * Do not call this function. It is called by hostID.
     * The function is not private because this struct must stay as a C struct,
     * and this is an internal class.
     */
    uint32_t searchPosixIDmap(const char* posixID, UErrorCode* status) const;

    uint32_t numRegions;
    const ILcidPosixElement* regionMaps;

};

/////////////////////////////////////////////////
//
// Easy macros to make the LCID <--> POSIX Mapping
//
/////////////////////////////////////////////////

/*
 The standard one language/one country mapping for LCID.
 The first element must be the language, and the following
 elements are the language with the country.
 */
#define ILCID_POSIX_ELEMENT_ARRAY(hostID, languageID, posixID) \
static const ILcidPosixElement languageID[] = { \
    {LANGUAGE_LCID(hostID), #languageID},                  /* parent locale */ \
    {hostID, #posixID}, \
};

/*
 Create the map for the posixID. This macro supposes that the language string
 name is the same as the global variable name, and that the first element
 in the ILcidPosixElement is just the language.
 */
#define ILCID_POSIX_MAP(_posixID) \
    {sizeof(_posixID)/sizeof(ILcidPosixElement), _posixID}

////////////////////////////////////////////
//
// Create the table of LCID to POSIX Mapping
// None of it should be dynamically created.
//
////////////////////////////////////////////

ILCID_POSIX_ELEMENT_ARRAY(0x0436, af, af_ZA)

static const ILcidPosixElement ar[] = {
    {0x01,   "ar"},
    {0x3801, "ar_AE"},
    {0x3c01, "ar_BH"},
    {0x1401, "ar_DZ"},
    {0x0c01, "ar_EG"},
    {0x0801, "ar_IQ"},
    {0x2c01, "ar_JO"},
    {0x3401, "ar_KW"},
    {0x3001, "ar_LB"},
    {0x1001, "ar_LY"},
    {0x1801, "ar_MA"},
    {0x2001, "ar_OM"},
    {0x4001, "ar_QA"},
    {0x0401, "ar_SA"},
    {0x2801, "ar_SY"},
    {0x1c01, "ar_TN"},
    {0x2401, "ar_YE"}
};

ILCID_POSIX_ELEMENT_ARRAY(0x044d, as, as_IN)    //Todo: Data does not exist

static const ILcidPosixElement az[] = {         //Todo: Data does not exist
    {0x2c,   "az"},
    {0x082c, "az_AZ_C"},
    {0x042c, "az_AZ_L"}
};

ILCID_POSIX_ELEMENT_ARRAY(0x0423, be, be_BY)
ILCID_POSIX_ELEMENT_ARRAY(0x0402, bg, bg_BG)
ILCID_POSIX_ELEMENT_ARRAY(0x0445, bn, bn_IN)    //Todo: Data does not exist
ILCID_POSIX_ELEMENT_ARRAY(0x0403, ca, ca_ES)
ILCID_POSIX_ELEMENT_ARRAY(0x0405, cs, cs_CZ)
ILCID_POSIX_ELEMENT_ARRAY(0x0406, da, da_DK)

static const ILcidPosixElement de[] = {
    {0x07,   "de"},
    {0x0c07, "de_AT"},
    {0x0807, "de_CH"},
    {0x0407, "de_DE"},
    {0x1407, "de_LI"},    //Todo: Data does not exist
    {0x1007, "de_LU"}
};

ILCID_POSIX_ELEMENT_ARRAY(0x0408, el, el_GR)

static const ILcidPosixElement en[] = {
    {0x09,   "en"},
    {0x0c09, "en_AU"},
    {0x2809, "en_BZ"},    //Todo: Data does not exist
    {0x1009, "en_CA"},
    {0x0809, "en_GB"},
    {0x1809, "en_IE"},
    {0x2009, "en_JM"},    //Todo: Data does not exist
    {0x1409, "en_NZ"},
    {0x3409, "en_PH"},    //Todo: Data does not exist
    {0x2C09, "en_TT"},    //Todo: Data does not exist
    {0x0409, "en_US"},
    {0x2409, "en_VI"},    //Todo: Data does not exist
    {0x1c09, "en_ZA"},
    {0x3009, "en_ZW"}
};

static const ILcidPosixElement es[] = {
    {0x0a,   "es"},
    {0x2c0a, "es_AR"},
    {0x400a, "es_BO"},
    {0x340a, "es_CL"},
    {0x240a, "es_CO"},
    {0x140a, "es_CR"},
    {0x1c0a, "es_DO"},
    {0x300a, "es_EC"},
    {0x0c0a, "es_ES"},      //Modern sort.
    {0x040a, "es_ES_T"},    //Todo: Data does not exist. Traditional sort?
    {0x100a, "es_GT"},
    {0x480a, "es_HN"},
    {0x080a, "es_MX"},
    {0x4c0a, "es_NI"},
    {0x180a, "es_PA"},
    {0x280a, "es_PE"},
    {0x500a, "es_PR"},
    {0x3c0a, "es_PY"},
    {0x440a, "es_SV"},
    {0x380a, "es_UY"},
    {0x200a, "es_VE"}
};

ILCID_POSIX_ELEMENT_ARRAY(0x0425, et, et_EE)
ILCID_POSIX_ELEMENT_ARRAY(0x042d, eu, eu_ES)
ILCID_POSIX_ELEMENT_ARRAY(0x0429, fa, fa_IR)
ILCID_POSIX_ELEMENT_ARRAY(0x040b, fi, fi_FI)
ILCID_POSIX_ELEMENT_ARRAY(0x0438, fo, fo_FO)

static const ILcidPosixElement fr[] = {
    {0x0c,   "fr"},
    {0x080c, "fr_BE"},
    {0x0c0c, "fr_CA"},
    {0x100c, "fr_CH"},
    {0x040c, "fr_FR"},
    {0x140c, "fr_LU"},
    {0x180c, "fr_MC"}    //Todo: Data does not exist
};

ILCID_POSIX_ELEMENT_ARRAY(0x0447, gu, gu_IN)    //Todo: Data does not exist
ILCID_POSIX_ELEMENT_ARRAY(0x040d, he, he_IL)
ILCID_POSIX_ELEMENT_ARRAY(0x0439, hi, hi_IN)
ILCID_POSIX_ELEMENT_ARRAY(0x041a, hr, hr_HR)
ILCID_POSIX_ELEMENT_ARRAY(0x040e, hu, hu_HU)
ILCID_POSIX_ELEMENT_ARRAY(0x042b, hy, hy_AM)    //Todo: Data does not exist
ILCID_POSIX_ELEMENT_ARRAY(0x0421, id, id_ID)
//ILCID_POSIX_ELEMENT_ARRAY(0x0421, in, in_ID)    //Should really be id_ID
ILCID_POSIX_ELEMENT_ARRAY(0x040f, is, is_IS)

static const ILcidPosixElement it[] = {
    {0x10,   "it"},
    {0x0810, "it_CH"},
    {0x0410, "it_IT"}
};

ILCID_POSIX_ELEMENT_ARRAY(0x040d, iw, iw_IL)    //Should really be he_IL
ILCID_POSIX_ELEMENT_ARRAY(0x0411, ja, ja_JP)
ILCID_POSIX_ELEMENT_ARRAY(0x0437, ka, ka_GE)    //Todo: Data does not exist
ILCID_POSIX_ELEMENT_ARRAY(0x043f, kk, kk_KZ)    //Todo: Data does not exist
ILCID_POSIX_ELEMENT_ARRAY(0x044b, kn, kn_IN)    //Todo: Data does not exist

static const ILcidPosixElement ko[] = {
    {0x12,   "ko"},
    {0x0812, "ko_KP"},
    {0x0412, "ko_KR"}
};

ILCID_POSIX_ELEMENT_ARRAY(0x0457, kok, kok_IN)
ILCID_POSIX_ELEMENT_ARRAY(0x0460, ks,  ks_IN)   //Todo: Data does not exist
ILCID_POSIX_ELEMENT_ARRAY(0x0427, lt,  lt_LT)
ILCID_POSIX_ELEMENT_ARRAY(0x0426, lv,  lv_LV)
ILCID_POSIX_ELEMENT_ARRAY(0x042f, mk,  mk_MK)
ILCID_POSIX_ELEMENT_ARRAY(0x044c, ml,  ml_IN)   //Todo: Data does not exist
ILCID_POSIX_ELEMENT_ARRAY(0x0458, mni, mni_IN)  //Todo: Data does not exist
ILCID_POSIX_ELEMENT_ARRAY(0x044e, mr,  mr_IN)

static const ILcidPosixElement ms[] = {         //Todo: Data does not exist
    {0x3e,   "ms"},
    {0x083e, "ms_BN"},   // Brunei Darussalam
    {0x043e, "ms_MY"}    // Malaysia
};

// The MSJDK documentation says this is maltese, but it's not supported.
ILCID_POSIX_ELEMENT_ARRAY(0x043a, mt, mt_MT)
ILCID_POSIX_ELEMENT_ARRAY(0x0414, nb, nb_NO)

static const ILcidPosixElement ne[] = {         //Todo: Data does not exist
    {0x61,   "ne"},
    {0x0861, "ne_IN"},   // India
    {0x0461, "ne_NP"}    // Nepal
};

static const ILcidPosixElement nl[] = {
    {0x13,   "nl"},
    {0x0813, "nl_BE"},
    {0x0413, "nl_NL"}
};


static const ILcidPosixElement no[] = {
    {0x14,   "no"},
    {0x0414, "no_NO"},
    {0x0814, "nn_NO_NY"}
};

ILCID_POSIX_ELEMENT_ARRAY(0x0814, nn, nn_NO)
ILCID_POSIX_ELEMENT_ARRAY(0x0448, or, or_IN)    //Todo: Data does not exist
ILCID_POSIX_ELEMENT_ARRAY(0x0446, pa, pa_IN)    //Todo: Data does not exist
ILCID_POSIX_ELEMENT_ARRAY(0x0415, pl, pl_PL)

static const ILcidPosixElement pt[] = {
    {0x16,   "pt"},
    {0x0416, "pt_BR"},
    {0x0816, "pt_PT"}
};

ILCID_POSIX_ELEMENT_ARRAY(0x0418, ro, ro_RO)

static const ILcidPosixElement root[] = {
    {0x00,   "root"}
};

ILCID_POSIX_ELEMENT_ARRAY(0x0419, ru, ru_RU)
ILCID_POSIX_ELEMENT_ARRAY(0x044f, sa, sa_IN)    //Todo: Data does not exist
ILCID_POSIX_ELEMENT_ARRAY(0x0459, sd, sd_IN)    //Todo: Data does not exist
ILCID_POSIX_ELEMENT_ARRAY(0x081a, sh, sh_YU)
ILCID_POSIX_ELEMENT_ARRAY(0x041b, sk, sk_SK)
ILCID_POSIX_ELEMENT_ARRAY(0x0424, sl, sl_SI)
ILCID_POSIX_ELEMENT_ARRAY(0x041c, sq, sq_AL)
ILCID_POSIX_ELEMENT_ARRAY(0x0c1a, sr, sr_YU)

static const ILcidPosixElement sv[] = {
    {0x1d,   "sv"},
    {0x081d, "sv_FI"},
    {0x041d, "sv_SE"}
};

ILCID_POSIX_ELEMENT_ARRAY(0x0441, sw, sw_KE)// The MSJDK documentation says the default country is Kenya.
ILCID_POSIX_ELEMENT_ARRAY(0x0449, ta, ta_IN)
ILCID_POSIX_ELEMENT_ARRAY(0x044a, te, te_IN)
ILCID_POSIX_ELEMENT_ARRAY(0x041e, th, th_TH)
ILCID_POSIX_ELEMENT_ARRAY(0x041f, tr, tr_TR)
ILCID_POSIX_ELEMENT_ARRAY(0x0444, tt, tt_RU)    //Todo: Data does not exist
ILCID_POSIX_ELEMENT_ARRAY(0x0422, uk, uk_UA)

static const ILcidPosixElement ur[] = {         //Todo: Data does not exist
    {0x20,   "ur"},
    {0x0820, "ur_IN"},
    {0x0420, "ur_PK"}
};

static const ILcidPosixElement uz[] = {      //Todo: Data does not exist
    {0x43,   "uz"},
    {0x0843, "uz_UZ_C"},
    {0x0443, "uz_UZ_L"}
};

ILCID_POSIX_ELEMENT_ARRAY(0x042a, vi, vi_VN)

static const ILcidPosixElement zh[] = {
    {0x04,   "zh"},
    {0x0804, "zh_CN"},
    {0x0c04, "zh_HK"},
    {0x1404, "zh_MO"},
    {0x1004, "zh_SG"},
    {0x0404, "zh_TW"}
};

void
IGlobalLocales::initializeMapRegions()
{
/*  This commented out code leaks memory. Use the LCID values as reference only.
    These values originally came from winnt.h
*/
/*    if (fgPosixIDmap != 0)  // already mapped
        return;

    ILcidPosixMap *newPosixIDmap = new ILcidPosixMap[IGlobalLocales::kMapSize];
    newPosixIDmap[0].initialize(0x0436,  "af_ZA");       //    af  Afrikaans                 0x36 
    newPosixIDmap[1].initialize(0x01,    "ar",     16);  //    ar  Arabic                    0x01 
    newPosixIDmap[2].initialize(0x044d,  "as_IN");       //    as  Assamese                  0x4d 
    newPosixIDmap[3].initialize(0x2c,  "az", 2);       //    az  Azerbaijani               0x2c 
    newPosixIDmap[4].initialize(0x0423,  "be_BY");       //    be  Byelorussian              0x23 
    newPosixIDmap[5].initialize(0x0402,  "bg_BG");       //    bg  Bulgarian                 0x02 
    newPosixIDmap[6].initialize(0x0445,  "bn_IN");       //    bn  Bengali; Bangla           0x45 
    newPosixIDmap[7].initialize(0x0403,  "ca_ES");       //    ca  Catalan                   0x03 
    newPosixIDmap[8].initialize(0x0405,  "cs_CZ");       //    cs  Czech                     0x05 
    newPosixIDmap[9].initialize(0x0406,  "da_DK");       //    da  Danish                    0x06 
    newPosixIDmap[10].initialize(0x07,   "de",     5);   //    de  German                    0x07 
    newPosixIDmap[11].initialize(0x0408, "el_GR");       //    el  Greek                     0x08 
    newPosixIDmap[12].initialize(0x09,   "en",     13);   //    en  English                   0x09 
    newPosixIDmap[13].initialize(0x0a,   "es",     20);  //    es  Spanish                   0x0a 
    newPosixIDmap[14].initialize(0x0425, "et_EE");       //    et  Estonian                  0x25 
    newPosixIDmap[15].initialize(0x042d, "eu_ES");       //    eu  Basque                    0x2d 
    newPosixIDmap[16].initialize(0x0429, "fa_IR");       //    fa  Farsi                    0x29 
    newPosixIDmap[17].initialize(0x040b, "fi_FI");       //    fi  Finnish                   0x0b 
    newPosixIDmap[18].initialize(0x0438, "fo_FO");       //    fo  Faroese                   0x38 
    newPosixIDmap[19].initialize(0x0c,   "fr",     6);   //    fr  French                    0x0c 
    newPosixIDmap[20].initialize(0x0447, "gu_IN");       //    gu  Gujarati                  0x47 
    newPosixIDmap[21].initialize(0x040d, "he_IL");       //    he  Hebrew (formerly iw)      0x0d 
    newPosixIDmap[22].initialize(0x0439, "hi_IN");       //    hi  Hindi                     0x39 
    newPosixIDmap[23].initialize(0x041a, "hr_HR");       //    hr  Croatian                  0x1a 
    newPosixIDmap[24].initialize(0x040e, "hu_HU");       //    hu  Hungarian                 0x0e 
    newPosixIDmap[25].initialize(0x042b, "hy_AM");       //    hy  Armenian                  0x2b 
    newPosixIDmap[26].initialize(0x0421, "id_ID");       //    id  Indonesian (formerly in)  0x21 
    newPosixIDmap[27].initialize(0x0421, "in_ID");       //    in  Indonesian               0x21 
    newPosixIDmap[28].initialize(0x040f, "is_IS");       //    is  Icelandic                 0x0f 
    newPosixIDmap[29].initialize(0x10,   "it",     2);   //    it  Italian                   0x10 
    newPosixIDmap[30].initialize(0x040d, "iw_IL");       //    iw  Hebrew                   0x0d 
    newPosixIDmap[31].initialize(0x0411, "ja_JP");       //    ja  Japanese                  0x11 
    newPosixIDmap[32].initialize(0x0437, "ka_GE");       //    ka  Georgian                  0x37 
    newPosixIDmap[33].initialize(0x043f, "kk_KZ");       //    kk  Kazakh                    0x3f 
    newPosixIDmap[34].initialize(0x044b, "kn_IN");       //    kn  Kannada                   0x4b 
    newPosixIDmap[35].initialize(0x12,   "ko",     2);   //    ko  Korean                    0x12 
    newPosixIDmap[36].initialize(0x0457, "kok_IN");      //    kok Konkani                  0x57 
    newPosixIDmap[37].initialize(0x0460, "ks_IN");       //    ks  Kashmiri                  0x60 
    newPosixIDmap[38].initialize(0x0427, "lt_LT");       //    lt  Lithuanian                0x27 
    newPosixIDmap[39].initialize(0x0426, "lv_LV");       //    lv  Latvian, Lettish          0x26 
    newPosixIDmap[40].initialize(0x042f, "mk_MK");       //    mk  Macedonian                0x2f 
    newPosixIDmap[41].initialize(0x044c, "ml_IN");       //    ml  Malayalam                 0x4c 
    newPosixIDmap[42].initialize(0x0458, "mni_IN");      //    mni Manipuri                 0x58 
    newPosixIDmap[43].initialize(0x044e, "mr_IN");       //    mr  Marathi                   0x4e 
    newPosixIDmap[44].initialize(0x3e,   "ms",    2);    //    ms  Malay                     0x3e 
    newPosixIDmap[45].initialize(0x61,   "ne",    2);    //    ne  Nepali                    0x61 
    newPosixIDmap[46].initialize(0x13,   "nl",     2);   //    nl  Dutch                     0x13 
    newPosixIDmap[47].initialize(0x14,   "no",     2);   //    no  Norwegian                 0x14 
    newPosixIDmap[48].initialize(0x0448, "or_IN");       //    or  Oriya                     0x48 
    newPosixIDmap[49].initialize(0x0446, "pa_IN");       //    pa  Punjabi                   0x46 
    newPosixIDmap[50].initialize(0x0415, "pl_PL");       //    pl  Polish                    0x15 
    newPosixIDmap[51].initialize(0x16,   "pt",     2);   //    pt  Portuguese                0x16 
    newPosixIDmap[52].initialize(0x0418, "ro_RO");       //    ro  Romanian                  0x18 
    newPosixIDmap[53].initialize(0x00, "root");          //    root                          0x00
    newPosixIDmap[54].initialize(0x0419, "ru_RU");       //    ru  Russian                   0x19 
    newPosixIDmap[55].initialize(0x044f, "sa_IN");       //    sa  Sanskrit                  0x4f 
    newPosixIDmap[56].initialize(0x0459, "sd_IN");       //    sd  Sindhi                    0x59 
    newPosixIDmap[57].initialize(0x081a, "sh_YU");       //    sh  Serbo-Croatian           0x1a 
    newPosixIDmap[58].initialize(0x041b, "sk_SK");       //    sk  Slovak                    0x1b 
    newPosixIDmap[59].initialize(0x0424, "sl_SI");       //    sl  Slovenian                 0x24 
    newPosixIDmap[60].initialize(0x041c, "sq_AL");       //    sq  Albanian                  0x1c 
    newPosixIDmap[61].initialize(0x0c1a, "sr_YU");       //    sr  Serbian                   0x1a 
    newPosixIDmap[62].initialize(0x1d,   "sv_SE",    2); //    sv  Swedish                   0x1d 
    newPosixIDmap[63].initialize(0x0441, "sw");          //    sw  Swahili                   0x41 
    newPosixIDmap[64].initialize(0x0449, "ta_IN");       //    ta  Tamil                     0x49 
    newPosixIDmap[65].initialize(0x044a, "te_IN");       //    te  Telugu                    0x4a 
    newPosixIDmap[66].initialize(0x041e, "th_TH");       //    th  Thai                      0x1e 
    newPosixIDmap[67].initialize(0x041f, "tr_TR");       //    tr  Turkish                   0x1f 
    newPosixIDmap[68].initialize(0x0444, "tt_RU");       //    tt  Tatar                     0x44 
    newPosixIDmap[69].initialize(0x0422, "uk_UA");       //    uk  Ukrainian                 0x22 
    newPosixIDmap[70].initialize(0x20,   "ur", 2);       //    ur  Urdu                      0x20 
    newPosixIDmap[71].initialize(0x43,   "uz_UZ", 2);    //    uz  Uzbek                     0x43 
    newPosixIDmap[72].initialize(0x042a, "vi_VN");       //    vi  Vietnamese                0x2a 
    newPosixIDmap[73].initialize(0x04,   "zh",     5);   //    zh  Chinese                   0x04 

    newPosixIDmap[1].addRegion(0x3801, "ar_AE");
    newPosixIDmap[1].addRegion(0x3c01, "ar_BH");
    newPosixIDmap[1].addRegion(0x1401, "ar_DZ");
    newPosixIDmap[1].addRegion(0x0c01, "ar_EG");
    newPosixIDmap[1].addRegion(0x0801, "ar_IQ");
    newPosixIDmap[1].addRegion(0x2c01, "ar_JO");
    newPosixIDmap[1].addRegion(0x3401, "ar_KW");
    newPosixIDmap[1].addRegion(0x3001, "ar_LB");
    newPosixIDmap[1].addRegion(0x1001, "ar_LY");
    newPosixIDmap[1].addRegion(0x1801, "ar_MA");
    newPosixIDmap[1].addRegion(0x2001, "ar_OM");
    newPosixIDmap[1].addRegion(0x4001, "ar_QA");
    newPosixIDmap[1].addRegion(0x0401, "ar_SA");
    newPosixIDmap[1].addRegion(0x2801, "ar_SY");
    newPosixIDmap[1].addRegion(0x1c01, "ar_TN");
    newPosixIDmap[1].addRegion(0x2401, "ar_YE");

    newPosixIDmap[3].addRegion(0x082c, "az_AZ_C");
    newPosixIDmap[3].addRegion(0x042c, "az_AZ_L");

    newPosixIDmap[10].addRegion(0x0c07, "de_AT");
    newPosixIDmap[10].addRegion(0x0807, "de_CH");
    newPosixIDmap[10].addRegion(0x0407, "de_DE");
    newPosixIDmap[10].addRegion(0x1407, "de_LI");
    newPosixIDmap[10].addRegion(0x1007, "de_LU");

    newPosixIDmap[12].addRegion(0x0c09, "en_AU");
    newPosixIDmap[12].addRegion(0x2809, "en_BZ");
    newPosixIDmap[12].addRegion(0x1009, "en_CA");
    newPosixIDmap[12].addRegion(0x0809, "en_GB");
    newPosixIDmap[12].addRegion(0x1809, "en_IE");
    newPosixIDmap[12].addRegion(0x2009, "en_JM");
    newPosixIDmap[12].addRegion(0x1409, "en_NZ");
    newPosixIDmap[12].addRegion(0x3409, "en_PH");
    newPosixIDmap[12].addRegion(0x2C09, "en_TT");
    newPosixIDmap[12].addRegion(0x0409, "en_US");
    newPosixIDmap[12].addRegion(0x2409, "en_VI");
    newPosixIDmap[12].addRegion(0x1c09, "en_ZA");
    newPosixIDmap[12].addRegion(0x3009, "en_ZW");

    newPosixIDmap[13].addRegion(0x2c0a, "es_AR");
    newPosixIDmap[13].addRegion(0x400a, "es_BO");
    newPosixIDmap[13].addRegion(0x340a, "es_CL");
    newPosixIDmap[13].addRegion(0x240a, "es_CO");
    newPosixIDmap[13].addRegion(0x140a, "es_CR");
    newPosixIDmap[13].addRegion(0x1c0a, "es_DO");
    newPosixIDmap[13].addRegion(0x300a, "es_EC");
    newPosixIDmap[13].addRegion(0x0c0a, "es_ES");
    newPosixIDmap[13].addRegion(0x040a, "es_ES_T");
    newPosixIDmap[13].addRegion(0x100a, "es_GT");
    newPosixIDmap[13].addRegion(0x480a, "es_HN");
    newPosixIDmap[13].addRegion(0x080a, "es_MX");
    newPosixIDmap[13].addRegion(0x4c0a, "es_NI");
    newPosixIDmap[13].addRegion(0x180a, "es_PA");
    newPosixIDmap[13].addRegion(0x280a, "es_PE");
    newPosixIDmap[13].addRegion(0x500a, "es_PR");
    newPosixIDmap[13].addRegion(0x3c0a, "es_PY");
    newPosixIDmap[13].addRegion(0x440a, "es_SV");
    newPosixIDmap[13].addRegion(0x380a, "es_UY");
    newPosixIDmap[13].addRegion(0x200a, "es_VE");

    newPosixIDmap[19].addRegion(0x080c, "fr_BE");
    newPosixIDmap[19].addRegion(0x0c0c, "fr_CA");
    newPosixIDmap[19].addRegion(0x100c, "fr_CH");
    newPosixIDmap[19].addRegion(0x040c, "fr_FR");
    newPosixIDmap[19].addRegion(0x140c, "fr_LU");
    newPosixIDmap[19].addRegion(0x180c, "fr_MC");

    newPosixIDmap[29].addRegion(0x0810, "it_CH");
    newPosixIDmap[29].addRegion(0x0410, "it_IT");

    newPosixIDmap[35].addRegion(0x0812, "ko_KP");
    newPosixIDmap[35].addRegion(0x0412, "ko_KR");

    newPosixIDmap[44].addRegion(0x083e, "ms_BN");  // Brunei Darussalam
    newPosixIDmap[44].addRegion(0x043e, "ms_MY");  // Malaysia

    newPosixIDmap[45].addRegion(0x0861, "ne_IN");  // India
    newPosixIDmap[45].addRegion(0x0461, "ne_NP");  // Nepal?

    newPosixIDmap[46].addRegion(0x0813, "nl_BE");
    newPosixIDmap[46].addRegion(0x0413, "nl_NL");

    newPosixIDmap[47].addRegion(0x0414, "no_NO");
    newPosixIDmap[47].addRegion(0x0814, "no_NO_NY");

    newPosixIDmap[51].addRegion(0x0416, "pt_BR");
    newPosixIDmap[51].addRegion(0x0816, "pt_PT");

    newPosixIDmap[62].addRegion(0x081d, "sv_FI");
    newPosixIDmap[62].addRegion(0x041d, "sv_SE");

    newPosixIDmap[70].addRegion(0x0820, "ur_IN");
    newPosixIDmap[70].addRegion(0x0420, "ur_PK");

    newPosixIDmap[71].addRegion(0x0843, "uz_UZ_C");
    newPosixIDmap[71].addRegion(0x0443, "uz_UZ_L");

    newPosixIDmap[73].addRegion(0x0804, "zh_CN");
    newPosixIDmap[73].addRegion(0x0c04, "zh_HK");
    newPosixIDmap[73].addRegion(0x1404, "zh_MO");
    newPosixIDmap[73].addRegion(0x1004, "zh_SG");
    newPosixIDmap[73].addRegion(0x0404, "zh_TW");*/

    // This must be static
    static ILcidPosixMap localPosixIDmap[] = {
        ILCID_POSIX_MAP(af),          //  af  Afrikaans                 0x36
        ILCID_POSIX_MAP(ar),          //  ar  Arabic                    0x01
        ILCID_POSIX_MAP(as),          //  as  Assamese                  0x4d
        ILCID_POSIX_MAP(az),          //  az  Azerbaijani               0x2c
        ILCID_POSIX_MAP(be),          //  be  Byelorussian              0x23
        ILCID_POSIX_MAP(bg),          //  bg  Bulgarian                 0x02
        ILCID_POSIX_MAP(bn),          //  bn  Bengali; Bangla           0x45
        ILCID_POSIX_MAP(ca),          //  ca  Catalan                   0x03
        ILCID_POSIX_MAP(cs),          //  cs  Czech                     0x05
        ILCID_POSIX_MAP(da),          //  da  Danish                    0x06
        ILCID_POSIX_MAP(de),          //  de  German                    0x07
        ILCID_POSIX_MAP(el),          //  el  Greek                     0x08
        ILCID_POSIX_MAP(en),          //  en  English                   0x09
        ILCID_POSIX_MAP(es),          //  es  Spanish                   0x0a
        ILCID_POSIX_MAP(et),          //  et  Estonian                  0x25
        ILCID_POSIX_MAP(eu),          //  eu  Basque                    0x2d
        ILCID_POSIX_MAP(fa),          //  fa  Farsi                     0x29
        ILCID_POSIX_MAP(fi),          //  fi  Finnish                   0x0b
        ILCID_POSIX_MAP(fo),          //  fo  Faroese                   0x38
        ILCID_POSIX_MAP(fr),          //  fr  French                    0x0c
        ILCID_POSIX_MAP(gu),          //  gu  Gujarati                  0x47
        ILCID_POSIX_MAP(he),          //  he  Hebrew (formerly iw)      0x0d
        ILCID_POSIX_MAP(hi),          //  hi  Hindi                     0x39
        ILCID_POSIX_MAP(hr),          //  hr  Croatian                  0x1a
        ILCID_POSIX_MAP(hu),          //  hu  Hungarian                 0x0e
        ILCID_POSIX_MAP(hy),          //  hy  Armenian                  0x2b
        ILCID_POSIX_MAP(id),          //  id  Indonesian (formerly in)  0x21
//        ILCID_POSIX_MAP(in_ID),       //  in  Indonesian                0x21
        ILCID_POSIX_MAP(is),          //  is  Icelandic                 0x0f
        ILCID_POSIX_MAP(it),          //  it  Italian                   0x10
        ILCID_POSIX_MAP(iw),          //  iw  Hebrew (should be removed)0x0d
        ILCID_POSIX_MAP(ja),          //  ja  Japanese                  0x11
        ILCID_POSIX_MAP(ka),          //  ka  Georgian                  0x37
        ILCID_POSIX_MAP(kk),          //  kk  Kazakh                    0x3f
        ILCID_POSIX_MAP(kn),          //  kn  Kannada                   0x4b
        ILCID_POSIX_MAP(ko),          //  ko  Korean                    0x12
        ILCID_POSIX_MAP(kok),         //  kok Konkani                   0x57
        ILCID_POSIX_MAP(ks),          //  ks  Kashmiri                  0x60
        ILCID_POSIX_MAP(lt),          //  lt  Lithuanian                0x27
        ILCID_POSIX_MAP(lv),          //  lv  Latvian, Lettish          0x26
        ILCID_POSIX_MAP(mk),          //  mk  Macedonian                0x2f
        ILCID_POSIX_MAP(ml),          //  ml  Malayalam                 0x4c
        ILCID_POSIX_MAP(mni),         //  mni Manipuri                  0x58
        ILCID_POSIX_MAP(mr),          //  mr  Marathi                   0x4e
        ILCID_POSIX_MAP(ms),          //  ms  Malay                     0x3e
        ILCID_POSIX_MAP(mt),          //  mt  Maltese                   0x3a
        ILCID_POSIX_MAP(nb),          //  no  Norwegian                 0x14
        ILCID_POSIX_MAP(ne),          //  ne  Nepali                    0x61
        ILCID_POSIX_MAP(nl),          //  nl  Dutch                     0x13
        ILCID_POSIX_MAP(nn),          //  no  Norwegian                 0x14
        ILCID_POSIX_MAP(no),          //  no  Norwegian                 0x14
        ILCID_POSIX_MAP(or),          //  or  Oriya                     0x48
        ILCID_POSIX_MAP(pa),          //  pa  Punjabi                   0x46
        ILCID_POSIX_MAP(pl),          //  pl  Polish                    0x15
        ILCID_POSIX_MAP(pt),          //  pt  Portuguese                0x16
        ILCID_POSIX_MAP(ro),          //  ro  Romanian                  0x18
        ILCID_POSIX_MAP(root),        //  root                          0x00
        ILCID_POSIX_MAP(ru),          //  ru  Russian                   0x19
        ILCID_POSIX_MAP(sa),          //  sa  Sanskrit                  0x4f
        ILCID_POSIX_MAP(sd),          //  sd  Sindhi                    0x59
        ILCID_POSIX_MAP(sh),             //  sh  Serbo-Croatian            0x1a
        ILCID_POSIX_MAP(sk),          //  sk  Slovak                    0x1b
        ILCID_POSIX_MAP(sl),          //  sl  Slovenian                 0x24
        ILCID_POSIX_MAP(sq),          //  sq  Albanian                  0x1c
        ILCID_POSIX_MAP(sr),          //  sr  Serbian                   0x1a
        ILCID_POSIX_MAP(sv),          //  sv  Swedish                   0x1d
        ILCID_POSIX_MAP(sw),          //  sw  Swahili                   0x41
        ILCID_POSIX_MAP(ta),          //  ta  Tamil                     0x49
        ILCID_POSIX_MAP(te),          //  te  Telugu                    0x4a
        ILCID_POSIX_MAP(th),          //  th  Thai                      0x1e
        ILCID_POSIX_MAP(tr),          //  tr  Turkish                   0x1f
        ILCID_POSIX_MAP(tt),          //  tt  Tatar                     0x44
        ILCID_POSIX_MAP(uk),          //  uk  Ukrainian                 0x22
        ILCID_POSIX_MAP(ur),          //  ur  Urdu                      0x20
        ILCID_POSIX_MAP(uz),          //  uz  Uzbek                     0x43
        ILCID_POSIX_MAP(vi),          //  vi  Vietnamese                0x2a
        ILCID_POSIX_MAP(zh),          //  zh  Chinese                   0x04
    };

    {
        Mutex m;
        if (!PosixIDmap)
        {
            // This assignment is okay because the local variable is static too.
            PosixIDmap  = localPosixIDmap;
            LocaleCount = sizeof(localPosixIDmap)/sizeof(ILcidPosixMap);
            WildCard = "??_??";
        }
    }
}

uint32_t       IGlobalLocales::LocaleCount = sizeof(PosixIDmap)/sizeof(ILcidPosixMap);
ILcidPosixMap *IGlobalLocales::PosixIDmap  = NULL;
const char    *IGlobalLocales::WildCard = "??_??";

//////////////////////////////////////
//
// LCID --> POSIX
//
/////////////////////////////////////

const char*
IGlobalLocales::convertToPosix(uint32_t hostid, UErrorCode *status)
{
    uint16_t langID = LANGUAGE_LCID(hostid);
    uint32_t index;

    initializeMapRegions();

    for (index = 0; index < LocaleCount; index++)
    {
        if (langID == PosixIDmap[index].regionMaps->hostID)
        {
            return PosixIDmap[index].posixID(hostid);
        }
    }

    //no match found
    *status = U_ILLEGAL_ARGUMENT_ERROR;
    return WildCard;
}

U_CFUNC const char *
T_convertToPosix(uint32_t hostid, UErrorCode* status)
{
    return IGlobalLocales::convertToPosix(hostid, status);
}


//////////////////////////////////////
//
// POSIX --> LCID
//
/////////////////////////////////////

uint32_t
IGlobalLocales::convertToLCID(const char* posixID, UErrorCode* status)
{
    initializeMapRegions();

    uint32_t   low    = 0;
    uint32_t   mid;
    uint32_t   high   = LocaleCount - 1;
    int32_t    compVal;
    char       langID[ULOC_FULLNAME_CAPACITY];

    // Check for incomplete id.
    if (!posixID || uprv_strlen(posixID) < 2)
        return 0;

    uloc_getLanguage(posixID, langID, sizeof(langID), status);
    if (U_FAILURE(*status)) {
        return 0;
    }

    //Binary search for the map entry
    while (low <= high) {

        mid = (low + high) / 2;

        compVal = uprv_strcmp(langID, PosixIDmap[mid].regionMaps->posixID);

        if (compVal < 0)
            high = mid - 1;
        else if (compVal > 0)
            low = mid + 1;
        else  // found match!
            return PosixIDmap[mid].hostID(posixID);

        if (mid == 0)  // not found
            break;
    }

    // no match found
    *status = U_ILLEGAL_ARGUMENT_ERROR;
    return 0;   // return international (root)
}


/* Assumes Posix IDs are sorted alphabetically
 */
uint32_t
ILcidPosixMap::hostID(const char* posixID) const
{
    UErrorCode status = U_ZERO_ERROR;
    char     hostID[ULOC_FULLNAME_CAPACITY];
    char    *hostPtr = hostID;
    uint32_t value;
    int32_t hostLen = (int32_t)(strlen(posixID));
    int32_t  size, hostSize;

    // Check for incomplete id. All LCIDs have a default country,
    // and a 0x0400 in 0xFC00 indicates a default country.
    // So Windows may not like hostLangID without a default
    // country.
    if (!numRegions || hostLen < 5)
        return regionMaps->hostID;
    if (hostLen >= ULOC_FULLNAME_CAPACITY)
        hostLen = ULOC_FULLNAME_CAPACITY - 1;

    // We do this because the posixID may have a '-' separator and
    // incorrect string case
    hostSize = uloc_getLanguage(posixID,
                                hostID,
                                ULOC_LANG_CAPACITY + 1,
                                &status);
    if (U_SUCCESS(status))
    {
        hostPtr += hostSize;
        hostPtr[-1] = '_';
        size = uloc_getCountry(posixID,
                               hostPtr,
                               ULOC_COUNTRY_CAPACITY + 1,
                               &status);
        hostSize += size - 1;
        if (U_SUCCESS(status) && hostSize < hostLen)
        {
            hostPtr += size;
            hostPtr[-1] = '_';
            uloc_getVariant(posixID, hostPtr, hostLen - size, &status);
        }
    }

    // Try to find it the first time.
    value = searchPosixIDmap(hostID, &status);
    if (U_SUCCESS(status)) {
        return value;
    }

    // Couldn't find it. Cut off the last part of the locale
    while (hostPtr > hostID && *hostPtr != '_')
    {
        hostPtr--;
    }
    if (*hostPtr == '_')
    {
        *hostPtr = 0;
    }

    // Try it again without the last part of the locale
    status = U_ZERO_ERROR;
    value = searchPosixIDmap(hostID, &status);
    if (U_SUCCESS(status)) {
        return value;
    }

    // No match found. Return the language
    return regionMaps->hostID;
}

/**
 * Searches for a Windows LCID
 *
 * @param posixid the Posix style locale id.
 * @param status gets set to U_ILLEGAL_ARGUMENT_ERROR when the Posix ID has
 *               no equivalent Windows LCID.
 * @return the LCID
 */
uint32_t
ILcidPosixMap::searchPosixIDmap(const char* posixID, UErrorCode* status) const
{
    uint32_t low  = 1;
    uint32_t mid;
    uint32_t high = numRegions;
    int32_t  compVal;

    // Binary search for the map entry
    // The element at index 0 is always the POSIX wild card,
    // so start search at index 1.
    while (low <= high) {

        mid = (low + high) / 2;

        compVal = uprv_strcmp(posixID, regionMaps[mid].posixID);

        if (compVal < 0)
            high = mid - 1;
        else if (compVal > 0)
            low = mid + 1;
        else  // found match!
            return regionMaps[mid].hostID;
    }

    //no match found
    *status = U_ILLEGAL_ARGUMENT_ERROR;
    return regionMaps->hostID;
}


const char*
ILcidPosixMap::posixID(uint32_t hostID) const
{
    uint32_t i;
    for (i = 0; i <= numRegions; i++)
    {
        if (regionMaps[i].hostID == hostID)
        {
            return regionMaps[i].posixID;
        }
    }

    // If you get here, then no matching region was found,
    // so return the language id with the wild card region.
    return regionMaps[0].posixID;
}

#endif
