.TITLE ERROR ERROR MESSAGE PROCESSOR .IDENT /01/ ; ; THIS PROGRAM IS PROVIDED ON AN "AS IS" BASIS ONLY. DIGITAL EQUIPMENT ; CORPORATION USER'S SOCIETY, DIGITAL EQUIPMENT CORPORATION, ROCKWELL ; INTERNATIONAL 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 PER- ; MIT OTHERS TO REPRODUCE IN WHOLE OR IN PART, IN ANY FORM AND WITHOUT ; RESTRICTION, THIS PROGRAM AND ANY INFORMATION RELATING TO IT. ; ; ; AUTHOR: ; ; UNKNOWN ; ; ; MODIFIED BY: ; .PAGE ; ; MACRO DEFINITIONS ; .MCALL DIR$ ;ISSUE DIRECTIVE .MCALL EXIT$S ;TASK EXIT .MCALL QIO$ ;QUEUE I/O REQUEST .MCALL WTSE$ ;WAIT FOR SINGLE EVENT ; ; LOCAL MACROS ; .MACRO MSGDF,NAM,STR 'NAM'ER:: .ASCII /STR/ 'NAM'LN== .-'NAM'ER .ENDM .MACRO IERDF$,CODE,MSG,STR .PSECT $ERR$ .WORD CODE .WORD MSG'ER .WORD MSG'LN .PSECT MSGDF MSG, .ENDM .MACRO IERND$ .PSECT $ERR$ .WORD 0 .PSECT .ENDM ; ; LOCAL SYMBOLS ; MSGSIZ = PRINT+Q.IOPL+2 TI = 5 EFLG = 1 ; ; LOCAL DATA ; PRINT: QIO$ IO.WLB,TI,EFLG,,,, WAIT: WTSE$ EFLG MSHDR: .ASCII /DOC -- / ;MESSAGE HEADER MSHDRL = .-MSHDR MSGBUF: .BLKB 60 ;MESSAGE BUFFER ; ; ERROR MESSAGES ; MSGDF GCL, MSGDF SYN, MSGDF NIF, MSGDF IIF, MSGDF IOF, MSGDF SWT, ; ; FCS ERROR MESSAGES ; .PSECT $ERR$ IERTB: IERDF$ -02.,INS, IERDF$ -07.,ACT, IERDF$ -16.,PRI, IERDF$ -26.,NSF, IERDF$ -32.,RER, IERDF$ -33.,WER, IERDF$ -40.,RBG, IERND$ .PSECT FCSER: .ASCII /FCS ERROR / .EVEN ERNUM: .WORD 0,0,0,0,0,0,0,0 FCSLN = .-FCSER .PAGE .SBTTL ERROR ERROR MESSAGE PROCESSOR ;@ ERROR MESSAGE ROUTINES ;+ ;* -ERROR - ERROR MESSAGE PROCESSOR ; ; THIS ROUTINE RECEIVES THE PARAMETERS OF A SPECIFIC ERROR MESSAGE AND ; PROCEEDS TO PRINT THE REQUIRED MESSAGE TO 'TI:'. ; ; CALL IS VIA A 'JSR R5,ERROR' WITH STRING ADDRESS AND SIZE FOLLOWING ; THE JSR INSTRUCTION. ; ; INPUTS: ; ; (R5)=ADDRESS OF MESSAGE STRING ; 2(R5)=SIZE IN BYTES OF MESSAGE STRING ; 4(R5)=NEXT EXECUTABLE INSTRUCTION ; ; OUTPUTS: ; ; SPECIFIED MESSAGE IS PRINTED ON 'TI:' ;- ERROR:: MOV R1,-(SP) ;SAVE R1 MOV R2,-(SP) ;SAVE R2 MOV R3,-(SP) ;SAVE R3 MOV (R5)+,R1 ;RETRIEVE MESSAGE ADDRESS MOV (R5)+,R2 ;RETRIEVE SIZE MOV #MSHDRL,MSGSIZ ;INIT QIO FOR MSGHDR ADD R2,MSGSIZ ;INCLUDE ERROR MSG LENGTH MOV #MSGBUF,R3 ;GET MSG BUFFER ADDR. 10$: MOVB (R1)+,(R3)+ ;COPY BYTE INTO OUTPUT BUFFER SOB R2,10$ ;LOOP TILL DONE DIR$ #PRINT ;PRINT THE MESSAGE DIR$ #WAIT ;WAIT FOR IT TO PRINT MOV (SP)+,R3 ;RESTORE R3 MOV (SP)+,R2 ;RESTORE R2 MOV (SP)+,R1 ;RESTORE R1 RTS R5 ;RETURN .PAGE .SBTTL IOERR I/O ERROR MESSAGE PROCESSOR ;+ ;* -IOERR - I/O ERROR MESSAGE PROCESSOR ;* -IOERX - I/O ERROR MESSAGE PROCESSOR WITH EXIT ; ; THESE ROUTINES PROCESS ANY FCS ERRORS ENCOUNTERED. A CHECK IS MADE ; TO SEE IF THE ERROR CODE IN 'F.ERR' IN THE FILE DESCRIPTOR BLOCK IS ; HANDLED DIRECTLY. IF SO THE APPROPRIATE MESSAGE IS PRINTED ON 'TI'. ; IF NOT, THE MESSAGE 'FCS ERROR -XXX' IS PRINTED WHERE XXX IS THE ; DECIMAL ERROR CODE ENCOUNTERED. CODE IE.EOF IS IGNORED. "IOERX" ; CAUSES A TASK EXIT IF AN ERROR OCCURS. ; ; ; INPUTS: ; ; F.ERR=ERROR CODE ; ; ; OUTPUTS: ; ; THE APPROPRIATE MESSAGE IS PRINTED ; ; ; SUBROUTINES CALLED: ; ;$ $CBDSG - CONVERT BINARY TO SIGNED DECIMAL ASCII ;$ IOERR1 - MAIN I/O PROCESSING ROUTINE ;- .ENABL LSB IOERX:: CALL IOERR1 ;PROCESS ERROR MESSAGE EXIT$S ;AND EXIT, STAGE LEFT IOERR:: CMPB #IE.EOF,F.ERR(R0) BNE IOERR1 ;JUMP IF NOT END-OF-FILE SEC ;SET CARRY AGAIN RETURN IOERR1: MOV R0,-(SP) ;SAVE R0 MOV R1,-(SP) ;SAVE R1 MOV R2,-(SP) ;SAVE R2 MOVB F.ERR(R0),R0 ;GET STATUS CODE MOV #IERTB,R1 ;GET TABLE ADDR. 10$: TST (R1) ;CHECK FOR TABLE END BEQ NOMSG ;IF EQ END OF TABLE MOV (R1)+,R2 ;GET TABLE VALUE CMP (R1)+,(R1)+ ;STEP TO NEXT ENTRY CMP R0,R2 ;CODES MATCH? BNE 10$ ;IF NE NO MOV -(R1),ERRLN ;GET MSG LENGTH MOV -(R1),ERRADR ;GET MSG ADDRESS JSR R5,ERROR ;PRINT THE ERROR MESSAGE ERRADR: .WORD 0 ;MESSAGE ADDRESS ERRLN: .WORD 0 ;MESSAGE LNGTH IERXIT: MOV (SP)+,R2 ;RESTORE R2 MOV (SP)+,R1 ;RESTORE R1 MOV (SP)+,R0 ;RESTORE R0 SEC ;SET CARRY AGAIN RETURN NOMSG: MOV #8.,R2 ;SET LOOP COUNT MOV #ERNUM,R1 ;POINT TO ERROR NUMBER FIELD 20$: CLR (R1)+ ;CLEAR THE FIELD SOB R2,20$ ;CONTINUE TILL DONE MOV R0,R1 ;COPY ERROR CODE NUMBER MOV #ERNUM,R0 ;GET ERROR NUMBER FIELD ADR. CLR R2 ;INDICATE ZERO SUPPRESSION CALL $CBDSG ;CONVERT NUMBER TO ASCII JSR R5,ERROR ;PRINT THE MESSAGE .WORD FCSER ;MESSAGE ADDRESS .WORD FCSLN ;MESSAGE LENGTH BR IERXIT ;TAKE EXIT .DSABL LSB .END