*COMDECK LOV                                                             LOV
          TITLE  COMMON MEMORY MANAGER, V1.0, CMM.LOV - LOAD OVLY VIA FO LOV
,L                                                                       LOV
*CALL CMMCOM                                                             LOV
          COMMENT  "SUBSYS"LOAD OVERLAY VIA FOL.                         LOV
          B1=1                                                           LOV
 CMM.LOV  SPACE  4                                                       LOV
***       CMM.LOV - LOAD OVERLAY VIA FOL.                                LOV
*                                                                        LOV
*                                                                        LOV
*              THIS IS THE *CMM* INTERFACE TO OVERLAY LOADING BY         LOV
*         *CMM.LOV* (FAST OVERLAY LOADING).  FIRST, A CALL IS MADE       LOV
*         TO *FOL.GDE* TO DETERMINE THE FWA AND LWA+1 OF THE OVERLAY     LOV
*         TO BE LOADED.  THE AREA BOUNDED BY THESE VALUES IS THENCE      LOV
*         CONSIDERED TO BE -UNLOADED- BY THIS CALL, AND ANY UNLOAD-      LOV
*         ACTION SUBROUTINES PENDING UPON ANY PORTION OF THIS AREA ARE   LOV
*         CALLED.                                                        LOV
*              NEXT, DABA IS SET TO THE LWA+1 OF THE OVERLAY.  *CMM*     LOV
*         ASSURES THAT THE CONTENTS OF ALL ACTIVE BLOCKS ARE UNEFFECTED  LOV
*         BY THIS CALL. THIS MAY INVOLVE THE MOVING OF ANY GROUP-TYPE    LOV
*         ZERO VARIABLE-POSITION BLOCKS TO ABOVE LWA+1, IF ANY SUCH      LOV
*         BLOCKS CURRENTLY RESIDE BELOW THAT LOCATION.                   LOV
*              NEXT, *FOL.LOV* IS CALLED TO LOAD THE REQUESTSD OVERLAY.  LOV
*         FOLLOWING THE RETURN FROM *FOL.LOV*, CONTROL RETURNS TO THE    LOV
*         CALLER.  THERE IS NO AUTOMATIC TRANSFER CAPABILITY TO THE      LOV
*         OVERLAY WHEN USING *FOL.LOV*.  ALSO NOTE THAT (0,0) OVERLAYS   LOV
*         CANNOT BE LOADED USING *FOL.LOV*.                              LOV
*                                                                        LOV
*         ENTRY  (X1) = BITS 59-18 -- OVERLAY NAME.                      LOV
*                       BITS 17-12 -- ZERO.                              LOV
*                       BITS 11-0  -- OVERLAY LEVEL.                     LOV
*                                                                        LOV
*         EXIT   (B1) = 1.                                               LOV
*                (B6) = FWA OF 54 TABLE OF NEWLY LOADED OVERLAY.         LOV
*                       MI IF AN ERROR OCCURRED.                         LOV
*                (B7) = ENTRY POINT ADDRESS OF OVERLAY.                  LOV
*                     = (B6) IF AN ERROR OCCURRED.                       LOV
*                                                                        LOV
*         SAVES  X - 0, 5.                                               LOV
*                B - 2, 3.                                               LOV
*                A - 0.                                                  LOV
                                                                         LOV
                                                                         LOV
          CMMENT  LOV                                                    LOV
 CMM.LOV  EQ     *+400000B   ENTRY / EXIT                                LOV
 SCP2     IFC    NE,/"OS.NMV"/SCOPE 2/
                                                                         LOV
*         INITIALIZE AND SAVE NECESSARY ITEMS.                           LOV
                                                                         LOV
          SB1    1                                                       LOV
          RJ     =XCMM.ICM   INITIALIZE AND SET A0                       LOV
          SX6    3RLOV       SAVE FUNCTION NAME                          LOV
          SA6    A0-MNFNAME                                              LOV
          SA2    CMM.LOV     SAVE FUNCTION ADDRESS                       LOV
          LX2    30                                                      LOV
          BX6    X2                                                      LOV
          SA6    A0-MNRETURN                                             LOV
          BX7    X1          SAVE INPUT PARAMETER                        LOV
          MX6    0           DABA-NOT-SAVED FLAG                         CMMA017
          SA6    A0-DABASV                                               CMMA017
          SA7    A0-PARAM                                                LOV
                                                                         LOV
*         INITIAL ERROR CHECKS.                                          LOV
                                                                         LOV
 IS       IFSAFE                                                         LOV
          SA3    A0-IMAPM                                                LOV
          SA4    A0-IMAUA                                                LOV
          ZR     X3,LOV200                                               LOV
          UERR   CMEPMR,0    CALLED FROM POINTER-MAINTENANCE ROUTINE     LOV
                                                                         LOV
 LOV200   ZR     X4,LOV202                                               LOV
          UERR   CMEUAR,0    CALLED FROM UNLOAD-ACTION SUBR              LOV
                                                                         LOV
 LOV202   BSS    0                                                       LOV
 IS       ENDIF                                                          LOV
                                                                         LOV
*         CALL *FOL.GDE* TO GET FWA AND LWA+1.                           LOV
                                                                         LOV
                              ? (X1) = PARAMETER                         LOV
          RJ     =XFOL.GDE   -- GET DIRECTORY ENTRY --                   LOV
          ZR     X6,LOV30    IF OVERLAY NOT FOUND                        LOV
                                                                         LOV
*         PROCESS UNLOAD-ACTION.                                         LOV
                                                                         LOV
          SA7    A0-LWA      SAVE LWA                                    LOV
          SX4    X6          (X4) = FWA OF OVERLAY                       LOV
                                                                         LOV
 IS       IFSAFE                                                         LOV
          SA3    HHA                                                     LOV
          SX3    X3                                                      LOV
          IX6    X4-X3                                                   LOV
          MI     X6,LOV206                                               LOV
          UERR   CMEHHA      FWA GE HHA                                  LOV
                                                                         LOV
 LOV206   BSS    0                                                       LOV
 IS       ENDIF                                                          LOV
                                                                         LOV
          SX6    =YCMM.PUA                                               LOV
                                                                         LOV
          IFFAST  1                                                      LOV
          MI     X6,LOV14    IF UNLOAD-ACTION CODE NOT PRESENT           LOV
                                                                         LOV
 IS       IFSAFE                                                         LOV
          PL     X6,LOV10    IF UNLOAD-ACTION CODE PRESENT               LOV
          SA2    A0-P.UAS                                                LOV
          AX2    18                                                      LOV
          ZR     X2,LOV14    IF NO UNLOAD-ACTION SUBRS                   LOV
          UERR   CMENEED,3RPUA  CMM.PUA NEEDED, BUT NOT PRESENT          LOV
                                                                         LOV
 LOV10    BSS    0                                                       LOV
 IS       ENDIF                                                          LOV
                                                                         LOV
          BX1    X4           ? (X1) = FWA FROM REQUEST                  LOV
          SX2    X7+B1        ? (X2) = LWA+1 OF UNLOADED AREA            LOV
          RJ     =YCMM.PUA   -- PROCESS UNLOAD ACTION --                 LOV
                                                                         LOV
*         MAKE SURE NO BLOCKS ARE PRESENT BELOW LWA.  THERE WILL NOT     LOV
*         BE ANY FIXED BLOCKS, UNLESS THEY ARE OF GROUP-TYPE 1, AND      LOV
*         THIS IS AN ERROR, SINCE THEY ARE SUPPOSED TO BE FREED BEFORE   LOV
*         AN INCREASE IN DABA.  ANY GROUP-TYPE 0 VARIABLE BLOCKS         LOV
*         MUST BE MOVED UP.                                              LOV
                                                                         LOV
 LOV14    SA1    A0-LWA                                                  LOV
          SX6    A0          SET FL UP ABOVE LWA, IF CURRENTLY LESS      LOV
          SX4    X1+B1                                                   LOV
          SA2    A0-B1       MINIMUM ALLOWABLE                           LOV
          SX3    A0           = (LWA+1) + (INTERNAL AREA SIZE)           LOV
          IX2    X3-X2                                                   LOV
          IX4    X4+X2                                                   LOV
          IX6    X6-X4       (CURRENT FL) - (MINIMUM ALLOWABLE)          LOV
          BX4    -X6         NEEDED INCREASE IF PL                       LOV
          PL     X6,LOV15    IF INCREASE NOT NECESSARY                   LOV
          RJ     =XCMM.CFL   -- CHANGE FIELD LENGTH --                   LOV
 LOV15    SA1    A0-LWA                                                  LOV
          SA2    RA65                                                    LOV
          SX1    X1                                                      LOV
          BX6    X2 
          SA6    A0-DABASV   SAVE CURRENT DABA IN CASE OVLS SAME LENGTH 
          SX2    X2                                                      LOV
          IX3    X1+X2                                                   LOV
          ZR     X3,LOV30    IF DABA = LWA                               LOV
          MI     X3,LOV18    IF DABA > LWA                               LOV
                                                                         LOV
 IS       IFSAFE                                                         LOV
          SA3    A0-P.GID    VERIFY NO GROUP-TYPE 1 PRESENT              LOV
          SA4    X3+B1                                                   LOV
          AX3    18                                                      LOV
          SB7    X3                                                      LOV
 LOV210   ZR     B7,LOV211   IF ALL GROUP-ID ENTRIES EXAMINED            LOV
          SA4    A4-B1                                                   LOV
          SB7    B7-B1                                                   LOV
          PL     X4,LOV210   IF GROUP-TYPE 0                             LOV
          SB4    X4 
          EQ     B4,LOV210   IF EMPTY GROUP 
          UERR   CMENGT1     GROUP-TYPE 1 BLOCKS ILLEGALLY ACTIVE        LOV
                                                                         LOV
 LOV211   BSS    0                                                       LOV
 IS       ENDIF                                                          LOV
                                                                         LOV
          BX2    -X2                                                     LOV
          SB7    X1+B1       (B7) = LWA+1                                LOV
          SA3    X2+B1                                                   LOV
          MI     X3,LOV16    IF LOWEST REGION NOT FREE                   LOV
          SB4    X3          (B4) = LWA+1 OF REGION                      LOV
          GE     B4,B7,LOV18  IF FREE REGION EXTENDS PAST LWA+1          LOV
 LOV16    BSS    0                                                       LOV
                                                                         LOV
 IS       IFSAFE                                                         LOV
          SX2    =YCMM.RLS                                               LOV
          PL     X2,LOV213                                               LOV
          UERR   CMENEED,3RRLS  CMM.RLS NEEDED, BUT NOT PRESENT          LOV
                                                                         LOV
 LOV213   BSS    0                                                       LOV
 IS       ENDIF                                                          LOV
                                                                         LOV
          SX1    B7          (X1) = LWA+1                                LOV
          RJ     =YCMM.RLS   -- RELEASE LOWER SPACE --                   LOV
                                                                         LOV
*         SET DABA = LWA AND SET HEADERS ACCORDINGLY.                    LOV
                                                                         LOV
 LOV18    SA2    RA65        (B6) = (NEW DABA) - (OLD DABA)              LOV
          SA1    A0-LWA      (X1) = NEW DABA                             LOV
          SX1    X1                                                      LOV
          SX6    X2                                                      LOV
          IX7    X1+X6                                                   LOV
          SB6    X7                                                      LOV
          BX3    -X6         (B7) = (OLD DABA) + 1                       LOV
          SB7    X3+B1                                                   LOV
          IX6    X2-X7       SET DABA = LWA                              LOV
          SA6    A2                                                      LOV
          SA6    A0-DABASV   SAVE FOR AFTER *FOL.LOV* CALL               LOV
          MI     B6,LOV22    IF REDUCING DABA                            LOV
          SX7    A0          SET FL AT NEW DABA                          LOV
          MX6    2                                                       LOV
          SA3    B7          HEADER AT (OLD DABA) + 1                    LOV
          SB4    X3          (B4) = LWA+1 OF 1ST REGION                  LOV
          BX7    X6+X7                                                   LOV
          SA7    X1                                                      LOV
          SA3    X1+B1       ADJUST BKD OF HDR IN CASE AT LWA+1          LOV
          MX4    42                                                      LOV
          LX4    18                                                      LOV
          BX6    X4*X3                                                   LOV
          SX3    X1                                                      LOV
          LX3    18                                                      LOV
          BX6    X6+X3                                                   LOV
          SA6    A3                                                      LOV
          SB5    A3-B4                                                   LOV
          ZR     B5,LOV30    IF NEXT REGION STARTS EXACTLY AT LWA+1      LOV
          SX6    B4          FORM NEW FREE REGION HEADER TO GO AT LWA+1  LOV
          BX6    X6+X3                                                   LOV
          SA6    X1+B1                                                   LOV
          SA4    B4          ADJUST BKD IN NEXT HEADER                   LOV
          SX7    B6          NEW - OLD                                   LOV
          LX7    18                                                      LOV
          IX7    X4+X7                                                   LOV
          SA7    A4                                                      LOV
          EQ     LOV30                                                   LOV
                                                                         LOV
 LOV22    SX6    A0          SET FL AT NEW DABA                          LOV
          MX3    2                                                       LOV
          BX6    X3+X6                                                   LOV
          SA6    X1                                                      LOV
          SA4    B7                                                      LOV
          MI     X4,LOV24    IF 1ST REGION NOT FREE                      LOV
          SA3    X4          ADJUST BKD IN NEXT HEADER                   LOV
          SX7    B6          NEW - OLD                                   LOV
          LX7    18                                                      LOV
          IX6    X3+X7                                                   LOV
          SA6    A3                                                      LOV
          SX7    X4          SET NEW FREE REGION HEADER AT NEW DABA + 1  LOV
          EQ     LOV26                                                   LOV
                                                                         LOV
 LOV24    SX7    B6+B1       (NEW DABA+1) - (OLD DABA)                   LOV
          LX7    18          SET BKD TO POINT TO NEW FREE REGION         LOV
          IX6    X4+X7                                                   LOV
          SA6    A4                                                      LOV
          SX7    A4          SET NEW FREE REGION HEADER AT NEW DABA + 1  LOV
 LOV26    SX3    X1                                                      LOV
          LX3    18                                                      LOV
          BX7    X7+X3                                                   LOV
          SA7    X1+B1                                                   LOV
                                                                         LOV
*         CALL *FOL.LOV* TO LOAD OVERLAY.                                LOV
                                                                         LOV
 LOV30    SA1    A0-PARAM     ? PARAMETER WORD                           LOV
          RJ     =XFOL.LOV   -- LOAD OVERLAY --                          LOV
                                                                         LOV
*         RETURN WITH (B6) AND (B7) SET BY FOL.LOV.                      LOV
                                                                         LOV
          SA2    A0-DABASV   RESTORE DABA IN RA+65B                      LOV
          ZR     X2,LOV31    IF DABA NOT SAVED                           CMMA017
          BX6    X2                                                      LOV
          SA6    RA65                                                    LOV
 LOV31    SA2    A0-MNSAVEA0  RESTORE A0                                 CMMA017
          SA3    A0-MNRETURN  RETURN THROUGH SAVED ENTRY ADDRESS         LOV
          SA0    X2                                                      LOV
          SB4    X3                                                      LOV
          JP     B4          (B6) AND (B7) SET WITH FOL.LOV RETURN       LOV
                                                                         LOV
 PARAM    EQU    MNARG1      SAVE AREA FOR PARAMETER ADDRESS             LOV
 LWA      EQU    MNARG2      LWA+1 OF OVERLAY                            LOV
 DABASV   EQU    MNARG3      SAVE AREA FOR RA+65B                        LOV
 SCP2     ELSE
*    THIS ROUTINE IS UNAVALIABLE TO SCOPE 2 - RETURN ERROR
          SB6    -1 
          SB7    B6 
          SB1    1
          EQ     CMM.LOV
 SCP2     ENDIF 
                                                                         LOV
