*DECK STATUSF 
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMREVN 
USETEXT COMRNET 
USETEXT COMRNDR 
USETEXT COMRQUE 
PROC STATUSF; 
# TITLE STATUSF - PROCESS STATUS  # 
  
      BEGIN  # STATUSF #
  
# 
**    STATUSF - PROCESS STATUS. 
* 
*     PROCESS STATUS. 
* 
*     PROC STATUSF. 
* 
*     ENTRY   - EVNT$ENTRY IS BASED ARRAY CONTAINING EVENT. 
*               NAD$ENTRY IS BASED ARRAY CONTAINING LOCAL NAD ENTRY.
* 
*     EXIT    - EVENT PROCESSED.
* 
*     PROCESS - POINT TO APPLICATION TABLE. 
*               POINT TO CONNECTION.
*               POINT TO LOCAL NAD ENTRY. 
*               DEPENDING ON WHICH EVENT: 
*                 CASE (CHANGE IN INPUT AVAILABLE): 
*                   IF INPUT NOT AVAILABLE
*                   THEN: 
*                     CLEAR INPUT AVAILABLE IN CONNECTION.
*                   ELSE: 
*                     SET INPUT AVAILABLE IN CONNECTION.
*                     FOR EACH DELAY QUEUE ENTRY: 
*                       DEQUEUE ENTRY.
*                       IF WAITING FOR INPUT
*                       THEN: 
*                         QUEUE ON LOCAL NAD QUEUE. 
*                       ELSE: 
*                         QUEUE ON TEMPORARY QUEUE. 
*                     MOVE TEMPORARY QUEUE TO DELAY QUEUE.
*                     IF OUTSTANDING NETWAIT
*                     THEN: 
*                       IF NETWAIT ALLOWS IMMEDIATE RETURN
*                       THEN: 
*                         GENERATE NETWAIT UCP REPLY QUEUE ENTRY
*                         RETURN NSUP REPLY.
*                 CASE (CHANGE IN OUTPUT BELOW THRESHOLD):  
*                   IF NOT OUTPUT BELOW THRESHOLD 
*                   THEN: 
*                     CLEAR OUTPUT BELOW THRESHOLD IN CONNECTION. 
*                   ELSE: 
*                     SET OUTPUT BELOW THRESHOLD IN CONNECTION. 
*                     FOR EACH DELAY QUEUE ENTRY: 
*                       DEQUEUE ENTRY.
*                       IF WAITING FOR OUTPUT 
*                       THEN: 
*                         QUEUE ON LOCAL NAD QUEUE. 
*                       ELSE: 
*                         QUEUE ON TEMPORARY QUEUE. 
*                     MOVE TEMPORARY QUEUE TO DELAY QUEUE.
*                 CASE (CONNECTION CHANGED TO CONNECTED): 
*                   SET CONNECTION INITIALIZED. 
*                   OBTAIN FREE QUEUE ENTRY.
*                   INITIALIZE QUEUE TYPE TO STATUS EVENT.
*                   MOVE EVENT ENTRY INTO QUEUE ENTRY.
*                   QUEUE ON STATUS EVENT QUEUE.
*                 CASE (PATH ABORTED):  
*                 CASE (CONNECT REJECTED BY NETWORK): 
*                 CASE (CONNECT REJECTED BY REMOTE HOST): 
*                   SET CONNECTION BROKEN.
*                   OBTAIN FREE QUEUE ENTRY.
*                   INITIALIZE QUEUE TYPE TO STATUS EVENT.
*                   MOVE EVENT ENTRY INTO QUEUE ENTRY.
*                   QUEUE ON STATUS EVENT QUEUE.
*               RETURN. 
# 
  
# 
**** PROC STATUSF -XREF LIST BEGIN. 
# 
      XREF
        BEGIN 
        PROC DEQUEUE;                # DEQUEUE #
        PROC GENWAIT;                # GENERATE NETWAIT UCP REPLY QUE # 
        PROC QUEUE;                  # QUEUE #
        PROC RTNNSUP;                # RETURN NSUP REPLY #
        PROC GETFREE;                # OBTAIN FREE QUEUE ENTRY #
        PROC NADREQ;                 # INITIATE NAD REQUEST # 
        END 
  
# 
****  PROC STATUSF - XREF LIST END. 
# 
  
  
      ITEM TEMPQ I;                  # TEMPORARY QUEUE #
  
      SWITCH EVENT$TYPE 
             INPUT,                  # INPUT AVAILABLE CHANGE # 
             OUTPUT,                 # OUTPUT AVAILABLE CHANGE #
             CONNECT,                # CHANGE TO CONNECT #
             ABORTED,                # PATH ABORTED # 
             NETCONREJ,              # NETWORK CONNECT REJECT # 
             RHFCONREJ,              # REMOTE RHF CONNECT REJECT #
             ;
  
CONTROL EJECT;
  
      P<APL$HEADER> = EVNT$APPL;
      P<CONNECTION> = P<APL$HEADER> + APL$LENGTH +
                      (EVNT$ACN - APL$MINACN) * CON$LENGTH; 
      TEMPQ = 0;
  
# 
*     PROCESS EVENT TYPE THRU SIMULATED CASE STATEMENT. 
# 
  
      GOTO EVENT$TYPE[EVNT$TYPE-1]; 
  
INPUT:                               # INPUT AVAILABLE CHANGE # 
      IF NOT EVNT$INPUT 
      THEN
        BEGIN  # INPUT NOT AVAILABLE #
        CON$INPUT = FALSE;
        END 
  
      ELSE
        BEGIN  # INPUT AVAILABLE #
        CON$INPUT = TRUE; 
        ASLONGAS CON$DELAYQ NQ 0
        DO
          BEGIN  # PROCESS DELAY QUEUE #
          DEQUEUE(LOC(CON$DELAYQ)); 
          IF QU$EVENT EQ 0 AND CON$INIT$N 
          THEN
            BEGIN  # QUEUE ON LOCAL NAD QUEUE # 
            NADREQ(NDR$NADORD); 
            END 
  
          ELSE
            BEGIN  # QUEUE ON TEMPORARY QUEUE # 
            QUEUE(LOC(TEMPQ));
            END 
  
          END 
  
        CON$DELAYQ = TEMPQ; 
        IF APL$WAIT NE 0
        THEN
          BEGIN  # OUTSTANDING NETWAIT #
          IF NOT APL$WFLAG
            AND NOT APL$WCMA
          THEN
            BEGIN  # PERFORM IMMEDIATE RETURN # 
            GENWAIT;
            RTNNSUP;
            END 
  
          END 
  
        END 
  
      GOTO ENDCASE; 
  
OUTPUT:                              # OUTPUT BELOW THRESHOLD CHANGE #
      IF NOT EVNT$OUTPT 
      THEN
        BEGIN  # OUTPUT NOT BELOW THRESHOLD # 
        CON$OUTPUT = FALSE; 
        END 
  
      ELSE
        BEGIN  # OUTPUT BELOW THRESHOLD # 
        CON$OUTPUT = TRUE;
        ASLONGAS CON$DELAYQ NQ 0
        DO
          BEGIN  # PROCESS DELAY QUEUE #
          DEQUEUE(LOC(CON$DELAYQ)); 
          IF QU$EVENT EQ 1 AND CON$INIT$N 
          THEN
            BEGIN  # QUEUE ON LOCAL NAD QUEUE # 
            NADREQ(NDR$NADORD); 
            END 
  
          ELSE
            BEGIN  # QUEUE ON TEMPORARY QUEUE # 
            QUEUE(LOC(TEMPQ));
            END 
  
          END 
  
        CON$DELAYQ = TEMPQ; 
        END 
  
      GOTO ENDCASE; 
  
CONNECT:                             # CHANGE TO CONNECT #
      CON$INIT = TRUE;
      GETFREE;
      QU$TYPE = QT$EVENT; 
      QU$WD1 = EVNT$WD; 
      QUEUE(LOC(STATUSQ));
      GOTO ENDCASE; 
  
ABORTED:                             # PATH ABORTED # 
NETCONREJ:                           # NETWORK CONNECT REJECT # 
RHFCONREJ:                           # REMOTE RHF CONNECT REJECT #
      CON$BROKEN = TRUE;
      GETFREE;
      QU$TYPE = QT$EVENT; 
      QU$WD1 = EVNT$WD; 
      QUEUE(LOC(STATUSQ));
      GOTO ENDCASE; 
  
# 
*     END OF SIMULATED CASE STATEMENT 
# 
ENDCASE:  
      RETURN; 
      END  # STATUSF #
  
      TERM
