.TITLE SRDROT ; ;**SRD--SORT DIRECTORY ; ; TASK ROOT SEGMENT ; ; ; THIS TASK WILL SORT A RSX11M DIRECTORY ;THEN CREATE A LISTING WITH MANY SELECTION OPTIONS ; ;THIS IS THE MAIN ROUTINE, AND IS PURE. ; ; ; ;SYSTEM MACRO CALLS ; .MCALL FINIT$,CLOSE$,QIOW$S TMASK1: .WORD 0 ;TEMPORARY COPIES OF MASKS FOR DIR. BUFFERING TMASK2: .WORD 0 $SRD0:: ;INITIAL ENTERY MOV SP,SAVSP ;MARK THE STACK FINIT$ ;SET UP FCS SRD1: CALL SRDINI ;INIT NEXT RUN BIT #IDSW,SWMSK$ ;CHECK FOR /ID SWITCH BEQ 10$ ;NOT HERE BRANCH QIOW$S #IO.WVB,#1,,,,,<#SRDVER,#SRDVS,#0> BR LSTNX$ 10$: MOV SWMSK$,TMASK1 MOV SWMS1$,TMASK2 SRD2: CALL SRDOPR ;OPEN AND READ UFD CALL SRDSRT ;SORT THE DIRECTORY TST R5 BEQ 5$ FERR WBERR ; 5$: CALL SRDLST ;LIST THE FILE TST UFDFDB+F.BDB ; DIRECTORY STILL OPEN ?? BEQ LSTNX$ ;NO GO ON MOV TMASK1,SWMSK$ ;YES RESTORE MASK TO ORIGINAL MOV TMASK2,SWMS1$ BR SRD2 ; GO DO NEXT PIECE OF DIR. ; LSTNX$:: MOV SAVSP,SP ; RECOVER THE STACK CLOSE$ #UFDFDB ; CLOSE UFD TST NXUIC$ ;DOING WILD CARD? BEQ RESTR$ ;BR IF NO BIC #HDSW,SWMSK$ ; FLAG HEADER NOT PRINTED CLR NUMFS ; TO COUNT # OF FILES CLR NUMFT CLR TBLKU ; CLEAR BLOCK COUNTS CLR TBLKU+2 CLR TBLKA CLR TBLKA+2 CALL SRDNUD ;FIND NEXT DIRECTORY TO WORK ON BCC SRD2 ;PROCESS IF ONE FOUND RESTR$:: ;RESTART FOR SURE! BIT #FLSW,SWMSK$ ;ANYTHING GET LISTED? BNE 10$ ;BR IF YES 5$: DIAG NOFL ;ISSUE "NO SUCH FILE" DIAGNOSTIC 10$: MOV SAVSP,SP ;CLEAN THE STACK CLOSE$ #UFDFDB ;MAKE SURE ALL FILES ARE CLOSED BIT #SPSW,SWMSK$ ;SPOOL THE FILE ? BEQ 15$ ;BR IF NO MOV #LSTFDB,R0 ;RECOVER FILE DESCRIPTOR BLOCK CALL .PRINT ;AND PRINT IT BR 20$ ;CONTINUE 15$: CLOSE$ #LSTFDB 20$: JSR R0,ATTDET ;MAKE SURE DEVICE .WORD IO.DET ;--IS DETACHED! BR SRD1 ;ELSE START OVER-FROM THE TOP! .PSECT $PDATA CON,RW,D,LCL SSTVC$::.WORD 0,0,0,0,0,0 .WORD TRAP0 .END $SRD0