fb:porticula NoPaste
Einfacher Basic-Interpreter (eher Scriptsprache)
Uploader: | AndT |
Datum/Zeit: | 01.11.2007 21:59:39 |
' Einstellungen
DIM AS INTEGER lines = 1
DIM SHARED AS STRING LineCode(9999)
DIM SHARED AS INTEGER aktline
DIM AS STRING cmdshell
DIM SHARED AS INTEGER ln = 1
' Der eigendliche Interpreter (nutzt nur FB eigene Befehle..)
SUB fb_low(cmd AS STRING, arg AS STRING) ' Soll bis jetzt nur einfache Befehle enthalten..
IF INKEY =CHR(27) then exit SUB
SELECT CASE UCASE(cmd)
CASE "PRINT"
PRINT arg
CASE "SCREEN"
SCREEN VAL(arg)
case "COLOR"
COLOR VAL(arg)
case "SLEEP"
sleep VAL(arg)
case "END"
aktline = ln+1
case "GOTO"
aktline = VAL(arg)-1
END SELECT
END SUB
'____________ Runlib ____________
SUB runlib ' Funzt jetzt besser als man denkt ;)
DIM AS STRING cmd
DIM AS STRING arg
FOR aktline = 1 TO ln
cmd = LEFT(linecode(aktline),INSTR(Linecode(aktline)," ")-1)
arg = MID(linecode(aktline),INSTR(Linecode(aktline)," ")+1,len(linecode(aktline)))
fb_low(cmd,arg) ' Einfache (LOW) Befehle werden hier Interpretiert
NEXT
LOCATE 4,1:PRINT "Programm beenden mit Taste"
SLEEP
END SUB
'____________ Help ____________
SUB help
PRINT
PRINT "Verfuegbare Befehle PRINT, SCREEN, COLOR, END , GOTO"
PRINT "Zur Eingabeconsole mit Enter"
DO
SLEEP 1
LOOP UNTIL INKEY = CHR(13)
END SUB
'Programm eigene Functionen
SUB InternControl(cmdshell AS STRING)
cmdshell = LCASE(cmdshell)
IF cmdshell = "_exit" THEN RESET:SCREEN 0:COLOR 7,0: : SYSTEM
if cmdshell ="_run" then LOCATE 4,1:PRINT "Programm läuft.. ":runlib
IF cmdshell = "_help" THEN help : ln-=1
if cmdshell = "_reset" THEN LN = 1
END SUB
' Eingabe
DO
rn:
CLS
LOCATE 1,1:PRINT "Freebasic Programmaker (minimaltestcode, gepatcht)"
LOCATE 2,1:PRINT "_run startet das Progamm, _exit beendet das Programm, _help listet Befehle auf"
LOCATE 4,1:PRINT "BEREIT feur Befehle.."
LOCATE 5,1
IF ln < 1 THEN ln = 1
LOCATE 6,1:PRINT "Aktuelle Zeile : ";ln
INPUT "Eingabe : ",cmdshell ' Hier werden die Befehle eingegeben
IF LEFT(cmdshell,1)="_" THEN InternControl(cmdshell):goto rn
IF cmdshell <> "" THEN LineCode(ln) = cmdshell:ln+=1