*DECK FFSTP 
USETEXT TEXTFFS 
      PROC FFSTP; 
*CALL COPYRITE
# TITLE FFSTP - FILE SERVER TIMER PROCESSOR.                           #
  
      BEGIN                            # FFSTP                         #
# 
**    FFSTP    FILE SERVER TIMER PROCESSOR. 
* 
*     A. LIM                           88/01/18 
* 
*     THIS PROCEDURE IS CALLED EACH CYCLE OF THE EXECUTIVE PROCESSOR
*     (*FFSXPES*) TO UPDATE THE CURRENT TIME AND TO CHECK FOR ANY 
*     EXPIRED TIMER ENTRIES WHICH ARE THEN PROCESSED. 
* 
*     PROC FFSTP
* 
*     ENTRY    P<TMR>    = PTR TO FILE SERVER TIMER LIST. 
*              CTM$FTSEC = FIRE TIME OF FIRST TIMER ENTRY DUE.
* 
*     EXIT     EXPIRED TIMER ENTRIES PROCESSED. 
*              CTM$RTSEC = CURRENT TIME.
*              CTM$FTSEC = FIRE TIME OF FIRST TIMER ENTRY DUE.
* 
* 
*     METHOD   RETRIEVE CURRENT TIME (SINCE DEADSTART) FROM SYSTEM. 
*              ANY EXPIRED TIMER ENTRY IS PROCESSED , DELETED AND 
*              THE TIME OF THE NEXT TIMER ENTRY DUE TO EXPIRE IS SET. 
*              PROCESSING OF THE EXPIRED TIMER ENTRY IS DETERMINED BY 
*              THE TYPE OF TIMER ENTRY AS FOLLOWS:  
* 
*              *ROLLOUT*    FILE SERVER ROLLOUT TIMER.
*                             DO NOTHING. 
* 
# 
  
# 
****  PROC FFSTP - XREF LIST
# 
      XREF
        BEGIN 
        PROC FFSPP;      # FILE SERVER PERFORMANCE PROCESSOR           #
        PROC FFSTATE;    # ADD A TIMER ENTRY                           #
        PROC FFSTCTE;    # CANCEL A TIMER ENTRY                        #
        PROC RTIME;      # GET REAL TIME CLOCK - SECONDS / MILLISECS   #
        END 
# 
****
# 
      ITEM I             I;            # LOOP INDUCTION VARIABLE       #
      ITEM TEMP          U;            # TEMPORARY RESULT OF RTIME     #
      ITEM TTYPE         S:TMRST;      # TIMER ENTRY TYPE              #
      CONTROL EJECT;
  
#     START MAIN PROCEDURE                                             #
  
      RTIME(TEMP);                     # RETRIEVE SYSTEM TIME          #
      CTM$RTIME[0] = TEMP;             # UPDATE CURRENT TIME           #
  
#     PROCESS ALL EXPIRED TIMER ENTRIES AND MAINTAIN THE FIRE TIME OF  #
#     THE NEXT TIMER ENTRY DUE.                                        #
  
      FOR I = 0                        # LOOP THRU ALL EXPIRED ENTRIES #
        WHILE CTM$FTSEC[0] LQ CTM$RTSEC[0]
      DO
        BEGIN 
        TTYPE = TMR$TYPE[0];           # PICK UP TIMER TYPE            #
        FFSTCTE (TTYPE);               # CANCEL THE TIMER ENTRY        #
  
#     IGNORE EXPIRED ROLLOUT TIMER.                                    #
  
        IF TTYPE EQ S"ROLLOUT"
        THEN
          BEGIN                        # FILE SERVER ROLLOUT TIMER     #
          END 
        END;                           # FOR I = 0 WHILE .... DO       #
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FFSTP                         #
  
      TERM
