10 ! ----- WRITE_ATTN_AST.FUN ----- SUB WRITE_ATTN_AST(LONG PARAM, LONG RZERO, LONG RONE, LONG PC, LONG PSL) ! ! This subroutine is called as an AST procedure from SEND_OPER_MSG.FUN ! ! It reads and then discards the message that was written to our ! mailbox ! ! NOTE: The five parameters coded on the SUB statement are required ! when coding any AST routine in BASIC. These are the arguments passed ! by the system on entry to the AST service routine. Although they are ! not used in this routine, BASIC checks the argument count and they ! must be present. ! ! ----- Last Change 05/01/89 by Brian Lomasky ----- ! ! ----- Teradyne, Inc., 179 Lincoln Street, Boston, MA 02111 ----- ! ----- (617) 482-2706, x3259 ----- ! ! ----- Neither Brian Lomasky nor Teradyne, Inc. implicitly or ----- ! ----- explicitly implies this program is usable in any way. ----- ! ----- This program is released to the public domain in an ----- ! ----- "AS-IS" condition. ----- ! ! ----- Restrictions: ----- ! ----- 1) Requires VAX BASIC V2.4 or later. ----- ! OPTION TYPE = EXPLICIT EXTERNAL LONG CONSTANT IO$_READVBLK ! QIO READ VIR BLOCK FUNC CODE EXTERNAL LONG CONSTANT IO$M_NOW ! QIO COMPLETE IMMEDIATELY CODE ! ----- VARIABLE DECLARATIONS ----- DECLARE BYTE DUMMY_BUFFER ! QIOW READ VIRTUAL BLOCK BUFFER DECLARE LONG FUNC ! QIOW FUNCTION CODE DIM WORD IOSB(3%) ! QIOW I/O STATUS BLOCK DECLARE LONG SYS_STATUS ! SYSTEM SERVICE EXIT STATUS ! ----- MAPPED VARIABLE FOR PASSING MAILBOX I/O CHANNEL ----- MAP (MBXCHAN) WORD MAILBOX_CHNL ! I/O CHANNEL FOR MAILBOX QIO EXTERNAL SUB LIB$STOP ! ABORT PROCESS WITH STATUS EXTERNAL LONG FUNCTION SYS$QIOW ! QUEUE I/O REQUEST AND WAIT ! ----- READ ANY MESSAGE THAT WAS SENT TO OUR MAILBOX ----- FUNC = IO$_READVBLK OR IO$M_NOW SYS_STATUS = SYS$QIOW( , ! EVENT FLAG & MAILBOX_CHNL BY VALUE, ! DEVICE I/O CHANNEL & FUNC BY VALUE, ! DEVICE FUNCTION CODE & IOSB() BY REF, ! I/O STATUS BLOCK & , ! AST ADDRESS & , ! AST PARAMETER & DUMMY_BUFFER BY REF, ! READ VIRT BLOCK BUFFER& 1% BY VALUE, ! SIZE OF READ BUFFER & , ! AST ACCESS MODE & , ! & , ! & ) ! ! ----- IGNORE ANY ERRORS THAT MAY OCCUR FROM THE SYS$QIOW CALL ----- !CALL LIB$STOP(SYS_STATUS BY VALUE) IF (SYS_STATUS AND 1%) = 0% !CALL LIB$STOP(IOSB(0%) BY VALUE) IF (IOSB(0%) AND 1%) = 0% END SUB