+
+ 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;
+ }
+