*DECK MSGREQ
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMRQUE 
USETEXT COMRSFC 
PROC MSGREQ;
# TITLE MSGREQ - OBTAIN MESSAGE REQUEST.  # 
  
      BEGIN  # MSGREQ # 
  
# 
**    MSGREQ  - OBTAIN MESSAGE REQUEST. 
* 
*     OBTAIN MESSAGE REQUEST. 
* 
*     PROC MSGREQ.
* 
*     ENTRY   - APL$HEADER IS BASED ARRAY CONTAINING APPLICATION TABLE. 
*               QU$ADDRESS IS BASED ARRAY CONTAINING MESSAGE REQUEST. 
* 
*     EXIT    - MESSAGE OBTAINED AND QUEUED ON SUPERVISORY QUEUE. 
* 
*     PROCESS - INITIALIZE SPECIAL FUNCTION CALL AREA TO READ HEADER
*               AND TEXT AREA.
*               MAKE SSF REQUEST. 
*               IF RETURN CODE IS SWAPPED 
*               THEN: 
*                 CALL SWAPIN TO REQUEST SWAP IN. 
*               ELSE: 
*                 DEQUEUE UCP REQUEST.
*                 IF RETURN CODE IS ZERO
*                   QUEUE ON SUPERVISORY MESSAGE QUEUE. 
*                 ELSE: 
*                   CALL SSF ERROR PROCESSOR. 
*                   FREE QUEUE ENTRY. 
*               RETURN. 
# 
  
# 
****  PROC MSGREQ - XREF LIST BEGIN.
# 
      XREF
        BEGIN 
        PROC SSFREQ;                 # MAKE SSF REQUEST # 
        PROC SWAPIN;                 # CREATE SWAP IN REQUEST # 
        PROC DEQUEUE;                # DEQUEUE #
        PROC QUEUE;                  # QUEUE #
        PROC SSFERRP;                # SSF ERROR PROCESSOR #
        PROC FREE;                   # FREE QUEUE ENTRY # 
        END 
  
# 
****  PROC MSGREQ - XREF LIST END.
# 
  
  
CONTROL EJECT;
  
      SFC$RC1 = 0;
      SFC$RC2 = 0;
      SFC$RC3 = 0;
      SFC$FP1 = 2;
      SFC$SCPA1 = LOC(SFC$FC2); 
      SFC$FC1 = SF$LIST;
      SFC$FP2 = 1;
      SFC$UCPA2 = QU$HA;
      SFC$SCPA2 = LOC(QU$BLKHDR); 
      SFC$FC2 = SF$READ;
      SFC$FP3 = 4;
      SFC$UCPA3 = QU$TA;
      SFC$SCPA3 = LOC(QU$SUPWD1); 
      SFC$FC3 = SF$READ;
      SSFREQ; 
      IF SFC$RC1 EQ SFRC$SWAP 
        OR SFC$RC2 EQ SFRC$SWAP 
        OR SFC$RC3 EQ SFRC$SWAP 
      THEN
        BEGIN  # REQUEST JOB SWAP IN #
        SWAPIN; 
        END 
  
      ELSE
        BEGIN  # JOB NOT SWAPPED #
        DEQUEUE(LOC(APL$UCPQ)); 
        IF SFC$RC1 EQ 0 
        THEN
          BEGIN  # SUPERVISORY MESSAGE INPUT #
          QUEUE(LOC(SUPERMSGQ));
          END 
  
        ELSE
          BEGIN  # JOB UNKNOWN OR LIST ERROR #
          SSFERRP(QU$UCPA); 
          FREE; 
          END 
  
        END 
  
      RETURN; 
      END  # MSGREQ # 
  
      TERM
