import “io”
/*
devctl(DC_TAPE_LOAD, unit#, “filename”, ‘R’ or ‘W’)
devctl(DC_TAPE_READ, unit#, buffer)
devctl(DC_TAPE_WRITE, unit#, buffer, blocksizeinbytes)
devctl(DC_TAPE_UNLOAD, unit#)
all return codes pos or zero = success
negative is error message index
for read, the result is size of block
*/
let buffer = vec(128);
let pos = 0;
let size = 0;
let ropen(fname) be
{ let r = devctl(DC_TAPE_LOAD, 1, fname, ‘R’);
if r < 0 then
{ out("code %d from tape load\n", r);
finish }
pos := 0 }
let rclose() be
{ let r = devctl(DC_TAPE_UNLOAD, 1);
if r < 0 then
{ out("code %d from tape unload\n", r);
finish } }
let rchar() be
{ let c;
if pos = size then
{ let r = devctl(DC_TAPE_READ, 1, buffer);
if r < 0 then
{ out("code %d from tape read\n", r);
finish }
pos := 0;
size := r }
if pos = size then
resultis -1;
c := byte pos of buffer;
pos +:= 1;
resultis c }
let rnum() be
{ let n = 0, c = rchar();
while c < ' ' do
c := rchar();
while c >= ‘0’ /\ c <= '9' do
{ n := n * 10 + c - '0';
c := rchar() }
resultis n }
let start() be
{ ropen("numbers.txt");
while true do
{ let n = rnum();
out("The number is %d\n", n) }
rclose() }