1
1
Fork 0
mirror of https://github.com/boxgaming/qbjs.git synced 2024-09-19 20:14:58 +00:00

added support for misc low-hanging fruit keywords (#78)

This commit is contained in:
boxgaming 2023-06-19 17:48:17 -05:00
parent 2a0b72396d
commit 1aa1ee17a6
4 changed files with 125 additions and 16 deletions

View file

@ -36,21 +36,21 @@ CodeMirror.defineMode("qbjs", function(conf, parserConf) {
var atomWords = ['true', 'false', 'nothing', 'empty', 'null']; var atomWords = ['true', 'false', 'nothing', 'empty', 'null'];
var builtinFuncsWords = ['_acos', '_acosh', '_alpha', '_alpha32', '_asin', '_asinh', '_atan2', '_atanh', '_autodisplay', var builtinFuncsWords = ['_acos', '_acosh', '_alpha', '_alpha32', '_asin', '_asinh', '_atan2', '_atanh', '_autodisplay',
'_blue', '_blue32', '_ceil', '_continue', '_copyimage', '_cosh', '_coth', '_csch', '_backgroundcolor', '_defaultcolor', '_backgroundcolor', '_blue', '_blue32', '_ceil', '_commandcount', '_continue', '_copyimage',
'_d2g', '_d2r', '_delay', '_dest', '_display', '_font', '_loadfont', '_fontwidth', '_fontheight', '_freeimage', '_fullscreen', '_cosh', '_coth', '_csch', '_cwd', '_defaultcolor', '_d2g', '_d2r', '_desktopwidth', '_desktopheight',
'_g2d', '_g2r', '_green', '_green32', '_height', '_hypot', '_delay', '_dest', '_dir', '_direxists', '_display', '_echo', '_fileexists', '_font', '_fontwidth', '_fontheight',
'_instrrev', '_limit', '_keyclear', '_keydown', '_keyhit', '_loadimage', '_freeimage', '_fullscreen', '_g2d', '_g2r', '_green', '_green32', '_height', '_hypot',
'_mousebutton', '_mouseinput', '_mousewheel', '_mousex', '_mousey', '_newimage', '_instrrev', '_limit', '_keyclear', '_keydown', '_keyhit', '_loadfont', '_loadimage',
'_palettecolor', '_pi', '_printstring', '_printwidth', '_printmode', '_putimage', '_mousebutton', '_mousehide', '_mouseinput', '_mouseshow', '_mousewheel', '_mousex', '_mousey',
'_newimage', '_os', '_palettecolor', '_pi', '_printstring', '_printwidth', '_printmode', '_putimage',
'_r2d', '_r2g', '_readbit', '_red', '_red32', '_resetbit', '_resize', '_resizewidth', '_r2d', '_r2g', '_readbit', '_red', '_red32', '_resetbit', '_resize', '_resizewidth',
'_resizeheight', '_rgb', '_rgba', '_rgb32', '_rgba32', '_round', '_resizeheight', '_rgb', '_rgba', '_rgb32', '_rgba32', '_round',
'_screenexists', '_sech', '_setbit', '_shl', '_shr', '_sinh', '_source', '_sndclose', '_sndopen', '_screenexists', '_screenmove', '_screenx', '_screeny', '_sech', '_setbit', '_shl', '_shr', '_sinh', '_source',
'_sndplay', '_sndloop', '_sndpause', '_sndstop', '_sndvol', '_strcmp', '_stricmp', '_sndclose', '_sndopen', '_sndplay', '_sndloop', '_sndpause', '_sndstop', '_sndvol', '_startdir',
'_tanh', '_title', '_trim', '_togglebit', '_width', '_strcmp', '_stricmp', '_tanh', '_title', '_trim', '_togglebit', '_width',
'_cwd', '_startdir', '_os', '_direxists', '_fileexists',
'abs', 'asc', 'atn', 'beep', 'abs', 'asc', 'atn', 'beep',
'chr', 'cdbl', 'cint', 'clng', 'csng', 'circle', 'cls', 'color', 'command', 'cos', 'cvi', 'cvl', 'chr', 'cdbl', 'cint', 'clng', 'csng', 'circle', 'cls', 'color', 'command', 'cos', 'cvi', 'cvl',
'data', 'date', 'draw', 'exp', 'fix', 'hex', 'input', 'inkey', 'instr', 'int', 'data', 'date', 'draw', 'environ', 'error', 'exp', 'fix', 'hex', 'input', 'inkey', 'instr', 'int',
'lbound', 'left', 'lcase', 'len', 'line', 'locate', 'log', 'ltrim', 'mid', 'mki', 'mkl', 'lbound', 'left', 'lcase', 'len', 'line', 'locate', 'log', 'ltrim', 'mid', 'mki', 'mkl',
'oct', 'paint', 'point', 'preset', 'print', 'pset', 'oct', 'paint', 'point', 'preset', 'print', 'pset',
'right', 'rtrim', 'randomize', 'read', 'restore', 'rnd', 'right', 'rtrim', 'randomize', 'read', 'restore', 'rnd',

91
qb.js
View file

@ -291,6 +291,10 @@ var QB = new function() {
return Math.ceil(x); return Math.ceil(x);
}; };
this.func__CommandCount = function() {
return 0;
};
this.func__CopyImage = function(srcImageId) { this.func__CopyImage = function(srcImageId) {
var srcCanvas = _images[srcImageId].canvas; var srcCanvas = _images[srcImageId].canvas;
var destImageId = QB.func__NewImage(srcCanvas.width, srcCanvas.height); var destImageId = QB.func__NewImage(srcCanvas.width, srcCanvas.height);
@ -334,6 +338,14 @@ var QB = new function() {
await GX.sleep(seconds*1000); await GX.sleep(seconds*1000);
}; };
this.func__DesktopHeight = function() {
return window.screen.height * window.devicePixelRatio;
};
this.func__DesktopWidth = function() {
return window.screen.width * window.devicePixelRatio;
};
this.func__Dest = function() { this.func__Dest = function() {
return _activeImage; return _activeImage;
}; };
@ -342,6 +354,10 @@ var QB = new function() {
_activeImage = imageId; _activeImage = imageId;
}; };
this.func__Dir = function(folder) {
return "./";
};
this.func__DirExists = function(path) { this.func__DirExists = function(path) {
var vfs = GX.vfs(); var vfs = GX.vfs();
var dir = vfs.getNode(path, GX.vfsCwd()); var dir = vfs.getNode(path, GX.vfsCwd());
@ -359,6 +375,10 @@ var QB = new function() {
// The canvas handles this for us, this method is included for compatibility // The canvas handles this for us, this method is included for compatibility
}; };
this.sub__Echo = function(msg) {
console.log(msg);
};
this.func__FileExists = function(path) { this.func__FileExists = function(path) {
var vfs = GX.vfs(); var vfs = GX.vfs();
var file = vfs.getNode(path, GX.vfsCwd()); var file = vfs.getNode(path, GX.vfsCwd());
@ -607,6 +627,37 @@ var QB = new function() {
return GX._mouseInput(); return GX._mouseInput();
}; };
this.sub__MouseHide = function() {
var canvas = _images[0].canvas;
canvas.style.cursor = "none";
};
this.sub__MouseShow = function(style) {
if (style == undefined) {
style = "DEFAULT";
}
else {
style = style.trim().toUpperCase();
}
var canvas = _images[0].canvas;
if (style == "LINK") { canvas.style.cursor = "pointer"; }
else if (style == "TEXT") { canvas.style.cursor = "text"; }
else if (style == "CROSSHAIR") { canvas.style.cursor = "crosshair"; }
else if (style == "VERTICAL") { canvas.style.cursor = "ns-resize"; }
else if (style == "HORIZONTAL") { canvas.style.cursor = "ew-resize"; }
else if (style == "TOPLEFT_BOTTOMRIGHT") { canvas.style.cursor = "nwse-resize"; }
else if (style == "TOPRIGHT_BOTTOMLEFT") { canvas.style.cursor = "nesw-resize"; }
else if (style == "PROGRESS") { canvas.style.cursor = "progress"; }
else if (style == "WAIT") { canvas.style.cursor = "wait"; }
else if (style == "MOVE") { canvas.style.cursor = "move"; }
else if (style == "NOT_ALLOWED") { canvas.style.cursor = "not-allowed"; }
else if (style == "GRAB") { canvas.style.cursor = "grab"; }
else if (style == "GRABBING") { canvas.style.cursor = "grabbing"; }
else if (style == "ZOOM_IN") { canvas.style.cursor = "zoom-in"; }
else if (style == "ZOOM_OUT") { canvas.style.cursor = "zoom-out"; }
else { canvas.style.cursor = "default"; }
};
this.func__MouseX = function() { this.func__MouseX = function() {
return GX.mouseX(); return GX.mouseX();
}; };
@ -917,6 +968,18 @@ var QB = new function() {
return true; return true;
}; };
this.sub__ScreenMove = function() {
/* no-op: included for compatibility */
};
this.func__ScreenX = function() {
return window.screenX;
};
this.func__ScreenY = function() {
return window.screenY;
};
this.func__Sech = function(x) { this.func__Sech = function(x) {
return 1/Math.cosh(x); return 1/Math.cosh(x);
}; };
@ -991,6 +1054,10 @@ var QB = new function() {
return Math.tanh(x); return Math.tanh(x);
}; };
this.func__Title = function() {
return document.title;
};
this.sub__Title = function(title) { this.sub__Title = function(title) {
document.title = title; document.title = title;
}; };
@ -1139,7 +1206,7 @@ var QB = new function() {
this.func_Csrlin = function() { this.func_Csrlin = function() {
return _locY + 1; return _locY + 1;
} };
this.func_Cvi = function(numString) { this.func_Cvi = function(numString) {
var result = 0; var result = 0;
@ -1148,7 +1215,7 @@ var QB = new function() {
result+=numString.charCodeAt(1-i)<<(8*i); result+=numString.charCodeAt(1-i)<<(8*i);
} }
return result; return result;
} };
this.func_Cvl = function(numString) { this.func_Cvl = function(numString) {
var result = 0; var result = 0;
@ -1157,7 +1224,7 @@ var QB = new function() {
result+=numString.charCodeAt(3-i)<<(8*i); result+=numString.charCodeAt(3-i)<<(8*i);
} }
return result; return result;
} };
this.func_Date = function() { this.func_Date = function() {
var today = new Date(); var today = new Date();
@ -1165,7 +1232,7 @@ var QB = new function() {
var mm = String(today.getMonth() + 1).padStart(2, '0'); var mm = String(today.getMonth() + 1).padStart(2, '0');
var yyyy = today.getFullYear(); var yyyy = today.getFullYear();
return mm + '-' + dd + '-' + yyyy; return mm + '-' + dd + '-' + yyyy;
} };
this.sub_Draw = function(t) { this.sub_Draw = function(t) {
@ -1472,6 +1539,19 @@ var QB = new function() {
screen.lastY = cursY; screen.lastY = cursY;
}; };
this.func_Environ = function(param) {
/* no-op: included for compatibility */
return "";
};
this.sub_Environ = function(value) {
/* no-op: included for compatibility */
};
this.sub_Error = function(errorNumber) {
throw new Error("Unhandled Error #" + errorNumber);
};
this.func_Exp = function(value) { this.func_Exp = function(value) {
return Math.exp(value); return Math.exp(value);
}; };
@ -2747,6 +2827,7 @@ var QB = new function() {
_images[0] = { canvas: GX.canvas(), ctx: GX.ctx(), lastX: 0, lastY: 0 }; _images[0] = { canvas: GX.canvas(), ctx: GX.ctx(), lastX: 0, lastY: 0 };
_images[0].lastX = _images[0].canvas.width/2; _images[0].lastX = _images[0].canvas.width/2;
_images[0].lastY = _images[0].canvas.height/2; _images[0].lastY = _images[0].canvas.height/2;
_images[0].canvas.style.cursor = "default";
_screenDiagInv = 1/Math.sqrt(_images[0].canvas.width*_images[0].canvas.width + _images[0].canvas.height*_images[0].canvas.height); _screenDiagInv = 1/Math.sqrt(_images[0].canvas.width*_images[0].canvas.width + _images[0].canvas.height*_images[0].canvas.height);
@ -2775,7 +2856,7 @@ var QB = new function() {
_keyDownMap = {}; _keyDownMap = {};
// TODO: set the appropriate default font for the selected screen mode above instead of here // TODO: set the appropriate default font for the selected screen mode above instead of here
GX.canvas().style.letterSpacing = "-1px"; //GX.canvas().style.letterSpacing = "-1px";
}; };
this.func_Seek = function(fh) { this.func_Seek = function(fh) {

View file

@ -3235,6 +3235,7 @@ if (QB.halted()) { return; }
await sub_AddQBMethod( "FUNCTION" , "_Blue" , False); await sub_AddQBMethod( "FUNCTION" , "_Blue" , False);
await sub_AddQBMethod( "FUNCTION" , "_Blue32" , False); await sub_AddQBMethod( "FUNCTION" , "_Blue32" , False);
await sub_AddQBMethod( "FUNCTION" , "_Ceil" , False); await sub_AddQBMethod( "FUNCTION" , "_Ceil" , False);
await sub_AddQBMethod( "FUNCTION" , "_CommandCount" , False);
await sub_AddQBMethod( "FUNCTION" , "_CopyImage" , False); await sub_AddQBMethod( "FUNCTION" , "_CopyImage" , False);
await sub_AddQBMethod( "FUNCTION" , "_Cosh" , False); await sub_AddQBMethod( "FUNCTION" , "_Cosh" , False);
await sub_AddQBMethod( "FUNCTION" , "_Coth" , False); await sub_AddQBMethod( "FUNCTION" , "_Coth" , False);
@ -3244,11 +3245,15 @@ if (QB.halted()) { return; }
await sub_AddQBMethod( "FUNCTION" , "_D2R" , False); await sub_AddQBMethod( "FUNCTION" , "_D2R" , False);
await sub_AddQBMethod( "FUNCTION" , "_DefaultColor" , False); await sub_AddQBMethod( "FUNCTION" , "_DefaultColor" , False);
await sub_AddQBMethod( "SUB" , "_Delay" , True); await sub_AddQBMethod( "SUB" , "_Delay" , True);
await sub_AddQBMethod( "FUNCTION" , "_DesktopHeight" , False);
await sub_AddQBMethod( "FUNCTION" , "_DesktopWidth" , False);
await sub_AddQBMethod( "FUNCTION" , "_Dest" , False); await sub_AddQBMethod( "FUNCTION" , "_Dest" , False);
await sub_AddQBMethod( "SUB" , "_Dest" , False); await sub_AddQBMethod( "SUB" , "_Dest" , False);
await sub_AddQBMethod( "FUNCTION" , "_Dir" , False);
await sub_AddQBMethod( "FUNCTION" , "_DirExists" , False); await sub_AddQBMethod( "FUNCTION" , "_DirExists" , False);
await sub_AddQBMethod( "FUNCTION" , "_Display" , False); await sub_AddQBMethod( "FUNCTION" , "_Display" , False);
await sub_AddQBMethod( "SUB" , "_Display" , False); await sub_AddQBMethod( "SUB" , "_Display" , False);
await sub_AddQBMethod( "SUB" , "_Echo" , False);
await sub_AddQBMethod( "FUNCTION" , "_FileExists" , False); await sub_AddQBMethod( "FUNCTION" , "_FileExists" , False);
await sub_AddQBMethod( "FUNCTION" , "_Font" , False); await sub_AddQBMethod( "FUNCTION" , "_Font" , False);
await sub_AddQBMethod( "SUB" , "_Font" , False); await sub_AddQBMethod( "SUB" , "_Font" , False);
@ -3272,6 +3277,8 @@ if (QB.halted()) { return; }
await sub_AddQBMethod( "FUNCTION" , "_LoadImage" , True); await sub_AddQBMethod( "FUNCTION" , "_LoadImage" , True);
await sub_AddQBMethod( "FUNCTION" , "_MouseButton" , False); await sub_AddQBMethod( "FUNCTION" , "_MouseButton" , False);
await sub_AddQBMethod( "FUNCTION" , "_MouseInput" , False); await sub_AddQBMethod( "FUNCTION" , "_MouseInput" , False);
await sub_AddQBMethod( "SUB" , "_MouseShow" , False);
await sub_AddQBMethod( "SUB" , "_MouseHide" , False);
await sub_AddQBMethod( "FUNCTION" , "_MouseWheel" , False); await sub_AddQBMethod( "FUNCTION" , "_MouseWheel" , False);
await sub_AddQBMethod( "FUNCTION" , "_MouseX" , False); await sub_AddQBMethod( "FUNCTION" , "_MouseX" , False);
await sub_AddQBMethod( "FUNCTION" , "_MouseY" , False); await sub_AddQBMethod( "FUNCTION" , "_MouseY" , False);
@ -3299,6 +3306,9 @@ if (QB.halted()) { return; }
await sub_AddQBMethod( "FUNCTION" , "_RGBA32" , False); await sub_AddQBMethod( "FUNCTION" , "_RGBA32" , False);
await sub_AddQBMethod( "FUNCTION" , "_Round" , False); await sub_AddQBMethod( "FUNCTION" , "_Round" , False);
await sub_AddQBMethod( "FUNCTION" , "_ScreenExists" , False); await sub_AddQBMethod( "FUNCTION" , "_ScreenExists" , False);
await sub_AddQBMethod( "SUB" , "_ScreenMove" , False);
await sub_AddQBMethod( "FUNCTION" , "_ScreenX" , False);
await sub_AddQBMethod( "FUNCTION" , "_ScreenY" , False);
await sub_AddQBMethod( "FUNCTION" , "_Sech" , False); await sub_AddQBMethod( "FUNCTION" , "_Sech" , False);
await sub_AddQBMethod( "FUNCTION" , "_Setbit" , False); await sub_AddQBMethod( "FUNCTION" , "_Setbit" , False);
await sub_AddQBMethod( "FUNCTION" , "_Shl" , False); await sub_AddQBMethod( "FUNCTION" , "_Shl" , False);
@ -3317,6 +3327,7 @@ if (QB.halted()) { return; }
await sub_AddQBMethod( "FUNCTION" , "_Strcmp" , False); await sub_AddQBMethod( "FUNCTION" , "_Strcmp" , False);
await sub_AddQBMethod( "FUNCTION" , "_Stricmp" , False); await sub_AddQBMethod( "FUNCTION" , "_Stricmp" , False);
await sub_AddQBMethod( "FUNCTION" , "_Tanh" , False); await sub_AddQBMethod( "FUNCTION" , "_Tanh" , False);
await sub_AddQBMethod( "FUNCTION" , "_Title" , False);
await sub_AddQBMethod( "SUB" , "_Title" , False); await sub_AddQBMethod( "SUB" , "_Title" , False);
await sub_AddQBMethod( "FUNCTION" , "_Togglebit" , False); await sub_AddQBMethod( "FUNCTION" , "_Togglebit" , False);
await sub_AddQBMethod( "FUNCTION" , "_Trim" , False); await sub_AddQBMethod( "FUNCTION" , "_Trim" , False);
@ -3342,6 +3353,9 @@ if (QB.halted()) { return; }
await sub_AddQBMethod( "FUNCTION" , "Cvl" , False); await sub_AddQBMethod( "FUNCTION" , "Cvl" , False);
await sub_AddQBMethod( "FUNCTION" , "Date$" , False); await sub_AddQBMethod( "FUNCTION" , "Date$" , False);
await sub_AddQBMethod( "SUB" , "Draw" , False); await sub_AddQBMethod( "SUB" , "Draw" , False);
await sub_AddQBMethod( "FUNCTION" , "Environ" , False);
await sub_AddQBMethod( "SUB" , "Environ" , False);
await sub_AddQBMethod( "SUB" , "Error" , False);
await sub_AddQBMethod( "FUNCTION" , "EOF" , False); await sub_AddQBMethod( "FUNCTION" , "EOF" , False);
await sub_AddQBMethod( "FUNCTION" , "Exp" , False); await sub_AddQBMethod( "FUNCTION" , "Exp" , False);
await sub_AddQBMethod( "SUB" , "Files" , True); await sub_AddQBMethod( "SUB" , "Files" , True);

View file

@ -3454,6 +3454,7 @@ Sub InitQBMethods
AddQBMethod "FUNCTION", "_Blue", False AddQBMethod "FUNCTION", "_Blue", False
AddQBMethod "FUNCTION", "_Blue32", False AddQBMethod "FUNCTION", "_Blue32", False
AddQBMethod "FUNCTION", "_Ceil", False AddQBMethod "FUNCTION", "_Ceil", False
AddQBMethod "FUNCTION", "_CommandCount", False
AddQBMethod "FUNCTION", "_CopyImage", False AddQBMethod "FUNCTION", "_CopyImage", False
AddQBMethod "FUNCTION", "_Cosh", False AddQBMethod "FUNCTION", "_Cosh", False
AddQBMethod "FUNCTION", "_Coth", False AddQBMethod "FUNCTION", "_Coth", False
@ -3463,11 +3464,15 @@ Sub InitQBMethods
AddQBMethod "FUNCTION", "_D2R", False AddQBMethod "FUNCTION", "_D2R", False
AddQBMethod "FUNCTION", "_DefaultColor", False AddQBMethod "FUNCTION", "_DefaultColor", False
AddQBMethod "SUB", "_Delay", True AddQBMethod "SUB", "_Delay", True
AddQBMethod "FUNCTION", "_DesktopHeight", False
AddQBMethod "FUNCTION", "_DesktopWidth", False
AddQBMethod "FUNCTION", "_Dest", False AddQBMethod "FUNCTION", "_Dest", False
AddQBMethod "SUB", "_Dest", False AddQBMethod "SUB", "_Dest", False
AddQBMethod "FUNCTION", "_Dir", False
AddQBMethod "FUNCTION", "_DirExists", False AddQBMethod "FUNCTION", "_DirExists", False
AddQBMethod "FUNCTION", "_Display", False AddQBMethod "FUNCTION", "_Display", False
AddQBMethod "SUB", "_Display", False AddQBMethod "SUB", "_Display", False
AddQBMethod "SUB", "_Echo", False
AddQBMethod "FUNCTION", "_FileExists", False AddQBMethod "FUNCTION", "_FileExists", False
AddQBMethod "FUNCTION", "_Font", False AddQBMethod "FUNCTION", "_Font", False
AddQBMethod "SUB", "_Font", False AddQBMethod "SUB", "_Font", False
@ -3491,6 +3496,8 @@ Sub InitQBMethods
AddQBMethod "FUNCTION", "_LoadImage", True AddQBMethod "FUNCTION", "_LoadImage", True
AddQBMethod "FUNCTION", "_MouseButton", False AddQBMethod "FUNCTION", "_MouseButton", False
AddQBMethod "FUNCTION", "_MouseInput", False AddQBMethod "FUNCTION", "_MouseInput", False
AddQBMethod "SUB", "_MouseShow", False
AddQBMethod "SUB", "_MouseHide", False
AddQBMethod "FUNCTION", "_MouseWheel", False AddQBMethod "FUNCTION", "_MouseWheel", False
AddQBMethod "FUNCTION", "_MouseX", False AddQBMethod "FUNCTION", "_MouseX", False
AddQBMethod "FUNCTION", "_MouseY", False AddQBMethod "FUNCTION", "_MouseY", False
@ -3518,6 +3525,9 @@ Sub InitQBMethods
AddQBMethod "FUNCTION", "_RGBA32", False AddQBMethod "FUNCTION", "_RGBA32", False
AddQBMethod "FUNCTION", "_Round", False AddQBMethod "FUNCTION", "_Round", False
AddQBMethod "FUNCTION", "_ScreenExists", False AddQBMethod "FUNCTION", "_ScreenExists", False
AddQBMethod "SUB", "_ScreenMove", False
AddQBMethod "FUNCTION", "_ScreenX", False
AddQBMethod "FUNCTION", "_ScreenY", False
AddQBMethod "FUNCTION", "_Sech", False AddQBMethod "FUNCTION", "_Sech", False
AddQBMethod "FUNCTION", "_Setbit", False AddQBMethod "FUNCTION", "_Setbit", False
AddQBMethod "FUNCTION", "_Shl", False AddQBMethod "FUNCTION", "_Shl", False
@ -3536,6 +3546,7 @@ Sub InitQBMethods
AddQBMethod "FUNCTION", "_Strcmp", False AddQBMethod "FUNCTION", "_Strcmp", False
AddQBMethod "FUNCTION", "_Stricmp", False AddQBMethod "FUNCTION", "_Stricmp", False
AddQBMethod "FUNCTION", "_Tanh", False AddQBMethod "FUNCTION", "_Tanh", False
AddQBMethod "FUNCTION", "_Title", False
AddQBMethod "SUB", "_Title", False AddQBMethod "SUB", "_Title", False
AddQBMethod "FUNCTION", "_Togglebit", False AddQBMethod "FUNCTION", "_Togglebit", False
AddQBMethod "FUNCTION", "_Trim", False AddQBMethod "FUNCTION", "_Trim", False
@ -3564,6 +3575,9 @@ Sub InitQBMethods
AddQBMethod "FUNCTION", "Cvl", False AddQBMethod "FUNCTION", "Cvl", False
AddQBMethod "FUNCTION", "Date$", False AddQBMethod "FUNCTION", "Date$", False
AddQBMethod "SUB", "Draw", False AddQBMethod "SUB", "Draw", False
AddQBMethod "FUNCTION", "Environ", False
AddQBMethod "SUB", "Environ", False
AddQBMethod "SUB", "Error", False
AddQBMethod "FUNCTION", "EOF", False AddQBMethod "FUNCTION", "EOF", False
AddQBMethod "FUNCTION", "Exp", False AddQBMethod "FUNCTION", "Exp", False
AddQBMethod "SUB", "Files", True AddQBMethod "SUB", "Files", True