*DECK AGEWAIT 
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMRMEM 
USETEXT COMRQUE 
USETEXT COMRNET 
PROC AGEWAIT(CMSWAPQ);
# TITLE AGEWAIT - DECREMENT NETWAIT TIMER. #
  
      BEGIN  # AGEWAIT #
  
# 
**    AGEWAIT - DECREMENT NETWAIT TIMER.
* 
*     IF A NETWAIT IS OUTSTANDING, THE NETWAIT TIMER IS DECREMENTED.
*     IF THE TIMER HAS MATURED, THE NETWAIT IS SET COMPLETE.
* 
*     PROC AGEWAIT. 
* 
*     ENTRY   -  APL$HEADER IS BASED ARRAY CONTAINING APPLICATION HDR.
* 
*     EXIT    -  NETWAIT TIMER DECREMENTED. 
*                IF NETWAIT MATURED, NETWAIT IS SET COMPLETE. 
* 
*     PROCESS -  IF THERE IS AN OUTSTANDING NETWAIT 
*                THEN:  
*                  DECREMENT NETWAIT TMER 
*                  IF TIMER EXPIRED 
*                  THEN:  
*                    INITIATE NETWAIT COMPLETION AND NSUP UPDATE. 
*                  ELSE 
*                    IF WAITING FOR CONVERT MODE RESOURCES
*                      AND LOCAL NAD HAS A CONVERT MODE PATH AVAILABLE
*                      AND (TIME IS LESS THAN CURRENT SWAPIN
*                              CANDIDATES TIME
*                           OR NO CURRENT CANDIDATE)
*                    THEN 
*                      MAKE THIS APPL THE SWAPIN CANDIDATE. 
*                RETURN 
* 
* 
# 
  
      ARRAY CMSWAPQ [0:19] S(1); # MAX OF 20 LOCAL NADS # 
        BEGIN 
        ITEM CS$WD1     I(00,00,60);
        ITEM CS$ATA     I(00,00,18); # APPLICATION TABLE ADDRESS #
        ITEM CS$TIME    U(00,24,12); # TIME LEFT IN NETWAIT # 
        END 
  
# 
****  PROC AGEWAIT - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC GENWAIT;                # GENERATE NETWAIT UCP REPLY QUE # 
        PROC RTNNSUP;                # COMPLETE UCP REQUEST,UPDATE NSUP#
        ITEM NADTBL I;               # FWA OF LOCAL NAD TABLE # 
        END 
  
# 
****  PROC AGEWAIT - XREF LIST END. 
# 
  
      ITEM I      I;                 # INDEX #
  
CONTROL EJECT;
  
      IF APL$WAIT NE 0
        AND APL$NETON 
      THEN
        BEGIN  # OUTSTANDING NETWAIT #
        IF APL$TIMER LE IDLESEC 
        THEN
          BEGIN 
          APL$TIMER = 0;
          END 
  
        ELSE
          BEGIN 
          APL$TIMER = APL$TIMER - IDLESEC - 1;
          END 
  
        IF APL$TIMER EQ 0 
        THEN
          BEGIN  # NETWAIT MATURED #
          GENWAIT;
          RTNNSUP;
          END 
  
        ELSE
          BEGIN 
          IF APL$TIMER LT IDLEWAIT
          THEN
            BEGIN 
            IDLEWAIT = APL$TIMER; 
            END 
  
          IF APL$WCMA 
          THEN
            BEGIN 
            P<CONNECTION> = P<APL$HEADER> + APL$LENGTH; 
            SLOWFOR I = 1 STEP 1 UNTIL APL$NUMCON 
            DO
              BEGIN 
              IF CON$WCMA 
              THEN
                BEGIN 
                P<NAD$ENTRY> = NADTBL + (CON$NADORD * NAD$LENGTH);
                IF NAD$CMPA NE 0
                  AND (CS$ATA[CON$NADORD] EQ 0
                       OR APL$TIMER LT CS$TIME[CON$NADORD]) 
                THEN
                  BEGIN 
                  CS$ATA[CON$NADORD] = P<APL$HEADER>; 
                  CS$TIME[CON$NADORD] = APL$TIMER;
                  END 
  
                EXIT CONSRCH; 
                END 
  
              P<CONNECTION> = P<CONNECTION> + CON$LENGTH; 
              END  CONSRCH: 
  
  
            END 
  
          END 
  
        END 
  
      RETURN; 
      END  # AGEWAIT #
  
      TERM
  
