use IO::File;
use File::Copy;
use Data::Dumper;
-
+use Time::HiRes qw(gettimeofday tv_interval);
use strict;
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
);
{
my $value = shift;
my $dd = new Data::Dumper([$value]);
+ $dd->Sortkeys(1);
$dd->Indent(0);
$dd->Terse(1);
$dd->Quotekeys($] < 5.005 ? 1 : 0);
my $ref = shift;
my $out;
for (sort keys %$ref) {
- $out .= "$_=$ref->{$_}, ";
+ $out .= "$_=" . atime($ref->{$_}) . ", ";
}
chop $out;
chop $out;
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;
}
}
}
}
+# 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 $pkg = shift;
+ 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 = "$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;
+}