*DECK UCPREQ
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMRLRA 
USETEXT COMRQUE 
USETEXT COMRSSC 
PROC UCPREQ;
# TITLE UCPREQ - UCP REQUEST. # 
  
      BEGIN  # UCPREQ # 
  
# 
**    UCPREQ  - UCP REQUEST.
* 
*     ACCEPT AND PROCESS THE UCP REQUEST.  SET UP TO ACCEPT THE 
*     NEXT UCP REQUEST. 
* 
*     PROC UCPREQ.
* 
*     ENTRY   - UCP REQUEST IN REQ$BLOCK ARRAY
* 
*     EXIT    - READY FOR NEXT UCP REQUEST
* 
*     PROCESS - CALL UCPQUE TO CREATE A QUEUE ENTRY WHICH CONTAINS
*                 THE UCP REQUEST.
*               CLEAR THE INTERLOCK BIT TO ALLOW ANOTHER REQUEST. 
*               IF THE WORD COUNT IS NOT GREATER THAN ONE 
*                 OR THE APPLICATION TABLE ADDRESS IS INVALID 
*                 OR THE REQUEST FUNCTION IS ILLEGAL
*               THEN: 
*                 QUEUE ON THE UNKNOWN REQUEST QUEUE. 
*               ELSE: 
*                 DEPENDING ON WHICH CASE:  
*                   CASE ( NETON ): 
*                     QUEUE ON NETON QUEUE. 
*                   CASE ( NETOFF ):  
*                     QUEUE ON NETOFF QUEUE.
*                   CASE ( NETWAIT ): 
*                     QUEUE ON NETWAIT QUEUE. 
*                   CASE ( NETGET ):  
*                     CALL NETGET.
*                   CASE ( NETGETL ): 
*                     CALL NETGETL. 
*                   CASE ( NETPUT ):  
*                     CALL NETPUT.
*                   CASE ( NETXFR ):  
*                     CALL NETXFR.
*               RETURN. 
# 
  
# 
****  PROC UCPREQ - XREF LIST BEGIN.
# 
      XREF
        BEGIN 
        PROC UCPQUE;                 # CREATE UCP REQUEST QUEUE ENTRY # 
        PROC QUEUE;                  # QUEUE #
        PROC NETGET;                 # NETGET # 
        PROC NETGETL;                # NETGETL #
        PROC NETPUT;                 # NETPUT # 
        PROC NETXFR;                 # NETXFR # 
        ITEM LAPLADR  I;             # LAST APPLICATION TABLE ADDRESS # 
        END 
  
# 
****  PROC UCPREQ - XREF LIST END.
# 
  
  
        SWITCH FUNCTION 
               NETOFFNC,             # LABEL FOR NETOFF FUNCTION #
               NETWAITFNC,           # LABEL FOR NETWAIT FUNCTION # 
               NETGETFNC,            # LABEL FOR NETGET FUNCTION #
               NETGETLFNC,           # LABEL FOR NETGETL FUNCTION # 
               NETPUTFNC,            # LABEL FOR NETPUT FUNCTION #
               NETXFRFNC,            # LABEL FOR NETXFR FUNCTION #
               ;
  
CONTROL EJECT;
  
      UCPQUE;                        # CREATE UCP REQUEST QUEUE ENTRY # 
      RA$SSC$LK = FALSE;             # ALLOW ANOTHER UCP REQUEST #
      P<APL$HEADER> = QU$APLADR;
      IF   QU$WC LE 0 
        OR QU$WC GT 2 
        OR QU$STAT NE 0 
        OR QU$APLADR EQ 0 
        OR QU$APLADR GR LAPLADR 
        OR QU$FUNCT LE UCP$NETON
        OR QU$FUNCT GT UCP$LAST 
        OR NOT APL$NETON
        OR APL$NETOFF 
        OR APL$JOBID NQ QU$JOBID
        OR APL$EOJCON 
      THEN
        BEGIN  # UNKNOWN UCP REQUEST #
        QUEUE(LOC(UNKNOWNREQ)); 
        END 
  
      ELSE
        BEGIN 
  
# 
*     PROCESS REQUESTED FUNCTION THRU SIMULATED CASE STATEMENT. 
# 
  
        GOTO FUNCTION[QU$FUNCT-2];
  
NETOFFNC:                            # NETOFF FUNCTION #
        QUEUE(LOC(NETOFFQ));
        GOTO ENDCASE; 
  
NETWAITFNC:                          # NETWAIT FUNCTION # 
        QUEUE(LOC(NETWAITQ)); 
        GOTO ENDCASE; 
  
NETGETFNC:                           # NETGET FUNCTION #
        NETGET; 
        GOTO ENDCASE; 
  
NETGETLFNC:                          # NETGETL FUNCTION # 
        NETGETL;
        GOTO ENDCASE; 
  
NETPUTFNC:                           # NETPUT FUNCTION #
        NETPUT; 
        GOTO ENDCASE; 
  
NETXFRFNC:                           # NETXFR FUNCTION #
        NETXFR; 
        GOTO ENDCASE; 
  
# 
*     END OF SIMULATED CASE STATEMENT.
# 
ENDCASE:  
        END 
  
      RETURN; 
      END  # UCPREQ # 
      TERM
