.TITLE ERRORS - REPORT LOCAL & REMOTE ERRORS .IDENT /02.1/ .ENABL LC ;+ ; ; Free software BY ; Project Software & Development, Inc. ; ; This software is furnished for free and may be used and copied as ; desired. This software or any other copies thereof may be provided or ; otherwise made available to any other person. No title to and ; ownership of the software is hereby transferred or allowed. ; ; The information in this software is subject to change without notice ; and should not be construed as a commitment by PROJECT SOFTWARE ; AND DEVELOPMENT, INC. ; ; PROJECT SOFTWARE assumes no responsibility for the use or reliability ; of this software on any equipment whatsoever. ; ; Project Software & Development, Inc. ; 14 Story St. ; Cambridge, Ma. 02138 ; 617-661-1444 ; ; ; Title: ERRORS ; Author: Robin Miller ; Date: January 29, 1982 ; ; Description: ; ; ; Modification History: ; ;- .ENABL AMA .MCALL DIR$, QIOW$S, PUT$ .SBTTL EQUATES AND MESSAGES ; Local equates. BELL = 7 ; ASCII FOR BELL ; Offsets into error message block. ERROFF = 2 ; ERROR CODE OFFSET BUFOFF = 4 ; OUTPUT BUFFER OFFSET FLGOFF = 6 ; MESSAGE FLAGS OFFSET FACOFF = 10 ; FACILITY NAME OFFSET STAOFF = 12 ; STATUS RETURN OFFSET ; Equates for RSX-11M error messages. TXTBIT = 1 ; INCLUDE TEXT OF MESSAGE MIDBIT = 2 ; INCLUDE MESSAGE ID SEVBIT = 4 ; INCLUDE SEVERITY LEVEL FACBIT = 10 ; INCLUDE FACILITY NAME .NLIST BEX ; Argument block for error messages. ERRBLK: .BYTE 6,0 ; ARG BLOCK FOR GETMSG .WORD ERRCOD ; ADDRESS OF ERROR CODE .WORD ERRBUF ; ADDRESS OF OUTPUT BUFFER .WORD MSGFLG ; ADDRESS OF FLAG WORD .WORD FACNAM ; ADDRESS OF FACILITY NAME .WORD STACOD ; ADDRESS FOR STATUS RETURN .WORD -1 ; ADDRESS OF ALTERNATE FACILITY ERRCOD: .WORD 0 ; ERROR MESSAGE CODE FACADR:: .WORD FACNAM ; ADDRESS OF FACILITY NAME FACNAM: .ASCIZ %RSXNET% ; FACILITY NAME .EVEN MSGFLG: .WORD TXTBIT!MIDBIT!SEVBIT!FACBIT ; INCLUDE EVERYTHING STACOD: .WORD 0 ; STATUS CODE RETURN EXIERR:: .WORD 0 ; EXIT ON ERROR FLAG <> 0 = TRUE ERRBUF: .BLKB 80. ; ERROR MESSAGE OUTPUT BUFFER .SBTTL CHKDIR - CHECK FOR DIRECTIVE ERROR .SBTTL CHKLIO - CHECK FOR LOCAL I/O ERROR .SBTTL CHKRIO - CHECK FOR REMOTE I/O ERROR ;+ ; ; CHKDIR - Check for a directive error. ; CHKLIO - Check for local I/O error code. ; CHKRIO - Check for remote I/O error code. ; ; These routines are called to check for QIO errors for both ; the local terminal and the remote terminal port for RSXNET. ; ;- .ENABL LSB CHKDIR:: CALL $SAVAL ; SAVE R0 - R5 MOV $DSW,ERRCOD ; COPY THE CODE BPL 30$ ; IF PL, SUCCESS BR 20$ ; CONTINUE ... CHKXIO:: BCS CHKDIR ; IF CS, DIRECTIVE ERROR CALL $SAVAL ; SAVE R0 - R5 MOVB XIOSB,R0 ; COPY THE CODE BPL 30$ ; IF PL, SUCESS CHKLIO:: BCS CHKDIR ; IF CS, DIRECTIVE ERROR CALL $SAVAL ; SAVE R0 - R5 MOVB LIOSB,R0 ; COPY THE CODE BPL 30$ ; IF PL, SUCCESS BR 10$ ; CONTINUE ... CHKRIO:: BCS CHKDIR ; IF CS, DIRECTIVE ERROR CALL $SAVAL ; SAVE R0 - R5 MOVB RIOSB,R0 ; COPY THE CODE BPL 30$ ; IF PL, SUCCESS ; We've had an error... only End of File and Abort expected. 10$: CMPB #IE.EOF,R0 ; END OF FILE ? BEQ 25$ ; IF EQ, YES CMPB #IE.ABO,R0 ; WAS THE I/O KILLED BEQ 30$ ; IF EQ, YES (IGNORE) MOV R0,ERRCOD ; COPY THE ERROR CODE CLRB ERRCOD+1 ; ITS AN I/O ERROR 20$: CALL WRTERR ; WRITE THE ERROR MESSAGE BR 30$ ; AND CONTINUE ... ; TST EXIERR ; EXIT ON ERROR ? ; BEQ 30$ ; IF EQ, NO 25$: CALL BLANK ; WRITE A BLANK LINE JMP EXIT ; EXIT TO SYSTEM 30$: RETURN .DSABL LSB .SBTTL FILERR - REPORT AN FCS ERROR MESSAGE ;+ ; ; FILERR - Report an File Control System (FCS) error message. ; ; This routine sets up the argument block for a call to PUTMSG to ; report the RSX-11M error message text. ; ; Inputs: ; R0 = Address of FDB which has the error. ; ; All registers are preserved. ; ;- FILERR:: CALL $SAVAL ; SAVE R0 - R5 MOV F.ERR(R0),ERRCOD ; COPY THE ERROR CODE CMP R0,#LOGFDB ; ERROR ON LOG FILE ? BNE 10$ ; IF NE, NO CALL CLOLOG ; YES, CLOSE THE LOGFILE 10$: CALL WRTERR ; WRITE THE ERROR MESSAGE RETURN .SBTTL WRTERR - WRITE THE ERROR MESSAGE ;+ ; ; WRTERR - Write the error message. ; ; This routine calls GETMSG to retrieve the error message into a ; buffer. It then appends a bell, and CR/LF combination before ; writing the error message. ; ; Inputs: ; ERRBLK = presumed to be setup with the error code. ; ; Outputs: ; All registers are preserved. ; ;- WRTERR:: CALL $SAVAL ; SAVE ALL REGISTERS CALL CANCEL ; CANCEL OUTSTANDING I/O MOV #ERRBLK,R5 ; ADDRESS OF ARGUMENT BLOCK MOV FACADR,FACOFF(R5) ; ADDRESS OF FACILITY NAME CALL GETMSG ; GET THE ERROR MESSAGE MOV BUFOFF(R5),R0 ; COPY THE BUFFER ADDRESS MOV R0,R4 ; SAVE IT FOR WRITE MOV @STAOFF(R5),R1 ; COPY THE BYTE COUNT BMI 10$ ; IF MI, NO SUCH MESSAGE ADD R1,R0 ; POINT TO END OF MESSAGE MOVB #BELL,(R0)+ ; RING THE BELL ON ERROR MOVB #CR,(R0)+ ; MOVE IN THE MOVB #LF,(R0)+ ; CARRIAGE CONTROL CLRB (R0) ; MARK END OF MESSAGE 10$: CALL WRITE ; WRITE THE ERROR MESSAGE RETURN .END