1
1
Fork 0
mirror of https://github.com/boxgaming/qbjs.git synced 2024-05-28 19:00:14 +00:00
qbjs/qb2js.js

2810 lines
119 KiB
JavaScript
Raw Normal View History

async function _QBCompiler() {
2022-02-16 17:40:03 +00:00
// Option _Explicit
// $Console
// Only
const FILE = 1;
const TEXT = 2;
const False = 0;
const True = ! False;
var lines = QB.initArray([{l:1,u:0}], {line:0,text:''}); // CODELINE
var jsLines = QB.initArray([{l:1,u:0}], {line:0,text:''}); // CODELINE
var methods = QB.initArray([{l:1,u:0}], {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}); // METHOD
var types = QB.initArray([{l:1,u:0}], {line:0,name:'',argc:0,args:''}); // QBTYPE
var typeVars = QB.initArray([{l:1,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}); // VARIABLE
var globalVars = QB.initArray([{l:1,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}); // VARIABLE
var localVars = QB.initArray([{l:1,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}); // VARIABLE
var warnings = QB.initArray([{l:1,u:0}], {line:0,text:''}); // CODELINE
var exportLines = QB.initArray([{l:1,u:0}], ''); // STRING
var exportConsts = QB.initArray([{l:1,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}); // VARIABLE
var exportMethods = QB.initArray([{l:1,u:0}], {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}); // METHOD
var modLevel = 0; // INTEGER
2022-02-16 17:40:03 +00:00
var currentMethod = ''; // STRING
var currentModule = ''; // STRING
2022-02-16 17:40:03 +00:00
var programMethods = 0; // INTEGER
if (QB.func_Command() != "" ) {
await sub_QBToJS( QB.func_Command(), FILE, "");
await sub_PrintJS();
2022-02-16 17:40:03 +00:00
QB.halt(); return;
}
async function sub_QBToJS(source/*STRING*/,sourceType/*INTEGER*/,moduleName/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
currentModule = moduleName;
await sub_ResetDataStructures();
if ( moduleName == "" ) {
QB.resizeArray(jsLines, [{l:1,u:0}], {line:0,text:''}, false); // CODELINE
}
2022-02-16 17:40:03 +00:00
if ( sourceType == FILE) {
2022-03-30 22:37:36 +00:00
await sub_ReadLinesFromFile( source);
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
await sub_ReadLinesFromText( source);
2022-02-16 17:40:03 +00:00
}
await sub_FindMethods();
2022-03-30 22:37:36 +00:00
programMethods = (QB.func_UBound( methods));
await sub_InitGX();
await sub_InitQBMethods();
2022-02-16 17:40:03 +00:00
var selfConvert = 0; // INTEGER
var isGX = 0; // INTEGER
isGX = False;
if ( sourceType == FILE) {
2022-03-30 22:37:36 +00:00
selfConvert = (await func_EndsWith( source, "qb2js.bas"));
2022-02-16 17:40:03 +00:00
}
if ( selfConvert) {
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( 0, "async function _QBCompiler() {");
} else if ( moduleName != "" ) {
await sub_AddJSLine( 0, "async function _" + moduleName +"() {");
2022-02-16 17:40:03 +00:00
} else if ( sourceType == FILE) {
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( 0, "async function init() {");
2022-02-16 17:40:03 +00:00
}
if (! selfConvert && moduleName == "" ) {
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( 0, "QB.start();");
2022-02-16 17:40:03 +00:00
}
if (! selfConvert && moduleName == "" ) {
var mtest = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; // METHOD
2022-03-30 22:37:36 +00:00
if ((await func_FindMethod( "GXOnGameEvent", mtest, "SUB")) ) {
await sub_AddJSLine( 0, " await GX.registerGameEvents(sub_GXOnGameEvent);");
2022-02-16 17:40:03 +00:00
isGX = True;
} else {
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( 0, " await GX.registerGameEvents(function(e){});");
await sub_AddJSLine( 0, " QB.sub_Screen(0);");
2022-02-16 17:40:03 +00:00
}
}
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( 0, "");
await sub_ConvertLines( 1, await func_MainEnd(), "");
if (! selfConvert && ! isGX && moduleName == "" ) {
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( 0, "QB.end();");
2022-02-16 17:40:03 +00:00
}
await sub_ConvertMethods();
2022-02-16 17:40:03 +00:00
if ( selfConvert) {
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( 0, "this.compile = async function(src) {");
await sub_AddJSLine( 0, " await sub_QBToJS(src, TEXT, '');");
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( 0, " var js = '';");
await sub_AddJSLine( 0, " for (var i=1; i<= QB.func_UBound(jsLines); i++) {");
await sub_AddJSLine( 0, " js += QB.arrayValue(jsLines, [i]).value.text + '\\n';");
await sub_AddJSLine( 0, " }");
await sub_AddJSLine( 0, " return js;");
await sub_AddJSLine( 0, "};");
await sub_AddJSLine( 0, "this.getWarnings = function() {");
await sub_AddJSLine( 0, " var w = [];");
await sub_AddJSLine( 0, " for (var i=1; i <= QB.func_UBound(warnings); i++) {");
await sub_AddJSLine( 0, " w.push({");
await sub_AddJSLine( 0, " line: QB.arrayValue(warnings, [i]).value.line,");
await sub_AddJSLine( 0, " text: QB.arrayValue(warnings, [i]).value.text");
await sub_AddJSLine( 0, " });");
await sub_AddJSLine( 0, " }");
await sub_AddJSLine( 0, " return w;");
await sub_AddJSLine( 0, "};");
await sub_AddJSLine( 0, "return this;");
await sub_AddJSLine( 0, "}");
} else if ( moduleName != "" ) {
await sub_AddJSLine( 0, "return this;");
await sub_AddJSLine( 0, "}");
await sub_AddJSLine( 0, "const " + moduleName +" = await _" + moduleName +"();");
2022-02-16 17:40:03 +00:00
} else if ( sourceType == FILE) {
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( 0, "};");
2022-02-16 17:40:03 +00:00
}
}
async function sub_ResetDataStructures() {
if (QB.halted()) { return; }
QB.resizeArray(lines, [{l:1,u:0}], {line:0,text:''}, false); // CODELINE
QB.resizeArray(methods, [{l:1,u:0}], {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}, false); // METHOD
QB.resizeArray(types, [{l:1,u:0}], {line:0,name:'',argc:0,args:''}, false); // QBTYPE
QB.resizeArray(typeVars, [{l:1,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}, false); // VARIABLE
QB.resizeArray(globalVars, [{l:1,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}, false); // VARIABLE
QB.resizeArray(localVars, [{l:1,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}, false); // VARIABLE
QB.resizeArray(warnings, [{l:1,u:0}], {line:0,text:''}, false); // CODELINE
if ( modLevel == 0) {
QB.resizeArray(exportMethods, [{l:1,u:0}], {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}, false); // METHOD
QB.resizeArray(exportConsts, [{l:1,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}, false); // VARIABLE
}
currentMethod = "";
programMethods = 0;
}
2022-02-16 17:40:03 +00:00
async function sub_PrintJS() {
if (QB.halted()) { return; }
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_UBound( jsLines)); i= i + 1) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
await QB.sub_Print([QB.arrayValue(jsLines, [ i]).value .text]);
}
}
async function sub_ConvertLines(firstLine/*INTEGER*/,lastLine/*INTEGER*/,functionName/*STRING*/) {
if (QB.halted()) { return; }
var typeMode = 0; // INTEGER
typeMode = False;
var jsMode = 0; // INTEGER
jsMode = False;
var i = 0; // INTEGER
var indent = 0; // INTEGER
var tempIndent = 0; // INTEGER
var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; // METHOD
2022-02-16 17:40:03 +00:00
var totalIndent = 0; // INTEGER
totalIndent = 1;
var caseCount = 0; // INTEGER
var loopMode = QB.initArray([{l:1,u:100}], 0); // INTEGER
2022-02-16 17:40:03 +00:00
var loopLevel = 0; // INTEGER
var caseVar = ''; // STRING
var currType = 0; // INTEGER
for ( i= firstLine; i <= lastLine; i= i + 1) { if (QB.halted()) { return; }
indent = 0;
tempIndent = 0;
var l = ''; // STRING
2022-03-30 22:37:36 +00:00
l = (QB.func__Trim( QB.arrayValue(lines, [ i]).value .text));
var parts = QB.initArray([{l:1,u:0}], ''); // STRING
2022-02-16 17:40:03 +00:00
var c = 0; // INTEGER
2022-03-30 22:37:36 +00:00
c = (await func_SLSplit( l, parts, True));
2022-02-16 17:40:03 +00:00
var js = ''; // STRING
js = "";
var first = ''; // STRING
2022-03-30 22:37:36 +00:00
first = (QB.func_UCase( QB.arrayValue(parts, [ 1]).value));
2022-02-16 17:40:03 +00:00
if ( jsMode == True) {
if ( first == "$END" ) {
jsMode = False;
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( 0, "//-------- END JS native code block --------");
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( i, QB.arrayValue(lines, [ i]).value .text);
2022-02-16 17:40:03 +00:00
}
} else if ( typeMode == True) {
if ( first == "END" ) {
var second = ''; // STRING
2022-03-30 22:37:36 +00:00
second = (QB.func_UCase( QB.arrayValue(parts, [ 2]).value));
2022-02-16 17:40:03 +00:00
if ( second == "TYPE" ) {
typeMode = False;
}
} else {
var tvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE
tvar.typeId = currType;
tvar.name = QB.arrayValue(parts, [ 1]).value;
2022-03-30 22:37:36 +00:00
tvar.type = (QB.func_UCase( QB.arrayValue(parts, [ 3]).value));
2022-02-16 17:40:03 +00:00
if ( tvar.type == "_UNSIGNED" ) {
2022-03-30 22:37:36 +00:00
tvar.type = tvar.type +" " +(QB.func_UCase( QB.arrayValue(parts, [ 4]).value));
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
await sub_AddVariable( tvar, typeVars);
2022-02-16 17:40:03 +00:00
}
} else {
if ( first == "CONST" ) {
2022-03-30 22:37:36 +00:00
js = "const " +QB.arrayValue(parts, [ 2]).value +" = " +(await func_ConvertExpression( (await func_Join( parts, 4, -1, " ")))) +";";
await sub_AddConst( QB.arrayValue(parts, [ 2]).value);
2022-02-16 17:40:03 +00:00
} else if ( first == "DIM" || first == "REDIM" || first == "STATIC" ) {
2022-03-30 22:37:36 +00:00
js = (await func_DeclareVar( parts));
2022-02-16 17:40:03 +00:00
} else if ( first == "SELECT" ) {
caseVar = await func_GenJSVar();
js = "var " + caseVar +" = " +(await func_ConvertExpression( (await func_Join( parts, 3, -1, " ")))) +";" +await func_CRLF();
2022-02-16 17:40:03 +00:00
js = js +"switch (" + caseVar +") {";
indent = 1;
caseCount = 0;
} else if ( first == "CASE" ) {
if ( caseCount > 0) {
js = "break;" +await func_LF();
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "ELSE" ) {
2022-02-16 17:40:03 +00:00
js = js +"default:";
2022-03-30 22:37:36 +00:00
} else if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "IS" ) {
js = js +"case " + caseVar +" " +(await func_ConvertExpression( (await func_Join( parts, 3, -1, " ")))) +":";
2022-02-16 17:40:03 +00:00
} else {
var caseParts = QB.initArray([{l:1,u:0}], ''); // STRING
2022-02-16 17:40:03 +00:00
var cscount = 0; // INTEGER
2022-03-30 22:37:36 +00:00
cscount = (await func_ListSplit( (await func_Join( parts, 2, -1, " ")), caseParts));
2022-02-16 17:40:03 +00:00
var ci = 0; // INTEGER
for ( ci= 1; ci <= cscount; ci= ci + 1) { if (QB.halted()) { return; }
if ( ci > 1) {
js = js +await func_CRLF();
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
js = js +"case " +(await func_ConvertExpression( QB.arrayValue(caseParts, [ ci]).value)) +":";
2022-02-16 17:40:03 +00:00
}
}
caseCount = caseCount + 1;
} else if ( first == "FOR" ) {
var fstep = ''; // STRING
fstep = "1";
var eqIdx = 0; // INTEGER
var toIdx = 0; // INTEGER
var stepIdx = 0; // INTEGER
var fcond = ''; // STRING
fcond = " <= ";
stepIdx = 0;
var fi = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( fi= 2; fi <= (QB.func_UBound( parts)); fi= fi + 1) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
var fword = ''; // STRING
2022-03-30 22:37:36 +00:00
fword = (QB.func_UCase( QB.arrayValue(parts, [ fi]).value));
2022-02-16 17:40:03 +00:00
if ( fword == "=" ) {
eqIdx = fi;
} else if ( fword == "TO" ) {
toIdx = fi;
} else if ( fword == "STEP" ) {
stepIdx = fi;
2022-03-30 22:37:36 +00:00
fstep = (await func_ConvertExpression( (await func_Join( parts, fi + 1, -1, " "))));
2022-02-16 17:40:03 +00:00
}
}
var fvar = ''; // STRING
2022-03-30 22:37:36 +00:00
fvar = (await func_ConvertExpression( (await func_Join( parts, 2, eqIdx - 1, " "))));
2022-02-16 17:40:03 +00:00
var sval = ''; // STRING
2022-03-30 22:37:36 +00:00
sval = (await func_ConvertExpression( (await func_Join( parts, eqIdx + 1, toIdx - 1, " "))));
2022-02-16 17:40:03 +00:00
var uval = ''; // STRING
2022-03-30 22:37:36 +00:00
uval = (await func_ConvertExpression( (await func_Join( parts, toIdx + 1, stepIdx - 1, " "))));
if ((QB.func_Left( (QB.func__Trim( fstep)), 1)) == "-" ) {
2022-02-16 17:40:03 +00:00
fcond = " >= ";
}
js = "for (" + fvar +"=" + sval +"; " + fvar + fcond + uval +"; " + fvar +"=" + fvar +" + " + fstep +") {";
js = js +" if (QB.halted()) { return; }";
indent = 1;
} else if ( first == "IF" ) {
var thenIndex = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( thenIndex= 2; thenIndex <= (QB.func_UBound( parts)); thenIndex= thenIndex + 1) { if (QB.halted()) { return; }
if ((QB.func_UCase( QB.arrayValue(parts, [ thenIndex]).value)) == "THEN" ) {
2022-02-16 17:40:03 +00:00
break;
}
}
2022-03-30 22:37:36 +00:00
js = "if (" +(await func_ConvertExpression( (await func_Join( parts, 2, thenIndex - 1, " ")))) +") {";
2022-02-16 17:40:03 +00:00
indent = 1;
} else if ( first == "ELSEIF" ) {
2022-03-30 22:37:36 +00:00
js = "} else if (" +(await func_ConvertExpression( (await func_Join( parts, 2, (QB.func_UBound( parts)) - 1, " ")))) +") {";
2022-02-16 17:40:03 +00:00
tempIndent = -1;
} else if ( first == "ELSE" ) {
js = "} else {";
tempIndent = -1;
} else if ( first == "NEXT" ) {
js = js +"}";
indent = -1;
} else if ( first == "END" ) {
2022-03-30 22:37:36 +00:00
if ((QB.func_UBound( parts)) == 1) {
2022-02-16 17:40:03 +00:00
js = "QB.halt(); return;";
} else {
2022-03-30 22:37:36 +00:00
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "SELECT" ) {
2022-02-16 17:40:03 +00:00
js = "break;";
}
js = js +"}";
indent = -1;
}
} else if ( first == "SYSTEM" ) {
js = "QB.halt(); return;";
} else if ( first == "$IF" ) {
if ((QB.func_UBound( parts)) > 1) {
2022-04-26 03:56:54 +00:00
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "JAVASCRIPT" ) {
2022-02-16 17:40:03 +00:00
jsMode = True;
js = "//-------- BEGIN JS native code block --------";
}
}
} else if ( first == "DO" ) {
loopLevel = loopLevel + 1;
2022-03-30 22:37:36 +00:00
if ((QB.func_UBound( parts)) > 1) {
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "WHILE" ) {
js = "while (" +(await func_ConvertExpression( (await func_Join( parts, 3, -1, " ")))) +") {";
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
js = "while (!(" +(await func_ConvertExpression( (await func_Join( parts, 3, -1, " ")))) +")) {";
2022-02-16 17:40:03 +00:00
}
QB.arrayValue(loopMode, [ loopLevel]).value = 1;
} else {
js = "do {";
QB.arrayValue(loopMode, [ loopLevel]).value = 2;
}
indent = 1;
js = js +" if (QB.halted()) { return; }";
} else if ( first == "WHILE" ) {
loopLevel = loopLevel + 1;
2022-03-30 22:37:36 +00:00
js = "while (" +(await func_ConvertExpression( (await func_Join( parts, 2, -1, " ")))) +") {";
2022-02-16 17:40:03 +00:00
indent = 1;
js = js +" if (QB.halted()) { return; }";
} else if ( first == "WEND" ) {
js = "}";
loopLevel = loopLevel - 1;
indent = -1;
} else if ( first == "LOOP" ) {
if (QB.arrayValue(loopMode, [ loopLevel]).value == 1) {
js = "}";
} else {
js = "} while ((";
2022-03-30 22:37:36 +00:00
if ((QB.func_UBound( parts)) < 2) {
2022-02-16 17:40:03 +00:00
js = js +"1));";
} else {
2022-03-30 22:37:36 +00:00
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "UNTIL" ) {
2022-02-16 17:40:03 +00:00
js = "} while (!(";
}
2022-03-30 22:37:36 +00:00
js = js +(await func_ConvertExpression( (await func_Join( parts, 3, (QB.func_UBound( parts)), " ")))) +"))";
2022-02-16 17:40:03 +00:00
}
}
loopLevel = loopLevel - 1;
indent = -1;
} else if ( first == "_CONTINUE" ) {
js = "continue;";
2022-03-30 22:37:36 +00:00
} else if ((QB.func_UCase( l)) == "EXIT FUNCTION" ) {
2022-02-16 17:40:03 +00:00
js = "return " + functionName +";";
2022-03-30 22:37:36 +00:00
} else if ((QB.func_UCase( l)) == "EXIT SUB" ) {
2022-02-16 17:40:03 +00:00
js = "return;";
} else if ( first == "EXIT" ) {
js = "break;";
} else if ( first == "TYPE" ) {
typeMode = True;
var qbtype = {line:0,name:'',argc:0,args:''}; // QBTYPE
qbtype.line = i;
2022-03-30 22:37:36 +00:00
qbtype.name = (QB.func_UCase( QB.arrayValue(parts, [ 2]).value));
await sub_AddType( qbtype);
currType = (QB.func_UBound( types));
} else if ( first == "EXPORT" ) {
if ( c > 1) {
2022-04-26 03:56:54 +00:00
var exparts = QB.initArray([{l:1,u:0}], ''); // STRING
var excount = 0; // INTEGER
excount = (await func_ListSplit( (await func_Join( parts, 2, -1, " ")), exparts));
var exi = 0; // INTEGER
for ( exi= 1; exi <= excount; exi= exi + 1) { if (QB.halted()) { return; }
await sub_ParseExport( QB.arrayValue(exparts, [ exi]).value, i);
}
continue;
} else {
}
2022-02-16 17:40:03 +00:00
} else if ( first == "CALL" ) {
var subline = ''; // STRING
2022-03-30 22:37:36 +00:00
subline = (QB.func__Trim( (await func_Join( parts, 2, -1, " "))));
2022-02-16 17:40:03 +00:00
var subend = 0; // INTEGER
2022-03-30 22:37:36 +00:00
subend = (QB.func_InStr( subline, "("));
2022-02-16 17:40:03 +00:00
var subname = ''; // STRING
if ( subend == 0) {
subname = subline;
} else {
2022-03-30 22:37:36 +00:00
subname = (QB.func_Left( subline, subend - 1));
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
if ((await func_FindMethod( subname, m, "SUB")) ) {
2022-02-16 17:40:03 +00:00
var subargs = ''; // STRING
2022-03-30 22:37:36 +00:00
if ( subname == subline) {
subargs = "";
} else {
subargs = (QB.func_Mid( subline, (QB.func_Len( subname)) + 2, (QB.func_Len( subline)) -(QB.func_Len( subname)) - 2));
}
js = (await func_ConvertSub( m, subargs));
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
await sub_AddWarning( i, "Missing Sub [" + subname +"], ignoring Call command");
2022-02-16 17:40:03 +00:00
}
} else if ( c > 2) {
var assignment = 0; // INTEGER
assignment = 0;
var j = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( j= 1; j <= (QB.func_UBound( parts)); j= j + 1) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
if (QB.arrayValue(parts, [ j]).value == "=" ) {
assignment = j;
break;
}
}
if ( assignment > 0) {
2022-03-30 22:37:36 +00:00
js = (await func_RemoveSuffix( (await func_ConvertExpression( (await func_Join( parts, 1, assignment - 1, " ")))))) +" = " +(await func_ConvertExpression( (await func_Join( parts, assignment + 1, -1, " ")))) +";";
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
if ((await func_FindMethod( QB.arrayValue(parts, [ 1]).value, m, "SUB")) ) {
js = (await func_ConvertSub( m, (await func_Join( parts, 2, -1, " "))));
2022-02-16 17:40:03 +00:00
} else {
js = "// " + l;
2022-03-30 22:37:36 +00:00
await sub_AddWarning( i, "Missing/unsupported sub or syntax error");
2022-02-16 17:40:03 +00:00
}
}
} else {
2022-03-30 22:37:36 +00:00
if ((await func_FindMethod( QB.arrayValue(parts, [ 1]).value, m, "SUB")) ) {
js = (await func_ConvertSub( m, (await func_Join( parts, 2, -1, " "))));
2022-02-16 17:40:03 +00:00
} else {
js = "// " + l;
2022-03-30 22:37:36 +00:00
await sub_AddWarning( i, "Missing/unsupported sub or syntax error");
2022-02-16 17:40:03 +00:00
}
}
if (( indent < 0) ) {
totalIndent = totalIndent + indent;
}
await sub_AddJSLine( i, (await func_LPad( "", " ", ( totalIndent + tempIndent) * 3)) + js);
2022-02-16 17:40:03 +00:00
if (( indent > 0) ) {
totalIndent = totalIndent + indent;
}
}
}
}
async function sub_ParseExport(s/*STRING*/,lineIndex/*INTEGER*/) {
2022-04-26 03:56:54 +00:00
if (QB.halted()) { return; }
var exportedItem = ''; // STRING
var ef = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; // METHOD
var es = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; // METHOD
var ev = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE
var exportName = ''; // STRING
var parts = QB.initArray([{l:1,u:0}], ''); // STRING
var found = 0; // INTEGER
found = False;
var c = 0; // INTEGER
2022-04-26 03:56:54 +00:00
c = (await func_SLSplit( s, parts, False));
if ((await func_FindMethod( QB.arrayValue(parts, [ 1]).value, es, "SUB")) ) {
if ( c > 2) {
exportName = QB.arrayValue(parts, [ 3]).value;
} else {
exportName = QB.arrayValue(parts, [ 1]).value;
}
exportedItem = es.jsname;
es.name = exportName;
await sub_AddExportMethod( es, currentModule +".", True);
exportName = "sub_" + exportName;
await sub_RegisterExport( exportName, exportedItem);
found = True;
2022-04-26 03:56:54 +00:00
}
if ((await func_FindMethod( QB.arrayValue(parts, [ 1]).value, ef, "FUNCTION")) ) {
if ( c > 2) {
exportName = QB.arrayValue(parts, [ 3]).value;
} else {
exportName = QB.arrayValue(parts, [ 1]).value;
}
exportedItem = ef.jsname;
ef.name = exportName;
await sub_AddExportMethod( ef, currentModule +".", True);
exportName = "func_" + exportName;
await sub_RegisterExport( exportName, exportedItem);
found = True;
}
if ((await func_FindVariable( QB.arrayValue(parts, [ 1]).value, ev, False)) ) {
if ( ev.isConst == True) {
if ( c > 2) {
exportName = QB.arrayValue(parts, [ 3]).value;
} else {
exportName = QB.arrayValue(parts, [ 1]).value;
}
exportedItem = ev.jsname;
ev.name = exportName;
exportedItem = ev.jsname;
if ( exportName == "" ) {
exportName = QB.arrayValue(parts, [ 1]).value;
}
ev.name = exportName;
await sub_AddExportConst( currentModule +"." + exportName);
await sub_RegisterExport( exportName, exportedItem);
found = True;
}
}
if (! found) {
await sub_AddWarning( lineIndex, "Invalid export [" +QB.arrayValue(parts, [ 1]).value +"]. Exported items must be a Sub, Function or Const in the current module.");
2022-04-26 03:56:54 +00:00
}
}
async function sub_RegisterExport(exportName/*STRING*/,exportedItem/*STRING*/) {
if (QB.halted()) { return; }
var esize = 0; // SINGLE
esize = (QB.func_UBound( exportLines)) + 1;
QB.resizeArray(exportLines, [{l:1,u:esize}], '', true); // STRING
QB.arrayValue(exportLines, [ esize]).value = "this." + exportName +" = " + exportedItem +";";
}
async function func_ConvertSub(m/*METHOD*/,args/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var ConvertSub = null;
var js = ''; // STRING
if ( m.name == "Line" ) {
var parts = QB.initArray([{l:1,u:0}], ''); // STRING
2022-02-16 17:40:03 +00:00
var plen = 0; // INTEGER
2022-03-30 22:37:36 +00:00
plen = (await func_SLSplit( args, parts, False));
2022-02-16 17:40:03 +00:00
if ( plen > 0) {
2022-03-30 22:37:36 +00:00
if ((QB.func_UCase( QB.arrayValue(parts, [ 1]).value)) == "INPUT" ) {
2022-02-16 17:40:03 +00:00
m.name = "Line Input";
m.jsname = "QB.sub_LineInput";
2022-03-30 22:37:36 +00:00
args = (await func_Join( parts, 2, -1, " "));
2022-02-16 17:40:03 +00:00
}
}
}
if ( m.name == "Line" ) {
2022-03-30 22:37:36 +00:00
js = (await func_CallMethod( m)) +"(" +(await func_ConvertLine( args)) +");";
2022-04-26 18:34:12 +00:00
} else if ( m.name == "PSet" || m.name == "Circle" || m.name == "PReset" || m.name == "Paint" ) {
2022-03-30 22:37:36 +00:00
js = (await func_CallMethod( m)) +"(" +(await func_ConvertPSet( args)) +");";
2022-02-16 17:40:03 +00:00
} else if ( m.name == "_PrintString" ) {
2022-03-30 22:37:36 +00:00
js = (await func_CallMethod( m)) +"(" +(await func_ConvertPrintString( args)) +");";
2022-02-16 17:40:03 +00:00
} else if ( m.name == "Print" ) {
2022-03-30 22:37:36 +00:00
js = (await func_CallMethod( m)) +"(" +(await func_ConvertPrint( args)) +");";
2022-02-16 17:40:03 +00:00
} else if ( m.name == "Input" || m.name == "Line Input" ) {
2022-03-30 22:37:36 +00:00
js = (await func_ConvertInput( m, args));
2022-02-16 17:40:03 +00:00
} else if ( m.name == "Swap" ) {
2022-03-30 22:37:36 +00:00
js = (await func_ConvertSwap( m, args));
} else if ( m.name == "Cls" ) {
2022-03-30 22:37:36 +00:00
js = (await func_CallMethod( m)) +"(" +(await func_ConvertCls( args)) +");";
} else if ( m.name == "_PutImage" ) {
2022-03-30 22:37:36 +00:00
js = (await func_CallMethod( m)) +"(" +(await func_ConvertPutImage( args)) +");";
} else if ( m.name == "Window" ) {
js = (await func_CallMethod( m)) +"(" +(await func_ConvertWindow( args)) +");";
2022-04-28 19:30:25 +00:00
} else if ( m.name == "_FullScreen" ) {
js = (await func_CallMethod( m)) +"(" +(await func_ConvertFullScreen( args)) +");";
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
js = (await func_CallMethod( m)) +"(" +(await func_ConvertMethodParams( args)) +");";
2022-02-16 17:40:03 +00:00
}
ConvertSub = js;
return ConvertSub;
}
2022-04-28 19:30:25 +00:00
async function func_ConvertFullScreen(args/*STRING*/) {
if (QB.halted()) { return; }
var ConvertFullScreen = null;
var parts = QB.initArray([{l:1,u:0}], ''); // STRING
var argc = 0; // INTEGER
var mode = ''; // STRING
mode = "QB.STRETCH";
var doSmooth = ''; // STRING
doSmooth = "false";
argc = (await func_ListSplit( args, parts));
if ( argc > 0) {
var arg = ''; // STRING
arg = (QB.func_UCase( QB.arrayValue(parts, [ 1]).value));
if ( arg == "_OFF" ) {
mode = "QB.OFF";
} else if ( arg == "_STRETCH" ) {
mode = "QB.STRETCH";
} else if ( arg == "_SQUAREPIXELS" ) {
mode = "QB.SQUAREPIXELS";
}
}
if ( argc > 1) {
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "_SMOOTH" ) {
doSmooth = "true";
}
}
ConvertFullScreen = mode +", " + doSmooth;
return ConvertFullScreen;
}
async function func_ConvertLine(args/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var ConvertLine = null;
var firstParam = ''; // STRING
var theRest = ''; // STRING
var idx = 0; // INTEGER
var sstep = ''; // STRING
var estep = ''; // STRING
sstep = "false";
estep = "false";
2022-03-30 22:37:36 +00:00
idx = (await func_FindParamChar( args, ","));
2022-02-16 17:40:03 +00:00
if ( idx == -1) {
firstParam = args;
theRest = "";
} else {
2022-03-30 22:37:36 +00:00
firstParam = (QB.func_Left( args, idx - 1));
theRest = (QB.func_Right( args, (QB.func_Len( args)) - idx));
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
idx = (await func_FindParamChar( firstParam, "-"));
2022-02-16 17:40:03 +00:00
var startCord = ''; // STRING
var endCord = ''; // STRING
if ( idx == -1) {
endCord = firstParam;
} else {
2022-03-30 22:37:36 +00:00
startCord = (QB.func_Left( firstParam, idx - 1));
endCord = (QB.func_Right( firstParam, (QB.func_Len( firstParam)) - idx));
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
if ((QB.func_UCase( (QB.func__Trim( (QB.func_Left( startCord, 4)))))) == "STEP" ) {
2022-02-16 17:40:03 +00:00
sstep = "true";
}
2022-03-30 22:37:36 +00:00
if ((QB.func_UCase( (QB.func__Trim( (QB.func_Left( endCord, 4)))))) == "STEP" ) {
2022-02-16 17:40:03 +00:00
estep = "true";
}
2022-03-30 22:37:36 +00:00
idx = (QB.func_InStr( startCord, "("));
startCord = (QB.func_Right( startCord, (QB.func_Len( startCord)) - idx));
idx = (QB.func__InStrRev( startCord, ")"));
startCord = (QB.func_Left( startCord, idx - 1));
startCord = (await func_ConvertExpression( startCord));
if (((QB.func__Trim( startCord)) == "") ) {
2022-02-16 17:40:03 +00:00
startCord = "undefined, undefined";
}
2022-03-30 22:37:36 +00:00
idx = (QB.func_InStr( endCord, "("));
endCord = (QB.func_Right( endCord, (QB.func_Len( endCord)) - idx));
idx = (QB.func__InStrRev( endCord, ")"));
endCord = (QB.func_Left( endCord, idx - 1));
endCord = (await func_ConvertExpression( endCord));
theRest = (await func_ConvertExpression( theRest));
theRest = (await func_Replace( theRest, " BF", " " +(QB.func_Chr( 34)) +"BF" +(QB.func_Chr( 34))));
theRest = (await func_Replace( theRest, " bf", " " +(QB.func_Chr( 34)) +"BF" +(QB.func_Chr( 34))));
theRest = (await func_Replace( theRest, " bF", " " +(QB.func_Chr( 34)) +"BF" +(QB.func_Chr( 34))));
theRest = (await func_Replace( theRest, " Bf", " " +(QB.func_Chr( 34)) +"BF" +(QB.func_Chr( 34))));
theRest = (await func_Replace( theRest, " B", " " +(QB.func_Chr( 34)) +"B" +(QB.func_Chr( 34))));
theRest = (await func_Replace( theRest, " b", " " +(QB.func_Chr( 34)) +"B" +(QB.func_Chr( 34))));
2022-02-16 17:40:03 +00:00
ConvertLine = sstep +", " + startCord +", " + estep +", " + endCord +", " + theRest;
return ConvertLine;
}
async function func_ConvertPutImage(args/*STRING*/) {
if (QB.halted()) { return; }
var ConvertPutImage = null;
var argc = 0; // INTEGER
var parts = QB.initArray([{l:1,u:0}], ''); // STRING
var startCoord = ''; // STRING
var sourceImage = ''; // STRING
var destImage = ''; // STRING
var destCoord = ''; // STRING
var doSmooth = ''; // STRING
2022-03-30 22:37:36 +00:00
startCoord = (await func_ConvertCoordParam( "", True));
destCoord = (await func_ConvertCoordParam( "", True));
sourceImage = "undefined";
destImage = "undefined";
doSmooth = "false";
2022-03-30 22:37:36 +00:00
if ((await func_EndsWith( (QB.func__Trim( (QB.func_UCase( args)))), "_SMOOTH")) ) {
doSmooth = "true";
2022-03-30 22:37:36 +00:00
args = (QB.func_Left( (QB.func__Trim( args)), (QB.func_Len( (QB.func__Trim( args)))) - 7));
}
2022-03-30 22:37:36 +00:00
argc = (await func_ListSplit( args, parts));
if ( argc >= 1) {
2022-03-30 22:37:36 +00:00
startCoord = (await func_ConvertCoordParam( QB.arrayValue(parts, [ 1]).value, True));
}
if ( argc >= 2) {
2022-03-30 22:37:36 +00:00
sourceImage = (await func_ConvertExpression( QB.arrayValue(parts, [ 2]).value));
}
if ( argc >= 3) {
2022-03-30 22:37:36 +00:00
if ((QB.func__Trim( QB.arrayValue(parts, [ 3]).value)) != "" ) {
destImage = (await func_ConvertExpression( QB.arrayValue(parts, [ 3]).value));
}
}
if ( argc >= 4) {
2022-03-30 22:37:36 +00:00
destCoord = (await func_ConvertCoordParam( QB.arrayValue(parts, [ 4]).value, True));
}
if ( argc >= 5) {
2022-03-30 22:37:36 +00:00
if ((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*/) {
if (QB.halted()) { return; }
var ConvertWindow = null;
var invertFlag = ''; // STRING
var firstParam = ''; // STRING
var theRest = ''; // STRING
var idx = 0; // INTEGER
var sstep = ''; // STRING
var estep = ''; // STRING
invertFlag = "false";
var kwd = ''; // STRING
kwd = "SCREEN";
if (((QB.func_UCase( (QB.func_Left( args, (QB.func_Len( kwd)))))) == kwd) ) {
args = (QB.func_Right( args, (QB.func_Len( args)) -(QB.func_Len( kwd))));
invertFlag = "true";
}
args = (QB.func__Trim( args));
sstep = "false";
estep = "false";
idx = (await func_FindParamChar( args, ","));
if ( idx == -1) {
firstParam = args;
theRest = "";
} else {
firstParam = (QB.func_Left( args, idx - 1));
theRest = (QB.func_Right( args, (QB.func_Len( args)) - idx));
}
idx = (await func_FindParamChar( firstParam, "-"));
var startCord = ''; // STRING
var endCord = ''; // STRING
if ( idx == -1) {
endCord = firstParam;
} else {
startCord = (QB.func_Left( firstParam, idx - 1));
endCord = (QB.func_Right( firstParam, (QB.func_Len( firstParam)) - idx));
}
idx = (QB.func_InStr( startCord, "("));
startCord = (QB.func_Right( startCord, (QB.func_Len( startCord)) - idx));
idx = (QB.func__InStrRev( startCord, ")"));
startCord = (QB.func_Left( startCord, idx - 1));
startCord = (await func_ConvertExpression( startCord));
if (((QB.func__Trim( startCord)) == "") ) {
startCord = "undefined, undefined";
}
idx = (QB.func_InStr( endCord, "("));
endCord = (QB.func_Right( endCord, (QB.func_Len( endCord)) - idx));
idx = (QB.func__InStrRev( endCord, ")"));
endCord = (QB.func_Left( endCord, idx - 1));
endCord = (await func_ConvertExpression( endCord));
ConvertWindow = invertFlag +", " + startCord +", " + endCord;
return ConvertWindow;
}
async function func_ConvertCls(args/*STRING*/) {
if (QB.halted()) { return; }
var ConvertCls = null;
var argc = 0; // INTEGER
var parts = QB.initArray([{l:1,u:0}], ''); // STRING
2022-03-30 22:37:36 +00:00
argc = (await func_ListSplit( args, parts));
var method = ''; // STRING
var bgcolor = ''; // STRING
method = "undefined";
bgcolor = "undefined";
if ( argc >= 1) {
2022-03-30 22:37:36 +00:00
if ((QB.func__Trim( QB.arrayValue(parts, [ 1]).value)) != "" ) {
method = (await func_ConvertExpression( QB.arrayValue(parts, [ 1]).value));
}
}
if ( argc >= 2) {
2022-03-30 22:37:36 +00:00
bgcolor = (await func_ConvertExpression( QB.arrayValue(parts, [ 2]).value));
}
ConvertCls = method +", " + bgcolor;
return ConvertCls;
}
async function func_ConvertCoordParam(param/*STRING*/,hasEndCoord/*INTEGER*/) {
if (QB.halted()) { return; }
var ConvertCoordParam = null;
2022-03-30 22:37:36 +00:00
if ((QB.func__Trim( param)) == "" ) {
if ( hasEndCoord) {
ConvertCoordParam = "false, undefined, undefined, false, undefined, undefined";
} else {
ConvertCoordParam = "false, undefined, undefined";
}
} else {
var js = ''; // STRING
var startCoord = ''; // STRING
var endCoord = ''; // STRING
var sstep = ''; // STRING
var estep = ''; // STRING
var idx = 0; // INTEGER
sstep = "false";
estep = "false";
2022-03-30 22:37:36 +00:00
idx = (await func_FindParamChar( param, "-"));
if ( idx == -1) {
startCoord = param;
endCoord = "";
} else {
2022-03-30 22:37:36 +00:00
startCoord = (QB.func_Left( param, idx - 1));
endCoord = (QB.func_Right( param, (QB.func_Len( param)) - idx));
}
2022-03-30 22:37:36 +00:00
if ((QB.func_UCase( (QB.func__Trim( (QB.func_Left( startCoord, 4)))))) == "STEP" ) {
sstep = "true";
}
2022-03-30 22:37:36 +00:00
if ((QB.func_UCase( (QB.func__Trim( (QB.func_Left( endCoord, 4)))))) == "STEP" ) {
estep = "true";
}
2022-03-30 22:37:36 +00:00
idx = (QB.func_InStr( startCoord, "("));
startCoord = (QB.func_Right( startCoord, (QB.func_Len( startCoord)) - idx));
idx = (QB.func__InStrRev( startCoord, ")"));
startCoord = (QB.func_Left( startCoord, idx - 1));
startCoord = (await func_ConvertExpression( startCoord));
if (((QB.func__Trim( startCoord)) == "") ) {
startCoord = "undefined, undefined";
}
if ( hasEndCoord) {
2022-03-30 22:37:36 +00:00
idx = (QB.func_InStr( endCoord, "("));
endCoord = (QB.func_Right( endCoord, (QB.func_Len( endCoord)) - idx));
idx = (QB.func__InStrRev( endCoord, ")"));
endCoord = (QB.func_Left( endCoord, idx - 1));
endCoord = (await func_ConvertExpression( endCoord));
if (((QB.func__Trim( endCoord)) == "") ) {
endCoord = "undefined, undefined";
}
ConvertCoordParam = sstep +", " + startCoord +", " + estep +", " + endCoord;
} else {
ConvertCoordParam = sstep +", " + startCoord;
}
}
return ConvertCoordParam;
}
async function func_ConvertPSet(args/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var ConvertPSet = null;
var firstParam = ''; // STRING
var theRest = ''; // STRING
var idx = 0; // INTEGER
var sstep = ''; // STRING
sstep = "false";
2022-03-30 22:37:36 +00:00
idx = (await func_FindParamChar( args, ","));
2022-02-16 17:40:03 +00:00
if ( idx == -1) {
firstParam = args;
theRest = "";
} else {
2022-03-30 22:37:36 +00:00
firstParam = (QB.func_Left( args, idx - 1));
theRest = (QB.func_Right( args, (QB.func_Len( args)) - idx));
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
if ((QB.func_UCase( (QB.func__Trim( (QB.func_Left( firstParam, 4)))))) == "STEP" ) {
2022-02-16 17:40:03 +00:00
sstep = "true";
}
2022-03-30 22:37:36 +00:00
idx = (QB.func_InStr( firstParam, "("));
firstParam = (QB.func_Right( firstParam, (QB.func_Len( firstParam)) - idx));
idx = (QB.func__InStrRev( firstParam, ")"));
firstParam = (QB.func_Left( firstParam, idx - 1));
firstParam = (await func_ConvertExpression( firstParam));
if (((QB.func__Trim( firstParam)) == "") ) {
2022-02-16 17:40:03 +00:00
firstParam = "undefined, undefined";
}
2022-03-30 22:37:36 +00:00
theRest = (await func_ConvertExpression( theRest));
2022-02-16 17:40:03 +00:00
ConvertPSet = sstep +", " + firstParam +", " + theRest;
return ConvertPSet;
}
async function func_ConvertPrint(args/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var ConvertPrint = null;
var pcount = 0; // INTEGER
var parts = QB.initArray([{l:1,u:0}], ''); // STRING
2022-03-30 22:37:36 +00:00
pcount = (await func_PrintSplit( args, parts));
2022-02-16 17:40:03 +00:00
var js = ''; // STRING
js = "[";
var i = 0; // INTEGER
for ( i= 1; i <= pcount; i= i + 1) { if (QB.halted()) { return; }
if ( i > 1) {
js = js +",";
}
if (QB.arrayValue(parts, [ i]).value == "," ) {
js = js +"QB.COLUMN_ADVANCE";
} else if (QB.arrayValue(parts, [ i]).value == ";" ) {
js = js +"QB.PREVENT_NEWLINE";
} else {
2022-03-30 22:37:36 +00:00
js = js +(await func_ConvertExpression( QB.arrayValue(parts, [ i]).value));
2022-02-16 17:40:03 +00:00
}
}
ConvertPrint = js +"]";
return ConvertPrint;
}
async function func_ConvertPrintString(args/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var ConvertPrintString = null;
var firstParam = ''; // STRING
var theRest = ''; // STRING
var idx = 0; // INTEGER
2022-03-30 22:37:36 +00:00
idx = (await func_FindParamChar( args, ","));
2022-02-16 17:40:03 +00:00
if ( idx == -1) {
firstParam = args;
theRest = "";
} else {
2022-03-30 22:37:36 +00:00
firstParam = (QB.func_Left( args, idx - 1));
theRest = (QB.func_Right( args, (QB.func_Len( args)) - idx));
}
idx = (QB.func_InStr( firstParam, "("));
firstParam = (QB.func_Right( firstParam, (QB.func_Len( firstParam)) - idx));
idx = (QB.func__InStrRev( firstParam, ")"));
firstParam = (QB.func_Left( firstParam, idx - 1));
ConvertPrintString = (await func_ConvertExpression( firstParam)) +", " +(await func_ConvertExpression( theRest));
2022-02-16 17:40:03 +00:00
return ConvertPrintString;
}
async function func_ConvertInput(m/*METHOD*/,args/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var ConvertInput = null;
var js = ''; // STRING
var vname = ''; // STRING
var pcount = 0; // INTEGER
var parts = QB.initArray([{l:1,u:0}], ''); // STRING
var vars = QB.initArray([{l:1,u:0}], ''); // STRING
2022-02-16 17:40:03 +00:00
var varIndex = 0; // INTEGER
varIndex = 1;
var preventNewline = ''; // STRING
preventNewline = "false";
var addQuestionPrompt = ''; // STRING
addQuestionPrompt = "false";
var prompt = ''; // STRING
prompt = "undefined";
var vcount = 0; // INTEGER
var p = ''; // STRING
2022-03-30 22:37:36 +00:00
pcount = (await func_PrintSplit( args, parts));
2022-02-16 17:40:03 +00:00
var i = 0; // INTEGER
for ( i= 1; i <= pcount; i= i + 1) { if (QB.halted()) { return; }
2022-03-30 22:37:36 +00:00
p = (QB.func__Trim( QB.arrayValue(parts, [ i]).value));
2022-02-16 17:40:03 +00:00
if ( p == ";" ) {
if ( i == 1) {
preventNewline = "true";
} else {
addQuestionPrompt = "true";
}
2022-03-30 22:37:36 +00:00
} else if ((await func_StartsWith( p, (QB.func_Chr( 34)))) ) {
2022-02-16 17:40:03 +00:00
prompt = p;
} else if ( p != "," ) {
2022-03-30 22:37:36 +00:00
vcount = (QB.func_UBound( vars)) + 1;
QB.resizeArray(vars, [{l:1,u:vcount}], '', true); // STRING
2022-02-16 17:40:03 +00:00
QB.arrayValue(vars, [ vcount]).value = p;
}
}
vname = await func_GenJSVar();
js = "var " + vname +" = new Array(" +(QB.func_Str( (QB.func_UBound( vars)))) +");" +await func_LF();
js = js +(await func_CallMethod( m)) +"(" + vname +", " + preventNewline +", " + addQuestionPrompt +", " + prompt +");" +await func_LF();
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_UBound( vars)); i= i + 1) { if (QB.halted()) { return; }
if (!(await func_StartsWith( (QB.func__Trim( QB.arrayValue(vars, [ i]).value)), "#")) ) {
js = js +(await func_ConvertExpression( QB.arrayValue(vars, [ i]).value)) +" = " + vname +"[" +(QB.func_Str( i - 1)) +"];" +await func_LF();
}
2022-02-16 17:40:03 +00:00
}
ConvertInput = js;
return ConvertInput;
}
async function func_ConvertSwap(m/*METHOD*/,args/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var ConvertSwap = null;
var js = ''; // STRING
var swapArray = ''; // STRING
swapArray = await func_GenJSVar();
var swapArgs = QB.initArray([{l:1,u:0}], ''); // STRING
2022-02-16 17:40:03 +00:00
var swapCount = 0; // INTEGER
2022-03-30 22:37:36 +00:00
swapCount = (await func_ListSplit( args, swapArgs));
2022-02-16 17:40:03 +00:00
var var1 = ''; // STRING
var var2 = ''; // STRING
2022-03-30 22:37:36 +00:00
var1 = (await func_ConvertExpression( QB.arrayValue(swapArgs, [ 1]).value));
var2 = (await func_ConvertExpression( QB.arrayValue(swapArgs, [ 2]).value));
js = "var " + swapArray +" = [" + var1 +"," + var2 +"];" +await func_LF();
js = js +(await func_CallMethod( m)) +"(" + swapArray +");" +await func_LF();
js = js + var1 +" = " + swapArray +"[0];" +await func_LF();
2022-02-16 17:40:03 +00:00
js = js + var2 +" = " + swapArray +"[1];";
ConvertSwap = js;
return ConvertSwap;
}
async function func_GenJSVar() {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var GenJSVar = null;
2022-03-30 22:37:36 +00:00
GenJSVar = "___v" +(QB.func__Trim( (QB.func_Str( (QB.func__Round( QB.func_Rnd() * 10000000))))));
2022-02-16 17:40:03 +00:00
return GenJSVar;
}
async function func_FindParamChar(s/*STRING*/,char/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var FindParamChar = null;
var idx = 0; // INTEGER
idx = -1;
var c = ''; // STRING
var quote = 0; // INTEGER
var paren = 0; // INTEGER
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_Len( s)); i= i + 1) { if (QB.halted()) { return; }
c = (QB.func_Mid( s, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
2022-02-16 17:40:03 +00:00
quote = ! quote;
} else if (! quote && c == "(" ) {
paren = paren + 1;
} else if (! quote && c == ")" ) {
paren = paren - 1;
} else if (! quote && paren == 0 && c == char) {
idx = i;
break;
}
}
FindParamChar = idx;
return FindParamChar;
}
async function func_DeclareVar(parts/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var DeclareVar = null;
var vname = ''; // STRING
var vtype = ''; // STRING
vtype = "";
var vtypeIndex = 0; // INTEGER
vtypeIndex = 4;
var isGlobal = 0; // INTEGER
isGlobal = False;
var isArray = 0; // INTEGER
isArray = False;
var arraySize = ''; // STRING
var pstart = 0; // INTEGER
var bvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE
var varnames = QB.initArray([{l:1,u:0}], ''); // STRING
2022-02-16 17:40:03 +00:00
var vnamecount = 0; // INTEGER
var findVar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE
var asIdx = 0; // INTEGER
asIdx = 0;
var js = ''; // STRING
js = "";
var preserve = ''; // STRING
preserve = "false";
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_UBound( parts)); i= i + 1) { if (QB.halted()) { return; }
if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "AS" ) {
2022-02-16 17:40:03 +00:00
asIdx = i;
}
2022-03-30 22:37:36 +00:00
if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "_PRESERVE" ) {
2022-02-16 17:40:03 +00:00
preserve = "true";
}
2022-03-30 22:37:36 +00:00
if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "SHARED" ) {
2022-02-16 17:40:03 +00:00
isGlobal = True;
}
}
if ( asIdx == 2 || ( asIdx == 3 && ( isGlobal || preserve == "true")) || ( asIdx == 4 && isGlobal && preserve == "true") ) {
2022-03-30 22:37:36 +00:00
bvar.type = (QB.func_UCase( QB.arrayValue(parts, [ asIdx + 1]).value));
2022-02-16 17:40:03 +00:00
var nextIdx = 0; // INTEGER
nextIdx = asIdx + 2;
if ( bvar.type == "_UNSIGNED" ) {
2022-03-30 22:37:36 +00:00
bvar.type = bvar.type +" " +(QB.func_UCase( QB.arrayValue(parts, [ asIdx + 2]).value));
2022-02-16 17:40:03 +00:00
nextIdx = asIdx + 3;
}
2022-03-30 22:37:36 +00:00
bvar.typeId = (await func_FindTypeId( bvar.type));
vnamecount = (await func_ListSplit( (await func_Join( parts, nextIdx, -1, " ")), varnames));
2022-02-16 17:40:03 +00:00
for ( i= 1; i <= vnamecount; i= i + 1) { if (QB.halted()) { return; }
2022-03-30 22:37:36 +00:00
vname = (QB.func__Trim( QB.arrayValue(varnames, [ i]).value));
pstart = (QB.func_InStr( vname, "("));
2022-02-16 17:40:03 +00:00
if ( pstart > 0) {
bvar.isArray = True;
2022-03-30 22:37:36 +00:00
arraySize = (await func_ConvertExpression( (QB.func_Mid( vname, pstart + 1, (QB.func_Len( vname)) - pstart - 1))));
bvar.name = (await func_RemoveSuffix( (QB.func_Left( vname, pstart - 1))));
2022-02-16 17:40:03 +00:00
} else {
bvar.isArray = False;
arraySize = "";
bvar.name = vname;
}
bvar.jsname = "";
if (! bvar.isArray) {
2022-03-30 22:37:36 +00:00
js = js +"var " + bvar.name +" = " +(await func_InitTypeValue( bvar.type)) +";";
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
if ((await func_FindVariable( bvar.name, findVar, True)) ) {
js = js +"QB.resizeArray(" + bvar.name +", [" +(await func_FormatArraySize( arraySize)) +"], " +(await func_InitTypeValue( bvar.type)) +", " + preserve +");";
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
js = js +"var " + bvar.name +" = QB.initArray([" +(await func_FormatArraySize( arraySize)) +"], " +(await func_InitTypeValue( bvar.type)) +");";
2022-02-16 17:40:03 +00:00
}
}
if ( isGlobal) {
2022-03-30 22:37:36 +00:00
await sub_AddVariable( bvar, globalVars);
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
await sub_AddVariable( bvar, localVars);
2022-02-16 17:40:03 +00:00
}
js = js +" // " + bvar.type;
if ( i < vnamecount) {
js = js +await func_LF();
2022-02-16 17:40:03 +00:00
}
}
} else {
var vpartcount = 0; // INTEGER
var vparts = QB.initArray([{l:1,u:0}], ''); // STRING
2022-02-16 17:40:03 +00:00
nextIdx = 0;
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_UBound( parts)); i= i + 1) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
var p = ''; // STRING
2022-03-30 22:37:36 +00:00
p = (QB.func_UCase( QB.arrayValue(parts, [ i]).value));
2022-02-16 17:40:03 +00:00
if ( p == "DIM" || p == "REDIM" || p == "SHARED" || p == "_PRESERVE" ) {
nextIdx = i + 1;
}
}
2022-03-30 22:37:36 +00:00
vnamecount = (await func_ListSplit( (await func_Join( parts, nextIdx, -1, " ")), varnames));
2022-02-16 17:40:03 +00:00
for ( i= 1; i <= vnamecount; i= i + 1) { if (QB.halted()) { return; }
2022-03-30 22:37:36 +00:00
vpartcount = (await func_SLSplit2( QB.arrayValue(varnames, [ i]).value, vparts));
bvar.name = (await func_RemoveSuffix( QB.arrayValue(vparts, [ 1]).value));
2022-02-16 17:40:03 +00:00
if ( vpartcount == 1) {
2022-03-30 22:37:36 +00:00
bvar.type = (await func_DataTypeFromName( bvar.name));
2022-02-16 17:40:03 +00:00
} else if ( vpartcount == 3) {
2022-03-30 22:37:36 +00:00
bvar.type = (QB.func_UCase( QB.arrayValue(vparts, [ 3]).value));
2022-02-16 17:40:03 +00:00
} else if ( vpartcount == 4) {
2022-03-30 22:37:36 +00:00
bvar.type = (QB.func_UCase( (await func_Join( vparts, 3, -1, " "))));
2022-02-16 17:40:03 +00:00
} else {
}
2022-03-30 22:37:36 +00:00
bvar.typeId = (await func_FindTypeId( bvar.type));
pstart = (QB.func_InStr( bvar.name, "("));
2022-02-16 17:40:03 +00:00
if ( pstart > 0) {
bvar.isArray = True;
2022-03-30 22:37:36 +00:00
arraySize = (await func_ConvertExpression( (QB.func_Mid( bvar.name, pstart + 1, (QB.func_Len( bvar.name)) - pstart - 1))));
bvar.name = (await func_RemoveSuffix( (QB.func_Left( bvar.name, pstart - 1))));
2022-02-16 17:40:03 +00:00
} else {
bvar.isArray = False;
arraySize = "";
}
bvar.jsname = "";
if (! bvar.isArray) {
2022-03-30 22:37:36 +00:00
js = js +"var " + bvar.name +" = " +(await func_InitTypeValue( bvar.type)) +";";
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
if ((await func_FindVariable( bvar.name, findVar, True)) ) {
js = js +"QB.resizeArray(" + bvar.name +", [" +(await func_FormatArraySize( arraySize)) +"], " +(await func_InitTypeValue( bvar.type)) +", " + preserve +");";
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
js = js +"var " + bvar.name +" = QB.initArray([" +(await func_FormatArraySize( arraySize)) +"], " +(await func_InitTypeValue( bvar.type)) +");";
2022-02-16 17:40:03 +00:00
}
}
if ( isGlobal) {
2022-03-30 22:37:36 +00:00
await sub_AddVariable( bvar, globalVars);
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
await sub_AddVariable( bvar, localVars);
2022-02-16 17:40:03 +00:00
}
js = js +" // " + bvar.type;
if ( i < vnamecount) {
js = js +await func_LF();
2022-02-16 17:40:03 +00:00
}
}
}
DeclareVar = js;
return DeclareVar;
}
async function func_FormatArraySize(sizeString/*STRING*/) {
if (QB.halted()) { return; }
var FormatArraySize = null;
var sizeParams = ''; // STRING
sizeParams = "";
var parts = QB.initArray([{l:1,u:0}], ''); // STRING
var pcount = 0; // INTEGER
2022-03-30 22:37:36 +00:00
pcount = (await func_ListSplit( sizeString, parts));
var i = 0; // INTEGER
for ( i= 1; i <= pcount; i= i + 1) { if (QB.halted()) { return; }
var subparts = QB.initArray([{l:1,u:0}], ''); // STRING
var scount = 0; // INTEGER
2022-03-30 22:37:36 +00:00
scount = (await func_SLSplit2( QB.arrayValue(parts, [ i]).value, subparts));
if ( i > 1) {
sizeParams = sizeParams +",";
}
if ( scount == 1) {
sizeParams = sizeParams +"{l:1,u:" +QB.arrayValue(subparts, [ 1]).value +"}";
} else {
sizeParams = sizeParams +"{l:" +QB.arrayValue(subparts, [ 1]).value +",u:" +QB.arrayValue(subparts, [ 3]).value +"}";
}
}
FormatArraySize = sizeParams;
return FormatArraySize;
}
async function func_InitTypeValue(vtype/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var InitTypeValue = null;
var value = ''; // STRING
if ( vtype == "STRING" ) {
value = "''";
2022-05-05 22:20:03 +00:00
} else if ( vtype == "OBJECT" ) {
value = "{}";
2022-02-16 17:40:03 +00:00
} else if ( vtype == "_BIT" || vtype == "_UNSIGNED _BIT" || vtype == "_BYTE" || vtype == "_UNSIGNED _BYTE" || vtype == "INTEGER" || vtype == "_UNSIGNED INTEGER" || vtype == "LONG" || vtype == "_UNSIGNED LONG" || vtype == "_INTEGER64" || vtype == "_UNSIGNED INTEGER64" || vtype == "SINGLE" || vtype == "DOUBLE" || vtype == "_FLOAT" || vtype == "_OFFSET" || vtype == "_UNSIGNED _OFFSET" ) {
value = "0";
} else {
value = "{";
var typeId = 0; // INTEGER
2022-03-30 22:37:36 +00:00
typeId = (await func_FindTypeId( vtype));
2022-02-16 17:40:03 +00:00
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_UBound( typeVars)); i= i + 1) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
if ( typeId == QB.arrayValue(typeVars, [ i]).value .typeId) {
2022-03-30 22:37:36 +00:00
value = value +QB.arrayValue(typeVars, [ i]).value .name +":" +(await func_InitTypeValue( QB.arrayValue(typeVars, [ i]).value .type)) +",";
2022-02-16 17:40:03 +00:00
}
}
2022-03-30 22:37:36 +00:00
value = (QB.func_Left( value, (QB.func_Len( value)) - 1)) +"}";
2022-02-16 17:40:03 +00:00
}
InitTypeValue = value;
return InitTypeValue;
}
async function func_FindTypeId(typeName/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var FindTypeId = null;
var id = 0; // INTEGER
id = -1;
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_UBound( types)); i= i + 1) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
if (QB.arrayValue(types, [ i]).value .name == typeName) {
id = i;
break;
}
}
FindTypeId = id;
return FindTypeId;
}
async function func_ConvertExpression(ex/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var ConvertExpression = null;
var c = ''; // STRING
var js = ''; // STRING
js = "";
var word = ''; // STRING
word = "";
var bvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE
var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; // METHOD
2022-02-16 17:40:03 +00:00
var stringLiteral = 0; // INTEGER
var i = 0; // INTEGER
i = 1;
2022-03-30 22:37:36 +00:00
while ( i <= (QB.func_Len( ex))) { if (QB.halted()) { return; }
c = (QB.func_Mid( ex, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
2022-02-16 17:40:03 +00:00
js = js + c;
stringLiteral = ! stringLiteral;
} else if ( stringLiteral) {
js = js + c;
} else {
2022-03-30 22:37:36 +00:00
if ( c == " " || c == "," || i == (QB.func_Len( ex)) ) {
if ( i == (QB.func_Len( ex)) ) {
2022-02-16 17:40:03 +00:00
word = word + c;
}
var uword = ''; // STRING
2022-03-30 22:37:36 +00:00
uword = (QB.func_UCase( word));
2022-02-16 17:40:03 +00:00
if ( uword == "NOT" ) {
js = js +"!";
} else if ( uword == "AND" ) {
js = js +" && ";
} else if ( uword == "OR" ) {
js = js +" || ";
} else if ( uword == "MOD" ) {
js = js +" % ";
} else if ( word == "=" ) {
js = js +" == ";
} else if ( word == "<>" ) {
js = js +" != ";
} else if ( word == "^" ) {
js = js +" ** ";
} else if ( word == ">" || word == ">=" || word == "<" || word == "<=" ) {
js = js +" " + word +" ";
} else if ((await func_StartsWith( word, "&H")) || (await func_StartsWith( word, "&O")) || (await func_StartsWith( word, "&B")) ) {
js = js +" QB.func_Val('" + word +"') ";
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
if ((await func_FindVariable( word, bvar, False)) ) {
2022-02-16 17:40:03 +00:00
js = js +" " + bvar.jsname;
} else {
2022-03-30 22:37:36 +00:00
if ((await func_FindMethod( word, m, "FUNCTION")) ) {
2022-02-16 17:40:03 +00:00
if ( m.name != currentMethod) {
2022-03-30 22:37:36 +00:00
js = js +(await func_CallMethod( m)) +"()";
2022-02-16 17:40:03 +00:00
} else {
js = js +" " + word;
}
} else {
js = js +" " + word;
}
}
}
2022-03-30 22:37:36 +00:00
if ( c == "," && i != (QB.func_Len( ex)) ) {
2022-02-16 17:40:03 +00:00
js = js +",";
}
word = "";
} else if ( c == "(" ) {
var done = 0; // INTEGER
done = False;
var pcount = 0; // INTEGER
pcount = 0;
var c2 = ''; // STRING
var ex2 = ''; // STRING
ex2 = "";
var stringLiteral2 = 0; // INTEGER
stringLiteral2 = False;
i = i + 1;
2022-03-30 22:37:36 +00:00
while (! done && i <= (QB.func_Len( ex))) { if (QB.halted()) { return; }
c2 = (QB.func_Mid( ex, i, 1));
if ( c2 == (QB.func_Chr( 34)) ) {
2022-02-16 17:40:03 +00:00
stringLiteral2 = ! stringLiteral2;
} else if (! stringLiteral2 && c2 == "(" ) {
pcount = pcount + 1;
} else if (! stringLiteral2 && c2 == ")" ) {
if ( pcount == 0) {
done = True;
} else {
pcount = pcount - 1;
}
}
if (! done) {
ex2 = ex2 + c2;
i = i + 1;
}
}
var fneg = ''; // STRING
fneg = "";
2022-03-30 22:37:36 +00:00
if ((QB.func_Len( word)) > 0) {
if ((QB.func_Left( word, 1)) == "-" ) {
2022-02-16 17:40:03 +00:00
fneg = "-";
2022-03-30 22:37:36 +00:00
word = (QB.func_Mid( word, 2));
2022-02-16 17:40:03 +00:00
}
}
2022-03-30 22:37:36 +00:00
if ((await func_FindVariable( word, bvar, True)) ) {
if ((QB.func__Trim( ex2)) == "" ) {
2022-02-16 17:40:03 +00:00
js = js + fneg + bvar.jsname;
} else {
2022-03-30 22:37:36 +00:00
js = js + fneg +"QB.arrayValue(" + bvar.jsname +", [" +(await func_ConvertExpression( ex2)) +"]).value";
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
} else if ((await func_FindMethod( word, m, "FUNCTION")) ) {
js = js + fneg +"(" +(await func_CallMethod( m)) +"(" +(await func_ConvertMethodParams( ex2)) +"))";
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
if ((QB.func__Trim( word)) != "" ) {
await sub_AddWarning( i, "Missing function or array [" + word +"]");
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
js = js + fneg +"(" +(await func_ConvertExpression( ex2)) +")";
2022-02-16 17:40:03 +00:00
}
word = "";
} else {
word = word + c;
}
}
i = i + 1;
}
ConvertExpression = js;
return ConvertExpression;
}
2022-03-30 22:37:36 +00:00
async function func_ConvertMethodParams(args/*STRING*/) {
if (QB.halted()) { return; }
var ConvertMethodParams = null;
var js = ''; // STRING
var params = QB.initArray([{l:1,u:0}], ''); // STRING
var argc = 0; // INTEGER
argc = (await func_ListSplit( args, params));
var i = 0; // INTEGER
for ( i= 1; i <= argc; i= i + 1) { if (QB.halted()) { return; }
if ( i > 1) {
js = js +",";
}
if ((QB.func__Trim( QB.arrayValue(params, [ i]).value)) == "" ) {
js = js +" undefined";
} else {
js = js +" " +(await func_ConvertExpression( QB.arrayValue(params, [ i]).value));
}
}
ConvertMethodParams = js;
return ConvertMethodParams;
}
async function func_CallMethod(m/*METHOD*/) {
if (QB.halted()) { return; }
var CallMethod = null;
var js = ''; // STRING
if ( m.sync) {
js = "await ";
}
js = js + m.jsname;
CallMethod = js;
return CallMethod;
}
async function func_FindVariable(varname/*STRING*/,bvar/*VARIABLE*/,isArray/*INTEGER*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var FindVariable = null;
var found = 0; // INTEGER
found = False;
var i = 0; // INTEGER
var fvarname = ''; // STRING
2022-03-30 22:37:36 +00:00
fvarname = (QB.func__Trim( (QB.func_UCase( (await func_RemoveSuffix( varname))))));
for ( i= 1; i <= (QB.func_UBound( localVars)); i= i + 1) { if (QB.halted()) { return; }
if (QB.arrayValue(localVars, [ i]).value .isArray == isArray && (QB.func_UCase( QB.arrayValue(localVars, [ i]).value .name)) == fvarname) {
2022-02-16 17:40:03 +00:00
found = True;
bvar.type = QB.arrayValue(localVars, [ i]).value .type;
bvar.name = QB.arrayValue(localVars, [ i]).value .name;
bvar.jsname = QB.arrayValue(localVars, [ i]).value .jsname;
bvar.isConst = QB.arrayValue(localVars, [ i]).value .isConst;
bvar.isArray = QB.arrayValue(localVars, [ i]).value .isArray;
bvar.arraySize = QB.arrayValue(localVars, [ i]).value .arraySize;
bvar.typeId = QB.arrayValue(localVars, [ i]).value .typeId;
break;
}
}
if (! found) {
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_UBound( globalVars)); i= i + 1) { if (QB.halted()) { return; }
if (QB.arrayValue(globalVars, [ i]).value .isArray == isArray && (QB.func_UCase( QB.arrayValue(globalVars, [ i]).value .name)) == fvarname) {
2022-02-16 17:40:03 +00:00
found = True;
bvar.type = QB.arrayValue(globalVars, [ i]).value .type;
bvar.name = QB.arrayValue(globalVars, [ i]).value .name;
bvar.jsname = QB.arrayValue(globalVars, [ i]).value .jsname;
bvar.isConst = QB.arrayValue(globalVars, [ i]).value .isConst;
bvar.isArray = QB.arrayValue(globalVars, [ i]).value .isArray;
bvar.arraySize = QB.arrayValue(globalVars, [ i]).value .arraySize;
bvar.typeId = QB.arrayValue(globalVars, [ i]).value .typeId;
break;
}
}
}
FindVariable = found;
return FindVariable;
}
async function func_FindMethod(mname/*STRING*/,m/*METHOD*/,t/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var FindMethod = null;
var found = 0; // INTEGER
found = False;
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; }
if (QB.arrayValue(methods, [ i]).value .uname == (QB.func__Trim( (QB.func_UCase( (await func_RemoveSuffix( mname)))))) && QB.arrayValue(methods, [ i]).value .type == t) {
2022-02-16 17:40:03 +00:00
found = True;
m.line = QB.arrayValue(methods, [ i]).value .line;
m.type = QB.arrayValue(methods, [ i]).value .type;
m.returnType = QB.arrayValue(methods, [ i]).value .returnType;
m.name = QB.arrayValue(methods, [ i]).value .name;
m.jsname = QB.arrayValue(methods, [ i]).value .jsname;
m.uname = QB.arrayValue(methods, [ i]).value .uname;
m.argc = QB.arrayValue(methods, [ i]).value .argc;
m.args = QB.arrayValue(methods, [ i]).value .args;
m.sync = QB.arrayValue(methods, [ i]).value .sync;
2022-02-16 17:40:03 +00:00
break;
}
}
if (! found) {
for ( i= 1; i <= (QB.func_UBound( exportMethods)); i= i + 1) { if (QB.halted()) { return; }
if (QB.arrayValue(exportMethods, [ i]).value .uname == (QB.func__Trim( (QB.func_UCase( (await func_RemoveSuffix( mname)))))) && QB.arrayValue(exportMethods, [ i]).value .type == t) {
found = True;
m.line = QB.arrayValue(exportMethods, [ i]).value .line;
m.type = QB.arrayValue(exportMethods, [ i]).value .type;
m.returnType = QB.arrayValue(exportMethods, [ i]).value .returnType;
m.name = QB.arrayValue(exportMethods, [ i]).value .name;
m.jsname = QB.arrayValue(exportMethods, [ i]).value .jsname;
m.uname = QB.arrayValue(exportMethods, [ i]).value .uname;
m.argc = QB.arrayValue(exportMethods, [ i]).value .argc;
m.args = QB.arrayValue(exportMethods, [ i]).value .args;
m.sync = QB.arrayValue(exportMethods, [ i]).value .sync;
break;
}
}
}
2022-02-16 17:40:03 +00:00
FindMethod = found;
return FindMethod;
}
async function sub_ConvertMethods() {
if (QB.halted()) { return; }
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( 0, "");
2022-02-16 17:40:03 +00:00
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
if ((QB.arrayValue(methods, [ i]).value .line != 0) ) {
var lastLine = 0; // INTEGER
lastLine = QB.arrayValue(methods, [ i + 1]).value .line - 1;
if ( lastLine < 0) {
2022-03-30 22:37:36 +00:00
lastLine = (QB.func_UBound( lines));
2022-02-16 17:40:03 +00:00
}
QB.resizeArray(localVars, [{l:1,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}, false); // VARIABLE
2022-02-16 17:40:03 +00:00
var asyncModifier = ''; // STRING
asyncModifier = "async ";
2022-02-16 17:40:03 +00:00
var methodDec = ''; // STRING
methodDec = asyncModifier +"function " +QB.arrayValue(methods, [ i]).value .jsname +"(";
if (QB.arrayValue(methods, [ i]).value .argc > 0) {
var args = QB.initArray([{l:1,u:0}], ''); // STRING
2022-02-16 17:40:03 +00:00
var c = 0; // INTEGER
2022-03-30 22:37:36 +00:00
c = (await func_Split( QB.arrayValue(methods, [ i]).value .args, ",", args));
2022-02-16 17:40:03 +00:00
var a = 0; // INTEGER
for ( a= 1; a <= c; a= a + 1) { if (QB.halted()) { return; }
var v = 0; // INTEGER
var parts = QB.initArray([{l:1,u:0}], ''); // STRING
2022-03-30 22:37:36 +00:00
v = (await func_Split( QB.arrayValue(args, [ a]).value, ":", parts));
2022-02-16 17:40:03 +00:00
methodDec = methodDec +QB.arrayValue(parts, [ 1]).value +"/*" +QB.arrayValue(parts, [ 2]).value +"*/";
if ( a < c) {
methodDec = methodDec +",";
}
var bvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE
bvar.name = QB.arrayValue(parts, [ 1]).value;
bvar.type = QB.arrayValue(parts, [ 2]).value;
2022-03-30 22:37:36 +00:00
bvar.typeId = (await func_FindTypeId( bvar.type));
2022-02-16 17:40:03 +00:00
if (QB.arrayValue(parts, [ 3]).value == "true" ) {
bvar.isArray = True;
}
bvar.jsname = "";
2022-03-30 22:37:36 +00:00
await sub_AddVariable( bvar, localVars);
2022-02-16 17:40:03 +00:00
}
}
methodDec = methodDec +") {";
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( QB.arrayValue(methods, [ i]).value .line, methodDec);
await sub_AddJSLine( QB.arrayValue(methods, [ i]).value .line, "if (QB.halted()) { return; }");
2022-02-16 17:40:03 +00:00
if (QB.arrayValue(methods, [ i]).value .type == "FUNCTION" ) {
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( QB.arrayValue(methods, [ i]).value .line, "var " +(await func_RemoveSuffix( QB.arrayValue(methods, [ i]).value .name)) +" = null;");
2022-02-16 17:40:03 +00:00
}
currentMethod = QB.arrayValue(methods, [ i]).value .name;
2022-03-30 22:37:36 +00:00
await sub_ConvertLines( QB.arrayValue(methods, [ i]).value .line + 1, lastLine - 1, QB.arrayValue(methods, [ i]).value .name);
2022-02-16 17:40:03 +00:00
if (QB.arrayValue(methods, [ i]).value .type == "FUNCTION" ) {
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( lastLine, "return " +(await func_RemoveSuffix( QB.arrayValue(methods, [ i]).value .name)) +";");
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
await sub_AddJSLine( lastLine, "}");
2022-02-16 17:40:03 +00:00
}
}
for ( i= 1; i <= (QB.func_UBound( exportLines)); i= i + 1) { if (QB.halted()) { return; }
await sub_AddJSLine( i, QB.arrayValue(exportLines, [ i]).value);
}
QB.resizeArray(exportLines, [{l:1,u:0}], '', false); // STRING
2022-02-16 17:40:03 +00:00
}
async function sub_ReadLinesFromFile(filename/*STRING*/) {
if (QB.halted()) { return; }
var fline = ''; // STRING
var lineIndex = 0; // INTEGER
2022-04-26 03:56:54 +00:00
var rawJS = 0; // SINGLE
2022-02-16 17:40:03 +00:00
// Open filename For Input As #1
while (!(( 1))) { if (QB.halted()) { return; }
var ___v7055475 = new Array( 2);
QB.sub_LineInput(___v7055475, false, false, undefined);
2022-02-16 17:40:03 +00:00
fline = ___v7055475[ 1];
lineIndex = lineIndex + 1;
2022-03-30 22:37:36 +00:00
if ((QB.func__Trim( fline)) != "" ) {
while ((await func_EndsWith( fline, " _"))) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
var nextLine = ''; // STRING
var ___v5334240 = new Array( 2);
QB.sub_LineInput(___v5334240, false, false, undefined);
2022-02-16 17:40:03 +00:00
nextLine = ___v5334240[ 1];
2022-03-30 22:37:36 +00:00
fline = (QB.func_Left( fline, (QB.func_Len( fline)) - 1)) + nextLine;
2022-02-16 17:40:03 +00:00
}
2022-04-26 03:56:54 +00:00
rawJS = (await func_ReadLine( lineIndex, fline, rawJS));
2022-02-16 17:40:03 +00:00
}
}
// Close #1
}
async function sub_ReadLinesFromText(sourceText/*STRING*/) {
if (QB.halted()) { return; }
var sourceLines = QB.initArray([{l:1,u:0}], ''); // STRING
2022-04-26 03:56:54 +00:00
var rawJS = 0; // SINGLE
2022-02-16 17:40:03 +00:00
var lcount = 0; // INTEGER
var i = 0; // INTEGER
lcount = (await func_Split( sourceText, await func_LF(), sourceLines));
2022-02-16 17:40:03 +00:00
for ( i= 1; i <= lcount; i= i + 1) { if (QB.halted()) { return; }
var fline = ''; // STRING
fline = QB.arrayValue(sourceLines, [ i]).value;
2022-03-30 22:37:36 +00:00
if ((QB.func__Trim( fline)) != "" ) {
2022-02-16 17:40:03 +00:00
var lineIndex = 0; // INTEGER
lineIndex = i;
if ((await func_StartsWith( (QB.func_UCase( fline)), "IMPORT")) ) {
var parts = QB.initArray([{l:1,u:0}], ''); // STRING
var pcount = 0; // INTEGER
pcount = (await func_SLSplit( fline, parts, False));
if ( pcount == 4) {
var moduleName = ''; // STRING
var sourceUrl = ''; // STRING
var importRes = {ok:0,status:0,statusText:'',text:''}; // FETCHRESPONSE
moduleName = QB.arrayValue(parts, [ 2]).value;
sourceUrl = (QB.func_Mid( QB.arrayValue(parts, [ 4]).value, 2, (QB.func_Len( QB.arrayValue(parts, [ 4]).value)) - 2));
await QB.sub_Fetch( sourceUrl, importRes);
modLevel = modLevel + 1;
await sub_QBToJS( importRes.text, TEXT, moduleName);
await sub_ResetDataStructures();
modLevel = modLevel - 1;
continue;
}
}
2022-03-30 22:37:36 +00:00
while ((await func_EndsWith( fline, "_"))) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
i = i + 1;
var nextLine = ''; // STRING
nextLine = QB.arrayValue(sourceLines, [ i]).value;
2022-03-30 22:37:36 +00:00
fline = (QB.func_Left( fline, (QB.func_Len( fline)) - 1)) + nextLine;
2022-02-16 17:40:03 +00:00
}
2022-04-26 03:56:54 +00:00
rawJS = (await func_ReadLine( i, fline, rawJS));
2022-02-16 17:40:03 +00:00
}
}
}
2022-04-26 03:56:54 +00:00
async function func_ReadLine(lineIndex/*INTEGER*/,fline/*STRING*/,rawJS/*INTEGER*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
2022-04-26 03:56:54 +00:00
var ReadLine = null;
2022-02-16 17:40:03 +00:00
var quoteDepth = 0; // INTEGER
quoteDepth = 0;
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_Len( fline)); i= i + 1) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
var c = ''; // STRING
2022-03-30 22:37:36 +00:00
c = (QB.func_Mid( fline, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
2022-02-16 17:40:03 +00:00
if ( quoteDepth == 0) {
quoteDepth = 1;
} else {
quoteDepth = 0;
}
}
if ( quoteDepth == 0 && c == "'" ) {
2022-03-30 22:37:36 +00:00
fline = (QB.func_Left( fline, i - 1));
2022-02-16 17:40:03 +00:00
break;
}
}
2022-04-26 03:56:54 +00:00
ReadLine = rawJS;
2022-03-30 22:37:36 +00:00
if ((QB.func__Trim( fline)) == "" ) {
2022-04-26 03:56:54 +00:00
return ReadLine;
}
var word = ''; // STRING
var words = QB.initArray([{l:1,u:0}], ''); // STRING
var wcount = 0; // INTEGER
2022-03-30 22:37:36 +00:00
wcount = (await func_SLSplit( fline, words, False));
2022-04-26 03:56:54 +00:00
if ( rawJS) {
await sub_AddLine( lineIndex, fline);
return ReadLine;
}
if ((QB.func_UCase( QB.arrayValue(words, [ 1]).value)) == "$IF" && wcount > 1) {
if ((QB.func_UCase( QB.arrayValue(words, [ 2]).value)) == "JAVASCRIPT" ) {
rawJS = True;
await sub_AddLine( lineIndex, fline);
ReadLine = rawJS;
return ReadLine;
}
}
if ((QB.func_UCase( QB.arrayValue(words, [ 1]).value)) == "$END" ) {
if ( rawJS) {
rawJS = ! rawJS;
}
await sub_AddLine( lineIndex, fline);
ReadLine = rawJS;
return ReadLine;
}
var ifIdx = 0; // INTEGER
var thenIdx = 0; // INTEGER
var elseIdx = 0; // INTEGER
for ( i= 1; i <= wcount; i= i + 1) { if (QB.halted()) { return; }
2022-03-30 22:37:36 +00:00
word = (QB.func_UCase( QB.arrayValue(words, [ i]).value));
if ( word == "IF" ) {
ifIdx = i;
} else if ( word == "THEN" ) {
thenIdx = i;
} else if ( word == "ELSE" ) {
elseIdx = i;
}
}
if ( thenIdx > 0 && thenIdx < wcount) {
2022-03-30 22:37:36 +00:00
await sub_AddLine( lineIndex, (await func_Join( words, 1, thenIdx, " ")));
if ( elseIdx > 0) {
2022-03-30 22:37:36 +00:00
await sub_AddSubLines( lineIndex, (await func_Join( words, thenIdx + 1, elseIdx - 1, " ")));
await sub_AddLine( lineIndex, "Else");
await sub_AddSubLines( lineIndex, (await func_Join( words, elseIdx + 1, -1, " ")));
} else {
2022-03-30 22:37:36 +00:00
await sub_AddSubLines( lineIndex, (await func_Join( words, thenIdx + 1, -1, " ")));
}
2022-03-30 22:37:36 +00:00
await sub_AddLine( lineIndex, "End If");
} else {
2022-03-30 22:37:36 +00:00
await sub_AddSubLines( lineIndex, fline);
}
2022-04-26 03:56:54 +00:00
return ReadLine;
}
async function sub_AddSubLines(lineIndex/*INTEGER*/,fline/*STRING*/) {
if (QB.halted()) { return; }
var quoteDepth = 0; // INTEGER
quoteDepth = 0;
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_Len( fline)); i= i + 1) { if (QB.halted()) { return; }
var c = ''; // STRING
2022-03-30 22:37:36 +00:00
c = (QB.func_Mid( fline, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
if ( quoteDepth == 0) {
quoteDepth = 1;
} else {
quoteDepth = 0;
}
}
2022-02-16 17:40:03 +00:00
if ( quoteDepth == 0 && c == ":" ) {
2022-03-30 22:37:36 +00:00
await sub_AddLine( lineIndex, (QB.func_Left( fline, i - 1)));
fline = (QB.func_Right( fline, (QB.func_Len( fline)) - i));
2022-02-16 17:40:03 +00:00
i = 0;
}
}
2022-03-30 22:37:36 +00:00
await sub_AddLine( lineIndex, fline);
2022-02-16 17:40:03 +00:00
}
async function sub_FindMethods() {
if (QB.halted()) { return; }
var i = 0; // INTEGER
var pcount = 0; // INTEGER
2022-04-26 03:56:54 +00:00
var rawJS = 0; // INTEGER
var parts = QB.initArray([{l:1,u:0}], ''); // STRING
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_UBound( lines)); i= i + 1) { if (QB.halted()) { return; }
pcount = (await func_Split( QB.arrayValue(lines, [ i]).value .text, " ", parts));
2022-02-16 17:40:03 +00:00
var word = ''; // STRING
2022-03-30 22:37:36 +00:00
word = (QB.func_UCase( QB.arrayValue(parts, [ 1]).value));
2022-04-26 03:56:54 +00:00
if ( word == "$IF" && pcount > 1) {
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "JAVASCRIPT" ) {
rawJS = True;
}
}
if ( word == "$END" && rawJS) {
rawJS = False;
}
if ( rawJS) {
continue;
}
2022-02-16 17:40:03 +00:00
if ( word == "FUNCTION" || word == "SUB" ) {
var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; // METHOD
2022-02-16 17:40:03 +00:00
m.line = i;
2022-03-30 22:37:36 +00:00
m.type = (QB.func_UCase( QB.arrayValue(parts, [ 1]).value));
2022-02-16 17:40:03 +00:00
m.name = QB.arrayValue(parts, [ 2]).value;
m.argc = 0;
m.args = "";
var args = QB.initArray([{l:1,u:0}], {name:'',type:''}); // ARGUMENT
2022-03-30 22:37:36 +00:00
if ((QB.func_UBound( parts)) > 2) {
2022-02-16 17:40:03 +00:00
var a = 0; // INTEGER
var args = ''; // STRING
args = "";
2022-03-30 22:37:36 +00:00
for ( a= 3; a <= (QB.func_UBound( parts)); a= a + 1) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
args = args +QB.arrayValue(parts, [ a]).value +" ";
}
2022-03-30 22:37:36 +00:00
args = (QB.func_Mid( (QB.func__Trim( args)), 2, (QB.func_Len( (QB.func__Trim( args)))) - 2));
var arga = QB.initArray([{l:1,u:0}], ''); // STRING
2022-03-30 22:37:36 +00:00
m.argc = (await func_ListSplit( args, arga));
2022-02-16 17:40:03 +00:00
args = "";
for ( a= 1; a <= m.argc; a= a + 1) { if (QB.halted()) { return; }
var aparts = QB.initArray([{l:1,u:0}], ''); // STRING
2022-02-16 17:40:03 +00:00
var apcount = 0; // INTEGER
var argname = ''; // STRING
var isArray = ''; // STRING
isArray = "false";
2022-03-30 22:37:36 +00:00
apcount = (await func_Split( QB.arrayValue(arga, [ a]).value, " ", aparts));
2022-02-16 17:40:03 +00:00
argname = QB.arrayValue(aparts, [ 1]).value;
2022-03-30 22:37:36 +00:00
if ((await func_EndsWith( argname, "()")) ) {
2022-02-16 17:40:03 +00:00
isArray = "true";
2022-03-30 22:37:36 +00:00
argname = (QB.func_Left( argname, (QB.func_Len( argname)) - 2));
2022-02-16 17:40:03 +00:00
}
if ( apcount == 3) {
2022-03-30 22:37:36 +00:00
args = args + argname +":" +(QB.func_UCase( QB.arrayValue(aparts, [ 3]).value)) +":" + isArray;
2022-02-16 17:40:03 +00:00
} else {
2022-03-30 22:37:36 +00:00
args = args + argname +":" +(await func_DataTypeFromName( QB.arrayValue(aparts, [ 1]).value)) +":" + isArray;
2022-02-16 17:40:03 +00:00
}
if ( a != m.argc) {
args = args +",";
}
}
m.args = args;
}
2022-03-30 22:37:36 +00:00
await sub_AddMethod( m, "", True);
2022-02-16 17:40:03 +00:00
}
}
}
async function func_Split(sourceString/*STRING*/,delimiter/*STRING*/,results/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var Split = null;
var cstr = ''; // STRING
var p = 0; // LONG
var curpos = 0; // LONG
var arrpos = 0; // LONG
var dpos = 0; // LONG
cstr = sourceString;
if ( delimiter == " " ) {
2022-03-30 22:37:36 +00:00
cstr = (QB.func_RTrim( (QB.func_LTrim( cstr))));
p = (QB.func_InStr( cstr, " "));
2022-02-16 17:40:03 +00:00
while ( p > 0) { if (QB.halted()) { return; }
2022-03-30 22:37:36 +00:00
cstr = (QB.func_Mid( cstr, 1, p - 1)) +(QB.func_Mid( cstr, p + 1));
p = (QB.func_InStr( cstr, " "));
2022-02-16 17:40:03 +00:00
}
}
curpos = 1;
arrpos = 0;
2022-03-30 22:37:36 +00:00
dpos = (QB.func_InStr( curpos, cstr, delimiter));
2022-02-16 17:40:03 +00:00
while (!( dpos == 0)) { if (QB.halted()) { return; }
arrpos = arrpos + 1;
QB.resizeArray(results, [{l:1,u:arrpos}], '', true); // STRING
2022-03-30 22:37:36 +00:00
QB.arrayValue(results, [ arrpos]).value = (QB.func_Mid( cstr, curpos, dpos - curpos));
curpos = dpos +(QB.func_Len( delimiter));
dpos = (QB.func_InStr( curpos, cstr, delimiter));
2022-02-16 17:40:03 +00:00
}
arrpos = arrpos + 1;
QB.resizeArray(results, [{l:1,u:arrpos}], '', true); // STRING
2022-03-30 22:37:36 +00:00
QB.arrayValue(results, [ arrpos]).value = (QB.func_Mid( cstr, curpos));
2022-02-16 17:40:03 +00:00
Split = arrpos;
return Split;
}
async function func_SLSplit(sourceString/*STRING*/,results/*STRING*/,escapeStrings/*INTEGER*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var SLSplit = null;
var cstr = ''; // STRING
var p = 0; // LONG
var curpos = 0; // LONG
var arrpos = 0; // LONG
var dpos = 0; // LONG
2022-03-30 22:37:36 +00:00
cstr = (QB.func__Trim( sourceString));
QB.resizeArray(results, [{l:1,u:0}], '', false); // STRING
2022-02-16 17:40:03 +00:00
var lastChar = ''; // STRING
var quoteMode = 0; // INTEGER
var result = ''; // STRING
var count = 0; // INTEGER
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
var c = ''; // STRING
2022-03-30 22:37:36 +00:00
c = (QB.func_Mid( cstr, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
2022-02-16 17:40:03 +00:00
quoteMode = ! quoteMode;
result = result + c;
if (! quoteMode && escapeStrings) {
result = (await func_Replace( result, "\\", "\\\\"));
2022-02-16 17:40:03 +00:00
}
} else if ( c == " " ) {
if ( quoteMode) {
result = result + c;
} else if ( lastChar == " " ) {
} else {
2022-03-30 22:37:36 +00:00
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING
2022-02-16 17:40:03 +00:00
QB.arrayValue(results, [ count]).value = result;
result = "";
}
} else {
result = result + c;
}
lastChar = c;
}
if ( result != "" ) {
2022-03-30 22:37:36 +00:00
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING
2022-02-16 17:40:03 +00:00
QB.arrayValue(results, [ count]).value = result;
}
2022-03-30 22:37:36 +00:00
SLSplit = (QB.func_UBound( results));
2022-02-16 17:40:03 +00:00
return SLSplit;
}
async function func_SLSplit2(sourceString/*STRING*/,results/*STRING*/) {
if (QB.halted()) { return; }
var SLSplit2 = null;
var cstr = ''; // STRING
var p = 0; // LONG
var curpos = 0; // LONG
var arrpos = 0; // LONG
var dpos = 0; // LONG
2022-03-30 22:37:36 +00:00
cstr = (QB.func__Trim( sourceString));
QB.resizeArray(results, [{l:1,u:0}], '', false); // STRING
var lastChar = ''; // STRING
var quoteMode = 0; // INTEGER
var result = ''; // STRING
var paren = 0; // INTEGER
var count = 0; // INTEGER
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; }
var c = ''; // STRING
2022-03-30 22:37:36 +00:00
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 {
2022-03-30 22:37:36 +00:00
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING
QB.arrayValue(results, [ count]).value = result;
result = "";
}
} else {
result = result + c;
}
lastChar = c;
}
if ( result != "" ) {
2022-03-30 22:37:36 +00:00
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING
QB.arrayValue(results, [ count]).value = result;
}
2022-03-30 22:37:36 +00:00
SLSplit2 = (QB.func_UBound( results));
return SLSplit2;
}
async function func_ListSplit(sourceString/*STRING*/,results/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var ListSplit = null;
var cstr = ''; // STRING
var p = 0; // LONG
var curpos = 0; // LONG
var arrpos = 0; // LONG
var dpos = 0; // LONG
2022-03-30 22:37:36 +00:00
cstr = (QB.func__Trim( sourceString));
QB.resizeArray(results, [{l:1,u:0}], '', false); // STRING
2022-02-16 17:40:03 +00:00
var quoteMode = 0; // INTEGER
var result = ''; // STRING
var count = 0; // INTEGER
var paren = 0; // INTEGER
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
var c = ''; // STRING
2022-03-30 22:37:36 +00:00
c = (QB.func_Mid( cstr, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
2022-02-16 17:40:03 +00:00
quoteMode = ! quoteMode;
result = result + c;
} else if ( quoteMode) {
result = result + c;
} else if ( c == "(" ) {
paren = paren + 1;
result = result + c;
} else if ( c == ")" ) {
paren = paren - 1;
result = result + c;
} else if ( paren > 0) {
result = result + c;
} else if ( c == "," ) {
2022-03-30 22:37:36 +00:00
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING
2022-02-16 17:40:03 +00:00
QB.arrayValue(results, [ count]).value = result;
result = "";
} else {
result = result + c;
}
}
if ( result != "" ) {
2022-03-30 22:37:36 +00:00
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING
2022-02-16 17:40:03 +00:00
QB.arrayValue(results, [ count]).value = result;
}
2022-03-30 22:37:36 +00:00
ListSplit = (QB.func_UBound( results));
2022-02-16 17:40:03 +00:00
return ListSplit;
}
async function func_PrintSplit(sourceString/*STRING*/,results/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var PrintSplit = null;
var cstr = ''; // STRING
var p = 0; // LONG
var curpos = 0; // LONG
var arrpos = 0; // LONG
var dpos = 0; // LONG
2022-03-30 22:37:36 +00:00
cstr = (QB.func__Trim( sourceString));
QB.resizeArray(results, [{l:1,u:0}], '', false); // STRING
2022-02-16 17:40:03 +00:00
var quoteMode = 0; // INTEGER
var result = ''; // STRING
var count = 0; // INTEGER
var paren = 0; // INTEGER
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
var c = ''; // STRING
2022-03-30 22:37:36 +00:00
c = (QB.func_Mid( cstr, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
2022-02-16 17:40:03 +00:00
quoteMode = ! quoteMode;
result = result + c;
} else if ( quoteMode) {
result = result + c;
} else if ( c == "(" ) {
paren = paren + 1;
result = result + c;
} else if ( c == ")" ) {
paren = paren - 1;
result = result + c;
} else if ( paren > 0) {
result = result + c;
} else if ( c == "," || c == ";" ) {
if ( result != "" ) {
2022-03-30 22:37:36 +00:00
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING
2022-02-16 17:40:03 +00:00
QB.arrayValue(results, [ count]).value = result;
result = "";
}
2022-03-30 22:37:36 +00:00
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING
2022-02-16 17:40:03 +00:00
QB.arrayValue(results, [ count]).value = c;
} else {
result = result + c;
}
}
if ( result != "" ) {
2022-03-30 22:37:36 +00:00
count = (QB.func_UBound( results)) + 1;
QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING
2022-02-16 17:40:03 +00:00
QB.arrayValue(results, [ count]).value = result;
}
2022-03-30 22:37:36 +00:00
PrintSplit = (QB.func_UBound( results));
2022-02-16 17:40:03 +00:00
return PrintSplit;
}
async function sub_PrintMethods() {
if (QB.halted()) { return; }
await QB.sub_Print([""]);
await QB.sub_Print(["Methods"]);
await QB.sub_Print(["------------------------------------------------------------"]);
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; }
var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; // METHOD
2022-02-16 17:40:03 +00:00
m = QB.arrayValue(methods, [ i]).value;
2022-03-30 22:37:36 +00:00
await QB.sub_Print([(QB.func_Str( m.line)) +": " + m.type +" - " + m.name +" [" + m.jsname +"] - " + m.returnType +" - " + m.args]);
2022-02-16 17:40:03 +00:00
}
}
async function sub_PrintTypes() {
if (QB.halted()) { return; }
await QB.sub_Print([""]);
await QB.sub_Print(["Types"]);
await QB.sub_Print(["------------------------------------------------------------"]);
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_UBound( types)); i= i + 1) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
var t = {line:0,name:'',argc:0,args:''}; // QBTYPE
t = QB.arrayValue(types, [ i]).value;
2022-03-30 22:37:36 +00:00
await QB.sub_Print([(QB.func_Str( t.line)) +": " + t.name]);
2022-02-16 17:40:03 +00:00
var v = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( v= 1; v <= (QB.func_UBound( typeVars)); v= v + 1) { if (QB.halted()) { return; }
2022-02-16 17:40:03 +00:00
if (QB.arrayValue(typeVars, [ i]).value .typeId == i) {
await QB.sub_Print([" -> " +QB.arrayValue(typeVars, [ v]).value .name +": " +QB.arrayValue(typeVars, [ v]).value .type]);
}
}
}
}
async function func_CopyMethod(fromMethod/*METHOD*/,toMethod/*METHOD*/) {
if (QB.halted()) { return; }
var CopyMethod = null;
toMethod.type = fromMethod.type;
toMethod.name = fromMethod.name;
return CopyMethod;
}
async function sub_AddMethod(m/*METHOD*/,prefix/*STRING*/,sync/*INTEGER*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var mcount = 0; // SINGLE
2022-03-30 22:37:36 +00:00
mcount = (QB.func_UBound( methods)) + 1;
QB.resizeArray(methods, [{l:1,u:mcount}], {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}, true); // METHOD
2022-02-16 17:40:03 +00:00
if ( m.type == "FUNCTION" ) {
2022-03-30 22:37:36 +00:00
m.returnType = (await func_DataTypeFromName( m.name));
2022-02-16 17:40:03 +00:00
}
2022-03-30 22:37:36 +00:00
m.uname = (QB.func_UCase( (await func_RemoveSuffix( m.name))));
m.jsname = (await func_MethodJS( m, prefix));
m.sync = sync;
2022-02-16 17:40:03 +00:00
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:1,u:mcount}], {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}, true); // METHOD
if ( m.type == "FUNCTION" ) {
m.returnType = (await func_DataTypeFromName( m.name));
}
m.uname = (QB.func_UCase( (await func_RemoveSuffix( m.name))));
m.jsname = (await func_MethodJS( m, prefix));
m.uname = (QB.func_UCase( prefix)) + m.uname;
m.name = prefix + m.name;
m.sync = sync;
QB.arrayValue(exportMethods, [ mcount]).value = m;
}
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*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var mcount = 0; // SINGLE
2022-03-30 22:37:36 +00:00
mcount = (QB.func_UBound( methods)) + 1;
QB.resizeArray(methods, [{l:1,u:mcount}], {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}, true); // METHOD
var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; // METHOD
2022-02-16 17:40:03 +00:00
m.type = mtype;
m.name = mname;
2022-03-30 22:37:36 +00:00
m.uname = (QB.func_UCase( m.name));
m.sync = sync;
2022-03-30 22:37:36 +00:00
m.jsname = (await func_GXMethodJS( (await func_RemoveSuffix( mname))));
2022-02-16 17:40:03 +00:00
if ( mtype == "FUNCTION" ) {
2022-03-30 22:37:36 +00:00
m.returnType = (await func_DataTypeFromName( mname));
2022-02-16 17:40:03 +00:00
}
QB.arrayValue(methods, [ mcount]).value = m;
}
async function sub_AddQBMethod(mtype/*STRING*/,mname/*STRING*/,sync/*INTEGER*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; // METHOD
2022-02-16 17:40:03 +00:00
m.type = mtype;
m.name = mname;
2022-03-30 22:37:36 +00:00
await sub_AddMethod( m, "QB.", sync);
2022-02-16 17:40:03 +00:00
}
async function sub_AddLine(lineIndex/*INTEGER*/,fline/*STRING*/) {
if (QB.halted()) { return; }
2022-03-30 22:37:36 +00:00
await sub___AddLine( lineIndex, fline);
2022-02-16 17:40:03 +00:00
}
async function sub___AddLine(lineIndex/*INTEGER*/,fline/*STRING*/) {
if (QB.halted()) { return; }
var lcount = 0; // INTEGER
2022-03-30 22:37:36 +00:00
lcount = (QB.func_UBound( lines)) + 1;
QB.resizeArray(lines, [{l:1,u:lcount}], {line:0,text:''}, true); // CODELINE
2022-02-16 17:40:03 +00:00
QB.arrayValue(lines, [ lcount]).value .line = lineIndex;
QB.arrayValue(lines, [ lcount]).value .text = fline;
}
async function sub_AddJSLine(sourceLine/*INTEGER*/,jsline/*STRING*/) {
if (QB.halted()) { return; }
var lcount = 0; // INTEGER
2022-03-30 22:37:36 +00:00
lcount = (QB.func_UBound( jsLines)) + 1;
QB.resizeArray(jsLines, [{l:1,u:lcount}], {line:0,text:''}, true); // CODELINE
2022-02-16 17:40:03 +00:00
QB.arrayValue(jsLines, [ lcount]).value .line = sourceLine;
QB.arrayValue(jsLines, [ lcount]).value .text = jsline;
}
async function sub_AddWarning(sourceLine/*INTEGER*/,msgText/*STRING*/) {
if (QB.halted()) { return; }
var lcount = 0; // INTEGER
2022-03-30 22:37:36 +00:00
lcount = (QB.func_UBound( warnings)) + 1;
QB.resizeArray(warnings, [{l:1,u:lcount}], {line:0,text:''}, true); // CODELINE
2022-02-16 17:40:03 +00:00
var l = 0; // INTEGER
if (( sourceLine > 0) ) {
l = QB.arrayValue(lines, [ sourceLine]).value .line;
}
QB.arrayValue(warnings, [ lcount]).value .line = l;
QB.arrayValue(warnings, [ lcount]).value .text = msgText;
}
async function sub_AddConst(vname/*STRING*/) {
if (QB.halted()) { return; }
var v = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE
v.type = "CONST";
v.name = vname;
v.isConst = True;
2022-03-30 22:37:36 +00:00
await sub_AddVariable( v, globalVars);
2022-02-16 17:40:03 +00:00
}
async function sub_AddGXConst(vname/*STRING*/) {
if (QB.halted()) { return; }
var v = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE
v.type = "CONST";
v.name = vname;
if ( vname == "GX_TRUE" ) {
v.jsname = "true";
} else if ( vname == "GX_FALSE" ) {
v.jsname = "false";
} else {
var jsname = ''; // STRING
2022-03-30 22:37:36 +00:00
jsname = (QB.func_Mid( vname, 3, (QB.func_Len( vname)) - 2));
if ((QB.func_Left( jsname, 1)) == "_" ) {
jsname = (QB.func_Right( jsname, (QB.func_Len( jsname)) - 1));
2022-02-16 17:40:03 +00:00
}
v.jsname = "GX." + jsname;
}
v.isConst = True;
2022-03-30 22:37:36 +00:00
await sub_AddVariable( v, globalVars);
}
async function sub_AddQBConst(vname/*STRING*/) {
if (QB.halted()) { return; }
var v = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE
v.type = "CONST";
v.name = vname;
v.jsname = "QB." + vname;
v.isConst = True;
await sub_AddVariable( v, globalVars);
2022-02-16 17:40:03 +00:00
}
async function sub_AddGlobal(vname/*STRING*/,vtype/*STRING*/,arraySize/*INTEGER*/) {
if (QB.halted()) { return; }
var v = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE
v.type = vtype;
v.name = vname;
v.isArray = arraySize > -1;
v.arraySize = arraySize;
2022-03-30 22:37:36 +00:00
await sub_AddVariable( v, globalVars);
2022-02-16 17:40:03 +00:00
}
async function sub_AddLocal(vname/*STRING*/,vtype/*STRING*/,arraySize/*INTEGER*/) {
if (QB.halted()) { return; }
var v = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE
v.type = vtype;
v.name = vname;
v.isArray = arraySize > -1;
v.arraySize = arraySize;
2022-03-30 22:37:36 +00:00
await sub_AddVariable( v, localVars);
2022-02-16 17:40:03 +00:00
}
async function sub_AddVariable(bvar/*VARIABLE*/,vlist/*VARIABLE*/) {
if (QB.halted()) { return; }
var vcount = 0; // SINGLE
2022-03-30 22:37:36 +00:00
vcount = (QB.func_UBound( vlist)) + 1;
QB.resizeArray(vlist, [{l:1,u:vcount}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}, true); // VARIABLE
var nvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE
nvar.type = bvar.type;
nvar.name = bvar.name;
nvar.jsname = bvar.jsname;
nvar.isConst = bvar.isConst;
nvar.isArray = bvar.isArray;
nvar.arraySize = bvar.arraySize;
nvar.typeId = bvar.typeId;
if ( nvar.jsname == "" ) {
2022-03-30 22:37:36 +00:00
nvar.jsname = (await func_RemoveSuffix( nvar.name));
}
QB.arrayValue(vlist, [ vcount]).value = nvar;
2022-02-16 17:40:03 +00:00
}
async function sub_AddType(t/*QBTYPE*/) {
if (QB.halted()) { return; }
var tcount = 0; // SINGLE
2022-03-30 22:37:36 +00:00
tcount = (QB.func_UBound( types)) + 1;
QB.resizeArray(types, [{l:1,u:tcount}], {line:0,name:'',argc:0,args:''}, true); // QBTYPE
2022-02-16 17:40:03 +00:00
QB.arrayValue(types, [ tcount]).value = t;
}
async function sub_AddSystemType(tname/*STRING*/,args/*STRING*/) {
if (QB.halted()) { return; }
var t = {line:0,name:'',argc:0,args:''}; // QBTYPE
t.name = tname;
2022-03-30 22:37:36 +00:00
await sub_AddType( t);
2022-02-16 17:40:03 +00:00
var typeId = 0; // INTEGER
2022-03-30 22:37:36 +00:00
typeId = (QB.func_UBound( types));
2022-02-16 17:40:03 +00:00
var count = 0; // INTEGER
var pairs = QB.initArray([{l:1,u:0}], ''); // STRING
2022-03-30 22:37:36 +00:00
count = (await func_Split( args, ",", pairs));
2022-02-16 17:40:03 +00:00
var i = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_UBound( pairs)); i= i + 1) { if (QB.halted()) { return; }
var nv = QB.initArray([{l:1,u:0}], ''); // STRING
2022-03-30 22:37:36 +00:00
count = (await func_Split( QB.arrayValue(pairs, [ i]).value, ":", nv));
2022-02-16 17:40:03 +00:00
var tvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE
tvar.typeId = typeId;
tvar.name = QB.arrayValue(nv, [ 1]).value;
2022-03-30 22:37:36 +00:00
tvar.type = (QB.func_UCase( QB.arrayValue(nv, [ 2]).value));
await sub_AddVariable( tvar, typeVars);
2022-02-16 17:40:03 +00:00
}
}
async function func_MainEnd() {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var MainEnd = null;
if ( programMethods == 0) {
2022-03-30 22:37:36 +00:00
MainEnd = (QB.func_UBound( lines));
2022-02-16 17:40:03 +00:00
} else {
MainEnd = QB.arrayValue(methods, [ 1]).value .line - 1;
}
return MainEnd;
}
async function func_RemoveSuffix(vname/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var RemoveSuffix = null;
var i = 0; // INTEGER
var done = 0; // INTEGER
var c = ''; // STRING
2022-03-30 22:37:36 +00:00
vname = (QB.func__Trim( vname));
i = (QB.func_Len( vname));
2022-02-16 17:40:03 +00:00
while (! done) { if (QB.halted()) { return; }
2022-03-30 22:37:36 +00:00
c = (QB.func_Mid( vname, i, 1));
2022-02-16 17:40:03 +00:00
if ( c == "`" || c == "%" || c == "&" || c == "$" || c == "~" || c == "!" ) {
i = i - 1;
} else {
done = True;
}
}
2022-03-30 22:37:36 +00:00
RemoveSuffix = (QB.func_Left( vname, i));
2022-02-16 17:40:03 +00:00
return RemoveSuffix;
}
async function func_DataTypeFromName(vname/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var DataTypeFromName = null;
var dt = ''; // STRING
2022-03-30 22:37:36 +00:00
if ((await func_EndsWith( vname, "$")) ) {
2022-02-16 17:40:03 +00:00
dt = "STRING";
2022-03-30 22:37:36 +00:00
} else if ((await func_EndsWith( vname, "`")) ) {
2022-02-16 17:40:03 +00:00
dt = "_BIT";
2022-03-30 22:37:36 +00:00
} else if ((await func_EndsWith( vname, "%%")) ) {
2022-02-16 17:40:03 +00:00
dt = "_BYTE";
2022-03-30 22:37:36 +00:00
} else if ((await func_EndsWith( vname, "~%")) ) {
2022-02-16 17:40:03 +00:00
dt = "_UNSIGNED INTEGER";
2022-03-30 22:37:36 +00:00
} else if ((await func_EndsWith( vname, "%")) ) {
2022-02-16 17:40:03 +00:00
dt = "INTEGER";
2022-03-30 22:37:36 +00:00
} else if ((await func_EndsWith( vname, "~&&")) ) {
2022-02-16 17:40:03 +00:00
dt = "_UNSIGNED INTEGER64";
2022-03-30 22:37:36 +00:00
} else if ((await func_EndsWith( vname, "&&")) ) {
2022-02-16 17:40:03 +00:00
dt = "_INTEGER64";
2022-03-30 22:37:36 +00:00
} else if ((await func_EndsWith( vname, "~&")) ) {
2022-02-16 17:40:03 +00:00
dt = "_UNSIGNED LONG";
2022-03-30 22:37:36 +00:00
} else if ((await func_EndsWith( vname, "##")) ) {
2022-02-16 17:40:03 +00:00
dt = "_FLOAT";
2022-03-30 22:37:36 +00:00
} else if ((await func_EndsWith( vname, "#")) ) {
2022-02-16 17:40:03 +00:00
dt = "DOUBLE";
2022-03-30 22:37:36 +00:00
} else if ((await func_EndsWith( vname, "~%&")) ) {
2022-02-16 17:40:03 +00:00
dt = "_UNSIGNED _OFFSET";
2022-03-30 22:37:36 +00:00
} else if ((await func_EndsWith( vname, "%&")) ) {
2022-02-16 17:40:03 +00:00
dt = "_OFFSET";
2022-03-30 22:37:36 +00:00
} else if ((await func_EndsWith( vname, "&")) ) {
2022-02-16 17:40:03 +00:00
dt = "LONG";
2022-03-30 22:37:36 +00:00
} else if ((await func_EndsWith( vname, "!")) ) {
2022-02-16 17:40:03 +00:00
dt = "SINGLE";
} else {
dt = "SINGLE";
}
DataTypeFromName = dt;
return DataTypeFromName;
}
async function func_EndsWith(s/*STRING*/,finds/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var EndsWith = null;
2022-03-30 22:37:36 +00:00
if ((QB.func_Len( finds)) > (QB.func_Len( s)) ) {
2022-02-16 17:40:03 +00:00
EndsWith = False;
return EndsWith;
}
2022-03-30 22:37:36 +00:00
if ((QB.func__InStrRev( s, finds)) == (QB.func_Len( s)) -((QB.func_Len( finds)) - 1) ) {
2022-02-16 17:40:03 +00:00
EndsWith = True;
} else {
EndsWith = False;
}
return EndsWith;
}
async function func_StartsWith(s/*STRING*/,finds/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var StartsWith = null;
2022-03-30 22:37:36 +00:00
if ((QB.func_Len( finds)) > (QB.func_Len( s)) ) {
2022-02-16 17:40:03 +00:00
StartsWith = False;
return StartsWith;
}
2022-03-30 22:37:36 +00:00
if ((QB.func_InStr( s, finds)) == 1) {
2022-02-16 17:40:03 +00:00
StartsWith = True;
} else {
StartsWith = False;
}
return StartsWith;
}
async function func_Join(parts/*STRING*/,startIndex/*INTEGER*/,endIndex/*INTEGER*/,delimiter/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var Join = null;
if ( endIndex == -1) {
2022-03-30 22:37:36 +00:00
endIndex = (QB.func_UBound( parts));
2022-02-16 17:40:03 +00:00
}
var s = ''; // STRING
var i = 0; // INTEGER
for ( i= startIndex; i <= endIndex; i= i + 1) { if (QB.halted()) { return; }
s = s +QB.arrayValue(parts, [ i]).value;
2022-03-30 22:37:36 +00:00
if ( i != (QB.func_UBound( parts)) ) {
2022-02-16 17:40:03 +00:00
s = s + delimiter;
}
}
Join = s;
return Join;
}
async function func_LPad(s/*STRING*/,padChar/*STRING*/,swidth/*INTEGER*/) {
if (QB.halted()) { return; }
var LPad = null;
var padding = ''; // STRING
padding = (QB.func_String( swidth -(QB.func_Len( s)), padChar));
LPad = padding + s;
return LPad;
}
async function func_Replace(s/*STRING*/,searchString/*STRING*/,newString/*STRING*/) {
if (QB.halted()) { return; }
var Replace = null;
var ns = ''; // STRING
var i = 0; // INTEGER
var slen = 0; // INTEGER
slen = (QB.func_Len( searchString));
for ( i= 1; i <= (QB.func_Len( s)); i= i + 1) { if (QB.halted()) { return; }
if ((QB.func_Mid( s, i, slen)) == searchString) {
ns = ns + newString;
i = i + slen - 1;
} else {
ns = ns +(QB.func_Mid( s, i, 1));
}
}
Replace = ns;
return Replace;
}
async function func_LF() {
if (QB.halted()) { return; }
var LF = null;
LF = (QB.func_Chr( 10));
return LF;
}
async function func_CR() {
if (QB.halted()) { return; }
var CR = null;
CR = (QB.func_Chr( 13));
return CR;
}
async function func_CRLF() {
if (QB.halted()) { return; }
var CRLF = null;
CRLF = await func_CR() +await func_LF();
return CRLF;
}
async function func_MethodJS(m/*METHOD*/,prefix/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var MethodJS = null;
var jsname = ''; // STRING
jsname = prefix;
if ( m.type == "FUNCTION" ) {
jsname = jsname +"func_";
} else {
jsname = jsname +"sub_";
}
var i = 0; // INTEGER
var c = ''; // STRING
var a = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= 1; i <= (QB.func_Len( m.name)); i= i + 1) { if (QB.halted()) { return; }
c = (QB.func_Mid( m.name, i, 1));
a = (QB.func_Asc( c));
2022-02-16 17:40:03 +00:00
if (( a >= 65 && a <= 90) || ( a >= 97 && a <= 122) || ( a >= 48 && a <= 57) || a == 95 || a == 46) {
jsname = jsname + c;
}
}
MethodJS = jsname;
return MethodJS;
}
async function func_GXMethodJS(mname/*STRING*/) {
2022-02-16 17:40:03 +00:00
if (QB.halted()) { return; }
var GXMethodJS = null;
var jsname = ''; // STRING
var startIdx = 0; // INTEGER
2022-03-30 22:37:36 +00:00
if ((QB.func_InStr( mname, "GXSTR")) == 1) {
2022-02-16 17:40:03 +00:00
jsname = "GXSTR.";
startIdx = 7;
} else {
jsname = "GX.";
startIdx = 3;
}
2022-03-30 22:37:36 +00:00
jsname = jsname +(QB.func_LCase( (QB.func_Mid( mname, startIdx, 1))));
2022-02-16 17:40:03 +00:00
var i = 0; // INTEGER
var c = ''; // STRING
var a = 0; // INTEGER
2022-03-30 22:37:36 +00:00
for ( i= startIdx + 1; i <= (QB.func_Len( mname)); i= i + 1) { if (QB.halted()) { return; }
c = (QB.func_Mid( mname, i, 1));
a = (QB.func_Asc( c));
2022-02-16 17:40:03 +00:00
if (( a >= 65 && a <= 90) || ( a >= 97 && a <= 122) || ( a >= 48 && a <= 57) || a == 95 || a == 46) {
jsname = jsname + c;
}
}
if ( mname == "GXMapLoad" || mname == "GXSceneStart" ) {
jsname = "await " + jsname;
}
GXMethodJS = jsname;
return GXMethodJS;
}
async function sub_InitGX() {
if (QB.halted()) { return; }
2022-03-30 22:37:36 +00:00
await sub_AddSystemType( "GXPOSITION", "x:LONG,y:LONG");
await sub_AddSystemType( "GXDEVICEINPUT", "deviceId:INTEGER,deviceType:INTEGER,inputType:INTEGER,inputId:INTEGER,inputValue:INTEGER");
await sub_AddGXConst( "GX_FALSE");
await sub_AddGXConst( "GX_TRUE");
await sub_AddGXConst( "GXEVENT_INIT");
await sub_AddGXConst( "GXEVENT_UPDATE");
await sub_AddGXConst( "GXEVENT_DRAWBG");
await sub_AddGXConst( "GXEVENT_DRAWMAP");
await sub_AddGXConst( "GXEVENT_DRAWSCREEN");
await sub_AddGXConst( "GXEVENT_MOUSEINPUT");
await sub_AddGXConst( "GXEVENT_PAINTBEFORE");
await sub_AddGXConst( "GXEVENT_PAINTAFTER");
await sub_AddGXConst( "GXEVENT_COLLISION_TILE");
await sub_AddGXConst( "GXEVENT_COLLISION_ENTITY");
await sub_AddGXConst( "GXEVENT_PLAYER_ACTION");
await sub_AddGXConst( "GXEVENT_ANIMATE_COMPLETE");
await sub_AddGXConst( "GXANIMATE_LOOP");
await sub_AddGXConst( "GXANIMATE_SINGLE");
await sub_AddGXConst( "GXBG_STRETCH");
await sub_AddGXConst( "GXBG_SCROLL");
await sub_AddGXConst( "GXBG_WRAP");
await sub_AddGXConst( "GXKEY_ESC");
await sub_AddGXConst( "GXKEY_1");
await sub_AddGXConst( "GXKEY_2");
await sub_AddGXConst( "GXKEY_3");
await sub_AddGXConst( "GXKEY_4");
await sub_AddGXConst( "GXKEY_5");
await sub_AddGXConst( "GXKEY_6");
await sub_AddGXConst( "GXKEY_7");
await sub_AddGXConst( "GXKEY_8");
await sub_AddGXConst( "GXKEY_9");
await sub_AddGXConst( "GXKEY_0");
await sub_AddGXConst( "GXKEY_DASH");
await sub_AddGXConst( "GXKEY_EQUALS");
await sub_AddGXConst( "GXKEY_BACKSPACE");
await sub_AddGXConst( "GXKEY_TAB");
await sub_AddGXConst( "GXKEY_Q");
await sub_AddGXConst( "GXKEY_W");
await sub_AddGXConst( "GXKEY_E");
await sub_AddGXConst( "GXKEY_R");
await sub_AddGXConst( "GXKEY_T");
await sub_AddGXConst( "GXKEY_Y");
await sub_AddGXConst( "GXKEY_U");
await sub_AddGXConst( "GXKEY_I");
await sub_AddGXConst( "GXKEY_O");
await sub_AddGXConst( "GXKEY_P");
await sub_AddGXConst( "GXKEY_LBRACKET");
await sub_AddGXConst( "GXKEY_RBRACKET");
await sub_AddGXConst( "GXKEY_ENTER");
await sub_AddGXConst( "GXKEY_LCTRL");
await sub_AddGXConst( "GXKEY_A");
await sub_AddGXConst( "GXKEY_S");
await sub_AddGXConst( "GXKEY_D");
await sub_AddGXConst( "GXKEY_F");
await sub_AddGXConst( "GXKEY_G");
await sub_AddGXConst( "GXKEY_H");
await sub_AddGXConst( "GXKEY_J");
await sub_AddGXConst( "GXKEY_K");
await sub_AddGXConst( "GXKEY_L");
await sub_AddGXConst( "GXKEY_SEMICOLON");
await sub_AddGXConst( "GXKEY_QUOTE");
await sub_AddGXConst( "GXKEY_BACKQUOTE");
await sub_AddGXConst( "GXKEY_LSHIFT");
await sub_AddGXConst( "GXKEY_BACKSLASH");
await sub_AddGXConst( "GXKEY_Z");
await sub_AddGXConst( "GXKEY_X");
await sub_AddGXConst( "GXKEY_C");
await sub_AddGXConst( "GXKEY_V");
await sub_AddGXConst( "GXKEY_B");
await sub_AddGXConst( "GXKEY_N");
await sub_AddGXConst( "GXKEY_M");
await sub_AddGXConst( "GXKEY_COMMA");
await sub_AddGXConst( "GXKEY_PERIOD");
await sub_AddGXConst( "GXKEY_SLASH");
await sub_AddGXConst( "GXKEY_RSHIFT");
await sub_AddGXConst( "GXKEY_NUMPAD_MULTIPLY");
await sub_AddGXConst( "GXKEY_SPACEBAR");
await sub_AddGXConst( "GXKEY_CAPSLOCK");
await sub_AddGXConst( "GXKEY_F1");
await sub_AddGXConst( "GXKEY_F2");
await sub_AddGXConst( "GXKEY_F3");
await sub_AddGXConst( "GXKEY_F4");
await sub_AddGXConst( "GXKEY_F5");
await sub_AddGXConst( "GXKEY_F6");
await sub_AddGXConst( "GXKEY_F7");
await sub_AddGXConst( "GXKEY_F8");
await sub_AddGXConst( "GXKEY_F9");
await sub_AddGXConst( "GXKEY_PAUSE");
await sub_AddGXConst( "GXKEY_SCRLK");
await sub_AddGXConst( "GXKEY_NUMPAD_7");
await sub_AddGXConst( "GXKEY_NUMPAD_8");
await sub_AddGXConst( "GXKEY_NUMPAD_9");
await sub_AddGXConst( "GXKEY_NUMPAD_MINUS");
await sub_AddGXConst( "GXKEY_NUMPAD_4");
await sub_AddGXConst( "GXKEY_NUMPAD_5");
await sub_AddGXConst( "GXKEY_NUMPAD_6");
await sub_AddGXConst( "GXKEY_NUMPAD_PLUS");
await sub_AddGXConst( "GXKEY_NUMPAD_1");
await sub_AddGXConst( "GXKEY_NUMPAD_2");
await sub_AddGXConst( "GXKEY_NUMPAD_3");
await sub_AddGXConst( "GXKEY_NUMPAD_0");
await sub_AddGXConst( "GXKEY_NUMPAD_PERIOD");
await sub_AddGXConst( "GXKEY_F11");
await sub_AddGXConst( "GXKEY_F12");
await sub_AddGXConst( "GXKEY_NUMPAD_ENTER");
await sub_AddGXConst( "GXKEY_RCTRL");
await sub_AddGXConst( "GXKEY_NUMPAD_DIVIDE");
await sub_AddGXConst( "GXKEY_NUMLOCK");
await sub_AddGXConst( "GXKEY_HOME");
await sub_AddGXConst( "GXKEY_UP");
await sub_AddGXConst( "GXKEY_PAGEUP");
await sub_AddGXConst( "GXKEY_LEFT");
await sub_AddGXConst( "GXKEY_RIGHT");
await sub_AddGXConst( "GXKEY_END");
await sub_AddGXConst( "GXKEY_DOWN");
await sub_AddGXConst( "GXKEY_PAGEDOWN");
await sub_AddGXConst( "GXKEY_INSERT");
await sub_AddGXConst( "GXKEY_DELETE");
await sub_AddGXConst( "GXKEY_LWIN");
await sub_AddGXConst( "GXKEY_RWIN");
await sub_AddGXConst( "GXKEY_MENU");
await sub_AddGXConst( "GXACTION_MOVE_LEFT");
await sub_AddGXConst( "GXACTION_MOVE_RIGHT");
await sub_AddGXConst( "GXACTION_MOVE_UP");
await sub_AddGXConst( "GXACTION_MOVE_DOWN");
await sub_AddGXConst( "GXACTION_JUMP");
await sub_AddGXConst( "GXACTION_JUMP_RIGHT");
await sub_AddGXConst( "GXACTION_JUMP_LEFT");
await sub_AddGXConst( "GXSCENE_FOLLOW_NONE");
await sub_AddGXConst( "GXSCENE_FOLLOW_ENTITY_CENTER");
await sub_AddGXConst( "GXSCENE_FOLLOW_ENTITY_CENTER_X");
await sub_AddGXConst( "GXSCENE_FOLLOW_ENTITY_CENTER_Y");
await sub_AddGXConst( "GXSCENE_FOLLOW_ENTITY_CENTER_X_POS");
await sub_AddGXConst( "GXSCENE_FOLLOW_ENTITY_CENTER_X_NEG");
await sub_AddGXConst( "GXSCENE_CONSTRAIN_NONE");
await sub_AddGXConst( "GXSCENE_CONSTRAIN_TO_MAP");
await sub_AddGXConst( "GXFONT_DEFAULT");
await sub_AddGXConst( "GXFONT_DEFAULT_BLACK");
await sub_AddGXConst( "GXDEVICE_KEYBOARD");
await sub_AddGXConst( "GXDEVICE_MOUSE");
await sub_AddGXConst( "GXDEVICE_CONTROLLER");
await sub_AddGXConst( "GXDEVICE_BUTTON");
await sub_AddGXConst( "GXDEVICE_AXIS");
await sub_AddGXConst( "GXDEVICE_WHEEL");
await sub_AddGXConst( "GXTYPE_ENTITY");
await sub_AddGXConst( "GXTYPE_FONT");
await sub_AddGXMethod( "SUB", "GXSleep", True);
await sub_AddGXMethod( "FUNCTION", "GXMouseX", False);
await sub_AddGXMethod( "FUNCTION", "GXMouseY", False);
await sub_AddGXMethod( "FUNCTION", "GXSoundLoad", False);
await sub_AddGXMethod( "SUB", "GXSoundPlay", False);
await sub_AddGXMethod( "SUB", "GXSoundRepeat", False);
await sub_AddGXMethod( "SUB", "GXSoundVolume", False);
await sub_AddGXMethod( "SUB", "GXSoundPause", False);
await sub_AddGXMethod( "SUB", "GXSoundStop", False);
await sub_AddGXMethod( "SUB", "GXSoundMuted", False);
await sub_AddGXMethod( "FUNCTION", "GXSoundMuted", False);
await sub_AddGXMethod( "SUB", "GXEntityAnimate", False);
await sub_AddGXMethod( "SUB", "GXEntityAnimateStop", False);
await sub_AddGXMethod( "SUB", "GXEntityAnimateMode", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityAnimateMode", False);
await sub_AddGXMethod( "FUNCTION", "GXScreenEntityCreate", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityCreate", False);
await sub_AddGXMethod( "SUB", "GXEntityCreate", False);
await sub_AddGXMethod( "SUB", "GXEntityVisible", False);
await sub_AddGXMethod( "SUB", "GXEntityMove", False);
await sub_AddGXMethod( "SUB", "GXEntityPos", False);
await sub_AddGXMethod( "SUB", "GXEntityVX", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityVX", False);
await sub_AddGXMethod( "SUB", "GXEntityVY", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityVY", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityX", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityY", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityWidth", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityHeight", False);
await sub_AddGXMethod( "SUB", "GXEntityFrameNext", False);
await sub_AddGXMethod( "SUB", "GXEntityFrameSet", False);
await sub_AddGXMethod( "SUB", "GXEntityType", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityType", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityUID$", False);
await sub_AddGXMethod( "FUNCTION", "GXFontUID$", False);
await sub_AddGXMethod( "SUB", "GXEntityApplyGravity", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityApplyGravity", False);
await sub_AddGXMethod( "SUB", "GXEntityCollisionOffset", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityCollisionOffsetLeft", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityCollisionOffsetTop", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityCollisionOffsetRight", False);
await sub_AddGXMethod( "FUNCTION", "GXEntityCollisionOffsetBottom", False);
await sub_AddGXMethod( "SUB", "GXFullScreen", False);
await sub_AddGXMethod( "FUNCTION", "GXFullScreen", False);
await sub_AddGXMethod( "FUNCTION", "GXBackgroundAdd", False);
await sub_AddGXMethod( "SUB", "GXBackgroundY", False);
await sub_AddGXMethod( "SUB", "GXBackgroundHeight", False);
await sub_AddGXMethod( "SUB", "GXBackgroundClear", False);
await sub_AddGXMethod( "SUB", "GXSceneEmbedded", False);
await sub_AddGXMethod( "FUNCTION", "GXSceneEmbedded", False);
await sub_AddGXMethod( "SUB", "GXSceneCreate", False);
await sub_AddGXMethod( "SUB", "GXSceneWindowSize", False);
await sub_AddGXMethod( "SUB", "GXSceneScale", False);
await sub_AddGXMethod( "SUB", "GXSceneResize", False);
await sub_AddGXMethod( "SUB", "GXSceneDestroy", False);
await sub_AddGXMethod( "SUB", "GXCustomDraw", False);
await sub_AddGXMethod( "FUNCTION", "GXCustomDraw", False);
await sub_AddGXMethod( "SUB", "GXFrameRate", False);
await sub_AddGXMethod( "FUNCTION", "GXFrameRate", False);
await sub_AddGXMethod( "FUNCTION", "GXFrame", False);
await sub_AddGXMethod( "SUB", "GXSceneDraw", False);
await sub_AddGXMethod( "SUB", "GXSceneMove", False);
await sub_AddGXMethod( "SUB", "GXScenePos", False);
await sub_AddGXMethod( "FUNCTION", "GXSceneX", False);
await sub_AddGXMethod( "FUNCTION", "GXSceneY", False);
await sub_AddGXMethod( "FUNCTION", "GXSceneWidth", False);
await sub_AddGXMethod( "FUNCTION", "GXSceneHeight", False);
await sub_AddGXMethod( "FUNCTION", "GXSceneColumns", False);
await sub_AddGXMethod( "FUNCTION", "GXSceneRows", False);
await sub_AddGXMethod( "SUB", "GXSceneStart", True);
await sub_AddGXMethod( "SUB", "GXSceneUpdate", False);
await sub_AddGXMethod( "SUB", "GXSceneFollowEntity", False);
await sub_AddGXMethod( "SUB", "GXSceneConstrain", False);
await sub_AddGXMethod( "SUB", "GXSceneStop", False);
await sub_AddGXMethod( "SUB", "GXMapCreate", False);
await sub_AddGXMethod( "FUNCTION", "GXMapColumns", False);
await sub_AddGXMethod( "FUNCTION", "GXMapRows", False);
await sub_AddGXMethod( "FUNCTION", "GXMapLayers", False);
await sub_AddGXMethod( "SUB", "GXMapLayerVisible", False);
await sub_AddGXMethod( "FUNCTION", "GXMapLayerVisible", False);
await sub_AddGXMethod( "SUB", "GXMapLayerAdd", False);
await sub_AddGXMethod( "SUB", "GXMapLayerInsert", False);
await sub_AddGXMethod( "SUB", "GXMapLayerRemove", False);
await sub_AddGXMethod( "SUB", "GXMapResize", False);
await sub_AddGXMethod( "SUB", "GXMapDraw", False);
await sub_AddGXMethod( "SUB", "GXMapTilePosAt", False);
await sub_AddGXMethod( "SUB", "GXMapTile", False);
await sub_AddGXMethod( "FUNCTION", "GXMapTile", False);
await sub_AddGXMethod( "FUNCTION", "GXMapTileDepth", False);
await sub_AddGXMethod( "SUB", "GXMapTileAdd", False);
await sub_AddGXMethod( "SUB", "GXMapTileRemove", False);
await sub_AddGXMethod( "FUNCTION", "GXMapVersion", False);
await sub_AddGXMethod( "SUB", "GXMapSave", False);
await sub_AddGXMethod( "SUB", "GXMapLoad", True);
await sub_AddGXMethod( "FUNCTION", "GXMapIsometric", False);
await sub_AddGXMethod( "SUB", "GXMapIsometric", False);
await sub_AddGXMethod( "SUB", "GXSpriteDraw", False);
await sub_AddGXMethod( "SUB", "GXSpriteDrawScaled", False);
await sub_AddGXMethod( "SUB", "GXTilesetCreate", False);
await sub_AddGXMethod( "SUB", "GXTilesetReplaceImage", False);
await sub_AddGXMethod( "SUB", "GXTilesetLoad", False);
await sub_AddGXMethod( "SUB", "GXTilesetSave", False);
await sub_AddGXMethod( "SUB", "GXTilesetPos", False);
await sub_AddGXMethod( "FUNCTION", "GXTilesetWidth", False);
await sub_AddGXMethod( "FUNCTION", "GXTilesetHeight", False);
await sub_AddGXMethod( "FUNCTION", "GXTilesetColumns", False);
await sub_AddGXMethod( "FUNCTION", "GXTilesetRows", False);
await sub_AddGXMethod( "FUNCTION", "GXTilesetFilename", False);
await sub_AddGXMethod( "FUNCTION", "GXTilesetImage", False);
await sub_AddGXMethod( "SUB", "GXTilesetAnimationCreate", False);
await sub_AddGXMethod( "SUB", "GXTilesetAnimationAdd", False);
await sub_AddGXMethod( "SUB", "GXTilesetAnimationRemove", False);
await sub_AddGXMethod( "FUNCTION", "GXTilesetAnimationFrames", False);
await sub_AddGXMethod( "FUNCTION", "GXTilesetAnimationSpeed", False);
await sub_AddGXMethod( "SUB", "GXTilesetAnimationSpeed", False);
await sub_AddGXMethod( "FUNCTION", "GXFontCreate", False);
await sub_AddGXMethod( "SUB", "GXFontCreate", False);
await sub_AddGXMethod( "FUNCTION", "GXFontWidth", False);
await sub_AddGXMethod( "FUNCTION", "GXFontHeight", False);
await sub_AddGXMethod( "FUNCTION", "GXFontCharSpacing", False);
await sub_AddGXMethod( "SUB", "GXFontCharSpacing", False);
await sub_AddGXMethod( "FUNCTION", "GXFontLineSpacing", False);
await sub_AddGXMethod( "SUB", "GXFontLineSpacing", False);
await sub_AddGXMethod( "SUB", "GXDrawText", False);
await sub_AddGXMethod( "FUNCTION", "GXDebug", False);
await sub_AddGXMethod( "SUB", "GXDebug", False);
await sub_AddGXMethod( "FUNCTION", "GXDebugScreenEntities", False);
await sub_AddGXMethod( "SUB", "GXDebugScreenEntities", False);
await sub_AddGXMethod( "FUNCTION", "GXDebugFont", False);
await sub_AddGXMethod( "SUB", "GXDebugFont", False);
await sub_AddGXMethod( "FUNCTION", "GXDebugTileBorderColor", False);
await sub_AddGXMethod( "SUB", "GXDebugTileBorderColor", False);
await sub_AddGXMethod( "FUNCTION", "GXDebugEntityBorderColor", False);
await sub_AddGXMethod( "SUB", "GXDebugEntityBorderColor", False);
await sub_AddGXMethod( "FUNCTION", "GXDebugEntityCollisionColor", False);
await sub_AddGXMethod( "SUB", "GXDebugEntityCollisionColor", False);
await sub_AddGXMethod( "SUB", "GXKeyInput", False);
await sub_AddGXMethod( "FUNCTION", "GXKeyDown", False);
await sub_AddGXMethod( "SUB", "GXDeviceInputDetect", False);
await sub_AddGXMethod( "FUNCTION", "GXDeviceInputTest", False);
await sub_AddGXMethod( "FUNCTION", "GXDeviceName", False);
await sub_AddGXMethod( "FUNCTION", "GXDeviceTypeName", False);
await sub_AddGXMethod( "FUNCTION", "GXInputTypeName", False);
await sub_AddGXMethod( "FUNCTION", "GXKeyButtonName", False);
await sub_AddGXConst( "GX_CR");
await sub_AddGXConst( "GX_LF");
await sub_AddGXConst( "GX_CRLF");
await sub_AddGXMethod( "FUNCTION", "GXSTR_LPad", False);
await sub_AddGXMethod( "FUNCTION", "GXSTR_RPad", False);
await sub_AddGXMethod( "FUNCTION", "GXSTR_Replace", False);
2022-02-16 17:40:03 +00:00
}
async function sub_InitQBMethods() {
if (QB.halted()) { return; }
2022-03-30 22:37:36 +00:00
await sub_AddQBMethod( "FUNCTION", "_Alpha", False);
await sub_AddQBMethod( "FUNCTION", "_Alpha32", False);
await sub_AddQBMethod( "FUNCTION", "_Atan2", False);
await sub_AddQBMethod( "FUNCTION", "_AutoDisplay", False);
await sub_AddQBMethod( "SUB", "_AutoDisplay", False);
await sub_AddQBMethod( "FUNCTION", "_Blue", False);
await sub_AddQBMethod( "FUNCTION", "_Blue32", False);
await sub_AddQBMethod( "FUNCTION", "_CopyImage", False);
2022-04-27 00:29:34 +00:00
await sub_AddQBMethod( "FUNCTION", "_Cosh", False);
await sub_AddQBMethod( "FUNCTION", "_D2R", False);
2022-03-30 22:37:36 +00:00
await sub_AddQBMethod( "SUB", "_Delay", True);
await sub_AddQBMethod( "FUNCTION", "_Dest", False);
await sub_AddQBMethod( "SUB", "_Dest", False);
await sub_AddQBMethod( "FUNCTION", "_Display", False);
await sub_AddQBMethod( "SUB", "_Display", False);
await sub_AddQBMethod( "FUNCTION", "_FontWidth", False);
await sub_AddQBMethod( "SUB", "_FreeImage", False);
2022-04-28 19:30:25 +00:00
await sub_AddQBMethod( "SUB", "_FullScreen", False);
await sub_AddQBMethod( "FUNCTION", "_FullScreen", False);
2022-03-30 22:37:36 +00:00
await sub_AddQBMethod( "FUNCTION", "_Green", False);
await sub_AddQBMethod( "FUNCTION", "_Green32", False);
await sub_AddQBMethod( "FUNCTION", "_Height", False);
await sub_AddQBMethod( "FUNCTION", "_InStrRev", False);
await sub_AddQBMethod( "SUB", "_Limit", True);
await sub_AddQBMethod( "SUB", "_KeyClear", False);
await sub_AddQBMethod( "FUNCTION", "_KeyDown", False);
await sub_AddQBMethod( "FUNCTION", "_KeyHit", False);
await sub_AddQBMethod( "FUNCTION", "_LoadImage", True);
await sub_AddQBMethod( "FUNCTION", "_MouseButton", False);
await sub_AddQBMethod( "FUNCTION", "_MouseInput", False);
await sub_AddQBMethod( "FUNCTION", "_MouseX", False);
await sub_AddQBMethod( "FUNCTION", "_MouseY", False);
await sub_AddQBMethod( "FUNCTION", "_NewImage", False);
await sub_AddQBMethod( "FUNCTION", "_Pi", False);
await sub_AddQBMethod( "SUB", "_PrintString", False);
await sub_AddQBMethod( "FUNCTION", "_PrintWidth", False);
await sub_AddQBMethod( "SUB", "_PutImage", False);
2022-04-27 00:29:34 +00:00
await sub_AddQBMethod( "FUNCTION", "_R2D", False);
2022-03-30 22:37:36 +00:00
await sub_AddQBMethod( "FUNCTION", "_Red", False);
await sub_AddQBMethod( "FUNCTION", "_Red32", 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);
2022-04-27 00:29:34 +00:00
await sub_AddQBMethod( "FUNCTION", "_Sinh", False);
2022-05-05 03:40:25 +00:00
await sub_AddQBMethod( "FUNCTION", "_Source", False);
await sub_AddQBMethod( "SUB", "_Source", False);
2022-03-30 22:37:36 +00:00
await sub_AddQBMethod( "SUB", "_SndClose", False);
await sub_AddQBMethod( "FUNCTION", "_SndOpen", False);
await sub_AddQBMethod( "SUB", "_SndPlay", False);
await sub_AddQBMethod( "SUB", "_SndLoop", False);
await sub_AddQBMethod( "SUB", "_SndPause", False);
await sub_AddQBMethod( "SUB", "_SndStop", False);
await sub_AddQBMethod( "SUB", "_SndVol", False);
await sub_AddQBMethod( "SUB", "_Title", 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);
2022-04-28 15:14:53 +00:00
await sub_AddQBMethod( "SUB", "Beep", False);
2022-03-30 22:37:36 +00:00
await sub_AddQBMethod( "FUNCTION", "Chr$", False);
await sub_AddQBMethod( "SUB", "Circle", False);
await sub_AddQBMethod( "SUB", "Cls", False);
await sub_AddQBMethod( "SUB", "Color", False);
await sub_AddQBMethod( "FUNCTION", "Command$", False);
await sub_AddQBMethod( "FUNCTION", "Cos", False);
await sub_AddQBMethod( "FUNCTION", "Csrlin", False);
2022-03-30 22:37:36 +00:00
await sub_AddQBMethod( "FUNCTION", "Cvi", False);
await sub_AddQBMethod( "FUNCTION", "Cvl", False);
await sub_AddQBMethod( "SUB", "Draw", False);
2022-03-30 22:37:36 +00:00
await sub_AddQBMethod( "FUNCTION", "Exp", False);
await sub_AddQBMethod( "FUNCTION", "Fix", False);
2022-04-24 16:23:15 +00:00
await sub_AddQBMethod( "FUNCTION", "Hex$", False);
2022-03-30 22:37:36 +00:00
await sub_AddQBMethod( "SUB", "Input", True);
await sub_AddQBMethod( "FUNCTION", "InKey$", False);
await sub_AddQBMethod( "FUNCTION", "InStr", False);
await sub_AddQBMethod( "FUNCTION", "Int", False);
await sub_AddQBMethod( "FUNCTION", "LBound", False);
await sub_AddQBMethod( "FUNCTION", "Left$", False);
await sub_AddQBMethod( "FUNCTION", "LCase$", False);
await sub_AddQBMethod( "FUNCTION", "Len", False);
await sub_AddQBMethod( "SUB", "Line", False);
await sub_AddQBMethod( "SUB", "Locate", False);
await sub_AddQBMethod( "FUNCTION", "Log", False);
await sub_AddQBMethod( "FUNCTION", "LTrim$", False);
await sub_AddQBMethod( "FUNCTION", "Mid$", False);
await sub_AddQBMethod( "FUNCTION", "Mki$", False);
await sub_AddQBMethod( "FUNCTION", "Mkl$", False);
await sub_AddQBMethod( "FUNCTION", "Oct$", False);
2022-04-26 18:34:12 +00:00
await sub_AddQBMethod( "SUB", "Paint", False);
await sub_AddQBMethod( "FUNCTION", "Point", False);
await sub_AddQBMethod( "FUNCTION", "Pos", False);
2022-04-25 17:29:12 +00:00
await sub_AddQBMethod( "SUB", "PReset", False);
2022-03-30 22:37:36 +00:00
await sub_AddQBMethod( "SUB", "Print", True);
await sub_AddQBMethod( "SUB", "PSet", False);
await sub_AddQBMethod( "FUNCTION", "Right$", False);
await sub_AddQBMethod( "FUNCTION", "RTrim$", False);
await sub_AddQBMethod( "FUNCTION", "Rnd", False);
await sub_AddQBMethod( "SUB", "Screen", False);
await sub_AddQBMethod( "FUNCTION", "Sgn", False);
await sub_AddQBMethod( "FUNCTION", "Sin", False);
await sub_AddQBMethod( "SUB", "Sleep", True);
await sub_AddQBMethod( "FUNCTION", "Space", False);
await sub_AddQBMethod( "FUNCTION", "String", False);
await sub_AddQBMethod( "FUNCTION", "Sqr", False);
await sub_AddQBMethod( "FUNCTION", "Str$", False);
await sub_AddQBMethod( "SUB", "Swap", False);
await sub_AddQBMethod( "FUNCTION", "Tan", False);
await sub_AddQBMethod( "FUNCTION", "Time$", False);
2022-03-30 22:37:36 +00:00
await sub_AddQBMethod( "FUNCTION", "Timer", False);
await sub_AddQBMethod( "FUNCTION", "UBound", False);
await sub_AddQBMethod( "FUNCTION", "UCase$", False);
await sub_AddQBMethod( "FUNCTION", "Val", False);
await sub_AddQBMethod( "FUNCTION", "Varptr", False);
2022-05-03 06:51:26 +00:00
await sub_AddQBMethod( "SUB", "Window", False);
await sub_AddQBMethod( "SUB", "IncludeJS", True);
2022-03-30 22:37:36 +00:00
await sub_AddSystemType( "FETCHRESPONSE", "ok:INTEGER,status:INTEGER,statusText:STRING,text:STRING");
await sub_AddQBMethod( "FUNCTION", "Fetch", True);
await sub_AddQBMethod( "SUB", "Fetch", True);
2022-03-30 22:37:36 +00:00
await sub_AddQBMethod( "FUNCTION", "FromJSON", False);
await sub_AddQBMethod( "FUNCTION", "ToJSON", False);
2022-02-16 17:40:03 +00:00
}
this.compile = async function(src) {
await sub_QBToJS(src, TEXT, '');
2022-02-16 17:40:03 +00:00
var js = '';
for (var i=1; i<= QB.func_UBound(jsLines); i++) {
js += QB.arrayValue(jsLines, [i]).value.text + '\n';
}
return js;
};
this.getWarnings = function() {
var w = [];
for (var i=1; i <= QB.func_UBound(warnings); i++) {
w.push({
line: QB.arrayValue(warnings, [i]).value.line,
text: QB.arrayValue(warnings, [i]).value.text
});
}
return w;
};
return this;
}