From 3e474f2f0bd06c7bd82eaa1969793f0b547f9298 Mon Sep 17 00:00:00 2001 From: FellippeHeitor Date: Mon, 6 Jan 2020 04:46:29 -0300 Subject: [PATCH] Fixes SUB calls like SHELL _HIDE command$ for $NOPREFIX use. Also: - Fixes incorrect resolution of _BIT in variable declarations. --- source/qb64.bas | 21 ++++++++--- source/subs_functions/subs_functions.bas | 48 ++++++++++++------------ 2 files changed, 40 insertions(+), 29 deletions(-) diff --git a/source/qb64.bas b/source/qb64.bas index 05ea5cbbe..7c4ac5c82 100644 --- a/source/qb64.bas +++ b/source/qb64.bas @@ -13962,7 +13962,7 @@ FUNCTION dim2 (varname$, typ2$, method, elements$) IF LEFT$(typ$, 4) = "_BIT" OR (LEFT$(typ$, 3) = "BIT" AND qb64prefix_set = 1) THEN IF (LEFT$(typ$, 4) = "_BIT" AND LEN(typ$) > 4) OR (LEFT$(typ$, 3) = "BIT" AND LEN(typ$) > 3) THEN IF LEFT$(typ$, 7) <> "_BIT * " AND LEFT$(typ$, 6) <> "BIT * " THEN Give_Error "Expected " + qb64prefix$ + "BIT * number": EXIT FUNCTION - c$ = MID$(typ$, INSTR(typ$, " * ") + 4) + c$ = MID$(typ$, INSTR(typ$, " * ") + 3) IF isuinteger(c$) = 0 THEN Give_Error "Number expected after *": EXIT FUNCTION IF LEN(c$) > 2 THEN Give_Error "Too many characters in number after *": EXIT FUNCTION bits = VAL(c$) @@ -17704,10 +17704,18 @@ FUNCTION findid& (n2$) 'some subs require a second argument (eg. PUT #, DEF SEG, etc.) IF ids(i).subfunc = 2 THEN IF ASC(ids(i).secondargmustbe) <> 32 THEN 'exists? - IF secondarg$ <> ids(i).secondargmustbe THEN GOTO findidnomatch + IF RTRIM$(secondarg$) = RTRIM$(ids(i).secondargmustbe) THEN + ELSEIF qb64prefix_set = 1 AND LEFT$(ids(i).secondargmustbe, 1) = "_" AND LEFT$(secondarg$, 1) <> "_" AND RTRIM$(secondarg$) = MID$(RTRIM$(ids(i).secondargmustbe), 2) THEN + ELSE + GOTO findidnomatch + END IF END IF IF ASC(ids(i).secondargcantbe) <> 32 THEN 'exists? - IF secondarg$ = ids(i).secondargcantbe THEN GOTO findidnomatch + IF RTRIM$(secondarg$) <> RTRIM$(ids(i).secondargcantbe) THEN + ELSEIF qb64prefix_set = 1 AND LEFT$(ids(i).secondargcantbe, 1) = "_" AND LEFT$(secondarg$, 1) <> "_" AND RTRIM$(secondarg$) <> MID$(RTRIM$(ids(i).secondargcantbe), 2) THEN + ELSE + GOTO findidnomatch + END IF END IF END IF 'second sub argument possible @@ -21077,6 +21085,7 @@ FUNCTION seperateargs (a$, ca$, pass&) OutOfRange = 2147483647 position = OutOfRange which = 0 + removePrefix = 0 IF i <= n THEN 'Past end of contect check FOR o = 1 TO t words = OptWords(x, o) @@ -21090,11 +21099,13 @@ FUNCTION seperateargs (a$, ca$, pass&) c$ = c$ + " " + getelement$(a$, i3 + w - 1) NEXT w 'Compare - IF c$ = RTRIM$(Opt(x, o)) THEN + noPrefixMatch = LEFT$(Opt(x, o), 1) = "_" AND qb64prefix_set = 1 AND c$ = MID$(RTRIM$(Opt(x, o)), 2) + IF c$ = RTRIM$(Opt(x, o)) OR noPrefixMatch THEN 'Record Match IF i3 < position THEN position = i3 which = o + IF noPrefixMatch THEN removePrefix = 1 bvalue = b EXIT FOR 'Exit the i3 loop END IF 'position check @@ -21137,7 +21148,7 @@ FUNCTION seperateargs (a$, ca$, pass&) END IF END IF 'Expression i = i + OptWords(x, which) - separgslayout(x) = CHR$(LEN(RTRIM$(Opt(x, which)))) + RTRIM$(Opt(x, which)) + separgslayout(x) = CHR$(LEN(RTRIM$(Opt(x, which))) - removePrefix) + MID$(RTRIM$(Opt(x, which)), removePrefix + 1) separgs(x) = CHR$(0) + str2(which) ELSE 'Not Found... diff --git a/source/subs_functions/subs_functions.bas b/source/subs_functions/subs_functions.bas index 5221ce45c..62f48ed8c 100644 --- a/source/subs_functions/subs_functions.bas +++ b/source/subs_functions/subs_functions.bas @@ -90,7 +90,7 @@ id.subfunc = 2 id.callname = "sub__resize" id.args = 2 id.arg = MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) -id.specialformat = "[{ON|OFF}][,{" + qb64prefix$ + "STRETCH|" + qb64prefix$ + "SMOOTH}]" +id.specialformat = "[{ON|OFF}][,{_STRETCH|_SMOOTH}]" regid clearid @@ -135,7 +135,7 @@ id.subfunc = 2 id.callname = "sub__glrender" id.args = 1 id.arg = MKL$(LONGTYPE - ISPOINTER) -id.specialformat = "{" + qb64prefix$ + "BEHIND|" + qb64prefix$ + "ONTOP|" + qb64prefix$ + "ONLY}" +id.specialformat = "{_BEHIND|_ONTOP|_ONLY}" regid clearid @@ -144,7 +144,7 @@ id.subfunc = 2 id.callname = "sub__displayorder" id.args = 4 id.arg = MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) -id.specialformat = "[{" + qb64prefix$ + "SOFTWARE|" + qb64prefix$ + "HARDWARE|" + qb64prefix$ + "HARDWARE1|" + qb64prefix$ + "GLRENDER}[,{" + qb64prefix$ + "SOFTWARE|" + qb64prefix$ + "HARDWARE|" + qb64prefix$ + "HARDWARE1|" + qb64prefix$ + "GLRENDER}[,{" + qb64prefix$ + "SOFTWARE|" + qb64prefix$ + "HARDWARE|" + qb64prefix$ + "HARDWARE1|" + qb64prefix$ + "GLRENDER}[,{" + qb64prefix$ + "SOFTWARE|" + qb64prefix$ + "HARDWARE|" + qb64prefix$ + "HARDWARE1|" + qb64prefix$ + "GLRENDER}]]]]" +id.specialformat = "[{_SOFTWARE|_HARDWARE|_HARDWARE1|_GLRENDER}[,{_SOFTWARE|_HARDWARE|_HARDWARE1|_GLRENDER}[,{_SOFTWARE|_HARDWARE|_HARDWARE1|_GLRENDER}[,{_SOFTWARE|_HARDWARE|_HARDWARE1|_GLRENDER}]]]]" regid clearid @@ -484,7 +484,7 @@ id.subfunc = 2 id.callname = "sub__screenmove" id.args = 2 id.arg = MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) -id.specialformat = "[{" + qb64prefix$ + "MIDDLE}][?,?]" +id.specialformat = "[{_MIDDLE}][?,?]" regid clearid @@ -644,7 +644,7 @@ id.subfunc = 2 id.callname = "sub__fullscreen" id.args = 1 id.arg = MKL$(LONGTYPE - ISPOINTER) -id.specialformat = "[{" + qb64prefix$ + "OFF|" + qb64prefix$ + "STRETCH|" + qb64prefix$ + "SQUAREPIXELS|OFF}][,{" + qb64prefix$ + "SMOOTH}]" +id.specialformat = "[{_OFF|_STRETCH|_SQUAREPIXELS|OFF}][,{_SMOOTH}]" regid clearid @@ -653,7 +653,7 @@ id.subfunc = 2 id.callname = "sub__allowfullscreen" id.args = 2 id.arg = MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) -id.specialformat = "[{" + qb64prefix$ + "STRETCH|" + qb64prefix$ + "SQUAREPIXELS|" + qb64prefix$ + "OFF|" + qb64prefix$ + "ALL|OFF}][,{" + qb64prefix$ + "SMOOTH|" + qb64prefix$ + "OFF|" + qb64prefix$ + "ALL|OFF}]" +id.specialformat = "[{_STRETCH|_SQUAREPIXELS|_OFF|_ALL|OFF}][,{_SMOOTH|_OFF|_ALL|OFF}]" regid clearid @@ -832,7 +832,7 @@ id.subfunc = 2 id.callname = "sub__fps" id.args = 1 id.arg = MKL$(DOUBLETYPE - ISPOINTER) -id.specialformat = "[{" + qb64prefix$ + "AUTO}][?]" +id.specialformat = "[{_AUTO}][?]" regid clearid @@ -1025,7 +1025,7 @@ id.subfunc = 2 id.callname = "sub__clearcolor" id.args = 2 id.arg = MKL$(ULONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) -id.specialformat = "[{" + qb64prefix$ + "NONE}][?][,?]" +id.specialformat = "[{_NONE}][?][,?]" regid 'USING/CHANGING A SURFACE @@ -1036,7 +1036,7 @@ id.subfunc = 2 id.callname = "sub__putimage" id.args = 10 id.arg = MKL$(DOUBLETYPE - ISPOINTER) + MKL$(DOUBLETYPE - ISPOINTER) + MKL$(DOUBLETYPE - ISPOINTER) + MKL$(DOUBLETYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) + MKL$(DOUBLETYPE - ISPOINTER) + MKL$(DOUBLETYPE - ISPOINTER) + MKL$(DOUBLETYPE - ISPOINTER) + MKL$(DOUBLETYPE - ISPOINTER) -id.specialformat = "[[{STEP}](?,?)[-[{STEP}](?,?)]][,[?][,[?][,[[{STEP}](?,?)[-[{STEP}](?,?)]][,{" + qb64prefix$ + "SMOOTH}]]]]" +id.specialformat = "[[{STEP}](?,?)[-[{STEP}](?,?)]][,[?][,[?][,[[{STEP}](?,?)[-[{STEP}](?,?)]][,{_SMOOTH}]]]]" regid clearid @@ -1045,7 +1045,7 @@ id.subfunc = 2 id.callname = "sub__maptriangle" id.args = 19 id.arg = MKL$(LONGTYPE - ISPOINTER)+MKL$(SINGLETYPE - ISPOINTER) + MKL$(SINGLETYPE - ISPOINTER) + MKL$(SINGLETYPE - ISPOINTER) + MKL$(SINGLETYPE - ISPOINTER) + MKL$(SINGLETYPE - ISPOINTER) + MKL$(SINGLETYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) + MKL$(SINGLETYPE - ISPOINTER) + MKL$(SINGLETYPE - ISPOINTER) + MKL$(SINGLETYPE - ISPOINTER) + MKL$(SINGLETYPE - ISPOINTER) + MKL$(SINGLETYPE - ISPOINTER) + MKL$(SINGLETYPE - ISPOINTER) + MKL$(SINGLETYPE - ISPOINTER) + MKL$(SINGLETYPE - ISPOINTER) + MKL$(SINGLETYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) -id.specialformat = "[{" + qb64prefix$ + "CLOCKWISE|" + qb64prefix$ + "ANTICLOCKWISE}][{" + qb64prefix$ + "SEAMLESS}](?,?)-(?,?)-(?,?)[,?]{TO}(?,?[,?])-(?,?[,?])-(?,?[,?])[,[?][,{" + qb64prefix$ + "SMOOTH|" + qb64prefix$ + "SMOOTHSHRUNK|" + qb64prefix$ + "SMOOTHSTRETCHED}]]" +id.specialformat = "[{_CLOCKWISE|_ANTICLOCKWISE}][{_SEAMLESS}](?,?)-(?,?)-(?,?)[,?]{TO}(?,?[,?])-(?,?[,?])-(?,?[,?])[,[?][,{_SMOOTH|_SMOOTHSHRUNK|_SMOOTHSTRETCHED}]]" regid clearid @@ -1054,7 +1054,7 @@ id.subfunc = 2 id.callname = "sub__depthbuffer" id.args = 2 id.arg = MKL$(LONGTYPE - ISPOINTER)+MKL$(LONGTYPE - ISPOINTER) -id.specialformat = "{ON|OFF|LOCK|" + qb64prefix$ + "CLEAR}[,?]" +id.specialformat = "{ON|OFF|LOCK|_CLEAR}[,?]" regid clearid @@ -1253,7 +1253,7 @@ id.subfunc = 2 id.callname = "sub__printmode" id.args = 2 id.arg = MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) -id.specialformat = "{" + qb64prefix$ + "FILLBACKGROUND|" + qb64prefix$ + "KEEPBACKGROUND|" + qb64prefix$ + "ONLYBACKGROUND}[,?]" +id.specialformat = "{_FILLBACKGROUND|_KEEPBACKGROUND|_ONLYBACKGROUND}[,?]" regid clearid @@ -1583,7 +1583,7 @@ id.callname = "sub_shell" id.args = 1 id.arg = MKL$(STRINGTYPE - ISPOINTER) id.specialformat = "[?]" -'id.secondargcantbe = qb64prefix$ + "HIDE" +'id.secondargcantbe = "_HIDE" regid clearid @@ -1592,8 +1592,8 @@ id.subfunc = 2 id.callname = "sub_shell2" id.args = 1 id.arg = MKL$(STRINGTYPE - ISPOINTER) -id.specialformat = "{" + qb64prefix$ + "HIDE}[{" + qb64prefix$ + "DONTWAIT}][?]" -id.secondargmustbe = qb64prefix$ + "HIDE" +id.specialformat = "{_HIDE}[{_DONTWAIT}][?]" +id.secondargmustbe = "_HIDE" regid clearid @@ -1602,8 +1602,8 @@ id.subfunc = 2 id.callname = "sub_shell3" id.args = 1 id.arg = MKL$(STRINGTYPE - ISPOINTER) -id.specialformat = "{" + qb64prefix$ + "DONTWAIT}[{" + qb64prefix$ + "HIDE}][?]" -id.secondargmustbe = qb64prefix$ + "DONTWAIT" +id.specialformat = "{_DONTWAIT}[{_HIDE}][?]" +id.secondargmustbe = "_DONTWAIT" regid clearid @@ -2219,7 +2219,7 @@ id.subfunc = 2 id.callname = "sub_graphics_put" id.args = 5 id.arg = MKL$(FLOATTYPE - ISPOINTER) + MKL$(FLOATTYPE - ISPOINTER) + MKL$(-3) + MKL$(LONGTYPE - ISPOINTER) + MKL$(ULONGTYPE - ISPOINTER) -id.specialformat = "[{STEP}](?,?),?[,[{" + qb64prefix$ + "CLIP}][{PSET|PRESET|AND|OR|XOR}][,?]]" +id.specialformat = "[{STEP}](?,?),?[,[{_CLIP}][{PSET|PRESET|AND|OR|XOR}][,?]]" 'PUT [STEP] (x!,y!),arrayname# [(indexes%)] [,actionverb] 'PUT (10, 10), myimage, _CLIP, 0 id.secondargmustbe = "STEP" @@ -2230,7 +2230,7 @@ id.subfunc = 2 id.callname = "sub_graphics_put" id.args = 5 id.arg = MKL$(FLOATTYPE - ISPOINTER) + MKL$(FLOATTYPE - ISPOINTER) + MKL$(-3) + MKL$(LONGTYPE - ISPOINTER) + MKL$(ULONGTYPE - ISPOINTER) -id.specialformat = "[{STEP}](?,?),?[,[{" + qb64prefix$ + "CLIP}][{PSET|PRESET|AND|OR|XOR}][,?]]" +id.specialformat = "[{STEP}](?,?),?[,[{_CLIP}][{PSET|PRESET|AND|OR|XOR}][,?]]" 'PUT [STEP] (x!,y!),arrayname# [(indexes%)] [,actionverb] 'PUT (10, 10), myimage, _CLIP, 0 id.secondargmustbe = "(" @@ -2760,7 +2760,7 @@ id.arg = MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE 'id.specialformat = "[?][,[?][,[?][,?]]]" 'new! 'id.specialformat = "[?][,[?][,[?][,[?][,{_MANUALDISPLAY}]]]]" 'breaks compilation! 'id.specialformat = "[?][,[?][,[?][,[?][,[{_MANUALDISPLAY}]]]]]" <-pre-bulletproofing -id.specialformat = "[?][,[?][,[?][,[?][,[{" + qb64prefix$ + "MANUALDISPLAY}?]]]]]" 'a temp format for transition reasons" +id.specialformat = "[?][,[?][,[?][,[?][,[{_MANUALDISPLAY}?]]]]]" 'a temp format for transition reasons" regid clearid @@ -3354,7 +3354,7 @@ id.subfunc = 2 id.callname = "sub__capslock" id.arg = MKL$(LONGTYPE - ISPOINTER) id.args = 1 -id.specialformat = "{ON|OFF|" + qb64prefix$ + "TOGGLE}" +id.specialformat = "{ON|OFF|_TOGGLE}" regid clearid @@ -3363,7 +3363,7 @@ id.subfunc = 2 id.callname = "sub__scrolllock" id.arg = MKL$(LONGTYPE - ISPOINTER) id.args = 1 -id.specialformat = "{ON|OFF|" + qb64prefix$ + "TOGGLE}" +id.specialformat = "{ON|OFF|_TOGGLE}" regid clearid @@ -3372,7 +3372,7 @@ id.subfunc = 2 id.callname = "sub__numlock" id.arg = MKL$(LONGTYPE - ISPOINTER) id.args = 1 -id.specialformat = "{ON|OFF|" + qb64prefix$ + "TOGGLE}" +id.specialformat = "{ON|OFF|_TOGGLE}" regid clearid @@ -3389,7 +3389,7 @@ id.subfunc = 2 id.callname = "sub__console_cursor" id.args = 2 id.arg = MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) -id.specialformat = "[{" + qb64prefix$ + "SHOW|" + qb64prefix$ + "HIDE}][,?]" +id.specialformat = "[{_SHOW|_HIDE}][,?]" regid clearid