.TITLE SRDNUD-NEXT USER DIRECTORY .IDENT -6.1- ; 01-DEC-81 ;**NEW** ;+ ;**-1 ;THIS MODULE IS CALLED TO LOCATE THE NEXT USER DIRECTORY ; TO OPERATE UPON. ;- ; ;**NEW** ; MODIFICATIONS: ;**NEW** ; ;**NEW** ; BT001 - 01-DEC-81 ;**NEW** ; CHANGE SYMBOL FOR /00 SWITCH VALUE TO ZDSW (FROM ZESW) AND MOVE ;**NEW** ; TO SWMS3$ ;**NEW** ; ;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!FA.SHR,F.FACC(R0) ;SET READ ACCESS OFID$ R0 ;OPEN THE MFD BCC 1$ ;BR IF OK! CLR NXUIC$ ;RESET FLAG FOR WILD CARD FERR MFDE ;REPORT PROBLEM WITH MFD 1$: MOV NXUIC$,R1 ;GET INDEX INTO UIC 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 #HDBUF$,F.BKDS+2(R0) ;SET BUFFER ADDRESS TO HEADER BUFFER READ$ R0 ;ASK FCS TO GET THE DISK BLOCK FOR US BCS 10$ ;BR ON MFD READ ERR WAIT$ R0 ;NOW WAIT FOR REEAD 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 #HDBUF$,R2 ;FIND ABSOLUTE ADDRESS OF NEXT ENTRY 30$: CMP R2,# ;WORK OUR WAY OVER END BLO 40$ ;BR IF NO CLR R2 ;SET ZERO OFFSET WITHIN BLOCK BR 5$ ;GO READ-FCS INCRENETED BLOCK NUM FOR US 40$: INC NXUIC$ ;ADD UP INDEX OF DIRECTORY TST (R2) ; IS THIS SLOT EMPTY?? BEQ 60$ ; YES, SKIP OVER IT CMP #<^RDIR>,D.TYP(R2) ;IS THIS A DIRECTORY? BNE 60$ ;BR IF NO BIT #ZDSW,SWMS3$ ; Allowing [0,0]? ;**NEW** BNE 43$ ; If NE yes - don't bother to check for it ;**-1 CMP #<^R000>,D.FNAM(R2) ; DON'T INCLUDE [0,0] IN WILDCARD BEQ 60$ CMP #<^R000>,D.FNAM+2(R2) BEQ 60$ ; 43$: BIT #SYSW,SWMS2$ ; INCLUDE SYSTEM UFD'S ?? BNE 45$ ; YES TST WCGRP$ ; Is group wild? BNE 45$ ; If NE no - it's valid anyway CMP #<^R010>,D.FNAM(R2) ; NO--CHECK THIS OUT BHIS 60$ 45$: 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$: CLOSE$ R0 ;CLOSE THE MFD ROL (SP)+ ;PUT THE C BIT BACK BCS 99$ ;BR IF NON-FOUND 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