.TITLE DIRSRT - DIR. LIST SORT ; ; .MCALL FDBDF$,FDRC$A,FDOP$A,NMBLK$,OPNS$R,GET$ .MCALL DELET$,FSRSZ$,DIR$,QIOW$,EXIT$S FSRSZ$ 1 ; PLUN = 5 ;PRINTER LOGICAL UNIT # ; CSIZ = 26 SSIZ = 32 RSIZ = CSIZ+SSIZ ; IFILE: FDBDF$ FDRC$A ,HDRSAV,60 FDOP$A 1,,DFNB DFNB: NMBLK$ DIR ; HDRSIZ: .BLKW 1 HDRSAV: .BLKW 60 ; INREC: .BLKW RSIZ ; PATT: QIOW$ IO.ATT,PLUN,1,,IOSB PDET: QIOW$ IO.DET,PLUN,1,,IOSB PQIO: QIOW$ IO.WLB,PLUN,1,,IOSB,, PADR= PQIO +Q.IOPL PLEN= PQIO +Q.IOPL+2 IOSB: .BLKW 2 ; ; GO: OPNS$R #IFILE BCS EXIT ;OPEN ERROR GET$ ;READ HEADER BCS CLOSE MOV F.NRBD(R0),HDRSIZ ;SAVE HDR LENGTH MOV #SBUF,R5 ;ADDR SORT BUFFER LOOP: GET$ ,#INREC,#CSIZ ;READ FILE NAME BCS EOF GET$ ,#INREC+CSIZ,#SSIZ ;READ SIZE/DATE BCS EOF MOV R5,R2 ;ADDR BOTTOM SORT BUF ILOOP: MOV R2,R4 ;SAVE SLOT ADDR CMP R2,#SBUF ;TOP OF BUFFER? BEQ INSERT ;YES MOV #INREC,R1 ;INPUT ADDR MOV #CSIZ,R3 ;# CHARS TO COMPARE 10$: MOVB -RSIZ(R2),(R2) ;MOVE DOWN ONE SLOT CMPB (R1)+,(R2)+ ;RIGHT SLOT? BLO DOWN ;NO BHI INSERT ;YES SOB R3,10$ ;MAYBE INSERT: MOV #INREC,R1 ;INPUT ADDR MOV R4,R2 ;SLOT ADDR MOV #RSIZ,R3 ;RECORD SIZE 20$: MOVB (R1)+,(R2)+ ;MOVE REC TO SLOT SOB R3,20$ ADD #RSIZ,R5 BR LOOP DOWN: ADD #SSIZ-1,R3 ;# CHARS REMAINING 30$: MOVB -RSIZ(R2),(R2)+ ;MOVE DOWN ONE SLOT SOB R3,30$ MOV R4,R2 SUB #RSIZ,R2 BR ILOOP ; CLOSE: DELET$ BR EXIT ; EOF: DELET$ DIR$ #PATT ;ATTACH PRINTER MOV HDRSIZ,PLEN DIR$ #PQIO ;PRINT HEADER MOV #SBUF,R4 SUB R4,R5 ;TOTAL # CHARS MOV #MAXP,R3 ;# CHARS PER QIO MOV R3,PLEN PLOOP: MOV R4,PADR CMP R5,R3 ;LAST BLOCK? BLOS LAST ;YES DIR$ #PQIO ;PRINT BLOCK ADD R3,R4 SUB R3,R5 BR PLOOP LAST: MOV R5,PLEN ;# CHARS IN LAST BLOCK DIR$ #PQIO ;PRINT LAST BLOCK DIR$ #PDET ;DETACH PRINTER EXIT: EXIT$S ; .PSECT SBUF SBUF: .END GO