From 137145cc85c43a2d939edeb72320bc64abb6e211 Mon Sep 17 00:00:00 2001 From: boxgaming <75969133+boxgaming@users.noreply.github.com> Date: Wed, 30 Mar 2022 17:37:36 -0500 Subject: [PATCH] v0.3.0-beta updates --- codemirror/qb-lang.js | 22 +- dialog/dialog-polyfill.js | 105 --- dialog/dialog-simple.css | 18 - dialog/dialog.css | 81 -- dialog/dialog.js | 435 ---------- gx/gx.js | 7 +- index.html | 225 +++-- play.png | Bin 0 -> 533 bytes qb.js | 251 +++++- qb2js.js | 1727 +++++++++++++++++++------------------ tools/qb2js.bas | 79 +- 11 files changed, 1402 insertions(+), 1548 deletions(-) delete mode 100644 dialog/dialog-polyfill.js delete mode 100644 dialog/dialog-simple.css delete mode 100644 dialog/dialog.css delete mode 100644 dialog/dialog.js create mode 100644 play.png diff --git a/codemirror/qb-lang.js b/codemirror/qb-lang.js index 1804cdc..1cb61f1 100644 --- a/codemirror/qb-lang.js +++ b/codemirror/qb-lang.js @@ -35,13 +35,18 @@ CodeMirror.defineMode("qbjs", function(conf, parserConf) { // TODO: adjust for QB var atomWords = ['true', 'false', 'nothing', 'empty', 'null']; - var builtinFuncsWords = ['_alpha', '_alpha32', '_atan2', '_autodisplay', '_blue', '_blue32', '_copyimage', '_delay', '_dest', '_dest', '_display', '_fontwidth', - '_freeimage', '_green', '_green32', '_height', '_instrrev', '_limit', '_keyclear', '_keydown', '_keyhit', '_loadimage', - '_mousebutton', '_mouseinput', '_mousex', '_mousey', '_newimage', '_pi', '_printstring', '_printwidth', '_putimage', - '_red', '_red32', '_rgb', '_rgba', '_rgb32', '_rgba32', '_round', '_screenexists', '_title', '_trim', '_width', 'abs', - 'asc', 'atn', 'chr', 'circle', 'cls', 'color', 'command', 'cos', 'exp', 'fix', 'input', 'inkey', 'instr', 'int', - 'lbound', 'left', 'lcase', 'len', 'line', 'locate', 'log', 'ltrim', 'mid', 'print', 'pset', 'right', 'rtrim', 'rnd', - 'screen', 'sgn', 'sin', 'sleep', 'sqr', 'str', 'swap', 'tan', 'timer', 'ubound', 'ucase', 'val']; + var builtinFuncsWords = ['_alpha', '_alpha32', '_atan2', '_autodisplay', '_blue', '_blue32', '_continue', '_copyimage', '_delay', '_dest', '_dest', + '_display', '_fontwidth', '_freeimage', '_green', '_green32', '_height', '_instrrev', '_limit', '_keyclear', '_keydown', + '_keyhit', '_loadimage', '_mousebutton', '_mouseinput', '_mousex', '_mousey', '_newimage', '_pi', '_printstring', '_printwidth', + '_putimage', '_red', '_red32', '_resize', '_resizewidth', '_resizeheight', '_rgb', '_rgba', '_rgb32', '_rgba32', '_round', + '_screenexists', '_sndclose', '_sndopen', '_sndplay', '_sndloop', '_sndpause', '_sndstop', '_sndvol', + '_title', '_trim', '_width', 'abs', 'asc', 'atn', 'chr', 'circle', 'cls', 'color', 'command', 'cos', 'cvi', 'cvl', 'exp', + 'fix', 'input', 'inkey', 'instr', 'int', 'lbound', 'left', 'lcase', 'len', 'line', 'locate', 'log', 'ltrim', 'mid', 'mki', 'mkl', + 'print', 'pset', 'right', 'rtrim', 'rnd', 'screen', 'shared', 'sgn', 'sin', 'sleep', 'space', 'sqr', 'str', 'swap', 'tan', + 'timer', 'ubound', 'ucase', 'val', + // QBJS-specific + 'alert', 'confirm', 'domadd', 'domcontainer', 'domcreate', 'domevent','domget', 'domgetimage', 'domremove', 'prompt', + 'storageclear', 'storageget', 'storagekey', 'storagelength', 'storageset', 'storageremove']; var builtinConsts = ['gx_true', 'gx_false', 'gxevent_init', 'gxevent_update', 'gxevent_drawbg', 'gxevent_drawmap', 'gxevent_drawscreen', 'gxevent_mouseinput', 'gxevent_paintbefore', 'gxevent_paintafter', 'gxevent_collision_tile', 'gxevent_collision_entity', @@ -64,7 +69,8 @@ CodeMirror.defineMode("qbjs", function(conf, parserConf) { 'gxscene_follow_entity_center_x', 'gxscene_follow_entity_center_y', 'gxscene_follow_entity_center_x_pos', 'gxscene_follow_entity_center_x_neg', 'gxscene_constrain_none', 'gxscene_constrain_to_map', 'gxfont_default', 'gxfont_default_black', 'gxdevice_keyboard', 'gxdevice_mouse', 'gxdevice_controller', 'gxdevice_button', - 'gxdevice_axis', 'gxdevice_wheel', 'gxtype_entity', 'gxtype_font', 'gx_cr', 'gx_lf', 'gx_crlf']; + 'gxdevice_axis', 'gxdevice_wheel', 'gxtype_entity', 'gxtype_font', 'gx_cr', 'gx_lf', 'gx_crlf', + 'local', 'session']; var builtinObjsWords = ['\\$if', '\\$end if']; diff --git a/dialog/dialog-polyfill.js b/dialog/dialog-polyfill.js deleted file mode 100644 index 527c44c..0000000 --- a/dialog/dialog-polyfill.js +++ /dev/null @@ -1,105 +0,0 @@ -'use strict'; -/** - * Polyfill of dialog - * for Firefox - * - * author Nemo - * - * v1.1 - * Supports: - * show - * hide - * showModal - * cancel(ESC) - */ -{ - -const UA = window.navigator.userAgent; -const browser = { - isFirefox: UA.includes('Firefox'), -}; - -const dlg = document.createElement('dialog'); -let mask = undefined; - -const initMask = () => { - if (mask != undefined) - return; - - mask = document.createElement('div'); - mask.style.display = 'none'; - mask.style.position = 'absolute'; - mask.style.zIndex = 999998; - mask.style.top = 0; - mask.style.left = 0; - mask.style.right = 0; - mask.style.bottom = 0; - mask.style.backgroundColor = 'rgba(0, 0, 0, 0.1)'; - document.body.appendChild(mask); -}; - -// show support -if (!dlg.__proto__.show) { - dlg.__proto__.open = false; - - dlg.__proto__.show = function() { - this.open = true; - - this.style.backgroundColor = 'white'; - this.style.position = 'absolute'; - this.style.zIndex = 999999; - this.style.display = 'table'; - this.style.top = '50%'; - this.style.transform = 'translate(0, -50%)'; - - return this; - }; -} - -// showModal support -if (!dlg.__proto__.showModal) { - initMask(); - - dlg.__proto__.showModal = function() { - mask.style.display = 'block'; - this.show(); - - return this; - }; -} - -// hide support -if (!dlg.__proto__.close) { - initMask(); - - dlg.__proto__.close = function() { - this.open = false; - - mask.style.display = 'none'; - this.style.display = 'none'; - - return this; - } -} - -// cancel(ESC) support -if (dlg.oncancel === void 0) { - const dialogClass = 'dlg-dialog'; - document.addEventListener('keypress', (e) => { - if (e.code !== 'Escape') - return; - - let dlgs = document.querySelectorAll(`.${dialogClass}`); - for (let i = 0; i < dlgs.length; i++) { - let d = dlgs[i]; - if (d.style.display === 'none') - continue; - - if (d.wrapper.cancelable) { - d.close(); - } - } - }); -} - -} diff --git a/dialog/dialog-simple.css b/dialog/dialog-simple.css deleted file mode 100644 index 2fae759..0000000 --- a/dialog/dialog-simple.css +++ /dev/null @@ -1,18 +0,0 @@ -.dlg-dialog { - border: none; - box-shadow: 10px 10px 20px gray; -} - -.dlg-header { - background-color: #555; - color: white; -} - -.dlg-caption { - height: 1.17em; - text-shadow: 1px 1px 1px black; -} -.dlg-close-button::before, -.dlg-close-button::after { - background-color: white; -} diff --git a/dialog/dialog.css b/dialog/dialog.css deleted file mode 100644 index 2f12fd6..0000000 --- a/dialog/dialog.css +++ /dev/null @@ -1,81 +0,0 @@ -.dlg-dialog { - position: fixed; - top: 0; - bottom: 0; - box-sizing: border-box; - min-width: 300px; - max-width: 100%; - padding: 0; - overflow: hidden; - background-color: #ccc; -} - -.dlg-dialog textarea { - background-color: #ccc; - font-family: dosvga; - font-size: 1em; - padding: .25em; - border: 2px solid #333; -} - -.dlg-header { - padding: .5em; - background-color: #999; - border-bottom: 1px solid #333; -} - -.dlg-caption { - font-size: 1em; - margin: 0; - padding-right: 2em; - font-weight: normal; -} - -.dlg-close-button { - position: absolute; - right: .5em; - top: .5em; - width: 1.17em; - height: 1.17em; - cursor: pointer; -} - -.dlg-close-button::before { - transform: rotate(45deg); -} - -.dlg-close-button::after{ - transform: rotate(-45deg); -} - -.dlg-close-button::before, -.dlg-close-button::after { - content: ''; - position: absolute; - height: 1px; - width: 100%; - top: 50%; - left:0; - background-color: black; -} - -.dlg-body { - padding: .5em; -} - -.dlg-content { - padding: .5em; - overflow: auto; -} - -.dlg-button-area { - padding: 0 .5em; - text-align: right; -} - -.dlg-button-area button { - padding: .3em .4em; - margin-left: 1em; - width: 5em; - text-align: center; -} diff --git a/dialog/dialog.js b/dialog/dialog.js deleted file mode 100644 index 42d1830..0000000 --- a/dialog/dialog.js +++ /dev/null @@ -1,435 +0,0 @@ -/** - * class Dialog { - * - * author: nemo - * date: 2017-06-20 - * v: 1.1 - * } - */ -{ -'use strict'; - -class Dialog { - - constructor(opt) { - Object.assign(this.option = { - caption: '', - message: '', - content: undefined, - buttons: Dialog.buttons.NONE, - - resize: 'none', - - cancelable: true, - - showHeader: true, - showClose: true, - showFooter: false, - - // handler - abortHandler: undefined, - cancelHandler: () => { this.close(); }, - ignoreHandler: undefined, - noHandler: undefined, - okHandler: () => { this.close(); }, - retryHandler: undefined, - yesHandler: undefined, - - // events - beforeClosing: () => { return true; }, // set to false to prevent close - closed: undefined, - }, opt); - this.init(); - } - - /** - * START init - */ - init() { - return this - .initLayout() - .initAttributes() - .initContent() - .initEvents(); - } - - initLayout() { - this.dialog = create('dialog', 'dialog'); - this.dialog.style.resize = this.option.resize, - appendTo(this.dialog, document.body); - this.show(); - - this.container = this.dialog; - - this.header = create('header', 'header'); - this.caption = create('h3', 'caption'); - this.closeButton = create('em', 'close-button'); - - this.body = create('div', 'body'); - this.content = create('section', 'content'); - this.buttonArea = create('div', 'button-area'); - - this.footer = create('footer', 'footer'); - - // assembly dom - this.header.appendChild(this.caption); - if (this.option.showClose) - this.header.appendChild(this.closeButton); - if (this.option.showHeader) - this.dialog.appendChild(this.header); - - this.body.appendChild(this.content); - this.body.appendChild(this.buttonArea); - this.assemblyButtons(); - this.dialog.appendChild(this.body); - - if (this.option.showFooter) - this.dialog.appendChild(this.footer); - - return this; - } - - initAttributes() { - this.dialog.wrapper = this; - - this.cancelable = this.option.cancelable; - - return this; - } - - assemblyButtons() { - switch (this.option.buttons) { - case Dialog.buttons.ABORT_RETRY_IGNORE: - new DialogButton(this, Dialog.button.ABORT).assembly(); - new DialogButton(this, Dialog.button.RETRY).assembly().focus(); - new DialogButton(this, Dialog.button.IGNORE).assembly(); - break; - case Dialog.buttons.OK: - new DialogButton(this, Dialog.button.OK).assembly().focus(); - break; - case Dialog.buttons.OK_CANCEL: - new DialogButton(this, Dialog.button.OK).assembly(); - new DialogButton(this, Dialog.button.CANCEL).assembly().focus(); - break; - case Dialog.buttons.RETRY_CANCEL: - new DialogButton(this, Dialog.button.RETRY).assembly().focus(); - new DialogButton(this, Dialog.button.CANCEL).assembly(); - break; - case Dialog.buttons.YES_NO: - new DialogButton(this, Dialog.button.YES).assembly(); - new DialogButton(this, Dialog.button.NO).assembly().focus(); - break; - case Dialog.buttons.YES_NO_CANCEL: - new DialogButton(this, Dialog.button.YES).assembly(); - new DialogButton(this, Dialog.button.NO).assembly(); - new DialogButton(this, Dialog.button.CANCEL).assembly().focus(); - break; - default: - // no button - break; - } - - return this; - } - - appendButton(btn) { - this.buttonArea.appendChild(btn.button); - return this; - } - - removeButton(btn) { - this.buttonArea.removeChild(btn.button); - return this; - } - - initContent() { - this.caption.innerText = this.option.caption; - if (this.option.content == undefined) { - this.content.innerText = this.option.message; - } else { - this.content.innerHTML = this.option.content; - } - - return this; - } - - initEvents() { - this.closeButton.addEventListener('click', () => { - this.close(); - }); - - // prevent esc - this.dialog.addEventListener('cancel', (e) => { - !this.cancelable && e.preventDefault(); - }); - - return this; - } - /** - * END init - */ - - //:~ - - trigger(type) { - switch (type) { - case Dialog.button.ABORT: - callHandler(this.option.abortHandler, this); - break; - case Dialog.button.CANCEL: - callHandler(this.option.cancelHandler, this); - break; - case Dialog.button.IGNORE: - callHandler(this.option.ignoreHandler, this); - break; - case Dialog.button.NO: - callHandler(this.option.noHandler, this); - break; - case Dialog.button.OK: - callHandler(this.option.okHandler, this); - break; - case Dialog.button.RETRY: - callHandler(this.option.retryHandler, this); - break; - case Dialog.button.YES: - callHandler(this.option.yesHandler, this); - break; - default: - console.log(`Unknown type:${type}`); - break; - } - - return this; - } - - beforeClosing(func) { - this.option.beforeClosing = func; - - return this; - } - - closed(func) { - this.dialog.addEventListener('close', func); - - return this; - } - - get cancelable() { - return this.option.cancelable; - } - - set cancelable(value) { - this.option.cancelable = !!value; - } - - show() { - if (this.dialog.open) - return this; - - try { - this.dialog.showModal(); - } catch (e) { - appendTo(this.dialog, document.body); - this.dialog.showModal(); - } - - return this; - } - - hide(dispose = true) { - if (!this.dialog.open) - return this; - - if (typeof this.option.beforeClosing != 'function' || - !!this.option.beforeClosing()) { - this.dialog.close(); - - try { - dispose && document.body.removeChild(this.dialog); - } finally { } - } - - return this; - } - - close(dispose = true) { - return this.hide(dispose); - } - - addClass(className) { - addClass(this.dialog, className); - } - - //:~ - - /** - * START static helper - */ - static alert(message, caption = '') { - return new Dialog({ - caption: `${caption}`, - message: `${message}`, - buttons: Dialog.buttons.OK, - }); - } - - static confirm(message, caption = '', ok, cancel) { - return new Dialog({ - caption: `${caption}`, - message: `${message}`, - buttons: Dialog.buttons.OK_CANCEL, - okHandler: ok, - cancelHandler: cancel, - }); - } - - static template(dom, caption = '') { - return new Dialog({ - caption: `${caption}`, - content: dom.innerHTML, - }); - } - - static templet(dom, caption) { - return template(dom, caption); - } - - static iframe(src, caption = '', width = 'auto', height = 'auto') { - let dlg = new Dialog({ - caption: `${caption}`, - content: ``, - }); - let iframe = dlg.content.childNodes[0]; - iframe.style.width = width; - iframe.style.height = height; - } - /** - * END static helper - */ -} - -class DialogButton { - constructor(dialog, type) { - this.dialog = dialog; - this.type = type; - - this.button = create('button', `btn-${type}`); - this.button.type = 'button'; - this.button.innerText = Dialog.buttonText[type]; - - this.click(() => { - this.dialog.trigger(this.type); - }); - } - - assembly() { - this.dialog.appendButton(this); - - return this; - } - - click(func) { - this.button.addEventListener('click', func); - - return this; - } - - focus() { - window.setTimeout(() => { - this.button.focus(); - }, 1); - - return this; - } -} - -Object.assign(Dialog, { - - buttons: { - ABORT_RETRY_IGNORE: 1, - OK: 2, - OK_CANCEL: 3, - RETRY_CANCEL: 4, - YES_NO: 5, - YES_NO_CANCEL: 6, - }, - - button: { - NONE: 0, - ABORT: 1, - CANCEL: 2, - IGNORE: 3, - NO: 4, - OK: 5, - RETRY: 6, - YES: 7, - }, - - buttonText: [ - undefined, - 'Abort', - 'Cancel', - 'Ignore', - 'NO', - 'OK', - 'Retry', - 'Yes', - ], -}); - -let callHandler = (func, dlg) => { - return typeof func == 'function' ? - func(dlg) : undefined; -} - -let cls = (cls) => { - return `dlg-${cls}`; -} - -let addClass = (dom, className) => { - let c = dom.className; - let add = cls(className); - if (c == '') { - return add; - } else { - return c + ' ' + add; - } -} - -let prependTo = (sub, base) => { - if (base.hasChildNodes()) { - base.insertBefore(sub, base.firstChild); - } else { - base.appendChild(sub); - } -} - -let appendTo = (sub, base) => { - base.appendChild(sub); -} - -let show = (dom, display = 'block') => { - visible(dom, true, display); -} - -let hide = (dom) => { - visible(dom, true); -} - -let visible = (dom, v, display) => { - if (dom == undefined || dom.style == undefined) - return; - else - dom.style.display = v ? display : 'none'; -} - -let create = (name, className) => { - let e = document.createElement(name); - if (typeof className == 'string') - e.className = cls(className); - return e; -} - -// export { Dialog } // ES6 -window['Dialog'] = Dialog; -} diff --git a/gx/gx.js b/gx/gx.js index c26a808..04d6df0 100644 --- a/gx/gx.js +++ b/gx/gx.js @@ -572,6 +572,11 @@ var GX = new function() { // Sound Methods // ---------------------------------------------------------------------------- + function _soundClose (sid) { + _sounds[sid-1].pause(); + _sounds[sid-1] = undefined; + } + function _soundLoad (filename) { var a = new Audio(filename); _sounds.push(a); @@ -613,7 +618,6 @@ var GX = new function() { return _sound_muted; } - // Entity Functions // ----------------------------------------------------------------------------- function _entityCreate (imageFilename, ewidth, height, seqFrames, uid) { @@ -2299,6 +2303,7 @@ var GX = new function() { this.backgroundHeight = _backgroundHeight; this.backgroundClear = _backgroundClear; + this.soundClose = _soundClose; this.soundLoad = _soundLoad; this.soundPlay = _soundPlay; this.soundRepeat = _soundRepeat; diff --git a/index.html b/index.html index 3fb857c..2b72273 100644 --- a/index.html +++ b/index.html @@ -116,16 +116,60 @@ background-color: transparent; color: #ccc; } + #gx-load-screen { + display: none; + text-align: center; + margin: auto; + width: 600px; + height: 360px; + font-size: 24px; + color: #ccc; + border: 1px solid #000; + text-decoration: none; + background-position: center center; + background-image: url('play.png'); + background-repeat: no-repeat; + background-color: #444; + } + #gx-load-screen:hover { + background-color: #555; + } + #gx-load-screen:before { content: ""; } + #gx-load-screen:after { content: ""; } + + #gx-container a, #gx-container a:link, #gx-container a:visited { + color: rgb(69, 118, 147); + } + #gx-container a:hover { + color: rgb(69, 118, 147); + text-decoration: underline; + } + #gx-container a:before { content: ""; } + #gx-container a:after { content: ""; } + + #gx-container, #gx-container table { + font-family: arial, helvetica, sans-serif; + font-size: 14px; + } + + #share-dialog { + background-color:#ddd; + } + #share-dialog textarea { + font-family: dosvga; + font-size: 1em; + background-color: #efefef; + } + #share-dialog a { color: #333; } + #share-dialog a:hover { color: #000; } + - - -
@@ -139,7 +183,9 @@
>
-
+
+   +
Console
Javascript
@@ -153,9 +199,19 @@
- + +
Copy the link below to share your code:
+
+
Launch Mode: + +
+ Close + Test +
@@ -166,6 +222,7 @@ var qbcode = ""; var url = location.href; var sizeMode = "normal"; + var appMode = "ide"; var consoleVisible = false; var currTab = "console"; @@ -179,8 +236,14 @@ qbcode = zin.inflate(atob(nv[1])); break; } + else if (nv[0] == "mode") { + appMode = nv[1]; + } } } + if (appMode == "play") { + document.getElementById("gx-load-screen").style.display = "block"; + } // initialize the code editor var editor = CodeMirror(document.querySelector("#code"), { @@ -209,6 +272,8 @@ var warnCount = 0; async function runProgram() { + document.getElementById("gx-load-screen").style.display = "none"; + if (sizeMode == "max") { slideLeft(); } @@ -219,7 +284,6 @@ var jsCode = await QBCompiler.compile(qbCode); await displayWarnings(); - //displayTypes(); var jsDiv = document.getElementById("js-code"); jsDiv.innerHTML = jsCode; @@ -244,6 +308,8 @@ GX.sceneStop(); } document.getElementById("gx-container").focus(); + + return false; } function stopProgram() { @@ -256,9 +322,26 @@ var b64 = btoa(zout.deflate(editor.getValue())); var baseUrl = location.href.split('?')[0]; + var mode = document.getElementById("share-mode").value; var codeShare = document.getElementById("share-code"); - codeShare.innerHTML = baseUrl + "?qbcode=" + b64; - Dialog.template(document.getElementById("share-dialog"), "Copy the link below to share your code!"); + var url = baseUrl + "?"; + if (mode) { + url += "mode=" + mode + "&"; + } + url += "qbcode=" + b64; + codeShare.value = url; + document.getElementById("share-dialog").showModal(); + codeShare.focus(); + codeShare.select(); + } + + function testShare() { + var url = document.getElementById("share-code").value; + open(url, "_blank"); + } + + function closeDialog() { + document.getElementById("share-dialog").close(); } async function displayWarnings() { @@ -277,7 +360,8 @@ function showConsole() { consoleVisible = !consoleVisible; - window.onresize(); + window.dispatchEvent(new Event('resize')); + //window.onresize(); } function changeTab(tabName) { @@ -315,7 +399,8 @@ sizeMode = "min" document.getElementById("slider-left").style.display = "none"; } - window.onresize(); + //window.onresize(); + window.dispatchEvent(new Event('resize')); } function slideRight() { @@ -327,65 +412,81 @@ sizeMode = "max" document.getElementById("slider-right").style.display = "none"; } - window.onresize(); + //window.onresize(); + window.dispatchEvent(new Event('resize')); } window.onresize = function() { var f = document.getElementById("gx-container"); var jsDiv = document.getElementById("output-container"); - var cmwidth = 600; - if (sizeMode == "min") { - cmwidth = 0; - editor.getWrapperElement().style.display = "none"; - document.getElementById("code").style.borderRight = "0"; - } - else if (sizeMode == "max") { - cmwidth = window.innerWidth - 25; - document.getElementById("game-container").style.display = "none"; - document.getElementById("slider").style.border = "1px solid #666"; - document.getElementById("slider").style.borderLeft = "0"; + if (appMode == "play" || appMode == "auto") { + f.style.left = "0px"; + f.style.top = "0px"; + f.style.width = window.innerWidth; + f.style.height = window.innerHeight; + f.style.border = "0px"; + document.getElementById("code-container").style.display = "none"; + document.getElementById("slider").style.display = "none"; + document.getElementById("show-js-container").style.display = "none"; + document.getElementById("game-container").style.left = "0px"; + document.getElementById("game-container").style.top = "0px"; + jsDiv.style.display = "none"; } else { - editor.getWrapperElement().style.display = "block"; - document.getElementById("game-container").style.display = "block"; - document.getElementById("code").style.borderRight = "1px solid #666"; - document.getElementById("slider").style.border = "0"; - } - - document.getElementById("game-container").style.left = (cmwidth + 20) + "px"; - f.style.width = (window.innerWidth - (cmwidth + 35)) + "px"; - jsDiv.style.width = f.style.width; - - document.getElementById("slider").style.left = (cmwidth + 12) + "px"; - - if (consoleVisible) { // /*document.getElementById("show-js").checked ||*/ warnCount > 0) { - f.style.height = (window.innerHeight - 237) + "px"; - jsDiv.style.display = "block"; - jsDiv.style.top = (window.innerHeight - 227) + "px"; - document.getElementById("toggle-console").innerHTML = "Hide Console"; - if (currTab == "console") { - document.getElementById("warning-container").style.display = "block"; - document.getElementById("js-code").style.display = "none"; + var cmwidth = 600; + if (sizeMode == "min") { + cmwidth = 0; + editor.getWrapperElement().style.display = "none"; + document.getElementById("code").style.borderRight = "0"; + } + else if (sizeMode == "max") { + cmwidth = window.innerWidth - 25; + document.getElementById("game-container").style.display = "none"; + document.getElementById("slider").style.border = "1px solid #666"; + document.getElementById("slider").style.borderLeft = "0"; } else { - document.getElementById("warning-container").style.display = "none"; - document.getElementById("js-code").style.display = "block"; + editor.getWrapperElement().style.display = "block"; + document.getElementById("game-container").style.display = "block"; + document.getElementById("code").style.borderRight = "1px solid #666"; + document.getElementById("slider").style.border = "0"; } - } - else { - f.style.height = (window.innerHeight - 50) + "px"; - jsDiv.style.display = "none"; - document.getElementById("toggle-console").innerHTML = "Show Console"; - } - document.getElementById("show-js-container").style.top = (window.innerHeight - 45) + "px"; - document.getElementById("show-js-container").style.right = "5px"; - - //document.getElementById("js-code").style.display = document.getElementById("show-js").checked ? "block" : "none"; - editor.setSize(cmwidth, window.innerHeight - 50); - document.getElementById("code").style.height = (window.innerHeight - 50) + "px"; - document.getElementById("slider").style.height = (window.innerHeight - 50) + "px"; + document.getElementById("game-container").style.left = (cmwidth + 20) + "px"; + f.style.width = (window.innerWidth - (cmwidth + 35)) + "px"; + jsDiv.style.width = f.style.width; + + document.getElementById("slider").style.left = (cmwidth + 12) + "px"; + + if (consoleVisible) { + f.style.height = (window.innerHeight - 237) + "px"; + jsDiv.style.display = "block"; + jsDiv.style.top = (window.innerHeight - 227) + "px"; + document.getElementById("toggle-console").innerHTML = "Hide Console"; + if (currTab == "console") { + document.getElementById("warning-container").style.display = "block"; + document.getElementById("js-code").style.display = "none"; + } + else { + document.getElementById("warning-container").style.display = "none"; + document.getElementById("js-code").style.display = "block"; + } + } + else { + f.style.height = (window.innerHeight - 50) + "px"; + jsDiv.style.display = "none"; + document.getElementById("toggle-console").innerHTML = "Show Console"; + } + document.getElementById("show-js-container").style.top = (window.innerHeight - 45) + "px"; + document.getElementById("show-js-container").style.right = "5px"; + + editor.setSize(cmwidth, window.innerHeight - 50); + document.getElementById("code").style.height = (window.innerHeight - 50) + "px"; + document.getElementById("slider").style.height = (window.innerHeight - 50) + "px"; + } + //QB.resize(f.style.width.replace("px", ""), f.style.height.replace("px", "")); + QB.resize(f.clientWidth, f.clientHeight); } window.onresize(); @@ -401,6 +502,10 @@ setTimeout(checkButtonState, 100); } checkButtonState(); - + + if (appMode == "auto") { + runProgram(); + } + \ No newline at end of file diff --git a/play.png b/play.png new file mode 100644 index 0000000000000000000000000000000000000000..992f568afca0bf917a18aa4e493b09445d882f1e GIT binary patch literal 533 zcmeAS@N?(olHy`uVBq!ia0vp^4M1$e!3HGPnQb}>q!^2X+?^QKos)S9WS{qRaSW-L z^LFmVyu%7Su5&g2|3Cd^=^Ec%ddfH2p3M6k5~{V}gq_6YRo}{|w9>!if!D(>Q0nSgROie?Pj|<+_H1!yFIhkWD@l_8ymCd7#=>(Ugl# zK>aXC@0NE9FZRs)&%vYMw~SFMcpjf$LH9l;Hi7gOMlD6P8MWu<@&fG#>fTc~`$o0i z_j&Jy5*P~83>>mb@7z*9u}*W-^TP~}dQ1+eiOT+BxTyB>?cMh`>+3vx8ySyCCNjJ~ zbDz(y(!FroZZ5D5PR90)FKl;jUuMAycER*>e{O!u$v0@Qn8?;~uI4>s^zqaCqB#Q9 zfwG4frdvJV-ePqD^~T4shhc}Em8D&_&>nZeW5&t;ucLK6Vvnb%+d literal 0 HcmV?d00001 diff --git a/qb.js b/qb.js index ec424f8..c25f89b 100644 --- a/qb.js +++ b/qb.js @@ -2,6 +2,9 @@ var QB = new function() { // QB constants this.COLUMN_ADVANCE = Symbol("COLUMN_ADVANCE"); this.PREVENT_NEWLINE = Symbol("PREVENT_NEWLINE"); + this.LOCAL = Symbol("LOCAL"); + this.SESSION = Symbol("SESSION"); + var _fgColor = null; var _bgColor = null; @@ -21,7 +24,12 @@ var QB = new function() { var _images = {}; var _activeImage = 0; var _nextImageId = 1000; - var _lastLimitTime = 0; + //var _lastLimitTime = 0; + var _resize = false; + var _resizeWidth = 0; + var _resizeHeight = 0; + var _domElements = []; + var _domEvents = []; // Array handling methods // ---------------------------------------------------- @@ -75,12 +83,19 @@ var QB = new function() { return value; }; - this.import = async function(url) { + + this.resize = function(width, height) { + _resize = true; + _resizeWidth = width; + _resizeHeight = height; + } + + /*this.import = async function(url) { await fetch(url).then(response => response.text()).then((response) => { var f = new Function(response); f(); }); - }; + };*/ // Process control methods // ------------------------------------------- @@ -102,6 +117,7 @@ var QB = new function() { _haltedFlag = false; _nextImageId = 1000; _activeImage = 0; + _domInit(); } this.running = function() { @@ -177,7 +193,7 @@ var QB = new function() { return 8; }; - this.func__FreeImage = function(imageId) { + this.sub__FreeImage = function(imageId) { _images[imageId] = undefined; } @@ -269,7 +285,7 @@ var QB = new function() { this.func__NewImage = function(iwidth, iheight) { var canvas = document.createElement("canvas"); - canvas.id = "gx-canvas"; + canvas.id = "qb-canvas-" + _nextImageId; canvas.width = iwidth; canvas.height = iheight; ctx = canvas.getContext("2d"); @@ -398,6 +414,20 @@ var QB = new function() { return _color(rgb).r; }; + this.func__Resize = function() { + var tmp = _resize; + _resize = false; + return tmp ? -1 : 0; + } + + this.func__ResizeHeight = function() { + return _resizeHeight; + }; + + this.func__ResizeWidth = function() { + return _resizeWidth; + }; + this.func__RGB = function(r, g, b) { return this.func__RGBA(r, g, b); }; @@ -441,7 +471,36 @@ var QB = new function() { this.func__ScreenExists = function() { return true; - } + }; + + this.sub__SndClose = function(sid) { + GX.soundClose(sid); + }; + + this.func__SndOpen = function(filename) { + return GX.soundLoad(filename); + }; + + this.sub__SndPlay = function(sid) { + GX.soundPlay(sid); + }; + + this.sub__SndLoop = function(sid) { + GX.soundRepeat(sid); + }; + + this.sub__SndPause = function(sid) { + GX.soundPause(sid); + }; + + this.sub__SndStop = function(sid) { + GX.soundStop(sid); + }; + + this.sub__SndVol = function(sid, v) { + GX.soundVolumne(sid, v); + }; + this.sub__Title = function(title) { document.title = title; @@ -487,11 +546,15 @@ var QB = new function() { if (bgColor != undefined) { color = _color(bgColor); } - // TODO: parameter variants + ctx = _images[_activeImage].ctx; ctx.beginPath(); ctx.fillStyle = color.rgba(); ctx.fillRect(0, 0, QB.func__Width() , QB.func__Height()); + + // reset the text position + _locX = 0; + _locY = 0; }; function _color(c) { @@ -521,6 +584,24 @@ var QB = new function() { return Math.cos(value); }; + this.func_Cvi = function(numString) { + var result = 0; + numString = numString.split("").reverse().join(""); + for (let i=1;i>=0;i--) { + result+=numString.charCodeAt(1-i)<<(8*i); + } + return result; + } + + this.func_Cvl = function(numString) { + var result = 0; + numString = numString.split("").reverse().join(""); + for (let i=3;i>=0;i--) { + result+=numString.charCodeAt(3-i)<<(8*i); + } + return result; + } + this.func_Exp = function(value) { return Math.exp(value); }; @@ -749,6 +830,22 @@ var QB = new function() { } }; + this.func_Mki = function(num) { + var ascii = ""; + for (var i=1; i >= 0; i--) { + ascii += String.fromCharCode((num>>(8*i))&255); + } + return ascii.split("").reverse().join(""); + }; + + this.func_Mkl = function(num) { + var ascii = ""; + for (var i=3; i >= 0; i--) { + ascii += String.fromCharCode((num>>(8*i))&255); + } + return ascii.split("").reverse().join(""); + }; + this.sub_Print = async function(args) { // Print called with no arguments if (args == undefined || args == null || args.length < 1) { @@ -892,6 +989,7 @@ var QB = new function() { var img = _images[mode]; if (img && img.canvas) { GX.sceneCreate(img.canvas.width, img.canvas.height); + this.sub__PutImage(undefined, undefined, undefined, undefined, undefined, undefined, mode); } } _images[0] = { canvas: GX.canvas(), ctx: GX.ctx(), lastX: 0, lastY: 0 }; @@ -915,6 +1013,14 @@ var QB = new function() { else { return 0; } }; + this.func_Space = function(ccount) { + return QB.func_String(ccount, " "); + } + + this.func_String = function(ccount, s) { + return "".padStart(ccount, s); + }; + this.func_Sin = function(value) { return Math.sin(value); }; @@ -1000,6 +1106,137 @@ var QB = new function() { this.func_ToJSON = function(a) { return JSON.stringify(a); + }; + + this.sub_Alert = function(text) { + alert(text); + } + + this.func_Confirm = function(text) { + return confirm(text) ? -1 : 0; + } + + this.sub_DomAdd = function(e, parent, beforeElement) { + if (typeof e == "string") { + e = document.getElementById(e); + } + + if (parent == undefined || parent == "") { + parent = QB.func_DomContainer(); + } + else if (typeof parent == "string") { + parent = document.getElementById(parent); + } + + if (beforeElement == undefined || beforeElement == "") { + beforeElement = null; + } + else if (typeof beforeElement == "string") { + beforeElement = document.getElementById(beforeElement); + } + + parent.insertBefore(e, beforeElement); + }; + + this.func_DomCreate = function(etype, parent, content, eid, beforeElement) { + var e = document.createElement(etype); + if (eid != undefined && eid != "") { + e.id = eid; + } + e.className = "qbjs"; + + if (content != undefined) { + if (e.value != undefined) { + e.value = content; + } + if (e.innerHTML != undefined) { + e.innerHTML = content; + } + } + + _domElements.push(e); + QB.sub_DomAdd(e, parent, beforeElement); + return e; + }; + + this.sub_DomCreate = function(etype, parent, content, eid, beforeElement) { + this.func_DomCreate(etype, parent, content, eid, beforeElement); + }; + + this.sub_DomEvent = function(target, eventType, callbackFn) { + if (typeof target == "string") { + target = document.getElementById(target); + } + target.addEventListener(eventType, callbackFn); + _domEvents.push({ target: target, eventType: eventType, callbackFn: callbackFn}); + }; + + this.func_DomContainer = function() { + return document.getElementById("gx-container"); + } + + this.func_DomGet = function(eid) { + return document.getElementById(eid); + }; + + this.func_DomGetImage = function(imageId) { + return _images[imageId].canvas; + }; + + this.sub_DomRemove = function(e) { + if (typeof e == "string") { + e = document.getElementById(e); + } + if (e != undefined && e != null) { + e.remove(); + } + } + + this.func_Prompt = function(text, defaultValue) { + return prompt(text, defaultValue); + } + + function _storage(stype) { + return (stype == QB.SESSION) ? sessionStorage : localStorage; + } + + this.sub_StorageClear = function(stype) { + _storage(stype).clear(); + } + + this.func_StorageGet = function(key, stype) { + return _storage(stype).getItem(key); + } + + this.func_StorageKey = function(idx, stype) { + return _storage(stype).key(idx); + } + + this.func_StorageLength = function(stype) { + return _storage(stype).length; + } + + this.sub_StorageSet = function(key, value, stype) { + _storage(stype).setItem(key, value); + } + + this.sub_StorageRemove = function(key, stype) { + _storage(stype).removeItem(key); + } + + function _domInit() { + //var elements = document.getElementsByClassName("qbjs"); + //for (var i=0; i < elements.length; i++) { + // elements[i].remove(); + //} + var e = null; + while (e = _domElements.pop()) { + e.remove(); + } + + while (e = _domEvents.pop()) { + e.target.removeEventListener(e.eventType, e.callbackFn); + } } function _addInkeyPress(e) { diff --git a/qb2js.js b/qb2js.js index 8c2b002..4320859 100644 --- a/qb2js.js +++ b/qb2js.js @@ -23,7 +23,7 @@ async function _QBCompiler() { var currentMethod = ''; // STRING var programMethods = 0; // INTEGER if (QB.func_Command() != "" ) { - await sub_QBToJS(QB.func_Command(), FILE); + await sub_QBToJS( QB.func_Command(), FILE); await sub_PrintJS(); QB.halt(); return; } @@ -41,73 +41,73 @@ if (QB.halted()) { return; } currentMethod = ""; programMethods = 0; if ( sourceType == FILE) { - await sub_ReadLinesFromFile( source); + await sub_ReadLinesFromFile( source); } else { - await sub_ReadLinesFromText( source); + await sub_ReadLinesFromText( source); } await sub_FindMethods(); - programMethods = (QB.func_UBound( methods)); + programMethods = (QB.func_UBound( methods)); await sub_InitGX(); await sub_InitQBMethods(); var selfConvert = 0; // INTEGER var isGX = 0; // INTEGER isGX = False; if ( sourceType == FILE) { - selfConvert = (await func_EndsWith( source, "qb2js.bas")); + selfConvert = (await func_EndsWith( source, "qb2js.bas")); } if ( selfConvert) { - await sub_AddJSLine( 0, "async function _QBCompiler() {"); + await sub_AddJSLine( 0, "async function _QBCompiler() {"); } else if ( sourceType == FILE) { - await sub_AddJSLine( 0, "async function init() {"); + await sub_AddJSLine( 0, "async function init() {"); } if (! selfConvert) { - await sub_AddJSLine( 0, "QB.start();"); + await sub_AddJSLine( 0, "QB.start();"); } if (! selfConvert) { var mtest = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; // METHOD - if ((await func_FindMethod("GXOnGameEvent" , mtest, "SUB")) ) { - await sub_AddJSLine( 0, " await GX.registerGameEvents(sub_GXOnGameEvent);"); + if ((await func_FindMethod( "GXOnGameEvent", mtest, "SUB")) ) { + await sub_AddJSLine( 0, " await GX.registerGameEvents(sub_GXOnGameEvent);"); isGX = True; } else { - await sub_AddJSLine( 0, " await GX.registerGameEvents(function(e){});"); - await sub_AddJSLine( 0, " QB.sub_Screen(0);"); + await sub_AddJSLine( 0, " await GX.registerGameEvents(function(e){});"); + await sub_AddJSLine( 0, " QB.sub_Screen(0);"); } } - await sub_AddJSLine( 0, ""); - await sub_ConvertLines( 1, await func_MainEnd(), ""); + await sub_AddJSLine( 0, ""); + await sub_ConvertLines( 1, await func_MainEnd(), ""); if (! selfConvert && ! isGX) { - await sub_AddJSLine( 0, "QB.end();"); + await sub_AddJSLine( 0, "QB.end();"); } await sub_ConvertMethods(); if ( selfConvert) { - await sub_AddJSLine( 0, "this.compile = async function(src) {"); - await sub_AddJSLine( 0, " await sub_QBToJS(src, TEXT);"); - await sub_AddJSLine( 0, " var js = '';"); - await sub_AddJSLine( 0, " for (var i=1; i<= QB.func_UBound(jsLines); i++) {"); - 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, "}"); + await sub_AddJSLine( 0, "this.compile = async function(src) {"); + await sub_AddJSLine( 0, " await sub_QBToJS(src, TEXT);"); + await sub_AddJSLine( 0, " var js = '';"); + await sub_AddJSLine( 0, " for (var i=1; i<= QB.func_UBound(jsLines); i++) {"); + 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 ( sourceType == FILE) { - await sub_AddJSLine( 0, "};"); + await sub_AddJSLine( 0, "};"); } } async function sub_PrintJS() { if (QB.halted()) { return; } var i = 0; // INTEGER - for ( i= 1; i <= (QB.func_UBound( jsLines)); i= i + 1) { if (QB.halted()) { return; } + for ( i= 1; i <= (QB.func_UBound( jsLines)); i= i + 1) { if (QB.halted()) { return; } await QB.sub_Print([QB.arrayValue(jsLines, [ i]).value .text]); } } @@ -132,25 +132,25 @@ if (QB.halted()) { return; } indent = 0; tempIndent = 0; var l = ''; // STRING - l = (QB.func__Trim(QB.arrayValue(lines, [ i]).value .text)); + l = (QB.func__Trim( QB.arrayValue(lines, [ i]).value .text)); var parts = QB.initArray([{l:1,u:0}], ''); // STRING var c = 0; // INTEGER - c = (await func_SLSplit( l, parts , True)); + c = (await func_SLSplit( l, parts, True)); var js = ''; // STRING js = ""; var first = ''; // STRING - first = (QB.func_UCase(QB.arrayValue(parts, [ 1]).value)); + first = (QB.func_UCase( QB.arrayValue(parts, [ 1]).value)); if ( jsMode == True) { if ( first == "$END" ) { jsMode = False; - await sub_AddJSLine( 0, "//-------- END JS native code block --------"); + await sub_AddJSLine( 0, "//-------- END JS native code block --------"); } else { - await sub_AddJSLine( i, QB.arrayValue(lines, [ i]).value .text); + await sub_AddJSLine( i, QB.arrayValue(lines, [ i]).value .text); } } else if ( typeMode == True) { if ( first == "END" ) { var second = ''; // STRING - second = (QB.func_UCase(QB.arrayValue(parts, [ 2]).value)); + second = (QB.func_UCase( QB.arrayValue(parts, [ 2]).value)); if ( second == "TYPE" ) { typeMode = False; } @@ -158,21 +158,21 @@ if (QB.halted()) { return; } var tvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE tvar.typeId = currType; tvar.name = QB.arrayValue(parts, [ 1]).value; - tvar.type = (QB.func_UCase(QB.arrayValue(parts, [ 3]).value)); + tvar.type = (QB.func_UCase( QB.arrayValue(parts, [ 3]).value)); if ( tvar.type == "_UNSIGNED" ) { - tvar.type = tvar.type +" " +(QB.func_UCase(QB.arrayValue(parts, [ 4]).value)); + tvar.type = tvar.type +" " +(QB.func_UCase( QB.arrayValue(parts, [ 4]).value)); } - await sub_AddVariable( tvar, typeVars); + await sub_AddVariable( tvar, typeVars); } } else { if ( first == "CONST" ) { - js = "const " +QB.arrayValue(parts, [ 2]).value +" = " +(await func_ConvertExpression((await func_Join(parts , 4, -1, " ")))) +";"; - await sub_AddConst(QB.arrayValue(parts, [ 2]).value); + js = "const " +QB.arrayValue(parts, [ 2]).value +" = " +(await func_ConvertExpression( (await func_Join( parts, 4, -1, " ")))) +";"; + await sub_AddConst( QB.arrayValue(parts, [ 2]).value); } else if ( first == "DIM" || first == "REDIM" || first == "STATIC" ) { - js = (await func_DeclareVar(parts)); + js = (await func_DeclareVar( parts)); } else if ( first == "SELECT" ) { caseVar = await func_GenJSVar(); - js = "var " + caseVar +" = " +(await func_ConvertExpression((await func_Join(parts , 3, -1, " ")))) +";" + GX.CRLF; + js = "var " + caseVar +" = " +(await func_ConvertExpression( (await func_Join( parts, 3, -1, " ")))) +";" + GX.CRLF; js = js +"switch (" + caseVar +") {"; indent = 1; caseCount = 0; @@ -180,20 +180,20 @@ if (QB.halted()) { return; } if ( caseCount > 0) { js = "break;" + GX.LF; } - if ((QB.func_UCase(QB.arrayValue(parts, [ 2]).value)) == "ELSE" ) { + if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "ELSE" ) { js = js +"default:"; - } else if ((QB.func_UCase(QB.arrayValue(parts, [ 2]).value)) == "IS" ) { - js = js +"case " + caseVar +" " +(await func_ConvertExpression((await func_Join(parts , 3, -1, " ")))) +":"; + } else if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "IS" ) { + js = js +"case " + caseVar +" " +(await func_ConvertExpression( (await func_Join( parts, 3, -1, " ")))) +":"; } else { var caseParts = QB.initArray([{l:1,u:0}], ''); // STRING var cscount = 0; // INTEGER - cscount = (await func_ListSplit((await func_Join(parts , 2, -1, " ")) , caseParts)); + cscount = (await func_ListSplit( (await func_Join( parts, 2, -1, " ")), caseParts)); var ci = 0; // INTEGER for ( ci= 1; ci <= cscount; ci= ci + 1) { if (QB.halted()) { return; } if ( ci > 1) { js = js + GX.CRLF; } - js = js +"case " +(await func_ConvertExpression(QB.arrayValue(caseParts, [ ci]).value)) +":"; + js = js +"case " +(await func_ConvertExpression( QB.arrayValue(caseParts, [ ci]).value)) +":"; } } caseCount = caseCount + 1; @@ -207,25 +207,25 @@ if (QB.halted()) { return; } fcond = " <= "; stepIdx = 0; var fi = 0; // INTEGER - for ( fi= 2; fi <= (QB.func_UBound( parts)); fi= fi + 1) { if (QB.halted()) { return; } + for ( fi= 2; fi <= (QB.func_UBound( parts)); fi= fi + 1) { if (QB.halted()) { return; } var fword = ''; // STRING - fword = (QB.func_UCase(QB.arrayValue(parts, [ fi]).value)); + fword = (QB.func_UCase( QB.arrayValue(parts, [ fi]).value)); if ( fword == "=" ) { eqIdx = fi; } else if ( fword == "TO" ) { toIdx = fi; } else if ( fword == "STEP" ) { stepIdx = fi; - fstep = (await func_ConvertExpression((await func_Join(parts , fi + 1, -1, " ")))); + fstep = (await func_ConvertExpression( (await func_Join( parts, fi + 1, -1, " ")))); } } var fvar = ''; // STRING - fvar = (await func_ConvertExpression((await func_Join(parts , 2, eqIdx - 1, " ")))); + fvar = (await func_ConvertExpression( (await func_Join( parts, 2, eqIdx - 1, " ")))); var sval = ''; // STRING - sval = (await func_ConvertExpression((await func_Join(parts , eqIdx + 1, toIdx - 1, " ")))); + sval = (await func_ConvertExpression( (await func_Join( parts, eqIdx + 1, toIdx - 1, " ")))); var uval = ''; // STRING - uval = (await func_ConvertExpression((await func_Join(parts , toIdx + 1, stepIdx - 1, " ")))); - if ((QB.func_Left((QB.func__Trim( fstep)) , 1)) == "-" ) { + uval = (await func_ConvertExpression( (await func_Join( parts, toIdx + 1, stepIdx - 1, " ")))); + if ((QB.func_Left( (QB.func__Trim( fstep)), 1)) == "-" ) { fcond = " >= "; } js = "for (" + fvar +"=" + sval +"; " + fvar + fcond + uval +"; " + fvar +"=" + fvar +" + " + fstep +") {"; @@ -233,15 +233,15 @@ if (QB.halted()) { return; } indent = 1; } else if ( first == "IF" ) { var thenIndex = 0; // INTEGER - 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" ) { + 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" ) { break; } } - js = "if (" +(await func_ConvertExpression((await func_Join(parts , 2, thenIndex - 1, " ")))) +") {"; + js = "if (" +(await func_ConvertExpression( (await func_Join( parts, 2, thenIndex - 1, " ")))) +") {"; indent = 1; } else if ( first == "ELSEIF" ) { - js = "} else if (" +(await func_ConvertExpression((await func_Join(parts , 2, (QB.func_UBound( parts)) - 1, " ")))) +") {"; + js = "} else if (" +(await func_ConvertExpression( (await func_Join( parts, 2, (QB.func_UBound( parts)) - 1, " ")))) +") {"; tempIndent = -1; } else if ( first == "ELSE" ) { js = "} else {"; @@ -250,10 +250,10 @@ if (QB.halted()) { return; } js = js +"}"; indent = -1; } else if ( first == "END" ) { - if ((QB.func_UBound( parts)) == 1) { + if ((QB.func_UBound( parts)) == 1) { js = "QB.halt(); return;"; } else { - if ((QB.func_UCase(QB.arrayValue(parts, [ 2]).value)) == "SELECT" ) { + if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "SELECT" ) { js = "break;"; } js = js +"}"; @@ -262,19 +262,19 @@ if (QB.halted()) { return; } } else if ( first == "SYSTEM" ) { js = "QB.halt(); return;"; } else if ( first == "$IF" ) { - if ((QB.func_UBound( parts)) == 2) { - if ((QB.func_UCase(QB.arrayValue(parts, [ 2]).value)) == "JS" || (QB.func_UCase(QB.arrayValue(parts, [ 2]).value)) == "JAVASCRIPT" ) { + if ((QB.func_UBound( parts)) == 2) { + if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "JS" || (QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "JAVASCRIPT" ) { jsMode = True; js = "//-------- BEGIN JS native code block --------"; } } } else if ( first == "DO" ) { loopLevel = loopLevel + 1; - 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, " ")))) +") {"; + 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, " ")))) +") {"; } else { - js = "while (!(" +(await func_ConvertExpression((await func_Join(parts , 3, -1, " ")))) +")) {"; + js = "while (!(" +(await func_ConvertExpression( (await func_Join( parts, 3, -1, " ")))) +")) {"; } QB.arrayValue(loopMode, [ loopLevel]).value = 1; } else { @@ -285,7 +285,7 @@ if (QB.halted()) { return; } js = js +" if (QB.halted()) { return; }"; } else if ( first == "WHILE" ) { loopLevel = loopLevel + 1; - js = "while (" +(await func_ConvertExpression((await func_Join(parts , 2, -1, " ")))) +") {"; + js = "while (" +(await func_ConvertExpression( (await func_Join( parts, 2, -1, " ")))) +") {"; indent = 1; js = js +" if (QB.halted()) { return; }"; } else if ( first == "WEND" ) { @@ -297,22 +297,22 @@ if (QB.halted()) { return; } js = "}"; } else { js = "} while (("; - if ((QB.func_UBound( parts)) < 2) { + if ((QB.func_UBound( parts)) < 2) { js = js +"1));"; } else { - if ((QB.func_UCase(QB.arrayValue(parts, [ 2]).value)) == "UNTIL" ) { + if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "UNTIL" ) { js = "} while (!("; } - js = js +(await func_ConvertExpression((await func_Join(parts , 3, (QB.func_UBound( parts)) , " ")))) +"))"; + js = js +(await func_ConvertExpression( (await func_Join( parts, 3, (QB.func_UBound( parts)), " ")))) +"))"; } } loopLevel = loopLevel - 1; indent = -1; } else if ( first == "_CONTINUE" ) { js = "continue;"; - } else if ((QB.func_UCase( l)) == "EXIT FUNCTION" ) { + } else if ((QB.func_UCase( l)) == "EXIT FUNCTION" ) { js = "return " + functionName +";"; - } else if ((QB.func_UCase( l)) == "EXIT SUB" ) { + } else if ((QB.func_UCase( l)) == "EXIT SUB" ) { js = "return;"; } else if ( first == "EXIT" ) { js = "break;"; @@ -320,59 +320,63 @@ if (QB.halted()) { return; } typeMode = True; var qbtype = {line:0,name:'',argc:0,args:''}; // QBTYPE qbtype.line = i; - qbtype.name = (QB.func_UCase(QB.arrayValue(parts, [ 2]).value)); - await sub_AddType( qbtype); - currType = (QB.func_UBound( types)); + qbtype.name = (QB.func_UCase( QB.arrayValue(parts, [ 2]).value)); + await sub_AddType( qbtype); + currType = (QB.func_UBound( types)); } else if ( first == "CALL" ) { var subline = ''; // STRING - subline = (QB.func__Trim((await func_Join(parts , 2, -1, " ")))); + subline = (QB.func__Trim( (await func_Join( parts, 2, -1, " ")))); var subend = 0; // INTEGER - subend = (QB.func_InStr( subline, "(")); + subend = (QB.func_InStr( subline, "(")); var subname = ''; // STRING if ( subend == 0) { subname = subline; } else { - subname = (QB.func_Left( subline, subend - 1)); + subname = (QB.func_Left( subline, subend - 1)); } - if ((await func_FindMethod( subname, m, "SUB")) ) { + if ((await func_FindMethod( subname, m, "SUB")) ) { var subargs = ''; // STRING - 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)); + 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)); } else { - await sub_AddWarning( i, "Missing Sub [" + subname +"], ignoring Call command"); + await sub_AddWarning( i, "Missing Sub [" + subname +"], ignoring Call command"); } } else if ( c > 2) { var assignment = 0; // INTEGER assignment = 0; var j = 0; // INTEGER - for ( j= 1; j <= (QB.func_UBound( parts)); j= j + 1) { if (QB.halted()) { return; } + for ( j= 1; j <= (QB.func_UBound( parts)); j= j + 1) { if (QB.halted()) { return; } if (QB.arrayValue(parts, [ j]).value == "=" ) { assignment = j; break; } } if ( assignment > 0) { - js = (await func_RemoveSuffix((await func_ConvertExpression((await func_Join(parts , 1, assignment - 1, " ")))))) +" = " +(await func_ConvertExpression((await func_Join(parts , assignment + 1, -1, " ")))) +";"; + js = (await func_RemoveSuffix( (await func_ConvertExpression( (await func_Join( parts, 1, assignment - 1, " ")))))) +" = " +(await func_ConvertExpression( (await func_Join( parts, assignment + 1, -1, " ")))) +";"; } else { - if ((await func_FindMethod(QB.arrayValue(parts, [ 1]).value , m, "SUB")) ) { - js = (await func_ConvertSub( m, (await func_Join(parts , 2, -1, " ")))); + if ((await func_FindMethod( QB.arrayValue(parts, [ 1]).value, m, "SUB")) ) { + js = (await func_ConvertSub( m, (await func_Join( parts, 2, -1, " ")))); } else { js = "// " + l; - await sub_AddWarning( i, "Missing/unsupported sub or syntax error"); + await sub_AddWarning( i, "Missing/unsupported sub or syntax error"); } } } else { - if ((await func_FindMethod(QB.arrayValue(parts, [ 1]).value , m, "SUB")) ) { - js = (await func_ConvertSub( m, (await func_Join(parts , 2, -1, " ")))); + if ((await func_FindMethod( QB.arrayValue(parts, [ 1]).value, m, "SUB")) ) { + js = (await func_ConvertSub( m, (await func_Join( parts, 2, -1, " ")))); } else { js = "// " + l; - await sub_AddWarning( i, "Missing/unsupported sub or syntax error"); + await sub_AddWarning( i, "Missing/unsupported sub or syntax error"); } } if (( indent < 0) ) { totalIndent = totalIndent + indent; } - await sub_AddJSLine( i, (GXSTR.lPad("" , " " , ( totalIndent + tempIndent) * 3)) + js); + await sub_AddJSLine( i, (GXSTR.lPad( "", " ", ( totalIndent + tempIndent) * 3)) + js); if (( indent > 0) ) { totalIndent = totalIndent + indent; } @@ -386,33 +390,33 @@ var ConvertSub = null; if ( m.name == "Line" ) { var parts = QB.initArray([{l:1,u:0}], ''); // STRING var plen = 0; // INTEGER - plen = (await func_SLSplit( args, parts , False)); + plen = (await func_SLSplit( args, parts, False)); if ( plen > 0) { - if ((QB.func_UCase(QB.arrayValue(parts, [ 1]).value)) == "INPUT" ) { + if ((QB.func_UCase( QB.arrayValue(parts, [ 1]).value)) == "INPUT" ) { m.name = "Line Input"; m.jsname = "QB.sub_LineInput"; - args = (await func_Join(parts , 2, -1, " ")); + args = (await func_Join( parts, 2, -1, " ")); } } } if ( m.name == "Line" ) { - js = (await func_CallMethod( m)) +"(" +(await func_ConvertLine( args)) +");"; + js = (await func_CallMethod( m)) +"(" +(await func_ConvertLine( args)) +");"; } else if ( m.name == "PSet" || m.name == "Circle" ) { - js = (await func_CallMethod( m)) +"(" +(await func_ConvertPSet( args)) +");"; + js = (await func_CallMethod( m)) +"(" +(await func_ConvertPSet( args)) +");"; } else if ( m.name == "_PrintString" ) { - js = (await func_CallMethod( m)) +"(" +(await func_ConvertPrintString( args)) +");"; + js = (await func_CallMethod( m)) +"(" +(await func_ConvertPrintString( args)) +");"; } else if ( m.name == "Print" ) { - js = (await func_CallMethod( m)) +"(" +(await func_ConvertPrint( args)) +");"; + js = (await func_CallMethod( m)) +"(" +(await func_ConvertPrint( args)) +");"; } else if ( m.name == "Input" || m.name == "Line Input" ) { - js = (await func_ConvertInput( m, args)); + js = (await func_ConvertInput( m, args)); } else if ( m.name == "Swap" ) { - js = (await func_ConvertSwap( m, args)); + js = (await func_ConvertSwap( m, args)); } else if ( m.name == "Cls" ) { - js = (await func_CallMethod( m)) +"(" +(await func_ConvertCls( args)) +");"; + js = (await func_CallMethod( m)) +"(" +(await func_ConvertCls( args)) +");"; } else if ( m.name == "_PutImage" ) { - js = (await func_CallMethod( m)) +"(" +(await func_ConvertPutImage( args)) +");"; + js = (await func_CallMethod( m)) +"(" +(await func_ConvertPutImage( args)) +");"; } else { - js = (await func_CallMethod( m)) +"(" +(await func_ConvertExpression( args)) +");"; + js = (await func_CallMethod( m)) +"(" +(await func_ConvertMethodParams( args)) +");"; } ConvertSub = js; return ConvertSub; @@ -427,49 +431,49 @@ var ConvertLine = null; var estep = ''; // STRING sstep = "false"; estep = "false"; - idx = (await func_FindParamChar( args, ",")); + 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)); + firstParam = (QB.func_Left( args, idx - 1)); + theRest = (QB.func_Right( args, (QB.func_Len( args)) - idx)); } - idx = (await func_FindParamChar( firstParam, "-")); + 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)); + startCord = (QB.func_Left( firstParam, idx - 1)); + endCord = (QB.func_Right( firstParam, (QB.func_Len( firstParam)) - idx)); } - if ((QB.func_UCase((QB.func__Trim((QB.func_Left( startCord, 4)))))) == "STEP" ) { + if ((QB.func_UCase( (QB.func__Trim( (QB.func_Left( startCord, 4)))))) == "STEP" ) { sstep = "true"; } - if ((QB.func_UCase((QB.func__Trim((QB.func_Left( endCord, 4)))))) == "STEP" ) { + if ((QB.func_UCase( (QB.func__Trim( (QB.func_Left( endCord, 4)))))) == "STEP" ) { estep = "true"; } - 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)) == "") ) { + 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)); - theRest = (await func_ConvertExpression( theRest)); - theRest = (GXSTR.replace( theRest, " BF" , " " +(QB.func_Chr( 34)) +"BF" +(QB.func_Chr( 34)))); - theRest = (GXSTR.replace( theRest, " bf" , " " +(QB.func_Chr( 34)) +"BF" +(QB.func_Chr( 34)))); - theRest = (GXSTR.replace( theRest, " bF" , " " +(QB.func_Chr( 34)) +"BF" +(QB.func_Chr( 34)))); - theRest = (GXSTR.replace( theRest, " Bf" , " " +(QB.func_Chr( 34)) +"BF" +(QB.func_Chr( 34)))); - theRest = (GXSTR.replace( theRest, " B" , " " +(QB.func_Chr( 34)) +"B" +(QB.func_Chr( 34)))); - theRest = (GXSTR.replace( theRest, " b" , " " +(QB.func_Chr( 34)) +"B" +(QB.func_Chr( 34)))); + 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 = (GXSTR.replace( theRest, " BF", " " +(QB.func_Chr( 34)) +"BF" +(QB.func_Chr( 34)))); + theRest = (GXSTR.replace( theRest, " bf", " " +(QB.func_Chr( 34)) +"BF" +(QB.func_Chr( 34)))); + theRest = (GXSTR.replace( theRest, " bF", " " +(QB.func_Chr( 34)) +"BF" +(QB.func_Chr( 34)))); + theRest = (GXSTR.replace( theRest, " Bf", " " +(QB.func_Chr( 34)) +"BF" +(QB.func_Chr( 34)))); + theRest = (GXSTR.replace( theRest, " B", " " +(QB.func_Chr( 34)) +"B" +(QB.func_Chr( 34)))); + theRest = (GXSTR.replace( theRest, " b", " " +(QB.func_Chr( 34)) +"B" +(QB.func_Chr( 34)))); ConvertLine = sstep +", " + startCord +", " + estep +", " + endCord +", " + theRest; return ConvertLine; } @@ -483,32 +487,32 @@ var sourceImage = ''; // STRING var destImage = ''; // STRING var destCoord = ''; // STRING var doSmooth = ''; // STRING - startCoord = (await func_ConvertCoordParam("" , True)); - destCoord = (await func_ConvertCoordParam("" , True)); + startCoord = (await func_ConvertCoordParam( "", True)); + destCoord = (await func_ConvertCoordParam( "", True)); sourceImage = "undefined"; destImage = "undefined"; doSmooth = "false"; - if ((await func_EndsWith((QB.func__Trim((QB.func_UCase( args)))) , "_SMOOTH")) ) { + if ((await func_EndsWith( (QB.func__Trim( (QB.func_UCase( args)))), "_SMOOTH")) ) { doSmooth = "true"; - args = (QB.func_Left((QB.func__Trim( args)) , (QB.func_Len((QB.func__Trim( args)))) - 7)); + args = (QB.func_Left( (QB.func__Trim( args)), (QB.func_Len( (QB.func__Trim( args)))) - 7)); } - argc = (await func_ListSplit( args, parts)); + argc = (await func_ListSplit( args, parts)); if ( argc >= 1) { - startCoord = (await func_ConvertCoordParam(QB.arrayValue(parts, [ 1]).value , True)); + startCoord = (await func_ConvertCoordParam( QB.arrayValue(parts, [ 1]).value, True)); } if ( argc >= 2) { - sourceImage = (await func_ConvertExpression(QB.arrayValue(parts, [ 2]).value)); + sourceImage = (await func_ConvertExpression( QB.arrayValue(parts, [ 2]).value)); } if ( argc >= 3) { - if ((QB.func__Trim(QB.arrayValue(parts, [ 3]).value)) != "" ) { - destImage = (await func_ConvertExpression(QB.arrayValue(parts, [ 3]).value)); + if ((QB.func__Trim( QB.arrayValue(parts, [ 3]).value)) != "" ) { + destImage = (await func_ConvertExpression( QB.arrayValue(parts, [ 3]).value)); } } if ( argc >= 4) { - destCoord = (await func_ConvertCoordParam(QB.arrayValue(parts, [ 4]).value , True)); + destCoord = (await func_ConvertCoordParam( QB.arrayValue(parts, [ 4]).value, True)); } if ( argc >= 5) { - if ((QB.func__Trim((QB.func_UCase(QB.arrayValue(parts, [ 5]).value)))) == "_SMOOTH" ) { + if ((QB.func__Trim( (QB.func_UCase( QB.arrayValue(parts, [ 5]).value)))) == "_SMOOTH" ) { doSmooth = "true"; } } @@ -520,18 +524,18 @@ if (QB.halted()) { return; } var ConvertCls = null; var argc = 0; // INTEGER var parts = QB.initArray([{l:1,u:0}], ''); // STRING - argc = (await func_ListSplit( args, parts)); + argc = (await func_ListSplit( args, parts)); var method = ''; // STRING var bgcolor = ''; // STRING method = "undefined"; bgcolor = "undefined"; if ( argc >= 1) { - if ((QB.func__Trim(QB.arrayValue(parts, [ 1]).value)) != "" ) { - method = (await func_ConvertExpression(QB.arrayValue(parts, [ 1]).value)); + if ((QB.func__Trim( QB.arrayValue(parts, [ 1]).value)) != "" ) { + method = (await func_ConvertExpression( QB.arrayValue(parts, [ 1]).value)); } } if ( argc >= 2) { - bgcolor = (await func_ConvertExpression(QB.arrayValue(parts, [ 2]).value)); + bgcolor = (await func_ConvertExpression( QB.arrayValue(parts, [ 2]).value)); } ConvertCls = method +", " + bgcolor; return ConvertCls; @@ -539,7 +543,7 @@ return ConvertCls; async function func_ConvertCoordParam(param/*STRING*/,hasEndCoord/*INTEGER*/) { if (QB.halted()) { return; } var ConvertCoordParam = null; - if ((QB.func__Trim( param)) == "" ) { + if ((QB.func__Trim( param)) == "" ) { if ( hasEndCoord) { ConvertCoordParam = "false, undefined, undefined, false, undefined, undefined"; } else { @@ -554,35 +558,35 @@ var estep = ''; // STRING var idx = 0; // INTEGER sstep = "false"; estep = "false"; - idx = (await func_FindParamChar( param, "-")); + idx = (await func_FindParamChar( param, "-")); if ( idx == -1) { startCoord = param; endCoord = ""; } else { - startCoord = (QB.func_Left( param, idx - 1)); - endCoord = (QB.func_Right( param, (QB.func_Len( param)) - idx)); + startCoord = (QB.func_Left( param, idx - 1)); + endCoord = (QB.func_Right( param, (QB.func_Len( param)) - idx)); } - if ((QB.func_UCase((QB.func__Trim((QB.func_Left( startCoord, 4)))))) == "STEP" ) { + if ((QB.func_UCase( (QB.func__Trim( (QB.func_Left( startCoord, 4)))))) == "STEP" ) { sstep = "true"; } - if ((QB.func_UCase((QB.func__Trim((QB.func_Left( endCoord, 4)))))) == "STEP" ) { + if ((QB.func_UCase( (QB.func__Trim( (QB.func_Left( endCoord, 4)))))) == "STEP" ) { estep = "true"; } - idx = (QB.func_InStr( startCoord, "(")); - startCoord = (QB.func_Right( startCoord, (QB.func_Len( startCoord)) - idx)); - idx = (QB.func__InStrRev( startCoord, ")")); - startCoord = (QB.func_Left( startCoord, idx - 1)); - startCoord = (await func_ConvertExpression( startCoord)); - if (((QB.func__Trim( startCoord)) == "") ) { + 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) { - 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)) == "") ) { + 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; @@ -600,26 +604,26 @@ var ConvertPSet = null; var idx = 0; // INTEGER var sstep = ''; // STRING sstep = "false"; - idx = (await func_FindParamChar( args, ",")); + 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)); + firstParam = (QB.func_Left( args, idx - 1)); + theRest = (QB.func_Right( args, (QB.func_Len( args)) - idx)); } - if ((QB.func_UCase((QB.func__Trim((QB.func_Left( firstParam, 4)))))) == "STEP" ) { + if ((QB.func_UCase( (QB.func__Trim( (QB.func_Left( firstParam, 4)))))) == "STEP" ) { sstep = "true"; } - idx = (QB.func_InStr( firstParam, "(")); - firstParam = (QB.func_Right( firstParam, (QB.func_Len( firstParam)) - idx)); - idx = (QB.func__InStrRev( firstParam, ")")); - firstParam = (QB.func_Left( firstParam, idx - 1)); - firstParam = (await func_ConvertExpression( firstParam)); - if (((QB.func__Trim( firstParam)) == "") ) { + 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)) == "") ) { firstParam = "undefined, undefined"; } - theRest = (await func_ConvertExpression( theRest)); + theRest = (await func_ConvertExpression( theRest)); ConvertPSet = sstep +", " + firstParam +", " + theRest; return ConvertPSet; } @@ -628,7 +632,7 @@ if (QB.halted()) { return; } var ConvertPrint = null; var pcount = 0; // INTEGER var parts = QB.initArray([{l:1,u:0}], ''); // STRING - pcount = (await func_PrintSplit( args, parts)); + pcount = (await func_PrintSplit( args, parts)); var js = ''; // STRING js = "["; var i = 0; // INTEGER @@ -641,7 +645,7 @@ var ConvertPrint = null; } else if (QB.arrayValue(parts, [ i]).value == ";" ) { js = js +"QB.PREVENT_NEWLINE"; } else { - js = js +(await func_ConvertExpression(QB.arrayValue(parts, [ i]).value)); + js = js +(await func_ConvertExpression( QB.arrayValue(parts, [ i]).value)); } } ConvertPrint = js +"]"; @@ -653,19 +657,19 @@ var ConvertPrintString = null; var firstParam = ''; // STRING var theRest = ''; // STRING var idx = 0; // INTEGER - idx = (await func_FindParamChar( args, ",")); + 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)); + 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)); + 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)); return ConvertPrintString; } async function func_ConvertInput(m/*METHOD*/,args/*STRING*/) { @@ -686,29 +690,29 @@ var ConvertInput = null; prompt = "undefined"; var vcount = 0; // INTEGER var p = ''; // STRING - pcount = (await func_PrintSplit( args, parts)); + pcount = (await func_PrintSplit( args, parts)); var i = 0; // INTEGER for ( i= 1; i <= pcount; i= i + 1) { if (QB.halted()) { return; } - p = (QB.func__Trim(QB.arrayValue(parts, [ i]).value)); + p = (QB.func__Trim( QB.arrayValue(parts, [ i]).value)); if ( p == ";" ) { if ( i == 1) { preventNewline = "true"; } else { addQuestionPrompt = "true"; } - } else if ((await func_StartsWith( p, (QB.func_Chr( 34)))) ) { + } else if ((await func_StartsWith( p, (QB.func_Chr( 34)))) ) { prompt = p; } else if ( p != "," ) { - vcount = (QB.func_UBound( vars)) + 1; + vcount = (QB.func_UBound( vars)) + 1; QB.resizeArray(vars, [{l:1,u:vcount}], '', true); // STRING QB.arrayValue(vars, [ vcount]).value = p; } } vname = await func_GenJSVar(); - js = "var " + vname +" = new Array(" +(QB.func_Str((QB.func_UBound( vars)))) +");" + GX.LF; - js = js +(await func_CallMethod( m)) +"(" + vname +", " + preventNewline +", " + addQuestionPrompt +", " + prompt +");" + GX.LF; - for ( i= 1; i <= (QB.func_UBound( vars)); i= i + 1) { if (QB.halted()) { return; } - js = js +(await func_ConvertExpression(QB.arrayValue(vars, [ i]).value)) +" = " + vname +"[" +(QB.func_Str( i - 1)) +"];" + GX.LF; + js = "var " + vname +" = new Array(" +(QB.func_Str( (QB.func_UBound( vars)))) +");" + GX.LF; + js = js +(await func_CallMethod( m)) +"(" + vname +", " + preventNewline +", " + addQuestionPrompt +", " + prompt +");" + GX.LF; + for ( i= 1; i <= (QB.func_UBound( vars)); i= i + 1) { if (QB.halted()) { return; } + js = js +(await func_ConvertExpression( QB.arrayValue(vars, [ i]).value)) +" = " + vname +"[" +(QB.func_Str( i - 1)) +"];" + GX.LF; } ConvertInput = js; return ConvertInput; @@ -721,13 +725,13 @@ var ConvertSwap = null; swapArray = await func_GenJSVar(); var swapArgs = QB.initArray([{l:1,u:0}], ''); // STRING var swapCount = 0; // INTEGER - swapCount = (await func_ListSplit( args, swapArgs)); + swapCount = (await func_ListSplit( args, swapArgs)); var var1 = ''; // STRING var var2 = ''; // STRING - var1 = (await func_ConvertExpression(QB.arrayValue(swapArgs, [ 1]).value)); - var2 = (await func_ConvertExpression(QB.arrayValue(swapArgs, [ 2]).value)); + var1 = (await func_ConvertExpression( QB.arrayValue(swapArgs, [ 1]).value)); + var2 = (await func_ConvertExpression( QB.arrayValue(swapArgs, [ 2]).value)); js = "var " + swapArray +" = [" + var1 +"," + var2 +"];" + GX.LF; - js = js +(await func_CallMethod( m)) +"(" + swapArray +");" + GX.LF; + js = js +(await func_CallMethod( m)) +"(" + swapArray +");" + GX.LF; js = js + var1 +" = " + swapArray +"[0];" + GX.LF; js = js + var2 +" = " + swapArray +"[1];"; ConvertSwap = js; @@ -736,7 +740,7 @@ return ConvertSwap; async function func_GenJSVar() { if (QB.halted()) { return; } var GenJSVar = null; - GenJSVar = "___v" +(QB.func__Trim((QB.func_Str((QB.func__Round(QB.func_Rnd() * 10000000)))))); + GenJSVar = "___v" +(QB.func__Trim( (QB.func_Str( (QB.func__Round( QB.func_Rnd() * 10000000)))))); return GenJSVar; } async function func_FindParamChar(s/*STRING*/,char/*STRING*/) { @@ -748,9 +752,9 @@ var FindParamChar = null; var quote = 0; // INTEGER var paren = 0; // INTEGER var i = 0; // INTEGER - 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)) ) { + 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)) ) { quote = ! quote; } else if (! quote && c == "(" ) { paren = paren + 1; @@ -789,34 +793,34 @@ var DeclareVar = null; var preserve = ''; // STRING preserve = "false"; var i = 0; // INTEGER - 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" ) { + 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" ) { asIdx = i; } - if ((QB.func_UCase(QB.arrayValue(parts, [ i]).value)) == "_PRESERVE" ) { + if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "_PRESERVE" ) { preserve = "true"; } - if ((QB.func_UCase(QB.arrayValue(parts, [ i]).value)) == "SHARED" ) { + if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "SHARED" ) { isGlobal = True; } } if ( asIdx == 2 || ( asIdx == 3 && ( isGlobal || preserve == "true")) || ( asIdx == 4 && isGlobal && preserve == "true") ) { - bvar.type = (QB.func_UCase(QB.arrayValue(parts, [ asIdx + 1]).value)); + bvar.type = (QB.func_UCase( QB.arrayValue(parts, [ asIdx + 1]).value)); var nextIdx = 0; // INTEGER nextIdx = asIdx + 2; if ( bvar.type == "_UNSIGNED" ) { - bvar.type = bvar.type +" " +(QB.func_UCase(QB.arrayValue(parts, [ asIdx + 2]).value)); + bvar.type = bvar.type +" " +(QB.func_UCase( QB.arrayValue(parts, [ asIdx + 2]).value)); nextIdx = asIdx + 3; } - bvar.typeId = (await func_FindTypeId( bvar.type)); - vnamecount = (await func_ListSplit((await func_Join(parts , nextIdx, -1, " ")) , varnames)); + bvar.typeId = (await func_FindTypeId( bvar.type)); + vnamecount = (await func_ListSplit( (await func_Join( parts, nextIdx, -1, " ")), varnames)); for ( i= 1; i <= vnamecount; i= i + 1) { if (QB.halted()) { return; } - vname = (QB.func__Trim(QB.arrayValue(varnames, [ i]).value)); - pstart = (QB.func_InStr( vname, "(")); + vname = (QB.func__Trim( QB.arrayValue(varnames, [ i]).value)); + pstart = (QB.func_InStr( vname, "(")); if ( pstart > 0) { bvar.isArray = True; - arraySize = (await func_ConvertExpression((QB.func_Mid( vname, pstart + 1, (QB.func_Len( vname)) - pstart - 1)))); - bvar.name = (await func_RemoveSuffix((QB.func_Left( vname, pstart - 1)))); + 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)))); } else { bvar.isArray = False; arraySize = ""; @@ -824,18 +828,18 @@ var DeclareVar = null; } bvar.jsname = ""; if (! bvar.isArray) { - js = js +"var " + bvar.name +" = " +(await func_InitTypeValue( bvar.type)) +";"; + js = js +"var " + bvar.name +" = " +(await func_InitTypeValue( bvar.type)) +";"; } else { - if ((await func_FindVariable( bvar.name, findVar, True)) ) { - js = js +"QB.resizeArray(" + bvar.name +", [" +(await func_FormatArraySize( arraySize)) +"], " +(await func_InitTypeValue( bvar.type)) +", " + preserve +");"; + if ((await func_FindVariable( bvar.name, findVar, True)) ) { + js = js +"QB.resizeArray(" + bvar.name +", [" +(await func_FormatArraySize( arraySize)) +"], " +(await func_InitTypeValue( bvar.type)) +", " + preserve +");"; } else { - js = js +"var " + bvar.name +" = QB.initArray([" +(await func_FormatArraySize( arraySize)) +"], " +(await func_InitTypeValue( bvar.type)) +");"; + js = js +"var " + bvar.name +" = QB.initArray([" +(await func_FormatArraySize( arraySize)) +"], " +(await func_InitTypeValue( bvar.type)) +");"; } } if ( isGlobal) { - await sub_AddVariable( bvar, globalVars); + await sub_AddVariable( bvar, globalVars); } else { - await sub_AddVariable( bvar, localVars); + await sub_AddVariable( bvar, localVars); } js = js +" // " + bvar.type; if ( i < vnamecount) { @@ -846,49 +850,49 @@ var DeclareVar = null; var vpartcount = 0; // INTEGER var vparts = QB.initArray([{l:1,u:0}], ''); // STRING nextIdx = 0; - for ( i= 1; i <= (QB.func_UBound( parts)); i= i + 1) { if (QB.halted()) { return; } + for ( i= 1; i <= (QB.func_UBound( parts)); i= i + 1) { if (QB.halted()) { return; } var p = ''; // STRING - p = (QB.func_UCase(QB.arrayValue(parts, [ i]).value)); + p = (QB.func_UCase( QB.arrayValue(parts, [ i]).value)); if ( p == "DIM" || p == "REDIM" || p == "SHARED" || p == "_PRESERVE" ) { nextIdx = i + 1; } } - vnamecount = (await func_ListSplit((await func_Join(parts , nextIdx, -1, " ")) , varnames)); + vnamecount = (await func_ListSplit( (await func_Join( parts, nextIdx, -1, " ")), varnames)); for ( i= 1; i <= vnamecount; i= i + 1) { if (QB.halted()) { return; } - vpartcount = (await func_SLSplit2(QB.arrayValue(varnames, [ i]).value , vparts)); - bvar.name = (await func_RemoveSuffix(QB.arrayValue(vparts, [ 1]).value)); + vpartcount = (await func_SLSplit2( QB.arrayValue(varnames, [ i]).value, vparts)); + bvar.name = (await func_RemoveSuffix( QB.arrayValue(vparts, [ 1]).value)); if ( vpartcount == 1) { - bvar.type = (await func_DataTypeFromName( bvar.name)); + bvar.type = (await func_DataTypeFromName( bvar.name)); } else if ( vpartcount == 3) { - bvar.type = (QB.func_UCase(QB.arrayValue(vparts, [ 3]).value)); + bvar.type = (QB.func_UCase( QB.arrayValue(vparts, [ 3]).value)); } else if ( vpartcount == 4) { - bvar.type = (QB.func_UCase((await func_Join(vparts , 3, -1, " ")))); + bvar.type = (QB.func_UCase( (await func_Join( vparts, 3, -1, " ")))); } else { } - bvar.typeId = (await func_FindTypeId( bvar.type)); - pstart = (QB.func_InStr( bvar.name, "(")); + bvar.typeId = (await func_FindTypeId( bvar.type)); + pstart = (QB.func_InStr( bvar.name, "(")); if ( pstart > 0) { bvar.isArray = True; - arraySize = (await func_ConvertExpression((QB.func_Mid( bvar.name, pstart + 1, (QB.func_Len( bvar.name)) - pstart - 1)))); - bvar.name = (await func_RemoveSuffix((QB.func_Left( bvar.name, pstart - 1)))); + 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)))); } else { bvar.isArray = False; arraySize = ""; } bvar.jsname = ""; if (! bvar.isArray) { - js = js +"var " + bvar.name +" = " +(await func_InitTypeValue( bvar.type)) +";"; + js = js +"var " + bvar.name +" = " +(await func_InitTypeValue( bvar.type)) +";"; } else { - if ((await func_FindVariable( bvar.name, findVar, True)) ) { - js = js +"QB.resizeArray(" + bvar.name +", [" +(await func_FormatArraySize( arraySize)) +"], " +(await func_InitTypeValue( bvar.type)) +", " + preserve +");"; + if ((await func_FindVariable( bvar.name, findVar, True)) ) { + js = js +"QB.resizeArray(" + bvar.name +", [" +(await func_FormatArraySize( arraySize)) +"], " +(await func_InitTypeValue( bvar.type)) +", " + preserve +");"; } else { - js = js +"var " + bvar.name +" = QB.initArray([" +(await func_FormatArraySize( arraySize)) +"], " +(await func_InitTypeValue( bvar.type)) +");"; + js = js +"var " + bvar.name +" = QB.initArray([" +(await func_FormatArraySize( arraySize)) +"], " +(await func_InitTypeValue( bvar.type)) +");"; } } if ( isGlobal) { - await sub_AddVariable( bvar, globalVars); + await sub_AddVariable( bvar, globalVars); } else { - await sub_AddVariable( bvar, localVars); + await sub_AddVariable( bvar, localVars); } js = js +" // " + bvar.type; if ( i < vnamecount) { @@ -906,12 +910,12 @@ var FormatArraySize = null; sizeParams = ""; var parts = QB.initArray([{l:1,u:0}], ''); // STRING var pcount = 0; // INTEGER - pcount = (await func_ListSplit( sizeString, parts)); + 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 - scount = (await func_SLSplit2(QB.arrayValue(parts, [ i]).value , subparts)); + scount = (await func_SLSplit2( QB.arrayValue(parts, [ i]).value, subparts)); if ( i > 1) { sizeParams = sizeParams +","; } @@ -935,14 +939,14 @@ var InitTypeValue = null; } else { value = "{"; var typeId = 0; // INTEGER - typeId = (await func_FindTypeId( vtype)); + typeId = (await func_FindTypeId( vtype)); var i = 0; // INTEGER - for ( i= 1; i <= (QB.func_UBound( typeVars)); i= i + 1) { if (QB.halted()) { return; } + for ( i= 1; i <= (QB.func_UBound( typeVars)); i= i + 1) { if (QB.halted()) { return; } if ( typeId == QB.arrayValue(typeVars, [ i]).value .typeId) { - value = value +QB.arrayValue(typeVars, [ i]).value .name +":" +(await func_InitTypeValue(QB.arrayValue(typeVars, [ i]).value .type)) +","; + value = value +QB.arrayValue(typeVars, [ i]).value .name +":" +(await func_InitTypeValue( QB.arrayValue(typeVars, [ i]).value .type)) +","; } } - value = (QB.func_Left( value, (QB.func_Len( value)) - 1)) +"}"; + value = (QB.func_Left( value, (QB.func_Len( value)) - 1)) +"}"; } InitTypeValue = value; return InitTypeValue; @@ -953,7 +957,7 @@ var FindTypeId = null; var id = 0; // INTEGER id = -1; var i = 0; // INTEGER - for ( i= 1; i <= (QB.func_UBound( types)); i= i + 1) { if (QB.halted()) { return; } + for ( i= 1; i <= (QB.func_UBound( types)); i= i + 1) { if (QB.halted()) { return; } if (QB.arrayValue(types, [ i]).value .name == typeName) { id = i; break; @@ -975,20 +979,20 @@ var ConvertExpression = null; var stringLiteral = 0; // INTEGER var i = 0; // INTEGER i = 1; - while ( i <= (QB.func_Len( ex))) { if (QB.halted()) { return; } - c = (QB.func_Mid( ex, i, 1)); - if ( c == (QB.func_Chr( 34)) ) { + while ( i <= (QB.func_Len( ex))) { if (QB.halted()) { return; } + c = (QB.func_Mid( ex, i, 1)); + if ( c == (QB.func_Chr( 34)) ) { js = js + c; stringLiteral = ! stringLiteral; } else if ( stringLiteral) { js = js + c; } else { - if ( c == " " || c == "," || i == (QB.func_Len( ex)) ) { - if ( i == (QB.func_Len( ex)) ) { + if ( c == " " || c == "," || i == (QB.func_Len( ex)) ) { + if ( i == (QB.func_Len( ex)) ) { word = word + c; } var uword = ''; // STRING - uword = (QB.func_UCase( word)); + uword = (QB.func_UCase( word)); if ( uword == "NOT" ) { js = js +"!"; } else if ( uword == "AND" ) { @@ -1006,12 +1010,12 @@ var ConvertExpression = null; } else if ( word == ">" || word == ">=" || word == "<" || word == "<=" ) { js = js +" " + word +" "; } else { - if ((await func_FindVariable( word, bvar, False)) ) { + if ((await func_FindVariable( word, bvar, False)) ) { js = js +" " + bvar.jsname; } else { - if ((await func_FindMethod( word, m, "FUNCTION")) ) { + if ((await func_FindMethod( word, m, "FUNCTION")) ) { if ( m.name != currentMethod) { - js = js +(await func_CallMethod( m)) +"()"; + js = js +(await func_CallMethod( m)) +"()"; } else { js = js +" " + word; } @@ -1020,7 +1024,7 @@ var ConvertExpression = null; } } } - if ( c == "," && i != (QB.func_Len( ex)) ) { + if ( c == "," && i != (QB.func_Len( ex)) ) { js = js +","; } word = ""; @@ -1035,9 +1039,9 @@ var ConvertExpression = null; var stringLiteral2 = 0; // INTEGER stringLiteral2 = False; i = i + 1; - while (! done && i <= (QB.func_Len( ex))) { if (QB.halted()) { return; } - c2 = (QB.func_Mid( ex, i, 1)); - if ( c2 == (QB.func_Chr( 34)) ) { + while (! done && i <= (QB.func_Len( ex))) { if (QB.halted()) { return; } + c2 = (QB.func_Mid( ex, i, 1)); + if ( c2 == (QB.func_Chr( 34)) ) { stringLiteral2 = ! stringLiteral2; } else if (! stringLiteral2 && c2 == "(" ) { pcount = pcount + 1; @@ -1055,25 +1059,25 @@ var ConvertExpression = null; } var fneg = ''; // STRING fneg = ""; - if ((QB.func_Len( word)) > 0) { - if ((QB.func_Left( word, 1)) == "-" ) { + if ((QB.func_Len( word)) > 0) { + if ((QB.func_Left( word, 1)) == "-" ) { fneg = "-"; - word = (QB.func_Mid( word, 2)); + word = (QB.func_Mid( word, 2)); } } - if ((await func_FindVariable( word, bvar, True)) ) { - if ((QB.func__Trim( ex2)) == "" ) { + if ((await func_FindVariable( word, bvar, True)) ) { + if ((QB.func__Trim( ex2)) == "" ) { js = js + fneg + bvar.jsname; } else { - js = js + fneg +"QB.arrayValue(" + bvar.jsname +", [" +(await func_ConvertExpression( ex2)) +"]).value"; + js = js + fneg +"QB.arrayValue(" + bvar.jsname +", [" +(await func_ConvertExpression( ex2)) +"]).value"; } - } else if ((await func_FindMethod( word, m, "FUNCTION")) ) { - js = js + fneg +"(" +(await func_CallMethod( m)) +"(" +(await func_ConvertExpression( ex2)) +"))"; + } else if ((await func_FindMethod( word, m, "FUNCTION")) ) { + js = js + fneg +"(" +(await func_CallMethod( m)) +"(" +(await func_ConvertMethodParams( ex2)) +"))"; } else { - if ((QB.func__Trim( word)) != "" ) { - await sub_AddWarning( i, "Missing function or array [" + word +"]"); + if ((QB.func__Trim( word)) != "" ) { + await sub_AddWarning( i, "Missing function or array [" + word +"]"); } - js = js + fneg +"(" +(await func_ConvertExpression( ex2)) +")"; + js = js + fneg +"(" +(await func_ConvertExpression( ex2)) +")"; } word = ""; } else { @@ -1085,6 +1089,27 @@ var ConvertExpression = null; ConvertExpression = js; return ConvertExpression; } +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; @@ -1103,9 +1128,9 @@ var FindVariable = null; found = False; var i = 0; // INTEGER var fvarname = ''; // STRING - 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) { + 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) { found = True; bvar.type = QB.arrayValue(localVars, [ i]).value .type; bvar.name = QB.arrayValue(localVars, [ i]).value .name; @@ -1118,8 +1143,8 @@ var FindVariable = null; } } if (! found) { - 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) { + 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) { found = True; bvar.type = QB.arrayValue(globalVars, [ i]).value .type; bvar.name = QB.arrayValue(globalVars, [ i]).value .name; @@ -1141,8 +1166,8 @@ var FindMethod = null; var found = 0; // INTEGER found = False; var i = 0; // INTEGER - 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) { + 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) { found = True; m.line = QB.arrayValue(methods, [ i]).value .line; m.type = QB.arrayValue(methods, [ i]).value .type; @@ -1161,14 +1186,14 @@ return FindMethod; } async function sub_ConvertMethods() { if (QB.halted()) { return; } - await sub_AddJSLine( 0, ""); + await sub_AddJSLine( 0, ""); var i = 0; // INTEGER - for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; } + for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; } if ((QB.arrayValue(methods, [ i]).value .line != 0) ) { var lastLine = 0; // INTEGER lastLine = QB.arrayValue(methods, [ i + 1]).value .line - 1; if ( lastLine < 0) { - lastLine = (QB.func_UBound( lines)); + lastLine = (QB.func_UBound( lines)); } QB.resizeArray(localVars, [{l:1,u:0}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}, false); // VARIABLE var asyncModifier = ''; // STRING @@ -1178,12 +1203,12 @@ if (QB.halted()) { return; } if (QB.arrayValue(methods, [ i]).value .argc > 0) { var args = QB.initArray([{l:1,u:0}], ''); // STRING var c = 0; // INTEGER - c = (await func_Split(QB.arrayValue(methods, [ i]).value .args, "," , args)); + c = (await func_Split( QB.arrayValue(methods, [ i]).value .args, ",", args)); 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 - v = (await func_Split(QB.arrayValue(args, [ a]).value , ":" , parts)); + v = (await func_Split( QB.arrayValue(args, [ a]).value, ":", parts)); methodDec = methodDec +QB.arrayValue(parts, [ 1]).value +"/*" +QB.arrayValue(parts, [ 2]).value +"*/"; if ( a < c) { methodDec = methodDec +","; @@ -1191,26 +1216,26 @@ if (QB.halted()) { return; } 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; - bvar.typeId = (await func_FindTypeId( bvar.type)); + bvar.typeId = (await func_FindTypeId( bvar.type)); if (QB.arrayValue(parts, [ 3]).value == "true" ) { bvar.isArray = True; } bvar.jsname = ""; - await sub_AddVariable( bvar, localVars); + await sub_AddVariable( bvar, localVars); } } methodDec = methodDec +") {"; - await sub_AddJSLine(QB.arrayValue(methods, [ i]).value .line, methodDec); - await sub_AddJSLine(QB.arrayValue(methods, [ i]).value .line, "if (QB.halted()) { return; }"); + await sub_AddJSLine( QB.arrayValue(methods, [ i]).value .line, methodDec); + await sub_AddJSLine( QB.arrayValue(methods, [ i]).value .line, "if (QB.halted()) { return; }"); if (QB.arrayValue(methods, [ i]).value .type == "FUNCTION" ) { - await sub_AddJSLine(QB.arrayValue(methods, [ i]).value .line, "var " +(await func_RemoveSuffix(QB.arrayValue(methods, [ i]).value .name)) +" = null;"); + await sub_AddJSLine( QB.arrayValue(methods, [ i]).value .line, "var " +(await func_RemoveSuffix( QB.arrayValue(methods, [ i]).value .name)) +" = null;"); } currentMethod = QB.arrayValue(methods, [ i]).value .name; - await sub_ConvertLines(QB.arrayValue(methods, [ i]).value .line + 1, lastLine - 1, QB.arrayValue(methods, [ i]).value .name); + await sub_ConvertLines( QB.arrayValue(methods, [ i]).value .line + 1, lastLine - 1, QB.arrayValue(methods, [ i]).value .name); if (QB.arrayValue(methods, [ i]).value .type == "FUNCTION" ) { - await sub_AddJSLine( lastLine, "return " +(await func_RemoveSuffix(QB.arrayValue(methods, [ i]).value .name)) +";"); + await sub_AddJSLine( lastLine, "return " +(await func_RemoveSuffix( QB.arrayValue(methods, [ i]).value .name)) +";"); } - await sub_AddJSLine( lastLine, "}"); + await sub_AddJSLine( lastLine, "}"); } } } @@ -1226,17 +1251,17 @@ QB.sub_LineInput(___v7055475, false, false, undefined); fline = ___v7055475[ 1]; lineIndex = lineIndex + 1; - if ((QB.func__Trim( fline)) != "" ) { - while ((await func_EndsWith( fline, " _"))) { if (QB.halted()) { return; } + if ((QB.func__Trim( fline)) != "" ) { + while ((await func_EndsWith( fline, " _"))) { if (QB.halted()) { return; } var nextLine = ''; // STRING var ___v5334240 = new Array( 2); QB.sub_LineInput(___v5334240, false, false, undefined); // #1 = ___v5334240[ 0]; nextLine = ___v5334240[ 1]; - fline = (QB.func_Left( fline, (QB.func_Len( fline)) - 1)) + nextLine; + fline = (QB.func_Left( fline, (QB.func_Len( fline)) - 1)) + nextLine; } - await sub_ReadLine( lineIndex, fline); + await sub_ReadLine( lineIndex, fline); } } // Close #1 @@ -1246,20 +1271,20 @@ if (QB.halted()) { return; } var sourceLines = QB.initArray([{l:1,u:0}], ''); // STRING var lcount = 0; // INTEGER var i = 0; // INTEGER - lcount = (await func_Split( sourceText, GX.LF, sourceLines)); + lcount = (await func_Split( sourceText, GX.LF, sourceLines)); for ( i= 1; i <= lcount; i= i + 1) { if (QB.halted()) { return; } var fline = ''; // STRING fline = QB.arrayValue(sourceLines, [ i]).value; - if ((QB.func__Trim( fline)) != "" ) { + if ((QB.func__Trim( fline)) != "" ) { var lineIndex = 0; // INTEGER lineIndex = i; - while ((await func_EndsWith( fline, "_"))) { if (QB.halted()) { return; } + while ((await func_EndsWith( fline, "_"))) { if (QB.halted()) { return; } i = i + 1; var nextLine = ''; // STRING nextLine = QB.arrayValue(sourceLines, [ i]).value; - fline = (QB.func_Left( fline, (QB.func_Len( fline)) - 1)) + nextLine; + fline = (QB.func_Left( fline, (QB.func_Len( fline)) - 1)) + nextLine; } - await sub_ReadLine( i, fline); + await sub_ReadLine( i, fline); } } } @@ -1268,10 +1293,10 @@ if (QB.halted()) { return; } var quoteDepth = 0; // INTEGER quoteDepth = 0; var i = 0; // INTEGER - for ( i= 1; i <= (QB.func_Len( fline)); i= i + 1) { if (QB.halted()) { return; } + for ( i= 1; i <= (QB.func_Len( fline)); i= i + 1) { if (QB.halted()) { return; } var c = ''; // STRING - c = (QB.func_Mid( fline, i, 1)); - if ( c == (QB.func_Chr( 34)) ) { + c = (QB.func_Mid( fline, i, 1)); + if ( c == (QB.func_Chr( 34)) ) { if ( quoteDepth == 0) { quoteDepth = 1; } else { @@ -1279,22 +1304,22 @@ if (QB.halted()) { return; } } } if ( quoteDepth == 0 && c == "'" ) { - fline = (QB.func_Left( fline, i - 1)); + fline = (QB.func_Left( fline, i - 1)); break; } } - if ((QB.func__Trim( fline)) == "" ) { + if ((QB.func__Trim( fline)) == "" ) { return; } var word = ''; // STRING var words = QB.initArray([{l:1,u:0}], ''); // STRING var wcount = 0; // INTEGER - wcount = (await func_SLSplit( fline, words , False)); + wcount = (await func_SLSplit( fline, words, False)); var ifIdx = 0; // INTEGER var thenIdx = 0; // INTEGER var elseIdx = 0; // INTEGER for ( i= 1; i <= wcount; i= i + 1) { if (QB.halted()) { return; } - word = (QB.func_UCase(QB.arrayValue(words, [ i]).value)); + word = (QB.func_UCase( QB.arrayValue(words, [ i]).value)); if ( word == "IF" ) { ifIdx = i; } else if ( word == "THEN" ) { @@ -1304,17 +1329,17 @@ var elseIdx = 0; // INTEGER } } if ( thenIdx > 0 && thenIdx < wcount) { - await sub_AddLine( lineIndex, (await func_Join(words , 1, thenIdx, " "))); + await sub_AddLine( lineIndex, (await func_Join( words, 1, thenIdx, " "))); if ( elseIdx > 0) { - await sub_AddSubLines( lineIndex, (await func_Join(words , thenIdx + 1, elseIdx - 1, " "))); - await sub_AddLine( lineIndex, "Else"); - await sub_AddSubLines( lineIndex, (await func_Join(words , elseIdx + 1, -1, " "))); + await sub_AddSubLines( lineIndex, (await func_Join( words, thenIdx + 1, elseIdx - 1, " "))); + await sub_AddLine( lineIndex, "Else"); + await sub_AddSubLines( lineIndex, (await func_Join( words, elseIdx + 1, -1, " "))); } else { - await sub_AddSubLines( lineIndex, (await func_Join(words , thenIdx + 1, -1, " "))); + await sub_AddSubLines( lineIndex, (await func_Join( words, thenIdx + 1, -1, " "))); } - await sub_AddLine( lineIndex, "End If"); + await sub_AddLine( lineIndex, "End If"); } else { - await sub_AddSubLines( lineIndex, fline); + await sub_AddSubLines( lineIndex, fline); } } async function sub_AddSubLines(lineIndex/*INTEGER*/,fline/*STRING*/) { @@ -1322,10 +1347,10 @@ if (QB.halted()) { return; } var quoteDepth = 0; // INTEGER quoteDepth = 0; var i = 0; // INTEGER - for ( i= 1; i <= (QB.func_Len( fline)); i= i + 1) { if (QB.halted()) { return; } + for ( i= 1; i <= (QB.func_Len( fline)); i= i + 1) { if (QB.halted()) { return; } var c = ''; // STRING - c = (QB.func_Mid( fline, i, 1)); - if ( c == (QB.func_Chr( 34)) ) { + c = (QB.func_Mid( fline, i, 1)); + if ( c == (QB.func_Chr( 34)) ) { if ( quoteDepth == 0) { quoteDepth = 1; } else { @@ -1333,40 +1358,40 @@ if (QB.halted()) { return; } } } if ( quoteDepth == 0 && c == ":" ) { - await sub_AddLine( lineIndex, (QB.func_Left( fline, i - 1))); - fline = (QB.func_Right( fline, (QB.func_Len( fline)) - i)); + await sub_AddLine( lineIndex, (QB.func_Left( fline, i - 1))); + fline = (QB.func_Right( fline, (QB.func_Len( fline)) - i)); i = 0; } } - await sub_AddLine( lineIndex, fline); + await sub_AddLine( lineIndex, fline); } async function sub_FindMethods() { if (QB.halted()) { return; } var i = 0; // INTEGER var pcount = 0; // INTEGER var parts = QB.initArray([{l:1,u:0}], ''); // STRING - 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)); + 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)); var word = ''; // STRING - word = (QB.func_UCase(QB.arrayValue(parts, [ 1]).value)); + word = (QB.func_UCase( QB.arrayValue(parts, [ 1]).value)); if ( word == "FUNCTION" || word == "SUB" ) { var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; // METHOD m.line = i; - m.type = (QB.func_UCase(QB.arrayValue(parts, [ 1]).value)); + m.type = (QB.func_UCase( QB.arrayValue(parts, [ 1]).value)); m.name = QB.arrayValue(parts, [ 2]).value; m.argc = 0; m.args = ""; var args = QB.initArray([{l:1,u:0}], {name:'',type:''}); // ARGUMENT - if ((QB.func_UBound( parts)) > 2) { + if ((QB.func_UBound( parts)) > 2) { var a = 0; // INTEGER var args = ''; // STRING args = ""; - for ( a= 3; a <= (QB.func_UBound( parts)); a= a + 1) { if (QB.halted()) { return; } + for ( a= 3; a <= (QB.func_UBound( parts)); a= a + 1) { if (QB.halted()) { return; } args = args +QB.arrayValue(parts, [ a]).value +" "; } - args = (QB.func_Mid((QB.func__Trim( args)) , 2, (QB.func_Len((QB.func__Trim( args)))) - 2)); + 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 - m.argc = (await func_ListSplit( args, arga)); + m.argc = (await func_ListSplit( args, arga)); args = ""; for ( a= 1; a <= m.argc; a= a + 1) { if (QB.halted()) { return; } var aparts = QB.initArray([{l:1,u:0}], ''); // STRING @@ -1374,16 +1399,16 @@ if (QB.halted()) { return; } var argname = ''; // STRING var isArray = ''; // STRING isArray = "false"; - apcount = (await func_Split(QB.arrayValue(arga, [ a]).value , " " , aparts)); + apcount = (await func_Split( QB.arrayValue(arga, [ a]).value, " ", aparts)); argname = QB.arrayValue(aparts, [ 1]).value; - if ((await func_EndsWith( argname, "()")) ) { + if ((await func_EndsWith( argname, "()")) ) { isArray = "true"; - argname = (QB.func_Left( argname, (QB.func_Len( argname)) - 2)); + argname = (QB.func_Left( argname, (QB.func_Len( argname)) - 2)); } if ( apcount == 3) { - args = args + argname +":" +(QB.func_UCase(QB.arrayValue(aparts, [ 3]).value)) +":" + isArray; + args = args + argname +":" +(QB.func_UCase( QB.arrayValue(aparts, [ 3]).value)) +":" + isArray; } else { - args = args + argname +":" +(await func_DataTypeFromName(QB.arrayValue(aparts, [ 1]).value)) +":" + isArray; + args = args + argname +":" +(await func_DataTypeFromName( QB.arrayValue(aparts, [ 1]).value)) +":" + isArray; } if ( a != m.argc) { args = args +","; @@ -1391,7 +1416,7 @@ if (QB.halted()) { return; } } m.args = args; } - await sub_AddMethod( m, "" , True); + await sub_AddMethod( m, "", True); } } } @@ -1405,26 +1430,26 @@ var arrpos = 0; // LONG var dpos = 0; // LONG cstr = sourceString; if ( delimiter == " " ) { - cstr = (QB.func_RTrim((QB.func_LTrim( cstr)))); - p = (QB.func_InStr( cstr, " ")); + cstr = (QB.func_RTrim( (QB.func_LTrim( cstr)))); + p = (QB.func_InStr( cstr, " ")); while ( p > 0) { if (QB.halted()) { return; } - cstr = (QB.func_Mid( cstr, 1, p - 1)) +(QB.func_Mid( cstr, p + 1)); - p = (QB.func_InStr( cstr, " ")); + cstr = (QB.func_Mid( cstr, 1, p - 1)) +(QB.func_Mid( cstr, p + 1)); + p = (QB.func_InStr( cstr, " ")); } } curpos = 1; arrpos = 0; - dpos = (QB.func_InStr( curpos, cstr, delimiter)); + dpos = (QB.func_InStr( curpos, cstr, delimiter)); while (!( dpos == 0)) { if (QB.halted()) { return; } arrpos = arrpos + 1; QB.resizeArray(results, [{l:1,u:arrpos}], '', true); // STRING - QB.arrayValue(results, [ arrpos]).value = (QB.func_Mid( cstr, curpos, dpos - curpos)); - curpos = dpos +(QB.func_Len( delimiter)); - dpos = (QB.func_InStr( curpos, cstr, delimiter)); + QB.arrayValue(results, [ arrpos]).value = (QB.func_Mid( cstr, curpos, dpos - curpos)); + curpos = dpos +(QB.func_Len( delimiter)); + dpos = (QB.func_InStr( curpos, cstr, delimiter)); } arrpos = arrpos + 1; QB.resizeArray(results, [{l:1,u:arrpos}], '', true); // STRING - QB.arrayValue(results, [ arrpos]).value = (QB.func_Mid( cstr, curpos)); + QB.arrayValue(results, [ arrpos]).value = (QB.func_Mid( cstr, curpos)); Split = arrpos; return Split; } @@ -1436,28 +1461,28 @@ var SLSplit = null; var curpos = 0; // LONG var arrpos = 0; // LONG var dpos = 0; // LONG - cstr = (QB.func__Trim( sourceString)); + 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 count = 0; // INTEGER var i = 0; // INTEGER - for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } + for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } var c = ''; // STRING - c = (QB.func_Mid( cstr, i, 1)); - if ( c == (QB.func_Chr( 34)) ) { + c = (QB.func_Mid( cstr, i, 1)); + if ( c == (QB.func_Chr( 34)) ) { quoteMode = ! quoteMode; result = result + c; if (! quoteMode && escapeStrings) { - result = (GXSTR.replace( result, "\\" , "\\\\")); + result = (GXSTR.replace( result, "\\", "\\\\")); } } else if ( c == " " ) { if ( quoteMode) { result = result + c; } else if ( lastChar == " " ) { } else { - count = (QB.func_UBound( results)) + 1; + count = (QB.func_UBound( results)) + 1; QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING QB.arrayValue(results, [ count]).value = result; result = ""; @@ -1468,11 +1493,11 @@ var dpos = 0; // LONG lastChar = c; } if ( result != "" ) { - count = (QB.func_UBound( results)) + 1; + count = (QB.func_UBound( results)) + 1; QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING QB.arrayValue(results, [ count]).value = result; } - SLSplit = (QB.func_UBound( results)); + SLSplit = (QB.func_UBound( results)); return SLSplit; } async function func_SLSplit2(sourceString/*STRING*/,results/*STRING*/) { @@ -1483,7 +1508,7 @@ var SLSplit2 = null; var curpos = 0; // LONG var arrpos = 0; // LONG var dpos = 0; // LONG - cstr = (QB.func__Trim( sourceString)); + cstr = (QB.func__Trim( sourceString)); QB.resizeArray(results, [{l:1,u:0}], '', false); // STRING var lastChar = ''; // STRING var quoteMode = 0; // INTEGER @@ -1491,10 +1516,10 @@ var dpos = 0; // LONG var paren = 0; // INTEGER var count = 0; // INTEGER var i = 0; // INTEGER - for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } + for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } var c = ''; // STRING - c = (QB.func_Mid( cstr, i, 1)); - if ( c == (QB.func_Chr( 34)) ) { + c = (QB.func_Mid( cstr, i, 1)); + if ( c == (QB.func_Chr( 34)) ) { quoteMode = ! quoteMode; result = result + c; } else if ( quoteMode) { @@ -1510,7 +1535,7 @@ var dpos = 0; // LONG } else if ( c == " " ) { if ( lastChar == " " ) { } else { - count = (QB.func_UBound( results)) + 1; + count = (QB.func_UBound( results)) + 1; QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING QB.arrayValue(results, [ count]).value = result; result = ""; @@ -1521,11 +1546,11 @@ var dpos = 0; // LONG lastChar = c; } if ( result != "" ) { - count = (QB.func_UBound( results)) + 1; + count = (QB.func_UBound( results)) + 1; QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING QB.arrayValue(results, [ count]).value = result; } - SLSplit2 = (QB.func_UBound( results)); + SLSplit2 = (QB.func_UBound( results)); return SLSplit2; } async function func_ListSplit(sourceString/*STRING*/,results/*STRING*/) { @@ -1536,17 +1561,17 @@ var ListSplit = null; var curpos = 0; // LONG var arrpos = 0; // LONG var dpos = 0; // LONG - cstr = (QB.func__Trim( sourceString)); + cstr = (QB.func__Trim( sourceString)); QB.resizeArray(results, [{l:1,u:0}], '', false); // STRING var quoteMode = 0; // INTEGER var result = ''; // STRING var count = 0; // INTEGER var paren = 0; // INTEGER var i = 0; // INTEGER - for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } + for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } var c = ''; // STRING - c = (QB.func_Mid( cstr, i, 1)); - if ( c == (QB.func_Chr( 34)) ) { + c = (QB.func_Mid( cstr, i, 1)); + if ( c == (QB.func_Chr( 34)) ) { quoteMode = ! quoteMode; result = result + c; } else if ( quoteMode) { @@ -1560,7 +1585,7 @@ var dpos = 0; // LONG } else if ( paren > 0) { result = result + c; } else if ( c == "," ) { - count = (QB.func_UBound( results)) + 1; + count = (QB.func_UBound( results)) + 1; QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING QB.arrayValue(results, [ count]).value = result; result = ""; @@ -1569,11 +1594,11 @@ var dpos = 0; // LONG } } if ( result != "" ) { - count = (QB.func_UBound( results)) + 1; + count = (QB.func_UBound( results)) + 1; QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING QB.arrayValue(results, [ count]).value = result; } - ListSplit = (QB.func_UBound( results)); + ListSplit = (QB.func_UBound( results)); return ListSplit; } async function func_PrintSplit(sourceString/*STRING*/,results/*STRING*/) { @@ -1584,17 +1609,17 @@ var PrintSplit = null; var curpos = 0; // LONG var arrpos = 0; // LONG var dpos = 0; // LONG - cstr = (QB.func__Trim( sourceString)); + cstr = (QB.func__Trim( sourceString)); QB.resizeArray(results, [{l:1,u:0}], '', false); // STRING var quoteMode = 0; // INTEGER var result = ''; // STRING var count = 0; // INTEGER var paren = 0; // INTEGER var i = 0; // INTEGER - for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } + for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } var c = ''; // STRING - c = (QB.func_Mid( cstr, i, 1)); - if ( c == (QB.func_Chr( 34)) ) { + c = (QB.func_Mid( cstr, i, 1)); + if ( c == (QB.func_Chr( 34)) ) { quoteMode = ! quoteMode; result = result + c; } else if ( quoteMode) { @@ -1609,12 +1634,12 @@ var dpos = 0; // LONG result = result + c; } else if ( c == "," || c == ";" ) { if ( result != "" ) { - count = (QB.func_UBound( results)) + 1; + count = (QB.func_UBound( results)) + 1; QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING QB.arrayValue(results, [ count]).value = result; result = ""; } - count = (QB.func_UBound( results)) + 1; + count = (QB.func_UBound( results)) + 1; QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING QB.arrayValue(results, [ count]).value = c; } else { @@ -1622,11 +1647,11 @@ var dpos = 0; // LONG } } if ( result != "" ) { - count = (QB.func_UBound( results)) + 1; + count = (QB.func_UBound( results)) + 1; QB.resizeArray(results, [{l:1,u:count}], '', true); // STRING QB.arrayValue(results, [ count]).value = result; } - PrintSplit = (QB.func_UBound( results)); + PrintSplit = (QB.func_UBound( results)); return PrintSplit; } async function sub_PrintMethods() { @@ -1635,10 +1660,10 @@ if (QB.halted()) { return; } await QB.sub_Print(["Methods"]); await QB.sub_Print(["------------------------------------------------------------"]); var i = 0; // INTEGER - for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; } + 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 m = QB.arrayValue(methods, [ i]).value; - await QB.sub_Print([(QB.func_Str( m.line)) +": " + m.type +" - " + m.name +" [" + m.jsname +"] - " + m.returnType +" - " + m.args]); + await QB.sub_Print([(QB.func_Str( m.line)) +": " + m.type +" - " + m.name +" [" + m.jsname +"] - " + m.returnType +" - " + m.args]); } } async function sub_PrintTypes() { @@ -1647,12 +1672,12 @@ if (QB.halted()) { return; } await QB.sub_Print(["Types"]); await QB.sub_Print(["------------------------------------------------------------"]); var i = 0; // INTEGER - for ( i= 1; i <= (QB.func_UBound( types)); i= i + 1) { if (QB.halted()) { return; } + for ( i= 1; i <= (QB.func_UBound( types)); i= i + 1) { if (QB.halted()) { return; } var t = {line:0,name:'',argc:0,args:''}; // QBTYPE t = QB.arrayValue(types, [ i]).value; - await QB.sub_Print([(QB.func_Str( t.line)) +": " + t.name]); + await QB.sub_Print([(QB.func_Str( t.line)) +": " + t.name]); var v = 0; // INTEGER - for ( v= 1; v <= (QB.func_UBound( typeVars)); v= v + 1) { if (QB.halted()) { return; } + for ( v= 1; v <= (QB.func_UBound( typeVars)); v= v + 1) { if (QB.halted()) { return; } if (QB.arrayValue(typeVars, [ i]).value .typeId == i) { await QB.sub_Print([" -> " +QB.arrayValue(typeVars, [ v]).value .name +": " +QB.arrayValue(typeVars, [ v]).value .type]); } @@ -1662,29 +1687,29 @@ if (QB.halted()) { return; } async function sub_AddMethod(m/*METHOD*/,prefix/*STRING*/,sync/*INTEGER*/) { if (QB.halted()) { return; } var mcount = 0; // SINGLE - mcount = (QB.func_UBound( methods)) + 1; + 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 if ( m.type == "FUNCTION" ) { - m.returnType = (await func_DataTypeFromName( m.name)); + 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( (await func_RemoveSuffix( m.name)))); + m.jsname = (await func_MethodJS( m, prefix)); m.sync = sync; QB.arrayValue(methods, [ mcount]).value = m; } async function sub_AddGXMethod(mtype/*STRING*/,mname/*STRING*/,sync/*INTEGER*/) { if (QB.halted()) { return; } var mcount = 0; // SINGLE - mcount = (QB.func_UBound( methods)) + 1; + 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 m.type = mtype; m.name = mname; - m.uname = (QB.func_UCase( m.name)); + m.uname = (QB.func_UCase( m.name)); m.sync = sync; - m.jsname = (await func_GXMethodJS((await func_RemoveSuffix( mname)))); + m.jsname = (await func_GXMethodJS( (await func_RemoveSuffix( mname)))); if ( mtype == "FUNCTION" ) { - m.returnType = (await func_DataTypeFromName( mname)); + m.returnType = (await func_DataTypeFromName( mname)); } QB.arrayValue(methods, [ mcount]).value = m; } @@ -1693,16 +1718,16 @@ if (QB.halted()) { return; } var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; // METHOD m.type = mtype; m.name = mname; - await sub_AddMethod( m, "QB." , sync); + await sub_AddMethod( m, "QB.", sync); } async function sub_AddLine(lineIndex/*INTEGER*/,fline/*STRING*/) { if (QB.halted()) { return; } - await sub___AddLine( lineIndex, fline); + await sub___AddLine( lineIndex, fline); } async function sub___AddLine(lineIndex/*INTEGER*/,fline/*STRING*/) { if (QB.halted()) { return; } var lcount = 0; // INTEGER - lcount = (QB.func_UBound( lines)) + 1; + lcount = (QB.func_UBound( lines)) + 1; QB.resizeArray(lines, [{l:1,u:lcount}], {line:0,text:''}, true); // CODELINE QB.arrayValue(lines, [ lcount]).value .line = lineIndex; QB.arrayValue(lines, [ lcount]).value .text = fline; @@ -1710,7 +1735,7 @@ if (QB.halted()) { return; } async function sub_AddJSLine(sourceLine/*INTEGER*/,jsline/*STRING*/) { if (QB.halted()) { return; } var lcount = 0; // INTEGER - lcount = (QB.func_UBound( jsLines)) + 1; + lcount = (QB.func_UBound( jsLines)) + 1; QB.resizeArray(jsLines, [{l:1,u:lcount}], {line:0,text:''}, true); // CODELINE QB.arrayValue(jsLines, [ lcount]).value .line = sourceLine; QB.arrayValue(jsLines, [ lcount]).value .text = jsline; @@ -1718,7 +1743,7 @@ if (QB.halted()) { return; } async function sub_AddWarning(sourceLine/*INTEGER*/,msgText/*STRING*/) { if (QB.halted()) { return; } var lcount = 0; // INTEGER - lcount = (QB.func_UBound( warnings)) + 1; + lcount = (QB.func_UBound( warnings)) + 1; QB.resizeArray(warnings, [{l:1,u:lcount}], {line:0,text:''}, true); // CODELINE var l = 0; // INTEGER if (( sourceLine > 0) ) { @@ -1733,7 +1758,7 @@ if (QB.halted()) { return; } v.type = "CONST"; v.name = vname; v.isConst = True; - await sub_AddVariable( v, globalVars); + await sub_AddVariable( v, globalVars); } async function sub_AddGXConst(vname/*STRING*/) { if (QB.halted()) { return; } @@ -1746,14 +1771,23 @@ if (QB.halted()) { return; } v.jsname = "false"; } else { var jsname = ''; // STRING - jsname = (QB.func_Mid( vname, 3, (QB.func_Len( vname)) - 2)); - if ((QB.func_Left( jsname, 1)) == "_" ) { - jsname = (QB.func_Right( jsname, (QB.func_Len( jsname)) - 1)); + jsname = (QB.func_Mid( vname, 3, (QB.func_Len( vname)) - 2)); + if ((QB.func_Left( jsname, 1)) == "_" ) { + jsname = (QB.func_Right( jsname, (QB.func_Len( jsname)) - 1)); } v.jsname = "GX." + jsname; } v.isConst = True; - await sub_AddVariable( v, globalVars); + 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); } async function sub_AddGlobal(vname/*STRING*/,vtype/*STRING*/,arraySize/*INTEGER*/) { if (QB.halted()) { return; } @@ -1762,7 +1796,7 @@ if (QB.halted()) { return; } v.name = vname; v.isArray = arraySize > -1; v.arraySize = arraySize; - await sub_AddVariable( v, globalVars); + await sub_AddVariable( v, globalVars); } async function sub_AddLocal(vname/*STRING*/,vtype/*STRING*/,arraySize/*INTEGER*/) { if (QB.halted()) { return; } @@ -1771,12 +1805,12 @@ if (QB.halted()) { return; } v.name = vname; v.isArray = arraySize > -1; v.arraySize = arraySize; - await sub_AddVariable( v, localVars); + await sub_AddVariable( v, localVars); } async function sub_AddVariable(bvar/*VARIABLE*/,vlist/*VARIABLE*/) { if (QB.halted()) { return; } var vcount = 0; // SINGLE - vcount = (QB.func_UBound( vlist)) + 1; + 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; @@ -1787,14 +1821,14 @@ if (QB.halted()) { return; } nvar.arraySize = bvar.arraySize; nvar.typeId = bvar.typeId; if ( nvar.jsname == "" ) { - nvar.jsname = (await func_RemoveSuffix( nvar.name)); + nvar.jsname = (await func_RemoveSuffix( nvar.name)); } QB.arrayValue(vlist, [ vcount]).value = nvar; } async function sub_AddType(t/*QBTYPE*/) { if (QB.halted()) { return; } var tcount = 0; // SINGLE - tcount = (QB.func_UBound( types)) + 1; + tcount = (QB.func_UBound( types)) + 1; QB.resizeArray(types, [{l:1,u:tcount}], {line:0,name:'',argc:0,args:''}, true); // QBTYPE QB.arrayValue(types, [ tcount]).value = t; } @@ -1802,28 +1836,28 @@ async function sub_AddSystemType(tname/*STRING*/,args/*STRING*/) { if (QB.halted()) { return; } var t = {line:0,name:'',argc:0,args:''}; // QBTYPE t.name = tname; - await sub_AddType( t); + await sub_AddType( t); var typeId = 0; // INTEGER - typeId = (QB.func_UBound( types)); + typeId = (QB.func_UBound( types)); var count = 0; // INTEGER var pairs = QB.initArray([{l:1,u:0}], ''); // STRING - count = (await func_Split( args, "," , pairs)); + count = (await func_Split( args, ",", pairs)); var i = 0; // INTEGER - for ( i= 1; i <= (QB.func_UBound( pairs)); i= i + 1) { if (QB.halted()) { return; } + for ( i= 1; i <= (QB.func_UBound( pairs)); i= i + 1) { if (QB.halted()) { return; } var nv = QB.initArray([{l:1,u:0}], ''); // STRING - count = (await func_Split(QB.arrayValue(pairs, [ i]).value , ":" , nv)); + count = (await func_Split( QB.arrayValue(pairs, [ i]).value, ":", nv)); var tvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; // VARIABLE tvar.typeId = typeId; tvar.name = QB.arrayValue(nv, [ 1]).value; - tvar.type = (QB.func_UCase(QB.arrayValue(nv, [ 2]).value)); - await sub_AddVariable( tvar, typeVars); + tvar.type = (QB.func_UCase( QB.arrayValue(nv, [ 2]).value)); + await sub_AddVariable( tvar, typeVars); } } async function func_MainEnd() { if (QB.halted()) { return; } var MainEnd = null; if ( programMethods == 0) { - MainEnd = (QB.func_UBound( lines)); + MainEnd = (QB.func_UBound( lines)); } else { MainEnd = QB.arrayValue(methods, [ 1]).value .line - 1; } @@ -1835,50 +1869,50 @@ var RemoveSuffix = null; var i = 0; // INTEGER var done = 0; // INTEGER var c = ''; // STRING - vname = (QB.func__Trim( vname)); - i = (QB.func_Len( vname)); + vname = (QB.func__Trim( vname)); + i = (QB.func_Len( vname)); while (! done) { if (QB.halted()) { return; } - c = (QB.func_Mid( vname, i, 1)); + c = (QB.func_Mid( vname, i, 1)); if ( c == "`" || c == "%" || c == "&" || c == "$" || c == "~" || c == "!" ) { i = i - 1; } else { done = True; } } - RemoveSuffix = (QB.func_Left( vname, i)); + RemoveSuffix = (QB.func_Left( vname, i)); return RemoveSuffix; } async function func_DataTypeFromName(vname/*STRING*/) { if (QB.halted()) { return; } var DataTypeFromName = null; var dt = ''; // STRING - if ((await func_EndsWith( vname, "$")) ) { + if ((await func_EndsWith( vname, "$")) ) { dt = "STRING"; - } else if ((await func_EndsWith( vname, "`")) ) { + } else if ((await func_EndsWith( vname, "`")) ) { dt = "_BIT"; - } else if ((await func_EndsWith( vname, "%%")) ) { + } else if ((await func_EndsWith( vname, "%%")) ) { dt = "_BYTE"; - } else if ((await func_EndsWith( vname, "~%")) ) { + } else if ((await func_EndsWith( vname, "~%")) ) { dt = "_UNSIGNED INTEGER"; - } else if ((await func_EndsWith( vname, "%")) ) { + } else if ((await func_EndsWith( vname, "%")) ) { dt = "INTEGER"; - } else if ((await func_EndsWith( vname, "~&&")) ) { + } else if ((await func_EndsWith( vname, "~&&")) ) { dt = "_UNSIGNED INTEGER64"; - } else if ((await func_EndsWith( vname, "&&")) ) { + } else if ((await func_EndsWith( vname, "&&")) ) { dt = "_INTEGER64"; - } else if ((await func_EndsWith( vname, "~&")) ) { + } else if ((await func_EndsWith( vname, "~&")) ) { dt = "_UNSIGNED LONG"; - } else if ((await func_EndsWith( vname, "##")) ) { + } else if ((await func_EndsWith( vname, "##")) ) { dt = "_FLOAT"; - } else if ((await func_EndsWith( vname, "#")) ) { + } else if ((await func_EndsWith( vname, "#")) ) { dt = "DOUBLE"; - } else if ((await func_EndsWith( vname, "~%&")) ) { + } else if ((await func_EndsWith( vname, "~%&")) ) { dt = "_UNSIGNED _OFFSET"; - } else if ((await func_EndsWith( vname, "%&")) ) { + } else if ((await func_EndsWith( vname, "%&")) ) { dt = "_OFFSET"; - } else if ((await func_EndsWith( vname, "&")) ) { + } else if ((await func_EndsWith( vname, "&")) ) { dt = "LONG"; - } else if ((await func_EndsWith( vname, "!")) ) { + } else if ((await func_EndsWith( vname, "!")) ) { dt = "SINGLE"; } else { dt = "SINGLE"; @@ -1889,11 +1923,11 @@ return DataTypeFromName; async function func_EndsWith(s/*STRING*/,finds/*STRING*/) { if (QB.halted()) { return; } var EndsWith = null; - if ((QB.func_Len( finds)) > (QB.func_Len( s)) ) { + if ((QB.func_Len( finds)) > (QB.func_Len( s)) ) { EndsWith = False; return EndsWith; } - if ((QB.func__InStrRev( s, finds)) == (QB.func_Len( s)) -((QB.func_Len( finds)) - 1) ) { + if ((QB.func__InStrRev( s, finds)) == (QB.func_Len( s)) -((QB.func_Len( finds)) - 1) ) { EndsWith = True; } else { EndsWith = False; @@ -1903,11 +1937,11 @@ return EndsWith; async function func_StartsWith(s/*STRING*/,finds/*STRING*/) { if (QB.halted()) { return; } var StartsWith = null; - if ((QB.func_Len( finds)) > (QB.func_Len( s)) ) { + if ((QB.func_Len( finds)) > (QB.func_Len( s)) ) { StartsWith = False; return StartsWith; } - if ((QB.func_InStr( s, finds)) == 1) { + if ((QB.func_InStr( s, finds)) == 1) { StartsWith = True; } else { StartsWith = False; @@ -1918,13 +1952,13 @@ async function func_Join(parts/*STRING*/,startIndex/*INTEGER*/,endIndex/*INTEGER if (QB.halted()) { return; } var Join = null; if ( endIndex == -1) { - endIndex = (QB.func_UBound( parts)); + endIndex = (QB.func_UBound( parts)); } 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; - if ( i != (QB.func_UBound( parts)) ) { + if ( i != (QB.func_UBound( parts)) ) { s = s + delimiter; } } @@ -1944,9 +1978,9 @@ var MethodJS = null; var i = 0; // INTEGER var c = ''; // STRING var a = 0; // INTEGER - 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)); + 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)); if (( a >= 65 && a <= 90) || ( a >= 97 && a <= 122) || ( a >= 48 && a <= 57) || a == 95 || a == 46) { jsname = jsname + c; } @@ -1959,20 +1993,20 @@ if (QB.halted()) { return; } var GXMethodJS = null; var jsname = ''; // STRING var startIdx = 0; // INTEGER - if ((QB.func_InStr( mname, "GXSTR")) == 1) { + if ((QB.func_InStr( mname, "GXSTR")) == 1) { jsname = "GXSTR."; startIdx = 7; } else { jsname = "GX."; startIdx = 3; } - jsname = jsname +(QB.func_LCase((QB.func_Mid( mname, startIdx, 1)))); + jsname = jsname +(QB.func_LCase( (QB.func_Mid( mname, startIdx, 1)))); var i = 0; // INTEGER var c = ''; // STRING var a = 0; // INTEGER - 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)); + 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)); if (( a >= 65 && a <= 90) || ( a >= 97 && a <= 122) || ( a >= 48 && a <= 57) || a == 95 || a == 46) { jsname = jsname + c; } @@ -1985,394 +2019,429 @@ return GXMethodJS; } async function sub_InitGX() { if (QB.halted()) { return; } - await sub_AddSystemType("GXPOSITION" , "x:LONG,y:LONG"); - await sub_AddSystemType("GXDEVICEINPUT" , "deviceId:INTEGER,deviceType:INTEGER,inputType:INTEGER,inputId:INTEGER,inputValue:INTEGER"); - await sub_AddGXConst("GX_FALSE"); - await sub_AddGXConst("GX_TRUE"); - await sub_AddGXConst("GXEVENT_INIT"); - await sub_AddGXConst("GXEVENT_UPDATE"); - await sub_AddGXConst("GXEVENT_DRAWBG"); - await sub_AddGXConst("GXEVENT_DRAWMAP"); - await sub_AddGXConst("GXEVENT_DRAWSCREEN"); - await sub_AddGXConst("GXEVENT_MOUSEINPUT"); - await sub_AddGXConst("GXEVENT_PAINTBEFORE"); - await sub_AddGXConst("GXEVENT_PAINTAFTER"); - await sub_AddGXConst("GXEVENT_COLLISION_TILE"); - await sub_AddGXConst("GXEVENT_COLLISION_ENTITY"); - await sub_AddGXConst("GXEVENT_PLAYER_ACTION"); - await sub_AddGXConst("GXEVENT_ANIMATE_COMPLETE"); - await sub_AddGXConst("GXANIMATE_LOOP"); - await sub_AddGXConst("GXANIMATE_SINGLE"); - await sub_AddGXConst("GXBG_STRETCH"); - await sub_AddGXConst("GXBG_SCROLL"); - await sub_AddGXConst("GXBG_WRAP"); - await sub_AddGXConst("GXKEY_ESC"); - await sub_AddGXConst("GXKEY_1"); - await sub_AddGXConst("GXKEY_2"); - await sub_AddGXConst("GXKEY_3"); - await sub_AddGXConst("GXKEY_4"); - await sub_AddGXConst("GXKEY_5"); - await sub_AddGXConst("GXKEY_6"); - await sub_AddGXConst("GXKEY_7"); - await sub_AddGXConst("GXKEY_8"); - await sub_AddGXConst("GXKEY_9"); - await sub_AddGXConst("GXKEY_0"); - await sub_AddGXConst("GXKEY_DASH"); - await sub_AddGXConst("GXKEY_EQUALS"); - await sub_AddGXConst("GXKEY_BACKSPACE"); - await sub_AddGXConst("GXKEY_TAB"); - await sub_AddGXConst("GXKEY_Q"); - await sub_AddGXConst("GXKEY_W"); - await sub_AddGXConst("GXKEY_E"); - await sub_AddGXConst("GXKEY_R"); - await sub_AddGXConst("GXKEY_T"); - await sub_AddGXConst("GXKEY_Y"); - await sub_AddGXConst("GXKEY_U"); - await sub_AddGXConst("GXKEY_I"); - await sub_AddGXConst("GXKEY_O"); - await sub_AddGXConst("GXKEY_P"); - await sub_AddGXConst("GXKEY_LBRACKET"); - await sub_AddGXConst("GXKEY_RBRACKET"); - await sub_AddGXConst("GXKEY_ENTER"); - await sub_AddGXConst("GXKEY_LCTRL"); - await sub_AddGXConst("GXKEY_A"); - await sub_AddGXConst("GXKEY_S"); - await sub_AddGXConst("GXKEY_D"); - await sub_AddGXConst("GXKEY_F"); - await sub_AddGXConst("GXKEY_G"); - await sub_AddGXConst("GXKEY_H"); - await sub_AddGXConst("GXKEY_J"); - await sub_AddGXConst("GXKEY_K"); - await sub_AddGXConst("GXKEY_L"); - await sub_AddGXConst("GXKEY_SEMICOLON"); - await sub_AddGXConst("GXKEY_QUOTE"); - await sub_AddGXConst("GXKEY_BACKQUOTE"); - await sub_AddGXConst("GXKEY_LSHIFT"); - await sub_AddGXConst("GXKEY_BACKSLASH"); - await sub_AddGXConst("GXKEY_Z"); - await sub_AddGXConst("GXKEY_X"); - await sub_AddGXConst("GXKEY_C"); - await sub_AddGXConst("GXKEY_V"); - await sub_AddGXConst("GXKEY_B"); - await sub_AddGXConst("GXKEY_N"); - await sub_AddGXConst("GXKEY_M"); - await sub_AddGXConst("GXKEY_COMMA"); - await sub_AddGXConst("GXKEY_PERIOD"); - await sub_AddGXConst("GXKEY_SLASH"); - await sub_AddGXConst("GXKEY_RSHIFT"); - await sub_AddGXConst("GXKEY_NUMPAD_MULTIPLY"); - await sub_AddGXConst("GXKEY_SPACEBAR"); - await sub_AddGXConst("GXKEY_CAPSLOCK"); - await sub_AddGXConst("GXKEY_F1"); - await sub_AddGXConst("GXKEY_F2"); - await sub_AddGXConst("GXKEY_F3"); - await sub_AddGXConst("GXKEY_F4"); - await sub_AddGXConst("GXKEY_F5"); - await sub_AddGXConst("GXKEY_F6"); - await sub_AddGXConst("GXKEY_F7"); - await sub_AddGXConst("GXKEY_F8"); - await sub_AddGXConst("GXKEY_F9"); - await sub_AddGXConst("GXKEY_PAUSE"); - await sub_AddGXConst("GXKEY_SCRLK"); - await sub_AddGXConst("GXKEY_NUMPAD_7"); - await sub_AddGXConst("GXKEY_NUMPAD_8"); - await sub_AddGXConst("GXKEY_NUMPAD_9"); - await sub_AddGXConst("GXKEY_NUMPAD_MINUS"); - await sub_AddGXConst("GXKEY_NUMPAD_4"); - await sub_AddGXConst("GXKEY_NUMPAD_5"); - await sub_AddGXConst("GXKEY_NUMPAD_6"); - await sub_AddGXConst("GXKEY_NUMPAD_PLUS"); - await sub_AddGXConst("GXKEY_NUMPAD_1"); - await sub_AddGXConst("GXKEY_NUMPAD_2"); - await sub_AddGXConst("GXKEY_NUMPAD_3"); - await sub_AddGXConst("GXKEY_NUMPAD_0"); - await sub_AddGXConst("GXKEY_NUMPAD_PERIOD"); - await sub_AddGXConst("GXKEY_F11"); - await sub_AddGXConst("GXKEY_F12"); - await sub_AddGXConst("GXKEY_NUMPAD_ENTER"); - await sub_AddGXConst("GXKEY_RCTRL"); - await sub_AddGXConst("GXKEY_NUMPAD_DIVIDE"); - await sub_AddGXConst("GXKEY_NUMLOCK"); - await sub_AddGXConst("GXKEY_HOME"); - await sub_AddGXConst("GXKEY_UP"); - await sub_AddGXConst("GXKEY_PAGEUP"); - await sub_AddGXConst("GXKEY_LEFT"); - await sub_AddGXConst("GXKEY_RIGHT"); - await sub_AddGXConst("GXKEY_END"); - await sub_AddGXConst("GXKEY_DOWN"); - await sub_AddGXConst("GXKEY_PAGEDOWN"); - await sub_AddGXConst("GXKEY_INSERT"); - await sub_AddGXConst("GXKEY_DELETE"); - await sub_AddGXConst("GXKEY_LWIN"); - await sub_AddGXConst("GXKEY_RWIN"); - await sub_AddGXConst("GXKEY_MENU"); - await sub_AddGXConst("GXACTION_MOVE_LEFT"); - await sub_AddGXConst("GXACTION_MOVE_RIGHT"); - await sub_AddGXConst("GXACTION_MOVE_UP"); - await sub_AddGXConst("GXACTION_MOVE_DOWN"); - await sub_AddGXConst("GXACTION_JUMP"); - await sub_AddGXConst("GXACTION_JUMP_RIGHT"); - await sub_AddGXConst("GXACTION_JUMP_LEFT"); - await sub_AddGXConst("GXSCENE_FOLLOW_NONE"); - await sub_AddGXConst("GXSCENE_FOLLOW_ENTITY_CENTER"); - await sub_AddGXConst("GXSCENE_FOLLOW_ENTITY_CENTER_X"); - await sub_AddGXConst("GXSCENE_FOLLOW_ENTITY_CENTER_Y"); - await sub_AddGXConst("GXSCENE_FOLLOW_ENTITY_CENTER_X_POS"); - await sub_AddGXConst("GXSCENE_FOLLOW_ENTITY_CENTER_X_NEG"); - await sub_AddGXConst("GXSCENE_CONSTRAIN_NONE"); - await sub_AddGXConst("GXSCENE_CONSTRAIN_TO_MAP"); - await sub_AddGXConst("GXFONT_DEFAULT"); - await sub_AddGXConst("GXFONT_DEFAULT_BLACK"); - await sub_AddGXConst("GXDEVICE_KEYBOARD"); - await sub_AddGXConst("GXDEVICE_MOUSE"); - await sub_AddGXConst("GXDEVICE_CONTROLLER"); - await sub_AddGXConst("GXDEVICE_BUTTON"); - await sub_AddGXConst("GXDEVICE_AXIS"); - await sub_AddGXConst("GXDEVICE_WHEEL"); - await sub_AddGXConst("GXTYPE_ENTITY"); - await sub_AddGXConst("GXTYPE_FONT"); - await sub_AddGXMethod("SUB" , "GXSleep" , True); - await sub_AddGXMethod("FUNCTION" , "GXMouseX" , False); - await sub_AddGXMethod("FUNCTION" , "GXMouseY" , False); - await sub_AddGXMethod("FUNCTION" , "GXSoundLoad" , 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); + 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); } async function sub_InitQBMethods() { if (QB.halted()) { return; } - 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); - 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("FUNCTION" , "_FreeImage" , False); - 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); - await sub_AddQBMethod("FUNCTION" , "_Red" , False); - await sub_AddQBMethod("FUNCTION" , "_Red32" , False); - await sub_AddQBMethod("FUNCTION" , "_RGB" , False); - await sub_AddQBMethod("FUNCTION" , "_RGBA" , False); - await sub_AddQBMethod("FUNCTION" , "_RGB32" , False); - await sub_AddQBMethod("FUNCTION" , "_RGBA32" , False); - await sub_AddQBMethod("FUNCTION" , "_Round" , False); - await sub_AddQBMethod("FUNCTION" , "_ScreenExists" , False); - await sub_AddQBMethod("SUB" , "_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); - 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" , "Exp" , False); - await sub_AddQBMethod("FUNCTION" , "Fix" , False); - await sub_AddQBMethod("SUB" , "Input" , True); - await sub_AddQBMethod("FUNCTION" , "InKey$" , False); - await sub_AddQBMethod("FUNCTION" , "InStr" , False); - await sub_AddQBMethod("FUNCTION" , "Int" , False); - await sub_AddQBMethod("FUNCTION" , "LBound" , False); - await sub_AddQBMethod("FUNCTION" , "Left$" , False); - await sub_AddQBMethod("FUNCTION" , "LCase$" , False); - await sub_AddQBMethod("FUNCTION" , "Len" , False); - await sub_AddQBMethod("SUB" , "Line" , False); - await sub_AddQBMethod("SUB" , "Locate" , False); - await sub_AddQBMethod("FUNCTION" , "Log" , False); - await sub_AddQBMethod("FUNCTION" , "LTrim$" , False); - await sub_AddQBMethod("FUNCTION" , "Mid$" , False); - 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" , "Sqr" , False); - await sub_AddQBMethod("FUNCTION" , "Str$" , False); - await sub_AddQBMethod("SUB" , "Swap" , False); - await sub_AddQBMethod("FUNCTION" , "Tan" , False); - await sub_AddQBMethod("FUNCTION" , "Timer" , False); - await sub_AddQBMethod("FUNCTION" , "UBound" , False); - await sub_AddQBMethod("FUNCTION" , "UCase$" , False); - await sub_AddQBMethod("FUNCTION" , "Val" , False); - await sub_AddSystemType("FETCHRESPONSE" , "ok:INTEGER,status:INTEGER,statusText:STRING,text:STRING"); - await sub_AddQBMethod("FUNCTION" , "Fetch" , True); - await sub_AddQBMethod("FUNCTION" , "FromJSON" , False); - await sub_AddQBMethod("FUNCTION" , "ToJSON" , False); + 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); + 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); + 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); + 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); + 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); + 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", "Cvi", False); + await sub_AddQBMethod( "FUNCTION", "Cvl", False); + await sub_AddQBMethod( "FUNCTION", "Exp", False); + await sub_AddQBMethod( "FUNCTION", "Fix", False); + await sub_AddQBMethod( "SUB", "Input", True); + await sub_AddQBMethod( "FUNCTION", "InKey$", False); + await sub_AddQBMethod( "FUNCTION", "InStr", False); + await sub_AddQBMethod( "FUNCTION", "Int", False); + await sub_AddQBMethod( "FUNCTION", "LBound", False); + await sub_AddQBMethod( "FUNCTION", "Left$", False); + await sub_AddQBMethod( "FUNCTION", "LCase$", False); + await sub_AddQBMethod( "FUNCTION", "Len", False); + await sub_AddQBMethod( "SUB", "Line", False); + await sub_AddQBMethod( "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( "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", "Timer", False); + await sub_AddQBMethod( "FUNCTION", "UBound", False); + await sub_AddQBMethod( "FUNCTION", "UCase$", False); + await sub_AddQBMethod( "FUNCTION", "Val", False); + await sub_AddQBConst( "LOCAL"); + await sub_AddQBConst( "SESSION"); + await sub_AddSystemType( "FETCHRESPONSE", "ok:INTEGER,status:INTEGER,statusText:STRING,text:STRING"); + await sub_AddQBMethod( "FUNCTION", "Fetch", True); + await sub_AddQBMethod( "FUNCTION", "FromJSON", False); + await sub_AddQBMethod( "FUNCTION", "ToJSON", False); + await sub_AddQBMethod( "SUB", "Alert", False); + await sub_AddQBMethod( "FUNCTION", "Confirm", False); + await sub_AddQBMethod( "SUB", "DomAdd", False); + await sub_AddQBMethod( "SUB", "DomCreate", False); + await sub_AddQBMethod( "FUNCTION", "DomContainer", False); + await sub_AddQBMethod( "FUNCTION", "DomCreate", False); + await sub_AddQBMethod( "SUB", "DomEvent", False); + await sub_AddQBMethod( "FUNCTION", "DomGet", False); + await sub_AddQBMethod( "FUNCTION", "DomGetImage", False); + await sub_AddQBMethod( "SUB", "DomRemove", False); + await sub_AddQBMethod( "FUNCTION", "Prompt", False); + await sub_AddQBMethod( "SUB", "StorageClear", False); + await sub_AddQBMethod( "FUNCTION", "StorageGet", False); + await sub_AddQBMethod( "FUNCTION", "StorageKey", False); + await sub_AddQBMethod( "FUNCTION", "StorageLength", False); + await sub_AddQBMethod( "SUB", "StorageSet", False); + await sub_AddQBMethod( "SUB", "StorageRemove", False); } this.compile = async function(src) { await sub_QBToJS(src, TEXT); diff --git a/tools/qb2js.bas b/tools/qb2js.bas index 35a5943..269c1f4 100644 --- a/tools/qb2js.bas +++ b/tools/qb2js.bas @@ -399,7 +399,11 @@ Sub ConvertLines (firstLine As Integer, lastLine As Integer, functionName As Str If FindMethod(subname, m, "SUB") Then Dim subargs As String - subargs = Mid$(subline, Len(subname) + 2, Len(subline) - Len(subname) - 2) + If subname = subline Then + subargs = "" + Else + subargs = Mid$(subline, Len(subname) + 2, Len(subline) - Len(subname) - 2) + End If js = ConvertSub(m, subargs) Else AddWarning i, "Missing Sub [" + subname + "], ignoring Call command" @@ -495,7 +499,8 @@ Function ConvertSub$ (m As Method, args As String) js = CallMethod(m) + "(" + ConvertPutImage(args) + ");" Else - js = CallMethod(m) + "(" + ConvertExpression(args) + ");" + 'js = CallMethod(m) + "(" + ConvertExpression(args) + ");" + js = CallMethod(m) + "(" + ConvertMethodParams(args) + ");" End If ConvertSub = js @@ -1147,7 +1152,8 @@ Function ConvertExpression$ (ex As String) js = js + fneg + "QB.arrayValue(" + bvar.jsname + ", [" + ConvertExpression(ex2) + "]).value" End If ElseIf FindMethod(word, m, "FUNCTION") Then - js = js + fneg + "(" + CallMethod(m) + "(" + ConvertExpression(ex2) + "))" + 'js = js + fneg + "(" + CallMethod(m) + "(" + ConvertExpression(ex2) + "))" + js = js + fneg + "(" + CallMethod(m) + "(" + ConvertMethodParams(ex2) + "))" Else If _Trim$(word) <> "" Then AddWarning i, "Missing function or array [" + word + "]" ' nested condition @@ -1164,6 +1170,24 @@ Function ConvertExpression$ (ex As String) ConvertExpression = js End Function +' Handle optional parameters +Function ConvertMethodParams$ (args As String) + Dim js As String + ReDim params(0) As String + Dim argc As Integer + argc = ListSplit(args, params()) + Dim i As Integer + For i = 1 To argc + If i > 1 Then js = js + "," + If _Trim$(params(i)) = "" Then + js = js + " undefined" + Else + js = js + " " + ConvertExpression(params(i)) + End If + Next i + ConvertMethodParams = js +End Function + Function CallMethod$ (m As Method) Dim js As String If m.sync Then js = "await " @@ -1889,6 +1913,15 @@ Sub AddGXConst (vname As String) AddVariable v, globalVars() End Sub +Sub AddQBConst (vname As String) + Dim v As Variable + v.type = "CONST" + v.name = vname + v.jsname = "QB." + vname + v.isConst = True + AddVariable v, globalVars() +End Sub + Sub AddGlobal (vname As String, vtype As String, arraySize As Integer) Dim v As Variable v.type = vtype @@ -2433,7 +2466,7 @@ Sub InitQBMethods AddQBMethod "FUNCTION", "_Display", False AddQBMethod "SUB", "_Display", False AddQBMethod "FUNCTION", "_FontWidth", False - AddQBMethod "FUNCTION", "_FreeImage", False + AddQBMethod "SUB", "_FreeImage", False AddQBMethod "FUNCTION", "_Green", False AddQBMethod "FUNCTION", "_Green32", False AddQBMethod "FUNCTION", "_Height", False @@ -2454,12 +2487,22 @@ Sub InitQBMethods AddQBMethod "SUB", "_PutImage", False AddQBMethod "FUNCTION", "_Red", False AddQBMethod "FUNCTION", "_Red32", False + AddQBMethod "FUNCTION", "_Resize", False + AddQBMethod "FUNCTION", "_ResizeHeight", False + AddQBMethod "FUNCTION", "_ResizeWidth", False AddQBMethod "FUNCTION", "_RGB", False AddQBMethod "FUNCTION", "_RGBA", False AddQBMethod "FUNCTION", "_RGB32", False AddQBMethod "FUNCTION", "_RGBA32", False AddQBMethod "FUNCTION", "_Round", False AddQBMethod "FUNCTION", "_ScreenExists", False + AddQBMethod "SUB", "_SndClose", False + AddQBMethod "FUNCTION", "_SndOpen", False + AddQBMethod "SUB", "_SndPlay", False + AddQBMethod "SUB", "_SndLoop", False + AddQBMethod "SUB", "_SndPause", False + AddQBMethod "SUB", "_SndStop", False + AddQBMethod "SUB", "_SndVol", False AddQBMethod "SUB", "_Title", False AddQBMethod "FUNCTION", "_Trim", False AddQBMethod "FUNCTION", "_Width", False @@ -2475,6 +2518,8 @@ Sub InitQBMethods AddQBMethod "SUB", "Color", False AddQBMethod "FUNCTION", "Command$", False AddQBMethod "FUNCTION", "Cos", False + AddQBMethod "FUNCTION", "Cvi", False + AddQBMethod "FUNCTION", "Cvl", False AddQBMethod "FUNCTION", "Exp", False AddQBMethod "FUNCTION", "Fix", False AddQBMethod "SUB", "Input", True @@ -2490,6 +2535,8 @@ Sub InitQBMethods AddQBMethod "FUNCTION", "Log", False AddQBMethod "FUNCTION", "LTrim$", False AddQBMethod "FUNCTION", "Mid$", False + AddQBMethod "FUNCTION", "Mki$", False + AddQBMethod "FUNCTION", "Mkl$", False AddQBMethod "SUB", "Print", True AddQBMethod "SUB", "PSet", False AddQBMethod "FUNCTION", "Right$", False @@ -2499,6 +2546,8 @@ Sub InitQBMethods AddQBMethod "FUNCTION", "Sgn", False AddQBMethod "FUNCTION", "Sin", False AddQBMethod "SUB", "Sleep", True + AddQBMethod "FUNCTION", "Space", False + AddQBMethod "FUNCTION", "String", False AddQBMethod "FUNCTION", "Sqr", False AddQBMethod "FUNCTION", "Str$", False AddQBMethod "SUB", "Swap", False @@ -2508,12 +2557,34 @@ Sub InitQBMethods AddQBMethod "FUNCTION", "UCase$", False AddQBMethod "FUNCTION", "Val", False + ' QBJS-only language features ' -------------------------------------------------------------------------------- + AddQBConst "LOCAL" + AddQBConst "SESSION" + AddSystemType "FETCHRESPONSE", "ok:INTEGER,status:INTEGER,statusText:STRING,text:STRING" AddQBMethod "FUNCTION", "Fetch", True AddQBMethod "FUNCTION", "FromJSON", False AddQBMethod "FUNCTION", "ToJSON", False + + AddQBMethod "SUB", "Alert", False + AddQBMethod "FUNCTION", "Confirm", False + AddQBMethod "SUB", "DomAdd", False + AddQBMethod "SUB", "DomCreate", False + AddQBMethod "FUNCTION", "DomContainer", False + AddQBMethod "FUNCTION", "DomCreate", False + AddQBMethod "SUB", "DomEvent", False + AddQBMethod "FUNCTION", "DomGet", False + AddQBMethod "FUNCTION", "DomGetImage", False + AddQBMethod "SUB", "DomRemove", False + AddQBMethod "FUNCTION", "Prompt", False + AddQBMethod "SUB", "StorageClear", False + AddQBMethod "FUNCTION", "StorageGet", False + AddQBMethod "FUNCTION", "StorageKey", False + AddQBMethod "FUNCTION", "StorageLength", False + AddQBMethod "SUB", "StorageSet", False + AddQBMethod "SUB", "StorageRemove", False End Sub '$include: '../../gx/gx/gx_str.bm'