; ; ; B$OPENFOR ; ; B$OPENFOR - INTERNAL ROUTINE TO OPEN A FORTRAN FILE ; ; ROUTINE NAME: B$OPENFOR ; ; PURPOSE: To open a file in such a manner that FORTRAN will ; think he opened it himself. ; ; CALLABLE: From MACRO only. ; ; PARAMETERS: ; R0 Fdb address. ; R1 Address of an error routine (usually B$IOERROR). ; R3 Address of the FORTRAN object time system vari- ; ables area (@ $otsv). ; ; ROUTINES USED: Run time FDB initalizing macros, plus the ; OPEN$W macro. ; ; EXAMPLE: This routine is used by the SUPERMAC PUTLINE ma- ; cro, you should never need to use it otherwise. ; ; AUTHOR: Mike Higgins ; ; SOURCE LANGUAGE: MACRO11 with SUPERMAC ; ; OBJECT MODULE NAME: B$OPEN ; ; LIBRARY: [60,100]DATABASE ; ; MAINTENANCE: See Mike Higgins ; ; .MCALL FDAT$R,FDRC$R,FDOP$R,FDBF$R,OPEN$W,NMBLK$,SUPER SUPER PROCEDURE B$OPENFOR PUSH R0,R1 ;SAVE REGS AWAY ;THE FOLLOWING CODE CONVERTS THE LOGICAL ;UNIT NUMBER FROM BINARY TO AN ASCII FILE ;NAME OF THE FORM FOR0XX, WHERE XX IS THE ;ASCII REPRESENTATION FOR THE LUN. LET R1 :B= F.LUN(R0) ;GET LUN NUMBER FROM FDB LET R0 := #0 ;INITALIZE UPPER WORD FOR DIV LET R0 := R0 / #10. ;GET UPPER AND LOWER CHAR LET R0 := . + #'0 ;CONVERT UPPER CHAR TO ASCII LET R1 := . + #'0 ;CONVERT REMAINDER TO ASCII LET LUN :B= R0 ;STORE UPPER BYTE OF LUN NUMBER LET LUN+1 :B= R1 ;STORE LOWER BYTE OF LUN POP R1,R0 ;RESTORE REGS LET -10(R0) := #1 ;INITALIZE THE MAGIC FORTRAN LET -14(R0) := #102200 ;WORDS IN THE FDB FDAT$R R0,#R.VAR,#FD.FTN,,#-4,#-4 ;VARIABLE LENGTH RECORDS FDRC$R R0,#FD.PLC,10(R3),12(R3) FDOP$R R0,,#NAME,#DEFNAM,#FO.WRT ;INITALIZE NAME IN FDB FDBF$R R0 OPEN$W R0,,,,,,@R1 ;OPEN THE FILE ENDPROCEDURE B$OPENFOR ;DATA STRUCTURES FOR THE FDB MANIPULATIONS NAME: .WORD 0,0 .WORD 0,0 .WORD 6,FILEN FILEN: .ASCII /FOR0/ LUN: .ASCII /01/ DEFNAM: NMBLK$ ,DAT .END