SORTDYNM1
From Pickwiki
Jump to navigationJump to search* sortdynm1 - Sort a dynamic array on one field.
************************************************************************
SUBROUTINE SORTDYNM1( DYNARR, SORTFIELD, FIELDLIST, SORTCODE)
************************************************************************
* NOTE
* ****
* awy Apr 95 : Now used by ATL. Takes a record such as read from a file
* in DYNARR. It sorts the field specified by SORTFIELD
* according to SORTCODE. And as it rearranges SORTFIELD
* it also rearranges any fields specified in FIELDLIST
* Modifications since date stamp
* ******************************
* None at present.
CODE = 'AL'
IF SORTCODE[1,1] EQ 'A' OR SORTCODE[1,1] EQ 'D' THEN
IF SORTCODE[2,1] EQ 'L' OR SORTCODE[2,1] EQ 'R' THEN CODE = SORTCODE
END
SORTARR = DYNARR<SORTFIELD>
IF DCOUNT(SORTARR,@VM) LE 1 THEN RETURN
REMOVE SORTED FROM SORTARR SETTING REM.SORT
LASTKEY = SORTED
COUNTER = 1
LOOP
REMOVE NEXTKEY FROM SORTARR SETTING REM.SORT
COUNTER += 1
COMP = COMPARE(LASTKEY, NEXTKEY, CODE[1])
IF (CODE[1,1] EQ 'A' AND COMP EQ 1) OR (CODE[1,1] EQ 'D' AND COMP EQ -1) THEN
LOCATE NEXTKEY IN SORTED<1> BY CODE SETTING POSN THEN
LOOP WHILE SORTED<POSN> EQ NEXTKEY AND NEXTKEY
POSN += 1
REPEAT
END
INS NEXTKEY BEFORE SORTED<POSN>
IF FIELDLIST THEN FIELDS = SORTFIELD :@FM: FIELDLIST ELSE FIELDS = SORTFIELD
LOOP
REMOVE FIELD FROM FIELDS SETTING MER
MOVE = DYNARR<FIELD, COUNTER>
DEL DYNARR<FIELD, COUNTER>
INS MOVE BEFORE DYNARR<FIELD, POSN>
WHILE MER REPEAT
END ELSE
SORTED<-1> = NEXTKEY
LASTKEY = NEXTKEY
END
WHILE REM.SORT REPEAT
RETURN
END