Jump to content

Subleq: Difference between revisions

Line 1,207:
halt: Say 'REXX program halted by user.';
Exit 1</lang>
 
=={{header|Pascal}}==
<lang pascal>PROGRAM OISC;
 
CONST
MAXADDRESS = 1255;
 
TYPE
MEMORY = PACKED ARRAY [0 .. MAXADDRESS] OF INTEGER;
 
VAR
MEM : MEMORY;
FILENAME : STRING;
 
PROCEDURE LOADTEXT (FILENAME : STRING; VAR MEM : MEMORY);
VAR
NUMBERS : TEXT;
ADDRESS : INTEGER;
BEGIN
ASSIGN (NUMBERS, FILENAME);
ADDRESS := 0;
RESET (NUMBERS);
WHILE (ADDRESS <= MAXADDRESS) AND NOT EOF (NUMBERS) DO BEGIN
READ (NUMBERS, MEM [ADDRESS]);
ADDRESS := ADDRESS + 1
END;
CLOSE (NUMBERS);
FOR ADDRESS := ADDRESS TO MAXADDRESS DO
MEM [ADDRESS] := 0
END;
 
PROCEDURE SUBLEQ (VAR MEM : MEMORY);
VAR
ADDRESS, A, B, C : INTEGER;
IO : CHAR;
BEGIN
ADDRESS := 0;
WHILE ADDRESS >= 0 DO BEGIN
A := MEM [ADDRESS];
B := MEM [ADDRESS + 1];
C := MEM [ADDRESS + 2];
ADDRESS := ADDRESS + 3;
IF A = -1 THEN BEGIN
READ (IO);
MEM [B] := ORD (IO)
END
ELSE IF B = -1 THEN BEGIN
IO := CHR (MEM [A]);
WRITE (IO)
END
ELSE BEGIN
MEM [B] := MEM [B] - MEM [A];
IF MEM [B] <= 0 THEN ADDRESS := C
END
END
END;
 
BEGIN
WRITE ('Filename>');
READLN (FILENAME);
LOADTEXT (FILENAME, MEM);
SUBLEQ (MEM);
END.</lang>
 
{{in}}
hello-world.txt
<pre>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</pre>
 
{{out}}
<pre>Filename>hello-world.txt
Hello, world!</pre>
 
=={{header|Perl}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.