- my $fn = shift;
- my $f = gzopen($fn, "r") or return "Cannot open $fn $!";
- while ($f->gzreadline) {
- chomp;
- my ($call, $city, $state) = split /\|/;
+ 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);