use DB_File;
use File::Copy;
use DXDebug;
-use Compress::Zlib;
+#use Compress::Zlib;
use vars qw($VERSION $BRANCH);
$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
sub init
{
end();
- if (tie %db, 'DB_File', $dbfn, O_RDONLY, 0664, $DB_BTREE) {
+ if (tie %db, 'DB_File', $dbfn, O_RDWR, 0664, $DB_BTREE) {
$present = 1;
- dbg("US Database loaded");
- } else {
- dbg("US Database not loaded");
+ return "US Database loaded";
}
+ return "US Database not loaded";
}
sub end
return @s;
}
+sub _add
+{
+ my ($db, $call, $city, $state) = @_;
+
+ # lookup the city
+ my $s = uc "$city|$state";
+ my $ctyn = $db->{$s};
+ unless ($ctyn) {
+ my $no = $db->{'##'} || 1;
+ $ctyn = "#$no";
+ $db->{$s} = $ctyn;
+ $db->{$ctyn} = $s;
+ $no++;
+ $db->{'##'} = "$no";
+ }
+ $db->{uc $call} = $ctyn;
+}
+
+sub add
+{
+ _add(\%db, @_);
+}
+
sub getstate
{
return () unless $present;
return @s ? $s[0] : undef;
}
+sub del
+{
+ my $call = uc shift;
+ delete $db{$call};
+}
+
#
# load in / update an existing DB with a standard format (GZIPPED)
# "raw" file.
tie %dbn, 'DB_File', "$dbfn.new", O_RDWR|O_CREAT, 0664, $a or return "cannot tie $dbfn.new $!";
# now write away all the files
+ my $count = 0;
for (@_) {
my $ofn = shift;
+
+ return "Cannot find $ofn" unless -r $ofn;
+
+ # conditionally handle compressed files (don't cha just lurv live code, this is
+ # a rave from the grave and is "in memoriam Flossie" the ICT 1301G I learnt on.
+ # {for pedant computer historians a 1301G is an ICT 1301A that has been
+ # Galdorised[tm] (for instance had decent IOs and a 24 pre-modify instruction)}
+ my $nfn = $ofn;
+ if ($nfn =~ /.gz$/i) {
+ my $gz;
+ eval qq{use Compress::Zlib; \$gz = gzopen(\$ofn, "rb")};
+ return "Cannot read compressed files $@ $!" if $@ || !$gz;
+ $nfn =~ s/.gz$//i;
+ my $of = new IO::File ">$nfn" or return "Cannot write to $nfn $!";
+ my ($l, $buf);
+ $of->write($buf, $l) while ($l = $gz->gzread($buf));
+ $gz->gzclose;
+ $of->close;
+ $ofn = $nfn;
+ }
+
my $of = new IO::File "$ofn" or return "Cannot read $ofn $!";
while (<$of>) {
my $l = $_;
$l =~ s/[\r\n]+$//;
my ($call, $city, $state) = split /\|/, $l;
+
+ _add(\%dbn, $call, $city, $state);
- # lookup the city
- my $s = "$city|$state";
- my $ctyn = $dbn{$s};
- unless ($ctyn) {
- my $no = $dbn{'##'} || 1;
- $ctyn = "#$no";
- $dbn{$s} = $ctyn;
- $dbn{$ctyn} = $s;
- $no++;
- $dbn{'##'} = "$no";
- }
- $dbn{$call} = $ctyn;
+ $count++;
}
$of->close;
- unlink $ofn;
+ unlink $nfn;
}
untie %dbn;
rename "$dbfn.new", $dbfn;
- return ();
+ return "$count records";
}
1;