*DECK FFSTCTE 
USETEXT TEXTFFS 
      PROC FFSTCTE (TTYPE); 
*CALL COPYRITE
# TITLE FFSTCTE - CANCEL TIMER ENTRY.                                  #
  
      BEGIN                            # FFSTCTE                       #
# 
**    FFSTCTE  CANCEL TIMER ENTRY.
* 
*     C. J. RAMSAY                     84/03/13 
* 
*     THIS PROCEDURE CANCELS A TIMER ENTRY AND MAINTAINS THE LIST OF
*     TIMER ENTRIES IN ASCENDING EXPIRE TIME ORDER. 
* 
*     PROC FFSTCTE (TTYPE)
* 
*     ENTRY    P<TMR> = PTR TO FILE SERVER TIMER LIST.
*              TTYPE  = TYPE OF TIMER ENTRY.
*                       *ROLLOUT*    - FILE SERVER ROLLOUT TIMER. 
*              CURLFN = CURRENT LOCAL FILE NAME.
* 
*     EXIT     TIMER ENTRY DELETED. 
*              CTM$FTSEC = FIRE TIME OF FIRST TIMER ENTRY DUE.
* 
*     METHOD   IF THE TIMER ENTRY EXISTS THEN REMOVE IT.
* 
*              UPDATE THE FIRE TIME OF THE NEXT TIMER ENTRY DUE.
*              IF NO TIMER ENTRIES EXIST THEN SET THE TIMER FIRE TIME 
*              TO THE MAXIMUM VALUE.
* 
# 
  
# 
****  PROC FFSTCTE - XREF LIST
# 
      XREF
        BEGIN 
        PROC FFSMDTS;    # DEALLOCATE TABLE SPACE                      #
        END 
# 
****
# 
      ITEM TTYPE         S:TMRST;      # TYPE OF TIMER ENTRY           #
      ITEM FOUND         B;            # TIMER ENTRY FOUND             #
      ITEM I             I;            # LOOP INDUCTION VARIABLE       #
      ITEM INDEX         I;            # WORD INDEX OF TIMER ENTRY     #
      CONTROL EJECT;
  
#     START MAIN PROCEDURE                                             #
  
      FOUND = FALSE;                   # TIMER ENTRY NOT FOUND YET     #
      FOR I = 0 STEP 1                 # LOOP THRU ALL TIMER ENTRIES   #
        WHILE (I*TMRSIZ$ LS TMRL) AND  # UNTIL NO MORE TIMER ENTRIES OR#
              (NOT FOUND)              # CORRECT TIMER ENTRY FOUND     #
      DO
        BEGIN 
        INDEX = I * TMRSIZ$;           # SAVE INDEX IN CASE OF MATCH   #
        IF TMR$TYPE[I] EQ TTYPE 
        THEN
          BEGIN                        # FOUND MATCHING TIMER TYPE     #
          FOUND = TRUE; 
          END;
        END;                           # FOR I = 0 STEP TMRSIZ$ DO     #
  
#     REMOVE THE TIMER ENTRY IF IT HAS BEEN FOUND.                     #
  
      IF FOUND
      THEN
        BEGIN                          # FOUND THE TIMER ENTRY         #
        FFSMDTS (P<TMR>,INDEX,TMRSIZ$);# DELETE IT FROM THE TIMER LIST #
        IF TMRL EQ 0
        THEN
          BEGIN                        # LAST TIMER ENTRY DELETED      #
          CTM$FTSEC[0] = MAXTMR$;      # SET FIRE TIME TO MAXIMUM      #
          END 
        ELSE
          BEGIN                        # JUST IN CASE FIRST ONE DELETED#
          CTM$FTSEC[0] = TMR$FTSEC[0]; # UPDATE TIME FIRST TIMER DUE   #
          END;
        END;
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FFSTCTE                       #
  
      TERM
