*DECK FFSSPFI 
USETEXT TEXTFFS 
      PROC FFSSPFI; 
*CALL COPYRITE
# TITLE FFSSPFI - PROCESS FC/INIT SUPERVISORY MESSAGE.                 #
  
      BEGIN                            # FFSSPFI                       #
# 
**    FFSSPFI  PROCESS FC/INIT SUPERVISORY MESSAGE. 
* 
*     A. LIM                           88/01/18 
* 
*     THIS PROCEDURE PROCESSES A FC/INIT SUPERVISORY MESSAGE. 
* 
*     PROC FFSSPFI
* 
*     ENTRY    CURACN  = FILE SERVER CONNECTION NUMBER. 
* 
*     EXIT     ONE OR COMBINATION OF THE FOLLOWING: 
* 
*              - P<APSM> = PTR TO OUTPUT SUPERVISORY MESSAGE (*OUTBUF*).
*              - CONNECTION STATE SET TO *ACTIVE*.
*              - FC/INIT/N SUPERVISORY MESSAGE SENT.
*              - INDICATION[INAMTCP$] IS SET IF THERE IS ANY INDICATION 
*                TO BE PASSED UPWARD. 
* 
*     METHOD   IF THE CONNECTION STATE IS *NULL*, *PCONACRQ*, *ACTIVE*, 
*              OR *RETRYPEND*, TREAT IT AS A NAM PROTOCOL ERROR.
* 
*              IF THE CONNECTION STATE IS *ENDPEND*,
*              THEN THE FC/INIT IS IGNORED. 
* 
*              IF THE CONNECTION STATE IS *PENDING*:  
*                - STATE IS CHANGED TO *ACTIVE*.
*                - FC/INIT/N SM IS SENT.
*                - FOR OUTBOUND CONNECTION: 
*                  CONNECTION COMPLETE INDICATION IS MADE 
*                  FOR THE TCP LAYER. 
*                - FOR INBOUND CONNECTION:  
*                  INBOUND CONNECTION INDICATION IS MADE
*                  FOR THE TCP LAYER. 
* 
# 
  
# 
****  PROC FFSSPFI - XREF LIST
# 
      XREF
        BEGIN 
        PROC FFSEEFS;    # END ALL FILE SERVER CONNECTIONS             #
        PROC FFSOSMG;    # OUTPUT SUPERVISORY MESSAGE                  #
        FUNC FFSUFCE B;  # UTILITY TO FIND FILE SERVER CONNECTION ENTRY#
        END 
# 
****
# 
      CONTROL EJECT;
  
#     START MAIN PROCEDURE                                             #
  
#     CONNECTION STATE IS *NULL* - TREAT AS A NAM PROTOCOL ERROR.      #
  
      IF NOT FFSUFCE                   # FIND CONNECTION ENTRY         #
      THEN
        BEGIN 
        FFSEEFS (NFCINIT);
        END 
  
# 
*     CONNECTION STATE IS *PCONACRQ*, *ACTIVE* OR *RETRYPEND*,
*     TREAT AS A NAM PROTOCOL ERROR.
# 
      ELSE IF ACN$STATE[ACNX] LAN 
             (PCONACRQ + ACTIVE + RETRYPEND) NQ 0 
      THEN
        BEGIN 
        FFSEEFS (NFCINIT);
        END 
# 
*     CONNECTION STATE IS *ENDPEND* - IGNORE. 
# 
      ELSE IF ACN$STATE[ACNX] LAN 
             (ENDPEND) NQ 0 
      THEN
        BEGIN 
        RETURN; 
        END 
# 
*     CONNECTION STATE IS *PENDING* - CHANGE THE STATE TO *ACTIVE*, AND 
*     DISPATCH THE FC/INIT/N SUPERVISORY MESSAGE. 
# 
      ELSE
        BEGIN 
        ACN$STATE[ACNX] = ACTIVE;      # CONNECTION STATE NOW *ACTIVE* #
        P<APSM>  = LOC (OUTBUF);       # BASE SUPERVISORY MESSAGE PTR  #
        SPMSG0[0] = 0;                 # CLEAR FIRST WORD              #
        FFSOSMG (FCINITN, LFCINTN);    # FORMAT AND SEND FC/INIT/N SM  #
        IF ACN$NODD[ACNX] 
        THEN
          BEGIN                        # NO DATA DELIVERY              #
          FFSOSMG (LSTOFF, LLST);      # FORMAT AND SEND LST/OFF SM    #
          END 
  
        IF ACNX EQ S"CTCS"
        THEN
          BEGIN                        # INBOUND CONNECTION            #
          IND$ICODE[INAMTCP$] = INAM"ININCON";   # INDICATE INBOUND C/N#
          END 
        ELSE
          BEGIN                        # OUTBOUND CONNECTION           #
          IND$ICODE[INAMTCP$] = INAM"INCONCMP";  # INDICAT C/N COMPLETE#
          END 
        END;
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FFSSPFI                       #
  
      TERM
