BrainF*ck interpreter.
Const DEBUG=False Dim MEM(30000) Global Code$=" " Global P=0 Global C=1 Global OUT$ Global S ;CODE$ = ".+[.+]" ;CODE$ = ">+++++++++++[<++++++++>-]<-.>++++[<++++>-]<+.-------.>+++++[<++++>-]<-.[-]>++++++++[<++++>-]<.>+++++++++[<++++++++>-]<+.++++++++++.[-]>++++++++[<++++>-]<.>+++++++++++[<++++++++>-]<+.----------.++++++.---.[-]>++++++++[<++++>-]<.>+++++++++++++[<++++++>-]<.-------------.++++++++++++.--------.>++++++[<------>-]<--.[-]+++++++++++++.---.[-]+[>,-------------]>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]<.[-]<-[<-]>[++++++++++++++.>]++++++++++." ;CODE$ = ",+[-.,+]" ;CODE$=" +++[--[>+]<]" Restore NINE Repeat Read T$ If T$="" Then Exit CODE$=CODE$+T$ Forever While C <= Len(Code$) Select Mid(Code$,C,1) Case "+" MEM(P) = MEM(P) + 1 If MEM(P)>255 Then MEM(P)=0 C=C+1 Case "-" MEM(P) = MEM(P) - 1 If MEM(P)<0 Then MEM(P)=255 C=C+1 Case ">" P=P+1 :C=C+1 Case "<" P=P-1 :C=C+1 Case "." OUT$=OUT$+Chr(MEM(P)) If Right(OUT$,1)=Chr(10) Then Print OUT$:OUT$="" C=C+1 Case "," Repeat IN=GetKey() Until IN MEM(P)= IN:C=C+1 Case "[" If MEM(P)=0 Then S=C-C F=C .HERE Repeat F=F+1 Until Mid(CODE$,F,1) = "]" Or Mid(CODE$,F,1) = "[" I$= Mid(CODE$,F,1) Select True Case I$="]" And S=0 C=F Case I$="]" And S>0 S=S-1 Goto HERE Case I$="[" S=S+1 Goto HERE End Select End If C=C+1 Case "]" S=C-C F=C .THERE Repeat F=F-1 Until Mid(CODE$,F,1) = "[" Or Mid(CODE$,F,1) = "]" I$= Mid(CODE$,F,1) Select True Case I$="[" And S=0 C=F Case I$="[" And S>0 S=S-1 Goto THERE Case I$="]" S=S+1 Goto THERE End Select Default C=C+1 End Select If DEBUG For Z=0 To 9 A$=A$+MEM(Z) Next A$=A$+" P="+P + " " A$=A$+" C="+C + " " A$=A$+" CODE="+Mid(CODE,C,1) + " " A$=A$+" MEM="+MEM(P) + " " DebugLog A$ A$="" End If Wend WaitKey .NINE;TY NINE BOTTLES O' BEER Data ">++++++++++[<++++++++++>-]<->>>>>+++[>+++>+++<<-]<<<<+<[>[>+" Data ">+<<-]>>[-<<+>>]++++>+<[-<->]<[[-]>>-<<]>>[[-]<<+>>]<<[[-]>>" Data ">>>>[[-]<++++++++++<->>]<-[>+>+<<-]>[<+>-]+>[[-]<->]<<<<<<<<" Data "<->>]<[>+>+<<-]>>[-<<+>>]+>+<[-<->]<[[-]>>-<<]>>[[-]<<+>>]<<" Data "<[>>+>+<<<-]>>>[-<<<+>>>]++>+<[-<->]<[[-]>>-<<]>>[[-]<<+>>]<" Data "<[>+<[-]]<[>>+<<[-]]>>[<<+>>[-]]<<<[>>+>+<<<-]>>>[-<<<+>>>]+" Data "+++>+<[-<->]<[[-]>>-<<]>>[[-]<<+>>]<<[>+<[-]]<[>>+<<[-]]>>[<" Data "<+>>[-]]<<[[-]>>>++++++++[>>++++++<<-]>[<++++++++[>++++++<-]" Data ">.<++++++++[>------<-]>[<<+>>-]]>.<<++++++++[>>------<<-]<[-" Data ">>+<<]<++++++++[<++++>-]<.>+++++++[>+++++++++<-]>+++.<+++++[" Data ">+++++++++<-]>.+++++..--------.-------.++++++++++++++>>[>>>+" Data ">+<<<<-]>>>>[-<<<<+>>>>]>+<[-<->]<[[-]>>-<<]>>[[-]<<+>>]<<<<" Data "[>>>+>+<<<<-]>>>>[-<<<<+>>>>]+>+<[-<->]<[[-]>>-<<]>>[[-]<<+>" Data ">]<<<[>>+<<[-]]>[>+<[-]]++>>+<[-<->]<[[-]>>-<<]>>[[-]<<+>>]<" Data "+<[[-]>-<]>[<<<<<<<.>>>>>>>[-]]<<<<<<<<<.>>----.---------.<<" Data ".>>----.+++..+++++++++++++.[-]<<[-]]<[>+>+<<-]>>[-<<+>>]+>+<" Data "[-<->]<[[-]>>-<<]>>[[-]<<+>>]<<<[>>+>+<<<-]>>>[-<<<+>>>]++++" Data ">+<[-<->]<[[-]>>-<<]>>[[-]<<+>>]<<[>+<[-]]<[>>+<<[-]]>>[<<+>" Data ">[-]]<<[[-]>++++++++[<++++>-]<.>++++++++++[>+++++++++++<-]>+" Data ".-.<<.>>++++++.------------.---.<<.>++++++[>+++<-]>.<++++++[" Data ">----<-]>++.+++++++++++..[-]<<[-]++++++++++.[-]]<[>+>+<<-]>>" Data "[-<<+>>]+++>+<[-<->]<[[-]>>-<<]>>[[-]<<+>>]<<[[-]++++++++++." Data ">+++++++++[>+++++++++<-]>+++.+++++++++++++.++++++++++.------" Data ".<++++++++[>>++++<<-]>>.<++++++++++.-.---------.>.<-.+++++++" Data "++++.++++++++.---------.>.<-------------.+++++++++++++.-----" Data "-----.>.<++++++++++++.---------------.<+++[>++++++<-]>..>.<-" Data "---------.+++++++++++.>.<<+++[>------<-]>-.+++++++++++++++++" Data ".---.++++++.-------.----------.[-]>[-]<<<.[-]]<[>+>+<<-]>>[-" Data "<<+>>]++++>+<[-<->]<[[-]>>-<<]>>[[-]<<+>>]<<[[-]++++++++++.[" Data "-]<[-]>]<+<]" Data ""