LOGICAL*1 BUFFER(30000),EOFFLG INTEGER*2 IV(4:13) INTEGER*2 TOTLEN,LLEN(9),KEYLOC(9),KEYORD(9),KEYLEN(9),NRLAST,NWF COMMON LPEREC,TOTLEN,LLEN,NKEYS,KEYLOC,KEYORD,KEYLEN COMMON /BUFFER/BUFFER COMMON /DIRACC/IV DATA EOFFLG/.FALSE./,NWF/0/ CALL INITL STIME=SECNDS(0.) NTRECS=0 NRECS=30000/TOTLEN-1 IF(NRECS.LT.10)GOTO97 1 CALL READIN(NRECS,BUFFER,EOFFLG,NREAD) NTRECS=NTRECS+NREAD CALL SORT(NREAD) IF(NWF.EQ.0.AND.EOFFLG)GOTO10 NWF=NWF+1 IF(NWF.EQ.10)GOTO95 LUN=NWF+3 OPEN(UNIT=LUN,ACCESS='DIRECT',RECORDSIZE=(TOTLEN+3)/4, 1INITIALSIZE=65,DISPOSE='DELETE',ASSOCIATEVARIABLE=IV(LUN), 2MAXREC=NRECS,ERR=93) IV(LUN)=1 JL=1-TOTLEN JH=0 DO 2 I=1,NREAD JL=JL+TOTLEN JH=JH+TOTLEN 2 WRITE(LUN'IV(LUN))(BUFFER(J),J=JL,JH) IV(LUN)=1 IF(.NOT.EOFFLG)GOTO1 CLOSE(UNIT=2) NRLAST=NREAD CALL MERGE(NRECS,NWF,NRLAST) GOTO11 10 CALL WRITIT(NREAD,BUFFER) 11 CLOSE(UNIT=3) WRITE(1,12)NTRECS,NWF,NRECS,SECNDS(STIME) 12 FORMAT('0Sort complete.'/'0',I6,' records sorted'/1X,I6, 1' work files used'/1X,I6,' records per work file'/1X,F6.1, 2' seconds total time'/) GOTO99 93 WRITE(1,94)LUN 94 FORMAT('0Error -- Open failure on work file on unit ',I2/) GOTO99 95 WRITE(1,96) 96 FORMAT('0Error -- Input file is too large to sort'/) GOTO99 97 WRITE(1,98) 98 FORMAT('0Error -- Records are too big to sort'/) 99 CALL EXIT END