.TITLE GETPUT FORTRAN GET/PUT INTERFACE .IDENT /ICR001/ ; .MCALL FDOF$L,FCSBT$,GET$S,PUT$S ; FDOF$L ;DEFINE FDB OFFSETS FCSBT$ ;DEFINE FDB BIT DEFINITIONS FFDBLN = 6*2 ;LENGTH OF FORTRAN FDB HEADER ; .PSECT $MACOD,RW,I,LCL,CON GETFDB: MOV @2(R5),R2 ;GET LUN CALL $FCHNL ;GET ASSOCIATED FFDB BCS 100$ ;CS - ILLEGAL LUN ADD #FFDBLN,R0 ;OFFSET TO REAL FDB MOV SP,R1 SUB #12,SP ;MAKE ROOM FOR SAVE MOV (R1),(SP) ;SET UP FOR COROUTINE MOV F.URBD(R0),(R1) MOV F.URBD+2(R0),-(R1) MOV F.NRBD(R0),-(R1) MOV F.NRBD+2(R0),-(R1) MOV F.RACC(R0),-(R1) ;SAVE FORTRAN FDB INFO JSR PC,@(SP)+ ;CALL COROUTINE MOV (SP)+,F.RACC(R0) ;RESTORE FORTRAN FDB INFO MOV (SP)+,F.NRBD+2(R0) MOV (SP)+,F.NRBD(R0) MOV (SP)+,F.URBD+2(R0) MOV (SP)+,F.URBD(R0) RETURN 100$: MOV #-99.,@10(R5) ;ILLEGAL LUN TST (SP)+ RETURN ; ;GET LOGICAL RECORD ENTRY POINT ; CALL GET(LUN,BUF,SIZE,STAT) ; .ENABL LSB GET:: CALL GETFDB ;GET FORTRAN FDB BIC #FD.PLC,F.RACC(R0) ;CLEAR LOCATE MODE GET$S R0,4(R5),@6(R5) ;GET A RECORD BCS 110$ ;CS - IT FAILED MOV F.NRBD(R0),@10(R5) ;RETURN RECORD LENGTH RETURN ; ;PUT LOGICAL RECORD ENTRY POINT ; CALL PUT(LUN,BUF,SIZE,STAT) ; PUT:: CALL GETFDB ;GET FORTRAN FDB BIC #FD.PLC,F.RACC(R0) ;CLEAR LOCATE MODE PUT$S R0,4(R5),@6(R5) ;PUT A RECORD BCS 110$ ;CS - IT FAILED CLR @10(R5) ;RETURN SUCCESS RETURN 110$: MOVB F.ERR(R0),R1 ;GET ERROR - SIGN EXTEND MOV R1,@10(R5) ;AND RETURN IT RETURN .DSABL LSB .END