*DECK CAPLDRM 
          IDENT  CAPL$RM     LOCK IN OPEN/CLOSE CAPSULE 
          ENTRY  CAPL$RM
          SST 
  
*#
* *   CAPL$RM -- LOCK IN OPEN/CLOSE CAPSULE      PAGE  1
* *   A F BROWN / R L MCALLESTER                 DATE  02/11/80 
* 
* DC  PURPOSE 
* 
*     LOCK THE AAM OPEN/CLOSE CAPSULE INTO MEMORY.  THIS INSURES THAT 
*     USER JOBS CAN BE TERMINATED EVEN THOUGH MEMORY IS FULL. 
* 
* DC  ENTRY CONDITIONS
* 
*     NONE. 
* 
* DC  EXIT CONDITIONS 
* 
*     THE AAM CONTROLLER CAPSULE AND THE OPEN/CLOSE CAPSULE ARE 
*     PERMANENTLY LOADED. 
* 
* DC  CALLING ROUTINES
* 
*     DB$INT                 CDCS INITIALIZATION
* 
* DC  CALLED ROUTINES 
* 
*     RM$LDC                 LOAD AN AAM CAPSULE
*     RM$UTC                 UNLOAD AN AAM CAPSULE
* 
*     SYSTEM MACROS - OPENM, CLOSEM 
* 
* DC  DESCRIPTION 
* 
*     A DUMMY FILE IS OPENED TO CAUSE THE CAPSULES AAM$CTL AND OPNM$AA
*     TO BE LOADED. 
*     THE USER COUNT IN THE AAM$CTL CAPSTAT IS INCREMENTED BY ONE TO
*     LOCK THE CAPSULE IN.
*     THE DUMMY FILE IS CLOSED. 
*     THE OPEN/CLOSE CAPSULE "OPNM$AA" IS TEMPORARILY UNLOADED. 
*     THE CONTROLLER CAPSULE "AAM$CTL" IS LOCATED IN MEMORY BY SEARCHING
*     DOWN THE CHAIN OF BLOCKS ALLOCATED BY CMM.
*     OPNM$AA IS RELOADED.
*     THIS UNLOADING AND RELOADING IS DONE TO OPTIMIZE THE POSITIONING. 
*     THE SWITCH, AAM$LOK, IS SET TO PREVENT THE UNLOADING OF OPNM$AA.
*#
  
*     SYSTEM INTERFACE CONSTANTS
  
RA65      EQU    65B         CMM CHAIN POINTER
CAPNAME   EQU    4           CAPSULE NAME OFFSET
CAPBASE   EQU    5           OFFSET TO PROGRAM BASE 
          SPACE  5,15 
CAPL$RM   EQ   *+1S17 
          SX6    X1 
          SA6    PAR
          OPENM  LIOCSIP,NEW  OPEN A DUMMY FILE TO LOAD CAPSULES. 
  
          SA1    =XRM$APL+3 
          SA1    X1-1        X1 = AAM$CTL CAPSTAT 
          MX6    -1 
          IX6    X1-X6       ADD ONE TO THE COUNT TO LOCK IN AAM$CTL
          SA6    A1 
  
          CLOSEM LIOCSIP,RET
  
          SA1    =0LOPNM$AA  CAPSULE THAT IS TO BE UNLOADED 
          SX6    OTB
          BX6    X6+X1
          SA6    =XRM$TMP 
          RJ     =XRM$UTC    UNLOAD CAPSULE 
  
          SA1    RA65        CMM MEMORY POINTER 
          MX0    42 
          BX1    -X1
          SA3    =7LAAM$CTL 
          SX1    X1+1        (X1) = ADDRESS OF 1ST CMM MEMORY BLOCK 
  
CMMLOOP   BSS    0
          SA2    X1+CAPNAME 
          SA1    X1          CMM CONTROL WORD FOR CURRENT BLOCK 
          BX2    X2-X3
          BX2    X0*X2
          PL   X1,CMMLOOP    AN UNALLOCATED CM BLOCK
          NZ   X2,CMMLOOP    NOT THE BLOCK CONTAINING AAM$CTL 
  
          SX6    A1+CAPBASE 
          SA6    BASE        START OF PASLOC TABLE IN AAM$CTL 
          SA2    X6+23B      AA$NRO 
          SX4    OTB
          RJ     =XRM$LDC 
LOOP      SA1    PAR
          SA2    X1 
          ZR     X2,CAPL$RM  ALL DONE 
          SX6    X1+1 
          SA6    A1 
          SA3    BASE 
          MX0    12 
          SA1    LIST 
LOOPA     BX6    X1-X2
          BX6    X0*X6
          ZR     X6,LOOPB 
          SA1    A1+1 
          NZ     X1,LOOPA 
          MESSAGE BADPAR,,RECALL
          EQ     CAPL$RM
BADPAR    DIS    0,*BAD PARAMETER TO CAPL$RM* 
* 
LOOPB     SB2    X1 
          JP     B2 
* 
LIST      VFD    42/2LIS,18/LDIS
          VFD    42/2LAK,18/LDAK
          VFD    42/2LDA,18/LDDA
          VFD    42/2LOP,18/LDOP
          VFD    42/2LMP,18/LDMP
          DATA   0
* 
LDOP      SA2    X3+1        OPNM$AA
          SX4    OTB
          RJ     =XRM$LDC 
          MX6    -1 
          SA6    =XAAM$LOK   DONT UNLOAD OPNM$AA IN F.NOP OF AAM$CTL
          SX6    =XRM$APL-3  IN CTRL$AA 
          SA6    =XRM$PLL    IN CTL$RM
          SA2    =XRM$PL+25B OPEN$RM
          SX4    OTA
          RJ     =XRM$LDC 
          SA2    =XRM$PL+3   CLSF$RM
          SX4    OTA
          RJ     =XRM$LDC 
          EQ     LOOP 
* 
LDMP      SA2    X3+7        MP$EXEC
          RJ     LOAD3
          SA3    BASE 
* 
LDIS      SA2    X3+3        IS$EXEC
          RJ     LOAD3
          EQ     LOOP 
* 
LDAK      SA2    X3+17B      AK$EXEC
          RJ     LOAD3
          EQ     LOOP 
* 
LDDA      SA2    X3+13B      DA$EXEC
          RJ     LOAD3
          EQ     LOOP 
* 
LOAD3     DATA   0
          SX6    A2 
          SA6    LOAD3A 
          SX6    3
          SA6    LOAD3B 
LOAD3C    SX4    OTB
          RJ     =XRM$LDC 
          SA2    LOAD3A 
          SX6    X2+1 
          SA6    A2 
          SA2    X6 
          SA1    LOAD3B 
          SX6    X1-1 
          SA6    A1 
          NZ     X6,LOAD3C
          EQ     LOAD3
LOAD3A    DATA   0
LOAD3B    DATA   0
* 
  
*         FIT FOR DUMMY FILE
  
LIOCSIP   FILE   FO=IS,KL=10,KT=I,FL=20,EMK=YES,ORG=NEW,MBL=700 
  
  
PAR       DATA   0
BASE      DATA   0
#AM2DSZ#  EQU    26B
OTB       VFD    42/7LAAM$CTL,18/#AM2DSZ# 
          DATA   6LAAMLIB 
          DATA   0
OTA       VFD    42/3LBAM,18/52B
          DATA   6LBAMLIB 
          DATA   0
  
          END 
