X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fspot.pm;fp=perl%2Fspot.pm;h=0000000000000000000000000000000000000000;hb=21e7642d216656c60b164d76208633a0c81cf5db;hp=1d0ac75331c79d53ad0a48311489134acd600018;hpb=8cc3ac88ee6ba2216a9f19761385c9869a2f91b1;p=spider.git diff --git a/perl/spot.pm b/perl/spot.pm deleted file mode 100644 index 1d0ac753..00000000 --- a/perl/spot.pm +++ /dev/null @@ -1,138 +0,0 @@ -# -# the dx spot handler -# -# Copyright (c) - 1998 Dirk Koopman G1TLH -# -# $Id$ -# - -package spot; - -use FileHandle; -use DXVars; -use DXDebug; -use julian; - -@ISA = qw(julian); - -use strict; - -my $fp; -my $maxdays = 60; # maximum no of days to store spots in the table -my $prefix = "$main::data/spots"; -my @table = (); # the list of spots (held in reverse order) - -# read in n days worth of dx spots into memory -sub init -{ - my @today = julian->unixtoj(time); # get the julian date now - my @first = julian->sub(@today, $maxdays); # get the date $maxdays ago - my $count; - - mkdir($prefix, 0777) if ! -e $prefix; # create the base directory if required - for (my $i = 0; $i < $maxdays; ++$i) { - my $ref = spot->open(@first); - if ($ref) { - my $fh = $ref->{fh}; - my @out = (); - while (<$fh>) { - chomp; - my @ent = split /\^/; - - push @spot::table, \@ent; # stick this ref to anon list on the FRONT of the table - - ++$count; - } - } - @first = julian->add(@first, 1); - } - return $count; -} - -# create a new spot on the front of the list, add it to the data file -sub new -{ - my $pkg = shift; - my @spot = @_; # $freq, $call, $t, $comment, $spotter = @_ - - # sure that the numeric things are numeric now (saves time later) - $spot[0] = 0 + $spot[0]; - $spot[2] = 0 + $spot[2]; - - # save it on the front of the list - unshift @spot::table, \@spot; - - # compare dates to see whether need to open a other save file - my @date = julian->unixtoj($spot[2]); - $fp = spot->open(@date, ">>") if (!$fp || julian->cmp(@date, $fp->{year}, $fp->{day})); - my $fh = $fp->{fh}; - $fh->print(join("\^", @spot), "\n"); -} - -# purge all the spots older than $maxdays - this is fairly approximate -# this should be done periodically from some cron task -sub purge -{ - my $old = time - ($maxdays * 86400); - my $ref; - - while (@spot::table) { - my $ref = pop @spot::table; - if (${$ref}[2] > $old) { - push @spot::table, $ref; # put it back - last; # and leave - } - } -} - -# search the spot database for records based on the field no and an expression -# this returns a set of references to the spots -# -# for string fields supply a pattern to match -# for numeric fields supply a range of the format 'n > x && n < y' (the n will -# changed to the correct field name) [ n is literally the letter 'n' ] -# -sub search -{ - my ($pkg, $field, $expr, $from, $to) = @_; - my $eval; - my @out; - my $ref; - my $i; - - dbg('spot', "input expr = $expr\n"); - if ($field == 0 || $field == 2) { # numeric fields - $expr =~ s/n/\$ref->[$field]/g; # swap the letter n for the correct field name - } else { - $expr = qq(\$ref->[$field] =~ /$expr/oi); # alpha expressions - } - dbg('spot', "expr now = $expr\n"); - - # build up eval to execute - $eval = qq(foreach \$ref (\@spot::table) { - next if \$i < \$from; - if ($expr) { - unshift(\@out, \$ref); - \$i++; - last if \$to && \$i >= \$to; - } - }); - dbg('spot', "eval = $eval\n"); - eval $eval; # execute it - return @out; -} - -# open a spot file of the julian day -sub open -{ - my $pkg = shift; - return julian->open("spot", $prefix, @_); -} - -# close a spot file -sub close -{ - # do nothing, unreferencing or overwriting the $self will close it -} - -1;