39 lines
909 B
Plaintext
39 lines
909 B
Plaintext
program subleq;
|
|
if command_line(1) = om then
|
|
print("error: no file given");
|
|
stop;
|
|
end if;
|
|
|
|
mem := readprog(command_line(1));
|
|
|
|
loop init ip := 0; while ip >= 0 do
|
|
a := mem(ip) ? 0;
|
|
b := mem(ip+1) ? 0;
|
|
c := mem(ip+2) ? 0;
|
|
ip +:= 3;
|
|
if a = -1 then
|
|
mem(b) := ichar (getchar ? "\0");
|
|
elseif b = -1 then
|
|
putchar(char ((mem(a) ? 0) mod 256));
|
|
elseif (mem(b) +:= -(mem(a) ? 0)) <= 0 then
|
|
ip := c;
|
|
end if;
|
|
end loop;
|
|
|
|
proc readprog(fname);
|
|
if (f := open(fname, "r")) = om then
|
|
print("error: cannot open file");
|
|
stop;
|
|
end if;
|
|
|
|
mem := {};
|
|
mp := 0;
|
|
loop doing getb(f, n); while n/=om do
|
|
mem(mp) := n;
|
|
mp +:= 1;
|
|
end loop;
|
|
close(f);
|
|
return mem;
|
|
end proc;
|
|
end program;
|