*DECK CSOBOE
USETEXT TEXTCS;
USETEXT TEXTSS;
USETEXT TXTAPSS;
PROC CSOBOE;
# TITLE CSOBOE - BROADCAST OPERATOR EVENTS. #
BEGIN # CSOBOE #
#
** CSOBOE - BROADCAST OPERATOR EVENTS.
*
* C. BRION 82/06/09.
* D.K. ENDO 83/02/17 ADD FILTERED REPORT.
*
* THIS PROCEDURE EXTRACTS OPERATOR GROUP RESPONSE ENTRIES FROM
* THE OPERATOR RESPONSE QUEUE (ORQ) AND GENERATES THE NEEDED
* OPERATOR DIRECTED EVENT LINES DEPENDING ON THE AUDIENCE GROUP
* OF THE ENTRY.
*
* PROC CSOBOE
*
* ENTRY
* ENTRIES IN THE OPERATOR RESPONSE QUEUE.
*
* EXIT
* ENTRIES IN THE ODEQ WITH THE APPROPRIATE ACN VALUE FOR EACH.
*
#
#
**** PROC CSOBOE XREF LIST.
#
XREF
BEGIN
PROC SSBTBW; # SS-TEST BIT IN WORD #
PROC SSTAQE; # SS-ACCEPT QUEUE ENTRY #
PROC SSTRQE; # SS-REMOVE QUEUE ENTRY #
PROC CSOAHL; # ADD HISTORY LINES #
END
#
****
#
#
* AGSWTCH - SWITCH LIST USED TO JUMP TO THE APPROPRIATE PARAGRAPH
* BASED ON AUDIENCE GROUP.
#
SWITCH AGSWTCH ENDCASE,
AUDGR1,
AUDGR2,
AUDGR3,
AUDGR4,
ENDCASE,
ENDCASE;
#
* ITEMS
#
ITEM I; # LOOP VAR #
ITEM NORD U; # NPU ORDINAL WORD #
ITEM OORD U; # OCB ORDINAL WORD #
ITEM REPORT B; # REPORT FLAG #
#
* THE MAIN LOOP CONTINUES TO EXECUTE AS LONG AS ENTRIES EXIST IN
* THE OPERATOR RESPONSE QUEUE.
#
FOR I = 0 STEP 1 WHILE ORQL NQ 0
DO
BEGIN
SSTRQE(P<ORQ>,WCBUF[0],ABH[0],MSGBUF[0]); # REMOVE ENTRY #
WCB$WORD[1] = WCB$WORD[0];
WCB$IAF[1] = FALSE;
WCB$HAF[1] = FALSE;
ABHWORD[1] = 0;
ABHADR[1] = HOPORD$;
#
* LOG THE MESSAGE IN THE HISTORY BUFFER.
#
CSOAHL;
#
* CASE ON THE AUDIENCE GROUP NUMBER TO DETERMINE WHO SHOULD
* RECEIVE THIS MESSAGE.
#
GOTO AGSWTCH[ABHADR[0]];
#
* THE AUDIENCE GROUP IS ONE. IF THERE IS NO CONTROLLING NOP THEN
* SET THE HOP ALERT FLAG. SEND THE MESSAGE TO THE HOP. FOR EACH
* ACTIVE OPERATOR, SEND THE MESSAGE.
#
AUDGR1:
IF NPU$CNOP[ABHABN[0]] EQ 0
THEN
BEGIN
WCB$HAF[1] = TRUE;
END
SSTAQE(P<ODEQ>,WCBUF[1],ABH[1],MSGBUF[0]);
FOR I=MINACN$ STEP 1 UNTIL MAXACN$
DO
BEGIN
IF OC$STATE[I]
THEN
BEGIN
ABHADR[1] = I;
SSTAQE(P<ODEQ>,WCBUF[1],ABH[1],MSGBUF[0]);
END
END
GOTO ENDCASE;
#
* THE AUDIENCE GROUP IS TWO. SET THE HOP ALERT FLAG. SEND THE
* MESSAGE TO THE HOP. FOR EACH ACTIVE NOP, SEND THE MESSAGE.
#
AUDGR2:
WCB$HAF[1] = TRUE;
SSTAQE(P<ODEQ>,WCBUF[1],ABH[1],MSGBUF[0]);
FOR I=MINACN$ STEP 1 UNTIL MAXACN$
DO
BEGIN
IF OC$STATE[I] AND
OC$TYPE[I] EQ OPTYP"NOP"
THEN
BEGIN
ABHADR[1] = I;
SSTAQE(P<ODEQ>,WCBUF[1],ABH[1],MSGBUF[0]);
END
END
GOTO ENDCASE;
#* THE AUDIENCE GROUP IS THREE. IF THIS HOP IS RECEIVING REPORTS
* THEN SEND THE MESSAGE TO THE HOP WITH THE SOP ALERT FLAG SET IF
* THERE IS NOP CONTROLLING NOP. FOR EACH OPERATOR RECEIVING
* REPORTS FOR THIS NPU, SEND THE MESSAGE.
#
AUDGR3:
SSBTBW( NPU$RFLGS[ABHABN[0]] , HOPORD$ , REPORT );
IF REPORT
THEN
BEGIN
IF NPU$CNOP[ABHABN[0]] EQ 0
THEN
BEGIN
WCB$HAF[1] = TRUE;
END
SSTAQE(P<ODEQ>,WCBUF[1],ABH[1],MSGBUF[0]);
END
FOR I=MINACN$ STEP 1 UNTIL MAXACN$
DO
BEGIN
IF OC$STATE[I]
THEN
BEGIN
SSBTBW( NPU$RFLGS[ABHABN[0]] , I , REPORT );
IF REPORT
THEN
BEGIN
ABHADR[1] = I;
SSTAQE(P<ODEQ>,WCBUF[1],ABH[1],MSGBUF[0]);
END
END
END
GOTO ENDCASE;
#
* THE AUDIENCE GROUP IS FOUR. IF THERE IS NO CONTROLLING NOP,
* THEN SET THE HOP ALERT FLAG. SEND THE MESSAGE TO THE HOP.
* IF THERE IS A CONTROLLING NOP THEN SEND THE MESSAGE TO HIM.
#
AUDGR4:
IF NPU$CNOP[ABHABN[0]] EQ 0
THEN
BEGIN
WCB$HAF[1] = TRUE;
END
ELSE
BEGIN
ABHADR[1] = NPU$CNOP[ABHABN[0]];
SSTAQE(P<ODEQ>,WCBUF[1],ABH[1],MSGBUF);
END
ABHADR[1] = HOPORD$;
SSTAQE(P<ODEQ>,WCBUF[1],ABH[1],MSGBUF);
GOTO ENDCASE;
ENDCASE:
END # FOR I LOOP #
END # CSOBOE #
TERM