*DECK CMMFDL
          IDENT  CMM$SYP                                                000100
          TITLE  CMM$FDL - *CMM* AND *FDL* INTERFACE ROUTINES FOR FORM
                                                                        000120
          MACHINE  ANY,I                                                000130
          COMMENT  *CMM* AND *FDL* INTERFACE FOR *SYMPL* PROGRAMS 
          SST                                                           000150
          B1=1                                                          000160
          SPACE  4                                                      000170
**        ***************************************                       000180
*         * CMM$FDL - *SYMPL* INTERFACE ROUTINE * 
*         ***************************************                       000200
*                                                                       000210
*                                                                       000220
*              THIS PROGRAM PROVIDES *CMM* AND *FDL* INTERFACES FROM
*         PROGRAMS WRITTEN IN *SYMPL*.  FOR EACH ENTRY POINT IN *CMM*   000240
*         WHICH CAN BE CALLED FROM *SYMPL* PROGRAMS, IT CONTAINS AN     000250
*         ENTRY POINT WHICH DIFFERS ONLY BY THE PERIOD (.) BEING A      000260
*         DOLLAR SIGN ($).                                              000270
*                                                                       000280
*              IT CONVERTS THE STANDARD (A1) CALLING SEQUENCE PASSED    000290
*         TO IT TO THE CALLING SEQUENCE (VARIOUS REGISTERS) EXPECTED    000300
*         BY *CMM*.  UPON RETURN, ANY NECESSARY CONVERSION OF THE       000310
*         FORMAT FOR RETURN INFORMATION IS DONE.                        000320
*                                                                       000330
*              REFER TO THE IMS OF *CMM* FOR MORE DESCRIPTION OF        000380
*         THE FUNCTIONS -                                               000390
*                                                                       000400
* 
 CMM      MICRO  1,,/CMM./   SAFE VERSION OF CMM
*                                                                       000550
*         +++++ BLOCK MANIPULATING CALLS +++++                          000560
*                                                                       000570
**        CMM$ALF - ALLOCATE FIXED BLOCK                                001080
*                                                                       001090
*                   FUNC CMM$ALF;                                       001100
*                P<PLK>=CMM$ALF(SIZE,SIZE$CODE,GRPID)                   001110
                                                                        001120
          ENTRY  CMM$ALF                                                001130
                                                                        001140
 CMM$ALF  JP     *+1S17      ENTRY/EXIT 
          SA2    X1          (X2) = BLOCK-SIZE                          001160
          SA3    A1+1        GET SIZE CODE ADDRESS                      001170
          MX6    -6                                                     001180
          SA4    X3          GET SIZE CODE                              001190
          BX3    -X6*X4                                                 001200
          LX3    6           (X3) BITS 11-6 = SIZE CODE                 001210
          SA4    A3+1        GET GROUP-ID                               001220
          SA4    X4                                                     001230
          MX5    -17                                                    001240
          BX5    -X5*X4                                                 001250
          LX5    12                                                     001260
          BX3    X5+X3       (X3) BITS 28-12 = GROUP-ID                 001270
          MX4    1R4         CAUSE SEARCH FROM BOTTOM UP FOR SPACE      001280
          RJ     =X"CMM"ALF   CALL *CMM*                                001290
          BX6    X1          RETURN, (X6) = BLOCK-FWA                   001300
          EQ     CMM$ALF                                                001310
          SPACE  2,1                                                    001320
**        CMM$FRF - FREE FIXED BLOCK                                    001330
                                                                        001340
*                PROC CMM$FRF                                           001350
*                CMM$FRF(BLK)                                           001360
                                                                        001370
          ENTRY  CMM$FRF                                                001380
 CMM$FRF  JP     *+1S17      ENTRY/EXIT 
                             (X1) = BLOCK FWA                           001410
          RJ     =X"CMM"FRF   CALL CMM                                  001420
          EQ     CMM$FRF     RETURN                                     001430
          SPACE  2                                                      001440
**        CMM$GLF - GROW AT LAST FOR FIXED BLOCKS 
* 
*         PROC  CMM$GLF 
*         CMM$GLF (BLK, NUM)
  
          ENTRY  CMM$GLF
 CMM$GLF  JP     *+1S17      ENTRY/EXIT 
          SA2    A1+1        (X2) = LOC(NUM)
                             (X1) = BLOCK-FWA 
          SA2    X2 
          RJ     =X"CMM"GLF   CALL CMM
          EQ     CMM$GLF
          SPACE  2
**        CMM$SLF - SHRINK AT LAST FOR FIXED BLOCKS 
* 
*         PROC  CMM$SLF 
*         CMM$SLF (BLK, NUM)
  
          ENTRY  CMM$SLF
 CMM$SLF  JP     *+1S17      ENTRY/EXIT 
          SA2    A1+1        (X2) = LOC(NUM)
                             (X1) = BLOCK-FWA 
          SA2    X2 
          RJ     =X"CMM"SLF   CALL CMM
          EQ     CMM$SLF
          SPACE  2
**        CMM$SFF - SHRINK AT FIRST FOR FIXED BLOCKS
* 
*         PROC  CMM$SFF 
*         CMM$SFF (BLK, NUM)
  
          ENTRY  CMM$SFF
 CMM$SFF  JP     *+1S17      ENTRY/EXIT 
          SA2    A1+1        (X2) = LOC(NUM)
                             (X1) = BLOCK-FWA 
          SA2    X2 
          RJ     =X"CMM"SFF   CALL CMM
          EQ     CMM$SFF
          SPACE  2
**        CMM$CSF - CHANGE SPECS FOR FIXED BLOCKS 
* 
*         PROC  CMM$CSF 
*         CMM$CSF (BLK, SPEC) 
  
          ENTRY  CMM$CSF
 CMM$CSF  JP     *+1S17      ENTRY/EXIT 
          SA2    A1+1        (X2) = LOC(SPEC) 
                             (X1) = BLOCK-FWA 
          SA2    X2 
          RJ     =X"CMM"CSF   CALL CMM
          EQ     CMM$CSF
          SPACE  2
**        +++++ MANIPULATING THE OVERFLOW-ACTION STACK +++++            002440
*                                                                       002450
*         CMM$POE - STACK OVERFLOW ENTRY.                               002460
*                                                                       002470
*                   FUNC CMM$POE;                                       002480
*                   OVID=CMM$POE(OVSUBR,TRIGGER,CWDSTRIG)               002490
                                                                        002500
          ENTRY  CMM$POE                                                002510
                                                                        002520
CMM$POE   EQ     *+400000B   ENTRY/EXIT                                 002530
          BX4    X1          (X4) = OVERFLOW SUBROUTINE ADDR            002540
          SB1    1                                                      002550
          SA2    A1+B1       ADDR OF TRIGGER
          SA3    A2+B1       ADDR OF CONTIG WORDS TRIGGER               002570
          SA2    X2          (X2) = TRIGGER VALUE                       002580
          SA3    X3          (X3) = CONTIGUOUS WORDS TRIGGER            002590
          RJ     =X"CMM"POE   CALL *CMM*                                002600
          BX6    X1          RETURN, (X6) = ENTRY-ID                    002610
          EQ     CMM$POE                                                002620
          SPACE  2,1                                                    002630
**        CMM$DOE - DELETE OVERFLOW ENTRY.                              002640
*                                                                       002650
*                   PROC CMM$DOE;                                       002660
*                   CMM$DOE(OVID);                                      002670
                                                                        002680
          ENTRY  CMM$DOE                                                002690
                                                                        002700
CMM$DOE   EQ     *+400000B   ENTRY/EXIT                                 002710
          SA1    X1          (X1) = ENTRY-ID                            002720
          RJ     =X"CMM"DOE   CALL *CMM*                                002730
          EQ     CMM$DOE     RETURN                                     002740
          SPACE  3,2                                                    002750
**        +++++ BLOCK GROUP CALLS +++++                                 002760
*                                                                       002770
*         CMM$AGR - ACTIVATE BLOCK GROUP.                               002780
*                                                                       002790
*                   FUNC CMM$AGR;                                       002800
*                   GID=CMM$AGR(GRPTYPE)                                002810
                                                                        002820
          ENTRY  CMM$AGR                                                002830
                                                                        002840
CMM$AGR   EQ     *+400000B   ENTRY/EXIT                                 002850
          SA1    X1          (X1) = GROUP-TYPE                          002860
          RJ     =X"CMM"AGR   CALL *CMM*                                002870
          BX6    X2          RETURN, (X6) = GROUP-ID                    002880
          EQ     CMM$AGR                                                002890
          SPACE  2,1                                                    002900
**        CMM$FGR - FREE ALL BLOCKS OF A GROUP.                         002910
*                                                                       002920
*                   PROC CMM$FGR;                                       002930
*                   CMM$FGR(GID);                                       002940
                                                                        002950
          ENTRY  CMM$FGR                                                002960
                                                                        002970
CMM$FGR   EQ     *+400000B   ENTRY/EXIT                                 002980
          SA1    X1          (X1) = GROUP-ID                            002990
          RJ     =X"CMM"FGR   CALL *CMM*                                003000
          EQ     CMM$FGR     RETURN                                     003010
                                                                        003020
                                                                        003030
**        CMM$GSS            GENERATE STATS                             003040
*                                                                       003050
*                FUNC CMM$GSS                                           003060
*                P<STATARRAY>=CMM$GSS;                                  003070
                                                                        003080
          ENTRY  CMM$GSS                                                003090
                                                                        003100
 CMM$GSS  DATA   0           ENTRY/EXIT                                 003110
          RJ     =X"CMM"GSS   CALL CMM                                  003120
          BX6    X1          RETURN (X6) = ADDR OF ARRAY OF STATS       003130
          EQ     CMM$GSS     RETURN                                     003140
          SPACE  2                                                      003150
**        CMM$OPX - OPTIMIZATION CALLS - X = 1 THRU 4                   003160
*                                                                       003170
*                CALL ALL AS PROCS WITH NO PARAMS                       003180
*                                                                       003190
          ENTRY  CMM$OP1                                                003200
 CMM$OP1  DATA   0                                                      003210
          RJ     =X"CMM"OP1                                             003220
          EQ     CMM$OP1                                                003230
                                                                        003240
          ENTRY  CMM$OP2                                                003250
 CMM$OP2  DATA   0                                                      003260
          RJ     =X"CMM"OP2                                             003270
          EQ     CMM$OP2                                                003280
                                                                        003290
          ENTRY  CMM$OP3                                                003300
 CMM$OP3  DATA   0                                                      003310
          RJ     =X"CMM"OP3                                             003320
          EQ     CMM$OP3                                                003330
                                                                        003340
          ENTRY  CMM$OP4                                                003350
 CMM$OP4  DATA   0                                                      003360
          RJ     =X"CMM"OP4                                             003370
          EQ     CMM$OP4                                                003380
          SPACE  2
**        FDL$LDC - LOAD CAPSULE
* 
*                FUNC FDL$LDC I 
*                FDL$LDC (GROUP, CAPSULE, PASSLOCLIST, LIBLIST) 
  
          ENTRY  FDL$LDC
 FDL$LDC  JP     *+1S17      ENTRY/EXIT 
          SB1    1
          SA2    A1+B1
          SA4    A2+B1       PASSLOC LIST 
          SA1    X1          GROUP NAME 
          SA3    A4+B1       LIBRARY LIST 
          SA2    X2          CAPSULE NAME 
          RJ     =XFDL.LDC
          EQ     FDL$LDC     RETURN WITH ERROR CODE IN X6 
          SPACE  2
**        FDL$ULC - UNLOAD CAPSULE
* 
*                FUNC FDL$ULC I 
*                FDL$ULC (GROUP, CAPSULE, PASSLOCLIST)
  
          ENTRY  FDL$ULC
 FDL$ULC  JP     *+1S17      ENTRY/EXIT 
          SA2    A1+1 
          SA4    A2+1        PASSLOC LIST 
          SA1    X1          GROUP NAME 
          SA2    X2          CAPSULE NAME 
          RJ     =XFDL.ULC
          EQ     FDL$ULC     RETURN WITH ERROR CODE IN X6 
  
          END                                                           003390
