add an RBN line to progress
[spider.git] / perl / DXUtil.pm
index 28e7396dcebd3143d25d29b49c989e98c4c7592d..73f36d17b6e0cbb2bb0a1dbf91f74cc1cc7fbacf 100644 (file)
@@ -27,7 +27,7 @@ require Exporter;
              print_all_fields cltounix unpad is_callsign is_latlong
                         is_qra is_freq is_digits is_pctext is_pcflag insertitem deleteitem
                         is_prefix dd is_ipaddr $pi $d2r $r2d localdata localdata_mv
-                        diffms _diffms
+                        diffms _diffms difft parraydifft is_ztime
             );
 
 
@@ -141,6 +141,7 @@ sub dd
 {
        my $value = shift;
        my $dd = new Data::Dumper([$value]);
+       $dd->Sortkeys(1);
        $dd->Indent(0);
        $dd->Terse(1);
     $dd->Quotekeys($] < 5.005 ? 1 : 0);
@@ -182,7 +183,7 @@ sub ptimelist
        my $ref = shift;
        my $out;
        for (sort keys %$ref) {
-               $out .= "$_=$ref->{$_}, ";
+               $out .= "$_=" . atime($ref->{$_}) . ", ";
        }
        chop $out;
        chop $out;
@@ -444,6 +445,12 @@ sub is_ipaddr
     return $_[0] =~ /^\d+\.\d+\.\d+\.\d+$/ || $_[0] =~ /^[0-9a-f:,]+$/;
 }
 
+# is it a zulu time hhmmZ
+sub is_ztime
+{
+       return $_[0] =~ /^(?:(?:2[0-3])|(?:[01][0-9]))[0-5][0-9]Z$/;
+}
+
 # insert an item into a list if it isn't already there returns 1 if there 0 if not
 sub insertitem
 {
@@ -472,15 +479,15 @@ sub deleteitem
 sub localdata
 {
        my $ifn = shift;
-       my $ofn = "$main::data/$ifn";
+       my $ofn = "$main::local_data/$ifn";
        my $tfn;
        
        if (-e "$main::local_data") {
-               $tfn = "$main::local_data/$ifn";
-               if (-e $tfn && -e $ofn) {
-                       $ofn = $tfn if -M $tfn < -M $ofn;
-               } elsif (-e $tfn) {
-                       $ofn = $tfn;
+               $tfn = "$main::data/$ifn";
+               if ((-e $tfn) && (-e $ofn)) {
+                       $ofn = $tfn if -M $ofn < -M $tfn;
+               } else {
+                       $ofn = $tfn if -e $tfn;
                }
        }
 
@@ -510,6 +517,7 @@ sub _diffms
 
 sub diffms
 {
+       my $pkg = shift;
        my $call = shift;
        my $line = shift;
        my $ta = shift;
@@ -518,7 +526,57 @@ sub diffms
        my $msecs = _diffms($ta, $tb);
 
        $line =~ s|\s+$||;
-       my $s = "subprocess stats cmd: '$line' $call ${msecs}mS";
+       my $s = "$pkg subprocess stats cmd: '$line' $call ${msecs}mS";
        $s .= " $no lines" if $no;
        DXDebug::dbg($s);
 }
+
+# expects either an array reference or two times (in the correct order [start, end])
+sub difft
+{
+       my $b = shift;
+       my $adds = shift;
+       
+       my $t;
+       if (ref $b eq 'ARRAY') {
+               $t = $b->[1] - $b->[0];
+       } else {
+               if ($adds >= $b) {
+                       $t = $adds - $b;
+                       $adds = shift;
+               } else {
+                       $t = $main::systime - $b;
+               }
+       }
+       return '-(ve)' if $t < 0;
+       my ($d,$h,$m,$s);
+       my $out = '';
+       $d = int $t / 86400;
+       $out .= sprintf ("%s${d}d", $adds?' ':'') if $d;
+       $t -= $d * 86400;
+       $h = int $t / 3600;
+       $out .= sprintf ("%s${h}h", $adds?' ':'') if $h;
+#      $out .= "${h}h" if $h || $d;
+       $t -= $h * 3600;
+       $m = int $t / 60;
+       $out .= sprintf ("%s${m}m", $adds?' ':'') if $m;
+#      $out .= "${m}m" if $m || $h || $d;
+       $s = int $t % 60;
+       $out .= sprintf ("%s${s}s", $adds?' ':'') if $s;
+       #       $out .= "${s}s";
+       $out ||= sprintf ("%s0s", $adds?' ':'');
+       return $out;
+}
+
+# print an array ref of difft refs
+sub parraydifft
+{
+       my $r = shift;
+       my $out = '';
+       for (@$r) {
+               my $s = $_->[2] ? "($_->[2])" : '';
+               $out .= sprintf "%s=%s$s, ", atime($_->[0]), difft($_->[0], $_->[1]);
+       }
+       $out =~ s/,\s*$//;
+       return $out;
+}