*DECK RHFWAIT 
USETEXT COMCBEG 
USETEXT COMADEF 
USETEXT COMACBF 
PROC RHFWAIT(TIME,FLAG);
# TITLE RHFWAIT - SUSPEND APPLICATION TEMPORARILY. #
  
      BEGIN  # RHFWAIT #
  
# 
**    RHFWAIT - SUSPEND APPLICATION TEMPORARILY.
* 
*     RHFWAIT GENERATES A NETWAIT CALL TO THE RHF SUBSYSTEM IN ORDER TO 
*     SUSPEND THE CALLING APPLICATION PROGRAM.
* 
*     PROC RHFWAIT(TIME,FLAG) 
* 
*     ENTRY   -  TIME - NUMBER OF SECONDS TO SUSPEND THE APPLICATION
*                       PROGRAM.
*                FLAG = 0, RETURN FROM NETWAIT CALL AS SOON AS INPUT
*                       IS AVAILABLE FROM ANY CONNECTION. 
*                     = 1, RETURN FROM NETWAIT CALL ONLY WHEN THE TIME
*                       PERIOD IS UP. 
* 
*     EXIT    -  NSUP IS UPDATED. 
* 
*     PROCESS -  SET CURTIME .EQ. 0.
*                SET DONE TO FALSE. 
*                WHILE DONE IS FALSE: 
*                  IF LAST RHF CALL COMPLETE
*                  THEN:  
*                    IF (FLAG IS OFF AND (ASYNCHRONOUS SUPERVISORY
*                        MESSAGES ARE AVAILABLE) OR (FILE TRANSFER
*                        HAS COMPLETED) ) 
*                      OR (CURTIME .GE. TIME) 
*                    THEN:  
*                      SET DONE TO TRUE.
*                    ELSE:  
*                      IF NUMFILEXFR .NE. 0 
*                      THEN:  
*                        INCREMENT CURTIME BY ONE SECOND
*                        MAKE RHF NETWAIT WITHOUT RECALL
*                      ELSE:  
*                        MAKE RHF NETWAIT WITH RECALL 
*                        SET DONE TO TRUE.
*                  ELSE:  
*                    DELAY WITH SYSTEM RECALL 
*                    CALL RHFXFRC TO CONTINUE FILE TRANSFERS. 
* 
# 
  
      ITEM TIME  I;                  # TIME (SECS.) TO SUSPEND APPLIC. #
      ITEM FLAG  I;                  # RETURN WHEN TIME ELAPSED FLAG #
  
# 
****  PROC RHFWAIT - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC RHFXFRC;                #  CONTINUE FILE TRANSFERS # 
        PROC CALLSYS;                # MAKES RA+1 REQUESTS #
        END 
  
# 
****  PROC RHFWAIT - XREF LIST END. 
# 
  
      CONTROL WEAK RHFXFRC;          # RHFXFRC IS LOADED WHEN RHFXFR
                                       IS LOADED #
  
      ITEM CURTIME    I;             # CURRENT ACCUMULATED TIME # 
      ITEM DONE       B;             # LOOP CONTROL FLAG #
      ITEM PREVNUMXFR I;             # PREVIOUS TRANSFER COUNT #
      ITEM XFRCMPL    B;             # TRANSFER COMPLETED FLAG #
                                               CONTROL EJECT; 
      BKF$FNCNUM[0] = NETWAITFNC; 
      BKF$WCM[0] = 0; 
      SSCPARAMAD[0] = LOC (BKFORRQRLY); 
      CURTIME       = 0;
      DONE          = FALSE;
      XFRCMPL       = FALSE;
      BKF$RTNFLG = FLAG NE 0; 
      RCLPARAMAD[0] = LOC (BKFORRQRLY); 
      DBGWAIT = DBGWAIT + 1;  # INCREMENT NUMBER OF NETWAIT CALLS # 
  
      ASLONGAS NOT DONE  DO 
        BEGIN 
        IF BKF$DONE[0]
        THEN
          BEGIN 
          IF ( (NSUP$SBIT[0] OR XFRCMPL) AND (FLAG EQ 0) )
            OR (CURTIME GE TIME)
          THEN
            BEGIN 
            DONE = TRUE;
            END 
  
          ELSE
            BEGIN 
            IF NUMFILEXFR GT 0
            THEN
              BEGIN 
              CURTIME = CURTIME + 1;
              BKF$DONE[0] = FALSE;
              BKF$STIME[0] = 1; 
              SSCRECALL[0] = FALSE; 
              CALLSYS (SSCCALL);  # CALL RHF WITHOUT RECALL # 
              SSCRECALL[0] = TRUE;
              DBGSSC = DBGSSC + 1;
              END 
  
            ELSE
              BEGIN 
              BKF$STIME[0] = TIME - CURTIME;
              IF BKF$STIME[0] GT 0
              THEN
                BEGIN 
                BKF$DONE[0] = FALSE;
                CALLSYS (SSCCALL);  # CALL RHF WITH RECALL #
                DBGSSC = DBGSSC + 1;
                DONE = TRUE;
                END 
  
              END 
  
            END 
  
          END 
  
        ELSE  # LAST RHF CALL NOT COMPLETE #
          BEGIN 
          RCLRECALL[0] = FALSE; 
          RCLPERIOD[0] = XFRDELAY;
          CALLSYS (RCLCALL);  # ENTER PERIODIC RECALL # 
          PREVNUMXFR = NUMFILEXFR;  # CURRENT ACTIVE TRANSFER COUNT # 
          RHFXFRC;  # CONTINUE FILE TRANSFERS # 
          XFRCMPL = XFRCMPL OR (NUMFILEXFR LT PREVNUMXFR);
          END 
  
        END 
  
      END    # RHFWAIT #
  
      TERM
