X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FSpot.pm;h=67d8a6580aae023dfc6664c3985babfad0c7f9e5;hb=97fa4618141c1e20858660a6732d94ea3f431dd9;hp=9c10796b8ef4f924f9dc46cbb4eeb9c5053d5cb2;hpb=956e3acab807900fdbccc0e2fa5e999327a1c1ce;p=spider.git diff --git a/perl/Spot.pm b/perl/Spot.pm index 9c10796b..67d8a658 100644 --- a/perl/Spot.pm +++ b/perl/Spot.pm @@ -23,13 +23,14 @@ 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 = 35; # normal maximum no of days to go back +$maxdays = 365; # 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 $filterdef = bless ([ # tag, sort, field, priv, special parser ['freq', 'r', 0, 0, \&decodefreq], + ['on', 'r', 0, 0, \&decodefreq], ['call', 'c', 1], ['info', 't', 3], ['by', 'c', 4], @@ -158,7 +159,7 @@ sub add sub search { - my ($expr, $dayfrom, $dayto, $from, $to) = @_; + my ($expr, $dayfrom, $dayto, $from, $to, $hint) = @_; my $eval; my @out; my $ref; @@ -174,6 +175,8 @@ sub search @todate = Julian::sub(@fromdate, $dayto); $from = 0 unless $from; $to = $defaultspots unless $to; + $hint = $hint ? "next unless $hint" : ""; + $expr = "1" unless $expr; $to = $from + $maxspots if $to - $from > $maxspots || $to - $from <= 0; @@ -184,6 +187,11 @@ sub search # build up eval to execute $eval = qq( + while (<\$fh>) { + $hint; + chomp; + push \@spots, [ split '\\^' ]; + } my \$c; my \$ref; for (\$c = \$#spots; \$c >= 0; \$c--) { @@ -207,10 +215,6 @@ sub search my $fh = $fp->open(@now); # get the next file if ($fh) { my $in; - while (<$fh>) { - chomp; - push @spots, [ split '\^' ]; - } eval $eval; # do the search on this file last if $count >= $to; # stop after to return ("Spot search error", $@) if $@; @@ -220,6 +224,32 @@ sub search return @out; } +# change a freq range->regular expression +sub ftor +{ + my ($a, $b) = @_; + return undef unless $a < $b; + $b--; + my @a = split //, $a; + my @b = split //, $b; + my $out; + while (@b > @a) { + $out .= shift @b; + } + while (@b) { + my $aa = shift @a; + my $bb = shift @b; + if ($aa eq $bb) { + $out .= $aa; + } elsif ($aa < $bb) { + $out .= "[$aa-$bb]"; + } else { + $out .= "[$bb-$aa]"; + } + } + return $out; +} + # format a spot for user output in 'broadcast' mode sub formatb {