downgrade perl on console.pl
authorDirk Koopman <djk@tobit.co.uk>
Fri, 21 Jan 2022 17:06:58 +0000 (17:06 +0000)
committerDirk Koopman <djk@tobit.co.uk>
Fri, 21 Jan 2022 17:06:58 +0000 (17:06 +0000)
backport grepdbg from mojo

Changes
perl/DXUtil.pm
perl/console.pl
perl/grepdbg
perl/watchdbg

diff --git a/Changes b/Changes
index 91d4a8556530b140b12fd31e901c39c66c94b3ee..a9b759938a8ac31d2647a542ced42647dfb47cc6 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,9 @@
+21Jan22=======================================================================
+1. downgrade console.pl require to perl 5.8.1.
+2. Backport grepdbg from mojo.
+20Jan22=======================================================================
+1. Fix version tracking related bugs.
+2. Backport grepdbg from mojo.
 09Jan22=======================================================================
 1. Add New Year CTY 3201 prefix data.
 07Jan22=======================================================================
index 7288afb7d5deffa84d59734d445ff7cf2991a4cc..f0e7a8ae00a341f04b5d35153b3a39a363a9b73f 100644 (file)
@@ -448,7 +448,7 @@ sub is_latlong
 # is it an ip address?
 sub is_ipaddr
 {
-    return $_[0] =~ /^\d+\.\d+\.\d+\.\d+$/ || $_[0] =~ /^[0-9a-f:,]+$/;
+    return $_[0] =~ /^\d+\.\d+\.\d+\.\d+$/ || $_[0] =~  /^(?:[\da-f]{1,4}:|:)(?:\:[0-9a-f]{1,4}){1,6}/i ;
 }
 
 # is it a zulu time hhmmZ
index c816e373ae0f5dd9c8d6333531472a50514ed2ab..13f2bfa1873ae9522068d427e217cc5e936c2a24 100755 (executable)
@@ -13,7 +13,7 @@
 #
 # 
 
-require 5.10.1;
+require 5.8.1;
 use warnings;
 
 use vars qw($data $clusteraddr $clusterport);
index 1282d71fb680861baa7d306bb21c9d7a9161d976..06f7df635d630e44944a7154cc6243e2038e4823 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
 #
 # ten lines including the line matching the regular expression. 
 #
 # <regexp> is the regular expression you are searching for, 
-# a caseless search is done
+# a caseless search is done. There can be more than one <regexp>
+# a <regexp> preceeded by a '!' is treated as NOT <regexp>. Each
+# <regexp> is implcitly ANDed together. 
+#
+# 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;
-package main;
-
-use vars qw($data);
 
 # search local then perl directories
 BEGIN {
@@ -32,9 +35,7 @@ BEGIN {
        unshift @INC, "$root/local";
 }
 
-$data = "$root/data";
-
-use DXVars;
+use SysVar;
 use DXUtil;
 use DXLog;
 use Julian;
@@ -43,45 +44,91 @@ use strict;
 
 use vars qw(@list $fp $today $string);
 
+
 $fp = DXLog::new('debug', 'dat', 'd');
 $today = $fp->unixtoj(time()); 
 my $nolines = 1;
 my @prev;
+my @patt;
 
-for my $arg (@ARGV) {
+foreach my $arg (@ARGV) {
        if ($arg =~ /^-/) {
                $arg =~ s/^-//o;
+               if ($arg =~ /^\s*\-+(?:[h\?]e?l?p?)/) {
+                       usage();
+                       exit(0);
+               }
                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;
+               push @patt, $arg;
        }
 }
-die "usage: grepdbg [nn] [[-nnn] ..] <regexp>\n" unless  $string;
+
+push @patt, '.*' unless @patt;
 
 push @list, "0" unless @list;
 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>) {
-                       my $line = $_;
-                       chomp $line;
-                       push @prev, $line;
-                       shift @prev while @prev > $nolines;
-                       if ($line =~ m{$string}io) {
-                               for (@prev) {
-                                       s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%02X", ord($1))/eg; 
-                                       my ($t, $l) =  split /\^/, $_, 2;
-                                       print atime($t), ' ', $l, "\n"; 
-                               }
-                               @prev = ();
-                       }
+                       &$do($_);
                }
                $fp->close();
        }
+       end() if main->can('end');
+}
+
+sub process
+{
+       my $line = shift;
+       chomp $line;
+       push @prev, $line;
+       shift @prev while @prev > $nolines;
+       my $flag = 0;
+       foreach my $p (@patt) {
+               if ($p =~ /^!/) {
+                       my $r = substr $p, 1;
+                       last if $line =~ m{$r}i;
+               } else {
+                       last unless $line =~ m{$p}i;
+               }
+               ++$flag;
+       }               
+       if ($flag == @patt) {
+               for (@prev) {
+                       s/([\x00-\x1f\x7f-\xff])/sprintf("\\x%02X", ord($1))/eg; 
+                       my ($t, $l) =  split /\^/, $_, 2;
+                       print atime($t), ' ', $l, "\n";
+                       print '----------------' if $nolines > 1;
+               }
+               @prev = ();
+       }
+}
+       
+sub usage
+{
+       die "usage: grepdbg [nn days before] [-nnn lines before] [<perl file name>] [<regexp>|!<regexp>]...\n";
 }
 exit(0);
index 79a72f600768c1e7a251e4ba13234592d032df40..a497eff92957f5bb269c7c1ce062f08c9acb83cd 100755 (executable)
@@ -27,7 +27,7 @@ BEGIN {
 }
 
 use IO::File;
-use DXVars;
+use SysVar;
 use DXUtil;
 use DXLog;