*DECK UCPRPLY 
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMRQUE 
PROC UCPRPLY; 
# TITLE UCPRPLY - INITIATE UCP REPLY.  #
  
      BEGIN  # UCPRPLY #
  
# 
**    UCPRPLY - INITIATE UCP REPLY. 
* 
*     INITIATE UCP REPLY. 
* 
*     PROC UCPRPLY. 
* 
*     ENTRY   - APL$HEADER IS BASED ARRAY POINTING TO APPLICATION TABLE.
*               QU$ADDRESS IS BASED ARRAY CONTAINING UCP REQUEST TO BE
*                 QUEUED.  ZERO INDICATES NOT TO QUEUE. 
* 
*     EXIT    - UCP REPLY INITIATED.
* 
*     PROCESS - IF UCP REQUEST SUPPLIED 
*               THEN: 
*                 QUEUE TO UCP QUEUE. 
*               FOR EACH UCP QUEUE ENTRY WHILE NOT SWAPPED: 
*                 POINT TO QUEUE ENTRY. 
*                 DEPENDING ON WHICH QUEUE TYPE:  
*                   CASE (SWAP IN REQUEST): 
*                     SET UCP SWAPPED.
*                   CASE (NSUP REPLY):  
*                     PERFORM NSUP REPLY. 
*                   CASE (CONNECTION COMPLETE): 
*                     PERFORM CONNECTION COMPLETE.
*                   CASE (MESSAGE REPLY): 
*                     PERFORM MESSAGE REPLY.
*                   CASE (MESSAGE REQUEST): 
*                     OBTAIN MESSAGE REQUEST. 
*               INVALIDATE QU$ADDRESS POINTER.
*               RETURN. 
# 
  
# 
****  PROC UCPRPLY - XREF LIST BEGIN. 
# 
      XREF
        BEGIN 
        PROC QUEUE;                  # QUEUE #
        PROC NSUPR;                  # PERFORM NSUP REPLY # 
        PROC UCPCOMP;                # PERFORM UCP COMPLETE # 
        PROC MSGRPLY;                # PERFORM MESSAGE REPLY #
        PROC MSGREQ;                 # OBTAIN MESSAGE REQUEST # 
        END 
  
# 
****  PROC UCPRPLY - XREF LIST END. 
# 
  
  
      ITEM SWAPPED B;                # SWAPPED UCP #
  
      SWITCH QUEUE$TYPE 
             SWAPIN,                 # UCP SWAP IN REQUEST #
             NSUPREPLY,              # NSUP REPLY # 
             COMPLETE,               # COMPLETE UCP REQUEST # 
             MSGREPLY,               # MESSAGE REPLY #
             MSGREQUEST,             # MESSAGE REQUEST #
             ;
  
CONTROL EJECT;
  
      IF P<QU$ADDRESS> NQ 0 
      THEN
        BEGIN  # QUEUE UCP REQUEST #
        QUEUE(LOC(APL$UCPQ)); 
        END 
  
      SWAPPED = FALSE;
      ASLONGAS APL$UCPQ NQ 0 AND NOT SWAPPED
      DO
        BEGIN  # PROCESS UCP REQUEST #
        P<QU$ADDRESS> = APL$UCPQ; 
  
# 
*     PROCESS UCP REQUEST THRU SIMULATED CASE STATEMENT.
# 
  
        GOTO QUEUE$TYPE[QU$TYPE-QU$FRSTUCP];
  
SWAPIN:                              # UCP SWAP IN REQUEST #
        SWAPPED = TRUE; 
        GOTO ENDCASE; 
  
NSUPREPLY:                           # NSUP REPLY # 
        NSUPR;
        GOTO ENDCASE; 
  
COMPLETE:                            # COMPLETE UCP REQUEST # 
        UCPCOMP;
        GOTO ENDCASE; 
  
MSGREPLY:                            # MESSAGE REPLY #
        MSGRPLY;
        GOTO ENDCASE; 
  
MSGREQUEST:                          # MESSAGE REQUEST #
        MSGREQ; 
        GOTO ENDCASE; 
  
# 
*     END OF SIMULATED CASE STATEMENT.
# 
ENDCASE:  
        END 
  
      P<QU$ADDRESS> = O"400000";
      RETURN; 
      END  # UCPRPLY #
  
      TERM
