C
C This file is issued from the MODULEF library, but has been 
C subsequently modified
C
      SUBROUTINE FONVAR(CITEM,MR,MEXP,MOPN,ICODE)
C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C           S.P. FONVAR          (FONCTIONS INTERPRETEES)
C           -----------
C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C BUT :
C     TRAITER LE CAS D'UNE VARIABLE GLOBALE (CF F. HECHT)
C     CE PROGRAMME S'INSPIRE DE FONACS
C
C PARAMETRES D ENTREE :
C     CITEM   : CHAINE DE CARACTERES DESIGNANT LA VARIABLE GLOBALE
C     MR      : TABLE DES CONSTANTES REELLES
C
C PARAMETRES DE SORTIE :
C     ICODE   : CODE DE RETOUR (VOIR LE S.P. FONERR)
C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C PROGRAMMEUR : PATRICK LAUG ; INRIA (3) 954 90 20 POSTE 508
C ......................................................................
      CHARACTER*(*) CITEM
      REAL    MR(*),SR
      INTEGER MEXP(*),MOPN(*)
C //////////////////////////////////////////////////////////////////////
C     DEBUT DES COMMON  DU FORMAT LIBRE
C ----------------------------------------
C
C
      DOUBLE PRECISION RVAL
      INTEGER PTBUF,IVAL,TYPVAL,SIZDEN,CARLUE
C
      INTEGER MXETIQ
      PARAMETER (MXETIQ=20)
      LOGICAL ECHO,SOUFFL
      INTEGER PTETIQ,NUETIQ(MXETIQ),TRACE,LGNETI(MXETIQ),PPILE,KKMODE
C
C     MXID=NOMBRE MAXI D'ID
C     MXVAL=TAILLE DE LA PILE D'EVALUATION DES EXPRESSIONS
C     MXOPER = TAILLE DE LA PILE DES OPERATEURS
C     ID=NOMS DES IDENTIFICATEURS (12 CARAC)
C     VALID= VALEUR DE L'IDENTIFICATEUR
C           C'EST LE NOMBRE D'ELEMENTS DE L'ID
C
      INTEGER MXVAL,MXID,MXOPER
      PARAMETER(MXID=200,MXVAL=100,MXOPER=50)
      DOUBLE PRECISION VALID(MXID)
      INTEGER NBID
      CHARACTER ID(MXID)*12
C
C
      CHARACTER IDENT*256
      CHARACTER IBUF(256)*1,BUF*256,CSTRNG*256
C
       DOUBLE PRECISION RESULT
       INTEGER TYPEAT,LSTRNG
       LOGICAL STRING,ERRLEC,IDEM,ERRSMT
      INTEGER INISCN
      COMMON /LIB001/ RESULT,VALID,RVAL
     +               ,TYPEAT,LSTRNG
     +               ,STRING,ERRLEC,ERRSMT,IDEM
     +               ,INISCN,NBID
     +               ,PTBUF,TYPVAL,IVAL,SIZDEN,CARLUE
     +               ,ECHO,TRACE,PTETIQ,NUETIQ,LGNETI,SOUFFL,PPILE
     +               ,KKMODE
      COMMON /LIB002/ ID, IBUF,BUF,IDENT,CSTRNG
C     FIN DES COMMON  DU FORMAT LIBRE
C ----------------------------------------
C //////////////////////////////////////////////////////////////////////
      COMMON /FONLC / LCI,LCR,LCL,LCC,LCD,LCOPN,LCOPT,LCSYM,LCEXP,LCIDN
      COMMON /FONLM / LMI,LMR,LML,LMC,LMD,LMOPN,LMOPT,LMSYM,LMEXP,LMIDN
C
C SR = VALEUR DE LA VARIABLE
      IF (CITEM.EQ.'PI') THEN
         SR = 3.141592653
      ELSE
         CALL LIBDCL(CITEM,IVALID,IRES)
         IF (IRES.NE.0) THEN
            NBID = NBID - 1
            ICODE = 33
            RETURN
         END IF
         SR = VALID(IVALID)
      END IF
C
C STOCKAGE DE SR DANS MR
      DO 210 I = 1,LCR
         IF (MR(I).EQ.SR) THEN
            IALLOC = I
            GOTO 500
         END IF
  210 CONTINUE
      LCR = LCR + 1
      IF (LCR.GT.LMR-LMOPN) THEN
         ICODE = 33
         RETURN
      END IF
      MR(LCR) = SR
      IALLOC = LCR
C
  500 CALL FONAIT(32 000 + IALLOC,MEXP,MOPN,ICODE)
      END
