PDA

View Full Version : thinBasic Module Maker Script



Charles Pegge
09-07-2009, 23:52
Oxygen thinBasic Module Maker Script.

This is a minimal demo. I had to perform a little workaround for thinBasic_LoadSymbol calls but this seems to be stable.

I've included some thinCore essentials so you wont need thincore.inc to run this script

It generates a module called Z (thinBasic_Z.dll)

Charles



uses "oxygen"

'---------------------------
'thinBasic Modules in Oxygen
'===========================


dim src as string


src = "


' ####
' ########
' ## ###
' ## ### ####
' ## ## ##
' ### ### ##
' ######## ##
' #### ##
' ######

#basic
#file `thinBasic_z.dll`

'--------------------------------------
' FOR THE FULL FUNCTIONALITY THIS CAN
' BE FOUND IN THE THINBASIC SDK FOLDER.
' THE PB VERSION IS USED.
'======================================
'include `thincore.inc`

%thinBasic_ReturnNone = 0& 'Used in thinBasic_LoadSymbol to define a sub
%thinBasic_ReturnNumber = 20& 'Used in thinBasic_LoadSymbol to define a function returning a EXT number
%thinBasic_ReturnString = 30& 'Used in thinBasic_LoadSymbol to define a function returning a string
%thinBasic_ReturnCodeByte = 1&
%thinBasic_ReturnCodeInteger = 2&
%thinBasic_ReturnCodeWord = 3&
%thinBasic_ReturnCodeDWord = 4&
%thinBasic_ReturnCodeLong = 5&
%thinBasic_ReturnCodeQuad = 6&
%thinBasic_ReturnCodeSingle = 7&
%thinBasic_ReturnCodeDouble = 8&
%thinBasic_ReturnCodeCurrency = 9&
%thinBasic_ReturnCodeExt = 10&
%thinBasic_ForceOverWrite = 1& 'Used in thinBasic_LoadSymbol to force symbol over writing

DECLARE FUNCTION thinBasic_LoadSymbol _
LIB `thinCore.DLL` _
ALIAS `thinBasic_LoadSymbol` _
( _
BYVAL SymbolName AS STRING, _
BYVAL ReturnCode AS LONG, _
BYVAL FunctionOrSubPointer AS DWORD, _
OPTIONAL BYVAL ForceOverWrite AS LONG _
) AS LONG

DECLARE SUB thinBasic_ParseNumber LIB `thinCore.DLL` ALIAS `thinBasic_ParseNumber` (Result AS EXT)
Declare Sub thinBasic_ParseLong Lib `thinCore.DLL` Alias `thinBasic_ParseLong` (Result As Long)
Declare Function thinBasic_ParseString Lib `thinCore.DLL` Alias `thinBasic_ParseString` (ByRef sResult As String) As Ext
DECLARE FUNCTION thinBasic_CheckOpenParens_Optional LIB `thinCore.DLL` ALIAS `thinBasic_CheckOpenParens_Optional` () AS LONG
DECLARE FUNCTION thinBasic_CheckCloseParens_Mandatory LIB `thinCore.DLL` ALIAS `thinBasic_CheckCloseParens_Mandatory` () AS LONG
DECLARE FUNCTION thinBasic_CheckComma_Optional LIB `thinCore.DLL` ALIAS `thinBasic_CheckComma_Optional` () AS LONG



'-------------------------------------------------
function greet alias `greet` () as string external
'=================================================

dim As Long ParensPresent
ParensPresent = thinBasic_CheckOpenParens_Optional
dim as string s=``
dim as double d=thinBasic_parseString(s)
If ParensPresent Then thinBasic_CheckCloseParens_Mandatory

function=`Hello ` s

end function

'--------------------------------------------------
function cubed alias `cubed` () as ext external
'==================================================

dim As Long ParensPresent
ParensPresent = thinBasic_CheckOpenParens_Optional
dim as ext e
thinBasic_parseNumber(e)
If ParensPresent Then thinBasic_CheckCloseParens_Mandatory
function=e^3
end function

'--------------------
sub finish() external
'====================
'print `finish`
terminate
end sub


'----------------------------------------------------------------------------------------------
function LoadLocalSymbols Cdecl ALIAS `LoadLocalSymbols` (BYVAL sPath AS STRING) AS Long export
'==============================================================================================

'------------------
'pseudo ole bstring
'and low level call
'==================

dim as zstring z(32)
dim f=?thinBasic_LoadSymbol
dim a

'-------------
def LoadSymbol
'=============
z(5)=`%1` : a=&z+4 : ?z=20
proc f a , thinBasic_%2 , &%1 , thinBasic_ForceOverWrite
end def

LoadSymbol greet ReturnString
LoadSymbol cubed ReturnNumber

end function

'--------------------------------------------------------------------------------------------------
function UnLoadLocalSymbols Cdecl ALIAS `UnLoadLocalSymbols` (BYVAL sPath AS STRING) AS Long export
'==================================================================================================
end function



"

' ##### ###### ###### ###### ###
' ######## ######### ######### ######### #####
' ## ## ## ## ## ## ## ## ##
' ## ## ## ## ## ## ## ## ##
' ## ## ## ## ## ## ## ## ##
' ## ## ## ## ## ## ## ## ##
' ## ## ## ## ## ## ## ## ##
' ## ########## ########## ########## ##########
' # ###### ###### ###### ######
'
'

'msgbox 0,o2_prep src
o2_asmo src


if len(o2_error) then
msgbox 0, "ERROR:"+$cr+o2_error()
else
msgbox 0,"COMPILED OK"
end if





Test Script:



'---------------------------
'thinBasic Modules in Oxygen
'===========================

'MODULE TESTING SCRIPT

uses "z"
msgbox 0,greet "World"
msgbox 0,cubed 3