*DECK     WMB 
          IDENT  WMB
          TITLE  WMB - WAIT FOR NETWORK MESSAGE.
          SST 
          SYSCOM B1 
  
  
          ENTRY  WMB,WMBS 
  
          COMMENT  WAIT FOR NETWORK MESSAGE.
          COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1994. 
          SPACE  4,10 
**        WMB - WAIT FOR NETWORK MESSAGE. 
* 
*         J. G. CLARK        80/01/31.
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL CMACROS 
*CALL COMCMAC 
*CALL COMCAPR 
*CALL COMCPTF 
 WMB      SPACE  4,10 
**               WMB CALLS NETWAIT WHILE WAITING FOR INPUT OR 
*         SUPERVISORY MESSAGES.  THE TYPE OF MESSAGE AVAILABLE
*         IS RETURNED TO THE CALLER.  CONTROL IS NOT RETURNED 
*         UNTIL SOME MESSAGE IS AVAILABLE.
* 
*         WMBS IS AN ALTERNATE ENTRY POINT WHICH DOES NOT RETURN UNTIL
*         A SUPERVISORY MESSAGE IS RECEIVED.  ENTRY AND EXIT PARAMETERS 
*         ARE THE SAME AS FOR WMB.  (WMB WILL MAKE AN EXTRA FIXED-DELAY 
*         CALL TO NETWAIT WHILE WAITING FOR A SUPERVISORY MESSAGE IF
*         AN INPUT DATA BLOCK IS AVAILABLE.  THIS ALLOWS THE PROGRAM
*         TO RELINQUISH THE CPU.) 
* 
*         ENTRY  (A1) IS THE ADDRESS OF THE PARAMETER LIST. 
* 
*         PARAMETER LIST FORMAT 
*         NSUP   - SUPERVISORY/INPUT QUEUED, AS DEFINED BY NETON. 
*         STAT   - COMMUNICATIONS STATUS INDICATOR. 
*         ACKT   - NETWAIT TIME INTERVAL. 
*         FLAG   - NETWAIT DEFINED WAIT FLAG. 
* 
*         EXIT   (X6) IS NEGATIVE IF SUPERVISORY MESSAGE IS AVAILABLE.
*                (X6) IS POSITIVE NON-ZERO IF INPUT IS AVAILABLE. 
*                (X1) IS AN ERROR MESSAGE ADDRESS IF NON-ZERO.
* 
*         USES   A - 1,2,7. 
*                B - NONE.
*                X - 1,2,6,7. 
* 
*         CALLS  NETWAIT. 
  
  
 WMB      SUBRL  (#QBIT,#STAT,NWAIT)
          SX6    10D
          SA6    WMBA        INITIALIZE SHORT WAIT COUNT
          SX6    10D
          SA6    WMBF        INITIALIZE MEDIUM WAIT COUNTER 
  
 WMB1     RJ     =XRCT       RECOMPUTE TIME LEFT BEFORE TIMEOUT 
          SA2    NWAIT
          SX6    B0+
          BX7    X1          SAVE REMAINING TIME
          IX2    X1-X2
          SX1    ATOM        *APPLICATION CONNECTION TIMEOUT.*
          MI     X7,WMB4     IF TIMED OUT 
          SA1    WMBA 
          SX6    X1-1        DECREMENT SHORT RETRY COUNT
          MI     X6,WMB2     IF SHORT COUNT EXPIRED 
          SA6    A1          UPDATE COUNT 
          MX2    -1 
          SX7    2           SET TWO-SECOND WAIT FOR NO ROLLOUT 
  
 WMB2     SA1    "NWAIT"
          PL     X2,WMB3     IF USING LONG WAIT 
          SA7    X1+         SET ROLLOUT TIME 
  
 WMB3     RJ     =XFTUWAIT   WAIT FOR NETWORK ACTIVITY
          SB1    1
          SA3    NWAIT       RESTORE PREVIOUS NETWAIT TIME
          SA2    "NWAIT"
          BX6    X3 
          SA6    X2 
          SA2    A0 
          SA2    X2          CHECK NSUP FOR DATA AVAILABLE
          SA3    WMBM        FETCH I/S BIT MASK 
          LX2    59-55       POSITION I/S BITS
          BX6    X3*X2       MASK I/S BITS
          MX1    0
          MI     X6,WMB7     IF SUPERVISORY MESSAGE AVAILABLE 
          NZ     X6,WMB5     IF INPUT AVAILABLE 
          SA2    WMBA 
          NZ     X2,WMB1     IF NOT END OF SHORT RETRIES
          SA3    WMBC 
          NZ     X3,WMB3.5   IF MESSAGE SENT
          SX6    B1 
          SA6    A3          SET MESSAGE SEND FLAG
          MESSAGE WMBB,1,RCL
          SA2    INTORG 
          ZR     X2,WMB3.5   IF NOT INTERACTIVE ORIGIN
          WRITEC X2,WMBB
          WRITER X2,RCL 
 WMB3.5   BSS    0
          SA2    A0          FETCH NSUP WORD
          SA2    X2 
          LX2    59-56       POSITION INPUT FLAG
          PL     X2,WMB1     IF NO INPUT AVAILABLE
          SA1    WMBF 
          SX6    X1-1 
          MI     X6,WMB3.6   IF MEDIUM WAITS EXPIRED
          SA6    A1          DECREMENT MEDIUM WAIT COUNT
          SA1    WMBG 
          RJ     =XFTUWAIT
          EQ     WMB3.7 
  
 WMB3.6   SA1    WMBE 
          RJ     =XFTUWAIT   WAIT FOR NETWORK ACTIVITY (FIXED DELAY)
  
 WMB3.7   SB1    1
          EQ     WMB1        NO ACTIVITY YET
  
 WMB4     SA2    "STAT" 
          MX7    60          (X7) = -0
          SA7    X2          SET CONNECTION BROKEN STATUS 
          EQ     WMB7 
  
 WMB5     SA3    WMBC 
          ZR     X3,WMB8     IF MESSAGE NEVER SENT
          SA6    A3          SAVE X6
          MESSAGE WMBD,1,RCL
          SA2    INTORG 
          ZR     X2,WMB6     IF NOT INTERACTIVE ORIGIN
          WRITEC X2,WMBD
          WRITER X2,RCL 
  
 WMB6     SA1    WMBC 
          BX6    X1          RESTORE X6 
          BX1    X1-X1       CLEAR X1 
  
 WMB7     BX7    X7-X7
          SA7    WMBC        CLEAR MESSAGE SENT FLAG
  
 WMB8     EQ     WMBX        RETURN 
  
 WMBA     CON    0           SHORT WAIT LOOP COUNT
  
 WMBB     DIS    ,* WAITING FOR REMOTE MF TO RESPOND.*
  
 WMBC     CON    0           MESSAGE-SENT FLAG       / SAVE X6
  
 WMBD     DIS    ,* REMOTE MAINFRAME HAS RESPONDED.*
  
 WMBE     VFD    60/=10D,60/=1  NETWAIT FIXED DELAY (10 SEC)
  
 WMBF     CON    0           MEDIUM WAIT LOOP COUNTER 
  
 WMBG     VFD    60/=2,60/=1   NETWAIT FIXED DELAY (2 SEC)
  
 WMBM     CON    1S59+1      I/S BIT MASK 
  
          QUAL   *
 WMBS     SPACE  4,10 
**        WMBS - ALTERNATE ENTRY POINT
  
 WMBS     SUBR
          MX7    1
          SA7    /WMB/WMBM   SET I/S BIT MASK (S-BIT ONLY)
          RJ     WMB         WAIT FOR MESSAGE 
          MX7    2
          LX7    1
          SA7    /WMB/WMBM   RESTORE I/S BIT MASK 
          EQ     WMBSX       RETURN 
  
          END 
