*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,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,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,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,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,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,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,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,WCBUF[1],ABH[1],MSGBUF); END ABHADR[1] = HOPORD$; SSTAQE(P,WCBUF[1],ABH[1],MSGBUF); GOTO ENDCASE; ENDCASE: END # FOR I LOOP # END # CSOBOE # TERM