*DECK FCSNWNT 
USETEXT TEXTFCS;
      PROC FCSNWNT; 
*CALL COPYRITE
# TITLE FCSNWNT - WAIT FOR NETWORK TRAFFIC.                            #
  
      BEGIN                            # FCSNWNT                       #
  
# 
**    FCSNWNT - WAIT FOR NETWORK TRAFFIC. 
* 
*     C. J. RAMSAY                     87/11/03 
* 
*     THIS PROCEDURE WAITS FOR THE NEXT BLOCK FROM THE NETWORK. 
* 
*     PROC FCSNWNT
* 
*     ENTRY   NETTIMER$  = NETWAIT TIMER TO PREVENT ROLLOUT.
*             NETLOOP$   = LOOP COUNTER USED IN PERIODIC NETWAIT. 
*             NETDELAY$  = NETWAIT TIMER TO REQUEST ROLLOUT.
* 
*     EXIT    INPBUF     = BUFFER CONTAINING INPUT BLOCK. 
*             P<ABH>     = PTR TO INPUT APPLICATION BLOCK HEADER (IABH).
*             P<APDT>    = PTR TO INPUT DATA BLOCK (INPBUF).
*             P<APSM>    = PTR TO INPUT SUPERVISORY MESSAGE (INPBUF). 
* 
*     METHOD  CHECK FOR INPUT EVERY *NETTIMER$* SECONDS OR WHEN INPUT 
*             IS QUEUED.
*             IF NO INPUT AFTER *NETLOOP$* CHECKS THEN
*               ROLLOUT FOR *NETDELAY$* SECONDS OR UNTIL INPUT IS 
*               QUEUED. 
* 
# 
  
# 
****  PROC FCSNWNT - XREF LIST
# 
      XREF
        BEGIN 
        PROC NETGETL;                  # GET NEXT BLOCK ON LIST        #
        PROC NETWAIT;                  # SUSPEND NETWORK APPLICATION   #
        END 
# 
****
# 
      ITEM I             I;            # LOOP INDUCTION VARIABLE       #
      ITEM J             I;            # LOOP INDUCTION VARIABLE       #
      CONTROL EJECT;
# 
*     START MAIN PROCEDURE
# 
      FOR I = 0 
        WHILE I EQ 0 DO 
        BEGIN                          # ENDLESS LOOP                  #
        FOR J = 0 STEP 1
          WHILE J LS NETLOOP$ DO
          BEGIN                        # LOOP IN PERIODIC RECALL       #
          NETWAIT (NETTIMER$, 0);      # FLUSH AIP + WAIT FOR INPUT    #
# 
*     IF DATA BLOCK OR SUPERVISORY MESSAGE QUEUED THEN INPUT THE BLOCK. 
# 
          IF (NSUP$SMIN[0]) OR
             (NSUP$DTIN[0]) 
          THEN
            BEGIN                      # BLOCK AVAILABLE FROM NETWORK  #
            NETGETL (0, IABH, INPBUF, 
                     INPSIZ$);         # INPUT THE BLOCK               #
# 
*     RETURN TO CALLER IF VALID BLOCK TRANSFERRED.
# 
            P<ABH> = LOC (IABH);       # BASE BLOCK HEADER POINTER     #
            IF (ABHWORD[0] NQ 0) AND
               (ABHIBU[0] EQ 0) 
            THEN
              BEGIN                    # FAIR DINKUM BLOCK RECEIVED    #
              P<APDT> = LOC(INPBUF);   # BASE DATA BLOCK POINTER       #
              P<APSM> = LOC(INPBUF);   # BASE SM POINTER               #
              RETURN;                  # RETURN TO CALLER              #
              END 
            END 
          END 
# 
*     ROLL OUT APPLICATION UNTIL DATA MESSAGE OR SUPERVISORY MESSAGE
*     QUEUED. 
# 
        NETWAIT (NETDELAY$, 0);        # WAIT LONG TIME OR FOR INPUT   #
        END 
  
      END                              # FCSNWNT                       #
  
      TERM
