X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXUtil.pm;h=28e7396dcebd3143d25d29b49c989e98c4c7592d;hb=7f6160c19c797aeb4cbc12cd154d8a7cf5263630;hp=9c14715c5ee073bdfa105302bc36c0bfaf5f6cd9;hpb=63cd679163fe336521e95e8af821b30d4bc1b9e9;p=spider.git diff --git a/perl/DXUtil.pm b/perl/DXUtil.pm index 9c14715c..28e7396d 100644 --- a/perl/DXUtil.pm +++ b/perl/DXUtil.pm @@ -13,7 +13,7 @@ use Date::Parse; use IO::File; use File::Copy; use Data::Dumper; - +use Time::HiRes qw(gettimeofday tv_interval); use strict; @@ -27,6 +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 ); @@ -382,11 +383,11 @@ sub unpad sub is_callsign { return $_[0] =~ m!^ - (?:(?:[A-Z]{1,2}\d* | \d[A-Z]{1,2}\d*)/)? # out of area prefix / - (?:[A-Z]{1,2}\d+ | \d[A-Z]{1,2}\d+)? # main prefix one - [A-Z]{1,5} # callsign letters - (?:-\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 + (?:\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) + (?:/[0-9A-Z]{1,7})? # / another prefix, callsign or special label (including /MM, /P as well as /EURO or /LGT) possibly $!x; # longest callign allowed is 1X11/1Y11XXXXX-11/XXXXXXX @@ -427,7 +428,8 @@ sub is_digits # does it look like a qra locator? sub is_qra { - return $_[0] =~ /^[A-Ra-r][A-Ra-r]\d\d[A-Xa-x][A-Xa-x]$/; + return unless length $_[0] == 4 || length $_[0] == 6; + return $_[0] =~ /^[A-Ra-r][A-Ra-r]\d\d(?:[A-Xa-x][A-Xa-x])?$/; } # does it look like a valid lat/long @@ -439,7 +441,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] =~ /^[0-9a-f:,]+$/; } # insert an item into a list if it isn't already there returns 1 if there 0 if not @@ -496,3 +498,27 @@ sub localdata_mv } } +# measure the time taken for something to happen; use Time::HiRes qw(gettimeofday tv_interval); +sub _diffms +{ + my $ta = shift; + my $tb = shift || [gettimeofday]; + my $a = int($ta->[0] * 1000) + int($ta->[1] / 1000); + my $b = int($tb->[0] * 1000) + int($tb->[1] / 1000); + return $b - $a; +} + +sub diffms +{ + my $call = shift; + my $line = shift; + my $ta = shift; + my $no = shift; + my $tb = shift; + my $msecs = _diffms($ta, $tb); + + $line =~ s|\s+$||; + my $s = "subprocess stats cmd: '$line' $call ${msecs}mS"; + $s .= " $no lines" if $no; + DXDebug::dbg($s); +}