*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 
