#!/usr/bin/perl # # Copyright © 2015-2020 by Vincent Slyngstad # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS LISTED ABOVE BE LIABLE # FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF # CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the names of the authors above # shall not be used in advertising or otherwise to promote the sale, use # or other dealings in this Software without prior written authorization # from those authors. # # Convert a text version of a .BN file into a -pb.od file # Basically, it's just a "text" file with the standard # 3 bytes in 2 words format. @todo = @ARGV; foreach $f (@todo) { $of = $f; $of =~ y/A-Z/a-z/; $of =~ s/\.htm$//; $of =~ s/-bn$/-pb.od/; if (-f $of) { warn "Skipping $of: exists\n"; next; } open(OUTPUT, ">$of") || die "$of: $!"; print "Writing $of\n"; open(INPUT, $f) || die "$f: $!"; $eof = 0; while () { # The lines we care about have an octal offset, colon, then 16 values. if (s/^(\d+): //) { # Pick up the words, two at a time. while (s/^(\d+)\s+(\d+)\s+//) { @w = (oct($1), oct($2)); push(@w, (($w[0]&07400)>>4) + ($w[1]>>8)); $w[0] &= 0377; $w[1] &= 0377; # Now output 3 bytes, or until \0232 is found. $eof = 1 if $w[0] == 0232; printf OUTPUT "%04o\n", $w[0] unless $eof; $eof = 1 if $w[1] == 0232; printf OUTPUT "%04o\n", $w[1] unless $eof; $eof = 1 if $w[2] == 0232; printf OUTPUT "%04o\n", $w[2] unless $eof; } } } close(OUTPUT) || die "$of: $!"; } exit 0;