2022-03-04 22:28:32 +00:00
async function _QBCompiler ( ) {
2022-02-16 17:40:03 +00:00
// Option _Explicit
// $Console
// Only
const FILE = 1 ;
const TEXT = 2 ;
const False = 0 ;
const True = ! False ;
2022-06-10 20:35:28 +00:00
2022-03-04 22:28:32 +00:00
var lines = QB . initArray ( [ { l : 1 , u : 0 } ] , { line : 0 , text : '' } ) ; // CODELINE
var jsLines = QB . initArray ( [ { l : 1 , u : 0 } ] , { line : 0 , text : '' } ) ; // CODELINE
var methods = QB . initArray ( [ { l : 1 , u : 0 } ] , { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } ) ; // METHOD
var types = QB . initArray ( [ { l : 1 , u : 0 } ] , { line : 0 , name : '' , argc : 0 , args : '' } ) ; // QBTYPE
var typeVars = QB . initArray ( [ { l : 1 , u : 0 } ] , { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ) ; // VARIABLE
var globalVars = QB . initArray ( [ { l : 1 , u : 0 } ] , { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ) ; // VARIABLE
var localVars = QB . initArray ( [ { l : 1 , u : 0 } ] , { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ) ; // VARIABLE
var warnings = QB . initArray ( [ { l : 1 , u : 0 } ] , { line : 0 , text : '' } ) ; // CODELINE
2022-04-18 16:27:23 +00:00
var exportLines = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-04-30 03:24:36 +00:00
var exportConsts = QB . initArray ( [ { l : 1 , u : 0 } ] , { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ) ; // VARIABLE
2022-04-18 16:27:23 +00:00
var exportMethods = QB . initArray ( [ { l : 1 , u : 0 } ] , { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } ) ; // METHOD
2022-06-10 20:35:28 +00:00
var dataArray = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
var dataLabels = QB . initArray ( [ { l : 1 , u : 0 } ] , { text : '' , index : 0 } ) ; // LABEL
2022-04-18 16:27:23 +00:00
var modLevel = 0 ; // INTEGER
2022-02-16 17:40:03 +00:00
var currentMethod = '' ; // STRING
2022-04-18 16:27:23 +00:00
var currentModule = '' ; // STRING
2022-02-16 17:40:03 +00:00
var programMethods = 0 ; // INTEGER
2022-05-27 22:33:15 +00:00
var dataTicker = 0 ; // INTEGER
2022-06-03 12:22:06 +00:00
dataTicker = 1 ;
2022-03-04 22:28:32 +00:00
if ( QB . func _Command ( ) != "" ) {
2022-04-18 16:27:23 +00:00
await sub _QBToJS ( QB . func _Command ( ) , FILE , "" ) ;
2022-03-04 22:28:32 +00:00
await sub _PrintJS ( ) ;
2022-02-16 17:40:03 +00:00
QB . halt ( ) ; return ;
}
2022-04-18 16:27:23 +00:00
async function sub _QBToJS ( source /*STRING*/ , sourceType /*INTEGER*/ , moduleName /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
2022-04-18 16:27:23 +00:00
currentModule = moduleName ;
await sub _ResetDataStructures ( ) ;
if ( moduleName == "" ) {
QB . resizeArray ( jsLines , [ { l : 1 , u : 0 } ] , { line : 0 , text : '' } , false ) ; // CODELINE
}
2022-02-16 17:40:03 +00:00
if ( sourceType == FILE ) {
2022-03-30 22:37:36 +00:00
await sub _ReadLinesFromFile ( source ) ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
await sub _ReadLinesFromText ( source ) ;
2022-02-16 17:40:03 +00:00
}
2022-03-04 22:28:32 +00:00
await sub _FindMethods ( ) ;
2022-03-30 22:37:36 +00:00
programMethods = ( QB . func _UBound ( methods ) ) ;
2022-03-04 22:28:32 +00:00
await sub _InitGX ( ) ;
await sub _InitQBMethods ( ) ;
2022-02-16 17:40:03 +00:00
var selfConvert = 0 ; // INTEGER
var isGX = 0 ; // INTEGER
isGX = False ;
if ( sourceType == FILE ) {
2022-03-30 22:37:36 +00:00
selfConvert = ( await func _EndsWith ( source , "qb2js.bas" ) ) ;
2022-02-16 17:40:03 +00:00
}
if ( selfConvert ) {
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( 0 , "async function _QBCompiler() {" ) ;
2022-04-18 16:27:23 +00:00
} else if ( moduleName != "" ) {
await sub _AddJSLine ( 0 , "async function _" + moduleName + "() {" ) ;
2022-02-16 17:40:03 +00:00
} else if ( sourceType == FILE ) {
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( 0 , "async function init() {" ) ;
2022-02-16 17:40:03 +00:00
}
2022-04-18 16:27:23 +00:00
if ( ! selfConvert && moduleName == "" ) {
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( 0 , "QB.start();" ) ;
2022-02-16 17:40:03 +00:00
}
2022-04-18 16:27:23 +00:00
if ( ! selfConvert && moduleName == "" ) {
2022-03-04 22:28:32 +00:00
var mtest = { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } ; // METHOD
2022-03-30 22:37:36 +00:00
if ( ( await func _FindMethod ( "GXOnGameEvent" , mtest , "SUB" ) ) ) {
await sub _AddJSLine ( 0 , " await GX.registerGameEvents(sub_GXOnGameEvent);" ) ;
2022-02-16 17:40:03 +00:00
isGX = True ;
} else {
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( 0 , " await GX.registerGameEvents(function(e){});" ) ;
await sub _AddJSLine ( 0 , " QB.sub_Screen(0);" ) ;
2022-02-16 17:40:03 +00:00
}
}
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( 0 , "" ) ;
2022-06-10 20:35:28 +00:00
await sub _InitData ( ) ;
2022-03-30 22:37:36 +00:00
await sub _ConvertLines ( 1 , await func _MainEnd ( ) , "" ) ;
2022-04-18 16:27:23 +00:00
if ( ! selfConvert && ! isGX && moduleName == "" ) {
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( 0 , "QB.end();" ) ;
2022-02-16 17:40:03 +00:00
}
2022-03-04 22:28:32 +00:00
await sub _ConvertMethods ( ) ;
2022-02-16 17:40:03 +00:00
if ( selfConvert ) {
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( 0 , "this.compile = async function(src) {" ) ;
2022-04-18 16:27:23 +00:00
await sub _AddJSLine ( 0 , " await sub_QBToJS(src, TEXT, '');" ) ;
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( 0 , " var js = '';" ) ;
await sub _AddJSLine ( 0 , " for (var i=1; i<= QB.func_UBound(jsLines); i++) {" ) ;
await sub _AddJSLine ( 0 , " js += QB.arrayValue(jsLines, [i]).value.text + '\\n';" ) ;
await sub _AddJSLine ( 0 , " }" ) ;
await sub _AddJSLine ( 0 , " return js;" ) ;
await sub _AddJSLine ( 0 , "};" ) ;
await sub _AddJSLine ( 0 , "this.getWarnings = function() {" ) ;
await sub _AddJSLine ( 0 , " var w = [];" ) ;
await sub _AddJSLine ( 0 , " for (var i=1; i <= QB.func_UBound(warnings); i++) {" ) ;
await sub _AddJSLine ( 0 , " w.push({" ) ;
await sub _AddJSLine ( 0 , " line: QB.arrayValue(warnings, [i]).value.line," ) ;
await sub _AddJSLine ( 0 , " text: QB.arrayValue(warnings, [i]).value.text" ) ;
await sub _AddJSLine ( 0 , " });" ) ;
await sub _AddJSLine ( 0 , " }" ) ;
await sub _AddJSLine ( 0 , " return w;" ) ;
await sub _AddJSLine ( 0 , "};" ) ;
await sub _AddJSLine ( 0 , "return this;" ) ;
await sub _AddJSLine ( 0 , "}" ) ;
2022-04-18 16:27:23 +00:00
} else if ( moduleName != "" ) {
await sub _AddJSLine ( 0 , "return this;" ) ;
await sub _AddJSLine ( 0 , "}" ) ;
await sub _AddJSLine ( 0 , "const " + moduleName + " = await _" + moduleName + "();" ) ;
2022-02-16 17:40:03 +00:00
} else if ( sourceType == FILE ) {
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( 0 , "};" ) ;
2022-02-16 17:40:03 +00:00
}
}
2022-04-18 16:27:23 +00:00
async function sub _ResetDataStructures ( ) {
if ( QB . halted ( ) ) { return ; }
QB . resizeArray ( lines , [ { l : 1 , u : 0 } ] , { line : 0 , text : '' } , false ) ; // CODELINE
QB . resizeArray ( methods , [ { l : 1 , u : 0 } ] , { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } , false ) ; // METHOD
QB . resizeArray ( types , [ { l : 1 , u : 0 } ] , { line : 0 , name : '' , argc : 0 , args : '' } , false ) ; // QBTYPE
QB . resizeArray ( typeVars , [ { l : 1 , u : 0 } ] , { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } , false ) ; // VARIABLE
QB . resizeArray ( globalVars , [ { l : 1 , u : 0 } ] , { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } , false ) ; // VARIABLE
QB . resizeArray ( localVars , [ { l : 1 , u : 0 } ] , { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } , false ) ; // VARIABLE
QB . resizeArray ( warnings , [ { l : 1 , u : 0 } ] , { line : 0 , text : '' } , false ) ; // CODELINE
2022-06-10 20:35:28 +00:00
QB . resizeArray ( dataArray , [ { l : 1 , u : 0 } ] , '' , false ) ; // STRING
QB . resizeArray ( dataLabels , [ { l : 1 , u : 0 } ] , { text : '' , index : 0 } , false ) ; // LABEL
2022-04-18 16:27:23 +00:00
if ( modLevel == 0 ) {
QB . resizeArray ( exportMethods , [ { l : 1 , u : 0 } ] , { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } , false ) ; // METHOD
2022-04-30 03:24:36 +00:00
QB . resizeArray ( exportConsts , [ { l : 1 , u : 0 } ] , { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } , false ) ; // VARIABLE
2022-04-18 16:27:23 +00:00
}
currentMethod = "" ;
programMethods = 0 ;
}
2022-06-10 20:35:28 +00:00
async function sub _InitData ( ) {
if ( QB . halted ( ) ) { return ; }
if ( ( QB . func _UBound ( dataArray ) ) < 1 ) {
return ;
}
var ds = '' ; // STRING
ds = "[" + ( await func _Join ( dataArray , 1 , - 1 , "," ) ) + "]" ;
await sub _AddJSLine ( 0 , "QB.setData(" + ds + ");" ) ;
var i = 0 ; // INTEGER
for ( i = 1 ; i <= ( QB . func _UBound ( dataLabels ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
await sub _AddJSLine ( 0 , "QB.setDataLabel('" + QB . arrayValue ( dataLabels , [ i ] ) . value . text + "', " + ( QB . func _Str ( QB . arrayValue ( dataLabels , [ i ] ) . value . index ) ) + ");" ) ;
}
}
2022-02-16 17:40:03 +00:00
async function sub _PrintJS ( ) {
if ( QB . halted ( ) ) { return ; }
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _UBound ( jsLines ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
await QB . sub _Print ( [ QB . arrayValue ( jsLines , [ i ] ) . value . text ] ) ;
}
}
async function sub _ConvertLines ( firstLine /*INTEGER*/ , lastLine /*INTEGER*/ , functionName /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var typeMode = 0 ; // INTEGER
typeMode = False ;
var jsMode = 0 ; // INTEGER
jsMode = False ;
var i = 0 ; // INTEGER
var indent = 0 ; // INTEGER
var tempIndent = 0 ; // INTEGER
2022-03-04 22:28:32 +00:00
var m = { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } ; // METHOD
2022-02-16 17:40:03 +00:00
var totalIndent = 0 ; // INTEGER
totalIndent = 1 ;
var caseCount = 0 ; // INTEGER
2022-03-04 22:28:32 +00:00
var loopMode = QB . initArray ( [ { l : 1 , u : 100 } ] , 0 ) ; // INTEGER
2022-02-16 17:40:03 +00:00
var loopLevel = 0 ; // INTEGER
var caseVar = '' ; // STRING
var currType = 0 ; // INTEGER
for ( i = firstLine ; i <= lastLine ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
indent = 0 ;
tempIndent = 0 ;
var l = '' ; // STRING
2022-03-30 22:37:36 +00:00
l = ( QB . func _ _Trim ( QB . arrayValue ( lines , [ i ] ) . value . text ) ) ;
2022-03-04 22:28:32 +00:00
var parts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-02-16 17:40:03 +00:00
var c = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
c = ( await func _SLSplit ( l , parts , True ) ) ;
2022-02-16 17:40:03 +00:00
var js = '' ; // STRING
js = "" ;
var first = '' ; // STRING
2022-03-30 22:37:36 +00:00
first = ( QB . func _UCase ( QB . arrayValue ( parts , [ 1 ] ) . value ) ) ;
2022-02-16 17:40:03 +00:00
if ( jsMode == True ) {
if ( first == "$END" ) {
jsMode = False ;
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( 0 , "//-------- END JS native code block --------" ) ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( i , QB . arrayValue ( lines , [ i ] ) . value . text ) ;
2022-02-16 17:40:03 +00:00
}
} else if ( typeMode == True ) {
if ( first == "END" ) {
var second = '' ; // STRING
2022-03-30 22:37:36 +00:00
second = ( QB . func _UCase ( QB . arrayValue ( parts , [ 2 ] ) . value ) ) ;
2022-02-16 17:40:03 +00:00
if ( second == "TYPE" ) {
typeMode = False ;
}
} else {
var tvar = { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ; // VARIABLE
tvar . typeId = currType ;
tvar . name = QB . arrayValue ( parts , [ 1 ] ) . value ;
2022-03-30 22:37:36 +00:00
tvar . type = ( QB . func _UCase ( QB . arrayValue ( parts , [ 3 ] ) . value ) ) ;
2022-02-16 17:40:03 +00:00
if ( tvar . type == "_UNSIGNED" ) {
2022-03-30 22:37:36 +00:00
tvar . type = tvar . type + " " + ( QB . func _UCase ( QB . arrayValue ( parts , [ 4 ] ) . value ) ) ;
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
await sub _AddVariable ( tvar , typeVars ) ;
2022-02-16 17:40:03 +00:00
}
} else {
if ( first == "CONST" ) {
2022-03-30 22:37:36 +00:00
js = "const " + QB . arrayValue ( parts , [ 2 ] ) . value + " = " + ( await func _ConvertExpression ( ( await func _Join ( parts , 4 , - 1 , " " ) ) ) ) + ";" ;
await sub _AddConst ( QB . arrayValue ( parts , [ 2 ] ) . value ) ;
2022-02-16 17:40:03 +00:00
} else if ( first == "DIM" || first == "REDIM" || first == "STATIC" ) {
2022-03-30 22:37:36 +00:00
js = ( await func _DeclareVar ( parts ) ) ;
2022-02-16 17:40:03 +00:00
} else if ( first == "SELECT" ) {
2022-03-04 22:28:32 +00:00
caseVar = await func _GenJSVar ( ) ;
2022-05-02 21:00:21 +00:00
js = "var " + caseVar + " = " + ( await func _ConvertExpression ( ( await func _Join ( parts , 3 , - 1 , " " ) ) ) ) + ";" + await func _CRLF ( ) ;
2022-02-16 17:40:03 +00:00
js = js + "switch (" + caseVar + ") {" ;
indent = 1 ;
caseCount = 0 ;
} else if ( first == "CASE" ) {
if ( caseCount > 0 ) {
2022-05-02 21:00:21 +00:00
js = "break;" + await func _LF ( ) ;
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UCase ( QB . arrayValue ( parts , [ 2 ] ) . value ) ) == "ELSE" ) {
2022-02-16 17:40:03 +00:00
js = js + "default:" ;
2022-03-30 22:37:36 +00:00
} else if ( ( QB . func _UCase ( QB . arrayValue ( parts , [ 2 ] ) . value ) ) == "IS" ) {
js = js + "case " + caseVar + " " + ( await func _ConvertExpression ( ( await func _Join ( parts , 3 , - 1 , " " ) ) ) ) + ":" ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-04 22:28:32 +00:00
var caseParts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-02-16 17:40:03 +00:00
var cscount = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
cscount = ( await func _ListSplit ( ( await func _Join ( parts , 2 , - 1 , " " ) ) , caseParts ) ) ;
2022-02-16 17:40:03 +00:00
var ci = 0 ; // INTEGER
for ( ci = 1 ; ci <= cscount ; ci = ci + 1 ) { if ( QB . halted ( ) ) { return ; }
if ( ci > 1 ) {
2022-05-02 21:00:21 +00:00
js = js + await func _CRLF ( ) ;
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
js = js + "case " + ( await func _ConvertExpression ( QB . arrayValue ( caseParts , [ ci ] ) . value ) ) + ":" ;
2022-02-16 17:40:03 +00:00
}
}
caseCount = caseCount + 1 ;
} else if ( first == "FOR" ) {
var fstep = '' ; // STRING
fstep = "1" ;
var eqIdx = 0 ; // INTEGER
var toIdx = 0 ; // INTEGER
var stepIdx = 0 ; // INTEGER
var fcond = '' ; // STRING
fcond = " <= " ;
stepIdx = 0 ;
var fi = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( fi = 2 ; fi <= ( QB . func _UBound ( parts ) ) ; fi = fi + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
var fword = '' ; // STRING
2022-03-30 22:37:36 +00:00
fword = ( QB . func _UCase ( QB . arrayValue ( parts , [ fi ] ) . value ) ) ;
2022-02-16 17:40:03 +00:00
if ( fword == "=" ) {
eqIdx = fi ;
} else if ( fword == "TO" ) {
toIdx = fi ;
} else if ( fword == "STEP" ) {
stepIdx = fi ;
2022-03-30 22:37:36 +00:00
fstep = ( await func _ConvertExpression ( ( await func _Join ( parts , fi + 1 , - 1 , " " ) ) ) ) ;
2022-02-16 17:40:03 +00:00
}
}
var fvar = '' ; // STRING
2022-03-30 22:37:36 +00:00
fvar = ( await func _ConvertExpression ( ( await func _Join ( parts , 2 , eqIdx - 1 , " " ) ) ) ) ;
2022-02-16 17:40:03 +00:00
var sval = '' ; // STRING
2022-03-30 22:37:36 +00:00
sval = ( await func _ConvertExpression ( ( await func _Join ( parts , eqIdx + 1 , toIdx - 1 , " " ) ) ) ) ;
2022-02-16 17:40:03 +00:00
var uval = '' ; // STRING
2022-03-30 22:37:36 +00:00
uval = ( await func _ConvertExpression ( ( await func _Join ( parts , toIdx + 1 , stepIdx - 1 , " " ) ) ) ) ;
if ( ( QB . func _Left ( ( QB . func _ _Trim ( fstep ) ) , 1 ) ) == "-" ) {
2022-02-16 17:40:03 +00:00
fcond = " >= " ;
}
js = "for (" + fvar + "=" + sval + "; " + fvar + fcond + uval + "; " + fvar + "=" + fvar + " + " + fstep + ") {" ;
js = js + " if (QB.halted()) { return; }" ;
indent = 1 ;
} else if ( first == "IF" ) {
var thenIndex = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( thenIndex = 2 ; thenIndex <= ( QB . func _UBound ( parts ) ) ; thenIndex = thenIndex + 1 ) { if ( QB . halted ( ) ) { return ; }
if ( ( QB . func _UCase ( QB . arrayValue ( parts , [ thenIndex ] ) . value ) ) == "THEN" ) {
2022-02-16 17:40:03 +00:00
break ;
}
}
2022-03-30 22:37:36 +00:00
js = "if (" + ( await func _ConvertExpression ( ( await func _Join ( parts , 2 , thenIndex - 1 , " " ) ) ) ) + ") {" ;
2022-02-16 17:40:03 +00:00
indent = 1 ;
} else if ( first == "ELSEIF" ) {
2022-03-30 22:37:36 +00:00
js = "} else if (" + ( await func _ConvertExpression ( ( await func _Join ( parts , 2 , ( QB . func _UBound ( parts ) ) - 1 , " " ) ) ) ) + ") {" ;
2022-02-16 17:40:03 +00:00
tempIndent = - 1 ;
} else if ( first == "ELSE" ) {
js = "} else {" ;
tempIndent = - 1 ;
} else if ( first == "NEXT" ) {
js = js + "}" ;
indent = - 1 ;
} else if ( first == "END" ) {
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UBound ( parts ) ) == 1 ) {
2022-02-16 17:40:03 +00:00
js = "QB.halt(); return;" ;
} else {
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UCase ( QB . arrayValue ( parts , [ 2 ] ) . value ) ) == "SELECT" ) {
2022-02-16 17:40:03 +00:00
js = "break;" ;
}
js = js + "}" ;
indent = - 1 ;
}
} else if ( first == "SYSTEM" ) {
js = "QB.halt(); return;" ;
} else if ( first == "$IF" ) {
2022-04-18 16:27:23 +00:00
if ( ( QB . func _UBound ( parts ) ) > 1 ) {
2022-04-26 03:56:54 +00:00
if ( ( QB . func _UCase ( QB . arrayValue ( parts , [ 2 ] ) . value ) ) == "JAVASCRIPT" ) {
2022-02-16 17:40:03 +00:00
jsMode = True ;
js = "//-------- BEGIN JS native code block --------" ;
}
}
} else if ( first == "DO" ) {
loopLevel = loopLevel + 1 ;
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UBound ( parts ) ) > 1 ) {
if ( ( QB . func _UCase ( QB . arrayValue ( parts , [ 2 ] ) . value ) ) == "WHILE" ) {
js = "while (" + ( await func _ConvertExpression ( ( await func _Join ( parts , 3 , - 1 , " " ) ) ) ) + ") {" ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
js = "while (!(" + ( await func _ConvertExpression ( ( await func _Join ( parts , 3 , - 1 , " " ) ) ) ) + ")) {" ;
2022-02-16 17:40:03 +00:00
}
QB . arrayValue ( loopMode , [ loopLevel ] ) . value = 1 ;
} else {
js = "do {" ;
QB . arrayValue ( loopMode , [ loopLevel ] ) . value = 2 ;
}
indent = 1 ;
js = js + " if (QB.halted()) { return; }" ;
} else if ( first == "WHILE" ) {
loopLevel = loopLevel + 1 ;
2022-03-30 22:37:36 +00:00
js = "while (" + ( await func _ConvertExpression ( ( await func _Join ( parts , 2 , - 1 , " " ) ) ) ) + ") {" ;
2022-02-16 17:40:03 +00:00
indent = 1 ;
js = js + " if (QB.halted()) { return; }" ;
} else if ( first == "WEND" ) {
js = "}" ;
loopLevel = loopLevel - 1 ;
indent = - 1 ;
} else if ( first == "LOOP" ) {
if ( QB . arrayValue ( loopMode , [ loopLevel ] ) . value == 1 ) {
js = "}" ;
} else {
js = "} while ((" ;
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UBound ( parts ) ) < 2 ) {
2022-02-16 17:40:03 +00:00
js = js + "1));" ;
} else {
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UCase ( QB . arrayValue ( parts , [ 2 ] ) . value ) ) == "UNTIL" ) {
2022-02-16 17:40:03 +00:00
js = "} while (!(" ;
}
2022-03-30 22:37:36 +00:00
js = js + ( await func _ConvertExpression ( ( await func _Join ( parts , 3 , ( QB . func _UBound ( parts ) ) , " " ) ) ) ) + "))" ;
2022-02-16 17:40:03 +00:00
}
}
loopLevel = loopLevel - 1 ;
indent = - 1 ;
} else if ( first == "_CONTINUE" ) {
js = "continue;" ;
2022-03-30 22:37:36 +00:00
} else if ( ( QB . func _UCase ( l ) ) == "EXIT FUNCTION" ) {
2022-02-16 17:40:03 +00:00
js = "return " + functionName + ";" ;
2022-03-30 22:37:36 +00:00
} else if ( ( QB . func _UCase ( l ) ) == "EXIT SUB" ) {
2022-02-16 17:40:03 +00:00
js = "return;" ;
} else if ( first == "EXIT" ) {
js = "break;" ;
} else if ( first == "TYPE" ) {
typeMode = True ;
var qbtype = { line : 0 , name : '' , argc : 0 , args : '' } ; // QBTYPE
qbtype . line = i ;
2022-03-30 22:37:36 +00:00
qbtype . name = ( QB . func _UCase ( QB . arrayValue ( parts , [ 2 ] ) . value ) ) ;
await sub _AddType ( qbtype ) ;
currType = ( QB . func _UBound ( types ) ) ;
2022-04-18 16:27:23 +00:00
} else if ( first == "EXPORT" ) {
if ( c > 1 ) {
2022-04-26 03:56:54 +00:00
var exparts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
var excount = 0 ; // INTEGER
excount = ( await func _ListSplit ( ( await func _Join ( parts , 2 , - 1 , " " ) ) , exparts ) ) ;
var exi = 0 ; // INTEGER
for ( exi = 1 ; exi <= excount ; exi = exi + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-04-30 03:24:36 +00:00
await sub _ParseExport ( QB . arrayValue ( exparts , [ exi ] ) . value , i ) ;
2022-04-18 16:27:23 +00:00
}
continue ;
} else {
}
2022-02-16 17:40:03 +00:00
} else if ( first == "CALL" ) {
var subline = '' ; // STRING
2022-03-30 22:37:36 +00:00
subline = ( QB . func _ _Trim ( ( await func _Join ( parts , 2 , - 1 , " " ) ) ) ) ;
2022-02-16 17:40:03 +00:00
var subend = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
subend = ( QB . func _InStr ( subline , "(" ) ) ;
2022-02-16 17:40:03 +00:00
var subname = '' ; // STRING
if ( subend == 0 ) {
subname = subline ;
} else {
2022-03-30 22:37:36 +00:00
subname = ( QB . func _Left ( subline , subend - 1 ) ) ;
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
if ( ( await func _FindMethod ( subname , m , "SUB" ) ) ) {
2022-02-16 17:40:03 +00:00
var subargs = '' ; // STRING
2022-03-30 22:37:36 +00:00
if ( subname == subline ) {
subargs = "" ;
} else {
subargs = ( QB . func _Mid ( subline , ( QB . func _Len ( subname ) ) + 2 , ( QB . func _Len ( subline ) ) - ( QB . func _Len ( subname ) ) - 2 ) ) ;
}
js = ( await func _ConvertSub ( m , subargs ) ) ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
await sub _AddWarning ( i , "Missing Sub [" + subname + "], ignoring Call command" ) ;
2022-02-16 17:40:03 +00:00
}
} else if ( c > 2 ) {
var assignment = 0 ; // INTEGER
assignment = 0 ;
var j = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( j = 1 ; j <= ( QB . func _UBound ( parts ) ) ; j = j + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
if ( QB . arrayValue ( parts , [ j ] ) . value == "=" ) {
assignment = j ;
break ;
}
}
if ( assignment > 0 ) {
2022-03-30 22:37:36 +00:00
js = ( await func _RemoveSuffix ( ( await func _ConvertExpression ( ( await func _Join ( parts , 1 , assignment - 1 , " " ) ) ) ) ) ) + " = " + ( await func _ConvertExpression ( ( await func _Join ( parts , assignment + 1 , - 1 , " " ) ) ) ) + ";" ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
if ( ( await func _FindMethod ( QB . arrayValue ( parts , [ 1 ] ) . value , m , "SUB" ) ) ) {
js = ( await func _ConvertSub ( m , ( await func _Join ( parts , 2 , - 1 , " " ) ) ) ) ;
2022-02-16 17:40:03 +00:00
} else {
js = "// " + l ;
2022-03-30 22:37:36 +00:00
await sub _AddWarning ( i , "Missing/unsupported sub or syntax error" ) ;
2022-02-16 17:40:03 +00:00
}
}
} else {
2022-03-30 22:37:36 +00:00
if ( ( await func _FindMethod ( QB . arrayValue ( parts , [ 1 ] ) . value , m , "SUB" ) ) ) {
js = ( await func _ConvertSub ( m , ( await func _Join ( parts , 2 , - 1 , " " ) ) ) ) ;
2022-02-16 17:40:03 +00:00
} else {
js = "// " + l ;
2022-03-30 22:37:36 +00:00
await sub _AddWarning ( i , "Missing/unsupported sub or syntax error" ) ;
2022-02-16 17:40:03 +00:00
}
}
if ( ( indent < 0 ) ) {
totalIndent = totalIndent + indent ;
}
2022-05-02 21:00:21 +00:00
await sub _AddJSLine ( i , ( await func _LPad ( "" , " " , ( totalIndent + tempIndent ) * 3 ) ) + js ) ;
2022-02-16 17:40:03 +00:00
if ( ( indent > 0 ) ) {
totalIndent = totalIndent + indent ;
}
}
}
}
2022-04-30 03:24:36 +00:00
async function sub _ParseExport ( s /*STRING*/ , lineIndex /*INTEGER*/ ) {
2022-04-26 03:56:54 +00:00
if ( QB . halted ( ) ) { return ; }
var exportedItem = '' ; // STRING
var ef = { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } ; // METHOD
var es = { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } ; // METHOD
var ev = { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ; // VARIABLE
var exportName = '' ; // STRING
var parts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-04-30 03:24:36 +00:00
var found = 0 ; // INTEGER
found = False ;
var c = 0 ; // INTEGER
2022-04-26 03:56:54 +00:00
c = ( await func _SLSplit ( s , parts , False ) ) ;
if ( ( await func _FindMethod ( QB . arrayValue ( parts , [ 1 ] ) . value , es , "SUB" ) ) ) {
if ( c > 2 ) {
exportName = QB . arrayValue ( parts , [ 3 ] ) . value ;
} else {
exportName = QB . arrayValue ( parts , [ 1 ] ) . value ;
}
exportedItem = es . jsname ;
es . name = exportName ;
await sub _AddExportMethod ( es , currentModule + "." , True ) ;
exportName = "sub_" + exportName ;
await sub _RegisterExport ( exportName , exportedItem ) ;
2022-04-30 03:24:36 +00:00
found = True ;
2022-04-26 03:56:54 +00:00
}
if ( ( await func _FindMethod ( QB . arrayValue ( parts , [ 1 ] ) . value , ef , "FUNCTION" ) ) ) {
if ( c > 2 ) {
exportName = QB . arrayValue ( parts , [ 3 ] ) . value ;
} else {
exportName = QB . arrayValue ( parts , [ 1 ] ) . value ;
}
exportedItem = ef . jsname ;
ef . name = exportName ;
await sub _AddExportMethod ( ef , currentModule + "." , True ) ;
exportName = "func_" + exportName ;
await sub _RegisterExport ( exportName , exportedItem ) ;
2022-04-30 03:24:36 +00:00
found = True ;
}
if ( ( await func _FindVariable ( QB . arrayValue ( parts , [ 1 ] ) . value , ev , False ) ) ) {
if ( ev . isConst == True ) {
if ( c > 2 ) {
exportName = QB . arrayValue ( parts , [ 3 ] ) . value ;
} else {
exportName = QB . arrayValue ( parts , [ 1 ] ) . value ;
}
exportedItem = ev . jsname ;
ev . name = exportName ;
exportedItem = ev . jsname ;
if ( exportName == "" ) {
exportName = QB . arrayValue ( parts , [ 1 ] ) . value ;
}
ev . name = exportName ;
await sub _AddExportConst ( currentModule + "." + exportName ) ;
await sub _RegisterExport ( exportName , exportedItem ) ;
found = True ;
}
}
if ( ! found ) {
await sub _AddWarning ( lineIndex , "Invalid export [" + QB . arrayValue ( parts , [ 1 ] ) . value + "]. Exported items must be a Sub, Function or Const in the current module." ) ;
2022-04-26 03:56:54 +00:00
}
}
async function sub _RegisterExport ( exportName /*STRING*/ , exportedItem /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var esize = 0 ; // SINGLE
esize = ( QB . func _UBound ( exportLines ) ) + 1 ;
QB . resizeArray ( exportLines , [ { l : 1 , u : esize } ] , '' , true ) ; // STRING
QB . arrayValue ( exportLines , [ esize ] ) . value = "this." + exportName + " = " + exportedItem + ";" ;
}
2022-03-04 22:28:32 +00:00
async function func _ConvertSub ( m /*METHOD*/ , args /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var ConvertSub = null ;
var js = '' ; // STRING
if ( m . name == "Line" ) {
2022-03-04 22:28:32 +00:00
var parts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-02-16 17:40:03 +00:00
var plen = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
plen = ( await func _SLSplit ( args , parts , False ) ) ;
2022-02-16 17:40:03 +00:00
if ( plen > 0 ) {
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UCase ( QB . arrayValue ( parts , [ 1 ] ) . value ) ) == "INPUT" ) {
2022-02-16 17:40:03 +00:00
m . name = "Line Input" ;
2022-03-04 22:28:32 +00:00
m . jsname = "QB.sub_LineInput" ;
2022-03-30 22:37:36 +00:00
args = ( await func _Join ( parts , 2 , - 1 , " " ) ) ;
2022-02-16 17:40:03 +00:00
}
}
}
if ( m . name == "Line" ) {
2022-03-30 22:37:36 +00:00
js = ( await func _CallMethod ( m ) ) + "(" + ( await func _ConvertLine ( args ) ) + ");" ;
2022-05-29 06:06:31 +00:00
} else if ( m . name == "Cls" ) {
js = ( await func _CallMethod ( m ) ) + "(" + ( await func _ConvertCls ( args ) ) + ");" ;
} else if ( m . name == "Input" || m . name == "Line Input" ) {
js = ( await func _ConvertInput ( m , args ) ) ;
2022-04-26 18:34:12 +00:00
} else if ( m . name == "PSet" || m . name == "Circle" || m . name == "PReset" || m . name == "Paint" ) {
2022-03-30 22:37:36 +00:00
js = ( await func _CallMethod ( m ) ) + "(" + ( await func _ConvertPSet ( args ) ) + ");" ;
2022-02-16 17:40:03 +00:00
} else if ( m . name == "Print" ) {
2022-03-30 22:37:36 +00:00
js = ( await func _CallMethod ( m ) ) + "(" + ( await func _ConvertPrint ( args ) ) + ");" ;
2022-05-29 06:06:31 +00:00
} else if ( m . name == "Randomize" ) {
js = ( await func _ConvertRandomize ( m , args ) ) ;
2022-05-21 07:05:30 +00:00
} else if ( m . name == "Read" ) {
js = ( await func _ConvertRead ( m , args ) ) ;
2022-06-10 20:35:28 +00:00
} else if ( m . name == "Restore" ) {
js = ( await func _CallMethod ( m ) ) + "('" + ( QB . func _UCase ( args ) ) + "');" ;
2022-02-16 17:40:03 +00:00
} else if ( m . name == "Swap" ) {
2022-03-30 22:37:36 +00:00
js = ( await func _ConvertSwap ( m , args ) ) ;
2022-05-04 00:38:42 +00:00
} else if ( m . name == "Window" ) {
js = ( await func _CallMethod ( m ) ) + "(" + ( await func _ConvertWindow ( args ) ) + ");" ;
2022-05-29 06:06:31 +00:00
} else if ( m . name == "_PrintString" ) {
js = ( await func _CallMethod ( m ) ) + "(" + ( await func _ConvertPrintString ( args ) ) + ");" ;
} else if ( m . name == "_PutImage" ) {
js = ( await func _CallMethod ( m ) ) + "(" + ( await func _ConvertPutImage ( args ) ) + ");" ;
2022-04-28 19:30:25 +00:00
} else if ( m . name == "_FullScreen" ) {
js = ( await func _CallMethod ( m ) ) + "(" + ( await func _ConvertFullScreen ( args ) ) + ");" ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
js = ( await func _CallMethod ( m ) ) + "(" + ( await func _ConvertMethodParams ( args ) ) + ");" ;
2022-02-16 17:40:03 +00:00
}
ConvertSub = js ;
return ConvertSub ;
}
2022-04-28 19:30:25 +00:00
async function func _ConvertFullScreen ( args /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var ConvertFullScreen = null ;
var parts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
var argc = 0 ; // INTEGER
var mode = '' ; // STRING
mode = "QB.STRETCH" ;
var doSmooth = '' ; // STRING
doSmooth = "false" ;
argc = ( await func _ListSplit ( args , parts ) ) ;
if ( argc > 0 ) {
var arg = '' ; // STRING
arg = ( QB . func _UCase ( QB . arrayValue ( parts , [ 1 ] ) . value ) ) ;
if ( arg == "_OFF" ) {
mode = "QB.OFF" ;
} else if ( arg == "_STRETCH" ) {
mode = "QB.STRETCH" ;
} else if ( arg == "_SQUAREPIXELS" ) {
mode = "QB.SQUAREPIXELS" ;
}
}
if ( argc > 1 ) {
if ( ( QB . func _UCase ( QB . arrayValue ( parts , [ 2 ] ) . value ) ) == "_SMOOTH" ) {
doSmooth = "true" ;
}
}
ConvertFullScreen = mode + ", " + doSmooth ;
return ConvertFullScreen ;
}
2022-03-04 22:28:32 +00:00
async function func _ConvertLine ( args /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var ConvertLine = null ;
var firstParam = '' ; // STRING
var theRest = '' ; // STRING
var idx = 0 ; // INTEGER
var sstep = '' ; // STRING
var estep = '' ; // STRING
sstep = "false" ;
estep = "false" ;
2022-03-30 22:37:36 +00:00
idx = ( await func _FindParamChar ( args , "," ) ) ;
2022-02-16 17:40:03 +00:00
if ( idx == - 1 ) {
firstParam = args ;
theRest = "" ;
} else {
2022-03-30 22:37:36 +00:00
firstParam = ( QB . func _Left ( args , idx - 1 ) ) ;
theRest = ( QB . func _Right ( args , ( QB . func _Len ( args ) ) - idx ) ) ;
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
idx = ( await func _FindParamChar ( firstParam , "-" ) ) ;
2022-02-16 17:40:03 +00:00
var startCord = '' ; // STRING
var endCord = '' ; // STRING
if ( idx == - 1 ) {
endCord = firstParam ;
} else {
2022-03-30 22:37:36 +00:00
startCord = ( QB . func _Left ( firstParam , idx - 1 ) ) ;
endCord = ( QB . func _Right ( firstParam , ( QB . func _Len ( firstParam ) ) - idx ) ) ;
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UCase ( ( QB . func _ _Trim ( ( QB . func _Left ( startCord , 4 ) ) ) ) ) ) == "STEP" ) {
2022-02-16 17:40:03 +00:00
sstep = "true" ;
}
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UCase ( ( QB . func _ _Trim ( ( QB . func _Left ( endCord , 4 ) ) ) ) ) ) == "STEP" ) {
2022-02-16 17:40:03 +00:00
estep = "true" ;
}
2022-03-30 22:37:36 +00:00
idx = ( QB . func _InStr ( startCord , "(" ) ) ;
startCord = ( QB . func _Right ( startCord , ( QB . func _Len ( startCord ) ) - idx ) ) ;
idx = ( QB . func _ _InStrRev ( startCord , ")" ) ) ;
startCord = ( QB . func _Left ( startCord , idx - 1 ) ) ;
startCord = ( await func _ConvertExpression ( startCord ) ) ;
if ( ( ( QB . func _ _Trim ( startCord ) ) == "" ) ) {
2022-02-16 17:40:03 +00:00
startCord = "undefined, undefined" ;
}
2022-03-30 22:37:36 +00:00
idx = ( QB . func _InStr ( endCord , "(" ) ) ;
endCord = ( QB . func _Right ( endCord , ( QB . func _Len ( endCord ) ) - idx ) ) ;
idx = ( QB . func _ _InStrRev ( endCord , ")" ) ) ;
endCord = ( QB . func _Left ( endCord , idx - 1 ) ) ;
endCord = ( await func _ConvertExpression ( endCord ) ) ;
theRest = ( await func _ConvertExpression ( theRest ) ) ;
2022-05-02 21:00:21 +00:00
theRest = ( await func _Replace ( theRest , " BF" , " " + ( QB . func _Chr ( 34 ) ) + "BF" + ( QB . func _Chr ( 34 ) ) ) ) ;
theRest = ( await func _Replace ( theRest , " bf" , " " + ( QB . func _Chr ( 34 ) ) + "BF" + ( QB . func _Chr ( 34 ) ) ) ) ;
theRest = ( await func _Replace ( theRest , " bF" , " " + ( QB . func _Chr ( 34 ) ) + "BF" + ( QB . func _Chr ( 34 ) ) ) ) ;
theRest = ( await func _Replace ( theRest , " Bf" , " " + ( QB . func _Chr ( 34 ) ) + "BF" + ( QB . func _Chr ( 34 ) ) ) ) ;
theRest = ( await func _Replace ( theRest , " B" , " " + ( QB . func _Chr ( 34 ) ) + "B" + ( QB . func _Chr ( 34 ) ) ) ) ;
theRest = ( await func _Replace ( theRest , " b" , " " + ( QB . func _Chr ( 34 ) ) + "B" + ( QB . func _Chr ( 34 ) ) ) ) ;
2022-06-01 07:25:14 +00:00
theRest = ( await func _Replace ( theRest , " T" , " " + ( QB . func _Chr ( 34 ) ) + "T" + ( QB . func _Chr ( 34 ) ) ) ) ;
theRest = ( await func _Replace ( theRest , " t" , " " + ( QB . func _Chr ( 34 ) ) + "T" + ( QB . func _Chr ( 34 ) ) ) ) ;
2022-02-16 17:40:03 +00:00
ConvertLine = sstep + ", " + startCord + ", " + estep + ", " + endCord + ", " + theRest ;
return ConvertLine ;
}
2022-03-04 22:28:32 +00:00
async function func _ConvertPutImage ( args /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var ConvertPutImage = null ;
var argc = 0 ; // INTEGER
var parts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
var startCoord = '' ; // STRING
var sourceImage = '' ; // STRING
var destImage = '' ; // STRING
var destCoord = '' ; // STRING
var doSmooth = '' ; // STRING
2022-03-30 22:37:36 +00:00
startCoord = ( await func _ConvertCoordParam ( "" , True ) ) ;
destCoord = ( await func _ConvertCoordParam ( "" , True ) ) ;
2022-03-04 22:28:32 +00:00
sourceImage = "undefined" ;
destImage = "undefined" ;
doSmooth = "false" ;
2022-03-30 22:37:36 +00:00
if ( ( await func _EndsWith ( ( QB . func _ _Trim ( ( QB . func _UCase ( args ) ) ) ) , "_SMOOTH" ) ) ) {
2022-03-04 22:28:32 +00:00
doSmooth = "true" ;
2022-03-30 22:37:36 +00:00
args = ( QB . func _Left ( ( QB . func _ _Trim ( args ) ) , ( QB . func _Len ( ( QB . func _ _Trim ( args ) ) ) ) - 7 ) ) ;
2022-03-04 22:28:32 +00:00
}
2022-03-30 22:37:36 +00:00
argc = ( await func _ListSplit ( args , parts ) ) ;
2022-03-04 22:28:32 +00:00
if ( argc >= 1 ) {
2022-03-30 22:37:36 +00:00
startCoord = ( await func _ConvertCoordParam ( QB . arrayValue ( parts , [ 1 ] ) . value , True ) ) ;
2022-03-04 22:28:32 +00:00
}
if ( argc >= 2 ) {
2022-03-30 22:37:36 +00:00
sourceImage = ( await func _ConvertExpression ( QB . arrayValue ( parts , [ 2 ] ) . value ) ) ;
2022-03-04 22:28:32 +00:00
}
if ( argc >= 3 ) {
2022-03-30 22:37:36 +00:00
if ( ( QB . func _ _Trim ( QB . arrayValue ( parts , [ 3 ] ) . value ) ) != "" ) {
destImage = ( await func _ConvertExpression ( QB . arrayValue ( parts , [ 3 ] ) . value ) ) ;
2022-03-04 22:28:32 +00:00
}
}
if ( argc >= 4 ) {
2022-03-30 22:37:36 +00:00
destCoord = ( await func _ConvertCoordParam ( QB . arrayValue ( parts , [ 4 ] ) . value , True ) ) ;
2022-03-04 22:28:32 +00:00
}
if ( argc >= 5 ) {
2022-03-30 22:37:36 +00:00
if ( ( QB . func _ _Trim ( ( QB . func _UCase ( QB . arrayValue ( parts , [ 5 ] ) . value ) ) ) ) == "_SMOOTH" ) {
2022-03-04 22:28:32 +00:00
doSmooth = "true" ;
}
}
ConvertPutImage = startCoord + ", " + sourceImage + ", " + destImage + ", " + destCoord + ", " + doSmooth ;
return ConvertPutImage ;
}
2022-05-04 00:38:42 +00:00
async function func _ConvertWindow ( args /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var ConvertWindow = null ;
var invertFlag = '' ; // STRING
var firstParam = '' ; // STRING
var theRest = '' ; // STRING
var idx = 0 ; // INTEGER
var sstep = '' ; // STRING
var estep = '' ; // STRING
invertFlag = "false" ;
var kwd = '' ; // STRING
kwd = "SCREEN" ;
if ( ( ( QB . func _UCase ( ( QB . func _Left ( args , ( QB . func _Len ( kwd ) ) ) ) ) ) == kwd ) ) {
args = ( QB . func _Right ( args , ( QB . func _Len ( args ) ) - ( QB . func _Len ( kwd ) ) ) ) ;
invertFlag = "true" ;
}
args = ( QB . func _ _Trim ( args ) ) ;
sstep = "false" ;
estep = "false" ;
idx = ( await func _FindParamChar ( args , "," ) ) ;
if ( idx == - 1 ) {
firstParam = args ;
theRest = "" ;
} else {
firstParam = ( QB . func _Left ( args , idx - 1 ) ) ;
theRest = ( QB . func _Right ( args , ( QB . func _Len ( args ) ) - idx ) ) ;
}
idx = ( await func _FindParamChar ( firstParam , "-" ) ) ;
var startCord = '' ; // STRING
var endCord = '' ; // STRING
if ( idx == - 1 ) {
endCord = firstParam ;
} else {
startCord = ( QB . func _Left ( firstParam , idx - 1 ) ) ;
endCord = ( QB . func _Right ( firstParam , ( QB . func _Len ( firstParam ) ) - idx ) ) ;
}
idx = ( QB . func _InStr ( startCord , "(" ) ) ;
startCord = ( QB . func _Right ( startCord , ( QB . func _Len ( startCord ) ) - idx ) ) ;
idx = ( QB . func _ _InStrRev ( startCord , ")" ) ) ;
startCord = ( QB . func _Left ( startCord , idx - 1 ) ) ;
startCord = ( await func _ConvertExpression ( startCord ) ) ;
if ( ( ( QB . func _ _Trim ( startCord ) ) == "" ) ) {
startCord = "undefined, undefined" ;
}
idx = ( QB . func _InStr ( endCord , "(" ) ) ;
endCord = ( QB . func _Right ( endCord , ( QB . func _Len ( endCord ) ) - idx ) ) ;
idx = ( QB . func _ _InStrRev ( endCord , ")" ) ) ;
endCord = ( QB . func _Left ( endCord , idx - 1 ) ) ;
endCord = ( await func _ConvertExpression ( endCord ) ) ;
ConvertWindow = invertFlag + ", " + startCord + ", " + endCord ;
return ConvertWindow ;
}
2022-03-15 14:42:33 +00:00
async function func _ConvertCls ( args /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var ConvertCls = null ;
var argc = 0 ; // INTEGER
var parts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-03-30 22:37:36 +00:00
argc = ( await func _ListSplit ( args , parts ) ) ;
2022-03-15 14:42:33 +00:00
var method = '' ; // STRING
var bgcolor = '' ; // STRING
method = "undefined" ;
bgcolor = "undefined" ;
if ( argc >= 1 ) {
2022-03-30 22:37:36 +00:00
if ( ( QB . func _ _Trim ( QB . arrayValue ( parts , [ 1 ] ) . value ) ) != "" ) {
method = ( await func _ConvertExpression ( QB . arrayValue ( parts , [ 1 ] ) . value ) ) ;
2022-03-15 14:42:33 +00:00
}
}
if ( argc >= 2 ) {
2022-03-30 22:37:36 +00:00
bgcolor = ( await func _ConvertExpression ( QB . arrayValue ( parts , [ 2 ] ) . value ) ) ;
2022-03-15 14:42:33 +00:00
}
ConvertCls = method + ", " + bgcolor ;
return ConvertCls ;
}
2022-05-29 06:06:31 +00:00
async function func _ConvertRandomize ( m /*METHOD*/ , args /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var ConvertRandomize = null ;
var uusing = '' ; // STRING
var theseed = '' ; // STRING
uusing = "false" ;
theseed = args ;
if ( ( QB . func _ _Trim ( args ) ) == "" ) {
theseed = "undefined" ;
} else {
if ( ( ( QB . func _UCase ( ( QB . func _ _Trim ( ( QB . func _Left ( args , 5 ) ) ) ) ) ) == "USING" ) ) {
uusing = "true" ;
theseed = ( QB . func _ _Trim ( ( QB . func _Right ( args , ( QB . func _Len ( args ) ) - 5 ) ) ) ) ;
}
2022-06-15 21:48:13 +00:00
theseed = ( await func _ConvertExpression ( theseed ) ) ;
2022-05-29 06:06:31 +00:00
}
ConvertRandomize = ( await func _CallMethod ( m ) ) + "(" + uusing + ", " + theseed + ")" ;
return ConvertRandomize ;
}
2022-05-21 07:05:30 +00:00
async function func _ConvertRead ( m /*METHOD*/ , args /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var ConvertRead = null ;
var js = '' ; // STRING
var vname = '' ; // STRING
var pcount = 0 ; // INTEGER
var parts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
var vars = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
var vcount = 0 ; // INTEGER
var p = '' ; // STRING
pcount = ( await func _ListSplit ( args , parts ) ) ;
var i = 0 ; // INTEGER
for ( i = 1 ; i <= pcount ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
p = ( QB . func _ _Trim ( QB . arrayValue ( parts , [ i ] ) . value ) ) ;
vcount = ( QB . func _UBound ( vars ) ) + 1 ;
QB . resizeArray ( vars , [ { l : 1 , u : vcount } ] , '' , true ) ; // STRING
QB . arrayValue ( vars , [ vcount ] ) . value = p ;
}
vname = await func _GenJSVar ( ) ;
js = "var " + vname + " = new Array(" + ( QB . func _Str ( ( QB . func _UBound ( vars ) ) ) ) + ");" + await func _LF ( ) ;
js = js + ( await func _CallMethod ( m ) ) + "(" + vname + ");" + await func _LF ( ) ;
for ( i = 1 ; i <= ( QB . func _UBound ( vars ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
js = js + ( await func _ConvertExpression ( QB . arrayValue ( vars , [ i ] ) . value ) ) + " = " + vname + "[" + ( QB . func _Str ( i - 1 ) ) + "];" + await func _LF ( ) ;
}
ConvertRead = js ;
return ConvertRead ;
}
2022-03-04 22:28:32 +00:00
async function func _ConvertCoordParam ( param /*STRING*/ , hasEndCoord /*INTEGER*/ ) {
if ( QB . halted ( ) ) { return ; }
var ConvertCoordParam = null ;
2022-03-30 22:37:36 +00:00
if ( ( QB . func _ _Trim ( param ) ) == "" ) {
2022-03-04 22:28:32 +00:00
if ( hasEndCoord ) {
ConvertCoordParam = "false, undefined, undefined, false, undefined, undefined" ;
} else {
ConvertCoordParam = "false, undefined, undefined" ;
}
} else {
var js = '' ; // STRING
var startCoord = '' ; // STRING
var endCoord = '' ; // STRING
var sstep = '' ; // STRING
var estep = '' ; // STRING
var idx = 0 ; // INTEGER
sstep = "false" ;
estep = "false" ;
2022-03-30 22:37:36 +00:00
idx = ( await func _FindParamChar ( param , "-" ) ) ;
2022-03-04 22:28:32 +00:00
if ( idx == - 1 ) {
startCoord = param ;
endCoord = "" ;
} else {
2022-03-30 22:37:36 +00:00
startCoord = ( QB . func _Left ( param , idx - 1 ) ) ;
endCoord = ( QB . func _Right ( param , ( QB . func _Len ( param ) ) - idx ) ) ;
2022-03-04 22:28:32 +00:00
}
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UCase ( ( QB . func _ _Trim ( ( QB . func _Left ( startCoord , 4 ) ) ) ) ) ) == "STEP" ) {
2022-03-04 22:28:32 +00:00
sstep = "true" ;
}
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UCase ( ( QB . func _ _Trim ( ( QB . func _Left ( endCoord , 4 ) ) ) ) ) ) == "STEP" ) {
2022-03-04 22:28:32 +00:00
estep = "true" ;
}
2022-03-30 22:37:36 +00:00
idx = ( QB . func _InStr ( startCoord , "(" ) ) ;
startCoord = ( QB . func _Right ( startCoord , ( QB . func _Len ( startCoord ) ) - idx ) ) ;
idx = ( QB . func _ _InStrRev ( startCoord , ")" ) ) ;
startCoord = ( QB . func _Left ( startCoord , idx - 1 ) ) ;
startCoord = ( await func _ConvertExpression ( startCoord ) ) ;
if ( ( ( QB . func _ _Trim ( startCoord ) ) == "" ) ) {
2022-03-04 22:28:32 +00:00
startCoord = "undefined, undefined" ;
}
if ( hasEndCoord ) {
2022-03-30 22:37:36 +00:00
idx = ( QB . func _InStr ( endCoord , "(" ) ) ;
endCoord = ( QB . func _Right ( endCoord , ( QB . func _Len ( endCoord ) ) - idx ) ) ;
idx = ( QB . func _ _InStrRev ( endCoord , ")" ) ) ;
endCoord = ( QB . func _Left ( endCoord , idx - 1 ) ) ;
endCoord = ( await func _ConvertExpression ( endCoord ) ) ;
if ( ( ( QB . func _ _Trim ( endCoord ) ) == "" ) ) {
2022-03-04 22:28:32 +00:00
endCoord = "undefined, undefined" ;
}
ConvertCoordParam = sstep + ", " + startCoord + ", " + estep + ", " + endCoord ;
} else {
ConvertCoordParam = sstep + ", " + startCoord ;
}
}
return ConvertCoordParam ;
}
async function func _ConvertPSet ( args /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var ConvertPSet = null ;
var firstParam = '' ; // STRING
var theRest = '' ; // STRING
var idx = 0 ; // INTEGER
var sstep = '' ; // STRING
sstep = "false" ;
2022-03-30 22:37:36 +00:00
idx = ( await func _FindParamChar ( args , "," ) ) ;
2022-02-16 17:40:03 +00:00
if ( idx == - 1 ) {
firstParam = args ;
theRest = "" ;
} else {
2022-03-30 22:37:36 +00:00
firstParam = ( QB . func _Left ( args , idx - 1 ) ) ;
theRest = ( QB . func _Right ( args , ( QB . func _Len ( args ) ) - idx ) ) ;
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UCase ( ( QB . func _ _Trim ( ( QB . func _Left ( firstParam , 4 ) ) ) ) ) ) == "STEP" ) {
2022-02-16 17:40:03 +00:00
sstep = "true" ;
}
2022-03-30 22:37:36 +00:00
idx = ( QB . func _InStr ( firstParam , "(" ) ) ;
firstParam = ( QB . func _Right ( firstParam , ( QB . func _Len ( firstParam ) ) - idx ) ) ;
idx = ( QB . func _ _InStrRev ( firstParam , ")" ) ) ;
firstParam = ( QB . func _Left ( firstParam , idx - 1 ) ) ;
firstParam = ( await func _ConvertExpression ( firstParam ) ) ;
if ( ( ( QB . func _ _Trim ( firstParam ) ) == "" ) ) {
2022-02-16 17:40:03 +00:00
firstParam = "undefined, undefined" ;
}
2022-03-30 22:37:36 +00:00
theRest = ( await func _ConvertExpression ( theRest ) ) ;
2022-02-16 17:40:03 +00:00
ConvertPSet = sstep + ", " + firstParam + ", " + theRest ;
return ConvertPSet ;
}
2022-03-04 22:28:32 +00:00
async function func _ConvertPrint ( args /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var ConvertPrint = null ;
var pcount = 0 ; // INTEGER
2022-03-04 22:28:32 +00:00
var parts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-03-30 22:37:36 +00:00
pcount = ( await func _PrintSplit ( args , parts ) ) ;
2022-02-16 17:40:03 +00:00
var js = '' ; // STRING
js = "[" ;
var i = 0 ; // INTEGER
for ( i = 1 ; i <= pcount ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
if ( i > 1 ) {
js = js + "," ;
}
if ( QB . arrayValue ( parts , [ i ] ) . value == "," ) {
js = js + "QB.COLUMN_ADVANCE" ;
} else if ( QB . arrayValue ( parts , [ i ] ) . value == ";" ) {
js = js + "QB.PREVENT_NEWLINE" ;
} else {
2022-03-30 22:37:36 +00:00
js = js + ( await func _ConvertExpression ( QB . arrayValue ( parts , [ i ] ) . value ) ) ;
2022-02-16 17:40:03 +00:00
}
}
ConvertPrint = js + "]" ;
return ConvertPrint ;
}
2022-03-04 22:28:32 +00:00
async function func _ConvertPrintString ( args /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var ConvertPrintString = null ;
var firstParam = '' ; // STRING
var theRest = '' ; // STRING
var idx = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
idx = ( await func _FindParamChar ( args , "," ) ) ;
2022-02-16 17:40:03 +00:00
if ( idx == - 1 ) {
firstParam = args ;
theRest = "" ;
} else {
2022-03-30 22:37:36 +00:00
firstParam = ( QB . func _Left ( args , idx - 1 ) ) ;
theRest = ( QB . func _Right ( args , ( QB . func _Len ( args ) ) - idx ) ) ;
}
idx = ( QB . func _InStr ( firstParam , "(" ) ) ;
firstParam = ( QB . func _Right ( firstParam , ( QB . func _Len ( firstParam ) ) - idx ) ) ;
idx = ( QB . func _ _InStrRev ( firstParam , ")" ) ) ;
firstParam = ( QB . func _Left ( firstParam , idx - 1 ) ) ;
ConvertPrintString = ( await func _ConvertExpression ( firstParam ) ) + ", " + ( await func _ConvertExpression ( theRest ) ) ;
2022-02-16 17:40:03 +00:00
return ConvertPrintString ;
}
2022-03-04 22:28:32 +00:00
async function func _ConvertInput ( m /*METHOD*/ , args /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var ConvertInput = null ;
var js = '' ; // STRING
var vname = '' ; // STRING
var pcount = 0 ; // INTEGER
2022-03-04 22:28:32 +00:00
var parts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
var vars = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-02-16 17:40:03 +00:00
var varIndex = 0 ; // INTEGER
varIndex = 1 ;
var preventNewline = '' ; // STRING
preventNewline = "false" ;
var addQuestionPrompt = '' ; // STRING
addQuestionPrompt = "false" ;
var prompt = '' ; // STRING
prompt = "undefined" ;
var vcount = 0 ; // INTEGER
var p = '' ; // STRING
2022-03-30 22:37:36 +00:00
pcount = ( await func _PrintSplit ( args , parts ) ) ;
2022-02-16 17:40:03 +00:00
var i = 0 ; // INTEGER
for ( i = 1 ; i <= pcount ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-03-30 22:37:36 +00:00
p = ( QB . func _ _Trim ( QB . arrayValue ( parts , [ i ] ) . value ) ) ;
2022-02-16 17:40:03 +00:00
if ( p == ";" ) {
if ( i == 1 ) {
preventNewline = "true" ;
} else {
addQuestionPrompt = "true" ;
}
2022-03-30 22:37:36 +00:00
} else if ( ( await func _StartsWith ( p , ( QB . func _Chr ( 34 ) ) ) ) ) {
2022-02-16 17:40:03 +00:00
prompt = p ;
} else if ( p != "," ) {
2022-03-30 22:37:36 +00:00
vcount = ( QB . func _UBound ( vars ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( vars , [ { l : 1 , u : vcount } ] , '' , true ) ; // STRING
2022-02-16 17:40:03 +00:00
QB . arrayValue ( vars , [ vcount ] ) . value = p ;
}
}
2022-03-04 22:28:32 +00:00
vname = await func _GenJSVar ( ) ;
2022-05-02 21:00:21 +00:00
js = "var " + vname + " = new Array(" + ( QB . func _Str ( ( QB . func _UBound ( vars ) ) ) ) + ");" + await func _LF ( ) ;
js = js + ( await func _CallMethod ( m ) ) + "(" + vname + ", " + preventNewline + ", " + addQuestionPrompt + ", " + prompt + ");" + await func _LF ( ) ;
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _UBound ( vars ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-04-18 16:27:23 +00:00
if ( ! ( await func _StartsWith ( ( QB . func _ _Trim ( QB . arrayValue ( vars , [ i ] ) . value ) ) , "#" ) ) ) {
2022-05-02 21:00:21 +00:00
js = js + ( await func _ConvertExpression ( QB . arrayValue ( vars , [ i ] ) . value ) ) + " = " + vname + "[" + ( QB . func _Str ( i - 1 ) ) + "];" + await func _LF ( ) ;
2022-04-18 16:27:23 +00:00
}
2022-02-16 17:40:03 +00:00
}
ConvertInput = js ;
return ConvertInput ;
}
2022-03-04 22:28:32 +00:00
async function func _ConvertSwap ( m /*METHOD*/ , args /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var ConvertSwap = null ;
var js = '' ; // STRING
var swapArray = '' ; // STRING
2022-03-04 22:28:32 +00:00
swapArray = await func _GenJSVar ( ) ;
var swapArgs = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-02-16 17:40:03 +00:00
var swapCount = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
swapCount = ( await func _ListSplit ( args , swapArgs ) ) ;
2022-02-16 17:40:03 +00:00
var var1 = '' ; // STRING
var var2 = '' ; // STRING
2022-03-30 22:37:36 +00:00
var1 = ( await func _ConvertExpression ( QB . arrayValue ( swapArgs , [ 1 ] ) . value ) ) ;
var2 = ( await func _ConvertExpression ( QB . arrayValue ( swapArgs , [ 2 ] ) . value ) ) ;
2022-05-02 21:00:21 +00:00
js = "var " + swapArray + " = [" + var1 + "," + var2 + "];" + await func _LF ( ) ;
js = js + ( await func _CallMethod ( m ) ) + "(" + swapArray + ");" + await func _LF ( ) ;
js = js + var1 + " = " + swapArray + "[0];" + await func _LF ( ) ;
2022-02-16 17:40:03 +00:00
js = js + var2 + " = " + swapArray + "[1];" ;
ConvertSwap = js ;
return ConvertSwap ;
}
2022-03-04 22:28:32 +00:00
async function func _GenJSVar ( ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var GenJSVar = null ;
2022-03-30 22:37:36 +00:00
GenJSVar = "___v" + ( QB . func _ _Trim ( ( QB . func _Str ( ( QB . func _ _Round ( QB . func _Rnd ( ) * 10000000 ) ) ) ) ) ) ;
2022-02-16 17:40:03 +00:00
return GenJSVar ;
}
2022-03-04 22:28:32 +00:00
async function func _FindParamChar ( s /*STRING*/ , char /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var FindParamChar = null ;
var idx = 0 ; // INTEGER
idx = - 1 ;
var c = '' ; // STRING
var quote = 0 ; // INTEGER
var paren = 0 ; // INTEGER
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _Len ( s ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
c = ( QB . func _Mid ( s , i , 1 ) ) ;
if ( c == ( QB . func _Chr ( 34 ) ) ) {
2022-02-16 17:40:03 +00:00
quote = ! quote ;
} else if ( ! quote && c == "(" ) {
paren = paren + 1 ;
} else if ( ! quote && c == ")" ) {
paren = paren - 1 ;
} else if ( ! quote && paren == 0 && c == char ) {
idx = i ;
break ;
}
}
FindParamChar = idx ;
return FindParamChar ;
}
2022-03-04 22:28:32 +00:00
async function func _DeclareVar ( parts /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var DeclareVar = null ;
var vname = '' ; // STRING
var vtype = '' ; // STRING
vtype = "" ;
var vtypeIndex = 0 ; // INTEGER
vtypeIndex = 4 ;
var isGlobal = 0 ; // INTEGER
isGlobal = False ;
var isArray = 0 ; // INTEGER
isArray = False ;
var arraySize = '' ; // STRING
var pstart = 0 ; // INTEGER
var bvar = { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ; // VARIABLE
2022-03-04 22:28:32 +00:00
var varnames = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-02-16 17:40:03 +00:00
var vnamecount = 0 ; // INTEGER
var findVar = { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ; // VARIABLE
var asIdx = 0 ; // INTEGER
asIdx = 0 ;
var js = '' ; // STRING
js = "" ;
var preserve = '' ; // STRING
preserve = "false" ;
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _UBound ( parts ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
if ( ( QB . func _UCase ( QB . arrayValue ( parts , [ i ] ) . value ) ) == "AS" ) {
2022-02-16 17:40:03 +00:00
asIdx = i ;
}
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UCase ( QB . arrayValue ( parts , [ i ] ) . value ) ) == "_PRESERVE" ) {
2022-02-16 17:40:03 +00:00
preserve = "true" ;
}
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UCase ( QB . arrayValue ( parts , [ i ] ) . value ) ) == "SHARED" ) {
2022-02-16 17:40:03 +00:00
isGlobal = True ;
}
}
if ( asIdx == 2 || ( asIdx == 3 && ( isGlobal || preserve == "true" ) ) || ( asIdx == 4 && isGlobal && preserve == "true" ) ) {
2022-03-30 22:37:36 +00:00
bvar . type = ( QB . func _UCase ( QB . arrayValue ( parts , [ asIdx + 1 ] ) . value ) ) ;
2022-02-16 17:40:03 +00:00
var nextIdx = 0 ; // INTEGER
nextIdx = asIdx + 2 ;
if ( bvar . type == "_UNSIGNED" ) {
2022-03-30 22:37:36 +00:00
bvar . type = bvar . type + " " + ( QB . func _UCase ( QB . arrayValue ( parts , [ asIdx + 2 ] ) . value ) ) ;
2022-02-16 17:40:03 +00:00
nextIdx = asIdx + 3 ;
}
2022-03-30 22:37:36 +00:00
bvar . typeId = ( await func _FindTypeId ( bvar . type ) ) ;
vnamecount = ( await func _ListSplit ( ( await func _Join ( parts , nextIdx , - 1 , " " ) ) , varnames ) ) ;
2022-02-16 17:40:03 +00:00
for ( i = 1 ; i <= vnamecount ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-03-30 22:37:36 +00:00
vname = ( QB . func _ _Trim ( QB . arrayValue ( varnames , [ i ] ) . value ) ) ;
pstart = ( QB . func _InStr ( vname , "(" ) ) ;
2022-02-16 17:40:03 +00:00
if ( pstart > 0 ) {
bvar . isArray = True ;
2022-03-30 22:37:36 +00:00
arraySize = ( await func _ConvertExpression ( ( QB . func _Mid ( vname , pstart + 1 , ( QB . func _Len ( vname ) ) - pstart - 1 ) ) ) ) ;
bvar . name = ( await func _RemoveSuffix ( ( QB . func _Left ( vname , pstart - 1 ) ) ) ) ;
2022-02-16 17:40:03 +00:00
} else {
bvar . isArray = False ;
arraySize = "" ;
bvar . name = vname ;
}
bvar . jsname = "" ;
if ( ! bvar . isArray ) {
2022-03-30 22:37:36 +00:00
js = js + "var " + bvar . name + " = " + ( await func _InitTypeValue ( bvar . type ) ) + ";" ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
if ( ( await func _FindVariable ( bvar . name , findVar , True ) ) ) {
js = js + "QB.resizeArray(" + bvar . name + ", [" + ( await func _FormatArraySize ( arraySize ) ) + "], " + ( await func _InitTypeValue ( bvar . type ) ) + ", " + preserve + ");" ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
js = js + "var " + bvar . name + " = QB.initArray([" + ( await func _FormatArraySize ( arraySize ) ) + "], " + ( await func _InitTypeValue ( bvar . type ) ) + ");" ;
2022-02-16 17:40:03 +00:00
}
}
if ( isGlobal ) {
2022-03-30 22:37:36 +00:00
await sub _AddVariable ( bvar , globalVars ) ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
await sub _AddVariable ( bvar , localVars ) ;
2022-02-16 17:40:03 +00:00
}
js = js + " // " + bvar . type ;
if ( i < vnamecount ) {
2022-05-02 21:00:21 +00:00
js = js + await func _LF ( ) ;
2022-02-16 17:40:03 +00:00
}
}
} else {
var vpartcount = 0 ; // INTEGER
2022-03-04 22:28:32 +00:00
var vparts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-02-16 17:40:03 +00:00
nextIdx = 0 ;
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _UBound ( parts ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
var p = '' ; // STRING
2022-03-30 22:37:36 +00:00
p = ( QB . func _UCase ( QB . arrayValue ( parts , [ i ] ) . value ) ) ;
2022-02-16 17:40:03 +00:00
if ( p == "DIM" || p == "REDIM" || p == "SHARED" || p == "_PRESERVE" ) {
nextIdx = i + 1 ;
}
}
2022-03-30 22:37:36 +00:00
vnamecount = ( await func _ListSplit ( ( await func _Join ( parts , nextIdx , - 1 , " " ) ) , varnames ) ) ;
2022-02-16 17:40:03 +00:00
for ( i = 1 ; i <= vnamecount ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-03-30 22:37:36 +00:00
vpartcount = ( await func _SLSplit2 ( QB . arrayValue ( varnames , [ i ] ) . value , vparts ) ) ;
bvar . name = ( await func _RemoveSuffix ( QB . arrayValue ( vparts , [ 1 ] ) . value ) ) ;
2022-02-16 17:40:03 +00:00
if ( vpartcount == 1 ) {
2022-03-30 22:37:36 +00:00
bvar . type = ( await func _DataTypeFromName ( bvar . name ) ) ;
2022-02-16 17:40:03 +00:00
} else if ( vpartcount == 3 ) {
2022-03-30 22:37:36 +00:00
bvar . type = ( QB . func _UCase ( QB . arrayValue ( vparts , [ 3 ] ) . value ) ) ;
2022-02-16 17:40:03 +00:00
} else if ( vpartcount == 4 ) {
2022-03-30 22:37:36 +00:00
bvar . type = ( QB . func _UCase ( ( await func _Join ( vparts , 3 , - 1 , " " ) ) ) ) ;
2022-02-16 17:40:03 +00:00
} else {
}
2022-03-30 22:37:36 +00:00
bvar . typeId = ( await func _FindTypeId ( bvar . type ) ) ;
pstart = ( QB . func _InStr ( bvar . name , "(" ) ) ;
2022-02-16 17:40:03 +00:00
if ( pstart > 0 ) {
bvar . isArray = True ;
2022-03-30 22:37:36 +00:00
arraySize = ( await func _ConvertExpression ( ( QB . func _Mid ( bvar . name , pstart + 1 , ( QB . func _Len ( bvar . name ) ) - pstart - 1 ) ) ) ) ;
bvar . name = ( await func _RemoveSuffix ( ( QB . func _Left ( bvar . name , pstart - 1 ) ) ) ) ;
2022-02-16 17:40:03 +00:00
} else {
bvar . isArray = False ;
arraySize = "" ;
}
bvar . jsname = "" ;
if ( ! bvar . isArray ) {
2022-03-30 22:37:36 +00:00
js = js + "var " + bvar . name + " = " + ( await func _InitTypeValue ( bvar . type ) ) + ";" ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
if ( ( await func _FindVariable ( bvar . name , findVar , True ) ) ) {
js = js + "QB.resizeArray(" + bvar . name + ", [" + ( await func _FormatArraySize ( arraySize ) ) + "], " + ( await func _InitTypeValue ( bvar . type ) ) + ", " + preserve + ");" ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
js = js + "var " + bvar . name + " = QB.initArray([" + ( await func _FormatArraySize ( arraySize ) ) + "], " + ( await func _InitTypeValue ( bvar . type ) ) + ");" ;
2022-02-16 17:40:03 +00:00
}
}
if ( isGlobal ) {
2022-03-30 22:37:36 +00:00
await sub _AddVariable ( bvar , globalVars ) ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
await sub _AddVariable ( bvar , localVars ) ;
2022-02-16 17:40:03 +00:00
}
js = js + " // " + bvar . type ;
if ( i < vnamecount ) {
2022-05-02 21:00:21 +00:00
js = js + await func _LF ( ) ;
2022-02-16 17:40:03 +00:00
}
}
}
DeclareVar = js ;
return DeclareVar ;
}
2022-03-04 22:28:32 +00:00
async function func _FormatArraySize ( sizeString /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var FormatArraySize = null ;
var sizeParams = '' ; // STRING
sizeParams = "" ;
var parts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
var pcount = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
pcount = ( await func _ListSplit ( sizeString , parts ) ) ;
2022-03-04 22:28:32 +00:00
var i = 0 ; // INTEGER
for ( i = 1 ; i <= pcount ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
var subparts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
var scount = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
scount = ( await func _SLSplit2 ( QB . arrayValue ( parts , [ i ] ) . value , subparts ) ) ;
2022-03-04 22:28:32 +00:00
if ( i > 1 ) {
sizeParams = sizeParams + "," ;
}
if ( scount == 1 ) {
sizeParams = sizeParams + "{l:1,u:" + QB . arrayValue ( subparts , [ 1 ] ) . value + "}" ;
} else {
sizeParams = sizeParams + "{l:" + QB . arrayValue ( subparts , [ 1 ] ) . value + ",u:" + QB . arrayValue ( subparts , [ 3 ] ) . value + "}" ;
}
}
FormatArraySize = sizeParams ;
return FormatArraySize ;
}
async function func _InitTypeValue ( vtype /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var InitTypeValue = null ;
var value = '' ; // STRING
if ( vtype == "STRING" ) {
value = "''" ;
2022-05-05 22:20:03 +00:00
} else if ( vtype == "OBJECT" ) {
value = "{}" ;
2022-02-16 17:40:03 +00:00
} else if ( vtype == "_BIT" || vtype == "_UNSIGNED _BIT" || vtype == "_BYTE" || vtype == "_UNSIGNED _BYTE" || vtype == "INTEGER" || vtype == "_UNSIGNED INTEGER" || vtype == "LONG" || vtype == "_UNSIGNED LONG" || vtype == "_INTEGER64" || vtype == "_UNSIGNED INTEGER64" || vtype == "SINGLE" || vtype == "DOUBLE" || vtype == "_FLOAT" || vtype == "_OFFSET" || vtype == "_UNSIGNED _OFFSET" ) {
value = "0" ;
} else {
value = "{" ;
var typeId = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
typeId = ( await func _FindTypeId ( vtype ) ) ;
2022-02-16 17:40:03 +00:00
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _UBound ( typeVars ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
if ( typeId == QB . arrayValue ( typeVars , [ i ] ) . value . typeId ) {
2022-03-30 22:37:36 +00:00
value = value + QB . arrayValue ( typeVars , [ i ] ) . value . name + ":" + ( await func _InitTypeValue ( QB . arrayValue ( typeVars , [ i ] ) . value . type ) ) + "," ;
2022-02-16 17:40:03 +00:00
}
}
2022-03-30 22:37:36 +00:00
value = ( QB . func _Left ( value , ( QB . func _Len ( value ) ) - 1 ) ) + "}" ;
2022-02-16 17:40:03 +00:00
}
InitTypeValue = value ;
return InitTypeValue ;
}
2022-03-04 22:28:32 +00:00
async function func _FindTypeId ( typeName /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var FindTypeId = null ;
var id = 0 ; // INTEGER
id = - 1 ;
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _UBound ( types ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
if ( QB . arrayValue ( types , [ i ] ) . value . name == typeName ) {
id = i ;
break ;
}
}
FindTypeId = id ;
return FindTypeId ;
}
2022-03-04 22:28:32 +00:00
async function func _ConvertExpression ( ex /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var ConvertExpression = null ;
var c = '' ; // STRING
var js = '' ; // STRING
js = "" ;
var word = '' ; // STRING
word = "" ;
var bvar = { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ; // VARIABLE
2022-03-04 22:28:32 +00:00
var m = { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } ; // METHOD
2022-02-16 17:40:03 +00:00
var stringLiteral = 0 ; // INTEGER
var i = 0 ; // INTEGER
i = 1 ;
2022-03-30 22:37:36 +00:00
while ( i <= ( QB . func _Len ( ex ) ) ) { if ( QB . halted ( ) ) { return ; }
c = ( QB . func _Mid ( ex , i , 1 ) ) ;
if ( c == ( QB . func _Chr ( 34 ) ) ) {
2022-02-16 17:40:03 +00:00
js = js + c ;
stringLiteral = ! stringLiteral ;
} else if ( stringLiteral ) {
js = js + c ;
} else {
2022-03-30 22:37:36 +00:00
if ( c == " " || c == "," || i == ( QB . func _Len ( ex ) ) ) {
if ( i == ( QB . func _Len ( ex ) ) ) {
2022-02-16 17:40:03 +00:00
word = word + c ;
}
var uword = '' ; // STRING
2022-03-30 22:37:36 +00:00
uword = ( QB . func _UCase ( word ) ) ;
2022-02-16 17:40:03 +00:00
if ( uword == "NOT" ) {
js = js + "!" ;
} else if ( uword == "AND" ) {
js = js + " && " ;
} else if ( uword == "OR" ) {
js = js + " || " ;
} else if ( uword == "MOD" ) {
js = js + " % " ;
} else if ( word == "=" ) {
js = js + " == " ;
} else if ( word == "<>" ) {
js = js + " != " ;
} else if ( word == "^" ) {
js = js + " ** " ;
} else if ( word == ">" || word == ">=" || word == "<" || word == "<=" ) {
js = js + " " + word + " " ;
2022-04-26 15:22:45 +00:00
} else if ( ( await func _StartsWith ( word , "&H" ) ) || ( await func _StartsWith ( word , "&O" ) ) || ( await func _StartsWith ( word , "&B" ) ) ) {
js = js + " QB.func_Val('" + word + "') " ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
if ( ( await func _FindVariable ( word , bvar , False ) ) ) {
2022-02-16 17:40:03 +00:00
js = js + " " + bvar . jsname ;
} else {
2022-03-30 22:37:36 +00:00
if ( ( await func _FindMethod ( word , m , "FUNCTION" ) ) ) {
2022-02-16 17:40:03 +00:00
if ( m . name != currentMethod ) {
2022-03-30 22:37:36 +00:00
js = js + ( await func _CallMethod ( m ) ) + "()" ;
2022-02-16 17:40:03 +00:00
} else {
js = js + " " + word ;
}
} else {
js = js + " " + word ;
}
}
}
2022-03-30 22:37:36 +00:00
if ( c == "," && i != ( QB . func _Len ( ex ) ) ) {
2022-02-16 17:40:03 +00:00
js = js + "," ;
}
word = "" ;
} else if ( c == "(" ) {
var done = 0 ; // INTEGER
done = False ;
var pcount = 0 ; // INTEGER
pcount = 0 ;
var c2 = '' ; // STRING
var ex2 = '' ; // STRING
ex2 = "" ;
var stringLiteral2 = 0 ; // INTEGER
stringLiteral2 = False ;
i = i + 1 ;
2022-03-30 22:37:36 +00:00
while ( ! done && i <= ( QB . func _Len ( ex ) ) ) { if ( QB . halted ( ) ) { return ; }
c2 = ( QB . func _Mid ( ex , i , 1 ) ) ;
if ( c2 == ( QB . func _Chr ( 34 ) ) ) {
2022-02-16 17:40:03 +00:00
stringLiteral2 = ! stringLiteral2 ;
} else if ( ! stringLiteral2 && c2 == "(" ) {
pcount = pcount + 1 ;
} else if ( ! stringLiteral2 && c2 == ")" ) {
if ( pcount == 0 ) {
done = True ;
} else {
pcount = pcount - 1 ;
}
}
if ( ! done ) {
ex2 = ex2 + c2 ;
i = i + 1 ;
}
}
var fneg = '' ; // STRING
fneg = "" ;
2022-03-30 22:37:36 +00:00
if ( ( QB . func _Len ( word ) ) > 0 ) {
if ( ( QB . func _Left ( word , 1 ) ) == "-" ) {
2022-02-16 17:40:03 +00:00
fneg = "-" ;
2022-03-30 22:37:36 +00:00
word = ( QB . func _Mid ( word , 2 ) ) ;
2022-02-16 17:40:03 +00:00
}
}
2022-03-30 22:37:36 +00:00
if ( ( await func _FindVariable ( word , bvar , True ) ) ) {
if ( ( QB . func _ _Trim ( ex2 ) ) == "" ) {
2022-02-16 17:40:03 +00:00
js = js + fneg + bvar . jsname ;
} else {
2022-03-30 22:37:36 +00:00
js = js + fneg + "QB.arrayValue(" + bvar . jsname + ", [" + ( await func _ConvertExpression ( ex2 ) ) + "]).value" ;
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
} else if ( ( await func _FindMethod ( word , m , "FUNCTION" ) ) ) {
js = js + fneg + "(" + ( await func _CallMethod ( m ) ) + "(" + ( await func _ConvertMethodParams ( ex2 ) ) + "))" ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
if ( ( QB . func _ _Trim ( word ) ) != "" ) {
await sub _AddWarning ( i , "Missing function or array [" + word + "]" ) ;
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
js = js + fneg + "(" + ( await func _ConvertExpression ( ex2 ) ) + ")" ;
2022-02-16 17:40:03 +00:00
}
word = "" ;
} else {
word = word + c ;
}
}
i = i + 1 ;
}
ConvertExpression = js ;
return ConvertExpression ;
}
2022-03-30 22:37:36 +00:00
async function func _ConvertMethodParams ( args /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var ConvertMethodParams = null ;
var js = '' ; // STRING
var params = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
var argc = 0 ; // INTEGER
argc = ( await func _ListSplit ( args , params ) ) ;
var i = 0 ; // INTEGER
for ( i = 1 ; i <= argc ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
if ( i > 1 ) {
js = js + "," ;
}
if ( ( QB . func _ _Trim ( QB . arrayValue ( params , [ i ] ) . value ) ) == "" ) {
js = js + " undefined" ;
} else {
js = js + " " + ( await func _ConvertExpression ( QB . arrayValue ( params , [ i ] ) . value ) ) ;
}
}
ConvertMethodParams = js ;
return ConvertMethodParams ;
}
2022-03-04 22:28:32 +00:00
async function func _CallMethod ( m /*METHOD*/ ) {
if ( QB . halted ( ) ) { return ; }
var CallMethod = null ;
var js = '' ; // STRING
if ( m . sync ) {
js = "await " ;
}
js = js + m . jsname ;
CallMethod = js ;
return CallMethod ;
}
async function func _FindVariable ( varname /*STRING*/ , bvar /*VARIABLE*/ , isArray /*INTEGER*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var FindVariable = null ;
var found = 0 ; // INTEGER
found = False ;
var i = 0 ; // INTEGER
var fvarname = '' ; // STRING
2022-03-30 22:37:36 +00:00
fvarname = ( QB . func _ _Trim ( ( QB . func _UCase ( ( await func _RemoveSuffix ( varname ) ) ) ) ) ) ;
for ( i = 1 ; i <= ( QB . func _UBound ( localVars ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
if ( QB . arrayValue ( localVars , [ i ] ) . value . isArray == isArray && ( QB . func _UCase ( QB . arrayValue ( localVars , [ i ] ) . value . name ) ) == fvarname ) {
2022-02-16 17:40:03 +00:00
found = True ;
bvar . type = QB . arrayValue ( localVars , [ i ] ) . value . type ;
bvar . name = QB . arrayValue ( localVars , [ i ] ) . value . name ;
bvar . jsname = QB . arrayValue ( localVars , [ i ] ) . value . jsname ;
bvar . isConst = QB . arrayValue ( localVars , [ i ] ) . value . isConst ;
bvar . isArray = QB . arrayValue ( localVars , [ i ] ) . value . isArray ;
bvar . arraySize = QB . arrayValue ( localVars , [ i ] ) . value . arraySize ;
bvar . typeId = QB . arrayValue ( localVars , [ i ] ) . value . typeId ;
break ;
}
}
if ( ! found ) {
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _UBound ( globalVars ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
if ( QB . arrayValue ( globalVars , [ i ] ) . value . isArray == isArray && ( QB . func _UCase ( QB . arrayValue ( globalVars , [ i ] ) . value . name ) ) == fvarname ) {
2022-02-16 17:40:03 +00:00
found = True ;
bvar . type = QB . arrayValue ( globalVars , [ i ] ) . value . type ;
bvar . name = QB . arrayValue ( globalVars , [ i ] ) . value . name ;
bvar . jsname = QB . arrayValue ( globalVars , [ i ] ) . value . jsname ;
bvar . isConst = QB . arrayValue ( globalVars , [ i ] ) . value . isConst ;
bvar . isArray = QB . arrayValue ( globalVars , [ i ] ) . value . isArray ;
bvar . arraySize = QB . arrayValue ( globalVars , [ i ] ) . value . arraySize ;
bvar . typeId = QB . arrayValue ( globalVars , [ i ] ) . value . typeId ;
break ;
}
}
}
FindVariable = found ;
return FindVariable ;
}
2022-03-04 22:28:32 +00:00
async function func _FindMethod ( mname /*STRING*/ , m /*METHOD*/ , t /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var FindMethod = null ;
var found = 0 ; // INTEGER
found = False ;
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _UBound ( methods ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
if ( QB . arrayValue ( methods , [ i ] ) . value . uname == ( QB . func _ _Trim ( ( QB . func _UCase ( ( await func _RemoveSuffix ( mname ) ) ) ) ) ) && QB . arrayValue ( methods , [ i ] ) . value . type == t ) {
2022-02-16 17:40:03 +00:00
found = True ;
m . line = QB . arrayValue ( methods , [ i ] ) . value . line ;
m . type = QB . arrayValue ( methods , [ i ] ) . value . type ;
m . returnType = QB . arrayValue ( methods , [ i ] ) . value . returnType ;
m . name = QB . arrayValue ( methods , [ i ] ) . value . name ;
m . jsname = QB . arrayValue ( methods , [ i ] ) . value . jsname ;
m . uname = QB . arrayValue ( methods , [ i ] ) . value . uname ;
m . argc = QB . arrayValue ( methods , [ i ] ) . value . argc ;
m . args = QB . arrayValue ( methods , [ i ] ) . value . args ;
2022-03-04 22:28:32 +00:00
m . sync = QB . arrayValue ( methods , [ i ] ) . value . sync ;
2022-02-16 17:40:03 +00:00
break ;
}
}
2022-04-18 16:27:23 +00:00
if ( ! found ) {
for ( i = 1 ; i <= ( QB . func _UBound ( exportMethods ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
if ( QB . arrayValue ( exportMethods , [ i ] ) . value . uname == ( QB . func _ _Trim ( ( QB . func _UCase ( ( await func _RemoveSuffix ( mname ) ) ) ) ) ) && QB . arrayValue ( exportMethods , [ i ] ) . value . type == t ) {
found = True ;
m . line = QB . arrayValue ( exportMethods , [ i ] ) . value . line ;
m . type = QB . arrayValue ( exportMethods , [ i ] ) . value . type ;
m . returnType = QB . arrayValue ( exportMethods , [ i ] ) . value . returnType ;
m . name = QB . arrayValue ( exportMethods , [ i ] ) . value . name ;
m . jsname = QB . arrayValue ( exportMethods , [ i ] ) . value . jsname ;
m . uname = QB . arrayValue ( exportMethods , [ i ] ) . value . uname ;
m . argc = QB . arrayValue ( exportMethods , [ i ] ) . value . argc ;
m . args = QB . arrayValue ( exportMethods , [ i ] ) . value . args ;
m . sync = QB . arrayValue ( exportMethods , [ i ] ) . value . sync ;
break ;
}
}
}
2022-02-16 17:40:03 +00:00
FindMethod = found ;
return FindMethod ;
}
async function sub _ConvertMethods ( ) {
if ( QB . halted ( ) ) { return ; }
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( 0 , "" ) ;
2022-02-16 17:40:03 +00:00
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _UBound ( methods ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
if ( ( QB . arrayValue ( methods , [ i ] ) . value . line != 0 ) ) {
var lastLine = 0 ; // INTEGER
lastLine = QB . arrayValue ( methods , [ i + 1 ] ) . value . line - 1 ;
if ( lastLine < 0 ) {
2022-03-30 22:37:36 +00:00
lastLine = ( QB . func _UBound ( lines ) ) ;
2022-02-16 17:40:03 +00:00
}
2022-03-04 22:28:32 +00:00
QB . resizeArray ( localVars , [ { l : 1 , u : 0 } ] , { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } , false ) ; // VARIABLE
2022-02-16 17:40:03 +00:00
var asyncModifier = '' ; // STRING
2022-03-04 22:28:32 +00:00
asyncModifier = "async " ;
2022-02-16 17:40:03 +00:00
var methodDec = '' ; // STRING
methodDec = asyncModifier + "function " + QB . arrayValue ( methods , [ i ] ) . value . jsname + "(" ;
if ( QB . arrayValue ( methods , [ i ] ) . value . argc > 0 ) {
2022-03-04 22:28:32 +00:00
var args = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-02-16 17:40:03 +00:00
var c = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
c = ( await func _Split ( QB . arrayValue ( methods , [ i ] ) . value . args , "," , args ) ) ;
2022-02-16 17:40:03 +00:00
var a = 0 ; // INTEGER
for ( a = 1 ; a <= c ; a = a + 1 ) { if ( QB . halted ( ) ) { return ; }
var v = 0 ; // INTEGER
2022-03-04 22:28:32 +00:00
var parts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-03-30 22:37:36 +00:00
v = ( await func _Split ( QB . arrayValue ( args , [ a ] ) . value , ":" , parts ) ) ;
2022-02-16 17:40:03 +00:00
methodDec = methodDec + QB . arrayValue ( parts , [ 1 ] ) . value + "/*" + QB . arrayValue ( parts , [ 2 ] ) . value + "*/" ;
if ( a < c ) {
methodDec = methodDec + "," ;
}
var bvar = { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ; // VARIABLE
bvar . name = QB . arrayValue ( parts , [ 1 ] ) . value ;
bvar . type = QB . arrayValue ( parts , [ 2 ] ) . value ;
2022-03-30 22:37:36 +00:00
bvar . typeId = ( await func _FindTypeId ( bvar . type ) ) ;
2022-02-16 17:40:03 +00:00
if ( QB . arrayValue ( parts , [ 3 ] ) . value == "true" ) {
bvar . isArray = True ;
}
bvar . jsname = "" ;
2022-03-30 22:37:36 +00:00
await sub _AddVariable ( bvar , localVars ) ;
2022-02-16 17:40:03 +00:00
}
}
methodDec = methodDec + ") {" ;
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( QB . arrayValue ( methods , [ i ] ) . value . line , methodDec ) ;
await sub _AddJSLine ( QB . arrayValue ( methods , [ i ] ) . value . line , "if (QB.halted()) { return; }" ) ;
2022-02-16 17:40:03 +00:00
if ( QB . arrayValue ( methods , [ i ] ) . value . type == "FUNCTION" ) {
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( QB . arrayValue ( methods , [ i ] ) . value . line , "var " + ( await func _RemoveSuffix ( QB . arrayValue ( methods , [ i ] ) . value . name ) ) + " = null;" ) ;
2022-02-16 17:40:03 +00:00
}
currentMethod = QB . arrayValue ( methods , [ i ] ) . value . name ;
2022-03-30 22:37:36 +00:00
await sub _ConvertLines ( QB . arrayValue ( methods , [ i ] ) . value . line + 1 , lastLine - 1 , QB . arrayValue ( methods , [ i ] ) . value . name ) ;
2022-02-16 17:40:03 +00:00
if ( QB . arrayValue ( methods , [ i ] ) . value . type == "FUNCTION" ) {
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( lastLine , "return " + ( await func _RemoveSuffix ( QB . arrayValue ( methods , [ i ] ) . value . name ) ) + ";" ) ;
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
await sub _AddJSLine ( lastLine , "}" ) ;
2022-02-16 17:40:03 +00:00
}
}
2022-04-18 16:27:23 +00:00
for ( i = 1 ; i <= ( QB . func _UBound ( exportLines ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
await sub _AddJSLine ( i , QB . arrayValue ( exportLines , [ i ] ) . value ) ;
}
QB . resizeArray ( exportLines , [ { l : 1 , u : 0 } ] , '' , false ) ; // STRING
2022-02-16 17:40:03 +00:00
}
async function sub _ReadLinesFromFile ( filename /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var fline = '' ; // STRING
var lineIndex = 0 ; // INTEGER
2022-04-26 03:56:54 +00:00
var rawJS = 0 ; // SINGLE
2022-02-16 17:40:03 +00:00
// Open filename For Input As #1
while ( ! ( ( 1 ) ) ) { if ( QB . halted ( ) ) { return ; }
var _ _ _v7055475 = new Array ( 2 ) ;
2022-03-04 22:28:32 +00:00
QB . sub _LineInput ( _ _ _v7055475 , false , false , undefined ) ;
2022-02-16 17:40:03 +00:00
fline = _ _ _v7055475 [ 1 ] ;
lineIndex = lineIndex + 1 ;
2022-03-30 22:37:36 +00:00
if ( ( QB . func _ _Trim ( fline ) ) != "" ) {
while ( ( await func _EndsWith ( fline , " _" ) ) ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
var nextLine = '' ; // STRING
var _ _ _v5334240 = new Array ( 2 ) ;
2022-03-04 22:28:32 +00:00
QB . sub _LineInput ( _ _ _v5334240 , false , false , undefined ) ;
2022-02-16 17:40:03 +00:00
nextLine = _ _ _v5334240 [ 1 ] ;
2022-03-30 22:37:36 +00:00
fline = ( QB . func _Left ( fline , ( QB . func _Len ( fline ) ) - 1 ) ) + nextLine ;
2022-02-16 17:40:03 +00:00
}
2022-04-26 03:56:54 +00:00
rawJS = ( await func _ReadLine ( lineIndex , fline , rawJS ) ) ;
2022-02-16 17:40:03 +00:00
}
}
// Close #1
}
async function sub _ReadLinesFromText ( sourceText /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
2022-03-04 22:28:32 +00:00
var sourceLines = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-04-26 03:56:54 +00:00
var rawJS = 0 ; // SINGLE
2022-02-16 17:40:03 +00:00
var lcount = 0 ; // INTEGER
var i = 0 ; // INTEGER
2022-05-02 21:00:21 +00:00
lcount = ( await func _Split ( sourceText , await func _LF ( ) , sourceLines ) ) ;
2022-02-16 17:40:03 +00:00
for ( i = 1 ; i <= lcount ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
var fline = '' ; // STRING
fline = QB . arrayValue ( sourceLines , [ i ] ) . value ;
2022-03-30 22:37:36 +00:00
if ( ( QB . func _ _Trim ( fline ) ) != "" ) {
2022-02-16 17:40:03 +00:00
var lineIndex = 0 ; // INTEGER
lineIndex = i ;
2022-04-18 16:27:23 +00:00
if ( ( await func _StartsWith ( ( QB . func _UCase ( fline ) ) , "IMPORT" ) ) ) {
var parts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
var pcount = 0 ; // INTEGER
pcount = ( await func _SLSplit ( fline , parts , False ) ) ;
if ( pcount == 4 ) {
var moduleName = '' ; // STRING
var sourceUrl = '' ; // STRING
var importRes = { ok : 0 , status : 0 , statusText : '' , text : '' } ; // FETCHRESPONSE
moduleName = QB . arrayValue ( parts , [ 2 ] ) . value ;
sourceUrl = ( QB . func _Mid ( QB . arrayValue ( parts , [ 4 ] ) . value , 2 , ( QB . func _Len ( QB . arrayValue ( parts , [ 4 ] ) . value ) ) - 2 ) ) ;
await QB . sub _Fetch ( sourceUrl , importRes ) ;
modLevel = modLevel + 1 ;
await sub _QBToJS ( importRes . text , TEXT , moduleName ) ;
await sub _ResetDataStructures ( ) ;
modLevel = modLevel - 1 ;
continue ;
}
}
2022-03-30 22:37:36 +00:00
while ( ( await func _EndsWith ( fline , "_" ) ) ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
i = i + 1 ;
var nextLine = '' ; // STRING
nextLine = QB . arrayValue ( sourceLines , [ i ] ) . value ;
2022-03-30 22:37:36 +00:00
fline = ( QB . func _Left ( fline , ( QB . func _Len ( fline ) ) - 1 ) ) + nextLine ;
2022-02-16 17:40:03 +00:00
}
2022-04-26 03:56:54 +00:00
rawJS = ( await func _ReadLine ( i , fline , rawJS ) ) ;
2022-02-16 17:40:03 +00:00
}
}
}
2022-04-26 03:56:54 +00:00
async function func _ReadLine ( lineIndex /*INTEGER*/ , fline /*STRING*/ , rawJS /*INTEGER*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
2022-04-26 03:56:54 +00:00
var ReadLine = null ;
2022-02-16 17:40:03 +00:00
var quoteDepth = 0 ; // INTEGER
quoteDepth = 0 ;
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _Len ( fline ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
var c = '' ; // STRING
2022-03-30 22:37:36 +00:00
c = ( QB . func _Mid ( fline , i , 1 ) ) ;
if ( c == ( QB . func _Chr ( 34 ) ) ) {
2022-02-16 17:40:03 +00:00
if ( quoteDepth == 0 ) {
quoteDepth = 1 ;
} else {
quoteDepth = 0 ;
}
}
if ( quoteDepth == 0 && c == "'" ) {
2022-03-30 22:37:36 +00:00
fline = ( QB . func _Left ( fline , i - 1 ) ) ;
2022-02-16 17:40:03 +00:00
break ;
}
2022-03-14 20:49:12 +00:00
}
2022-04-26 03:56:54 +00:00
ReadLine = rawJS ;
2022-03-30 22:37:36 +00:00
if ( ( QB . func _ _Trim ( fline ) ) == "" ) {
2022-04-26 03:56:54 +00:00
return ReadLine ;
2022-03-14 20:49:12 +00:00
}
var word = '' ; // STRING
var words = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
var wcount = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
wcount = ( await func _SLSplit ( fline , words , False ) ) ;
2022-04-26 03:56:54 +00:00
if ( rawJS ) {
await sub _AddLine ( lineIndex , fline ) ;
return ReadLine ;
}
if ( ( QB . func _UCase ( QB . arrayValue ( words , [ 1 ] ) . value ) ) == "$IF" && wcount > 1 ) {
if ( ( QB . func _UCase ( QB . arrayValue ( words , [ 2 ] ) . value ) ) == "JAVASCRIPT" ) {
rawJS = True ;
await sub _AddLine ( lineIndex , fline ) ;
ReadLine = rawJS ;
return ReadLine ;
}
}
if ( ( QB . func _UCase ( QB . arrayValue ( words , [ 1 ] ) . value ) ) == "$END" ) {
if ( rawJS ) {
rawJS = ! rawJS ;
}
await sub _AddLine ( lineIndex , fline ) ;
ReadLine = rawJS ;
return ReadLine ;
}
2022-06-10 20:35:28 +00:00
var index = 0 ; // INTEGER
if ( wcount == 1 ) {
if ( ( await func _EndsWith ( QB . arrayValue ( words , [ 1 ] ) . value , ":" ) ) ) {
index = ( QB . func _UBound ( dataLabels ) ) + 1 ;
QB . resizeArray ( dataLabels , [ { l : 1 , u : index } ] , { text : '' , index : 0 } , true ) ; // LABEL
QB . arrayValue ( dataLabels , [ index ] ) . value . text = ( QB . func _Left ( ( QB . func _UCase ( QB . arrayValue ( words , [ 1 ] ) . value ) ) , ( QB . func _Len ( QB . arrayValue ( words , [ 1 ] ) . value ) ) - 1 ) ) ;
QB . arrayValue ( dataLabels , [ index ] ) . value . index = ( QB . func _UBound ( dataArray ) ) ;
return ReadLine ;
}
}
if ( ( QB . func _UCase ( QB . arrayValue ( words , [ 1 ] ) . value ) ) == "DATA" ) {
var dstr = '' ; // STRING
dstr = ( await func _Join ( words , 2 , - 1 , " " ) ) ;
var dcount = 0 ; // INTEGER
var de = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
dcount = ( await func _ListSplit ( dstr , de ) ) ;
for ( i = 1 ; i <= dcount ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
index = ( QB . func _UBound ( dataArray ) ) + 1 ;
QB . resizeArray ( dataArray , [ { l : 1 , u : index } ] , '' , true ) ; // STRING
QB . arrayValue ( dataArray , [ index ] ) . value = QB . arrayValue ( de , [ i ] ) . value ;
}
return ReadLine ;
}
2022-03-14 20:49:12 +00:00
var ifIdx = 0 ; // INTEGER
var thenIdx = 0 ; // INTEGER
var elseIdx = 0 ; // INTEGER
for ( i = 1 ; i <= wcount ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-03-30 22:37:36 +00:00
word = ( QB . func _UCase ( QB . arrayValue ( words , [ i ] ) . value ) ) ;
2022-03-14 20:49:12 +00:00
if ( word == "IF" ) {
ifIdx = i ;
} else if ( word == "THEN" ) {
thenIdx = i ;
} else if ( word == "ELSE" ) {
elseIdx = i ;
}
}
if ( thenIdx > 0 && thenIdx < wcount ) {
2022-03-30 22:37:36 +00:00
await sub _AddLine ( lineIndex , ( await func _Join ( words , 1 , thenIdx , " " ) ) ) ;
2022-03-14 20:49:12 +00:00
if ( elseIdx > 0 ) {
2022-03-30 22:37:36 +00:00
await sub _AddSubLines ( lineIndex , ( await func _Join ( words , thenIdx + 1 , elseIdx - 1 , " " ) ) ) ;
await sub _AddLine ( lineIndex , "Else" ) ;
await sub _AddSubLines ( lineIndex , ( await func _Join ( words , elseIdx + 1 , - 1 , " " ) ) ) ;
2022-03-14 20:49:12 +00:00
} else {
2022-03-30 22:37:36 +00:00
await sub _AddSubLines ( lineIndex , ( await func _Join ( words , thenIdx + 1 , - 1 , " " ) ) ) ;
2022-03-14 20:49:12 +00:00
}
2022-03-30 22:37:36 +00:00
await sub _AddLine ( lineIndex , "End If" ) ;
2022-03-14 20:49:12 +00:00
} else {
2022-03-30 22:37:36 +00:00
await sub _AddSubLines ( lineIndex , fline ) ;
2022-03-14 20:49:12 +00:00
}
2022-04-26 03:56:54 +00:00
return ReadLine ;
2022-03-14 20:49:12 +00:00
}
async function sub _AddSubLines ( lineIndex /*INTEGER*/ , fline /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var quoteDepth = 0 ; // INTEGER
quoteDepth = 0 ;
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _Len ( fline ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-03-14 20:49:12 +00:00
var c = '' ; // STRING
2022-03-30 22:37:36 +00:00
c = ( QB . func _Mid ( fline , i , 1 ) ) ;
if ( c == ( QB . func _Chr ( 34 ) ) ) {
2022-03-14 20:49:12 +00:00
if ( quoteDepth == 0 ) {
quoteDepth = 1 ;
} else {
quoteDepth = 0 ;
}
}
2022-02-16 17:40:03 +00:00
if ( quoteDepth == 0 && c == ":" ) {
2022-03-30 22:37:36 +00:00
await sub _AddLine ( lineIndex , ( QB . func _Left ( fline , i - 1 ) ) ) ;
fline = ( QB . func _Right ( fline , ( QB . func _Len ( fline ) ) - i ) ) ;
2022-02-16 17:40:03 +00:00
i = 0 ;
}
}
2022-03-30 22:37:36 +00:00
await sub _AddLine ( lineIndex , fline ) ;
2022-02-16 17:40:03 +00:00
}
async function sub _FindMethods ( ) {
if ( QB . halted ( ) ) { return ; }
var i = 0 ; // INTEGER
var pcount = 0 ; // INTEGER
2022-04-26 03:56:54 +00:00
var rawJS = 0 ; // INTEGER
2022-03-04 22:28:32 +00:00
var parts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _UBound ( lines ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
pcount = ( await func _Split ( QB . arrayValue ( lines , [ i ] ) . value . text , " " , parts ) ) ;
2022-02-16 17:40:03 +00:00
var word = '' ; // STRING
2022-03-30 22:37:36 +00:00
word = ( QB . func _UCase ( QB . arrayValue ( parts , [ 1 ] ) . value ) ) ;
2022-04-26 03:56:54 +00:00
if ( word == "$IF" && pcount > 1 ) {
if ( ( QB . func _UCase ( QB . arrayValue ( parts , [ 2 ] ) . value ) ) == "JAVASCRIPT" ) {
rawJS = True ;
}
}
if ( word == "$END" && rawJS ) {
rawJS = False ;
}
if ( rawJS ) {
continue ;
}
2022-02-16 17:40:03 +00:00
if ( word == "FUNCTION" || word == "SUB" ) {
2022-03-04 22:28:32 +00:00
var m = { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } ; // METHOD
2022-02-16 17:40:03 +00:00
m . line = i ;
2022-03-30 22:37:36 +00:00
m . type = ( QB . func _UCase ( QB . arrayValue ( parts , [ 1 ] ) . value ) ) ;
2022-02-16 17:40:03 +00:00
m . name = QB . arrayValue ( parts , [ 2 ] ) . value ;
m . argc = 0 ;
m . args = "" ;
2022-03-04 22:28:32 +00:00
var args = QB . initArray ( [ { l : 1 , u : 0 } ] , { name : '' , type : '' } ) ; // ARGUMENT
2022-03-30 22:37:36 +00:00
if ( ( QB . func _UBound ( parts ) ) > 2 ) {
2022-02-16 17:40:03 +00:00
var a = 0 ; // INTEGER
var args = '' ; // STRING
args = "" ;
2022-03-30 22:37:36 +00:00
for ( a = 3 ; a <= ( QB . func _UBound ( parts ) ) ; a = a + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
args = args + QB . arrayValue ( parts , [ a ] ) . value + " " ;
}
2022-03-30 22:37:36 +00:00
args = ( QB . func _Mid ( ( QB . func _ _Trim ( args ) ) , 2 , ( QB . func _Len ( ( QB . func _ _Trim ( args ) ) ) ) - 2 ) ) ;
2022-03-04 22:28:32 +00:00
var arga = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-03-30 22:37:36 +00:00
m . argc = ( await func _ListSplit ( args , arga ) ) ;
2022-02-16 17:40:03 +00:00
args = "" ;
for ( a = 1 ; a <= m . argc ; a = a + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-03-04 22:28:32 +00:00
var aparts = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-02-16 17:40:03 +00:00
var apcount = 0 ; // INTEGER
var argname = '' ; // STRING
var isArray = '' ; // STRING
isArray = "false" ;
2022-03-30 22:37:36 +00:00
apcount = ( await func _Split ( QB . arrayValue ( arga , [ a ] ) . value , " " , aparts ) ) ;
2022-02-16 17:40:03 +00:00
argname = QB . arrayValue ( aparts , [ 1 ] ) . value ;
2022-03-30 22:37:36 +00:00
if ( ( await func _EndsWith ( argname , "()" ) ) ) {
2022-02-16 17:40:03 +00:00
isArray = "true" ;
2022-03-30 22:37:36 +00:00
argname = ( QB . func _Left ( argname , ( QB . func _Len ( argname ) ) - 2 ) ) ;
2022-02-16 17:40:03 +00:00
}
if ( apcount == 3 ) {
2022-03-30 22:37:36 +00:00
args = args + argname + ":" + ( QB . func _UCase ( QB . arrayValue ( aparts , [ 3 ] ) . value ) ) + ":" + isArray ;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
args = args + argname + ":" + ( await func _DataTypeFromName ( QB . arrayValue ( aparts , [ 1 ] ) . value ) ) + ":" + isArray ;
2022-02-16 17:40:03 +00:00
}
if ( a != m . argc ) {
args = args + "," ;
}
}
m . args = args ;
}
2022-03-30 22:37:36 +00:00
await sub _AddMethod ( m , "" , True ) ;
2022-02-16 17:40:03 +00:00
}
}
}
2022-03-04 22:28:32 +00:00
async function func _Split ( sourceString /*STRING*/ , delimiter /*STRING*/ , results /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var Split = null ;
var cstr = '' ; // STRING
var p = 0 ; // LONG
var curpos = 0 ; // LONG
var arrpos = 0 ; // LONG
var dpos = 0 ; // LONG
cstr = sourceString ;
if ( delimiter == " " ) {
2022-03-30 22:37:36 +00:00
cstr = ( QB . func _RTrim ( ( QB . func _LTrim ( cstr ) ) ) ) ;
p = ( QB . func _InStr ( cstr , " " ) ) ;
2022-02-16 17:40:03 +00:00
while ( p > 0 ) { if ( QB . halted ( ) ) { return ; }
2022-03-30 22:37:36 +00:00
cstr = ( QB . func _Mid ( cstr , 1 , p - 1 ) ) + ( QB . func _Mid ( cstr , p + 1 ) ) ;
p = ( QB . func _InStr ( cstr , " " ) ) ;
2022-02-16 17:40:03 +00:00
}
}
curpos = 1 ;
arrpos = 0 ;
2022-03-30 22:37:36 +00:00
dpos = ( QB . func _InStr ( curpos , cstr , delimiter ) ) ;
2022-02-16 17:40:03 +00:00
while ( ! ( dpos == 0 ) ) { if ( QB . halted ( ) ) { return ; }
arrpos = arrpos + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : arrpos } ] , '' , true ) ; // STRING
2022-03-30 22:37:36 +00:00
QB . arrayValue ( results , [ arrpos ] ) . value = ( QB . func _Mid ( cstr , curpos , dpos - curpos ) ) ;
curpos = dpos + ( QB . func _Len ( delimiter ) ) ;
dpos = ( QB . func _InStr ( curpos , cstr , delimiter ) ) ;
2022-02-16 17:40:03 +00:00
}
arrpos = arrpos + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : arrpos } ] , '' , true ) ; // STRING
2022-03-30 22:37:36 +00:00
QB . arrayValue ( results , [ arrpos ] ) . value = ( QB . func _Mid ( cstr , curpos ) ) ;
2022-02-16 17:40:03 +00:00
Split = arrpos ;
return Split ;
}
2022-03-14 20:49:12 +00:00
async function func _SLSplit ( sourceString /*STRING*/ , results /*STRING*/ , escapeStrings /*INTEGER*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var SLSplit = null ;
var cstr = '' ; // STRING
var p = 0 ; // LONG
var curpos = 0 ; // LONG
var arrpos = 0 ; // LONG
var dpos = 0 ; // LONG
2022-03-30 22:37:36 +00:00
cstr = ( QB . func _ _Trim ( sourceString ) ) ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : 0 } ] , '' , false ) ; // STRING
2022-02-16 17:40:03 +00:00
var lastChar = '' ; // STRING
var quoteMode = 0 ; // INTEGER
var result = '' ; // STRING
var count = 0 ; // INTEGER
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _Len ( cstr ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
var c = '' ; // STRING
2022-03-30 22:37:36 +00:00
c = ( QB . func _Mid ( cstr , i , 1 ) ) ;
if ( c == ( QB . func _Chr ( 34 ) ) ) {
2022-02-16 17:40:03 +00:00
quoteMode = ! quoteMode ;
result = result + c ;
2022-03-14 20:49:12 +00:00
if ( ! quoteMode && escapeStrings ) {
2022-05-02 21:00:21 +00:00
result = ( await func _Replace ( result , "\\" , "\\\\" ) ) ;
2022-02-16 17:40:03 +00:00
}
} else if ( c == " " ) {
if ( quoteMode ) {
result = result + c ;
} else if ( lastChar == " " ) {
} else {
2022-03-30 22:37:36 +00:00
count = ( QB . func _UBound ( results ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : count } ] , '' , true ) ; // STRING
2022-02-16 17:40:03 +00:00
QB . arrayValue ( results , [ count ] ) . value = result ;
result = "" ;
}
} else {
result = result + c ;
}
lastChar = c ;
}
if ( result != "" ) {
2022-03-30 22:37:36 +00:00
count = ( QB . func _UBound ( results ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : count } ] , '' , true ) ; // STRING
2022-02-16 17:40:03 +00:00
QB . arrayValue ( results , [ count ] ) . value = result ;
}
2022-03-30 22:37:36 +00:00
SLSplit = ( QB . func _UBound ( results ) ) ;
2022-02-16 17:40:03 +00:00
return SLSplit ;
}
2022-03-04 22:28:32 +00:00
async function func _SLSplit2 ( sourceString /*STRING*/ , results /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var SLSplit2 = null ;
var cstr = '' ; // STRING
var p = 0 ; // LONG
var curpos = 0 ; // LONG
var arrpos = 0 ; // LONG
var dpos = 0 ; // LONG
2022-03-30 22:37:36 +00:00
cstr = ( QB . func _ _Trim ( sourceString ) ) ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : 0 } ] , '' , false ) ; // STRING
var lastChar = '' ; // STRING
var quoteMode = 0 ; // INTEGER
var result = '' ; // STRING
var paren = 0 ; // INTEGER
var count = 0 ; // INTEGER
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _Len ( cstr ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-03-04 22:28:32 +00:00
var c = '' ; // STRING
2022-03-30 22:37:36 +00:00
c = ( QB . func _Mid ( cstr , i , 1 ) ) ;
if ( c == ( QB . func _Chr ( 34 ) ) ) {
2022-03-04 22:28:32 +00:00
quoteMode = ! quoteMode ;
result = result + c ;
} else if ( quoteMode ) {
result = result + c ;
} else if ( c == "(" ) {
paren = paren + 1 ;
result = result + c ;
} else if ( c == ")" ) {
paren = paren - 1 ;
result = result + c ;
} else if ( paren > 0 ) {
result = result + c ;
} else if ( c == " " ) {
if ( lastChar == " " ) {
} else {
2022-03-30 22:37:36 +00:00
count = ( QB . func _UBound ( results ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : count } ] , '' , true ) ; // STRING
QB . arrayValue ( results , [ count ] ) . value = result ;
result = "" ;
}
} else {
result = result + c ;
}
lastChar = c ;
}
if ( result != "" ) {
2022-03-30 22:37:36 +00:00
count = ( QB . func _UBound ( results ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : count } ] , '' , true ) ; // STRING
QB . arrayValue ( results , [ count ] ) . value = result ;
}
2022-03-30 22:37:36 +00:00
SLSplit2 = ( QB . func _UBound ( results ) ) ;
2022-03-04 22:28:32 +00:00
return SLSplit2 ;
}
async function func _ListSplit ( sourceString /*STRING*/ , results /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var ListSplit = null ;
var cstr = '' ; // STRING
var p = 0 ; // LONG
var curpos = 0 ; // LONG
var arrpos = 0 ; // LONG
var dpos = 0 ; // LONG
2022-03-30 22:37:36 +00:00
cstr = ( QB . func _ _Trim ( sourceString ) ) ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : 0 } ] , '' , false ) ; // STRING
2022-02-16 17:40:03 +00:00
var quoteMode = 0 ; // INTEGER
var result = '' ; // STRING
var count = 0 ; // INTEGER
var paren = 0 ; // INTEGER
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _Len ( cstr ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
var c = '' ; // STRING
2022-03-30 22:37:36 +00:00
c = ( QB . func _Mid ( cstr , i , 1 ) ) ;
if ( c == ( QB . func _Chr ( 34 ) ) ) {
2022-02-16 17:40:03 +00:00
quoteMode = ! quoteMode ;
result = result + c ;
} else if ( quoteMode ) {
result = result + c ;
} else if ( c == "(" ) {
paren = paren + 1 ;
result = result + c ;
} else if ( c == ")" ) {
paren = paren - 1 ;
result = result + c ;
} else if ( paren > 0 ) {
result = result + c ;
} else if ( c == "," ) {
2022-03-30 22:37:36 +00:00
count = ( QB . func _UBound ( results ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : count } ] , '' , true ) ; // STRING
2022-02-16 17:40:03 +00:00
QB . arrayValue ( results , [ count ] ) . value = result ;
result = "" ;
} else {
result = result + c ;
}
}
if ( result != "" ) {
2022-03-30 22:37:36 +00:00
count = ( QB . func _UBound ( results ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : count } ] , '' , true ) ; // STRING
2022-02-16 17:40:03 +00:00
QB . arrayValue ( results , [ count ] ) . value = result ;
}
2022-03-30 22:37:36 +00:00
ListSplit = ( QB . func _UBound ( results ) ) ;
2022-02-16 17:40:03 +00:00
return ListSplit ;
}
2022-03-04 22:28:32 +00:00
async function func _PrintSplit ( sourceString /*STRING*/ , results /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var PrintSplit = null ;
var cstr = '' ; // STRING
var p = 0 ; // LONG
var curpos = 0 ; // LONG
var arrpos = 0 ; // LONG
var dpos = 0 ; // LONG
2022-03-30 22:37:36 +00:00
cstr = ( QB . func _ _Trim ( sourceString ) ) ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : 0 } ] , '' , false ) ; // STRING
2022-02-16 17:40:03 +00:00
var quoteMode = 0 ; // INTEGER
var result = '' ; // STRING
var count = 0 ; // INTEGER
var paren = 0 ; // INTEGER
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _Len ( cstr ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
var c = '' ; // STRING
2022-03-30 22:37:36 +00:00
c = ( QB . func _Mid ( cstr , i , 1 ) ) ;
if ( c == ( QB . func _Chr ( 34 ) ) ) {
2022-02-16 17:40:03 +00:00
quoteMode = ! quoteMode ;
result = result + c ;
} else if ( quoteMode ) {
result = result + c ;
} else if ( c == "(" ) {
paren = paren + 1 ;
result = result + c ;
} else if ( c == ")" ) {
paren = paren - 1 ;
result = result + c ;
} else if ( paren > 0 ) {
result = result + c ;
} else if ( c == "," || c == ";" ) {
if ( result != "" ) {
2022-03-30 22:37:36 +00:00
count = ( QB . func _UBound ( results ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : count } ] , '' , true ) ; // STRING
2022-02-16 17:40:03 +00:00
QB . arrayValue ( results , [ count ] ) . value = result ;
result = "" ;
}
2022-03-30 22:37:36 +00:00
count = ( QB . func _UBound ( results ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : count } ] , '' , true ) ; // STRING
2022-02-16 17:40:03 +00:00
QB . arrayValue ( results , [ count ] ) . value = c ;
} else {
result = result + c ;
}
}
if ( result != "" ) {
2022-03-30 22:37:36 +00:00
count = ( QB . func _UBound ( results ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( results , [ { l : 1 , u : count } ] , '' , true ) ; // STRING
2022-02-16 17:40:03 +00:00
QB . arrayValue ( results , [ count ] ) . value = result ;
}
2022-03-30 22:37:36 +00:00
PrintSplit = ( QB . func _UBound ( results ) ) ;
2022-02-16 17:40:03 +00:00
return PrintSplit ;
}
async function sub _PrintMethods ( ) {
if ( QB . halted ( ) ) { return ; }
await QB . sub _Print ( [ "" ] ) ;
await QB . sub _Print ( [ "Methods" ] ) ;
await QB . sub _Print ( [ "------------------------------------------------------------" ] ) ;
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _UBound ( methods ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-03-04 22:28:32 +00:00
var m = { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } ; // METHOD
2022-02-16 17:40:03 +00:00
m = QB . arrayValue ( methods , [ i ] ) . value ;
2022-03-30 22:37:36 +00:00
await QB . sub _Print ( [ ( QB . func _Str ( m . line ) ) + ": " + m . type + " - " + m . name + " [" + m . jsname + "] - " + m . returnType + " - " + m . args ] ) ;
2022-02-16 17:40:03 +00:00
}
}
async function sub _PrintTypes ( ) {
if ( QB . halted ( ) ) { return ; }
await QB . sub _Print ( [ "" ] ) ;
await QB . sub _Print ( [ "Types" ] ) ;
await QB . sub _Print ( [ "------------------------------------------------------------" ] ) ;
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _UBound ( types ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
var t = { line : 0 , name : '' , argc : 0 , args : '' } ; // QBTYPE
t = QB . arrayValue ( types , [ i ] ) . value ;
2022-03-30 22:37:36 +00:00
await QB . sub _Print ( [ ( QB . func _Str ( t . line ) ) + ": " + t . name ] ) ;
2022-02-16 17:40:03 +00:00
var v = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( v = 1 ; v <= ( QB . func _UBound ( typeVars ) ) ; v = v + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-02-16 17:40:03 +00:00
if ( QB . arrayValue ( typeVars , [ i ] ) . value . typeId == i ) {
await QB . sub _Print ( [ " -> " + QB . arrayValue ( typeVars , [ v ] ) . value . name + ": " + QB . arrayValue ( typeVars , [ v ] ) . value . type ] ) ;
}
}
}
}
2022-04-18 16:27:23 +00:00
async function func _CopyMethod ( fromMethod /*METHOD*/ , toMethod /*METHOD*/ ) {
if ( QB . halted ( ) ) { return ; }
var CopyMethod = null ;
toMethod . type = fromMethod . type ;
toMethod . name = fromMethod . name ;
return CopyMethod ;
}
2022-03-04 22:28:32 +00:00
async function sub _AddMethod ( m /*METHOD*/ , prefix /*STRING*/ , sync /*INTEGER*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var mcount = 0 ; // SINGLE
2022-03-30 22:37:36 +00:00
mcount = ( QB . func _UBound ( methods ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( methods , [ { l : 1 , u : mcount } ] , { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } , true ) ; // METHOD
2022-02-16 17:40:03 +00:00
if ( m . type == "FUNCTION" ) {
2022-03-30 22:37:36 +00:00
m . returnType = ( await func _DataTypeFromName ( m . name ) ) ;
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
m . uname = ( QB . func _UCase ( ( await func _RemoveSuffix ( m . name ) ) ) ) ;
m . jsname = ( await func _MethodJS ( m , prefix ) ) ;
2022-03-04 22:28:32 +00:00
m . sync = sync ;
2022-02-16 17:40:03 +00:00
QB . arrayValue ( methods , [ mcount ] ) . value = m ;
}
2022-04-18 16:27:23 +00:00
async function sub _AddExportMethod ( m /*METHOD*/ , prefix /*STRING*/ , sync /*INTEGER*/ ) {
if ( QB . halted ( ) ) { return ; }
var mcount = 0 ; // SINGLE
mcount = ( QB . func _UBound ( exportMethods ) ) + 1 ;
QB . resizeArray ( exportMethods , [ { l : 1 , u : mcount } ] , { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } , true ) ; // METHOD
if ( m . type == "FUNCTION" ) {
m . returnType = ( await func _DataTypeFromName ( m . name ) ) ;
}
m . uname = ( QB . func _UCase ( ( await func _RemoveSuffix ( m . name ) ) ) ) ;
m . jsname = ( await func _MethodJS ( m , prefix ) ) ;
m . uname = ( QB . func _UCase ( prefix ) ) + m . uname ;
m . name = prefix + m . name ;
m . sync = sync ;
QB . arrayValue ( exportMethods , [ mcount ] ) . value = m ;
}
2022-04-30 03:24:36 +00:00
async function sub _AddExportConst ( vname /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var v = { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ; // VARIABLE
v . type = "CONST" ;
v . name = vname ;
v . isConst = True ;
await sub _AddVariable ( v , exportConsts ) ;
}
2022-03-04 22:28:32 +00:00
async function sub _AddGXMethod ( mtype /*STRING*/ , mname /*STRING*/ , sync /*INTEGER*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var mcount = 0 ; // SINGLE
2022-03-30 22:37:36 +00:00
mcount = ( QB . func _UBound ( methods ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( methods , [ { l : 1 , u : mcount } ] , { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } , true ) ; // METHOD
var m = { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } ; // METHOD
2022-02-16 17:40:03 +00:00
m . type = mtype ;
m . name = mname ;
2022-03-30 22:37:36 +00:00
m . uname = ( QB . func _UCase ( m . name ) ) ;
2022-03-04 22:28:32 +00:00
m . sync = sync ;
2022-03-30 22:37:36 +00:00
m . jsname = ( await func _GXMethodJS ( ( await func _RemoveSuffix ( mname ) ) ) ) ;
2022-02-16 17:40:03 +00:00
if ( mtype == "FUNCTION" ) {
2022-03-30 22:37:36 +00:00
m . returnType = ( await func _DataTypeFromName ( mname ) ) ;
2022-02-16 17:40:03 +00:00
}
QB . arrayValue ( methods , [ mcount ] ) . value = m ;
}
2022-03-04 22:28:32 +00:00
async function sub _AddQBMethod ( mtype /*STRING*/ , mname /*STRING*/ , sync /*INTEGER*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
2022-03-04 22:28:32 +00:00
var m = { line : 0 , type : '' , returnType : '' , name : '' , uname : '' , argc : 0 , args : '' , jsname : '' , sync : 0 } ; // METHOD
2022-02-16 17:40:03 +00:00
m . type = mtype ;
m . name = mname ;
2022-03-30 22:37:36 +00:00
await sub _AddMethod ( m , "QB." , sync ) ;
2022-02-16 17:40:03 +00:00
}
async function sub _AddLine ( lineIndex /*INTEGER*/ , fline /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
2022-03-30 22:37:36 +00:00
await sub _ _ _AddLine ( lineIndex , fline ) ;
2022-02-16 17:40:03 +00:00
}
async function sub _ _ _AddLine ( lineIndex /*INTEGER*/ , fline /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var lcount = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
lcount = ( QB . func _UBound ( lines ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( lines , [ { l : 1 , u : lcount } ] , { line : 0 , text : '' } , true ) ; // CODELINE
2022-02-16 17:40:03 +00:00
QB . arrayValue ( lines , [ lcount ] ) . value . line = lineIndex ;
QB . arrayValue ( lines , [ lcount ] ) . value . text = fline ;
}
async function sub _AddJSLine ( sourceLine /*INTEGER*/ , jsline /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var lcount = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
lcount = ( QB . func _UBound ( jsLines ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( jsLines , [ { l : 1 , u : lcount } ] , { line : 0 , text : '' } , true ) ; // CODELINE
2022-02-16 17:40:03 +00:00
QB . arrayValue ( jsLines , [ lcount ] ) . value . line = sourceLine ;
QB . arrayValue ( jsLines , [ lcount ] ) . value . text = jsline ;
}
async function sub _AddWarning ( sourceLine /*INTEGER*/ , msgText /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var lcount = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
lcount = ( QB . func _UBound ( warnings ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( warnings , [ { l : 1 , u : lcount } ] , { line : 0 , text : '' } , true ) ; // CODELINE
2022-02-16 17:40:03 +00:00
var l = 0 ; // INTEGER
if ( ( sourceLine > 0 ) ) {
l = QB . arrayValue ( lines , [ sourceLine ] ) . value . line ;
}
QB . arrayValue ( warnings , [ lcount ] ) . value . line = l ;
QB . arrayValue ( warnings , [ lcount ] ) . value . text = msgText ;
}
async function sub _AddConst ( vname /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var v = { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ; // VARIABLE
v . type = "CONST" ;
v . name = vname ;
v . isConst = True ;
2022-03-30 22:37:36 +00:00
await sub _AddVariable ( v , globalVars ) ;
2022-02-16 17:40:03 +00:00
}
async function sub _AddGXConst ( vname /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var v = { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ; // VARIABLE
v . type = "CONST" ;
v . name = vname ;
if ( vname == "GX_TRUE" ) {
v . jsname = "true" ;
} else if ( vname == "GX_FALSE" ) {
v . jsname = "false" ;
} else {
var jsname = '' ; // STRING
2022-03-30 22:37:36 +00:00
jsname = ( QB . func _Mid ( vname , 3 , ( QB . func _Len ( vname ) ) - 2 ) ) ;
if ( ( QB . func _Left ( jsname , 1 ) ) == "_" ) {
jsname = ( QB . func _Right ( jsname , ( QB . func _Len ( jsname ) ) - 1 ) ) ;
2022-02-16 17:40:03 +00:00
}
v . jsname = "GX." + jsname ;
}
v . isConst = True ;
2022-03-30 22:37:36 +00:00
await sub _AddVariable ( v , globalVars ) ;
}
async function sub _AddQBConst ( vname /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var v = { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ; // VARIABLE
v . type = "CONST" ;
v . name = vname ;
v . jsname = "QB." + vname ;
v . isConst = True ;
await sub _AddVariable ( v , globalVars ) ;
2022-02-16 17:40:03 +00:00
}
async function sub _AddGlobal ( vname /*STRING*/ , vtype /*STRING*/ , arraySize /*INTEGER*/ ) {
if ( QB . halted ( ) ) { return ; }
var v = { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ; // VARIABLE
v . type = vtype ;
v . name = vname ;
v . isArray = arraySize > - 1 ;
v . arraySize = arraySize ;
2022-03-30 22:37:36 +00:00
await sub _AddVariable ( v , globalVars ) ;
2022-02-16 17:40:03 +00:00
}
async function sub _AddLocal ( vname /*STRING*/ , vtype /*STRING*/ , arraySize /*INTEGER*/ ) {
if ( QB . halted ( ) ) { return ; }
var v = { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ; // VARIABLE
v . type = vtype ;
v . name = vname ;
v . isArray = arraySize > - 1 ;
v . arraySize = arraySize ;
2022-03-30 22:37:36 +00:00
await sub _AddVariable ( v , localVars ) ;
2022-02-16 17:40:03 +00:00
}
async function sub _AddVariable ( bvar /*VARIABLE*/ , vlist /*VARIABLE*/ ) {
if ( QB . halted ( ) ) { return ; }
var vcount = 0 ; // SINGLE
2022-03-30 22:37:36 +00:00
vcount = ( QB . func _UBound ( vlist ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( vlist , [ { l : 1 , u : vcount } ] , { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } , true ) ; // VARIABLE
var nvar = { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ; // VARIABLE
nvar . type = bvar . type ;
nvar . name = bvar . name ;
nvar . jsname = bvar . jsname ;
nvar . isConst = bvar . isConst ;
nvar . isArray = bvar . isArray ;
nvar . arraySize = bvar . arraySize ;
nvar . typeId = bvar . typeId ;
if ( nvar . jsname == "" ) {
2022-03-30 22:37:36 +00:00
nvar . jsname = ( await func _RemoveSuffix ( nvar . name ) ) ;
2022-03-04 22:28:32 +00:00
}
QB . arrayValue ( vlist , [ vcount ] ) . value = nvar ;
2022-02-16 17:40:03 +00:00
}
async function sub _AddType ( t /*QBTYPE*/ ) {
if ( QB . halted ( ) ) { return ; }
var tcount = 0 ; // SINGLE
2022-03-30 22:37:36 +00:00
tcount = ( QB . func _UBound ( types ) ) + 1 ;
2022-03-04 22:28:32 +00:00
QB . resizeArray ( types , [ { l : 1 , u : tcount } ] , { line : 0 , name : '' , argc : 0 , args : '' } , true ) ; // QBTYPE
2022-02-16 17:40:03 +00:00
QB . arrayValue ( types , [ tcount ] ) . value = t ;
}
async function sub _AddSystemType ( tname /*STRING*/ , args /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var t = { line : 0 , name : '' , argc : 0 , args : '' } ; // QBTYPE
t . name = tname ;
2022-03-30 22:37:36 +00:00
await sub _AddType ( t ) ;
2022-02-16 17:40:03 +00:00
var typeId = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
typeId = ( QB . func _UBound ( types ) ) ;
2022-02-16 17:40:03 +00:00
var count = 0 ; // INTEGER
2022-03-04 22:28:32 +00:00
var pairs = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-03-30 22:37:36 +00:00
count = ( await func _Split ( args , "," , pairs ) ) ;
2022-02-16 17:40:03 +00:00
var i = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _UBound ( pairs ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
2022-03-04 22:28:32 +00:00
var nv = QB . initArray ( [ { l : 1 , u : 0 } ] , '' ) ; // STRING
2022-03-30 22:37:36 +00:00
count = ( await func _Split ( QB . arrayValue ( pairs , [ i ] ) . value , ":" , nv ) ) ;
2022-02-16 17:40:03 +00:00
var tvar = { type : '' , name : '' , jsname : '' , isConst : 0 , isArray : 0 , arraySize : 0 , typeId : 0 } ; // VARIABLE
tvar . typeId = typeId ;
tvar . name = QB . arrayValue ( nv , [ 1 ] ) . value ;
2022-03-30 22:37:36 +00:00
tvar . type = ( QB . func _UCase ( QB . arrayValue ( nv , [ 2 ] ) . value ) ) ;
await sub _AddVariable ( tvar , typeVars ) ;
2022-02-16 17:40:03 +00:00
}
}
2022-03-04 22:28:32 +00:00
async function func _MainEnd ( ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var MainEnd = null ;
if ( programMethods == 0 ) {
2022-03-30 22:37:36 +00:00
MainEnd = ( QB . func _UBound ( lines ) ) ;
2022-02-16 17:40:03 +00:00
} else {
MainEnd = QB . arrayValue ( methods , [ 1 ] ) . value . line - 1 ;
}
return MainEnd ;
}
2022-03-04 22:28:32 +00:00
async function func _RemoveSuffix ( vname /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var RemoveSuffix = null ;
var i = 0 ; // INTEGER
var done = 0 ; // INTEGER
var c = '' ; // STRING
2022-03-30 22:37:36 +00:00
vname = ( QB . func _ _Trim ( vname ) ) ;
i = ( QB . func _Len ( vname ) ) ;
2022-02-16 17:40:03 +00:00
while ( ! done ) { if ( QB . halted ( ) ) { return ; }
2022-03-30 22:37:36 +00:00
c = ( QB . func _Mid ( vname , i , 1 ) ) ;
2022-02-16 17:40:03 +00:00
if ( c == "`" || c == "%" || c == "&" || c == "$" || c == "~" || c == "!" ) {
i = i - 1 ;
} else {
done = True ;
}
}
2022-03-30 22:37:36 +00:00
RemoveSuffix = ( QB . func _Left ( vname , i ) ) ;
2022-02-16 17:40:03 +00:00
return RemoveSuffix ;
}
2022-03-04 22:28:32 +00:00
async function func _DataTypeFromName ( vname /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var DataTypeFromName = null ;
var dt = '' ; // STRING
2022-03-30 22:37:36 +00:00
if ( ( await func _EndsWith ( vname , "$" ) ) ) {
2022-02-16 17:40:03 +00:00
dt = "STRING" ;
2022-03-30 22:37:36 +00:00
} else if ( ( await func _EndsWith ( vname , "`" ) ) ) {
2022-02-16 17:40:03 +00:00
dt = "_BIT" ;
2022-03-30 22:37:36 +00:00
} else if ( ( await func _EndsWith ( vname , "%%" ) ) ) {
2022-02-16 17:40:03 +00:00
dt = "_BYTE" ;
2022-03-30 22:37:36 +00:00
} else if ( ( await func _EndsWith ( vname , "~%" ) ) ) {
2022-02-16 17:40:03 +00:00
dt = "_UNSIGNED INTEGER" ;
2022-03-30 22:37:36 +00:00
} else if ( ( await func _EndsWith ( vname , "%" ) ) ) {
2022-02-16 17:40:03 +00:00
dt = "INTEGER" ;
2022-03-30 22:37:36 +00:00
} else if ( ( await func _EndsWith ( vname , "~&&" ) ) ) {
2022-02-16 17:40:03 +00:00
dt = "_UNSIGNED INTEGER64" ;
2022-03-30 22:37:36 +00:00
} else if ( ( await func _EndsWith ( vname , "&&" ) ) ) {
2022-02-16 17:40:03 +00:00
dt = "_INTEGER64" ;
2022-03-30 22:37:36 +00:00
} else if ( ( await func _EndsWith ( vname , "~&" ) ) ) {
2022-02-16 17:40:03 +00:00
dt = "_UNSIGNED LONG" ;
2022-03-30 22:37:36 +00:00
} else if ( ( await func _EndsWith ( vname , "##" ) ) ) {
2022-02-16 17:40:03 +00:00
dt = "_FLOAT" ;
2022-03-30 22:37:36 +00:00
} else if ( ( await func _EndsWith ( vname , "#" ) ) ) {
2022-02-16 17:40:03 +00:00
dt = "DOUBLE" ;
2022-03-30 22:37:36 +00:00
} else if ( ( await func _EndsWith ( vname , "~%&" ) ) ) {
2022-02-16 17:40:03 +00:00
dt = "_UNSIGNED _OFFSET" ;
2022-03-30 22:37:36 +00:00
} else if ( ( await func _EndsWith ( vname , "%&" ) ) ) {
2022-02-16 17:40:03 +00:00
dt = "_OFFSET" ;
2022-03-30 22:37:36 +00:00
} else if ( ( await func _EndsWith ( vname , "&" ) ) ) {
2022-02-16 17:40:03 +00:00
dt = "LONG" ;
2022-03-30 22:37:36 +00:00
} else if ( ( await func _EndsWith ( vname , "!" ) ) ) {
2022-02-16 17:40:03 +00:00
dt = "SINGLE" ;
} else {
dt = "SINGLE" ;
}
DataTypeFromName = dt ;
return DataTypeFromName ;
}
2022-03-04 22:28:32 +00:00
async function func _EndsWith ( s /*STRING*/ , finds /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var EndsWith = null ;
2022-03-30 22:37:36 +00:00
if ( ( QB . func _Len ( finds ) ) > ( QB . func _Len ( s ) ) ) {
2022-02-16 17:40:03 +00:00
EndsWith = False ;
return EndsWith ;
}
2022-03-30 22:37:36 +00:00
if ( ( QB . func _ _InStrRev ( s , finds ) ) == ( QB . func _Len ( s ) ) - ( ( QB . func _Len ( finds ) ) - 1 ) ) {
2022-02-16 17:40:03 +00:00
EndsWith = True ;
} else {
EndsWith = False ;
}
return EndsWith ;
}
2022-03-04 22:28:32 +00:00
async function func _StartsWith ( s /*STRING*/ , finds /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var StartsWith = null ;
2022-03-30 22:37:36 +00:00
if ( ( QB . func _Len ( finds ) ) > ( QB . func _Len ( s ) ) ) {
2022-02-16 17:40:03 +00:00
StartsWith = False ;
return StartsWith ;
}
2022-03-30 22:37:36 +00:00
if ( ( QB . func _InStr ( s , finds ) ) == 1 ) {
2022-02-16 17:40:03 +00:00
StartsWith = True ;
} else {
StartsWith = False ;
}
return StartsWith ;
}
2022-03-04 22:28:32 +00:00
async function func _Join ( parts /*STRING*/ , startIndex /*INTEGER*/ , endIndex /*INTEGER*/ , delimiter /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var Join = null ;
if ( endIndex == - 1 ) {
2022-03-30 22:37:36 +00:00
endIndex = ( QB . func _UBound ( parts ) ) ;
2022-02-16 17:40:03 +00:00
}
var s = '' ; // STRING
var i = 0 ; // INTEGER
for ( i = startIndex ; i <= endIndex ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
s = s + QB . arrayValue ( parts , [ i ] ) . value ;
2022-03-30 22:37:36 +00:00
if ( i != ( QB . func _UBound ( parts ) ) ) {
2022-02-16 17:40:03 +00:00
s = s + delimiter ;
}
}
Join = s ;
return Join ;
}
2022-05-02 21:00:21 +00:00
async function func _LPad ( s /*STRING*/ , padChar /*STRING*/ , swidth /*INTEGER*/ ) {
if ( QB . halted ( ) ) { return ; }
var LPad = null ;
var padding = '' ; // STRING
padding = ( QB . func _String ( swidth - ( QB . func _Len ( s ) ) , padChar ) ) ;
LPad = padding + s ;
return LPad ;
}
async function func _Replace ( s /*STRING*/ , searchString /*STRING*/ , newString /*STRING*/ ) {
if ( QB . halted ( ) ) { return ; }
var Replace = null ;
var ns = '' ; // STRING
var i = 0 ; // INTEGER
var slen = 0 ; // INTEGER
slen = ( QB . func _Len ( searchString ) ) ;
for ( i = 1 ; i <= ( QB . func _Len ( s ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
if ( ( QB . func _Mid ( s , i , slen ) ) == searchString ) {
ns = ns + newString ;
i = i + slen - 1 ;
} else {
ns = ns + ( QB . func _Mid ( s , i , 1 ) ) ;
}
}
Replace = ns ;
return Replace ;
}
async function func _LF ( ) {
if ( QB . halted ( ) ) { return ; }
var LF = null ;
LF = ( QB . func _Chr ( 10 ) ) ;
return LF ;
}
async function func _CR ( ) {
if ( QB . halted ( ) ) { return ; }
var CR = null ;
CR = ( QB . func _Chr ( 13 ) ) ;
return CR ;
}
async function func _CRLF ( ) {
if ( QB . halted ( ) ) { return ; }
var CRLF = null ;
CRLF = await func _CR ( ) + await func _LF ( ) ;
return CRLF ;
}
2022-03-04 22:28:32 +00:00
async function func _MethodJS ( m /*METHOD*/ , prefix /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var MethodJS = null ;
var jsname = '' ; // STRING
jsname = prefix ;
if ( m . type == "FUNCTION" ) {
jsname = jsname + "func_" ;
} else {
jsname = jsname + "sub_" ;
}
var i = 0 ; // INTEGER
var c = '' ; // STRING
var a = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = 1 ; i <= ( QB . func _Len ( m . name ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
c = ( QB . func _Mid ( m . name , i , 1 ) ) ;
a = ( QB . func _Asc ( c ) ) ;
2022-02-16 17:40:03 +00:00
if ( ( a >= 65 && a <= 90 ) || ( a >= 97 && a <= 122 ) || ( a >= 48 && a <= 57 ) || a == 95 || a == 46 ) {
jsname = jsname + c ;
}
}
MethodJS = jsname ;
return MethodJS ;
}
2022-03-04 22:28:32 +00:00
async function func _GXMethodJS ( mname /*STRING*/ ) {
2022-02-16 17:40:03 +00:00
if ( QB . halted ( ) ) { return ; }
var GXMethodJS = null ;
var jsname = '' ; // STRING
var startIdx = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
if ( ( QB . func _InStr ( mname , "GXSTR" ) ) == 1 ) {
2022-02-16 17:40:03 +00:00
jsname = "GXSTR." ;
startIdx = 7 ;
} else {
jsname = "GX." ;
startIdx = 3 ;
}
2022-03-30 22:37:36 +00:00
jsname = jsname + ( QB . func _LCase ( ( QB . func _Mid ( mname , startIdx , 1 ) ) ) ) ;
2022-02-16 17:40:03 +00:00
var i = 0 ; // INTEGER
var c = '' ; // STRING
var a = 0 ; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i = startIdx + 1 ; i <= ( QB . func _Len ( mname ) ) ; i = i + 1 ) { if ( QB . halted ( ) ) { return ; }
c = ( QB . func _Mid ( mname , i , 1 ) ) ;
a = ( QB . func _Asc ( c ) ) ;
2022-02-16 17:40:03 +00:00
if ( ( a >= 65 && a <= 90 ) || ( a >= 97 && a <= 122 ) || ( a >= 48 && a <= 57 ) || a == 95 || a == 46 ) {
jsname = jsname + c ;
}
}
if ( mname == "GXMapLoad" || mname == "GXSceneStart" ) {
jsname = "await " + jsname ;
}
GXMethodJS = jsname ;
return GXMethodJS ;
}
async function sub _InitGX ( ) {
if ( QB . halted ( ) ) { return ; }
2022-03-30 22:37:36 +00:00
await sub _AddSystemType ( "GXPOSITION" , "x:LONG,y:LONG" ) ;
await sub _AddSystemType ( "GXDEVICEINPUT" , "deviceId:INTEGER,deviceType:INTEGER,inputType:INTEGER,inputId:INTEGER,inputValue:INTEGER" ) ;
await sub _AddGXConst ( "GX_FALSE" ) ;
await sub _AddGXConst ( "GX_TRUE" ) ;
await sub _AddGXConst ( "GXEVENT_INIT" ) ;
await sub _AddGXConst ( "GXEVENT_UPDATE" ) ;
await sub _AddGXConst ( "GXEVENT_DRAWBG" ) ;
await sub _AddGXConst ( "GXEVENT_DRAWMAP" ) ;
await sub _AddGXConst ( "GXEVENT_DRAWSCREEN" ) ;
await sub _AddGXConst ( "GXEVENT_MOUSEINPUT" ) ;
await sub _AddGXConst ( "GXEVENT_PAINTBEFORE" ) ;
await sub _AddGXConst ( "GXEVENT_PAINTAFTER" ) ;
await sub _AddGXConst ( "GXEVENT_COLLISION_TILE" ) ;
await sub _AddGXConst ( "GXEVENT_COLLISION_ENTITY" ) ;
await sub _AddGXConst ( "GXEVENT_PLAYER_ACTION" ) ;
await sub _AddGXConst ( "GXEVENT_ANIMATE_COMPLETE" ) ;
await sub _AddGXConst ( "GXANIMATE_LOOP" ) ;
await sub _AddGXConst ( "GXANIMATE_SINGLE" ) ;
await sub _AddGXConst ( "GXBG_STRETCH" ) ;
await sub _AddGXConst ( "GXBG_SCROLL" ) ;
await sub _AddGXConst ( "GXBG_WRAP" ) ;
await sub _AddGXConst ( "GXKEY_ESC" ) ;
await sub _AddGXConst ( "GXKEY_1" ) ;
await sub _AddGXConst ( "GXKEY_2" ) ;
await sub _AddGXConst ( "GXKEY_3" ) ;
await sub _AddGXConst ( "GXKEY_4" ) ;
await sub _AddGXConst ( "GXKEY_5" ) ;
await sub _AddGXConst ( "GXKEY_6" ) ;
await sub _AddGXConst ( "GXKEY_7" ) ;
await sub _AddGXConst ( "GXKEY_8" ) ;
await sub _AddGXConst ( "GXKEY_9" ) ;
await sub _AddGXConst ( "GXKEY_0" ) ;
await sub _AddGXConst ( "GXKEY_DASH" ) ;
await sub _AddGXConst ( "GXKEY_EQUALS" ) ;
await sub _AddGXConst ( "GXKEY_BACKSPACE" ) ;
await sub _AddGXConst ( "GXKEY_TAB" ) ;
await sub _AddGXConst ( "GXKEY_Q" ) ;
await sub _AddGXConst ( "GXKEY_W" ) ;
await sub _AddGXConst ( "GXKEY_E" ) ;
await sub _AddGXConst ( "GXKEY_R" ) ;
await sub _AddGXConst ( "GXKEY_T" ) ;
await sub _AddGXConst ( "GXKEY_Y" ) ;
await sub _AddGXConst ( "GXKEY_U" ) ;
await sub _AddGXConst ( "GXKEY_I" ) ;
await sub _AddGXConst ( "GXKEY_O" ) ;
await sub _AddGXConst ( "GXKEY_P" ) ;
await sub _AddGXConst ( "GXKEY_LBRACKET" ) ;
await sub _AddGXConst ( "GXKEY_RBRACKET" ) ;
await sub _AddGXConst ( "GXKEY_ENTER" ) ;
await sub _AddGXConst ( "GXKEY_LCTRL" ) ;
await sub _AddGXConst ( "GXKEY_A" ) ;
await sub _AddGXConst ( "GXKEY_S" ) ;
await sub _AddGXConst ( "GXKEY_D" ) ;
await sub _AddGXConst ( "GXKEY_F" ) ;
await sub _AddGXConst ( "GXKEY_G" ) ;
await sub _AddGXConst ( "GXKEY_H" ) ;
await sub _AddGXConst ( "GXKEY_J" ) ;
await sub _AddGXConst ( "GXKEY_K" ) ;
await sub _AddGXConst ( "GXKEY_L" ) ;
await sub _AddGXConst ( "GXKEY_SEMICOLON" ) ;
await sub _AddGXConst ( "GXKEY_QUOTE" ) ;
await sub _AddGXConst ( "GXKEY_BACKQUOTE" ) ;
await sub _AddGXConst ( "GXKEY_LSHIFT" ) ;
await sub _AddGXConst ( "GXKEY_BACKSLASH" ) ;
await sub _AddGXConst ( "GXKEY_Z" ) ;
await sub _AddGXConst ( "GXKEY_X" ) ;
await sub _AddGXConst ( "GXKEY_C" ) ;
await sub _AddGXConst ( "GXKEY_V" ) ;
await sub _AddGXConst ( "GXKEY_B" ) ;
await sub _AddGXConst ( "GXKEY_N" ) ;
await sub _AddGXConst ( "GXKEY_M" ) ;
await sub _AddGXConst ( "GXKEY_COMMA" ) ;
await sub _AddGXConst ( "GXKEY_PERIOD" ) ;
await sub _AddGXConst ( "GXKEY_SLASH" ) ;
await sub _AddGXConst ( "GXKEY_RSHIFT" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_MULTIPLY" ) ;
await sub _AddGXConst ( "GXKEY_SPACEBAR" ) ;
await sub _AddGXConst ( "GXKEY_CAPSLOCK" ) ;
await sub _AddGXConst ( "GXKEY_F1" ) ;
await sub _AddGXConst ( "GXKEY_F2" ) ;
await sub _AddGXConst ( "GXKEY_F3" ) ;
await sub _AddGXConst ( "GXKEY_F4" ) ;
await sub _AddGXConst ( "GXKEY_F5" ) ;
await sub _AddGXConst ( "GXKEY_F6" ) ;
await sub _AddGXConst ( "GXKEY_F7" ) ;
await sub _AddGXConst ( "GXKEY_F8" ) ;
await sub _AddGXConst ( "GXKEY_F9" ) ;
await sub _AddGXConst ( "GXKEY_PAUSE" ) ;
await sub _AddGXConst ( "GXKEY_SCRLK" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_7" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_8" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_9" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_MINUS" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_4" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_5" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_6" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_PLUS" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_1" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_2" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_3" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_0" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_PERIOD" ) ;
await sub _AddGXConst ( "GXKEY_F11" ) ;
await sub _AddGXConst ( "GXKEY_F12" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_ENTER" ) ;
await sub _AddGXConst ( "GXKEY_RCTRL" ) ;
await sub _AddGXConst ( "GXKEY_NUMPAD_DIVIDE" ) ;
await sub _AddGXConst ( "GXKEY_NUMLOCK" ) ;
await sub _AddGXConst ( "GXKEY_HOME" ) ;
await sub _AddGXConst ( "GXKEY_UP" ) ;
await sub _AddGXConst ( "GXKEY_PAGEUP" ) ;
await sub _AddGXConst ( "GXKEY_LEFT" ) ;
await sub _AddGXConst ( "GXKEY_RIGHT" ) ;
await sub _AddGXConst ( "GXKEY_END" ) ;
await sub _AddGXConst ( "GXKEY_DOWN" ) ;
await sub _AddGXConst ( "GXKEY_PAGEDOWN" ) ;
await sub _AddGXConst ( "GXKEY_INSERT" ) ;
await sub _AddGXConst ( "GXKEY_DELETE" ) ;
await sub _AddGXConst ( "GXKEY_LWIN" ) ;
await sub _AddGXConst ( "GXKEY_RWIN" ) ;
await sub _AddGXConst ( "GXKEY_MENU" ) ;
await sub _AddGXConst ( "GXACTION_MOVE_LEFT" ) ;
await sub _AddGXConst ( "GXACTION_MOVE_RIGHT" ) ;
await sub _AddGXConst ( "GXACTION_MOVE_UP" ) ;
await sub _AddGXConst ( "GXACTION_MOVE_DOWN" ) ;
await sub _AddGXConst ( "GXACTION_JUMP" ) ;
await sub _AddGXConst ( "GXACTION_JUMP_RIGHT" ) ;
await sub _AddGXConst ( "GXACTION_JUMP_LEFT" ) ;
await sub _AddGXConst ( "GXSCENE_FOLLOW_NONE" ) ;
await sub _AddGXConst ( "GXSCENE_FOLLOW_ENTITY_CENTER" ) ;
await sub _AddGXConst ( "GXSCENE_FOLLOW_ENTITY_CENTER_X" ) ;
await sub _AddGXConst ( "GXSCENE_FOLLOW_ENTITY_CENTER_Y" ) ;
await sub _AddGXConst ( "GXSCENE_FOLLOW_ENTITY_CENTER_X_POS" ) ;
await sub _AddGXConst ( "GXSCENE_FOLLOW_ENTITY_CENTER_X_NEG" ) ;
await sub _AddGXConst ( "GXSCENE_CONSTRAIN_NONE" ) ;
await sub _AddGXConst ( "GXSCENE_CONSTRAIN_TO_MAP" ) ;
await sub _AddGXConst ( "GXFONT_DEFAULT" ) ;
await sub _AddGXConst ( "GXFONT_DEFAULT_BLACK" ) ;
await sub _AddGXConst ( "GXDEVICE_KEYBOARD" ) ;
await sub _AddGXConst ( "GXDEVICE_MOUSE" ) ;
await sub _AddGXConst ( "GXDEVICE_CONTROLLER" ) ;
await sub _AddGXConst ( "GXDEVICE_BUTTON" ) ;
await sub _AddGXConst ( "GXDEVICE_AXIS" ) ;
await sub _AddGXConst ( "GXDEVICE_WHEEL" ) ;
await sub _AddGXConst ( "GXTYPE_ENTITY" ) ;
await sub _AddGXConst ( "GXTYPE_FONT" ) ;
await sub _AddGXMethod ( "SUB" , "GXSleep" , True ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXMouseX" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXMouseY" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXSoundLoad" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSoundPlay" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSoundRepeat" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSoundVolume" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSoundPause" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSoundStop" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSoundMuted" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXSoundMuted" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXEntityAnimate" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXEntityAnimateStop" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXEntityAnimateMode" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityAnimateMode" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXScreenEntityCreate" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityCreate" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXEntityCreate" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXEntityVisible" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXEntityMove" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXEntityPos" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXEntityVX" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityVX" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXEntityVY" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityVY" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityX" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityY" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityWidth" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityHeight" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXEntityFrameNext" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXEntityFrameSet" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXEntityType" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityType" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityUID$" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXFontUID$" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXEntityApplyGravity" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityApplyGravity" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXEntityCollisionOffset" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityCollisionOffsetLeft" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityCollisionOffsetTop" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityCollisionOffsetRight" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXEntityCollisionOffsetBottom" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXFullScreen" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXFullScreen" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXBackgroundAdd" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXBackgroundY" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXBackgroundHeight" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXBackgroundClear" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSceneEmbedded" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXSceneEmbedded" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSceneCreate" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSceneWindowSize" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSceneScale" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSceneResize" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSceneDestroy" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXCustomDraw" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXCustomDraw" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXFrameRate" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXFrameRate" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXFrame" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSceneDraw" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSceneMove" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXScenePos" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXSceneX" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXSceneY" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXSceneWidth" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXSceneHeight" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXSceneColumns" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXSceneRows" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSceneStart" , True ) ;
await sub _AddGXMethod ( "SUB" , "GXSceneUpdate" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSceneFollowEntity" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSceneConstrain" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSceneStop" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXMapCreate" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXMapColumns" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXMapRows" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXMapLayers" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXMapLayerVisible" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXMapLayerVisible" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXMapLayerAdd" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXMapLayerInsert" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXMapLayerRemove" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXMapResize" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXMapDraw" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXMapTilePosAt" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXMapTile" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXMapTile" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXMapTileDepth" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXMapTileAdd" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXMapTileRemove" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXMapVersion" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXMapSave" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXMapLoad" , True ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXMapIsometric" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXMapIsometric" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSpriteDraw" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXSpriteDrawScaled" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXTilesetCreate" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXTilesetReplaceImage" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXTilesetLoad" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXTilesetSave" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXTilesetPos" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXTilesetWidth" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXTilesetHeight" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXTilesetColumns" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXTilesetRows" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXTilesetFilename" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXTilesetImage" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXTilesetAnimationCreate" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXTilesetAnimationAdd" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXTilesetAnimationRemove" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXTilesetAnimationFrames" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXTilesetAnimationSpeed" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXTilesetAnimationSpeed" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXFontCreate" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXFontCreate" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXFontWidth" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXFontHeight" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXFontCharSpacing" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXFontCharSpacing" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXFontLineSpacing" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXFontLineSpacing" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXDrawText" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXDebug" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXDebug" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXDebugScreenEntities" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXDebugScreenEntities" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXDebugFont" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXDebugFont" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXDebugTileBorderColor" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXDebugTileBorderColor" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXDebugEntityBorderColor" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXDebugEntityBorderColor" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXDebugEntityCollisionColor" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXDebugEntityCollisionColor" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXKeyInput" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXKeyDown" , False ) ;
await sub _AddGXMethod ( "SUB" , "GXDeviceInputDetect" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXDeviceInputTest" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXDeviceName" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXDeviceTypeName" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXInputTypeName" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXKeyButtonName" , False ) ;
await sub _AddGXConst ( "GX_CR" ) ;
await sub _AddGXConst ( "GX_LF" ) ;
await sub _AddGXConst ( "GX_CRLF" ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXSTR_LPad" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXSTR_RPad" , False ) ;
await sub _AddGXMethod ( "FUNCTION" , "GXSTR_Replace" , False ) ;
2022-02-16 17:40:03 +00:00
}
async function sub _InitQBMethods ( ) {
if ( QB . halted ( ) ) { return ; }
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Alpha" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Alpha32" , False ) ;
2022-06-11 16:04:55 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Acos" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Acosh" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Atanh" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Asin" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Asinh" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Atan2" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_AutoDisplay" , False ) ;
await sub _AddQBMethod ( "SUB" , "_AutoDisplay" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Blue" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Blue32" , False ) ;
2022-06-15 18:05:04 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Ceil" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_CopyImage" , False ) ;
2022-04-27 00:29:34 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Cosh" , False ) ;
2022-06-11 16:04:55 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Coth" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Csch" , False ) ;
2022-06-15 18:16:49 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_D2G" , False ) ;
2022-04-27 00:29:34 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_D2R" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "SUB" , "_Delay" , True ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Dest" , False ) ;
await sub _AddQBMethod ( "SUB" , "_Dest" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Display" , False ) ;
await sub _AddQBMethod ( "SUB" , "_Display" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_FontWidth" , False ) ;
await sub _AddQBMethod ( "SUB" , "_FreeImage" , False ) ;
2022-04-28 19:30:25 +00:00
await sub _AddQBMethod ( "SUB" , "_FullScreen" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_FullScreen" , False ) ;
2022-06-15 18:16:49 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_G2D" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_G2R" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Green" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Green32" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Height" , False ) ;
2022-06-15 18:05:04 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Hypot" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_InStrRev" , False ) ;
await sub _AddQBMethod ( "SUB" , "_Limit" , True ) ;
await sub _AddQBMethod ( "SUB" , "_KeyClear" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_KeyDown" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_KeyHit" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_LoadImage" , True ) ;
await sub _AddQBMethod ( "FUNCTION" , "_MouseButton" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_MouseInput" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_MouseX" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_MouseY" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_NewImage" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Pi" , False ) ;
await sub _AddQBMethod ( "SUB" , "_PrintString" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_PrintWidth" , False ) ;
await sub _AddQBMethod ( "SUB" , "_PutImage" , False ) ;
2022-04-27 00:29:34 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_R2D" , False ) ;
2022-06-15 18:16:49 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_R2G" , False ) ;
2022-06-15 18:59:47 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Readbit" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Red" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Red32" , False ) ;
2022-06-15 18:59:47 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Resetbit" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Resize" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_ResizeHeight" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_ResizeWidth" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_RGB" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_RGBA" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_RGB32" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_RGBA32" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Round" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_ScreenExists" , False ) ;
2022-06-11 16:04:55 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Sech" , False ) ;
2022-06-15 18:59:47 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Setbit" , False ) ;
2022-06-15 18:05:04 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Shl" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Shr" , False ) ;
2022-04-27 00:29:34 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Sinh" , False ) ;
2022-05-05 03:40:25 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Source" , False ) ;
await sub _AddQBMethod ( "SUB" , "_Source" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "SUB" , "_SndClose" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_SndOpen" , False ) ;
await sub _AddQBMethod ( "SUB" , "_SndPlay" , False ) ;
await sub _AddQBMethod ( "SUB" , "_SndLoop" , False ) ;
await sub _AddQBMethod ( "SUB" , "_SndPause" , False ) ;
await sub _AddQBMethod ( "SUB" , "_SndStop" , False ) ;
await sub _AddQBMethod ( "SUB" , "_SndVol" , False ) ;
2022-06-15 18:31:57 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Strcmp" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Stricmp" , False ) ;
2022-06-11 16:04:55 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Tanh" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "SUB" , "_Title" , False ) ;
2022-06-15 18:59:47 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Togglebit" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "_Trim" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "_Width" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Abs" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Asc" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Atn" , False ) ;
2022-04-28 15:14:53 +00:00
await sub _AddQBMethod ( "SUB" , "Beep" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "Chr$" , False ) ;
await sub _AddQBMethod ( "SUB" , "Circle" , False ) ;
await sub _AddQBMethod ( "SUB" , "Cls" , False ) ;
await sub _AddQBMethod ( "SUB" , "Color" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Command$" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Cos" , False ) ;
2022-04-29 03:06:24 +00:00
await sub _AddQBMethod ( "FUNCTION" , "Csrlin" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "Cvi" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Cvl" , False ) ;
2022-04-29 01:14:59 +00:00
await sub _AddQBMethod ( "SUB" , "Draw" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "Exp" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Fix" , False ) ;
2022-04-24 16:23:15 +00:00
await sub _AddQBMethod ( "FUNCTION" , "Hex$" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "SUB" , "Input" , True ) ;
await sub _AddQBMethod ( "FUNCTION" , "InKey$" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "InStr" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Int" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "LBound" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Left$" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "LCase$" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Len" , False ) ;
await sub _AddQBMethod ( "SUB" , "Line" , False ) ;
await sub _AddQBMethod ( "SUB" , "Locate" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Log" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "LTrim$" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Mid$" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Mki$" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Mkl$" , False ) ;
2022-04-25 02:41:21 +00:00
await sub _AddQBMethod ( "FUNCTION" , "Oct$" , False ) ;
2022-04-26 18:34:12 +00:00
await sub _AddQBMethod ( "SUB" , "Paint" , False ) ;
2022-04-24 16:11:42 +00:00
await sub _AddQBMethod ( "FUNCTION" , "Point" , False ) ;
2022-04-29 03:06:24 +00:00
await sub _AddQBMethod ( "FUNCTION" , "Pos" , False ) ;
2022-04-25 17:29:12 +00:00
await sub _AddQBMethod ( "SUB" , "PReset" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "SUB" , "Print" , True ) ;
await sub _AddQBMethod ( "SUB" , "PSet" , False ) ;
2022-05-29 06:06:31 +00:00
await sub _AddQBMethod ( "SUB" , "Randomize" , False ) ;
2022-05-21 07:05:30 +00:00
await sub _AddQBMethod ( "SUB" , "Restore" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "Right$" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "RTrim$" , False ) ;
2022-05-21 07:05:30 +00:00
await sub _AddQBMethod ( "SUB" , "Read" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "Rnd" , False ) ;
await sub _AddQBMethod ( "SUB" , "Screen" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Sgn" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Sin" , False ) ;
await sub _AddQBMethod ( "SUB" , "Sleep" , True ) ;
await sub _AddQBMethod ( "FUNCTION" , "Space" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "String" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Sqr" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Str$" , False ) ;
await sub _AddQBMethod ( "SUB" , "Swap" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Tan" , False ) ;
2022-04-29 05:00:28 +00:00
await sub _AddQBMethod ( "FUNCTION" , "Time$" , False ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "Timer" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "UBound" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "UCase$" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "Val" , False ) ;
2022-04-29 01:14:59 +00:00
await sub _AddQBMethod ( "FUNCTION" , "Varptr" , False ) ;
2022-05-03 06:51:26 +00:00
await sub _AddQBMethod ( "SUB" , "Window" , False ) ;
await sub _AddQBMethod ( "SUB" , "IncludeJS" , True ) ;
2022-03-30 22:37:36 +00:00
await sub _AddSystemType ( "FETCHRESPONSE" , "ok:INTEGER,status:INTEGER,statusText:STRING,text:STRING" ) ;
await sub _AddQBMethod ( "FUNCTION" , "Fetch" , True ) ;
2022-04-18 16:27:23 +00:00
await sub _AddQBMethod ( "SUB" , "Fetch" , True ) ;
2022-03-30 22:37:36 +00:00
await sub _AddQBMethod ( "FUNCTION" , "FromJSON" , False ) ;
await sub _AddQBMethod ( "FUNCTION" , "ToJSON" , False ) ;
2022-02-16 17:40:03 +00:00
}
2022-03-04 22:28:32 +00:00
this . compile = async function ( src ) {
2022-04-18 16:27:23 +00:00
await sub _QBToJS ( src , TEXT , '' ) ;
2022-02-16 17:40:03 +00:00
var js = '' ;
for ( var i = 1 ; i <= QB . func _UBound ( jsLines ) ; i ++ ) {
js += QB . arrayValue ( jsLines , [ i ] ) . value . text + '\n' ;
}
return js ;
} ;
this . getWarnings = function ( ) {
var w = [ ] ;
for ( var i = 1 ; i <= QB . func _UBound ( warnings ) ; i ++ ) {
w . push ( {
line : QB . arrayValue ( warnings , [ i ] ) . value . line ,
text : QB . arrayValue ( warnings , [ i ] ) . value . text
} ) ;
}
return w ;
} ;
2022-03-04 22:28:32 +00:00
return this ;
}