use DXVars;
use DXUtil;
use DXLog;
+use Julian;
use strict;
-use vars qw(@list $fp @today $string);
+use vars qw(@list $fp $today $string);
$fp = DXLog::new('debug', 'dat', 'd');
-@today = Julian::unixtoj(time());
+$today = $fp->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) {
- my @now = Julian::sub(@today, $entry);
- my $fh = $fp->open(@now);
+ my $now = $today->sub($entry);
+ my $fh = $fp->open($now);
my $line;
if ($fh) {
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) {
+ s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%02X", ord($1))/eg;
+ my ($t, $l) = split /\^/, $_, 2;
+ print atime($t), ' ', $l, "\n";
+ }
+ @prev = ();
}
}
$fp->close();