1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-07-03 14:41:21 +00:00

Initial implementation of $NOPREFIX

Allows QB64-specific keywords to be called without the leading underscore.

Per user and per project; affects nothing globally.

Allows prefixed keywords to be used even when it's set.
This commit is contained in:
FellippeHeitor 2020-01-04 16:13:13 -03:00
parent 1e395ee3c5
commit 2ebaeab3c6
4 changed files with 489 additions and 420 deletions

View file

@ -116,13 +116,24 @@ DIM SHARED idecurrentlinelayout AS STRING
DIM SHARED idecurrentlinelayouti AS LONG DIM SHARED idecurrentlinelayouti AS LONG
DIM SHARED idelayoutallow AS LONG DIM SHARED idelayoutallow AS LONG
DIM SHARED listOfKeywords$, listOfCustomKeywords$, customKeywordsLength AS LONG DIM SHARED backupListOfKeywords$, listOfKeywords$, listOfCustomKeywords$, customKeywordsLength AS LONG
listOfKeywords$ = "@?@$CHECKING@$CONSOLE@ONLY@$DYNAMIC@$ELSE@$ELSEIF@$END@$ENDIF@$EXEICON@$IF@$INCLUDE@$LET@$RESIZE@$SCREENHIDE@$SCREENSHOW@$STATIC@$VERSIONINFO@$VIRTUALKEYBOARD@ABS@ABSOLUTE@ACCESS@ALIAS@AND@APPEND@AS@ASC@ATN@BASE@BEEP@BINARY@BLOAD@BSAVE@BYVAL@CALL@CALLS@CASE@IS@CDBL@CDECL@CHAIN@CHDIR@CHR$@CINT@CIRCLE@CLEAR@CLNG@CLOSE@CLS@COLOR@COM@COMMAND$@COMMON@CONST@COS@CSNG@CSRLIN@CUSTOMTYPE@CVD@CVDMBF@CVI@CVL@CVS@CVSMBF@DATA@DATE$@DECLARE@DEF@DEFDBL@DEFINT@DEFLNG@DEFSNG@DEFSTR@DIM@DO@DOUBLE@DRAW@DYNAMIC@ELSE@ELSEIF@END@ENDIF@ENVIRON@ENVIRON$@EOF@EQV@ERASE@ERDEV@ERDEV$@ERL@ERR@ERROR@EVERYCASE@EXIT@EXP@FIELD@FILEATTR@FILES@FIX@FN@FOR@FRE@FREE@FREEFILE@FUNCTION@GET@GOSUB@GOTO@HEX$@IF@IMP@INKEY$@INP@INPUT@INPUT$@INSTR@INT@INTEGER@INTERRUPT@INTERRUPTX@IOCTL@IOCTL$@KEY@KILL@LBOUND@LCASE$@LEFT$@LEN@LET@LIBRARY@LINE@LIST@LOC@LOCATE@LOCK@LOF@LOG@LONG@LOOP@LPOS@LPRINT@LSET@LTRIM$@MID$@MKD$@MKDIR@MKDMBF$@MKI$@MKL$@MKS$@MKSMBF$@MOD@NAME@NEXT@NOT@OCT$@OFF@ON@OPEN@OPTION@OR@OUT@OUTPUT@PAINT@PALETTE@PCOPY@PEEK@PEN@PLAY@PMAP@POINT@POKE@POS@PRESET@PRINT@PSET@PUT@RANDOM@RANDOMIZE@READ@REDIM@REM@RESET@RESTORE@RESUME@RETURN@RIGHT$@RMDIR@RND@RSET@RTRIM$@RUN@SADD@SCREEN@SEEK@SEG@SELECT@SETMEM@SGN@SHARED@SHELL@SIGNAL@SIN@SINGLE@SLEEP@SOUND@SPACE$@SPC@SQR@STATIC@STEP@STICK@STOP@STR$@STRIG@STRING@STRING$@SUB@SWAP@SYSTEM@TAB@TAN@THEN@TIME$@TIMER@TO@TROFF@TRON@TYPE@UBOUND@UCASE$@UEVENT@UNLOCK@UNTIL@USING@VAL@VARPTR@VARPTR$@VARSEG@VIEW@WAIT@WEND@WHILE@WIDTH@WINDOW@WRITE@XOR@_ACOS@_ACOSH@_ALPHA@_ALPHA32@_ARCCOT@_ARCCSC@_ARCSEC@_ASIN@_ASINH@_ATAN2@_ATANH@_AUTODISPLAY@_AXIS@_BACKGROUNDCOLOR@_BIT@_BLEND@_BLINK@_BLUE@_BLUE32@_BUTTON@_BUTTONCHANGE@_BYTE@_CEIL@_CLEARCOLOR@_CLIP@_CLIPBOARD$@_CLIPBOARDIMAGE@_COMMANDCOUNT@_CONNECTED@_CONNECTIONADDRESS$@_CONNECTIONADDRESS@_CONSOLE@_CONSOLETITLE@_CONTINUE@_CONTROLCHR@_COPYIMAGE@_COPYPALETTE@_COSH@_COT@_COTH@_CSC@_CSCH@_CV@_CWD$@_D2G@_D2R@_DEFAULTCOLOR@_DEFINE@_DELAY@_DEPTHBUFFER@_DESKTOPHEIGHT@_DESKTOPWIDTH@_DEST@_DEVICE$@_DEVICEINPUT@_DEVICES@_DIR$@_DIREXISTS@_DISPLAY@_DISPLAYORDER@_DONTBLEND@_DONTWAIT@" DIM SHARED listOfKeywordsWithoutPrefix$
listOfKeywords$ = listOfKeywords$ + "_ERRORLINE@_EXIT@_EXPLICIT@_FILEEXISTS@_FLOAT@_FONT@_FONTHEIGHT@_FONTWIDTH@_FREEFONT@_FREEIMAGE@_FREETIMER@_FULLSCREEN@_G2D@_G2R@_GLRENDER@_GREEN@_GREEN32@_HEIGHT@_HIDE@_HYPOT@_ICON@_INCLERRORFILE$@_INCLERRORLINE@_INTEGER64@_KEYCLEAR@_KEYDOWN@_KEYHIT@_LASTAXIS@_LASTBUTTON@_LASTWHEEL@_LIMIT@_LOADFONT@_LOADIMAGE@_MAPTRIANGLE@_MAPUNICODE@_MEM@_MEMCOPY@_MEMELEMENT@_MEMEXISTS@_MEMFILL@_MEMFREE@_MEMGET@_MEMIMAGE@_MEMNEW@_MEMPUT@_MIDDLE@_MK$@_MOUSEBUTTON@_MOUSEHIDE@_MOUSEINPUT@_MOUSEMOVE@_MOUSEMOVEMENTX@_MOUSEMOVEMENTY@_MOUSEPIPEOPEN@_MOUSESHOW@_MOUSEWHEEL@_MOUSEX@_MOUSEY@_NEWIMAGE@_OFFSET@_OPENCLIENT@_OPENCONNECTION@_OPENHOST@_OS$@_PALETTECOLOR@_PI@_PIXELSIZE@_PRESERVE@_PRINTIMAGE@_PRINTMODE@_PRINTSTRING@_PRINTWIDTH@_PUTIMAGE@_R2D@_R2G@_RED@_RED32@_RESIZE@_RESIZEHEIGHT@_RESIZEWIDTH@_RGB@_RGB32@_RGBA@_RGBA32@_ROUND@_SCREENCLICK@_SCREENEXISTS@_SCREENHIDE@_SCREENICON@_SCREENIMAGE@_SCREENMOVE@_SCREENPRINT@_SCREENSHOW@_SCREENX@_SCREENY@_SEC@_SECH@_SETALPHA@_SHELLHIDE@_SINH@_SNDBAL@_SNDCLOSE@_SNDCOPY@_SNDGETPOS@_SNDLEN@_SNDLIMIT@_SNDLOOP@_SNDOPEN@_SNDOPENRAW@_SNDPAUSE@_SNDPAUSED@_SNDPLAY@_SNDPLAYCOPY@_SNDPLAYFILE@_SNDPLAYING@_SNDRATE@_SNDRAW@_SNDRAWDONE@_SNDRAWLEN@_SNDSETPOS@_SNDSTOP@_SNDVOL@_SOURCE@_STARTDIR$@_STRCMP@_STRICMP@_TANH@_TITLE@_TITLE$@_UNSIGNED@_WHEEL@_WIDTH@_WINDOWHANDLE@_WINDOWHASFOCUS@_GLACCUM@_GLALPHAFUNC@_GLARETEXTURESRESIDENT@_GLARRAYELEMENT@_GLBEGIN@_GLBINDTEXTURE@_GLBITMAP@_GLBLENDFUNC@_GLCALLLIST@_GLCALLLISTS@_GLCLEAR@_GLCLEARACCUM@_GLCLEARCOLOR@_GLCLEARDEPTH@_GLCLEARINDEX@_GLCLEARSTENCIL@_GLCLIPPLANE@_GLCOLOR3B@_GLCOLOR3BV@_GLCOLOR3D@_GLCOLOR3DV@_GLCOLOR3F@_GLCOLOR3FV@_GLCOLOR3I@_GLCOLOR3IV@_GLCOLOR3S@_GLCOLOR3SV@_GLCOLOR3UB@_GLCOLOR3UBV@_GLCOLOR3UI@_GLCOLOR3UIV@_GLCOLOR3US@_GLCOLOR3USV@_GLCOLOR4B@_GLCOLOR4BV@_GLCOLOR4D@_GLCOLOR4DV@_GLCOLOR4F@_GLCOLOR4FV@_GLCOLOR4I@_GLCOLOR4IV@_GLCOLOR4S@_GLCOLOR4SV@_GLCOLOR4UB@_GLCOLOR4UBV@_GLCOLOR4UI@_GLCOLOR4UIV@_GLCOLOR4US@_GLCOLOR4USV@_GLCOLORMASK@_GLCOLORMATERIAL@_GLCOLORPOINTER@_GLCOPYPIXELS@_GLCOPYTEXIMAGE1D@_GLCOPYTEXIMAGE2D@_GLCOPYTEXSUBIMAGE1D@" backupListOfKeywords$ = "@?@$CHECKING@$CONSOLE@ONLY@$DYNAMIC@$ELSE@$ELSEIF@$END@$ENDIF@$EXEICON@$IF@$INCLUDE@$LET@$RESIZE@$SCREENHIDE@$SCREENSHOW@$STATIC@$VERSIONINFO@$VIRTUALKEYBOARD@ABS@ABSOLUTE@ACCESS@ALIAS@AND@APPEND@AS@ASC@ATN@BASE@BEEP@BINARY@BLOAD@BSAVE@BYVAL@CALL@CALLS@CASE@IS@CDBL@CDECL@CHAIN@CHDIR@CHR$@CINT@CIRCLE@CLEAR@CLNG@CLOSE@CLS@COLOR@COM@COMMAND$@COMMON@CONST@COS@CSNG@CSRLIN@CUSTOMTYPE@CVD@CVDMBF@CVI@CVL@CVS@CVSMBF@DATA@DATE$@DECLARE@DEF@DEFDBL@DEFINT@DEFLNG@DEFSNG@DEFSTR@DIM@DO@DOUBLE@DRAW@DYNAMIC@ELSE@ELSEIF@END@ENDIF@ENVIRON@ENVIRON$@EOF@EQV@ERASE@ERDEV@ERDEV$@ERL@ERR@ERROR@EVERYCASE@EXIT@EXP@FIELD@FILEATTR@FILES@FIX@FN@FOR@FRE@FREE@FREEFILE@FUNCTION@GET@GOSUB@GOTO@HEX$@IF@IMP@INKEY$@INP@INPUT@INPUT$@INSTR@INT@INTEGER@INTERRUPT@INTERRUPTX@IOCTL@IOCTL$@KEY@KILL@LBOUND@LCASE$@LEFT$@LEN@LET@LIBRARY@LINE@LIST@LOC@LOCATE@LOCK@LOF@LOG@LONG@LOOP@LPOS@LPRINT@LSET@LTRIM$@MID$@MKD$@MKDIR@MKDMBF$@MKI$@MKL$@MKS$@MKSMBF$@MOD@NAME@NEXT@NOT@OCT$@OFF@ON@OPEN@OPTION@OR@OUT@OUTPUT@PAINT@PALETTE@PCOPY@PEEK@PEN@PLAY@PMAP@POINT@POKE@POS@PRESET@PRINT@PSET@PUT@RANDOM@RANDOMIZE@READ@REDIM@REM@RESET@RESTORE@RESUME@RETURN@RIGHT$@RMDIR@RND@RSET@RTRIM$@RUN@SADD@SCREEN@SEEK@SEG@SELECT@SETMEM@SGN@SHARED@SHELL@SIGNAL@SIN@SINGLE@SLEEP@SOUND@SPACE$@SPC@SQR@STATIC@STEP@STICK@STOP@STR$@STRIG@STRING@STRING$@SUB@SWAP@SYSTEM@TAB@TAN@THEN@TIME$@TIMER@TO@TROFF@TRON@TYPE@UBOUND@UCASE$@UEVENT@UNLOCK@UNTIL@USING@VAL@VARPTR@VARPTR$@VARSEG@VIEW@WAIT@WEND@WHILE@WIDTH@WINDOW@WRITE@XOR@_ACOS@_ACOSH@_ALPHA@_ALPHA32@_ARCCOT@_ARCCSC@_ARCSEC@_ASIN@_ASINH@_ATAN2@_ATANH@_AUTODISPLAY@_AXIS@_BACKGROUNDCOLOR@_BIT@_BLEND@_BLINK@_BLUE@_BLUE32@_BUTTON@_BUTTONCHANGE@_BYTE@_CEIL@_CLEARCOLOR@_CLIP@_CLIPBOARD$@_CLIPBOARDIMAGE@_COMMANDCOUNT@_CONNECTED@_CONNECTIONADDRESS$@_CONNECTIONADDRESS@_CONSOLE@_CONSOLETITLE@_CONTINUE@_CONTROLCHR@_COPYIMAGE@_COPYPALETTE@_COSH@_COT@_COTH@_CSC@_CSCH@_CV@_CWD$@_D2G@_D2R@_DEFAULTCOLOR@_DEFINE@_DELAY@_DEPTHBUFFER@_DESKTOPHEIGHT@_DESKTOPWIDTH@_DEST@_DEVICE$@_DEVICEINPUT@_DEVICES@_DIR$@_DIREXISTS@_DISPLAY@_DISPLAYORDER@_DONTBLEND@_DONTWAIT@"
listOfKeywords$ = listOfKeywords$ + "_GLCOPYTEXSUBIMAGE2D@_GLCULLFACE@_GLDELETELISTS@_GLDELETETEXTURES@_GLDEPTHFUNC@_GLDEPTHMASK@_GLDEPTHRANGE@_GLDISABLE@_GLDISABLECLIENTSTATE@_GLDRAWARRAYS@_GLDRAWBUFFER@_GLDRAWELEMENTS@_GLDRAWPIXELS@_GLEDGEFLAG@_GLEDGEFLAGPOINTER@_GLEDGEFLAGV@_GLENABLE@_GLENABLECLIENTSTATE@_GLEND@_GLENDLIST@_GLEVALCOORD1D@_GLEVALCOORD1DV@_GLEVALCOORD1F@_GLEVALCOORD1FV@_GLEVALCOORD2D@_GLEVALCOORD2DV@_GLEVALCOORD2F@_GLEVALCOORD2FV@_GLEVALMESH1@_GLEVALMESH2@_GLEVALPOINT1@_GLEVALPOINT2@_GLFEEDBACKBUFFER@_GLFINISH@_GLFLUSH@_GLFOGF@_GLFOGFV@_GLFOGI@_GLFOGIV@_GLFRONTFACE@_GLFRUSTUM@_GLGENLISTS@_GLGENTEXTURES@_GLGETBOOLEANV@_GLGETCLIPPLANE@_GLGETDOUBLEV@_GLGETERROR@_GLGETFLOATV@_GLGETINTEGERV@_GLGETLIGHTFV@_GLGETLIGHTIV@_GLGETMAPDV@_GLGETMAPFV@_GLGETMAPIV@_GLGETMATERIALFV@_GLGETMATERIALIV@_GLGETPIXELMAPFV@_GLGETPIXELMAPUIV@_GLGETPIXELMAPUSV@_GLGETPOINTERV@_GLGETPOLYGONSTIPPLE@_GLGETSTRING@_GLGETTEXENVFV@_GLGETTEXENVIV@_GLGETTEXGENDV@_GLGETTEXGENFV@_GLGETTEXGENIV@_GLGETTEXIMAGE@_GLGETTEXLEVELPARAMETERFV@_GLGETTEXLEVELPARAMETERIV@_GLGETTEXPARAMETERFV@_GLGETTEXPARAMETERIV@_GLHINT@_GLINDEXMASK@_GLINDEXPOINTER@_GLINDEXD@_GLINDEXDV@_GLINDEXF@_GLINDEXFV@_GLINDEXI@_GLINDEXIV@_GLINDEXS@_GLINDEXSV@_GLINDEXUB@_GLINDEXUBV@_GLINITNAMES@_GLINTERLEAVEDARRAYS@_GLISENABLED@_GLISLIST@_GLISTEXTURE@_GLLIGHTMODELF@_GLLIGHTMODELFV@_GLLIGHTMODELI@_GLLIGHTMODELIV@_GLLIGHTF@_GLLIGHTFV@_GLLIGHTI@_GLLIGHTIV@_GLLINESTIPPLE@_GLLINEWIDTH@_GLLISTBASE@_GLLOADIDENTITY@_GLLOADMATRIXD@_GLLOADMATRIXF@_GLLOADNAME@_GLLOGICOP@_GLMAP1D@_GLMAP1F@_GLMAP2D@_GLMAP2F@_GLMAPGRID1D@_GLMAPGRID1F@_GLMAPGRID2D@_GLMAPGRID2F@_GLMATERIALF@_GLMATERIALFV@_GLMATERIALI@_GLMATERIALIV@_GLMATRIXMODE@_GLMULTMATRIXD@_GLMULTMATRIXF@_GLNEWLIST@_GLNORMAL3B@_GLNORMAL3BV@_GLNORMAL3D@_GLNORMAL3DV@_GLNORMAL3F@_GLNORMAL3FV@_GLNORMAL3I@_GLNORMAL3IV@_GLNORMAL3S@_GLNORMAL3SV@_GLNORMALPOINTER@_GLORTHO@_GLPASSTHROUGH@_GLPIXELMAPFV@_GLPIXELMAPUIV@_GLPIXELMAPUSV@_GLPIXELSTOREF@_GLPIXELSTOREI@_GLPIXELTRANSFERF@_GLPIXELTRANSFERI@_GLPIXELZOOM@_GLPOINTSIZE@_GLPOLYGONMODE@_GLPOLYGONOFFSET@_GLPOLYGONSTIPPLE@" backupListOfKeywords$ = backupListOfKeywords$ + "_ERRORLINE@_EXIT@_EXPLICIT@_FILEEXISTS@_FLOAT@_FONT@_FONTHEIGHT@_FONTWIDTH@_FREEFONT@_FREEIMAGE@_FREETIMER@_FULLSCREEN@_G2D@_G2R@_GLRENDER@_GREEN@_GREEN32@_HEIGHT@_HIDE@_HYPOT@_ICON@_INCLERRORFILE$@_INCLERRORLINE@_INTEGER64@_KEYCLEAR@_KEYDOWN@_KEYHIT@_LASTAXIS@_LASTBUTTON@_LASTWHEEL@_LIMIT@_LOADFONT@_LOADIMAGE@_MAPTRIANGLE@_MAPUNICODE@_MEM@_MEMCOPY@_MEMELEMENT@_MEMEXISTS@_MEMFILL@_MEMFREE@_MEMGET@_MEMIMAGE@_MEMNEW@_MEMPUT@_MIDDLE@_MK$@_MOUSEBUTTON@_MOUSEHIDE@_MOUSEINPUT@_MOUSEMOVE@_MOUSEMOVEMENTX@_MOUSEMOVEMENTY@_MOUSEPIPEOPEN@_MOUSESHOW@_MOUSEWHEEL@_MOUSEX@_MOUSEY@_NEWIMAGE@_OFFSET@_OPENCLIENT@_OPENCONNECTION@_OPENHOST@_OS$@_PALETTECOLOR@_PI@_PIXELSIZE@_PRESERVE@_PRINTIMAGE@_PRINTMODE@_PRINTSTRING@_PRINTWIDTH@_PUTIMAGE@_R2D@_R2G@_RED@_RED32@_RESIZE@_RESIZEHEIGHT@_RESIZEWIDTH@_RGB@_RGB32@_RGBA@_RGBA32@_ROUND@_SCREENCLICK@_SCREENEXISTS@_SCREENHIDE@_SCREENICON@_SCREENIMAGE@_SCREENMOVE@_SCREENPRINT@_SCREENSHOW@_SCREENX@_SCREENY@_SEC@_SECH@_SETALPHA@_SHELLHIDE@_SINH@_SNDBAL@_SNDCLOSE@_SNDCOPY@_SNDGETPOS@_SNDLEN@_SNDLIMIT@_SNDLOOP@_SNDOPEN@_SNDOPENRAW@_SNDPAUSE@_SNDPAUSED@_SNDPLAY@_SNDPLAYCOPY@_SNDPLAYFILE@_SNDPLAYING@_SNDRATE@_SNDRAW@_SNDRAWDONE@_SNDRAWLEN@_SNDSETPOS@_SNDSTOP@_SNDVOL@_SOURCE@_STARTDIR$@_STRCMP@_STRICMP@_TANH@_TITLE@_TITLE$@_UNSIGNED@_WHEEL@_WIDTH@_WINDOWHANDLE@_WINDOWHASFOCUS@_GLACCUM@_GLALPHAFUNC@_GLARETEXTURESRESIDENT@_GLARRAYELEMENT@_GLBEGIN@_GLBINDTEXTURE@_GLBITMAP@_GLBLENDFUNC@_GLCALLLIST@_GLCALLLISTS@_GLCLEAR@_GLCLEARACCUM@_GLCLEARCOLOR@_GLCLEARDEPTH@_GLCLEARINDEX@_GLCLEARSTENCIL@_GLCLIPPLANE@_GLCOLOR3B@_GLCOLOR3BV@_GLCOLOR3D@_GLCOLOR3DV@_GLCOLOR3F@_GLCOLOR3FV@_GLCOLOR3I@_GLCOLOR3IV@_GLCOLOR3S@_GLCOLOR3SV@_GLCOLOR3UB@_GLCOLOR3UBV@_GLCOLOR3UI@_GLCOLOR3UIV@_GLCOLOR3US@_GLCOLOR3USV@_GLCOLOR4B@_GLCOLOR4BV@_GLCOLOR4D@_GLCOLOR4DV@_GLCOLOR4F@_GLCOLOR4FV@_GLCOLOR4I@_GLCOLOR4IV@_GLCOLOR4S@_GLCOLOR4SV@_GLCOLOR4UB@_GLCOLOR4UBV@_GLCOLOR4UI@_GLCOLOR4UIV@_GLCOLOR4US@_GLCOLOR4USV@_GLCOLORMASK@_GLCOLORMATERIAL@_GLCOLORPOINTER@_GLCOPYPIXELS@_GLCOPYTEXIMAGE1D@_GLCOPYTEXIMAGE2D@_GLCOPYTEXSUBIMAGE1D@"
listOfKeywords$ = listOfKeywords$ + "_GLPOPATTRIB@_GLPOPCLIENTATTRIB@_GLPOPMATRIX@_GLPOPNAME@_GLPRIORITIZETEXTURES@_GLPUSHATTRIB@_GLPUSHCLIENTATTRIB@_GLPUSHMATRIX@_GLPUSHNAME@_GLRASTERPOS2D@_GLRASTERPOS2DV@_GLRASTERPOS2F@_GLRASTERPOS2FV@_GLRASTERPOS2I@_GLRASTERPOS2IV@_GLRASTERPOS2S@_GLRASTERPOS2SV@_GLRASTERPOS3D@_GLRASTERPOS3DV@_GLRASTERPOS3F@_GLRASTERPOS3FV@_GLRASTERPOS3I@_GLRASTERPOS3IV@_GLRASTERPOS3S@_GLRASTERPOS3SV@_GLRASTERPOS4D@_GLRASTERPOS4DV@_GLRASTERPOS4F@_GLRASTERPOS4FV@_GLRASTERPOS4I@_GLRASTERPOS4IV@_GLRASTERPOS4S@_GLRASTERPOS4SV@_GLREADBUFFER@_GLREADPIXELS@_GLRECTD@_GLRECTDV@_GLRECTF@_GLRECTFV@_GLRECTI@_GLRECTIV@_GLRECTS@_GLRECTSV@_GLRENDERMODE@_GLROTATED@_GLROTATEF@_GLSCALED@_GLSCALEF@_GLSCISSOR@_GLSELECTBUFFER@_GLSHADEMODEL@_GLSTENCILFUNC@_GLSTENCILMASK@_GLSTENCILOP@_GLTEXCOORD1D@_GLTEXCOORD1DV@_GLTEXCOORD1F@_GLTEXCOORD1FV@_GLTEXCOORD1I@_GLTEXCOORD1IV@_GLTEXCOORD1S@_GLTEXCOORD1SV@_GLTEXCOORD2D@_GLTEXCOORD2DV@_GLTEXCOORD2F@_GLTEXCOORD2FV@_GLTEXCOORD2I@_GLTEXCOORD2IV@_GLTEXCOORD2S@_GLTEXCOORD2SV@_GLTEXCOORD3D@_GLTEXCOORD3DV@_GLTEXCOORD3F@_GLTEXCOORD3FV@_GLTEXCOORD3I@_GLTEXCOORD3IV@_GLTEXCOORD3S@_GLTEXCOORD3SV@_GLTEXCOORD4D@_GLTEXCOORD4DV@_GLTEXCOORD4F@_GLTEXCOORD4FV@_GLTEXCOORD4I@_GLTEXCOORD4IV@_GLTEXCOORD4S@_GLTEXCOORD4SV@_GLTEXCOORDPOINTER@_GLTEXENVF@_GLTEXENVFV@_GLTEXENVI@_GLTEXENVIV@_GLTEXGEND@_GLTEXGENDV@_GLTEXGENF@_GLTEXGENFV@_GLTEXGENI@_GLTEXGENIV@_GLTEXIMAGE1D@_GLTEXIMAGE2D@_GLTEXPARAMETERF@_GLTEXPARAMETERFV@_GLTEXPARAMETERI@_GLTEXPARAMETERIV@_GLTEXSUBIMAGE1D@_GLTEXSUBIMAGE2D@_GLTRANSLATED@_GLTRANSLATEF@_GLVERTEX2D@_GLVERTEX2DV@_GLVERTEX2F@_GLVERTEX2FV@_GLVERTEX2I@_GLVERTEX2IV@_GLVERTEX2S@_GLVERTEX2SV@_GLVERTEX3D@_GLVERTEX3DV@_GLVERTEX3F@_GLVERTEX3FV@_GLVERTEX3I@_GLVERTEX3IV@_GLVERTEX3S@_GLVERTEX3SV@_GLVERTEX4D@_GLVERTEX4DV@_GLVERTEX4F@_GLVERTEX4FV@_GLVERTEX4I@_GLVERTEX4IV@_GLVERTEX4S@_GLVERTEX4SV@_GLVERTEXPOINTER@_GLVIEWPORT@SMOOTH@STRETCH@_ANTICLOCKWISE@_BEHIND@_CLEAR@_FILLBACKGROUND@_GLUPERSPECTIVE@_HARDWARE@_HARDWARE1@_KEEPBACKGROUND@_NONE@_OFF@_ONLY@_ONLYBACKGROUND@_ONTOP@_SEAMLESS@_SMOOTH@_SMOOTHSHRUNK@_SMOOTHSTRETCHED@" backupListOfKeywords$ = backupListOfKeywords$ + "_GLCOPYTEXSUBIMAGE2D@_GLCULLFACE@_GLDELETELISTS@_GLDELETETEXTURES@_GLDEPTHFUNC@_GLDEPTHMASK@_GLDEPTHRANGE@_GLDISABLE@_GLDISABLECLIENTSTATE@_GLDRAWARRAYS@_GLDRAWBUFFER@_GLDRAWELEMENTS@_GLDRAWPIXELS@_GLEDGEFLAG@_GLEDGEFLAGPOINTER@_GLEDGEFLAGV@_GLENABLE@_GLENABLECLIENTSTATE@_GLEND@_GLENDLIST@_GLEVALCOORD1D@_GLEVALCOORD1DV@_GLEVALCOORD1F@_GLEVALCOORD1FV@_GLEVALCOORD2D@_GLEVALCOORD2DV@_GLEVALCOORD2F@_GLEVALCOORD2FV@_GLEVALMESH1@_GLEVALMESH2@_GLEVALPOINT1@_GLEVALPOINT2@_GLFEEDBACKBUFFER@_GLFINISH@_GLFLUSH@_GLFOGF@_GLFOGFV@_GLFOGI@_GLFOGIV@_GLFRONTFACE@_GLFRUSTUM@_GLGENLISTS@_GLGENTEXTURES@_GLGETBOOLEANV@_GLGETCLIPPLANE@_GLGETDOUBLEV@_GLGETERROR@_GLGETFLOATV@_GLGETINTEGERV@_GLGETLIGHTFV@_GLGETLIGHTIV@_GLGETMAPDV@_GLGETMAPFV@_GLGETMAPIV@_GLGETMATERIALFV@_GLGETMATERIALIV@_GLGETPIXELMAPFV@_GLGETPIXELMAPUIV@_GLGETPIXELMAPUSV@_GLGETPOINTERV@_GLGETPOLYGONSTIPPLE@_GLGETSTRING@_GLGETTEXENVFV@_GLGETTEXENVIV@_GLGETTEXGENDV@_GLGETTEXGENFV@_GLGETTEXGENIV@_GLGETTEXIMAGE@_GLGETTEXLEVELPARAMETERFV@_GLGETTEXLEVELPARAMETERIV@_GLGETTEXPARAMETERFV@_GLGETTEXPARAMETERIV@_GLHINT@_GLINDEXMASK@_GLINDEXPOINTER@_GLINDEXD@_GLINDEXDV@_GLINDEXF@_GLINDEXFV@_GLINDEXI@_GLINDEXIV@_GLINDEXS@_GLINDEXSV@_GLINDEXUB@_GLINDEXUBV@_GLINITNAMES@_GLINTERLEAVEDARRAYS@_GLISENABLED@_GLISLIST@_GLISTEXTURE@_GLLIGHTMODELF@_GLLIGHTMODELFV@_GLLIGHTMODELI@_GLLIGHTMODELIV@_GLLIGHTF@_GLLIGHTFV@_GLLIGHTI@_GLLIGHTIV@_GLLINESTIPPLE@_GLLINEWIDTH@_GLLISTBASE@_GLLOADIDENTITY@_GLLOADMATRIXD@_GLLOADMATRIXF@_GLLOADNAME@_GLLOGICOP@_GLMAP1D@_GLMAP1F@_GLMAP2D@_GLMAP2F@_GLMAPGRID1D@_GLMAPGRID1F@_GLMAPGRID2D@_GLMAPGRID2F@_GLMATERIALF@_GLMATERIALFV@_GLMATERIALI@_GLMATERIALIV@_GLMATRIXMODE@_GLMULTMATRIXD@_GLMULTMATRIXF@_GLNEWLIST@_GLNORMAL3B@_GLNORMAL3BV@_GLNORMAL3D@_GLNORMAL3DV@_GLNORMAL3F@_GLNORMAL3FV@_GLNORMAL3I@_GLNORMAL3IV@_GLNORMAL3S@_GLNORMAL3SV@_GLNORMALPOINTER@_GLORTHO@_GLPASSTHROUGH@_GLPIXELMAPFV@_GLPIXELMAPUIV@_GLPIXELMAPUSV@_GLPIXELSTOREF@_GLPIXELSTOREI@_GLPIXELTRANSFERF@_GLPIXELTRANSFERI@_GLPIXELZOOM@_GLPOINTSIZE@_GLPOLYGONMODE@_GLPOLYGONOFFSET@_GLPOLYGONSTIPPLE@"
listOfKeywords$ = listOfKeywords$ + "_SOFTWARE@_SQUAREPIXELS@_STRETCH@_ALLOWFULLSCREEN@_ALL@_ECHO@_INSTRREV@_TRIM$@_ACCEPTFILEDROP@_FINISHDROP@_TOTALDROPPEDFILES@_DROPPEDFILE@_DROPPEDFILE$@_SHR@_SHL@" backupListOfKeywords$ = backupListOfKeywords$ + "_GLPOPATTRIB@_GLPOPCLIENTATTRIB@_GLPOPMATRIX@_GLPOPNAME@_GLPRIORITIZETEXTURES@_GLPUSHATTRIB@_GLPUSHCLIENTATTRIB@_GLPUSHMATRIX@_GLPUSHNAME@_GLRASTERPOS2D@_GLRASTERPOS2DV@_GLRASTERPOS2F@_GLRASTERPOS2FV@_GLRASTERPOS2I@_GLRASTERPOS2IV@_GLRASTERPOS2S@_GLRASTERPOS2SV@_GLRASTERPOS3D@_GLRASTERPOS3DV@_GLRASTERPOS3F@_GLRASTERPOS3FV@_GLRASTERPOS3I@_GLRASTERPOS3IV@_GLRASTERPOS3S@_GLRASTERPOS3SV@_GLRASTERPOS4D@_GLRASTERPOS4DV@_GLRASTERPOS4F@_GLRASTERPOS4FV@_GLRASTERPOS4I@_GLRASTERPOS4IV@_GLRASTERPOS4S@_GLRASTERPOS4SV@_GLREADBUFFER@_GLREADPIXELS@_GLRECTD@_GLRECTDV@_GLRECTF@_GLRECTFV@_GLRECTI@_GLRECTIV@_GLRECTS@_GLRECTSV@_GLRENDERMODE@_GLROTATED@_GLROTATEF@_GLSCALED@_GLSCALEF@_GLSCISSOR@_GLSELECTBUFFER@_GLSHADEMODEL@_GLSTENCILFUNC@_GLSTENCILMASK@_GLSTENCILOP@_GLTEXCOORD1D@_GLTEXCOORD1DV@_GLTEXCOORD1F@_GLTEXCOORD1FV@_GLTEXCOORD1I@_GLTEXCOORD1IV@_GLTEXCOORD1S@_GLTEXCOORD1SV@_GLTEXCOORD2D@_GLTEXCOORD2DV@_GLTEXCOORD2F@_GLTEXCOORD2FV@_GLTEXCOORD2I@_GLTEXCOORD2IV@_GLTEXCOORD2S@_GLTEXCOORD2SV@_GLTEXCOORD3D@_GLTEXCOORD3DV@_GLTEXCOORD3F@_GLTEXCOORD3FV@_GLTEXCOORD3I@_GLTEXCOORD3IV@_GLTEXCOORD3S@_GLTEXCOORD3SV@_GLTEXCOORD4D@_GLTEXCOORD4DV@_GLTEXCOORD4F@_GLTEXCOORD4FV@_GLTEXCOORD4I@_GLTEXCOORD4IV@_GLTEXCOORD4S@_GLTEXCOORD4SV@_GLTEXCOORDPOINTER@_GLTEXENVF@_GLTEXENVFV@_GLTEXENVI@_GLTEXENVIV@_GLTEXGEND@_GLTEXGENDV@_GLTEXGENF@_GLTEXGENFV@_GLTEXGENI@_GLTEXGENIV@_GLTEXIMAGE1D@_GLTEXIMAGE2D@_GLTEXPARAMETERF@_GLTEXPARAMETERFV@_GLTEXPARAMETERI@_GLTEXPARAMETERIV@_GLTEXSUBIMAGE1D@_GLTEXSUBIMAGE2D@_GLTRANSLATED@_GLTRANSLATEF@_GLVERTEX2D@_GLVERTEX2DV@_GLVERTEX2F@_GLVERTEX2FV@_GLVERTEX2I@_GLVERTEX2IV@_GLVERTEX2S@_GLVERTEX2SV@_GLVERTEX3D@_GLVERTEX3DV@_GLVERTEX3F@_GLVERTEX3FV@_GLVERTEX3I@_GLVERTEX3IV@_GLVERTEX3S@_GLVERTEX3SV@_GLVERTEX4D@_GLVERTEX4DV@_GLVERTEX4F@_GLVERTEX4FV@_GLVERTEX4I@_GLVERTEX4IV@_GLVERTEX4S@_GLVERTEX4SV@_GLVERTEXPOINTER@_GLVIEWPORT@SMOOTH@STRETCH@_ANTICLOCKWISE@_BEHIND@_CLEAR@_FILLBACKGROUND@_GLUPERSPECTIVE@_HARDWARE@_HARDWARE1@_KEEPBACKGROUND@_NONE@_OFF@_ONLY@_ONLYBACKGROUND@_ONTOP@_SEAMLESS@_SMOOTH@_SMOOTHSHRUNK@_SMOOTHSTRETCHED@"
listOfKeywords$ = listOfKeywords$ + "_DEFLATE$@_INFLATE$@_READBIT@_RESETBIT@_SETBIT@_TOGGLEBIT@$ASSERTS@_ASSERT@_CAPSLOCK@_NUMLOCK@_SCROLLLOCK@_TOGGLE@_CONSOLEFONT@_CONSOLECURSOR@_CONSOLEINPUT@_CINP@" backupListOfKeywords$ = backupListOfKeywords$ + "_SOFTWARE@_SQUAREPIXELS@_STRETCH@_ALLOWFULLSCREEN@_ALL@_ECHO@_INSTRREV@_TRIM$@_ACCEPTFILEDROP@_FINISHDROP@_TOTALDROPPEDFILES@_DROPPEDFILE@_DROPPEDFILE$@_SHR@_SHL@"
backupListOfKeywords$ = backupListOfKeywords$ + "_DEFLATE$@_INFLATE$@_READBIT@_RESETBIT@_SETBIT@_TOGGLEBIT@$ASSERTS@_ASSERT@_CAPSLOCK@_NUMLOCK@_SCROLLLOCK@_TOGGLE@_CONSOLEFONT@_CONSOLECURSOR@_CONSOLEINPUT@_CINP@$NOPREFIX@"
listOfKeywords$ = backupListOfKeywords$
listOfKeywordsWithoutPrefix$ = backupListOfKeywords$
i = 0
DO
i = INSTR(i + 1, listOfKeywordsWithoutPrefix$, "_")
IF i = 0 THEN EXIT DO
listOfKeywordsWithoutPrefix$ = LEFT$(listOfKeywordsWithoutPrefix$, i - 1) + MID$(listOfKeywordsWithoutPrefix$, i + 1)
LOOP
'IDE MODULE: shared data & definitions 'IDE MODULE: shared data & definitions
'--------------------------------------------------- '---------------------------------------------------

View file

@ -24,7 +24,6 @@ DEFLNG A-Z
REDIM SHARED OName(0) AS STRING 'Operation Name REDIM SHARED OName(0) AS STRING 'Operation Name
REDIM SHARED PL(0) AS INTEGER 'Priority Level REDIM SHARED PL(0) AS INTEGER 'Priority Level
DIM SHARED QuickReturn AS INTEGER DIM SHARED QuickReturn AS INTEGER
Set_OrderOfOperations 'This will also make certain our directories are valid, and if not make them.
REDIM EveryCaseSet(100), SelectCaseCounter AS _UNSIGNED LONG REDIM EveryCaseSet(100), SelectCaseCounter AS _UNSIGNED LONG
DIM ExecLevel(255), ExecCounter AS INTEGER DIM ExecLevel(255), ExecCounter AS INTEGER
@ -103,7 +102,7 @@ DIM SHARED VerboseMode AS _BYTE, CMDLineFile AS STRING
DIM SHARED totalUnusedVariables AS LONG, usedVariableList$, bypassNextVariable AS _BYTE DIM SHARED totalUnusedVariables AS LONG, usedVariableList$, bypassNextVariable AS _BYTE
DIM SHARED totalWarnings AS LONG, warningListItems AS LONG, lastWarningHeader AS STRING DIM SHARED totalWarnings AS LONG, warningListItems AS LONG, lastWarningHeader AS STRING
DIM SHARED duplicateConstWarning AS _BYTE DIM SHARED duplicateConstWarning AS _BYTE
DIM SHARED ExeIconSet AS LONG DIM SHARED ExeIconSet AS LONG, qb64prefix$, qb64prefix_set
DIM SHARED VersionInfoSet AS _BYTE DIM SHARED VersionInfoSet AS _BYTE
'Variables to handle $VERSIONINFO metacommand: 'Variables to handle $VERSIONINFO metacommand:
@ -1415,6 +1414,9 @@ lastWarningHeader = ""
REDIM SHARED warning$(1000) REDIM SHARED warning$(1000)
uniquenumbern = 0 uniquenumbern = 0
ColorHack = 0 ColorHack = 0
qb64prefix_set = 0
qb64prefix$ = "_"
listOfKeywords$ = backupListOfKeywords$
''create a type for storing memory blocks ''create a type for storing memory blocks
''UDT ''UDT
@ -1534,6 +1536,7 @@ IF idemode = 0 THEN
qberrorhappened = 0 qberrorhappened = 0
END IF END IF
Set_OrderOfOperations
reginternal reginternal
@ -2397,7 +2400,7 @@ DO
IF firstelement$ = "DEFSNG" THEN d = 1 IF firstelement$ = "DEFSNG" THEN d = 1
IF firstelement$ = "DEFDBL" THEN d = 1 IF firstelement$ = "DEFDBL" THEN d = 1
IF firstelement$ = "DEFSTR" THEN d = 1 IF firstelement$ = "DEFSTR" THEN d = 1
IF firstelement$ = "_DEFINE" THEN d = 1 IF firstelement$ = qb64prefix$ + "DEFINE" THEN d = 1
IF d THEN IF d THEN
predefining = 1: GOTO predefine predefining = 1: GOTO predefine
predefined: predefining = 0 predefined: predefining = 0
@ -2972,8 +2975,9 @@ DO
IF LEFT$(a3u$, 4) = "REM " OR _ IF LEFT$(a3u$, 4) = "REM " OR _
(LEFT$(a3u$, 3) = "REM" AND LEN(a3u$) = 3) OR _ (LEFT$(a3u$, 3) = "REM" AND LEN(a3u$) = 3) OR _
LEFT$(a3u$, 1) = "'" OR _ LEFT$(a3u$, 1) = "'" OR _
(LEFT$(a3u$, 7) = "OPTION " AND LEFT$(LTRIM$(MID$(a3u$, 8)), 9) = "_EXPLICIT") THEN (LEFT$(a3u$, 7) = "OPTION " AND LEFT$(LTRIM$(MID$(a3u$, 8)), 9) = qb64prefix$ + "EXPLICIT") OR _
'It's a comment or OPTION _EXPLICIT itself, alright. LEFT$(a3u$, 1) = "$" THEN
'It's a comment, $metacommand, or OPTION _EXPLICIT itself, alright.
'But even being a comment, there could be an $INCLUDE in there, let's check: 'But even being a comment, there could be an $INCLUDE in there, let's check:
IF LEFT$(a3u$, 4) = "REM " THEN i = 5 ELSE i = 2 IF LEFT$(a3u$, 4) = "REM " THEN i = 5 ELSE i = 2
IF LEFT$(LTRIM$(MID$(a3u$, i)), 8) = "$INCLUDE" THEN opex_comments = 0 IF LEFT$(LTRIM$(MID$(a3u$, i)), 8) = "$INCLUDE" THEN opex_comments = 0
@ -3118,7 +3122,7 @@ DO
linenumber = oldlinenumber linenumber = oldlinenumber
GOTO ideret4 GOTO ideret4
ELSE ELSE
a$ = "$COLOR can only be set once. Please remove multiple references to it." a$ = "$COLOR can only be set once"
GOTO errmes GOTO errmes
END IF END IF
END IF END IF
@ -3404,7 +3408,7 @@ DO
linenumber = oldlinenumber linenumber = oldlinenumber
GOTO ideret4 GOTO ideret4
ELSE ELSE
a$ = "$COLOR can only be set once. Please remove multiple references to it." a$ = "$COLOR can only be set once"
GOTO errmes GOTO errmes
END IF END IF
END IF END IF
@ -3462,6 +3466,37 @@ DO
GOTO finishednonexec GOTO finishednonexec
END IF END IF
IF LEFT$(a3u$, 9) = "$NOPREFIX" THEN
IF qb64prefix_set = 0 THEN
IF linenumber > 1 THEN
a$ = "$NOPREFIX must be set in the first line": GOTO errmes
END IF
layout$ = "$NOPREFIX"
qb64prefix$ = ""
qb64prefix_set = 1
're-add internal keywords without the "_" prefix
Set_OrderOfOperations
IF UseGL THEN gl_include_content
reginternal
f = HASHFLAG_TYPE + HASHFLAG_RESERVED
HashAdd qb64prefix$ + "UNSIGNED", f, 0
HashAdd qb64prefix$ + "BIT", f, 0
HashAdd qb64prefix$ + "BYTE", f, 0
HashAdd qb64prefix$ + "INTEGER64", f, 0
HashAdd qb64prefix$ + "OFFSET", f, 0
HashAdd qb64prefix$ + "FLOAT", f, 0
f = HASHFLAG_RESERVED + HASHFLAG_CUSTOMSYNTAX
HashAdd qb64prefix$ + "EXPLICIT", f, 0
listOfKeywords$ = listOfKeywordsWithoutPrefix$
GOTO finishednonexec
ELSE
a$ = "$NOPREFIX can only be set once": GOTO errmes
END IF
END IF
IF a3u$ = "$SCREENHIDE" THEN IF a3u$ = "$SCREENHIDE" THEN
layout$ = "$SCREENHIDE" layout$ = "$SCREENHIDE"
@ -3560,12 +3595,12 @@ DO
ValidateVersion: ValidateVersion:
'Check if only numbers and commas (4 comma-separated values) 'Check if only numbers and commas (4 comma-separated values)
IF LEN(VersionInfoValue$) = 0 THEN a$ = "Expected: $VERSIONINFO:" + VersionInfoKey$ + "=#,#,#,# (4 comma-separated numeric values: major, minor, revision and build)": GOTO errmes IF LEN(VersionInfoValue$) = 0 THEN a$ = "Expected $VERSIONINFO:" + VersionInfoKey$ + "=#,#,#,# (4 comma-separated numeric values: major, minor, revision and build)": GOTO errmes
viCommas = 0 viCommas = 0
FOR i = 1 TO LEN(VersionInfoValue$) FOR i = 1 TO LEN(VersionInfoValue$)
IF ASC(VersionInfoValue$, i) = 44 THEN viCommas = viCommas + 1 IF ASC(VersionInfoValue$, i) = 44 THEN viCommas = viCommas + 1
IF INSTR("0123456789,", MID$(VersionInfoValue$, i, 1)) = 0 OR (i = LEN(VersionInfoValue$) AND viCommas <> 3) OR RIGHT$(VersionInfoValue$, 1) = "," THEN IF INSTR("0123456789,", MID$(VersionInfoValue$, i, 1)) = 0 OR (i = LEN(VersionInfoValue$) AND viCommas <> 3) OR RIGHT$(VersionInfoValue$, 1) = "," THEN
a$ = "Expected: $VERSIONINFO:" + VersionInfoKey$ + "=#,#,#,# (4 comma-separated numeric values: major, minor, revision and build)": GOTO errmes a$ = "Expected $VERSIONINFO:" + VersionInfoKey$ + "=#,#,#,# (4 comma-separated numeric values: major, minor, revision and build)": GOTO errmes
END IF END IF
NEXT NEXT
RETURN RETURN
@ -5590,7 +5625,7 @@ DO
IF firstelement$ = "DEFSNG" THEN a$ = a$ + sp + "AS" + sp + "SINGLE": n = n + 2: GOTO definetype IF firstelement$ = "DEFSNG" THEN a$ = a$ + sp + "AS" + sp + "SINGLE": n = n + 2: GOTO definetype
IF firstelement$ = "DEFDBL" THEN a$ = a$ + sp + "AS" + sp + "DOUBLE": n = n + 2: GOTO definetype IF firstelement$ = "DEFDBL" THEN a$ = a$ + sp + "AS" + sp + "DOUBLE": n = n + 2: GOTO definetype
IF firstelement$ = "DEFSTR" THEN a$ = a$ + sp + "AS" + sp + "STRING": n = n + 2: GOTO definetype IF firstelement$ = "DEFSTR" THEN a$ = a$ + sp + "AS" + sp + "STRING": n = n + 2: GOTO definetype
IF firstelement$ = "_DEFINE" THEN IF firstelement$ = qb64prefix$ + "DEFINE" THEN
asreq = 1 asreq = 1
definetype: definetype:
l$ = firstelement$ l$ = firstelement$
@ -5605,8 +5640,8 @@ DO
typ2$ = t$ + sp + typ2$ typ2$ = t$ + sp + typ2$
NEXT NEXT
typ$ = RTRIM$(typ$) typ$ = RTRIM$(typ$)
IF t$ <> "AS" THEN a$ = "_DEFINE: Expected ... AS ...": GOTO errmes IF t$ <> "AS" THEN a$ = qb64prefix$ + "DEFINE: Expected ... AS ...": GOTO errmes
IF i = n OR i = 2 THEN a$ = "_DEFINE: Expected ... AS ...": GOTO errmes IF i = n OR i = 2 THEN a$ = qb64prefix$ + "DEFINE: Expected ... AS ...": GOTO errmes
n = i - 1 n = i - 1
@ -5615,8 +5650,8 @@ DO
definenext: definenext:
'expects an alphabet letter or underscore 'expects an alphabet letter or underscore
i = i + 1: e$ = getelement$(a$, i): E = ASC(UCASE$(e$)) i = i + 1: e$ = getelement$(a$, i): E = ASC(UCASE$(e$))
IF LEN(e$) > 1 THEN a$ = "_DEFINE: Expected an alphabet letter or the underscore character (_)": GOTO errmes IF LEN(e$) > 1 THEN a$ = qb64prefix$ + "DEFINE: Expected an alphabet letter or the underscore character (_)": GOTO errmes
IF E <> 95 AND (E > 90 OR E < 65) THEN a$ = "_DEFINE: Expected an alphabet letter or the underscore character (_)": GOTO errmes IF E <> 95 AND (E > 90 OR E < 65) THEN a$ = qb64prefix$ + "DEFINE: Expected an alphabet letter or the underscore character (_)": GOTO errmes
IF E = 95 THEN E = 27 ELSE E = E - 64 IF E = 95 THEN E = 27 ELSE E = E - 64
defineaz(E) = typ$ defineaz(E) = typ$
defineextaz(E) = type2symbol(typ$) defineextaz(E) = type2symbol(typ$)
@ -5633,14 +5668,14 @@ DO
'expects "-" or "," 'expects "-" or ","
i = i + 1: e$ = getelement$(a$, i) i = i + 1: e$ = getelement$(a$, i)
IF e$ <> "-" AND e$ <> "," THEN a$ = "_DEFINE: Expected - or ,": GOTO errmes IF e$ <> "-" AND e$ <> "," THEN a$ = qb64prefix$ + "DEFINE: Expected - or ,": GOTO errmes
IF e$ = "-" THEN IF e$ = "-" THEN
l$ = l$ + sp2 + "-" l$ = l$ + sp2 + "-"
IF i = n THEN a$ = "_DEFINE: Syntax incomplete": GOTO errmes IF i = n THEN a$ = qb64prefix$ + "DEFINE: Syntax incomplete": GOTO errmes
'expects an alphabet letter or underscore 'expects an alphabet letter or underscore
i = i + 1: e$ = getelement$(a$, i): E = ASC(UCASE$(e$)) i = i + 1: e$ = getelement$(a$, i): E = ASC(UCASE$(e$))
IF LEN(e$) > 1 THEN a$ = "_DEFINE: Expected an alphabet letter or the underscore character (_)": GOTO errmes IF LEN(e$) > 1 THEN a$ = qb64prefix$ + "DEFINE: Expected an alphabet letter or the underscore character (_)": GOTO errmes
IF E <> 95 AND (E > 90 OR E < 65) THEN a$ = "_DEFINE: Expected an alphabet letter or the underscore character (_)": GOTO errmes IF E <> 95 AND (E > 90 OR E < 65) THEN a$ = qb64prefix$ + "DEFINE: Expected an alphabet letter or the underscore character (_)": GOTO errmes
IF E = 95 THEN E = 27 ELSE E = E - 64 IF E = 95 THEN E = 27 ELSE E = E - 64
IF firste > E THEN SWAP E, firste IF firste > E THEN SWAP E, firste
FOR e2 = firste TO E FOR e2 = firste TO E
@ -5657,7 +5692,7 @@ DO
END IF END IF
'expects "," 'expects ","
i = i + 1: e$ = getelement$(a$, i) i = i + 1: e$ = getelement$(a$, i)
IF e$ <> "," THEN a$ = "_DEFINE: Expected ,": GOTO errmes IF e$ <> "," THEN a$ = qb64prefix$ + "DEFINE: Expected ,": GOTO errmes
END IF END IF
l$ = l$ + sp2 + "," l$ = l$ + sp2 + ","
GOTO definenext GOTO definenext
@ -7569,9 +7604,9 @@ DO
'_ECHO checking '_ECHO checking
IF firstelement$ = "_ECHO" THEN IF firstelement$ = qb64prefix$ + "ECHO" THEN
IF Console = 0 THEN IF Console = 0 THEN
a$ = "_ECHO requires $CONSOLE or $CONSOLE:ONLY to be set first": GOTO errmes a$ = qb64prefix$ + "ECHO requires $CONSOLE or $CONSOLE:ONLY to be set first": GOTO errmes
END IF END IF
END IF END IF
@ -7873,7 +7908,7 @@ DO
IF firstelement$ = "DIM" THEN dimoption = 1 IF firstelement$ = "DIM" THEN dimoption = 1
IF firstelement$ = "REDIM" THEN IF firstelement$ = "REDIM" THEN
dimoption = 2: redimoption = 1 dimoption = 2: redimoption = 1
IF secondelement$ = "_PRESERVE" THEN IF secondelement$ = qb64prefix$ + "PRESERVE" THEN
redimoption = 2 redimoption = 2
IF n = 2 THEN a$ = "Expected REDIM _PRESERVE ...": GOTO errmes IF n = 2 THEN a$ = "Expected REDIM _PRESERVE ...": GOTO errmes
END IF END IF
@ -7888,7 +7923,7 @@ DO
IF commonoption = 1 AND subfuncn <> 0 THEN a$ = "COMMON cannot be used within a SUB/FUNCTION": GOTO errmes IF commonoption = 1 AND subfuncn <> 0 THEN a$ = "COMMON cannot be used within a SUB/FUNCTION": GOTO errmes
i = 2 i = 2
IF redimoption = 2 THEN i = 3: l$ = l$ + sp + "_PRESERVE" IF redimoption = 2 THEN i = 3: l$ = l$ + sp + qb64prefix$ + "PRESERVE"
IF dimoption <> 3 THEN 'shared cannot be static IF dimoption <> 3 THEN 'shared cannot be static
a2$ = getelement(a$, i) a2$ = getelement(a$, i)
@ -8512,8 +8547,8 @@ DO
END IF END IF
IF n = 1 THEN IF n = 1 THEN
IF firstelement$ = "_CONTINUE" THEN IF firstelement$ = "_CONTINUE" OR (firstelement$ = "CONTINUE" AND qb64prefix_set = 1) THEN
l$ = "_CONTINUE" l$ = UCASE$(firstelement$)
'scan backwards until previous control level reached 'scan backwards until previous control level reached
FOR i = controllevel TO 1 STEP -1 FOR i = controllevel TO 1 STEP -1
t = controltype(i) t = controltype(i)
@ -8531,7 +8566,7 @@ DO
GOTO finishedline GOTO finishedline
END IF END IF
NEXT NEXT
a$ = "_CONTINUE outside DO..LOOP/FOR..NEXT/WHILE..WEND block": GOTO errmes a$ = qb64prefix$ + "CONTINUE outside DO..LOOP/FOR..NEXT/WHILE..WEND block": GOTO errmes
END IF END IF
END IF END IF
@ -8903,7 +8938,7 @@ DO
'(_MEM) _MEMPUT _MEMGET '(_MEM) _MEMPUT _MEMGET
IF n >= 1 THEN IF n >= 1 THEN
IF firstelement$ = "_MEMGET" THEN IF firstelement$ = "_MEMGET" OR (firstelement$ = "MEMGET" AND qb64prefix_set = 1) THEN
'get expressions 'get expressions
e$ = "" e$ = ""
B = 0 B = 0
@ -8922,15 +8957,15 @@ DO
END IF END IF
NEXT NEXT
var$ = e$ var$ = e$
IF e$ = "" OR ne <> 2 THEN a$ = "Expected _MEMGET mem-reference,offset,variable": GOTO errmes IF e$ = "" OR ne <> 2 THEN a$ = "Expected " + qb64prefix$ + "MEMGET mem-reference, offset, variable": GOTO errmes
l$ = "_MEMGET" + sp l$ = UCASE$(firstelement$) + sp
e$ = fixoperationorder$(blk$): IF Error_Happened THEN GOTO errmes e$ = fixoperationorder$(blk$): IF Error_Happened THEN GOTO errmes
l$ = l$ + tlayout$ l$ = l$ + tlayout$
test$ = evaluate(e$, typ): IF Error_Happened THEN GOTO errmes test$ = evaluate(e$, typ): IF Error_Happened THEN GOTO errmes
IF (typ AND ISUDT) = 0 OR (typ AND 511) <> 1 THEN a$ = "Expected _MEM type": GOTO errmes IF (typ AND ISUDT) = 0 OR (typ AND 511) <> 1 THEN a$ = "Expected " + qb64prefix$ + "MEM type": GOTO errmes
blkoffs$ = evaluatetotyp(e$, -6) blkoffs$ = evaluatetotyp(e$, -6)
' IF typ AND ISREFERENCE THEN e$ = refer(e$, typ, 0) ' IF typ AND ISREFERENCE THEN e$ = refer(e$, typ, 0)
@ -9002,7 +9037,7 @@ DO
IF n >= 1 THEN IF n >= 1 THEN
IF firstelement$ = "_MEMPUT" THEN IF firstelement$ = "_MEMPUT" OR (firstelement$ = "MEMPUT" AND qb64prefix_set = 1) THEN
'get expressions 'get expressions
typ$ = "" typ$ = ""
e$ = "" e$ = ""
@ -9022,16 +9057,16 @@ DO
IF LEN(e$) = 0 THEN e$ = e2$ ELSE e$ = e$ + sp + e2$ IF LEN(e$) = 0 THEN e$ = e2$ ELSE e$ = e$ + sp + e2$
END IF END IF
NEXT NEXT
IF ne < 2 OR e$ = "" THEN a$ = "Expected _MEMPUT mem-reference,offset,variable|value[AS type]": GOTO errmes IF ne < 2 OR e$ = "" THEN a$ = "Expected " + qb64prefix$ + "MEMPUT mem-reference, offset, variable|value[AS type]": GOTO errmes
IF ne = 2 THEN var$ = e$ ELSE typ$ = UCASE$(e$) IF ne = 2 THEN var$ = e$ ELSE typ$ = UCASE$(e$)
l$ = "_MEMPUT" + sp l$ = UCASE$(firstelement$) + sp
e$ = fixoperationorder$(blk$): IF Error_Happened THEN GOTO errmes e$ = fixoperationorder$(blk$): IF Error_Happened THEN GOTO errmes
l$ = l$ + tlayout$ l$ = l$ + tlayout$
test$ = evaluate(e$, typ): IF Error_Happened THEN GOTO errmes test$ = evaluate(e$, typ): IF Error_Happened THEN GOTO errmes
IF (typ AND ISUDT) = 0 OR (typ AND 511) <> 1 THEN a$ = "Expected _MEM type": GOTO errmes IF (typ AND ISUDT) = 0 OR (typ AND 511) <> 1 THEN a$ = "Expected " + qb64prefix$ + "MEM type": GOTO errmes
blkoffs$ = evaluatetotyp(e$, -6) blkoffs$ = evaluatetotyp(e$, -6)
e$ = fixoperationorder$(offs$): IF Error_Happened THEN GOTO errmes e$ = fixoperationorder$(offs$): IF Error_Happened THEN GOTO errmes
@ -9096,7 +9131,7 @@ DO
'typname2typsize = 0 'the default 'typname2typsize = 0 'the default
t = typname2typ(typ$) t = typname2typ(typ$)
IF t = 0 THEN a$ = "Invalid type": GOTO errmes IF t = 0 THEN a$ = "Invalid type": GOTO errmes
IF (t AND ISOFFSETINBITS) <> 0 OR (t AND ISUDT) <> 0 OR (t AND ISSTRING) THEN a$ = "_MEMPUT requires numeric type": GOTO errmes IF (t AND ISOFFSETINBITS) <> 0 OR (t AND ISUDT) <> 0 OR (t AND ISSTRING) THEN a$ = qb64prefix$ + "MEMPUT requires numeric type": GOTO errmes
IF (t AND ISPOINTER) THEN t = t - ISPOINTER IF (t AND ISPOINTER) THEN t = t - ISPOINTER
'attempt conversion... 'attempt conversion...
e$ = fixoperationorder$(var$): IF Error_Happened THEN GOTO errmes e$ = fixoperationorder$(var$): IF Error_Happened THEN GOTO errmes
@ -9138,7 +9173,7 @@ DO
IF n >= 1 THEN IF n >= 1 THEN
IF firstelement$ = "_MEMFILL" THEN IF firstelement$ = "_MEMFILL" OR (firstelement$ = "MEMFILL" AND qb64prefix_set = 1) THEN
'get expressions 'get expressions
typ$ = "" typ$ = ""
e$ = "" e$ = ""
@ -9159,16 +9194,16 @@ DO
IF LEN(e$) = 0 THEN e$ = e2$ ELSE e$ = e$ + sp + e2$ IF LEN(e$) = 0 THEN e$ = e2$ ELSE e$ = e$ + sp + e2$
END IF END IF
NEXT NEXT
IF ne < 3 OR e$ = "" THEN a$ = "Expected _MEMFILL mem-reference,offset,bytes,variable|value[AS type]": GOTO errmes IF ne < 3 OR e$ = "" THEN a$ = "Expected " + qb64prefix$ + "MEMFILL mem-reference, offset, bytes, variable|value[AS type]": GOTO errmes
IF ne = 3 THEN var$ = e$ ELSE typ$ = UCASE$(e$) IF ne = 3 THEN var$ = e$ ELSE typ$ = UCASE$(e$)
l$ = "_MEMFILL" + sp l$ = UCASE$(firstelement$) + sp
e$ = fixoperationorder$(blk$): IF Error_Happened THEN GOTO errmes e$ = fixoperationorder$(blk$): IF Error_Happened THEN GOTO errmes
l$ = l$ + tlayout$ l$ = l$ + tlayout$
test$ = evaluate(e$, typ): IF Error_Happened THEN GOTO errmes test$ = evaluate(e$, typ): IF Error_Happened THEN GOTO errmes
IF (typ AND ISUDT) = 0 OR (typ AND 511) <> 1 THEN a$ = "Expected _MEM type": GOTO errmes IF (typ AND ISUDT) = 0 OR (typ AND 511) <> 1 THEN a$ = "Expected " + qb64prefix$ + "MEM type": GOTO errmes
blkoffs$ = evaluatetotyp(e$, -6) blkoffs$ = evaluatetotyp(e$, -6)
e$ = fixoperationorder$(offs$): IF Error_Happened THEN GOTO errmes e$ = fixoperationorder$(offs$): IF Error_Happened THEN GOTO errmes
@ -9205,7 +9240,7 @@ DO
'... AS type method '... AS type method
t = typname2typ(typ$) t = typname2typ(typ$)
IF t = 0 THEN a$ = "Invalid type": GOTO errmes IF t = 0 THEN a$ = "Invalid type": GOTO errmes
IF (t AND ISOFFSETINBITS) <> 0 OR (t AND ISUDT) <> 0 OR (t AND ISSTRING) THEN a$ = "_MEMFILL requires numeric type": GOTO errmes IF (t AND ISOFFSETINBITS) <> 0 OR (t AND ISUDT) <> 0 OR (t AND ISSTRING) THEN a$ = qb64prefix$ + "MEMFILL requires numeric type": GOTO errmes
IF (t AND ISPOINTER) THEN t = t - ISPOINTER IF (t AND ISPOINTER) THEN t = t - ISPOINTER
'attempt conversion... 'attempt conversion...
e$ = fixoperationorder$(var$): IF Error_Happened THEN GOTO errmes e$ = fixoperationorder$(var$): IF Error_Happened THEN GOTO errmes
@ -9500,7 +9535,9 @@ DO
'generate error on driect _GL call 'generate error on driect _GL call
IF firstelement$ = "_GL" THEN a$ = "Cannot call SUB _GL directly": GOTO errmes IF firstelement$ = "_GL" THEN
a$ = "Cannot call SUB _GL directly": GOTO errmes
END IF
IF firstelement$ = "OPEN" THEN IF firstelement$ = "OPEN" THEN
'gwbasic or qbasic version? 'gwbasic or qbasic version?
@ -10104,7 +10141,7 @@ DO
END IF END IF
IF firstelement$ = "OPTION" THEN IF firstelement$ = "OPTION" THEN
IF optionexplicit = 0 THEN e$ = " or OPTION _EXPLICIT" ELSE e$ = "" IF optionexplicit = 0 THEN e$ = " or OPTION " + qb64prefix$ + "EXPLICIT" ELSE e$ = ""
IF n = 1 THEN a$ = "Expected OPTION BASE" + e$: GOTO errmes IF n = 1 THEN a$ = "Expected OPTION BASE" + e$: GOTO errmes
e$ = getelement$(a$, 2) e$ = getelement$(a$, 2)
SELECT CASE e$ SELECT CASE e$
@ -10115,16 +10152,20 @@ DO
l$ = "OPTION" + sp + "BASE" + sp + l$ l$ = "OPTION" + sp + "BASE" + sp + l$
layoutdone = 1: IF LEN(layout$) THEN layout$ = layout$ + sp + l$ ELSE layout$ = l$ layoutdone = 1: IF LEN(layout$) THEN layout$ = layout$ + sp + l$ ELSE layout$ = l$
GOTO finishedline GOTO finishedline
CASE "_EXPLICIT" CASE "EXPLICIT", "_EXPLICIT"
IF optionexplicit = -1 AND NoIDEMode = 0 THEN a$ = "Duplicate OPTION _EXPLICIT": GOTO errmes IF e$ = "EXPLICIT" AND qb64prefix$ = "_" THEN
IF LEN(layout$) THEN a$ = "OPTION _EXPLICIT must come before any other statement": GOTO errmes IF optionexplicit = 0 THEN e$ = " or OPTION _EXPLICIT" ELSE e$ = ""
IF linenumber > 1 AND opex_comments = 0 THEN a$ = "OPTION _EXPLICIT must come before any other statement": GOTO errmes a$ = "Expected OPTION BASE" + e$: GOTO errmes
END IF
IF optionexplicit = -1 AND NoIDEMode = 0 THEN a$ = "Duplicate OPTION " + qb64prefix$ + "EXPLICIT": GOTO errmes
IF LEN(layout$) THEN a$ = "OPTION " + qb64prefix$ + "EXPLICIT must come before any other statement": GOTO errmes
IF linenumber > 1 AND opex_comments = 0 THEN a$ = "OPTION " + qb64prefix$ + "EXPLICIT must come before any other statement": GOTO errmes
optionexplicit = -1 optionexplicit = -1
l$ = "OPTION" + sp + "_EXPLICIT" l$ = "OPTION" + sp + qb64prefix$ + "EXPLICIT"
layoutdone = 1: IF LEN(layout$) THEN layout$ = layout$ + sp + l$ ELSE layout$ = l$ layoutdone = 1: IF LEN(layout$) THEN layout$ = layout$ + sp + l$ ELSE layout$ = l$
GOTO finishedline GOTO finishedline
CASE ELSE CASE ELSE
IF optionexplicit = 0 THEN e$ = " or OPTION _EXPLICIT" ELSE e$ = "" IF optionexplicit = 0 THEN e$ = " or OPTION " + qb64prefix$ + "EXPLICIT" ELSE e$ = ""
a$ = "Expected OPTION BASE" + e$: GOTO errmes a$ = "Expected OPTION BASE" + e$: GOTO errmes
END SELECT END SELECT
END IF END IF
@ -14003,9 +14044,9 @@ FUNCTION dim2 (varname$, typ2$, method, elements$)
'check if _UNSIGNED was specified 'check if _UNSIGNED was specified
unsgn = 0 unsgn = 0
IF LEFT$(typ$, 10) = "_UNSIGNED " THEN IF LEFT$(typ$, 10 + (qb64prefix_set = 1)) = qb64prefix$ + "UNSIGNED " THEN
unsgn = 1 unsgn = 1
typ$ = RIGHT$(typ$, LEN(typ$) - 10) typ$ = RIGHT$(typ$, LEN(typ$) - (10 + (qb64prefix_set = 1)))
IF LEN(typ$) = 0 THEN Give_Error "Expected more type information after _UNSIGNED!": EXIT FUNCTION IF LEN(typ$) = 0 THEN Give_Error "Expected more type information after _UNSIGNED!": EXIT FUNCTION
END IF END IF
@ -14251,10 +14292,10 @@ FUNCTION dim2 (varname$, typ2$, method, elements$)
GOTO dim2exitfunc GOTO dim2exitfunc
END IF END IF
IF LEFT$(typ$, 4) = "_BIT" THEN IF LEFT$(typ$, 4 + (qb64prefix_set = 1)) = qb64prefix$ + "BIT" THEN
IF LEN(typ$) > 4 THEN IF LEN(typ$) > (4 + (qb64prefix_set = 1)) THEN
IF LEFT$(typ$, 7) <> "_BIT * " THEN Give_Error "Expected _BIT * number": EXIT FUNCTION IF LEFT$(typ$, 7 + (qb64prefix_set = 1)) <> qb64prefix$ + "BIT * " THEN Give_Error "Expected " + qb64prefix$ + "BIT * number": EXIT FUNCTION
c$ = RIGHT$(typ$, LEN(typ$) - 7) c$ = RIGHT$(typ$, LEN(typ$) - (7 + (qb64prefix_set = 1)))
IF isuinteger(c$) = 0 THEN Give_Error "Number expected after *": EXIT FUNCTION 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 IF LEN(c$) > 2 THEN Give_Error "Too many characters in number after *": EXIT FUNCTION
bits = VAL(c$) bits = VAL(c$)
@ -14354,7 +14395,7 @@ FUNCTION dim2 (varname$, typ2$, method, elements$)
GOTO dim2exitfunc GOTO dim2exitfunc
END IF END IF
IF typ$ = "_BYTE" THEN IF typ$ = qb64prefix$ + "BYTE" THEN
ct$ = "int8" ct$ = "int8"
IF unsgn THEN n$ = "U": ct$ = "u" + ct$ IF unsgn THEN n$ = "U": ct$ = "u" + ct$
n$ = n$ + "BYTE_" + varname$ n$ = n$ + "BYTE_" + varname$
@ -14528,7 +14569,7 @@ FUNCTION dim2 (varname$, typ2$, method, elements$)
IF typ$ = "_OFFSET" THEN IF typ$ = qb64prefix$ + "OFFSET" THEN
ct$ = "ptrszint" ct$ = "ptrszint"
IF unsgn THEN n$ = "U": ct$ = "u" + ct$ IF unsgn THEN n$ = "U": ct$ = "u" + ct$
n$ = n$ + "OFFSET_" + varname$ n$ = n$ + "OFFSET_" + varname$
@ -14692,7 +14733,7 @@ FUNCTION dim2 (varname$, typ2$, method, elements$)
GOTO dim2exitfunc GOTO dim2exitfunc
END IF END IF
IF typ$ = "_INTEGER64" THEN IF typ$ = qb64prefix$ + "INTEGER64" THEN
ct$ = "int64" ct$ = "int64"
IF unsgn THEN n$ = "U": ct$ = "u" + ct$ IF unsgn THEN n$ = "U": ct$ = "u" + ct$
n$ = n$ + "INTEGER64_" + varname$ n$ = n$ + "INTEGER64_" + varname$
@ -14942,7 +14983,7 @@ FUNCTION dim2 (varname$, typ2$, method, elements$)
GOTO dim2exitfunc GOTO dim2exitfunc
END IF END IF
IF typ$ = "_FLOAT" THEN IF typ$ = qb64prefix$ + "FLOAT" THEN
ct$ = "long double" ct$ = "long double"
n$ = n$ + "FLOAT_" + varname$ n$ = n$ + "FLOAT_" + varname$
IF elements$ <> "" THEN IF elements$ <> "" THEN
@ -16092,7 +16133,7 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
'*special case CVI,CVL,CVS,CVD,_CV (part #1) '*special case CVI,CVL,CVS,CVD,_CV (part #1)
IF n$ = "_CV" THEN IF n$ = "_CV" OR (n$ = "CV" AND qb64prefix_set = 1) THEN
IF curarg = 1 THEN IF curarg = 1 THEN
cvtype$ = type2symbol$(e$) cvtype$ = type2symbol$(e$)
IF Error_Happened THEN EXIT FUNCTION IF Error_Happened THEN EXIT FUNCTION
@ -16103,7 +16144,7 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
'*special case MKI,MKL,MKS,MKD,_MK (part #1) '*special case MKI,MKL,MKS,MKD,_MK (part #1)
IF n$ = "_MK" THEN IF n$ = "_MK" OR (n$ = "MK" AND qb64prefix_set = 1) THEN
IF RTRIM$(id2.musthave) = "$" THEN IF RTRIM$(id2.musthave) = "$" THEN
IF curarg = 1 THEN IF curarg = 1 THEN
mktype$ = type2symbol$(e$) mktype$ = type2symbol$(e$)
@ -16161,7 +16202,7 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
'PRINT #12, "r$="; r$ 'PRINT #12, "r$="; r$
'*special case* '*special case*
IF n$ = "_MEMGET" THEN IF n$ = "_MEMGET" OR (n$ = "MEMGET" AND qb64prefix_set = 1) THEN
IF curarg = 1 THEN IF curarg = 1 THEN
memget_blk$ = e$ memget_blk$ = e$
END IF END IF
@ -16179,7 +16220,7 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
END IF END IF
t = typname2typ(e$) t = typname2typ(e$)
IF t = 0 THEN Give_Error "Invalid TYPE name": EXIT FUNCTION IF t = 0 THEN Give_Error "Invalid TYPE name": EXIT FUNCTION
IF t AND ISOFFSETINBITS THEN Give_Error "_BIT TYPE unsupported": EXIT FUNCTION IF t AND ISOFFSETINBITS THEN Give_Error qb64prefix$ + "BIT TYPE unsupported": EXIT FUNCTION
memget_size = typname2typsize memget_size = typname2typsize
IF t AND ISSTRING THEN IF t AND ISSTRING THEN
IF (t AND ISFIXEDLENGTH) = 0 THEN Give_Error "Expected STRING * ...": EXIT FUNCTION IF (t AND ISFIXEDLENGTH) = 0 THEN Give_Error "Expected STRING * ...": EXIT FUNCTION
@ -16237,7 +16278,7 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
'------------------------------------------------------------------------------------------------------------ '------------------------------------------------------------------------------------------------------------
'***special case*** '***special case***
IF n$ = "_MEM" THEN IF n$ = "_MEM" OR (n$ = "MEM" AND qb64prefix_set = 1) THEN
IF curarg = 1 THEN IF curarg = 1 THEN
IF args = 1 THEN IF args = 1 THEN
targettyp = -7 targettyp = -7
@ -16250,12 +16291,12 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
END IF END IF
'*special case* '*special case*
IF n$ = "_OFFSET" THEN IF n$ = "_OFFSET" OR (n$ = "OFFSET" AND qb64prefix_set = 1) THEN
IF (sourcetyp AND ISREFERENCE) = 0 THEN IF (sourcetyp AND ISREFERENCE) = 0 THEN
Give_Error "_OFFSET expects the name of a variable/array": EXIT FUNCTION Give_Error qb64prefix$ + "OFFSET expects the name of a variable/array": EXIT FUNCTION
END IF END IF
IF (sourcetyp AND ISARRAY) THEN IF (sourcetyp AND ISARRAY) THEN
IF (sourcetyp AND ISOFFSETINBITS) THEN Give_Error "_OFFSET cannot reference _BIT type arrays": EXIT FUNCTION IF (sourcetyp AND ISOFFSETINBITS) THEN Give_Error qb64prefix$ + "OFFSET cannot reference _BIT type arrays": EXIT FUNCTION
END IF END IF
r$ = "((uptrszint)(" + evaluatetotyp$(e2$, -6) + "))" r$ = "((uptrszint)(" + evaluatetotyp$(e2$, -6) + "))"
IF Error_Happened THEN EXIT FUNCTION IF Error_Happened THEN EXIT FUNCTION
@ -16414,7 +16455,7 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
END IF END IF
'*special case* '*special case*
IF n$ = "_ROUND" THEN IF n$ = "_ROUND" OR (n$ = "ROUND" AND qb64prefix_set = 1) THEN
IF (sourcetyp AND ISSTRING) THEN Give_Error "Expected numeric value": EXIT FUNCTION IF (sourcetyp AND ISSTRING) THEN Give_Error "Expected numeric value": EXIT FUNCTION
IF (sourcetyp AND ISREFERENCE) THEN e$ = refer(e$, sourcetyp, 0) IF (sourcetyp AND ISREFERENCE) THEN e$ = refer(e$, sourcetyp, 0)
IF Error_Happened THEN EXIT FUNCTION IF Error_Happened THEN EXIT FUNCTION
@ -16526,10 +16567,10 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
IF n$ = "MKL" THEN mktype = 2: mktype$ = "&" IF n$ = "MKL" THEN mktype = 2: mktype$ = "&"
IF n$ = "MKS" THEN mktype = 3: mktype$ = "!" IF n$ = "MKS" THEN mktype = 3: mktype$ = "!"
IF n$ = "MKD" THEN mktype = 4: mktype$ = "#" IF n$ = "MKD" THEN mktype = 4: mktype$ = "#"
IF n$ = "_MK" THEN mktype = -1 IF n$ = "_MK" OR (n$ = "MK" AND qb64prefix_set = 1) THEN mktype = -1
IF mktype THEN IF mktype THEN
IF mktype <> -1 OR curarg = 2 THEN IF mktype <> -1 OR curarg = 2 THEN
IF (sourcetyp AND ISOFFSET) THEN Give_Error "Cannot convert _OFFSET type to other types": EXIT FUNCTION IF (sourcetyp AND ISOFFSET) THEN Give_Error "Cannot convert " + qb64prefix$ + "OFFSET type to other types": EXIT FUNCTION
'both _MK and trad. process the following 'both _MK and trad. process the following
qtyp& = 0 qtyp& = 0
IF mktype$ = "%%" THEN ctype$ = "b": qtyp& = BYTETYPE - ISPOINTER IF mktype$ = "%%" THEN ctype$ = "b": qtyp& = BYTETYPE - ISPOINTER
@ -16545,7 +16586,7 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
IF mktype$ = "##" THEN ctype$ = "f": qtyp& = FLOATTYPE - ISPOINTER IF mktype$ = "##" THEN ctype$ = "f": qtyp& = FLOATTYPE - ISPOINTER
IF LEFT$(mktype$, 2) = "~`" THEN ctype$ = "ubit": qtyp& = UINTEGER64TYPE - ISPOINTER: size = VAL(RIGHT$(mktype$, LEN(mktype$) - 2)) IF LEFT$(mktype$, 2) = "~`" THEN ctype$ = "ubit": qtyp& = UINTEGER64TYPE - ISPOINTER: size = VAL(RIGHT$(mktype$, LEN(mktype$) - 2))
IF LEFT$(mktype$, 1) = "`" THEN ctype$ = "bit": qtyp& = INTEGER64TYPE - ISPOINTER: size = VAL(RIGHT$(mktype$, LEN(mktype$) - 1)) IF LEFT$(mktype$, 1) = "`" THEN ctype$ = "bit": qtyp& = INTEGER64TYPE - ISPOINTER: size = VAL(RIGHT$(mktype$, LEN(mktype$) - 1))
IF qtyp& = 0 THEN Give_Error "_MK only accepts numeric types": EXIT FUNCTION IF qtyp& = 0 THEN Give_Error qb64prefix$ + "MK only accepts numeric types": EXIT FUNCTION
IF size THEN IF size THEN
r$ = ctype$ + "2string(" + str2(size) + "," r$ = ctype$ + "2string(" + str2(size) + ","
ELSE ELSE
@ -16562,7 +16603,7 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
IF n$ = "CVL" THEN cvtype = 2: cvtype$ = "&" IF n$ = "CVL" THEN cvtype = 2: cvtype$ = "&"
IF n$ = "CVS" THEN cvtype = 3: cvtype$ = "!" IF n$ = "CVS" THEN cvtype = 3: cvtype$ = "!"
IF n$ = "CVD" THEN cvtype = 4: cvtype$ = "#" IF n$ = "CVD" THEN cvtype = 4: cvtype$ = "#"
IF n$ = "_CV" THEN cvtype = -1 IF n$ = "_CV" OR (n$ = "CV" AND qb64prefix_set = 1) THEN cvtype = -1
IF cvtype THEN IF cvtype THEN
IF cvtype <> -1 OR curarg = 2 THEN IF cvtype <> -1 OR curarg = 2 THEN
IF (sourcetyp AND ISSTRING) = 0 THEN Give_Error n$ + " requires a STRING argument": EXIT FUNCTION IF (sourcetyp AND ISSTRING) = 0 THEN Give_Error n$ + " requires a STRING argument": EXIT FUNCTION
@ -16582,7 +16623,7 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
IF cvtype$ = "##" THEN ctype$ = "f": typ& = FLOATTYPE - ISPOINTER IF cvtype$ = "##" THEN ctype$ = "f": typ& = FLOATTYPE - ISPOINTER
IF LEFT$(cvtype$, 2) = "~`" THEN ctype$ = "ubit": typ& = UINTEGER64TYPE - ISPOINTER: size = VAL(RIGHT$(cvtype$, LEN(cvtype$) - 2)) IF LEFT$(cvtype$, 2) = "~`" THEN ctype$ = "ubit": typ& = UINTEGER64TYPE - ISPOINTER: size = VAL(RIGHT$(cvtype$, LEN(cvtype$) - 2))
IF LEFT$(cvtype$, 1) = "`" THEN ctype$ = "bit": typ& = INTEGER64TYPE - ISPOINTER: size = VAL(RIGHT$(cvtype$, LEN(cvtype$) - 1)) IF LEFT$(cvtype$, 1) = "`" THEN ctype$ = "bit": typ& = INTEGER64TYPE - ISPOINTER: size = VAL(RIGHT$(cvtype$, LEN(cvtype$) - 1))
IF typ& = 0 THEN Give_Error "_CV cannot return STRING type!": EXIT FUNCTION IF typ& = 0 THEN Give_Error qb64prefix$ + "CV cannot return STRING type!": EXIT FUNCTION
IF ctype$ = "bit" OR ctype$ = "ubit" THEN IF ctype$ = "bit" OR ctype$ = "ubit" THEN
r$ = "string2" + ctype$ + "(" + e$ + "," + str2(size) + ")" r$ = "string2" + ctype$ + "(" + e$ + "," + str2(size) + ")"
ELSE ELSE
@ -17261,7 +17302,7 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
r$ = r$ + e$ r$ = r$ + e$
'***special case**** '***special case****
IF n$ = "_MEM" THEN IF n$ = "_MEM" OR (n$ = "MEM" AND qb64prefix_set = 1) THEN
IF args = 1 THEN IF args = 1 THEN
IF curarg = 1 THEN r$ = r$ + ")": GOTO evalfuncspecial IF curarg = 1 THEN r$ = r$ + ")": GOTO evalfuncspecial
END IF END IF
@ -17593,7 +17634,7 @@ FUNCTION evaluatetotyp$ (a2$, targettyp AS LONG)
ELSE ELSE
Give_Error "_MEMELEMENT cannot reference variable-length strings": EXIT FUNCTION Give_Error qb64prefix$ + "MEMELEMENT cannot reference variable-length strings": EXIT FUNCTION
END IF END IF
EXIT FUNCTION EXIT FUNCTION
@ -17622,7 +17663,7 @@ FUNCTION evaluatetotyp$ (a2$, targettyp AS LONG)
e$ = refer(e$, sourcetyp, 0) e$ = refer(e$, sourcetyp, 0)
IF Error_Happened THEN EXIT FUNCTION IF Error_Happened THEN EXIT FUNCTION
ELSE ELSE
Give_Error "_MEMELEMENT cannot reference variable-length strings": EXIT FUNCTION Give_Error qb64prefix$ + "MEMELEMENT cannot reference variable-length strings": EXIT FUNCTION
END IF END IF
'evaluatetotyp$ = "byte_element((uint64)" + e$ + "->chr," + bytes$ + "," + NewByteElement$ + ")" 'evaluatetotyp$ = "byte_element((uint64)" + e$ + "->chr," + bytes$ + "," + NewByteElement$ + ")"
@ -17699,7 +17740,7 @@ FUNCTION evaluatetotyp$ (a2$, targettyp AS LONG)
IF (sourcetyp AND ISARRAY) THEN IF (sourcetyp AND ISARRAY) THEN
IF sourcetyp AND ISSTRING THEN IF sourcetyp AND ISSTRING THEN
IF (sourcetyp AND ISFIXEDLENGTH) = 0 THEN IF (sourcetyp AND ISFIXEDLENGTH) = 0 THEN
Give_Error "_MEM cannot reference variable-length strings": EXIT FUNCTION Give_Error qb64prefix$ + "MEM cannot reference variable-length strings": EXIT FUNCTION
END IF END IF
END IF END IF
@ -17741,7 +17782,7 @@ FUNCTION evaluatetotyp$ (a2$, targettyp AS LONG)
'String 'String
IF sourcetyp AND ISSTRING THEN IF sourcetyp AND ISSTRING THEN
IF (sourcetyp AND ISFIXEDLENGTH) = 0 THEN Give_Error "_MEM cannot reference variable-length strings": EXIT FUNCTION IF (sourcetyp AND ISFIXEDLENGTH) = 0 THEN Give_Error qb64prefix$ + "MEM cannot reference variable-length strings": EXIT FUNCTION
idnumber = VAL(e$) idnumber = VAL(e$)
getid idnumber: IF Error_Happened THEN EXIT FUNCTION getid idnumber: IF Error_Happened THEN EXIT FUNCTION
@ -18938,16 +18979,16 @@ FUNCTION fixoperationorder$ (savea$)
f3$ = UCASE$(f2$) f3$ = UCASE$(f2$)
internaltype = 0 internaltype = 0
IF f3$ = "STRING" THEN internaltype = 1 IF f3$ = "STRING" THEN internaltype = 1
IF f3$ = "_UNSIGNED" THEN internaltype = 1 IF f3$ = "_UNSIGNED" OR (f3$ = "UNSIGNED" AND qb64prefix_set = 1) THEN internaltype = 1
IF f3$ = "_BIT" THEN internaltype = 1 IF f3$ = "_BIT" OR (f3$ = "BIT" AND qb64prefix_set = 1) THEN internaltype = 1
IF f3$ = "_BYTE" THEN internaltype = 1 IF f3$ = "_BYTE" OR (f3$ = "BYTE" AND qb64prefix_set = 1) THEN internaltype = 1
IF f3$ = "INTEGER" THEN internaltype = 1 IF f3$ = "INTEGER" THEN internaltype = 1
IF f3$ = "LONG" THEN internaltype = 1 IF f3$ = "LONG" THEN internaltype = 1
IF f3$ = "_INTEGER64" THEN internaltype = 1 IF f3$ = "_INTEGER64" OR (f3$ = "INTEGER64" AND qb64prefix_set = 1) THEN internaltype = 1
IF f3$ = "SINGLE" THEN internaltype = 1 IF f3$ = "SINGLE" THEN internaltype = 1
IF f3$ = "DOUBLE" THEN internaltype = 1 IF f3$ = "DOUBLE" THEN internaltype = 1
IF f3$ = "_FLOAT" THEN internaltype = 1 IF f3$ = "_FLOAT" OR (f3$ = "FLOAT" AND qb64prefix_set = 1) THEN internaltype = 1
IF f3$ = "_OFFSET" THEN internaltype = 1 IF f3$ = "_OFFSET" OR (f3$ = "OFFSET" AND qb64prefix_set = 1) THEN internaltype = 1
IF internaltype = 1 THEN IF internaltype = 1 THEN
f2$ = f3$ f2$ = f3$
removeelements a$, i, i, 0 removeelements a$, i, i, 0
@ -21973,6 +22014,17 @@ FUNCTION type2symbol$ (typ$)
t2$ = "DOUBLE": s$ = "#": IF LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound t2$ = "DOUBLE": s$ = "#": IF LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound
t2$ = "_FLOAT": s$ = "##": IF LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound t2$ = "_FLOAT": s$ = "##": IF LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound
t2$ = "STRING": s$ = "$": IF LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound t2$ = "STRING": s$ = "$": IF LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound
t2$ = "UNSIGNED BIT": s$ = "~`1": IF qb64prefix_set = 1 AND LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound
t2$ = "UNSIGNED BYTE": s$ = "~%%": IF qb64prefix_set = 1 AND LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound
t2$ = "UNSIGNED INTEGER": s$ = "~%": IF qb64prefix_set = 1 AND LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound
t2$ = "UNSIGNED LONG": s$ = "~&": IF qb64prefix_set = 1 AND LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound
t2$ = "UNSIGNED INTEGER64": s$ = "~&&": IF qb64prefix_set = 1 AND LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound
t2$ = "UNSIGNED OFFSET": s$ = "~%&": IF qb64prefix_set = 1 AND LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound
t2$ = "BIT": s$ = "`1": IF qb64prefix_set = 1 AND LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound
t2$ = "BYTE": s$ = "%%": IF qb64prefix_set = 1 AND LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound
t2$ = "INTEGER64": s$ = "&&": IF qb64prefix_set = 1 AND LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound
t2$ = "OFFSET": s$ = "%&": IF qb64prefix_set = 1 AND LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound
t2$ = "FLOAT": s$ = "##": IF qb64prefix_set = 1 AND LEFT$(t$, LEN(t2$)) = t2$ THEN GOTO t2sfound
Give_Error e$: EXIT FUNCTION Give_Error e$: EXIT FUNCTION
t2sfound: t2sfound:
type2symbol$ = s$ type2symbol$ = s$
@ -22113,30 +22165,33 @@ FUNCTION typname2typ& (t2$)
IF t$ = "SINGLE" THEN typname2typ& = SINGLETYPE: EXIT FUNCTION IF t$ = "SINGLE" THEN typname2typ& = SINGLETYPE: EXIT FUNCTION
IF t$ = "DOUBLE" THEN typname2typ& = DOUBLETYPE: EXIT FUNCTION IF t$ = "DOUBLE" THEN typname2typ& = DOUBLETYPE: EXIT FUNCTION
IF t$ = "_FLOAT" THEN typname2typ& = FLOATTYPE: EXIT FUNCTION IF t$ = "_FLOAT" OR (t$ = "FLOAT" AND qb64prefix_set = 1) THEN typname2typ& = FLOATTYPE: EXIT FUNCTION
IF LEFT$(t$, 10) = "_UNSIGNED " THEN u = 1: t$ = RIGHT$(t$, LEN(t$) - 10) IF LEFT$(t$, 10) = "_UNSIGNED " OR (LEFT$(t$, 9) = "UNSIGNED " AND qb64prefix_set = 1) THEN
IF LEFT$(t$, 4) = "_BIT" THEN u = 1
IF t$ = "_BIT" THEN t$ = MID$(t$, INSTR(t$, CHR$(32)))
END IF
IF LEFT$(t$, 4) = "_BIT" OR (LEFT$(t$, 3) = "BIT" AND qb64prefix_set = 1) THEN
IF t$ = "_BIT" OR (t$ = "BIT" AND qb64prefix_set = 1) THEN
IF u THEN typname2typ& = UBITTYPE ELSE typname2typ& = BITTYPE IF u THEN typname2typ& = UBITTYPE ELSE typname2typ& = BITTYPE
EXIT FUNCTION EXIT FUNCTION
END IF END IF
IF LEFT$(t$, 7) <> "_BIT * " THEN Give_Error "Expected _BIT * number": EXIT FUNCTION IF LEFT$(t$, 7) <> "_BIT * " OR (LEFT$(t$, 6) = "BIT * " AND qb64prefix_set = 1) THEN Give_Error "Expected _BIT * number": EXIT FUNCTION
n$ = RIGHT$(t$, LEN(t$) - 7) n$ = RIGHT$(t$, LEN(t$) - 7)
IF isuinteger(n$) = 0 THEN Give_Error "Invalid size after _BIT *": EXIT FUNCTION IF isuinteger(n$) = 0 THEN Give_Error "Invalid size after " + qb64prefix$ + "BIT *": EXIT FUNCTION
b = VAL(n$) b = VAL(n$)
IF b = 0 OR b > 56 THEN Give_Error "Invalid size after _BIT *": EXIT FUNCTION IF b = 0 OR b > 56 THEN Give_Error "Invalid size after " + qb64prefix$ + "BIT *": EXIT FUNCTION
t = BITTYPE - 1 + b: IF u THEN t = t + ISUNSIGNED t = BITTYPE - 1 + b: IF u THEN t = t + ISUNSIGNED
typname2typ& = t typname2typ& = t
EXIT FUNCTION EXIT FUNCTION
END IF END IF
t = 0 t = 0
IF t$ = "_BYTE" THEN t = BYTETYPE IF t$ = "_BYTE" OR (t$ = "BYTE" AND qb64prefix_set = 1) THEN t = BYTETYPE
IF t$ = "INTEGER" THEN t = INTEGERTYPE IF t$ = "INTEGER" THEN t = INTEGERTYPE
IF t$ = "LONG" THEN t = LONGTYPE IF t$ = "LONG" THEN t = LONGTYPE
IF t$ = "_INTEGER64" THEN t = INTEGER64TYPE IF t$ = "_INTEGER64" OR (t$ = "INTEGER64" AND qb64prefix_set = 1) THEN t = INTEGER64TYPE
IF t$ = "_OFFSET" THEN t = OFFSETTYPE IF t$ = "_OFFSET" OR (t$ = "OFFSET" AND qb64prefix_set = 1) THEN t = OFFSETTYPE
IF t THEN IF t THEN
IF u THEN t = t + ISUNSIGNED IF u THEN t = t + ISUNSIGNED
typname2typ& = t typname2typ& = t
@ -23491,20 +23546,20 @@ FUNCTION id2fulltypename$
id2fulltypename$ = a$: EXIT FUNCTION id2fulltypename$ = a$: EXIT FUNCTION
END IF END IF
IF t AND ISOFFSETINBITS THEN IF t AND ISOFFSETINBITS THEN
IF bits > 1 THEN a$ = "_BIT * " + str2(bits) ELSE a$ = "_BIT" IF bits > 1 THEN a$ = qb64prefix$ + "BIT * " + str2(bits) ELSE a$ = qb64prefix$ + "BIT"
IF t AND ISUNSIGNED THEN a$ = "_UNSIGNED " + a$ IF t AND ISUNSIGNED THEN a$ = qb64prefix$ + "UNSIGNED " + a$
id2fulltypename$ = a$: EXIT FUNCTION id2fulltypename$ = a$: EXIT FUNCTION
END IF END IF
IF t AND ISFLOAT THEN IF t AND ISFLOAT THEN
IF bits = 32 THEN a$ = "SINGLE" IF bits = 32 THEN a$ = "SINGLE"
IF bits = 64 THEN a$ = "DOUBLE" IF bits = 64 THEN a$ = "DOUBLE"
IF bits = 256 THEN a$ = "_FLOAT" IF bits = 256 THEN a$ = qb64prefix$ + "FLOAT"
ELSE 'integer-based ELSE 'integer-based
IF bits = 8 THEN a$ = "_BYTE" IF bits = 8 THEN a$ = qb64prefix$ + "BYTE"
IF bits = 16 THEN a$ = "INTEGER" IF bits = 16 THEN a$ = "INTEGER"
IF bits = 32 THEN a$ = "LONG" IF bits = 32 THEN a$ = "LONG"
IF bits = 64 THEN a$ = "_INTEGER64" IF bits = 64 THEN a$ = qb64prefix$ + "INTEGER64"
IF t AND ISUNSIGNED THEN a$ = "_UNSIGNED " + a$ IF t AND ISUNSIGNED THEN a$ = qb64prefix$ + "UNSIGNED " + a$
END IF END IF
id2fulltypename$ = a$ id2fulltypename$ = a$
END FUNCTION END FUNCTION
@ -23556,23 +23611,23 @@ FUNCTION symbol2fulltypename$ (s2$)
u = 1 u = 1
IF LEN(typ$) = 1 THEN Give_Error "Expected ~...": EXIT FUNCTION IF LEN(typ$) = 1 THEN Give_Error "Expected ~...": EXIT FUNCTION
s$ = RIGHT$(s$, LEN(s$) - 1) s$ = RIGHT$(s$, LEN(s$) - 1)
u$ = "_UNSIGNED " u$ = qb64prefix$ + "UNSIGNED "
END IF END IF
IF s$ = "%%" THEN t$ = u$ + "_BYTE": GOTO gotsym2typ IF s$ = "%%" THEN t$ = u$ + qb64prefix$ + "BYTE": GOTO gotsym2typ
IF s$ = "%" THEN t$ = u$ + "INTEGER": GOTO gotsym2typ IF s$ = "%" THEN t$ = u$ + "INTEGER": GOTO gotsym2typ
IF s$ = "&" THEN t$ = u$ + "LONG": GOTO gotsym2typ IF s$ = "&" THEN t$ = u$ + "LONG": GOTO gotsym2typ
IF s$ = "&&" THEN t$ = u$ + "_INTEGER64": GOTO gotsym2typ IF s$ = "&&" THEN t$ = u$ + qb64prefix$ + "INTEGER64": GOTO gotsym2typ
IF s$ = "%&" THEN t$ = u$ + "_OFFSET": GOTO gotsym2typ IF s$ = "%&" THEN t$ = u$ + qb64prefix$ + "OFFSET": GOTO gotsym2typ
IF LEFT$(s$, 1) = "`" THEN IF LEFT$(s$, 1) = "`" THEN
IF LEN(s$) = 1 THEN IF LEN(s$) = 1 THEN
t$ = u$ + "_BIT * 1" t$ = u$ + qb64prefix$ + "BIT * 1"
GOTO gotsym2typ GOTO gotsym2typ
END IF END IF
n$ = RIGHT$(s$, LEN(s$) - 1) n$ = RIGHT$(s$, LEN(s$) - 1)
IF isuinteger(n$) = 0 THEN Give_Error "Expected number after symbol `": EXIT FUNCTION IF isuinteger(n$) = 0 THEN Give_Error "Expected number after symbol `": EXIT FUNCTION
t$ = u$ + "_BIT * " + n$ t$ = u$ + qb64prefix$ + "BIT * " + n$
GOTO gotsym2typ GOTO gotsym2typ
END IF END IF
@ -23580,7 +23635,7 @@ FUNCTION symbol2fulltypename$ (s2$)
IF s$ = "!" THEN t$ = "SINGLE": GOTO gotsym2typ IF s$ = "!" THEN t$ = "SINGLE": GOTO gotsym2typ
IF s$ = "#" THEN t$ = "DOUBLE": GOTO gotsym2typ IF s$ = "#" THEN t$ = "DOUBLE": GOTO gotsym2typ
IF s$ = "##" THEN t$ = "_FLOAT": GOTO gotsym2typ IF s$ = "##" THEN t$ = qb64prefix$ + "FLOAT": GOTO gotsym2typ
IF s$ = "$" THEN t$ = "STRING": GOTO gotsym2typ IF s$ = "$" THEN t$ = "STRING": GOTO gotsym2typ
IF LEFT$(s$, 1) = "$" THEN IF LEFT$(s$, 1) = "$" THEN
@ -23858,7 +23913,7 @@ SUB ParseExpression (exp$)
SELECT CASE MID$(exp$, op + c + 1, 1) SELECT CASE MID$(exp$, op + c + 1, 1)
CASE "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "N": numset = -1 'Valid digit CASE "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "N": numset = -1 'Valid digit
CASE "-" 'We need to check if it's a minus or a negative CASE "-" 'We need to check if it's a minus or a negative
IF OName(OpOn) = "_PI" OR numset THEN EXIT DO IF OName(OpOn) = "_PI" OR (OName(OpOn) = "PI" AND qb64prefix_set = 1) OR numset THEN EXIT DO
CASE ELSE 'Not a valid digit, we found our separator CASE ELSE 'Not a valid digit, we found our separator
EXIT DO EXIT DO
END SELECT END SELECT
@ -23916,28 +23971,28 @@ SUB Set_OrderOfOperations
'OName ended up becoming the name of our commands, as I modified things.... Go figure! LOL! 'OName ended up becoming the name of our commands, as I modified things.... Go figure! LOL!
'Constants get evaluated first, with a Priority Level of 1 'Constants get evaluated first, with a Priority Level of 1
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_PI" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "PI"
REDIM _PRESERVE PL(i): PL(i) = 1 REDIM _PRESERVE PL(i): PL(i) = 1
'I'm not certain where exactly percentages should go. They kind of seem like a special case to me. COS10% should be COS.1 I'd think... 'I'm not certain where exactly percentages should go. They kind of seem like a special case to me. COS10% should be COS.1 I'd think...
'I'm putting it here for now, and if anyone knows someplace better for it in our order of operations, let me know. 'I'm putting it here for now, and if anyone knows someplace better for it in our order of operations, let me know.
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "%" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "%"
REDIM _PRESERVE PL(i): PL(i) = 5 REDIM _PRESERVE PL(i): PL(i) = 5
'Then Functions with PL 10 'Then Functions with PL 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_ACOS" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "ACOS"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_ASIN" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "ASIN"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_ARCSEC" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "ARCSEC"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_ARCCSC" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "ARCCSC"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_ARCCOT" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "ARCCOT"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_SECH" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "SECH"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_CSCH" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "CSCH"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_COTH" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "COTH"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "COS" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "COS"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
@ -23951,17 +24006,17 @@ SUB Set_OrderOfOperations
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "ATN" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "ATN"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_D2R" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "D2R"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_D2G" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "D2G"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_R2D" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "R2D"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_R2G" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "R2G"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_G2D" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "G2D"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_G2R" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "G2R"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "ABS" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "ABS"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
@ -23969,15 +24024,15 @@ SUB Set_OrderOfOperations
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "INT" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "INT"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_ROUND" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "ROUND"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "FIX" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "FIX"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_SEC" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "SEC"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_CSC" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "CSC"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "_COT" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = qb64prefix$ + "COT"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "ASC" i = i + 1: REDIM _PRESERVE OName(i): OName(i) = "ASC"
REDIM _PRESERVE PL(i): PL(i) = 10 REDIM _PRESERVE PL(i): PL(i) = 10
@ -24046,36 +24101,36 @@ END SUB
FUNCTION EvaluateNumbers$ (p, num() AS STRING) FUNCTION EvaluateNumbers$ (p, num() AS STRING)
DIM n1 AS _FLOAT, n2 AS _FLOAT, n3 AS _FLOAT DIM n1 AS _FLOAT, n2 AS _FLOAT, n3 AS _FLOAT
SELECT CASE OName(p) 'Depending on our operator.. SELECT CASE OName(p) 'Depending on our operator..
CASE "_PI": n1 = 3.14159265358979323846264338327950288## 'Future compatable in case something ever stores extra digits for PI CASE qb64prefix$ + "PI": n1 = 3.14159265358979323846264338327950288## 'Future compatible in case something ever stores extra digits for PI
CASE "%": n1 = (VAL(num(1))) / 100 'Note percent is a special case and works with the number BEFORE the % command and not after CASE "%": n1 = (VAL(num(1))) / 100 'Note percent is a special case and works with the number BEFORE the % command and not after
CASE "_ACOS": n1 = _ACOS(VAL(num(2))) CASE qb64prefix$ + "ACOS": n1 = _ACOS(VAL(num(2)))
CASE "_ASIN": n1 = _ASIN(VAL(num(2))) CASE qb64prefix$ + "ASIN": n1 = _ASIN(VAL(num(2)))
CASE "_ARCSEC": n1 = _ARCSEC(VAL(num(2))) CASE qb64prefix$ + "ARCSEC": n1 = _ARCSEC(VAL(num(2)))
CASE "_ARCCSC": n1 = _ARCCSC(VAL(num(2))) CASE qb64prefix$ + "ARCCSC": n1 = _ARCCSC(VAL(num(2)))
CASE "_ARCCOT": n1 = _ARCCOT(VAL(num(2))) CASE qb64prefix$ + "ARCCOT": n1 = _ARCCOT(VAL(num(2)))
CASE "_SECH": n1 = _SECH(VAL(num(2))) CASE qb64prefix$ + "SECH": n1 = _SECH(VAL(num(2)))
CASE "_CSCH": n1 = _CSCH(VAL(num(2))) CASE qb64prefix$ + "CSCH": n1 = _CSCH(VAL(num(2)))
CASE "_COTH": n1 = _COTH(VAL(num(2))) CASE qb64prefix$ + "COTH": n1 = _COTH(VAL(num(2)))
CASE "COS": n1 = COS(VAL(num(2))) CASE "COS": n1 = COS(VAL(num(2)))
CASE "SIN": n1 = SIN(VAL(num(2))) CASE "SIN": n1 = SIN(VAL(num(2)))
CASE "TAN": n1 = TAN(VAL(num(2))) CASE "TAN": n1 = TAN(VAL(num(2)))
CASE "LOG": n1 = LOG(VAL(num(2))) CASE "LOG": n1 = LOG(VAL(num(2)))
CASE "EXP": n1 = EXP(VAL(num(2))) CASE "EXP": n1 = EXP(VAL(num(2)))
CASE "ATN": n1 = ATN(VAL(num(2))) CASE "ATN": n1 = ATN(VAL(num(2)))
CASE "_D2R": n1 = 0.0174532925 * (VAL(num(2))) CASE qb64prefix$ + "D2R": n1 = 0.0174532925 * (VAL(num(2)))
CASE "_D2G": n1 = 1.1111111111 * (VAL(num(2))) CASE qb64prefix$ + "D2G": n1 = 1.1111111111 * (VAL(num(2)))
CASE "_R2D": n1 = 57.2957795 * (VAL(num(2))) CASE qb64prefix$ + "R2D": n1 = 57.2957795 * (VAL(num(2)))
CASE "_R2G": n1 = 0.015707963 * (VAL(num(2))) CASE qb64prefix$ + "R2G": n1 = 0.015707963 * (VAL(num(2)))
CASE "_G2D": n1 = 0.9 * (VAL(num(2))) CASE qb64prefix$ + "G2D": n1 = 0.9 * (VAL(num(2)))
CASE "_G2R": n1 = 63.661977237 * (VAL(num(2))) CASE qb64prefix$ + "G2R": n1 = 63.661977237 * (VAL(num(2)))
CASE "ABS": n1 = ABS(VAL(num(2))) CASE "ABS": n1 = ABS(VAL(num(2)))
CASE "SGN": n1 = SGN(VAL(num(2))) CASE "SGN": n1 = SGN(VAL(num(2)))
CASE "INT": n1 = INT(VAL(num(2))) CASE "INT": n1 = INT(VAL(num(2)))
CASE "_ROUND": n1 = _ROUND(VAL(num(2))) CASE qb64prefix$ + "ROUND": n1 = _ROUND(VAL(num(2)))
CASE "FIX": n1 = FIX(VAL(num(2))) CASE "FIX": n1 = FIX(VAL(num(2)))
CASE "_SEC": n1 = _SEC(VAL(num(2))) CASE qb64prefix$ + "SEC": n1 = _SEC(VAL(num(2)))
CASE "_CSC": n1 = _CSC(VAL(num(2))) CASE qb64prefix$ + "CSC": n1 = _CSC(VAL(num(2)))
CASE "_COT": n1 = _COT(VAL(num(2))) CASE qb64prefix$ + "COT": n1 = _COT(VAL(num(2)))
CASE "^": n1 = VAL(num(1)) ^ VAL(num(2)) CASE "^": n1 = VAL(num(1)) ^ VAL(num(2))
CASE "SQR": n1 = SQR(VAL(num(2))) CASE "SQR": n1 = SQR(VAL(num(2)))
CASE "ROOT" CASE "ROOT"

View file

@ -71,7 +71,7 @@ SUB gl_scan_header
d = 0: a2$ = "" d = 0: a2$ = ""
h = FREEFILE h = FREEFILE
OPEN "internal\c\parts\core\gl_header_for_parsing\gl.h" FOR INPUT AS #h OPEN "internal\c\parts\core\gl_header_for_parsing\gl.h" FOR BINARY AS #h
DO UNTIL EOF(h) DO UNTIL EOF(h)
LINE INPUT #h, a$ LINE INPUT #h, a$
IF LEN(a$) THEN IF LEN(a$) THEN
@ -332,9 +332,9 @@ SUB gl_include_content
'add constants 'add constants
FOR d = 1 TO GL_DEFINES_LAST FOR d = 1 TO GL_DEFINES_LAST
IF ASC(GL_DEFINES(d)) <> 95 THEN 'IF ASC(GL_DEFINES(d)) <> 95 THEN
GL_DEFINES(d) = "_" + GL_DEFINES(d) ' GL_DEFINES(d) = "_" + GL_DEFINES(d)
END IF 'END IF
constlast = constlast + 1 constlast = constlast + 1
IF constlast > constmax THEN IF constlast > constmax THEN
constmax = constmax * 2 constmax = constmax * 2
@ -350,8 +350,8 @@ SUB gl_include_content
REDIM _PRESERVE constdefined(constmax) AS LONG REDIM _PRESERVE constdefined(constmax) AS LONG
END IF END IF
i = constlast i = constlast
constname(i) = GL_DEFINES(d) constname(i) = qb64prefix$ + GL_DEFINES(d)
constcname(i) = GL_DEFINES(d) constcname(i) = qb64prefix$ + GL_DEFINES(d)
constnamesymbol(i) = "&&" constnamesymbol(i) = "&&"
consttype(i) = INTEGER64TYPE - ISPOINTER consttype(i) = INTEGER64TYPE - ISPOINTER
constinteger(i) = GL_DEFINES_VALUE(d) constinteger(i) = GL_DEFINES_VALUE(d)
@ -379,6 +379,7 @@ SUB gl_include_content
clearid clearid
id.ccall = 1 '*** important for handling string returns correctly *** id.ccall = 1 '*** important for handling string returns correctly ***
id.n = RTRIM$(g.cn) id.n = RTRIM$(g.cn)
IF qb64prefix_set = 1 THEN id.n = MID$(RTRIM$(g.cn), 2)
s = g.subfunc s = g.subfunc
id.subfunc = s id.subfunc = s
id.callname = RTRIM$(g.callname) id.callname = RTRIM$(g.callname)
@ -394,7 +395,7 @@ SUB gl_include_content
'SUB gluPerspective (BYVAL fovy#, BYVAL aspect#, BYVAL zNear#, BYVAL zFar#) 'SUB gluPerspective (BYVAL fovy#, BYVAL aspect#, BYVAL zNear#, BYVAL zFar#)
reginternalsubfunc = 1 reginternalsubfunc = 1
clearid clearid
id.n = "_gluPerspective" id.n = qb64prefix$ + "gluPerspective"
id.subfunc = 2 'sub id.subfunc = 2 'sub
id.callname = "gluPerspective" id.callname = "gluPerspective"
id.args = 4 id.args = 4

File diff suppressed because it is too large Load diff