.NLIST TTM .TITLE ERRORS - ERROR PROCESSING SUBROUTINES .SBTTL ERRORS - TITLE PAGE .PSECT ERRORS,RO,I .IDENT /V01.00/ ; ; ************************************************************************ ; * ; THIS PROGRAM IS PROVIDED ON AN "AS IS" BASIS ONLY. DIGITAL EQUIPMENT * ; COMPUTER USER'S SOCIETY, DIGITAL EQUIPMENT CORPORATION, MONSANTO, AND * ; THE AUTHOR DISCLAIM ALL WARRANTIES ON THE PROGRAM, INCLUDING WITHOUT * ; LIMITATION, ALL IMPLIED WARRANTIES OF MERCHANTABLITY AND FITNESS. * ; * ; FULL PERMISSION AND CONSENT IS HEREBY GIVEN TO DECUS AND TO THE DECUS * ; SPECIAL INTEREST GROUPS TO REPRODUCE, DISTRIBUTE, AND PUBLISH AND * ; PERMIT OTHERS TO REPRODUCE IN WHOLE OR IN PART, IN ANY FORM AND * ; WITHOUT RESTRICTION, THIS PROGRAM AND ANY INFORMATION RELATING THERETO * ; * ; ************************************************************************ ; ; VERSION: V01.00 ; ; AUTHOR: RW STAMERJOHN MAPS 24-JUN-77 ; ; THIS MODULE CONTAINS THE COMMON ERROR PROCESSING SUBROUTINES. ; ; ASSEMBLY INSTRUCTIONS: ; ; OBJECT,LISTING=ERRORS .PAGE .SBTTL ERRORS - GLOBAL DEFINITIONS ; ; SYSTEM MACROS: ; .MCALL CALL,RETURN ;SUBROUTINE MACROS. .MCALL EXIT$S ;EXIT TASK. .MCALL GTSK$S ;GET TASK PARAMETERS. .MCALL WTSE$S ;WAIT FOR EVENT FLAG. .MCALL QIO$ ;ISSUE I/O REQUEST. .MCALL DIR$ ;ISSUE DIRECTIVE REQUEST. ; ; GLOBAL DECLARATIONS: ; .GLOBL OERROR ;FORMAT AND OUTPUT ERROR MESSAGE. .GLOBL ERRTMP ;TEMP BUFFER FOR VARIOUS PURPOSES. .GLOBL STRING ;MOVE ASCIZ STRING TO BUFFER. .GLOBL CRLF ;MOVE TO BUFFER. ; ; GLOBAL REFERENCES: ; .GLOBL ERLUN1 ;MESSAGE OUTPUT LUN STORAGE LOCATION. .GLOBL $C5TA ;RAD50 TO ASCII CONVERSION. .GLOBL $CBDSG ;BINARY TO DECIMAL SIGNED CONVERSION. .GLOBL $CBOMG ;BINARY TO OCTAL MAGNITUDE CONVERSION. .GLOBL IO.WLB ;WRITE MESSAGE FUNCTION CODE. .PAGE .SBTTL ERRORS - LOCAL DEFINITIONS ; ; LOCAL MACROS: ; ; NONE. ; ; LOCAL SYMBOLS: ; CR = 15 ;CARRIAGE RETURN. LF = 12 ;LINE FEED. EV.ERR = 24. ;EVENT FLAG FOR ERROR I/O. ; ; LOCAL DATA STRUCTURES. ; ; PURE DATA SECTION. ; DSHMSG: .ASCIZ / -- / XITMSG: .ASCIZ /EXITING DUE TO / ; ERRMSG: .ASCIZ /ERROR / ; APCMSG: .ASCIZ /AT PC / ; .EVEN ; ; IMPURE DATA SECTION. ; .PSECT ERRORD,RW,D ; ; OUTPUT MESSAGE BUFFER, DEFINED FOR 4 LINES OF MAX 64 CHARACTERS APIECE. ; BUFFER: .BLKB <64.*4>+4 .EVEN ; ; TEMP BUFFER FOR VARIOUS PURPOSES. ; ERRTMP::.BLKW 16. ; ; OUTPUT QIO DPB. ; MSGDPB: QIO$ IO.WLB,,EV.ERR,,,, ; ; RETURN TO PURE SPACE. ; .PSECT ERRORS,RO,I .PAGE .SBTTL OERROR * FORMAT AND OUTPUT ERROR MESSAGE ; ; THIS ROUTINE FORMATS AND OUTPUTS AN ERROR MESSAGE. ; ; CALLING SEQUENCE: ; ; CALL BY: JSR PC,OERROR ; ; WHERE: R0 = ERROR NUMBER (0 IF NONE). ; R1 = ERROR TYPE (0 IF NONE). ; R2 = ERROR MESSAGE (0 IF NONE). ; R3 = ERROR PC (0 IF NONE)(ODD IF EXITING). ; R4 = PARAMETER TO SUPPLY TO OPTIONAL LINE ROUTINE. ; R5 = ADDRESS OF OPTIONAL LINE ROUTINE (0 IF NONE). ; ; R1 AND R2 ARE POINTER TO ASCIZ STRINGS. ; ; EXITS WITH: MESSAGE OUTPUT. ; ; ERROR CONDITIONS: ; ; SINCE THIS IS AN ERROR ROUTINE, IT DOES VERY LITTLE TO DETECT ERRORS. ; ; SPECIAL NOTES: ; ; THE OPTIONAL LINE ROUTINE HAS 64 CHARACTERS TO PLAY WITH. ; ; THE FORMAT OF AN ERROR MESSAGE IS (OPTIONAL PARTS IN BRACKETS) ; (VARIABLE PARTS IN PARENS). ; ; (TASKNAME) -- [EXITING DUE TO] [(ERROR TYPE)] ERROR [(ERROR NUMBER)] ; [(ERROR MESSAGE)] ; [(OPTIONAL ERROR LINE)] ; [AT PC (PC ADDRESS)] ; ; IS CALLED WITH R3 ODD, THIS ROUTINE WILL EXIT TO SYSTEM. ; ; REGISTERS: ; ; USES R0-R5 SAVES R3-R5 ; ; CALLS: ; ; STRING,CRLF,$C5TA,$CBDSG,$CBOMG ; OERROR:: ;REF. LABEL. MOV R2,-(SP) ;SAVE THE ERROR MESSAGE. MOV R0,-(SP) ;SAVE THE ERROR NUMBER. MOV R1,-(SP) ;SAVE THE ERROR TYPE. ; ; FIRST LINE. ; MOV #BUFFER,R0 ;GET START OF BUFFER. CALL CRLF ;INSERT BLANK LINE. MOVB #LF,(R0)+ ;INSERT BLANK LINE. GTSK$S #ERRTMP ;GET THE TASKNAME. MOV ERRTMP,R1 ;GET THE FIRST PART OF THE TASK NAME. CALL $C5TA ;CONVERT TO ASCII. MOV ERRTMP+2,R1 ;GET THE LAST PART OF THE TASK NAME. CALL $C5TA ;CONVERT TO ASCII. MOV #DSHMSG,R1 ;GET DASHES. CALL STRING ;MOVE TO BUFFER. BIT #1,R3 ;IS THIS MESSAGE AN EXIT? BEQ 10$ ; IF EQ - I THINK NOT. MOV #XITMSG,R1 ;SAY WE ARE EXITING. CALL STRING ;MOVE TO BUFFER. 10$: MOV (SP)+,R1 ;GET THE ERROR TYPE BEQ 11$ ; IF EQ - THERE IS NONE. CALL STRING ;MOVE TO BUFFER. MOVB #' ,(R0)+ ;PLACE A SPACE INTO BUFFER. 11$: MOV #ERRMSG,R1 ;GET THE WORD ERROR. CALL STRING ;MOVE TO BUFFER. MOV (SP)+,R1 ;GET THE ERROR NUMBER. BEQ 12$ ; IF EQ - NO ERROR NUMBER TO OUTPUT. CLR R2 ;NO LEADING ZEROS. CALL $CBDSG ;CONVERT TO SIGNED DECIMAL ASCII. 12$: CALL CRLF ;DONE WITH FIRST LINE. ; ; SECOND LINE, ERROR MESSAGE. ; MOV (SP)+,R1 ;GET MESSAGE ADDRESS. BEQ 13$ ; IF EQ - NONE. CALL STRING ;MOVE TO BUFFER. CALL CRLF ;DONE WITH SECOND LINE. ; ; THIRD LINE, OPTIONAL. ; 13$: TST R5 ;IS THERE A ROUTINE. BEQ 14$ ;IF EQ NONE. CALL (R5) ;CALL SAID ROUTINE. CALL CRLF ;DONE WITH THIRD LINE. ; ; FOURTH LINE, PC. ; 14$: BIT #177776,R3 ;IS THERE A PC? BEQ 15$ ; IF EQ - NO. MOV #APCMSG,R1 ;GET AT PC MESSAGE. CALL STRING ;MOVE TO BUFFER. MOV R3,R1 ;GET PC. BIC #1,R1 ;MAKE SURE EVEN. MOV #1,R2 ;SET FOR LEADING ZEROS. CALL $CBOMG ;CONVERT TO OCTAL MAGNITUDE. CALL CRLF ;DONE WITH FOURTH LINE. ; ; OUTPUT MESSAGE. ; 15$: MOVB #LF,(R0)+ ;SKIP LINE. SUB #BUFFER,R0 ;GET NUMBER OF CHARACTERS IN MESSAGE MOV R0,MSGDPB+Q.IOPL+2 ;STORE IN QIO DPB. MOV ERLUN1,MSGDPB+Q.IOLU ;STORE LUN NUMBER. DIR$ #MSGDPB ;ISSUE QIO. BCS 16$ ; IF CS - JUST IGNORE ERROR. WTSE$S #EV.ERR ;WAIT TILL MESSAGE IS DONE 16$: BIT #1,R3 ;SHOULD WE EXIT. BEQ 17$ ; IF EQ - NO, RETURN TO CALLER. EXIT$S ; 17$: RETURN ; .PAGE .SBTTL STRING * MOVE ASCIZ STRING TO BUFFER ; ; MOVE ASCIZ STRING TO BUFFER AND UPDATE BUFFER POINTER. ; ; CALLING SEQUENCE: ; ; CALL BY: JSR PC,STRING ; ; WHERE: R0 = ADDRESS IN BUFFER TO STORE STRING AT. ; R1 = START OF STRING TO MOVE TO BUFFER. ; ; EXITS WITH: R0 = NEXT FREE BYTE IN BUFFER. ; ; REGISTERS: ; ; USES R0,R1 SAVES R2-R5 ; STRING:: ;REF. LABEL. MOVB (R1)+,(R0)+ ;MOVE CHARACTER. BNE STRING ; IF NE - CONTINUE MOVING. DEC R0 ;BACK UP BUFFER POINTER. RETURN ;RETURN TO CALLER. ; ; ; .SBTTL CRLF * MOVE CRLF TO BUFFER ; ; MOVE CRLF TO BUFFER AND UPDATE BUFFER POINTER. ; ; CALLING SEQUENCE: ; ; CALL BY: JSR PC,CRLF ; ; WHERE: R0 = ADDRESS IN BUFFER TO STORE CRLF AT. ; ; EXITS WITH: R0 = NEXT FREE BYTE IN BUFFER. ; ; REGISTERS: ; ; USES R0 SAVES R1-R5 ; CRLF:: ;REF. LABEL. MOVB #CR,(R0)+ ;MOVE CR. MOVB #LF,(R0)+ ;MOVE LF. RETURN ;RETURN TO CALLER. .END