C
C This file is issued from the MODULEF library, but has been 
C subsequently modified
C
      SUBROUTINE FONERR(IMODE,ICODE)
C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C           S.P. FONERR          (FONCTIONS INTERPRETEES)
C           -----------
C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C BUT :
C     IMPRIMER UN MESSAGE D'ERREUR ET INITIALISER LES LECTURES
C
C PARAMETRES D ENTREE :
C     IMODE   : 1 IMPRESSION DE LA LIGNE ERRONEE, 0 SINON
C     ICODE   : SI ICODE > 0, CODE DE L ERREUR A IMPRIMER EN CLAIR
C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C PROGRAMMEUR : PATRICK LAUG ; INRIA (3) 954 90 20 POSTE 508
C ......................................................................
      PARAMETER (LLIG=257)
      CHARACTER*1 MLIG(LLIG),BLANC(LLIG)
      COMMON /FONLIG/ MLIG
      COMMON /FONNUM/ IDLIG,IFLIG,NITEMS,NBIDEN,IMPLIC
      COMMON /UNITES/ LECTEU,IMPRIM,INTERA,NFNEWS,NFSAUV
C
C IMPRESSION DE LA LIGNE ERRONEE
      IF (IMODE.NE.0 .AND. ICODE.GT.0) THEN
         DO 100 I = 1,LLIG
            IF (MLIG(I) .EQ. '@') THEN
               IFIN = I-1
               GOTO 200
            END IF
  100    CONTINUE
         IFIN = LLIG
  200    WRITE (IMPRIM,*) ' FONERR: ',(MLIG(I),I=1,IFIN)
C
         IF (1.LE.IFLIG .AND. IFLIG.LE.LLIG) THEN
            DO 300 I = 1,IFLIG-1
  300       BLANC(I) = ' '
            BLANC(IFLIG) = '|'
            WRITE (IMPRIM,*) '        ',(BLANC(I),I=1,IFLIG)
         ELSE
            WRITE (IMPRIM,*) ' NUMERO DE COLONNE DE L ERREUR : ',IFLIG
         END IF
         MLIG(1) = '@'
      END IF
C
C POSITIONNEMENT EN DEBUT DE LIGNE POUR FONSUI
      IFLIG   = 1
      MLIG(1) = '@'
      NITEMS  = 40 001
C
C IMPRESSION DU MESSAGE D'ERREUR
      IF (ICODE.LE.0) RETURN
      GOTO (     1,  2,  3,  4,  5,  6,  7,  8,  9,
     +      10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
     +      20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
     +      30, 31, 32, 33, 34, 35, 36, 37, 38, 39), ICODE
      GOTO 800
    1 WRITE (IMPRIM,*) ' FONACS: CONSTANTE INCORRECTE'
      GOTO 900
    2 WRITE (IMPRIM,*) ' FONSPE: NOM DE FONCTION TROP LONG'
      GOTO 900
    3 WRITE (IMPRIM,*) ' FONNRR: LE 3E PARAMETRE NE DOIT PAS ETRE REEL'
      GOTO 900
    4 WRITE (IMPRIM,*) ' FONCID: IDENTIFICATEUR NON TROUVE'
      GOTO 900
    5 WRITE (IMPRIM,*) ' FONCOR: IDENTIFICATEUR NE DESIGNANT PAS',
     +   ' UN SCALAIRE'
      GOTO 900
    6 WRITE (IMPRIM,*) ' FONSPE: TYPE DES CONSTANTES ILLEGAL'
      GOTO 900
    7 WRITE (IMPRIM,*) ' FONCOR: PAS ASSEZ DE PARENTHESES OUVRANTES'
      GOTO 900
    8 WRITE (IMPRIM,*) ' FONCOR: PAS ASSEZ DE PARENTHESES FERMANTES'
      GOTO 900
    9 WRITE (IMPRIM,*) ' FONCOR: DEBORDEMENT PILE DES OPERATEURS'
      GOTO 900
   10 WRITE (IMPRIM,*) ' FONCOR: DEBORDEMENT TABLE DES EXPRESSIONS'
      GOTO 900
   11 WRITE (IMPRIM,*) ' FONCOR: PAS ASSEZ D OPERANDES'
      GOTO 900
   12 WRITE (IMPRIM,*) ' FONCOR: PAS ASSEZ D OPERATEURS'
      GOTO 900
   13 WRITE (IMPRIM,*) ' FON2RR,FON3RR: EXECUTION FONCTION ERRONEE'
      GOTO 900
   14 WRITE (IMPRIM,*) ' FONINI: LONGUEUR FOURNIE TROP FAIBLE'
      GOTO 900
   15 WRITE (IMPRIM,*) ' FONINT: INSTRUCTION INCONNUE'
      GOTO 900
   16 WRITE (IMPRIM,*) ' FONINT: DEBORDEMENT DE LA PILE DES OPERANDES'
      GOTO 900
   17 WRITE (IMPRIM,*) ' FONOP1: INSTRUCTION INCORRECTE'
      GOTO 900
   18 WRITE (IMPRIM,*) ' FONOP2: INSTRUCTION INCORRECTE'
      GOTO 900
   19 WRITE (IMPRIM,*) ' FONSPE: NOM DE L EXPRESSION INCORRECT'
      GOTO 900
   20 WRITE (IMPRIM,*) ' FONSPE: NOM DE L EXPRESSION NON SUIVI DE ('
      GOTO 900
   21 WRITE (IMPRIM,*) ' FONSPE: NOM DE PARAMETRE FORMEL INCORRECT'
      GOTO 900
   22 WRITE (IMPRIM,*) ' FONAID: IDENTIFICATEUR DEJA EXISTANT'
      GOTO 900
   23 WRITE (IMPRIM,*) ' FONSPE: PARAMETRE FORMEL NON SUIVI DE ,'
      GOTO 900
   24 WRITE (IMPRIM,*) ' FONSPE: NOM DE PARAMETRE FORMEL INCORRECT'
      GOTO 900
   25 WRITE (IMPRIM,*) ' FONSPE: UN = DOIT SUIVRE LA LISTE DE',
     +   ' PARAMETRES'
      GOTO 900
   26 WRITE (IMPRIM,*) ' FONTRO: IDENTIFICATEUR NE DESIGNANT PAS',
     +   ' UNE FONCTION'
      GOTO 900
   27 WRITE (IMPRIM,*) ' FONNRR: LE 1E PARAMETRE NE DOIT PAS ETRE REEL'
      GOTO 900
   28 WRITE (IMPRIM,*) ' FONNRR: LE 2E PARAMETRE NE DOIT PAS ETRE REEL'
      GOTO 900
   29 WRITE (IMPRIM,*) ' FONNRR: NOMBRE DE PARAMETRES INCORRECT'
      GOTO 900
   30 WRITE (IMPRIM,*) ' FONNRR: RESULTAT NON REEL'
      GOTO 900
   31 WRITE (IMPRIM,*) ' FONAID: DEBORDEMENT TABLE DES IDENTIFICATEURS'
      GOTO 900
   32 WRITE (IMPRIM,*) ' FONSPE: TYPE DES CONSTANTES NON SUIVI DE ;'
      GOTO 900
   33 WRITE (IMPRIM,*) ' FONVAR: VARIABLE INCONNUE OU DEBORDEMENT'
      GOTO 900
   34 CONTINUE
   35 CONTINUE
   36 CONTINUE
   37 CONTINUE
   38 CONTINUE
   39 CONTINUE
C
  800 WRITE (IMPRIM,*) ' FONERR: CODE D ERREUR INCONNU ',ICODE
  900 RETURN
      END
