1
1
Fork 0
mirror of https://github.com/boxgaming/qbjs.git synced 2024-04-29 01:30:13 +00:00
qbjs/qb2js.js

3798 lines
181 KiB
JavaScript

async function _QBCompiler() {
/* static method variables: */
// Option _Explicit
// $Console
// Only
const FILE = 1; const TEXT = 2;
const MWARNING = 0; const MERROR = 1;
const False = 0;
const True = ! False;
const PrintDataTypes = True;
const PrintLineMapping = False;
const PrintTokenizedLine = False;
var lines = QB.initArray([{l:0,u:0}], {line:0,text:'',mtype:0}); /* CODELINE */
var jsLines = QB.initArray([{l:0,u:0}], {line:0,text:'',mtype:0}); /* CODELINE */
var methods = QB.initArray([{l:0,u:0}], {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}); /* METHOD */
var types = QB.initArray([{l:0,u:0}], {line:0,name:'',argc:0,args:''}); /* QBTYPE */
var typeVars = QB.initArray([{l:0,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}); /* VARIABLE */
var globalVars = QB.initArray([{l:0,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}); /* VARIABLE */
var localVars = QB.initArray([{l:0,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}); /* VARIABLE */
var warnings = QB.initArray([{l:0,u:0}], {line:0,text:'',mtype:0}); /* CODELINE */
var exportLines = QB.initArray([{l:0,u:0}], ''); /* STRING */
var exportConsts = QB.initArray([{l:0,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}); /* VARIABLE */
var exportMethods = QB.initArray([{l:0,u:0}], {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}); /* METHOD */
var dataArray = QB.initArray([{l:0,u:0}], ''); /* STRING */
var dataLabels = QB.initArray([{l:0,u:0}], {text:'',index:0}); /* LABEL */
var modLevel = 0; /* INTEGER */
var currentMethod = ''; /* STRING */
var currentModule = ''; /* STRING */
var programMethods = 0; /* INTEGER */
var staticVarLine = 0; /* INTEGER */
var condWords = QB.initArray([{l:0,u:4}], ''); /* STRING */
if (QB.func_Command() != "" ) {
await sub_QBToJS( QB.func_Command(), FILE, "");
await sub_PrintJS();
QB.halt(); return;
}
async function sub_QBToJS(source/*STRING*/,sourceType/*INTEGER*/,moduleName/*STRING*/) {
if (QB.halted()) { return; }; sourceType = Math.round(sourceType);
QB.arrayValue(condWords, [ 1]).value = "IF";
QB.arrayValue(condWords, [ 2]).value = "ELSEIF";
QB.arrayValue(condWords, [ 3]).value = "WHILE";
QB.arrayValue(condWords, [ 4]).value = "UNTIL";
currentModule = moduleName;
await sub_ResetDataStructures();
if ( moduleName == "" ) {
QB.resizeArray(jsLines, [{l:0,u:0}], {line:0,text:'',mtype:0}, false); /* CODELINE */
}
if ( sourceType == FILE) {
await sub_ReadLinesFromFile( source);
} else {
await sub_ReadLinesFromText( source);
}
await sub_FindMethods();
programMethods = (QB.func_UBound( methods));
await sub_InitGX();
await sub_InitQBMethods();
var selfConvert = 0; /* INTEGER */
var isGX = 0; /* INTEGER */
isGX = False;
if ( sourceType == FILE) {
selfConvert = (await func_EndsWith( source, "qb2js.bas"));
}
if ( selfConvert) {
await sub_AddJSLine( 0, "async function _QBCompiler() {");
} else if ( moduleName != "" ) {
await sub_AddJSLine( 0, "async function _" + moduleName + "() {");
} else if ( sourceType == FILE) {
await sub_AddJSLine( 0, "async function init() {");
}
await sub_AddJSLine( 0, "/* static method variables: */ ");
staticVarLine = (QB.func_UBound( jsLines));
if (! selfConvert & moduleName == "" ) {
await sub_AddJSLine( 0, "QB.start();");
}
if (! selfConvert & moduleName == "" ) {
var mtest = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; /* METHOD */
if ((await func_FindMethod( "GXOnGameEvent" , mtest, "SUB")) ) {
await sub_AddJSLine( 0, " await GX.registerGameEvents(sub_GXOnGameEvent);");
isGX = True;
} else {
await sub_AddJSLine( 0, " await GX.registerGameEvents(function(e){});");
await sub_AddJSLine( 0, " QB.sub_Screen(0);");
}
}
await sub_AddJSLine( 0, "");
await sub_InitData();
await sub_ConvertLines( 1, await func_MainEnd(), "");
if (! selfConvert & ! isGX & moduleName == "" ) {
await sub_AddJSLine( 0, "QB.end();");
}
await sub_ConvertMethods();
if (! selfConvert & moduleName == "" ) {
await sub_InitTypes();
}
if ( selfConvert) {
await sub_AddJSLine( 0, "this.compile = async function(src) {");
await sub_AddJSLine( 0, " await sub_QBToJS(src, TEXT, '');");
await sub_AddJSLine( 0, " var js = '';");
await sub_AddJSLine( 0, " for (var i=1; i<= QB.func_UBound(jsLines); i++) {");
if ( PrintLineMapping) {
await sub_AddJSLine( 0, " js += '/* ' + i + ':' + this.getSourceLine(i) + ' */ ' + QB.arrayValue(jsLines, [i]).value.text + '\\n';");
} else {
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, " mtype: QB.arrayValue(warnings, [i]).value.mtype");
await sub_AddJSLine( 0, " });");
await sub_AddJSLine( 0, " }");
await sub_AddJSLine( 0, " return w;");
await sub_AddJSLine( 0, "};");
await sub_AddJSLine( 0, "this.getSourceLine = function(jsLine) {");
await sub_AddJSLine( 0, " if (jsLine == 0) { return 0; }");
await sub_AddJSLine( 0, " var line = QB.arrayValue(jsLines, [jsLine]).value.line;");
await sub_AddJSLine( 0, " line = QB.arrayValue(lines, [line]).value.line;");
await sub_AddJSLine( 0, " return line;");
await sub_AddJSLine( 0, "};");
await sub_AddJSLine( 0, "");
await sub_AddJSLine( 0, "return this;");
await sub_AddJSLine( 0, "}");
} else if ( moduleName != "" ) {
await sub_AddJSLine( 0, "return this;");
await sub_AddJSLine( 0, "}");
await sub_AddJSLine( 0, "const " + moduleName + " = await _" + moduleName + "();");
} else if ( sourceType == FILE) {
await sub_AddJSLine( 0, "};");
}
}
async function sub_InitTypes() {
if (QB.halted()) { return; };
var i = 0; /* INTEGER */ var j = 0; /* INTEGER */ var jsidx = 0; /* INTEGER */
var typestr = ''; /* STRING */
typestr = "{ ";
var ___v5334240 = 0; ___l7055475: for ( i= 1; i <= (QB.func_UBound( jsLines)); i= i + 1) { if (QB.halted()) { return; } ___v5334240++; if (___v5334240 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(jsLines, [ i]).value .text == "QB.start();" ) {
jsidx = i;
break ___l7055475;
}
}
var ___v2895625 = 0; ___l5795186: for ( i= 1; i <= (QB.func_UBound( types)); i= i + 1) { if (QB.halted()) { return; } ___v2895625++; if (___v2895625 % 100 == 0) { await QB.autoLimit(); }
typestr = typestr + QB.arrayValue(types, [ i]).value .name + ":[";
var idx = 0; /* INTEGER */
idx = 0;
var ___v7747401 = 0; ___l3019480: for ( j= 1; j <= (QB.func_UBound( typeVars)); j= j + 1) { if (QB.halted()) { return; } ___v7747401++; if (___v7747401 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(typeVars, [ j]).value .typeId == i) {
if ( idx > 0) {
typestr = typestr + ", ";
}
typestr = typestr + "{ name: '" + QB.arrayValue(typeVars, [ j]).value .name + "', type: '" + QB.arrayValue(typeVars, [ j]).value .type + "' }";
idx = idx + 1;
}
}
typestr = typestr + "]";
if ( i <(QB.func_UBound( types)) ) {
typestr = typestr + ", ";
}
}
typestr = typestr + "}";
QB.arrayValue(jsLines, [ jsidx]).value .text = QB.arrayValue(jsLines, [ jsidx]).value .text + " QB.setTypeMap(" + typestr + ");";
}
async function sub_ResetDataStructures() {
if (QB.halted()) { return; };
QB.resizeArray(lines, [{l:0,u:0}], {line:0,text:'',mtype:0}, false); /* CODELINE */
QB.resizeArray(methods, [{l:0,u:0}], {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}, false); /* METHOD */
QB.resizeArray(types, [{l:0,u:0}], {line:0,name:'',argc:0,args:''}, false); /* QBTYPE */
QB.resizeArray(typeVars, [{l:0,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}, false); /* VARIABLE */
QB.resizeArray(globalVars, [{l:0,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}, false); /* VARIABLE */
QB.resizeArray(localVars, [{l:0,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}, false); /* VARIABLE */
QB.resizeArray(warnings, [{l:0,u:0}], {line:0,text:'',mtype:0}, false); /* CODELINE */
QB.resizeArray(dataArray, [{l:0,u:0}], '', false); /* STRING */
QB.resizeArray(dataLabels, [{l:0,u:0}], {text:'',index:0}, false); /* LABEL */
if ( modLevel == 0) {
QB.resizeArray(exportMethods, [{l:0,u:0}], {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}, false); /* METHOD */
QB.resizeArray(exportConsts, [{l:0,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}, false); /* VARIABLE */
}
currentMethod = "";
programMethods = 0;
staticVarLine = 0;
}
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 */
var ___v7607236 = 0; ___l140176: for ( i= 1; i <= (QB.func_UBound( dataLabels)); i= i + 1) { if (QB.halted()) { return; } ___v7607236++; if (___v7607236 % 100 == 0) { await QB.autoLimit(); }
await sub_AddJSLine( 0, "QB.setDataLabel('" + QB.arrayValue(dataLabels, [ i]).value .text + "', " + (QB.func_Str( QB.arrayValue(dataLabels, [ i]).value .index)) + ");");
}
}
async function sub_PrintJS() {
if (QB.halted()) { return; };
var i = 0; /* INTEGER */
var ___v7090379 = 0; ___l8144900: for ( i= 1; i <= (QB.func_UBound( jsLines)); i= i + 1) { if (QB.halted()) { return; } ___v7090379++; if (___v7090379 % 100 == 0) { await QB.autoLimit(); }
await QB.sub_Print([QB.arrayValue(jsLines, [ i]).value .text]);
}
}
async function sub_ConvertLines(firstLine/*INTEGER*/,lastLine/*INTEGER*/,functionName/*STRING*/) {
if (QB.halted()) { return; }; firstLine = Math.round(firstLine); lastLine = Math.round(lastLine);
var typeMode = 0; /* INTEGER */
typeMode = False;
var jsMode = 0; /* INTEGER */
jsMode = False;
var ignoreMode = 0; /* INTEGER */
ignoreMode = False;
var i = 0; /* INTEGER */ var j = 0; /* INTEGER */
var indent = 0; /* INTEGER */
var tempIndent = 0; /* INTEGER */
var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; /* METHOD */
var totalIndent = 0; /* INTEGER */
totalIndent = 1;
var caseCount = 0; /* INTEGER */
var containers = QB.initArray([{l:0,u:10000}], {mode:0,type:'',label:'',line:0}); /* CONTAINER */
var cindex = 0; /* INTEGER */
var caseVar = ''; /* STRING */
var currType = 0; /* INTEGER */
var loopIndex = ''; /* STRING */
var sfix = ''; /* STRING */
var ctype = ''; /* STRING */
var ___v4140327 = 0; ___l453528: for ( i= firstLine; i <= lastLine; i= i + 1) { if (QB.halted()) { return; } ___v4140327++; if (___v4140327 % 100 == 0) { await QB.autoLimit(); }
indent = 0;
tempIndent = 0;
var l = ''; /* STRING */
l = (QB.func__Trim( QB.arrayValue(lines, [ i]).value .text));
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var c = 0; /* INTEGER */
c = (await func_SLSplit( l, parts , True));
if ( c < 1) {
continue;
}
if ( PrintTokenizedLine) {
await sub_AddJSLine( 0, "//// " + (await func_Join( parts , 1, - 1, "|")));
}
var js = ''; /* STRING */
js = "";
var first = ''; /* STRING */
first = (QB.func_UCase( QB.arrayValue(parts, [ 1]).value));
sfix = (await func_FixCondition( first, parts , 1, ""));
if ( sfix != "" ) {
first = sfix;
}
if ( jsMode == True) {
if ( first == "$END" ) {
if ( jsMode) {
jsMode = False;
await sub_AddJSLine( 0, "//-------- END JS native code block --------");
}
} else {
await sub_AddJSLine( i, QB.arrayValue(lines, [ i]).value .text);
}
} else if ( ignoreMode == True) {
if ( first == "$END" ) {
ignoreMode = False;
}
} else if ( first == "$END" ) {
} else if ( first == "$ELSE" | first == "$ELSEIF" ) {
ignoreMode = True;
} else if ( typeMode == True) {
if ( first == "END" ) {
var second = ''; /* STRING */
second = (QB.func_UCase( QB.arrayValue(parts, [ 2]).value));
if ( second == "TYPE" ) {
typeMode = False;
}
} else {
await sub_DeclareTypeVar( parts , currType, i);
}
} else {
await sub_CheckParen( QB.arrayValue(lines, [ i]).value .text, i);
if ( first == "CONST" ) {
var constParts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var constCount = 0; /* INTEGER */
constCount = (await func_ListSplit( (await func_Join( parts , 2, - 1, " ")) , constParts));
var constIdx = 0; /* INTEGER */
var ___v7904800 = 0; ___l8626193: for ( constIdx= 1; constIdx <= constCount; constIdx= constIdx + 1) { if (QB.halted()) { return; } ___v7904800++; if (___v7904800 % 100 == 0) { await QB.autoLimit(); }
var eqi = 0; /* INTEGER */
eqi = (QB.func_InStr( QB.arrayValue(constParts, [ constIdx]).value , "="));
if ( eqi < 1) {
await sub_AddWarning( i, "Invalid Const syntax: [" + QB.arrayValue(constParts, [ constIdx]).value + "]");
} else {
var cleft = ''; /* STRING */ var cright = ''; /* STRING */
cleft = (QB.func_Left( QB.arrayValue(constParts, [ constIdx]).value , eqi - 1));
cright = (QB.func_Mid( QB.arrayValue(constParts, [ constIdx]).value , eqi + 1));
js = js + "const " + cleft + " = " + (await func_ConvertExpression( cright, i)) + "; ";
await sub_AddConst( (QB.func__Trim( cleft)));
}
}
} else if ( first == "DIM" | first == "REDIM" | first == "STATIC" | first == "SHARED" ) {
js = (await func_DeclareVar( parts , i));
} else if ( first == "SELECT" ) {
cindex = cindex + 1;
QB.arrayValue(containers, [ cindex]).value .type = "SELECT CASE";
QB.arrayValue(containers, [ cindex]).value .line = i;
caseVar = await func_GenJSVar();
js = "var " + caseVar + " = " + (await func_ConvertExpression( (await func_Join( parts , 3, - 1, " ")) , i)) + "; ";
js = js + "switch (" + caseVar + ") {";
indent = 1;
caseCount = 0;
} else if ( first == "CASE" ) {
if ( caseCount > 0) {
js = "break; ";
}
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "ELSE" ) {
js = js + "default:";
} else if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "IS" ) {
js = js + "case " + caseVar + " " + (await func_ConvertExpression( (await func_Join( parts , 3, - 1, " ")) , i)) + ":";
} else {
var caseParts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var cscount = 0; /* INTEGER */
cscount = (await func_ListSplit( (await func_Join( parts , 2, - 1, " ")) , caseParts));
var ci = 0; /* INTEGER */
var ___v9619532 = 0; ___l3735362: for ( ci= 1; ci <= cscount; ci= ci + 1) { if (QB.halted()) { return; } ___v9619532++; if (___v9619532 % 100 == 0) { await QB.autoLimit(); }
js = js + "case " + (await func_ConvertExpression( QB.arrayValue(caseParts, [ ci]).value , i)) + ": ";
}
}
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 */
var ___v562369 = 0; ___l8714458: for ( fi= 2; fi <= (QB.func_UBound( parts)); fi= fi + 1) { if (QB.halted()) { return; } ___v562369++; if (___v562369 % 100 == 0) { await QB.autoLimit(); }
var fword = ''; /* STRING */
fword = (QB.func_UCase( QB.arrayValue(parts, [ fi]).value));
if ( fword == "=" ) {
eqIdx = fi;
} else if ( fword == "TO" ) {
toIdx = fi;
} else if ( fword == "STEP" ) {
stepIdx = fi;
fstep = (await func_ConvertExpression( (await func_Join( parts , fi + 1, - 1, " ")) , i));
}
}
var fvar = ''; /* STRING */
fvar = (await func_ConvertExpression( (await func_Join( parts , 2, eqIdx - 1, " ")) , i));
var sval = ''; /* STRING */
sval = (await func_ConvertExpression( (await func_Join( parts , eqIdx + 1, toIdx - 1, " ")) , i));
var uval = ''; /* STRING */
uval = (await func_ConvertExpression( (await func_Join( parts , toIdx + 1, stepIdx - 1, " ")) , i));
if ((QB.func_Left( (QB.func__Trim( fstep)) , 1)) == "-" ) {
fcond = " >= ";
}
cindex = cindex + 1;
QB.arrayValue(containers, [ cindex]).value .type = "FOR";
QB.arrayValue(containers, [ cindex]).value .label = await func_GenJSLabel();
QB.arrayValue(containers, [ cindex]).value .line = i;
loopIndex = await func_GenJSVar();
js = "var " + loopIndex + " = 0; " + QB.arrayValue(containers, [ cindex]).value .label + ":";
js = js + " for (" + fvar + "=" + sval + "; " + fvar + fcond + uval + "; " + fvar + "=" + fvar + " + " + fstep + ") {";
js = js + " if (QB.halted()) { return; } ";
js = js + loopIndex + "++; ";
js = js + " if (" + loopIndex + " % 100 == 0) { await QB.autoLimit(); }";
indent = 1;
} else if ( first == "IF" ) {
cindex = cindex + 1;
QB.arrayValue(containers, [ cindex]).value .type = "IF";
QB.arrayValue(containers, [ cindex]).value .line = i;
var thenIndex = 0; /* INTEGER */
var ___v3640187 = 0; ___l9495566: for ( thenIndex= 2; thenIndex <= (QB.func_UBound( parts)); thenIndex= thenIndex + 1) { if (QB.halted()) { return; } ___v3640187++; if (___v3640187 % 100 == 0) { await QB.autoLimit(); }
if ((QB.func_UCase( QB.arrayValue(parts, [ thenIndex]).value)) == "THEN" ) {
break ___l9495566;
}
}
js = "if (" + (await func_ConvertExpression( (await func_Join( parts , 2, thenIndex - 1, " ")) , i)) + ") {";
indent = 1;
} else if ( first == "ELSEIF" ) {
js = "} else if (" + (await func_ConvertExpression( (await func_Join( parts , 2, (QB.func_UBound( parts)) - 1, " ")) , i)) + ") {";
tempIndent = - 1;
} else if ( first == "ELSE" ) {
js = "} else {";
tempIndent = - 1;
} else if ( first == "NEXT" ) {
if ( c > 1) {
var nparts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var npcount = 0; /* INTEGER */
var npi = 0; /* INTEGER */
npcount = (await func_ListSplit( (await func_Join( parts , 2, - 1, " ")) , nparts));
var ___v7671116 = 0; ___l5248684: for ( npi= 1; npi <= npcount; npi= npi + 1) { if (QB.halted()) { return; } ___v7671116++; if (___v7671116 % 100 == 0) { await QB.autoLimit(); }
if ((await func_CheckBlockEnd( containers , cindex, first, i)) ) {
js = js + "} ";
indent = - 1;
cindex = cindex - 1;
} else {
break ___l5248684;
}
}
} else {
if ((await func_CheckBlockEnd( containers , cindex, first, i)) ) {
js = js + "}";
indent = - 1;
cindex = cindex - 1;
}
}
} else if ( first == "END" ) {
if ((QB.func_UBound( parts)) == 1) {
js = "QB.halt(); return;";
} else {
second = (QB.func_UCase( QB.arrayValue(parts, [ 2]).value));
if ( second == "IF" ) {
if ((await func_CheckBlockEnd( containers , cindex, "END IF" , i)) ) {
js = js + "}";
indent = - 1;
cindex = cindex - 1;
}
} else if ( second == "SELECT" ) {
if ((await func_CheckBlockEnd( containers , cindex, "END SELECT" , i)) ) {
js = "break;" + " }";
indent = - 1;
cindex = cindex - 1;
}
} else {
await sub_AddError( i, "Syntax error after END");
}
}
} else if ( first == "SYSTEM" ) {
js = "QB.halt(); return;";
} else if ( first == "$IF" ) {
if ((QB.func_UBound( parts)) > 1) {
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "JAVASCRIPT" ) {
jsMode = True;
js = "//-------- BEGIN JS native code block --------";
} else if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) != "WEB" ) {
ignoreMode = True;
}
}
} else if ( first == "DO" ) {
cindex = cindex + 1;
QB.arrayValue(containers, [ cindex]).value .label = await func_GenJSLabel();
QB.arrayValue(containers, [ cindex]).value .type = "DO";
QB.arrayValue(containers, [ cindex]).value .line = i;
loopIndex = await func_GenJSVar();
js = "var " + loopIndex + " = 0; " + QB.arrayValue(containers, [ cindex]).value .label + ":";
if ((QB.func_UBound( parts)) > 1) {
sfix = (await func_FixCondition( (QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) , parts , 2, "DO "));
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "WHILE" ) {
js = js + " while (" + (await func_ConvertExpression( (await func_Join( parts , 3, - 1, " ")) , i)) + ") {";
} else {
js = js + " while (!(" + (await func_ConvertExpression( (await func_Join( parts , 3, - 1, " ")) , i)) + ")) {";
}
QB.arrayValue(containers, [ cindex]).value .mode = 1;
} else {
js = js + " do {";
QB.arrayValue(containers, [ cindex]).value .mode = 2;
}
indent = 1;
js = js + " if (QB.halted()) { return; }";
js = js + loopIndex + "++; ";
js = js + " if (" + loopIndex + " % 100 == 0) { await QB.autoLimit(); }";
} else if ( first == "WHILE" ) {
cindex = cindex + 1;
QB.arrayValue(containers, [ cindex]).value .label = await func_GenJSLabel();
QB.arrayValue(containers, [ cindex]).value .type = "WHILE";
QB.arrayValue(containers, [ cindex]).value .line = i;
loopIndex = await func_GenJSVar();
js = "var " + loopIndex + " = 0; " + QB.arrayValue(containers, [ cindex]).value .label + ":";
js = js + " while (" + (await func_ConvertExpression( (await func_Join( parts , 2, - 1, " ")) , i)) + ") {";
js = js + " if (QB.halted()) { return; }";
js = js + loopIndex + "++; ";
js = js + " if (" + loopIndex + " % 100 == 0) { await QB.autoLimit(); }";
indent = 1;
} else if ( first == "WEND" ) {
if ((await func_CheckBlockEnd( containers , cindex, first, i)) ) {
js = "}";
cindex = cindex - 1;
indent = - 1;
}
} else if ( first == "LOOP" ) {
if ((await func_CheckBlockEnd( containers , cindex, first, i)) ) {
if (QB.arrayValue(containers, [ cindex]).value .mode == 1) {
js = "}";
} else {
sfix = (await func_FixCondition( (QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) , parts , 2, "LOOP "));
js = "} while ((";
if ((QB.func_UBound( parts)) < 2) {
js = js + "1));";
} else {
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "UNTIL" ) {
js = "} while (!(";
}
js = js + (await func_ConvertExpression( (await func_Join( parts , 3, (QB.func_UBound( parts)) , " ")) , i)) + "))";
}
}
cindex = cindex - 1;
indent = - 1;
}
} else if ( first == "_CONTINUE" | first == "CONTINUE" ) {
js = "continue;";
} else if ( first == "EXIT" ) {
second = "";
if ((QB.func_UBound( parts)) > 1) {
second = (QB.func_UCase( QB.arrayValue(parts, [ 2]).value));
}
if ( second == "FUNCTION" ) {
js = "return " + (await func_RemoveSuffix( functionName)) + ";";
} else if ( second == "SUB" ) {
js = "return;";
} else if ( second == "DO" | second == "WHILE" | second == "FOR" ) {
var lli = 0; /* INTEGER */
var ___v5924582 = 0; ___l535045: for ( lli= cindex; lli >= 0; lli= lli + - 1) { if (QB.halted()) { return; } ___v5924582++; if (___v5924582 % 100 == 0) { await QB.autoLimit(); }
if ( lli > 0) {
if (QB.arrayValue(containers, [ lli]).value .type == second) {
break ___l535045;
}
}
}
if ( lli > 0) {
js = "break " + QB.arrayValue(containers, [ lli]).value .label + ";";
} else {
await sub_AddError( i, "EXIT " + second + " without " + second);
}
} else {
await sub_AddError( i, "Syntax error after EXIT");
}
} else if ( first == "TYPE" ) {
typeMode = True;
var qbtype = {line:0,name:'',argc:0,args:''}; /* QBTYPE */
qbtype.line = i;
qbtype.name = (QB.func_UCase( QB.arrayValue(parts, [ 2]).value));
await sub_AddType( qbtype);
currType = (QB.func_UBound( types));
} else if ( first == "EXPORT" ) {
if ( c > 1) {
var exparts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var excount = 0; /* INTEGER */
excount = (await func_ListSplit( (await func_Join( parts , 2, - 1, " ")) , exparts));
var exi = 0; /* INTEGER */
var ___v2981654 = 0; ___l4687001: for ( exi= 1; exi <= excount; exi= exi + 1) { if (QB.halted()) { return; } ___v2981654++; if (___v2981654 % 100 == 0) { await QB.autoLimit(); }
await sub_ParseExport( QB.arrayValue(exparts, [ exi]).value , i);
}
continue;
} else {
}
} else if ( first == "CALL" ) {
var subline = ''; /* STRING */
subline = (QB.func__Trim( (await func_Join( parts , 2, - 1, " "))));
var subend = 0; /* INTEGER */
subend = (QB.func_InStr( subline, "("));
var subname = ''; /* STRING */
if ( subend == 0) {
subname = subline;
} else {
subname = (QB.func_Left( subline, subend - 1));
}
if ((await func_FindMethod( subname, m, "SUB")) ) {
var subargs = ''; /* STRING */
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, i));
} else {
await sub_AddWarning( i, "Missing Sub [" + subname + "], ignoring Call command");
}
} else if ( c > 2 | first == "LET" ) {
var assignment = 0; /* INTEGER */
assignment = 0;
var ___v6478212 = 0; ___l6226967: for ( j= 1; j <= (QB.func_UBound( parts)); j= j + 1) { if (QB.halted()) { return; } ___v6478212++; if (___v6478212 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(parts, [ j]).value == "=" ) {
assignment = j;
break ___l6226967;
}
}
var asnVarIndex = 0; /* SINGLE */
asnVarIndex = 1;
if ( first == "LET" ) {
asnVarIndex = 2;
}
if ( assignment > 0) {
js = (await func_RemoveSuffix( (await func_ConvertExpression( (await func_Join( parts , asnVarIndex, assignment - 1, " ")) , i)))) + " = " + (await func_ConvertExpression( (await func_Join( parts , assignment + 1, - 1, " ")) , i)) + ";";
} else {
var parendx = 0; /* INTEGER */
parendx = (QB.func_InStr( QB.arrayValue(parts, [ 1]).value , "("));
if ( parendx > 0) {
var sname = ''; /* STRING */ var arg1 = ''; /* STRING */
sname = (QB.func_Mid( QB.arrayValue(parts, [ 1]).value , 1, parendx - 1));
arg1 = (QB.func_Mid( QB.arrayValue(parts, [ 1]).value , parendx));
c = (await func_SLSplit( sname + " " + arg1 + (await func_Join( parts , 2, - 1, " ")) , parts , True));
}
if ((await func_FindMethod( QB.arrayValue(parts, [ 1]).value , m, "SUB")) ) {
js = (await func_ConvertSub( m, (await func_Join( parts , 2, - 1, " ")) , i));
} else {
js = "// " + l;
await sub_AddWarning( i, "Missing or unsupported method: '" + QB.arrayValue(parts, [ 1]).value + "' - ignoring line");
}
}
} else {
if ((await func_FindMethod( QB.arrayValue(parts, [ 1]).value , m, "SUB")) ) {
js = (await func_ConvertSub( m, (await func_Join( parts , 2, - 1, " ")) , i));
} else {
js = "// " + l;
if ( first == "GOTO" ) {
await sub_AddWarning( i, "Missing or unsupported method: '<a href='https://xkcd.com/292/' target='_blank'>GOTO</a>'");
} else {
await sub_AddWarning( i, "Missing or unsupported method: '" + QB.arrayValue(parts, [ 1]).value + "' - ignoring line");
}
}
}
if (( indent < 0) ) {
totalIndent = totalIndent + indent;
}
await sub_AddJSLine( i, (await func_LPad( "" , " " , ( totalIndent + tempIndent) * 3)) + js);
if (( indent > 0) ) {
totalIndent = totalIndent + indent;
}
}
}
if ( cindex > 0) {
await sub_AddError( QB.arrayValue(containers, [ cindex]).value .line, QB.arrayValue(containers, [ cindex]).value .type + " without " + (await func_EndPhraseFor( QB.arrayValue(containers, [ cindex]).value .type)));
}
}
async function func_BeginPhraseFor(endPhrase/*STRING*/) {
if (QB.halted()) { return; };
var BeginPhraseFor = null;
var bp = ''; /* STRING */
var ___v2637929 = endPhrase; switch (___v2637929) {
case "NEXT":
bp = "FOR";
break; case "LOOP":
bp = "DO";
break; case "WEND":
bp = "WHILE";
break; case "END IF":
bp = "IF";
break; case "END SELECT":
bp = "SELECT CASE";
break; }
BeginPhraseFor = bp;
return BeginPhraseFor;
}
async function func_EndPhraseFor(beginPhrase/*STRING*/) {
if (QB.halted()) { return; };
var EndPhraseFor = null;
var ep = ''; /* STRING */
var ___v2793420 = beginPhrase; switch (___v2793420) {
case "FOR":
ep = "NEXT";
break; case "DO":
ep = "LOOP";
break; case "WHILE":
ep = "WEND";
break; case "IF":
ep = "END IF";
break; case "SELECT CASE":
ep = "END SELECT";
break; }
EndPhraseFor = ep;
return EndPhraseFor;
}
async function func_CheckBlockEnd(cstack/*CONTAINER*/,cindex/*INTEGER*/,endPhrase/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var CheckBlockEnd = null;
var ctype = ''; /* STRING */ var beginPhrase = ''; /* STRING */
var success = 0; /* INTEGER */
success = True;
beginPhrase = (await func_BeginPhraseFor( endPhrase));
if ( cindex > 0) {
ctype = QB.arrayValue(cstack, [ cindex]).value .type;
}
if ( ctype != beginPhrase) {
await sub_AddError( lineNumber, endPhrase + " without " + beginPhrase);
success = False;
}
CheckBlockEnd = success;
return CheckBlockEnd;
}
async function func_FixCondition(word/*STRING*/,parts/*STRING*/,idx/*INTEGER*/,prefix/*STRING*/) {
if (QB.halted()) { return; };
var FixCondition = null;
FixCondition = "";
var c = 0; /* INTEGER */ var j = 0; /* INTEGER */
var ___v8246022 = 0; ___l8298016: for ( j= 0; j <= (QB.func_UBound( condWords)); j= j + 1) { if (QB.halted()) { return; } ___v8246022++; if (___v8246022 % 100 == 0) { await QB.autoLimit(); }
if ((QB.func_InStr( word, QB.arrayValue(condWords, [ j]).value + "(")) == 1) {
var a1 = ''; /* STRING */
a1 = (QB.func_Mid( QB.arrayValue(parts, [ idx]).value , (QB.func_Len( QB.arrayValue(condWords, [ j]).value)) + 1));
c = (await func_SLSplit( prefix + QB.arrayValue(condWords, [ j]).value + " " + a1 + (await func_Join( parts , idx + 1, - 1, " ")) , parts , True));
FixCondition = QB.arrayValue(condWords, [ j]).value;
break ___l8298016;
}
}
return FixCondition;
}
async function sub_ParseExport(s/*STRING*/,lineIndex/*INTEGER*/) {
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:0,u:0}], ''); /* STRING */
var found = 0; /* INTEGER */
found = False;
var c = 0; /* INTEGER */
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);
found = True;
}
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);
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.");
}
}
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:0,u:esize}], '', true); /* STRING */
QB.arrayValue(exportLines, [ esize]).value = exportName + ": " + exportedItem + ",";
}
async function func_ConvertSub(m/*METHOD*/,args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertSub = null;
var js = ''; /* STRING */
if ( m.name == "Line" ) {
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var plen = 0; /* INTEGER */
plen = (await func_SLSplit( args, parts , False));
if ( plen > 0) {
if ((QB.func_UCase( QB.arrayValue(parts, [ 1]).value)) == "INPUT" ) {
m.name = "Line Input";
m.jsname = "QB.sub_LineInput";
args = (await func_Join( parts , 2, - 1, " "));
m.sync = True;
}
}
}
if ( m.name == "Line" ) {
js = (await func_CallMethod( m)) + "(" + (await func_ConvertLine( args, lineNumber)) + ");";
} else if ( m.name == "Cls" ) {
js = (await func_CallMethod( m)) + "(" + (await func_ConvertCls( args, lineNumber)) + ");";
} else if ( m.name == "Open" ) {
js = (await func_CallMethod( m)) + "(" + (await func_ConvertOpen( args, lineNumber)) + ");";
} else if ( m.name == "Close" ) {
js = (await func_CallMethod( m)) + "(" + (await func_Replace( args, "#" , "")) + ");";
} else if ( m.name == "Input" ) {
if ((await func_StartsWith( (QB.func__Trim( args)) , "#")) ) {
m.jsname = "QB.sub_InputFromFile";
js = (await func_ConvertFileInput( m, args, lineNumber));
} else {
m.jsname = "QB.sub_Input";
js = (await func_ConvertInput( m, args, lineNumber));
}
} else if ( m.name == "Line Input" ) {
if ((await func_StartsWith( (QB.func__Trim( args)) , "#")) ) {
m.jsname = "QB.sub_LineInputFromFile";
js = (await func_ConvertFileLineInput( m, args, lineNumber));
m.name = "Line";
m.jsname = "QB.sub_Line";
} else {
js = (await func_ConvertInput( m, args, lineNumber));
m.name = "Line";
m.jsname = "QB.sub_Line";
m.sync = False;
}
} else if ( m.name == "Name" ) {
js = (await func_CallMethod( m)) + "(" + (await func_ConvertSubName( args, lineNumber)) + ");";
} else if ( m.name == "PSet" | m.name == "Circle" | m.name == "PReset" | m.name == "Paint" ) {
js = (await func_CallMethod( m)) + "(" + (await func_ConvertPSet( args, lineNumber)) + ");";
} else if ( m.name == "Print" ) {
js = (await func_ConvertPrint( m, args, lineNumber));
} else if ( m.name == "Put" | m.name == "Get" ) {
js = (await func_ConvertPut( m, args, lineNumber));
} else if ( m.name == "Randomize" ) {
js = (await func_ConvertRandomize( m, args, lineNumber));
} else if ( m.name == "Read" ) {
js = (await func_ConvertRead( m, args, lineNumber));
} else if ( m.name == "Restore" ) {
js = (await func_CallMethod( m)) + "('" + (QB.func_UCase( args)) + "');";
} else if ( m.name == "Swap" ) {
js = (await func_ConvertSwap( m, args, lineNumber));
} else if ( m.name == "Window" ) {
js = (await func_CallMethod( m)) + "(" + (await func_ConvertWindow( args, lineNumber)) + ");";
} else if ( m.name == "Write" ) {
js = (await func_ConvertWrite( m, args, lineNumber));
} else if ( m.name == "_PrintString" | m.name == "PrintString" ) {
js = (await func_CallMethod( m)) + "(" + (await func_ConvertPrintString( args, lineNumber)) + ");";
} else if ( m.name == "_PutImage" | m.name == "PutImage" ) {
js = (await func_CallMethod( m)) + "(" + (await func_ConvertPutImage( args, lineNumber)) + ");";
} else if ( m.name == "_FullScreen" | m.name == "FullScreen" ) {
js = (await func_CallMethod( m)) + "(" + (await func_ConvertFullScreen( args)) + ");";
} else {
js = (await func_CallMethod( m)) + "(" + (await func_ConvertMethodParams( args, lineNumber)) + ");";
}
ConvertSub = js;
return ConvertSub;
}
async function func_ConvertPut(m/*METHOD*/,args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertPut = null;
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var argc = 0; /* INTEGER */
argc = (await func_ListSplit( args, parts));
if ( argc < 3) {
await sub_AddWarning( lineNumber, "Syntax error");
return ConvertPut;
}
var fh = ''; /* STRING */ var position = ''; /* STRING */ var vname = ''; /* STRING */
fh = (QB.func__Trim( QB.arrayValue(parts, [ 1]).value));
position = (QB.func__Trim( QB.arrayValue(parts, [ 2]).value));
vname = (QB.func__Trim( QB.arrayValue(parts, [ 3]).value));
vname = (await func_Replace( vname, "()" , ""));
fh = (await func_Replace( fh, "#" , ""));
if ( position == "" ) {
position = "undefined";
}
var v = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
if (!(await func_FindVariable( vname, v, False)) ) {
if (!(await func_FindVariable( vname, v, True)) ) {
await sub_AddWarning( lineNumber, "Invalid variable '" + vname + "'");
return ConvertPut;
}
}
if ( m.name == "Put" ) {
ConvertPut = (await func_CallMethod( m)) + "(" + fh + ", " + position + ", '" + v.type + "', " + v.jsname + ");";
} else {
var js = ''; /* STRING */ var varobj = ''; /* STRING */
varobj = await func_GenJSVar();
js = "var " + varobj + " = { value: " + v.jsname + " }; ";
js = js + (await func_CallMethod( m)) + "(" + fh + ", " + position + ", '" + v.type + "', " + varobj + "); ";
js = js + v.jsname + " = " + varobj + ".value;";
ConvertPut = js;
}
return ConvertPut;
}
async function func_ConvertFullScreen(args/*STRING*/) {
if (QB.halted()) { return; };
var ConvertFullScreen = null;
var parts = QB.initArray([{l:0,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" | arg == "OFF" ) {
mode = "QB.OFF";
} else if ( arg == "_STRETCH" | arg == "STRETCH" ) {
mode = "QB.STRETCH";
} else if ( arg == "_SQUAREPIXELS" | arg == "SQUAREPIXELS" ) {
mode = "QB.SQUAREPIXELS";
}
}
if ( argc > 1) {
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "_SMOOTH" | (QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "SMOOTH" ) {
doSmooth = "true";
}
}
ConvertFullScreen = mode + ", " + doSmooth;
return ConvertFullScreen;
}
async function func_ConvertOpen(args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertOpen = null;
var argc = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var filename = ''; /* STRING */ var mode = ''; /* STRING */ var handle = ''; /* STRING */
argc = (await func_SLSplit( args, parts , False));
if ( argc < 5) {
await sub_AddWarning( lineNumber, "Syntax Error in Open statement");
return ConvertOpen;
}
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) != "FOR" ) {
await sub_AddWarning( lineNumber, "Syntax Error in Open statement");
return ConvertOpen;
}
if ((QB.func_UCase( QB.arrayValue(parts, [ 4]).value)) != "AS" ) {
await sub_AddWarning( lineNumber, "Syntax Error in Open statement");
return ConvertOpen;
}
filename = QB.arrayValue(parts, [ 1]).value;
mode = "QB." + (QB.func_UCase( QB.arrayValue(parts, [ 3]).value));
handle = (await func_Replace( QB.arrayValue(parts, [ 5]).value , "#" , ""));
ConvertOpen = filename + ", " + mode + ", " + handle;
return ConvertOpen;
}
async function func_ConvertLine(args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertLine = null;
var argc = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var coord = ''; /* STRING */ var lcolor = ''; /* STRING */ var mode = ''; /* STRING */ var style = ''; /* STRING */
coord = (await func_ConvertCoordParam( "" , True, lineNumber));
lcolor = "undefined";
mode = "undefined";
style = "undefined";
argc = (await func_ListSplit( args, parts));
if ( argc >= 1) {
coord = (await func_ConvertCoordParam( QB.arrayValue(parts, [ 1]).value , True, lineNumber));
}
if ( argc >= 2 & (QB.func__Trim( QB.arrayValue(parts, [ 2]).value)) != "" ) {
lcolor = (await func_ConvertExpression( QB.arrayValue(parts, [ 2]).value , lineNumber));
}
if ( argc >= 3 & (QB.func__Trim( QB.arrayValue(parts, [ 3]).value)) != "" ) {
mode = "'" + (QB.func_UCase( (QB.func__Trim( QB.arrayValue(parts, [ 3]).value)))) + "'";
}
if ( argc >= 4 & (QB.func__Trim( QB.arrayValue(parts, [ 4]).value)) != "" ) {
style = (await func_ConvertExpression( QB.arrayValue(parts, [ 4]).value , lineNumber));
}
ConvertLine = coord + ", " + lcolor + ", " + mode + ", " + style;
return ConvertLine;
}
async function func_ConvertPutImage(args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertPutImage = null;
var argc = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var startCoord = ''; /* STRING */ var sourceImage = ''; /* STRING */ var destImage = ''; /* STRING */ var destCoord = ''; /* STRING */ var doSmooth = ''; /* STRING */
startCoord = (await func_ConvertCoordParam( "" , True, lineNumber));
destCoord = (await func_ConvertCoordParam( "" , True, lineNumber));
sourceImage = "undefined";
destImage = "undefined";
doSmooth = "false";
if ((await func_EndsWith( (QB.func__Trim( (QB.func_UCase( args)))) , "_SMOOTH")) | (await func_EndsWith( (QB.func__Trim( (QB.func_UCase( args)))) , "SMOOTH")) ) {
doSmooth = "true";
args = (QB.func_Left( (QB.func__Trim( args)) , (QB.func_Len( (QB.func__Trim( args)))) - 7));
}
argc = (await func_ListSplit( args, parts));
if ( argc >= 1) {
startCoord = (await func_ConvertCoordParam( QB.arrayValue(parts, [ 1]).value , True, lineNumber));
}
if ( argc >= 2) {
sourceImage = (await func_ConvertExpression( QB.arrayValue(parts, [ 2]).value , lineNumber));
}
if ( argc >= 3) {
if ((QB.func__Trim( QB.arrayValue(parts, [ 3]).value)) != "" ) {
destImage = (await func_ConvertExpression( QB.arrayValue(parts, [ 3]).value , lineNumber));
}
}
if ( argc >= 4) {
destCoord = (await func_ConvertCoordParam( QB.arrayValue(parts, [ 4]).value , True, lineNumber));
}
if ( argc >= 5) {
if ((QB.func__Trim( (QB.func_UCase( QB.arrayValue(parts, [ 5]).value)))) == "_SMOOTH" | (QB.func__Trim( (QB.func_UCase( QB.arrayValue(parts, [ 5]).value)))) == "SMOOTH" ) {
doSmooth = "true";
}
}
ConvertPutImage = startCoord + ", " + sourceImage + ", " + destImage + ", " + destCoord + ", " + doSmooth;
return ConvertPutImage;
}
async function func_ConvertWindow(args/*STRING*/,lineNumber/*INTEGER*/) {
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, lineNumber));
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, lineNumber));
ConvertWindow = invertFlag + ", " + startCord + ", " + endCord;
return ConvertWindow;
}
async function func_ConvertCls(args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertCls = null;
var argc = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
argc = (await func_ListSplit( args, parts));
var method = ''; /* STRING */ var bgcolor = ''; /* STRING */
method = "undefined";
bgcolor = "undefined";
if ( argc >= 1) {
if ((QB.func__Trim( QB.arrayValue(parts, [ 1]).value)) != "" ) {
method = (await func_ConvertExpression( QB.arrayValue(parts, [ 1]).value , lineNumber));
}
}
if ( argc >= 2) {
bgcolor = (await func_ConvertExpression( QB.arrayValue(parts, [ 2]).value , lineNumber));
}
ConvertCls = method + ", " + bgcolor;
return ConvertCls;
}
async function func_ConvertSubName(args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertSubName = null;
var argc = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var asIndex = 0; /* INTEGER */
argc = (await func_SLSplit2( args, parts));
var i = 0; /* INTEGER */
var ___v9860932 = 0; ___l5891630: for ( i= 1; i <= argc; i= i + 1) { if (QB.halted()) { return; } ___v9860932++; if (___v9860932 % 100 == 0) { await QB.autoLimit(); }
if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "AS" ) {
asIndex = i;
}
}
if ( asIndex == 0 | asIndex == argc) {
await sub_AddWarning( lineNumber, "Syntax Error");
ConvertSubName = "undefined, undefined";
} else {
var oldname = ''; /* STRING */ var newname = ''; /* STRING */
oldname = (await func_Join( parts , 1, asIndex - 1, " "));
newname = (await func_Join( parts , asIndex + 1, - 1, " "));
ConvertSubName = (await func_ConvertExpression( oldname, lineNumber)) + ", " + (await func_ConvertExpression( newname, lineNumber));
}
return ConvertSubName;
}
async function func_ConvertRandomize(m/*METHOD*/,args/*STRING*/,lineNumber/*INTEGER*/) {
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))));
}
theseed = (await func_ConvertExpression( theseed, lineNumber));
}
ConvertRandomize = (await func_CallMethod( m)) + "(" + uusing + ", " + theseed + ")";
return ConvertRandomize;
}
async function func_ConvertRead(m/*METHOD*/,args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertRead = null;
var js = ''; /* STRING */
var vname = ''; /* STRING */
var pcount = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var vars = QB.initArray([{l:0,u:0}], ''); /* STRING */
var vcount = 0; /* INTEGER */
var p = ''; /* STRING */
pcount = (await func_ListSplit( args, parts));
var i = 0; /* INTEGER */
var ___v2268660 = 0; ___l9109643: for ( i= 1; i <= pcount; i= i + 1) { if (QB.halted()) { return; } ___v2268660++; if (___v2268660 % 100 == 0) { await QB.autoLimit(); }
p = (QB.func__Trim( QB.arrayValue(parts, [ i]).value));
vcount = (QB.func_UBound( vars)) + 1;
QB.resizeArray(vars, [{l:0,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)))) + "); ";
js = js + (await func_CallMethod( m)) + "(" + vname + "); ";
var ___v9800032 = 0; ___l6951155: for ( i= 1; i <= (QB.func_UBound( vars)); i= i + 1) { if (QB.halted()) { return; } ___v9800032++; if (___v9800032 % 100 == 0) { await QB.autoLimit(); }
js = js + (await func_ConvertExpression( QB.arrayValue(vars, [ i]).value , lineNumber)) + " = " + vname + "[" + (QB.func_Str( i - 1)) + "]; ";
}
ConvertRead = js;
return ConvertRead;
}
async function func_ConvertCoordParam(param/*STRING*/,hasEndCoord/*INTEGER*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertCoordParam = null;
if ((QB.func__Trim( param)) == "" ) {
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";
idx = (await func_FindParamChar( param, "-"));
if ( idx == - 1) {
startCoord = param;
endCoord = "";
} else {
startCoord = (QB.func_Left( param, idx - 1));
endCoord = (QB.func_Right( param, (QB.func_Len( param)) - idx));
}
if ((QB.func_UCase( (QB.func_Left( (QB.func__Trim( startCoord)) , 4)))) == "STEP" ) {
sstep = "true";
}
if ((QB.func_UCase( (QB.func_Left( (QB.func__Trim( endCoord)) , 4)))) == "STEP" ) {
estep = "true";
}
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, lineNumber));
if (((QB.func__Trim( startCoord)) == "") ) {
startCoord = "undefined, undefined";
}
if ( hasEndCoord) {
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, lineNumber));
if (((QB.func__Trim( endCoord)) == "") ) {
endCoord = "undefined, undefined";
}
ConvertCoordParam = sstep + ", " + startCoord + ", " + estep + ", " + endCoord;
} else {
ConvertCoordParam = sstep + ", " + startCoord;
}
}
return ConvertCoordParam;
}
async function func_ConvertPSet(args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertPSet = null;
var firstParam = ''; /* STRING */
var theRest = ''; /* STRING */
var idx = 0; /* INTEGER */
var sstep = ''; /* STRING */
sstep = "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));
}
if ((QB.func_UCase( (QB.func__Trim( (QB.func_Left( firstParam, 4)))))) == "STEP" ) {
sstep = "true";
}
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, lineNumber));
if (((QB.func__Trim( firstParam)) == "") ) {
firstParam = "undefined, undefined";
}
theRest = (await func_ConvertExpression( theRest, lineNumber));
ConvertPSet = sstep + ", " + firstParam + ", " + theRest;
return ConvertPSet;
}
async function func_ConvertPrint(m/*METHOD*/,args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertPrint = null;
var fh = ''; /* STRING */
var pcount = 0; /* INTEGER */
var startIdx = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
pcount = (await func_PrintSplit( args, parts));
startIdx = 1;
m.jsname = "QB.sub_Print";
if ( pcount > 0) {
if ((await func_StartsWith( (QB.func__Trim( QB.arrayValue(parts, [ 1]).value)) , "#")) ) {
fh = (await func_Replace( (QB.func__Trim( QB.arrayValue(parts, [ 1]).value)) , "#" , ""));
m.jsname = "QB.sub_PrintToFile";
startIdx = 3;
if ((QB.func__Trim( QB.arrayValue(parts, [ 2]).value)) != "," ) {
await sub_AddWarning( lineNumber, "Syntax error, missing expected ','");
startIdx = 2;
}
}
}
var js = ''; /* STRING */
js = (await func_CallMethod( m)) + "(";
if ( fh != "" ) {
js = js + fh + ", ";
}
js = js + "[";
var i = 0; /* INTEGER */
var ___v5338731 = 0; ___l2439314: for ( i= startIdx; i <= pcount; i= i + 1) { if (QB.halted()) { return; } ___v5338731++; if (___v5338731 % 100 == 0) { await QB.autoLimit(); }
if ( i > startIdx) {
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 {
js = js + (await func_ConvertExpression( QB.arrayValue(parts, [ i]).value , lineNumber));
}
}
ConvertPrint = js + "]);";
return ConvertPrint;
}
async function func_ConvertWrite(m/*METHOD*/,args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertWrite = null;
var fh = ''; /* STRING */
var pcount = 0; /* INTEGER */
var startIdx = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
pcount = (await func_ListSplit( args, parts));
startIdx = 1;
m.jsname = "QB.sub_Write";
if ( pcount > 0) {
if ((await func_StartsWith( (QB.func__Trim( QB.arrayValue(parts, [ 1]).value)) , "#")) ) {
fh = (await func_Replace( (QB.func__Trim( QB.arrayValue(parts, [ 1]).value)) , "#" , ""));
m.jsname = "QB.sub_WriteToFile";
startIdx = 2;
}
}
var js = ''; /* STRING */
js = (await func_CallMethod( m)) + "(";
if ( fh != "" ) {
js = js + fh + ", ";
}
js = js + "[";
var i = 0; /* INTEGER */
var ___v9994146 = 0; ___l1063697: for ( i= startIdx; i <= pcount; i= i + 1) { if (QB.halted()) { return; } ___v9994146++; if (___v9994146 % 100 == 0) { await QB.autoLimit(); }
if ( i > startIdx) {
js = js + ",";
}
var t = ''; /* STRING */
t = "UNKNOWN";
var v = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
var isVar = 0; /* INTEGER */
isVar = (await func_FindVariable( QB.arrayValue(parts, [ i]).value , v, False));
if ( isVar) {
t = v.type;
} else if ((await func_StartsWith( QB.arrayValue(parts, [ i]).value , (QB.func_Chr( 34)))) ) {
t = "STRING";
}
if ( isVar) {
js = js + "{ type:'" + t + "', value:" + (QB.func__Trim( (await func_ConvertExpression( QB.arrayValue(parts, [ i]).value , lineNumber)))) + "}";
} else {
js = js + "{ type:'" + t + "', value:'" + (await func_Replace( (QB.func__Trim( (await func_ConvertExpression( QB.arrayValue(parts, [ i]).value , lineNumber)))) , "'" , "\\'")) + "'}";
}
}
ConvertWrite = js + "]);";
return ConvertWrite;
}
async function func_ConvertPrintString(args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertPrintString = null;
var firstParam = ''; /* STRING */
var theRest = ''; /* STRING */
var idx = 0; /* INTEGER */
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 = (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, lineNumber)) + ", " + (await func_ConvertExpression( theRest, lineNumber));
return ConvertPrintString;
}
async function func_ConvertFileLineInput(m/*METHOD*/,args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertFileLineInput = null;
var js = ''; /* STRING */
var fh = ''; /* STRING */
var vname = ''; /* STRING */
var retvar = ''; /* STRING */
var pcount = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
pcount = (await func_ListSplit( args, parts));
if ( pcount != 2) {
await sub_AddWarning( lineNumber, "Syntax error");
ConvertFileLineInput = "";
return ConvertFileLineInput;
}
fh = (await func_Replace( (QB.func__Trim( QB.arrayValue(parts, [ 1]).value)) , "#" , ""));
retvar = (QB.func__Trim( QB.arrayValue(parts, [ 2]).value));
vname = await func_GenJSVar();
js = "var " + vname + " = new Array(1); ";
js = js + (await func_CallMethod( m)) + "(" + fh + ", " + vname + "); ";
js = js + (await func_ConvertExpression( retvar, lineNumber)) + " = " + vname + "[0]; ";
ConvertFileLineInput = js;
return ConvertFileLineInput;
}
async function func_ConvertInput(m/*METHOD*/,args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertInput = null;
var js = ''; /* STRING */
var vname = ''; /* STRING */
var pcount = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var vars = QB.initArray([{l:0,u:0}], ''); /* STRING */
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 */
pcount = (await func_PrintSplit( args, parts));
var i = 0; /* INTEGER */
var ___v157039 = 0; ___l6761759: for ( i= 1; i <= pcount; i= i + 1) { if (QB.halted()) { return; } ___v157039++; if (___v157039 % 100 == 0) { await QB.autoLimit(); }
p = (QB.func__Trim( QB.arrayValue(parts, [ i]).value));
if ( p == ";" ) {
if ( i == 1) {
preventNewline = "true";
} else {
addQuestionPrompt = "true";
}
} else if ((await func_StartsWith( p, (QB.func_Chr( 34)))) ) {
prompt = p;
} else if ( p != "," ) {
vcount = (QB.func_UBound( vars)) + 1;
QB.resizeArray(vars, [{l:0,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)))) + "); ";
js = js + (await func_CallMethod( m)) + "(" + vname + ", " + preventNewline + ", " + addQuestionPrompt + ", " + prompt + "); ";
var ___v1000522 = 0; ___l5751838: for ( i= 1; i <= (QB.func_UBound( vars)); i= i + 1) { if (QB.halted()) { return; } ___v1000522++; if (___v1000522 % 100 == 0) { await QB.autoLimit(); }
var vartype = ''; /* STRING */
vartype = (await func_GetVarType( QB.arrayValue(vars, [ i]).value));
if ( vartype == "_BIT" | vartype == "_BYTE" | vartype == "INTEGER" | vartype == "LONG" | vartype == "_INTEGER64" | vartype == "_OFFSET" | vartype == "_UNSIGNED _BIT" | vartype == "_UNSIGNED _BYTE" | vartype == "_UNSIGNED INTEGER" | vartype == "_UNSIGNED LONG" | vartype == "_UNSIGNED _INTEGER64" | vartype == "_UNSIGNED _OFFSET" ) {
js = js + (await func_ConvertExpression( QB.arrayValue(vars, [ i]).value , lineNumber)) + " = QB.toInteger(" + vname + "[" + (QB.func_Str( i - 1)) + "]); ";
} else if ( vartype == "SINGLE" | vartype == "DOUBLE" | vartype == "_FLOAT" ) {
js = js + (await func_ConvertExpression( QB.arrayValue(vars, [ i]).value , lineNumber)) + " = QB.toFloat(" + vname + "[" + (QB.func_Str( i - 1)) + "]); ";
} else {
js = js + (await func_ConvertExpression( QB.arrayValue(vars, [ i]).value , lineNumber)) + " = " + vname + "[" + (QB.func_Str( i - 1)) + "]; ";
}
}
ConvertInput = js;
return ConvertInput;
}
async function func_ConvertFileInput(m/*METHOD*/,args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertFileInput = null;
var js = ''; /* STRING */
var fh = ''; /* STRING */
var vname = ''; /* STRING */
var retvar = ''; /* STRING */
var pcount = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
pcount = (await func_ListSplit( args, parts));
if ( pcount < 2) {
await sub_AddWarning( lineNumber, "Syntax error");
ConvertFileInput = "";
return ConvertFileInput;
}
fh = (await func_Replace( (QB.func__Trim( QB.arrayValue(parts, [ 1]).value)) , "#" , ""));
retvar = (QB.func__Trim( QB.arrayValue(parts, [ 2]).value));
vname = await func_GenJSVar();
js = "var " + vname + " = new Array(" + (QB.func_Str( (QB.func_UBound( parts)) - 1)) + "); ";
js = js + (await func_CallMethod( m)) + "(" + fh + ", " + vname + "); ";
var i = 0; /* INTEGER */
var ___v7988844 = 0; ___l1030226: for ( i= 2; i <= (QB.func_UBound( parts)); i= i + 1) { if (QB.halted()) { return; } ___v7988844++; if (___v7988844 % 100 == 0) { await QB.autoLimit(); }
var vartype = ''; /* STRING */
vartype = (await func_GetVarType( QB.arrayValue(parts, [ i]).value));
if ( vartype == "_BIT" | vartype == "_BYTE" | vartype == "INTEGER" | vartype == "LONG" | vartype == "_INTEGER64" | vartype == "_OFFSET" | vartype == "_UNSIGNED _BIT" | vartype == "_UNSIGNED _BYTE" | vartype == "_UNSIGNED INTEGER" | vartype == "_UNSIGNED LONG" | vartype == "_UNSIGNED _INTEGER64" | vartype == "_UNSIGNED _OFFSET" ) {
js = js + (await func_ConvertExpression( QB.arrayValue(parts, [ i]).value , lineNumber)) + " = QB.toInteger(" + vname + "[" + (QB.func_Str( i - 2)) + "]); ";
} else if ( vartype == "SINGLE" | vartype == "DOUBLE" | vartype == "_FLOAT" ) {
js = js + (await func_ConvertExpression( QB.arrayValue(parts, [ i]).value , lineNumber)) + " = QB.toFloat(" + vname + "[" + (QB.func_Str( i - 2)) + "]); ";
} else {
js = js + (await func_ConvertExpression( QB.arrayValue(parts, [ i]).value , lineNumber)) + " = " + vname + "[" + (QB.func_Str( i - 2)) + "]; ";
}
}
ConvertFileInput = js;
return ConvertFileInput;
}
async function func_GetVarType(vname/*STRING*/) {
if (QB.halted()) { return; };
var GetVarType = null;
var vartype = ''; /* STRING */
vartype = "UNKNOWN";
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var pcount = 0; /* INTEGER */
var found = 0; /* INTEGER */
var v = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
var pidx = 0; /* INTEGER */
pcount = (await func_Split( vname, "." , parts));
if ( pcount == 1) {
pidx = (QB.func_InStr( vname, "("));
if ( pidx) {
vname = (QB.func_Left( vname, pidx - 1));
}
found = (await func_FindVariable( vname, v, False));
if (! found) {
found = (await func_FindVariable( vname, v, True));
}
if ( found) {
vartype = v.type;
}
} else {
vname = QB.arrayValue(parts, [ 1]).value;
pidx = (QB.func_InStr( vname, "("));
if ( pidx) {
vname = (QB.func_Left( vname, pidx - 1));
}
found = (await func_FindVariable( vname, v, False));
if (! found) {
found = (await func_FindVariable( vname, v, True));
}
if ( found) {
var typeId = 0; /* INTEGER */
typeId = (await func_FindTypeId( v.type));
var i = 0; /* INTEGER */
var j = 0; /* INTEGER */
var ___v456492 = 0; ___l2844803: for ( i= 2; i <= pcount; i= i + 1) { if (QB.halted()) { return; } ___v456492++; if (___v456492 % 100 == 0) { await QB.autoLimit(); }
var ___v3820107 = 0; ___l2957728: for ( j= 1; j <= (QB.func_UBound( typeVars)); j= j + 1) { if (QB.halted()) { return; } ___v3820107++; if (___v3820107 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(typeVars, [ j]).value .typeId == typeId & QB.arrayValue(typeVars, [ j]).value .name == QB.arrayValue(parts, [ i]).value ) {
vartype = QB.arrayValue(typeVars, [ j]).value .type;
typeId = (await func_FindTypeId( vartype));
}
}
}
}
}
GetVarType = vartype;
return GetVarType;
}
async function func_ConvertSwap(m/*METHOD*/,args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertSwap = null;
var js = ''; /* STRING */
var swapArray = ''; /* STRING */
swapArray = await func_GenJSVar();
var swapArgs = QB.initArray([{l:0,u:0}], ''); /* STRING */
var swapCount = 0; /* INTEGER */
swapCount = (await func_ListSplit( args, swapArgs));
var var1 = ''; /* STRING */
var var2 = ''; /* STRING */
var1 = (await func_ConvertExpression( QB.arrayValue(swapArgs, [ 1]).value , lineNumber));
var2 = (await func_ConvertExpression( QB.arrayValue(swapArgs, [ 2]).value , lineNumber));
js = "var " + swapArray + " = [" + var1 + "," + var2 + "]; ";
js = js + (await func_CallMethod( m)) + "(" + swapArray + "); ";
js = js + var1 + " = " + swapArray + "[0]; ";
js = js + var2 + " = " + swapArray + "[1];";
ConvertSwap = js;
return ConvertSwap;
}
async function func_GenJSVar() {
if (QB.halted()) { return; };
var GenJSVar = null;
GenJSVar = "___v" + await func_GenJSName();
return GenJSVar;
}
async function func_GenJSLabel() {
if (QB.halted()) { return; };
var GenJSLabel = null;
GenJSLabel = "___l" + await func_GenJSName();
return GenJSLabel;
}
async function func_GenJSName() {
if (QB.halted()) { return; };
var GenJSName = null;
GenJSName = (QB.func__Trim( (QB.func_Str( (QB.func__Round( QB.func_Rnd() * 10000000))))));
return GenJSName;
}
async function func_FindParamChar(s/*STRING*/,char/*STRING*/) {
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 */
var ___v9485711 = 0; ___l3009705: for ( i= 1; i <= (QB.func_Len( s)); i= i + 1) { if (QB.halted()) { return; } ___v9485711++; if (___v9485711 % 100 == 0) { await QB.autoLimit(); }
c = (QB.func_Mid( s, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
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 ___l3009705;
}
}
FindParamChar = idx;
return FindParamChar;
}
async function sub_DeclareTypeVar(parts/*STRING*/,typeId/*INTEGER*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
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 isStatic = 0; /* INTEGER */
isStatic = False;
var arraySize = ''; /* STRING */
var pstart = 0; /* INTEGER */
var bvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
var varnames = QB.initArray([{l:0,u:0}], ''); /* STRING */
var vnamecount = 0; /* INTEGER */
var findVar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
var asIdx = 0; /* INTEGER */
asIdx = 0;
bvar.typeId = typeId;
var i = 0; /* INTEGER */
var ___v4013744 = 0; ___l9798294: for ( i= 1; i <= (QB.func_UBound( parts)); i= i + 1) { if (QB.halted()) { return; } ___v4013744++; if (___v4013744 % 100 == 0) { await QB.autoLimit(); }
if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "AS" ) {
asIdx = i;
}
}
if ( asIdx == 1) {
bvar.type = (QB.func_UCase( QB.arrayValue(parts, [ asIdx + 1]).value));
var nextIdx = 0; /* INTEGER */
nextIdx = asIdx + 2;
if ( bvar.type == "_UNSIGNED" | bvar.type == "UNSIGNED" ) {
bvar.type = (await func_NormalizeType( "_UNSIGNED " + (QB.func_UCase( QB.arrayValue(parts, [ asIdx + 2]).value))));
nextIdx = asIdx + 3;
}
vnamecount = (await func_ListSplit( (await func_Join( parts , nextIdx, - 1, " ")) , varnames));
var ___v1604415 = 0; ___l2782800: for ( i= 1; i <= vnamecount; i= i + 1) { if (QB.halted()) { return; } ___v1604415++; if (___v1604415 % 100 == 0) { await QB.autoLimit(); }
vname = (QB.func__Trim( QB.arrayValue(varnames, [ i]).value));
pstart = (QB.func_InStr( vname, "("));
if ( pstart > 0) {
bvar.isArray = True;
arraySize = (await func_ConvertExpression( (QB.func_Mid( vname, pstart + 1, (QB.func_Len( vname)) - pstart - 1)) , lineNumber));
bvar.name = (await func_RemoveSuffix( (QB.func_Left( vname, pstart - 1))));
} else {
bvar.isArray = False;
arraySize = "";
bvar.name = vname;
}
await sub_AddVariable( bvar, typeVars);
}
} else {
bvar.name = QB.arrayValue(parts, [ 1]).value;
bvar.type = (QB.func_UCase( QB.arrayValue(parts, [ 3]).value));
if ( bvar.type == "_UNSIGNED" | bvar.type == "UNSIGNED" ) {
bvar.type = (await func_NormalizeType( "_UNSIGNED " + (QB.func_UCase( QB.arrayValue(parts, [ 4]).value))));
}
await sub_AddVariable( bvar, typeVars);
}
}
async function func_DeclareVar(parts/*STRING*/,lineNumber/*INTEGER*/) {
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 isStatic = 0; /* INTEGER */
isStatic = False;
var arraySize = ''; /* STRING */
var pstart = 0; /* INTEGER */
var bvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
var varnames = QB.initArray([{l:0,u:0}], ''); /* STRING */
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 = "";
preserve = "false";
if ((QB.func_UCase( QB.arrayValue(parts, [ 1]).value)) == "STATIC" ) {
if ( currentMethod == "" ) {
await sub_AddWarning( lineNumber, "STATIC must be used within a SUB/FUNCTION");
DeclareVar = "";
return DeclareVar;
} else {
isStatic = True;
}
} else if ((QB.func_UCase( QB.arrayValue(parts, [ 1]).value)) == "SHARED" ) {
if ( currentMethod == "" ) {
await sub_AddWarning( lineNumber, "SHARED must be used within a SUB/FUNCTION");
DeclareVar = "";
} else {
DeclareVar = "/* shared variable(s): " + (await func_Join( parts , 1, - 1, " ")) + " */";
}
return DeclareVar;
}
var i = 0; /* INTEGER */
var ___v6465872 = 0; ___l1628216: for ( i= 1; i <= (QB.func_UBound( parts)); i= i + 1) { if (QB.halted()) { return; } ___v6465872++; if (___v6465872 % 100 == 0) { await QB.autoLimit(); }
if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "AS" ) {
asIdx = i;
}
if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "_PRESERVE" | (QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "PRESERVE" ) {
preserve = "true";
}
if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "SHARED" ) {
isGlobal = True;
}
}
if ( asIdx == 2 | ( asIdx == 3 & ( isGlobal | preserve == "true")) | ( asIdx == 4 & isGlobal & preserve == "true") ) {
bvar.type = (QB.func_UCase( QB.arrayValue(parts, [ asIdx + 1]).value));
var nextIdx = 0; /* INTEGER */
nextIdx = asIdx + 2;
if ( bvar.type == "_UNSIGNED" | bvar.type == "UNSIGNED" ) {
bvar.type = bvar.type + " " + (QB.func_UCase( QB.arrayValue(parts, [ asIdx + 2]).value));
nextIdx = asIdx + 3;
}
bvar.typeId = (await func_FindTypeId( bvar.type));
vnamecount = (await func_ListSplit( (await func_Join( parts , nextIdx, - 1, " ")) , varnames));
var ___v4127668 = 0; ___l4100732: for ( i= 1; i <= vnamecount; i= i + 1) { if (QB.halted()) { return; } ___v4127668++; if (___v4127668 % 100 == 0) { await QB.autoLimit(); }
vname = (QB.func__Trim( QB.arrayValue(varnames, [ i]).value));
pstart = (QB.func_InStr( vname, "("));
if ( pstart > 0) {
bvar.isArray = True;
arraySize = (await func_ConvertExpression( (QB.func_Mid( vname, pstart + 1, (QB.func_Len( vname)) - pstart - 1)) , lineNumber));
bvar.name = (await func_RemoveSuffix( (QB.func_Left( vname, pstart - 1))));
} else {
bvar.isArray = False;
arraySize = "";
bvar.name = vname;
}
js = (await func_RegisterVar( bvar, js, isGlobal, isStatic, preserve, arraySize));
}
} else {
var vpartcount = 0; /* INTEGER */
var vparts = QB.initArray([{l:0,u:0}], ''); /* STRING */
nextIdx = 0;
var ___v3262062 = 0; ___l7127304: for ( i= 1; i <= (QB.func_UBound( parts)); i= i + 1) { if (QB.halted()) { return; } ___v3262062++; if (___v3262062 % 100 == 0) { await QB.autoLimit(); }
var p = ''; /* STRING */
p = (QB.func_UCase( QB.arrayValue(parts, [ i]).value));
if ( p == "DIM" | p == "REDIM" | p == "SHARED" | p == "_PRESERVE" | p == "PRESERVE" | p == "STATIC" ) {
nextIdx = i + 1;
}
}
vnamecount = (await func_ListSplit( (await func_Join( parts , nextIdx, - 1, " ")) , varnames));
var ___v2075611 = 0; ___l6331789: for ( i= 1; i <= vnamecount; i= i + 1) { if (QB.halted()) { return; } ___v2075611++; if (___v2075611 % 100 == 0) { await QB.autoLimit(); }
vpartcount = (await func_SLSplit2( QB.arrayValue(varnames, [ i]).value , vparts));
if ( vpartcount == 1) {
bvar.type = (await func_DataTypeFromName( QB.arrayValue(vparts, [ 1]).value));
} else if ( vpartcount == 3) {
bvar.type = (QB.func_UCase( QB.arrayValue(vparts, [ 3]).value));
} else if ( vpartcount == 4) {
bvar.type = (QB.func_UCase( (await func_Join( vparts , 3, - 1, " "))));
} else {
}
bvar.name = (await func_RemoveSuffix( QB.arrayValue(vparts, [ 1]).value));
bvar.typeId = (await func_FindTypeId( bvar.type));
pstart = (QB.func_InStr( bvar.name, "("));
if ( pstart > 0) {
bvar.isArray = True;
arraySize = (await func_ConvertExpression( (QB.func_Mid( bvar.name, pstart + 1, (QB.func_Len( bvar.name)) - pstart - 1)) , lineNumber));
bvar.name = (await func_RemoveSuffix( (QB.func_Left( bvar.name, pstart - 1))));
} else {
bvar.isArray = False;
arraySize = "";
}
js = (await func_RegisterVar( bvar, js, isGlobal, isStatic, preserve, arraySize));
}
}
if ( isStatic) {
QB.arrayValue(jsLines, [ staticVarLine]).value .text = QB.arrayValue(jsLines, [ staticVarLine]).value .text + js;
DeclareVar = "/* static variable(s): " + (await func_Join( parts , 1, - 1, " ")) + " */";
} else {
DeclareVar = js;
}
return DeclareVar;
}
async function func_RegisterVar(bvar/*VARIABLE*/,js/*STRING*/,isGlobal/*INTEGER*/,isStatic/*INTEGER*/,preserve/*STRING*/,arraySize/*STRING*/) {
if (QB.halted()) { return; };
var RegisterVar = null;
var findVar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
bvar.jsname = (await func_RemoveSuffix( bvar.name));
if ( isStatic) {
bvar.jsname = "$" + currentMethod + "__" + bvar.jsname;
}
bvar.type = (await func_NormalizeType( bvar.type));
if (! bvar.isArray) {
js = js + "var " + bvar.jsname + " = " + (await func_InitTypeValue( bvar.type)) + "; ";
} else {
if ((await func_FindVariable( bvar.name, findVar, True)) ) {
js = js + "QB.resizeArray(" + bvar.jsname + ", [" + (await func_FormatArraySize( arraySize)) + "], " + (await func_InitTypeValue( bvar.type)) + ", " + preserve + "); ";
} else {
js = js + "var " + bvar.jsname + " = QB.initArray([" + (await func_FormatArraySize( arraySize)) + "], " + (await func_InitTypeValue( bvar.type)) + "); ";
}
}
if ( isGlobal) {
await sub_AddVariable( bvar, globalVars);
} else {
await sub_AddVariable( bvar, localVars);
}
if ( PrintDataTypes) {
js = js + " /* " + bvar.type + " */ ";
}
RegisterVar = js;
return RegisterVar;
}
async function func_FormatArraySize(sizeString/*STRING*/) {
if (QB.halted()) { return; };
var FormatArraySize = null;
var sizeParams = ''; /* STRING */
sizeParams = "";
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var pcount = 0; /* INTEGER */
pcount = (await func_ListSplit( sizeString, parts));
var i = 0; /* INTEGER */
var ___v5833590 = 0; ___l1860135: for ( i= 1; i <= pcount; i= i + 1) { if (QB.halted()) { return; } ___v5833590++; if (___v5833590 % 100 == 0) { await QB.autoLimit(); }
var subparts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var scount = 0; /* INTEGER */
scount = (await func_SLSplit2( QB.arrayValue(parts, [ i]).value , subparts));
if ( i > 1) {
sizeParams = sizeParams + ",";
}
var j = 0; /* INTEGER */ var toIndex = 0; /* INTEGER */
toIndex = 0;
var ___v4579714 = 0; ___l807146: for ( j= 0; j <= scount; j= j + 1) { if (QB.halted()) { return; } ___v4579714++; if (___v4579714 % 100 == 0) { await QB.autoLimit(); }
if ("TO" == (QB.func_UCase( QB.arrayValue(subparts, [ j]).value)) ) {
toIndex = j;
break ___l807146;
}
}
if ( toIndex == 0) {
sizeParams = sizeParams + "{l:0,u:" + QB.arrayValue(subparts, [ 1]).value + "}";
} else {
var lb = ''; /* STRING */ var ub = ''; /* STRING */
lb = (await func_Join( subparts , 1, toIndex - 1, " "));
ub = (await func_Join( subparts , toIndex + 1, - 1, " "));
sizeParams = sizeParams + "{l:" + lb + ",u:" + ub + "}";
}
}
FormatArraySize = sizeParams;
return FormatArraySize;
}
async function func_InitTypeValue(vtype/*STRING*/) {
if (QB.halted()) { return; };
var InitTypeValue = null;
var value = ''; /* STRING */
if ( vtype == "STRING" ) {
value = "''";
} else if ( vtype == "OBJECT" ) {
value = "{}";
} 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 */
typeId = (await func_FindTypeId( vtype));
var i = 0; /* INTEGER */
var ___v2613683 = 0; ___l9057298: for ( i= 1; i <= (QB.func_UBound( typeVars)); i= i + 1) { if (QB.halted()) { return; } ___v2613683++; if (___v2613683 % 100 == 0) { await QB.autoLimit(); }
if ( typeId == QB.arrayValue(typeVars, [ i]).value .typeId) {
value = value + QB.arrayValue(typeVars, [ i]).value .name + ":" + (await func_InitTypeValue( QB.arrayValue(typeVars, [ i]).value .type)) + ",";
}
}
value = (QB.func_Left( value, (QB.func_Len( value)) - 1)) + "}";
}
InitTypeValue = value;
return InitTypeValue;
}
async function func_FindTypeId(typeName/*STRING*/) {
if (QB.halted()) { return; };
var FindTypeId = null;
var id = 0; /* INTEGER */
id = - 1;
var i = 0; /* INTEGER */
var ___v3789026 = 0; ___l7852122: for ( i= 1; i <= (QB.func_UBound( types)); i= i + 1) { if (QB.halted()) { return; } ___v3789026++; if (___v3789026 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(types, [ i]).value .name == typeName) {
id = i;
break ___l7852122;
}
}
FindTypeId = id;
return FindTypeId;
}
async function func_ConvertExpression(ex/*STRING*/,lineNumber/*INTEGER*/) {
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 */
var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; /* METHOD */
var stringLiteral = 0; /* INTEGER */
var i = 0; /* INTEGER */
i = 1;
var ___v9193771 = 0; ___l2896650: while ( i <= (QB.func_Len( ex))) { if (QB.halted()) { return; }___v9193771++; if (___v9193771 % 100 == 0) { await QB.autoLimit(); }
c = (QB.func_Mid( ex, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
js = js + c;
stringLiteral = ! stringLiteral;
} else if ( stringLiteral) {
js = js + c;
} else {
if ( c == " " | c == "," | i == (QB.func_Len( ex)) ) {
if ( i == (QB.func_Len( ex)) ) {
word = word + c;
}
var uword = ''; /* STRING */
uword = (QB.func_UCase( (QB.func__Trim( word))));
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 ( uword == "XOR" ) {
js = js + " ^ ";
} else if ( uword == "=" ) {
js = js + " == ";
} else if ( uword == "<>" ) {
js = js + " != ";
} else if ( uword == "^" ) {
js = js + " ** ";
} else if ( uword == "\\" ) {
js = js + " / ";
} else if ((await func_StartsWith( uword, "&H")) | (await func_StartsWith( uword, "&O")) | (await func_StartsWith( uword, "&B")) ) {
js = js + " QB.func_Val('" + uword + "') ";
} else {
if ((await func_FindVariable( word, bvar, False)) ) {
js = js + " " + bvar.jsname;
} else {
if ((await func_FindMethod( word, m, "FUNCTION")) ) {
if ( m.name != currentMethod) {
js = js + (await func_CallMethod( m)) + "()";
} else {
js = js + " " + word;
}
} else {
js = js + " " + word;
}
}
}
if ( c == "," & i != (QB.func_Len( ex)) ) {
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;
var ___v6276420 = 0; ___l6317424: while (! done & i <= (QB.func_Len( ex))) { if (QB.halted()) { return; }___v6276420++; if (___v6276420 % 100 == 0) { await QB.autoLimit(); }
c2 = (QB.func_Mid( ex, i, 1));
if ( c2 == (QB.func_Chr( 34)) ) {
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 = "";
if ((QB.func_Len( word)) > 0) {
if ((QB.func_Left( word, 1)) == "-" ) {
fneg = "-";
word = (QB.func_Mid( word, 2));
}
}
if ((await func_FindVariable( word, bvar, True)) ) {
if ((QB.func__Trim( ex2)) == "" ) {
js = js + fneg + bvar.jsname;
} else {
js = js + fneg + "QB.arrayValue(" + bvar.jsname + ", [" + (await func_ConvertExpression( ex2, lineNumber)) + "]).value";
}
} else if ((await func_FindMethod( word, m, "FUNCTION")) ) {
js = js + fneg + "(" + (await func_CallMethod( m)) + "(" + (await func_ConvertMethodParams( ex2, lineNumber)) + "))";
} else {
if ((QB.func__Trim( word)) != "" ) {
await sub_AddWarning( lineNumber, "Missing function or array [" + word + "]");
}
js = js + fneg + "(" + (await func_ConvertExpression( ex2, lineNumber)) + ")";
}
word = "";
} else {
word = word + c;
}
}
i = i + 1;
}
ConvertExpression = js;
return ConvertExpression;
}
async function func_ConvertMethodParams(args/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var ConvertMethodParams = null;
var js = ''; /* STRING */
var params = QB.initArray([{l:0,u:0}], ''); /* STRING */
var argc = 0; /* INTEGER */
argc = (await func_ListSplit( args, params));
var i = 0; /* INTEGER */
var ___v979738 = 0; ___l4284564: for ( i= 1; i <= argc; i= i + 1) { if (QB.halted()) { return; } ___v979738++; if (___v979738 % 100 == 0) { await QB.autoLimit(); }
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 , lineNumber));
}
}
ConvertMethodParams = js;
return ConvertMethodParams;
}
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*/) {
if (QB.halted()) { return; };
var FindVariable = null;
var found = 0; /* INTEGER */
found = False;
var i = 0; /* INTEGER */
var fvarname = ''; /* STRING */
fvarname = (QB.func__Trim( (QB.func_UCase( (await func_RemoveSuffix( varname))))));
var ___v6944853 = 0; ___l5610401: for ( i= 1; i <= (QB.func_UBound( localVars)); i= i + 1) { if (QB.halted()) { return; } ___v6944853++; if (___v6944853 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(localVars, [ i]).value .isArray == isArray & (QB.func_UCase( QB.arrayValue(localVars, [ i]).value .name)) == fvarname) {
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 ___l5610401;
}
}
if (! found) {
var ___v8348172 = 0; ___l9137176: for ( i= 1; i <= (QB.func_UBound( globalVars)); i= i + 1) { if (QB.halted()) { return; } ___v8348172++; if (___v8348172 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(globalVars, [ i]).value .isArray == isArray & (QB.func_UCase( QB.arrayValue(globalVars, [ i]).value .name)) == fvarname) {
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 ___l9137176;
}
}
}
FindVariable = found;
return FindVariable;
}
async function func_FindMethod(mname/*STRING*/,m/*METHOD*/,t/*STRING*/) {
if (QB.halted()) { return; };
var FindMethod = null;
var found = 0; /* INTEGER */
found = False;
var i = 0; /* INTEGER */
var ___v5433606 = 0; ___l226292: for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; } ___v5433606++; if (___v5433606 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(methods, [ i]).value .uname == (QB.func__Trim( (QB.func_UCase( (await func_RemoveSuffix( mname)))))) & QB.arrayValue(methods, [ i]).value .type == t) {
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;
m.sync = QB.arrayValue(methods, [ i]).value .sync;
break ___l226292;
}
}
if (! found) {
var ___v4302612 = 0; ___l9161640: for ( i= 1; i <= (QB.func_UBound( exportMethods)); i= i + 1) { if (QB.halted()) { return; } ___v4302612++; if (___v4302612 % 100 == 0) { await QB.autoLimit(); }
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 ___l9161640;
}
}
}
FindMethod = found;
return FindMethod;
}
async function sub_ConvertMethods() {
if (QB.halted()) { return; };
await sub_AddJSLine( 0, "");
var i = 0; /* INTEGER */
var ___v5024539 = 0; ___l6779477: for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; } ___v5024539++; if (___v5024539 % 100 == 0) { await QB.autoLimit(); }
if ((QB.arrayValue(methods, [ i]).value .line != 0) ) {
var lastLine = 0; /* INTEGER */
lastLine = QB.arrayValue(methods, [ i + 1]).value .line - 1;
if ( lastLine < 0) {
lastLine = (QB.func_UBound( lines));
}
QB.resizeArray(localVars, [{l:0,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}, false); /* VARIABLE */
var intConv = ''; /* STRING */
intConv = "";
var methodDec = ''; /* STRING */
methodDec = "async function " + QB.arrayValue(methods, [ i]).value .jsname + "(";
if (QB.arrayValue(methods, [ i]).value .argc > 0) {
var args = QB.initArray([{l:0,u:0}], ''); /* STRING */
var c = 0; /* INTEGER */
c = (await func_Split( QB.arrayValue(methods, [ i]).value .args, "," , args));
var a = 0; /* INTEGER */
var ___v4629800 = 0; ___l5137375: for ( a= 1; a <= c; a= a + 1) { if (QB.halted()) { return; } ___v4629800++; if (___v4629800 % 100 == 0) { await QB.autoLimit(); }
var v = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
v = (await func_Split( QB.arrayValue(args, [ a]).value , ":" , parts));
methodDec = methodDec + (await func_RemoveSuffix( 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 = (await func_RemoveSuffix( QB.arrayValue(parts, [ 1]).value));
bvar.type = (await func_NormalizeType( QB.arrayValue(parts, [ 2]).value));
bvar.typeId = (await func_FindTypeId( bvar.type));
if (QB.arrayValue(parts, [ 3]).value == "true" ) {
bvar.isArray = True;
}
bvar.jsname = "";
await sub_AddVariable( bvar, localVars);
if (! bvar.isArray) {
var typeName = ''; /* STRING */
typeName = (QB.func_UCase( bvar.type));
if ( typeName == "_BIT" | typeName == "_UNSIGNED _BIT" | typeName == "_BYTE" | typeName == "_UNSIGNED _BYTE" | typeName == "INTEGER" | typeName == "_UNSIGNED INTEGER" | typeName == "LONG" | typeName == "_UNSIGNED LONG" | typeName == "_INTEGER64" | typeName == "_UNSIGNED _INTEGER64" ) {
var varIsArray = 0; /* INTEGER */
if ((await func_FindVariable( bvar.name, bvar, varIsArray)) ) {
intConv = intConv + bvar.jsname + " = Math.round(" + bvar.jsname + "); ";
}
}
}
}
}
methodDec = methodDec + ") {";
await sub_AddJSLine( QB.arrayValue(methods, [ i]).value .line, methodDec);
await sub_AddJSLine( QB.arrayValue(methods, [ i]).value .line, "if (QB.halted()) { return; }; " + intConv);
if (QB.arrayValue(methods, [ i]).value .type == "FUNCTION" ) {
await sub_AddJSLine( QB.arrayValue(methods, [ i]).value .line, "var " + (await func_RemoveSuffix( QB.arrayValue(methods, [ i]).value .name)) + " = null;");
}
currentMethod = QB.arrayValue(methods, [ i]).value .name;
await sub_ConvertLines( QB.arrayValue(methods, [ i]).value .line + 1, lastLine - 1, QB.arrayValue(methods, [ i]).value .name);
if (QB.arrayValue(methods, [ i]).value .type == "FUNCTION" ) {
await sub_AddJSLine( lastLine, "return " + (await func_RemoveSuffix( QB.arrayValue(methods, [ i]).value .name)) + ";");
}
await sub_AddJSLine( lastLine, "}");
}
}
if ((QB.func_UBound( exportLines)) > 0) {
await sub_AddJSLine( 0, "return {");
var ___v4048342 = 0; ___l3534726: for ( i= 1; i <= (QB.func_UBound( exportLines)); i= i + 1) { if (QB.halted()) { return; } ___v4048342++; if (___v4048342 % 100 == 0) { await QB.autoLimit(); }
await sub_AddJSLine( i, QB.arrayValue(exportLines, [ i]).value);
}
await sub_AddJSLine( 0, "};");
QB.resizeArray(exportLines, [{l:0,u:0}], '', false); /* STRING */
}
}
async function sub_ReadLinesFromFile(filename/*STRING*/) {
if (QB.halted()) { return; };
var fline = ''; /* STRING */
var lineIndex = 0; /* INTEGER */
var rawJS = 0; /* SINGLE */
await QB.sub_Open(filename, QB.INPUT, 1);
var ___v555935 = 0; ___l2697316: while (!((QB.func_EOF( 1)))) { if (QB.halted()) { return; }___v555935++; if (___v555935 % 100 == 0) { await QB.autoLimit(); }
var ___v2438452 = new Array(1); await QB.sub_LineInputFromFile(1, ___v2438452); fline = ___v2438452[0];
lineIndex = lineIndex + 1;
if ((QB.func__Trim( fline)) != "" ) {
var ___v609162 = 0; ___l9790779: while ((await func_EndsWith( fline, " _"))) { if (QB.halted()) { return; }___v609162++; if (___v609162 % 100 == 0) { await QB.autoLimit(); }
var nextLine = ''; /* STRING */
var ___v3902914 = new Array(1); await QB.sub_LineInputFromFile(1, ___v3902914); nextLine = ___v3902914[0];
fline = (QB.func_Left( fline, (QB.func_Len( fline)) - 1)) + nextLine;
}
rawJS = (await func_ReadLine( lineIndex, fline, rawJS));
}
}
QB.sub_Close(1);
}
async function sub_ReadLinesFromText(sourceText/*STRING*/) {
if (QB.halted()) { return; };
var sourceLines = QB.initArray([{l:0,u:0}], ''); /* STRING */
var rawJS = 0; /* SINGLE */
var lcount = 0; /* INTEGER */
var i = 0; /* INTEGER */
lcount = (await func_Split( sourceText, await func_LF(), sourceLines));
var ___v4898948 = 0; ___l3649954: for ( i= 1; i <= lcount; i= i + 1) { if (QB.halted()) { return; } ___v4898948++; if (___v4898948 % 100 == 0) { await QB.autoLimit(); }
var fline = ''; /* STRING */
fline = QB.arrayValue(sourceLines, [ i]).value;
if ((QB.func__Trim( fline)) != "" ) {
var lineIndex = 0; /* INTEGER */
lineIndex = i;
if ((await func_StartsWith( (QB.func_LTrim( (QB.func_UCase( fline)))) , "IMPORT")) ) {
var parts = QB.initArray([{l:0,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;
}
}
var ___v4744592 = 0; ___l1556631: while ((await func_EndsWith( fline, "_"))) { if (QB.halted()) { return; }___v4744592++; if (___v4744592 % 100 == 0) { await QB.autoLimit(); }
i = i + 1;
var nextLine = ''; /* STRING */
nextLine = QB.arrayValue(sourceLines, [ i]).value;
fline = (QB.func_Left( fline, (QB.func_Len( fline)) - 1)) + nextLine;
}
rawJS = (await func_ReadLine( i, fline, rawJS));
}
}
}
async function func_ReadLine(lineIndex/*INTEGER*/,fline/*STRING*/,rawJS/*INTEGER*/) {
if (QB.halted()) { return; };
var ReadLine = null;
var quoteDepth = 0; /* INTEGER */
quoteDepth = 0;
var i = 0; /* INTEGER */
var ___v6287518 = 0; ___l2572676: for ( i= 1; i <= (QB.func_Len( fline)); i= i + 1) { if (QB.halted()) { return; } ___v6287518++; if (___v6287518 % 100 == 0) { await QB.autoLimit(); }
var c = ''; /* STRING */ var c4 = ''; /* STRING */
c = (QB.func_Mid( fline, i, 1));
c4 = (QB.func_UCase( (QB.func_Mid( fline, i, 4))));
if ( c == (QB.func_Chr( 34)) ) {
if ( quoteDepth == 0) {
quoteDepth = 1;
} else {
quoteDepth = 0;
}
}
if ( quoteDepth == 0 & ( c == "'" | c4 == "REM ") ) {
fline = (QB.func_Left( fline, i - 1));
break ___l2572676;
}
}
ReadLine = rawJS;
if ((QB.func__Trim( fline)) == "" ) {
return ReadLine;
}
var word = ''; /* STRING */
var words = QB.initArray([{l:0,u:0}], ''); /* STRING */
var wcount = 0; /* INTEGER */
wcount = (await func_SLSplit( fline, words , False));
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;
}
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:0,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:0,u:0}], ''); /* STRING */
dcount = (await func_ListSplit( dstr, de));
var ___v1563022 = 0; ___l5420702: for ( i= 1; i <= dcount; i= i + 1) { if (QB.halted()) { return; } ___v1563022++; if (___v1563022 % 100 == 0) { await QB.autoLimit(); }
index = (QB.func_UBound( dataArray)) + 1;
QB.resizeArray(dataArray, [{l:0,u:index}], '', true); /* STRING */
QB.arrayValue(dataArray, [ index]).value = QB.arrayValue(de, [ i]).value;
}
return ReadLine;
}
var ifIdx = 0; /* INTEGER */ var thenIdx = 0; /* INTEGER */ var elseIdx = 0; /* INTEGER */
var ___v6544994 = 0; ___l9385452: for ( i= 1; i <= wcount; i= i + 1) { if (QB.halted()) { return; } ___v6544994++; if (___v6544994 % 100 == 0) { await QB.autoLimit(); }
word = (QB.func_UCase( QB.arrayValue(words, [ i]).value));
if ( word == "IF" ) {
ifIdx = i;
} else if ( word == "THEN" ) {
thenIdx = i;
} else if ( word == "ELSE" ) {
elseIdx = i;
}
}
if ( ifIdx > 1) {
if ((QB.func_UCase( QB.arrayValue(words, [ ifIdx - 1]).value)) != "END" ) {
await sub_AddSubLines( lineIndex, (await func_Join( words , 1, ifIdx - 1, " ")));
}
}
if ( thenIdx > 0 & thenIdx < wcount) {
await sub_AddLine( lineIndex, (await func_Join( words , ifIdx, thenIdx, " ")));
if ( elseIdx > 0) {
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, " ")));
} else {
await sub_AddSubLines( lineIndex, (await func_Join( words , thenIdx + 1, - 1, " ")));
}
await sub_AddLine( lineIndex, "End If");
} else {
await sub_AddSubLines( lineIndex, fline);
}
return ReadLine;
}
async function sub_AddSubLines(lineIndex/*INTEGER*/,fline/*STRING*/) {
if (QB.halted()) { return; };
var quoteDepth = 0; /* INTEGER */
quoteDepth = 0;
var i = 0; /* INTEGER */
var ___v3904714 = 0; ___l5060874: for ( i= 1; i <= (QB.func_Len( fline)); i= i + 1) { if (QB.halted()) { return; } ___v3904714++; if (___v3904714 % 100 == 0) { await QB.autoLimit(); }
var c = ''; /* STRING */
c = (QB.func_Mid( fline, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
if ( quoteDepth == 0) {
quoteDepth = 1;
} else {
quoteDepth = 0;
}
}
if ( quoteDepth == 0 & c == ":" ) {
await sub_AddLine( lineIndex, (QB.func_Left( fline, i - 1)));
fline = (QB.func_Right( fline, (QB.func_Len( fline)) - i));
i = 0;
}
}
await sub_AddLine( lineIndex, fline);
}
async function sub_FindMethods() {
if (QB.halted()) { return; };
var i = 0; /* INTEGER */
var pcount = 0; /* INTEGER */
var rawJS = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var ___v7839952 = 0; ___l1073753: for ( i= 1; i <= (QB.func_UBound( lines)); i= i + 1) { if (QB.halted()) { return; } ___v7839952++; if (___v7839952 % 100 == 0) { await QB.autoLimit(); }
pcount = (await func_Split( QB.arrayValue(lines, [ i]).value .text, " " , parts));
var word = ''; /* STRING */
word = (QB.func_UCase( QB.arrayValue(parts, [ 1]).value));
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;
}
if ( word == "FUNCTION" | word == "SUB" ) {
var mstr = ''; /* STRING */
var argstr = ''; /* STRING */
var pstart = 0; /* INTEGER */
var mname = ''; /* STRING */
var pend = 0; /* SINGLE */
mstr = (await func_Join( parts , 2, - 1, " "));
pstart = (QB.func_InStr( mstr, "("));
if ( pstart == 0) {
argstr = "";
mname = mstr;
} else {
mname = (QB.func__Trim( (QB.func_Left( mstr, pstart - 1))));
mstr = (QB.func_Mid( mstr, pstart + 1));
pend = (QB.func__InStrRev( mstr, ")"));
argstr = (QB.func_Left( mstr, pend - 1));
}
var arga = QB.initArray([{l:0,u:0}], ''); /* STRING */
var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; /* METHOD */
m.line = i;
m.type = word;
m.name = mname;
m.argc = (await func_ListSplit( argstr, arga));
m.args = "";
var args = QB.initArray([{l:0,u:0}], {name:'',type:''}); /* ARGUMENT */
if ((QB.func_UBound( arga)) > 0) {
var a = 0; /* INTEGER */
var args = ''; /* STRING */
args = "";
var ___v7536881 = 0; ___l4596408: for ( a= 1; a <= m.argc; a= a + 1) { if (QB.halted()) { return; } ___v7536881++; if (___v7536881 % 100 == 0) { await QB.autoLimit(); }
var aparts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var apcount = 0; /* INTEGER */
var argname = ''; /* STRING */
var isArray = ''; /* STRING */
isArray = "false";
apcount = (await func_Split( QB.arrayValue(arga, [ a]).value , " " , aparts));
argname = QB.arrayValue(aparts, [ 1]).value;
if ((await func_EndsWith( argname, "()")) ) {
isArray = "true";
argname = (QB.func_Left( argname, (QB.func_Len( argname)) - 2));
}
if ( apcount == 3) {
args = args + argname + ":" + (QB.func_UCase( QB.arrayValue(aparts, [ 3]).value)) + ":" + isArray;
} else {
args = args + argname + ":" + (await func_DataTypeFromName( QB.arrayValue(aparts, [ 1]).value)) + ":" + isArray;
}
if ( a != m.argc) {
args = args + ",";
}
}
m.args = args;
}
await sub_AddMethod( m, "" , True);
}
}
}
async function func_Split(sourceString/*STRING*/,delimiter/*STRING*/,results/*STRING*/) {
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 == " " ) {
cstr = (QB.func_RTrim( (QB.func_LTrim( cstr))));
p = (QB.func_InStr( cstr, " "));
var ___v8327302 = 0; ___l5960946: while ( p > 0) { if (QB.halted()) { return; }___v8327302++; if (___v8327302 % 100 == 0) { await QB.autoLimit(); }
cstr = (QB.func_Mid( cstr, 1, p - 1)) + (QB.func_Mid( cstr, p + 1));
p = (QB.func_InStr( cstr, " "));
}
}
curpos = 1;
arrpos = 0;
dpos = (QB.func_InStr( curpos, cstr, delimiter));
var ___v2103686 = 0; ___l187584: while (!( dpos == 0)) { if (QB.halted()) { return; }___v2103686++; if (___v2103686 % 100 == 0) { await QB.autoLimit(); }
arrpos = arrpos + 1;
QB.resizeArray(results, [{l:0,u:arrpos}], '', true); /* STRING */
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));
}
arrpos = arrpos + 1;
QB.resizeArray(results, [{l:0,u:arrpos}], '', true); /* STRING */
QB.arrayValue(results, [ arrpos]).value = (QB.func_Mid( cstr, curpos));
Split = arrpos;
return Split;
}
async function func_SLSplit(sourceString/*STRING*/,results/*STRING*/,escapeStrings/*INTEGER*/) {
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 */
cstr = (QB.func__Trim( sourceString));
QB.resizeArray(results, [{l:0,u:0}], '', false); /* STRING */
var lastChar = ''; /* STRING */
var quoteMode = 0; /* INTEGER */
var result = ''; /* STRING */
var count = 0; /* INTEGER */
var i = 0; /* INTEGER */
var ___v1054527 = 0; ___l739533: for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } ___v1054527++; if (___v1054527 % 100 == 0) { await QB.autoLimit(); }
var c = ''; /* STRING */ var c2 = ''; /* STRING */
c = (QB.func_Mid( cstr, i, 1));
c2 = (QB.func_Mid( cstr, i, 2));
var oplen = 0; /* INTEGER */
oplen = (await func_FindOperator( c, c2));
if ( c == (QB.func_Chr( 34)) ) {
quoteMode = ! quoteMode;
result = result + c;
if (! quoteMode & escapeStrings) {
result = (await func_Replace( result, "\\" , "\\\\"));
}
} else if ( c == " " ) {
if ( quoteMode) {
result = result + c;
} else if ( lastChar == " " ) {
} else {
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:0,u:count}], '', true); /* STRING */
QB.arrayValue(results, [ count]).value = result;
result = "";
}
} else if ( oplen) {
if ( quoteMode) {
if ( oplen == 2) {
result = result + c2;
i = i + 1;
} else {
result = result + c;
}
} else {
if ( result != "" ) {
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:0,u:count}], '', true); /* STRING */
QB.arrayValue(results, [ count]).value = result;
}
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:0,u:count}], '', true); /* STRING */
if ( oplen == 2) {
QB.arrayValue(results, [ count]).value = c2;
i = i + 1;
} else {
QB.arrayValue(results, [ count]).value = c;
}
result = "";
}
} else {
result = result + c;
}
lastChar = c;
}
if ( result != "" ) {
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:0,u:count}], '', true); /* STRING */
QB.arrayValue(results, [ count]).value = result;
}
SLSplit = (QB.func_UBound( results));
return SLSplit;
}
async function func_FindOperator(c/*STRING*/,c2/*STRING*/) {
if (QB.halted()) { return; };
var FindOperator = null;
if ( c2 == ">=" ) {
FindOperator = 2;
} else if ( c2 == "<=" ) {
FindOperator = 2;
} else if ( c2 == "<>" ) {
FindOperator = 2;
} else if ( c == "=" ) {
FindOperator = 1;
} else if ( c == "+" ) {
FindOperator = 1;
} else if ( c == "-" ) {
FindOperator = 1;
} else if ( c == "/" ) {
FindOperator = 1;
} else if ( c == "\\" ) {
FindOperator = 1;
} else if ( c == "*" ) {
FindOperator = 1;
} else if ( c == "^" ) {
FindOperator = 1;
} else if ( c == "," ) {
FindOperator = 1;
} else {
FindOperator = 0;
}
return FindOperator;
}
async function sub_CheckParen(sourceString/*STRING*/,lineNumber/*LONG*/) {
if (QB.halted()) { return; };
var i = 0; /* INTEGER */
var quoteMode = 0; /* INTEGER */
var paren = 0; /* INTEGER */
var ___v1282499 = 0; ___l3316944: for ( i= 1; i <= (QB.func_Len( sourceString)); i= i + 1) { if (QB.halted()) { return; } ___v1282499++; if (___v1282499 % 100 == 0) { await QB.autoLimit(); }
var c = ''; /* STRING */
c = (QB.func_Mid( sourceString, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
quoteMode = ! quoteMode;
} else if ( quoteMode) {
} else if ( c == "(" ) {
paren = paren + 1;
} else if ( c == ")" ) {
paren = paren - 1;
}
}
if ( paren < 0) {
await sub_AddError( lineNumber, "Missing (");
} else if ( paren > 0) {
await sub_AddError( lineNumber, "Missing )");
}
}
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 */
cstr = (QB.func__Trim( sourceString));
QB.resizeArray(results, [{l:0,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 */
var ___v5367940 = 0; ___l2412: for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } ___v5367940++; if (___v5367940 % 100 == 0) { await QB.autoLimit(); }
var c = ''; /* STRING */
c = (QB.func_Mid( cstr, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
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 {
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:0,u:count}], '', true); /* STRING */
QB.arrayValue(results, [ count]).value = result;
result = "";
}
} else {
result = result + c;
}
lastChar = c;
}
if ( result != "" ) {
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:0,u:count}], '', true); /* STRING */
QB.arrayValue(results, [ count]).value = result;
}
SLSplit2 = (QB.func_UBound( results));
return SLSplit2;
}
async function func_ListSplit(sourceString/*STRING*/,results/*STRING*/) {
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 */
cstr = (QB.func__Trim( sourceString));
QB.resizeArray(results, [{l:0,u:0}], '', false); /* STRING */
var quoteMode = 0; /* INTEGER */
var result = ''; /* STRING */
var count = 0; /* INTEGER */
var paren = 0; /* INTEGER */
var i = 0; /* INTEGER */
var ___v5440140 = 0; ___l6570550: for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } ___v5440140++; if (___v5440140 % 100 == 0) { await QB.autoLimit(); }
var c = ''; /* STRING */
c = (QB.func_Mid( cstr, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
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 == "," ) {
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:0,u:count}], '', true); /* STRING */
QB.arrayValue(results, [ count]).value = result;
result = "";
} else {
result = result + c;
}
}
if ( result != "" ) {
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:0,u:count}], '', true); /* STRING */
QB.arrayValue(results, [ count]).value = result;
}
ListSplit = (QB.func_UBound( results));
return ListSplit;
}
async function func_PrintSplit(sourceString/*STRING*/,results/*STRING*/) {
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 */
cstr = (QB.func__Trim( sourceString));
QB.resizeArray(results, [{l:0,u:0}], '', false); /* STRING */
var quoteMode = 0; /* INTEGER */
var result = ''; /* STRING */
var count = 0; /* INTEGER */
var paren = 0; /* INTEGER */
var i = 0; /* INTEGER */
var ___v818936 = 0; ___l8274118: for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } ___v818936++; if (___v818936 % 100 == 0) { await QB.autoLimit(); }
var c = ''; /* STRING */
c = (QB.func_Mid( cstr, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
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 != "" ) {
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:0,u:count}], '', true); /* STRING */
QB.arrayValue(results, [ count]).value = result;
result = "";
}
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:0,u:count}], '', true); /* STRING */
QB.arrayValue(results, [ count]).value = c;
} else {
result = result + c;
}
}
if ( result != "" ) {
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:0,u:count}], '', true); /* STRING */
QB.arrayValue(results, [ count]).value = result;
}
PrintSplit = (QB.func_UBound( results));
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 */
var ___v6789134 = 0; ___l1919225: for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; } ___v6789134++; if (___v6789134 % 100 == 0) { await QB.autoLimit(); }
var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; /* METHOD */
m = QB.arrayValue(methods, [ i]).value;
await QB.sub_Print([(QB.func_Str( m.line)) + ": " + m.type + " - " + m.name + " [" + m.jsname + "] - " + m.returnType + " - " + m.args]);
}
}
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 */
var ___v3570231 = 0; ___l4542078: for ( i= 1; i <= (QB.func_UBound( types)); i= i + 1) { if (QB.halted()) { return; } ___v3570231++; if (___v3570231 % 100 == 0) { await QB.autoLimit(); }
var t = {line:0,name:'',argc:0,args:''}; /* QBTYPE */
t = QB.arrayValue(types, [ i]).value;
await QB.sub_Print([(QB.func_Str( t.line)) + ": " + t.name]);
var v = 0; /* INTEGER */
var ___v7043958 = 0; ___l1499811: for ( v= 1; v <= (QB.func_UBound( typeVars)); v= v + 1) { if (QB.halted()) { return; } ___v7043958++; if (___v7043958 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(typeVars, [ i]).value .typeId == i) {
await QB.sub_Print([" -> " + QB.arrayValue(typeVars, [ v]).value .name + ": " + QB.arrayValue(typeVars, [ v]).value .type]);
}
}
}
}
async function sub_CopyMethod(fromMethod/*METHOD*/,toMethod/*METHOD*/) {
if (QB.halted()) { return; };
toMethod.type = fromMethod.type;
toMethod.name = fromMethod.name;
toMethod.returnType = fromMethod.returnType;
toMethod.name = fromMethod.name;
toMethod.uname = fromMethod.uname;
toMethod.argc = fromMethod.argc;
toMethod.args = fromMethod.args;
toMethod.jsname = fromMethod.jsname;
toMethod.sync = fromMethod.sync;
}
async function sub_AddMethod(m/*METHOD*/,prefix/*STRING*/,sync/*INTEGER*/) {
if (QB.halted()) { return; };
var mcount = 0; /* SINGLE */
mcount = (QB.func_UBound( methods)) + 1;
QB.resizeArray(methods, [{l:0,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.sync = sync;
QB.arrayValue(methods, [ mcount]).value = m;
}
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:0,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;
}
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);
}
async function sub_AddGXMethod(mtype/*STRING*/,mname/*STRING*/,sync/*INTEGER*/) {
if (QB.halted()) { return; };
var mcount = 0; /* SINGLE */
mcount = (QB.func_UBound( methods)) + 1;
QB.resizeArray(methods, [{l:0,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 */
m.type = mtype;
m.name = mname;
m.uname = (QB.func_UCase( m.name));
m.sync = sync;
m.jsname = (await func_GXMethodJS( (await func_RemoveSuffix( mname))));
if ( mtype == "FUNCTION" ) {
m.returnType = (await func_DataTypeFromName( mname));
}
QB.arrayValue(methods, [ mcount]).value = m;
}
async function sub_AddQBMethod(mtype/*STRING*/,mname/*STRING*/,sync/*INTEGER*/) {
if (QB.halted()) { return; };
var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; /* METHOD */
m.type = mtype;
m.name = mname;
await sub_AddMethod( m, "QB." , sync);
if ((QB.func_InStr( mname, "_")) == 1) {
var m2 = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; /* METHOD */
await sub_CopyMethod( QB.arrayValue(methods, [(QB.func_UBound( methods))]).value , m2);
m2.name = (QB.func_Mid( mname, 2));
m2.uname = (QB.func_UCase( (await func_RemoveSuffix( m2.name))));
var mcount = 0; /* SINGLE */
mcount = (QB.func_UBound( methods)) + 1;
QB.resizeArray(methods, [{l:0,u:mcount}], {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}, true); /* METHOD */
QB.arrayValue(methods, [ mcount]).value = m2;
}
}
async function sub_AddNativeMethod(mtype/*STRING*/,mname/*STRING*/,jsname/*STRING*/,sync/*INTEGER*/) {
if (QB.halted()) { return; };
var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; /* METHOD */
m.type = mtype;
m.name = mname;
m.uname = (QB.func_UCase( m.name));
m.jsname = jsname;
m.sync = sync;
var mcount = 0; /* SINGLE */
mcount = (QB.func_UBound( methods)) + 1;
QB.resizeArray(methods, [{l:0,u:mcount}], {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}, true); /* METHOD */
QB.arrayValue(methods, [ mcount]).value = m;
}
async function sub_AddLine(lineIndex/*INTEGER*/,fline/*STRING*/) {
if (QB.halted()) { return; };
await sub___AddLine( lineIndex, fline);
}
async function sub___AddLine(lineIndex/*INTEGER*/,fline/*STRING*/) {
if (QB.halted()) { return; };
var lcount = 0; /* INTEGER */
lcount = (QB.func_UBound( lines)) + 1;
QB.resizeArray(lines, [{l:0,u:lcount}], {line:0,text:'',mtype:0}, true); /* CODELINE */
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 */
lcount = (QB.func_UBound( jsLines)) + 1;
QB.resizeArray(jsLines, [{l:0,u:lcount}], {line:0,text:'',mtype:0}, true); /* CODELINE */
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 */
lcount = (QB.func_UBound( warnings)) + 1;
QB.resizeArray(warnings, [{l:0,u:lcount}], {line:0,text:'',mtype:0}, true); /* CODELINE */
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_AddError(sourceLine/*INTEGER*/,msgText/*STRING*/) {
if (QB.halted()) { return; };
await sub_AddWarning( sourceLine, msgText);
QB.arrayValue(warnings, [(QB.func_UBound( warnings))]).value .mtype = MERROR;
}
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;
await sub_AddVariable( v, globalVars);
}
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 */
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));
}
v.jsname = "GX." + jsname;
}
v.isConst = True;
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);
if ((QB.func_InStr( vname, "_")) == 1) {
var v2 = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
v2.type = v.type;
v2.name = (QB.func_Mid( v.name, 2));
v2.jsname = v.jsname;
v2.isConst = v.isConst;
await sub_AddVariable( v2, globalVars);
}
}
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;
await sub_AddVariable( v, globalVars);
}
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;
await sub_AddVariable( v, localVars);
}
async function sub_AddVariable(bvar/*VARIABLE*/,vlist/*VARIABLE*/) {
if (QB.halted()) { return; };
var vcount = 0; /* SINGLE */
vcount = (QB.func_UBound( vlist)) + 1;
QB.resizeArray(vlist, [{l:0,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 = (await func_NormalizeType( 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 == "" ) {
nvar.jsname = (await func_RemoveSuffix( nvar.name));
}
QB.arrayValue(vlist, [ vcount]).value = nvar;
}
async function func_NormalizeType(itype/*STRING*/) {
if (QB.halted()) { return; };
var NormalizeType = null;
var otype = ''; /* STRING */
if ( itype == "BIT" ) {
otype = "_BIT";
} else if ( itype == "_UNSIGNED BIT" ) {
otype = "_UNSIGNED _BIT";
} else if ( itype == "BYTE" ) {
otype = "_BYTE";
} else if ( itype == "_UNSIGNED BYTE" ) {
otype = "_UNSIGNED _BYTE";
} else if ( itype == "INTEGER64" ) {
otype = "_INTEGER64";
} else if ( itype == "_UNSIGNED INTEGER64" ) {
otype = "_UNSIGNED _INTEGER64";
} else if ( itype == "FLOAT" ) {
otype = "_FLOAT";
} else if ( itype == "OFFSET" ) {
otype = "_OFFSET";
} else if ( itype == "_UNSIGNED OFFSET" ) {
otype = "_UNSIGNED _OFFSET";
} else {
otype = itype;
}
NormalizeType = otype;
return NormalizeType;
}
async function sub_AddType(t/*QBTYPE*/) {
if (QB.halted()) { return; };
var tcount = 0; /* SINGLE */
tcount = (QB.func_UBound( types)) + 1;
QB.resizeArray(types, [{l:0,u:tcount}], {line:0,name:'',argc:0,args:''}, true); /* QBTYPE */
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;
await sub_AddType( t);
var typeId = 0; /* INTEGER */
typeId = (QB.func_UBound( types));
var count = 0; /* INTEGER */
var pairs = QB.initArray([{l:0,u:0}], ''); /* STRING */
count = (await func_Split( args, "," , pairs));
var i = 0; /* INTEGER */
var ___v5302125 = 0; ___l9287860: for ( i= 1; i <= (QB.func_UBound( pairs)); i= i + 1) { if (QB.halted()) { return; } ___v5302125++; if (___v5302125 % 100 == 0) { await QB.autoLimit(); }
var nv = QB.initArray([{l:0,u:0}], ''); /* STRING */
count = (await func_Split( QB.arrayValue(pairs, [ i]).value , ":" , nv));
var tvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
tvar.typeId = typeId;
tvar.name = QB.arrayValue(nv, [ 1]).value;
tvar.type = (QB.func_UCase( QB.arrayValue(nv, [ 2]).value));
await sub_AddVariable( tvar, typeVars);
}
}
async function func_MainEnd() {
if (QB.halted()) { return; };
var MainEnd = null;
if ( programMethods == 0) {
MainEnd = (QB.func_UBound( lines));
} else {
MainEnd = QB.arrayValue(methods, [ 1]).value .line - 1;
}
return MainEnd;
}
async function func_RemoveSuffix(vname/*STRING*/) {
if (QB.halted()) { return; };
var RemoveSuffix = null;
var i = 0; /* INTEGER */
var done = 0; /* INTEGER */
var c = ''; /* STRING */
vname = (QB.func__Trim( vname));
i = (QB.func_Len( vname));
var ___v7577293 = 0; ___l896414: while (! done) { if (QB.halted()) { return; }___v7577293++; if (___v7577293 % 100 == 0) { await QB.autoLimit(); }
c = (QB.func_Mid( vname, i, 1));
if ( c == "`" | c == "%" | c == "&" | c == "$" | c == "~" | c == "!" | c == "#" ) {
i = i - 1;
} else {
done = True;
}
}
RemoveSuffix = (QB.func_Left( vname, i));
return RemoveSuffix;
}
async function func_DataTypeFromName(vname/*STRING*/) {
if (QB.halted()) { return; };
var DataTypeFromName = null;
var dt = ''; /* STRING */
if ((await func_EndsWith( vname, "$")) ) {
dt = "STRING";
} else if ((await func_EndsWith( vname, "`")) ) {
dt = "_BIT";
} else if ((await func_EndsWith( vname, "%%")) ) {
dt = "_BYTE";
} else if ((await func_EndsWith( vname, "~%")) ) {
dt = "_UNSIGNED INTEGER";
} else if ((await func_EndsWith( vname, "%")) ) {
dt = "INTEGER";
} else if ((await func_EndsWith( vname, "~&&")) ) {
dt = "_UNSIGNED INTEGER64";
} else if ((await func_EndsWith( vname, "&&")) ) {
dt = "_INTEGER64";
} else if ((await func_EndsWith( vname, "~&")) ) {
dt = "_UNSIGNED LONG";
} else if ((await func_EndsWith( vname, "##")) ) {
dt = "_FLOAT";
} else if ((await func_EndsWith( vname, "#")) ) {
dt = "DOUBLE";
} else if ((await func_EndsWith( vname, "~%&")) ) {
dt = "_UNSIGNED _OFFSET";
} else if ((await func_EndsWith( vname, "%&")) ) {
dt = "_OFFSET";
} else if ((await func_EndsWith( vname, "&")) ) {
dt = "LONG";
} else if ((await func_EndsWith( vname, "!")) ) {
dt = "SINGLE";
} else {
dt = "SINGLE";
}
DataTypeFromName = dt;
return DataTypeFromName;
}
async function func_EndsWith(s/*STRING*/,finds/*STRING*/) {
if (QB.halted()) { return; };
var EndsWith = null;
if ((QB.func_Len( finds)) >(QB.func_Len( s)) ) {
EndsWith = False;
return EndsWith;
}
if ((QB.func__InStrRev( s, finds)) == (QB.func_Len( s)) - ((QB.func_Len( finds)) - 1) ) {
EndsWith = True;
} else {
EndsWith = False;
}
return EndsWith;
}
async function func_StartsWith(s/*STRING*/,finds/*STRING*/) {
if (QB.halted()) { return; };
var StartsWith = null;
if ((QB.func_Len( finds)) >(QB.func_Len( s)) ) {
StartsWith = False;
return StartsWith;
}
if ((QB.func_InStr( s, finds)) == 1) {
StartsWith = True;
} else {
StartsWith = False;
}
return StartsWith;
}
async function func_Join(parts/*STRING*/,startIndex/*INTEGER*/,endIndex/*INTEGER*/,delimiter/*STRING*/) {
if (QB.halted()) { return; };
var Join = null;
if ( endIndex == - 1) {
endIndex = (QB.func_UBound( parts));
}
var s = ''; /* STRING */
var i = 0; /* INTEGER */
var ___v4618744 = 0; ___l4018420: for ( i= startIndex; i <= endIndex; i= i + 1) { if (QB.halted()) { return; } ___v4618744++; if (___v4618744 % 100 == 0) { await QB.autoLimit(); }
s = s + QB.arrayValue(parts, [ i]).value;
if ( i != (QB.func_UBound( parts)) ) {
s = s + delimiter;
}
}
Join = s;
return Join;
}
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));
var ___v2076273 = 0; ___l4921656: for ( i= 1; i <= (QB.func_Len( s)); i= i + 1) { if (QB.halted()) { return; } ___v2076273++; if (___v2076273 % 100 == 0) { await QB.autoLimit(); }
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;
}
async function func_MethodJS(m/*METHOD*/,prefix/*STRING*/) {
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 */
var ___v954291 = 0; ___l3297359: for ( i= 1; i <= (QB.func_Len( m.name)); i= i + 1) { if (QB.halted()) { return; } ___v954291++; if (___v954291 % 100 == 0) { await QB.autoLimit(); }
c = (QB.func_Mid( m.name, i, 1));
a = (QB.func_Asc( c));
if ( a == 46) {
jsname = jsname + "_";
} else if (( a >= 65 & a <= 90) | ( a >= 97 & a <= 122) | ( a >= 48 & a <= 57) | a == 95) {
jsname = jsname + c;
}
}
MethodJS = jsname;
return MethodJS;
}
async function func_GXMethodJS(mname/*STRING*/) {
if (QB.halted()) { return; };
var GXMethodJS = null;
var jsname = ''; /* STRING */
var startIdx = 0; /* INTEGER */
if ((QB.func_InStr( mname, "GXSTR")) == 1) {
jsname = "GXSTR.";
startIdx = 7;
} else {
jsname = "GX.";
startIdx = 3;
}
jsname = jsname + (QB.func_LCase( (QB.func_Mid( mname, startIdx, 1))));
var i = 0; /* INTEGER */
var c = ''; /* STRING */
var a = 0; /* INTEGER */
var ___v1698735 = 0; ___l5897926: for ( i= startIdx + 1; i <= (QB.func_Len( mname)); i= i + 1) { if (QB.halted()) { return; } ___v1698735++; if (___v1698735 % 100 == 0) { await QB.autoLimit(); }
c = (QB.func_Mid( mname, i, 1));
a = (QB.func_Asc( c));
if (( a >= 65 & a <= 90) | ( a >= 97 & a <= 122) | ( a >= 48 & a <= 57) | a == 95 | a == 46) {
jsname = jsname + c;
}
}
GXMethodJS = jsname;
return GXMethodJS;
}
async function sub_InitGX() {
if (QB.halted()) { return; };
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" , True);
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( "FUNCTION" , "GXEntityVisible" , False);
await sub_AddGXMethod( "SUB" , "GXEntityVisible" , False);
await sub_AddGXMethod( "FUNCTION" , "GXEntityMapLayer" , False);
await sub_AddGXMethod( "SUB" , "GXEntityMapLayer" , 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( "FUNCTION" , "GXEntityFrames" , False);
await sub_AddGXMethod( "SUB" , "GXEntityFrames" , 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( "FUNCTION" , "GXEntityCollide" , 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" , "GXBackgroundWrapFactor" , 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);
}
async function sub_InitQBMethods() {
if (QB.halted()) { return; };
await sub_AddQBConst( "_KEEPBACKGROUND");
await sub_AddQBConst( "_ONLYBACKGROUND");
await sub_AddQBConst( "_FILLBACKGROUND");
await sub_AddQBConst( "_OFF");
await sub_AddQBConst( "_STRETCH");
await sub_AddQBConst( "_SQUAREPIXELS");
await sub_AddQBConst( "_SMOOTH");
await sub_AddQBMethod( "FUNCTION" , "_Alpha" , False);
await sub_AddQBMethod( "FUNCTION" , "_Alpha32" , False);
await sub_AddQBMethod( "FUNCTION" , "_Acos" , False);
await sub_AddQBMethod( "FUNCTION" , "_Acosh" , False);
await sub_AddQBMethod( "FUNCTION" , "_Arccot" , False);
await sub_AddQBMethod( "FUNCTION" , "_Arccsc" , False);
await sub_AddQBMethod( "FUNCTION" , "_Arcsec" , False);
await sub_AddQBMethod( "FUNCTION" , "_Atanh" , False);
await sub_AddQBMethod( "FUNCTION" , "_Asin" , False);
await sub_AddQBMethod( "FUNCTION" , "_Asinh" , False);
await sub_AddQBMethod( "FUNCTION" , "_Atan2" , False);
await sub_AddQBMethod( "FUNCTION" , "_AutoDisplay" , False);
await sub_AddQBMethod( "SUB" , "_AutoDisplay" , False);
await sub_AddQBMethod( "FUNCTION" , "_BackgroundColor" , False);
await sub_AddQBMethod( "FUNCTION" , "_Blue" , False);
await sub_AddQBMethod( "FUNCTION" , "_Blue32" , False);
await sub_AddQBMethod( "FUNCTION" , "_CapsLock" , False);
await sub_AddQBMethod( "FUNCTION" , "_Ceil" , False);
await sub_AddQBMethod( "FUNCTION" , "_CommandCount" , False);
await sub_AddQBMethod( "FUNCTION" , "_CopyImage" , False);
await sub_AddQBMethod( "FUNCTION" , "_Cosh" , False);
await sub_AddQBMethod( "FUNCTION" , "_Cot" , False);
await sub_AddQBMethod( "FUNCTION" , "_Coth" , False);
await sub_AddQBMethod( "FUNCTION" , "_Csc" , False);
await sub_AddQBMethod( "FUNCTION" , "_Csch" , False);
await sub_AddQBMethod( "FUNCTION" , "_CWD$" , False);
await sub_AddQBMethod( "FUNCTION" , "_D2G" , False);
await sub_AddQBMethod( "FUNCTION" , "_D2R" , False);
await sub_AddQBMethod( "FUNCTION" , "_DefaultColor" , False);
await sub_AddQBMethod( "FUNCTION" , "_Deflate" , False);
await sub_AddQBMethod( "SUB" , "_Delay" , True);
await sub_AddQBMethod( "FUNCTION" , "_DesktopHeight" , False);
await sub_AddQBMethod( "FUNCTION" , "_DesktopWidth" , False);
await sub_AddQBMethod( "FUNCTION" , "_Dest" , False);
await sub_AddQBMethod( "SUB" , "_Dest" , False);
await sub_AddQBMethod( "FUNCTION" , "_Dir" , False);
await sub_AddQBMethod( "FUNCTION" , "_DirExists" , False);
await sub_AddQBMethod( "FUNCTION" , "_Display" , False);
await sub_AddQBMethod( "SUB" , "_Display" , False);
await sub_AddQBMethod( "SUB" , "_Echo" , False);
await sub_AddQBMethod( "FUNCTION" , "_EnvironCount" , False);
await sub_AddQBMethod( "FUNCTION" , "_FileExists" , False);
await sub_AddQBMethod( "FUNCTION" , "_Font" , False);
await sub_AddQBMethod( "SUB" , "_Font" , False);
await sub_AddQBMethod( "FUNCTION" , "_FontHeight" , False);
await sub_AddQBMethod( "FUNCTION" , "_FontWidth" , False);
await sub_AddQBMethod( "SUB" , "_FreeImage" , False);
await sub_AddQBMethod( "SUB" , "_FullScreen" , False);
await sub_AddQBMethod( "FUNCTION" , "_FullScreen" , False);
await sub_AddQBMethod( "FUNCTION" , "_G2D" , False);
await sub_AddQBMethod( "FUNCTION" , "_G2R" , False);
await sub_AddQBMethod( "FUNCTION" , "_Green" , False);
await sub_AddQBMethod( "FUNCTION" , "_Green32" , False);
await sub_AddQBMethod( "FUNCTION" , "_Height" , False);
await sub_AddQBMethod( "FUNCTION" , "_Hypot" , False);
await sub_AddQBMethod( "FUNCTION" , "_Inflate" , False);
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" , "_LoadFont" , True);
await sub_AddQBMethod( "FUNCTION" , "_LoadImage" , True);
await sub_AddQBMethod( "FUNCTION" , "_MouseButton" , False);
await sub_AddQBMethod( "FUNCTION" , "_MouseInput" , False);
await sub_AddQBMethod( "SUB" , "_MouseShow" , False);
await sub_AddQBMethod( "SUB" , "_MouseHide" , False);
await sub_AddQBMethod( "FUNCTION" , "_MouseWheel" , False);
await sub_AddQBMethod( "FUNCTION" , "_MouseX" , False);
await sub_AddQBMethod( "FUNCTION" , "_MouseY" , False);
await sub_AddQBMethod( "FUNCTION" , "_NewImage" , False);
await sub_AddQBMethod( "FUNCTION" , "_NumLock" , False);
await sub_AddQBMethod( "FUNCTION" , "_OS$" , False);
await sub_AddQBMethod( "FUNCTION" , "_Pi" , False);
await sub_AddQBMethod( "SUB" , "_PaletteColor" , False);
await sub_AddQBMethod( "FUNCTION" , "_PrintMode" , False);
await sub_AddQBMethod( "SUB" , "_PrintMode" , False);
await sub_AddQBMethod( "SUB" , "_PrintString" , False);
await sub_AddQBMethod( "FUNCTION" , "_PrintWidth" , False);
await sub_AddQBMethod( "SUB" , "_PutImage" , False);
await sub_AddQBMethod( "FUNCTION" , "_R2D" , False);
await sub_AddQBMethod( "FUNCTION" , "_R2G" , False);
await sub_AddQBMethod( "FUNCTION" , "_Readbit" , False);
await sub_AddQBMethod( "FUNCTION" , "_Red" , False);
await sub_AddQBMethod( "FUNCTION" , "_Red32" , False);
await sub_AddQBMethod( "FUNCTION" , "_Resetbit" , False);
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);
await sub_AddQBMethod( "SUB" , "_ScreenMove" , False);
await sub_AddQBMethod( "FUNCTION" , "_ScreenX" , False);
await sub_AddQBMethod( "FUNCTION" , "_ScreenY" , False);
await sub_AddQBMethod( "FUNCTION" , "_ScrollLock" , False);
await sub_AddQBMethod( "FUNCTION" , "_Sec" , False);
await sub_AddQBMethod( "FUNCTION" , "_Sech" , False);
await sub_AddQBMethod( "FUNCTION" , "_Setbit" , False);
await sub_AddQBMethod( "FUNCTION" , "_Shl" , False);
await sub_AddQBMethod( "FUNCTION" , "_Shr" , False);
await sub_AddQBMethod( "FUNCTION" , "_Sinh" , False);
await sub_AddQBMethod( "FUNCTION" , "_Source" , False);
await sub_AddQBMethod( "SUB" , "_Source" , False);
await sub_AddQBMethod( "SUB" , "_SndClose" , False);
await sub_AddQBMethod( "FUNCTION" , "_SndOpen" , True);
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);
await sub_AddQBMethod( "FUNCTION" , "_StartDir$" , False);
await sub_AddQBMethod( "FUNCTION" , "_Strcmp" , False);
await sub_AddQBMethod( "FUNCTION" , "_Stricmp" , False);
await sub_AddQBMethod( "FUNCTION" , "_Tanh" , False);
await sub_AddQBMethod( "FUNCTION" , "_Title" , False);
await sub_AddQBMethod( "SUB" , "_Title" , False);
await sub_AddQBMethod( "FUNCTION" , "_Togglebit" , False);
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);
await sub_AddQBMethod( "SUB" , "Beep" , False);
await sub_AddQBMethod( "FUNCTION" , "Chr$" , False);
await sub_AddQBMethod( "FUNCTION" , "Cdbl" , False);
await sub_AddQBMethod( "SUB" , "ChDir" , False);
await sub_AddQBMethod( "FUNCTION" , "Cint" , False);
await sub_AddQBMethod( "FUNCTION" , "Clng" , False);
await sub_AddQBMethod( "SUB" , "Close" , False);
await sub_AddQBMethod( "FUNCTION" , "Csng" , 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);
await sub_AddQBMethod( "FUNCTION" , "Csrlin" , False);
await sub_AddQBMethod( "FUNCTION" , "Cvi" , False);
await sub_AddQBMethod( "FUNCTION" , "Cvl" , False);
await sub_AddQBMethod( "FUNCTION" , "Date$" , False);
await sub_AddQBMethod( "SUB" , "Draw" , False);
await sub_AddQBMethod( "FUNCTION" , "Environ" , False);
await sub_AddQBMethod( "SUB" , "Environ" , False);
await sub_AddQBMethod( "SUB" , "Error" , False);
await sub_AddQBMethod( "FUNCTION" , "EOF" , False);
await sub_AddQBMethod( "FUNCTION" , "Exp" , False);
await sub_AddQBMethod( "SUB" , "Files" , True);
await sub_AddQBMethod( "FUNCTION" , "Fix" , False);
await sub_AddQBMethod( "FUNCTION" , "FreeFile" , False);
await sub_AddQBMethod( "SUB" , "Get" , False);
await sub_AddQBMethod( "FUNCTION" , "Put" , False);
await sub_AddQBMethod( "FUNCTION" , "Hex$" , False);
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( "FUNCTION" , "Loc" , False);
await sub_AddQBMethod( "SUB" , "Locate" , False);
await sub_AddQBMethod( "FUNCTION" , "LOF" , False);
await sub_AddQBMethod( "FUNCTION" , "Log" , False);
await sub_AddQBMethod( "FUNCTION" , "LTrim$" , False);
await sub_AddQBMethod( "SUB" , "Kill" , False);
await sub_AddQBMethod( "FUNCTION" , "Mid$" , False);
await sub_AddQBMethod( "SUB" , "MkDir" , False);
await sub_AddQBMethod( "FUNCTION" , "Mki$" , False);
await sub_AddQBMethod( "FUNCTION" , "Mkl$" , False);
await sub_AddQBMethod( "SUB" , "Name" , False);
await sub_AddQBMethod( "FUNCTION" , "Oct$" , False);
await sub_AddQBMethod( "SUB" , "Open" , True);
await sub_AddQBMethod( "SUB" , "Paint" , False);
await sub_AddQBMethod( "FUNCTION" , "Point" , False);
await sub_AddQBMethod( "FUNCTION" , "Pos" , False);
await sub_AddQBMethod( "SUB" , "PReset" , False);
await sub_AddQBMethod( "SUB" , "Print" , True);
await sub_AddQBMethod( "SUB" , "PSet" , False);
await sub_AddQBMethod( "SUB" , "Put" , False);
await sub_AddQBMethod( "SUB" , "Randomize" , False);
await sub_AddQBMethod( "SUB" , "Restore" , False);
await sub_AddQBMethod( "FUNCTION" , "Right$" , False);
await sub_AddQBMethod( "FUNCTION" , "RTrim$" , False);
await sub_AddQBMethod( "SUB" , "Read" , False);
await sub_AddQBMethod( "SUB" , "RmDir" , False);
await sub_AddQBMethod( "FUNCTION" , "Rnd" , False);
await sub_AddQBMethod( "SUB" , "Screen" , False);
await sub_AddQBMethod( "FUNCTION" , "Seek" , False);
await sub_AddQBMethod( "SUB" , "Seek" , False);
await sub_AddQBMethod( "FUNCTION" , "Sgn" , False);
await sub_AddQBMethod( "FUNCTION" , "Sin" , False);
await sub_AddQBMethod( "SUB" , "Sleep" , True);
await sub_AddQBMethod( "SUB" , "Sound" , 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);
await sub_AddQBMethod( "FUNCTION" , "Time$" , False);
await sub_AddQBMethod( "FUNCTION" , "Timer" , False);
await sub_AddQBMethod( "FUNCTION" , "UBound" , False);
await sub_AddQBMethod( "FUNCTION" , "UCase$" , False);
await sub_AddQBMethod( "FUNCTION" , "Val" , False);
await sub_AddQBMethod( "FUNCTION" , "Varptr" , False);
await sub_AddQBMethod( "SUB" , "Window" , False);
await sub_AddQBMethod( "SUB" , "Write" , True);
await sub_AddQBMethod( "SUB" , "IncludeJS" , True);
await sub_AddNativeMethod( "FUNCTION" , "JSON.Parse" , "JSON.parse" , False);
await sub_AddNativeMethod( "FUNCTION" , "JSON.Stringify" , "JSON.stringify" , False);
await sub_AddSystemType( "FETCHRESPONSE" , "ok:INTEGER,status:INTEGER,statusText:STRING,text:STRING");
await sub_AddQBMethod( "FUNCTION" , "Fetch" , True);
await sub_AddQBMethod( "SUB" , "Fetch" , True);
}
this.compile = async function(src) {
await sub_QBToJS(src, TEXT, '');
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,
mtype: QB.arrayValue(warnings, [i]).value.mtype
});
}
return w;
};
this.getSourceLine = function(jsLine) {
if (jsLine == 0) { return 0; }
var line = QB.arrayValue(jsLines, [jsLine]).value.line;
line = QB.arrayValue(lines, [line]).value.line;
return line;
};
return this;
}