; ; GETNAM ; ; THIS ROUTINE RETURNS THE FILE NAME STRING FOR A FILE GIVEN ; ONLY THE FORTRAN LOGICAL UNIT NUMBER. THE FILE MUST BE OPEN ALREADY ; ON THE LUN, AND FROM FORTRAN THIS MEANS YOU MUST HAVE READ OR WRITTEN ; ON THE FILE AT LEAST ONCE BEFORE CALLING GETNAM. THE STRING IS TERMINATED ; WITH A NUL BYTE. BY 'FILE NAME' I MEAN THE DEVICE, UNIT, UIC, ; 9 CHARACTER FILE NAME, FILE TYPE (EXTENTION), AND VERSION NUMBER. ; THESE ARE ALL CONVERTED TO ASCII CHARACTERS WITH THE APPROPRIATE ; PUNCTUATION MARKS (COLON, SQUARE BRACKETS, DECIMAL POINT, SEMOCOLON). ; UNFORTUNATELY, IT IS NOT POSSIBLE AT THIS TIME TO RETURN THE ; ACUTUAL DIRECTORY UIC AT THIS TIME, JUST THE OWNING UIC, BUT ; I AM LOOKING INTO THE PROBLEM. ; MIKE HIGGINS ; ; CALLING CONVENTION: ; CALL GETNAM(LUN,STRING) ; WHERE ; LUN IS AN INTEGER LOGICAL UNIT NUMBER. ; STRING IS A BYTE ARRAY TO STORE THE RESULTING NAME IN. ; THIS VARIABLE SHOULD BE DIMENSIONED TO ABOUT 26 BYTES. ; .TITLE GETNAM .MCALL QIOW$S,FDOF$L FDOF$L .GLOBL $FCHNL,$OTSV GETNAM::MOV @2(R5),R2 ;GET LUN MOV @#$OTSV,R3 ;GET WORK AREA ADDRESS JSR PC,$FCHNL ;FIND FDB ADDRESS ADD #14,R0 ;SKIP FORTRAN FDB JUNK MOV R0,R3 ;SAVE THE FDB FOR LATER MOV 4(R5),R0 ;GET OUTPUT STRING ADDRESS MOVB F.FNB+N.DVNM(R3),(R0)+ ;GET THE DEVICE NAME MOVB F.FNB+N.DVNM+1(R3),(R0)+ ;DONT FORGET THE 2ND BYTE MOV F.FNB+N.UNIT(R3),R1 ;GET THE UNIT NUMBER, AND CLR R2 ;LEFT JUSTIFY IT WHEN YOU CALL $CBOMG ;CONVERT IT TO ASCII MOV R3,R1 ;GET FDB ADD #F.FNB,R1 ;CALCULATE FILE ID BLOCK ADDRESS, ;AND READ THE FILE UIC!! QIOW$S #IO.RAT,@2(R5),#1,,IOSTAT,, MOV #UIC,R1 ;EDMSG COMMAND STRING MOV #ABUF,R2 ;POINTER TO OWNING UIC CALL $EDMSG ;CONVERT UIC TO ASCII MOV #NAM,R1 ;CONVERSION STRAING FOR EDMSG FILE NAME MOV R3,R2 ;GET FDB AGAIN, ADD #F.FNB+N.FNAM,R2 ;PLUS FILE NAME OFFSETT CALL $EDMSG ;CONVERT IT TO ASCII CLRB (R0)+ ;TERMINATE WITH A NULL RTS PC IOSTAT: .WORD 0 RUIC: .BYTE -01,2 .WORD UBUF .WORD 0 ABUF: .WORD UBUF+1,UBUF UBUF: .WORD 0 UIC: .ASCIZ /:[%B,%B]/ NAM: .ASCIZ /%X/ .END