C
C This file is issued from the MODULEF library, but has been 
C subsequently modified
C
      SUBROUTINE FONAUT(TITEM,LITEM,NTYPE)
C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C           S.P. FONAUT          (FONCTIONS INTERPRETEES)
C           -----------
C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C BUT :
C    CET AUTOMATE RETOURNE LA LONGUEUR ET LE TYPE D'UNE CSTE NUMERIQUE
C
C PARAMETRES D ENTREE :
C    TITEM    : TABLEAU DE CARACTERES CONTENANT UNE CONSTANTE NUMERIQUE
C               SUIVIE D'UN CARACTERE NE POUVANT APPARTENIR A CETTE CSTE
C
C PARAMETRES DE SORTIE :
C    LITEM    : LONGUEUR DE LA CONSTANTE NUMERIQUE RECONNUE
C    NTYPE    : TYPE DE LA CONSTANTE NUMERIQUE :
C                  1 CHAINE VIDE
C                  2 ENTIER
C                  3 REEL SANS EXPOSANT
C                  4 REEL SIMPLE PRECISION
C                  5 REEL DOUBLE PRECISION
C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C PROGRAMMEUR : PATRICK LAUG ; INRIA (3) 954 90 20 POSTE 508
C ......................................................................
      CHARACTER*1 TITEM(*)
      DIMENSION METAT(10,5)
      DATA METAT /2, 2, 3, 4, 5, 2, 4, 5, 4, 5,
     +            6, 0, 0, 0, 0, 0, 9,10, 0, 0,
     +            3, 3, 0, 0, 0, 3, 0, 0, 0, 0,
     +            0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
     +            0, 8, 8, 0, 0, 0, 0, 0, 0, 0/
C
C INITIALISATION D'UN AUTOMATE A 10 ETATS :
C   1 CHAINE VIDE
C   6 CHAINE VIDE SUIVIE DE + OU -
C   2 ENTIER
C   3 REEL SANS EXPOSANT
C   7 REEL SANS EXPOSANT SUIVI DE E
C   9 REEL SANS EXPOSANT SUIVI DE E+ OU E-
C   4 REEL SIMPLE PRECISION
C   8 REEL SANS EXPOSANT SUIVI DE D
C  10 REEL SANS EXPOSANT SUIVI DE D+ OU D-
C   5 REEL DOUBLE PRECISION
      IETAT = 1
C
C CODAGE DU CARACTERE RENCONTRE :
C 1 CHIFFRE    2 + -    3 .    4 E    5 D
      IITEM  = 0
  100 IITEM  = IITEM + 1
      IETATS = IETAT
      NCODC  = INDEX('0123456789+-.ED', TITEM(IITEM))
      IF (NCODC.EQ.0) GOTO 900
      NCODC = NCODC - 10
      IF (NCODC.EQ.1) NCODC = 2
      IF (NCODC.LE.0) NCODC = 1
C
C APPEL DE L'AUTOMATE
      IETAT = METAT(IETAT,NCODC)
      IF (IETAT.NE.0) GOTO 100
C
C RENCONTRE D'UN CARACTERE REJETE PAR L'AUTOMATE
  900 IF (IETATS.LE.5) THEN
         LITEM = IITEM - 1
         NTYPE = IETATS
      ELSE IF (IETATS.EQ.6) THEN
         LITEM = 0
         NTYPE = 1
      ELSE IF (IETATS.LE.8) THEN
         LITEM = IITEM - 2
         NTYPE = 3
      ELSE
         LITEM = IITEM - 3
         NTYPE = 3
      END IF
      END
