1
1
Fork 0
mirror of https://github.com/QB64Official/qb64.git synced 2024-07-16 08:25:20 +00:00

Merge branch 'var-export' into development

This commit is contained in:
Fellippe Heitor 2021-07-29 18:47:35 -03:00
commit f5d70bf105
6 changed files with 434 additions and 249 deletions

View file

@ -1,14 +1,14 @@
$CHECKING:OFF $CHECKING:OFF
SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET) SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
STATIC AS LONG ideHost, breakpointCount, skipCount, timeout, startLevel, lastLine STATIC AS LONG vw_ideHost, vw_breakpointCount, vw_skipCount, vw_timeout, vw_startLevel, vw_lastLine
STATIC AS LONG callStackLength, runToLine STATIC AS LONG vw_runToLine
STATIC AS _BYTE pauseMode, stepOver, bypass, setNextLine STATIC AS _BYTE vw_pauseMode, vw_stepOver, vw_bypass, vw_setNextLine
STATIC buffer$, endc$ STATIC vw_buffer$, vw_endc$
DIM AS LONG i, tempIndex, localIndex, varSize, sequence DIM AS LONG vw_i, vw_tempIndex, vw_localIndex, vw_varSize, vw_sequence
DIM AS _OFFSET address DIM AS _OFFSET vw_address
DIM AS _MEM m, m2 DIM AS _MEM vw_m, vw_m2
DIM start!, temp$, cmd$, value$, k&, buf$, scope$ DIM vw_start!, vw_temp$, vw_cmd$, vw_value$, vw_k&, vw_buf$, vw_scope$
DECLARE LIBRARY DECLARE LIBRARY
SUB vwatch_stoptimers ALIAS stop_timers SUB vwatch_stoptimers ALIAS stop_timers
@ -16,67 +16,67 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
SUB unlockvWatchHandle SUB unlockvWatchHandle
END DECLARE END DECLARE
IF bypass THEN EXIT SUB IF vw_bypass THEN EXIT SUB
vwatch_goto = 0 vwatch_goto = 0
IF ideHost = 0 THEN IF vw_ideHost = 0 THEN
timeout = 10 vw_timeout = 10
endc$ = "<END>" vw_endc$ = "<END>"
'initial setup 'initial setup
GOSUB Connect GOSUB Connect
'send this binary's path/exe name 'send this binary's path/exe name
cmd$ = "me:" + COMMAND$(0) vw_cmd$ = "me:" + COMMAND$(0)
GOSUB SendCommand GOSUB SendCommand
DO DO
GOSUB GetCommand GOSUB GetCommand
SELECT CASE cmd$ SELECT CASE vw_cmd$
CASE "vwatch" CASE "vwatch"
IF value$ <> "ok" THEN IF vw_value$ <> "ok" THEN
unlockvWatchHandle: CLOSE #ideHost unlockvWatchHandle: CLOSE #vw_ideHost
bypass = -1 vw_bypass = -1
EXIT SUB EXIT SUB
END IF END IF
CASE "line count" CASE "line count"
REDIM vwatch_breakpoints(CVL(value$)) AS _BYTE REDIM vwatch_breakpoints(CVL(vw_value$)) AS _BYTE
REDIM vwatch_skiplines(CVL(value$)) AS _BYTE REDIM vwatch_skiplines(CVL(vw_value$)) AS _BYTE
CASE "breakpoint count" CASE "breakpoint count"
breakpointCount = CVL(value$) vw_breakpointCount = CVL(vw_value$)
CASE "breakpoint list" CASE "breakpoint list"
IF LEN(value$) \ 4 <> breakpointCount THEN IF LEN(vw_value$) \ 4 <> vw_breakpointCount THEN
cmd$ = "quit:Communication error." vw_cmd$ = "quit:Communication error."
GOSUB SendCommand GOSUB SendCommand
unlockvWatchHandle: CLOSE #ideHost unlockvWatchHandle: CLOSE #vw_ideHost
bypass = -1 vw_bypass = -1
EXIT SUB EXIT SUB
END IF END IF
FOR i = 1 TO breakpointCount FOR vw_i = 1 TO vw_breakpointCount
temp$ = MID$(value$, i * 4 - 3, 4) vw_temp$ = MID$(vw_value$, vw_i * 4 - 3, 4)
vwatch_breakpoints(CVL(temp$)) = -1 vwatch_breakpoints(CVL(vw_temp$)) = -1
NEXT NEXT
CASE "skip count" CASE "skip count"
skipCount = CVL(value$) vw_skipCount = CVL(vw_value$)
CASE "skip list" CASE "skip list"
IF LEN(value$) \ 4 <> skipCount THEN IF LEN(vw_value$) \ 4 <> vw_skipCount THEN
cmd$ = "quit:Communication error." vw_cmd$ = "quit:Communication error."
GOSUB SendCommand GOSUB SendCommand
unlockvWatchHandle: CLOSE #ideHost unlockvWatchHandle: CLOSE #vw_ideHost
bypass = -1 vw_bypass = -1
EXIT SUB EXIT SUB
END IF END IF
FOR i = 1 TO skipCount FOR vw_i = 1 TO vw_skipCount
temp$ = MID$(value$, i * 4 - 3, 4) vw_temp$ = MID$(vw_value$, vw_i * 4 - 3, 4)
vwatch_skiplines(CVL(temp$)) = -1 vwatch_skiplines(CVL(vw_temp$)) = -1
NEXT NEXT
CASE "run" CASE "run"
IF vwatch_breakpoints(vwatch_linenumber) THEN EXIT DO IF vwatch_breakpoints(vwatch_linenumber) THEN EXIT DO
pauseMode = 0 vw_pauseMode = 0
EXIT SUB EXIT SUB
CASE "break" CASE "break"
pauseMode = -1 vw_pauseMode = -1
EXIT DO EXIT DO
END SELECT END SELECT
LOOP LOOP
@ -84,60 +84,53 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
IF vwatch_linenumber = 0 THEN IF vwatch_linenumber = 0 THEN
GOSUB SendCallStack GOSUB SendCallStack
cmd$ = "quit:Program ended." vw_cmd$ = "quit:Program ended."
GOSUB SendCommand GOSUB SendCommand
unlockvWatchHandle: CLOSE #ideHost unlockvWatchHandle: CLOSE #vw_ideHost
bypass = -1 vw_bypass = -1
ideHost = 0 vw_ideHost = 0
EXIT SUB EXIT SUB
ELSEIF vwatch_linenumber = -1 THEN ELSEIF vwatch_linenumber = -1 THEN
'report an error in the most recent line 'report an error in the most recent line
GOSUB SendCallStack GOSUB SendCallStack
cmd$ = "error:" + MKL$(lastLine) vw_cmd$ = "error:" + MKL$(vw_lastLine)
GOSUB SendCommand GOSUB SendCommand
EXIT SUB EXIT SUB
ELSEIF vwatch_linenumber = -2 THEN ELSEIF vwatch_linenumber = -2 THEN
'report a new sub/function has been "entered" 'report a new sub/function has been "entered"
IF LEN(vwatch_callstack) > 100000 THEN
vwatch_callstack = ""
callStackLength = 0
END IF
callStackLength = callStackLength + 1
IF LEN(vwatch_callstack) THEN vwatch_callstack = vwatch_callstack + CHR$(0)
vwatch_callstack = vwatch_callstack + vwatch_subname$ + ", line" + STR$(lastLine)
IF vwatch_sublevel > UBOUND(vwatch_stack) THEN IF vwatch_sublevel > UBOUND(vwatch_stack) THEN
REDIM _PRESERVE vwatch_stack(UBOUND(vwatch_stack) + 1000) AS STRING REDIM _PRESERVE vwatch_stack(UBOUND(vwatch_stack) + 1000) AS STRING
END IF END IF
vwatch_stack(vwatch_sublevel) = vwatch_internalsubname$ vwatch_stack(vwatch_sublevel) = vwatch_internalsubname$ + "," + vwatch_subname$ + ", line" + STR$(vw_lastLine)
EXIT SUB EXIT SUB
ELSEIF vwatch_linenumber = -3 THEN ELSEIF vwatch_linenumber = -3 THEN
'handle STOP - instead of quitting, pause execution 'handle STOP - instead of quitting, pause execution
pauseMode = -1 vw_pauseMode = -1
stepOver = 0 vw_stepOver = 0
EXIT SUB EXIT SUB
END IF END IF
IF vwatch_linenumber = lastLine AND setNextLine = 0 THEN EXIT SUB IF vwatch_linenumber = vw_lastLine AND vw_setNextLine = 0 THEN EXIT SUB
setNextLine = 0 vw_setNextLine = 0
lastLine = vwatch_linenumber vw_lastLine = vwatch_linenumber
GOSUB GetCommand GOSUB GetCommand
SELECT CASE cmd$ SELECT CASE vw_cmd$
CASE "break" CASE "break"
pauseMode = -1 vw_pauseMode = -1
stepOver = 0 vw_stepOver = 0
runToLine = 0 vw_runToLine = 0
cmd$ = "" vw_cmd$ = ""
CASE "set breakpoint" CASE "set breakpoint"
vwatch_breakpoints(CVL(value$)) = -1 vwatch_breakpoints(CVL(vw_value$)) = -1
vwatch_skiplines(CVL(value$)) = 0 vwatch_skiplines(CVL(vw_value$)) = 0
CASE "clear breakpoint" CASE "clear breakpoint"
vwatch_breakpoints(CVL(value$)) = 0 vwatch_breakpoints(CVL(vw_value$)) = 0
CASE "set skip line" CASE "set skip line"
vwatch_skiplines(CVL(value$)) = -1 vwatch_skiplines(CVL(vw_value$)) = -1
vwatch_breakpoints(CVL(value$)) = 0 vwatch_breakpoints(CVL(vw_value$)) = 0
CASE "clear skip line" CASE "clear skip line"
vwatch_skiplines(CVL(value$)) = 0 vwatch_skiplines(CVL(vw_value$)) = 0
CASE "clear all breakpoints" CASE "clear all breakpoints"
REDIM vwatch_breakpoints(UBOUND(vwatch_breakpoints)) AS _BYTE REDIM vwatch_breakpoints(UBOUND(vwatch_breakpoints)) AS _BYTE
CASE "clear all skips" CASE "clear all skips"
@ -146,72 +139,72 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
IF vwatch_skiplines(vwatch_linenumber) THEN vwatch_goto = -vwatch_linenumber: EXIT SUB IF vwatch_skiplines(vwatch_linenumber) THEN vwatch_goto = -vwatch_linenumber: EXIT SUB
IF stepOver = -1 AND vwatch_sublevel > startLevel AND vwatch_breakpoints(vwatch_linenumber) = 0 THEN IF vw_stepOver = -1 AND vwatch_sublevel > vw_startLevel AND vwatch_breakpoints(vwatch_linenumber) = 0 THEN
EXIT SUB EXIT SUB
ELSEIF stepOver = -1 AND vwatch_sublevel = startLevel THEN ELSEIF vw_stepOver = -1 AND vwatch_sublevel = vw_startLevel THEN
stepOver = 0 vw_stepOver = 0
pauseMode = -1 vw_pauseMode = -1
END IF END IF
IF runToLine > 0 AND runToLine <> vwatch_linenumber THEN IF vw_runToLine > 0 AND vw_runToLine <> vwatch_linenumber THEN
EXIT SUB EXIT SUB
ELSEIF runToLine > 0 AND runToLine = vwatch_linenumber THEN ELSEIF vw_runToLine > 0 AND vw_runToLine = vwatch_linenumber THEN
pauseMode = -1 vw_pauseMode = -1
runToLine = 0 vw_runToLine = 0
END IF END IF
IF vwatch_breakpoints(vwatch_linenumber) = 0 AND pauseMode = 0 THEN IF vwatch_breakpoints(vwatch_linenumber) = 0 AND vw_pauseMode = 0 THEN
EXIT SUB EXIT SUB
END IF END IF
vwatch_stoptimers vwatch_stoptimers
cmd$ = "line number:" vw_cmd$ = "line number:"
IF vwatch_breakpoints(vwatch_linenumber) THEN cmd$ = "breakpoint:" IF vwatch_breakpoints(vwatch_linenumber) THEN vw_cmd$ = "breakpoint:"
cmd$ = cmd$ + MKL$(vwatch_linenumber) vw_cmd$ = vw_cmd$ + MKL$(vwatch_linenumber)
GOSUB SendCommand GOSUB SendCommand
cmd$ = "current sub:" + vwatch_stack(vwatch_sublevel) vw_cmd$ = "current sub:" + LEFT$(vwatch_stack(vwatch_sublevel), INSTR(vwatch_stack(vwatch_sublevel), ",") - 1)
GOSUB SendCommand GOSUB SendCommand
DO 'main loop DO 'main loop
SELECT CASE cmd$ SELECT CASE vw_cmd$
CASE "run" CASE "run"
pauseMode = 0 vw_pauseMode = 0
stepOver = 0 vw_stepOver = 0
vwatch_starttimers vwatch_starttimers
EXIT SUB EXIT SUB
CASE "run to line" CASE "run to line"
pauseMode = 0 vw_pauseMode = 0
stepOver = 0 vw_stepOver = 0
runToLine = CVL(value$) vw_runToLine = CVL(vw_value$)
vwatch_starttimers vwatch_starttimers
EXIT SUB EXIT SUB
CASE "step" CASE "step"
pauseMode = -1 vw_pauseMode = -1
stepOver = 0 vw_stepOver = 0
EXIT SUB EXIT SUB
CASE "step over" CASE "step over"
pauseMode = -1 vw_pauseMode = -1
stepOver = -1 vw_stepOver = -1
startLevel = vwatch_sublevel vw_startLevel = vwatch_sublevel
vwatch_starttimers vwatch_starttimers
EXIT SUB EXIT SUB
CASE "step out" CASE "step out"
pauseMode = -1 vw_pauseMode = -1
stepOver = -1 vw_stepOver = -1
startLevel = vwatch_sublevel - 1 vw_startLevel = vwatch_sublevel - 1
vwatch_starttimers vwatch_starttimers
EXIT SUB EXIT SUB
CASE "free" CASE "free"
unlockvWatchHandle: CLOSE #ideHost unlockvWatchHandle: CLOSE #vw_ideHost
ideHost = 0 vw_ideHost = 0
bypass = -1 vw_bypass = -1
vwatch_starttimers vwatch_starttimers
EXIT SUB EXIT SUB
CASE "set breakpoint" CASE "set breakpoint"
vwatch_breakpoints(CVL(value$)) = -1 vwatch_breakpoints(CVL(vw_value$)) = -1
vwatch_skiplines(CVL(value$)) = 0 vwatch_skiplines(CVL(vw_value$)) = 0
CASE "clear breakpoint" CASE "clear breakpoint"
vwatch_breakpoints(CVL(value$)) = 0 vwatch_breakpoints(CVL(vw_value$)) = 0
CASE "clear all breakpoints" CASE "clear all breakpoints"
REDIM vwatch_breakpoints(UBOUND(vwatch_breakpoints)) AS _BYTE REDIM vwatch_breakpoints(UBOUND(vwatch_breakpoints)) AS _BYTE
CASE "clear all skips" CASE "clear all skips"
@ -220,49 +213,49 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
'send call stack history 'send call stack history
GOSUB SendCallStack GOSUB SendCallStack
CASE "global var" CASE "global var"
tempIndex = CVL(LEFT$(value$, 4)) vw_tempIndex = CVL(LEFT$(vw_value$, 4))
localIndex = CVL(MID$(value$, 5, 4)) vw_localIndex = CVL(MID$(vw_value$, 5, 4))
address = _OFFSET(globalVariables) + LEN(address) * localIndex vw_address = _OFFSET(globalVariables) + LEN(vw_address) * vw_localIndex
address = _MEMGET(m, address, _OFFSET) 'first resolve pass vw_address = _MEMGET(vw_m, vw_address, _OFFSET) 'first resolve pass
address = _MEMGET(m, address, _OFFSET) 'second resolve pass vw_address = _MEMGET(vw_m, vw_address, _OFFSET) 'second resolve pass
cmd$ = "global var:" + MKL$(tempIndex) + STR$(address) vw_cmd$ = "global var:" + MKL$(vw_tempIndex) + STR$(vw_address)
GOSUB SendCommand GOSUB SendCommand
CASE "local var" CASE "local var"
tempIndex = CVL(LEFT$(value$, 4)) vw_tempIndex = CVL(LEFT$(vw_value$, 4))
localIndex = CVL(MID$(value$, 5, 4)) vw_localIndex = CVL(MID$(vw_value$, 5, 4))
scope$ = MID$(value$, 9) vw_scope$ = MID$(vw_value$, 9)
IF scope$ = vwatch_stack(vwatch_sublevel) THEN IF vw_scope$ = LEFT$(vwatch_stack(vwatch_sublevel), INSTR(vwatch_stack(vwatch_sublevel), ",") - 1) THEN
address = _OFFSET(localVariables) + LEN(address) * localIndex vw_address = _OFFSET(localVariables) + LEN(vw_address) * vw_localIndex
address = _MEMGET(m, address, _OFFSET) 'first resolve pass vw_address = _MEMGET(vw_m, vw_address, _OFFSET) 'first resolve pass
address = _MEMGET(m, address, _OFFSET) 'second resolve pass vw_address = _MEMGET(vw_m, vw_address, _OFFSET) 'second resolve pass
cmd$ = "local var:" + MKL$(tempIndex) + STR$(address) vw_cmd$ = "local var:" + MKL$(vw_tempIndex) + STR$(vw_address)
GOSUB SendCommand GOSUB SendCommand
END IF END IF
CASE "get address" CASE "get address"
tempIndex = CVL(LEFT$(value$, 4)) vw_tempIndex = CVL(LEFT$(vw_value$, 4))
sequence = CVI(MID$(value$, 5, 2)) vw_sequence = CVI(MID$(vw_value$, 5, 2))
varSize = CVL(MID$(value$, 7, 4)) vw_varSize = CVL(MID$(vw_value$, 7, 4))
address = VAL(MID$(value$, 11)) vw_address = VAL(MID$(vw_value$, 11))
buf$ = SPACE$(varSize) vw_buf$ = SPACE$(vw_varSize)
m = _MEM(address, varSize) vw_m = _MEM(vw_address, vw_varSize)
m2 = _MEM(_OFFSET(buf$), varSize) vw_m2 = _MEM(_OFFSET(vw_buf$), vw_varSize)
_MEMCOPY m, m.OFFSET, m.SIZE TO m2, m2.OFFSET _MEMCOPY vw_m, vw_m.OFFSET, vw_m.SIZE TO vw_m2, vw_m2.OFFSET
cmd$ = "address read:" + MKL$(tempIndex) + MKI$(sequence) + buf$ vw_cmd$ = "address read:" + MKL$(vw_tempIndex) + MKI$(vw_sequence) + vw_buf$
GOSUB SendCommand GOSUB SendCommand
CASE "current sub" CASE "current sub"
cmd$ = "current sub:" + vwatch_stack(vwatch_sublevel) vw_cmd$ = "current sub:" + LEFT$(vwatch_stack(vwatch_sublevel), INSTR(vwatch_stack(vwatch_sublevel), ",") - 1)
GOSUB SendCommand GOSUB SendCommand
CASE "set next line" CASE "set next line"
pauseMode = -1 vw_pauseMode = -1
stepOver = 0 vw_stepOver = 0
setNextLine = -1 vw_setNextLine = -1
vwatch_goto = CVL(value$) vwatch_goto = CVL(vw_value$)
EXIT SUB EXIT SUB
CASE "set skip line" CASE "set skip line"
vwatch_skiplines(CVL(value$)) = -1 vwatch_skiplines(CVL(vw_value$)) = -1
vwatch_breakpoints(CVL(value$)) = 0 vwatch_breakpoints(CVL(vw_value$)) = 0
CASE "clear skip line" CASE "clear skip line"
vwatch_skiplines(CVL(value$)) = 0 vwatch_skiplines(CVL(vw_value$)) = 0
END SELECT END SELECT
GOSUB GetCommand GOSUB GetCommand
@ -273,49 +266,57 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
EXIT SUB EXIT SUB
Connect: Connect:
DIM ideport$ DIM vw_ideport$
ideport$ = ENVIRON$("QB64DEBUGPORT") vw_ideport$ = ENVIRON$("QB64DEBUGPORT")
IF ideport$ = "" THEN bypass = -1: EXIT SUB IF vw_ideport$ = "" THEN vw_bypass = -1: EXIT SUB
start! = TIMER vw_start! = TIMER
DO DO
k& = _KEYHIT vw_k& = _KEYHIT
ideHost = _OPENCLIENT("QB64IDE:" + ideport$ + ":localhost") vw_ideHost = _OPENCLIENT("QB64IDE:" + vw_ideport$ + ":localhost")
_LIMIT 30 _LIMIT 30
LOOP UNTIL k& = 27 OR ideHost <> 0 OR TIMER - start! > timeout LOOP UNTIL vw_k& = 27 OR vw_ideHost <> 0 OR TIMER - vw_start! > vw_timeout
IF ideHost = 0 THEN bypass = -1: EXIT SUB IF vw_ideHost = 0 THEN vw_bypass = -1: EXIT SUB
RETURN RETURN
GetCommand: GetCommand:
GET #ideHost, , temp$ GET #vw_ideHost, , vw_temp$
buffer$ = buffer$ + temp$ vw_buffer$ = vw_buffer$ + vw_temp$
IF INSTR(buffer$, endc$) THEN IF INSTR(vw_buffer$, vw_endc$) THEN
cmd$ = LEFT$(buffer$, INSTR(buffer$, endc$) - 1) vw_cmd$ = LEFT$(vw_buffer$, INSTR(vw_buffer$, vw_endc$) - 1)
buffer$ = MID$(buffer$, INSTR(buffer$, endc$) + LEN(endc$)) vw_buffer$ = MID$(vw_buffer$, INSTR(vw_buffer$, vw_endc$) + LEN(vw_endc$))
IF INSTR(cmd$, ":") THEN IF INSTR(vw_cmd$, ":") THEN
value$ = MID$(cmd$, INSTR(cmd$, ":") + 1) vw_value$ = MID$(vw_cmd$, INSTR(vw_cmd$, ":") + 1)
cmd$ = LEFT$(cmd$, INSTR(cmd$, ":") - 1) vw_cmd$ = LEFT$(vw_cmd$, INSTR(vw_cmd$, ":") - 1)
ELSE ELSE
value$ = "" vw_value$ = ""
END IF END IF
ELSE ELSE
cmd$ = "": value$ = "" vw_cmd$ = "": vw_value$ = ""
END IF END IF
RETURN RETURN
SendCallStack: SendCallStack:
cmd$ = "call stack size:" + MKL$(callStackLength) IF vwatch_sublevel - 1 > 0 THEN
vwatch_callstack = MID$(vwatch_stack(2), INSTR(vwatch_stack(2), ",") + 1)
FOR vw_i = 3 TO vwatch_sublevel
vwatch_callstack = vwatch_callstack + CHR$(0) + MID$(vwatch_stack(vw_i), INSTR(vwatch_stack(vw_i), ",") + 1)
NEXT
ELSE
vwatch_callstack = ""
END IF
vw_cmd$ = "call stack size:" + MKL$(vwatch_sublevel - 1)
GOSUB SendCommand GOSUB SendCommand
cmd$ = "call stack:" + vwatch_callstack vw_cmd$ = "call stack:" + vwatch_callstack
GOSUB SendCommand GOSUB SendCommand
RETURN RETURN
SendCommand: SendCommand:
cmd$ = cmd$ + endc$ vw_cmd$ = vw_cmd$ + vw_endc$
PUT #ideHost, , cmd$ PUT #vw_ideHost, , vw_cmd$
cmd$ = "" vw_cmd$ = ""
RETURN RETURN
END SUB END SUB

View file

@ -217,8 +217,9 @@ DIM SHARED OptionsMenuShowErrorsImmediately AS INTEGER, OptionsMenuIgnoreWarning
DIM SHARED OptionsMenuDisableSyntax AS INTEGER ', OptionsMenuAutoComplete DIM SHARED OptionsMenuDisableSyntax AS INTEGER ', OptionsMenuAutoComplete
DIM SHARED ViewMenuID AS INTEGER, ViewMenuShowLineNumbersSubMenuID AS INTEGER DIM SHARED ViewMenuID AS INTEGER, ViewMenuShowLineNumbersSubMenuID AS INTEGER
DIM SHARED ViewMenuShowSeparatorID AS INTEGER, ViewMenuShowBGID AS INTEGER DIM SHARED ViewMenuShowSeparatorID AS INTEGER, ViewMenuShowBGID AS INTEGER
DIM SHARED ViewMenuCompilerWarnings AS INTEGER, ViewMenuCallStack AS INTEGER DIM SHARED ViewMenuCompilerWarnings AS INTEGER
DIM SHARED RunMenuID AS INTEGER, RunMenuSaveExeWithSource AS INTEGER, brackethighlight AS INTEGER DIM SHARED RunMenuID AS INTEGER, RunMenuSaveExeWithSource AS INTEGER, brackethighlight AS INTEGER
DIM SHARED DebugMenuID AS INTEGER, DebugMenuCallStack AS INTEGER
DIM SHARED multihighlight AS INTEGER, keywordHighlight AS INTEGER DIM SHARED multihighlight AS INTEGER, keywordHighlight AS INTEGER
DIM SHARED PresetColorSchemes AS INTEGER, TotalColorSchemes AS INTEGER, ColorSchemes$(0) DIM SHARED PresetColorSchemes AS INTEGER, TotalColorSchemes AS INTEGER, ColorSchemes$(0)
DIM SHARED LastValidColorScheme AS INTEGER DIM SHARED LastValidColorScheme AS INTEGER

View file

@ -274,10 +274,6 @@ FUNCTION ide2 (ignore)
ViewMenuCompilerWarnings = i ViewMenuCompilerWarnings = i
menu$(ViewMenuID, ViewMenuCompilerWarnings) = "Compiler #Warnings... Ctrl+W": i = i + 1 menu$(ViewMenuID, ViewMenuCompilerWarnings) = "Compiler #Warnings... Ctrl+W": i = i + 1
menuDesc$(m, i - 1) = "Displays a list of recent code warnings" menuDesc$(m, i - 1) = "Displays a list of recent code warnings"
ViewMenuCallStack = i
menu$(ViewMenuID, ViewMenuCallStack) = "Call #Stack... F12": i = i + 1
menuDesc$(m, i - 1) = "Displays the call stack of the current program's last execution"
menusize(m) = i - 1 menusize(m) = i - 1
m = m + 1: i = 0: SearchMenuID = m m = m + 1: i = 0: SearchMenuID = m
@ -336,7 +332,7 @@ FUNCTION ide2 (ignore)
menuDesc$(m, i - 1) = "Compiles current program without running it" menuDesc$(m, i - 1) = "Compiles current program without running it"
menusize(m) = i - 1 menusize(m) = i - 1
m = m + 1: i = 0 m = m + 1: i = 0: DebugMenuID = m
menu$(m, i) = "Debug": i = i + 1 menu$(m, i) = "Debug": i = i + 1
menu$(m, i) = "Start #Paused F8": i = i + 1 menu$(m, i) = "Start #Paused F8": i = i + 1
menuDesc$(m, i - 1) = "Compiles current program and starts it in pause mode" menuDesc$(m, i - 1) = "Compiles current program and starts it in pause mode"
@ -350,8 +346,18 @@ FUNCTION ide2 (ignore)
menu$(m, i) = "#Unskip All Lines Ctrl+F10": i = i + 1 menu$(m, i) = "#Unskip All Lines Ctrl+F10": i = i + 1
menuDesc$(m, i - 1) = "Removes all line skip flags" menuDesc$(m, i - 1) = "Removes all line skip flags"
menu$(m, i) = "-": i = i + 1 menu$(m, i) = "-": i = i + 1
menu$(m, i) = "#Watch List... F4": i = i + 1
menuDesc$(m, i - 1) = "Adds variables to watch list"
DebugMenuCallStack = i
menu$(DebugMenuID, DebugMenuCallStack) = "Call #Stack... F12": i = i + 1
menuDesc$(m, i - 1) = "Displays the call stack of the current program's last execution"
menu$(m, i) = "-": i = i + 1
menu$(m, i) = "Set Base #TCP/IP Port Number...": i = i + 1 menu$(m, i) = "Set Base #TCP/IP Port Number...": i = i + 1
menuDesc$(m, i - 1) = "Sets the initial port number for TCP/IP communication with the debuggee" menuDesc$(m, i - 1) = "Sets the initial port number for TCP/IP communication with the debuggee"
menu$(m, i) = "#Advanced (C++)...": i = i + 1
menuDesc$(m, i - 1) = "Enables embedding C++ debug information into compiled program"
menu$(m, i) = "Purge C++ #Libraries": i = i + 1
menuDesc$(m, i - 1) = "Purges all pre-compiled content"
menusize(m) = i - 1 menusize(m) = i - 1
m = m + 1: i = 0: OptionsMenuID = m m = m + 1: i = 0: OptionsMenuID = m
@ -367,8 +373,6 @@ FUNCTION ide2 (ignore)
menuDesc$(m, i - 1) = "Changes code page to use with TTF fonts" menuDesc$(m, i - 1) = "Changes code page to use with TTF fonts"
menu$(m, i) = "#Backup/Undo...": i = i + 1 menu$(m, i) = "#Backup/Undo...": i = i + 1
menuDesc$(m, i - 1) = "Sets size of backup/undo buffer" menuDesc$(m, i - 1) = "Sets size of backup/undo buffer"
menu$(m, i) = "#Advanced...": i = i + 1
menuDesc$(m, i - 1) = "Enables embedding C++ debug information into compiled program"
menu$(m, i) = "-": i = i + 1 menu$(m, i) = "-": i = i + 1
OptionsMenuDisableSyntax = i OptionsMenuDisableSyntax = i
@ -725,6 +729,23 @@ FUNCTION ide2 (ignore)
'$DEBUG mode on '$DEBUG mode on
IdeDebugMode = 1 IdeDebugMode = 1
FOR x = 1 TO totalVariablesCreated
usedVariableList(x).mostRecentValue = ""
NEXT
variableWatchList$ = ""
longestVarName = 0
FOR y = 1 TO totalVariablesCreated
IF usedVariableList(y).watch THEN
IF LEN(usedVariableList(y).name) > longestVarName THEN
longestVarName = LEN(usedVariableList(y).name)
IF variableWatchList$ = "" THEN variableWatchList$ = SPACE$(4)
MID$(variableWatchList$, 1, 4) = MKL$(longestVarName)
END IF
variableWatchList$ = variableWatchList$ + MKL$(y)
END IF
NEXT
EnterDebugMode: EnterDebugMode:
IF idehelp THEN IF idehelp THEN
idewy = idewy + idesubwindow idewy = idewy + idesubwindow
@ -1627,9 +1648,26 @@ FUNCTION ide2 (ignore)
END IF END IF
IF KB = KEY_F4 THEN 'variable watch IF KB = KEY_F4 THEN 'variable watch
result = idevariablewatchbox("") IF vWatchOn = 0 THEN
result = idemessagebox("Watch List", "Insert $DEBUG metacommand?", "#Yes;#No")
IF result = 1 THEN
ideselect = 0
ideinsline 1, SCase$("$Debug")
idecy = idecy + 1
idechangemade = 1
GOTO ideloop
ELSE
GOTO ideloop
END IF
ELSE
IF idecompiling = 1 THEN
result = idemessagebox("Watch List", "Variable List not yet available.\nWait for the 'OK' message in the status area.", "")
PCOPY 3, 0: SCREEN , , 3, 0 PCOPY 3, 0: SCREEN , , 3, 0
GOTO ideloop GOTO ideloop
ELSE
GOTO showWatchList
END IF
END IF
END IF END IF
IF KB = KEY_F5 THEN 'Note: F5 or SHIFT+F5 accepted IF KB = KEY_F5 THEN 'Note: F5 or SHIFT+F5 accepted
@ -4367,9 +4405,9 @@ FUNCTION ide2 (ignore)
END IF END IF
IF callStackLength = 0 THEN IF callStackLength = 0 THEN
menu$(ViewMenuID, ViewMenuCallStack) = "~Call #Stack... F12" menu$(DebugMenuID, DebugMenuCallStack) = "~Call #Stack... F12"
ELSE ELSE
menu$(ViewMenuID, ViewMenuCallStack) = "Call #Stack... F12" menu$(DebugMenuID, DebugMenuCallStack) = "Call #Stack... F12"
END IF END IF
oldmy = mY: oldmx = mX oldmy = mY: oldmx = mX
@ -4876,7 +4914,7 @@ FUNCTION ide2 (ignore)
GOTO ideloop GOTO ideloop
END IF END IF
IF menu$(m, s) = "#Advanced..." THEN IF menu$(m, s) = "#Advanced (C++)..." THEN
PCOPY 2, 0 PCOPY 2, 0
retval = ideadvancedbox retval = ideadvancedbox
'retval is ignored 'retval is ignored
@ -4884,6 +4922,13 @@ FUNCTION ide2 (ignore)
GOTO ideloop GOTO ideloop
END IF END IF
IF menu$(m, s) = "Purge C++ #Libraries" THEN
PCOPY 2, 0
purgeprecompiledcontent
PCOPY 3, 0: SCREEN , , 3, 0
GOTO ideloop
END IF
IF RIGHT$(menu$(m, s), 19) = "#Swap Mouse Buttons" THEN IF RIGHT$(menu$(m, s), 19) = "#Swap Mouse Buttons" THEN
PCOPY 2, 0 PCOPY 2, 0
@ -5719,6 +5764,14 @@ FUNCTION ide2 (ignore)
END IF END IF
END IF END IF
IF menu$(m, s) = "#Watch List... F4" THEN
PCOPY 2, 0
showWatchList:
result = idevariablewatchbox("")
PCOPY 3, 0: SCREEN , , 3, 0
GOTO ideloop
END IF
IF menu$(m, s) = "Call #Stack... F12" OR menu$(m, s) = "Call Stack... F12" THEN IF menu$(m, s) = "Call #Stack... F12" OR menu$(m, s) = "Call Stack... F12" THEN
IF IdeDebugMode = 2 THEN IF IdeDebugMode = 2 THEN
IdeDebugMode = 3 IdeDebugMode = 3
@ -6321,6 +6374,11 @@ SUB DebugMode
END TYPE END TYPE
STATIC vWatchPanel AS vWatchPanelType STATIC vWatchPanel AS vWatchPanelType
TYPE ui
AS INTEGER x, y, w, h
AS STRING caption
END TYPE
SELECT EVERYCASE IdeDebugMode SELECT EVERYCASE IdeDebugMode
CASE 1 CASE 1
PauseMode = 0 PauseMode = 0
@ -6343,6 +6401,32 @@ SUB DebugMode
vWatchPanel.x = idewx - vWatchPanel.w - 6 vWatchPanel.x = idewx - vWatchPanel.w - 6
vWatchPanel.y = 4 vWatchPanel.y = 4
vWatchPanel.firstVisible = 1 vWatchPanel.firstVisible = 1
STATIC Button(1 TO 8) AS ui
i = 0
i = i + 1: Button(i).Caption = "<F4 = Add Watch>"
i = i + 1: Button(i).Caption = "<F5 = Run>"
i = i + 1: Button(i).Caption = "<F6 = Step Out>"
i = i + 1: Button(i).Caption = "<F7 = Step Over>"
i = i + 1: Button(i).Caption = "<F8 = Step Into>"
i = i + 1: Button(i).Caption = "<F9 = Toggle Breakpoint>"
i = i + 1: Button(i).Caption = "<F10 = Clear all breakpoints>"
i = i + 1: Button(i).Caption = "<F12 = Call Stack>"
y = (idewy - 4) + 2
x = 2
FOR i = 1 TO UBOUND(Button)
Button(i).x = x
Button(i).y = y
Button(i).w = LEN(Button(i).Caption)
IF i < UBOUND(Button) THEN
x = x + Button(i).w + 1
IF x + LEN(Button(i + 1).Caption) > idewx - 1 THEN
y = y + 1
x = 2
END IF
END IF
NEXT
CASE IS > 1 CASE IS > 1
noFocusMessage = NOT noFocusMessage noFocusMessage = NOT noFocusMessage
GOSUB UpdateStatusArea GOSUB UpdateStatusArea
@ -6646,6 +6730,15 @@ SUB DebugMode
ELSE ELSE
draggingHThumb = 0 draggingHThumb = 0
END IF END IF
mouseDownOnButton = 0
FOR i = 1 TO UBOUND(Button)
IF mY = Button(i).y AND mX >= Button(i).x AND mX <= Button(i).x + Button(i).w AND _
vWatchPanel.draggingPanel = 0 AND vWatchPanel.resizingPanel = 0 THEN
mouseDownOnButton = i
EXIT FOR
END IF
NEXT
ELSE ELSE
'drag 'drag
IF draggingVThumb = -1 THEN IF draggingVThumb = -1 THEN
@ -6736,7 +6829,7 @@ SUB DebugMode
GOSUB UpdateDisplay GOSUB UpdateDisplay
END IF END IF
END IF END IF
ELSE ELSE 'mouse button released
IF vWatchPanel.draggingPanel THEN vWatchPanel.draggingPanel = 0: mouseDown = 0 IF vWatchPanel.draggingPanel THEN vWatchPanel.draggingPanel = 0: mouseDown = 0
IF vWatchPanel.resizingPanel THEN vWatchPanel.resizingPanel = 0: mouseDown = 0 IF vWatchPanel.resizingPanel THEN vWatchPanel.resizingPanel = 0: mouseDown = 0
IF vWatchPanel.closingPanel AND (mX = mouseDownOnX AND mY = mouseDownOnY) THEN IF vWatchPanel.closingPanel AND (mX = mouseDownOnX AND mY = mouseDownOnY) THEN
@ -6780,6 +6873,20 @@ SUB DebugMode
mouseDown = 0 mouseDown = 0
draggingVThumb = 0 draggingVThumb = 0
draggingHThumb = 0 draggingHThumb = 0
IF mouseDownOnButton > 0 AND mX = mouseDownOnX AND mY = mouseDownOnY THEN
SELECT CASE mouseDownOnButton
CASE 1: mouseDownOnButton = 0: mouseDown = 0: GOTO F4
CASE 2: mouseDownOnButton = 0: mouseDown = 0: GOTO F5
CASE 3: mouseDownOnButton = 0: mouseDown = 0: GOTO F6
CASE 4: mouseDownOnButton = 0: mouseDown = 0: GOTO F7
CASE 5: mouseDownOnButton = 0: mouseDown = 0: GOTO F8
CASE 6: mouseDownOnButton = 0: mouseDown = 0: GOTO F9
CASE 7: mouseDownOnButton = 0: mouseDown = 0: GOTO F10
CASE 8: mouseDownOnButton = 0: mouseDown = 0: GOTO F12
END SELECT
END IF
IF (mX > 1 AND mX <= 1 + maxLineNumberLength AND mY > 2 AND mY < (idewy - 5) AND ShowLineNumbers) OR _ IF (mX > 1 AND mX <= 1 + maxLineNumberLength AND mY > 2 AND mY < (idewy - 5) AND ShowLineNumbers) OR _
(mX = 1 AND mY > 2 AND mY < (idewy - 5) AND ShowLineNumbers = 0) THEN (mX = 1 AND mY > 2 AND mY < (idewy - 5) AND ShowLineNumbers = 0) THEN
'Inside the editor/line numbers 'Inside the editor/line numbers
@ -6856,11 +6963,8 @@ SUB DebugMode
UpdateStatusArea: UpdateStatusArea:
IF _WINDOWHASFOCUS THEN IF _WINDOWHASFOCUS THEN
IF noFocusMessage THEN IF noFocusMessage THEN
clearStatusWindow 2
clearStatusWindow 3
setStatusMessage 2, "<F4 = Add Watch> <F5 = Run> <F6 = Step Out> <F7 = Step Over> <F8 = Step Into>", 15
setStatusMessage 3, "<F9 = Toggle Breakpoint> <F10 = Clear all breakpoints> <F12 = Call Stack>", 15
UpdateMenuHelpLine "Right-click the code for more options; hit ESC to abort." UpdateMenuHelpLine "Right-click the code for more options; hit ESC to abort."
GOSUB UpdateButtons
noFocusMessage = 0 noFocusMessage = 0
END IF END IF
ELSE ELSE
@ -6963,6 +7067,7 @@ SUB DebugMode
END IF END IF
GOSUB UpdateDisplay GOSUB UpdateDisplay
CASE 15872 'F4 CASE 15872 'F4
F4:
IF PauseMode = 0 THEN IF PauseMode = 0 THEN
cmd$ = "break" cmd$ = "break"
PauseMode = -1 PauseMode = -1
@ -6976,12 +7081,14 @@ SUB DebugMode
vWatchPanel.h = totalVisibleVariables + 2 vWatchPanel.h = totalVisibleVariables + 2
IF vWatchPanel.h > idewy - 10 THEN vWatchPanel.h = idewy - 10 IF vWatchPanel.h > idewy - 10 THEN vWatchPanel.h = idewy - 10
IF vWatchPanel.h < 5 THEN vWatchPanel.h = 5 IF vWatchPanel.h < 5 THEN vWatchPanel.h = 5
GOTO requestVariableValues
END IF END IF
PCOPY 3, 0: SCREEN , , 3, 0 PCOPY 3, 0: SCREEN , , 3, 0
WHILE _MOUSEINPUT: WEND WHILE _MOUSEINPUT: WEND
GOSUB UpdateDisplay GOSUB UpdateDisplay
END IF END IF
CASE 16128 'F5 CASE 16128 'F5
F5:
requestContinue: requestContinue:
PauseMode = 0 PauseMode = 0
debugnextline = 0 debugnextline = 0
@ -6992,6 +7099,7 @@ SUB DebugMode
GOSUB UpdateDisplay GOSUB UpdateDisplay
dummy = DarkenFGBG(1) dummy = DarkenFGBG(1)
CASE 16384 'F6 CASE 16384 'F6
F6:
requestStepOut: requestStepOut:
IF PauseMode THEN IF PauseMode THEN
PauseMode = 0 PauseMode = 0
@ -7002,6 +7110,7 @@ SUB DebugMode
dummy = DarkenFGBG(1) dummy = DarkenFGBG(1)
END IF END IF
CASE 16640 'F7 CASE 16640 'F7
F7:
requestStepOver: requestStepOver:
IF PauseMode THEN IF PauseMode THEN
cmd$ = "step over" cmd$ = "step over"
@ -7012,6 +7121,7 @@ SUB DebugMode
dummy = DarkenFGBG(1) dummy = DarkenFGBG(1)
END IF END IF
CASE 16896 'F8 CASE 16896 'F8
F8:
IF PauseMode = 0 THEN IF PauseMode = 0 THEN
requestPause: requestPause:
cmd$ = "break" cmd$ = "break"
@ -7026,6 +7136,7 @@ SUB DebugMode
setStatusMessage 1, "Paused.", 2 setStatusMessage 1, "Paused.", 2
IF IdeDebugMode = 2 THEN RETURN IF IdeDebugMode = 2 THEN RETURN
CASE 17152 'F9 CASE 17152 'F9
F9:
requestToggleBreakpoint: requestToggleBreakpoint:
IF PauseMode THEN IF PauseMode THEN
IdeBreakpoints(idecy) = NOT IdeBreakpoints(idecy) IdeBreakpoints(idecy) = NOT IdeBreakpoints(idecy)
@ -7040,6 +7151,7 @@ SUB DebugMode
GOSUB UpdateDisplay GOSUB UpdateDisplay
END IF END IF
CASE 17408 'F10 CASE 17408 'F10
F10:
IF _KEYDOWN(100306) OR _KEYDOWN(100305) THEN IF _KEYDOWN(100306) OR _KEYDOWN(100305) THEN
requestUnskipAllLines: requestUnskipAllLines:
REDIM IdeSkipLines(iden) AS _BYTE REDIM IdeSkipLines(iden) AS _BYTE
@ -7053,6 +7165,7 @@ SUB DebugMode
END IF END IF
GOSUB UpdateDisplay GOSUB UpdateDisplay
CASE 34304 'F12 CASE 34304 'F12
F12:
IF PauseMode THEN IF PauseMode THEN
requestCallStack: requestCallStack:
cmd$ = "call stack" cmd$ = "call stack"
@ -7087,10 +7200,10 @@ SUB DebugMode
IF callStackLength = -1 THEN IF callStackLength = -1 THEN
callStackLength = 0 callStackLength = 0
clearStatusWindow 0 clearStatusWindow 0
setStatusMessage 1, "Error retrieving call stack.", 2 setStatusMessage 1, "Error retrieving call stack.", 4
ELSEIF callStackLength = 0 THEN ELSEIF callStackLength = 0 THEN
clearStatusWindow 0 clearStatusWindow 0
setStatusMessage 1, "No call stack log available.", 2 setStatusMessage 1, "No call stack log available.", 4
END IF END IF
END IF END IF
noFocusMessage = NOT noFocusMessage noFocusMessage = NOT noFocusMessage
@ -7162,6 +7275,7 @@ SUB DebugMode
'request variables 'request variables
IF LEN(variableWatchList$) THEN IF LEN(variableWatchList$) THEN
requestVariableValues:
temp$ = MID$(variableWatchList$, 5) temp$ = MID$(variableWatchList$, 5)
DO WHILE LEN(temp$) DO WHILE LEN(temp$)
tempIndex& = CVL(LEFT$(temp$, 4)) tempIndex& = CVL(LEFT$(temp$, 4))
@ -7216,8 +7330,8 @@ SUB DebugMode
CASE "SINGLE": recvData$ = STR$(_CV(SINGLE, recvData$)) CASE "SINGLE": recvData$ = STR$(_CV(SINGLE, recvData$))
CASE "DOUBLE": recvData$ = STR$(_CV(DOUBLE, recvData$)) CASE "DOUBLE": recvData$ = STR$(_CV(DOUBLE, recvData$))
CASE "_FLOAT": recvData$ = STR$(_CV(_FLOAT, recvData$)) CASE "_FLOAT": recvData$ = STR$(_CV(_FLOAT, recvData$))
CASE "_OFFSET": 'TODO CASE "_OFFSET": recvData$ = STR$(_CV(_OFFSET, recvData$))
CASE "_UNSIGNED _OFFSET": 'TODO CASE "_UNSIGNED _OFFSET": recvData$ = STR$(_CV(_UNSIGNED _OFFSET, recvData$))
CASE "STRING" CASE "STRING"
IF sequence% = 1 THEN IF sequence% = 1 THEN
IF LEN(dummy%&) = 8 THEN IF LEN(dummy%&) = 8 THEN
@ -7262,7 +7376,7 @@ SUB DebugMode
GOSUB UpdateDisplay GOSUB UpdateDisplay
clearStatusWindow 1 clearStatusWindow 1
COLOR , 4 COLOR , 4
setStatusMessage 1, "Error occurred on line" + STR$(l), 13 setStatusMessage 1, "Error occurred on line" + STR$(l), 15
BypassRequestCallStack = -1 BypassRequestCallStack = -1
PauseMode = -1 PauseMode = -1
CASE "call stack size" CASE "call stack size"
@ -7286,6 +7400,7 @@ SUB DebugMode
END IF END IF
END SELECT END SELECT
IF _WINDOWHASFOCUS THEN GOSUB UpdateButtons
_LIMIT 100 _LIMIT 100
LOOP LOOP
@ -7326,6 +7441,22 @@ SUB DebugMode
PCOPY 3, 0 PCOPY 3, 0
RETURN RETURN
UpdateButtons:
FOR i = 1 TO UBOUND(Button)
IF mY = Button(i).y AND mX >= Button(i).x AND mX <= Button(i).x + Button(i).w AND _
vWatchPanel.draggingPanel = 0 AND vWatchPanel.resizingPanel = 0 THEN
COLOR 0, 7
temp$ = ""
ELSE
COLOR 13, 1
temp$ = " "
END IF
_PRINTSTRING (Button(i).x, Button(i).y), Button(i).Caption + temp$
NEXT
PCOPY 3, 0
RETURN
END SUB END SUB
Function map! (value!, minRange!, maxRange!, newMinRange!, newMaxRange!) Function map! (value!, minRange!, maxRange!, newMinRange!, newMaxRange!)
@ -7451,8 +7582,7 @@ FUNCTION idevariablewatchbox(currentScope$)
l$ = l$ + CHR$(16) + " " l$ = l$ + CHR$(16) + " "
END IF END IF
text$ = usedVariableList(x).name + CHR$(16) + CHR$(2) text$ = usedVariableList(x).name + CHR$(16) + CHR$(2) + " "
IF usedVariableList(x).used = 0 THEN someUnusedVars = -1: text$ = text$ + "*" ELSE text$ = text$ + " "
text$ = text$ + SPACE$(maxVarLen - LEN(usedVariableList(x).name)) text$ = text$ + SPACE$(maxVarLen - LEN(usedVariableList(x).name))
text$ = text$ + " " + usedVariableList(x).varType + SPACE$(maxTypeLen - LEN(usedVariableList(x).varType)) text$ = text$ + " " + usedVariableList(x).varType + SPACE$(maxTypeLen - LEN(usedVariableList(x).varType))
@ -7481,20 +7611,24 @@ FUNCTION idevariablewatchbox(currentScope$)
IF dialogHeight > idewy + idesubwindow - 6 THEN IF dialogHeight > idewy + idesubwindow - 6 THEN
dialogHeight = idewy + idesubwindow - 6 dialogHeight = idewy + idesubwindow - 6
END IF END IF
IF dialogHeight < 6 THEN dialogHeight = 6
idepar p, idewx - 8, dialogHeight, "Watch List" dialogWidth = 6 + maxModuleNameLen + maxVarLen + maxTypeLen + 20
IF dialogWidth < 60 THEN dialogWidth = 60
IF dialogWidth > idewx - 8 THEN dialogWidth = idewx - 8
idepar p, dialogWidth, dialogHeight, "Watch List"
i = i + 1: varListBox = i i = i + 1: varListBox = i
o(varListBox).typ = 2 o(varListBox).typ = 2
o(varListBox).y = 2 o(varListBox).y = 2
o(varListBox).w = idewx - 12: o(i).h = dialogHeight - 4 o(varListBox).w = dialogWidth - 4: o(i).h = dialogHeight - 4
o(varListBox).txt = idenewtxt(l$) o(varListBox).txt = idenewtxt(l$)
o(varListBox).sel = 1 o(varListBox).sel = 1
o(varListBox).nam = idenewtxt("Variable List (" + LTRIM$(STR$(totalVisibleVariables)) + ")") o(varListBox).nam = idenewtxt("Variable List (" + LTRIM$(STR$(totalVisibleVariables)) + ")")
i = i + 1: buttonSet = i i = i + 1: buttonSet = i
o(buttonSet).typ = 3 o(buttonSet).typ = 3
o(i).x = p.x + p.w - 45
o(buttonSet).y = dialogHeight o(buttonSet).y = dialogHeight
o(buttonSet).txt = idenewtxt("#Add All" + sep + "#Remove All" + sep + "#Close") o(buttonSet).txt = idenewtxt("#Add All" + sep + "#Remove All" + sep + "#Close")
@ -7526,10 +7660,6 @@ FUNCTION idevariablewatchbox(currentScope$)
'-------- custom display changes -------- '-------- custom display changes --------
COLOR 0, 7: _PRINTSTRING (p.x + 2, p.y + 1), "Double-click on a variable to add it to the watch list" COLOR 0, 7: _PRINTSTRING (p.x + 2, p.y + 1), "Double-click on a variable to add it to the watch list"
IF someUnusedVars THEN
COLOR 2
_PRINTSTRING (p.x + 2, p.y + p.h), "* unused"
END IF
'-------- end of custom display changes -------- '-------- end of custom display changes --------
@ -7656,19 +7786,34 @@ FUNCTION idecallstackbox
'-------- init -------- '-------- init --------
i = 0
dialogHeight = callStackLength + 4 dialogHeight = callStackLength + 4
IF dialogHeight > idewy + idesubwindow - 6 THEN IF dialogHeight > idewy + idesubwindow - 6 THEN
dialogHeight = idewy + idesubwindow - 6 dialogHeight = idewy + idesubwindow - 6
END IF END IF
idepar p, idewx - 8, dialogHeight, "$DEBUG MODE" dialogWidth = 52
temp$ = callstacklist$
DO
i = INSTR(temp$, sep)
IF i THEN
temp2$ = LEFT$(temp$, i - 1)
temp$ = MID$(temp$, i + 1)
IF LEN(temp2$) + 6 > dialogWidth THEN dialogWidth = LEN(temp2$) + 6
ELSE
IF LEN(temp$) + 6 > dialogWidth THEN dialogWidth = LEN(temp$) + 6
EXIT DO
END IF
LOOP
IF dialogWidth > idewx - 8 THEN dialogWidth = idewx - 8
idepar p, dialogWidth, dialogHeight, "$DEBUG MODE"
i = 0
i = i + 1 i = i + 1
o(i).typ = 2 o(i).typ = 2
o(i).y = 2 o(i).y = 2
o(i).w = idewx - 12: o(i).h = dialogHeight - 4 o(i).w = dialogWidth - 4: o(i).h = dialogHeight - 4
o(i).txt = idenewtxt(callstacklist$) o(i).txt = idenewtxt(callstacklist$)
o(i).sel = callStackLength o(i).sel = callStackLength
o(i).nam = idenewtxt("Call Stack") o(i).nam = idenewtxt("Call Stack")
@ -7704,7 +7849,7 @@ FUNCTION idecallstackbox
'-------- end of generic display dialog box & objects -------- '-------- end of generic display dialog box & objects --------
'-------- custom display changes -------- '-------- custom display changes --------
COLOR 0, 7: _PRINTSTRING (p.x + 2, p.y + 1), "These are the most recent sub/function calls in your program:" COLOR 0, 7: _PRINTSTRING (p.x + 2, p.y + 1), "Most recent sub/function calls in your program:"
'-------- end of custom display changes -------- '-------- end of custom display changes --------
@ -9035,7 +9180,7 @@ END SUB
SUB idegotoline (i) SUB idegotoline (i)
IF idel = i THEN EXIT SUB IF idel = i THEN EXIT SUB
IF i < 1 THEN ERROR 5 IF i < 1 THEN i = 1
'scan backwards 'scan backwards
IF i < idel THEN IF i < idel THEN
DO DO
@ -10619,7 +10764,6 @@ FUNCTION idesubs$
SortedSubsFlag = idesortsubs SortedSubsFlag = idesortsubs
SubClosed = 0 SubClosed = 0
FOR y = 1 TO iden FOR y = 1 TO iden
a$ = idegetline(y) a$ = idegetline(y)
IF SubClosed = 0 THEN ModuleSize = ModuleSize + 1 IF SubClosed = 0 THEN ModuleSize = ModuleSize + 1
@ -10770,6 +10914,8 @@ FUNCTION idesubs$
END IF END IF
'build lists 'build lists
dialogWidth = 50
argsLength = 2
FOR x = 1 TO TotalSUBs FOR x = 1 TO TotalSUBs
n$ = SubNames(x) n$ = SubNames(x)
IF LEN(n$) > maxModuleNameLen THEN IF LEN(n$) > maxModuleNameLen THEN
@ -10779,6 +10925,7 @@ FUNCTION idesubs$
END IF END IF
args$ = Args(x) args$ = Args(x)
IF LEN(args$) > argsLength THEN argsLength = LEN(args$)
IF LEN(args$) <= (idewx - 41) THEN IF LEN(args$) <= (idewx - 41) THEN
args$ = args$ + SPACE$((idewx - 41) - LEN(args$)) args$ = args$ + SPACE$((idewx - 41) - LEN(args$))
ELSE ELSE
@ -10843,13 +10990,17 @@ FUNCTION idesubs$
IF dialogHeight > idewy + idesubwindow - 6 THEN IF dialogHeight > idewy + idesubwindow - 6 THEN
dialogHeight = idewy + idesubwindow - 6 dialogHeight = idewy + idesubwindow - 6
END IF END IF
idepar p, idewx - 8, dialogHeight, "SUBs"
IF argsLength + maxModuleNameLen + maxLineCountSpace + 20 > dialogWidth THEN dialogWidth = argsLength + maxModuleNameLen + maxLineCountSpace + 20
IF dialogWidth > idewx - 8 THEN dialogWidth = idewx - 8
idepar p, dialogWidth, dialogHeight, "SUBs"
i = i + 1 i = i + 1
o(i).typ = 2 o(i).typ = 2
o(i).y = 1 o(i).y = 1
'68 '68
o(i).w = idewx - 12: o(i).h = dialogHeight - 3 o(i).w = dialogWidth - 4: o(i).h = dialogHeight - 3
IF SortedSubsFlag = 0 THEN IF SortedSubsFlag = 0 THEN
IF IDESubsLength THEN IF IDESubsLength THEN
o(i).txt = idenewtxt(lSized$) o(i).txt = idenewtxt(lSized$)
@ -10903,8 +11054,8 @@ FUNCTION idesubs$
i = i + 1 i = i + 1
o(i).typ = 3 o(i).typ = 3
o(i).x = p.x + p.w - 26
o(i).w = 26 o(i).w = 26
o(i).x = dialogWidth - 22
o(i).y = dialogHeight o(i).y = dialogHeight
IF IdeDebugMode = 0 THEN IF IdeDebugMode = 0 THEN
o(i).txt = idenewtxt("#Edit" + sep + "#Cancel") o(i).txt = idenewtxt("#Edit" + sep + "#Cancel")
@ -11125,8 +11276,10 @@ FUNCTION idelanguagebox
'generate list of available code pages 'generate list of available code pages
l$ = idecpname(1) l$ = idecpname(1)
dialogWidth = LEN(l$)
FOR x = 2 TO idecpnum FOR x = 2 TO idecpnum
l$ = l$ + sep + idecpname(x) l$ = l$ + sep + idecpname(x)
IF LEN(idecpname(x)) > dialogWidth THEN dialogWidth = LEN(idecpname(x))
NEXT NEXT
l$ = UCASE$(l$) l$ = UCASE$(l$)
@ -11135,12 +11288,15 @@ FUNCTION idelanguagebox
IF dialogHeight > idewy + idesubwindow - 6 THEN IF dialogHeight > idewy + idesubwindow - 6 THEN
dialogHeight = idewy + idesubwindow - 6 dialogHeight = idewy + idesubwindow - 6
END IF END IF
idepar p, idewx - 8, dialogHeight, "Language" IF dialogWidth < 60 THEN dialogWidth = 60
IF dialogWidth > idewx - 8 THEN dialogWidth = idewx - 8
idepar p, dialogWidth, dialogHeight, "Language"
i = i + 1 i = i + 1
o(i).typ = 2 o(i).typ = 2
o(i).y = 2 o(i).y = 2
o(i).w = idewx - 12: o(i).h = dialogheight - 4 o(i).w = dialogWidth - 4: o(i).h = dialogheight - 4
o(i).txt = idenewtxt(l$) o(i).txt = idenewtxt(l$)
o(i).sel = 1: IF idecpindex THEN o(i).sel = idecpindex o(i).sel = 1: IF idecpindex THEN o(i).sel = idecpindex
o(i).nam = idenewtxt("Code Pages") o(i).nam = idenewtxt("Code Pages")
@ -11290,6 +11446,7 @@ FUNCTION idewarningbox
NEXT NEXT
'build list 'build list
dialogWidth = 60
FOR x = 1 TO warningListItems FOR x = 1 TO warningListItems
IF warningLines(x) = 0 THEN IF warningLines(x) = 0 THEN
l$ = l$ + warning$(x) l$ = l$ + warning$(x)
@ -11307,6 +11464,7 @@ FUNCTION idewarningbox
END IF END IF
treeConnection = LEN(l$) + 1 treeConnection = LEN(l$) + 1
text$ = warning$(x) text$ = warning$(x)
IF LEN(text$) + 10 > dialogWidth THEN dialogWidth = LEN(text$) + 10
IF LEN(text$) THEN IF LEN(text$) THEN
l$ = l$ + CHR$(195) + CHR$(196) + l3$ + ": " + text$ l$ = l$ + CHR$(195) + CHR$(196) + l3$ + ": " + text$
ELSE ELSE
@ -11326,12 +11484,14 @@ FUNCTION idewarningbox
dialogHeight = idewy + idesubwindow - 6 dialogHeight = idewy + idesubwindow - 6
END IF END IF
idepar p, idewx - 8, dialogHeight, "Compilation status" IF dialogWidth > idewx - 8 THEN dialogWidth = idewx - 8
idepar p, dialogWidth, dialogHeight, "Compilation status"
i = i + 1 i = i + 1
o(i).typ = 2 o(i).typ = 2
o(i).y = 2 o(i).y = 2
o(i).w = idewx - 12: o(i).h = dialogHeight - 4 o(i).w = dialogWidth - 4: o(i).h = dialogHeight - 4
o(i).txt = idenewtxt(l$) o(i).txt = idenewtxt(l$)
o(i).sel = 1 o(i).sel = 1
o(i).nam = idenewtxt("Warnings (" + LTRIM$(STR$(totalWarnings)) + ")") o(i).nam = idenewtxt("Warnings (" + LTRIM$(STR$(totalWarnings)) + ")")
@ -12628,7 +12788,8 @@ FUNCTION ideadvancedbox
o(i).y = y o(i).y = y
o(i).nam = idenewtxt("Embed C++ debug information into executable") o(i).nam = idenewtxt("Embed C++ debug information into executable")
o(i).sel = idedebuginfo o(i).sel = idedebuginfo
y = y + 1: Direct_Text$(y) = " " + CHR$(254) + " Investigate crashes/freezes at C++ (not QB64) code level" y = y + 1: Direct_Text$(y) = " " + CHR$(254) + " This setting is not required for $DEBUG mode"
y = y + 1: Direct_Text$(y) = " " + CHR$(254) + " Use it to investigate crashes/freezes at C++ (not QB64) code level"
y = y + 1: Direct_Text$(y) = " " + CHR$(254) + " Use internal/temp/debug batch file to debug your executable" y = y + 1: Direct_Text$(y) = " " + CHR$(254) + " Use internal/temp/debug batch file to debug your executable"
y = y + 1: Direct_Text$(y) = " " + CHR$(254) + " Increases executable size" y = y + 1: Direct_Text$(y) = " " + CHR$(254) + " Increases executable size"
y = y + 1: Direct_Text$(y) = " " + CHR$(254) + " Makes public the names of variables in your program's code" y = y + 1: Direct_Text$(y) = " " + CHR$(254) + " Makes public the names of variables in your program's code"
@ -12737,42 +12898,12 @@ FUNCTION ideadvancedbox
WriteConfigSetting generalSettingsSection$, "DebugInfo", "False" + DebugInfoIniWarning$ WriteConfigSetting generalSettingsSection$, "DebugInfo", "False" + DebugInfoIniWarning$
END IF END IF
Include_GDB_Debugging_Info = idedebuginfo Include_GDB_Debugging_Info = idedebuginfo
IF os$ = "WIN" THEN purgeprecompiledcontent
CHDIR "internal\c"
SHELL _HIDE "cmd /c purge_all_precompiled_content_win.bat"
CHDIR "..\.."
END IF END IF
IF os$ = "LNX" THEN
CHDIR "./internal/c"
IF INSTR(_OS$, "[MACOSX]") THEN
SHELL _HIDE "./purge_all_precompiled_content_osx.command"
ELSE
SHELL _HIDE "./purge_all_precompiled_content_lnx.sh"
END IF
CHDIR "../.."
END IF
idechangemade = 1 'force recompilation
END IF
'...
EXIT FUNCTION EXIT FUNCTION
END IF END IF
'end of custom controls 'end of custom controls
mousedown = 0 mousedown = 0
@ -15023,13 +15154,22 @@ FUNCTION iderecentbox$
l$ = "" l$ = ""
dialogWidth = 72
totalRecent = 0
fh = FREEFILE fh = FREEFILE
OPEN ".\internal\temp\recent.bin" FOR BINARY AS #fh: a$ = SPACE$(LOF(fh)): GET #fh, , a$ OPEN ".\internal\temp\recent.bin" FOR BINARY AS #fh: a$ = SPACE$(LOF(fh)): GET #fh, , a$
a$ = RIGHT$(a$, LEN(a$) - 2) a$ = RIGHT$(a$, LEN(a$) - 2)
REDIM tempList$(100)
DO WHILE LEN(a$) DO WHILE LEN(a$)
ai = INSTR(a$, CRLF) ai = INSTR(a$, CRLF)
IF ai THEN IF ai THEN
f$ = LEFT$(a$, ai - 1): IF ai = LEN(a$) - 1 THEN a$ = "" ELSE a$ = RIGHT$(a$, LEN(a$) - ai - 3) f$ = LEFT$(a$, ai - 1): IF ai = LEN(a$) - 1 THEN a$ = "" ELSE a$ = RIGHT$(a$, LEN(a$) - ai - 3)
IF LEN(f$) + 6 > dialogWidth THEN dialogWidth = LEN(f$) + 6
totalRecent = totalRecent + 1
IF totalRecent > UBOUND(tempList$) THEN
REDIM _PRESERVE tempList$(UBOUND(tempList$) + 100)
END IF
tempList$(totalRecent) = f$
IF LEN(l$) THEN l$ = l$ + sep + f$ ELSE l$ = f$ IF LEN(l$) THEN l$ = l$ + sep + f$ ELSE l$ = f$
END IF END IF
LOOP LOOP
@ -15037,21 +15177,27 @@ FUNCTION iderecentbox$
'72,19 '72,19
i = 0 i = 0
idepar p, idewx - 8, idewy + idesubwindow - 6, "Open" dialogHeight = (totalRecent) + 3
IF dialogHeight > idewy + idesubwindow - 6 THEN
dialogHeight = idewy + idesubwindow - 6
END IF
IF dialogWidth > idewx - 8 THEN dialogWidth = idewx - 8
idepar p, dialogWidth, dialogHeight, "Open"
i = i + 1 i = i + 1
o(i).typ = 2 o(i).typ = 2
o(i).y = 1 o(i).y = 1
'68 '68
o(i).w = idewx - 12: o(i).h = idewy + idesubwindow - 9 o(i).w = dialogWidth - 4: o(i).h = dialogHeight - 3
o(i).txt = idenewtxt(l$) o(i).txt = idenewtxt(l$)
o(i).sel = 1 o(i).sel = 1
o(i).nam = idenewtxt("Recent Programs") o(i).nam = idenewtxt("Recent Programs")
i = i + 1 i = i + 1
o(i).typ = 3 o(i).typ = 3
o(i).y = idewy + idesubwindow - 6 o(i).y = dialogHeight
o(i).txt = idenewtxt("#OK" + sep + "#Cancel" + sep + "Clear #list" + sep + "#Remove broken links") o(i).txt = idenewtxt("#Open" + sep + "#Cancel" + sep + "Clear #list" + sep + "#Remove broken links")
o(i).dft = 1 o(i).dft = 1
'-------- end of init -------- '-------- end of init --------
@ -15133,7 +15279,7 @@ FUNCTION iderecentbox$
END IF END IF
IF (K$ = CHR$(13) AND focus = 1) OR (focus = 2 AND info <> 0) OR (info = 1 AND focus = 1) THEN IF (K$ = CHR$(13) AND focus = 1) OR (focus = 2 AND info <> 0) OR (info = 1 AND focus = 1) THEN
f$ = idetxt(o(1).stx) f$ = tempList$(ABS(o(1).sel))
iderecentbox$ = f$ iderecentbox$ = f$
EXIT FUNCTION EXIT FUNCTION
END IF END IF
@ -15246,6 +15392,8 @@ SUB IdeMakeContextualMenu
menu$(m, i) = "-": i = i + 1 menu$(m, i) = "-": i = i + 1
menu$(m, i) = "SUBs... F2": i = i + 1 menu$(m, i) = "SUBs... F2": i = i + 1
menuDesc$(m, i - 1) = "Displays a list of SUB/FUNCTION procedures" menuDesc$(m, i - 1) = "Displays a list of SUB/FUNCTION procedures"
menu$(m, i) = "#Watch List... F4": i = i + 1
menuDesc$(m, i - 1) = "Adds variables to watch list"
menu$(m, i) = "Call Stack... F12": i = i + 1 menu$(m, i) = "Call Stack... F12": i = i + 1
menuDesc$(m, i - 1) = "Displays the call stack of the current program's execution" menuDesc$(m, i - 1) = "Displays the call stack of the current program's execution"
menu$(m, i) = "-": i = i + 1 menu$(m, i) = "-": i = i + 1
@ -16950,3 +17098,22 @@ FUNCTION isnumber (__a$)
END FUNCTION END FUNCTION
'$INCLUDE:'wiki\wiki_methods.bas' '$INCLUDE:'wiki\wiki_methods.bas'
SUB purgeprecompiledcontent
IF os$ = "WIN" THEN
CHDIR "internal\c"
SHELL _HIDE "cmd /c purge_all_precompiled_content_win.bat"
CHDIR "..\.."
END IF
IF os$ = "LNX" THEN
CHDIR "./internal/c"
IF INSTR(_OS$, "[MACOSX]") THEN
SHELL _HIDE "./purge_all_precompiled_content_osx.command"
ELSE
SHELL _HIDE "./purge_all_precompiled_content_lnx.sh"
END IF
CHDIR "../.."
END IF
idechangemade = 1 'force recompilation
END SUB

View file

@ -348,6 +348,19 @@ SUB WikiParse (a$)
GOTO Special GOTO Special
END IF END IF
s$ = "&lt;nowiki>"
IF c$(LEN(s$)) = s$ THEN
i = i + LEN(s$) - 1
GOTO Special
END IF
s$ = "&lt;/nowiki>"
IF c$(LEN(s$)) = s$ THEN
i = i + LEN(s$) - 1
GOTO Special
END IF
s$ = "&lt;p style=" s$ = "&lt;p style="
IF c$(LEN(s$)) = s$ THEN IF c$(LEN(s$)) = s$ THEN
i = i + LEN(s$) - 1 i = i + LEN(s$) - 1

View file

@ -3440,7 +3440,7 @@ DO
inclinenump$ = inclinenump$ + "," + CHR$(34) + thisincname$ + CHR$(34) inclinenump$ = inclinenump$ + "," + CHR$(34) + thisincname$ + CHR$(34)
END IF END IF
IF NoChecks = 0 THEN IF NoChecks = 0 THEN
IF vWatchOn THEN temp$ = vWatchErrorCall$ ELSE temp$ = "" IF vWatchOn AND inclinenumber(inclevel) = 0 THEN temp$ = vWatchErrorCall$ ELSE temp$ = ""
PRINT #12, "if(qbevent){" + temp$ + "evnt(" + str2$(linenumber) + inclinenump$ + ");r=0;}" PRINT #12, "if(qbevent){" + temp$ + "evnt(" + str2$(linenumber) + inclinenump$ + ");r=0;}"
END IF END IF
IF n = 1 THEN GOTO finishednonexec IF n = 1 THEN GOTO finishednonexec
@ -3501,7 +3501,7 @@ DO
inclinenump$ = inclinenump$ + "," + CHR$(34) + thisincname$ + CHR$(34) inclinenump$ = inclinenump$ + "," + CHR$(34) + thisincname$ + CHR$(34)
END IF END IF
IF NoChecks = 0 THEN IF NoChecks = 0 THEN
IF vWatchOn THEN temp$ = vWatchErrorCall$ ELSE temp$ = "" IF vWatchOn AND inclinenumber(inclevel) = 0 THEN temp$ = vWatchErrorCall$ ELSE temp$ = ""
PRINT #12, "if(qbevent){" + temp$ + "evnt(" + str2$(linenumber) + inclinenump$ + ");r=0;}" PRINT #12, "if(qbevent){" + temp$ + "evnt(" + str2$(linenumber) + inclinenump$ + ");r=0;}"
END IF END IF
entireline$ = RIGHT$(entireline$, LEN(entireline$) - x3): u$ = UCASE$(entireline$) entireline$ = RIGHT$(entireline$, LEN(entireline$) - x3): u$ = UCASE$(entireline$)
@ -8879,7 +8879,7 @@ DO
thisincname$ = MID$(incname$(inclevel), LEN(thisincname$) + 1) thisincname$ = MID$(incname$(inclevel), LEN(thisincname$) + 1)
inclinenump$ = inclinenump$ + "," + CHR$(34) + thisincname$ + CHR$(34) inclinenump$ = inclinenump$ + "," + CHR$(34) + thisincname$ + CHR$(34)
END IF END IF
IF vWatchOn THEN temp$ = vWatchErrorCall$ ELSE temp$ = "" IF vWatchOn AND inclinenumber(inclevel) = 0 THEN temp$ = vWatchErrorCall$ ELSE temp$ = ""
PRINT #12, "if(qbevent){" + temp$ + "evnt(" + str2$(linenumber) + inclinenump$ + ");}" 'non-resumable error check (cannot exit without handling errors) PRINT #12, "if(qbevent){" + temp$ + "evnt(" + str2$(linenumber) + inclinenump$ + ");}" 'non-resumable error check (cannot exit without handling errors)
PRINT #12, "exit_code=" + e$ + ";" PRINT #12, "exit_code=" + e$ + ";"
l$ = l$ + sp + l2$ l$ = l$ + sp + l2$
@ -8903,7 +8903,7 @@ DO
thisincname$ = MID$(incname$(inclevel), LEN(thisincname$) + 1) thisincname$ = MID$(incname$(inclevel), LEN(thisincname$) + 1)
inclinenump$ = inclinenump$ + "," + CHR$(34) + thisincname$ + CHR$(34) inclinenump$ = inclinenump$ + "," + CHR$(34) + thisincname$ + CHR$(34)
END IF END IF
IF vWatchOn = 1 AND NoChecks = 0 THEN temp$ = vWatchErrorCall$ ELSE temp$ = "" IF vWatchOn = 1 AND NoChecks = 0 AND inclinenumber(inclevel) = 0 THEN temp$ = vWatchErrorCall$ ELSE temp$ = ""
PRINT #12, "if(qbevent){" + temp$ + "evnt(" + str2$(linenumber) + inclinenump$ + ");}" 'non-resumable error check (cannot exit without handling errors) PRINT #12, "if(qbevent){" + temp$ + "evnt(" + str2$(linenumber) + inclinenump$ + ");}" 'non-resumable error check (cannot exit without handling errors)
PRINT #12, "exit_code=" + e$ + ";" PRINT #12, "exit_code=" + e$ + ";"
l$ = l$ + sp + l2$ l$ = l$ + sp + l2$
@ -8911,8 +8911,10 @@ DO
IF vWatchOn = 1 THEN IF vWatchOn = 1 THEN
IF inclinenumber(inclevel) = 0 THEN
vWatchAddLabel linenumber, 0 vWatchAddLabel linenumber, 0
PRINT #12, "*__LONG_VWATCH_LINENUMBER= 0; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;" END IF
PRINT #12, "*__LONG_VWATCH_LINENUMBER= 0; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars);"
END IF END IF
PRINT #12, "if (sub_gl_called) error(271);" PRINT #12, "if (sub_gl_called) error(271);"
PRINT #12, "close_program=1;" PRINT #12, "close_program=1;"
@ -11191,7 +11193,7 @@ DO
inclinenump$ = inclinenump$ + "," + CHR$(34) + thisincname$ + CHR$(34) inclinenump$ = inclinenump$ + "," + CHR$(34) + thisincname$ + CHR$(34)
END IF END IF
IF NoChecks = 0 THEN IF NoChecks = 0 THEN
IF vWatchOn THEN temp$ = vWatchErrorCall$ ELSE temp$ = "" IF vWatchOn AND inclinenumber(inclevel) = 0 THEN temp$ = vWatchErrorCall$ ELSE temp$ = ""
IF dynscope THEN IF dynscope THEN
dynscope = 0 dynscope = 0
PRINT #12, "if(qbevent){" + temp$ + "evnt(" + str2$(linenumber) + inclinenump$ + ");if(r)goto S_" + str2$(statementn) + ";}" PRINT #12, "if(qbevent){" + temp$ + "evnt(" + str2$(linenumber) + inclinenump$ + ");if(r)goto S_" + str2$(statementn) + ";}"
@ -22803,6 +22805,7 @@ END FUNCTION
SUB xend SUB xend
IF vWatchOn = 1 THEN IF vWatchOn = 1 THEN
'check if closedmain = 0 in case a main module ends in an include.
IF (inclinenumber(inclevel) = 0 OR closedmain = 0) THEN vWatchAddLabel 0, -1 IF (inclinenumber(inclevel) = 0 OR closedmain = 0) THEN vWatchAddLabel 0, -1
PRINT #12, "*__LONG_VWATCH_LINENUMBER= 0; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars);" PRINT #12, "*__LONG_VWATCH_LINENUMBER= 0; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars);"
END IF END IF

View file

@ -404,7 +404,7 @@ id.args = 1
id.arg = MKL$(LONGTYPE - ISPOINTER) id.arg = MKL$(LONGTYPE - ISPOINTER)
id.ret = STRINGTYPE - ISPOINTER id.ret = STRINGTYPE - ISPOINTER
id.specialformat = "[?]" id.specialformat = "[?]"
id.hr_syntax = "_DEVICE$(device_number) id.hr_syntax = "_DEVICE$(device_number)"
regid regid
clearid clearid
@ -415,7 +415,7 @@ id.args = 1
id.arg = MKL$(LONGTYPE - ISPOINTER) id.arg = MKL$(LONGTYPE - ISPOINTER)
id.ret = LONGTYPE - ISPOINTER id.ret = LONGTYPE - ISPOINTER
id.specialformat = "[?]" id.specialformat = "[?]"
id.hr_syntax = "_DEVICEINPUT or _DEVICEINPUT(device_number%) id.hr_syntax = "_DEVICEINPUT or _DEVICEINPUT(device_number%)"
regid regid
clearid clearid
@ -664,7 +664,7 @@ id.args = 4
id.arg = MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) id.arg = MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER)
id.specialformat = "[?,?,?,?]" id.specialformat = "[?,?,?,?]"
id.ret = LONGTYPE - ISPOINTER id.ret = LONGTYPE - ISPOINTER
id.hr_syntax = "_SCREENIMAGE(column1, row1, column2, row2) id.hr_syntax = "_SCREENIMAGE(column1, row1, column2, row2)"
regid regid
@ -1084,7 +1084,7 @@ id.args = 2
id.arg = MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER) id.arg = MKL$(LONGTYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER)
id.specialformat = "?[,?]" id.specialformat = "?[,?]"
id.ret = LONGTYPE - ISPOINTER id.ret = LONGTYPE - ISPOINTER
id.hr_syntax = "_COPYIMAGE[(imageHandle&[, mode])] id.hr_syntax = "_COPYIMAGE[(imageHandle&[, mode])]"
regid regid
'IMAGE SELECTION 'IMAGE SELECTION
@ -2410,7 +2410,7 @@ id.args = 7
id.arg = MKL$(FLOATTYPE - ISPOINTER) + MKL$(FLOATTYPE - ISPOINTER) + MKL$(FLOATTYPE - ISPOINTER) + MKL$(ULONGTYPE - ISPOINTER) + MKL$(FLOATTYPE - ISPOINTER) + MKL$(FLOATTYPE - ISPOINTER) + MKL$(FLOATTYPE - ISPOINTER) id.arg = MKL$(FLOATTYPE - ISPOINTER) + MKL$(FLOATTYPE - ISPOINTER) + MKL$(FLOATTYPE - ISPOINTER) + MKL$(ULONGTYPE - ISPOINTER) + MKL$(FLOATTYPE - ISPOINTER) + MKL$(FLOATTYPE - ISPOINTER) + MKL$(FLOATTYPE - ISPOINTER)
id.specialformat = "[{Step}](?,?),?[,[?][,[?][,[?][,?]]]]" id.specialformat = "[{Step}](?,?),?[,[?][,[?][,[?][,?]]]]"
'CIRCLE [STEP] (x!,y!),radius![,[color&] [,[start!] [,[end!] [,aspect!]]]] 'CIRCLE [STEP] (x!,y!),radius![,[color&] [,[start!] [,[end!] [,aspect!]]]]
id.hr_syntax = "CIRCLE [STEP] (x!, y!), radius![, [color&] [, [start!] [, [end!] [, aspect!]]]] id.hr_syntax = "CIRCLE [STEP] (x!, y!), radius![, [color&] [, [start!] [, [end!] [, aspect!]]]]"
regid regid
clearid clearid