Basic Interpreter 32-bit DLL for script

Blitz3D Forums/Blitz3D Userlibs/Basic Interpreter 32-bit DLL for script

ZJP(Posted 2009) [#1]
BINT32 is a small Basic Interpreter 32-bit DLL build by Eros Olmi for PowerBasic.
I make a Blitz3D wrapper for it.

http://www.zinfo972.net/pubip/bint32_pack.rar

A Blitz3D Example
;++++++++++++++++++++++++++++++++++++++++++++++++
; BINT32 Wrapper (c) zjp
;++++++++++++++++++++++++++++++++++++++++++++++++
BINT_Reset
BINT_About ;
Global FileName$ = "Test03_Speed.txt" ; << The script
Global buffer$
title$="Script to run"
; load script
Script$ = BINT_FileLoad(FileName$)
BINT_Message(title$, Script$ ) ; display the script. For fun !!!
; run the script and check for error
result% = BINT_Run(Script)
If result% Then
	Print "Error number      " +result%
	Print "Error at line     " +BINT_ErrorGetLine%()
	Print "Error description " +BINT_ErrorDescription$(result%)
	Delay 5500
	End 
EndIf
; Variables tests
SeedRnd MilliSecs()
MyProgram$ = "a*x^4 + b*x^3 + c*x^2 + d*x + e"
BINT_SetNumber("a", Rnd(-10,10))
BINT_SetNumber("b", Rnd(-10,10))
BINT_SetNumber("c", Rnd(-10,10))
BINT_SetNumber("d", Rnd(-10,10))
BINT_SetNumber("e", Rnd(-10,10))
BINT_SetNumber("x", Rnd(-10,10))
; get  variables. just check
a = BINT_GetNumber("a")
b = BINT_GetNumber("b")
c = BINT_GetNumber("c")
d = BINT_GetNumber("d")
e = BINT_GetNumber("e")
x = BINT_GetNumber("x")
Print "a = " + a
Print "b = " + b
Print "c = " + c
Print "d = " + d
Print "e = " + e
Print "x = " + x
;
MyProgramPtr% = BINT_EvalMathPreParse(MyProgram$)
If BINT_Error Then
      Print "Error during PreParsing operation. Program aborted."
      Delay 3000
	  End 
End If
loop% = 100
For counter = 1 To Loop
	BINT_SetNumber("x", counter)
	If BINT_Error Then
		Print "Variable error"
		Delay 3000
		End
	EndIf 
	Result_math# = Result_math# + BINT_EvalMath(MyProgramPtr)
	rtError% = BINT_ErrorClear()
    If rtError Then     
    	Print "An error occurred.Error code: " + rtError
        Print "Description: " + BINT_ErrorDescription(rtError)
        Print "Token found: " + BINT_ErrorGetToken()
        Print "Occurred at line:" + BINT_ErrorGetLine()
		Delay 3000
		End
	End If
Next 
;
Print "Result parse "+ Result_math#
Delay 3000
;----------------
; a string script 
;----------------
crlf$=Chr(13)+Chr(10)
MyProgram$ = ""
;
MyProgram$ = MyProgram$ + "'---------------------------------------              " + CRLF
MyProgram$ = MyProgram$ + "'Test nested IF                                       " + CRLF
MyProgram$ = MyProgram$ + "'---------------------------------------              " + CRLF
MyProgram$ = MyProgram$ + "DIM aNumber AS Number                                 " + cRLF
MyProgram$ = MyProgram$ + "aNumber = 999                                         " + CRLF
MyProgram$ = MyProgram$ + "                                                      " + CRLF
MyProgram$ = MyProgram$ + "IF aNumber >= 100 THEN                                " + CRLF
MyProgram$ = MyProgram$ + "  IF aNumber >= 1000 THEN                             " + CRLF
MyProgram$ = MyProgram$ + "    IF aNumber >= 2000 THEN                           " + CRLF
MyProgram$ = MyProgram$ + "      MSGBOX(''>= 2000'')                             " + CRLF
MyProgram$ = MyProgram$ + "    ELSE                                              " + CRLF
MyProgram$ = MyProgram$ + "      MSGBOX(''>= 1000 AND < 2000'')                  " + CRLF
MyProgram$ = MyProgram$ + "    END IF                                            " + CRLF
MyProgram$ = MyProgram$ + "  ELSE                                                " + CRLF
MyProgram$ = MyProgram$ + "    MSGBOX(''>= 100 AND < 1000'')                     " + CRLF
MyProgram$ = MyProgram$ + "  END IF                                              " + CRLF
MyProgram$ = MyProgram$ + "ELSE                                                  " + CRLF
MyProgram$ = MyProgram$ + "  MSGBOX(''< 100'')                                   " + CRLF
MyProgram$ = MyProgram$ + "END IF                                                " + CRLF
MyProgram$ = MyProgram$ + "'---------------------------------------              " + CRLF
MyProgram$ = MyProgram$ + "IF ''A'' > ''B'' THEN                                 " + CRLF
MyProgram$ = MyProgram$ + "  MSGBOX(''A > B'')                                   " + CRLF
MyProgram$ = MyProgram$ + "ELSE                                                  " + CRLF
MyProgram$ = MyProgram$ + "  MSGBOX(''A < B'')                                   " + CRLF
MyProgram$ = MyProgram$ + "END IF                                                " + CRLF
MyProgram$ = MyProgram$ + crlf
;---
; Show the script
;---
BINT_Message("Code that will be executed", MyProgram)

;---
; Run the script
;---
BINT_Run(MyProgram)
rtError = BINT_ErrorClear
If rtError Then     
	Print "An error occurred.Error code: " + rtError
    Print "Description: " + BINT_ErrorDescription(rtError)
    Print "Token found: " + BINT_ErrorGetToken()
    Print "Occurred at line:" + BINT_ErrorGetLine()
	Delay 3000
	End
End If
End

A Script example "Test03_Speed.txt"

	DIM t0          AS NUMBER VALUE TIMER
	DIM t1          AS NUMBER
	DIM t2          AS NUMBER
	DIM t3          AS NUMBER
	DIM t4          AS NUMBER
	DIM t9          AS NUMBER

	DIM Count       AS NUMBER
	DIM MaxLoops    AS NUMBER VALUE 1000
	DIM tmpNumber   AS NUMBER
	DIM tmpString   AS STRING
	DIM Message     AS STRING
	DIM tFormat     as string VALUE "#0.0000000" 
	
	'-----------------------------------------------------------------------------
	'Test speed: FOR loop
	'-----------------------------------------------------------------------------
	t1 = TIMER
	FOR Count = 1 TO MaxLoops
		INCR tmpNumber
	NEXT
	
	'-----------------------------------------------------------------------------
	'Test speed: WHILE loop
	'-----------------------------------------------------------------------------
	t2 = TIMER
	Count = 0
	tmpString = ""
	WHILE Count < MaxLoops
		INCR Count
	WEND
	
	'-----------------------------------------------------------------------------
	'Test speed: DO loop WHILE
	'-----------------------------------------------------------------------------
	t3 = TIMER
	Count = 0
	tmpString = ""
	DO
		INCR Count
	LOOP WHILE Count < MaxLoops

	'-----------------------------------------------------------------------------
	'Test speed: DO loop UNTIL
	'-----------------------------------------------------------------------------
	t4 = TIMER
	Count = 0
	tmpString = ""
	DO
		INCR Count
	LOOP UNTIL Count >= MaxLoops

	t9 = TIMER
	
	Message = _
		"Test " & MaxLoops & " loops:" & CRLF$ & _
	        "Declaration time: " & FORMAT$(t1-t0,tFormat) & " seconds." & CRLF$ & _
	        "FOR         time: " & FORMAT$(t2-t1,tFormat) & " seconds." & CRLF$ & _
	        "WHILE       time: " & FORMAT$(t3-t2,tFormat) & " seconds." & CRLF$ & _
	        "DO WHILE    time: " & FORMAT$(t4-t3,tFormat) & " seconds." & CRLF$ & _
	        "DO UNTIL    time: " & FORMAT$(t9-t4,tFormat) & " seconds." & CRLF$ & _
	        "MessageStr  time: " & FORMAT$(Timer-t9,tFormat) & " seconds." & CRLF$

	MSGBOX(Message)