home *** CD-ROM | disk | FTP | other *** search
- #!/usr/local/bin/perl
-
- #----------------------------------------------------------------------
- # variables you should change:
-
- $geo_server = "geoserver.eecs.umich.edu";
- $geo_port = 3000;
-
- #----------------------------------------------------------------------
-
- # gateway from gopher to the geographic name server
- # this is the "brute force" kind of approach; a tidier solution
- # would speak the prospero protocols directly.
-
- sub geo_main {
-
- local($_) = @_;
-
- if (/^$/) {
- &Greply("7Search Geographic Name Server by City or ZIP code\t$Ggw search\t$Ghost\t$Gport");
- &Greply(".");
- exit;
- }
-
- ($action, $query, $gplus) = split('\t');
-
- if ($action =~ /^city/) {
- $city = $action;
- $city =~ s/^city//;
- &GopenServer($geo_server, $geo_port);
-
- # remove banner
- while ($_ ne ".") {
- $_ = &Grecv;
- }
- &Gsend($city);
-
- $_ = "";
-
- LOOP:
- while ($_ ne "." || $_ eq "") {
-
- $_ = &Grecv;
-
- s/^R /Note : /;
- s/^0 /City : /;
- if (/^1 /) {
- s/^1 //;
- s/(\d+)/[$1]/;
- push(@Counties,$_);
- next LOOP;
- }
- s/^3 /Nation : /;
- s/^A /Area-Code : /;
- s/^2 /State\/Province : /;
- s/^F /Feature Code : /;
-
- if (/^E /) {
- s/^E /Elevation : /;
- $_ = $_ . " feet";
- }
- if (/^L /) {
- ($L, $latdeg, $latmin, $latsec, $NS,
- $londeg, $lonmin, $lonsec, $EW) =
- split;
- &Greply("");
- &Greply("Latitude : $latdeg degrees, $latmin minutes, $latsec seconds $NS");
- &Greply("Longitude : $londeg degrees, $lonmin minutes, $lonsec seconds $EW");
- &Greply("");
- next LOOP;
- }
-
- if (/^P /) {
- s/^P /1980 Population : /;
- }
-
- if (/^Z /) {
- s/^Z //;
- push(@Zips, $_);
- next LOOP;
- }
-
- &Greply($_) unless ($_ eq "." || $_ eq "");
- }
-
- &Greply("");
- $line = "ZIP Codes : ";
- foreach $i (@Zips) {
- if (length($line) <70) {
- $line = "$line $i";
- } else {
- &Greply($line);
- $line = " : ";
- }
- }
- &Greply($line);
-
- &Greply("");
- $line = "Counties : ";
- foreach $i (@Counties) {
- if (length($line) <70) {
- $line = "$line $i";
- } else {
- &Greply($line);
- $line = " : ";
- }
- }
-
- &Greply($line);
-
- if ($_ eq "") {
- @Zips = ();
- @Counties = ();
- &Greply("");
- next LOOP;
- }
- }
-
-
-
- elsif ($action eq "search") {
- &GopenServer($geo_server,$geo_port);
- # remove banner
- while ($_ ne ".") {
- $_ = &Grecv;
- }
- &Gsend($query);
-
- $_ = "";
- while ($_ ne ".") {
- $_ = &Grecv;
-
- if (/^0 (.*)$/) {
- $City = $1;
- }
- if (/^2 (\S+) (.*)$/) {
- $States{$1} = $City;
- }
- }
-
- foreach $i (keys(%States)) {
- &Greply("0$States{$i}, $i\tgeo city $States{$i}, $i\t$Ghost\t$Gport");
- }
- }
-
-
- &Greply(".");
- exit;
-
- }
-
- 1;
-