C
C This file is issued from the MODULEF library, but has been 
C subsequently modified
C
      SUBROUTINE ZALDY2(MAAAA,IDELEM,IDEPRE)
C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C BUT : LIBERER UN ESPACE DE MEMOIRE ALLOUE PAR LE S.P. ZALDY1
C
C PARAMETRES D'ENTREE :
C   MAAAA  : MEMOIRE
C   IDELEM : DEPLACEMENT DE L'ESPACE A LIBERER
C   IDEPRE : POINTEUR PRECEDENT
C
C REMARQUE :
C   L'ALGORITHME EST CONCU POUR NE PAS LAISSER
C   DEUX ESPACES LIBRES CONTIGUS
C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C PROGRAMMEURS : F. HECHT ET P. LAUG ; INRIA
C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      DIMENSION MAAAA(*)
      DATA IDEBUT/5/
C
C RECHERCHE DE L'ESPACE A LIBERER MAAAA(ID2)
      ID1 = IDEPRE
      ID2 = IDELEM
C
C TEST SUR L'ESPACE PRECEDENT MAAAA(ID1) ET SUIVANT MAAAA(ID3)
  200 ID3 = MAAAA(ID2)
      IF (ID3.LT.0) GOTO 920
      IF (ID3.GT.MAAAA(1)) ID3 = 1
      IF (MAAAA(ID1).GT.0) GOTO 500
      IF (MAAAA(ID3).GT.0) GOTO 520
                           GOTO 530
  500 IF (MAAAA(ID3).LT.0) GOTO 510
C
C PRECEDENT OCCUPE ET SUIVANT OCCUPE
      MAAAA(ID2) = -MAAAA(ID2)
      RETURN
C
C PRECEDENT OCCUPE ET SUIVANT LIBRE
  510 MAAAA(ID2) = MAAAA(ID3)
      RETURN
C
C PRECEDENT LIBRE  ET SUIVANT OCCUPE
  520 MAAAA(ID1) = -MAAAA(ID2)
      RETURN
C
C PRECEDENT LIBRE  ET SUIVANT LIBRE
  530 MAAAA(ID1) = MAAAA(ID3)
      RETURN
C
C ERREUR
  920 WRITE (IINFO('I'),2000) IDELEM
C
C2000 FORMAT (/' ZALDY2 : SPACE ALREADY FREE :',I12)                    #GB
C
 2000 FORMAT (/' ZALDY2 : ESPACE DEJA LIBRE :',I12)                     #F
C
      END
