*DECK CSSARE
USETEXT TEXTCS
USETEXT TEXTSS
USETEXT TXCMDCS 
USETEXT TXTAPSS 
      PROC CSSARE;
# TITLE - ACTION REPORT COMMAND                                        #
      BEGIN 
# 
**    CSSARE - ACTION REPORT COMMAND. 
* 
*     D.K. ENDO     83/02/09
* 
*     THIS PROCEDURE PROCESSES THE REPORT COMMAND.
* 
*     PROC CSSARE 
* 
*     ENTRY         1. HDRCMD = COMMAND HEADER. 
*                   2. PARMS = PARAMETER LIST.
* 
*     EXIT          1. ENTRIES IN THE EVENT QUEUE. (CONTROL ON/OFF) 
*                   2. MESSAGES TO THE C-LAYER. 
* 
# 
# 
****  PROC CSSARE - XREF LIST.
# 
      XREF
        BEGIN 
        PROC SSBCBW;                   # CLEAR BIT IN WORD             #
        PROC SSBSBW;                   # SET BET IN WORD               #
        PROC SSTAQE;                   # ACCEPT QUEUE ENTRY            #
        END 
# 
****
# 
  
      DEF MODEIDX # HDR$TXWCNT[0]+2 #; # INDEX TO MODE (ON/OFF) WORD   #
      DEF NORIDX  # HDR$TXWCNT[0]+3 #; # INDEX TO NPUCB ORDINAL WORD   #
      DEF NPUIDX  # HDR$TXWCNT[0]+1 #; # INDEX TO NP/NPS PARAMETER WORD#
  
  
      ITEM I;                # LOOP INDUCTION VARIABLE                 #
  
  
# 
*     FLG$WORD - BASED ARRAY POINTED TO A REPORT FLAG WORD IN THE 
*     NPUCB-S.
# 
      BASED ARRAY FLG$WORD [00:00] S(1);
        BEGIN 
        ITEM FW$WORD    I(00,00,60);
        END 
  
  
# 
*                            CSSARE CODE BEGINS HERE
# 
# 
*     IF REQUEST TO RECEIVE REPORTS, THEN IF ONE NPU IS SPECIFIED, THEN 
*     SET THE REPORT FLAG IN THE NPUCB CORRESPONDING TO THIS OPERATOR.
*     IF *NPUS* IS SPECIFIED, THEN SET THE REPORT FLAG IN ALL THE ACTIVE
*     NPUCB-S FOR THIS OPERATOR.
# 
      IF PAR$PCODE[MODEIDX] EQ "ON0"
      THEN
        BEGIN 
  
        IF PAR$PCODE[NPUIDX] EQ "NP0" 
        THEN
          BEGIN 
          P<FLG$WORD> = LOC(NPU$RFLGS[PAR$ORD[NORIDX]]);
          SSBSBW( FLG$WORD , HDR$OPORD[0] );
          END 
  
        ELSE
          BEGIN 
          FOR I=0 STEP 1 WHILE I LS CSNPCNT 
          DO
            BEGIN 
            IF NPU$STAT[I] NQ SUPSTAT"SUPLOST"
            THEN
              BEGIN 
              P<FLG$WORD> = LOC(NPU$RFLGS[I]);
              SSBSBW( FLG$WORD , HDR$OPORD[0] );
              END 
            END 
          END 
        END 
# 
*     IF REPORTS ARE TO BE TURNED OFF, THEN IF ONE NPU WAS SPECIFIED, 
*     THEN CLEAR THE REPORT FLAG IN THE NPUCB FOR THIS OPERATOR.  IF
*     ALL NPUS WAS SPECIFIED, THEN CLEAR THE FLAGS IN ALL THE NPUCB-S 
*     FOR THIS OPERATOR.
# 
      ELSE
        BEGIN 
        IF PAR$PCODE[NPUIDX] EQ "NP0" 
        THEN
          BEGIN 
          P<FLG$WORD> = LOC(NPU$RFLGS[PAR$ORD[NORIDX]]);
          SSBCBW( FLG$WORD , HDR$OPORD[0]); 
          END 
  
        ELSE
          BEGIN 
          FOR I=0 STEP 1 WHILE I LS CSNPCNT 
          DO
            BEGIN 
            IF NPU$STAT[I] NQ SUPSTAT"SUPLOST"
            THEN
              BEGIN 
              P<FLG$WORD> = LOC(NPU$RFLGS[I]);
              SSBCBW( FLG$WORD , HDR$OPORD[0] );
              END 
            END 
          END 
        END 
  
# 
*     SEND AN EMPTY TERMINAL TEXT WITH THE INPUT ALLOWED FLAG SET TO
*     INDICATE THAT THE COMMAND IS COMPLETE.
# 
      WCB$WORD[1] = 2;
      WCB$SMID[1] = SMID"TTEXT";
      WCB$IAF[1] = TRUE;
      ABHWORD[1] = 0; 
      ABHADR[1] = HDR$OPORD[0]; 
      SSTAQE(P<CNQ>,WCBUF[1],ABH[1],MSGBUF);
  
  
      END # CSSARE #
      TERM
  
  
