#!/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. # Dump the media in octal and sixbit. # Pick a block size (in words!) $bsize = 128; $upack = "S$bsize"; # Open the file open(INPUT, $ARGV[0]) || die "$ARGV[0]: $!"; binmode(INPUT); # # Read each block and print it. for ($block = 0; ; $block++) { seek(INPUT, $block*2*$bsize, 0) || die "$ARGV[0] file seek: $!"; # read(INPUT, $buf, 2*$bsize) || die "$ARGV[0] file read: $!"; read(INPUT, $buf, 2*$bsize) || last; @buf = unpack($upack, $buf); $sixbit = ""; for ($offset = 0; $offset < $bsize; $offset++) { if ($offset%8 == 0) { printf "%s\r\n%04o %03o)", $sixbit, $block, $offset; $sixbit = ""; } printf "%04o ", $buf[$offset]; @c = ($buf[$offset]>>6, $buf[$offset]&077); grep($_ = ($_ >= 040? $_ : $_ + 0100), @c); $sixbit .= pack('CC', @c); } printf "%s\r\n", $sixbit; }