Banks Problems
Blitz3D Forums/Blitz3D Beginners Area/Banks Problems
| ||
| Alright, so i'm making a brainfuck interperter, and so i thought i would use banks for it. Now, for some odd reason my code has no effect every once in a while and crashes after few operations. Does anyone have any idead why this is? My code:
;BF interperter
a$ = CommandLine$()
Global bytes = CreateBank(5000)
Global cmp = 1
Global cp = 1
Global dgo = 0
Global lp = 0
If a <> ""
f = ReadFile(a$)
While Not Eof(f)
j$ = ReadLine$(f)
bf(j$)
Wend
Else
.c
Print "Current memory pointer cell:" + cmp
Print "Current cell value:" + PeekByte(bytes, cmp)
Print "Next cell value:" + PeekByte(bytes, cmp + 1)
If cmp = 0
Else
Print "Previous cell value:" + PeekByte(bytes, cmp - 1)
EndIf
b$ = Input$("")
bf(b$)
Goto c
EndIf
Function bf(m$)
tl = Len(m$)
While Not cp = tl
h$ = Mid(m, cp, 1)
Select h$
Case ">"
If Not dgo = 1 Then cmp = cmp + 1
Case "<"
If Not dgo = 1 Then cmp = cmp - 1
If cmp <= 0
cmp = 0
EndIf
Case "+"
PokeByte bytes,cmp,PeekByte(bytes, cmp) + 1
Case "-"
PokeByte bytes,cmp,PeekByte(bytes, cmp) - 1
Case "."
Write Chr$(PeekByte(bytes,cmp))
Case ","
s = Input()
PokeByte bytes,cmp,s
Case "["
If Not PeekByte(bytes, cmp) = 0
lp = cp
Else
dgo = 1
EndIf
Case "]"
If Not PeekByte(bytes,cmp) = 0
cp = lp
Else
dgo = 0
EndIf
End Select
cp = cp + 1
Wend
End Function
|
| ||
| Well for start it's a little confusing. As well as I'm noyt entirely sure whatthis program is for. For example: lines such as If Not PeekByte(bytes,cmp) = 0 When I think you mean: If (PeekByte(bytes,cmp)) which returns TRUE when PeekBytebyte(Byte,cmp) is anything else than 0 Also with Not dgo = 1 This will ONLY return TRUE when dgo = 0 if dgo is ANYTHING EXCEPT 0, the result will be 0 I think it should be If (dgo<>1) Again, Not cp = tl would only return TRUE if cp is ANYTHING EXCEPT 0 AND tl = 0 OR cp = 0 AND tl = 1 Usign parenthesis can help: If (Not(cp = tl)) This way, the entire operand (cp=tl) is considered. When using a boolean operator on an integer, you are reducing the integer to either 0 or 1 in the argument. So for an integer, a% of ANYTHING EXCEPT 0: Not a% Would ALWAYS equal 0 Because a%<>0 is a TRUE result therefore a%=1 for the argument. |
| ||
| Alright, i'll fix up my code. (Also look at http://en.wikipedia.org/wiki/Brainfuck to see what this is for) But that still doesnt really solve my problems. |
| ||
| Thanks for that link :) I'll have a better look over what you have and see if I can help some more now I know the idea behind it! |
| ||
| K, thanks |