.TITLE SRDNUD-NEXT USER DIRECTORY .IDENT /V02.0/ ;2-JUN-76 ;+ ;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 OFID$ R0 ;OPEN THE MFD BCC 1$ ;BR IF OK! 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 CMP R1,MFDBLK ;IS THIS BLOCK IN CORE ;++002 BEQ 20$ ;EQ - SKIP READ 5$: MOV R1,F.VBN+2(R0) ;UPDATE BLOCK ;002 MOV R1,MFDBLK ;SAVE BLOCK NUMBER ;--002 MOV #MFDBUF,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 CLR MFDBLK ;CLEAR MFD BLOCK ;002 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 #MFDBUF,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 INC R1 ;BUMP BLOCK ;002 BR 5$ ;GO READ BLOCK 40$: INC NXUIC$ ;ADD UP INDEX OF DIRECTORY TST (R2) ;IS SLOT OCCUPIED? ;002 BEQ 60$ ;EQ - NO ;002 CMP #<^RDIR>,D.TYP(R2) ;IS THIS A DIRECTORY? BNE 60$ ;BR IF NO 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 MOV N.FID(R2),SAVDID ;SAVE DIRECTORY ID HERE ALSO ;+++002 MOV N.FID+2(R2),SAVDID+2 ;+++002 80$: MOV (R2)+,(R0)+ ;COPY FILE INFO FOR LATER SOB R1,80$ ;DO ALL WORDS 99$: RETURN .END