mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 03:27:39 +00:00
257 lines
9.2 KiB
C
257 lines
9.2 KiB
C
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
|
│ vi: set et ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi │
|
|
╞══════════════════════════════════════════════════════════════════════════════╡
|
|
│ Copyright 2021 Justine Alexandra Roberts Tunney │
|
|
│ │
|
|
│ Permission to use, copy, modify, and/or distribute this software for │
|
|
│ any purpose with or without fee is hereby granted, provided that the │
|
|
│ above copyright notice and this permission notice appear in all copies. │
|
|
│ │
|
|
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
|
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
|
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
|
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
|
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
|
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
|
#include "libc/macros.h"
|
|
#include "third_party/maxmind/maxminddb.h"
|
|
|
|
const struct thatispacked MetroName {
|
|
short code;
|
|
const char *name;
|
|
} kMetroNames[] = {
|
|
{500, "Portland-Auburn ME"},
|
|
{501, "New York NY"},
|
|
{502, "Binghamton NY"},
|
|
{503, "Macon GA"},
|
|
{504, "Philadelphia PA"},
|
|
{505, "Detroit MI"},
|
|
{506, "Boston MA-Manchester NH"},
|
|
{507, "Savannah GA"},
|
|
{508, "Pittsburgh PA"},
|
|
{509, "Ft. Wayne IN"},
|
|
{510, "Cleveland-Akron (Canton) OH"},
|
|
{511, "Washington DC (Hagerstown MD)"},
|
|
{512, "Baltimore MD"},
|
|
{513, "Flint-Saginaw-Bay City MI"},
|
|
{514, "Buffalo NY"},
|
|
{515, "Cincinnati OH"},
|
|
{516, "Erie PA"},
|
|
{517, "Charlotte NC"},
|
|
{518, "Greensboro-High Point-Winston Salem NC"},
|
|
{519, "Charleston SC"},
|
|
{520, "Augusta GA"},
|
|
{521, "Providence RI-New Bedford MA"},
|
|
{522, "Columbus GA"},
|
|
{523, "Burlington VT-Plattsburgh NY"},
|
|
{524, "Atlanta GA"},
|
|
{525, "Albany GA"},
|
|
{526, "Utica NY"},
|
|
{527, "Indianapolis IN"},
|
|
{528, "Miami-Ft. Lauderdale FL"},
|
|
{529, "Louisville KY"},
|
|
{530, "Tallahassee FL-Thomasville GA"},
|
|
{531, "Tri-Cities TN-VA"},
|
|
{532, "Albany-Schenectady-Troy NY"},
|
|
{533, "Hartford & New Haven CT"},
|
|
{534, "Orlando-Daytona Beach-Melbourne FL"},
|
|
{535, "Columbus OH"},
|
|
{536, "Youngstown OH"},
|
|
{537, "Bangor ME"},
|
|
{538, "Rochester NY"},
|
|
{539, "Tampa-St. Petersburg (Sarasota) FL"},
|
|
{540, "Traverse City-Cadillac MI"},
|
|
{541, "Lexington KY"},
|
|
{542, "Dayton OH"},
|
|
{543, "Springfield-Holyoke MA"},
|
|
{544, "Norfolk-Portsmouth-Newport News VA"},
|
|
{545, "Greenville-New Bern-Washington NC"},
|
|
{546, "Columbia SC"},
|
|
{547, "Toledo OH"},
|
|
{548, "West Palm Beach-Ft. Pierce FL"},
|
|
{549, "Watertown NY"},
|
|
{550, "Wilmington NC"},
|
|
{551, "Lansing MI"},
|
|
{552, "Presque Isle ME"},
|
|
{553, "Marquette MI"},
|
|
{554, "Wheeling WV-Steubenville OH"},
|
|
{555, "Syracuse NY"},
|
|
{556, "Richmond-Petersburg VA"},
|
|
{557, "Knoxville TN"},
|
|
{558, "Lima OH"},
|
|
{559, "Bluefield-Beckley-Oak Hill WV"},
|
|
{560, "Raleigh-Durham (Fayetteville) NC"},
|
|
{561, "Jacksonville FL"},
|
|
{563, "Grand Rapids-Kalamazoo-Battle Creek MI"},
|
|
{564, "Charleston-Huntington WV"},
|
|
{565, "Elmira NY"},
|
|
{566, "Harrisburg-Lancaster-Lebanon-York PA"},
|
|
{567, "Greenville-Spartanburg SC-Asheville NC-Anderson SC"},
|
|
{569, "Harrisonburg VA"},
|
|
{570, "Florence-Myrtle Beach SC"},
|
|
{571, "Ft. Myers-Naples FL"},
|
|
{573, "Roanoke-Lynchburg VA"},
|
|
{574, "Johnstown-Altoona PA"},
|
|
{575, "Chattanooga TN"},
|
|
{576, "Salisbury MD"},
|
|
{577, "Wilkes Barre-Scranton PA"},
|
|
{581, "Terre Haute IN"},
|
|
{582, "Lafayette IN"},
|
|
{583, "Alpena MI"},
|
|
{584, "Charlottesville VA"},
|
|
{588, "South Bend-Elkhart IN"},
|
|
{592, "Gainesville FL"},
|
|
{596, "Zanesville OH"},
|
|
{597, "Parkersburg WV"},
|
|
{598, "Clarksburg-Weston WV"},
|
|
{600, "Corpus Christi TX"},
|
|
{602, "Chicago IL"},
|
|
{603, "Joplin MO-Pittsburg KS"},
|
|
{604, "Columbia-Jefferson City MO"},
|
|
{605, "Topeka KS"},
|
|
{606, "Dothan AL"},
|
|
{609, "St. Louis MO"},
|
|
{610, "Rockford IL"},
|
|
{611, "Rochester MN-Mason City IA-Austin MN"},
|
|
{612, "Shreveport LA"},
|
|
{613, "Minneapolis-St. Paul MN"},
|
|
{616, "Kansas City MO"},
|
|
{617, "Milwaukee WI"},
|
|
{618, "Houston TX"},
|
|
{619, "Springfield MO"},
|
|
{622, "New Orleans LA"},
|
|
{623, "Dallas-Ft. Worth TX"},
|
|
{624, "Sioux City IA"},
|
|
{625, "Waco-Temple-Bryan TX"},
|
|
{626, "Victoria TX"},
|
|
{627, "Wichita Falls TX & Lawton OK"},
|
|
{628, "Monroe LA-El Dorado AR"},
|
|
{630, "Birmingham AL"},
|
|
{631, "Ottumwa IA-Kirksville MO"},
|
|
{632, "Paducah KY-Cape Girardeau MO-Harrisburg-Mount Vernon IL"},
|
|
{633, "Odessa-Midland TX"},
|
|
{634, "Amarillo TX"},
|
|
{635, "Austin TX"},
|
|
{636, "Harlingen-Weslaco-Brownsville-McAllen TX"},
|
|
{637, "Cedar Rapids-Waterloo-Iowa City & Dubuque IA"},
|
|
{638, "St. Joseph MO"},
|
|
{639, "Jackson TN"},
|
|
{640, "Memphis TN"},
|
|
{641, "San Antonio TX"},
|
|
{642, "Lafayette LA"},
|
|
{643, "Lake Charles LA"},
|
|
{644, "Alexandria LA"},
|
|
{647, "Greenwood-Greenville MS"},
|
|
{648, "Champaign & Springfield-Decatur,IL"},
|
|
{649, "Evansville IN"},
|
|
{650, "Oklahoma City OK"},
|
|
{651, "Lubbock TX"},
|
|
{652, "Omaha NE"},
|
|
{656, "Panama City FL"},
|
|
{657, "Sherman TX-Ada OK"},
|
|
{658, "Green Bay-Appleton WI"},
|
|
{659, "Nashville TN"},
|
|
{661, "San Angelo TX"},
|
|
{662, "Abilene-Sweetwater TX"},
|
|
{669, "Madison WI"},
|
|
{670, "Ft. Smith-Fayetteville-Springdale-Rogers AR"},
|
|
{671, "Tulsa OK"},
|
|
{673, "Columbus-Tupelo-West Point MS"},
|
|
{675, "Peoria-Bloomington IL"},
|
|
{676, "Duluth MN-Superior WI"},
|
|
{678, "Wichita-Hutchinson KS"},
|
|
{679, "Des Moines-Ames IA"},
|
|
{682, "Davenport IA-Rock Island-Moline IL"},
|
|
{686, "Mobile AL-Pensacola (Ft. Walton Beach) FL"},
|
|
{687, "Minot-Bismarck-Dickinson(Williston) ND"},
|
|
{691, "Huntsville-Decatur (Florence) AL"},
|
|
{692, "Beaumont-Port Arthur TX"},
|
|
{693, "Little Rock-Pine Bluff AR"},
|
|
{698, "Montgomery (Selma) AL"},
|
|
{702, "La Crosse-Eau Claire WI"},
|
|
{705, "Wausau-Rhinelander WI"},
|
|
{709, "Tyler-Longview(Lufkin & Nacogdoches) TX"},
|
|
{710, "Hattiesburg-Laurel MS"},
|
|
{711, "Meridian MS"},
|
|
{716, "Baton Rouge LA"},
|
|
{717, "Quincy IL-Hannibal MO-Keokuk IA"},
|
|
{718, "Jackson MS"},
|
|
{722, "Lincoln & Hastings-Kearney NE"},
|
|
{724, "Fargo-Valley City ND"},
|
|
{725, "Sioux Falls(Mitchell) SD"},
|
|
{734, "Jonesboro AR"},
|
|
{736, "Bowling Green KY"},
|
|
{737, "Mankato MN"},
|
|
{740, "North Platte NE"},
|
|
{743, "Anchorage AK"},
|
|
{744, "Honolulu HI"},
|
|
{745, "Fairbanks AK"},
|
|
{746, "Biloxi-Gulfport MS"},
|
|
{747, "Juneau AK"},
|
|
{749, "Laredo TX"},
|
|
{751, "Denver CO"},
|
|
{752, "Colorado Springs-Pueblo CO"},
|
|
{753, "Phoenix AZ"},
|
|
{754, "Butte-Bozeman MT"},
|
|
{755, "Great Falls MT"},
|
|
{756, "Billings MT"},
|
|
{757, "Boise ID"},
|
|
{758, "Idaho Falls-Pocatello ID"},
|
|
{759, "Cheyenne WY-Scottsbluff NE"},
|
|
{760, "Twin Falls ID"},
|
|
{762, "Missoula MT"},
|
|
{764, "Rapid City SD"},
|
|
{765, "El Paso TX"},
|
|
{766, "Helena MT"},
|
|
{767, "Casper-Riverton WY"},
|
|
{770, "Salt Lake City UT"},
|
|
{771, "Yuma AZ-El Centro CA"},
|
|
{773, "Grand Junction-Montrose CO"},
|
|
{789, "Tucson (Sierra Vista) AZ"},
|
|
{790, "Albuquerque-Santa Fe NM"},
|
|
{798, "Glendive MT"},
|
|
{800, "Bakersfield CA"},
|
|
{801, "Eugene OR"},
|
|
{802, "Eureka CA"},
|
|
{803, "Los Angeles CA"},
|
|
{804, "Palm Springs CA"},
|
|
{807, "San Francisco-Oakland-San Jose CA"},
|
|
{810, "Yakima-Pasco-Richland-Kennewick WA"},
|
|
{811, "Reno NV"},
|
|
{813, "Medford-Klamath Falls OR"},
|
|
{819, "Seattle-Tacoma WA"},
|
|
{820, "Portland OR"},
|
|
{821, "Bend OR"},
|
|
{825, "San Diego CA"},
|
|
{828, "Monterey-Salinas CA"},
|
|
{839, "Las Vegas NV"},
|
|
{855, "Santa Barbara-Santa Maria-San Luis Obispo CA"},
|
|
{862, "Sacramento-Stockton-Modesto CA"},
|
|
{866, "Fresno-Visalia CA"},
|
|
{868, "Chico-Redding CA"},
|
|
{881, "Spokane WA"},
|
|
};
|
|
|
|
/**
|
|
* Returns U.S. Metropolitan Area name.
|
|
* @see Google Adwords c. 2010
|
|
*/
|
|
const char *GetMetroName(int code) {
|
|
int m, l, r;
|
|
l = 0;
|
|
r = ARRAYLEN(kMetroNames) - 1;
|
|
while (l <= r) {
|
|
m = (l & r) + ((l ^ r) >> 1); // floor((a+b)/2)
|
|
if (kMetroNames[m].code < code) {
|
|
l = m + 1;
|
|
} else if (kMetroNames[m].code > code) {
|
|
r = m - 1;
|
|
} else {
|
|
return kMetroNames[m].name;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|