.TITLE SRDNUD-NEXT USER DIRECTORY .IDENT -6.5- ; Jan-85 .ENABL LC ;+ ;THIS MODULE IS CALLED TO LOCATE THE NEXT USER DIRECTORY ; TO OPERATE UPON. ;- ; ; MODIFICATIONS: ; ; BT001 - 01-DEC-81 ; CHANGE SYMBOL FOR /00 SWITCH VALUE TO ZDSW (FROM ZESW) AND MOVE ; TO SWMS3$ ; ; CEF001 -- 1-June-83 ; PSECT added ; ; ; VERSION 6.5 - 16-Jan-85 (;WG001) ; ; SRD Working Group ; ; Named directories of the form "[ZZ ... ]" are considered ; "system directories" on P/OS. ; If named directories not supported, ignore any that exist ; in the MFD. ; ;= ; ;SYSTEM MACRO CALLS ; ;CEF001 .PSECT SRDCOD,I,LCL,REL,CON,RO ;CEF001 ; ;CEF001 ; .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]? ;BT001 BNE 43$ ; If NE yes - don't bother to check for it CMP #<^R000>,D.FNAM(R2) ; DON'T INCLUDE [0,0] IN WILDCARD BEQ 60$ CMP #<^R000>,D.FNAM+2(R2) BEQ 60$ ; 43$: .IF NDF N$$DIR ; If named directories not supported ;WG001 CMP D.FNAM(R2),#<^R000> ; A numeric directory? ;WG001 BLO 60$ ; LO - no, ignore it ;WG001 .ENDC ;N$$DIR ;WG001 BIT #SYSW,SWMS2$ ; INCLUDE SYSTEM UFD'S ?? BNE 45$ ; YES TST WCGRP$ ; Is group wild? BNE 45$ ; If NE no - it's valid anyway .IF DF P$$OS ;WG001 CMP D.FNAM(R2),#<^RZZ > ; P/OS system directory? ;WG001 BLO 70$ ; LO - no, neither type ;WG001 CMP D.FNAM(R2),#<^RZZ9> ; P/OS system directory? ;WG001 BLOS 60$ ; LOS - yes ;WG001 .ENDC ;WG001 CMP D.FNAM(R2),#<^R010> ; A system directory? ;WG001 BHI 50$ ; HI - no, a numeric non-system dir ;WG001 .IF DF N$$DIR ; If named directories supported ;WG001 CMP D.FNAM(R2),#<^R000> ; A numeric system directory? ;WG001 BHIS 60$ ; HIS - yes, a numeric system directory ;WG001 .IFF ;N$$DIR ; If named directories not supported, already know ... ;WG001 BR 60$ ; We have a numeric system directory ;WG001 .ENDC ;N$$DIR ;WG001 ;**-2 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