package dxcc import "strings" // dxccByName maps cty.dat entity names to ADIF DXCC entity numbers // (ARRL DXCC List). cty.dat itself doesn't carry this number — it's a // separate ARRL-maintained list. We embed the current entities here so // QSO records can be stamped with MY_DXCC / DXCC at log time without a // network round-trip. // // Coverage: every current ARRL DXCC entity (340+). Deleted entities are // included for legacy compatibility. The lookup is case-insensitive and // space-tolerant on the caller side. var dxccByName = map[string]int{ // 0xx "sovereign military order of malta": 246, "spratly is.": 247, "sable i.": 211, "st. paul i.": 252, "hawaii": 110, "agalega & st. brandon is.": 4, "alaska": 6, "american samoa": 9, "amsterdam & st. paul is.": 10, "andaman & nicobar is.": 11, "anguilla": 12, "antarctica": 13, "armenia": 14, "asiatic russia": 15, "aves i.": 17, "azerbaijan": 18, "baker & howland is.": 20, "balearic is.": 21, "palmyra & jarvis is.": 22, "central kiribati": 31, "central african republic": 27, "cape verde": 32, "chagos is.": 33, "chatham is.": 34, "christmas i.": 35, "clipperton i.": 36, "cocos i.": 37, "cocos (keeling) is.": 38, "comoros": 39, "crete": 40, "crozet i.": 41, "falkland is.": 141, "chesterfield is.": 512, "easter i.": 47, "sint eustatius & saba": 519, "ducie i.": 513, "european russia": 54, "farquhar": 55, "fernando de noronha": 56, "french equatorial africa": 57, "french indo-china": 58, "french polynesia": 175, "djibouti": 382, "gabon": 420, "galapagos is.": 71, "guantanamo bay": 105, "guatemala": 76, "guernsey": 106, "guinea": 107, "guyana": 129, "hong kong": 321, "howland & baker is.": 20, "isle of man": 114, "itu hq": 117, "iran": 330, "iraq": 333, "juan de nova & europa": 124, "juan fernandez is.": 125, "kaliningrad": 126, "kerguelen is.": 131, "kermadec is.": 133, "kingman reef": 134, "kuwait": 348, "kyrgyzstan": 135, "jersey": 122, "laccadive is.": 142, "laos": 143, "lord howe i.": 147, "market reef": 151, "marquesas is.": 509, "marshall is.": 168, "mauritania": 444, "mayotte": 169, "mexico": 50, "midway i.": 174, "minami torishima": 177, "monaco": 260, "mongolia": 363, "mount athos": 180, "navassa i.": 182, "new caledonia": 162, "new zealand": 170, "niue": 188, "norfolk i.": 189, "north cook is.": 191, "north korea": 344, "ogasawara": 192, "oman": 370, "palestine": 510, "pratas i.": 505, "qatar": 376, "rotuma i.": 460, "rwanda": 454, "san andres & providencia": 216, "south georgia i.": 235, "south orkney is.": 238, "south sandwich is.": 240, "south shetland is.": 241, "swains i.": 515, "swaziland": 468, "taiwan": 386, "tajikistan": 262, "thailand": 387, "timor-leste": 511, "tokelau is.": 270, "tonga": 160, "trindade & martim vaz is.": 273, "tristan da cunha & gough is.": 274, "tromelin i.": 276, "tunisia": 474, "turkmenistan": 280, "turks & caicos is.": 89, "tuvalu": 282, "uk sov. base areas on cyprus": 283, "united nations hq": 289, "vatican city": 295, "venezuela": 148, "viet nam": 293, "wake i.": 297, "wallis & futuna is.": 298, "western kiribati": 301, "yemen": 492, // Major populous entities "france": 227, "germany": 230, "belgium": 209, "netherlands": 263, "luxembourg": 254, "switzerland": 287, "liechtenstein": 251, "austria": 206, "italy": 248, // Sicily (IT9) and African Italy (IG9/IH9) are cty.dat WAE splits, not // DXCC entities — they count as Italy (248). Sardinia (IS0) IS its own // DXCC entity (225) and keeps its number. "sicily": 248, "african italy": 248, "sardinia": 225, "spain": 281, "portugal": 272, "andorra": 203, "san marino": 278, "corsica": 214, "vatican": 295, "england": 223, "scotland": 279, "wales": 294, "northern ireland": 265, "ireland": 245, "shetland is.": 279, "poland": 269, "czech republic": 503, "slovak republic": 504, "hungary": 239, "romania": 275, "bulgaria": 212, "greece": 236, "dodecanese": 45, "turkey": 390, "european turkey": 390, "asiatic turkey": 390, "cyprus": 215, "malta": 257, "denmark": 221, "faroe is.": 222, "greenland": 237, "sweden": 284, "norway": 266, "finland": 224, "aland is.": 5, "iceland": 242, "estonia": 52, "latvia": 145, "lithuania": 146, "belarus": 27, "ukraine": 288, "moldova": 179, "georgia": 75, "serbia": 296, "montenegro": 514, "slovenia": 499, "croatia": 497, "bosnia-herzegovina": 501, "macedonia": 502, "kosovo": 522, "albania": 7, "israel": 336, "jordan": 342, "lebanon": 354, "syria": 384, "saudi arabia": 378, "united arab emirates": 391, "bahrain": 304, "egypt": 478, "libya": 436, "algeria": 400, "morocco": 446, "western sahara": 302, "south africa": 462, "namibia": 464, "botswana": 402, "zimbabwe": 452, "zambia": 482, "mozambique": 181, "madagascar": 438, "mauritius": 165, "reunion i.": 453, "seychelles": 379, "kenya": 430, "tanzania": 470, "uganda": 286, "ethiopia": 53, "eritrea": 51, "sudan": 466, "south sudan republic of": 521, "nigeria": 450, "ghana": 424, "cameroon": 406, "senegal": 456, "liberia": 434, "sierra leone": 458, "benin": 416, "togo": 483, "ivory coast": 428, "mali": 442, "niger": 187, "chad": 410, "japan": 339, "south korea": 137, "china": 318, "india": 324, "pakistan": 372, "sri lanka": 315, "nepal": 369, "bangladesh": 305, "bhutan": 306, "myanmar": 309, "west malaysia": 299, "east malaysia": 46, "singapore": 381, "indonesia": 327, "philippines": 375, "brunei darussalam": 345, "cambodia": 312, "kazakhstan": 130, "uzbekistan": 292, "afghanistan": 3, "maldives": 159, "australia": 150, "tasmania": 150, "papua new guinea": 163, "solomon is.": 185, "vanuatu": 158, "fiji": 176, "samoa": 190, "canada": 1, "united states": 291, "united states of america": 291, "puerto rico": 202, "us virgin is.": 285, "british virgin is.": 91, "cayman is.": 69, "jamaica": 82, "bahamas": 60, "bermuda": 64, "haiti": 78, "dominican republic": 72, "cuba": 70, "barbados": 62, "trinidad & tobago": 90, "grenada": 77, "st. lucia": 97, "st. vincent": 98, "dominica": 95, "montserrat": 96, "st. kitts & nevis": 249, "antigua & barbuda": 94, "guadeloupe": 79, "martinique": 84, "french guiana": 63, "suriname": 140, "colombia": 116, "ecuador": 120, "peru": 136, "bolivia": 104, "chile": 112, "argentina": 100, "uruguay": 144, "paraguay": 132, "brazil": 108, "belize": 66, "honduras": 80, "el salvador": 74, "nicaragua": 86, "costa rica": 308, "panama": 88, } // EntityDXCC returns the ADIF DXCC entity number for the given cty.dat // entity name. Returns 0 when the name isn't in our table — callers // should leave the field empty in that case rather than guess. The match // is case-insensitive and tolerant of leading/trailing whitespace. func EntityDXCC(name string) int { if name == "" { return 0 } return dxccByName[strings.ToLower(strings.TrimSpace(name))] } // ctyEntityAliases maps cty.dat's non-DXCC pseudo-entities — the CQ-zone / // WAE splits AD1C lists separately — onto the ARRL DXCC entity they belong // to. cty.dat reports e.g. "Sicily" or "Sardinia" so contesters get the // right zones, but for DXCC (and the COUNTRY field) they are Italy. Add an // entry here for any other split that should report its parent entity. var ctyEntityAliases = map[string]string{ "sicily": "Italy", "african italy": "Italy", // NB: Sardinia is intentionally absent — it's a real DXCC entity. } // CanonicalEntityName normalises a cty.dat entity name to its ARRL DXCC // entity. Names that already are DXCC entities pass through unchanged. func CanonicalEntityName(name string) string { if c, ok := ctyEntityAliases[strings.ToLower(strings.TrimSpace(name))]; ok { return c } return name }