#!/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"; # # The most common sixbit encoding: @sixbit = ( "\032","A", "B", "C", "D", "E", "F", "G", # 00x "H", "I", "J", "K", "L", "M", "N", "O", # 01x "P", "Q", "R", "S", "T", "U", "V", "W", # 02x "X", "Y", "Z", "[", "\\","]", "^", "\r", # 03x " ", "!", '"', "\n","\$","%", "?", "\t", # 04x "(", ")", "*", "+", ",", "-", ".", "/", # 05x "0", "1", "2", "3", "4", "5", "6", "7", # 06x "8", "9", ":", ";", "<", "=", ">", "?", # 07x ); # # The LAP6 sixbit encoding: @sixbit = ( "0", "1", "2", "3", "4", "5", "6", "7", # 00x # "8", "9", "\n","?", " ", "I", ".", "-", # 01x "8", "9", "\.","?", " ", "I", ".", "-", # 01x "+", "\\","#", " ", "A", "B", "C", "D", # 02x "E", "F", "G", "H", "I", "J", "K", "L", # 03x "M", "N", "O", "P", "Q", "R", "S", "T", # 04x # "U", "V", "W", "X", "Y", "Z", "\n","/", # 05x "U", "V", "W", "X", "Y", "Z", "\.","/", # 05x # "\033","=", "U", ",", ".", "\$","[", "_", # 06x "\.", "=", "U", ",", ".", "\$","[", "_", # 06x # '"', '"', "<", ">", "]", "*", ":", "\032",# 07x '"', '"', "<", ">", "]", "*", ":", "\.", # 07x ); # 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($_ = $sixbit[$_], @c); $sixbit .= join('', @c); } $sixbit =~ s/[\000-\037]/./g; # Force printable printf "%s\r\n", $sixbit; }