As it's possible that this functionality isn't going to be implemented for now, I thought I'd take a whack at a user-written routine. Here's what I have so far:
Code: Select all
;*********************************************************
; A test program to take the routine for a spin
;*********************************************************
Declare SortStructuredArrayFS(g,d)
Structure member
age.l
name.s{4}
fav_color.s
EndStructure
Global Dim a.member(50000)
For i=1 To 50000 ; Not responsible for any bad words that get made randomly!
a(i)\name=Chr(65+Random(25))+Chr(97+Random(25))+Chr(97+Random(25))+Chr(97+Random(25))
a(i)\age = 21+Random(30)
Next
DisableDebugger
SortStructuredArrayFS(1,50000) ; First element, last element
EnableDebugger ; You can alter these to only sort part of the array
Debug a(1)\name
Debug a(25000)\name
Debug a(50000)\name
End
;*********************************************************
; The routine
;*********************************************************
;
; Replace all ocurrences of <a> with your own array name
; Replace all ocurrences of <member> with your own structure name
; Replace all ocurrences of <name> with your own element name
Procedure SortStructuredArrayFS(g,d) ; Quicksort Algorithm
If Not *tmp
*tmp=AllocateMemory(SizeOf(member))
EndIf
If g < d
v.s = a(d)\name
i = g-1
j = d
Repeat
Repeat
i+1
Until a(i)\name >= v
Repeat
j-1
Until a(j)\name <= v
CopyMemory(@a(i),*tmp,SizeOf(member))
CopyMemory(@a(j),@a(i),SizeOf(member))
CopyMemory(*tmp,@a(j),SizeOf(member))
Until j <= i
CopyMemory(@a(j),*tmp,SizeOf(member))
CopyMemory(@a(i),@a(j),SizeOf(member))
CopyMemory(@a(d),@a(i),SizeOf(member))
CopyMemory(*tmp,@a(d),SizeOf(member))
SortStructuredArrayFS(g, i-1)
SortStructuredArrayFS(i+1, d)
EndIf
EndProcedure