.TITLE ERRCAL ;ERROR PRINT MACROS FOR CERN COLLECTION ; G. EVERHART, 6/1978 .IDENT /GCE001/ ;SIMPLY CALL MO.... TO HANDLE DEVICE OUTPUT ETC. .MOLUN:: .BLKW 1 ;GET TKB TO GIVE US A LUN .MCALL MOUT$S,QIOW$S,FDBDF$ FILDES: .WORD ENDFNM-FILNAM .WORD FILNAM ;ADDR FILNAME STRING ; ;FILE NAME STRING FILNAM: .ASCIZ /SY:[1,2]QIOSYM.MSG/ ENDFNM: .EVEN FDBDF$ MSGBUF: .BLKB 100. OBUF=MSGBUF+4 IOST: .WORD 0,0 ERNBR: .WORD 0 ;ERROR NUMBER USRERR:: ;USER ERROR MESSAGE LOGGER ;CALL: ; MOV ERR#,-(SP) ;PUSH ERROR NUMBER ; JSR PC,USRERR ; .WORD RETURN ADDRESS MOV R0,-(SP) MOV R1,-(SP) MOV 6(SP),R1 ;ERROR # BPL 1$ ;IF +, OK NOW NEG R1 ;IF -, MAKE + 1$: BEQ TWO ;ZERO IS ILLEGAL... CMN: MOV R1,ERNBR MOUT$S #FILDES,,R1,CONT,USBUF,#MSGBUF,#95.,IOST,.MOLUN ;NOW OUTPUT MESSAGE TO USER AT TI: QIOW$S #IO.WVB,#5,#24.,,#IOST,,<#OBUF,#80.,#40> MOV (SP)+,R1 MOV (SP)+,R0 MOV (SP)+,(SP) ;COPY RETURN ADDRESS OVER ARG ADD @(SP),(SP) ;AND ADD OFFSET RTS PC TWO: EXI: MOV (SP)+,R1 MOV (SP)+,R0 MOV (SP)+,(SP) ;COPY RETURN OVER CALL ARG ADD #2,(SP) ;GO TO ADDRESS+2 IF OK RTS PC ;RETURN TO CALL ADDRESS QIOERR:: ;QIO ERROR. IO STAT BLOCK PUSHED AT CALL MOV R0,-(SP) MOV R1,-(SP) MOV 6(SP),R1 ;IOSB ADDRESS MOVB @R1,R1 ;LOW BYTE 1ST WORD BPL EXI NEG R1 BNE CMN DSWERR:: MOV (SP),-(SP) ;PUSH STACK DOWN MOV #$DSW,2(SP) ;SAVE DSW ADDRESS ON STACK (LIKE IO STAT BLK) BR QIOERR ;AND HANDLE COMMONLY FDBERR:: MOV R0,-(SP) MOV R1,-(SP) MOV 6(SP),R0 ;FDB ADDRESS MOVB F.ERR(R0),R1 ;GET ERROR CODE BPL EXI ;IF +, GET OUT NOW NEG R1 ;IF -, GO PROCESS IT BR CMN .END