DCL SPCPTR .PARM1 PARM; DCL DD PARM1 CHAR(5) BAS(.PARM1); DCL DD PARM-NBR-ELEMENTS PKD(7,0) DEF(PARM1) POS(1); DCL DD PARM-DIRECTION CHAR(1) DEF(PARM1) POS(5); /* A OR D */ DCL SPCPTR .PARM2 PARM; DCL DD ELEMENT(1) CHAR(10) BAS(.PARM2); DCL DD KEY (1) CHAR(10) BAS(.PARM2); DCL OL PARMS(.PARM1, .PARM2) EXT PARM MIN(2); DCL DD SWAP-FLAG CHAR(1); DCL DD JUMP-SIZE BIN(4); DCL DD SWEEP-END BIN(4); DCL DD ITEM-NBR BIN(4); DCL DD COMP-NBR BIN(4); ENTRY * (PARMS) EXT; OVRPGATR 1, 2; /* DON'T CONSTRAIN ARRAY REFS */ CPYNV JUMP-SIZE, PARM-NBR-ELEMENTS; SORT-JUMP: CMPNV(B) JUMP-SIZE, 1 /HI(SORT-SWEEP); CMPBLA(B) SWAP-FLAG, "S"/NEQ(RETURN); SORT-SWEEP: MULT(S) JUMP-SIZE, 10; ADDN(S) JUMP-SIZE, 3; DIV(S) JUMP-SIZE, 13; SUBN SWEEP-END, PARM-NBR-ELEMENTS, JUMP-SIZE; CPYBLA SWAP-FLAG, " "; CPYNV(B) ITEM-NBR, 0/ZER(SORT-COMPARE); SORT-SWAP: EXCHBY ELEMENT(ITEM-NBR), ELEMENT(COMP-NBR); CPYBLA SWAP-FLAG, "S"; SORT-COMPARE: ADDN(S) ITEM-NBR, 1; CMPNV(B) ITEM-NBR, SWEEP-END/HI(SORT-JUMP); ADDN COMP-NBR, ITEM-NBR, JUMP-SIZE; CMPBLA(B) PARM-DIRECTION, "D"/EQ(DESCENDING-SORT-COMPARE); ASCENDING-SORT-COMPARE: CMPBLA(B) KEY(ITEM-NBR), KEY(COMP-NBR)/ HI(SORT-SWAP), NHI(SORT-COMPARE); DESCENDING-SORT-COMPARE: CMPBLA(B) KEY(ITEM-NBR), KEY(COMP-NBR)/ LO(SORT-SWAP), NLO(SORT-COMPARE); RETURN: RTX *;