*DECK AGENTON 
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMRMEM 
USETEXT COMRQUE 
PROC AGENTON; 
# TITLE AGENTON - DECREMENT NETON TIMER. #
  
      BEGIN  # AGENTON #
  
# 
**    AGENTON - DECREMENT NETON TIMER.
* 
*     DECREMENTS NETON TIMER AND RESTARTS SERVER IF TIMER EXPIRED.
* 
*     PROC AGENTON. 
* 
*     ENTRY   -  APL$HEADER IS BASED ARRAY CONTAINING APPLICATION HDR.
* 
*     EXIT    -  NETON TIMER DECREMENTED. 
*                SERVER RESTARTED IF NETON TIMER EXPIRED. 
* 
*     PROCESS -  IF SERVER APPLICATION IS STARTING AND HAS NOT NETTED ON
*                THEN:  
*                  IF IDLE DOWN IN PROGRESS 
*                    OR TIMER EXPIRED 
*                  THEN:  
*                    FOR EVERY CONNECTION 
*                    DO:  
*                      IF CONNECT REQUEST RECEIVED
*                      THEN:  
*                        FREE QUEUE ENTRY.
*                        FLUSH PATH.
*                    CLEAR APPLICATION-STARTED FLAG (PREVENTS NETON). 
*                    SEND DAYFILE MESSAGE.
*                  ELSE:  
*                    DECREMENT TIMER. 
*                RETURN.
* 
* 
****  PROC AGENTON - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC DEQUEUE;                # GET QUEUE ENTRY #
        PROC FREEACN;                # FREE CONNECTION ENTRY #
        PROC FREE;                   # RELEASE QUEUE ENTRY #
        PROC RHFMSG;                 # RHF DAYFILE MESSAGE #
        PROC STRTJOB;                # SEND JOB TO INPUT QUEUE #
        END 
  
# 
****  PROC ACENTON - XREF LIST END. 
# 
  
  
      ARRAY [0:0] S(5); 
        BEGIN 
        ITEM MSG$NOJOB  C(00,00,46) = 
             [" RHF, APPLICATION JOB XXXXXXX HAS NOT STARTED."];
        ITEM MSG$NOJOBN C(02,12,07);  # APPLICATION NAME #
        END 
  
      ITEM MSG$NOJOBL I = 46;        # MESSAGE LENGTH # 
  
      ITEM CURACN    I;              # CURRENT ACN #
CONTROL EJECT;
  
      IF APL$START AND NOT APL$NETON
      THEN
        BEGIN  # SERVER STARTED BUT NOT YET NETTED ON # 
        IF IDLEDWN
          OR APL$TIMER EQ 0 
        THEN
          BEGIN 
          P<CONNECTION> = P<APL$HEADER> + APL$LENGTH; 
          CURACN = 1; 
          ASLONGAS CURACN LE APL$NUMCON 
          DO
            BEGIN 
            ASLONGAS CON$DELAYQ NE 0 DO 
              BEGIN 
              DEQUEUE(LOC(CON$DELAYQ)); 
  
              IF QU$TYPE EQ QT$CONWAIT
              THEN
                BEGIN 
                FREE; 
                FREEACN(QT$FLUSH);
                END 
  
              ELSE
                BEGIN 
                FREE; 
                END 
              END 
  
            P<CONNECTION> = P<CONNECTION> + CON$LENGTH; 
            CURACN = CURACN + 1;
            END 
  
          APL$START = FALSE;
          APL$JOBORD = 0; 
          MSG$NOJOBN = APL$NAME;
          RHFMSG (LOC(MSG$NOJOB),MSG$NOJOBL); 
          END 
  
        ELSE
          BEGIN 
          IF APL$TIMER LE IDLESEC 
          THEN
            BEGIN 
            APL$TIMER = 0;
            END 
  
          ELSE
            BEGIN 
            APL$TIMER = APL$TIMER - IDLESEC - 1;
            IF APL$TIMER LT IDLEWAIT
            THEN
              BEGIN 
              IDLEWAIT = APL$TIMER; 
              END 
  
            END 
  
          END 
        END 
  
      RETURN; 
      END  # AGENTON #
  
      TERM
  
