#!/usr/bin/perl # # geo://wpname:cmnt@34.15,-118.15/topo=/somedir,aerial=/someotherdir # die "Usage: viking-remote uri\n" if ( $#ARGV < 0 ); if ( $ARGV[0] eq "debug" ) { $DEBUG = 1; shift @ARGV; } else { $DEBUG = 0; } ($ARGV[0] =~ m<(geo:)?/*([^/]*)(/(.*))?>) or die "Bad URI"; $loc = $2; $extras = $4; if ( $loc =~ /^(GC[0-9A-Z]+)$/ ) { $gc = $loc; $loc=`gcfetchtxt http://www.geocaching.com/seek/cache_details.aspx?wp=$loc|head -2|tail +2`; } # have a lot of fun... ($loc =~ /^(([^:@]*)(:([^:@]*))?@)?N?(S?)\s*((([0-9'"`°o\-\.])|(° ))*)[, ]\s*E?(W?)\s*(([0-9'"`o\-\.]|(° ))*)(:([0-9\-\.]*))?$/) or die "Bad URI"; $wp = $2 ? $2 : ( $gc ? $gc : "waypoint" ); $cmt = $4; $lat = $6; $lon = $11; $alt = $15; $latfact = ($5 eq "S") ? -1 : 1; $lonfact = ($10 eq "W") ? -1 : 1; if ( $lat =~ /^(-?)(\d*)[°'"`o] *([\d.]*)$/ ) { $lat = ($2 + ($3/60)) * ($1 ? -1 : 1); } if ( $lon =~ /^(-?)(\d*)[°'"`o] *([\d.]*)$/ ) { $lon = ($2 + ($3/60)) * ($1 ? -1 : 1); } $lat *= $latfact; $lon *= $lonfact; if ( $extras =~ /^(auto)?street/ ) { $mode = "latlon"; $zoom = 4.205; } else { $mode = "utm"; $zoom = 4.0; } if ( $DEBUG ) { open(PIPE, "|cat"); } else { open(PIPE, "|viking -- -"); } print PIPE < 0 ) { $mapname = $mapanddir[0]; $mapdir = $mapanddir[1]; } print PIPE <