*DECK FCACKM                       01SEP81
USETEXT COMCBEG 
USETEXT COMCAPR 
USETEXT COMCCAE 
USETEXT COMQDEF 
USETEXT COMQFIL 
USETEXT COMQNET 
    PROC FCACKM;
      BEGIN    # FCACKM # 
# 
**    FCACKM     PROCESS ACKNOWLEDGE ("BACK") MESSAGE.
* 
*     FCACKM VALIDATES THE NETWORK MESSAGE (BACK) WITH WHICH THE REMOTE 
*     SYSTEM RESPONDS TO A LEVEL 7 MESSAGE SENT PREVIOUSLY.  IF THE 
*     MESSAGE IS VALID, FCACKM SENDS A WAITING MESSAGE OR PROCEEDS TO 
*     THE NEXT STAGE OF FILE TRANSFER.
* 
*     PR0C FCACKM 
* 
*     ENTRY      ACN = APPLICATION CONNECTION NUMBER. 
*                AFT = ACTIVE FILE TABLE ENTRY. 
*                NHA, NTA = NETWORK HEADER, TEXT AREA.
* 
*     EXIT       AFT ENTRY STATUS UPDATED.
* 
*     PROCESS    IF MESSAGE VALID:  
*                  IF COMMAND WAITING:  
*                    CALL PUTNTA (SEND NEXT NETPUT BUFFER). 
*                  ELSE:  
*                    IF RESPONSE TO "GO": 
*                      SET STATE TO NETXFR REQUIRED.
*                      IF "GO" RECEIVED 
*                        PUT ACN BACK INTO LIST 
*                    ELSE:  
                       IF RESPONSE TO "ETP", "ETPR", OR "FINI"
                         IF RESPONSE TO "FINI"
                           CALL CONENDM 
*                        EXIT.
*                      ELSE:  
*                        ABORT JOB. 
*                ELSE (INVALID MESSAGE):  
*                  CALL CONERR. 
# 
  
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC ABORTQ;
        PROC CONENDM; 
        PROC CONERR;
        FUNC FREECMM    U;
        PROC FTUPUT;
        PROC NAME;               # DEBUG CODE # 
        FUNC NFETCH      U; 
        PROC NSTORE;
        PROC PUTNTA;
        END 
# 
****  XREF END
# 
  
  
      ITEM ABN        U;           # SCRATCH CELL # 
  
      DEF LEMSG10    #31#;
      ITEM EMSG10     C(LEMSG10) = "NETWORK BLOCKS OUT OF SEQUENCE."; 
  
  
        $BEGIN
        NAME("FCACKM");              # DEBUG CODE # 
        $END
  
      FILERBN=FILERBN+1;           # NUMBER EXPECTED #
      ABN=NFETCH(NTA,$FCABN);        # NUMBER RECEIVED #
      IF ABN NE FILERBN OR ABN GT FILEABN  # INVALID NUMBER # 
      THEN
        BEGIN 
        CONERR(LOC(EMSG10),LEMSG10);
        END 
  
      ELSE
        BEGIN 
        P<NHA$B> = FILENHA;        # SET BUFFER ADDRESS # 
        IF (FILENHA NE 0)          # IF BUFFER STILL IN CHAIN # 
        THEN
          BEGIN 
          ABN = NHA$LNK;
          FILENHA = FREECMM(FILENHA); 
          FILENHA = ABN;
          END 
  
        IF FILECE                  # IF CONNECTION ENDED #
        THEN
          BEGIN 
          RETURN;                  # SKIP FURTHER PROCESSING #
          END 
  
        IF (FILENHA NE 0) 
        THEN
          BEGIN 
          PUTNTA;                  # NETPUT NEXT BLOCK IN CHAIN # 
          END 
  
        ELSE
          BEGIN 
          FILETIM = TIMT; 
          IF (FILEBNO GE CM$RFT)   # BACK FOR 0 (RFT) - 5 (STPR) #
            AND (FILEBNO LE CM$STPR)
          THEN
            BEGIN 
            IF (FILEBNO EQ CM$GO)  # BACK FOR 3 (GO) #
            THEN
              BEGIN 
              FILEFTS = FTS$XFRREQ;# NETXFR REQUIRED #
              IF FILER3 
              THEN
                BEGIN 
                NTAWD[1]=0;        # CLEAR THE BUFFER # 
                NTAWD[2]=0; 
                NSTORE(NTA,$PFCSFC,LSTON);  # SET LIST ON # 
                NSTORE(NTA,$LSTACN,ACN);    # FOR THIS CONNECTION # 
                NHA=SUPHDR; 
                FTUPUT(NHA,NTA);   # PUT THE MESSAGE #
                END 
  
              END 
            END 
  
          ELSE
            BEGIN 
            IF (FILEBNO GE CM$ETP )  # BACK FOR 60 - 62 # 
              AND (FILEBNO LE CM$FINI)
            THEN
              BEGIN 
              IF  (FILEBNO EQ CM$FINI)  # BACK FOR 62 (FINI) #
              THEN
                BEGIN 
                CONENDM;             # BREAK THE CONNECTION # 
                END 
              END 
  
            ELSE # INVALID BACK # 
              BEGIN 
              ABORTQ("FCACKM"); 
              END 
            END 
          END 
        END 
  
      END      # FCACKM # 
    TERM
