.TITLE FNDIR - FIND DIRECTORY .IDENT /01.00/ .LIST MEB .PSECT FNDIR ; ; AUTHOR: H. L. COLEMAN ; MILLIKEN AND COMPANY ; P. O. BOX 1926 ; MAIL STOP M-103 ; SPARTANBURG, S. C. 29304 ; (803)573-2556 ; ; VERSION: 01.00 ; ; DATE: 02/01/78 ; ; MODIFICATIONS: ; ; FUNCTION: FIND THE DIRECTORY FILE AND SET THE FILE ID IN THE ; FILE NAME BLOCK. ; ; INPUT: ; ; R0 = UIC OF THE DESIRED DIRECTORY ; R1 = A(FILE NAME BLOCK) ; LUN 2 ASSIGNED TO DEVICE ; ; OUTPUT: ; ; IF CC - NO ERROR DETECTED ; FILE NAME BLOCK CONTAINS DIRECTORY FILE ID (N.DID) ; RO = UIC ; R1 = A(FILE NAME BLOCK) ; ; IF CS - ERROR DETECTED ; ; R1 = ERROR CODE FROM IOSB ; .MCALL QIOW$S,CKDSW$S .PAGE ; CONSTANTS AND WORK AREAS ; IOSB: .WORD 0,0 ;IOSB FOR FIND .PAGE $FNDIR::MOV R0,-(SP) ;SAVE REGISTERS MOV R1,-(SP) MOV R2,-(SP) CLR (R1)+ ;CLEAR FILE ID CLR (R1)+ CLR (R1)+ CALL UICR50 ;CONVERT UIC TO RAD50 MOV (SP),R2 ;R2 = LUN CLR (R1)+ ;CLEAR LAST WORD OF NAME MOV #^RDIR,(R1)+ ;INSERT TYPE CLR (R1)+ ;CLEAR VERSION CLR (R1)+ ;CLEAR STATUS CLR (R1)+ ;CLEAR .FIND CONTEXT MOV #4,(R1)+ ;MFD FILE NUMBER MOV #4,(R1)+ ;MDFD FILE SEQUENCE CLR (R1) ;UIC [0,0] MOV 2(SP),R1 ;R1 = A(FILE NAME BLOCK) 1000$: QIOW$S #IO.FNA,R2,#24.,,#IOSB,,<,,,,,R1> ;FIND DIRECTORY CKDSW$S 1000$,1200$ ;CHECK DSW STATUS MOV (R1)+,18.(R1) ;COPY DIRECTORY ID MOV (R1)+,18.(R1) MOV (R1)+,18.(R1) TSTB IOSB ;WAS FIND SUCESSFULL BPL 1100$ ;IF PL, YES MOV IOSB,(SP) ;SET IOSB STATUS IN RETURN R1 SEC ;INDICATE ERROR 1100$: MOV (SP)+,R1 ;RESTORE REGISTERS MOV (SP)+,R2 MOV (SP)+,R0 RETURN ;RETURN TO CALLER 1200$: HALT ;ABORT THE TASK .PAGE ; UICR50 ; ; FUNCTION: SUBROUTINE TO CONVERT UIC TO RAD50. ; ; INPUT: ; ; R0 = UIC - .BYTE GROUP,OWNER ; R1 = A(TWO WORD BUFFER) ; ; OUTPUT: ; ; R0 = DESTROYED ; R1 = A(NEXT WORD AFTER BUFFER) ; R2 = DESTROYED ; BUFFER CONTAINS SIX RAD50 CHARACTERS ; UICR50: CALL 1000$ ;CONVERT GROUP TST (R1)+ ;POINT TO SECOND WORD CALL 1000$ ;CONVERT OWNER TST (R1)+ ;POINT TO NEXT WORD RETURN ;RETURN TO CALLER 1000$: CLR (R1) ;CLEAR RESULT CLR R2 ;CLEAR WORK REGISTER CALL 1200$ ;CONVERT HIGH DIGIT CALL (PC) ;CONVERT 2ND DIGIT, RETURN TO 3RD MOV (R1),-(SP) ;PUT RESULT ON STACK ASL (R1) ;TIMES 2 ASL (R1) ;TIMES 4 ADD (SP)+,(R1) ;TIMES 5 ASL (R1) ;TIMES 10 ASL (R1) ;TIMES 20 ASL (R1) ;TIMES 40 CLR R2 ;CLEAR WORK REGISTER ASL R0 ;PUT NEXT DIGIT IN WORK REGISTER ROL R2 1200$: ASL R0 ROL R2 ASL R0 ROL R2 ;R2 = NEXT DIGIT ADD #36,R2 ;PLUS RAD50 ZERO ADD R2,(R1) ;ADD TO RESULT RETURN ;RETURN .END