.TITLE DIRINI .IDENT /V2.0/ ; ;***** ; ; DIRINI PERFORMS ALL THE SPECIFIC INITIALIZATION, SWITCH SETTING ; AND SWITCH CHECKING FOR THE "DIRECTORY" COMMAND. THIS MODULE ; IS CALLED DURING THE SECOND PHASE OF THE TASK'S COMMON INITIALIZATION ; PROCEDURE. ; ; WHEN CALLED, DIRINI ASSUMES THE COMMAND HAS BEEN PREPROCESSED ; SUCH THAT THERE IS ONLY AN INPUT FILE SPEC FOLLOWED BY ALL THE ; SWITCHES THAT WERE SELECTED. THIS FUNCTION WAS PERFORMED BY ; THE FIRST PHASE OF INITIALIZATION--INIT1. ; ; PAUL SORENSON ; PULMONARY RESEARCH ; S3, MAYO CLINIC ; ROCHESTER, MN 55904 ; ;***** ; ; UPDATE 8/80--PRS; ORIGINAL EDIT ; ; UPDATE 11/80--PRS; REMOVE OUTPUT FILE SPEC VALUE, PULL OUT ANY ; OUTPUT FILE SPEC INSIDE INIT1 CODE. ; ; UPDATE 3/82 -- PRS; ADD NEW SWITCHES "/NULL", "/LOCKED" AND "/EXP" ; TO SELECT NULL LENGTH, LOCKED, AND EXPIRED FILES. SELECTION ; BASED ON EXPIRATION DATE IS CURRENTLY NOT SUPPORTED (SEE ; COMMENTS IN DIRPRE.MAC). ; ; UPDATE 3/20/82 -- PRS; ADD SUPPORT TO SET FILE DATE FIELDS IN ; FILE HEADER USING "/SETx:DD-MMM-YR" SWITCH. WHERE x= ; E FOR EXPIRATION, C FOR CREATION, AND R FOR REVISION DATES. ; ;***** ; .MCALL CSI$,CSI$1,CSI$2,CSI$SW,CSI$SV,CSI$ND,EXST$S,QIOW$S CSI$ ;DEFINE CSI SYMBOLIC OFFSETS .PSECT $PDATA,RO,D,LCL,CON,REL SWTABL: CSI$SW PRINTER,SPSW,SWMSK$,SET ;PRINTER OUTPUT CSI$SW T,LISW!MISW,SWMSK$,SET,,,LONG ;TERMINAL OUTPUT CSI$SW FULL,FUSW,SWMSK$,SET CSI$SW BRIEF,FUSW!MISW,SWMSK$,CLEAR CSI$SW LI,LISW,SWMSK$,SET,NEG ;LISTING SWITCH CSI$SW SORT,SRSW,SWMSK$,SET,NEG,SRTVAL ;SORT:OPTION CSI$SW ORDER,SRSW,SWMSK$,SET,NEG,SRTVAL ;ORDER=SORT CSI$SW ALPHA,SRSW!NASW,SWMSK$,SET,NEG ;ALPHA=SORT:NAME CSI$SW COM,WBSW,SWMSK$,SET,NEG,,LONG ;DIR WRITE BACK CSI$SW SQUEEZE,WBSW,SWMSK$,SET,NEG ;=COMPRESS CSI$SW WB,WBSW,SWMSK$,SET,NEG ;=COMPRESS .IF DF ST$DAT ;INCLUDE IF SUPPORT SETTING FILE DATES ; .IF DF EX$DAT ;INCLUDE IF SUPPORT EXPIRATION DATES CSI$SW SETE,SEDSW,SWMS2$,SET,,SDVAL,LONG ;SET EXPIRATION DATE .ENDC ;EX$DAT CSI$SW SETC,SCDSW,SWMS2$,SET,,SDVAL,LONG ;SET CREATION DATE CSI$SW SETR,SRDSW,SWMS2$,SET,,SDVAL,LONG ;SET REVISION DATE .ENDC ;ST$DAT ; *** END OF DIRECTORY SPECIFIC SWITCHES-REMAINING ARE COMMON CSI$SW EXC,NESW,SWMSK$,SET,NEG,,LONG ;SELECT EVERYTHING BUT ; INPUT SPEC. CSI$SW NULL,NLSW,SWMS1$,SET ;SELECT 0 LENGTH FILES CSI$SW LOC,LKSW,SWMS1$,SET,,,LONG ;SELECT LOCKED FILES CSI$SW CON,COSW,SWMS1$,SET,,,LONG ;SELECT CONTIG. FILES CSI$SW SYSTEM,SYSW,SWMSK$,SET,NEG ;INCLUDE GROUP #<11 CSI$SW BEFORE,BESW,SWMS1$,SET,,BEDVAL CSI$SW AFTER,AFSW,SWMS1$,SET,,AFDVAL CSI$SW SINCE,AFSW,SWMS1$,SET,,AFDVAL ;SINCE=AFTER CSI$SW DATE,DASW,SWMS1$,SET,,DAVAL CSI$SW NEW,DASW,SWMS1$,SET,,,LONG ;NEW=DATE WITH NO VALUE CSI$SW CREATED,CDSW,SWMS2$,SET, ;USE CREATION DATE CSI$SW REVISED,RDSW,SWMS2$,SET, ;USE REVISION DATE .IF DF EX$DAT CSI$SW EXP,EDSW,SWMS2$,SET,,,LONG ;USE EXPIRATION DATE .ENDC ;EX$DAT CSI$ND CSI$SV ASCII,SRBUF$,4.,SRTVAL ;HOLD EITHER "NAME" OR "TYPE" CSI$SV ASCII,BEBUF$,11.,BEDVAL CSI$SV ASCII,AFBUF$,11.,AFDVAL CSI$SV ASCII,DABUF$,11.,DAVAL .IF DF ST$DAT ;INCLUDE IF SUPPORT SETTING FILE DATES CSI$SV ASCII,SDBUF$,11.,SDVAL ;DEFINE SET DATE BUFFER .ENDC ;ST$DAT CSI$ND .EVEN .NLIST BEX .ENABL LC WBMSG: .ASCII /Sort, compress, and write back directory -- ARE YOU SURE ? / LENGTH=.-WBMSG .EVEN .DSABL LC .PSECT $CODE1,RO,I,LCL,CON,REL DIRINI:: BIS #LISW!MISW!SRSW!NASW,SWMSK$ ;SET SOME DEFAULTS CLR SRBUF$ ;CLEAR ANY SORT SPECFIER CSI$1 #CSIBLK,CMDADR,CMDSIZ ;CALL CSI$1 TO CHECK SYNTAX BCC 2$ ;BRANCH IF NO ERROR FERR CS1E ;SIGNAL ERROR 2$: CSI$2 R0,INPUT,#SWTABL ;CALL CSI$2 TO PARSE THE LINE BCC SWCHK ;BRANCH IF NO ERRORS FERR CS2I ;SIGNAL ERROR SWCHK: .IF DF ST$DAT & EX$DAT BIT #SEDSW,SWMS2$ ;SETTING EXPIRATION DATES ? BEQ 5$ ;BRANCH IF NO BIS #FUSW,SWMSK$ ;FORCE FULL LISTING 5$: .ENDC ;EX$DAT BIT #FUSW,SWMSK$ ;DID FULL LISTING GET SELECTED ? BEQ 10$ ;BRANCH IF NO BIC #MISW,SWMSK$ ;YES, REMOVE MISW 10$: BIT #SRSW,SWMSK$ ;SORT STILL SELECTED ? BEQ 20$ ;NO, KEEP GOING MOVB SRBUF$,R0 ;YES,CHECK SRBUF$ BEQ 20$ ;IF 0, NO SPECIFIER-"NAME" SORT DEFAULT BIC #40,R0 ;FORCE IT TO UPPERCASE CMPB #'T,R0 ;SORT BY "T"YPE ? BNE 20$ ;BRANCH IF NO BIC #NASW,SWMSK$ ;YES, CHANGE TO SORT BY TYPE 20$: ; .IF DF EX$DAT ;INCLUDE IF SUPPORT EXPIRATION DATES BIT #EDSW,SWMS2$ ;EXPIRATION DATE SELECTED ? BEQ 26$ ;BRANCH IF NO 23$: BIT #,SWMS1$ ;ANY DATES GIVEN EXPLICITELY ? BNE 26$ ;BRANCH IF YES BIS #BESW,SWMS1$ ;OTHERWISE, SET BEFORE SWITCH- ; SELECT ALL EXPIRED FILES = FILES ; WITH EXPIRATION DATE < SYSTEM DATE 26$: .ENDC ;EX$DAT ; BIT #OUTFSW,SWMSK$ ;WAS AN OUTPUT FILE SPECIFIED ? BEQ 30$ ;BRANCH IF NO 29$: BIC #SPSW,SWMSK$ ;YES, FORCE OUTPUT TO NOT BE SPOOLED BR 40$ 30$: BIT #SPSW,SWMSK$ ;CHECK IF OUTPUT SPOOLED ? BEQ 40$ ;BR IF NO BIS #OUTFSW,SWMSK$ ;YES, SET OUTPUT FILE SWITCH 40$: BIT #WBSW,SWMSK$ ;USER TRYING WRITE BACK ? BEQ 50$ ;BRANCH IF NO CALL PRMPWB ;YES, MAKE SURE WITH PROMPT MESSAGE BCS EXIT ;EXIT ON ERROR/USER CANCELED REQUEST CLR SWMS1$ ;CLEAR ALL SELECTIVE LISTING SWITCHES CLR SWMS2$ ;CLEAR SETTING FILE DATES BIC #FUSW!MISW,SWMSK$ ;DO BRIEF LIST BR DONE 50$: ; ;***** ; ; CHECK FOR MUTUALLY EXCLUSIVE SWITCH SETTINGS IN "DIR" ; SPECIFIC SWITCHES ; ; CAN ONLY SET ONE FILE DATE- SCDSW, SRDSW, SEDSW ARE MUTUALLY ; EXCLUSIVE ; ;***** ; .IF DF ST$DAT ;INCLUDE IF SUPPORT SETTING FILE DATES MOV #-1,R0 BIT #SCDSW,SWMS2$ ;SETTING CREATION DATE ? BEQ 53$ ;BRANCH IF NO INC R0 ;COUNT IT 53$: BIT #SRDSW,SWMS2$ ;SETTING REVISION DATE ? BEQ 56$ ;BRANCH IF NO INC R0 ;COUNT IT 56$: ; .IF DF EX$DAT ;INCLUDE IF SUPPORT EXPIRATION DATES BIT #SEDSW,SWMS2$ ;SETTING EXPIRATION DATE ? BEQ 59$ ;BRANCH IF NO INC R0 ;COUNT IT .ENDC ;EX$DAT ; 59$: TST R0 ;CHECK ACCUMULATOR BLE 60$ ;BRANCH IF OK FERR CNFLSW ;NO, FLAG CONFLICT 60$: .ENDC ;ST$DAT DONE: RETURN ; ;***** ; ; TO GET TO HERE, MUST HAVE CANCELLED A DIRECTORY WRITE-BACK. ; SIGNAL ANYONE INTERESTED ABOUT THIS FACT BY A WARNING EXIT ; STATUS ; ;***** ; EXIT: EXST$S #EX$WAR ;EXIT TASK .PAGE ; ;***** ; ; LOCAL SUBROUTINE SECTION ; ;***** ;***** ; ; PRMPWB; PROMPT USER OF PENDING DIRECTORY WRITE BACK USING READ ; AFTER PROMPT QIO...MAKE SURE USER WANTS TO DO IT ; ;***** ; PRMPWB: QIOW$S #IO.RPR,#TILUN,#TIEFN,,#IOSB$,,<#LINBUF,#40.,,#WBMSG,#LENGTH,#044> TSTB IOSB$ ;CHECK FOR SUCCESS BLE 5$ ;BRANCH ON ERROR-EXIT TASK CMP #IS.CR,IOSB$ ;WAS RETURN THE TERMINATOR ? BNE 5$ ;NO, EXIT TASK BICB #40,LINBUF ;FORCE REPLY TO UPPERCASE CMPB #'Y,LINBUF ;RESPONSE = "Y"ES ? CLC ;CLEAR CARRY BIT BEQ 10$ ;YES, CONTINUE WITH WRITE BACK 5$: SEC ;SET CARRY BIT 10$: RETURN .END