// Script BASIC Extension Module
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <time.h>
#include "../../basext.h"
#include "../../scriba.h"
#include "cbasic.h"
/****************************
Extension Module Functions
****************************/
besVERSION_NEGOTIATE
RETURN_FUNCTION((int)INTERFACE_VERSION);
besEND
besSUB_START
DIM AS long PTR p;
besMODULEPOINTER = besALLOC(sizeof(long));
IF (besMODULEPOINTER EQ NULL) THEN_DO RETURN_FUNCTION(0);
p = (long PTR)besMODULEPOINTER;
RETURN_FUNCTION(0);
besEND
besSUB_FINISH
DIM AS long PTR p;
p = (long PTR)besMODULEPOINTER;
IF (p EQ NULL) THEN_DO RETURN_FUNCTION(0);
RETURN_FUNCTION(0);
besEND
/**********************
Script BASIC Instance
**********************/
besFUNCTION(SB_New)
DIM AS pSbProgram pProgram;
besRETURN_LONG(pProgram);
besEND
besFUNCTION(SB_Configure)
DIM AS int sbobj;
DIM AS char PTR cfgfilename;
DIM AS int rtnval = -1;
besARGUMENTS("iz")
AT sbobj, AT cfgfilename
besARGEND
rtnval = scriba_LoadConfiguration(sbobj, cfgfilename);
besRETURN_LONG(rtnval);
besEND
besFUNCTION(SB_Load)
DIM AS int sbobj;
DIM AS char PTR sbfilename;
DIM AS int rtnval = -1;
besARGUMENTS("iz")
AT sbobj, AT sbfilename
besARGEND
rtnval = scriba_SetFileName(sbobj, sbfilename);
scriba_LoadSourceProgram(sbobj);
besRETURN_LONG(rtnval);
besEND
besFUNCTION(SB_LoadStr)
DIM AS int sbobj;
DIM AS char PTR sbpgm;
DIM AS int rtnval = -1;
besARGUMENTS("iz")
AT sbobj, AT sbpgm
besARGEND
scriba_SetFileName(sbobj, "fake");
rtnval
= scriba_LoadProgramString
(sbobj
, sbpgm
, strlen(sbpgm
)); besRETURN_LONG(rtnval);
besEND
besFUNCTION(SB_Run)
DIM AS int sbobj, rtnval = -1;
DIM AS char PTR sbcmdline;
besARGUMENTS("iz")
AT sbobj, AT sbcmdline
besARGEND
IF (besARGNR < 2) THEN_DO sbcmdline = "";
rtnval = scriba_Run(sbobj, sbcmdline);
besRETURN_LONG(rtnval);
besEND
besFUNCTION(SB_NoRun)
DIM AS int sbobj, rtnval = -1;
besARGUMENTS("i")
AT sbobj
besARGEND
rtnval = scriba_NoRun(sbobj);
besRETURN_LONG(rtnval);
besEND
besFUNCTION(SB_Destroy)
DIM AS int sbobj;
besARGUMENTS("i")
AT sbobj
besARGEND
scriba_destroy(sbobj);
RETURN_FUNCTION(0);
besEND
besFUNCTION(SB_Address)
DIM AS int sbobj, funcsernum;
DIM AS char PTR funcname;
besARGUMENTS("iz")
AT sbobj, AT funcname
besARGEND
funcsernum = scriba_LookupFunctionByName(sbobj, funcname);
besRETURN_LONG(funcsernum);
besEND
besFUNCTION(SB_GetInt)
DIM AS pSbData varobj;
DIM AS int sbobj, vsn;
DIM AS char PTR varname;
besARGUMENTS("iz")
AT sbobj, AT varname
besARGEND
vsn = scriba_LookupVariableByName(sbobj, varname);
scriba_GetVariable(sbobj, vsn, &varobj);
besRETURN_LONG(varobj[0].v.l);
besEND
besFUNCTION(SB_GetDbl)
DIM AS pSbData varobj;
DIM AS int sbobj, vsn;
DIM AS char PTR varname;
besARGUMENTS("iz")
AT sbobj, AT varname
besARGEND
vsn = scriba_LookupVariableByName(sbobj, varname);
scriba_GetVariable(sbobj, vsn, &varobj);
besRETURN_DOUBLE(varobj[0].v.d);
besEND
besFUNCTION(SB_GetStr)
DIM AS pSbData varobj;
DIM AS int sbobj, vsn;
DIM AS char PTR varname;
besARGUMENTS("iz")
AT sbobj, AT varname
besARGEND
vsn = scriba_LookupVariableByName(sbobj, varname);
scriba_GetVariable(sbobj, vsn, &varobj);
besRETURN_STRING(varobj[0].v.s);
besEND
besFUNCTION(SB_SetInt)
DIM AS VARIABLE Argument;
DIM AS pSbData varobj;
DIM AS int sbobj, vsn, usrval, i;
DIM AS char PTR varname;
IF (besARGNR < 3) THEN_DO RETURN_FUNCTION(EX_ERROR_TOO_FEW_ARGUMENTS);
DEF_FOR (i = 1 TO i <= 3 STEP INCR i)
BEGIN_FOR
Argument = besARGUMENT(i);
besDEREFERENCE(Argument);
IF (i EQ 1) THEN_DO sbobj = LONGVALUE(Argument);
IF (i EQ 2) THEN_DO varname = STRINGVALUE(Argument);
IF (i EQ 3) THEN_DO usrval = LONGVALUE(Argument);
NEXT
vsn = scriba_LookupVariableByName(sbobj, varname);
besRETURN_LONG(scriba_SetVariable(sbobj, vsn, SBT_LONG, usrval, 0, "", 0));
besEND
besFUNCTION(SB_SetDbl)
DIM AS VARIABLE Argument;
DIM AS pSbData varobj;
DIM AS int sbobj, vsn, i;
DIM AS char PTR varname;
DIM AS double usrval;
IF (besARGNR < 3) THEN_DO RETURN_FUNCTION(EX_ERROR_TOO_FEW_ARGUMENTS);
DEF_FOR (i = 1 TO i <= 3 STEP INCR i)
BEGIN_FOR
Argument = besARGUMENT(i);
besDEREFERENCE(Argument);
IF (i EQ 1) THEN_DO sbobj = LONGVALUE(Argument);
IF (i EQ 2) THEN_DO varname = STRINGVALUE(Argument);
IF (i EQ 3) THEN_DO usrval = DOUBLEVALUE(Argument);
NEXT
vsn = scriba_LookupVariableByName(sbobj, varname);
besRETURN_LONG(scriba_SetVariable(sbobj, vsn, SBT_DOUBLE, 0, usrval, "", 0));
besEND
besFUNCTION(SB_SetStr)
DIM AS VARIABLE Argument;
DIM AS pSbData varobj;
DIM AS int sbobj, vsn, i;
DIM AS char PTR varname;
DIM AS char PTR usrval;
IF (besARGNR < 3) THEN_DO RETURN_FUNCTION(EX_ERROR_TOO_FEW_ARGUMENTS);
DEF_FOR (i = 1 TO i <= 3 STEP INCR i)
BEGIN_FOR
Argument = besARGUMENT(i);
besDEREFERENCE(Argument);
IF (i EQ 1) THEN_DO sbobj = LONGVALUE(Argument);
IF (i EQ 2) THEN_DO varname = STRINGVALUE(Argument);
IF (i EQ 3) THEN_DO usrval = STRINGVALUE(Argument);
NEXT
vsn = scriba_LookupVariableByName(sbobj, varname);
besRETURN_LONG
(scriba_SetVariable
(sbobj
, vsn
, SBT_STRING
, 0, 0, usrval
, strlen(usrval
)));besEND
besFUNCTION(SB_ResetVars)
DIM AS int sbobj;
besARGUMENTS("i")
AT sbobj
besARGEND
scriba_ResetVariables(sbobj);
besRETURNVALUE = NULL;
besEND