From: Dirk Koopman <djk@tobit.co.uk>
Date: Tue, 21 Apr 2020 21:26:53 +0000 (+0100)
Subject: add Spot.pm with disabled $readback
X-Git-Url: http://dxspider.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=b25a235529526f5d2d653322800d2f5f1e0ae760;p=spider.git

add Spot.pm with disabled $readback

It turns out that using tac to read backwards isn't really worth it
for spot files, but I'm leaving the code there for any future
use cases.
---

diff --git a/perl/Spot.pm b/perl/Spot.pm
index f29ecef8..74b3f773 100644
--- a/perl/Spot.pm
+++ b/perl/Spot.pm
@@ -56,6 +56,14 @@ $filterdef = bless ([
 $totalspots = $hfspots = $vhfspots = 0;
 $use_db_for_search = 0;
 
+our $usetac = 0;
+our $readback;
+
+if ($usetac) {
+	$readback = `which tac`;
+	chomp $readback;
+}
+
 # create a Spot Object
 sub new
 {
@@ -302,29 +310,46 @@ sub search
 			   }
 			   my \$c;
 			   my \$ref;
-			   for (\$c = \$#spots; \$c >= 0; \$c--) {
-					\$ref = \$spots[\$c];
-					if ($expr) {
-						\$count++;
-						next if \$count < \$from; # wait until from 
-						push(\@out, \$ref);
-						last if \$count >= \$to; # stop after to
-					}
-				}
+               if (\$readback) {
+                   foreach \$ref (\@spots) {
+		               if ($expr) {
+						   \$count++;
+						   next if \$count < $from; # wait until from 
+						   push(\@out, \$ref);
+						   last if \$count >= $to; # stop after to
+			           }         
+                   }
+               } else {
+			      for (\$c = \$#spots; \$c >= 0; \$c--) {
+					   \$ref = \$spots[\$c];
+					   if ($expr) {
+						   \$count++;
+						   next if \$count < $from; # wait until from 
+						   push(\@out, \$ref);
+						   last if \$count >= $to; # stop after to
+					   }
+				   }
+               }
 			  );
+	         
 	
     
 	dbg("Spot eval: $eval") if isdbg('searcheval');
 	
-
-	$fp->close;					# close any open files
-
+	my $fh;
+	my $now = $fromdate;
 	for ($i = $count = 0; $i < $maxdays; ++$i) {	# look thru $maxdays worth of files only
-		my $now = $fromdate->sub($i); # but you can pick which $maxdays worth
-		last if $now->cmp($todate) <= 0;         
-	
-		my @spots = ();
-		my $fh = $fp->open($now); # get the next file
+		my @spots;
+		last if $now->cmp($todate) <= 0;
+		
+		if ($readback) {
+			my $fn = $fp->fn($now->sub($i));
+			dbg("search using tac fn: $fn $i") if isdbg('search');
+			$fh = IO::File->new("$readback $fn |");
+		} else {
+			$fh = $fp->open($now->sub($i));      # get the next file
+			dbg("search fn: $fp->{fn} $i") if isdbg('search');
+		}
 		if ($fh) {
 			my $in;
 			eval $eval;			# do the search on this file