09-06-2022, 06:45 PM
drawGO v0.1
a really simple interpreter to evaluate DRAW commands without having to compile a basic program.
it technically supports all draw commands but entering a few of them can be a bit tricky so the interpreter has a few commands to deal with that and a handful of editing commands.
The interpreter can save and load lists of cod to and from a text file.
There's a very simple HELP listing.
commands added to draw:
setX <n> sets the X position of the pen to coordinate n
setY <n> sets the X position of the pen to coordinate n
setX and setY will move the draw pen without drawing a line. the program can't track pen movements from within draw commands.
setRED <n> set the red value of the 32 bit color
setGREEN <n> set the red value of the 32 bit color
setBLUE <n> set the red value of the 32 bit color
Circle <n> draw a circle of radius r , restricted to current color and the position established by setX and setY commands
PRINT will print all characters on the line following the print command to the coordinated set by setX and setY.
editor commands (not embedded in the saved code)
back goes back one code step erasing that line of code
list to list the code
go or redraw to execute the entered code
save and load to save and load a text file and save it into the drawGO code.
a really simple interpreter to evaluate DRAW commands without having to compile a basic program.
it technically supports all draw commands but entering a few of them can be a bit tricky so the interpreter has a few commands to deal with that and a handful of editing commands.
The interpreter can save and load lists of cod to and from a text file.
There's a very simple HELP listing.
commands added to draw:
setX <n> sets the X position of the pen to coordinate n
setY <n> sets the X position of the pen to coordinate n
setX and setY will move the draw pen without drawing a line. the program can't track pen movements from within draw commands.
setRED <n> set the red value of the 32 bit color
setGREEN <n> set the red value of the 32 bit color
setBLUE <n> set the red value of the 32 bit color
Circle <n> draw a circle of radius r , restricted to current color and the position established by setX and setY commands
PRINT will print all characters on the line following the print command to the coordinated set by setX and setY.
editor commands (not embedded in the saved code)
back goes back one code step erasing that line of code
list to list the code
go or redraw to execute the entered code
save and load to save and load a text file and save it into the drawGO code.
Code: (Select All)
'drawGO v0.1
'
'a simple interpreter to evaluate draw commands with a little bit extra functionality.
'
Screen _NewImage(800, 500, 32)
'$dynamic
Dim c$(100), tt$(0)
Dim cred&, cgreen&, cblue&
Dim dklr As _Unsigned Long
Dim eklr As _Unsigned Long
cred& = 250
cgreen& = 250
cblue& = 250
dklr = _RGB32(cred&, cgreen&, cblue&)
eklr = _RGB32(250, 250, 250)
D$ = ""
n = 0
T$ = ""
varX = 400
varY = 250
Draw "bm400,250"
Do
If Len(a$) > 0 Then
n = n + 1
c$(n) = a$
End If
Draw a$
Line Input a$
If a$ = "cls" Then
Cls
a$ = ""
End If
If a$ = "redraw" Or a$ = "go" Then
Cls
varX = 400: varY = 250
Color eklr
dklr = _RGB32(250, 250, 250)
Draw "c" + Str$(_RGB32(250, 250, 250))
Draw "bm400,250"
For x = 1 To n
If LCase$(Left$(c$(x), 4)) = "call" Then 'processing CALL functions
a$ = Right$(c$(x), Len(c$(x)) - 4)
If Left$(a$, 6) = "circle" Then
B$ = Right$(a$, Len(a$) - 6)
r = Val(B$)
PSet Step(0, 0)
Circle Step(0, 0), r
End If
If Left$(a$, 5) = "print" Then
B$ = Right$(a$, Len(a$) - 5)
Color dklr
_PrintString (varX, varY), B$
Color eklr
n = n + 1
End If
If Left$(a$, 4) = "home" Then
Draw "bm" + Str$(varX) + "," + Str$(varY)
n = n + 1
End If
If LCase$(Left$(a$, 4)) = "setx" Then
B$ = _Trim$(Right$(a$, Len(a$) - 4))
varX = Val(B$)
Draw "bm" + Str$(varX) + "," + Str$(varY)
n = n + 1
End If
If LCase$(Left$(a$, 4)) = "sety" Then
B$ = _Trim$(Right$(a$, Len(a$) - 4))
varY = Val(B$)
Draw "bm" + Str$(varX) + "," + Str$(varY)
n = n + 1
End If
If LCase$(Left$(a$, 6)) = "setred" Then
B$ = _Trim$(Right$(a$, Len(a$) - 6))
cred& = Val(B$)
dklr = _RGB32(cred&, cgreen&, cblue&)
Draw "c" + Str$(_RGB32(cred&, cgreen&, cblue&))
n = n + 1
a$ = ""
End If
If LCase$(Left$(a$, 8)) = "setgreen" Then
B$ = _Trim$(Right$(a$, Len(a$) - 8))
cgreen& = Val(B$)
dklr = _RGB32(cred&, cgreen&, cblue&)
Draw "c" + Str$(_RGB32(cred&, cgreen&, cblue&))
n = n + 1
a$ = ""
End If
If LCase$(Left$(a$, 7)) = "setblue" Then
B$ = _Trim$(Right$(a$, Len(a$) - 7))
cblue& = Val(B$)
Draw "c" + Str$(_RGB32(cred&, cgreen&, cblue&))
Color dklr
n = n + 1
a$ = ""
End If
a$ = ""
Else
Draw c$(x)
End If
Next x
a$ = ""
End If
If a$ = "list" Then
Print "command list"
For x = 1 To n
Print x, c$(x)
Next
a$ = ""
End If
If a$ = "quit" Then
T$ = "quit"
a$ = ""
End If
If a$ = "clear all" Then
ReDim c$(100)
a$ = ""
n = 0
End If
If a$ = "back" Then
c$(n) = ""
n = n - 1
a$ = ""
End If
If Left$(a$, 6) = "circle" Then
B$ = Right$(a$, Len(a$) - 6)
r = Val(B$)
PSet Step(0, 0)
Circle Step(0, 0), r
n = n + 1
c$(n) = "CALL" + a$
a$ = ""
End If
If Left$(a$, 5) = "print" Then
B$ = Right$(a$, Len(a$) - 6)
_PrintString (varX, varY), B$
n = n + 1
c$(n) = "CALL" + a$
a$ = ""
End If
If Left$(a$, 5) = "join" Then
ReDim tt$(n)
tn = 1
For m = 1 To n
If Left$(c$(m), 4) <> "CALL" Then
If lst$ = "call" Then tn = tn + 1
tt$(tn) = tt$(tn) + c$(m)
lst$ = "draw"
Else
tn = tn + 1
tt$(tn) = c$(m)
lst$ = "call"
End If
Next m
ReDim c$(100)
For x = 1 To tn
c$(x) = tt$(x)
Next x
n = tn
a$ = ""
End If
If Left$(a$, 4) = "save" Then
B$ = _Trim$(Right$(a$, Len(a$) - 4))
Print B$
n = n + 1
c$(n) = "END"
Open B$ For Output As #1
For x = 1 To n
If c$(x) <> "" Then Write #1, c$(x)
Next x
Close #1
a$ = ""
End If
If Left$(a$, 4) = "load" Then
B$ = _Trim$(Right$(a$, Len(a$) - 4))
Open B$ For Input As #1
n = 0
Do
n = n + 1
Input #1, c$(n)
Loop Until c$(n) = "END"
Close #1
n = n - 1
a$ = ""
End If
If LCase$(Left$(a$, 4)) = "setx" Then
B$ = _Trim$(Right$(a$, Len(a$) - 4))
varX = Val(B$)
Draw "bm" + Str$(varX) + "," + Str$(varY)
n = n + 1
c$(n) = "CALL" + a$
a$ = ""
End If
If LCase$(Left$(a$, 4)) = "sety" Then
B$ = _Trim$(Right$(a$, Len(a$) - 4))
varY = Val(B$)
Draw "bm" + Str$(varX) + "," + Str$(varY)
n = n + 1
c$(n) = "CALL" + a$
a$ = ""
End If
If Left$(a$, 4) = "home" Then
n = n + 1
Draw "bm" + Str$(varX) + "," + Str$(varY)
c$(n) = "CALLhome"
a$ = ""
End If
If LCase$(Left$(a$, 7)) = "callcls" Then
n = n + 1
c$(n) = "CALLcls"
a$ = ""
End If
If LCase$(Left$(a$, 6)) = "setred" Then
n = n + 1
B$ = _Trim$(Right$(a$, Len(a$) - 6))
c$(n) = "CALLSETRED" + B$
cred& = Val(B$)
dklr = _RGB32(cred&, cgreen&, cblue&)
Draw "c" + Str$(_RGB32(cred&, cgreen&, cblue&))
a$ = ""
End If
If LCase$(Left$(a$, 8)) = "setgreen" Then
n = n + 1
B$ = _Trim$(Right$(a$, Len(a$) - 8))
c$(n) = "CALLSETGREEN" + B$
cgreen& = Val(B$)
dklr = _RGB32(cred&, cgreen&, cblue&)
Draw "c" + Str$(_RGB32(cred&, cgreen&, cblue&))
a$ = ""
End If
If LCase$(Left$(a$, 7)) = "setblue" Then
n = n + 1
B$ = _Trim$(Right$(a$, Len(a$) - 7))
c$(n) = "CALLSETBLUE" + B$
cblue& = Val(B$)
dklr = _RGB32(cred&, cgreen&, cblue&)
Draw "c" + Str$(_RGB32(cred&, cgreen&, cblue&))
a$ = ""
End If
If Left$(a$, 4) = "help" Then
Cls
Print "HELP"
Print "================="
Print "edit commands"
Print "================="
Print "join compress code by joinign code line that only contain draw statements"
Print "save saves code to a file name"
Print "load load code from a file name"
Print "print print text at varX,varY"
Print "cls clear the screen"
Print "back step back and erase last line of code"
Print "list list program code"
Print "redraw or go to execute code"
Print ""
Print "Command words"
Print "==============================="
Print "setX set the value of X"
Print "setY set the value of Y"
Print "circle n draw a circle with a radius of numerical value n at current position"
Print "home sets the draw postions to varX and VarY"
Print "<draw commands> supports all draw commands"
Print "setred n set red value to n"
Print "setgreen n set green value to n"
Print "setblue n set blue value to n"
Print "CALLcls call cls from code"
a$ = ""
End If
Loop Until T$ = "quit"
Print
Print "command list"
For x = 1 To n
Print x, c$(x)
Next