*DECK NP$CMIT
*IF DEF,XFR
IDENT NP$CMIT
TITLE NP$CMIT- FIP/COMMON MEMORY MANAGER INTERFACE.
SYSCOM B1
ENTRY NP$CMAR ASSIGN GROUP NAME
ENTRY NP$CMAF ALLOCATE FIXED MEMORY
ENTRY NP$CMFR FREE GROUP NAME
ENTRY NP$CMFF FREE FIXED MEMORY
ENTRY NP$CMSF SHRINK THE FIXED MEMORY
SPACE 4,10
** NP$CMIT- COMMON MEMORY MANAGER INTERFACE FOR FTN AND SYMPL.
* L.T.NGUYEN 83/03/21
*
* THESE ROUTINES ALLOW COMMUNICATION BETWEEN FORTRAN OR SYMPL
* PROGRAMS AND THE COMMON MEMORY MANAGER.
*
* NP$CMAR (FUNCTION) ASSIGN GROUP NAME.
* NP$CMAF (FUNCTION) ALLOCATE FIXED MEMORY.
* NP$CMFR (SUBROUTINE/PROCEDURE) FREE GROUP NAME.
* NP$CMFF (SUBROUTINE/PROCEDURE) FREE FIXED MEMORY.
NP$CMAR TITLE NP$CMAR - CMM.AGR INTERFACE.
** NP$CMAR - CMM.AGR INTERFACE (ASSIGN GROUP IDENTIFIER).
*
* GPID = NP$CMAR(GPTYPE) FUNCTION CALL.
* GPID = GROUP IDENTIFER.
* GPTYPE = TYPE, TEMPORARY OR PERMANENT.
*
* ENTRY A1 = ADDRESS OF PARAMETER LIST.
* X1 = ADDRESS OF 1ST PARAMETER (GPTYPE).
*
* EXIT X6 = GROUP IDENTIFER (GPID) RETURNED BY CMM.AGR.
*
* USES A - 1.
* B - 1.
* X - 1 6.
*
* CALLS CMM.AGR.
NP$CMAR SUBR
SB1 1 CONSTANT 1
SA1 X1 FETCH 1ST PARAMETER (GROUP TYPE)
RJ =XCMM.AGR ASSIGN GROUP NAME
BX6 X2 RETURN GROUP NAME
EQ NP$CMARX RETURN
NP$CMAF TITLE NP$CMAF- CMM.ALF INTERFACE.
** NP$CMAF - CMM.ALF INTERFACE (ALLOCATE FIXED MEMORY).
*
* FWA = NP$CMAF(SIZE,SIZECODE,GPID) FUNCTION CALL.
* FWA = FWA OF BLOCK.
* SIZE = SIZE OF BLOCK.
* SIZECODE = ALLOCATION CODE.
* GPID = GROUP IDENTIFER.
*
* ENTRY A1 = ADDRESS OF PARAMETER LIST.
* X1 = ADDRESS OF 1ST PARAMETER (SIZE).
*
* EXIT X6 = FWA OF ALLOCATED BLOCK (RETURNED BY CMM.ALF).
*
* USES A - 2 3 4.
* B - 1.
* X - 2 3 4 6.
*
* CALLS CMM.ALF.
NP$CMAF SUBR
SB1 1 CONSTANT 1
SA3 A1+B1 GET 2D PARAMETER
SA4 A3+B1 GET 3D PARAMETER
SA2 X1 GET 1ST PARAMETER (SIZE)
SA3 X3 GET 2D PARAMETER (SIZECODE)
SA4 X4 GET 3D PARAMETER (GPID)
LX3 6 POSITION SIZE CODE
LX4 12 POSITION GROUP IDENTIFIER
IX3 X3+X4 COMBINE SIZE CODE AND GROUP ID
RJ =XCMM.ALF ALLOCATE FIXED STORAGE
BX6 X1 RETURN FWA
EQ NP$CMAFX RETURN
NP$CMFR TITLE NP$CMFR - CMM.FGR INTERFACE.
** NP$CMFR - CMM.FGR INTERFACE (FREE GROUP IDENTIFIER).
*
* CALL NP$CMFR(GPID) FORTRAN SUBROUTINE CALL.
* NP$CMFR(GPID); SYMPL PROCEDURE CALL.
* GPID = GROUP IDENTIFIER.
*
* ENTRY A1 = ADDRESS OF PARAMETER LIST.
* X1 = ADDRESS OF 1ST PARAMETER (GPID).
*
* EXIT NONE.
*
* USES A - 1.
* B - 1.
* X - 1.
*
* CALLS CMM.FGR.
NP$CMFR SUBR
SB1 1 CONSTANT 1
SA1 X1 GET 1ST PARAMETER (GPID)
RJ =XCMM.FGR FREE GROUP IDENTIFIER
EQ NP$CMFRX RETURN
NP$CMFF TITLE NP$CMFF - CMM.FRF INTERFACE.
** NP$CMFF - CMM.FRF INTERFACE (FREE FIXED MEMORY).
*
* CALL NP$CMFF(FWA) FORTRAN SUBROUTINE CALL.
* NP$CMFF(FWA); SYMPL PROCEDURE CALL.
* FWA = FWA OF BLOCK.
*
* ENTRY A1 = ADDRESS OF PARAMETER LIST.
* X1 = ADDRESS OF 1ST PARAMETER (FWA).
*
* EXIT NONE.
*
* USES A - 1.
* B - 1.
* X - 1.
*
* CALLS CMM.FRF.
NP$CMFF SUBR
SB1 1 CONSTANT 1
SA1 X1 FETCH 1ST PARAMETER (FWA)
RJ =XCMM.FRF
EQ NP$CMFFX RETURN
** NP$CMSF - CMM.SFF INTERFACE (SHRINK FIXED MEMORY)
*
* CALL BP$CMSF(FWA,NUM)
* FWA - FIRST WORD ADDRESS OF BUFFER TO BE
* SHRINKED.
* NUM - NUMBER OF WORD TO BE SHRINKED
* COUNTED FROM THE BOTTOM.
* ENTRY A1 = ADDRESS OF PARAMTER LIST.
* X1 = ADDRESS OF FWA.
*
* EXIT NONE.
*
* USE A - 1.
* B - 1.
* X - 1.
* A - 2.
* X - 2.
* CALLS CMM.SFF.
NP$CMSF SUBR
SB1 1
SA1 X1
SA2 A1+1 NUMBER OF WORD TO BE SHRINKED
RJ =XCMM.SFF
EQ NP$CMSFX
NP$CMNE TITLE NP$CMNE - DEBUG CODE.
END END OF NP$CMIT
*ENDIF