// Copyright (c) 1998 - 1999  Microsoft Corporation.  All Rights Reserved.
#ifndef __ISO3166_H
#define __ISO3166_H

char DVDToUpper(char x)
{
    if('a' <= x && x <= 'z') {
        return x - ('a' - 'A');
    } else {
        return x;
    }
}

struct ISO3166
{
    const char *Code;
    
    // access the table as ISO3166::GetCountry()
    static const ISO3166& GetCountry( unsigned i );
    static unsigned	GetNumCountries();

    // creates an ISO code from a two letter string
    static WORD	PackCode( const char string[2] )
    {
        return DVDToUpper(string[0])<<8 | DVDToUpper(string[1]);
    }
    
};

// ISO3166 country code table
static const ISO3166 g_Table[] =
{ // current as of Dec 22, 2000
    {/* "Afghanistan", */       "AF"},
    {/* "Albania", */           "AL"},
    {/* "Algeria", */           "DZ"},
    {/* "American Samoa", */    "AS"},
    {/* "Andorra", */           "AD"},
    {/* "Angola", */            "AO"},
    {/* "Anguilla", */          "AI"},
    {/* "Antarctica", */        "AQ"},
    {/* "Antigua and Barbuda", */  "AG"},
    {/* "Argentina", */         "AR"},
    {/* "Armenia", */           "AM"},
    {/* "Aruba", */             "AW"},
    {/* "Australia", */         "AU"},
    {/* "Austria", */           "AT"},
    {/* "Azerbaijan", */        "AZ"},
    {/* "Bahamas", */           "BS"},
    {/* "Bahrain", */           "BH"},
    {/* "Bangladesh", */        "BD"},
    {/* "Barbados", */          "BB"},
    {/* "Belarus", */           "BY"},
    {/* "Belgium", */           "BE"},
    {/* "Belize", */            "BZ"},
    {/* "Benin", */             "BJ"},
    {/* "Bermuda", */           "BM"},
    {/* "Bhutan", */            "BT"},
    {/* "Bolivia", */           "BO"},
    {/* "Bosnia and Herzegovina", */        "BA"},
    {/* "Botswana", */          "BW"},
    {/* "Bouvet Island", */     "BV"},
    {/* "Brazil", */            "BR"},
    {/* "British Indian Ocean Territory", */  "IO"},
    {/* "Brunei Darussalam", */ "BN"},
    {/* "Bulgaria", */          "BG"},
    {/* "Burkina Faso", */      "BF"},
    {/* "Burundi", */           "BI"},
    {/* "Cambodia", */          "KH"},
    {/* "Cameroon", */          "CM"},
    {/* "Canada", */            "CA"},
    {/* "Cape Verde", */        "CV"},
    {/* "Cayman Islands", */    "KY"},
    {/* "Central African Republic", */      "CF"},
    {/* "Chad", */              "TD"},
    {/* "Channel Islands", */	"GB"},
    {/* "Chile", */             "CL"},
    {/* "China", */             "CN"},
    {/* "Christmas Island", */  "CX"},
    {/* "Cocos (Keeling) Islands", */       "CC"},
    {/* "Colombia", */          "CO"},
    {/* "Comoros", */           "KM"},
    {/* "Congo", */             "CG"},
    {/* "Cook Islands", */      "CK"},
    {/* "Costa Rica", */        "CR"},
    {/* "Côte d'Ivoire", */     "CI"},
    {/* "Croatia (local name: Hrvatska)", */  "HR"},
    {/* "Cuba", */              "CU"},
    {/* "Cyprus", */            "CY"},
    {/* "Czech Republic", */    "CZ"},
    {/* "Denmark", */           "DK"},
    {/* "Djibouti", */          "DJ"},
    {/* "Dominica", */          "DM"},
    {/* "Dominican Republic", */  "DO"},
    {/* "East Timor", */        "TP"},
    {/* "Ecuador", */           "EC"},
    {/* "Egypt", */             "EG"},
    {/* "El Salvador", */       "SV"},
    {/* "Equatorial Guinea", */  "GQ"},
    {/* "Eritrea", */           "ER"},
    {/* "Estonia", */           "EE"},
    {/* "Ethiopia", */          "ET"},
    {/* "Falkland Islands (Malvinas)", */   "FK"},
    {/* "Faroe Islands", */     "FO"},
    {/* "Fiji", */              "FJ"},
    {/* "Finland", */           "FI"},
    {/* "France", */            "FR"},
    {/* "France, Metropolitan", */  "FX"},
    {/* "French Guiana", */     "GF"},
    {/* "French Polynesia", */  "PF"},
    {/* "French Southern and Antarctic Lands", */	"TF"},
    {/* "Gabon", */             "GA"},
    {/* "Gambia", */            "GM"},
    {/* "Georgia", */           "GE"},
    {/* "Germany", */           "DE"},
    {/* "Ghana", */             "GH"},
    {/* "Gibraltar", */         "GI"},
    {/* "Greece", */            "GR"},
    {/* "Greenland", */         "GL"},
    {/* "Grenada", */           "GD"},
    {/* "Guadeloupe", */        "GP"},
    {/* "Guam", */              "GU"},
    {/* "Guatemala", */         "GT"},
    {/* "Guinea", */            "GN"},
    {/* "Guinea-Bissau", */     "GW"},
    {/* "Guyana", */            "GY"},
    {/* "Haiti", */             "HT"},
    {/* "Heard and Mc Donald Islands", */   "HM"},
    {/* "Holy See (Vatican City State)", */ "VA"},
    {/* "Honduras", */          "HN"},
    {/* "Hong Kong SAR", */         "HK"},
    {/* "Hungary", */           "HU"},
    {/* "Iceland", */           "IS"},
    {/* "India", */             "IN"},
    {/* "Indonesia", */         "ID"},
    {/* "Iran (Islamic Republic Of)", */    "IR"},
    {/* "Iraq", */              "IQ"},
    {/* "Ireland", */           "IE"},
    {/* "Israel", */            "IL"},
    {/* "Italy", */             "IT"},
    {/* "Jamaica", */           "JM"},
    {/* "Japan", */             "JP"},
    {/* "Jordan", */            "JO"},
    {/* "Kazakhstan", */        "KZ"},
    {/* "Kenya", */             "KE"},
    {/* "Kiribati", */          "KI"},
    {/* "Korea, Democratic People's Republic Of", */  "KP"},
    {/* "Korea, Republic Of", */  "KR"},
    {/* "Kuwait", */            "KW"},
    {/* "Kyrgyzstan", */        "KG"},
    {/* "Lao People's Democratic Republic", */  "LA"},
    {/* "Latvia", */            "LV"},
    {/* "Lebanon", */           "LB"},
    {/* "Lesotho", */           "LS"},
    {/* "Liberia", */           "LR"},
    {/* "Libyan Arab Jamahiriya", */        "LY"},
    {/* "Liechtenstein", */     "LI"},
    {/* "Lithuania", */         "LT"},
    {/* "Luxembourg", */        "LU"},
    {/* "Macau SAR", */             "MO"},
    {/* "Macedonia, The Former Yugoslav Republic Of", */  "MK"},
    {/* "Madagascar", */        "MG"},
    {/* "Malawi", */            "MW"},
    {/* "Malaysia", */          "MY"},
    {/* "Maldives", */          "MV"},
    {/* "Mali", */              "ML"},
    {/* "Malta", */             "MT"},
    {/* "Man, Isle of",*/   	"GB"},
    {/* "Marshall Islands", */  "MH"},
    {/* "Martinique", */        "MQ"},
    {/* "Mauritania", */        "MR"},
    {/* "Mauritius", */         "MU"},
    {/* "Mayotte", */           "YT"},
    {/* "Mexico", */            "MX"},
    {/* "Micronesia, Federated States Of", */  "FM"},
    {/* "Moldova, Republic Of", */          "MD"},
    {/* "Monaco", */            "MC"},
    {/* "Mongolia", */          "MN"},
    {/* "Montserrat", */        "MS"},
    {/* "Morocco", */           "MA"},
    {/* "Mozambique", */        "MZ"},
    {/* "Myanmar", */           "MM"},
    {/* "Namibia", */           "NA"},
    {/* "Nauru", */             "NR"},
    {/* "Nepal", */             "NP"},
    {/* "Netherlands", */       "NL"},
    {/* "Netherlands ANTILLES", */          "AN"},
    {/* "New Caledonia", */     "NC"},
    {/* "New Zealand", */       "NZ"},
    {/* "Nicaragua", */         "NI"},
    {/* "Niger", */             "NE"},
    {/* "Nigeria", */           "NG"},
    {/* "Niue", */              "NU"},
    {/* "Norfolk Island", */    "NF"},
    {/* "Northern Mariana Islands", */      "MP"},
    {/* "Norway", */            "NO"},
    {/* "Oman", */              "OM"},
    {/* "Pakistan", */          "PK"},
    {/* "Palau", */             "PW"},
    {/* "Panama", */            "PA"},
    {/* "Papua New Guinea", */  "PG"},
    {/* "Paraguay", */          "PY"},
    {/* "Peru", */              "PE"},
    {/* "Philippines", */       "PH"},
    {/* "Pitcairn Islands", */  "PN"},
    {/* "Poland", */            "PL"},
    {/* "Portugal", */          "PT"},
    {/* "Puerto Rico", */       "PR"},
    {/* "Qatar", */             "QA"},
    {/* "Reunion", */           "RE"},
    {/* "Romania", */           "RO"},
    {/* "Russian Federation", */            "RU"},
    {/* "Rwanda", */            "RW"},
    {/* "Saint Kitts and Nevis", */         "KN"},
    {/* "Saint Lucia", */       "LC"},
    {/* "Saint Vincent and The Grenadines", */  "VC"},
    {/* "Samoa", */             "WS"},
    {/* "San Marino", */        "SM"},
    {/* "São Tomé and Príncipe ", */         "ST"},
    {/* "Saudi Arabia", */      "SA"},
    {/* "Senegal", */           "SN"},
    {/* "Seychelles", */        "SC"},
    {/* "Sierra Leone", */      "SL"},
    {/* "Singapore", */         "SG"},
    {/* "Slovakia (Slovak Republic)", */    "SK"},
    {/* "Slovenia", */          "SI"},
    {/* "Solomon Islands", */   "SB"},
    {/* "Somalia", */           "SO"},
    {/* "South Africa", */      "ZA"},
    {/* "South Georgia and The South Sandwich Islands", */  "GS"},
    {/* "Spain", */             "ES"},
    {/* "Sri Lanka", */         "LK"},
    {/* "St. Helena", */        "SH"},
    {/* "St. Pierre and Miquelon", */        "PM"},
    {/* "Sudan", */             "SD"},
    {/* "Suriname", */          "SR"},
    {/* "Svalbard and Jan Mayen Islands", */ "SJ"},
    {/* "Swaziland", */         "SZ"},
    {/* "Sweden", */            "SE"},
    {/* "Switzerland", */       "CH"},
    {/* "Syrian Arab Republic", */  "SY"},
    {/* "Taiwan", */            "TW"},
    {/* "Tajikistan", */        "TJ"},
    {/* "Tanzania, United Republic Of", */  "TZ"},
    {/* "Thailand", */          "TH"},
    {/* "Togo", */              "TG"},
    {/* "Tokelau", */           "TK"},
    {/* "Tonga", */             "TO"},
    {/* "Trinidad and Tobago", */  "TT"},
    {/* "Tunisia", */           "TN"},
    {/* "Turkey", */            "TR"},
    {/* "Turkmenistan", */      "TM"},
    {/* "Turks and Caicos Islands", */      "TC"},
    {/* "Tuvalu", */            "TV"},
    {/* "Uganda", */            "UG"},
    {/* "Ukraine", */           "UA"},
    {/* "United Arab Emirates", */  "AE"},
    {/* "United Kingdom", */    "GB"},
    {/* "United States", */     "US"},
    {/* "U.S. Minor Outlying Islands", */  "UM"},
    {/* "Uruguay", */           "UY"},
    {/* "Uzbekistan", */        "UZ"},
    {/* "Vanuatu", */           "VU"},
    {/* "Venezuela", */         "VE"},
    {/* "Viet Nam", */          "VN"},
    {/* "Virgin Islands (British)", */      "VG"},
    {/* "Virgin Islands (U.S.)", */         "VI"},
    {/* "Wallis and Futuna Islands", */     "WF"},
    {/* "Yemen", */             "YE"},
    {/* "Yugoslavia", */        "YU"},
    {/* "Congo (DRC)", */             "ZR"},
    {/* "Zambia", */            "ZM"},
    {/* "Zimbabwe", */          "ZW"}
};

static const unsigned g_uTableSize = sizeof( g_Table )/ sizeof( g_Table[0] );

const ISO3166& ISO3166::GetCountry( unsigned i )
{
    return g_Table[i];
}

unsigned ISO3166::GetNumCountries()
{
    return g_uTableSize;
}

#endif



