%prefix_loc = (); # the meat of the info
%pre = (); # the prefix list
$hits = $misses = $matchtotal = 1; # cache stats
-$lrusize = 2000; # size of prefix LRU cache
+$lrusize = 1000; # size of prefix LRU cache
-$lru = LRU->newbase('Prefix', $lrusize);
+sub init
+{
+ my $r = load();
+ return $r if $r;
+
+ # fix up the node's default country codes
+ unless (@main::my_cc) {
+ push @main::my_cc, (61..67) if $main::mycall =~ /^GB/;
+ push @main::my_cc, qw(EA EA6 EA8 EA9) if $main::mycall =~ /^E[ABCD]/;
+ push @main::my_cc, qw(I IT IS) if $main::mycall =~ /^I/;
+ push @main::my_cc, qw(SV SV5 SV9) if $main::mycall =~ /^SV/;
+
+ # catchall
+ push @main::my_cc, $main::mycall unless @main::my_cc;
+ }
+
+ my @c;
+ for (@main::my_cc) {
+ if (/^\d+$/) {
+ push @c, $_;
+ } else {
+ my @dxcc = extract($_);
+ push @c, $dxcc[1]->dxcc if @dxcc > 1;
+ }
+ }
+ return "\@main::my_cc does not contain a valid prefix or callsign (" . join(',', @main::my_cc) . ")" unless @c;
+ @main::my_cc = @c;
+ return undef;
+}
sub load
{
untie %pre;
%pre = ();
%prefix_loc = ();
+ $lru->close if $lru;
+ undef $lru;
}
# tie the main prefix database
- $db = tie(%pre, "DB_File", undef, O_RDWR|O_CREAT, 0664, $DB_BTREE) or confess "can't tie \%pre ($!)";
- my $out = $@ if $@;
- do "$main::data/prefix_data.pl" if !$out;
- $out = $@ if $@;
+ eval {$db = tie(%pre, "DB_File", undef, O_RDWR|O_CREAT, 0664, $DB_BTREE);};
+ my $out = "$@($!)" if !$db || $@ ;
+ eval {do "$main::data/prefix_data.pl" if !$out; };
+ $out .= $@ if $@;
+ $lru = LRU->newbase('Prefix', $lrusize);
return $out;
}
+sub loaded
+{
+ return $db;
+}
+
sub store
{
my ($k, $l);
return @out;
}
+# get the full country data (dxcc, itu, cq, state, city) as a list
+# from a callsign.
+sub cty_data
+{
+ my $call = shift;
+
+ my @dxcc = extract($call);
+ if (@dxcc) {
+ my $state = $dxcc[1]->state || '';
+ my $city = $dxcc[1]->city || '';
+ my $name = $dxcc[1]->name || '';
+
+ return ($dxcc[1]->dxcc, $dxcc[1]->itu, $dxcc[1]->cq, $state, $city, $name);
+ }
+ return (666,0,0,'','','Pirate-Country-QQ');
+}
+
my %valid = (
lat => '0,Latitude,slat',
long => '0,Longitude,slong',
sub AUTOLOAD
{
- my $self = shift;
no strict;
my $name = $AUTOLOAD;
# this clever line of code creates a subroutine which takes over from autoload
# from OO Perl - Conway
*$AUTOLOAD = sub {@_ > 1 ? $_[0]->{$name} = $_[1] : $_[0]->{$name}} ;
- &$AUTOLOAD($self, @_);
+ goto &$AUTOLOAD;
}
#