*DECK     CSSAGO
USETEXT TEXTCS; 
USETEXT TEXTSS; 
USETEXT TXTSMCS;
USETEXT TXTAPSS;
USETEXT TXTSUSS;
USETEXT TXCMDCS;
PROC CSSAGO;
# TITLE CSSAGO - ACTION GO COMMAND #
  
      BEGIN # CSSAGO #
  
# 
**    CSSAGO - ACTION GO COMMAND. 
* 
*     C. BRION          82/04/15. 
* 
*     THIS PROCEDURE PROCESSES THE GO COMMAND FROM AN OPERATOR. 
* 
*     PROC CSSAGO 
* 
*     ENTRY:  
*       HDRCMD = COMMAND HEADER WORD. 
*       PARMS = ARRAY THAT CONTAINS THE COMMAND TEXT, THE SYNTAX PARAM- 
*               ETER LIST, THE ADDRESS PARAMETER LIST.
* 
*     EXIT: 
*       A SUP/GO/N SM IS SENT TO THE APPROPRIATE NPU. 
*       THE COMMAND TEXT IS SENT TO THE LOG FILE VIA AN EVENT TO THE
*       EVENT PROCESSOR QUEUE.
* 
# 
  
# 
****  PROC CSSAGO XREF LIST 
# 
  
      XREF
        BEGIN 
        PROC SSCCTR;                     # SS-CANCEL TIMER REQUEST #
        PROC SSTAQE;                     # SS-ACCEPT QUEUE ENTRY #
        PROC MOVE;                       # MACREL MOVE MEMORY # 
        END 
  
# 
****
# 
  
# 
*     PROC CSSAGO ITEMS 
# 
  
      ITEM NPUORD       U;               # NPUCB ORDINAL #
      ITEM I            U;
      ITEM BEGAPIX      U;               # START ADDR LIST INDEX #
      ITEM BEGNPU       I;               # START NPUCB #
      ITEM FINAPIX      U;               # END ADDR LIST INDEX #
      ITEM FINNPU       I;               # END NPUCB #
      ITEM SUCCESS      B;               # FLAG SET AFTER CANCEL TIMER #
  
  
  
  
  
# 
*     PROC CSSAGO EXECUTION STARTS HERE 
# 
  
# 
*     INITIALIZE THE OUTGOING ENTRY STORAGE AREAS AND LOCAL VARS. 
# 
  
      WCB$WORD[1] = 0;
      ABHWORD[1] = 0; 
      SPMSG0[1] = 0;
      NPUORD = 0; 
  
# 
*     SET THE ADDRESS LIST INDEX BOUNDS.
# 
  
      BEGAPIX = HDR$TXWCNT[0] + HDR$SPCNT[0]; 
      FINAPIX = HDR$APCNT[0] + BEGAPIX - 1; 
  
# 
*     IF THIS IS JUST FOR ONE NPU, THEN...
*     SEARCH THE COMMAND ADDRESS PARAMETER LIST OF PARMS ARRAY FOR AN 
*     NPU ORDINAL KEYWORD (NOR). SHOULD ALWAYS FIND THE KEYWORD.
# 
      IF BEGAPIX LQ FINAPIX 
      THEN
        BEGIN 
  
        FOR I = BEGAPIX STEP 1 WHILE
          PAR$PCODE[I] NQ "NOR" 
        DO
          BEGIN 
          END 
  
        NPUORD = PAR$ORD[I];             # SET NPUCB ORDINAL #
  
        BEGNPU = NPUORD;
        FINNPU = NPUORD;
        END 
  
# 
*     THE GO IS FOR ALL NPUS.  SET THE PARAMETERS TO CHECK ALL THE
*     NPUCB-S.
# 
      ELSE
        BEGIN 
        BEGNPU = 0; 
        FINNPU = CSNPCNT - 1; 
        END 
# 
*     SET UP THE ABH WORD FOR THE OUTGOING SUP/GO/N SM. 
# 
  
      ABHABT[1] = APPSUP; 
      ABHBT[1] = APPSUP;
      ABHACT[1] = ACTCSNP$; 
      ABHTLC[1] = NSUPGO; 
      PFCSFC[1] = SUPGON; 
  
# 
*     SET UP THE WORD COUNT WORD OF THE SM ENTRY TO THE OUTGOING
*     OPERATOR TRAFFIC QUEUE. 
# 
  
      WCB$SMID[1] = SMID"SUPGON"; 
      WCB$WC[1] = LSUPGO + 2; 
  
# 
*     SEND THE SM TO THE NPU(S).
# 
      FOR NPUORD=BEGNPU STEP 1 UNTIL FINNPU 
      DO
        BEGIN 
        IF NPU$STAT[NPUORD] EQ SUPSTAT"SUP" 
        THEN
          BEGIN 
          ABHDN[1] = NPU$NID[NPUORD]; 
          ABHSN[1] = NPU$HID[NPUORD]; 
  
          SSTAQE(P<OTQ>,WCBUF[1],ABH[1],CSSM[1]); 
  
          IF NPU$GFLAG[NPUORD]
          THEN
            BEGIN 
# 
*     CANCEL TIMER REQUEST AND CLEAR -NEED GO- FLAG IN THE NPUCB. 
# 
            SSCCTR(NPU$CNUM[NPUORD],SUCCESS); 
  
            NPU$GFLAG[NPUORD] = FALSE;
            END 
          END 
        END 
  
# 
*     SET UP TO SEND THE NULL TEXT TO THE OPERATOR TO CAUSE THE 
*     READY.. MESSAGE.
# 
  
      WCB$WORD[1] = 0;
      ABHWORD[1] = 0; 
      ABHADR[1] = HDR$OPORD[0]; 
      WCB$SMID[1] = SMID"TTEXT";
      WCB$IAF[1] = TRUE;
      WCB$WC[1] = 2;
      SSTAQE(P<CNQ>,WCBUF[1],ABH[1],CSSM[1]); 
  
# 
*     SET UP AND SEND THE EVENT ENTRY TO LOG THE TEXT.
# 
  
      WCB$WORD[1] = 0;
      ABHWORD[1] = 0; 
      WCB$SMID[1] = SMID"CMDTXT"; 
      WCB$WC[1] = HDR$TXWCNT[0] + 4;
      P<MSCMD> = LOC(CMD$TEXT[0]);
      CMD$TNAM[0] = OC$TNAM[HDR$OPORD[0]];
  
# 
*     MOVE THE TEXT INTO THE TEXT BUFFER. 
# 
  
      MOVE(HDR$TXWCNT[0],PARMS[0],MSCMD[0]);
  
      SSTAQE(P<EVQ>,WCBUF[1],ABH[1],CMDLINE[0]);
  
      END #CSSAGO#
  
 TERM 
