all dxdebug to have other directories, add wsjtl.pl
[spider.git] / perl / DXUtil.pm
index 91c636910bc5a0fcba3986a7bf84498829172d18..5edb1994a3ac80f3d496c6d0bc61b5364cf3abb6 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 difft parraydifft
+                        diffms _diffms _diffus difft parraydifft is_ztime
             );
 
 
@@ -383,10 +383,10 @@ sub unpad
 sub is_callsign
 {
        return $_[0] =~ m!^
-                                         (?:\d?[A-Z]{1,2}\d*/)?    # out of area prefix /  
-                                         (?:\d?[A-Z]{1,2}\d+)      # main prefix one (required) 
-                                         [A-Z]{1,5}                # callsign letters (required)
-                                         (?:-(?:\d{1,2}|\#))?      # - nn possibly (eg G8BPQ-8) or -# (an RBN spot) 
+                                         (?:\d?[A-Z]{1,2}\d{0,2}/)?    # out of area prefix /  
+                                         (?:\d?[A-Z]{1,2}\d{1,5})      # main prefix one (required) - lengthened for special calls 
+                                         [A-Z]{1,8}                # callsign letters (required)
+                                         (?:-(?:\d{1,2}))?         # - nn possibly (eg G8BPQ-8)
                                          (?:/[0-9A-Z]{1,7})?       # / another prefix, callsign or special label (including /MM, /P as well as /EURO or /LGT) possibly
                                          $!x;
 
@@ -444,6 +444,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
 {
@@ -508,6 +514,16 @@ sub _diffms
        return $b - $a;
 }
 
+# and in microseconds
+sub _diffus
+{
+       my $ta = shift;
+       my $tb = shift || [gettimeofday];
+       my $a = int($ta->[0] * 1000000) + int($ta->[1]); 
+       my $b = int($tb->[0] * 1000000) + int($tb->[1]);
+       return $b - $a;
+}
+
 sub diffms
 {
        my $call = shift;
@@ -533,7 +549,7 @@ sub difft
        if (ref $b eq 'ARRAY') {
                $t = $b->[1] - $b->[0];
        } else {
-               if ($adds >= $b) {
+               if ($adds && $adds =~ /^\d+$/ && $adds >= $b) {
                        $t = $adds - $b;
                        $adds = shift;
                } else {
@@ -548,15 +564,15 @@ sub difft
        $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?' ':'');
+       if ($d == 0 && $adds || $adds == 2) {
+               $s = int $t % 60;
+               $out .= sprintf ("%s${s}s", $adds?' ':'') if $s;
+               $out ||= sprintf ("%s0s", $adds?' ':'');
+       }
+       $out = '0s' unless length $out;
        return $out;
 }