*DECK SRES                         23MAY81
USETEXT COMCBEG 
USETEXT COMCAPR 
USETEXT COMCCAE 
USETEXT COMQCMD 
USETEXT COMQDEF 
USETEXT COMQFIL 
USETEXT COMQNET 
    PROC SRES;
      BEGIN    # SRES # 
# 
**    SRES       PROCESS SUPERVISORY RESPONSES. 
* 
*     SRES PROCESSES TWO SUPERVISORY RESPONSES: 1) NORMAL END OF
*     CONNECTION, AND  2) ABNORMAL RESPONSE TO A CONNECTION REQUEST.
*     OTHER SUPERVISORY RESPONSES CAUSE PROGRAM ABORT.
* 
*     PROC SRES 
* 
*     ENTRY      ACN = CONNECTION NUMBER (AFT ENTRY INDEX). 
*                FC  = FUNCTION CODE FROM SUPERVISORY MESSAGE.
*                EB  = ERROR FLAG ($EB).
*                RB  = RESPONSE FLAG ($RB). 
* 
*     EXIT       NONE, IF CON/END RESPONSE. 
*                AFT ENTRY UPDATED, IF CON/ACRQ/A:  
*                PID DISABLED, IF CON/ACRQ/A (NAM), RC=65.
* 
*     PROCESS    IF CON/END/N (EB = 0): 
*                  CALL CONENDR.
*                ELSE:  
*                  IF CON/ACRQ/A AND QTFI (INITIATOR):  
*                    CALL CONERR
*                    IF NAM AND REASON CODE = 65: 
*                      CALL OPRCMD TO DISABLE PID.
*                    CLEAR RETRY COUNT. 
*                  ELSE: (NOT CON/ACRQ/A OR QTFS) 
*                    CALL ILLMSG. 
# 
  
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC ABORTQ;
        PROC CONENDR; 
        PROC CONERR;
        PROC ILLMSG;
        PROC NAME;                 # DEBUG CODE # 
        FUNC NFETCH     U;
        PROC OPRCMD;               # PROCESS OPERATOR COMMAND # 
        FUNC YCDZ    C(10);        # NUMBER TO DECIMAL DISPLAY #
        END 
# 
****  XREF END
# 
  
      ITEM I          I;
      ITEM RC         U;
  
      DEF LEMSG30    #39#;
  
      ARRAY EMSG30 [0:0] S(5);
        BEGIN 
        ITEM EMSG30$TX  C(00,00,LEMSG30) =
                 ["CONNECTION REJECTED, REASON CODE = NNN."]; 
        ITEM EMSG30$RC  C(03,30,03);
        ITEM EMSG30$ZB  U(04,00,60)= [0]; 
        END 
  
      ARRAY [0:0] S(2); 
        BEGIN 
        ITEM DSBLPID$CO C(00,00,16) = 
                 ["DISABLE,PID=XXX."];
        ITEM DSBLPID$PD C(01,12,03);
        ITEM DSBLPID$ZB U(01,36,24) = [0];
        END 
                                               CONTROL EJECT; 
  
        $BEGIN
        NAME("SRES");              # DEBUG CODE # 
        $END
  
      IF ACN LE 0 OR ACN GT LACNMAX 
      THEN
        BEGIN 
        ABORTQ("SRES/ABN"); 
        END 
  
      IF FC EQ CONEND              # IF CON/END/N # 
         AND EB EQ 0
      THEN
        BEGIN 
        CONENDR;                   # END CONNECTION # 
        END 
  
      ELSE                         # IF NOT CON/END # 
        BEGIN 
        IF FC EQ CONACRQ           # IF CON/ACRQ/A #
          AND NOT QRCV             # AND QTF (INITIATOR) #
        THEN
          BEGIN 
  
            $BEGIN
            NAME("CON/ACRQ/A");    # DEBUG CODE # 
            $END
  
          RC=NFETCH(NTA,$RC);      # GET REASON CODE #
          EMSG30$RC[0] = YCDZ(RC,3);  # PUT REASON CODE IN MESSAGE #
          CONERR(LOC(EMSG30),LEMSG30);
  
    CONTROL IFEQ OS$NOS;
          IF NAM                   # IF NAM # 
            AND RC EQ 65           # AND NO OUTCALL DEFINED # 
          THEN
            BEGIN 
            DSBLPID$PD = FILECPDC; # PUT PID INTO COMMAND # 
            COMMAND = DSBLPID$CO;  # STORE DISABLE COMMAND #
            OPRCMD("QTF/NAM");     # DISABLE PID #
            END 
  
    CONTROL ENDIF;
  
          FILERTY = 0;             # CLEAR RETRY COUNT #
          FILEFTS = FTS$CMPCNT; 
          END 
  
        ELSE                         # IF NOT CON/ACRQ/A #
          BEGIN 
          ILLMSG;                    # ILLEGAL MESSAGE #
          END 
        END 
  
      END      # SRES # 
    TERM
