*DECK,PLRSTRT 
USETEXT COMCBEG 
USETEXT COMQDEF 
USETEXT COMQKDS 
USETEXT COMQPID 
USETEXT COMQSCH 
      FUNC PLRSTRT U; 
        BEGIN    # PLRSTRT #
# 
**    PLRSTRT    MONITOR DISABLED PID/LIDS. 
* 
*     PLRSTRT IS CALLED FROM CKTASKI TO RESTART DISABLED PIDS WHOSE 
*     TIMERS HAVE EXPIRED.  SFILI ALSO CAUSES PLRSTRT TO BE SCHEDULED 
*     WHEN IT DISABLES A PID. 
* 
*     FUNC PLRSTRT U
* 
*     ENTRY      PIDLASTTIM = TIME OF LAST UPDATE, OR 0.
* 
*     EXIT       PLRSTRT = RECALL TIMER.
*                PIDLASTTIM = CURRENT TIME. 
* 
*     PROCESS    SET RECALL-TIME TO LARGE VALUE.
*                FOR ALL PIDS IN PID/LID TABLE: 
*                  IF PID-ERROR-DISABLED: 
*                    IF PID-DISABLE-TIMER IS ZERO:  
*                      SET INITIAL TIMER VALUE
*                    ELSE:  
*                      IF ADJUSTED TIMER EXPIRED: 
*                        CLEAR PID-ERROR-DISABLED.
*                    IF TIMER LESS THAN RECALL-TIME:  
*                      SET RECALL-TIME TO TIMER.
* 
# 
  
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC NAME;                 # DEBUG CODE # 
        FUNC TIMADT    U;          # ADJUST TIMER # 
        END 
  
# 
****  XREF END
# 
  
      ITEM NUMPIDS    U;           # PID COUNT #
      ITEM RECALLTIME U;           # NEXT RECALL TIME # 
  
        $BEGIN
        NAME("PLRSTRT");           # DEBUG CODE # 
        $END
  
      KS$UPDATE[KDIS"PID"] = TRUE;
      IF PIDLASTTIM EQ 0           # IF FIRST TIME CALLED # 
      THEN
        BEGIN 
        PIDLASTTIM = TIMT;         # INITIALIZE BASE REAL-TIME #
        END 
  
      RECALLTIME = 60*60;          # MAXIMUM OF ONE HOUR #
      P<PLTHDR> = PIDLPID;         # POINT TO LAST PID #
      NUMPIDS = PIDNPID;           # NUMBER OF PID ENTRIES #
      ASLONGAS NUMPIDS GT 0 
      DO
        BEGIN 
        IF PLTDISERR               # IF PID ERROR-DISABLED #
        THEN
          BEGIN 
          IF PLTDISTIME EQ 0       # IF TIMER NOT INITIALIZED # 
          THEN
            BEGIN 
            PLTDISTIME = SCHDISABLE;
            END 
  
          ELSE
            BEGIN 
            PLTDISTIME = TIMADT(PLTDISTIME, PIDLASTTIM);
            IF PLTDISTIME EQ 0     # IF TIMER EXPIRED # 
            THEN
              BEGIN 
              PLTDISERR = FALSE;   # RE-ENABLE PID #
              END 
  
            END 
  
          IF (PLTDISTIME NE 0)
            AND (PLTDISTIME LT RECALLTIME)
          THEN
            BEGIN 
            RECALLTIME = PLTDISTIME;
            END 
  
          END 
  
        P<PLTHDR> = PLTNXTPID;     # POINT TO NEXT PID #
        NUMPIDS = NUMPIDS - 1;     # DECREMENT PID COUNT #
        END 
  
      PIDLASTTIM = TIMT;           # RESET BASE TIME #
      PLRSTRT = RECALLTIME;        # RETURN NEXT RECALL TIME #
  
      END  # PLRSTRT #
    TERM
