.TITLE RSXERR - REPORT RSX-11M ERROR MESSAGE .IDENT /01.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: RSXERR ; Author: Robin Miller ; Date: November 10, 1981 ; ; Description: ; ; This program is used to report and RSX-11M error message to ; the users terminal. It will report both Directive and I/O errors. ; It is also possible to get a list of all Directive or I/O errors ; by specifying and asterisk (*) for the error code. ; ; Modification History: ; ;- .ENABL AMA .MCALL DIR$, EXIT$S, QIOW$, QIOW$S ; ; Local equates: ; TILUN = 5 ; TERMINAL INPUT LUN TIEFN = 5 ; TERMINAL INPUT EFN TOLUN = 6 ; TERMINAL OUTPUT LUN TOEFN = 6 ; TERMINAL OUTPUT EFN 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 TXTBIT = 1 ; INCLUDE TEXT OF MESSAGE MIDBIT = 2 ; INCLUDE MESSAGE ID SEVBIT = 4 ; INCLUDE SEVERITY LEVEL FACBIT = 10 ; INCLUDE FACILITY NAME HT = 11 ; ASCII FOR HORIZONTAL TAB LF = 12 ; ASCII FOR LINE FEED CR = 15 ; ASCII FOR CARRIAGE RETURN ; ; Messages: ; .NLIST BEX HEADER: .ASCII %Program to display an RSX-11M error message% HEADSZ = .-HEADER ERRTYP: .ASCII %Directive or I/O error (D or I)? % ERRSIZ = .-ERRTYP PRADD: .ASCII /Error code (? for Help): / PRSIZE = .-PRADD HLPMSG: .BYTE , .ASCII %This program is used to display an RSX-11M error message.% .BYTE , .ASCII %To use, simply enter the error code. For example:% .BYTE ,, .ASCII % -16 or 360 will return "Privilege violation."% .BYTE ,, .ASCII %The -16 is taken as a decimal number and 360 as octal.% .BYTE , .ASCII %To list all Directive or I/O errors, type an asterisk (*).% .BYTE , .ASCII %To backup to the "Directive or I/O error" question,% .BYTE , .ASCII %type an exclaimation point (!) and the RETURN key.% .BYTE , HLPLEN = .-HLPMSG .EVEN ; ; Local storage: ; TYPERR: .WORD 0 ; TYPE OF ERROR 0 = I/O <> = DIRECTIVE TIOSB: .BLKW 2 ; TERMINAL I/O STATUS SIGBLK: .BYTE 1,0 ; ARG BLOCK FOR SIGNAL .WORD ERRCOD ; ADDRESS OF ERROR CODE ARGBLK: .BYTE 5,0 ; ARG BLOCK FOR PUTMSG .WORD ERRCOD ; ADDRESS OF ERROR CODE .WORD -1 ; FILLED IN LATER .WORD MSGFLG ; ADDRESS OF FLAG WORD .WORD FACNAM ; ADDRESS OF FACILITY NAME .WORD STATUS ; ADDRESS FOR RETURN STATUS ERRCOD: .WORD 0 ; MESSAGE CODE MSGFLG: .WORD TXTBIT!MIDBIT ; TEXT OF MESSAGE/MESSAGE ID OUTBUF: .BLKB 100. ; OUTPUT BUFFER FACNAM: .ASCIZ %None% ; FACILITY NAME .EVEN STATUS: .WORD 0 ; STATUS RETURN COMAND: .BLKB 40. ; INPUT COMMAND BUFFER GETTYP: QIOW$ IO.RPR,TILUN,TIEFN,,TIOSB,, READ: QIOW$ IO.RPR,TILUN,TIEFN,,TIOSB,, WRTHED: QIOW$ IO.WVB,TOLUN,TOEFN,,TIOSB,, WRTHLP: QIOW$ IO.WVB,TOLUN,TOEFN,,TIOSB,, ; ; Start of main line code. ; START: DIR$ #WRTHED ; WRITE HEADER MESSAGE RSTART: CLR TYPERR ; CLEAR INDICATOR DIR$ #GETTYP ; GET TYPE OF ERROR BCS 100$ ; IF CS, ERROR TSTB TIOSB ; ANY ERRORS ? BMI 110$ ; IF MI, YES TST TIOSB+2 ; ANYTHING ENTERED ? BEQ RSTART ; IF EQ, NO MOV #COMAND,R0 ; ADDRESS OF COMMAND CMPB (R0),#'? ; WANT SOME HELP ? BEQ RSTART ; IF EQ, YES (NONE HERE) BICB #40,(R0) ; CONVERT TO UPPERCASE CMPB (R0),#'H ; WANT SOME HELP ? BEQ RSTART ; IF EQ, YES (NONE HERE) CMPB (R0),#'D ; DIRECTIVE ERROR ? BNE 5$ ; IF NE, NO INC TYPERR ; SHOW DIRECTIVE ERROR 5$: DIR$ #READ ; GET ERROR CODE BCS 100$ ; IF CS, ERROR TSTB TIOSB ; ANY I/O ERRORS ? BMI 110$ ; IF MI, YES TST TIOSB+2 ; ANYTHING INPUT ? BEQ 5$ ; IF EQ, NO MOV #COMAND,R0 ; STRING TO CONVERT CMPB (R0),#'! ; WANT TO BACKUP ? BEQ RSTART ; IF EQ, YES CMPB (R0),#'? ; REQUEST HELP ? BEQ 50$ ; IF EQ, YES CMPB (R0),#'H ; REQUEST HELP ? BEQ 50$ ; IF EQ, YES CMPB (R0),#'* ; WILDCARD SPECIFIED ? BNE 7$ ; IF NE, NO CALL WILD ; DO WILDCARD PROCESSING BR 5$ ; AND CONTINUE ... ; Convert decimal ASCII to binary. 7$: CMPB (R0),#'- ; IS THERE A MINUS SIGN ? BNE 10$ ; IF NE, NO INC R0 ; POINT PAST MINUS SIGN CALL $CDTB ; CONVERT TO BINARY NEG R1 ; MAKE IT NEGATIVE BR 30$ ; GO SIGNAL ERROR ; Convert octal ASCII to binary. 10$: CALL $COTB ; CONVERT TO BINARY ; Signal I/O error. 30$: BIC #^C377,R1 ; SHOW I/O ERROR CODE TST TYPERR ; DIRECTIVE ERROR ? BEQ 40$ ; IF EQ, NO MOVB R1,R1 ; YES, SIGN EXTEND 40$: MOV R1,ERRCOD ; COPY BINARY CODE MOV #SIGBLK,R5 ; POINT TO ARG BLOCK CALL SIGNAL ; SIGNAL THE ERROR JMP 5$ ; AND LOOP ... ; Output some Help information. 50$: DIR$ #WRTHLP ; WRITE HELP JMP 5$ ; AND RESUME ... 100$: MOV $DSW,R0 ; COPY DIRECTIVE CODE 110$: MOV TIOSB,R0 ; COPY THE I/O ERROR CODE CMPB R0,#IE.EOF ; END OF FILE ? BEQ 200$ ; YES, EXIT QUIETLY BIC #^C377,R0 ; CLEAR THE HIGH BYTE 120$: MOV R0,ERRCOD ; SETUP ARG BLOCK MOV #SIGBLK,R5 ; POINT TO ARG BLOCK CALL SIGNAL ; SIGNAL ERROR 200$: EXIT$S ; AND EXIT ... ;+ ; ; WILD - Wildcard (*) specified for error code. ; ;- WILD: MOV #377,R4 ; START AT FIRST ERROR 10$: MOV #OUTBUF,R0 ; OUTPUT BUFFER ADDRESS MOVB #HT,(R0)+ ; START WITH TAB MOVB R4,R1 ; COPY CODE (SIGN EXTEND) CLR R2 ; ZERO SUPPRESS CALL $CBDSG ; CONVERT TO DECIMAL MOVB #'.,(R0)+ ; SHOW DECIMAL NUMBER MOVB #HT,(R0)+ ; NOW ANTOTHER TAB MOV R4,R1 ; COPY CODE (HIGH BYTE CLEAR) CLR R2 ; ZERO SUPPRESSION CALL $CBOSG ; NOW CONVERT TO OCTAL MOVB #HT,(R0)+ ; STILL ANOTHER TAB CLRB (R0) ; AND THE TERMINATOR MOV #ARGBLK,R5 ; POINT TO ARGUMENT BLOCK MOV R0,BUFOFF(R5) ; SETUP BUFFER ADDRESS MOV R4,ERRCOD ; COPY THE ERROR CODE TST TYPERR ; DIRECTIVE ERROR ? BEQ 30$ ; IF EQ, NO BIS #^C377,ERRCOD ; SET BITS IN HIGH BYTE ; All registers are saved by GETMSG. 30$: CALL GETMSG ; GET ERROR MESSAGE TST STATUS ; INVALID ERROR NUMBER ? BMI 50$ ; IF MI, YES (DONE) SUB #OUTBUF,R0 ; PREVIOUS BYTE COUNT ADD @STAOFF(R5),R0 ; NOW MESSAGE BYTE COUNT QIOW$S #IO.WVB,#TOLUN,#TOEFN,,#TIOSB,,<#OUTBUF,R0,#40> DEC R4 ; NEXT ERROR CODE BR 10$ ; DO NEXT CODE 50$: RETURN .END START