.TITLE ERRMSG SUBROUTINE .LIST TTM,MEB ; ; *************************************************************** ; MODULE ERRMSG ENTRY POINT ERRMSG ; ; AUTHOR: L.MOORE ; ; DATE: 20DEC76 ; ; CALLING SEQUENCE: CALL ERRMSG(ARG1,ARG2,ARG3,...) ; ; ARG1 = MESSAGE # TO BE OUTPUT (FROM ERROR.MSG FILE) ; ; ARG2... = MESSAGE OVERLAYS OR OVERLAY COUNTS ; [ASCII TO BE ONLY ADDRESSES E.G.- ; CALL ERRMSG(N,IGETAD('OVERLAY')) ; OR CALL ERRMSG(N,IGETAD(BUFFER)) ] ; ; ; FUNCTION: THIS ROUTINE INTERFACES WITH THE SYSTEM MESSAGE OUTPUT ; HANDLER TO GENERATE ERROR MESSAGES. MESSAGE #'S ; FROM 1=>99 GO TO SYSTEM CONSOLE AND THE USER'S TERMINAL. ; MESSAGE #'S 100=>32767 GO TO THE USER'S TERMINAL ONLY ; ; NB. THIS ROUTINE USES MO FOR MESSAGES TO SYSTEM CONSOLE LOG (LU6) ; BUT MO ACTUALLY SENDS THESE TO TI (LU3). THIS LUN SHOULD BE ; REDIRECTED TO LU6 WHEN IN PRODUCTION. THIS WILL ALSO CAUSE ; FORTRAN RUN TIME ERROR MESSAGES, ETC TO BE DIRECTED THERE. ; IN MODULE [200,100]ERMMSG.MAC IS A ROUTINE ERRMSG WHICH ; DOES ITS OWN I/O TO CONSOLE ONLY USING MO FOR FORMATING ; ; ; ******************************************************************* ; ; .PSECT .MCALL MOUT$S,QIOW$S,QIOSY$ ; ERRMSG:: QIOSY$ ;SET QIO SYMBOLICS MOV @2(R5),R0 ;PUTERROR MSG # IN RO ; CLR R1 ;SET UP PARM LIST FROM ARG'S MOV #ARG,R2 ;SET COUNTER & GET PARM ADDR MOV R5,R3 ;GET ARG ADDR ADD #4,R3 MOV (R5),R4 ;GET # OF ARG'S 1$: INC R1 CMPB R1,R4 BEQ 2$ MOV @(R3)+,(R2)+ ;MOV ARG IN BNE 1$ ;-NO ; 2$: CMP #100.,R0 ;CHECK IF SYS ERR BGT SYSER ;-YES ; ; *** REGULAR ERROR *** ; MOUT$S #FILNM,#ARG,R0,,,#BFFR+2,BFS,#IST,,ERR BR TERIO ; ; *** SYSTEM ERROR *** ; SYSER: NOP ; MOUT$S #FILNM,#ARG,R0,,,#BFFR+2,BFS,#IST,,ERR ; ; *** OUTPUT MSG TO TERM *** ; TERIO: MOV BFFR+4,BFSZ ;GET MSG LENGTH ADD #6,BFSZ MOV AS0,BFFR ;SET UP OUT BUFFER MOV AS1,BFFR+2 MOV AS2,BFFR+4 ; ; QIOW$S #IO.WVB,#5,#13,,#IST,,<#BFFR,BFSZ,#40> ; ; WRITE(5,100)(BFFER(I),I=1,BFSZ) ;100 FORMAT(A1) ; ;+ START OF WRITE MACRO MOV #5,-(SP) ;LOGICAL UNIT 5 MOV #.100,-(SP) ;FORMAT ADDRESS JSR PC,OSF$ ;CALL SEQ. FORM. OUTPUT MOV #1,R0 L$FALC: MOV R0,-(SP) ADD #BFFR-1,@SP JSR PC,IOAB$ INC R0 CMP R0,BFSZ BLE L$FALC MOV R0,I JSR PC,EOLST$ ;- END OF WRITE MACRO RTN: RTS PC ; ; *** MO ERROR ROUTINE *** ; ERR: MOV #24.,R0 ;ERROR MSG LENGTH MOV R0,BFFR+4 ;-PUT IN BUFFER MOV #ERRM,R1 ;ERROR MSG ADDRESS MOV #BFFR,R2 ADD #6,R2 1$: MOVB (R1)+,(R2)+ ;PUT MSG IN BFFR DEC R0 BNE 1$ MOV IST,BFFR+34. ;PUT ERROR CODE IN BUFFER RTS PC ; ; ; ; FILNM: .WORD EFIL-FILE ;FILENAME LENGTH .WORD FILE ;FILENAME ADDRESS FILE: .ASCIZ /SY0:[1,2]PMMERR.MSG/ ;ERROR MSG. FILE .EVEN EFIL: .WORD 0 BFFR: .BLKW 40. ;OUTPUT BUFFER BFS: .WORD 64. ; -SIZE IN MO BFSZ: .WORD 80. ; -SIZE IN QIO IST: .BLKW 10. ;STATUS BLOCK AS0: .WORD 3407 ;MSG NOISE AS1: .ASCII /**/ ;MSG DELIMITER AS2: .ASCII /* / ERRM: .ASCII /MO HANDLER ERROR-CODE: / ARG: .BLKW 10. ;MO ARG ARRAY ;+ START OF FORMAT MACRO .100: .BYTE 032,040,334,200 .WORD L$FAIE .BYTE 001,012 I: .WORD 0 ; L$FAIE: MOV BFSZ,R0 RTS PC .GLOBL $OTSVA ;- END OF FORMAT MACRO ; .END