mirror of
git://scm.dxcluster.org/scm/spider
synced 2024-09-21 15:57:12 +00:00
100 lines
2.1 KiB
Perl
100 lines
2.1 KiB
Perl
#
|
|
# show dx using the dxcc number as the basis for searchs for each callsign or prefix entered
|
|
#
|
|
# $Id$
|
|
#
|
|
|
|
my ($self, $line) = @_;
|
|
my @list = split /\s+/, $line; # split the line up
|
|
|
|
my @out;
|
|
my $f;
|
|
my $call;
|
|
my ($from, $to);
|
|
my ($fromday, $today);
|
|
my @freq;
|
|
my @ans;
|
|
|
|
while ($f = shift @list) { # next field
|
|
# print "f: $f list: ", join(',', @list), "\n";
|
|
if (!$from && !$to) {
|
|
($from, $to) = $f =~ /^(\d+)-(\d+)$/o; # is it a from -> to count?
|
|
next if $from && $to > $from;
|
|
}
|
|
if (!$to) {
|
|
($to) = $f =~ /^(\d+)$/o if !$to; # is it a to count?
|
|
next if $to;
|
|
}
|
|
if (lc $f eq 'on' && $list[0]) { # is it freq range?
|
|
# print "yup freq\n";
|
|
my @r = split '/', $list[0];
|
|
# print "r0: $r[0] r1: $r[1]\n";
|
|
@freq = Bands::get_freq($r[0], $r[1]);
|
|
if (@freq) { # yup, get rid of extranous param
|
|
# print "freq: ", join(',', @freq), "\n";
|
|
shift @list;
|
|
next;
|
|
}
|
|
}
|
|
if (lc $f eq 'day' && $list[0]) {
|
|
# print "got day\n";
|
|
($fromday, $today) = split '-', $list[0];
|
|
shift @list;
|
|
next;
|
|
}
|
|
if (!@ans) {
|
|
@ans = Prefix::extract($f); # is it a callsign/prefix?
|
|
}
|
|
}
|
|
|
|
# no dxcc country, no answer!
|
|
if (@ans) { # we have a valid prefix!
|
|
|
|
# first deal with the prefix
|
|
my $pre = shift @ans;
|
|
my $a;
|
|
my $expr = "(";
|
|
my $str = "Prefix: $pre";
|
|
my $l = length $str;
|
|
|
|
# build up a search string for this dxcc country/countries
|
|
foreach $a (@ans) {
|
|
$expr .= " || " if $expr ne "(";
|
|
my $n = $a->dxcc();
|
|
$expr .= "\$f5 == $n";
|
|
my $name = $a->name();
|
|
$str .= " Dxcc: $n ($name)";
|
|
push @out, $str;
|
|
$str = pack "A$l", " ";
|
|
}
|
|
$expr .= ")";
|
|
push @out, $str;
|
|
|
|
# now deal with any frequencies specified
|
|
if (@freq) {
|
|
$expr .= " && (";
|
|
my $i;
|
|
for ($i = 0; $i < @freq; $i += 2) {
|
|
$expr .= "(\$f0 >= $freq[$i] && \$f0 <= $freq[$i+1]) ||";
|
|
}
|
|
chop $expr;
|
|
chop $expr;
|
|
$expr .= ")";
|
|
}
|
|
|
|
# print "expr: $expr from: $from to: $to fromday: $fromday today: $today\n";
|
|
|
|
# now do the search
|
|
my @res = Spot::search($expr, $fromday, $today, $from, $to);
|
|
my $ref;
|
|
my @dx;
|
|
foreach $ref (@res) {
|
|
@dx = @$ref;
|
|
push @out, Spot::formatl(@dx);
|
|
}
|
|
} else {
|
|
@out = $self->msg('e4');
|
|
}
|
|
|
|
return (1, @out);
|