use Date::Parse;
use IO::File;
+use File::Copy;
use Data::Dumper;
use strict;
@ISA = qw(Exporter);
@EXPORT = qw(atime ztime cldate cldatetime slat slong yesno promptf
parray parraypairs phex shellregex readfilestr writefilestr
+ filecopy
print_all_fields cltounix unpad is_callsign is_latlong
is_qra is_freq is_digits is_pctext is_pcflag insertitem deleteitem
);
sub parray
{
my $ref = shift;
- return join(', ', @{$ref});
+ return ref $ref ? join(', ', @{$ref}) : $ref;
}
# take the arg as an array reference and print as a list of pairs
}
}
+sub filecopy
+{
+ copy(@_) or return $!;
+}
+
# remove leading and trailing spaces from an input string
sub unpad
{
# check that a field only has callsign characters in it
sub is_callsign
{
- return $_[0] =~ /^(?:[A-Z]{1,2}\d+|\d[A-Z]\d+)[A-Z]+(?:-\d{1,2}|\/[A-Z0-9]+)?$/;
+ return $_[0] =~ /^(?:[A-Z]{1,2}\d+|\d[A-Z]{1,2}\d+)[A-Z]{1,3}(?:-\d{1,2}|\/(?:[A-Z]{1,2}\d{0,2}|\d[A-Z]\d{0,2}))?$/;
}
# check that a PC protocol field is valid text
sub is_pctext
{
- return $_[0] =~ /^[\x09\x20-\xFF]+$/;
+ return undef if $_[0] =~ /[\x00-\x08\x0a-\x1f\x80-\x9f]/;
+ return $_[0];
}
# check that a PC prot flag is fairly valid (doesn't check the difference between 1/0 and */-)
# check that a thing is a frequency
sub is_freq
{
- return $_[0] =~ /^[\d\.]+$/;
+ return $_[0] =~ /^\d+(?:\.\d+)?$/;
}
# check that a thing is just digits
# does it look like a qra locator?
sub is_qra
{
- return $_[0] =~ /^[A-Za-z][A-Za-z]\d\d[A-Za-z][A-Za-z]$/o;
+ return $_[0] =~ /^[A-Ra-r][A-Ra-r]\d\d[A-Xa-x][A-Xa-x]$/;
}
# does it look like a valid lat/long