X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FSpot.pm;h=8b66b0f6c762f78c398c230a64856a7ae89a621a;hb=ca8e84c32e70ea8eb1f30e716b7dbdc92f7e5083;hp=cb91c18aead934482da1878bb292e7b1ad6672e6;hpb=f443f102c592af25cd3468b637324ff78cc58300;p=spider.git diff --git a/perl/Spot.pm b/perl/Spot.pm index cb91c18a..8b66b0f6 100644 --- a/perl/Spot.pm +++ b/perl/Spot.pm @@ -23,7 +23,7 @@ use vars qw($fp $maxspots $defaultspots $maxdays $dirprefix $duplth $dupage $fil $fp = undef; $maxspots = 50; # maximum spots to return $defaultspots = 10; # normal number of spots to return -$maxdays = 3*31; # normal maximum no of days to go back +$maxdays = 100; # normal maximum no of days to go back $dirprefix = "spots"; $duplth = 20; # the length of text to use in the deduping $dupage = 3*3600; # the length of time to hold spot dups @@ -95,20 +95,20 @@ sub prefix return $fp->{prefix}; } -# add a spot to the data file (call as Spot::add) -sub add +# fix up the full spot data from the basic spot data +sub prepare { - my @spot = @_; # $freq, $call, $t, $comment, $spotter = @_ - my @out = @spot[0..4]; # just up to the spotter + # $freq, $call, $t, $comment, $spotter = @_ + my @out = @_[0..4]; # just up to the spotter # normalise frequency - $spot[0] = sprintf "%.f", $spot[0]; + $_[0] = sprintf "%.1f", $_[0]; # remove ssids if present on spotter $out[4] =~ s/-\d+$//o; # remove leading and trailing spaces - $spot[3] = unpad($spot[3]); + $_[3] = unpad($_[3]); # add the 'dxcc' country on the end for both spotted and spotter, then the cluster call my @dxcc = Prefix::extract($out[1]); @@ -121,17 +121,16 @@ sub add my $spotter_itu = (@dxcc > 0 ) ? $dxcc[1]->itu() : 0; my $spotter_cq = (@dxcc > 0 ) ? $dxcc[1]->cq() : 0; push @out, $spotter_dxcc; - push @out, $spot[5]; - - my $buf = join("\^", @out); - - # compare dates to see whether need to open another save file (remember, redefining $fp - # automagically closes the output file (if any)). - $fp->writeunix($out[2], $buf); - + push @out, $_[5]; return (@out, $spotted_itu, $spotted_cq, $spotter_itu, $spotter_cq); } +sub add +{ + my $buf = join("\^", @_[0..7]); + $fp->writeunix($_[2], $buf); +} + # search the spot database for records based on the field no and an expression # this returns a set of references to the spots # @@ -170,7 +169,8 @@ sub search my @todate; $dayfrom = 0 if !$dayfrom; - $dayto = $maxdays if !$dayto; + $dayto = $maxdays unless $dayto; + $dayto = $dayfrom + $maxdays if $dayto < $dayfrom; @fromdate = Julian::sub(@today, $dayfrom); @todate = Julian::sub(@fromdate, $dayto); $from = 0 unless $from; @@ -230,6 +230,7 @@ sub ftor my ($a, $b) = @_; return undef unless $a < $b; $b--; + my $d = $b - $a; my @a = split //, $a; my @b = split //, $b; my $out; @@ -239,7 +240,9 @@ sub ftor while (@b) { my $aa = shift @a; my $bb = shift @b; - if ($aa eq $bb) { + if (@b < (length $d) - 1) { + $out .= '\\d'; + } elsif ($aa eq $bb) { $out .= $aa; } elsif ($aa < $bb) { $out .= "[$aa-$bb]";