projects
/
spider.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
make sure that callsigns and locators are all upper case
[spider.git]
/
perl
/
DXUtil.pm
diff --git
a/perl/DXUtil.pm
b/perl/DXUtil.pm
index 10b3538767822ef46735fb4cc2a8b267e7a8c024..6cf35b2bd77e3a398d652ba7d3f2af98f8e77228 100644
(file)
--- a/
perl/DXUtil.pm
+++ b/
perl/DXUtil.pm
@@
-10,6
+10,7
@@
package DXUtil;
use Date::Parse;
use IO::File;
use Date::Parse;
use IO::File;
+use File::Copy;
use Data::Dumper;
use strict;
use Data::Dumper;
use strict;
@@
-26,6
+27,7
@@
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(atime ztime cldate cldatetime slat slong yesno promptf
parray parraypairs phex shellregex readfilestr writefilestr
@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
);
print_all_fields cltounix unpad is_callsign is_latlong
is_qra is_freq is_digits is_pctext is_pcflag insertitem deleteitem
);
@@
-163,7
+165,7
@@
sub phex
sub parray
{
my $ref = shift;
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
}
# take the arg as an array reference and print as a list of pairs
@@
-183,6
+185,14
@@
sub parraypairs
return $out;
}
return $out;
}
+sub _sort_fields
+{
+ my $ref = shift;
+ my @a = split /,/, $ref->field_prompt(shift);
+ my @b = split /,/, $ref->field_prompt(shift);
+ return lc $a[1] cmp lc $b[1];
+}
+
# print all the fields for a record according to privilege
#
# The prompt record is of the format '<priv>,<prompt>[,<action>'
# print all the fields for a record according to privilege
#
# The prompt record is of the format '<priv>,<prompt>[,<action>'
@@
-198,7
+208,7
@@
sub print_all_fields
my $width = $self->width - 1;
$width ||= 80;
my $width = $self->width - 1;
$width ||= 80;
- foreach $field (sort {
$ref->field_prompt($a) cmp $ref->field_prompt(
$b)} @fields) {
+ foreach $field (sort {
_sort_fields($ref, $a,
$b)} @fields) {
if (defined $ref->{$field}) {
my ($priv, $ans) = promptf($ref->field_prompt($field), $ref->{$field});
my @tmp;
if (defined $ref->{$field}) {
my ($priv, $ans) = promptf($ref->field_prompt($field), $ref->{$field});
my @tmp;
@@
-313,6
+323,11
@@
sub writefilestr
}
}
}
}
+sub filecopy
+{
+ copy(@_) or return $!;
+}
+
# remove leading and trailing spaces from an input string
sub unpad
{
# remove leading and trailing spaces from an input string
sub unpad
{
@@
-325,13
+340,14
@@
sub unpad
# check that a field only has callsign characters in it
sub is_callsign
{
# 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]\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
{
}
# 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\xf0-\xff]/;
+ return $_[0];
}
# check that a PC prot flag is fairly valid (doesn't check the difference between 1/0 and */-)
}
# check that a PC prot flag is fairly valid (doesn't check the difference between 1/0 and */-)
@@
-343,7
+359,7
@@
sub is_pcflag
# check that a thing is a frequency
sub is_freq
{
# check that a thing is a frequency
sub is_freq
{
- return $_[0] =~ /^
[\d\.]+
$/;
+ return $_[0] =~ /^
\d+(?:\.\d+)?
$/;
}
# check that a thing is just digits
}
# check that a thing is just digits