SUBROUTINE ENTER(IRNEW)
C
C THIS ROUTINE SAVES
C
C 1) THE CURRENT NUMBER OF OUTSTANDING STORAGE ALLOCATIONS, LOUT, AND
C 2) THE CURRENT RECOVERY LEVEL, LRECOV,
C
C IN AN ENTER-BLOCK IN THE STACK.
C
C IT ALSO SETS LRECOV = IRNEW IF IRNEW = 1 OR 2.
C IF IRNEW = 0, THEN THE RECOVERY LEVEL IS NOT ALTERED.
C
C SCRATCH SPACE ALLOCATED - 3 INTEGER WORDS ARE LEFT ON THE STACK.
C
C ERROR STATES -
C
C 1 - MUST HAVE IRNEW = 0, 1 OR 2.
C
COMMON /CSTAK/DSTACK
DOUBLE PRECISION DSTACK(500)
INTEGER ISTACK(1000)
EQUIVALENCE (DSTACK(1),ISTACK(1))
EQUIVALENCE (ISTACK(1),LOUT)
C
C/6S
C IF (0.GT.IRNEW .OR. IRNEW.GT.2)
C 1 CALL SETERR(35HENTER - MUST HAVE IRNEW = 0, 1 OR 2,35,1,2)
C/7S
IF (0.GT.IRNEW .OR. IRNEW.GT.2)
1 CALL SETERR('ENTER - MUST HAVE IRNEW = 0, 1 OR 2',35,1,2)
C/
C
C ALLOCATE SPACE FOR SAVING THE ABOVE 2 ITEMS
C AND A BACK-POINTER FOR CHAINING THE ENTER-BLOCKS TOGETHER.
C
INOW=ISTKGT(3,2)
C
C SAVE THE CURRENT NUMBER OF OUTSTANDING ALLOCATIONS.
C
ISTACK(INOW)=LOUT
C
C SAVE THE CURRENT RECOVERY LEVEL.
C
CALL ENTSRC(ISTACK(INOW+1),IRNEW)
C
C SAVE A BACK-POINTER TO THE START OF THE PREVIOUS ENTER-BLOCK.
C
ISTACK(INOW+2)=I8TSEL(INOW)
C
RETURN
C
END
.