Execute Brain****: Difference between revisions

Content added Content deleted
Line 943: Line 943:
98 L = LEN(C$)
98 L = LEN(C$)
99 GOTO</lang>
99 GOTO</lang>

==={{header|BaCon}}===
By the author of BaCon, Peter van Eerten.
<lang freebasic>REM
REM Brainfuck interpreter

REM Get the separate arguments
SPLIT ARGUMENT$ BY " " TO arg$ SIZE dim

IF dim < 2 THEN
PRINT "Usage: bf <file>"
END
ENDIF

REM Determine size
filesize = FILELEN(arg$[1])

REM Get the contents
OPEN arg$[1] FOR READING AS bf

REM claim memory
txt = MEMORY(filesize)

REM Read file into memory
GETBYTE txt FROM bf SIZE filesize

CLOSE FILE bf

REM Initialize work memory
mem = MEMORY(30000)

REM This is The Pointer pointing to memory
thepointer = 0

REM This is the cursor pointing in the current program
cursor = 0

REM Start interpreting program
WHILE cursor < filesize DO

command = PEEK(txt + cursor)

SELECT command
CASE 62
INCR thepointer

CASE 60
DECR thepointer

CASE 43
POKE mem + thepointer, PEEK(mem + thepointer) + 1

CASE 45
POKE mem + thepointer, PEEK(mem + thepointer) - 1

CASE 46
PRINT CHR$(PEEK(mem + thepointer));

CASE 44
key = GETKEY
POKE mem + thepointer, key

CASE 91
jmp = 1
IF ISFALSE(PEEK(mem + thepointer)) THEN
REPEAT
INCR cursor
IF PEEK(txt + cursor) = 91 THEN
INCR jmp
ELIF PEEK(txt + cursor) = 93 THEN
DECR jmp
END IF
UNTIL PEEK(txt + cursor) = 93 AND NOT(jmp)
END IF

CASE 93
jmp = 1
IF ISTRUE(PEEK(mem + thepointer)) THEN
REPEAT
DECR cursor
IF PEEK(txt + cursor) = 93 THEN
INCR jmp
ELIF PEEK(txt + cursor) = 91 THEN
DECR jmp
END IF
UNTIL PEEK(txt + cursor) = 91 AND NOT(jmp)
END IF
END SELECT

INCR cursor
WEND</lang>


=={{header|BBC BASIC}}==
=={{header|BBC BASIC}}==