From f12cef7bfb2b75048f92c1f21ef9120120770189 Mon Sep 17 00:00:00 2001 From: William Barnes Date: Tue, 26 Apr 2022 20:29:34 -0400 Subject: [PATCH 1/3] Implemented _Cosh, _Sinh. --- codemirror/qb-lang.js | 6 +++--- qb.js | 12 ++++++++++++ qb2js.js | 4 ++++ tools/qb2js.bas | 4 ++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/codemirror/qb-lang.js b/codemirror/qb-lang.js index 419f5bc..b65da59 100644 --- a/codemirror/qb-lang.js +++ b/codemirror/qb-lang.js @@ -35,11 +35,11 @@ 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', '_continue', '_copyimage', '_delay', '_dest', '_dest', + var builtinFuncsWords = ['_alpha', '_alpha32', '_atan2', '_autodisplay', '_blue', '_blue32', '_continue', '_copyimage', '_cosh', '_d2r', '_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', + '_putimage', '_r2d', '_red', '_red32', '_resize', '_resizewidth', '_resizeheight', '_rgb', '_rgba', '_rgb32', '_rgba32', '_round', + '_screenexists', '_sinh', '_sndclose', '_sndopen', '_sndplay', '_sndloop', '_sndpause', '_sndstop', '_sndvol', '_title', '_trim', '_width', 'abs', 'asc', 'atn', 'chr', 'circle', 'cls', 'color', 'command', 'cos', 'cvi', 'cvl', 'exp', 'fix', 'hex', 'input', 'inkey', 'instr', 'int', 'lbound', 'left', 'lcase', 'len', 'line', 'locate', 'log', 'ltrim', 'mid', 'mki', 'mkl', 'oct', 'paint', 'point', 'preset', 'print', 'pset', 'right', 'rtrim', 'rnd', 'screen', 'shared', 'sgn', 'sin', 'sleep', 'space', 'sqr', 'str', 'swap', 'tan', diff --git a/qb.js b/qb.js index 79e9ece..adbcb47 100644 --- a/qb.js +++ b/qb.js @@ -163,6 +163,10 @@ var QB = new function() { return destImageId; }; + this.func__Cosh = function(x) { + return (Math.exp(x)+Math.exp(-x))/2; + }; + this.sub__Delay = async function(seconds) { await GX.sleep(seconds*1000); }; @@ -471,6 +475,10 @@ var QB = new function() { return true; }; + this.func__Sinh = function(x) { + return (Math.exp(x)-Math.exp(-x))/2; + }; + this.sub__SndClose = function(sid) { GX.soundClose(sid); }; @@ -882,6 +890,10 @@ var QB = new function() { y0 = screen.lastY + y0; } + if (borderColor == undefined) { + borderColor = fillColor; + } + var pixelStack = [[Math.floor(x0), Math.floor(y0)]]; while (pixelStack.length) { diff --git a/qb2js.js b/qb2js.js index d03a09b..df4905c 100644 --- a/qb2js.js +++ b/qb2js.js @@ -2500,6 +2500,8 @@ if (QB.halted()) { return; } await sub_AddQBMethod( "FUNCTION", "_Blue", False); await sub_AddQBMethod( "FUNCTION", "_Blue32", False); await sub_AddQBMethod( "FUNCTION", "_CopyImage", False); + await sub_AddQBMethod( "FUNCTION", "_Cosh", False); + await sub_AddQBMethod( "FUNCTION", "_D2R", False); await sub_AddQBMethod( "SUB", "_Delay", True); await sub_AddQBMethod( "FUNCTION", "_Dest", False); await sub_AddQBMethod( "SUB", "_Dest", False); @@ -2525,6 +2527,7 @@ if (QB.halted()) { return; } await sub_AddQBMethod( "SUB", "_PrintString", False); await sub_AddQBMethod( "FUNCTION", "_PrintWidth", False); await sub_AddQBMethod( "SUB", "_PutImage", False); + await sub_AddQBMethod( "FUNCTION", "_R2D", False); await sub_AddQBMethod( "FUNCTION", "_Red", False); await sub_AddQBMethod( "FUNCTION", "_Red32", False); await sub_AddQBMethod( "FUNCTION", "_Resize", False); @@ -2536,6 +2539,7 @@ if (QB.halted()) { return; } await sub_AddQBMethod( "FUNCTION", "_RGBA32", False); await sub_AddQBMethod( "FUNCTION", "_Round", False); await sub_AddQBMethod( "FUNCTION", "_ScreenExists", False); + await sub_AddQBMethod( "FUNCTION", "_Sinh", False); await sub_AddQBMethod( "SUB", "_SndClose", False); await sub_AddQBMethod( "FUNCTION", "_SndOpen", False); await sub_AddQBMethod( "SUB", "_SndPlay", False); diff --git a/tools/qb2js.bas b/tools/qb2js.bas index 70560ce..0670c2c 100644 --- a/tools/qb2js.bas +++ b/tools/qb2js.bas @@ -2658,6 +2658,8 @@ Sub InitQBMethods AddQBMethod "FUNCTION", "_Blue", False AddQBMethod "FUNCTION", "_Blue32", False AddQBMethod "FUNCTION", "_CopyImage", False + AddQBMethod "FUNCTION", "_Cosh", False + AddQBMethod "FUNCTION", "_D2R", False AddQBMethod "SUB", "_Delay", True AddQBMethod "FUNCTION", "_Dest", False AddQBMethod "SUB", "_Dest", False @@ -2683,6 +2685,7 @@ Sub InitQBMethods AddQBMethod "SUB", "_PrintString", False AddQBMethod "FUNCTION", "_PrintWidth", False AddQBMethod "SUB", "_PutImage", False + AddQBMethod "FUNCTION", "_R2D", False AddQBMethod "FUNCTION", "_Red", False AddQBMethod "FUNCTION", "_Red32", False AddQBMethod "FUNCTION", "_Resize", False @@ -2694,6 +2697,7 @@ Sub InitQBMethods AddQBMethod "FUNCTION", "_RGBA32", False AddQBMethod "FUNCTION", "_Round", False AddQBMethod "FUNCTION", "_ScreenExists", False + AddQBMethod "FUNCTION", "_Sinh", False AddQBMethod "SUB", "_SndClose", False AddQBMethod "FUNCTION", "_SndOpen", False AddQBMethod "SUB", "_SndPlay", False From b233809f6c579c223ea3ee54391989e416ecd41e Mon Sep 17 00:00:00 2001 From: William Barnes Date: Tue, 26 Apr 2022 20:33:35 -0400 Subject: [PATCH 2/3] Implemented _D2R, _R2D. --- qb.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/qb.js b/qb.js index adbcb47..ab8359c 100644 --- a/qb.js +++ b/qb.js @@ -167,6 +167,10 @@ var QB = new function() { return (Math.exp(x)+Math.exp(-x))/2; }; + this.func__D2R = function(x) { + return x*Math.PI/180; + }; + this.sub__Delay = async function(seconds) { await GX.sleep(seconds*1000); }; @@ -413,6 +417,10 @@ var QB = new function() { } } + this.func__R2D = function(x) { + return x*180/Math.PI; + }; + this.func__Red = function(rgb, imageHandle) { // TODO: implement corresponding logic when an image handle is supplied (maybe) return _color(rgb).r; From ef8dd31757a32c794266b453881d85634ec88aee Mon Sep 17 00:00:00 2001 From: William Barnes Date: Wed, 27 Apr 2022 12:26:17 -0400 Subject: [PATCH 3/3] Improved Paint color matching, created _strokeThickness constant. --- .vs/qbjs/v17/.suo | Bin 0 -> 14336 bytes .vs/slnx.sqlite | Bin 0 -> 90112 bytes .vs/slnx.sqlite-journal | Bin 0 -> 21032 bytes qb.js | 9 ++++++--- 4 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 .vs/qbjs/v17/.suo create mode 100644 .vs/slnx.sqlite create mode 100644 .vs/slnx.sqlite-journal diff --git a/.vs/qbjs/v17/.suo b/.vs/qbjs/v17/.suo new file mode 100644 index 0000000000000000000000000000000000000000..c6ed25a9e4315788a2420aa23501ec719f05536b GIT binary patch literal 14336 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