*DECK FCSNWFS 
USETEXT TEXTFCS;
      PROC FCSNWFS (STATES);
*CALL COPYRITE
# TITLE FCSNWFS - WAIT FOR FTP STATE.                                  #
  
      BEGIN                            # FCSNWFS                       #
  
# 
**    FCSNWFS - WAIT FOR FTP STATE. 
* 
*     C. J. RAMSAY                     87/11/03 
* 
*     THIS PROCEDURE WAITS FOR THE SUPERVISORY MESSAGE WHICH WILL 
*     CAUSE THE FTP STATE TO CHANGE TO ONE OF THE REQUESTED STATES. 
* 
*     PROC FCSNWFS (STATES) 
* 
*     ENTRY   STATES     = MASK OF STATES TO WAIT FOR.
*             FTPSTATE   = FTP CURRENT STATE. 
* 
*     EXIT    FTPSTATE   = FTP CURRENT STATE. 
* 
*     METHOD  RETURN IF STATE ALREADY MATCHES.
*             LIST OFF DATA CONNECTION. 
*             PROCESS ALL SUPERVISORY MESSAGES UNTIL STATE MATCHES. 
*             LIST ON DATA CONNECTION.
* 
# 
  
# 
****  PROC FCSNWFS - XREF LIST
# 
      XREF
        BEGIN 
        PROC FCSNOSM;                  # OUTPUT SUPERVISORY MESSAGE    #
        PROC FCSNPSM;                  # PROCESS SUPERVISORY MESSAGE   #
        PROC FCSNWSM;                  # WAIT FOR SUPERVISORY MESSAGE  #
        END 
# 
****
# 
      ITEM STATES        U;            # MASK OF STATES TO WAIT FOR    #
      CONTROL EJECT;
# 
*     START MAIN PROCEDURE
# 
      IF (FTPSTATE LAN STATES) EQ 0 
      THEN
        BEGIN                          # NOT ALREADY IN DESIRED STATE  #
# 
*     TURN LIST PROCESSING OFF. 
# 
        P<APSM>   = LOC(OUTBUF);       # BASE SUPERVISORY MESSAGE PTR  #
        SPMSG0[0] = 0;                 # CLEAR FIRST WORD              #
        SPACN[0]  = ACN$ACN[0];        # STORE CONNECTION NUMBER IN SM #
        FCSNOSM (LSTOFF, LLST);        # SEND LST/OFF/R SM             #
# 
*     PROCESS SUPERVISORY MESSAGES UNTIL DESIRED STATE ENTERED. 
# 
        FOR FTPSTATE = FTPSTATE 
          WHILE (FTPSTATE LAN STATES) EQ 0 DO 
          BEGIN                        # LOOP TILL IN DESIRED STATE    #
          FCSNWSM;                     # WAIT FOR SUPERVISORY MESSAGE  #
          FCSNPSM;                     # PROCESS SUPERVISORY MESSAGE   #
          END 
# 
*     TURN LIST PROCESSING ON.
# 
        P<APSM>   = LOC(OUTBUF);       # BASE SUPERVISORY MESSAGE PTR  #
        SPMSG0[0] = 0;                 # CLEAR FIRST WORD              #
        SPACN[0]  = ACN$ACN[0];        # STORE CONNECTION NUMBER IN SM #
        FCSNOSM (LSTON, LLST);         # SEND LST/ON/R SM              #
        END 
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FCSNWFS                       #
  
      TERM
