Fix Filtering, RBN changes
[spider.git] / perl / grepdbg
index f133a143448972d0e75e5f019fb9015665ef77ff..80a918a07cc7a0a6a998d15240dd26746711bd75 100755 (executable)
@@ -5,7 +5,6 @@
 #
 # grepdbg [nn] [-mm] <regular expression>
 #
-
 # nn - is the day you what to look at: 1 is yesterday, 0 is today
 # and is optional if there is only one argument
 #
 # <regexp> is the regular expression you are searching for, 
 # a caseless search is done
 #
+# If you specify something that likes a filename and that filename
+# has a .pm on the end of it and it exists then rather than doing
+# the regex match it executes the "main::handle()" function passing
+# it one line at a time.
+#
 #
 
 require 5.004;
@@ -54,6 +58,15 @@ for my $arg (@ARGV) {
                push @list, $arg;
        } elsif ($arg =~ /^\d+$/) {
                $nolines = $arg;
+       } elsif ($arg =~ /\.pm$/) {
+               if (-e $arg) {
+                       my $fn = $arg;
+                       $fn =~ s/\.pm$//;
+                       eval { require $arg};
+                       die "requiring $fn failed $@" if $@;
+               } else {
+                       die "$arg not found";
+               }
        } else {
                $string = $arg;
                last;
@@ -67,12 +80,22 @@ for my $entry (@list) {
        my $now = $today->sub($entry); 
        my $fh = $fp->open($now); 
        my $line;
+       my $do;
+
+       if (main->can('handle')) {
+               $do = \&handle;
+       } else {
+               $do = \&process;
+       }
+
+       begin() if main->can('begin');
        if ($fh) {
                while (<$fh>) {
-                       process($_);
+                       &$do($_);
                }
                $fp->close();
        }
+       end() if main->can('end');
 }
 
 sub process
@@ -85,7 +108,8 @@ sub process
                for (@prev) {
                        s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%02X", ord($1))/eg; 
                        my ($t, $l) =  split /\^/, $_, 2;
-                       print atime($t), ' ', $l, "\n"; 
+                       print atime($t), ' ', $l, "\n";
+                       print '----------------' if $nolines > 1;
                }
                @prev = ();
        }
@@ -93,6 +117,6 @@ sub process
        
 sub usage
 {
-       die "usage: grepdbg [nn] [[-nnn] ..] <regexp>\n";
+       die "usage: grepdbg [nn days before] [-nnn lines before] [<regexp>|<perl file name>]\n";
 }
 exit(0);