RosettaCodeData/Task/Subleq/Modula-2/subleq.mod2

41 lines
847 B
Plaintext

MODULE Subleq;
FROM Terminal IMPORT Write,WriteString,WriteLn,ReadChar;
TYPE MEMORY = ARRAY[0..31] OF INTEGER;
VAR
mem : MEMORY;
ip,a,b : INTEGER;
ch : CHAR;
BEGIN
mem := MEMORY{
15, 17, -1, 17, -1, -1, 16, 1,
-1, 16, 3, -1, 15, 15, 0, 0,
-1, 72, 101, 108, 108, 111, 44, 32,
119, 111, 114, 108, 100, 33, 10, 0
};
ip := 0;
REPEAT
a := mem[ip];
b := mem[ip+1];
IF a = -1 THEN
ch := ReadChar();
mem[b] := ORD(ch);
ELSIF b = -1 THEN
Write(CHR(mem[a]));
ELSE
DEC(mem[b],mem[a]);
IF mem[b] < 1 THEN
ip := mem[ip+2];
CONTINUE
END
END;
INC(ip,3)
UNTIL ip < 0;
WriteLn;
ReadChar
END Subleq.