*DECK CHKTIME 
USETEXT COMCBEG 
USETEXT COMADEF 
USETEXT COMACBF 
USETEXT COMACBX 
USETEXT COMAFET 
USETEXT COMADFM 
PROC CHKTIME; 
# TITLE CHKTIME - CHECK IF TIMED OUT.  #
  
      BEGIN  # CHKTIME #
  
# 
*     CHKTIME - CHECK IF TIMED OUT. 
* 
*     CHKTIME CALCULATES HOW LONG THE FILE TRANSFER HAS BEEN IN ITS 
*     CURRENT STATE AND IF ITS TIMED OUT IT CALLS XFRCOMP TO COMPLETE 
*     THE TRANSFER. 
* 
*     PROC CHKTIME
* 
*     ENTRY      <FTTENT> = FWA FTT ENTRY.
*                FTTCOUNT = 0.
* 
*     EXIT       FTTCOUNT = MAXFTTCOUN. 
*                FTTACN = 0 IF TIMED OUT. 
*                IF FILE TRANSFER IN PROGRESS,
*                  FTTTIME AND OLDTOTBITS UPDATED.
* 
*     PROCESS    SET FTTCOUNT = MAXFTTCOUN. 
*                IF DATA TRANSFER IN PROGRESS AND ACTIVE: 
*                  SET FTTTIME = 0. 
*                  SET FTTDLYCTR = 0. 
*                  SET OLDTOTBITS = OTTOTBITS.
*                ELSE:  
*                  CALL SYSTEM TO GET CURRENT TIME. 
*                  IF FTTTIME EQ 0
*                    SET FTTTIME = CURRENT TIME.
*                  CALCULATE ELAPSED TIME BY SUBTRACTING FTTTIME
*                    FROM CURRENT TIME. 
*                  IF ELAPSED TIME GT FTTTIMEOUT/2
*                    AND SELECTING CONVERT MODE 
*                  THEN 
*                    SET TEMP STATUS = CODE-CONVERSION-NOT-AVAIL. 
*                    SEND DAYFILE MESSAGE.
*                    IF SENDING FILE: 
*                      CALL ENDXFR TO END TRANSFER. 
*                    ELSE:  
*                      CALL QUITXFR TO END DATA TRANSFER. 
*                  ELSE 
*                    IF ELAPSED TIME GT FTTTIMEOUT
*                    THEN 
*                      IF FC/NAK RETRY IN PROGRESS: 
*                        SET ERROR AND ACN IN MESSAGE.
*                      ELSE:  
*                        SET ERROR. 
*                    ELSE 
*                      IF WAITING FOR CONVERT MODE RESOURCES
*                        AND DELAY TIME EXPIRED 
*                      THEN 
*                        RETRY CONVERT MODE SELECT. 
*                  IF ERROR 
*                    CALL DAYFMSG TO SEND ERROR MESSAGE.
*                    SAVE ERROR.
*                    CALL XFRCOMP TO COMPLETE TRANSFER. 
* 
****  PROC CHKTIME - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC CALLSYS;                # MAKES RA+1 CALLS # 
        PROC DAYFMSG;                # DAYFILE MESSAGE #
        FUNC DECCHF     C(10);       # DECIMAL DISPLAY CODE # 
        PROC ENDXFR;                 # END TRANSFER # 
        PROC QUITXFR;                # QUIT DATA TRANSFER # 
        PROC SELCM;                  # SELECT CONVERT MODE #
        PROC XFRCOMP;                # COMPLETE FILE TRANSFER # 
        FUNC REPZERO C(7);           # ZERO FILL #
        END 
  
# 
****  PROC CHKTIME XREF LIST END. 
# 
      ITEM ELAPS$TIME I;             # ELAPSED TIME # 
      ITEM ERRCODE    I;             # FTT ERROR CODE # 
                                               CONTROL EJECT; 
      FTTCOUNT = MAXFTTCOUN;       # RESET COUNTER #
      IF FTTSTATE EQ S"DATAXFRPRG"
        AND OTTOTBITS NE OLDTOTBITS        # AND ACTIVE # 
      THEN
        BEGIN 
        FTTDLYCTR = 0;             # RESET DELAY COUNTER #
        FTTTIME = 0;               # RESET TIME # 
        OLDTOTBITS = OTTOTBITS;            # RESET DATA XFR COUNT # 
        END 
  
      ELSE
        BEGIN   # CHECK IF TIMED OUT  # 
        ERRCODE = 0;
        CALLSYS (TIMCALL);           # GET REAL TIME #
        IF FTTTIME EQ 0 
        THEN
          BEGIN 
          FTTTIME = TIM$CURTIM; 
          END 
  
        ELAPS$TIME = TIM$CURTIM - FTTTIME;
        IF ELAPS$TIME LT 0         # IF CLOCK OVERFLOW #
        THEN
          BEGIN 
          ELAPS$TIME = ELAPS$TIME+O"1000000"; 
          END 
  
        IF FTTCMSA
          AND ELAPS$TIME GT (FTTTIMEOUT/2)
        THEN
          BEGIN 
          IDFM$LFN2 [CODECONRNA] = REPZERO (LFETLFNC);
          FTTTSTATIS = CODECONRNA;  # SAVE ERROR CODE # 
          DAYFMSG(FTTTSTATIS);     # SEND DAYFILE MESSAGE # 
          IF FTTDIRECN EQ SEND     # IF SENDING FILE #
          THEN
            BEGIN 
            FTTDXPA = P$ES$ERR29; 
            ENDXFR;                # END TRANSFER # 
            END 
  
          ELSE
            BEGIN 
            QUITXFR;               # STOP DATA TRANSFER # 
            FTTSTATE = S"QRISSWFACK"; 
            END 
  
          END 
  
        ELSE
          BEGIN 
          IF ELAPS$TIME GT FTTTIMEOUT 
          THEN
            BEGIN 
            IF FTTOL7RTRY NE 0
            THEN
              BEGIN  # UNABLE TO OUTPUT LEVEL 7 COMMAND # 
              IDFM$ACN2B[OBKNOTDEL] = DECCHF (FTTACN,4);
              ERRCODE = OBKNOTDEL;  # SAVE ERROR CODE # 
              END 
  
            ELSE
              BEGIN 
              ERRCODE = TIMEDOUT;  # SAVE ERROR CODE #
              END 
  
            END 
  
          ELSE
            BEGIN 
            IF FTTSTATE EQ S"WFORCMRES" 
              AND (ELAPS$TIME GT (FTTDLYCTR 
                   * (FTTTIMEOUT/(2*MAXCMRTYS)))) 
            THEN
              BEGIN 
              SELCM;
              END 
  
          CONTROL IFEQ OS$NOSBE;
            ELSE
              BEGIN 
              IF FTTSTATE EQ S"DATAXFRDLY"
                AND ELAPS$TIME GE DFULLDELAY
              THEN
                BEGIN 
                FTTSTATE = S"DATAXFRPRG";  # RESET STATE #
                FTTTIME = 0;               # RESET TIME # 
                END 
  
              END 
          CONTROL ENDIF;
            END 
  
          END 
  
        IF ERRCODE NE 0 
        THEN
          BEGIN 
          DAYFMSG (ERRCODE);       # SEND DAYFILE MESSAGE # 
          FTTERRORD = ERRCODE;     # SET ERROR #
          XFRCOMP;                 # COMPLETE TRANSFER #
          END 
  
        END 
      END    # CHKTIME #
  
      TERM
