SUBROUTINE SORT(NRECS) LOGICAL*1 BUFFER(1) INTEGER*2 TOTLEN,LLEN(9),KEYLOC(9),KEYORD(9),KEYLEN(9) INTEGER*2 STK(30),SP,R,RPOS COMMON LPEREC,TOTLEN,LLEN,NKEYS,KEYLOC,KEYORD,KEYLEN COMMON /BUFFER/BUFFER COMMON /COMPAR/NRECPT NRECPT=IR(NRECS+1) RPOS=-NRECPT 10 SP=0 L=1 R=NRECS 20 IF(R-L.LT.9)GOTO80 M=(L+R)/2 I=ICOMP(IR(L),IR(M)) J=ICOMP(IR(M),IR(R)) IF(I*J.GE.0)GOTO25 IF(J*ICOMP(IR(L),IR(R)))21,22,22 21 M=R GOTO25 22 M=L 25 CALL RCOPY(IR(M),-RPOS) CALL RCOPY(IR(L),IR(M)) I=L J=R 30 IF(ICOMP(RPOS,IR(J)).GE.0)GOTO40 J=J-1 GOTO30 40 IF(J.GT.I)GOTO41 CALL RCOPY(-RPOS,IR(I)) GOTO70 41 CALL RCOPY(IR(J),IR(I)) I=I+1 50 IF(ICOMP(IR(I),RPOS).GE.0)GOTO60 I=I+1 GOTO50 60 IF(J.LE.I)GOTO61 CALL RCOPY(IR(I),IR(J)) J=J-1 GOTO30 61 CALL RCOPY(-RPOS,IR(J)) I=J 70 SP=SP+2 IF(R-I.LT.I-L)GOTO71 STK(SP-1)=I+1 STK(SP)=R R=I-1 GOTO20 71 STK(SP-1)=L STK(SP)=I-1 L=I+1 GOTO20 80 IF(R.LE.L)GOTO90 DO 89 J=L+1,R CALL RCOPY(IR(J),-RPOS) I=J-1 83 IF(ICOMP(IR(I),RPOS).LE.0)GOTO85 CALL RCOPY(IR(I),IR(I+1)) I=I-1 GOTO83 85 CALL RCOPY(-RPOS,IR(I+1)) 89 CONTINUE 90 IF(SP.EQ.0)RETURN SP=SP-2 L=STK(SP+1) R=STK(SP+2) GOTO20 END