BlankPage: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
No edit summary
Tag: Reverted
No edit summary
 
(38 intermediate revisions by the same user not shown)
Line 68: Line 68:
</gallery>
</gallery>
<!-- additional availability notes go below here -->
<!-- additional availability notes go below here -->
* The capability to load from ''memory'' was introduced in '''QB64-PE''' ''v3.5.0''.
* The capability to load from ''memory'' was introduced in '''QB64-PE v3.5.0'''.




Line 81: Line 81:
{{CodeEnd}}
{{CodeEnd}}
{{Small|This template allows for a short author credit.}}
{{Small|This template allows for a short author credit.}}
{{PreStart}}
'''Note:''' To avoid the annoying task of manually inserting the templates
in your code examples, since v3.7.0 you may simply write your example
in the IDE and later use the menu "File > Export As > Wiki example" to
export a completely prepared code block, which you can paste "as is"
into the Wiki page.


Oh, and by the way, this ''preformatted text block'' is also new. Generally
it's the same as a ''fixed text block'' shown above, but it uses horizontal
scrollers instead of stretching the text box and it has a more plain
appearance. If you want avoid the horizontal scroller, then restrict
yourself to a line length of max. 72 characters.
{{PreEnd}}


: The output block is available for the SCREEN 0 background colors 0-7
: The output block is available for the SCREEN 0 background colors 0-7
Line 91: Line 103:


{{PageSeeAlso}}
{{PageSeeAlso}}
* [https://qb64phoenix.com/forum/showthread.php?tid=1066 Featured in our "Keyword of the Day" series]
* [[Keyword Reference - Alphabetical]]
* [[Keyword Reference - Alphabetical]]
* [[Keyword Reference - By usage]]
* [[Keyword Reference - By usage]]
Line 96: Line 109:


{{PageNavigation}}
{{PageNavigation}}
{{CodeStart}}
{{Text|'All variables will be of type LONG unless explicitly defined|#31C4C4}}
{{Text|DEFLNG|#F0F0F0}} A-Z
{{Text|'All arrays will be dynamically allocated so they can be REDIM-ed|#31C4C4}}
{{Text|'|#31C4C4}}{{Text|$DYNAMIC|#55FF55}}
{{Text|'We need console access to support command-line compilation via the -x command line compile option|#31C4C4}}
{{Text|$CONSOLE|#55FF55}}
{{Text|'Initially the "SCREEN" will be hidden, if the -x option is used it will never be created|#31C4C4}}
{{Text|$SCREENHIDE|#55FF55}}
{{Text|$EXEICON:|#55FF55}}{{Text|'./qb64pe.ico'|#31C4C4}}
{{Text|$VERSIONINFO:|#55FF55}}CompanyName=QB64 Phoenix Edition
{{Text|$VERSIONINFO:|#55FF55}}FileDescription=QB64 IDE and Compiler
{{Text|$VERSIONINFO:|#55FF55}}InternalName=qb64pe.bas
{{Text|$VERSIONINFO:|#55FF55}}LegalCopyright=MIT
{{Text|$VERSIONINFO:|#55FF55}}LegalTrademarks=
{{Text|$VERSIONINFO:|#55FF55}}OriginalFilename=qb64pe.exe
{{Text|$VERSIONINFO:|#55FF55}}ProductName=QB64-PE
{{Text|$VERSIONINFO:|#55FF55}}Comments=QB64 is a modern extended BASIC programming language that retains QB4.5/QBasic compatibility and compiles native binaries for Windows, Linux and macOS.
{{Text|'|#31C4C4}}{{Text|$INCLUDE:|#55FF55}}{{Text|'global\version.bas'|#31C4C4}}
{{Text|'|#31C4C4}}{{Text|$INCLUDE:|#55FF55}}{{Text|'global\settings.bas'|#31C4C4}}
{{Text|'|#31C4C4}}{{Text|$INCLUDE:|#55FF55}}{{Text|'global\constants.bas'|#31C4C4}}
{{Text|'|#31C4C4}}{{Text|$INCLUDE:|#55FF55}}{{Text|'subs_functions\extensions\opengl\opengl_global.bas'|#31C4C4}}
{{Text|'|#31C4C4}}{{Text|$INCLUDE:|#55FF55}}{{Text|'utilities\ini-manager\ini.bi'|#31C4C4}}
{{Text|'|#31C4C4}}{{Text|$INCLUDE:|#55FF55}}{{Text|'utilities\s-buffer\simplebuffer.bi'|#31C4C4}}
{{Text|DEFLNG|#F0F0F0}} A-Z
{{Text|'-------- Optional IDE Component (1/2) --------|#31C4C4}}
{{Text|'|#31C4C4}}{{Text|$INCLUDE:|#55FF55}}{{Text|'ide\ide_global.bas'|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} OName({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'Operation Name|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} PL({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'Priority Level|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} PP_TypeMod({{Text|0|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}, PP_ConvertedMod({{Text|0|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'Prepass Name Conversion variables.|#31C4C4}}
Set_OrderOfOperations
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} NoExeSaved {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} vWatchOn, vWatchRecompileAttempts, vWatchDesiredState, vWatchErrorCall$
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} vWatchNewVariable$, vWatchVariableExclusions$
vWatchErrorCall$ = {{Text|"if (stop_program) {*__LONG_VWATCH_LINENUMBER=0; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars);};if(new_error){bkp_new_error=new_error;new_error=0;*__LONG_VWATCH_LINENUMBER=-1; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars);new_error=bkp_new_error;};"|#FFB100}}
vWatchVariableExclusions$ = {{Text|"@__LONG_VWATCH_LINENUMBER@__LONG_VWATCH_SUBLEVEL@__LONG_VWATCH_GOTO@"|#FFB100}} + _
              {{Text|"@__STRING_VWATCH_SUBNAME@__STRING_VWATCH_CALLSTACK@__ARRAY_BYTE_VWATCH_BREAKPOINTS"|#FFB100}} + _
              {{Text|"@__ARRAY_BYTE_VWATCH_SKIPLINES@__STRING_VWATCH_INTERNALSUBNAME@__ARRAY_STRING_VWATCH_STACK@"|#FFB100}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} nativeDataTypes$
nativeDataTypes$ = {{Text|"@_OFFSET@OFFSET@_UNSIGNED _OFFSET@UNSIGNED OFFSET@_BIT@BIT@_UNSIGNED _BIT@UNSIGNED BIT@_BYTE@_UNSIGNED _BYTE@BYTE@UNSIGNED BYTE@INTEGER@_UNSIGNED INTEGER@UNSIGNED INTEGER@LONG@_UNSIGNED LONG@UNSIGNED LONG@_INTEGER64@INTEGER64@_UNSIGNED _INTEGER64@UNSIGNED INTEGER64@SINGLE@DOUBLE@_FLOAT@FLOAT@STRING@"|#FFB100}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} qb64prefix_set_recompileAttempts, qb64prefix_set_desiredState
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} opex_recompileAttempts, opex_desiredState
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} opexarray_recompileAttempts, opexarray_desiredState
{{Text|REDIM|#F0F0F0}} EveryCaseSet({{Text|100|#F580B1}}), SelectCaseCounter {{Text|AS|#F0F0F0}} {{Text|_UNSIGNED|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} SelectCaseHasCaseBlock({{Text|100|#F580B1}})
{{Text|DIM|#F0F0F0}} ExecLevel({{Text|255|#F580B1}}), ExecCounter {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} UserDefine({{Text|1|#F580B1}}, {{Text|100|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'0 element is the name, 1 element is the string value|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} InValidLine({{Text|10000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
{{Text|DIM|#F0F0F0}} DefineElse({{Text|255|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} UserDefineCount {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}, UserDefineList$
UserDefineList$ = {{Text|"@DEFINED@UNDEFINED@WINDOWS@WIN@LINUX@MAC@MACOSX@32BIT@64BIT@VERSION@"|#FFB100}}
UserDefine({{Text|0|#F580B1}}, {{Text|0|#F580B1}}) = {{Text|"WINDOWS"|#FFB100}}: UserDefine({{Text|0|#F580B1}}, {{Text|1|#F580B1}}) = {{Text|"WIN"|#FFB100}}
UserDefine({{Text|0|#F580B1}}, {{Text|2|#F580B1}}) = {{Text|"LINUX"|#FFB100}}
UserDefine({{Text|0|#F580B1}}, {{Text|3|#F580B1}}) = {{Text|"MAC"|#FFB100}}: UserDefine({{Text|0|#F580B1}}, {{Text|4|#F580B1}}) = {{Text|"MACOSX"|#FFB100}}
UserDefine({{Text|0|#F580B1}}, {{Text|5|#F580B1}}) = {{Text|"32BIT"|#FFB100}}: UserDefine({{Text|0|#F580B1}}, {{Text|6|#F580B1}}) = {{Text|"64BIT"|#FFB100}}
UserDefine({{Text|0|#F580B1}}, {{Text|7|#F580B1}}) = {{Text|"VERSION"|#FFB100}}
{{Text|IF|#F0F0F0}} {{Text|INSTR|#F0F0F0}}({{Text|_OS$|#F0F0F0}}, {{Text|"WIN"|#FFB100}}) {{Text|THEN|#F0F0F0}} UserDefine({{Text|1|#F580B1}}, {{Text|0|#F580B1}}) = {{Text|"-1"|#FFB100}}: UserDefine({{Text|1|#F580B1}}, {{Text|1|#F580B1}}) = {{Text|"-1"|#FFB100}} {{Text|ELSE|#F0F0F0}} UserDefine({{Text|1|#F580B1}}, {{Text|0|#F580B1}}) = {{Text|"0"|#FFB100}}: UserDefine({{Text|1|#F580B1}}, {{Text|1|#F580B1}}) = {{Text|"0"|#FFB100}}
{{Text|IF|#F0F0F0}} {{Text|INSTR|#F0F0F0}}({{Text|_OS$|#F0F0F0}}, {{Text|"LINUX"|#FFB100}}) {{Text|THEN|#F0F0F0}} UserDefine({{Text|1|#F580B1}}, {{Text|2|#F580B1}}) = {{Text|"-1"|#FFB100}} {{Text|ELSE|#F0F0F0}} UserDefine({{Text|1|#F580B1}}, {{Text|2|#F580B1}}) = {{Text|"0"|#FFB100}}
{{Text|IF|#F0F0F0}} {{Text|INSTR|#F0F0F0}}({{Text|_OS$|#F0F0F0}}, {{Text|"MAC"|#FFB100}}) {{Text|THEN|#F0F0F0}} UserDefine({{Text|1|#F580B1}}, {{Text|3|#F580B1}}) = {{Text|"-1"|#FFB100}}: UserDefine({{Text|1|#F580B1}}, {{Text|4|#F580B1}}) = {{Text|"-1"|#FFB100}} {{Text|ELSE|#F0F0F0}} UserDefine({{Text|1|#F580B1}}, {{Text|3|#F580B1}}) = {{Text|"0"|#FFB100}}: UserDefine({{Text|1|#F580B1}}, {{Text|4|#F580B1}}) = {{Text|"0"|#FFB100}}
{{Text|IF|#F0F0F0}} {{Text|INSTR|#F0F0F0}}({{Text|_OS$|#F0F0F0}}, {{Text|"32BIT"|#FFB100}}) {{Text|THEN|#F0F0F0}} UserDefine({{Text|1|#F580B1}}, {{Text|5|#F580B1}}) = {{Text|"-1"|#FFB100}}: UserDefine({{Text|1|#F580B1}}, {{Text|6|#F580B1}}) = {{Text|"0"|#FFB100}} {{Text|ELSE|#F0F0F0}} UserDefine({{Text|1|#F580B1}}, {{Text|5|#F580B1}}) = {{Text|"0"|#FFB100}}: UserDefine({{Text|1|#F580B1}}, {{Text|6|#F580B1}}) = {{Text|"-1"|#FFB100}}
UserDefine({{Text|1|#F580B1}}, {{Text|7|#F580B1}}) = Version$
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} QB64_uptime!
QB64_uptime! = {{Text|TIMER|#F0F0F0}}
NoInternalFolder:
{{Text|IF|#F0F0F0}} {{Text|_DIREXISTS|#F0F0F0}}({{Text|"internal"|#FFB100}}) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
    {{Text|_SCREENSHOW|#F0F0F0}}
    {{Text|PRINT|#F0F0F0}} {{Text|"QB64-PE cannot locate the 'internal' folder"|#FFB100}}
    {{Text|PRINT|#F0F0F0}}
    {{Text|PRINT|#F0F0F0}} {{Text|"Check that QB64-PE has been extracted properly."|#FFB100}}
    {{Text|PRINT|#F0F0F0}} {{Text|"For MacOSX, launch 'qb64pe_start.command' or enter './qb64pe' in Terminal."|#FFB100}}
    {{Text|PRINT|#F0F0F0}} {{Text|"For Linux, in the console enter './qb64pe'."|#FFB100}}
    {{Text|DO|#F0F0F0}}
        {{Text|_LIMIT|#F0F0F0}} {{Text|1|#F580B1}}
    {{Text|LOOP|#F0F0F0}} {{Text|UNTIL|#F0F0F0}} {{Text|INKEY$|#F0F0F0}} <> {{Text|""|#FFB100}}
    {{Text|SYSTEM|#F0F0F0}} {{Text|1|#F580B1}}
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} Include_GDB_Debugging_Info {{Text|'set using "options.bin"|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} DEPENDENCY_LAST
{{Text|CONST|#F0F0F0}} DEPENDENCY_LOADFONT = {{Text|1|#F580B1}}: DEPENDENCY_LAST = DEPENDENCY_LAST + {{Text|1|#F580B1}}
{{Text|CONST|#F0F0F0}} DEPENDENCY_AUDIO_CONVERSION = {{Text|2|#F580B1}}: DEPENDENCY_LAST = DEPENDENCY_LAST + {{Text|1|#F580B1}}
{{Text|CONST|#F0F0F0}} DEPENDENCY_AUDIO_DECODE = {{Text|3|#F580B1}}: DEPENDENCY_LAST = DEPENDENCY_LAST + {{Text|1|#F580B1}}
{{Text|CONST|#F0F0F0}} DEPENDENCY_AUDIO_OUT = {{Text|4|#F580B1}}: DEPENDENCY_LAST = DEPENDENCY_LAST + {{Text|1|#F580B1}}
{{Text|CONST|#F0F0F0}} DEPENDENCY_GL = {{Text|5|#F580B1}}: DEPENDENCY_LAST = DEPENDENCY_LAST + {{Text|1|#F580B1}}
{{Text|CONST|#F0F0F0}} DEPENDENCY_IMAGE_CODEC = {{Text|6|#F580B1}}: DEPENDENCY_LAST = DEPENDENCY_LAST + {{Text|1|#F580B1}}
{{Text|CONST|#F0F0F0}} DEPENDENCY_CONSOLE_ONLY = {{Text|7|#F580B1}}: DEPENDENCY_LAST = DEPENDENCY_LAST + {{Text|1|#F580B1}} {{Text|'=2 if via -g switch, =1 if via metacommand $CONSOLE:ONLY|#31C4C4}}
{{Text|CONST|#F0F0F0}} DEPENDENCY_SOCKETS = {{Text|8|#F580B1}}: DEPENDENCY_LAST = DEPENDENCY_LAST + {{Text|1|#F580B1}}
{{Text|CONST|#F0F0F0}} DEPENDENCY_PRINTER = {{Text|9|#F580B1}}: DEPENDENCY_LAST = DEPENDENCY_LAST + {{Text|1|#F580B1}}
{{Text|CONST|#F0F0F0}} DEPENDENCY_ICON = {{Text|10|#F580B1}}: DEPENDENCY_LAST = DEPENDENCY_LAST + {{Text|1|#F580B1}}
{{Text|CONST|#F0F0F0}} DEPENDENCY_SCREENIMAGE = {{Text|11|#F580B1}}: DEPENDENCY_LAST = DEPENDENCY_LAST + {{Text|1|#F580B1}}
{{Text|CONST|#F0F0F0}} DEPENDENCY_DEVICEINPUT = {{Text|12|#F580B1}}: DEPENDENCY_LAST = DEPENDENCY_LAST + {{Text|1|#F580B1}} {{Text|'removes support for gamepad input if not present|#31C4C4}}
{{Text|CONST|#F0F0F0}} DEPENDENCY_ZLIB = {{Text|13|#F580B1}}: DEPENDENCY_LAST = DEPENDENCY_LAST + {{Text|1|#F580B1}} {{Text|'ZLIB library linkage, if desired, for compression/decompression.|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} DEPENDENCY({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} DEPENDENCY_LAST)
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} UseGL {{Text|'declared SUB _GL (no params)|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} OS_BITS {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}, WindowTitle {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
OS_BITS = {{Text|64|#F580B1}}: {{Text|IF|#F0F0F0}} {{Text|INSTR|#F0F0F0}}({{Text|_OS$|#F0F0F0}}, {{Text|"[32BIT]"|#FFB100}}) {{Text|THEN|#F0F0F0}} OS_BITS = {{Text|32|#F580B1}}
{{Text|IF|#F0F0F0}} OS_BITS = {{Text|32|#F580B1}} {{Text|THEN|#F0F0F0}} WindowTitle = {{Text|"QB64 Phoenix Edition (x32)"|#FFB100}} {{Text|ELSE|#F0F0F0}} WindowTitle = {{Text|"QB64 Phoenix Edition (x64)"|#FFB100}}
{{Text|_TITLE|#F0F0F0}} WindowTitle
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ConsoleMode, No_C_Compile_Mode, NoIDEMode
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ShowWarnings {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}, QuietMode {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}, CMDLineFile {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} MonochromeLoggingMode {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
{{Text|TYPE|#F0F0F0}} usedVarList
    {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} id, linenumber, includeLevel, includedLine, scope, localIndex
    {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} arrayElementSize
    {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}} used, watch, isarray, displayFormat {{Text|'displayFormat: 0-DEC;1-HEX;2-BIN;3-OCT|#31C4C4}}
    {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} name, cname, varType, includedFile, subfunc
    {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} watchRange, indexes, elements, elementTypes {{Text|'for Arrays and UDTs|#31C4C4}}
    {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} elementOffset, storage
{{Text|END|#F0F0F0}} {{Text|TYPE|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} backupUsedVariableList({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} usedVarList
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} typeDefinitions$, backupTypeDefinitions$
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} totalVariablesCreated {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}, totalMainVariablesCreated {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} bypassNextVariable {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} totalWarnings {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}, warningListItems {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}, lastWarningHeader {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} duplicateConstWarning {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}, warningsissued {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} emptySCWarning {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}, maxLineNumber {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ExeIconSet {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}, qb64prefix$, qb64prefix_set
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} VersionInfoSet {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
{{Text|'Variables to handle $VERSIONINFO metacommand:|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} viFileVersionNum$, viProductVersionNum$, viCompanyName$
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} viFileDescription$, viFileVersion$, viInternalName$
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} viLegalCopyright$, viLegalTrademarks$, viOriginalFilename$
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} viProductName$, viProductVersion$, viComments$, viWeb$
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} NoChecks
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}}{{Text|_Console|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}}{{Text|_ScreenHide|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} Asserts
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} OptMax {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
OptMax = {{Text|256|#F580B1}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} Opt({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} OptMax, {{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|10|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|256|#F580B1}}
{{Text|'  (1,1)="READ"|#31C4C4}}
{{Text|'  (1,2)="WRITE"|#31C4C4}}
{{Text|'  (1,3)="READ WRITE"|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} OptWords({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} OptMax, {{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|10|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'The number of words of each opt () element|#31C4C4}}
{{Text|'  (1,1)=1 '"READ"|#31C4C4}}
{{Text|'  (1,2)=1 '"WRITE"|#31C4C4}}
{{Text|'  (1,3)=2 '"READ WRITE"|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} T({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} OptMax) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'The type of the entry|#31C4C4}}
{{Text|'  t is 0 for ? opts|#31C4C4}}
{{Text|'  ---------- 0 means ? , 1+ means a symbol or {}block ----------|#31C4C4}}
{{Text|'  t is 1 for symbol opts|#31C4C4}}
{{Text|'  t is the number of rhs opt () index enteries for {READ¦WRITE¦READ WRITE} like opts|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} Lev({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} OptMax) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'The indwelling level of each opt () element (the lowest is 0)|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} EntryLev({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} OptMax) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'The level required from which this opt () can be validly be entered/checked-for|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} DitchLev({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} OptMax) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'The lowest level recorded between the previous Opt and this Opt|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} DontPass({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} OptMax) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'Set to 1 or 0, with 1 meaning don't pass|#31C4C4}}
{{Text|'Determines whether the opt () entry needs to actually be passed to the C++ sub/function|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} TempList({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} OptMax) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} PassRule({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} OptMax) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|'0 means no pass rule|#31C4C4}}
{{Text|'negative values refer to an opt () element|#31C4C4}}
{{Text|'positive values refer to a flag value|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} LevelEntered(OptMax) {{Text|'up to 64 levels supported|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} separgs(OptMax + {{Text|1|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} separgslayout(OptMax + {{Text|1|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} separgs2(OptMax + {{Text|1|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} separgslayout2(OptMax + {{Text|1|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} E
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ResolveStaticFunctions
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ResolveStaticFunction_File({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|100|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ResolveStaticFunction_Name({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|100|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ResolveStaticFunction_Method({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|100|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} Error_Happened {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} Error_Message {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} os {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
os$ = {{Text|"WIN"|#FFB100}}
{{Text|IF|#F0F0F0}} {{Text|INSTR|#F0F0F0}}({{Text|_OS$|#F0F0F0}}, {{Text|"[LINUX]"|#FFB100}}) {{Text|THEN|#F0F0F0}} os$ = {{Text|"LNX"|#FFB100}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} MacOSX {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|IF|#F0F0F0}} {{Text|INSTR|#F0F0F0}}({{Text|_OS$|#F0F0F0}}, {{Text|"[MACOSX]"|#FFB100}}) {{Text|THEN|#F0F0F0}} MacOSX = {{Text|1|#F580B1}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} inline_DATA
{{Text|IF|#F0F0F0}} MacOSX {{Text|THEN|#F0F0F0}} inline_DATA = {{Text|1|#F580B1}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} BATCHFILE_EXTENSION {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
BATCHFILE_EXTENSION = {{Text|".bat"|#FFB100}}
{{Text|IF|#F0F0F0}} os$ = {{Text|"LNX"|#FFB100}} {{Text|THEN|#F0F0F0}} BATCHFILE_EXTENSION = {{Text|".sh"|#FFB100}}
{{Text|IF|#F0F0F0}} MacOSX {{Text|THEN|#F0F0F0}} BATCHFILE_EXTENSION = {{Text|".command"|#FFB100}}
{{Text|DIM|#F0F0F0}} inlinedatastr({{Text|255|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|FOR|#F0F0F0}} i = {{Text|0|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|255|#F580B1}}
    inlinedatastr(i) = str2$(i) + {{Text|","|#FFB100}}
{{Text|NEXT|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} extension {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} path.exe$, path.source$, lastBinaryGenerated$
extension$ = {{Text|".exe"|#FFB100}}
{{Text|IF|#F0F0F0}} os$ = {{Text|"LNX"|#FFB100}} {{Text|THEN|#F0F0F0}} extension$ = {{Text|""|#FFB100}} {{Text|'no extension under Linux|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} pathsep {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|1|#F580B1}}
pathsep$ = {{Text|"\"|#FFB100}}
{{Text|IF|#F0F0F0}} os$ = {{Text|"LNX"|#FFB100}} {{Text|THEN|#F0F0F0}} pathsep$ = {{Text|"/"|#FFB100}}
{{Text|'note: QB64 handles OS specific path separators automatically except under SHELL calls|#31C4C4}}
{{Text|ON|#F0F0F0}} {{Text|ERROR|#F0F0F0}} {{Text|GOTO|#F0F0F0}} qberror_test
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} tmpdir {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}, tmpdir2 {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|IF|#F0F0F0}} os$ = {{Text|"WIN"|#FFB100}} {{Text|THEN|#F0F0F0}} tmpdir$ = {{Text|".\internal\temp\"|#FFB100}}: tmpdir2$ = {{Text|"..\\temp\\"|#FFB100}}
{{Text|IF|#F0F0F0}} os$ = {{Text|"LNX"|#FFB100}} {{Text|THEN|#F0F0F0}} tmpdir$ = {{Text|"./internal/temp/"|#FFB100}}: tmpdir2$ = {{Text|"../temp/"|#FFB100}}
{{Text|IF|#F0F0F0}} {{Text|NOT|#F0F0F0}} {{Text|_DIREXISTS|#F0F0F0}}(tmpdir$) {{Text|THEN|#F0F0F0}} {{Text|MKDIR|#F0F0F0}} tmpdir$
{{Text|DECLARE|#F0F0F0}} {{Text|LIBRARY|#F0F0F0}}
    {{Text|FUNCTION|#F0F0F0}} getpid& ()
{{Text|END|#F0F0F0}} {{Text|DECLARE|#F0F0F0}}
thisinstancepid = getpid&
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} tempfolderindex
{{Text|IF|#F0F0F0}} {{Text|INSTR|#F0F0F0}}({{Text|_OS$|#F0F0F0}}, {{Text|"LINUX"|#FFB100}}) {{Text|THEN|#F0F0F0}}
    fh = {{Text|FREEFILE|#F0F0F0}}
    {{Text|OPEN|#F0F0F0}} {{Text|".\internal\temp\tempfoldersearch.bin"|#FFB100}} {{Text|FOR|#F0F0F0}} {{Text|RANDOM|#F0F0F0}} {{Text|AS|#F0F0F0}} #fh {{Text|LEN|#F0F0F0}} = {{Text|LEN|#F0F0F0}}(tempfolderindex)
    tempfolderrecords = {{Text|LOF|#F0F0F0}}(fh) / {{Text|LEN|#F0F0F0}}(tempfolderindex)
    i = {{Text|1|#F580B1}}
    {{Text|IF|#F0F0F0}} tempfolderrecords = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
        {{Text|'first run ever?|#31C4C4}}
        {{Text|PUT|#F0F0F0}} #fh, {{Text|1|#F580B1}}, thisinstancepid
    {{Text|ELSE|#F0F0F0}}
        {{Text|FOR|#F0F0F0}} i = {{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} tempfolderrecords
            {{Text|'check if any of the temp folders is being used = pid still active|#31C4C4}}
            {{Text|GET|#F0F0F0}} #fh, i, tempfoldersearch
            {{Text|SHELL|#F0F0F0}} {{Text|_HIDE|#F0F0F0}} {{Text|"ps -p "|#FFB100}} + {{Text|STR$|#F0F0F0}}(tempfoldersearch) + {{Text|" > /dev/null 2>&1; echo $? > internal/temp/checkpid.bin"|#FFB100}}
            fh2 = {{Text|FREEFILE|#F0F0F0}}
            {{Text|OPEN|#F0F0F0}} {{Text|"internal/temp/checkpid.bin"|#FFB100}} {{Text|FOR|#F0F0F0}} {{Text|BINARY|#F0F0F0}} {{Text|AS|#F0F0F0}} #fh2
            {{Text|LINE|#F0F0F0}} {{Text|INPUT|#F0F0F0}} #fh2, checkpid$
            {{Text|CLOSE|#F0F0F0}} #fh2
            {{Text|IF|#F0F0F0}} {{Text|VAL|#F0F0F0}}(checkpid$) = {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}}
                {{Text|'This temp folder was locked by an instance that's no longer active, so|#31C4C4}}
                {{Text|'this will be our temp folder|#31C4C4}}
                {{Text|PUT|#F0F0F0}} #fh, i, thisinstancepid
                {{Text|EXIT|#F0F0F0}} {{Text|FOR|#F0F0F0}}
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|NEXT|#F0F0F0}}
        {{Text|IF|#F0F0F0}} i > tempfolderrecords {{Text|THEN|#F0F0F0}}
            {{Text|'All indexes were busy. Let's initiate a new one:|#31C4C4}}
            {{Text|PUT|#F0F0F0}} #fh, i, thisinstancepid
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    {{Text|CLOSE|#F0F0F0}} #fh
    {{Text|IF|#F0F0F0}} i > {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}}
        tmpdir$ = {{Text|"./internal/temp"|#FFB100}} + str2$(i) + {{Text|"/"|#FFB100}}: tmpdir2$ = {{Text|"../temp"|#FFB100}} + str2$(i) + {{Text|"/"|#FFB100}}
        {{Text|IF|#F0F0F0}} {{Text|_DIREXISTS|#F0F0F0}}(tmpdir$) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
            {{Text|MKDIR|#F0F0F0}} tmpdir$
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    {{Text|OPEN|#F0F0F0}} tmpdir$ + {{Text|"temp.bin"|#FFB100}} {{Text|FOR|#F0F0F0}} {{Text|OUTPUT|#F0F0F0}} {{Text|LOCK|#F0F0F0}} {{Text|WRITE|#F0F0F0}} {{Text|AS|#F0F0F0}} #26
{{Text|ELSE|#F0F0F0}}
    {{Text|ON|#F0F0F0}} {{Text|ERROR|#F0F0F0}} {{Text|GOTO|#F0F0F0}} qberror_test
    E = {{Text|0|#F580B1}}
    i = {{Text|1|#F580B1}}
    {{Text|OPEN|#F0F0F0}} tmpdir$ + {{Text|"temp.bin"|#FFB100}} {{Text|FOR|#F0F0F0}} {{Text|OUTPUT|#F0F0F0}} {{Text|LOCK|#F0F0F0}} {{Text|WRITE|#F0F0F0}} {{Text|AS|#F0F0F0}} #26
    {{Text|DO|#F0F0F0}} {{Text|WHILE|#F0F0F0}} E
        i = i + {{Text|1|#F580B1}}
        {{Text|IF|#F0F0F0}} i = {{Text|1000|#F580B1}} {{Text|THEN|#F0F0F0}} {{Text|PRINT|#F0F0F0}} {{Text|"Unable to locate the 'internal' folder"|#FFB100}}: {{Text|END|#F0F0F0}} {{Text|1|#F580B1}}
        {{Text|MKDIR|#F0F0F0}} {{Text|".\internal\temp"|#FFB100}} + str2$(i)
        {{Text|IF|#F0F0F0}} os$ = {{Text|"WIN"|#FFB100}} {{Text|THEN|#F0F0F0}} tmpdir$ = {{Text|".\internal\temp"|#FFB100}} + str2$(i) + {{Text|"\"|#FFB100}}: tmpdir2$ = {{Text|"..\\temp"|#FFB100}} + str2$(i) + {{Text|"\\"|#FFB100}}
        {{Text|IF|#F0F0F0}} os$ = {{Text|"LNX"|#FFB100}} {{Text|THEN|#F0F0F0}} tmpdir$ = {{Text|"./internal/temp"|#FFB100}} + str2$(i) + {{Text|"/"|#FFB100}}: tmpdir2$ = {{Text|"../temp"|#FFB100}} + str2$(i) + {{Text|"/"|#FFB100}}
        E = {{Text|0|#F580B1}}
        {{Text|OPEN|#F0F0F0}} tmpdir$ + {{Text|"temp.bin"|#FFB100}} {{Text|FOR|#F0F0F0}} {{Text|OUTPUT|#F0F0F0}} {{Text|LOCK|#F0F0F0}} {{Text|WRITE|#F0F0F0}} {{Text|AS|#F0F0F0}} #26
    {{Text|LOOP|#F0F0F0}}
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
{{Text|'temp folder established|#31C4C4}}
tempfolderindex = i
{{Text|IF|#F0F0F0}} i > {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}}
    {{Text|'create modified version of qbx.cpp|#31C4C4}}
    {{Text|OPEN|#F0F0F0}} {{Text|".\internal\c\qbx"|#FFB100}} + str2$(i) + {{Text|".cpp"|#FFB100}} {{Text|FOR|#F0F0F0}} {{Text|OUTPUT|#F0F0F0}} {{Text|AS|#F0F0F0}} #2
    {{Text|OPEN|#F0F0F0}} {{Text|".\internal\c\qbx.cpp"|#FFB100}} {{Text|FOR|#F0F0F0}} {{Text|BINARY|#F0F0F0}} {{Text|AS|#F0F0F0}} #1
    {{Text|DO|#F0F0F0}} {{Text|UNTIL|#F0F0F0}} {{Text|EOF|#F0F0F0}}({{Text|1|#F580B1}})
        {{Text|LINE|#F0F0F0}} {{Text|INPUT|#F0F0F0}} #1, a$
        x = {{Text|INSTR|#F0F0F0}}(a$, {{Text|"..\\temp\\"|#FFB100}}): {{Text|IF|#F0F0F0}} x {{Text|THEN|#F0F0F0}} a$ = {{Text|LEFT$|#F0F0F0}}(a$, x - {{Text|1|#F580B1}}) + {{Text|"..\\temp"|#FFB100}} + str2$(i) + {{Text|"\\"|#FFB100}} + {{Text|RIGHT$|#F0F0F0}}(a$, {{Text|LEN|#F0F0F0}}(a$) - (x + {{Text|9|#F580B1}}))
        x = {{Text|INSTR|#F0F0F0}}(a$, {{Text|"../temp/"|#FFB100}}): {{Text|IF|#F0F0F0}} x {{Text|THEN|#F0F0F0}} a$ = {{Text|LEFT$|#F0F0F0}}(a$, x - {{Text|1|#F580B1}}) + {{Text|"../temp"|#FFB100}} + str2$(i) + {{Text|"/"|#FFB100}} + {{Text|RIGHT$|#F0F0F0}}(a$, {{Text|LEN|#F0F0F0}}(a$) - (x + {{Text|7|#F580B1}}))
        {{Text|PRINT|#F0F0F0}} #2, a$
    {{Text|LOOP|#F0F0F0}}
    {{Text|CLOSE|#F0F0F0}} #1, #2
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
{{Text|IF|#F0F0F0}} Debug {{Text|THEN|#F0F0F0}} {{Text|OPEN|#F0F0F0}} tmpdir$ + {{Text|"debug.txt"|#FFB100}} {{Text|FOR|#F0F0F0}} {{Text|OUTPUT|#F0F0F0}} {{Text|AS|#F0F0F0}} #9
{{Text|ON|#F0F0F0}} {{Text|ERROR|#F0F0F0}} {{Text|GOTO|#F0F0F0}} qberror
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} tempfolderindexstr {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'appended to "Untitled"|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} tempfolderindexstr2 {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|IF|#F0F0F0}} tempfolderindex <> {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}} tempfolderindexstr$ = {{Text|"("|#FFB100}} + str2$(tempfolderindex) + {{Text|")"|#FFB100}}: tempfolderindexstr2$ = str2$(tempfolderindex)
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} idedebuginfo
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} seperateargs_error
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} seperateargs_error_message {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} compfailed
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} reginternalsubfunc
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} reginternalvariable
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} symboltype_size
symboltype_size = {{Text|0|#F580B1}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} use_global_byte_elements
use_global_byte_elements = {{Text|0|#F580B1}}
{{Text|'compiler-side IDE data & definitions|#31C4C4}}
{{Text|'SHARED variables "passed" to/from the compiler & IDE|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} idecommand {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'a 1 byte message-type code, followed by optional string data|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} idereturn {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'used to pass formatted-lines and return information back to the IDE|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ideerror {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} idecompiled {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} idemode {{Text|'1 if using the IDE to compile|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ideerrorline {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'set by qb64-error(...) to the line number it would have reported, this number|#31C4C4}}
{{Text|'is later passed to the ide in message #8|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} idemessage {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'set by qb64-error(...) to the error message to be reported, this|#31C4C4}}
{{Text|'is later passed to the ide in message #8|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} optionexplicit {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} optionexplicitarray {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} optionexplicit_cmd {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ideStartAtLine {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}, errorLineInInclude {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} warningInInclude {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}, warningInIncludeLine {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} outputfile_cmd$
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} compilelog$
{{Text|'|#31C4C4}}{{Text|$INCLUDE:|#55FF55}}{{Text|'global\IDEsettings.bas'|#31C4C4}}
{{Text|DIM|#F0F0F0}} OutputIsRelativeToStartDir {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
CMDLineFile = ParseCMDLineArgs$
{{Text|IF|#F0F0F0}} CMDLineFile <> {{Text|""|#FFB100}} {{Text|AND|#F0F0F0}} {{Text|_FILEEXISTS|#F0F0F0}}({{Text|_STARTDIR$|#F0F0F0}} + {{Text|"/"|#FFB100}} + CMDLineFile) {{Text|THEN|#F0F0F0}}
    CMDLineFile = {{Text|_STARTDIR$|#F0F0F0}} + {{Text|"/"|#FFB100}} + CMDLineFile
    OutputIsRelativeToStartDir = {{Text|-1|#F580B1}}
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
{{Text|IF|#F0F0F0}} ConsoleMode {{Text|THEN|#F0F0F0}}
    {{Text|_DEST|#F0F0F0}} {{Text|_CONSOLE|#F0F0F0}}
{{Text|ELSE|#F0F0F0}}
    {{Text|_CONSOLE|#F0F0F0}} {{Text|OFF|#F0F0F0}}
    {{Text|_SCREENSHOW|#F0F0F0}}
    {{Text|_ICON|#F0F0F0}}
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
{{Text|'the function ?=ide(?) should always be passed 0, it returns a message code number, any further information|#31C4C4}}
{{Text|'is passed back in idereturn|#31C4C4}}
{{Text|'message code numbers:|#31C4C4}}
{{Text|'0  no ide present  (auto defined array ide() return 0)|#31C4C4}}
{{Text|'1  launch ide & with passed filename (compiler->ide)|#31C4C4}}
{{Text|'2  begin new compilation with returned line of code (compiler<-ide)|#31C4C4}}
{{Text|'  [2][line of code]|#31C4C4}}
{{Text|'3  request next line (compiler->ide)|#31C4C4}}
{{Text|'  [3]|#31C4C4}}
{{Text|'4  next line of code returned (compiler<-ide)|#31C4C4}}
{{Text|'  [4][line of code]|#31C4C4}}
{{Text|'5  no more lines of code exist (compiler<-ide)|#31C4C4}}
{{Text|'  [5]|#31C4C4}}
{{Text|'6  code is OK/ready (compiler->ide)|#31C4C4}}
{{Text|'  [6]|#31C4C4}}
{{Text|'7  repass the code from the beginning (compiler->ide)|#31C4C4}}
{{Text|'  [7]|#31C4C4}}
{{Text|'8  an error has occurred with 'this' message on 'this' line(compiler->ide)|#31C4C4}}
{{Text|'  [8][error message][line as LONG]|#31C4C4}}
{{Text|'9  C++ compile (if necessary) and run with 'this' name (compiler<-ide)|#31C4C4}}
{{Text|'  [9][name(no path, no .bas)]|#31C4C4}}
{{Text|'10 The line requires more time to process|#31C4C4}}
{{Text|'      Pass-back 'line of code' using method [4] when ready|#31C4C4}}
{{Text|'  [10][line of code]|#31C4C4}}
{{Text|'11 ".EXE file created" message|#31C4C4}}
{{Text|'12    The name of the exe I'll create is '...' (compiler->ide)|#31C4C4}}
{{Text|'  [12][exe name without .exe]|#31C4C4}}
{{Text|'255    A qb error happened in the IDE (compiler->ide)|#31C4C4}}
{{Text|'  note: detected by the fact that ideerror was not set to 0|#31C4C4}}
{{Text|'  [255]|#31C4C4}}
{{Text|'hash table data|#31C4C4}}
{{Text|TYPE|#F0F0F0}} HashListItem
    Flags {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
    Reference {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
    NextItem {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
    PrevItem {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
    LastItem {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'note: this value is only valid on the first item in the list|#31C4C4}}
    {{Text|'note: name is stored in a seperate array of strings|#31C4C4}}
{{Text|END|#F0F0F0}} {{Text|TYPE|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} HashFind_NextListItem {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} HashFind_Reverse {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} HashFind_SearchFlags {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} HashFind_Name {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} HashRemove_LastFound {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} HashListSize {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} HashListNext {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} HashListFreeSize {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} HashListFreeLast {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|'hash lookup tables|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} hash1char({{Text|255|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} hash2char({{Text|65535|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|FOR|#F0F0F0}} x = {{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|26|#F580B1}}
    hash1char({{Text|64|#F580B1}} + x) = x
    hash1char({{Text|96|#F580B1}} + x) = x
{{Text|NEXT|#F0F0F0}}
hash1char({{Text|95|#F580B1}}) = {{Text|27|#F580B1}} {{Text|'_|#31C4C4}}
hash1char({{Text|48|#F580B1}}) = {{Text|28|#F580B1}} {{Text|'0|#31C4C4}}
hash1char({{Text|49|#F580B1}}) = {{Text|29|#F580B1}} {{Text|'1|#31C4C4}}
hash1char({{Text|50|#F580B1}}) = {{Text|30|#F580B1}} {{Text|'2|#31C4C4}}
hash1char({{Text|51|#F580B1}}) = {{Text|31|#F580B1}} {{Text|'3|#31C4C4}}
hash1char({{Text|52|#F580B1}}) = {{Text|23|#F580B1}} {{Text|'4 'note: x, y, z and beginning alphabet letters avoided because of common usage (eg. a2, y3)|#31C4C4}}
hash1char({{Text|53|#F580B1}}) = {{Text|22|#F580B1}} {{Text|'5|#31C4C4}}
hash1char({{Text|54|#F580B1}}) = {{Text|20|#F580B1}} {{Text|'6|#31C4C4}}
hash1char({{Text|55|#F580B1}}) = {{Text|19|#F580B1}} {{Text|'7|#31C4C4}}
hash1char({{Text|56|#F580B1}}) = {{Text|18|#F580B1}} {{Text|'8|#31C4C4}}
hash1char({{Text|57|#F580B1}}) = {{Text|17|#F580B1}} {{Text|'9|#31C4C4}}
{{Text|FOR|#F0F0F0}} c1 = {{Text|0|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|255|#F580B1}}
    {{Text|FOR|#F0F0F0}} c2 = {{Text|0|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|255|#F580B1}}
        hash2char(c1 + c2 * {{Text|256|#F580B1}}) = hash1char(c1) + hash1char(c2) * {{Text|32|#F580B1}}
    {{Text|NEXT|#F0F0F0}}
{{Text|NEXT|#F0F0F0}}
{{Text|'init|#31C4C4}}
HashListSize = {{Text|65536|#F580B1}}
HashListNext = {{Text|1|#F580B1}}
HashListFreeSize = {{Text|1024|#F580B1}}
HashListFreeLast = {{Text|0|#F580B1}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} HashList({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} HashListSize) {{Text|AS|#F0F0F0}} HashListItem
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} HashListName({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} HashListSize) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|256|#F580B1}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} HashListFree({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} HashListFreeSize) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} HashTable({{Text|16777215|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'64MB lookup table with indexes to the hashlist|#31C4C4}}
{{Text|CONST|#F0F0F0}} HASHFLAG_LABEL = {{Text|2|#F580B1}}
{{Text|CONST|#F0F0F0}} HASHFLAG_TYPE = {{Text|4|#F580B1}}
{{Text|CONST|#F0F0F0}} HASHFLAG_RESERVED = {{Text|8|#F580B1}}
{{Text|CONST|#F0F0F0}} HASHFLAG_OPERATOR = {{Text|16|#F580B1}}
{{Text|CONST|#F0F0F0}} HASHFLAG_CUSTOMSYNTAX = {{Text|32|#F580B1}}
{{Text|CONST|#F0F0F0}} HASHFLAG_SUB = {{Text|64|#F580B1}}
{{Text|CONST|#F0F0F0}} HASHFLAG_FUNCTION = {{Text|128|#F580B1}}
{{Text|CONST|#F0F0F0}} HASHFLAG_UDT = {{Text|256|#F580B1}}
{{Text|CONST|#F0F0F0}} HASHFLAG_UDTELEMENT = {{Text|512|#F580B1}}
{{Text|CONST|#F0F0F0}} HASHFLAG_CONSTANT = {{Text|1024|#F580B1}}
{{Text|CONST|#F0F0F0}} HASHFLAG_VARIABLE = {{Text|2048|#F580B1}}
{{Text|CONST|#F0F0F0}} HASHFLAG_ARRAY = {{Text|4096|#F580B1}}
{{Text|CONST|#F0F0F0}} HASHFLAG_XELEMENTNAME = {{Text|8192|#F580B1}}
{{Text|CONST|#F0F0F0}} HASHFLAG_XTYPENAME = {{Text|16384|#F580B1}}
{{Text|TYPE|#F0F0F0}} Label_Type
    State {{Text|AS|#F0F0F0}} {{Text|_UNSIGNED|#F0F0F0}} {{Text|_BYTE|#F0F0F0}} {{Text|'0=label referenced, 1=label created|#31C4C4}}
    cn {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|256|#F580B1}}
    Scope {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
    Data_Offset {{Text|AS|#F0F0F0}} _INTEGER64 {{Text|'offset within data|#31C4C4}}
    Data_Referenced {{Text|AS|#F0F0F0}} {{Text|_UNSIGNED|#F0F0F0}} {{Text|_BYTE|#F0F0F0}} {{Text|'set to 1 if data is referenced (data_offset will be used to create the data offset variable)|#31C4C4}}
    Error_Line {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'the line number to reference on errors|#31C4C4}}
    Scope_Restriction {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'cannot exist inside this scope (post checked)|#31C4C4}}
    SourceLineNumber {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|END|#F0F0F0}} {{Text|TYPE|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} nLabels, Labels_Ubound
Labels_Ubound = {{Text|100|#F580B1}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} Labels({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} Labels_Ubound) {{Text|AS|#F0F0F0}} Label_Type
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} Empty_Label {{Text|AS|#F0F0F0}} Label_Type
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} PossibleSubNameLabels {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'format: name+sp+name+sp+name <-ucase$'d|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} SubNameLabels {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'format: name+sp+name+sp+name <-ucase$'d|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} CreatingLabel {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} AllowLocalName {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} DataOffset
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} prepass
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} autoarray
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ontimerid, onkeyid, onstrigid
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} revertmaymusthave({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|10000|#F580B1}})
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} revertmaymusthaven
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} linecontinuation
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} dim2typepassback {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'passes back correct case sensitive version of type|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} inclevel
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} incname({{Text|100|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'must be full path as given|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} inclinenumber({{Text|100|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} incerror {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} fix046 {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
fix046$ = {{Text|"__"|#FFB100}} + {{Text|"ASCII"|#FFB100}} + {{Text|"_"|#FFB100}} + {{Text|"CHR"|#FFB100}} + {{Text|"_"|#FFB100}} + {{Text|"046"|#FFB100}} + {{Text|"__"|#FFB100}} {{Text|'broken up to avoid detection for layout reversion|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} layout {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'passed to IDE|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} layoutok {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'tracks status of entire line|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} layoutcomment {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} tlayout {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'temporary layout string set by supporting functions|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} layoutdone {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'tracks status of single command|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} fooindwel
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} alphanumeric({{Text|255|#F580B1}})
{{Text|FOR|#F0F0F0}} i = {{Text|48|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|57|#F580B1}}
    alphanumeric(i) = {{Text|-1|#F580B1}}
{{Text|NEXT|#F0F0F0}}
{{Text|FOR|#F0F0F0}} i = {{Text|65|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|90|#F580B1}}
    alphanumeric(i) = {{Text|-1|#F580B1}}
{{Text|NEXT|#F0F0F0}}
{{Text|FOR|#F0F0F0}} i = {{Text|97|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|122|#F580B1}}
    alphanumeric(i) = {{Text|-1|#F580B1}}
{{Text|NEXT|#F0F0F0}}
{{Text|'_ is treated as an alphabet letter|#31C4C4}}
alphanumeric({{Text|95|#F580B1}}) = {{Text|-1|#F580B1}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} isalpha({{Text|255|#F580B1}})
{{Text|FOR|#F0F0F0}} i = {{Text|65|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|90|#F580B1}}
    isalpha(i) = {{Text|-1|#F580B1}}
{{Text|NEXT|#F0F0F0}}
{{Text|FOR|#F0F0F0}} i = {{Text|97|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|122|#F580B1}}
    isalpha(i) = {{Text|-1|#F580B1}}
{{Text|NEXT|#F0F0F0}}
{{Text|'_ is treated as an alphabet letter|#31C4C4}}
isalpha({{Text|95|#F580B1}}) = {{Text|-1|#F580B1}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} isnumeric({{Text|255|#F580B1}})
{{Text|FOR|#F0F0F0}} i = {{Text|48|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|57|#F580B1}}
    isnumeric(i) = {{Text|-1|#F580B1}}
{{Text|NEXT|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} lfsinglechar({{Text|255|#F580B1}})
lfsinglechar({{Text|40|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'(|#31C4C4}}
lfsinglechar({{Text|41|#F580B1}}) = {{Text|1|#F580B1}} {{Text|')|#31C4C4}}
lfsinglechar({{Text|42|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'*|#31C4C4}}
lfsinglechar({{Text|43|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'+|#31C4C4}}
lfsinglechar({{Text|45|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'-|#31C4C4}}
lfsinglechar({{Text|47|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'/|#31C4C4}}
lfsinglechar({{Text|60|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'<|#31C4C4}}
lfsinglechar({{Text|61|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'=|#31C4C4}}
lfsinglechar({{Text|62|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'>|#31C4C4}}
lfsinglechar({{Text|92|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'\|#31C4C4}}
lfsinglechar({{Text|94|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'^|#31C4C4}}
lfsinglechar({{Text|44|#F580B1}}) = {{Text|1|#F580B1}} {{Text|',|#31C4C4}}
lfsinglechar({{Text|46|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'.|#31C4C4}}
lfsinglechar({{Text|58|#F580B1}}) = {{Text|1|#F580B1}} {{Text|':|#31C4C4}}
lfsinglechar({{Text|59|#F580B1}}) = {{Text|1|#F580B1}} {{Text|';|#31C4C4}}
lfsinglechar({{Text|35|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'# (file no only)|#31C4C4}}
lfsinglechar({{Text|36|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'$ (metacommand only)|#31C4C4}}
lfsinglechar({{Text|63|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'? (print macro)|#31C4C4}}
lfsinglechar({{Text|95|#F580B1}}) = {{Text|1|#F580B1}} {{Text|'_|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} nextrunlineindex {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} lineinput3buffer {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} lineinput3index {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} dimstatic {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} staticarraylist {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} staticarraylistn {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} commonarraylist {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} commonarraylistn {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|'CONST support|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} constmax {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
constmax = {{Text|100|#F580B1}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} constlast {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
constlast = {{Text|-1|#F580B1}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} constname(constmax) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} constcname(constmax) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} constnamesymbol(constmax) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'optional name symbol|#31C4C4}}
{{Text|' `1 and `no-number must be handled correctly|#31C4C4}}
{{Text|'DIM SHARED constlastshared AS LONG 'so any defined inside a sub/function after this index can be "forgotten" when sub/function exits|#31C4C4}}
{{Text|'constlastshared = -1|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} consttype(constmax) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'variable type number|#31C4C4}}
{{Text|'consttype determines storage|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} constinteger(constmax) {{Text|AS|#F0F0F0}} _INTEGER64
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} constuinteger(constmax) {{Text|AS|#F0F0F0}} {{Text|_UNSIGNED|#F0F0F0}} _INTEGER64
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} constfloat(constmax) {{Text|AS|#F0F0F0}} {{Text|_FLOAT|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} conststring(constmax) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} constsubfunc(constmax) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} constdefined(constmax) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|'UDT|#31C4C4}}
{{Text|'names|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} lasttype {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} lasttypeelement {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|TYPE|#F0F0F0}} idstruct
    n {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|256|#F580B1}} {{Text|'name|#31C4C4}}
    cn {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|256|#F580B1}} {{Text|'case sensitive version of n|#31C4C4}}
    arraytype {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'similar to t|#31C4C4}}
    arrayelements {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
    staticarray {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'set for arrays declared in the main module with static elements|#31C4C4}}
    mayhave {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|8|#F580B1}} {{Text|'mayhave and musthave are exclusive of each other|#31C4C4}}
    musthave {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|8|#F580B1}}
    t {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'type|#31C4C4}}
    tsize {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
    subfunc {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'if function=1, sub=2 (max 100 arguments)|#31C4C4}}
    Dependency {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
    internal_subfunc {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
    callname {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|256|#F580B1}}
    ccall {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
    overloaded {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
    args {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
    minargs {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
    arg {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|400|#F580B1}} {{Text|'similar to t|#31C4C4}}
    argsize {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|400|#F580B1}} {{Text|'similar to tsize (used for fixed length strings)|#31C4C4}}
    specialformat {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|256|#F580B1}}
    secondargmustbe {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|256|#F580B1}}
    secondargcantbe {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|256|#F580B1}}
    ret {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'the value it returns if it is a function (again like t)|#31C4C4}}
    insubfunc {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|256|#F580B1}}
    insubfuncn {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
    share {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
    nele {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|100|#F580B1}}
    nelereq {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|100|#F580B1}}
    linkid {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
    linkarg {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
    staticscope {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
    {{Text|'For variables which are arguments passed to a sub/function|#31C4C4}}
    sfid {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'id number of variable's parent sub/function|#31C4C4}}
    sfarg {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'argument/parameter # within call (1=first)|#31C4C4}}
    hr_syntax {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|END|#F0F0F0}} {{Text|TYPE|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} id {{Text|AS|#F0F0F0}} idstruct
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} idn {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ids_max {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
ids_max = {{Text|1024|#F580B1}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ids({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} ids_max) {{Text|AS|#F0F0F0}} idstruct
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} cmemlist({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} ids_max + {{Text|1|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'variables that must be in cmem|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} sfcmemargs({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} ids_max + {{Text|1|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|100|#F580B1}} {{Text|'s/f arg that must be in cmem|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} arrayelementslist({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} ids_max + {{Text|1|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'arrayelementslist (like cmemlist) helps to resolve the number of elements in arrays with an unknown number of elements. Note: arrays with an unknown number of elements have .arrayelements=-1|#31C4C4}}
{{Text|'create blank id template for idclear to copy (stops strings being set to chr$(0))|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} cleariddata {{Text|AS|#F0F0F0}} idstruct
cleariddata.cn = {{Text|""|#FFB100}}
cleariddata.n = {{Text|""|#FFB100}}
cleariddata.mayhave = {{Text|""|#FFB100}}
cleariddata.musthave = {{Text|""|#FFB100}}
cleariddata.callname = {{Text|""|#FFB100}}
cleariddata.arg = {{Text|""|#FFB100}}
cleariddata.argsize = {{Text|""|#FFB100}}
cleariddata.specialformat = {{Text|""|#FFB100}}
cleariddata.secondargmustbe = {{Text|""|#FFB100}}
cleariddata.secondargcantbe = {{Text|""|#FFB100}}
cleariddata.insubfunc = {{Text|""|#FFB100}}
cleariddata.nele = {{Text|""|#FFB100}}
cleariddata.nelereq = {{Text|""|#FFB100}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ISSTRING {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ISFLOAT {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ISUNSIGNED {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ISPOINTER {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ISFIXEDLENGTH {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ISINCONVENTIONALMEMORY {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ISOFFSETINBITS {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ISARRAY {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ISREFERENCE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ISUDT {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ISOFFSET {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} STRINGTYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} BITTYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} UBITTYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} BYTETYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} UBYTETYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} INTEGERTYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} UINTEGERTYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} LONGTYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} ULONGTYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} INTEGER64TYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} UINTEGER64TYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} SINGLETYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} DOUBLETYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} FLOATTYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} OFFSETTYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} UOFFSETTYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} UDTTYPE {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} gosubid {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} redimoption {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} dimoption {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} arraydesc {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} qberrorhappened {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} qberrorcode {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} qberrorline {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|'COMMON SHARED defineaz() AS STRING|#31C4C4}}
{{Text|'COMMON SHARED defineextaz() AS STRING|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} sourcefile {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'the full path and filename|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} file {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'name of the file (without .bas or path)|#31C4C4}}
{{Text|'COMMON SHARED separgs() AS STRING|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} constequation {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} DynamicMode {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} findidsecondarg {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} findanotherid {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} findidinternal {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} currentid {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'is the index of the last ID accessed|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} linenumber {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}, reallinenumber {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}, totallinenumber {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}, definingtypeerror {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} wholeline {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} firstLineNumberLabelvWatch {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}, lastLineNumberLabelvWatch {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} vWatchUsedLabels {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}, vWatchUsedSkipLabels {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} linefragment {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|'COMMON SHARED bitmask() AS _INTEGER64|#31C4C4}}
{{Text|'COMMON SHARED bitmaskinv() AS _INTEGER64|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} arrayprocessinghappened {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} stringprocessinghappened {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} cleanupstringprocessingcall {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} inputfunctioncalled {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} recompile {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'forces recompilation|#31C4C4}}
{{Text|'COMMON SHARED cmemlist() AS INTEGER|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} optionbase {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} addmetastatic {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} addmetadynamic {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} addmetainclude {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} closedmain {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} module {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} subfunc {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} subfuncn {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} closedsubfunc {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} subfuncid {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} defdatahandle {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} dimsfarray {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} dimshared {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|'Allows passing of known elements to recompilation|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} sflistn {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|'COMMON SHARED sfidlist() AS LONG|#31C4C4}}
{{Text|'COMMON SHARED sfarglist() AS INTEGER|#31C4C4}}
{{Text|'COMMON SHARED sfelelist() AS INTEGER|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} glinkid {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} glinkarg {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} typname2typsize {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} uniquenumbern {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|'CLEAR , , 16384|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} bitmask({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|64|#F580B1}}) {{Text|AS|#F0F0F0}} _INTEGER64
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} bitmaskinv({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|64|#F580B1}}) {{Text|AS|#F0F0F0}} _INTEGER64
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} defineextaz({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|27|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} defineaz({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|27|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'27 is an underscore|#31C4C4}}
ISSTRING = {{Text|1073741824|#F580B1}}
ISFLOAT = {{Text|536870912|#F580B1}}
ISUNSIGNED = {{Text|268435456|#F580B1}}
ISPOINTER = {{Text|134217728|#F580B1}}
ISFIXEDLENGTH = {{Text|67108864|#F580B1}} {{Text|'only set for strings with pointer flag|#31C4C4}}
ISINCONVENTIONALMEMORY = {{Text|33554432|#F580B1}}
ISOFFSETINBITS = {{Text|16777216|#F580B1}}
ISARRAY = {{Text|8388608|#F580B1}}
ISREFERENCE = {{Text|4194304|#F580B1}}
ISUDT = {{Text|2097152|#F580B1}}
ISOFFSET = {{Text|1048576|#F580B1}}
STRINGTYPE = ISSTRING + ISPOINTER
BITTYPE = {{Text|1&|#F580B1}} + ISPOINTER + ISOFFSETINBITS
UBITTYPE = {{Text|1&|#F580B1}} + ISPOINTER + ISUNSIGNED + ISOFFSETINBITS {{Text|'QB64 will also support BIT*n, eg. DIM bitarray[10] AS _UNSIGNED _BIT*10|#31C4C4}}
BYTETYPE = {{Text|8&|#F580B1}} + ISPOINTER
UBYTETYPE = {{Text|8&|#F580B1}} + ISPOINTER + ISUNSIGNED
INTEGERTYPE = {{Text|16&|#F580B1}} + ISPOINTER
UINTEGERTYPE = {{Text|16&|#F580B1}} + ISPOINTER + ISUNSIGNED
LONGTYPE = {{Text|32&|#F580B1}} + ISPOINTER
ULONGTYPE = {{Text|32&|#F580B1}} + ISPOINTER + ISUNSIGNED
INTEGER64TYPE = {{Text|64&|#F580B1}} + ISPOINTER
UINTEGER64TYPE = {{Text|64&|#F580B1}} + ISPOINTER + ISUNSIGNED
SINGLETYPE = {{Text|32&|#F580B1}} + ISFLOAT + ISPOINTER
DOUBLETYPE = {{Text|64&|#F580B1}} + ISFLOAT + ISPOINTER
FLOATTYPE = {{Text|256&|#F580B1}} + ISFLOAT + ISPOINTER {{Text|'8-32 bytes|#31C4C4}}
OFFSETTYPE = {{Text|64&|#F580B1}} + ISOFFSET + ISPOINTER: {{Text|IF|#F0F0F0}} OS_BITS = {{Text|32|#F580B1}} {{Text|THEN|#F0F0F0}} OFFSETTYPE = {{Text|32&|#F580B1}} + ISOFFSET + ISPOINTER
UOFFSETTYPE = {{Text|64&|#F580B1}} + ISOFFSET + ISUNSIGNED + ISPOINTER: {{Text|IF|#F0F0F0}} OS_BITS = {{Text|32|#F580B1}} {{Text|THEN|#F0F0F0}} UOFFSETTYPE = {{Text|32&|#F580B1}} + ISOFFSET + ISUNSIGNED + ISPOINTER
UDTTYPE = ISUDT + ISPOINTER
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} statementn {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} everycasenewcase {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} controllevel {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'0=not in a control block|#31C4C4}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} controltype({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|'1=IF (awaiting END IF)|#31C4C4}}
{{Text|'2=FOR (awaiting NEXT)|#31C4C4}}
{{Text|'3=DO (awaiting LOOP [UNTIL¦WHILE param])|#31C4C4}}
{{Text|'4=DO WHILE/UNTIL (awaiting LOOP)|#31C4C4}}
{{Text|'5=WHILE (awaiting WEND)|#31C4C4}}
{{Text|'6=$IF (precompiler)|#31C4C4}}
{{Text|'10=SELECT CASE qbs (awaiting END SELECT/CASE)|#31C4C4}}
{{Text|'11=SELECT CASE int64 (awaiting END SELECT/CASE)|#31C4C4}}
{{Text|'12=SELECT CASE uint64 (awaiting END SELECT/CASE)|#31C4C4}}
{{Text|'13=SELECT CASE LONG double (awaiting END SELECT/CASE/CASE ELSE)|#31C4C4}}
{{Text|'14=SELECT CASE float ...|#31C4C4}}
{{Text|'15=SELECT CASE double|#31C4C4}}
{{Text|'16=SELECT CASE int32|#31C4C4}}
{{Text|'17=SELECT CASE uint32|#31C4C4}}
{{Text|'18=CASE (awaiting END SELECT/CASE/CASE ELSE)|#31C4C4}}
{{Text|'19=CASE ELSE (awaiting END SELECT)|#31C4C4}}
{{Text|'32=SUB/FUNCTION (awaiting END SUB/FUNCTION)|#31C4C4}}
{{Text|DIM|#F0F0F0}} controlid({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} controlvalue({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} controlstate({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} controlref({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'the line number the control was created on|#31C4C4}}
{{Text|'|#31C4C4}}
{{Text|' Collection of flags indicating which unstable features should be used during compilation|#31C4C4}}
{{Text|'|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} unstableFlags({{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|2|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
{{Text|DIM|#F0F0F0}} UNSTABLE_MIDI {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} UNSTABLE_HTTP {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
UNSTABLE_MIDI = {{Text|1|#F580B1}}
UNSTABLE_HTTP = {{Text|2|#F580B1}}
{{Text|ON|#F0F0F0}} {{Text|ERROR|#F0F0F0}} {{Text|GOTO|#F0F0F0}} qberror
i2&& = {{Text|1|#F580B1}}
{{Text|FOR|#F0F0F0}} i&& = {{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|64|#F580B1}}
    bitmask(i&&) = i2&&
    bitmaskinv(i&&) = {{Text|NOT|#F0F0F0}} i2&&
    i2&& = i2&& + {{Text|2|#F580B1}} ^ i&&
{{Text|NEXT|#F0F0F0}}
{{Text|DIM|#F0F0F0}} id2 {{Text|AS|#F0F0F0}} idstruct
cleanupstringprocessingcall$ = {{Text|"qbs_cleanup(qbs_tmp_base,"|#FFB100}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} sfidlist({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} sfarglist({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} sfelelist({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|'----------------ripgl.bas--------------------------------------------------------------------------------|#31C4C4}}
gl_scan_header
{{Text|'----------------ripgl.bas--------------------------------------------------------------------------------|#31C4C4}}
{{Text|'-----------------------QB64 COMPILER ONCE ONLY SETUP CODE ENDS HERE---------------------------------------|#31C4C4}}
{{Text|IF|#F0F0F0}} NoIDEMode {{Text|THEN|#F0F0F0}} IDE_AutoPosition = {{Text|0|#F580B1}}: {{Text|GOTO|#F0F0F0}} noide
{{Text|DIM|#F0F0F0}} FileDropEnabled {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
{{Text|IF|#F0F0F0}} FileDropEnabled = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} FileDropEnabled = {{Text|-1|#F580B1}}: {{Text|_ACCEPTFILEDROP|#F0F0F0}}
{{Text|IF|#F0F0F0}} IDE_AutoPosition {{Text|AND|#F0F0F0}} {{Text|NOT|#F0F0F0}} IDE_BypassAutoPosition {{Text|THEN|#F0F0F0}} {{Text|_SCREENMOVE|#F0F0F0}} IDE_LeftPosition, IDE_TopPosition
idemode = {{Text|1|#F580B1}}
sendc$ = {{Text|""|#FFB100}} {{Text|'no initial message|#31C4C4}}
{{Text|IF|#F0F0F0}} CMDLineFile <> {{Text|""|#FFB100}} {{Text|THEN|#F0F0F0}} sendc$ = {{Text|CHR$|#F0F0F0}}({{Text|1|#F580B1}}) + CMDLineFile
sendcommand:
idecommand$ = sendc$
C = ide({{Text|0|#F580B1}})
ideerror = {{Text|0|#F580B1}}
{{Text|IF|#F0F0F0}} C = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} idemode = {{Text|0|#F580B1}}: {{Text|GOTO|#F0F0F0}} noide
c$ = idereturn$
{{Text|IF|#F0F0F0}} C = {{Text|2|#F580B1}} {{Text|THEN|#F0F0F0}} {{Text|'begin|#31C4C4}}
    ideerrorline = {{Text|0|#F580B1}} {{Text|'addresses invalid prepass error line numbers being reported|#31C4C4}}
    idepass = {{Text|1|#F580B1}}
    {{Text|GOTO|#F0F0F0}} fullrecompile
    ideret1:
    wholeline$ = c$
    {{Text|GOTO|#F0F0F0}} ideprepass
    ideret2:
    {{Text|IF|#F0F0F0}} lastLineReturn {{Text|THEN|#F0F0F0}} {{Text|GOTO|#F0F0F0}} lastLineReturn
    sendc$ = {{Text|CHR$|#F0F0F0}}({{Text|3|#F580B1}}) {{Text|'request next line|#31C4C4}}
    {{Text|GOTO|#F0F0F0}} sendcommand
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
{{Text|IF|#F0F0F0}} C = {{Text|4|#F580B1}} {{Text|THEN|#F0F0F0}} {{Text|'next line|#31C4C4}}
    {{Text|IF|#F0F0F0}} idepass = {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}}
        wholeline$ = c$
        {{Text|GOTO|#F0F0F0}} ideprepass
        {{Text|'(returns to ideret2: above)|#31C4C4}}
    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    {{Text|'assume idepass>1|#31C4C4}}
    a3$ = c$
    continuelinefrom = {{Text|0|#F580B1}}
    {{Text|GOTO|#F0F0F0}} ide4
    ideret4:
    {{Text|IF|#F0F0F0}} lastLineReturn {{Text|THEN|#F0F0F0}} {{Text|GOTO|#F0F0F0}} lastLineReturn
    sendc$ = {{Text|CHR$|#F0F0F0}}({{Text|3|#F580B1}}) {{Text|'request next line|#31C4C4}}
    {{Text|GOTO|#F0F0F0}} sendcommand
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
{{Text|IF|#F0F0F0}} C = {{Text|5|#F580B1}} {{Text|THEN|#F0F0F0}} {{Text|'end of program reached|#31C4C4}}
    lastLine = {{Text|1|#F580B1}}
    lastLineReturn = {{Text|1|#F580B1}}
    {{Text|IF|#F0F0F0}} idepass = {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}}
        wholeline$ = {{Text|""|#FFB100}}
        {{Text|GOTO|#F0F0F0}} ideprepass
        {{Text|'(returns to ideret2: above, then to lastLinePrepassReturn below)|#31C4C4}}
    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    {{Text|'idepass>1|#31C4C4}}
    a3$ = {{Text|""|#FFB100}}
    continuelinefrom = {{Text|0|#F580B1}}
    {{Text|GOTO|#F0F0F0}} ide4 {{Text|'returns to ideret4, then to lastLinePrepassReturn below|#31C4C4}}
    lastLineReturn:
    lastLineReturn = {{Text|0|#F580B1}}
    lastLine = {{Text|0|#F580B1}}
    {{Text|IF|#F0F0F0}} idepass = {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}}
        {{Text|'prepass complete|#31C4C4}}
        idepass = {{Text|2|#F580B1}}
        {{Text|GOTO|#F0F0F0}} ide3
        ideret3:
        sendc$ = {{Text|CHR$|#F0F0F0}}({{Text|7|#F580B1}}) {{Text|'repass request|#31C4C4}}
        firstLine = {{Text|1|#F580B1}}
        {{Text|GOTO|#F0F0F0}} sendcommand
    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    {{Text|'assume idepass=2|#31C4C4}}
    {{Text|'finalize program|#31C4C4}}
    {{Text|GOTO|#F0F0F0}} ide5
    ideret5: {{Text|'note: won't return here if a recompile was required!|#31C4C4}}
    sendc$ = {{Text|CHR$|#F0F0F0}}({{Text|6|#F580B1}}) {{Text|'ready|#31C4C4}}
    idecompiled = {{Text|0|#F580B1}}
    {{Text|GOTO|#F0F0F0}} sendcommand
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
{{Text|IF|#F0F0F0}} C = {{Text|9|#F580B1}} {{Text|THEN|#F0F0F0}} {{Text|'run|#31C4C4}}
    {{Text|IF|#F0F0F0}} idecompiled = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} {{Text|'exe needs to be compiled|#31C4C4}}
        file$ = c$
        {{Text|'locate accessible file and truncate|#31C4C4}}
        f$ = file$
        path.exe$ = {{Text|""|#FFB100}}
        {{Text|IF|#F0F0F0}} SaveExeWithSource {{Text|THEN|#F0F0F0}}
            {{Text|IF|#F0F0F0}} {{Text|LEN|#F0F0F0}}(ideprogname) {{Text|THEN|#F0F0F0}} path.exe$ = idepath$ + pathsep$
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        i = {{Text|1|#F580B1}}
        nextexeindex:
        {{Text|IF|#F0F0F0}} {{Text|_FILEEXISTS|#F0F0F0}}(path.exe$ + file$ + extension$) {{Text|THEN|#F0F0F0}}
            E = {{Text|0|#F580B1}}
            {{Text|ON|#F0F0F0}} {{Text|ERROR|#F0F0F0}} {{Text|GOTO|#F0F0F0}} qberror_test
            {{Text|KILL|#F0F0F0}} path.exe$ + file$ + extension$
            {{Text|ON|#F0F0F0}} {{Text|ERROR|#F0F0F0}} {{Text|GOTO|#F0F0F0}} qberror
            {{Text|IF|#F0F0F0}} E = {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}}
                i = i + {{Text|1|#F580B1}}
                file$ = f$ + {{Text|"("|#FFB100}} + str2$(i) + {{Text|")"|#FFB100}}
                {{Text|GOTO|#F0F0F0}} nextexeindex
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|'inform IDE of name change if necessary (IDE will respond with message 9 and corrected name)|#31C4C4}}
        {{Text|IF|#F0F0F0}} i <> {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}}
            sendc$ = {{Text|CHR$|#F0F0F0}}({{Text|12|#F580B1}}) + file$
            {{Text|GOTO|#F0F0F0}} sendcommand
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        ideerrorline = {{Text|0|#F580B1}} {{Text|'addresses C++ comp. error's line number|#31C4C4}}
        {{Text|GOTO|#F0F0F0}} ide6
        ideret6:
        idecompiled = {{Text|1|#F580B1}}
    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    {{Text|IF|#F0F0F0}} iderunmode = {{Text|2|#F580B1}} {{Text|THEN|#F0F0F0}}
        sendc$ = {{Text|CHR$|#F0F0F0}}({{Text|11|#F580B1}}) {{Text|'.EXE file created|#31C4C4}}
        {{Text|GOTO|#F0F0F0}} sendcommand
    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    {{Text|'execute program|#31C4C4}}
    {{Text|IF|#F0F0F0}} iderunmode = {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}}
        {{Text|IF|#F0F0F0}} NoExeSaved {{Text|THEN|#F0F0F0}}
            {{Text|'This is the section which deals with if the user selected to run the program without|#31C4C4}}
            {{Text|'saving an EXE file to the disk.|#31C4C4}}
            {{Text|'We start off by first running the EXE, and then we delete it from the drive.|#31C4C4}}
            {{Text|'making it a temporary file when all is said and done.|#31C4C4}}
            {{Text|IF|#F0F0F0}} os$ = {{Text|"WIN"|#FFB100}} {{Text|THEN|#F0F0F0}}
                {{Text|SHELL|#F0F0F0}} QuotedFilename$({{Text|CHR$|#F0F0F0}}({{Text|34|#F580B1}}) + lastBinaryGenerated$ + {{Text|CHR$|#F0F0F0}}({{Text|34|#F580B1}})) + ModifyCOMMAND$ {{Text|'run the newly created program|#31C4C4}}
                {{Text|SHELL|#F0F0F0}} {{Text|_HIDE|#F0F0F0}} {{Text|_DONTWAIT|#F0F0F0}} {{Text|"del "|#FFB100}} + QuotedFilename$({{Text|CHR$|#F0F0F0}}({{Text|34|#F580B1}}) + lastBinaryGenerated$ + {{Text|CHR$|#F0F0F0}}({{Text|34|#F580B1}})) {{Text|'kill it|#31C4C4}}
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
            {{Text|IF|#F0F0F0}} path.exe$ = {{Text|""|#FFB100}} {{Text|THEN|#F0F0F0}} path.exe$ = {{Text|"./"|#FFB100}}
            {{Text|IF|#F0F0F0}} os$ = {{Text|"LNX"|#FFB100}} {{Text|THEN|#F0F0F0}}
                {{Text|IF|#F0F0F0}} {{Text|LEFT$|#F0F0F0}}(lastBinaryGenerated$, {{Text|LEN|#F0F0F0}}(path.exe$)) = path.exe$ {{Text|THEN|#F0F0F0}}
                    {{Text|SHELL|#F0F0F0}} QuotedFilename$(lastBinaryGenerated$) + ModifyCOMMAND$
                    {{Text|KILL|#F0F0F0}} lastBinaryGenerated$
                {{Text|ELSE|#F0F0F0}}
                    {{Text|SHELL|#F0F0F0}} QuotedFilename$(path.exe$ + lastBinaryGenerated$) + ModifyCOMMAND$
                    {{Text|KILL|#F0F0F0}} path.exe$ + lastBinaryGenerated$
                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
            {{Text|IF|#F0F0F0}} path.exe$ = {{Text|"./"|#FFB100}} {{Text|THEN|#F0F0F0}} path.exe$ = {{Text|""|#FFB100}}
            NoExeSaved = {{Text|0|#F580B1}} {{Text|'reset the flag for a temp EXE|#31C4C4}}
            sendc$ = {{Text|CHR$|#F0F0F0}}({{Text|6|#F580B1}}) {{Text|'ready|#31C4C4}}
            {{Text|GOTO|#F0F0F0}} sendcommand
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|IF|#F0F0F0}} os$ = {{Text|"WIN"|#FFB100}} {{Text|THEN|#F0F0F0}} {{Text|SHELL|#F0F0F0}} {{Text|_DONTWAIT|#F0F0F0}} QuotedFilename$({{Text|CHR$|#F0F0F0}}({{Text|34|#F580B1}}) + lastBinaryGenerated$ + {{Text|CHR$|#F0F0F0}}({{Text|34|#F580B1}})) + ModifyCOMMAND$
        {{Text|IF|#F0F0F0}} path.exe$ = {{Text|""|#FFB100}} {{Text|THEN|#F0F0F0}} path.exe$ = {{Text|"./"|#FFB100}}
        {{Text|IF|#F0F0F0}} os$ = {{Text|"LNX"|#FFB100}} {{Text|THEN|#F0F0F0}}
            {{Text|IF|#F0F0F0}} {{Text|LEFT$|#F0F0F0}}(lastBinaryGenerated$, {{Text|LEN|#F0F0F0}}(path.exe$)) = path.exe$ {{Text|THEN|#F0F0F0}}
                {{Text|SHELL|#F0F0F0}} {{Text|_DONTWAIT|#F0F0F0}} QuotedFilename$(lastBinaryGenerated$) + ModifyCOMMAND$
            {{Text|ELSE|#F0F0F0}}
                {{Text|SHELL|#F0F0F0}} {{Text|_DONTWAIT|#F0F0F0}} QuotedFilename$(path.exe$ + lastBinaryGenerated$) + ModifyCOMMAND$
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|IF|#F0F0F0}} path.exe$ = {{Text|"./"|#FFB100}} {{Text|THEN|#F0F0F0}} path.exe$ = {{Text|""|#FFB100}}
    {{Text|ELSE|#F0F0F0}}
        {{Text|IF|#F0F0F0}} os$ = {{Text|"WIN"|#FFB100}} {{Text|THEN|#F0F0F0}} {{Text|SHELL|#F0F0F0}} QuotedFilename$({{Text|CHR$|#F0F0F0}}({{Text|34|#F580B1}}) + lastBinaryGenerated$ + {{Text|CHR$|#F0F0F0}}({{Text|34|#F580B1}})) + ModifyCOMMAND$
        {{Text|IF|#F0F0F0}} path.exe$ = {{Text|""|#FFB100}} {{Text|THEN|#F0F0F0}} path.exe$ = {{Text|"./"|#FFB100}}
        {{Text|IF|#F0F0F0}} os$ = {{Text|"LNX"|#FFB100}} {{Text|THEN|#F0F0F0}}
            {{Text|IF|#F0F0F0}} {{Text|LEFT$|#F0F0F0}}(lastBinaryGenerated$, {{Text|LEN|#F0F0F0}}(path.exe$)) = path.exe$ {{Text|THEN|#F0F0F0}}
                {{Text|SHELL|#F0F0F0}} QuotedFilename$(lastBinaryGenerated$) + ModifyCOMMAND$
            {{Text|ELSE|#F0F0F0}}
                {{Text|SHELL|#F0F0F0}} QuotedFilename$(path.exe$ + lastBinaryGenerated$) + ModifyCOMMAND$
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|IF|#F0F0F0}} path.exe$ = {{Text|"./"|#FFB100}} {{Text|THEN|#F0F0F0}} path.exe$ = {{Text|""|#FFB100}}
        {{Text|DO|#F0F0F0}}: {{Text|LOOP|#F0F0F0}} {{Text|UNTIL|#F0F0F0}} {{Text|INKEY$|#F0F0F0}} = {{Text|""|#FFB100}}
        {{Text|DO|#F0F0F0}}: {{Text|LOOP|#F0F0F0}} {{Text|UNTIL|#F0F0F0}} {{Text|_KEYHIT|#F0F0F0}} = {{Text|0|#F580B1}}
    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    {{Text|IF|#F0F0F0}} idemode {{Text|THEN|#F0F0F0}}
        {{Text|'Darken fg/bg colors|#31C4C4}}
        dummy = DarkenFGBG({{Text|0|#F580B1}})
    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    {{Text|IF|#F0F0F0}} vWatchOn {{Text|THEN|#F0F0F0}}
        sendc$ = {{Text|CHR$|#F0F0F0}}({{Text|254|#F580B1}}) {{Text|'launch debug interface|#31C4C4}}
    {{Text|ELSE|#F0F0F0}}
        sendc$ = {{Text|CHR$|#F0F0F0}}({{Text|6|#F580B1}}) {{Text|'ready|#31C4C4}}
    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    {{Text|GOTO|#F0F0F0}} sendcommand
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
{{Text|PRINT|#F0F0F0}} {{Text|"Invalid IDE message"|#FFB100}}: {{Text|END|#F0F0F0}}
ideerror:
{{Text|IF|#F0F0F0}} {{Text|INSTR|#F0F0F0}}(idemessage$, sp$) {{Text|THEN|#F0F0F0}}
    {{Text|'Something went wrong here, so let's give a generic error message to the user.|#31C4C4}}
    {{Text|'(No error message should contain sp$ - that is, CHR$(13), when not in Debug mode)|#31C4C4}}
    terrmsg$ = {{Text|_ERRORMESSAGE$|#F0F0F0}}
    {{Text|IF|#F0F0F0}} terrmsg$ = {{Text|"No error"|#FFB100}} {{Text|THEN|#F0F0F0}} terrmsg$ = {{Text|"Internal error"|#FFB100}}
    idemessage$ = {{Text|"Compiler error (check for syntax errors) ("|#FFB100}} + terrmsg$ + {{Text|":"|#FFB100}}
    {{Text|IF|#F0F0F0}} {{Text|ERR|#F0F0F0}} {{Text|THEN|#F0F0F0}} idemessage$ = idemessage$ + str2$({{Text|ERR|#F0F0F0}}) + {{Text|"-"|#FFB100}}
    {{Text|IF|#F0F0F0}} {{Text|_ERRORLINE|#F0F0F0}} {{Text|THEN|#F0F0F0}} idemessage$ = idemessage$ + str2$({{Text|_ERRORLINE|#F0F0F0}})
    {{Text|IF|#F0F0F0}} {{Text|_INCLERRORLINE|#F0F0F0}} {{Text|THEN|#F0F0F0}} idemessage$ = idemessage$ + {{Text|"-"|#FFB100}} + {{Text|_INCLERRORFILE$|#F0F0F0}} + {{Text|"-"|#FFB100}} + str2$({{Text|_INCLERRORLINE|#F0F0F0}})
    idemessage$ = idemessage$ + {{Text|")"|#FFB100}}
    {{Text|IF|#F0F0F0}} inclevel > {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} idemessage$ = idemessage$ + incerror$
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
sendc$ = {{Text|CHR$|#F0F0F0}}({{Text|8|#F580B1}}) + idemessage$ + {{Text|MKL$|#F0F0F0}}(ideerrorline)
{{Text|GOTO|#F0F0F0}} sendcommand
noide:
{{Text|IF|#F0F0F0}} (qb64versionprinted = {{Text|0|#F580B1}} {{Text|OR|#F0F0F0}} ConsoleMode = {{Text|0|#F580B1}}) {{Text|AND|#F0F0F0}} {{Text|NOT|#F0F0F0}} QuietMode {{Text|THEN|#F0F0F0}}
    qb64versionprinted = {{Text|-1|#F580B1}}
    {{Text|PRINT|#F0F0F0}} {{Text|"QB64-PE Compiler V"|#FFB100}} + Version$
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
{{Text|IF|#F0F0F0}} CMDLineFile = {{Text|""|#FFB100}} {{Text|THEN|#F0F0F0}}
    {{Text|LINE|#F0F0F0}} {{Text|INPUT|#F0F0F0}} ; {{Text|"COMPILE (.bas)>"|#FFB100}}, f$
{{Text|ELSE|#F0F0F0}}
    f$ = CMDLineFile
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
f$ = {{Text|LTRIM$|#F0F0F0}}({{Text|RTRIM$|#F0F0F0}}(f$))
{{Text|IF|#F0F0F0}} FileHasExtension(f$) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} f$ = f$ + {{Text|".bas"|#FFB100}}
sourcefile$ = f$
CMDLineFile = sourcefile$
{{Text|'derive name from sourcefile|#31C4C4}}
f$ = RemoveFileExtension$(f$)
path.exe$ = {{Text|""|#FFB100}}
currentdir$ = {{Text|_CWD$|#F0F0F0}}
path.source$ = getfilepath$(sourcefile$)
{{Text|IF|#F0F0F0}} {{Text|LEN|#F0F0F0}}(path.source$) {{Text|THEN|#F0F0F0}}
    {{Text|IF|#F0F0F0}} {{Text|_DIREXISTS|#F0F0F0}}(path.source$) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
        {{Text|PRINT|#F0F0F0}}
        {{Text|PRINT|#F0F0F0}} {{Text|"Cannot locate source file: "|#FFB100}} + sourcefile$
        {{Text|IF|#F0F0F0}} ConsoleMode {{Text|THEN|#F0F0F0}} {{Text|SYSTEM|#F0F0F0}} {{Text|1|#F580B1}}
        {{Text|END|#F0F0F0}} {{Text|1|#F580B1}}
    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    {{Text|CHDIR|#F0F0F0}} path.source$
    path.source$ = {{Text|_CWD$|#F0F0F0}}
    {{Text|IF|#F0F0F0}} {{Text|RIGHT$|#F0F0F0}}(path.source$, {{Text|1|#F580B1}}) <> pathsep$ {{Text|THEN|#F0F0F0}} path.source$ = path.source$ + pathsep$
    {{Text|CHDIR|#F0F0F0}} currentdir$
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
{{Text|IF|#F0F0F0}} SaveExeWithSource {{Text|THEN|#F0F0F0}} path.exe$ = path.source$
{{Text|FOR|#F0F0F0}} x = {{Text|LEN|#F0F0F0}}(f$) {{Text|TO|#F0F0F0}} {{Text|1|#F580B1}} {{Text|STEP|#F0F0F0}} {{Text|-1|#F580B1}}
    a$ = {{Text|MID$|#F0F0F0}}(f$, x, {{Text|1|#F580B1}})
    {{Text|IF|#F0F0F0}} a$ = {{Text|"/"|#FFB100}} {{Text|OR|#F0F0F0}} a$ = {{Text|"\"|#FFB100}} {{Text|THEN|#F0F0F0}}
        f$ = {{Text|RIGHT$|#F0F0F0}}(f$, {{Text|LEN|#F0F0F0}}(f$) - x)
        {{Text|EXIT|#F0F0F0}} {{Text|FOR|#F0F0F0}}
    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
{{Text|NEXT|#F0F0F0}}
file$ = f$
{{Text|'if cmemlist(currentid+1)<>0 before calling regid the variable|#31C4C4}}
{{Text|'MUST be defined in cmem!|#31C4C4}}
fullrecompile:
{{Text|IF|#F0F0F0}} idemode = {{Text|0|#F580B1}} {{Text|AND|#F0F0F0}} {{Text|NOT|#F0F0F0}} QuietMode {{Text|THEN|#F0F0F0}}
    {{Text|PRINT|#F0F0F0}}
    {{Text|PRINT|#F0F0F0}} {{Text|"Beginning C++ output from QB64 code... "|#FFB100}}
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
BU_DEPENDENCY_CONSOLE_ONLY = DEPENDENCY(DEPENDENCY_CONSOLE_ONLY)
{{Text|FOR|#F0F0F0}} i = {{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|UBOUND|#F0F0F0}}(DEPENDENCY): DEPENDENCY(i) = {{Text|0|#F580B1}}: {{Text|NEXT|#F0F0F0}}
DEPENDENCY(DEPENDENCY_CONSOLE_ONLY) = BU_DEPENDENCY_CONSOLE_ONLY {{Text|AND|#F0F0F0}} {{Text|2|#F580B1}} {{Text|'Restore -g switch if used|#31C4C4}}
Error_Happened = {{Text|0|#F580B1}}
{{Text|FOR|#F0F0F0}} closeall = {{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|255|#F580B1}}: {{Text|CLOSE|#F0F0F0}} closeall: {{Text|NEXT|#F0F0F0}}
{{Text|OPEN|#F0F0F0}} tmpdir$ + {{Text|"temp.bin"|#FFB100}} {{Text|FOR|#F0F0F0}} {{Text|OUTPUT|#F0F0F0}} {{Text|LOCK|#F0F0F0}} {{Text|WRITE|#F0F0F0}} {{Text|AS|#F0F0F0}} #26 {{Text|'relock|#31C4C4}}
bh = OpenBuffer%({{Text|"O"|#FFB100}}, tmpdir$ + {{Text|"dyninfo.txt"|#FFB100}})
{{Text|IF|#F0F0F0}} Debug {{Text|THEN|#F0F0F0}} {{Text|CLOSE|#F0F0F0}} #9: {{Text|OPEN|#F0F0F0}} tmpdir$ + {{Text|"debug.txt"|#FFB100}} {{Text|FOR|#F0F0F0}} {{Text|OUTPUT|#F0F0F0}} {{Text|AS|#F0F0F0}} #9
{{Text|FOR|#F0F0F0}} i = {{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} ids_max + {{Text|1|#F580B1}}
    arrayelementslist(i) = {{Text|0|#F580B1}}
    cmemlist(i) = {{Text|0|#F580B1}}
    sfcmemargs(i) = {{Text|""|#FFB100}}
{{Text|NEXT|#F0F0F0}}
{{Text|'erase cmemlist|#31C4C4}}
{{Text|'erase sfcmemargs|#31C4C4}}
lastunresolved = {{Text|-1|#F580B1}} {{Text|'first pass|#31C4C4}}
sflistn = {{Text|-1|#F580B1}} {{Text|'no entries|#31C4C4}}
SubNameLabels = sp {{Text|'QB64 will perform a repass to resolve sub names used as labels|#31C4C4}}
vWatchDesiredState = {{Text|0|#F580B1}}
vWatchRecompileAttempts = {{Text|0|#F580B1}}
qb64prefix_set_desiredState = {{Text|0|#F580B1}}
qb64prefix_set_recompileAttempts = {{Text|0|#F580B1}}
opex_desiredState = {{Text|0|#F580B1}}
opex_recompileAttempts = {{Text|0|#F580B1}}
opexarray_desiredState = {{Text|0|#F580B1}}
opexarray_recompileAttempts = {{Text|0|#F580B1}}
recompile:
vWatchOn = vWatchDesiredState
vWatchVariable {{Text|""|#FFB100}}, {{Text|-1|#F580B1}} {{Text|'reset internal variables list|#31C4C4}}
qb64prefix_set = qb64prefix_set_desiredState
qb64prefix$ = {{Text|"_"|#FFB100}}
optionexplicit = opex_desiredState
{{Text|IF|#F0F0F0}} optionexplicit_cmd = {{Text|-1|#F580B1}} {{Text|AND|#F0F0F0}} NoIDEMode = {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}} optionexplicit = {{Text|-1|#F580B1}}
optionexplicitarray = opexarray_desiredState
lastLineReturn = {{Text|0|#F580B1}}
lastLine = {{Text|0|#F580B1}}
firstLine = {{Text|1|#F580B1}}
{{Text|_Resize|#F0F0F0}} = {{Text|0|#F580B1}}
Resize_Scale = {{Text|0|#F580B1}}
UseGL = {{Text|0|#F580B1}}
Error_Happened = {{Text|0|#F580B1}}
HashClear {{Text|'clear the hash table|#31C4C4}}
{{Text|'add reserved words to hashtable|#31C4C4}}
f = HASHFLAG_TYPE + HASHFLAG_RESERVED
HashAdd {{Text|"_UNSIGNED"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"_BIT"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"_BYTE"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"INTEGER"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"LONG"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"_INTEGER64"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"_OFFSET"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"SINGLE"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"DOUBLE"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"_FLOAT"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"STRING"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"ANY"|#FFB100}}, f, {{Text|0|#F580B1}}
f = HASHFLAG_OPERATOR + HASHFLAG_RESERVED
HashAdd {{Text|"NOT"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"IMP"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"EQV"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"AND"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"OR"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"XOR"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"MOD"|#FFB100}}, f, {{Text|0|#F580B1}}
f = HASHFLAG_RESERVED + HASHFLAG_CUSTOMSYNTAX
HashAdd {{Text|"LIST"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"BASE"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"_EXPLICIT"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"AS"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"IS"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"OFF"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"ON"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"STOP"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"TO"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"USING"|#FFB100}}, f, {{Text|0|#F580B1}}
{{Text|'PUT(graphics) statement:|#31C4C4}}
HashAdd {{Text|"PRESET"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"PSET"|#FFB100}}, f, {{Text|0|#F580B1}}
{{Text|'OPEN statement:|#31C4C4}}
HashAdd {{Text|"FOR"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"OUTPUT"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"RANDOM"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"BINARY"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"APPEND"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"SHARED"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"ACCESS"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"LOCK"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"READ"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"WRITE"|#FFB100}}, f, {{Text|0|#F580B1}}
{{Text|'LINE statement:|#31C4C4}}
HashAdd {{Text|"STEP"|#FFB100}}, f, {{Text|0|#F580B1}}
{{Text|'WIDTH statement:|#31C4C4}}
HashAdd {{Text|"LPRINT"|#FFB100}}, f, {{Text|0|#F580B1}}
{{Text|'VIEW statement:|#31C4C4}}
HashAdd {{Text|"PRINT"|#FFB100}}, f, {{Text|0|#F580B1}}
f = HASHFLAG_RESERVED + HASHFLAG_XELEMENTNAME + HASHFLAG_XTYPENAME
{{Text|'A|#31C4C4}}
{{Text|'B|#31C4C4}}
{{Text|'C|#31C4C4}}
HashAdd {{Text|"COMMON"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"CALL"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"CASE"|#FFB100}}, f - HASHFLAG_XELEMENTNAME, {{Text|0|#F580B1}}
HashAdd {{Text|"COM"|#FFB100}}, f, {{Text|0|#F580B1}} {{Text|'(ON...)|#31C4C4}}
HashAdd {{Text|"CONST"|#FFB100}}, f, {{Text|0|#F580B1}}
{{Text|'D|#31C4C4}}
HashAdd {{Text|"DATA"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"DECLARE"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"DEF"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"DEFDBL"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"DEFINT"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"DEFLNG"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"DEFSNG"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"DEFSTR"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"DIM"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"DO"|#FFB100}}, f - HASHFLAG_XELEMENTNAME, {{Text|0|#F580B1}}
{{Text|'E|#31C4C4}}
HashAdd {{Text|"ERROR"|#FFB100}}, f - HASHFLAG_XELEMENTNAME, {{Text|0|#F580B1}} {{Text|'(ON ...)|#31C4C4}}
HashAdd {{Text|"ELSE"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"ELSEIF"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"ENDIF"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"EXIT"|#FFB100}}, f - HASHFLAG_XELEMENTNAME, {{Text|0|#F580B1}}
{{Text|'F|#31C4C4}}
HashAdd {{Text|"FIELD"|#FFB100}}, f - HASHFLAG_XELEMENTNAME, {{Text|0|#F580B1}}
HashAdd {{Text|"FUNCTION"|#FFB100}}, f, {{Text|0|#F580B1}}
{{Text|'G|#31C4C4}}
HashAdd {{Text|"GOSUB"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"GOTO"|#FFB100}}, f, {{Text|0|#F580B1}}
{{Text|'H|#31C4C4}}
{{Text|'I|#31C4C4}}
HashAdd {{Text|"INPUT"|#FFB100}}, f - HASHFLAG_XELEMENTNAME - HASHFLAG_XTYPENAME, {{Text|0|#F580B1}} {{Text|'(INPUT$ function exists, so conflicts if allowed as custom syntax)|#31C4C4}}
HashAdd {{Text|"IF"|#FFB100}}, f, {{Text|0|#F580B1}}
{{Text|'K|#31C4C4}}
HashAdd {{Text|"KEY"|#FFB100}}, f - HASHFLAG_XELEMENTNAME - HASHFLAG_XTYPENAME, {{Text|0|#F580B1}} {{Text|'(ON...)|#31C4C4}}
{{Text|'L|#31C4C4}}
HashAdd {{Text|"LET"|#FFB100}}, f - HASHFLAG_XELEMENTNAME, {{Text|0|#F580B1}}
HashAdd {{Text|"LOOP"|#FFB100}}, f - HASHFLAG_XELEMENTNAME, {{Text|0|#F580B1}}
HashAdd {{Text|"LEN"|#FFB100}}, f - HASHFLAG_XELEMENTNAME, {{Text|0|#F580B1}} {{Text|'(LEN function exists, so conflicts if allowed as custom syntax)|#31C4C4}}
{{Text|'M|#31C4C4}}
{{Text|'N|#31C4C4}}
HashAdd {{Text|"NEXT"|#FFB100}}, f - HASHFLAG_XELEMENTNAME, {{Text|0|#F580B1}}
{{Text|'O|#31C4C4}}
{{Text|'P|#31C4C4}}
HashAdd {{Text|"PLAY"|#FFB100}}, f - HASHFLAG_XELEMENTNAME - HASHFLAG_XTYPENAME, {{Text|0|#F580B1}} {{Text|'(ON...)|#31C4C4}}
HashAdd {{Text|"PEN"|#FFB100}}, f - HASHFLAG_XELEMENTNAME - HASHFLAG_XTYPENAME, {{Text|0|#F580B1}} {{Text|'(ON...)|#31C4C4}}
{{Text|'Q|#31C4C4}}
{{Text|'R|#31C4C4}}
HashAdd {{Text|"REDIM"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"REM"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"RESTORE"|#FFB100}}, f - HASHFLAG_XELEMENTNAME, {{Text|0|#F580B1}}
HashAdd {{Text|"RESUME"|#FFB100}}, f - HASHFLAG_XELEMENTNAME, {{Text|0|#F580B1}}
HashAdd {{Text|"RETURN"|#FFB100}}, f - HASHFLAG_XELEMENTNAME, {{Text|0|#F580B1}}
HashAdd {{Text|"RUN"|#FFB100}}, f - HASHFLAG_XELEMENTNAME, {{Text|0|#F580B1}}
{{Text|'S|#31C4C4}}
HashAdd {{Text|"STATIC"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"STRIG"|#FFB100}}, f, {{Text|0|#F580B1}} {{Text|'(ON...)|#31C4C4}}
HashAdd {{Text|"SEG"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"SELECT"|#FFB100}}, f - HASHFLAG_XELEMENTNAME - HASHFLAG_XTYPENAME, {{Text|0|#F580B1}}
HashAdd {{Text|"SUB"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"SCREEN"|#FFB100}}, f - HASHFLAG_XELEMENTNAME - HASHFLAG_XTYPENAME, {{Text|0|#F580B1}}
{{Text|'T|#31C4C4}}
HashAdd {{Text|"THEN"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"TIMER"|#FFB100}}, f - HASHFLAG_XELEMENTNAME - HASHFLAG_XTYPENAME, {{Text|0|#F580B1}} {{Text|'(ON...)|#31C4C4}}
HashAdd {{Text|"TYPE"|#FFB100}}, f - HASHFLAG_XELEMENTNAME, {{Text|0|#F580B1}}
{{Text|'U|#31C4C4}}
HashAdd {{Text|"UNTIL"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"UEVENT"|#FFB100}}, f, {{Text|0|#F580B1}}
{{Text|'V|#31C4C4}}
{{Text|'W|#31C4C4}}
HashAdd {{Text|"WEND"|#FFB100}}, f, {{Text|0|#F580B1}}
HashAdd {{Text|"WHILE"|#FFB100}}, f, {{Text|0|#F580B1}}
{{Text|'X|#31C4C4}}
{{Text|'Y|#31C4C4}}
{{Text|'Z|#31C4C4}}
{{Text|'clear/init variables|#31C4C4}}
{{Text|_Console|#F0F0F0}} = {{Text|0|#F580B1}}
{{Text|_ScreenHide|#F0F0F0}} = {{Text|0|#F580B1}}
Asserts = {{Text|0|#F580B1}}
ResolveStaticFunctions = {{Text|0|#F580B1}}
dynamiclibrary = {{Text|0|#F580B1}}
dimsfarray = {{Text|0|#F580B1}}
dimstatic = {{Text|0|#F580B1}}
AllowLocalName = {{Text|0|#F580B1}}
PossibleSubNameLabels = sp {{Text|'QB64 will perform a repass to resolve sub names used as labels|#31C4C4}}
use_global_byte_elements = {{Text|0|#F580B1}}
dimshared = {{Text|0|#F580B1}}: dimmethod = {{Text|0|#F580B1}}: dimoption = {{Text|0|#F580B1}}: redimoption = {{Text|0|#F580B1}}: commonoption = {{Text|0|#F580B1}}
mylib$ = {{Text|""|#FFB100}}: mylibopt$ = {{Text|""|#FFB100}}
declaringlibrary = {{Text|0|#F580B1}}
nLabels = {{Text|0|#F580B1}}
dynscope = {{Text|0|#F580B1}}
elsefollowup = {{Text|0|#F580B1}}
ontimerid = {{Text|0|#F580B1}}: onkeyid = {{Text|0|#F580B1}}: onstrigid = {{Text|0|#F580B1}}
commonarraylist = {{Text|""|#FFB100}}: commonarraylistn = {{Text|0|#F580B1}}
staticarraylist = {{Text|""|#FFB100}}: staticarraylistn = {{Text|0|#F580B1}}
fooindwel = {{Text|0|#F580B1}}
layout = {{Text|""|#FFB100}}
layoutok = {{Text|0|#F580B1}}
NoChecks = {{Text|0|#F580B1}}
inclevel = {{Text|0|#F580B1}}
errorLineInInclude = {{Text|0|#F580B1}}
addmetainclude$ = {{Text|""|#FFB100}}
nextrunlineindex = {{Text|1|#F580B1}}
lasttype = {{Text|0|#F580B1}}
lasttypeelement = {{Text|0|#F580B1}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} udtxname({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|256|#F580B1}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} udtxcname({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|256|#F580B1}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} udtxsize({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} udtxbytealign({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'first element MUST be on a byte alignment & size is a multiple of 8|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} udtxnext({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} udtxvariable({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}} {{Text|'true if the udt contains variable length elements|#31C4C4}}
{{Text|'elements|#31C4C4}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} udtename({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|256|#F580B1}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} udtecname({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} * {{Text|256|#F580B1}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} udtebytealign({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|INTEGER|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} udtesize({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} udtetype({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} udtetypesize({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} udtearrayelements({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} udtenext({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
definingtype = {{Text|0|#F580B1}}
definingtypeerror = {{Text|0|#F580B1}}
constlast = {{Text|-1|#F580B1}}
{{Text|'constlastshared = -1|#31C4C4}}
closedmain = {{Text|0|#F580B1}}
addmetastatic = {{Text|0|#F580B1}}
addmetadynamic = {{Text|0|#F580B1}}
DynamicMode = {{Text|0|#F580B1}}
optionbase = {{Text|0|#F580B1}}
ExeIconSet = {{Text|0|#F580B1}}
VersionInfoSet = {{Text|0|#F580B1}}
viFileVersionNum$ = {{Text|""|#FFB100}}: viProductVersionNum$ = {{Text|""|#FFB100}}: viCompanyName$ = {{Text|""|#FFB100}}
viFileDescription$ = {{Text|""|#FFB100}}: viFileVersion$ = {{Text|""|#FFB100}}: viInternalName$ = {{Text|""|#FFB100}}
viLegalCopyright$ = {{Text|""|#FFB100}}: viLegalTrademarks$ = {{Text|""|#FFB100}}: viOriginalFilename$ = {{Text|""|#FFB100}}
viProductName$ = {{Text|""|#FFB100}}: viProductVersion$ = {{Text|""|#FFB100}}: viComments$ = {{Text|""|#FFB100}}: viWeb$ = {{Text|""|#FFB100}}
DataOffset = {{Text|0|#F580B1}}
statementn = {{Text|0|#F580B1}}
everycasenewcase = {{Text|0|#F580B1}}
qberrorhappened = {{Text|0|#F580B1}}: qberrorcode = {{Text|0|#F580B1}}: qberrorline = {{Text|0|#F580B1}}
{{Text|FOR|#F0F0F0}} i = {{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|27|#F580B1}}: defineaz(i) = {{Text|"SINGLE"|#FFB100}}: defineextaz(i) = {{Text|"!"|#FFB100}}: {{Text|NEXT|#F0F0F0}}
controllevel = {{Text|0|#F580B1}}
findidsecondarg$ = {{Text|""|#FFB100}}: findanotherid = {{Text|0|#F580B1}}: findidinternal = {{Text|0|#F580B1}}: currentid = {{Text|0|#F580B1}}
linenumber = {{Text|0|#F580B1}}
wholeline$ = {{Text|""|#FFB100}}
linefragment$ = {{Text|""|#FFB100}}
idn = {{Text|0|#F580B1}}
arrayprocessinghappened = {{Text|0|#F580B1}}
stringprocessinghappened = {{Text|0|#F580B1}}
inputfunctioncalled = {{Text|0|#F580B1}}
subfuncn = {{Text|0|#F580B1}}
closedsubfunc = {{Text|0|#F580B1}}
subfunc = {{Text|""|#FFB100}}
SelectCaseCounter = {{Text|0|#F580B1}}
ExecCounter = {{Text|0|#F580B1}}
UserDefineCount = {{Text|7|#F580B1}}
totalVariablesCreated = {{Text|0|#F580B1}}
typeDefinitions$ = {{Text|""|#FFB100}}
totalMainVariablesCreated = {{Text|0|#F580B1}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} usedVariableList({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} usedVarList
totalWarnings = {{Text|0|#F580B1}}
duplicateConstWarning = {{Text|0|#F580B1}}
emptySCWarning = {{Text|0|#F580B1}}
warningListItems = {{Text|0|#F580B1}}
lastWarningHeader = {{Text|""|#FFB100}}
vWatchUsedLabels = {{Text|SPACE$|#F0F0F0}}({{Text|1000|#F580B1}})
vWatchUsedSkipLabels = {{Text|SPACE$|#F0F0F0}}({{Text|1000|#F580B1}})
firstLineNumberLabelvWatch = {{Text|0|#F580B1}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} warning$({{Text|1000|#F580B1}})
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} warningLines({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} warningIncLines({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
{{Text|REDIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} warningIncFiles({{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
maxLineNumber = {{Text|0|#F580B1}}
uniquenumbern = {{Text|0|#F580B1}}
{{Text|''create a type for storing memory blocks|#31C4C4}}
{{Text|''UDT|#31C4C4}}
{{Text|''names|#31C4C4}}
{{Text|'DIM SHARED lasttype AS LONG|#31C4C4}}
{{Text|'DIM SHARED udtxname(1000) AS STRING * 256|#31C4C4}}
{{Text|'DIM SHARED udtxcname(1000) AS STRING * 256|#31C4C4}}
{{Text|'DIM SHARED udtxsize(1000) AS LONG|#31C4C4}}
{{Text|'DIM SHARED udtxbytealign(1000) AS INTEGER 'first element MUST be on a byte alignment & size is a multiple of 8|#31C4C4}}
{{Text|'DIM SHARED udtxnext(1000) AS LONG|#31C4C4}}
{{Text|''elements|#31C4C4}}
{{Text|'DIM SHARED lasttypeelement AS LONG|#31C4C4}}
{{Text|'DIM SHARED udtename(1000) AS STRING * 256|#31C4C4}}
{{Text|'DIM SHARED udtecname(1000) AS STRING * 256|#31C4C4}}
{{Text|'DIM SHARED udtebytealign(1000) AS INTEGER|#31C4C4}}
{{Text|'DIM SHARED udtesize(1000) AS LONG|#31C4C4}}
{{Text|'DIM SHARED udtetype(1000) AS LONG|#31C4C4}}
{{Text|'DIM SHARED udtetypesize(1000) AS LONG|#31C4C4}}
{{Text|'DIM SHARED udtearrayelements(1000) AS LONG|#31C4C4}}
{{Text|'DIM SHARED udtenext(1000) AS LONG|#31C4C4}}
{{Text|'import _MEM type|#31C4C4}}
ptrsz = OS_BITS \ {{Text|8|#F580B1}}
lasttype = lasttype + {{Text|1|#F580B1}}: i = lasttype
udtxname(i) = {{Text|"_MEM"|#FFB100}}
udtxcname(i) = {{Text|"_MEM"|#FFB100}}
udtxsize(i) = ((ptrsz) * {{Text|5|#F580B1}} + ({{Text|4|#F580B1}}) * {{Text|2|#F580B1}} + ({{Text|8|#F580B1}}) * {{Text|1|#F580B1}}) * {{Text|8|#F580B1}}
udtxbytealign(i) = {{Text|1|#F580B1}}
lasttypeelement = lasttypeelement + {{Text|1|#F580B1}}: i2 = lasttypeelement
udtename(i2) = {{Text|"OFFSET"|#FFB100}}
udtecname(i2) = {{Text|"OFFSET"|#FFB100}}
udtebytealign(i2) = {{Text|1|#F580B1}}
udtetype(i2) = OFFSETTYPE: udtesize(i2) = ptrsz * {{Text|8|#F580B1}}
udtetypesize(i2) = {{Text|0|#F580B1}} {{Text|'tsize|#31C4C4}}
udtxnext(i) = i2
i3 = i2
lasttypeelement = lasttypeelement + {{Text|1|#F580B1}}: i2 = lasttypeelement
udtename(i2) = {{Text|"SIZE"|#FFB100}}
udtecname(i2) = {{Text|"SIZE"|#FFB100}}
udtebytealign(i2) = {{Text|1|#F580B1}}
udtetype(i2) = OFFSETTYPE: udtesize(i2) = ptrsz * {{Text|8|#F580B1}}
udtetypesize(i2) = {{Text|0|#F580B1}} {{Text|'tsize|#31C4C4}}
udtenext(i3) = i2
i3 = i2
lasttypeelement = lasttypeelement + {{Text|1|#F580B1}}: i2 = lasttypeelement
udtename(i2) = {{Text|"$_LOCK_ID"|#FFB100}}
udtecname(i2) = {{Text|"$_LOCK_ID"|#FFB100}}
udtebytealign(i2) = {{Text|1|#F580B1}}
udtetype(i2) = INTEGER64TYPE: udtesize(i2) = {{Text|64|#F580B1}}
udtetypesize(i2) = {{Text|0|#F580B1}} {{Text|'tsize|#31C4C4}}
udtenext(i3) = i2
i3 = i2
lasttypeelement = lasttypeelement + {{Text|1|#F580B1}}: i2 = lasttypeelement
udtename(i2) = {{Text|"$_LOCK_OFFSET"|#FFB100}}
udtecname(i2) = {{Text|"$_LOCK_OFFSET"|#FFB100}}
udtebytealign(i2) = {{Text|1|#F580B1}}
udtetype(i2) = OFFSETTYPE: udtesize(i2) = ptrsz * {{Text|8|#F580B1}}
udtetypesize(i2) = {{Text|0|#F580B1}} {{Text|'tsize|#31C4C4}}
udtenext(i3) = i2
i3 = i2
lasttypeelement = lasttypeelement + {{Text|1|#F580B1}}: i2 = lasttypeelement
udtename(i2) = {{Text|"TYPE"|#FFB100}}
udtecname(i2) = {{Text|"TYPE"|#FFB100}}
udtebytealign(i2) = {{Text|1|#F580B1}}
udtetype(i2) = OFFSETTYPE: udtesize(i2) = ptrsz * {{Text|8|#F580B1}}
udtetypesize(i2) = {{Text|0|#F580B1}} {{Text|'tsize|#31C4C4}}
udtenext(i3) = i2
i3 = i2
lasttypeelement = lasttypeelement + {{Text|1|#F580B1}}: i2 = lasttypeelement
udtename(i2) = {{Text|"ELEMENTSIZE"|#FFB100}}
udtecname(i2) = {{Text|"ELEMENTSIZE"|#FFB100}}
udtebytealign(i2) = {{Text|1|#F580B1}}
udtetype(i2) = OFFSETTYPE: udtesize(i2) = ptrsz * {{Text|8|#F580B1}}
udtetypesize(i2) = {{Text|0|#F580B1}} {{Text|'tsize|#31C4C4}}
udtenext(i3) = i2
udtenext(i2) = {{Text|0|#F580B1}}
i3 = i2
lasttypeelement = lasttypeelement + {{Text|1|#F580B1}}: i2 = lasttypeelement
udtename(i2) = {{Text|"IMAGE"|#FFB100}}
udtecname(i2) = {{Text|"IMAGE"|#FFB100}}
udtebytealign(i2) = {{Text|1|#F580B1}}
udtetype(i2) = LONGTYPE: udtesize(i2) = {{Text|32|#F580B1}}
udtetypesize(i2) = {{Text|0|#F580B1}} {{Text|'tsize|#31C4C4}}
udtenext(i3) = i2
udtenext(i2) = {{Text|0|#F580B1}}
i3 = i2
lasttypeelement = lasttypeelement + {{Text|1|#F580B1}}: i2 = lasttypeelement
udtename(i2) = {{Text|"SOUND"|#FFB100}}
udtecname(i2) = {{Text|"SOUND"|#FFB100}}
udtebytealign(i2) = {{Text|1|#F580B1}}
udtetype(i2) = LONGTYPE: udtesize(i2) = {{Text|32|#F580B1}}
udtetypesize(i2) = {{Text|0|#F580B1}} {{Text|'tsize|#31C4C4}}
udtenext(i3) = i2
udtenext(i2) = {{Text|0|#F580B1}}
{{Text|' Reset all unstable flags|#31C4C4}}
{{Text|FOR|#F0F0F0}} i = {{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|UBOUND|#F0F0F0}}(unstableFlags): unstableFlags(i) = {{Text|0|#F580B1}}: {{Text|NEXT|#F0F0F0}}
{{Text|' Indicates if a MIDI sound font was selected|#31C4C4}}
{{Text|'|#31C4C4}}
{{Text|' Captures both the line number and line contents for error reporting later-on|#31C4C4}}
{{Text|' in the compilation process|#31C4C4}}
MidiSoundFontSet = {{Text|0|#F580B1}}
MidiSoundFontLine$ = {{Text|""|#FFB100}}
{{Text|' If MidiSoundFont$ is blank, then the default is used|#31C4C4}}
MidiSoundFont$ = {{Text|""|#FFB100}}
{{Text|'begin compilation|#31C4C4}}
{{Text|FOR|#F0F0F0}} closeall = {{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|255|#F580B1}}: {{Text|CLOSE|#F0F0F0}} closeall: {{Text|NEXT|#F0F0F0}}
{{Text|OPEN|#F0F0F0}} tmpdir$ + {{Text|"temp.bin"|#FFB100}} {{Text|FOR|#F0F0F0}} {{Text|OUTPUT|#F0F0F0}} {{Text|LOCK|#F0F0F0}} {{Text|WRITE|#F0F0F0}} {{Text|AS|#F0F0F0}} #26 {{Text|'relock|#31C4C4}}
bh = OpenBuffer%({{Text|"O"|#FFB100}}, tmpdir$ + {{Text|"icon.rc"|#FFB100}})
{{Text|IF|#F0F0F0}} Debug {{Text|THEN|#F0F0F0}} {{Text|CLOSE|#F0F0F0}} #9: {{Text|OPEN|#F0F0F0}} tmpdir$ + {{Text|"debug.txt"|#FFB100}} {{Text|FOR|#F0F0F0}} {{Text|APPEND|#F0F0F0}} {{Text|AS|#F0F0F0}} #9
{{Text|IF|#F0F0F0}} idemode = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
    qberrorhappened = {{Text|-1|#F580B1}}
    {{Text|OPEN|#F0F0F0}} sourcefile$ {{Text|FOR|#F0F0F0}} {{Text|INPUT|#F0F0F0}} {{Text|AS|#F0F0F0}} #1
    qberrorhappened1:
    {{Text|IF|#F0F0F0}} qberrorhappened = {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}}
        {{Text|PRINT|#F0F0F0}}
        {{Text|PRINT|#F0F0F0}} {{Text|"Cannot locate source file: "|#FFB100}} + sourcefile$
        {{Text|IF|#F0F0F0}} ConsoleMode {{Text|THEN|#F0F0F0}} {{Text|SYSTEM|#F0F0F0}} {{Text|1|#F580B1}}
        {{Text|END|#F0F0F0}} {{Text|1|#F580B1}}
    {{Text|ELSE|#F0F0F0}}
        {{Text|CLOSE|#F0F0F0}} #1
    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    qberrorhappened = {{Text|0|#F580B1}}
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
reginternal
{{Text|IF|#F0F0F0}} qb64prefix_set {{Text|THEN|#F0F0F0}}
    qb64prefix$ = {{Text|""|#FFB100}}
    {{Text|'re-add internal keywords without the "_" prefix|#31C4C4}}
    reginternal
    f = HASHFLAG_TYPE + HASHFLAG_RESERVED
    HashAdd {{Text|"UNSIGNED"|#FFB100}}, f, {{Text|0|#F580B1}}
    HashAdd {{Text|"BIT"|#FFB100}}, f, {{Text|0|#F580B1}}
    HashAdd {{Text|"BYTE"|#FFB100}}, f, {{Text|0|#F580B1}}
    HashAdd {{Text|"INTEGER64"|#FFB100}}, f, {{Text|0|#F580B1}}
    HashAdd {{Text|"OFFSET"|#FFB100}}, f, {{Text|0|#F580B1}}
    HashAdd {{Text|"FLOAT"|#FFB100}}, f, {{Text|0|#F580B1}}
    f = HASHFLAG_RESERVED + HASHFLAG_CUSTOMSYNTAX
    HashAdd {{Text|"EXPLICIT"|#FFB100}}, f, {{Text|0|#F580B1}}
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
{{Text|DIM|#F0F0F0}} {{Text|SHARED|#F0F0F0}} GlobTxtBuf: GlobTxtBuf = OpenBuffer%({{Text|"O"|#FFB100}}, tmpdir$ + {{Text|"global.txt"|#FFB100}})
defdatahandle = GlobTxtBuf
{{Text|IF|#F0F0F0}} iderecompile {{Text|THEN|#F0F0F0}}
    iderecompile = {{Text|0|#F580B1}}
    idepass = {{Text|1|#F580B1}} {{Text|'prepass must be done again|#31C4C4}}
    sendc$ = {{Text|CHR$|#F0F0F0}}({{Text|7|#F580B1}}) {{Text|'repass request|#31C4C4}}
    {{Text|GOTO|#F0F0F0}} sendcommand
{{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
{{Text|IF|#F0F0F0}} idemode {{Text|THEN|#F0F0F0}} {{Text|GOTO|#F0F0F0}} ideret1
lineinput3load sourcefile$
{{Text|DO|#F0F0F0}}
    {{Text|'### STEVE EDIT FOR CONST EXPANSION 10/11/2013|#31C4C4}}
    wholeline$ = lineinput3$
    {{Text|IF|#F0F0F0}} wholeline$ = {{Text|CHR$|#F0F0F0}}({{Text|13|#F580B1}}) {{Text|THEN|#F0F0F0}} {{Text|EXIT|#F0F0F0}} {{Text|DO|#F0F0F0}}
    ideprepass:
    prepassLastLine:
    {{Text|IF|#F0F0F0}} lastLine <> {{Text|0|#F580B1}} {{Text|OR|#F0F0F0}} firstLine <> {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
        lineBackup$ = wholeline$ {{Text|'backup the real line (will be blank when lastline is set)|#31C4C4}}
        forceIncludeFromRoot$ = {{Text|""|#FFB100}}
        {{Text|IF|#F0F0F0}} vWatchOn {{Text|THEN|#F0F0F0}}
            addingvWatch = {{Text|1|#F580B1}}
            {{Text|IF|#F0F0F0}} firstLine <> {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} forceIncludeFromRoot$ = {{Text|"internal\support\vwatch\vwatch.bi"|#FFB100}}
            {{Text|IF|#F0F0F0}} lastLine <> {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} forceIncludeFromRoot$ = {{Text|"internal\support\vwatch\vwatch.bm"|#FFB100}}
        {{Text|ELSE|#F0F0F0}}
            {{Text|'IF firstLine <> 0 THEN forceIncludeFromRoot$ = "internal\support\vwatch\vwatch_stub.bi"|#31C4C4}}
            {{Text|IF|#F0F0F0}} lastLine <> {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} forceIncludeFromRoot$ = {{Text|"internal\support\vwatch\vwatch_stub.bm"|#FFB100}}
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        firstLine = {{Text|0|#F580B1}}: lastLine = {{Text|0|#F580B1}}
        {{Text|IF|#F0F0F0}} {{Text|LEN|#F0F0F0}}(forceIncludeFromRoot$) {{Text|THEN|#F0F0F0}} {{Text|GOTO|#F0F0F0}} forceInclude_prepass
        forceIncludeCompleted_prepass:
        addingvWatch = {{Text|0|#F580B1}}
        wholeline$ = lineBackup$
    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
    wholestv$ = wholeline$ {{Text|'### STEVE EDIT FOR CONST EXPANSION 10/11/2013|#31C4C4}}
    prepass = {{Text|1|#F580B1}}
    layout = {{Text|""|#FFB100}}
    layoutok = {{Text|0|#F580B1}}
    linenumber = linenumber + {{Text|1|#F580B1}}
    reallinenumber = reallinenumber + {{Text|1|#F580B1}}
    {{Text|DO|#F0F0F0}} {{Text|UNTIL|#F0F0F0}} linenumber < {{Text|UBOUND|#F0F0F0}}(InValidLine) {{Text|'color information flag for each line|#31C4C4}}
        {{Text|REDIM|#F0F0F0}} {{Text|_PRESERVE|#F0F0F0}} InValidLine({{Text|UBOUND|#F0F0F0}}(InValidLine) + {{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
    {{Text|LOOP|#F0F0F0}}
    InValidLine(linenumber) = {{Text|0|#F580B1}}
    {{Text|IF|#F0F0F0}} {{Text|LEN|#F0F0F0}}(wholeline$) {{Text|THEN|#F0F0F0}}
        {{Text|IF|#F0F0F0}} {{Text|UCASE$|#F0F0F0}}({{Text|_TRIM$|#F0F0F0}}(wholeline$)) = {{Text|"$NOPREFIX"|#FFB100}} {{Text|THEN|#F0F0F0}}
            qb64prefix_set_desiredState = {{Text|1|#F580B1}}
            {{Text|IF|#F0F0F0}} qb64prefix_set = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
                {{Text|IF|#F0F0F0}} qb64prefix_set_recompileAttempts = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
                    qb64prefix_set_recompileAttempts = qb64prefix_set_recompileAttempts + {{Text|1|#F580B1}}
                    {{Text|GOTO|#F0F0F0}} do_recompile
                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        wholeline$ = lineformat(wholeline$)
        {{Text|IF|#F0F0F0}} Error_Happened {{Text|THEN|#F0F0F0}} {{Text|GOTO|#F0F0F0}} errmes
        temp$ = {{Text|LTRIM$|#F0F0F0}}({{Text|RTRIM$|#F0F0F0}}({{Text|UCASE$|#F0F0F0}}(wholestv$)))
        {{Text|IF|#F0F0F0}} temp$ = {{Text|"$COLOR:0"|#FFB100}} {{Text|THEN|#F0F0F0}}
            {{Text|IF|#F0F0F0}} qb64prefix_set {{Text|THEN|#F0F0F0}}
                addmetainclude$ = getfilepath$({{Text|COMMAND$|#F0F0F0}}({{Text|0|#F580B1}})) + {{Text|"internal"|#FFB100}} + pathsep$ + {{Text|"support"|#FFB100}} + pathsep$ + {{Text|"color"|#FFB100}} + pathsep$ + {{Text|"color0_noprefix.bi"|#FFB100}}
            {{Text|ELSE|#F0F0F0}}
                addmetainclude$ = getfilepath$({{Text|COMMAND$|#F0F0F0}}({{Text|0|#F580B1}})) + {{Text|"internal"|#FFB100}} + pathsep$ + {{Text|"support"|#FFB100}} + pathsep$ + {{Text|"color"|#FFB100}} + pathsep$ + {{Text|"color0.bi"|#FFB100}}
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
            {{Text|GOTO|#F0F0F0}} finishedlinepp
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|IF|#F0F0F0}} temp$ = {{Text|"$COLOR:32"|#FFB100}} {{Text|THEN|#F0F0F0}}
            {{Text|IF|#F0F0F0}} qb64prefix_set {{Text|THEN|#F0F0F0}}
                addmetainclude$ = getfilepath$({{Text|COMMAND$|#F0F0F0}}({{Text|0|#F580B1}})) + {{Text|"internal"|#FFB100}} + pathsep$ + {{Text|"support"|#FFB100}} + pathsep$ + {{Text|"color"|#FFB100}} + pathsep$ + {{Text|"color32_noprefix.bi"|#FFB100}}
            {{Text|ELSE|#F0F0F0}}
                addmetainclude$ = getfilepath$({{Text|COMMAND$|#F0F0F0}}({{Text|0|#F580B1}})) + {{Text|"internal"|#FFB100}} + pathsep$ + {{Text|"support"|#FFB100}} + pathsep$ + {{Text|"color"|#FFB100}} + pathsep$ + {{Text|"color32.bi"|#FFB100}}
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
            {{Text|GOTO|#F0F0F0}} finishedlinepp
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|IF|#F0F0F0}} temp$ = {{Text|"$DEBUG"|#FFB100}} {{Text|THEN|#F0F0F0}}
            vWatchDesiredState = {{Text|1|#F580B1}}
            {{Text|IF|#F0F0F0}} vWatchOn = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
                {{Text|IF|#F0F0F0}} vWatchRecompileAttempts = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
                    {{Text|'this is the first time a conflict has occurred, so react immediately with a full recompilation using the desired state|#31C4C4}}
                    vWatchRecompileAttempts = vWatchRecompileAttempts + {{Text|1|#F580B1}}
                    {{Text|GOTO|#F0F0F0}} do_recompile
                {{Text|ELSE|#F0F0F0}}
                    {{Text|'continue compilation to retrieve the final state requested and act on that as required|#31C4C4}}
                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|IF|#F0F0F0}} {{Text|LEFT$|#F0F0F0}}(temp$, {{Text|4|#F580B1}}) = {{Text|"$IF "|#FFB100}} {{Text|THEN|#F0F0F0}}
            {{Text|IF|#F0F0F0}} {{Text|RIGHT$|#F0F0F0}}(temp$, {{Text|5|#F580B1}}) <> {{Text|" THEN"|#FFB100}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"$IF without THEN"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
            temp$ = {{Text|LTRIM$|#F0F0F0}}({{Text|MID$|#F0F0F0}}(temp$, {{Text|4|#F580B1}})) {{Text|'strip off the $IF and extra spaces|#31C4C4}}
            temp$ = {{Text|RTRIM$|#F0F0F0}}({{Text|LEFT$|#F0F0F0}}(temp$, {{Text|LEN|#F0F0F0}}(temp$) - {{Text|4|#F580B1}})) {{Text|'and strip off the THEN and extra spaces|#31C4C4}}
            temp = {{Text|INSTR|#F0F0F0}}(temp$, {{Text|"="|#FFB100}})
            ExecCounter = ExecCounter + {{Text|1|#F580B1}}
            ExecLevel(ExecCounter) = {{Text|-1|#F580B1}} {{Text|'default to a skip value|#31C4C4}}
            DefineElse(ExecCounter) = {{Text|1|#F580B1}} {{Text|'1 says we have an $IF statement at this level|#31C4C4}}
            result = EvalPreIF(temp$, a$)
            {{Text|IF|#F0F0F0}} a$ <> {{Text|""|#FFB100}} {{Text|THEN|#F0F0F0}} {{Text|GOTO|#F0F0F0}} errmes
            {{Text|IF|#F0F0F0}} result <> {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
                ExecLevel(ExecCounter) = ExecLevel(ExecCounter - {{Text|1|#F580B1}}) {{Text|'So we inherit the execlevel from above|#31C4C4}}
                {{Text|IF|#F0F0F0}} ExecLevel(ExecCounter) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} DefineElse(ExecCounter) = DefineElse(ExecCounter) {{Text|OR|#F0F0F0}} {{Text|4|#F580B1}} {{Text|'Else if used and conditon found|#31C4C4}}
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
            {{Text|GOTO|#F0F0F0}} finishedlinepp {{Text|'and then we're finished -- and at this point we didn't make a match so we exit with a DONT READ type flag on our code.|#31C4C4}}
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|IF|#F0F0F0}} temp$ = {{Text|"$ELSE"|#FFB100}} {{Text|THEN|#F0F0F0}}
            {{Text|IF|#F0F0F0}} DefineElse(ExecCounter) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"$ELSE without $IF"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
            {{Text|IF|#F0F0F0}} DefineElse(ExecCounter) {{Text|AND|#F0F0F0}} {{Text|2|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"$IF block already has $ELSE statement in it"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
            DefineElse(ExecCounter) = DefineElse(ExecCounter) {{Text|OR|#F0F0F0}} {{Text|2|#F580B1}} {{Text|'set the flag to declare an $ELSE already in this block|#31C4C4}}
            {{Text|IF|#F0F0F0}} DefineElse(ExecCounter) {{Text|AND|#F0F0F0}} {{Text|4|#F580B1}} {{Text|THEN|#F0F0F0}} {{Text|'If we executed code in a previous IF or ELSE IF statement, we can't do it here|#31C4C4}}
                ExecLevel(ExecCounter) = {{Text|-1|#F580B1}} {{Text|'So we inherit the execlevel from above|#31C4C4}}
            {{Text|ELSE|#F0F0F0}}
                ExecLevel(ExecCounter) = ExecLevel(ExecCounter - {{Text|1|#F580B1}}) {{Text|'If we were processing code before, code after this segment is going to be SKIPPED|#31C4C4}}
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
            {{Text|GOTO|#F0F0F0}} finishedlinepp
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|IF|#F0F0F0}} {{Text|LEFT$|#F0F0F0}}(temp$, {{Text|5|#F580B1}}) = {{Text|"$ELSE"|#FFB100}} {{Text|THEN|#F0F0F0}} {{Text|'looking for $ELSE IF|#31C4C4}}
            temp$ = {{Text|LTRIM$|#F0F0F0}}({{Text|MID$|#F0F0F0}}(temp$, {{Text|6|#F580B1}}))
            {{Text|IF|#F0F0F0}} {{Text|LEFT$|#F0F0F0}}(temp$, {{Text|3|#F580B1}}) = {{Text|"IF "|#FFB100}} {{Text|THEN|#F0F0F0}}
                {{Text|IF|#F0F0F0}} DefineElse(ExecCounter) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"$ELSE IF without $IF"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                {{Text|IF|#F0F0F0}} DefineElse(ExecCounter) {{Text|AND|#F0F0F0}} {{Text|2|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"$ELSE IF cannot follow $ELSE"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                {{Text|IF|#F0F0F0}} {{Text|RIGHT$|#F0F0F0}}(temp$, {{Text|5|#F580B1}}) <> {{Text|" THEN"|#FFB100}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"$ELSE IF without THEN"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                {{Text|IF|#F0F0F0}} DefineElse(ExecCounter) {{Text|AND|#F0F0F0}} {{Text|4|#F580B1}} {{Text|THEN|#F0F0F0}} {{Text|'If we executed code in a previous IF or ELSE IF statement, we can't do it here|#31C4C4}}
                    ExecLevel(ExecCounter) = {{Text|-1|#F580B1}}
                    {{Text|GOTO|#F0F0F0}} finishedlinepp
                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                temp$ = {{Text|LTRIM$|#F0F0F0}}({{Text|MID$|#F0F0F0}}(temp$, {{Text|3|#F580B1}})) {{Text|'strip off the IF and extra spaces|#31C4C4}}
                temp$ = {{Text|RTRIM$|#F0F0F0}}({{Text|LEFT$|#F0F0F0}}(temp$, {{Text|LEN|#F0F0F0}}(temp$) - {{Text|4|#F580B1}})) {{Text|'and strip off the THEN and extra spaces|#31C4C4}}
                result = EvalPreIF(temp$, a$)
                {{Text|IF|#F0F0F0}} a$ <> {{Text|""|#FFB100}} {{Text|THEN|#F0F0F0}} {{Text|GOTO|#F0F0F0}} errmes
                {{Text|IF|#F0F0F0}} result <> {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
                    ExecLevel(ExecCounter) = ExecLevel(ExecCounter - {{Text|1|#F580B1}}) {{Text|'So we inherit the execlevel from above|#31C4C4}}
                    {{Text|IF|#F0F0F0}} ExecLevel(ExecCounter) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} DefineElse(ExecCounter) = DefineElse(ExecCounter) {{Text|OR|#F0F0F0}} {{Text|4|#F580B1}} {{Text|'Else if used and conditon found|#31C4C4}}
                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                {{Text|GOTO|#F0F0F0}} finishedlinepp {{Text|'and then we're finished -- and at this point we didn't make a match so we exit with a DONT READ type flag on our code.|#31C4C4}}
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|IF|#F0F0F0}} temp$ = {{Text|"$END IF"|#FFB100}} {{Text|OR|#F0F0F0}} temp$ = {{Text|"$ENDIF"|#FFB100}} {{Text|THEN|#F0F0F0}}
            {{Text|IF|#F0F0F0}} DefineElse(ExecCounter) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"$END IF without $IF"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
            DefineElse(ExecCounter) = {{Text|0|#F580B1}} {{Text|'We no longer have an $IF block at this level|#31C4C4}}
            ExecCounter = ExecCounter - {{Text|1|#F580B1}}
            {{Text|GOTO|#F0F0F0}} finishedlinepp
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|IF|#F0F0F0}} ExecLevel(ExecCounter) {{Text|THEN|#F0F0F0}}
            {{Text|DO|#F0F0F0}} {{Text|UNTIL|#F0F0F0}} linenumber < {{Text|UBOUND|#F0F0F0}}(InValidLine)
                {{Text|REDIM|#F0F0F0}} {{Text|_PRESERVE|#F0F0F0}} InValidLine({{Text|UBOUND|#F0F0F0}}(InValidLine) + {{Text|1000|#F580B1}}) {{Text|AS|#F0F0F0}} {{Text|_BYTE|#F0F0F0}}
            {{Text|LOOP|#F0F0F0}}
            InValidLine(linenumber) = {{Text|-1|#F580B1}}
            {{Text|GOTO|#F0F0F0}} finishedlinepp {{Text|'we don't check for anything inside lines that we've marked for skipping|#31C4C4}}
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|IF|#F0F0F0}} {{Text|LEFT$|#F0F0F0}}(temp$, {{Text|7|#F580B1}}) = {{Text|"$ERROR "|#FFB100}} {{Text|THEN|#F0F0F0}}
            temp$ = {{Text|LTRIM$|#F0F0F0}}({{Text|MID$|#F0F0F0}}(temp$, {{Text|7|#F580B1}}))
            a$ = {{Text|"Compilation check failed: "|#FFB100}} + temp$
            {{Text|GOTO|#F0F0F0}} errmes
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|IF|#F0F0F0}} {{Text|LEFT$|#F0F0F0}}(temp$, {{Text|5|#F580B1}}) = {{Text|"$LET "|#FFB100}} {{Text|THEN|#F0F0F0}}
            temp$ = {{Text|LTRIM$|#F0F0F0}}({{Text|MID$|#F0F0F0}}(temp$, {{Text|5|#F580B1}})) {{Text|'simply shorten our string to parse|#31C4C4}}
            {{Text|'For starters, let's make certain that we have 3 elements to deal with|#31C4C4}}
            temp = {{Text|INSTR|#F0F0F0}}(temp$, {{Text|"="|#FFB100}}) {{Text|'without an = in there, we can't get a value from the left and right side|#31C4C4}}
            {{Text|IF|#F0F0F0}} temp = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Invalid Syntax.  $LET <flag> = <value>"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
            l$ = {{Text|RTRIM$|#F0F0F0}}({{Text|LEFT$|#F0F0F0}}(temp$, temp - {{Text|1|#F580B1}})): r$ = {{Text|LTRIM$|#F0F0F0}}({{Text|MID$|#F0F0F0}}(temp$, temp + {{Text|1|#F580B1}}))
            {{Text|'then validate to make certain the left side looks proper|#31C4C4}}
            {{Text|IF|#F0F0F0}} validname(l$) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Invalid flag name"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
            {{Text|IF|#F0F0F0}} {{Text|LEFT$|#F0F0F0}}(r$, {{Text|1|#F580B1}}) = {{Text|CHR$|#F0F0F0}}({{Text|34|#F580B1}}) {{Text|THEN|#F0F0F0}} r$ = {{Text|LTRIM$|#F0F0F0}}({{Text|MID$|#F0F0F0}}(r$, {{Text|2|#F580B1}}))
            {{Text|IF|#F0F0F0}} {{Text|RIGHT$|#F0F0F0}}(r$, {{Text|1|#F580B1}}) = {{Text|CHR$|#F0F0F0}}({{Text|34|#F580B1}}) {{Text|THEN|#F0F0F0}} r$ = {{Text|RTRIM$|#F0F0F0}}({{Text|LEFT$|#F0F0F0}}(r$, {{Text|LEN|#F0F0F0}}(r$) - {{Text|1|#F580B1}}))
            {{Text|IF|#F0F0F0}} {{Text|LEFT$|#F0F0F0}}(r$, {{Text|1|#F580B1}}) = {{Text|"-"|#FFB100}} {{Text|THEN|#F0F0F0}}
                r1$ = {{Text|"-"|#FFB100}}
                r$ = {{Text|LTRIM$|#F0F0F0}}({{Text|MID$|#F0F0F0}}(r$, {{Text|2|#F580B1}}))
            {{Text|ELSE|#F0F0F0}}
                r1$ = {{Text|""|#FFB100}}
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
            {{Text|'then validate to make certain the left side looks proper|#31C4C4}}
            {{Text|FOR|#F0F0F0}} i = {{Text|1|#F580B1}} {{Text|TO|#F0F0F0}} {{Text|LEN|#F0F0F0}}(r$)
                a = {{Text|ASC|#F0F0F0}}(r$, i)
                {{Text|SELECT|#F0F0F0}} {{Text|CASE|#F0F0F0}} a
                    {{Text|CASE|#F0F0F0}} {{Text|32|#F580B1}}
                    {{Text|CASE|#F0F0F0}} {{Text|46|#F580B1}} {{Text|'periods are fine.|#31C4C4}}
                        r1$ = r1$ + {{Text|"."|#FFB100}}
                    {{Text|CASE|#F0F0F0}} {{Text|IS|#F0F0F0}} < {{Text|48|#F580B1}}, {{Text|IS|#F0F0F0}} > {{Text|90|#F580B1}}
                        a$ = {{Text|"Invalid value"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                    {{Text|CASE|#F0F0F0}} {{Text|ELSE|#F0F0F0}}
                        r1$ = r1$ + {{Text|CHR$|#F0F0F0}}(a)
                {{Text|END|#F0F0F0}} {{Text|SELECT|#F0F0F0}}
            {{Text|NEXT|#F0F0F0}}
            r$ = r1$
            {{Text|'First look to see if we have an existing setting like this and if so, update it|#31C4C4}}
            {{Text|FOR|#F0F0F0}} i = {{Text|8|#F580B1}} {{Text|TO|#F0F0F0}} UserDefineCount {{Text|'UserDefineCount 1-7 are reserved for automatic OS/BIT detection & version|#31C4C4}}
                {{Text|IF|#F0F0F0}} UserDefine({{Text|0|#F580B1}}, i) = l$ {{Text|THEN|#F0F0F0}} UserDefine({{Text|1|#F580B1}}, i) = r$: {{Text|GOTO|#F0F0F0}} finishedlinepp
            {{Text|NEXT|#F0F0F0}}
            {{Text|'Otherwise create a new setting and set the initial value for it|#31C4C4}}
            UserDefineCount = UserDefineCount + {{Text|1|#F580B1}}
            {{Text|IF|#F0F0F0}} UserDefineCount > {{Text|UBOUND|#F0F0F0}}(UserDefine, {{Text|2|#F580B1}}) {{Text|THEN|#F0F0F0}}
                {{Text|REDIM|#F0F0F0}} {{Text|_PRESERVE|#F0F0F0}} UserDefine({{Text|1|#F580B1}}, {{Text|UBOUND|#F0F0F0}}(UserDefine, {{Text|2|#F580B1}}) + {{Text|10|#F580B1}}) {{Text|'Add another 10 elements to the array so it'll expand as the user adds to it|#31C4C4}}
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
            UserDefine({{Text|0|#F580B1}}, UserDefineCount) = l$
            UserDefine({{Text|1|#F580B1}}, UserDefineCount) = r$
            {{Text|GOTO|#F0F0F0}} finishedlinepp
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        {{Text|' We check for Unstable flags during the preprocessing step because it|#31C4C4}}
        {{Text|' impacts what valid commands there are in all the other steps|#31C4C4}}
        {{Text|IF|#F0F0F0}} {{Text|LEFT$|#F0F0F0}}(temp$, {{Text|10|#F580B1}}) = {{Text|"$UNSTABLE:"|#FFB100}} {{Text|THEN|#F0F0F0}}
            token$ = {{Text|UCASE$|#F0F0F0}}({{Text|LTRIM$|#F0F0F0}}({{Text|RTRIM$|#F0F0F0}}({{Text|MID$|#F0F0F0}}(temp$, {{Text|11|#F580B1}}))))
            {{Text|SELECT|#F0F0F0}} {{Text|CASE|#F0F0F0}} token$
                {{Text|CASE|#F0F0F0}} {{Text|"MIDI"|#FFB100}}
                    {{Text|IF|#F0F0F0}} {{Text|NOT|#F0F0F0}} UseMiniaudioBackend {{Text|THEN|#F0F0F0}}
                        a$ = {{Text|"Midi is not supported with the old OpenAL audio backend."|#FFB100}}
                        {{Text|GOTO|#F0F0F0}} errmes
                    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                    unstableFlags(UNSTABLE_MIDI) = {{Text|-1|#F580B1}}
                {{Text|CASE|#F0F0F0}} {{Text|"HTTP"|#FFB100}}
                    unstableFlags(UNSTABLE_HTTP) = {{Text|-1|#F580B1}}
                    regUnstableHttp
                {{Text|CASE|#F0F0F0}} {{Text|ELSE|#F0F0F0}}
                    a$ = {{Text|"Unrecognized unstable flag "|#FFB100}} + AddQuotes$(token$)
                    {{Text|GOTO|#F0F0F0}} errmes
            {{Text|END|#F0F0F0}} {{Text|SELECT|#F0F0F0}}
        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
        cwholeline$ = wholeline$
        wholeline$ = eleucase$(wholeline$) {{Text|'********REMOVE THIS LINE LATER********|#31C4C4}}
        addmetadynamic = {{Text|0|#F580B1}}: addmetastatic = {{Text|0|#F580B1}}
        wholelinen = numelements(wholeline$)
        {{Text|IF|#F0F0F0}} wholelinen {{Text|THEN|#F0F0F0}}
            wholelinei = {{Text|1|#F580B1}}
            {{Text|'skip line number?|#31C4C4}}
            e$ = getelement$(wholeline$, {{Text|1|#F580B1}})
            {{Text|IF|#F0F0F0}} ({{Text|ASC|#F0F0F0}}(e$) >= {{Text|48|#F580B1}} {{Text|AND|#F0F0F0}} {{Text|ASC|#F0F0F0}}(e$) <= {{Text|59|#F580B1}}) {{Text|OR|#F0F0F0}} {{Text|ASC|#F0F0F0}}(e$) = {{Text|46|#F580B1}} {{Text|THEN|#F0F0F0}} wholelinei = {{Text|2|#F580B1}}: {{Text|GOTO|#F0F0F0}} ppskpl
            {{Text|'skip 'POSSIBLE' line label?|#31C4C4}}
            {{Text|IF|#F0F0F0}} wholelinen >= {{Text|2|#F580B1}} {{Text|THEN|#F0F0F0}}
                x2 = {{Text|INSTR|#F0F0F0}}(wholeline$, sp + {{Text|":"|#FFB100}} + sp): x3 = x2 + {{Text|2|#F580B1}}
                {{Text|IF|#F0F0F0}} x2 = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
                    {{Text|IF|#F0F0F0}} {{Text|RIGHT$|#F0F0F0}}(wholeline$, {{Text|2|#F580B1}}) = sp + {{Text|":"|#FFB100}} {{Text|THEN|#F0F0F0}} x2 = {{Text|LEN|#F0F0F0}}(wholeline$) - {{Text|1|#F580B1}}: x3 = x2 + {{Text|1|#F580B1}}
                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                {{Text|IF|#F0F0F0}} x2 {{Text|THEN|#F0F0F0}}
                    e$ = {{Text|LEFT$|#F0F0F0}}(wholeline$, x2 - {{Text|1|#F580B1}})
                    {{Text|IF|#F0F0F0}} validlabel(e$) {{Text|THEN|#F0F0F0}}
                        wholeline$ = {{Text|RIGHT$|#F0F0F0}}(wholeline$, {{Text|LEN|#F0F0F0}}(wholeline$) - x3)
                        cwholeline$ = {{Text|RIGHT$|#F0F0F0}}(cwholeline$, {{Text|LEN|#F0F0F0}}(wholeline$) - x3)
                        wholelinen = numelements(wholeline$)
                        {{Text|GOTO|#F0F0F0}} ppskpl
                    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}} {{Text|'valid|#31C4C4}}
                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}} {{Text|'includes ":"|#31C4C4}}
            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}} {{Text|'wholelinen>=2|#31C4C4}}
            ppskpl:
            {{Text|IF|#F0F0F0}} wholelinei <= wholelinen {{Text|THEN|#F0F0F0}}
                {{Text|'----------------------------------------|#31C4C4}}
                a$ = {{Text|""|#FFB100}}
                ca$ = {{Text|""|#FFB100}}
                ppblda:
                e$ = getelement$(wholeline$, wholelinei)
                ce$ = getelement$(cwholeline$, wholelinei)
                {{Text|IF|#F0F0F0}} e$ = {{Text|":"|#FFB100}} {{Text|OR|#F0F0F0}} e$ = {{Text|"ELSE"|#FFB100}} {{Text|OR|#F0F0F0}} e$ = {{Text|"THEN"|#FFB100}} {{Text|OR|#F0F0F0}} e$ = {{Text|""|#FFB100}} {{Text|THEN|#F0F0F0}}
                    {{Text|IF|#F0F0F0}} {{Text|LEN|#F0F0F0}}(a$) {{Text|THEN|#F0F0F0}}
                        {{Text|IF|#F0F0F0}} Debug {{Text|THEN|#F0F0F0}} {{Text|PRINT|#F0F0F0}} #9, {{Text|"PP["|#FFB100}} + a$ + {{Text|"]"|#FFB100}}
                        n = numelements(a$)
                        firstelement$ = getelement(a$, {{Text|1|#F580B1}})
                        secondelement$ = getelement(a$, {{Text|2|#F580B1}})
                        thirdelement$ = getelement(a$, {{Text|3|#F580B1}})
                        {{Text|'========================================|#31C4C4}}
                        {{Text|IF|#F0F0F0}} n = {{Text|2|#F580B1}} {{Text|AND|#F0F0F0}} firstelement$ = {{Text|"END"|#FFB100}} {{Text|AND|#F0F0F0}} (secondelement$ = {{Text|"SUB"|#FFB100}} {{Text|OR|#F0F0F0}} secondelement$ = {{Text|"FUNCTION"|#FFB100}}) {{Text|THEN|#F0F0F0}}
                            closedsubfunc = {{Text|-1|#F580B1}}
                        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                        {{Text|'declare library|#31C4C4}}
                        {{Text|IF|#F0F0F0}} declaringlibrary {{Text|THEN|#F0F0F0}}
                            {{Text|IF|#F0F0F0}} firstelement$ = {{Text|"END"|#FFB100}} {{Text|THEN|#F0F0F0}}
                                {{Text|IF|#F0F0F0}} n <> {{Text|2|#F580B1}} {{Text|OR|#F0F0F0}} secondelement$ <> {{Text|"DECLARE"|#FFB100}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Expected END DECLARE"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                declaringlibrary = {{Text|0|#F580B1}}
                                {{Text|GOTO|#F0F0F0}} finishedlinepp
                            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}} {{Text|'end declare|#31C4C4}}
                            declaringlibrary = {{Text|2|#F580B1}}
                            {{Text|IF|#F0F0F0}} firstelement$ = {{Text|"SUB"|#FFB100}} {{Text|OR|#F0F0F0}} firstelement$ = {{Text|"FUNCTION"|#FFB100}} {{Text|THEN|#F0F0F0}} subfuncn = subfuncn - {{Text|1|#F580B1}}: {{Text|GOTO|#F0F0F0}} declaresubfunc
                            a$ = {{Text|"Expected SUB/FUNCTION definition or END DECLARE (#2)"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                        {{Text|'UDT TYPE definition|#31C4C4}}
                        {{Text|IF|#F0F0F0}} definingtype {{Text|THEN|#F0F0F0}}
                            i = definingtype
                            {{Text|IF|#F0F0F0}} n >= {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}}
                                {{Text|IF|#F0F0F0}} firstelement$ = {{Text|"END"|#FFB100}} {{Text|THEN|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} n <> {{Text|2|#F580B1}} {{Text|OR|#F0F0F0}} secondelement$ <> {{Text|"TYPE"|#FFB100}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Expected END TYPE"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                    {{Text|IF|#F0F0F0}} udtxnext(i) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"No elements defined in TYPE"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                    definingtype = {{Text|0|#F580B1}}
                                    {{Text|'create global buffer for SWAP space|#31C4C4}}
                                    siz$ = str2$(udtxsize(i) \ {{Text|8|#F580B1}})
                                    WriteBufLine GlobTxtBuf, {{Text|"char *g_tmp_udt_"|#FFB100}} + {{Text|RTRIM$|#F0F0F0}}(udtxname(i)) + {{Text|"=(char*)malloc("|#FFB100}} + siz$ + {{Text|");"|#FFB100}}
                                    {{Text|'print "END TYPE";udtxsize(i);udtxbytealign(i)|#31C4C4}}
                                    {{Text|GOTO|#F0F0F0}} finishedlinepp
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                            {{Text|IF|#F0F0F0}} n < {{Text|3|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Expected element-name AS type, AS type element-list, or END TYPE"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                            n$ = firstelement$
                            {{Text|IF|#F0F0F0}} n$ <> {{Text|"AS"|#FFB100}} {{Text|THEN|#F0F0F0}}
                                {{Text|'traditional variable-name AS type syntax, single-element|#31C4C4}}
                                lasttypeelement = lasttypeelement + {{Text|1|#F580B1}}
                                i2 = lasttypeelement
                                {{Text|WHILE|#F0F0F0}} i2 > {{Text|UBOUND|#F0F0F0}}(udtenext): increaseUDTArrays: {{Text|WEND|#F0F0F0}}
                                udtenext(i2) = {{Text|0|#F580B1}}
                                ii = {{Text|2|#F580B1}}
                                udtearrayelements(i2) = {{Text|0|#F580B1}}
                                {{Text|IF|#F0F0F0}} ii >= n {{Text|OR|#F0F0F0}} getelement$(a$, ii) <> {{Text|"AS"|#FFB100}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Expected element-name AS type, AS type element-list, or END TYPE"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                t$ = getelements$(a$, ii + {{Text|1|#F580B1}}, n)
                                {{Text|IF|#F0F0F0}} t$ = {{Text|RTRIM$|#F0F0F0}}(udtxname(definingtype)) {{Text|THEN|#F0F0F0}} a$ = {{Text|"Invalid self-reference"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                typ = typname2typ(t$)
                                {{Text|IF|#F0F0F0}} Error_Happened {{Text|THEN|#F0F0F0}} {{Text|GOTO|#F0F0F0}} errmes
                                {{Text|IF|#F0F0F0}} typ = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Undefined type"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                typsize = typname2typsize
                                {{Text|IF|#F0F0F0}} validname(n$) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Invalid name"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                udtename(i2) = n$
                                udtecname(i2) = getelement$(ca$, {{Text|1|#F580B1}})
                                NormalTypeBlock:
                                typeDefinitions$ = typeDefinitions$ + {{Text|MKL$|#F0F0F0}}(i2) + {{Text|MKL$|#F0F0F0}}({{Text|LEN|#F0F0F0}}(n$)) + n$
                                udtetype(i2) = typ
                                udtetypesize(i2) = typsize
                                hashname$ = n$
                                {{Text|'check for name conflicts (any similar reserved or element from current UDT)|#31C4C4}}
                                hashchkflags = HASHFLAG_RESERVED + HASHFLAG_UDTELEMENT
                                hashres = HashFind(hashname$, hashchkflags, hashresflags, hashresref)
                                {{Text|DO|#F0F0F0}} {{Text|WHILE|#F0F0F0}} hashres
                                    {{Text|IF|#F0F0F0}} hashresflags {{Text|AND|#F0F0F0}} HASHFLAG_UDTELEMENT {{Text|THEN|#F0F0F0}}
                                        {{Text|IF|#F0F0F0}} hashresref = i {{Text|THEN|#F0F0F0}} a$ = {{Text|"Name already in use ("|#FFB100}} + hashname$ + {{Text|")"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} hashresflags {{Text|AND|#F0F0F0}} HASHFLAG_RESERVED {{Text|THEN|#F0F0F0}}
                                        {{Text|IF|#F0F0F0}} hashresflags {{Text|AND|#F0F0F0}} (HASHFLAG_TYPE + HASHFLAG_CUSTOMSYNTAX + HASHFLAG_OPERATOR + HASHFLAG_XELEMENTNAME) {{Text|THEN|#F0F0F0}} a$ = {{Text|"Name already in use ("|#FFB100}} + hashname$ + {{Text|")"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} hashres <> {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}} hashres = HashFindCont(hashresflags, hashresref) {{Text|ELSE|#F0F0F0}} hashres = {{Text|0|#F580B1}}
                                {{Text|LOOP|#F0F0F0}}
                                {{Text|'add to hash table|#31C4C4}}
                                HashAdd hashname$, HASHFLAG_UDTELEMENT, i
                                {{Text|'Calculate element's size|#31C4C4}}
                                {{Text|IF|#F0F0F0}} typ {{Text|AND|#F0F0F0}} ISUDT {{Text|THEN|#F0F0F0}}
                                    u = typ {{Text|AND|#F0F0F0}} {{Text|511|#F580B1}}
                                    udtesize(i2) = udtxsize(u)
                                    {{Text|IF|#F0F0F0}} udtxbytealign(u) {{Text|THEN|#F0F0F0}} udtxbytealign(i) = {{Text|1|#F580B1}}: udtebytealign(i2) = {{Text|1|#F580B1}}
                                    {{Text|IF|#F0F0F0}} udtxvariable(u) {{Text|THEN|#F0F0F0}} udtxvariable(i) = {{Text|-1|#F580B1}}
                                {{Text|ELSE|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} (typ {{Text|AND|#F0F0F0}} ISSTRING) {{Text|THEN|#F0F0F0}}
                                        {{Text|IF|#F0F0F0}} (typ {{Text|AND|#F0F0F0}} ISFIXEDLENGTH) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
                                            udtesize(i2) = OFFSETTYPE {{Text|AND|#F0F0F0}} {{Text|511|#F580B1}}
                                            udtxvariable(i) = {{Text|-1|#F580B1}}
                                        {{Text|ELSE|#F0F0F0}}
                                            udtesize(i2) = typsize * {{Text|8|#F580B1}}
                                        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                        udtxbytealign(i) = {{Text|1|#F580B1}}: udtebytealign(i2) = {{Text|1|#F580B1}}
                                    {{Text|ELSE|#F0F0F0}}
                                        udtesize(i2) = typ {{Text|AND|#F0F0F0}} {{Text|511|#F580B1}}
                                        {{Text|IF|#F0F0F0}} (typ {{Text|AND|#F0F0F0}} ISOFFSETINBITS) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} udtxbytealign(i) = {{Text|1|#F580B1}}: udtebytealign(i2) = {{Text|1|#F580B1}}
                                    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|'Increase block size|#31C4C4}}
                                {{Text|IF|#F0F0F0}} udtebytealign(i2) {{Text|THEN|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} udtxsize(i) {{Text|MOD|#F0F0F0}} {{Text|8|#F580B1}} {{Text|THEN|#F0F0F0}}
                                        udtxsize(i) = udtxsize(i) + ({{Text|8|#F580B1}} - (udtxsize(i) {{Text|MOD|#F0F0F0}} {{Text|8|#F580B1}}))
                                    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                udtxsize(i) = udtxsize(i) + udtesize(i2)
                                {{Text|'Link element to previous element|#31C4C4}}
                                {{Text|IF|#F0F0F0}} udtxnext(i) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
                                    udtxnext(i) = i2
                                {{Text|ELSE|#F0F0F0}}
                                    udtenext(i2 - {{Text|1|#F580B1}}) = i2
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|'print "+"+rtrim$(udtename(i2));udtetype(i2);udtesize(i2);udtebytealign(i2);udtxsize(i)|#31C4C4}}
                                {{Text|IF|#F0F0F0}} newAsTypeBlockSyntax {{Text|THEN|#F0F0F0}} {{Text|RETURN|#F0F0F0}}
                                {{Text|GOTO|#F0F0F0}} finishedlinepp
                            {{Text|ELSE|#F0F0F0}}
                                {{Text|'new AS type variable-list syntax, multiple elements|#31C4C4}}
                                ii = {{Text|2|#F580B1}}
                                {{Text|IF|#F0F0F0}} ii >= n {{Text|THEN|#F0F0F0}} a$ = {{Text|"Expected element-name AS type, AS type element-list, or END TYPE"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                previousElement$ = {{Text|""|#FFB100}}
                                t$ = {{Text|""|#FFB100}}
                                lastElement$ = {{Text|""|#FFB100}}
                                buildTypeName:
                                lastElement$ = getelement$(a$, ii)
                                {{Text|IF|#F0F0F0}} lastElement$ <> {{Text|","|#FFB100}} {{Text|AND|#F0F0F0}} lastElement$ <> {{Text|""|#FFB100}} {{Text|THEN|#F0F0F0}}
                                    n$ = lastElement$
                                    cn$ = getelement$(ca$, ii)
                                    {{Text|IF|#F0F0F0}} {{Text|LEN|#F0F0F0}}(previousElement$) {{Text|THEN|#F0F0F0}} t$ = t$ + previousElement$ + {{Text|" "|#FFB100}}
                                    previousElement$ = n$
                                    lastElement$ = {{Text|""|#FFB100}}
                                    ii = ii + {{Text|1|#F580B1}}
                                    {{Text|GOTO|#F0F0F0}} buildTypeName
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                t$ = {{Text|RTRIM$|#F0F0F0}}(t$)
                                {{Text|IF|#F0F0F0}} t$ = {{Text|RTRIM$|#F0F0F0}}(udtxname(definingtype)) {{Text|THEN|#F0F0F0}} a$ = {{Text|"Invalid self-reference"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                typ = typname2typ(t$)
                                {{Text|IF|#F0F0F0}} Error_Happened {{Text|THEN|#F0F0F0}} {{Text|GOTO|#F0F0F0}} errmes
                                {{Text|IF|#F0F0F0}} typ = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Undefined type"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                typsize = typname2typsize
                                previousElement$ = lastElement$
                                nexttypeelement:
                                lasttypeelement = lasttypeelement + {{Text|1|#F580B1}}
                                i2 = lasttypeelement
                                {{Text|WHILE|#F0F0F0}} i2 > {{Text|UBOUND|#F0F0F0}}(udtenext): increaseUDTArrays: {{Text|WEND|#F0F0F0}}
                                udtenext(i2) = {{Text|0|#F580B1}}
                                udtearrayelements(i2) = {{Text|0|#F580B1}}
                                udtename(i2) = n$
                                udtecname(i2) = cn$
                                {{Text|IF|#F0F0F0}} validname(n$) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Invalid name"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                newAsTypeBlockSyntax = {{Text|-1|#F580B1}}
                                {{Text|GOSUB|#F0F0F0}} NormalTypeBlock
                                newAsTypeBlockSyntax = {{Text|0|#F580B1}}
                                getNextElement:
                                ii = ii + {{Text|1|#F580B1}}
                                lastElement$ = getelement$(a$, ii)
                                {{Text|IF|#F0F0F0}} lastElement$ = {{Text|""|#FFB100}} {{Text|THEN|#F0F0F0}} {{Text|GOTO|#F0F0F0}} finishedlinepp
                                {{Text|IF|#F0F0F0}} ii = n {{Text|AND|#F0F0F0}} lastElement$ = {{Text|","|#FFB100}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Expected element-name"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                {{Text|IF|#F0F0F0}} lastElement$ = {{Text|","|#FFB100}} {{Text|THEN|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} previousElement$ = {{Text|","|#FFB100}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Expected element-name"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                    previousElement$ = lastElement$
                                    {{Text|GOTO|#F0F0F0}} getNextElement
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                n$ = lastElement$
                                {{Text|IF|#F0F0F0}} previousElement$ <> {{Text|","|#FFB100}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Expected ,"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                previousElement$ = lastElement$
                                cn$ = getelement$(ca$, ii)
                                {{Text|GOTO|#F0F0F0}} nexttypeelement
                            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}} {{Text|'definingtype|#31C4C4}}
                        {{Text|IF|#F0F0F0}} definingtype {{Text|AND|#F0F0F0}} n >= {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Expected END TYPE"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                        {{Text|IF|#F0F0F0}} n >= {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}}
                            {{Text|IF|#F0F0F0}} firstelement$ = {{Text|"TYPE"|#FFB100}} {{Text|THEN|#F0F0F0}}
                                {{Text|IF|#F0F0F0}} n <> {{Text|2|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Expected TYPE typename"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                lasttype = lasttype + {{Text|1|#F580B1}}
                                typeDefinitions$ = typeDefinitions$ + {{Text|MKL$|#F0F0F0}}({{Text|-1|#F580B1}}) + {{Text|MKL$|#F0F0F0}}(lasttype)
                                definingtype = lasttype
                                i = definingtype
                                {{Text|WHILE|#F0F0F0}} i > {{Text|UBOUND|#F0F0F0}}(udtenext): increaseUDTArrays: {{Text|WEND|#F0F0F0}}
                                {{Text|IF|#F0F0F0}} validname(secondelement$) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Invalid name"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                typeDefinitions$ = typeDefinitions$ + {{Text|MKL$|#F0F0F0}}({{Text|LEN|#F0F0F0}}(secondelement$)) + secondelement$
                                udtxname(i) = secondelement$
                                udtxcname(i) = getelement(ca$, {{Text|2|#F580B1}})
                                udtxnext(i) = {{Text|0|#F580B1}}
                                udtxsize(i) = {{Text|0|#F580B1}}
                                udtxvariable(i) = {{Text|0|#F580B1}}
                                hashname$ = secondelement$
                                hashflags = HASHFLAG_UDT
                                {{Text|'check for name conflicts (any similar reserved/sub/function/UDT name)|#31C4C4}}
                                hashchkflags = HASHFLAG_RESERVED + HASHFLAG_SUB + HASHFLAG_FUNCTION + HASHFLAG_UDT
                                hashres = HashFind(hashname$, hashchkflags, hashresflags, hashresref)
                                {{Text|DO|#F0F0F0}} {{Text|WHILE|#F0F0F0}} hashres
                                    allow = {{Text|0|#F580B1}}
                                    {{Text|IF|#F0F0F0}} hashresflags {{Text|AND|#F0F0F0}} (HASHFLAG_SUB + HASHFLAG_FUNCTION) {{Text|THEN|#F0F0F0}}
                                        allow = {{Text|1|#F580B1}}
                                    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} hashresflags {{Text|AND|#F0F0F0}} HASHFLAG_RESERVED {{Text|THEN|#F0F0F0}}
                                        {{Text|IF|#F0F0F0}} (hashresflags {{Text|AND|#F0F0F0}} (HASHFLAG_TYPE + HASHFLAG_OPERATOR + HASHFLAG_CUSTOMSYNTAX + HASHFLAG_XTYPENAME)) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} allow = {{Text|1|#F580B1}}
                                    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} allow = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Name already in use ("|#FFB100}} + hashname$ + {{Text|")"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                    {{Text|IF|#F0F0F0}} hashres <> {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}} hashres = HashFindCont(hashresflags, hashresref) {{Text|ELSE|#F0F0F0}} hashres = {{Text|0|#F580B1}}
                                {{Text|LOOP|#F0F0F0}}
                                {{Text|'add to hash table|#31C4C4}}
                                HashAdd hashname$, hashflags, i
                                {{Text|GOTO|#F0F0F0}} finishedlinepp
                            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                        {{Text|IF|#F0F0F0}} n >= {{Text|1|#F580B1}} {{Text|AND|#F0F0F0}} firstelement$ = {{Text|"CONST"|#FFB100}} {{Text|THEN|#F0F0F0}}
                            {{Text|'l$ = "CONST"|#31C4C4}}
                            {{Text|'DEF... do not change type, the expression is stored in a suitable type|#31C4C4}}
                            {{Text|'based on its value if type isn't forced/specified|#31C4C4}}
                            {{Text|IF|#F0F0F0}} subfuncn > {{Text|0|#F580B1}} {{Text|AND|#F0F0F0}} closedsubfunc <> {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Statement cannot be placed between SUB/FUNCTIONs"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                            {{Text|'convert periods to _046_|#31C4C4}}
                            i2 = {{Text|INSTR|#F0F0F0}}(a$, sp + {{Text|"."|#FFB100}} + sp)
                            {{Text|IF|#F0F0F0}} i2 {{Text|THEN|#F0F0F0}}
                                {{Text|DO|#F0F0F0}}
                                    a$ = {{Text|LEFT$|#F0F0F0}}(a$, i2 - {{Text|1|#F580B1}}) + fix046$ + {{Text|RIGHT$|#F0F0F0}}(a$, {{Text|LEN|#F0F0F0}}(a$) - i2 - {{Text|2|#F580B1}})
                                    ca$ = {{Text|LEFT$|#F0F0F0}}(ca$, i2 - {{Text|1|#F580B1}}) + fix046$ + {{Text|RIGHT$|#F0F0F0}}(ca$, {{Text|LEN|#F0F0F0}}(ca$) - i2 - {{Text|2|#F580B1}})
                                    i2 = {{Text|INSTR|#F0F0F0}}(a$, sp + {{Text|"."|#FFB100}} + sp)
                                {{Text|LOOP|#F0F0F0}} {{Text|UNTIL|#F0F0F0}} i2 = {{Text|0|#F580B1}}
                                n = numelements(a$)
                                firstelement$ = getelement(a$, {{Text|1|#F580B1}}): secondelement$ = getelement(a$, {{Text|2|#F580B1}}): thirdelement$ = getelement(a$, {{Text|3|#F580B1}})
                            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                            {{Text|IF|#F0F0F0}} n < {{Text|3|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Expected CONST name = value/expression"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                            i = {{Text|2|#F580B1}}
                            constdefpendingpp:
                            pending = {{Text|0|#F580B1}}
                            n$ = getelement$(ca$, i): i = i + {{Text|1|#F580B1}}
                            typeoverride = {{Text|0|#F580B1}}
                            s$ = removesymbol$(n$)
                            {{Text|IF|#F0F0F0}} Error_Happened {{Text|THEN|#F0F0F0}} {{Text|GOTO|#F0F0F0}} errmes
                            {{Text|IF|#F0F0F0}} s$ <> {{Text|""|#FFB100}} {{Text|THEN|#F0F0F0}}
                                typeoverride = typname2typ(s$)
                                {{Text|IF|#F0F0F0}} Error_Happened {{Text|THEN|#F0F0F0}} {{Text|GOTO|#F0F0F0}} errmes
                                {{Text|IF|#F0F0F0}} typeoverride {{Text|AND|#F0F0F0}} ISFIXEDLENGTH {{Text|THEN|#F0F0F0}} a$ = {{Text|"Invalid constant type"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                {{Text|IF|#F0F0F0}} typeoverride = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Invalid constant type"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                            {{Text|IF|#F0F0F0}} getelement$(a$, i) <> {{Text|"="|#FFB100}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Expected ="|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                            i = i + {{Text|1|#F580B1}}
                            {{Text|'get expression|#31C4C4}}
                            e$ = {{Text|""|#FFB100}}
                            readable_e$ = {{Text|""|#FFB100}}
                            B = {{Text|0|#F580B1}}
                            {{Text|FOR|#F0F0F0}} i2 = i {{Text|TO|#F0F0F0}} n
                                e2$ = getelement$(ca$, i2)
                                {{Text|IF|#F0F0F0}} e2$ = {{Text|"("|#FFB100}} {{Text|THEN|#F0F0F0}} B = B + {{Text|1|#F580B1}}
                                {{Text|IF|#F0F0F0}} e2$ = {{Text|")"|#FFB100}} {{Text|THEN|#F0F0F0}} B = B - {{Text|1|#F580B1}}
                                {{Text|IF|#F0F0F0}} e2$ = {{Text|","|#FFB100}} {{Text|AND|#F0F0F0}} B = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
                                    pending = {{Text|1|#F580B1}}
                                    i = i2 + {{Text|1|#F580B1}}
                                    {{Text|IF|#F0F0F0}} i > n - {{Text|2|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Expected CONST ... , name = value/expression"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                    {{Text|EXIT|#F0F0F0}} {{Text|FOR|#F0F0F0}}
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|IF|#F0F0F0}} {{Text|LEN|#F0F0F0}}(e$) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} e$ = e2$ {{Text|ELSE|#F0F0F0}} e$ = e$ + sp + e2$
                                e3$ = e2$
                                {{Text|IF|#F0F0F0}} {{Text|LEN|#F0F0F0}}(e2$) > {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} {{Text|ASC|#F0F0F0}}(e2$, {{Text|1|#F580B1}}) = {{Text|34|#F580B1}} {{Text|THEN|#F0F0F0}}
                                        removeComma = {{Text|_INSTRREV|#F0F0F0}}(e2$, {{Text|","|#FFB100}})
                                        e3$ = {{Text|LEFT$|#F0F0F0}}(e2$, removeComma - {{Text|1|#F580B1}})
                                    {{Text|ELSE|#F0F0F0}}
                                        removeComma = {{Text|INSTR|#F0F0F0}}(e2$, {{Text|","|#FFB100}})
                                        e3$ = {{Text|MID$|#F0F0F0}}(e2$, removeComma + {{Text|1|#F580B1}})
                                    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|IF|#F0F0F0}} {{Text|LEN|#F0F0F0}}(readable_e$) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}}
                                    readable_e$ = e3$
                                {{Text|ELSE|#F0F0F0}}
                                    readable_e$ = readable_e$ + {{Text|" "|#FFB100}} + e3$
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                            {{Text|NEXT|#F0F0F0}}
                            {{Text|'intercept current expression and pass it through Evaluate_Expression$|#31C4C4}}
                            {{Text|'(unless it is a literal string)|#31C4C4}}
                            {{Text|IF|#F0F0F0}} {{Text|LEFT$|#F0F0F0}}(readable_e$, {{Text|1|#F580B1}}) <> {{Text|CHR$|#F0F0F0}}({{Text|34|#F580B1}}) {{Text|THEN|#F0F0F0}}
                                temp1$ = {{Text|_TRIM$|#F0F0F0}}(Evaluate_Expression$(readable_e$))
                                {{Text|IF|#F0F0F0}} {{Text|LEFT$|#F0F0F0}}(temp1$, {{Text|5|#F580B1}}) <> {{Text|"ERROR"|#FFB100}} {{Text|AND|#F0F0F0}} e$ <> temp1$ {{Text|THEN|#F0F0F0}}
                                    e$ = lineformat(temp1$) {{Text|'retrieve parseable format|#31C4C4}}
                                {{Text|ELSE|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} temp1$ = {{Text|"ERROR - Division By Zero"|#FFB100}} {{Text|THEN|#F0F0F0}} a$ = temp1$: {{Text|GOTO|#F0F0F0}} errmes
                                    {{Text|IF|#F0F0F0}} {{Text|INSTR|#F0F0F0}}(temp1$, {{Text|"Improper operations"|#FFB100}}) {{Text|THEN|#F0F0F0}}
                                        a$ = {{Text|"Invalid CONST expression.14"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                            {{Text|'Proceed as usual|#31C4C4}}
                            e$ = fixoperationorder(e$)
                            {{Text|IF|#F0F0F0}} Error_Happened {{Text|THEN|#F0F0F0}} {{Text|GOTO|#F0F0F0}} errmes
                            e$ = evaluateconst(e$, t)
                            {{Text|IF|#F0F0F0}} Error_Happened {{Text|THEN|#F0F0F0}} {{Text|GOTO|#F0F0F0}} errmes
                            {{Text|IF|#F0F0F0}} t {{Text|AND|#F0F0F0}} ISSTRING {{Text|THEN|#F0F0F0}} {{Text|'string type|#31C4C4}}
                                {{Text|IF|#F0F0F0}} typeoverride {{Text|THEN|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} (typeoverride {{Text|AND|#F0F0F0}} ISSTRING) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Type mismatch"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                            {{Text|ELSE|#F0F0F0}} {{Text|'not a string type|#31C4C4}}
                                {{Text|IF|#F0F0F0}} typeoverride {{Text|THEN|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} typeoverride {{Text|AND|#F0F0F0}} ISSTRING {{Text|THEN|#F0F0F0}} a$ = {{Text|"Type mismatch"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|IF|#F0F0F0}} t {{Text|AND|#F0F0F0}} ISFLOAT {{Text|THEN|#F0F0F0}}
                                    constval## = {{Text|_CV|#F0F0F0}}({{Text|_FLOAT|#F0F0F0}}, e$)
                                    constval&& = constval##
                                    constval~&& = constval&&
                                {{Text|ELSE|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} (t {{Text|AND|#F0F0F0}} ISUNSIGNED) {{Text|AND|#F0F0F0}} (t {{Text|AND|#F0F0F0}} {{Text|511|#F580B1}}) = {{Text|64|#F580B1}} {{Text|THEN|#F0F0F0}}
                                        constval~&& = {{Text|_CV|#F0F0F0}}({{Text|_UNSIGNED|#F0F0F0}} _INTEGER64, e$)
                                        constval&& = constval~&&
                                        constval## = constval&&
                                    {{Text|ELSE|#F0F0F0}}
                                        constval&& = {{Text|_CV|#F0F0F0}}(_INTEGER64, e$)
                                        constval## = constval&&
                                        constval~&& = constval&&
                                    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|'override type?|#31C4C4}}
                                {{Text|IF|#F0F0F0}} typeoverride {{Text|THEN|#F0F0F0}}
                                    {{Text|'range check required here (noted in todo)|#31C4C4}}
                                    t = typeoverride
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}} {{Text|'not a string type|#31C4C4}}
                            constlast = constlast + {{Text|1|#F580B1}}
                            {{Text|IF|#F0F0F0}} constlast > constmax {{Text|THEN|#F0F0F0}}
                                constmax = constmax * {{Text|2|#F580B1}}
                                {{Text|REDIM|#F0F0F0}} {{Text|_PRESERVE|#F0F0F0}} constname(constmax) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
                                {{Text|REDIM|#F0F0F0}} {{Text|_PRESERVE|#F0F0F0}} constcname(constmax) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
                                {{Text|REDIM|#F0F0F0}} {{Text|_PRESERVE|#F0F0F0}} constnamesymbol(constmax) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}} {{Text|'optional name symbol|#31C4C4}}
                                {{Text|REDIM|#F0F0F0}} {{Text|_PRESERVE|#F0F0F0}} consttype(constmax) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}} {{Text|'variable type number|#31C4C4}}
                                {{Text|REDIM|#F0F0F0}} {{Text|_PRESERVE|#F0F0F0}} constinteger(constmax) {{Text|AS|#F0F0F0}} _INTEGER64
                                {{Text|REDIM|#F0F0F0}} {{Text|_PRESERVE|#F0F0F0}} constuinteger(constmax) {{Text|AS|#F0F0F0}} {{Text|_UNSIGNED|#F0F0F0}} _INTEGER64
                                {{Text|REDIM|#F0F0F0}} {{Text|_PRESERVE|#F0F0F0}} constfloat(constmax) {{Text|AS|#F0F0F0}} {{Text|_FLOAT|#F0F0F0}}
                                {{Text|REDIM|#F0F0F0}} {{Text|_PRESERVE|#F0F0F0}} conststring(constmax) {{Text|AS|#F0F0F0}} {{Text|STRING|#F0F0F0}}
                                {{Text|REDIM|#F0F0F0}} {{Text|_PRESERVE|#F0F0F0}} constsubfunc(constmax) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
                                {{Text|REDIM|#F0F0F0}} {{Text|_PRESERVE|#F0F0F0}} constdefined(constmax) {{Text|AS|#F0F0F0}} {{Text|LONG|#F0F0F0}}
                            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                            i2 = constlast
                            constsubfunc(i2) = subfuncn
                            {{Text|'IF subfunc = "" THEN constlastshared = i2|#31C4C4}}
                            {{Text|IF|#F0F0F0}} validname(n$) = {{Text|0|#F580B1}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Invalid name"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                            constname(i2) = {{Text|UCASE$|#F0F0F0}}(n$)
                            hashname$ = n$
                            {{Text|'check for name conflicts (any similar: reserved, sub, function, constant)|#31C4C4}}
                            allow = {{Text|0|#F580B1}}
                            const_recheck:
                            hashchkflags = HASHFLAG_RESERVED + HASHFLAG_SUB + HASHFLAG_FUNCTION + HASHFLAG_CONSTANT
                            hashres = HashFind(hashname$, hashchkflags, hashresflags, hashresref)
                            {{Text|DO|#F0F0F0}} {{Text|WHILE|#F0F0F0}} hashres
                                {{Text|IF|#F0F0F0}} hashresflags {{Text|AND|#F0F0F0}} HASHFLAG_CONSTANT {{Text|THEN|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} constsubfunc(hashresref) = subfuncn {{Text|THEN|#F0F0F0}}
                                        {{Text|'If merely redefining a CONST with same value|#31C4C4}}
                                        {{Text|'just issue a warning instead of an error|#31C4C4}}
                                        issueWarning = {{Text|0|#F580B1}}
                                        {{Text|IF|#F0F0F0}} t {{Text|AND|#F0F0F0}} ISSTRING {{Text|THEN|#F0F0F0}}
                                            {{Text|IF|#F0F0F0}} conststring(hashresref) = e$ {{Text|THEN|#F0F0F0}} issueWarning = {{Text|-1|#F580B1}}: thisconstval$ = e$
                                        {{Text|ELSE|#F0F0F0}}
                                            {{Text|IF|#F0F0F0}} t {{Text|AND|#F0F0F0}} ISFLOAT {{Text|THEN|#F0F0F0}}
                                                {{Text|IF|#F0F0F0}} constfloat(hashresref) = constval## {{Text|THEN|#F0F0F0}} issueWarning = {{Text|-1|#F580B1}}: thisconstval$ = {{Text|STR$|#F0F0F0}}(constval##)
                                            {{Text|ELSE|#F0F0F0}}
                                                {{Text|IF|#F0F0F0}} t {{Text|AND|#F0F0F0}} ISUNSIGNED {{Text|THEN|#F0F0F0}}
                                                    {{Text|IF|#F0F0F0}} constuinteger(hashresref) = constval~&& {{Text|THEN|#F0F0F0}} issueWarning = {{Text|-1|#F580B1}}: thisconstval$ = {{Text|STR$|#F0F0F0}}(constval~&&)
                                                {{Text|ELSE|#F0F0F0}}
                                                    {{Text|IF|#F0F0F0}} constinteger(hashresref) = constval&& {{Text|THEN|#F0F0F0}} issueWarning = {{Text|-1|#F580B1}}: thisconstval$ = {{Text|STR$|#F0F0F0}}(constval&&)
                                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                        {{Text|IF|#F0F0F0}} issueWarning {{Text|THEN|#F0F0F0}}
                                            {{Text|IF|#F0F0F0}} {{Text|NOT|#F0F0F0}} IgnoreWarnings {{Text|THEN|#F0F0F0}}
                                                addWarning linenumber, inclevel, inclinenumber(inclevel), incname$(inclevel), {{Text|"duplicate constant definition"|#FFB100}}, n$ + {{Text|" ="|#FFB100}} + thisconstval$
                                            {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                            {{Text|GOTO|#F0F0F0}} constAddDone
                                        {{Text|ELSE|#F0F0F0}}
                                            a$ = {{Text|"Name already in use ("|#FFB100}} + hashname$ + {{Text|")"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                        {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                    {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|IF|#F0F0F0}} hashresflags {{Text|AND|#F0F0F0}} HASHFLAG_RESERVED {{Text|THEN|#F0F0F0}}
                                    a$ = {{Text|"Name already in use ("|#FFB100}} + hashname$ + {{Text|")"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|IF|#F0F0F0}} hashresflags {{Text|AND|#F0F0F0}} (HASHFLAG_SUB + HASHFLAG_FUNCTION) {{Text|THEN|#F0F0F0}}
                                    {{Text|IF|#F0F0F0}} ids(hashresref).internal_subfunc = {{Text|0|#F580B1}} {{Text|OR|#F0F0F0}} {{Text|RTRIM$|#F0F0F0}}(ids(hashresref).musthave) <> {{Text|"$"|#FFB100}} {{Text|THEN|#F0F0F0}} a$ = {{Text|"Name already in use ("|#FFB100}} + hashname$ + {{Text|")"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                    {{Text|IF|#F0F0F0}} t {{Text|AND|#F0F0F0}} ISSTRING {{Text|THEN|#F0F0F0}} a$ = {{Text|"Name already in use ("|#FFB100}} + hashname$ + {{Text|")"|#FFB100}}: {{Text|GOTO|#F0F0F0}} errmes
                                {{Text|END|#F0F0F0}} {{Text|IF|#F0F0F0}}
                                {{Text|IF|#F0F0F0}} hashres <> {{Text|1|#F580B1}} {{Text|THEN|#F0F0F0}} hashres = HashFindCont(hashresflags, hashresref) {{Text|ELSE|#F0F0F0}} hashres = {{Text|0|#F580B1}}
                            {{Text|LOOP|#F0F0F0}}
                            {{Text|'add to hash table|#31C4C4}}
                            HashAdd hashname$, HASHFLAG_CONSTANT, i2
{{CodeEnd}}

Latest revision as of 00:11, 24 August 2024

The _BlankPage serves as a skeleton for new Wiki pages.


Syntax

_BlankSub arg1[, arg2]
result% = _BlankFunc(arg1[, arg2])


Parameters

  • arg1 is a mandatory argument
  • the arg2 is optional


Description

To use this skeleton click on the Edit tab above the page, then copy the raw text of this page and paste it into your new page. Change/remove sections as needed. Use this for italic and this for bold text style. To color your writings use the Text template. It takes either a color name or a #RRGGBB 32bit color, if the color part is omitted it will default to gray.

You can inline simple code one liners like w = _WIDTH

  • an askerisk marks a list point
    • two askerisks will indent the list
      • three askerisks will indent even more
This is a definition list
The first description can follow right after a colon
or in a new line
more descriptions can follow
  • using list bullets with an askerisk
as already seen in the syntax above, you may use desciptions without a defininition too
you may also nest descriptions
but at some point it's cluttering the page so please use it sparingly
This is a nice piece of paper for quotes and similar things. In case of short code snippets you may use the "Cb" (code blue) template to highlight and link keywords to the Wiki pages.

FOR x = 1 TO 5
   PRINT "Hello World!"
NEXT x
END

As you see, this Text block is suitable for preformatted text, but note that the browser is still allowed to wrap too long lines. If you really need your preformatted text to be shown as is, then use a fixed text block instaed, see below.
Use this fixed text block for preformatted text, which is not even allowed to wrap long lines, such as tables etc..
As you see this very long line goes far over the display width, so please limit youself to the available space to not clutter the display too much.

Notes

  • This may be a sub-section for further notes like special behavior, required prerequisites etc.
  • If used/required, then this should always be a sub-section under the Description main section

Errors

  • If used/required, then this also should be a sub-section under the Description main section
  • This is not intended for the regular errors a SUB/FUNCTION could throw, those should be handled in the main description section.
    • Rather use it for subtle things, known mis-behavior, tendency for stack overflows and seg faults etc.


Availability

  • The capability to load from memory was introduced in QB64-PE v3.5.0.


Examples

Example 1
Each example should have a short description.
'Place your code example here
'The "Cl" (code link) template can be used to link keywords to its
'respective Wiki page. Those words will also get highlighted.
COLOR 15,4
PRINT "Hello World!"
This template allows for a short author credit.
Note: To avoid the annoying task of manually inserting the templates
in your code examples, since v3.7.0 you may simply write your example
in the IDE and later use the menu "File > Export As > Wiki example" to
export a completely prepared code block, which you can paste "as is"
into the Wiki page.

Oh, and by the way, this preformatted text block is also new. Generally
it's the same as a fixed text block shown above, but it uses horizontal
scrollers instead of stretching the text box and it has a more plain
appearance. If you want avoid the horizontal scroller, then restrict
yourself to a line length of max. 72 characters.
The output block is available for the SCREEN 0 background colors 0-7
Inside the output block use the "Ot" (output text) template for coloring
Hello World!


See also



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link