procedure main() header := reads(&input, 512) emptyblock := repl(char(16r6d)||char(16rb6), 256) type := ord(header[16r200]) write(&errout, "type is ", type) case type of { 3: { write(&errout, "EPS (DD) format") offset := 16ra0 } 16rcb: { write(&errout, "ASR-10 HD format") offset := 16r60 } 16rcc: { write(&errout, "TS-10/12 HD format") offset := 16r60 } 7: { write(&errout, "TS-10/12 DD format") offset := 16ra0 } default: stop(&errout, "Unknown format") } blocknum := 0 offset +:= 1 map := ord(header[offset]) bit := 16r80 repeat { if iand(map, bit) = 0 then { if block := reads(&input, 512) then writes(block) else break } else writes(emptyblock) bit /:= 2 if bit = 0 then { offset +:= 1 map := ord(header[offset]) bit := 16r80 } blocknum +:= 1 } write(&errout, blocknum, " Blocks") end