'main execution loop... type "exit<ENTER>" to exit
print "HQ9++ Interepeter - by Bill W."
print "type 'exit' (no quotes) then return to quit"
print
while (lower$(code$) <> "exit")
input ">"; code$
gosub [runCode]
wend
end
[runCode]
'iterate over each character in the program
pos = 1
while (pos <= len(code$))
select case lower$(mid$(code$, pos, 1))
case "h" 'h command = print hello world
print "Hello, World!"
'end case
case "q" 'q command = print source code
print code$
'end case
case "9" '9 command = print the lyrics to "99 Bottles of Beer on the Wall"
gosub [99bottles]
'end case
case "+" '+/++ command = increment the accumulator
'OO portion of ++ command isn't implemented yet
'this shouldn't have much bearing on program execution... I think
if (mid$(code$, pos+1, 1) = "+") then
accumulator = accumulator + 2
pos = pos + 1
else
accumulator = accumulator + 1
end if
'end case
end select
pos = pos + 1
wend
return
[99bottles]
'print the lyrics to "99 Bottles of Beer on the Wall"
for x = 99 to 1 step -1
print x; " bottle(s) of beer on the wall,"
print x; " bottle(s) of beer."
print "Take one down, pass it around, "
print (x-1); " bottle(s) of beer on the wall."
print
next x
return
'main execution loop... type "exit<ENTER>" to exit print "HQ9++ Interepeter - by Bill W." print "type 'exit' (no quotes) then return to quit" print while (lower$(code$) <> "exit") input ">"; code$ gosub [runCode] wend end [runCode] 'iterate over each character in the program pos = 1 while (pos <= len(code$)) select case lower$(mid$(code$, pos, 1)) case "h" 'h command = print hello world print "Hello, World!" 'end case case "q" 'q command = print source code print code$ 'end case case "9" '9 command = print the lyrics to "99 Bottles of Beer on the Wall" gosub [99bottles] 'end case case "+" '+/++ command = increment the accumulator 'OO portion of ++ command isn't implemented yet 'this shouldn't have much bearing on program execution... I think if (mid$(code$, pos+1, 1) = "+") then accumulator = accumulator + 2 pos = pos + 1 else accumulator = accumulator + 1 end if 'end case end select pos = pos + 1 wend return [99bottles] 'print the lyrics to "99 Bottles of Beer on the Wall" for x = 99 to 1 step -1 print x; " bottle(s) of beer on the wall," print x; " bottle(s) of beer." print "Take one down, pass it around, " print (x-1); " bottle(s) of beer on the wall." print next x return