.LIST TTM .NLIST BEX ; FILE [6,12]DIRPRT.MAC ; P. KURJAN 25-APR-82 ; ; VERSION 2.0 ; ; SUBROUTINE TO PRINT USER-SPECIFIED ERROR MESSAGE AND DSW ; STATUS VALUE (ENTRY DIRPRT) ; OR USER-SPECIFIED ERROR MESSAGE AND I/O STATUS WORDS (ENTRY IOSPRT) ; ; INPUTS: ; ; CALLING TASK MUST STORE ITS TASKNAME (RAD50) IN FIRST TWO WORDS OF ; "DIRARG" PRIOR TO CALL ; ; REQUIRES THAT GLOBAL SYMBOLS ; MSGQIO ; IOSTAT ; BE DEFINED SOMEWHERE IN THE TASK. MSGQIO IS A QIO DPB FOR MESSAGE ; OUTPUT (NORMALLY TO TERMINAL), SPECIFYING THE APPROPRIATE LUN #, AN ; EVENT FLAG IF QIOW$ FORM USED, AND AN OCTAL 40 IN THE THIRD WORD OF ; THE 6-WORD DEVICE-DEPENDENT BUFFER. ; ; ON ENTRY, MSGQIO MUST CONTAIN THE ADDRESS AND LENGTH OF THE DESIRED ; USER-SPECIFIED MESSAGE TO BE OUTPUT IN THE FIRST TWO WORDS OF THE ; 6-WORD BUFFER. MACROS "MSG" AND "ERR" ARE CONVENIENT FOR SETTING UP ; THE MESSAGE BUFFER PROPERLY AND CALLING THIS PRINT ROUTINE. ; ; IOSTAT IS A 2-WORD BUFFER WHICH CONTAINS THE I/O STATUS INFORMATION ; TO BE PRINTED, IF THE IOSPRT ENTRY POINT IS USED. ; ; OUTPUTS: ; ; ALL REGISTERS ARE PRESERVED ; THE MSGQIO DPB IS RETURNED CONTAINING FUNCTION CODE IO.WVB, AND THE ; FIRST TWO WORDS OF THE 6-WORD DEVICE DEPENDENT BUFFER ARE CHANGED. ; ; THE IOSTAT WORDS ARE RETURNED UNCHANGED. ; .TITLE DIRPRT .SBTTL CODE AREA .MCALL DIR$ ; DIRPRT:: JSR R2,$SAVVR ;PRESERVE REGISTERS 0-2 MOV $DSW,DIRARG+4 ;PRESERVE VALUE OF DSW UPON ENTRY MOV #DSWIST,R1 ;FORMATTING STRING FOR $EDMSG BR PRT ; IOSPRT:: JSR R2,$SAVVR ;PRESERVE REGISTERS 0-2 MOVB IOSTAT,R0 ;MOVE STATUS BYTE TO R0; EXTEND SIGN MOV R0,DIRARG+4 ;MOVE STATUS TO FIRST $EDMSG ARG WORD MOVB IOSTAT+1,DIRARG+6 ;MOVE HIGH BYTE OF 1ST I/O STAT WORD CLRB DIRARG+7 ;TO ARG BLK; WILL PRINT AS OCTAL VALUE MOV IOSTAT+2,DIRARG+10 ;2ND I/O STATUS WORD WILL PRINT OCTAL MOV #IOSIST,R1 ;FORMATTING STRING FOR $EDMSG ; PRT: DIR$ #MSGQIO ;PRINT USER-SPECIFIED MESSAGE MOV #OUT,R0 ;OUTPUT BUFFER FOR $EDMSG MOV #DIRARG,R2 ;ARG BUFFER FOR $EDMSG CALL $EDMSG ;PRODUCE EDITED OUTPUT MESSAGE MOV R1,MSGQIO+Q.IOPL+2 ;LENGTH OF MSG TO QIO DPB MOV #OUT,MSGQIO+Q.IOPL ;ADDR OF MSG TO QIO DPB DIR$ #MSGQIO ;PRINT DSW OR I/O STATUS INFO RETURN ;AND RETURN HOME. ; .SBTTL DATA AREA ; DSWIST: .ASCIZ /TASK "%2R" DSW=%D/ ;FORMAT FOR $DSW MESSAGE IOSIST: .ASCII /TASK "%2R" IO STATUS=%D HIGH BYTE (OCTAL)=%P%N/ .ASCIZ /SECOND IO STAT WORD (OCTAL)=%P/ ;FORMAT FOR IO STATUS MESSAGE .EVEN DIRARG:: .BLKW 5 ;STORAGE FOR $DSW,IOSTAT OUTPUT VALS OUT: .BLKW 56. ;STORAGE FOR $EDMSG OUTPUT STRING ; .END