*DECK PRACKM
USETEXT COMCBEG 
USETEXT COMADEF 
USETEXT COMACBF 
USETEXT COMACBX 
USETEXT COMAFET 
USETEXT COMADFM 
USETEXT COMAMCB 
PROC PRACKM;
# TITLE PRACKM - PROCESS ACK MESSAGE.  #
  
      BEGIN  # PRACKM # 
  
# 
*     PRACKM - PROCESS ACK MESSAGE. 
* 
*     PRACKM ASSUMES AN FC/ACK/R ASYNCHRONOUS MESSAGE HAS BEEN
*     RECEIVED.  IT THEN PERFORMS VARIOUS PROCESSING BASED ON THE STATE 
*     OF THE FILE TRANSFER. 
* 
*     PROC PRACKM 
* 
*     ENTRY      <FTTENT> = FWA FTT ENTRY.
* 
*     EXIT       NONE.
* 
*     PROCESS    DEPENDING ON THE STATE OF THE FILE TRANSFER: 
*                  CASE (SS ISSUED, WAITING FOR FC/ACK/R MESSAGE) 
*                    SET FTTSTATE = WAIT FOR FILE-OPEN. 
*                  CASE (CLOSE RHF FILE ISSUED, WAITING FOR ACK.) 
*                    CALL CALLNP TO NETPUT END-OF-DATA COMMAND. 
*                    CALL ACSTORE AND APSTORE TO FORM AN END-OF-DATA
*                      LEVEL 7 COMMAND. 
*                    CALL INITIME TO INTIALIZE FTTTIME. 
*                    SET FTTSTATE TO INDICATE THAT ES WAS 
*                      ISSUED AND NOW WAITING FOR AN FC/ACK/R RESPONSE
*                      MESSAGE. 
*                  CASE (ES ISSUED, WAITING FOR FC/ACK/R MESSAGE) 
*                    SET FTTSTATE TO INDICATE WAITING FOR 
*                      END ACKNOWLEDGE MESSAGE. 
*                    CALL INITIME TO INITIALIZE FTTTIME.
*                  CASE (ER ISSUED, WAITING FOR ACK)
*                    CALL XFRCOMP TO COMPLETE FILE TRANSFER.
*                  CASE (QR COMMAND ISSUED, WAITING FOR ACK.) 
*                    SET FTTSTATE = DATA-XFR-IN-PROGRESS. 
*                    CALL INITIME TO INITIALIZE FTTIME. 
*                  CASE (ALL OTHERS)
                     IF QUIT COMMAND NOT SENT OR RECEIVED 
*                     CALL PROTERR TO PROCESS PROTOCOL ERROR. 
* 
****  PROC PRACKM - XREF LIST BEGIN.
# 
  
      XREF
        BEGIN 
        PROC CALLCIO;                #  CALL PP PROGRAM CIO # 
        PROC INITIME;                #  INITIALIZE FTTTIME #
        PROC PROTERR;                #  PROCESS PROTOCOL ERROR #
        PROC XFRCOMP;                #  COMPLETE FILE TRANSFER #
        END 
  
# 
****  PROC PRACKM - XREF LIST END.
# 
  
      SWITCH SWFTTSTATE:SFTTSTATE  PRACKM0:INIT$STATE,
                                   PRACKM0:WAITFOROPC,
                                   PRACKM1:SSISSWFACK,
                                   PRACKM0:WTFRSSCMD, 
                                   PRACKM0:WFORSCMR,
                                   PRACKM0:WFORCMRES, 
                                   PRACKM0:DATAXFRPRG,
                                   PRACKM0:WFORECMR,
                                   PRACKM3:ESISSWFACK,
                                   PRACKM0:EOIRCVWFES,
                                   PRACKM4:ERISSWFACK,
                                   PRACKM0:WTFRERCMD, 
                                   PRACKM5:QRISSWFACK,
                                   PRACKM0:FCNAKRCVD, 
                                   PRACKM0:DATAXFRDLY,
                                   PRACKM0:ALL$OTHERS;
                                               CONTROL EJECT; 
      FTTOL7RTRY = 0;              # INIT. IN CASE FC/NAK/R WAS RCVD #
      GOTO SWFTTSTATE[FTTSTATE];
  
PRACKM0:  
  
# 
*     PROTOCOL ERROR -  AN FC/ACK/R MESSAGE WAS RECEIVED WHEN 
*     IT WAS IN A STATE WHERE THAT MESSAGE WAS NOT EXPECTED.
*     (FC/ACK ACCEPTED IF PREVIOUS QUIT COMMAND.) 
# 
  
      IF NOT FTTQRSENT
      THEN
        BEGIN 
        PROTERR;
        END 
  
      GOTO PRACKMCON; 
  
PRACKM1:  
  
# 
*     SS LEVEL 7 COMMAND ISSUED, FC/ACK/R COMMAND RECEIVED. 
# 
  
      FTTSTATE = S"WAITFOROPC";    # WAIT FOR FILE-OPEN # 
      GOTO PRACKMCON; 
  
PRACKM3:  
  
# 
*     END-OF-DATA COMMAND ISSUED, FC/ACK/R RECEIVED.
# 
  
      FTTSTATE = S"WTFRERCMD";
      INITIME;                       # INITIALIZE FTTTIME # 
      GOTO PRACKMCON; 
  
PRACKM4:  
  
# 
*     END-ACKNOWLEDGE COMMAND ISSUED, FC/ACK/R RECEIVED.
# 
  
      XFRCOMP;                       # COMPLETE FILE TRANSFER # 
      GOTO PRACKMCON; 
  
PRACKM5:  
  
# 
*     QUIT SENDING DATA COMMAND ISSUED, FC/ACK/R RECEIVED.
# 
  
      FTTSTATE = S"DATAXFRPRG"; 
      INITIME;                       # INITIALIZE FTTTIME # 
      GOTO PRACKMCON; 
  
PRACKMCON:  
  
      FTTOL7RTRY  =  0; 
      END    # PRACKM # 
  
      TERM
