*DECK IPUWAIT 
USETEXT TEXTIPL 
      PROC IPUWAIT (SECONDS); 
*CALL COPYRITE          CDCNET - COPYRIGHT CONTROL DATA. 1992.
# TITLE IPUWAIT - APPLICATION WAIT TIMER                               #
  
      BEGIN                            # IPUWAIT                       #
# 
****  IPUWAIT  APPLICATION WAIT TIMER.
* 
*     THIS PROCEDURE CALLS CAUSES THE APPLICATION TO SUSPEND FOR THE
*     SPECIIED TIME.
* 
*     PROC IPUWAIT
* 
*     ENTRY    SECONDS    = INTEGER VALUE OF SECONDS TO WAIT
* 
*     EXIT     TIME ELAPSED.
* 
*     METHOD   OBTAIN THE CURRENT TIME.  CALL *NETWAIT* FOR THE 
*              SPECIFIED TIME.  CHECK NAM FOR INPUT.  THE *NETWAIT* 
*              TIMER WILL EXPIRE EARLY IF NAM HAS DATA FOR THE
*              APPLICATION.  IF THIS WAS THE CASE, CONTINUE CALLING 
*              *IPINITH* TO PROCESS ANY OTHER POSSIBLE INPUT UNTIL THE
*              TIME HAS EXPIRED.
# 
  
# 
****  PROC IPUWAIT - XREF LIST
# 
      XREF
        BEGIN 
        PROC IPINITH;    # NAM INPUT TRAFFIC HANDLER                   #
        PROC NETWAIT;    # SUSPEND NAM APPLICATION                     #
        PROC RTIME;      # REAL TIME CLOCK                             #
        END 
# 
**
# 
  
      ITEM SECONDS             I;      # SECONDS TO WAIT               #
  
      ITEM INDEX               I;      # LOOP COUNTER                  #
      ITEM LOOP                I;      # LOOP COUNTER                  #
      ITEM WAITLOOP            I;      # WAIT LOOP COUNTER             #
      CONTROL EJECT;
# 
****  START MAIN PROCEDURE
# 
  
      RTIME (BWT$TIME);                # CURRENT TIME                  #
      BWT$EXPIRE [0] = BWT$SECONDS [0] + SECONDS; 
  
      NETWAIT (SECONDS, 0);            # CALL NETWAIT FOR INITIAL WAIT #
  
      BLOCK = TRUE; 
      IPINITH;                         # NAM INPUT TRAFFIC HANDLER     #
  
      FOR INDEX = 0 
      DO
        BEGIN                          # LOOP UNTIL TIMER EXPIRES      #
        RTIME (BWT$TIME); 
  
        IF (BWT$SECONDS [0] GQ BWT$EXPIRE [0])
        THEN
          BEGIN                        # TIMER EXPIRED                 #
          RETURN; 
          END 
  
        WAITLOOP = (BWT$EXPIRE [0] - BWT$SECONDS [0]) / 2 + 1;
        FOR LOOP = 1 STEP 1 UNTIL WAITLOOP
        DO
          BEGIN 
          IPINITH;                     # NAM INPUT TRAFFIC HANDLER     #
          END 
        END                            # LOOP UNTIL TIMER EXPIRES      #
  
      END                              # IPUWAIT                       #
  
      TERM
