home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 183_01 / area.c < prev    next >
Text File  |  1979-12-31  |  13KB  |  327 lines

  1.  /* area.c    6/2/84
  2.         Telephone area code search program
  3.                 (C) 1984 Martin Smith
  4.         Compuserve 72155,1214
  5.         310 Cinnamon Oak Lane   (713) 661-1241 [Office]
  6.         Houston, Texas  77079   (713) 464-6737 [Home]
  7.  
  8.         Find area codes by entering an area code or state name on the
  9.         command line.  Multiple codes, names are permitted up to 20,
  10.         the limit set forth for C86 Computer Innovations(tm) compiler,
  11.         although your compiler may be different.
  12.         Program written for IBM-PC with PC-DOS 2.0, but no machine-specific
  13.         code is involved.
  14.  
  15.         The table is near the top of this file to make it easier to maintain.
  16.         Area codes don't change much, but just this year in Houston our
  17.         area code was broken off from the surrounding area.
  18.         The format of the table is simple, so adding cities to the city list
  19.         or even new states or regions won't upset the program if a few easy
  20.         rules are followed:
  21.  
  22.         1) The table format is one array of string pointers.
  23.         2) A state name consists of a two character postal abbreviation,
  24.            like ca for California, and then the actual name,
  25.            a)  All data on this line is lowercase. A multiple word name,
  26.                like New Jersey, would be entered as "njnew*jersey" , .
  27.                This prevents argv from making two arguments out of the name.
  28.         3) An area code is the three digit code, followed by whatever text.
  29.            a)  As many area codes, cities as you want are ok.
  30.            b)  Note the program depends on a state name not beginning with
  31.                a number.  When a numeric code is searched and found, the
  32.                program goes back to the first non-numeric for the state name.
  33.         4) All entries need to be enclosed in quotes (") and followed by a
  34.            comma.
  35.  */
  36.  
  37. #include "stdio.h"
  38. areacode(s,x)
  39. char *s;
  40. int x;
  41. {
  42. unsigned strlen();
  43.  
  44. static char *area[] =
  45.  
  46. {  "alalabama"    , "205 All locations",
  47.    "akalaska"     , "907 All locations",
  48.    "azarizona"    , "602 All locations",
  49.    "ararkansas"   , "501 All locations",
  50.    "cacalifornia" ,
  51.         "805 Bakersfield" , "209 Fresno" , "213 Los Angeles" ,
  52.         "916 Sacramento" , "619 San Diego" , "415 San Francisco" ,
  53.         "707 Santa Rosa" , "408 San Jose" , "714 Orange" ,
  54.    "cncanada" ,
  55.         "519 London, Ont." , "514 Montreal, Quebec" , "403 Alberta" ,
  56.         "613 Ottawa, Ont." , "418 Quebec, Quebec" , "306 Saskatchewan" ,
  57.         "416 Toronto, Ont." , "604 British Columbia" , "204 Manitoba" ,
  58.         "807 East Ontario" , "705 West Ontario" , "819 NW Quebec" ,
  59.         "709 Newfoundland" , "506 New Brunswick" ,
  60.         "902 Nova Scotia, Prince Edward Island" ,
  61.    "cocolorado"   , "303 All locations" ,
  62.    "ctconnecticut" , "203 All locations" ,
  63.    "dedelaware"   , "302 All locations" ,
  64.    "dcdistrict*of*columbia" , "202 Washington" ,
  65.    "flflorida" ,
  66.         "813 Ft. Myers, Winter Haven" , "904 Jacksonville" ,
  67.         "305 Miami, Key West, Ft. Lauderdale" ,
  68.    "gageorgia" ,
  69.         "404 Atlanta, Rome" , "912 Waycross" ,
  70.    "hihawaii"  , "808 All locations" ,
  71.    "ididaho"   , "208 All locations" ,
  72.    "ilillinois" ,
  73.         "618 Alton, Mt. Vernon" , "312 Chicago, Aurora, Waukegan" ,
  74.         "815 Rockford" , "217 Springfield" , "309 Peoria" ,
  75.    "inindiana" ,
  76.         "812 Evansville" , "219 Gary, South Bend, Warsaw" ,
  77.         "317 Indianapolis, Kokomo" ,
  78.    "iaiowa" ,
  79.         "712 Council Bluffs" , "515 Des Moines" , "319 Dubuque" ,
  80.    "kskansas" ,
  81.         "316 Wichita, Dodge City" ,
  82.         "913 Topeka, Lawrence, Manhattan, Salina" ,
  83.    "kykentucky" ,
  84.         "502 Louisville, Frankfort, Paducah, Shelbyville" , "606 Winchester" ,
  85.    "lalouisiana" ,
  86.         "504 Baton Rouge, New Orleans" , "318 Lake Charles" ,
  87.    "memaine"      , "207 All locations" ,
  88.    "mdmaryland"   , "301 All locations" ,
  89.    "mamassachusetts" ,
  90.         "617 Boston, New Bedford, Plymouth, Worchester" ,
  91.         "413 Springfield" ,
  92.    "mxmexico" ,
  93.         "905 Mexico City" , "706 NW Mexico" ,
  94.    "mimichigan" ,
  95.         "313 Detroit, Ann Arbor, Flint" ,
  96.         "616 Battle Creek, Grand Rapids, Kalamazoo" ,
  97.         "517 Lansing" , "906 Escanaba" ,
  98.    "mnminnesota" ,
  99.         "218 Duluth" , "612 Minneapolis, St. Paul" , "507 Rochester" ,
  100.    "msmississippi" , "601 All locations" ,
  101.    "momissouri" ,
  102.         "816 Belton, Independence, Kansas City, Marshall, St. Joseph, Sedalia" ,
  103.         "314 St. Louis, Cape Girardeau, Columbia, Fulton, Hannibal, \n\tJefferson City, Mexico, Poplar Bluff, Rolla" ,
  104.         "417 Joplin, Springfield" ,
  105.    "mtmontana"    , "406 All locations" ,
  106.    "nenebraska" ,
  107.         "402 Omaha, Lincoln" , "308 North Platte" ,
  108.    "nvnevada"     , "702 All locations" ,
  109.    "nhnew*hampshire" , "603 All locations" ,
  110.    "njnew*jersey" ,
  111.         "609 Atlantic City, Camden, Trenton" ,
  112.         "201 Newark, Hackensack, New Brunswick, Patterson" ,
  113.    "nmnew*mexico" , "505 All locations" ,
  114.    "nynew*york" ,
  115.         "518 Albany, Schenectady" , "607 Binghamton" ,
  116.         "716 Buffalo, Niagara Falls, Rochester" , "914 White Plains" ,
  117.         "212 New York City" , "315 Syracuse" ,
  118.    "ncnorth*carolina" ,
  119.         "704 Charlotte, Salisbury" ,
  120.         "919 Greenville, Raleigh, Winston-Salem" ,
  121.    "ndnorth*dakota" , "701 All locations" ,
  122.    "ohohio" ,
  123.         "216 Akron, Cleveland, Youngstown" ,
  124.         "513 Cincinnati, Dayton" , "614 Columbus" ,
  125.         "419 Toledo" ,
  126.    "okoklahoma" ,
  127.         "918 Tulsa, Bartlesville, McAlester, Muskogee" ,
  128.         "405 Oklahoma City, Enid, Norman, Ponca City, Stillwater" ,
  129.    "ororegon"      , "503 All locations" ,
  130.    "papennsylvania" ,
  131.         "215 Philadelphia, Allentown" , "814 Erie" ,
  132.         "412 Pittsburgh" , "717 Harrisburg, Scranton" ,
  133.    "prpuerto*rico"  ,
  134. "809 Anguilla, Antigua, Bahamas, Barbados, Bermuda, Cayman Islands, \n\tDominican Republic, Jamaica, St. Lucia, Trinidad" ,
  135.    "rirhode*island" , "401 All locations" ,
  136.    "scsouth*carolina" , "803 All locations" ,
  137.    "sdsouth*dakota" , "605 All locations" ,
  138.    "tntennessee" ,
  139.         "615 Nashville, Chattanooga" , "901 Memphis" ,
  140.    "txtexas" ,
  141.         "915 Abilene, Alpine, Big Spring, El Paso, Midland, Odessa" ,
  142.         "512 Austin, Brownsville, Corpus Christi, Del Rio, Eagle Pass, \n\tLaredo, McAllen, San Antonio, Victoria" ,
  143.         "806 Amarillo, Dalhart, Lubbock" ,
  144.         "713 Houston, Baytown, Pasadena" ,
  145.         "409 Bay City, Beaumont, Bryan, College Station, Galveston, Huntsville" ,
  146.         "214 Dallas, Ennis, Greenville, Jefferson, Longview, Sherman, Tyler" ,
  147.         "817 Fort Worth, Denton, Temple, Waco, Wichita Falls" ,
  148.    "ututah"        , "801 All locations" ,
  149.    "vtvermont"     , "802 All locations" ,
  150.    "vivirgin*islands" , "809 All locations" ,
  151.    "vavirginia" ,
  152.         "804 Charlottesville, Newport News, Norfolk, Richmond" ,
  153.         "703 Roanoke, Winchester" ,
  154.    "wawashington" ,
  155.         "206 Seattle, Olympia, Vancouver" , "509 Walla Walla" ,
  156.    "  wide area"   , "800 All locations" ,
  157.    "wvwest*virginia" , "304 All locations" ,
  158.    "wiwisconsin" ,
  159.         "414 Milwaukee, Green Bay, Racine" ,
  160.         "608 Madison" , "715 Wausau" ,
  161.    "wywyoming"     , "307 All locations" ,
  162.    NULL  } ;
  163.  
  164.     int i,j,found;
  165.     unsigned k;
  166.     char temp[64];
  167.     char *t;
  168.  
  169.     if (x==2)   /* a number area code */
  170.     {
  171.         found=0;
  172.         for (i=0; area[i] != NULL; i++)
  173.            {
  174.            if (strncmp(area[i],s,3)==0)  /* test for match */
  175.                 {
  176.                 for (j=i-1; satoi(area[j]) != 0; --j)  /* then go back for state */
  177.                         ;
  178.                 stprint(area[j]);       /* special print out for state name */
  179.                 putchar('\n');
  180.                 printf("    %s.\n\n",area[i]);
  181.                 found=-1;
  182.                 break;                  /* stop when found */
  183.                 }
  184.            }
  185.         if (found==0)
  186.                 printf("Not found, %s.\n\n",s);
  187.  
  188.      }
  189.     else
  190.     if (x==1)   /* state name or two letter code is input */
  191.     {
  192.         for (i=0; s[i] != '\0'; i++)    /* make everything lowercase */
  193.                 s[i]=tolower(s[i]);
  194.         if (strlen(s)==2)               /* two letter code assumed */
  195.                 {
  196.                 found=0;
  197.                 for (i=0; area[i] != NULL; i++)
  198.                         {
  199.                         if (strncmp(s,area[i],2)==0)
  200.                                 {
  201.                                 stprint(area[i]);
  202.                                 putchar('\n');
  203.                                 for (j=i+1; satoi(area[j]) != 0;j++)
  204.                                         printf("    %s.\n",area[j]);
  205.                                 found=-1;
  206.                                 putchar('\n');
  207.                                 break;
  208.                                 }
  209.                         }
  210.                 if (found==0)
  211.                         printf("Not found, %s.\n",s);
  212.                 }
  213.         else                            /* otherwise try for state name */
  214.         {
  215.         k=strlen(s);                    /* ok if partial name */
  216.         found=0;
  217.                 for (i=0; area[i] != NULL; i++)
  218.                         {
  219.                         if (satoi(area[i])==0)
  220.                                 {
  221.                                 t=area[i];
  222.                                 t=t+2;
  223.                                 strcpy(temp,t);
  224.                                 if (strncmp(temp,s,k) == 0)
  225.                                         {
  226.                                         stprint(area[i]);
  227.                                         putchar('\n');
  228.                                         for (j=i+1; satoi(area[j]) != 0;j++)
  229.                                                 printf("    %s.\n",area[j]);
  230.                                         found=-1;
  231.                                         putchar('\n');
  232.                                         break;
  233.                                         }
  234.                                 }
  235.                         }
  236.                         if (found==0)
  237.                                 printf("Not found, %s.\n",s);
  238.         }
  239.    }
  240.    else         /* print entire list */
  241.    {
  242.      for (i=0; area[i] != NULL; i++)
  243.      {
  244.         if (satoi(area[i])==0)
  245.                 {
  246.                 putchar('\n');
  247.                 stprint(area[i]);
  248.                 putchar('\n');
  249.                 }
  250.         else
  251.                 printf("    %s.\n",area[i]);
  252.      }
  253.    }
  254. }
  255.  
  256.  /* special printout for state name */
  257. stprint(s)
  258. char s[];
  259. {
  260.         int i;
  261.         putchar(toupper(s[0]));
  262.         putchar(toupper(s[1]));
  263.         printf("  ");
  264.         putchar(toupper(s[2]));
  265.         for (i=3; s[i] != '\0'; i++)
  266.                 {
  267.                 if (s[i]=='*')
  268.                         {
  269.                         putchar(' ');
  270.                         putchar(toupper(s[++i]));
  271.                         }
  272.                 else
  273.                         putchar(s[i]);
  274.                 }
  275.         printf(" area code(s): ");
  276. }
  277.  
  278. main(argc,argv)
  279. int  argc;
  280. char *argv[];
  281. {
  282.         int i,satoi();
  283.         printf("   ** Area Code Finder **\n");
  284.         printf("    (C) Marty Smith 1983 \n\n");
  285.         if (argc==1)
  286.         {
  287.         printf("Program searches for telephone area codes,\n");
  288.         printf("   as area xxx xxx xxx etc.\n");
  289.         printf("   xxx is an Area Code or State name.\n");
  290.         printf("   Two letter state postal codes like TX for Texas, CA for California\n");
  291.         printf("      can be used, otherwise type in the state name.\n");
  292.         printf("   Enter two word state names like this: New*Jersey.\n");
  293.         printf("   Enter area * for a list of all Area Codes.\n");
  294.         }
  295.         else
  296.         if (*argv[1]=='*')
  297.                 areacode(argv[1],0);
  298.         else
  299.         {
  300.         for (i=1; i < argc; ++i)
  301.                 {
  302.                 if (satoi(argv[i])==0)
  303.                       areacode(argv[i],1);
  304.                 else
  305.                       areacode(argv[i],2);
  306.                 }
  307.         }
  308. }
  309.  
  310.  /* integer convert to number */
  311. int satoi(s)
  312. char s[];
  313. {
  314.         int i, n, sign;
  315.  
  316.         for (i=0; s[i]==' ' || s[i]=='\n' || s[i]=='\t'; i++)
  317.                 ;  /* skip white space */
  318.  
  319.         sign = 1;
  320.         if (s[i] == '+' || s[i] == '-')
  321.                 sign = (s[i++]=='+') ? 1 : -1;
  322.         for (n=0; s[i] >= '0' && s[i] <= '9'; i++)
  323.                 n = 10 * n + s[i] - '0';
  324.         return(sign * n);
  325.  
  326. }
  327.