added hex decodes for 0-1f 7f-ff in watchdbg and grepdbg
[spider.git] / perl / grepdbg
index 250a898b5701aed2647c9e1de1822909cb48207e..5b95c6338565327e61b04d312cb9d58618eecd60 100755 (executable)
@@ -33,17 +33,21 @@ use vars qw(@list $fp @today $string);
 
 $fp = DXLog::new('debug', 'dat', 'd');
 @today = Julian::unixtoj(time()); 
+my $nolines = 1;
+my @prev;
 
 for my $arg (@ARGV) {
        if ($arg =~ /^-/) {
                $arg =~ s/^-//o;
                push @list, $arg;
+       } elsif ($arg =~ /^\d+$/) {
+               $nolines = $arg;
        } else {
                $string = $arg;
                last;
        }
 }
-die "usage: grepdbg [[-nnn] ..] <regexp>\n" unless  $string;
+die "usage: grepdbg [nn] [[-nnn] ..] <regexp>\n" unless  $string;
 
 push @list, "0" unless @list;
 for my $entry (@list) {
@@ -54,10 +58,16 @@ for my $entry (@list) {
                while (<$fh>) {
                        my $line = $_;
                        chomp $line;
+                       push @prev, $line;
+                       shift @prev while @prev > $nolines;
                        if ($line =~ m{$string}io) {
-                               my @line =  split '\^', $line;
-                               my $t = shift @line;
-                               print atime($t), ' ', join('^', @line), "\n"; 
+                               for (@prev) {
+                                       $line =~ s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%02X", ord($1))/eg; 
+                                       my @line =  split '\^';
+                                       my $t = shift @line;
+                                       print atime($t), ' ', join('^', @line), "\n"; 
+                               }
+                               @prev = ();
                        }
                }
                $fp->close();