.TITLE SRDROT .IDENT -6.0- ; 28-NOV-80 ; ; CORRECTION WB02---MAKE SURE STACK IS CLEAN WHEN DOING ; WILD CARD DIRECTORY SEARCHS. ; ; MODIFIED: ; THIS VERSION MODIFIED DEC 1978 BY RAY VAN TASSLE---MOTOROLA ; 1) FIXED ERROR IN DIRECTORY WRITE-BACK THAT WOULD LOSE FILES. ; 2) FIXED ERROR (11D) IN FIGURING WORK BUFFER SIZE ; 3) REPLACED TO: DEVICE WITH TI: ; 4) FIXED A COUPLE OF INITIALIZATION BUGS THAT WOULD SOMETIMES ; CAUSE SORT & LIST TO RUN WILD ; 5) FIXED A TOO-SMALL BUFFER IN TRAP ROUTINE (ERROR PRINT) ; ; 6) CHANGES TO ALLOW A VERY LARGE DIRECTORY BE DONE IN PIECES ; (WITHOUT WRITE-BACK, THOUGH) ; 7) REMOVED THE UN-USED "/HV" SWITCH ; 8) ADDED "/MI" SWITCH (MIDDLE-SIZE LISTING---WITH DATE & TIME) ; 9) CHANGED DEFAULTS TO /LI/NA ; 10) PRINT # OF FILES SELECTED & TOTAL ; 11) CHECK FILE ID/SEQ # IF /MI OR /DA OR /FU, ETC. ; 12) CHANGED SO /-LI DOES EVERYTHING EXCEPT ACTUAL LIST ; 13) PUT "TAB" AS 1ST CHAR ON LISTING LINE ; 14) EXCLUDE [0,0] FROM WILD-CARD UIC (ALSO [0,*] AND [*,0]) ; 15) IN /SE TEMPLATE, BOTH "%" AND "?" MATCH ANY ONE CHAR. ; 16) ADDED ERROR MESSAGE AND RE-TRY ON ERROR DURING DIRECTORY WRITE-BACK ; ; VERSION 4.1, 08-MAR-79 ; BRUCE C. WRIGHT ; DUKE UNIVERSITY MEDICAL CENTER ; DURHAM, N. C. 27710 ; NUMEROUS BUG FIXES AND CONDITIONALISE FOR IAS/RSX-11D ;+ ; ; VERSION 4.1A - 11-JUL-79 ; ADD SUPPORT FOR /CO/LO/MU SWITCHES ; VERSION 4.1B - 15-JUL-79 ; ADD SUPPORT FOR /BE AND /AF FOR SELECTION OF FILES BETWEEN ; THE TWO DATES; ; LIST CREATION DATES WITH /DA SWITCH AS WELL AS WITH /AF AND ; /BE SWITCHES. ; VERSION 4.1C - 18-JUL-79 ; TREAT FILE SPECIFICATION STRING GIVEN IN COMMAND LINE ; (BUT NOT IN /SE: OR /SD: SWITCH STRING) AS IF IT HAD ; WILD CARD MATCHING AFTER NAME AND TYPE STRINGS GIVEN, ; UNLESS /DE, /SD, OR /PU SPECIFIED; ALSO INSERT '.' IF ; NONE GIVEN IN /SE: OR /SD: SWITCH STRING. ; VERSION 4.1D - 29-JUL-79 ; FIX BUG IN /SD PROCESSING SO ALONE DOES NOT CAUSE FILE ; DELETION IF 'Y' PREVIOUSLY ENTERED; ALSO IMPLEMENT ; YES/NO/QUIT/GO RESPONSES FOR /SD, ACQUIRED FROM THE JACKSON ; LABORATORY VERSION; AND MINOR FIX TO AVOID SYNTAX ERROR IF ; NAME.TYP/SD USED AFTER PREVIOUS /SD:NAME.TYP OR /SE:NAME.TYP. ; VERSION 4.1E - 30-JUL-79 ; ADD SUPPORT FOR /OV:[N] SWITCH TO LIST OBSOLETE VERSIONS OF ; FILES, WHICH ARE THE FILES WHICH WOULD BE DELETED IF THE ; /PU:[N] SWITCH WERE USED, AND THOSE WHICH WOULD NOT BE LISTED ; IF THE /SV:[N] SWITCH WERE SPECIFIED. ; VERSION 4.1F - 05-AUG-79 ; CONDITIONALIZE FOR RSX-11M V3.0 AND EARLIER VERSIONS, AND ; FOR APPENDING WILD CARD MATCHING CHARACTERS TO IMPLICIT ; SELECTION FILE NAME STRING (THE VERSION 4.1C MODIFICATION). ; ; BOB TURKELSON ; NASA/GODDARD SPACE FLIGHT CENTER ; CODE 934 ; GREENBELT, MARYLAND 20771 ; ; DUKE004 -- 19-NOV-79 -- ADD VERSION NUMBER MESSAGE, ALSO MODIFIED ; UFD FILE DESCRIPTOR BLOCK SO IF SRD ABORTS ABNORMALLY, ; IT WON'T LOCK THE UFD FILE, ALSO REMOVED REFERENCE ; TO .MOLUN SINCE MO.... IS NOT USED BY SRD. ; ; VERSION 5.0 - 19-NOV-79 ; ; PREPARE SIG SUPPORTED VERSION, UPDATED ALL MODULES ; TO VERSION 5.0, ADDED /IDENT,/BF SUPPORT. ; H.R.TUMBLIN, DUMC ; ; VERSION 6.0 - 28-Nov-80 ; ; By: Phil Stephensen-Payne, ; c/o Systime Ltd., ; 432 Dewsbury Road, ; LEEDS LS11 7DF, ; England. ; ; Combined the two versions above into one. ; Added /AE, /BF, /HE, /AT, /M2, /00 ; Added time handling into date handling ; Used global TKB patches for initialization ; Modified wild-carding to be more flexible ; ; **SRD--SORT DIRECTORY ; ; TASK ROOT SEGMENT ; ; THIS TASK WILL SORT A FILES-11 DIRECTORY ; THEN CREATE A LISTING WITH SEVERAL SELECTION OPTIONS ; ; THIS IS THE MAIN ROUTINE, AND IS PURE. ; ;- ; ; SYSTEM MACRO CALLS ; .MCALL FINIT$,CLOSE$,QIOW$S $SRD0:: ; INITIAL ENTERY MOV $XX1,DIRBF$ ; FIGURE OUT LOWEST AVAIL LOCATION CMP DIRBF$,$XX2 BHI 44$ MOV $XX2,DIRBF$ 44$: CMP DIRBF$,$XX3 BHI 45$ MOV $XX3,DIRBF$ 45$: ADD #3,DIRBF$ ; ROUND UP TO NEXT 4-BYTE BOUNDARY BIC #3,DIRBF$ ADD #4,LIMBF$ ; Ensure @DIRBF$ is always mapped MOV LIMBF$,MINSZ$ ; Get the minimum buffer size SUB DIRBF$,MINSZ$ ; ADD #777,MINSZ$ ; Round up to 512 byte boundary BIC #777,MINSZ$ ; MOV SP,SAVSP ; MARK THE STACK FINIT$ ; SET UP FCS SRD1: CALL SRDINI ; INIT NEXT RUN BIT #IDSW,SWMS2$ ; CHECK FOR /ID SWITCH BEQ 10$ ; EQ - THEN IT'S NOT SET QIOW$S #IO.WVB,#TTYLUN,,,,,<#SRDVER,#SRDVS,#0> BCC LSTNX$ ; CC - THEN SUCCESS CALL ALERR ; DIAGNOSE ERROR BR LSTNX$ ; AND START OVER 10$: BIT #SISW,SWMS2$ ; DISPLAY BUFFER SIZE BEQ SRD2 ; EQ - NO CALL SRDDBF ; DISPLAY BUFFER SIZE BR LSTNX$ ; AND START OVER SRD2: CALL SRDOPR ; OPEN AND READ UFD CALL SRDSRT ; SORT THE DIRECTORY TST R5 BEQ 5$ FERR WBERR ; 5$: CALL SRDLST ; LIST THE FILE ; 10$: TST UFDFDB+F.BDB ; DIRECTORY STILL OPEN ?? BNE SRD2 ; YES, GO DO NEXT PIECE OF IT. ; LSTNX$:: MOV SAVSP,SP ; MAKE SURE STACK IS CLEAR ; *WB02* .IF DF R$$11M ; IF ON RSX11M .IF NDF D$$CAL ; IF NO DYNAMIC CHECKPOINTING... MOV DIRIC$,R1 ; R1 = LAST INCREMENT. BEQ 10$ ; IF EQ, WE ARE AT INITIAL SIZE. CLR DIRIC$ ; SAY WE ARE BACK TO INITIAL SIZE. NEG R1 ; INDICATE DECREASE SIZE EXRG$S R1 ; GO BACK TO ORIGINAL SIZE. BCC 10$ ; IF CC, ALL OK HALT ; ABORT TASK. .ENDC .ENDC ; 10$: CLOSE$ #UFDFDB ; Close the UFD TST NXUIC$ ; DOING WILD CARD? BEQ RESTR$ ; BR IF NO BIC #HDFL,FLAGS$ ; 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 #SISW!IDSW,SWMS2$ ; ID ! SI active ? BNE 10$ ; NE - then skip rest BIT #LISW!MISW!FUSW,SWMSK$ ; LISTING ACTIVE? BEQ 10$ ; BR IF NO BIT #FLFL,FLAGS$ ; ANYTHING GET LISTED? BEQ 5$ ; BR IF NO FILES BIT #SPSW,SWMSK$ ; SPOOL THIS FILE? BEQ 10$ ; BR IF NO MOV #LSTFDB,R0 ; GET THE FILE DESC. BLK CALL .PRINT ; INSERT IN PRINT QUEUE BR 10$ ; CONTINUE 5$: ; REFERENCE DIAG NOFL ; ISSUE "NO SUCH FILE" DIAGNOSTIC 10$: MOV SAVSP,SP ; CLEAN THE STACK CLOSE$ #UFDFDB ; Make sure UFD is closed CLOSE$ #LSTFDB ; --- BIT #ATSW,SWMS2$ ; Were we attaching things? BEQ SRD1 ; If EQ no - don't bother to detach JSR R0,ATTDET ; MAKE SURE DEVICE- .WORD IO.DET ; --IS DETACHED! BR SRD1 ; ELSE START OVER-FROM THE TOP! ; ; CCLOSE-CONDITONAL CLOSE ; ; THIS ROUTINE IS CALLED WITH AN FDB ADDRESS IN R0 ; IT DISPATCHES TO CLOSE IF THE FILE IS OPEN, ; ELSE RETURNS DIRECTLY TO THE CALLER. ; CCLOSE::TST F.BDB(R0) ; IS FILE OPEN? BEQ 10$ ; BR IF YES JMP .CLOSE ; CLOSE THE FILE 10$: RETURN ; ELSE GO BACK FORM HERE .PSECT $PDATA CON,RW,D,LCL SSTVC$::.WORD 0,0,0,0,0,0 .WORD TRAP0 .END $SRD0