*DECK CKSWPIN 
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMRQUE 
USETEXT COMRSFC 
PROC CKSWPIN; 
# TITLE CKSWPIN - CHECK FOR COMPLETED SWAPIN. # 
  
      BEGIN  # CKSWPIN #
  
# 
**    CKSWPIN - CHECK FOR COMPLETED SWAPIN REQUESTS.
* 
*     CHECKS THE FIRST ENTRY OF THE APPLICATION TABLE UCP QUEUE FOR 
*     A COMPLETED SWAPIN REQUEST. 
* 
*     PROC CKSWPIN. 
* 
*     ENTRY   -  APL$HEADER IS BASED ARRAY FOR APPLICATION TABLE
*                  HEADER TO BE CHECKED 
* 
*     EXIT    -  COMPLETED SWAPIN REQUEST PROCESSED, IF PRESENT 
* 
*     PROCESS -  IF FIRST ENTRY ON UCP QUEUE IS COMPLETED SWAPIN
*                  REQUEST
*                THEN:  
*                  DEQUEUE REQUEST
*                  FREE REQUEST 
*                  IF NOS/BE ITF AND SWAP STATUS
*                  THEN 
*                    CALL MAI TO INITIATE MUJ SWAP IN.
*                  INITIATE PROCESSING OF REMAINDER OF UCP QUEUE
*                  FOR EACH ENTRY ON THE APPLICATION SWAP QUEUE:  
*                    DEQUEUE ENTRY. 
*                    INITIATE TRANSMITTAL OF REQUEST TO NDR.. 
*                RETURN.
* 
* 
****  PROC CKSWPIN - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC CALLSYS;                # MAKE RA + 1 CALL # 
        PROC DEQUEUE;                # REMOVE ENTRY FROM QUEUE #
        PROC FREE;                   # OBTAIN FREE QUEUE ENTRY #
        PROC NADREQ;                 # INITIATE NAD REQUEST # 
        PROC UCPRPLY;                # PROCESS UCP QUEUE #
        PROC WAIT;                   # WAIT FOR COMPLETE BIT #
        END 
  
      DEF MUJID      #".M"#;         # MUJ ID FOR MFINT # 
  
  
# 
****  PROC CKSWPIN - XREF LIST END. 
# 
  
  
      CONTROL IFEQ OS$NOSBE;
      ARRAY [0:0]  S(1);
        BEGIN 
        ITEM MAICALL    U(00,00,60) = [0];
        ITEM MAINAME    C(00,00,03) = ["MAI"];
        ITEM MAIPARMAD  U(00,42,18);
        END 
  
      ARRAY [0:0]  S(1);
        BEGIN 
        ITEM MAI$PARAM  U(00,00,60) = [0];
        ITEM MAI$MUJID  C(00,36,02);
        ITEM MAI$COMPLT B(00,59,01);
        END 
  
      CONTROL ENDIF;
  
  
CONTROL EJECT;
  
      P<QU$ADDRESS> = APL$UCPQ; 
  
      IF APL$UCPQ NE 0
        AND QU$TYPE EQ QT$UCPSWAP 
        AND QU$SSCOMP 
      THEN
        BEGIN  # SWAPIN REQUEST COMPLETED # 
        DEQUEUE(LOC(APL$UCPQ)); 
      CONTROL IFEQ OS$NOSBE;
        IF APL$NAME EQ APL$ITF
          AND QU$SSRC EQ SFRC$SWAP
        THEN
          BEGIN 
          MAIPARMAD = LOC(MAI$PARAM); 
          MAI$PARAM = 0;
          MAI$MUJID = MUJID;
          CALLSYS(MAICALL); 
          WAIT(LOC(MAI$PARAM)); 
          END 
  
      CONTROL ENDIF;
  
        FREE; 
        P<QU$ADDRESS> = 0;
        UCPRPLY;
  
        ASLONGAS APL$SWAPQ NE 0 
        DO
          BEGIN  # RE-ATTEMPT NDR REQUESTS #
          DEQUEUE(LOC(APL$SWAPQ));
          P<CONNECTION> = P<APL$HEADER> + APL$LENGTH +
                          (QU$UCPACN - APL$MINACN) * CON$LENGTH;
          NADREQ(CON$NADORD); 
          END 
  
        END 
  
      RETURN; 
      END  # CKSWPIN #
  
      TERM
  
