;------------------------------------------------------------------------ ; ERRPRT.MAC ; ; Phil Hoffman ; Department of Chemistry ; Michigan State Univeristy ; East Lansing, MI 48824 ; 21-August-1981 ; ; This routine prints, on the lun assigned by the Task Builder for ; Error Message Output, the message and arguments passed in the ; call ;------------------------------------------------------------------------ ;Calling sequence from FORTRAN ;------------------------------------------------------------------------ ; ; CALL ERRPRT(RTNAME,IARG,NARG,ERSTRN) ; ; RTNAME => Byte array containing 8 characters of routine title ; ; IARG => Integer array of dimension NARG containing numeric ; associated arguments for output ; ; NARG => Number of associated arguments ; ; ERSTRN => Byte string containing 16 characters of specific ; error message to be printed ;------------------------------------------------------------------------ .PSECT ERRPRT .TITLE ERRPRT ;ERROR PRINT ROUTINE MODELLED AFTER TVA'S ERRPRT.FTN .IDENT /V1.2/ .MCALL QIOW$,DIR$ ;------------------------------------------------------------------------ ;Define Local Offsets ;------------------------------------------------------------------------ R.TNAM=2 ;OFFSET TO 8 CHAR ROUTINE TITLE I.ARG=4 ;OFFSET TO NUMERIC ARGUMENTS N.ARG=6 ;OFFSET TO NUMBER OF NUMERIC ARGUMENTS E.RSTR=8. ;OFFSET TO 16 CHAR ERROR MESSAGE ;------------------------------------------------------------------------ ;Ascii buffers and QIOW$ ;------------------------------------------------------------------------ WRITE: QIOW$ IO.WVB,,1,,,,<,> ;QIOW$ TO THE TERMINAL CR=15 ;ASCII FOR CARRIAGE RETURN AND LF=12 ;LINE FEED TEXT: .ASCII /ERROR / TEXT1: .ASCII /: / ;COLON AND SPACE BUF: .BLKB 6 ;BUFFER FOR ASCII CONV. OF ERROR NUM. ;======================================================================== ;Entry Point ;======================================================================== ERRPRT:: MOV R0,-(SP) ;SAVE THE REGISTERS MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) ;------------------------------------------------------------------------ ;Write general error message ;------------------------------------------------------------------------ MOV .MOLUN,WRITE+Q.IOLU ;SET THE CORRECT LUN MOV #TEXT,WRITE+Q.IOPL ;POINT TO THE FIRST STRING TO WRITE MOV #8.,WRITE+Q.IOPL+2 ;AND INDICATE ITS SIZE DIR$ #WRITE ;WRITE IT OUT ;------------------------------------------------------------------------ ;Write name of routine causing the error ;------------------------------------------------------------------------ MOV R.TNAM(R5),WRITE+Q.IOPL ;GET THE ROUTINE NAME INTO THE QIOW$ DIR$ #WRITE ;AND WRITE IT OUT MOV #TEXT1,WRITE+Q.IOPL ;SET UP TO WRITE A COLON AFTER MOV #1,WRITE+Q.IOPL+2 ;THE ROUTINE NAME DIR$ #WRITE ;------------------------------------------------------------------------ ;Write specific error message ;------------------------------------------------------------------------ MOV E.RSTR(R5),WRITE+Q.IOPL ;GET THE ERROR MESSAGE INTO THE QIOW$ MOV #16.,WRITE+Q.IOPL+2 ;SET ITS LENGTH DIR$ #WRITE ;AND WRITE IT OUT ;------------------------------------------------------------------------ ;Set up for the conversion of the error codes to Ascii (in Octal) ;------------------------------------------------------------------------ MOV @N.ARG(R5),R3 ;SET UP A COUNTER FOR THE NUM OF ARGS. TST R3 ;SEE IF NUM ARGS. .LE. ZERO BLE OUT ;YES, GET OUT MOV I.ARG(R5),R4 ;AND A POINTER TO THE ARGS ;------------------------------------------------------------------------ ;Begin Conversion and writing ;------------------------------------------------------------------------ CONV: CLR BUF ;CLEAR THE CLR BUF+2 ;OUTPUT CLR BUF+4 ;BUFFER MOV #BUF,R0 ;POINT TO THE OUTPUT BUFFER MOV #0,R2 ;INDICATE LEADING ZERO SUPPRESSION MOV (R4)+,R1 ;GET THE ARGUMENT TO CONVERT CALL $CBOMG ;AND CONVERT IT TO OCTAL ASCII MOV #TEXT1+1,WRITE+Q.IOPL ;POINT TO THE ASCII SPACE MOV #1,WRITE+Q.IOPL+2 ;AND SET LENGTH FOR 1 CHAR. DIR$ #WRITE ;WRITE OUT THE SPACE MOV #BUF,WRITE+Q.IOPL ;POINT TO THE CONV. CHAR. OUTPUT BUF. MOV #6,WRITE+Q.IOPL+2 ;AND SET THE CORRECT LENGTH DIR$ #WRITE ;AND WRITE IT OUT SOB R3,CONV ;LOOP UNTIL ALL ARGS WRITTEN ; OUT: MOV #TEXT,WRITE+Q.IOPL ;POINT TO THE ORIGINAL TEXT MOV #2,WRITE+Q.IOPL+2 ;SET FOR 2 CHARACTERS DIR$ #WRITE ;WRITE OUT THE ;------------------------------------------------------------------------ ;Clean up and go home ;------------------------------------------------------------------------ MOV (SP)+,R4 ;RESTORE THE REGISTERS MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RTS PC ;RETURN .END