*DECK XFRCOMP 
USETEXT COMCBEG 
USETEXT COMADEF 
USETEXT COMACBF 
USETEXT COMACBX 
USETEXT COMADFM 
USETEXT COMAFET 
PROC XFRCOMP; 
# TITLE XFRCOMP - COMPLETE FILE TRANSFER.  #
  
      BEGIN  # XFRCOMP #
  
# 
*     XFRCOMP - COMPLETE FILE TRANSFER. 
* 
*     XFRCOMP PERFORMS REQUIRED PROCESSING TO COMPLETE FILE TRANSFER. 
* 
*     PROC XFRCOMP
* 
*     ENTRY      <FTTENT> = FWA FTT ENTRY.
* 
*     EXIT       NONE.
* 
*     PROCESS    WAIT FOR OUTSTANDING CIO/RHF CALLS TO COMPLETE.
*                CALL CALLNP TO NETPUT A LST/ON/R MESSAGE TO
*                  TURN ON LIST PROCESSING FOR THIS ACN.
*                IF FTTERRORD = OK
*                  AND FTTDXPA = ERROR: 
*                  SET FTTERRORD = PREMATURE-TERMINATION
*                IF FTTTSTATIS = ERROR: 
*                  SET FTTERRORD = FTTTSTATIS.
*                IF FTTERRORD = ERROR:  
*                  SET STATUS WORD = FTTERRORD. 
*                  IF ERROR DETAIL NOT SENT:  
*                    SEND ERROR MESSAGE TO DAYFILE. 
*                ELSE: (FTTERRORD = OK) 
*                  SET STATUS WORD = COMPLETE-NO-ERROR. 
*                  SEND DAYFILE MESSAGE * FILE TRANSFER COMPLETE *
*                SET FTTACN = 0 (RELEASE FILE TRANSFER TABLE ENTRY).
*                CALL RMEMCMM TO RELEASE CM SPACE IF POSSIBLE.
*                DECREMENT THE NUMBER OF FILE TRANSFER COUNT. 
*                IF NO OTHER TRANSFER IN PROGRESS:  
*                  CALL RECOVR TO CANCEL FIP REPRIEVE PROCESSING. 
*                  CALL CMMFGR TO RELEASE CMM GROUP NAME. 
* 
****  PROC XFRCOMP - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC CMMFGR;                 # FREE GROUP NAME #
        PROC DAYFMSG;                # WRITE DAYFILE MESSAGE #
        PROC FIPRPV;                 # FIP RECOVERY # 
        PROC NPLSTM;                 # NETPUT LIST MESSAGE #
        PROC RECOVR;                 # SYSTEM REPRIEVE ROUTINE #
        FUNC REPZERO C(7);           # REPLACE TRAILING ZEROES #
        FUNC RMEMCMM U;              # FREE CENTRAL MEMORY VIA CMM #
        PROC CALLSYS;              # SYSTEM CALL (RCL) #
        END 
  
# 
****  PROC XFRCOMP XREF LIST END. 
# 
  
      ITEM I          I;
                                               CONTROL EJECT; 
# 
*     WAIT FOR OUTSTANDING CIO AND RHF CALLS TO COMPLETE. 
# 
      P<LFET> = FTTFETADR;
      P<RHFREQREPB> = FTTPBLKADR; 
      RCLRECALL = TRUE;            # AUTO RECALL #
  
      IF (P<LFET> NE 0) AND NOT LFETCOMP  # IF NOT COMPLETE # 
      THEN
        BEGIN 
        RCLPARAMAD = LOC(LFETCOMP[0]);  # SET RECALL ADDR # 
        CALLSYS (RCLCALL);
        END 
  
      P<RFET> = RHF$RFETAD; 
      IF (P<RFET> NE 0) AND NOT RFETCOMP  # IF NOT COMPLETE # 
      THEN
        BEGIN 
        RCLPARAMAD = LOC(RFETCOMP[0]);  # SET RECALL ADDR # 
        CALLSYS (RCLCALL);
        END 
# 
*     NETPUT A LST/ON/R MESSAGE.
# 
  
      LST$ONOFF[0] = TRUE;
      LST$ACN[0] = FTTACN;
      NPLSTM;                        # NETPUT THE LST/ON/R MESSAGE #
  
# 
*     SET USER"S REPLY STATUS WORD. 
# 
  
      IF FTTERRORD LE CMPL$NO$ER
        AND FTTDXPA NE P$ES$OK
      THEN
        BEGIN 
        FTTERRORD = PRETERMRCV; 
        END 
  
      IF FTTTSTATIS GT CMPL$NO$ER  # IF ERROR IN TRANSFER # 
      THEN
        BEGIN 
        FTTERRORD = FTTTSTATIS; 
        IF FTTTSTATIS EQ SYSTEM$ER # IF SYSTEM ERROR #
        THEN
          BEGIN 
          BUFF$MSG2 = RPV$MSG;     # ADD REPRIEVING TO MESSAGE #
          END 
  
        END 
  
      IF FTTERRORD  GT  CMPL$NO$ER
      THEN
        BEGIN 
        STATUSWD[0] =  FTTERRORD; 
        DAYFMSG (FTTERRORD);     # SEND DAYFILE MESSAGE # 
        END 
  
      ELSE
        BEGIN 
        STATUSWD[0]  =  CMPL$NO$ER; 
        IDFM$LFN1[CMPL$NO$ER] = REPZERO(LFETLFNC);
        DAYFMSG (CMPL$NO$ER);        # WRITE DAYFILE MESSAGE #
        END 
  
      FTTFETADR = RMEMCMM (FTTFETADR);
      FTTACN = 0;                  # RELEASES THIS FTT ENTRY #
      NUMFILEXFR = NUMFILEXFR - 1;
      IF NUMFILEXFR EQ 0
      THEN
        BEGIN 
        CMMFGR (GROUPNAME);          # FREE GROUP NAME #
        RECOVR (FIPRPV,0,0);         # CANCEL REPRIEVE PROCESSING # 
        END 
  
      END    # XFRCOMP #
  
      TERM
