.TITLE UFILNO .IDENT /V01/ ; ;UFILNO IS A FORTRAN CALLABLE SUBROUTINE THAT RETURNS THE FILE NUMBER ;OF A SPECIFIED FILE. THE CALLING SEQUENCE IS: ; CALL UFILNO(LUN,DEV,UIC,FILNAM,FILNO,STATUS) ;LUN IS AN INTEGER*2 SPECIFYING A LOGICAL UNIT NOT CURRENTLY IN USE ;DEV IS A BYTE ARRAY CONTAINING THE DEVICE & UNIT (EX. "DR0:") ;UIC IS A BYTE ARRAY CONTAINING THE DIRECTORY ID (EX. "[1,54]") ;FILNAM IS A BYTE ARRAY CONTAINING THE FILENAME (EX. "TEST.DAT;2") ;FILNO IS AN INTEGER TO RECEIVE THE FILE NUMBER OF THE FILE ;STATUS IS A BYTE RETURN CODE (1=FILE EXISTS, -26=FILE DOES NOT EXIST, ; ANY OTHER=SEE FCS ERROR CODES) ;DEV, UIC, AND FILNAM ARRAYS MUST BE DELIMITED BY A BINARY ZERO ;SEE I/O OPERATIONS REFERENCE MANUAL FOR DESCRIPTION OF .PARSE & .FIND ; ; GLEN HOFFING 10-JUN-81 ; .PSECT UFILNO UFILNO::.MCALL FDOP$R,FDBDF$,FDOF$L ;DEFINE MACRO CALLS FDOF$L ;DEFINE FDB OFFSETS LOCALLY MOV 4(R5),R1 ;CALCULATE LENGTH OF DEV STRING MOV #4,R0 ;AND MOVE TO DSPT DEV: TSTB (R1)+ BEQ DEVEND SOB R0,DEV DEVEND: SUB #4,R0 NEG R0 MOV R0,DSPT MOV 4(R5),DSPT+2 ;MOVE ADDRESS OF DEV STRING TO DSPT+2 MOV 6(R5),R1 ;CALCULATE LENGTH OF UIC STRING MOV #9.,R0 ;AND MOVE TO DSPT+4 UIC: TSTB (R1)+ BEQ UICEND SOB R0,UIC UICEND: SUB #9.,R0 NEG R0 MOV R0,DSPT+4 MOV 6(R5),DSPT+6 ;MOVE ADDRESS OF UIC STRING TO DSPT+6 MOV 8.(R5),R1 ;CALCULATE LENGTH OF FILENAME STRING MOV #18.,R0 ;AND MOVE TO DSPT+8 FIL: TSTB (R1)+ BEQ FILEND SOB R0,FIL FILEND: SUB #18.,R0 NEG R0 MOV R0,DSPT+8. MOV 8.(R5),DSPT+10. ;MOVE ADDRESS OF FILENAME TO DSPT+10 FDOP$R #FDB,@2(R5) ;INITIALIZE FDB WITH SPECIFIED LUN MOV #FDB,R0 MOV #FDB+F.FNB,R1 MOV #DSPT,R2 MOV #0,R3 CALL .PARSE ;PARSE DATASET DESCRIPTOR IN DSPT BLO ERRSTA ;INTO FILENAME BLOCK IN FDB CALL .FIND ;IF NO PARSE ERROR, SEARCH FOR FILE ERRSTA: MOV FDB+F.ERR,@12.(R5) ;RETURN STATUS FROM PARSE OR FIND MOV (R1),@10.(R5) ;RETURN THE FILE NUMBER RETURN FDB: FDBDF$ ;ALLOCATE FDB DSPT: .BLKW 6 ;ALLOCATE DATASET DESCRIPTOR .END