mirror of
https://github.com/QB64Official/qb64.git
synced 2024-07-07 23:45:13 +00:00
Adds ability to fetch data from arrays of UDTs.
This commit is contained in:
parent
687276bccd
commit
62f3496c36
|
@ -7,6 +7,7 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
|
||||||
STATIC AS _OFFSET vw_idehwnd
|
STATIC AS _OFFSET vw_idehwnd
|
||||||
STATIC vw_buffer$
|
STATIC vw_buffer$
|
||||||
DIM AS LONG vw_i, vw_tempIndex, vw_localIndex, vw_varSize, vw_cmdsize
|
DIM AS LONG vw_i, vw_tempIndex, vw_localIndex, vw_varSize, vw_cmdsize
|
||||||
|
DIM AS LONG vw_arrayelementsize
|
||||||
DIM AS _OFFSET vw_address, vw_elementoffset, vw_lbound, vw_ubound
|
DIM AS _OFFSET vw_address, vw_elementoffset, vw_lbound, vw_ubound
|
||||||
DIM AS _MEM vw_m, vw_m2
|
DIM AS _MEM vw_m, vw_m2
|
||||||
DIM AS _BYTE vw_isarray
|
DIM AS _BYTE vw_isarray
|
||||||
|
@ -259,16 +260,17 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
|
||||||
vw_isarray = _CV(_BYTE, MID$(vw_value$, 5, 1))
|
vw_isarray = _CV(_BYTE, MID$(vw_value$, 5, 1))
|
||||||
vw_localIndex = CVL(MID$(vw_value$, 6, 4))
|
vw_localIndex = CVL(MID$(vw_value$, 6, 4))
|
||||||
vw_arrayIndex = CVL(MID$(vw_value$, 10, 4))
|
vw_arrayIndex = CVL(MID$(vw_value$, 10, 4))
|
||||||
vw_elementoffset = _CV(_OFFSET, MID$(vw_value$, 14, LEN(vw_elementoffset)))
|
vw_arrayelementsize = CVL(MID$(vw_value$, 14, 4))
|
||||||
vw_varSize = CVL(MID$(vw_value$, 14 + LEN(vw_elementoffset), 4))
|
vw_elementoffset = _CV(_OFFSET, MID$(vw_value$, 18, LEN(vw_elementoffset)))
|
||||||
|
vw_varSize = CVL(MID$(vw_value$, 18 + LEN(vw_elementoffset), 4))
|
||||||
IF vw_varSize = 0 THEN GOTO cmdProcessingDone
|
IF vw_varSize = 0 THEN GOTO cmdProcessingDone
|
||||||
vw_i = CVI(MID$(vw_value$, 18 + LEN(vw_elementoffset), 2))
|
vw_i = CVI(MID$(vw_value$, 22 + LEN(vw_elementoffset), 2))
|
||||||
IF vw_i THEN
|
IF vw_i THEN
|
||||||
vw_scope$ = MID$(vw_value$, 20 + LEN(vw_elementoffset), vw_i)
|
vw_scope$ = MID$(vw_value$, 24 + LEN(vw_elementoffset), vw_i)
|
||||||
vw_i = CVI(MID$(vw_value$, 20 + LEN(vw_elementoffset) + vw_i, 2))
|
vw_i = CVI(MID$(vw_value$, 24 + LEN(vw_elementoffset) + vw_i, 2))
|
||||||
vw_varType$ = RIGHT$(vw_value$, vw_i)
|
vw_varType$ = RIGHT$(vw_value$, vw_i)
|
||||||
ELSE
|
ELSE
|
||||||
vw_i = CVI(MID$(vw_value$, 20 + LEN(vw_elementoffset), 2))
|
vw_i = CVI(MID$(vw_value$, 24 + LEN(vw_elementoffset), 2))
|
||||||
vw_varType$ = RIGHT$(vw_value$, vw_i)
|
vw_varType$ = RIGHT$(vw_value$, vw_i)
|
||||||
END IF
|
END IF
|
||||||
IF vw_cmd$ = "get global var" THEN
|
IF vw_cmd$ = "get global var" THEN
|
||||||
|
@ -312,7 +314,11 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
'this is where we calculate the actual element position in memory
|
'this is where we calculate the actual element position in memory
|
||||||
|
IF vw_arrayelementsize = 0 THEN
|
||||||
vw_address = vw_address + ((vw_arrayIndex - vw_lbound) * vw_varSize)
|
vw_address = vw_address + ((vw_arrayIndex - vw_lbound) * vw_varSize)
|
||||||
|
ELSE
|
||||||
|
vw_address = vw_address + ((vw_arrayIndex - vw_lbound) * vw_arrayelementsize)
|
||||||
|
END IF
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
'vw_address now points to the actual data
|
'vw_address now points to the actual data
|
||||||
|
|
|
@ -7388,16 +7388,26 @@ SUB DebugMode
|
||||||
tempIndex& = CVL(LEFT$(temp$, 4))
|
tempIndex& = CVL(LEFT$(temp$, 4))
|
||||||
tempArrayIndex& = CVL(MID$(temp$, 5, 4))
|
tempArrayIndex& = CVL(MID$(temp$, 5, 4))
|
||||||
temp$ = MID$(temp$, 9)
|
temp$ = MID$(temp$, 9)
|
||||||
cmd$ = ""
|
|
||||||
IF LEN(usedVariableList(tempIndex&).subfunc) = 0 THEN
|
IF LEN(usedVariableList(tempIndex&).subfunc) = 0 THEN
|
||||||
cmd$ = "get global var:"
|
cmd$ = "get global var:"
|
||||||
ELSE
|
ELSE
|
||||||
cmd$ = "get local var:"
|
cmd$ = "get local var:"
|
||||||
END IF
|
END IF
|
||||||
GOSUB GetVarSize
|
GOSUB GetVarSize
|
||||||
IF LEN(cmd$) THEN
|
IF varSize& THEN
|
||||||
cmd$ = cmd$ + MKL$(tempIndex&) + _MK$(_BYTE, usedVariableList(tempIndex&).isarray) + MKL$(usedVariableList(tempIndex&).localIndex) + MKL$(tempArrayIndex&) + _MK$(_OFFSET, usedVariableList(tempIndex&).elementOffset) + MKL$(varSize&) + MKI$(LEN(usedVariableList(tempIndex&).subfunc)) + usedVariableList(tempIndex&).subfunc + MKI$(LEN(varType$)) + varType$
|
cmd$ = cmd$ + MKL$(tempIndex&)
|
||||||
|
cmd$ = cmd$ + _MK$(_BYTE, usedVariableList(tempIndex&).isarray)
|
||||||
|
cmd$ = cmd$ + MKL$(usedVariableList(tempIndex&).localIndex)
|
||||||
|
cmd$ = cmd$ + MKL$(tempArrayIndex&)
|
||||||
|
cmd$ = cmd$ + MKL$(usedVariableList(tempIndex&).arrayElementSize)
|
||||||
|
cmd$ = cmd$ + _MK$(_OFFSET, usedVariableList(tempIndex&).elementOffset)
|
||||||
|
cmd$ = cmd$ + MKL$(varSize&)
|
||||||
|
cmd$ = cmd$ + MKI$(LEN(usedVariableList(tempIndex&).subfunc))
|
||||||
|
cmd$ = cmd$ + usedVariableList(tempIndex&).subfunc
|
||||||
|
cmd$ = cmd$ + MKI$(LEN(varType$)) + varType$
|
||||||
GOSUB SendCommand
|
GOSUB SendCommand
|
||||||
|
ELSE
|
||||||
|
cmd$ = ""
|
||||||
END IF
|
END IF
|
||||||
LOOP
|
LOOP
|
||||||
END IF
|
END IF
|
||||||
|
@ -8093,6 +8103,21 @@ FUNCTION idevariablewatchbox$(currentScope$, filter$, selectVar, returnAction)
|
||||||
usedVariableList(varDlgList(y).index).elements = v$
|
usedVariableList(varDlgList(y).index).elements = v$
|
||||||
v$ = lineformat$(UCASE$(v$))
|
v$ = lineformat$(UCASE$(v$))
|
||||||
getid usedVariableList(varDlgList(y).index).id
|
getid usedVariableList(varDlgList(y).index).id
|
||||||
|
IF id.t = 0 THEN
|
||||||
|
typ = id.arraytype AND 511
|
||||||
|
IF id.arraytype AND ISINCONVENTIONALMEMORY THEN
|
||||||
|
typ = typ - ISINCONVENTIONALMEMORY
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
IF usedVariableList(varDlgList(y).index).isarray THEN
|
||||||
|
usedVariableList(varDlgList(y).index).arrayElementSize = udtxsize(typ)
|
||||||
|
IF udtxbytealign(typ) THEN
|
||||||
|
IF usedVariableList(varDlgList(y).index).arrayElementSize MOD 8 THEN usedVariableList(varDlgList(y).index).arrayElementSize = usedVariableList(varDlgList(y).index).arrayElementSize + (8 - (usedVariableList(varDlgList(y).index).arrayElementSize MOD 8)) 'round up to nearest byte
|
||||||
|
usedVariableList(varDlgList(y).index).arrayElementSize = usedVariableList(varDlgList(y).index).arrayElementSize \ 8
|
||||||
|
END IF
|
||||||
|
ELSE
|
||||||
|
usedVariableList(varDlgList(y).index).arrayElementSize = 0
|
||||||
|
END IF
|
||||||
Error_Happened = 0
|
Error_Happened = 0
|
||||||
result$ = udtreference$("", v$, typ)
|
result$ = udtreference$("", v$, typ)
|
||||||
IF Error_Happened THEN
|
IF Error_Happened THEN
|
||||||
|
@ -8149,7 +8174,6 @@ FUNCTION idevariablewatchbox$(currentScope$, filter$, selectVar, returnAction)
|
||||||
GOTO unWatch
|
GOTO unWatch
|
||||||
END IF
|
END IF
|
||||||
END SELECT
|
END SELECT
|
||||||
'result = idemessagebox("Result", v$ + "\n" + result$ + "\n" + STR$(typ), "#OK")
|
|
||||||
usedVariableList(varDlgList(y).index).elementOffset = VAL(MID$(result$, _INSTRREV(result$, sp3) + 1))
|
usedVariableList(varDlgList(y).index).elementOffset = VAL(MID$(result$, _INSTRREV(result$, sp3) + 1))
|
||||||
END IF
|
END IF
|
||||||
ELSE
|
ELSE
|
||||||
|
|
|
@ -110,6 +110,7 @@ DIM SHARED MonochromeLoggingMode AS _BYTE
|
||||||
|
|
||||||
TYPE usedVarList
|
TYPE usedVarList
|
||||||
AS LONG id, linenumber, includeLevel, includedLine, scope, localIndex
|
AS LONG id, linenumber, includeLevel, includedLine, scope, localIndex
|
||||||
|
AS LONG arrayElementSize
|
||||||
AS _BYTE used, watch, isarray
|
AS _BYTE used, watch, isarray
|
||||||
AS STRING name, cname, varType, includedFile, subfunc, mostRecentValue
|
AS STRING name, cname, varType, includedFile, subfunc, mostRecentValue
|
||||||
AS STRING watchRange, indexes, elements, elementTypes 'for Arrays and UDTs
|
AS STRING watchRange, indexes, elements, elementTypes 'for Arrays and UDTs
|
||||||
|
@ -25984,6 +25985,7 @@ SUB manageVariableList (__name$, __cname$, localIndex AS LONG, action AS _BYTE)
|
||||||
usedVariableList(i).isarray = 0
|
usedVariableList(i).isarray = 0
|
||||||
END IF
|
END IF
|
||||||
usedVariableList(i).watchRange = ""
|
usedVariableList(i).watchRange = ""
|
||||||
|
usedVariableList(i).arrayElementSize = 0
|
||||||
usedVariableList(i).indexes = ""
|
usedVariableList(i).indexes = ""
|
||||||
usedVariableList(i).elements = ""
|
usedVariableList(i).elements = ""
|
||||||
usedVariableList(i).elementTypes = ""
|
usedVariableList(i).elementTypes = ""
|
||||||
|
|
Loading…
Reference in a new issue