.TITLE SRDNUD-NEXT USER DIRECTORY .IDENT -5.0- ; ; ;+ ;THIS MODULE IS CALLED TO LOCATE THE NEXT USER DIRECTORY ; TO OPERATE UPON. ;- ; ; SYSTEM MACRO CALLS ; .MCALL CLOSE$,READ$,WAIT$,OFID$ SRDNUD:: MOV #UFDFDB,R0 ; GET THE FDB TO USE MOV #MFDNUM,F.FNB+N.FID(R0) ; SET FILE ID MOV #MFDSEQ,F.FNB+N.FID+2(R0) ; ...AND SEQ MOVB #FO.RD,F.FACC(R0) ; SET READ ACCESS 1$: MOV NXUIC$,R1 ; GET INDEX OF NEXT UIC IN MFD DEC R1 ; CHANGE TO ZERO OFFSET MOV R1,R2 ; CREAT A COPY BIC #37,R1 ; REMOVE ALL BUT BLOCK NUMBER BIC R1,R2 ; ISOLATE OFFSET WITHIN BLOCK ROL R1 ; MOVE BLK NUM ROL R1 ; INTO HI ROL R1 ; BYTE OF REG SWAB R1 ; SET IT LOW INC R1 ; SET TO '1' OFFSET MOV R1,F.VBN+2(R0) ; SET DISIRED VIRTUAL BLOCK NUM IN FDB 5$: MOV #MFDBF$,F.BKDS+2(R0) ; SET BUFFER ADDRESS TO HEADER BUFFER CMP F.VBN+2(R0),MFDBK$ ; IS THIS THE BLOCK IN MEMORY BEQ 20$ ; BR IF YES MOV F.VBN+2(R0),R1 ; SAVE THIS INCASE NOT OPEN OFID$ R0 ; MAKE SURE IT IS OPEN MOV R1,F.VBN+2(R0) ; SET BLOCK NUMBER WHERE FCS WANTS IT MOV R1,MFDBK$ ; SAVE BLOCK THATS IN MEMORY READ$ R0 ; ASK FCS TO GET THE DISK BLOCK FOR US BCS 10$ ; BR ON MFD READ ERR WAIT$ R0 ; NOW WAIT FOR READ TO COMPLETE BCC 20$ ; BR IF A-OK 10$: ROR -(SP) ; SAVE C BIT BR 75$ ; TERMINATE THE RUN 20$: ASL R2 ; NOW MUL DIRECTORY ASL R2 ; INDEX BY ASL R2 ; 16 TO FIND ASL R2 ; BYTE INDEX INTO DIRECTORY ADD #MFDBF$,R2 ; FIND ABSOLUTE ADDRESS OF NEXT ENTRY 30$: CMP R2,# ; WORK OUR WAY OVER END BHIS 1$ ; BR IF YES-READ NEXT MFD BLOCK 40$: INC NXUIC$ ; ADD UP INDEX OF DIRECTORY TST (R2) ; THIS ENTRY TAKEN? BEQ 60$ ; NO. CMP #<^RDIR>,D.TYP(R2) ; IS THIS A DIRECTORY? BNE 60$ ; BR IF NO CMP #<^R000>,D.FNAM(R2) ; IS IT THE MFD? BEQ 60$ ; BR IF YES TST WCGRP$ ; IS GRP WILD? BEQ 50$ ; BR IF YES-NO MATCH NEDDED CMP WCGRP$,D.FNAM(R2) ; NOT WILD-DOES IT MATCH? BNE 60$ ; BR IF NO-TRY NEXT ENTRY 50$: TST WCUSR$ ; WILD CARD USER? BEQ 70$ ; BR IF YES-NO MATCH NEEDED CMP WCUSR$,D.FNAM+2(R2) ; NO WILD-CHECK FOR MATCH BEQ 70$ ; BR IF MATCH-PROCESS THIS ENTRY 60$: ; COME ON DIRECTORY NO-MATCH ADD #D.SIZ,R2 ; ADVANCE TO NEXT CANIDATE BR 30$ ; TRY AGAIN 70$: ; COME HERE ON DIRECTORY MATCH CLR -(SP) ; GET A GOOD INDIACATOR 75$: CALL CCLOSE ; CONDITIONALLY CLOSE THE MFD ROL (SP)+ ; PUT THE C BIT BACK BCS 99$ ; BR IF NON-FOUND TSTB SWMSK$ ; /WB SPECIFIED BPL 76$ ; BR IF NO MOVB #FO.MFY,F.FACC(R0) ; SET ACCESS OF FILE TO MODIFY 76$: MOV #8.,R1 ; SET SIZE OF FILE NAME BLOCK ADD #F.FNB,R0 ; POINT AT FILE NAME PART OF FDB 80$: MOV (R2)+,(R0)+ ; COPY FILE INFO FOR LATER SOB R1,80$ ; DO ALL WORDS 99$: RETURN .END