X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXLogPrint.pm;h=6d37cb415d16ddfba84d481aa69055e881f653d2;hb=e39b738850b9a122b60b179e9723e546ddacfd62;hp=fff39d1256894e6a1765249f0ac157d85fa65b0a;hpb=099c6b4a10d9f1e7471b0c94273cd992b5814cdc;p=spider.git diff --git a/perl/DXLogPrint.pm b/perl/DXLogPrint.pm index fff39d12..6d37cb41 100644 --- a/perl/DXLogPrint.pm +++ b/perl/DXLogPrint.pm @@ -8,13 +8,12 @@ package DXLog; -use FileHandle; +use IO::File; use DXVars; -use DXDebug (); +#use DXDebug (); use DXUtil; use DXLog; use Julian; -use Carp; use strict; @@ -25,50 +24,69 @@ use strict; # sub print { - my $self = $DXLog::log; + my $fcb = $DXLog::log; my $from = shift; my $to = shift; - my @date = $self->unixtoj(shift); + my @date = Julian::unixtojm(shift); my $pattern = shift; + my $who = uc shift; my $search; my @in; - my @out; + my @out = (); my $eval; my $count; + my $hint = ""; - $search = $pattern ? "\$ref->[1] =~ /$pattern/" : '1' ; + if ($pattern) { + $search = "\$ref->[1] =~ m{^$pattern}i"; + $hint = "m{$pattern}i"; + } + if ($who) { + if ($search) { + $search .= ' && '; + $hint .= ' && '; + } + $search .= "(\$ref->[2] =~ m{$who}i || \$ref->[3] =~ m{$who}i)"; + $hint .= 'm{$who}i'; + } + $hint = "next unless $hint" if $hint; + $search = "1" unless $search; + $eval = qq( + \@in = (); + while (<\$fh>) { + $hint; + chomp; + \$ref = [ split '\\^' ]; + push \@\$ref, "" unless \@\$ref >= 4; + push \@in, \$ref; + } my \$c; - my \$ref; for (\$c = \$#in; \$c >= 0; \$c--) { \$ref = \$in[\$c]; if ($search) { \$count++; next if \$count < $from; push \@out, print_item(\$ref); - last LOOP if \$count >= \$to; # stop after n + last if \$count >= \$to; # stop after n } } ); - $self->close; # close any open files + $fcb->close; # close any open files - my $fh = $self->open(@date); -LOOP: - while ($count < $to) { - my @spots = (); + my $fh = $fcb->open(@date); + for ($count = 0; $count < $to; ) { + my $ref; if ($fh) { - while (<$fh>) { - chomp; - push @in, [ split '\^' ]; - } eval $eval; # do the search on this file - return ("Spot search error", $@) if $@; + last if $count >= $to; # stop after n + return ("Log search error", $@) if $@; } - $fh = $self->openprev(); # get the next file + $fh = $fcb->openprev(); # get the next file last if !$fh; } - + return @out; } @@ -98,7 +116,7 @@ sub print_item } elsif ($ref[1] eq 'talk') { $s = "$ref[3] -> $ref[2] ($ref[4]) $ref[5]"; } elsif ($ref[1] eq 'ann') { - $s = "$ref[2] -> $ref[3] $ref[4]"; + $s = "$ref[3] -> $ref[2] $ref[4]"; } else { $s = "$ref[2]"; }