1. Incorporated sh/st, (un)set/lockout, forward/opername from Iain G0RDI
[spider.git] / cmd / show / qra.pl
1 #
2 # show the distance and bearing to a  QRA locator
3 #
4 # you can enter two qra locators and it will calc the distance between them
5 #
6 # $Id$
7 #
8
9 my ($self, $line) = @_;
10 my @list = split /\s+/, $line;                # generate a list of callsigns
11
12 my $l;
13 my @out;
14 my $lat = $self->user->lat;
15 my $long = $self->user->long;
16 if (!$long && !$lat) {
17         push @out, $self->msg('heade1');
18         $lat = $main::mylatitude;
19         $long = $main::mylongitude;
20 }
21
22 return (1, $self->msg('qrashe1')) unless @list > 0;
23 return (1, $self->msg('qrae2')) unless (DXBearing::is_qra($list[0]) || $list[0] =~ /^[A-Za-z][A-Za-z]\d\d$/);
24
25 #print "$lat $long\n";
26
27 my $l = uc $list[0];
28 my $f;
29
30 if (@list > 1) {
31         $f = $l;
32         $f .= 'MM' if $f =~ /^[A-Z][A-Z]\d\d$/;
33         ($lat, $long) = DXBearing::qratoll($f);
34     #print "$lat $long\n";
35         
36         return (1, $self->msg('qrae2')) unless (DXBearing::is_qra($list[1]) || $list[1] =~ /^[A-Za-z][A-Za-z]\d\d$/);
37         $l = uc $list[1];
38 }
39
40 $l .= 'MM' if $l =~ /^[A-Z][A-Z]\d\d$/;
41                 
42 my ($qlat, $qlong) = DXBearing::qratoll($l);
43 #print "$qlat $qlong\n";
44 my ($b, $dx) = DXBearing::bdist($lat, $long, $qlat, $qlong);
45 my ($r, $rdx) = DXBearing::bdist($qlat, $qlong, $lat, $long);
46 my $to = " -> $list[1]" if $f;
47 my $from = $list[0];
48
49 push @out, sprintf "$list[0]$to Bearing: %.0f Deg. Recip: %.0f Deg. %.0fMi. %.0fKm.", $b, $r, $dx * 0.62133785, $dx;
50
51 return (1, @out);