*COMDECK TY4
          TITLE  COMMON MEMORY MANAGER, V1.0, CMM.SIV - SAVE IDENTIFIED 
,VALUE
*CALL CMMCOM
          COMMENT  "SUBSYS"MISC FUNCTIONS FOR TYPE 4 VARIABLE.
          B1=1
 CMM.SIV  SPACE  4,10 
***       CMM.SIV - SAVE IDENTIFIED VALUE.
* 
* 
*              CMM.SIV ACCEPTS AN ARBITRARY 30-BIT VALUE AND A UNIQUE-
*         ID IN THE SAME FORM AS FOR TYPE 4 BLOCKS.  THIS 30-BIT
*         VALUE MAY BE RETURNED BY THE CMM.FWA FUNCTION BY PASSING
*         IT THE UNIQUE-ID. 
* 
*         ENTRY  (X2) = BITS 59-30 -- ZERO. 
*                       BITS 29-0  -- ANYTHING. 
*                (X3) = BITS 59-18 -- ZERO. 
*                       BITS 17-0  -- POSITIVE, EVEN USER-SUPPLIED ID,
*                                     OR ZERO TO MEAN THAT CMM IS TO
*                                     SUPPLY A POSITIVE, ODD ID.
* 
*         EXIT   (X1) = ID IF NO USER-SUPPLIED ID.
*                       UNDEFINED OTHERWISE.
*                (B1) = 1.
* 
*         SAVES  X - 0, 5.
*                B - 2, 3.
*                A - 0. 
  
  
          CMMENT  SIV 
 CMM.SIV  EQ     *+400000B   ENTRY / EXIT 
          SB1    1
          RJ     =XCMM.ICM   INITIALIZE AND SET A0
          SX7    3RSIV       SAVE FUNCTION NAME 
          SA7    A0-MNFNAME 
          SA4    CMM.SIV     SAVE RETURN ADDRESS
          LX4    30 
          BX6    X4 
          SA6    A0-MNRETURN
  
 IS       IFSAFE
          SA4    A0-IMAPM 
          ZR     X4,SIV102
          UERR   CMEPMR,0    CALLED FROM POINTER-MAINTENANCE ROUTINE
  
 SIV102   BX6    X3          VERIFY UNIQUE-ID NOT SPECIFIED AS ODD
          LX6    59 
          PL     X6,SIV104
          UERR   CMEUID,0    IMPROPERLY SPECIFIED UNIQUE-ID 
  
 SIV104   MX7    30          KEEP LOWER 30 BITS OF VALUE ONLY 
          BX2    -X7*X2 
          SX3    X3          KEEP LOWER 18 BITS OF UNIQUE-ID ONLY 
 IS       ENDIF 
  
          NZ     X3,SIV2     IF UNIQUE-ID SUPPLIED BY USER
          SA1    A0-UNIQUEID  ADVANCE UNIQUE-ID 
          SX6    X1+2 
          SA6    A1 
          BX3    X6          USE NEW VALUE
 SIV2     LX2    30          (X6) = P.IV ENTRY
          BX7    X3          (X7) = VALUE FOR RETURN
          BX6    X2+X3
          SX2    B1           ? (X2) = ENTRY SIZE 
          SX1    P.IV         ? (X1) = INTERNAL BLOCK NUMBER
          RJ     =XCMM.CIA   -- CHANGE INTERNAL AREA -- 
          SA6    B7          STORE P.IV ENTRY 
          BX1    X7          (X1) = UNIQUE-ID 
          SA2    A0-MNSAVEA0  RESTORE A0
          SA0    X2 
          EQ     CMM.SIV     RETURN 
          TTL    COMMON MEMORY MANAGER, V1.0, CMM.FWA - GET BLOCK ADDRES
,S
 CMM.FWA  EJECT 
***       CMM.FWA - GET BLOCK ADDRESS.
* 
* 
*              IF THE UNIQUE-ID VALUE IDENTIFIES AN ACTIVE TYPE 4 BLOCK,
*         THEN THE CURRENT FIRST WORD ADDRESS AND LENGTH OF THE 
*         IDENTIFIED BLOCK ARE LOCATED AND RETURNED.  THE LENGTH VALUE
*         REMAINS VALID UNTIL EXPLICITLY CHANGED BY THE USER VIA
*         ONE OF THE GROW/SHRINK ENTRY POINTS.  THE FWA VALUE REMAINS 
*         VALID ONLY UNTIL THE NEXT CALL OF ANY CMM ENTRY POINT 
*         EXCEPT THIS ONE.
*              IF AN ACTIVE TYPE 4 BLOCK IDENTIFIED BY THE SPECIFIED
*         UNIQUE-ID EXISTS, THEN BLOCK-FWA AND BLOCK-SIZE ARE RETURNED
*         AS SPECIFIED ABOVE.  IF NO SUCH BLOCK EXISTS, BUT UNIQUE-ID 
*         WAS PASSED VIA THE SAVE-IDENTIFIED-VALUE ENTRY POINT, THEN
*         THE 30-BIT VALUE PASSED ALONG WITH UNIQUE-ID IS RETURNED
*         IN BLOCK-FWA, AND ZERO IS RETURNED FOR BLOCK-SIZE.  IF NEITHER
*         OF THE ABOVE EXISTS, THEN ZERO VALUES ARE RETURNED FOR BOTH 
*         BLOCK-FWA AND BLOCK-SIZE. 
* 
*         ENTRY  (X2) = UNIQUE-ID.
* 
*         EXIT   (X1) = BITS 59-30 -- BLOCK-SIZE. 
*                       BITS 29-0  -- BLOCK-FWA.
*                (B1) = 1.
* 
*         SAVES  X - 0, 5.
*                B - 2, 3.
*                A - 0. 
  
  
          CMMENT  FWA 
 CMM.FWA  EQ     *+400000B   ENTRY / EXIT 
          SB1    1
          RJ     =XCMM.ICM   INITIALIZE AND SAVE A0 
          SB4    X2          (B4) = UNIQUE-ID 
          MX1    0           (X1) = REPLY WORD, LTH = FWA = 0 
  
*         SET VALUE FROM TABLE OF IDENTIFIED VALUES (SET VIA CMM.SIV),
*         IF PRESENT. 
  
          SA3    A0-P.IV
          SA4    X3+B1
          AX3    18          (B5) = P.IV LENGTH 
          SB5    X3 
 FWA2     ZR     B5,FWA3     IF NO MORE ENTRIES 
          SA4    A4-B1       NEXT ENTRY 
          SB5    B5-B1
          SB6    X4          COMPARE UNIQUE-ID
          NE     B4,B6,FWA2 
          MX6    30          SET FWA = VALUE FROM ENTRY 
          LX4    30 
          BX1    -X6*X4 
  
*         SEARCH FOR EITHER A VARIABLE BLOCK WITH THE MATCHING
*         UNIQUE-ID, OR A FIXED BLOCK WITH FWA MATCHING A VALUE 
*         POSSIBLY FOUND IN P.IV. 
  
 FWA3     SA2    RA65 
          BX2    -X2
          SB5    X2+B1
 FWA4     ZR     B5,FWA10    IF NO MORE REGIONS 
          SA2    B5          NEXT REGION
          SB5    X2 
          PL     X2,FWA4     IF FREE REGION 
          ID     X2,FWA8     IF FIXED BLOCK 
  
*         SEARCH THRU VARIABLE REGION.
  
          AX2    36          (B6) = 1ST HEADER FWA
          SB6    X2 
          MX7    2
 FWA6     ZR     B6,FWA4     IF NO MORE VP BLOCKS THIS REGION 
          SA3    B6          NEXT BLOCK HEADER
          SB6    X3 
          SA4    A3+B1       HEADER WORD 1
          BX6    X7*X4       TC-1 
          BX6    X6-X7       ZERO IF TC = 4 
          SB7    X4          AUX1 
          NZ     X6,FWA6     IF NOT TYPE-CODE 4 
          NE     B4,B7,FWA6  IF NO MATCH ON UNIQUE-ID 
          SX1    A3+4        (X1) =  VFD  30/LTH,30/FWA 
          AX3    36 
          SX3    X3 
          LX3    30 
          BX1    X1+X3
          EQ     FWA10       GO TO RETURN 
  
 FWA8     SX4    X2          FWD
          MX7    -1          N = HEADER SIZE
          LX2    -44         SHIFT TO CHECK HEADER SIZE 
          BX7    -X7*X2 
          SB7    X7+B1       BLOCK-FWA = HEADER-FWA + N 
          SX3    A2+B7
          IX6    X3-X1
          NZ     X6,FWA4     IF FIXED BLOCK NOT SAME FWA AS IN P.IV 
          IX4    X4-X3       SET BLOCK LENGTH IN REPLY
          LX4    30 
          BX1    X4+X1
 FWA10    SA2    A0-MNSAVEA0  RESTORE A0
          SA0    X2 
          EQ     CMM.FWA     RETURN 
  
