Code:
' test_macro_arraysort_2.bas for PB/CC 3.0 ' Author:Michael Mattias Racine WI ' [email protected] ' Placed in Public domain by author 9/04/02 #COMPILE EXE #REGISTER NONE #DEBUG ERROR ON FUNCTION PBMAIN CALL TestArraySort PBMain_Exit: PRINT "Any key to exit program..."; WAITKEY$ END FUNCTION TYPE FooType A AS STRING * 6 B AS STRING * 6 END TYPE ' MACRO to sort an entire array (assumed dim'ed with LBOUND=0) on key "membername", direction=ASCEND or DESCEND MACRO array_sort_udt_member(arrayname,membername,direction) MACROTEMP SortStart, SortEnd LOCAL SortStart AS LONG, sortEnd AS LONG SortStart = VARPTR(arrayname(0).membername) - VARPTR(arrayName(0)) + 1 SortEnd = SortStart + SIZEOF(arrayname(0).membername) Array Sort ArrayName(), From SortStart to SortEnd,direction END MACRO FUNCTION TestArraySort AS LONG LOCAL I AS LONG, J AS LONG, mask as STRING mask = "000000" REDIM Foo(10) AS FooType LOCAL foo2 AS FooType J = 11 FOR I = 0 TO 10 foo(I).A = FORMAT$(I, mask) 'USING$(mask, I) gets all zeroes? foo(I).B = FORMAT$(J,mask) 'USING$(mask, J) DECR J NEXT STDOUT "Before Sort" GOSUB ShowArray WAITKEY$ array_sort_udt_member(foo,b,ASCEND) ' <<< WORKS GOOD! STDOUT "After (ascending on B) Sort" GOSUB ShowArray WAITKEY$ array_sort_udt_member(foo,b,DESCEND) ' << ALSO WORKS GOOD NOW! STDOUT "after Second (descending on B) Sort" GOSUB ShowArray WAITKEY$ EXIT FUNCTION ShowArray: FOR I = 0 to 10 STDOUT STR$(I) & " " & Foo(i).A & " " & foo(i).b NEXT RETURN END FUNCTION ' END OF FILE
Michael Mattias
Tal Systems Inc.
Racine WI USA
[email protected]
www.talsystems.com
Comment