c ===================================================================== c NEW memory management routines: c ===================================================================== subroutine RESET(NPTR,who) IMPLICIT none INTEGER*4 PVA,POA,PVR,POR,PVB,POB,NPTR CHARACTER*2 who COMMON/CRNTADD/ PVA,POA,PVR,POR,PVB,POB if (who .EQ. 'VA') then PVA = NPTR return endif if (who .EQ. 'OA') then POA = NPTR return endif if (who .EQ. 'VR') then PVR = NPTR return endif if (who .EQ. 'OR') then POR = NPTR return endif if (who .EQ. 'VB') then PVB = NPTR return endif if (who .EQ. 'OB') then POB = NPTR return endif write(*,*) 'RESET:WRONG who' return end c ====================================================================== function MEM(LEN,WHO) IMPLICIT none INTEGER*4 PVA,POA,PVR,POR,PVB,POB,MEM,LEN,Perr CHARACTER*2 who COMMON/CRNTADD/ PVA,POA,PVR,POR,PVB,POB COMMON /overlap/ Perr if (who .EQ. 'VA') then MEM = PVA PVA = PVA + LEN return endif if (who .EQ. 'OA') then MEM = POA POA = POA + LEN return endif if (who .EQ. 'VR') then MEM = PVR PVR = PVR + LEN return endif if (who .EQ. 'OR') then MEM = POR POR = POR + LEN return endif if (who .EQ. 'VB') then MEM = PVB - LEN + 1 PVB = PVB - LEN if (PVB .LE. PVR) Perr=1 return endif if (who .EQ. 'OB') then MEM = POB - LEN + 1 POB = POB - LEN if (POB .LE. POA) then Perr=1 write(*,*) 'POB,LEN',POB,LEN stop endif return endif write(*,*) 'MEM:WRONG who' return end c ====================================================================== function MEMORY(who) IMPLICIT none INTEGER*4 PVA,POA,PVR,POR,PVB,POB,MEMORY CHARACTER*2 who COMMON/CRNTADD/ PVA,POA,PVR,POR,PVB,POB if (who .EQ. 'VA') then MEMORY = PVA - 1 return endif if (who .EQ. 'OA') then MEMORY = POA - 1 return endif if (who .EQ. 'VR') then MEMORY = PVR - 1 return endif if (who .EQ. 'OR') then MEMORY = POR - 1 return endif if (who .EQ. 'VB') then MEMORY = PVB - 1 return endif if (who .EQ. 'OB') then MEMORY = POB - 1 return endif write(*,*) 'MEMORY:WRONG who' return end