11
Scripting Languages / Re: ScriptBasic 3.0
« Last post by John on April 16, 2024, 08:44:00 PM »I tried a different embedding example that was more complex and refined. (o2 embed include) The problem seems to be OxygenBasic setting a double in a structure. Getting a double seems to work.
Using SBT to develop your embedding scripts before using them in your development environment is handy.
Embedding ScriptBasic also gives you access to all the extension modules it supports including COM.
getsetvars.o2bas
sbembed.inc
testvars.sb
Output
C:\OxygenBasic\demos\ScriptBasic>getsetvars
1
0.2
Three
101
#qNAN
Thirty Three
C:\OxygenBasic\demos\ScriptBasic>
Using SBT to develop your embedding scripts before using them in your development environment is handy.
Embedding ScriptBasic also gives you access to all the extension modules it supports including COM.
getsetvars.o2bas
Code: Text
- % filename "getsetvars.exe"
- includepath "$/inc/"
- uses rtl64
- include "sbembed.inc"
- #console
- uses console
- sys pProgram
- sbData *arg
- string cr = chr(13,10)
- string src = `IMPORT "testvars.sb"` + cr
- pProgram = scriba_new(@newmem, @freemem)
- scriba_LoadConfiguration(pProgram, "C:\Windows\SCRIBA.INI")
- scriba_SetFileName(pProgram, "none")
- scriba_LoadProgramString(pProgram, src, len(src))
- scriba_Run(pProgram, "")
- sys v_a = scriba_LookupVariableByName(pProgram, "main::a")
- sys v_b = scriba_LookupVariableByName(pProgram, "main::b")
- sys v_c = scriba_LookupVariableByName(pProgram, "main::c")
- ' Get defined variable values
- scriba_GetVariable(pProgram, v_a, @@arg)
- print arg.lng + cr
- scriba_GetVariable(pProgram, v_b, @@arg)
- print arg.dbl + cr
- scriba_GetVariable(pProgram, v_c, @@arg)
- print arg.str + cr + cr
- ' Set variable values
- scriba_SetVariable(pProgram, v_a, SBT_LONG, 101, 0.0, "", 0)
- scriba_SetVariable(pProgram, v_b, SBT_DOUBLE, 0, 2.2, "", 0)
- scriba_SetVariable(pProgram, v_c, SBT_STRING, 0, 0.0, "Thirty Three", 12)
- ' Get changed variable values
- scriba_GetVariable(pProgram, v_a, @@arg)
- print arg.lng + cr
- scriba_GetVariable(pProgram, v_b, @@arg)
- print arg.dbl + cr
- scriba_GetVariable(pProgram, v_c, @@arg)
- print arg.str + cr
- scriba_DestroySbArgs(pProgram, arg, 1)
- scriba_destroy(pProgram)
sbembed.inc
Code: Text
- ' ScriptBasic Embedding Include
- % libScriba = "libScriba.dll"
- type SbData
- typ as dword
- siz as dword
- union {
- undef as sys
- dbl as double
- lng as sys
- str as char*
- strz as char*
- }
- end type
- #define SBT_UNDEF 0
- #define SBT_DOUBLE 1
- #define SBT_LONG 2
- #define SBT_STRING 3
- #define SBT_ZCHAR 4
- sys sb = LoadLibrary libScriba
- extern ms64
- bind sb
- {
- scriba_new
- scriba_SetStdin()
- scriba_SetStdout()
- scriba_SetEmbedPointer()
- scriba_LoadConfiguration
- scriba_destroy
- scriba_DestroySbData
- scriba_SetFileName
- scriba_LoadSourceProgram
- scriba_LoadProgramString
- scriba_Run
- scriba_GetVariable
- scriba_SetVariable
- scriba_LookupVariableByName
- scriba_LookupFunctionByName
- scriba_Call
- scriba_CallArg
- scriba_NewSbArgs
- scriba_CallArgEx
- scriba_DestroySbArgs
- scriba_DestroySbData
- scriba_NewSbString
- }
- end extern
- function newmem ms64 (sys le) as sys, export
- return getmemory le
- end function
- function freemem ms64 (sys p) export
- freememory p
- end function
testvars.sb
Code: ScriptBasic
- a = 1
- b = .2
- c = "Three"
Output
C:\OxygenBasic\demos\ScriptBasic>getsetvars
1
0.2
Three
101
#qNAN
Thirty Three
C:\OxygenBasic\demos\ScriptBasic>