Sorry.
Program name: bf()
BF code to run: bfc
(as a string)
Special commands:
:
: print the current cell to PrgmIO
;
: read the current cell from PrgmIO
bf() | |
Prgm | |
Local mem, jmpstk, jsptr, memdim, memptr, pc, op, bfcdim, k, conrow, concol, conpic, sw, sh, pc2 | |
ClrIO | |
StoPic conpic | |
XorPic conpic | |
240 -> sw | |
91 -> sh | |
255 -> memdim | |
dim(bfc) -> bfcdim | |
newList(memdim) -> mem | |
newList(dim(bfc)) -> jmpmap | |
newList(dim(bfc)) -> jmpstk | |
1 -> jsptr | |
For pc, 1, bfcdim | |
mid(bfc, pc, 1) -> op | |
If op = "[" Then | |
pc -> jmpstk[jsptr] | |
jsptr + 1 -> jsptr | |
ElseIf op = "]" Then | |
jsptr - 1 -> jsptr | |
jmpstk[jsptr] -> pc2 | |
pc -> jmpmap[pc2] | |
pc2 -> jmpmap[pc] | |
EndIf | |
EndFor | |
1 -> memptr | |
1 -> pc | |
0 -> conrow | |
0 -> concol | |
While pc > 0 and pc < bfcdim | |
mid(bfc, pc, 1) -> op | |
If op = "+" Then | |
mod(mem[memptr] + 1, 256) -> mem[memptr] | |
ElseIf op = "-" Then | |
mod(mem[memptr] - 1, 256) -> mem[memptr] | |
ElseIf op = ">" Then | |
mod(memptr, memdim-1) + 1 -> memptr | |
ElseIf op = "<" Then | |
mod(memptr - 2, memdim - 1) + 1 -> memptr | |
ElseIf op = "[" Then | |
If mem[memptr] = 0 Then | |
jmpmap[pc] -> pc | |
EndIf | |
ElseIf op = "]" Then | |
If mem[memptr] > 0 Then | |
jmpmap[pc] -> pc | |
EndIf | |
ElseIf op = "." Then | |
If concol * 7 + 7 > sw or mem[memptr] = 13 Then | |
0 -> concol | |
conrow + 1 -> conrow | |
If conrow * 9 + 9 > sh Then | |
conrow - 1 -> conrow | |
StoPic conpic, 9 | |
RplcPic conpic | |
StoPic conpic, sh - 9 | |
XorPic conpic, sh - 9 | |
0 -> concol | |
EndIf | |
EndIf | |
If mem[memptr] = 13 Then | |
PxlText char(mem[memptr]), conrow * 9, concol * 7 | |
concol + 1 -> concol | |
EndIf | |
ElseIf op = "," Then | |
0 -> k | |
While k=0 | |
getKey() -> k | |
EndWhile | |
If k > 255 Then | |
0 -> k | |
EndIf | |
k -> mem[memptr] | |
ElseIf op=":" Then | |
Disp mem[memptr] | |
Pause | |
DispG | |
ElseIf op = ";" Then | |
Disp | |
Input "", k | |
k -> mem[memptr] | |
DispG | |
EndIf | |
pc + 1 -> pc | |
EndWhile | |
PlotsOn | |
EndPrgm |