.TITLE FMOUT -- FORTRAN MESSAGE OUTPUT .IDENT /ICR001/ .MCALL MOUT$S,EXST$S ; ; CALLING SEQUENCE: ; CALL FMOUT(IFMES,MNUM,IPRBF,NABRT,NFTRAC) ; IFMES = MESSAGE FORMAT STATEMENT OR FILENAME CONTAINING ; FORMAT STATEMENT ; MNUM = IF NEGATIVE OR ZERO, IFMES CONTAINS FORMAT STRING. ; IF GREATER THAN ZERO, IFMES CONTAINS A FILESPEC AND ; MNUM IS THE MESSAGE NUMBER. ; IPRBF = PARAMETER BUFFER FOR MESSAGE (SHOULD HAVE AT LEAST ; NFTRAC+1 ELEMENTS IF NFTRAC IS POSITIVE). ; NABRT = IF NON-ZERO, PROGRAM WILL ABORT AFTER THE MESSAGE. ; IF ZERO, SUBROUTINE WILL RETURN. ; NFTRAC = IF POSITIVE, INDICATES THE WORD NUMBER AT WHICH TO ; PLACE THE TWO WORDS REQUIRED FOR FORTRAN TRACEBACK. ; ; USERS MUST READ DOCUMENTATION ON MESSAGE OUTPUT HANDLER PRIOR ; TO ATTEMPTING TO UNDERSTAND THE OPERATION OF THIS ROUTINE. ; SEE CHAPTER 11 OF THE IAS/RSX-11D DEVICE HANDLERS REFERENCE ; MANUAL. ; TBUF: .BLKW 2 ; FMOUT:: MOV 6(R5),R1 ;GET PARAMETER BUFFER ADDRESS. MOV @12(R5),R0 ;IS FORTRAN TRACEBACK REQUIRED? BLE 20$ ;NO. DEC R0 ;YES, SO CALC ADDRESS. ADD R0,R1 ADD R0,R1 MOV $NAMC,(R1)+ ;MOVE LISTHEADS INTO PARAM. BUF. MOV $SEQC,(R1) 20$: MOV 2(R5),R1 ;GET STRING ADDRESS MOV R1,TBUF+2 ;SAVE IN TBUF CLR TBUF ;INITIALIZE COUNT LCNT: TSTB (R1)+ ;SCAN FOR ZERO BYTE. BEQ CALCON INC TBUF ;COUNT CHARACTERS. BR LCNT CALCON: MOUT$S #TBUF,6(R5),@4(R5),CONT,SYLOG TST @10(R5) ;USER WISH ABORT? BEQ RET ;NO. ; EXST$S #EX$SEV ;YES, EXIT WITH SEVERE ERROR. CALL EXIT RET: RETURN ;RETURN TO USER. .END