X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=cmd%2Fshow%2Fqra.pl;h=574e351a64c85301e0a77b8ba8563f6dff8a411d;hb=refs%2Fheads%2Fstaging;hp=6269a0d57093336783d9ce9004bf12b84e2f4aab;hpb=9cac31473878fc88778cb13d843fa77c5fd33d65;p=spider.git diff --git a/cmd/show/qra.pl b/cmd/show/qra.pl index 6269a0d5..574e351a 100644 --- a/cmd/show/qra.pl +++ b/cmd/show/qra.pl @@ -3,7 +3,7 @@ # # you can enter two qra locators and it will calc the distance between them # -# $Id$ +# # my ($self, $line) = @_; @@ -11,8 +11,17 @@ my @list = split /\s+/, $line; # generate a list of callsigns return (1, $self->msg('qrashe1')) unless @list > 0; my @out; -my $fll; -my $tll; + +# every thing is dealt with in upper case +$line = uc $line; + +# convert a lat/long into a qra locator if we see a pattern looking like a lat/long +if (is_latlong($line)) { + my ($llat, $llong) = DXBearing::stoll(uc $line); + return (1, "QRA $line = " . DXBearing::lltoqra($llat, $llong)); +} + +# get the user's lat/long else the cluster's (and whinge about it) my $lat = $self->user->lat; my $long = $self->user->long; if (!$long && !$lat) { @@ -21,34 +30,28 @@ if (!$long && !$lat) { $long = $main::mylongitude; } -my $fqra = DXBearing::is_qra($list[0]); -my $sqra = $list[0] =~ /^[A-Za-z][A-Za-z]\d\d$/; -my $ll = $line =~ /^\d+\s+\d+\s*[NSns]\s+\d+\s+\d+\s*[EWew]/; -return (1, $self->msg('qrae2', $list[0])) unless $fqra || $sqra || $ll; - -# convert a lat/long into a qra locator -if ($ll) { - my ($llat, $llong) = DXBearing::stoll($line); - return (1, "QRA $line = " . DXBearing::lltoqra($llat, $llong)); -} - unshift @list, $self->user->qra if @list == 1 && $self->user->qra; unshift @list, DXBearing::lltoqra($lat, $long) unless @list > 1; +# check from qra my $f = uc $list[0]; $f .= 'MM' if $f =~ /^[A-Z][A-Z]\d\d$/; +return (1, $self->msg('qrae2', $f)) unless is_qra($f); ($lat, $long) = DXBearing::qratoll($f); -return (1, $self->msg('qrae2', $list[1])) unless (DXBearing::is_qra($list[1]) || $list[1] =~ /^[A-Za-z][A-Za-z]\d\d$/); +# check to qra my $l = uc $list[1]; - -$fll = DXBearing::lltos($lat, $long); +$l .= 'MM' if $l =~ /^[A-Z][A-Z]\d\d$/; +return (1, $self->msg('qrae2', $l)) unless is_qra($l); my ($qlat, $qlong) = DXBearing::qratoll($l); -$tll = DXBearing::lltos($qlat, $qlong); -$tll =~ s/\s+([NSEW])/$1/g; +# generate alpha lat/long +my $fll = DXBearing::lltos($lat, $long); $fll =~ s/\s+([NSEW])/$1/g; +my $tll = DXBearing::lltos($qlat, $qlong); +$tll =~ s/\s+([NSEW])/$1/g; +# calc bearings and distances my ($b, $dx) = DXBearing::bdist($lat, $long, $qlat, $qlong); my ($r, $rdx) = DXBearing::bdist($qlat, $qlong, $lat, $long); my $to = ''; @@ -59,3 +62,4 @@ my $from = "\U$list[0]($fll)" ; push @out, sprintf "$from$to To: %.0f Fr: %.0f Dst: %.0fMi %.0fKm", $b, $r, $dx * 0.62133785, $dx; return (1, @out); +