My first pointer experience in PB/DOS 3.50 *g*... but what am I doing wrong? I'm stuck!
Please help me - any hint would be greatly appreciated...
Thanks!
Heinz Salomon
[This message has been edited by Heinz Salomon (edited August 31, 2006).]
Please help me - any hint would be greatly appreciated...
Thanks!
Heinz Salomon
Code:
$DIM ALL $ERROR ALL ON DEFINT A-Z DECLARE SUB ShowSortArrayElement(BYVAL WORD) DECLARE FUNCTION HexAddr$(BYVAL WORD) DIM i AS INTEGER, wElement AS WORD $If 0 =========================================================== IDEA =========================================================== (1) uTestType.fArrayPtr() points to the 2-byte elements of the fixed length string array fSortArray(). ------------------------------------------------------- (2) fSortArray is sorted using the ARRAY SORT command. ------------------------------------------------------- (3) The sorted contents of fSortArray() should then be accessed via the uTestType.fArrayPtr() Pointer. =========================================================== SCREEN OUTPUT =========================================================== FILL & SORT SORTARRAY fSortArray()'s contents before sorting --> 01020304050607080910 fSortArray()'s contents after sorting --> 10090807060504030201 [<--- OK!] ACCESS fSortArray() WITH PEEK & PTR SortArray(1) --> PEEK @ 1B65:0000 = 10 [<--- OK!] PTR @ 1B65:0000 = 459603968 [<--- ???] SortArray(2) --> PEEK @ 1B65:0002 = 09 [<--- OK!] PTR @ 1B65:0002 = 138085 [<--- ???] SortArray(3) --> PEEK @ 1B65:0004 = 08 [<--- OK!] PTR @ 1B65:0004 = 459603970 [<--- ???] [and so on] ========================================================= $EndIf TYPE TestTypeStruc tName AS STRING * 30 yAge AS BYTE fArrayPtr (1 TO 10) AS STRING PTR * 2 END TYPE DIM uTestType AS SHARED TestTypeStruc CLS PRINT "FILL & SORT SORTARRAY" PRINT DIM fSortArray(1 TO 10) AS SHARED STRING * 2 DIM fSortArrayPtr AS SHARED STRING PTR * 20 fSortArrayPtr = VARPTR32(fSortArray(1)) @fSortArrayPtr = "01020304050607080910" PRINT " fSortArray()'s contents before sorting --> " PRINT " "; @fSortArrayPtr ARRAY SORT fSortArray(), DESCEND PRINT " fSortArray()'s contents after sorting --> " PRINT " "; @fSortArrayPtr PRINT LSET uTestType.tName = "Gruber,Fritz" uTestType.yAge = 45 PRINT "ACCESS fSortArray() WITH PEEK & PTR" PRINT uTestType.fArrayPtr(1) = fSortArrayPtr FOR i = 2 TO 10 uTestType.fArrayPtr(i) = uTestType.fArrayPtr(i - 1) + 2 NEXT FOR wElement?? = 1 TO 10 ShowSortArrayElement wElement?? NEXT WHILE NOT INSTAT: WEND END SUB ShowSortArrayElement(BYVAL rwElement AS WORD) PRINT " SortArray(" & LTRIM$(STR$(rwElement)); ") --> " DEF SEG = VARSEG(fSortArray(1)) PRINT " PEEK @ " ; _ HexAddr$(VARSEG(fSortArray(rwElement??))) ; ":" ; _ HexAddr$(VARPTR(fSortArray(rwElement??))); " = "; _ PEEK$(VARPTR(fSortArray(rwElement??)), 2) DEF SEG PRINT " PTR @ "; _ HexAddr$(uTestType.fArrayPtr(rwElement??) \ 65536); ":"; _ HexAddr$(uTestType.fArrayPtr(rwElement??) MOD 65536); " = "; _ [email protected](rwElement??) PRINT END SUB FUNCTION HexAddr$(BYVAL rwAddress AS WORD) HexAddr$ = RIGHT$("000" & HEX$(rwAddress??), 4) END FUNCTION
[This message has been edited by Heinz Salomon (edited August 31, 2006).]
Comment