      SUBROUTINE LIVAL(CBIDON,LBID,IVAL,BIDON,ICONTR,NDSEL,IOPT)
      INCLUDE 'com_options.f'
      CHARACTER*(*) CBIDON
      CHARACTER*128 CBID
      LOGICAL*4     LA
      INTEGER       IBID(2)
c
c attention, bidon est en fait iclas(7,ncmax). passe en double, il
c n'autorise pas plus de 3 valeurs par noeud ou cellule. a revoir
c si on met les contraintes...
c
ccc Pourquoi des doubles ??? 11/99
ccc      REAL*8 BIDON(*)
      REAL*4 BIDON(*)
C
      IF (I2D.EQ.0) THEN
        NDIM=3
      ELSE
        NDIM=2
      ENDIF
      ICONTR = 1
      IF (IOPT.NE.0) GOTO 1001
      LBID = 0
 999  IF (LONISO.GT.0.AND.NOM_ISO(1:1).NE.'$') THEN
        CBIDON = NOM_ISO(1:LONISO)
        LBID = LONISO
      ELSEIF(LONVIT.GT.0) THEN
        CBIDON = NOM_VIT(1:LONVIT)
        LBID = LONVIT
      ELSE
        CBIDON = NOM_FICH(1:LONG)
        LBID = LONG
      ENDIF
 1000 IF (ILANG.EQ.0) THEN
        CALL BROWSFICH(
     &'Nom du fichier de valeurs (scalaire ou vectoriel) ?'//char(0)
     &       ,51,CBID,0,CBIDON,LBID,IRETOUR)
      ELSE
        CALL BROWSFICH(
     &       'Name of the data file (scalar or vector) ?'//char(0)
     &       ,42,CBID,0,CBIDON,LBID,IRETOUR)
      ENDIF
CJTK
C
C On laisse ca pour les HP715 qui font chier avec /tmp
C
      IF (IRETOUR.EQ.-9999) THEN
        IF (ILANG.EQ.0) THEN
          CALL LIFICHTAB(
     &         'Nom du fichier de valeurs (scalaire ou vect.) ?'
     &         ,0,CBIDON,LBID,0)
        ELSE
          CALL LIFICHTAB('Name of the data file (scalar or vector) ?'
     &         ,0,CBIDON,LBID,0)
        ENDIF
        IF (LBID.LT.0) THEN
          IVAL = 9999
          RETURN
        ENDIF
      ELSE
        IF (IRETOUR.LT.0) THEN
          IVAL = 9999
          RETURN
        ENDIF
      ENDIF
CJTK
      GOTO 3000
 1001 INQUIRE(FILE=CBIDON(1:LBID),EXIST=LA)
      IF (.NOT.LA) THEN
        IF (ILANG.EQ.0) THEN
          PRINT*,'---> On n''a pas trouvé ',CBIDON(1:LBID)
        ELSE
          PRINT*,'---> I did not find ',CBIDON(1:LBID)
        ENDIF
        IF (IOPT.NE.0) THEN
          IVAL = 9999
          IOPT = -1
          RETURN
        ENDIF
        IF (ILANG.EQ.0) THEN
          PRINT*,
     &'---> Pour voir la liste des fichiers, tapez <esc> puis <return>'
        ELSE
          PRINT*,
     &'---> To display the file list, type <esc> then <return>'
        ENDIF
        GOTO 1000
      ENDIF
 3000 IF (LBID.GT.4) THEN
        IF (CBIDON(LBID-3:LBID).EQ.'.for') THEN
          IVAL = -1
          OPEN(2,FILE=CBIDON(1:LBID),STATUS='OLD',IOSTAT=IERR)
          IF (IERR.NE.0) GOTO 2001
          RETURN
        ENDIF
        IF (LBID.GT.6) THEN
          IF (CBIDON(LBID-5:LBID).EQ.'.force') THEN
            IVAL = -1
            OPEN(2,FILE=CBIDON(1:LBID),STATUS='OLD',IOSTAT=IERR)
            IF (IERR.NE.0) GOTO 2001
            RETURN
          ENDIF
        ENDIF
        IF (LBID.GT.7) THEN
          IF (CBIDON(LBID-6:LBID).EQ.'.forces') THEN
            IVAL = -1
            OPEN(2,FILE=CBIDON(1:LBID),STATUS='OLD',IOSTAT=IERR)
            IF (IERR.NE.0) GOTO 2001
            RETURN
          ENDIF
          IF (CBIDON(LBID-6:LBID).EQ.'.depimp') THEN
            IVAL = -1
            OPEN(2,FILE=CBIDON(1:LBID),STATUS='OLD',IOSTAT=IERR)
            IF (IERR.NE.0) GOTO 2001
            RETURN
          ENDIF
          IF (CBIDON(LBID-6:LBID).EQ.'.errdep') THEN
            IVAL = -1
            OPEN(2,FILE=CBIDON(1:LBID),STATUS='OLD',IOSTAT=IERR)
            IF (IERR.NE.0) GOTO 2001
            RETURN
          ENDIF
        ENDIF
        IF (LBID.GT.8) THEN
          IF (CBIDON(LBID-7:LBID).EQ.'.depcont') THEN
            IVAL = -1
            OPEN(2,FILE=CBIDON(1:LBID),STATUS='OLD',IOSTAT=IERR)
            IF (IERR.NE.0) GOTO 2001
            RETURN
          ENDIF
        ENDIF
        IF (LBID.GT.8) THEN
          IF (CBIDON(LBID-7:LBID-2).EQ.'.stres'
     &    .AND.(CBIDON(LBID-1:LBID).EQ.'12'
     &      .OR.CBIDON(LBID-1:LBID).EQ.'31')) THEN
            ICONTR = -1
          ENDIF
        ENDIF
      ENDIF
      CBID = CBIDON(1:LBID)
      IF (ISTDOUT.EQ.0) THEN
        CALL testtypebin(2,CBID(1:LBID)//CHAR(0),8,IARCH,1-2*ILANG)
      ELSE
        CALL testtypebin(2,CBID(1:LBID)//CHAR(0),8,IARCH,0)
      ENDIF
      IF (IARCH.LT.0) THEN
        OPEN(2,FILE=CBID(1:LBID),STATUS='OLD',IOSTAT=IERR)
        IF (IERR.NE.0) GOTO 2001
        CALL LITITRE(2,N,IERR)
        IF (IERR.NE.0) THEN
 2000     CLOSE(2)
 2001     IF (ILANG.EQ.0) THEN
            PRINT*,'*** Fichier inadéquat "'//CBID(1:LBID)//'"'
            PRINT*,
     &'---> Pour voir la liste des fichiers, tapez <esc> puis <return>'
          ELSE
            PRINT*,'*** Bad file "'//CBID(1:LBID)//'"'
            PRINT*,
     &'---> To display the file list, type <esc> then <return>'
          ENDIF
          CALL FSALRM()
          GOTO 999
        ENDIF
        IVAL = 0
        DO I=1,MAX(NDIM+1,NDSEL)
          CALL LITITRE(2,N,IERR)
          READ(2,*,ERR=4000,END=4000) (BIDON(K),K=1,N*I)
          IVAL = IVAL+1
        ENDDO
 4000   IF (IVAL.EQ.0) GOTO 2000
        CBID = CBIDON(1:LBID)
        IF (IVAL.LT.NDIM) THEN
          IVAL = 1
          IF (ISTDOUT.EQ.0) THEN
            IF (ILANG.EQ.0) THEN
              PRINT 100,CBID(1:LBID)//':'//CHAR(9)//
     &             'valeurs scalaires'//CHAR(0)
            ELSE
              PRINT 100,CBID(1:LBID),':'//CHAR(9)//
     &             'scalar field'//CHAR(0)
            ENDIF
          ENDIF
        ELSEIF(IVAL.EQ.NDIM) THEN
          IVAL = 2
          IF (ISTDOUT.EQ.0) THEN
            IF (ILANG.EQ.0) THEN
              PRINT 100,CBID(1:LBID)//':'//CHAR(9)//
     &             'valeurs vectorielles'//CHAR(0)
            ELSE
              PRINT 100,CBID(1:LBID)//':'//CHAR(9)//
     &             'vector field'//CHAR(0)
            ENDIF
          ENDIF
        ELSEIF(IVAL.EQ.NDSEL) THEN
          IVAL = 4
          IF (ISTDOUT.EQ.0) THEN
            IF (ILANG.EQ.0) THEN
              PRINT 100,CBID(1:LBID)//':'//CHAR(9)//
     &             'valeurs discontinues par élément,'//CHAR(0)
            ELSE
              PRINT 100,CBID(1:LBID)//':'//CHAR(9)//
     &             'piecewise discontinuous datas,'//CHAR(0)
            ENDIF
          ENDIF
        ELSE
          IVAL = 3
          IF (ISTDOUT.EQ.0) THEN
            IF (ILANG.EQ.0) THEN
              PRINT 100,CBID(1:LBID)//':'//CHAR(9)//
     &             'contraintes principales'//CHAR(0)
            ELSE
              PRINT 100,CBID(1:LBID)//':'//CHAR(9)//
     &             'principal stresses'//CHAR(0)
            ENDIF
          ENDIF
        ENDIF
Cfj        IF (ISTDOUT.EQ.0) THEN
Cfj          IF (ILANG.EQ.0) THEN
Cfj            PRINT*,'Fichier ASCII'
Cfj          ELSE
Cfj            PRINT*,'ASCII file'
Cfj          ENDIF
Cfj        ENDIF
      ELSE
        IF (IARCH.EQ.1) THEN
          CBID = CBIDON(1:LBID)
          CALL ouvrebin(2,CBID(1:LBID)//CHAR(0),0,IRC)
          CALL litrecbin(2,IBID,LLL,0)
          IF (LLL.NE.8) THEN
            CLOSE(2)
            GOTO 2000
          ENDIF
          IVAL = IBID(2)
        ELSE
          OPEN(2,FILE=CBIDON(1:LBID),STATUS='OLD',FORM='UNFORMATTED'
     &        ,IOSTAT=IERR)
          IF (IERR.NE.0) GOTO 2001
          READ(2) NN,IVAL
        ENDIF
        IF (IVAL.EQ.1) THEN
          IF (ISTDOUT.EQ.0) THEN
            IF (ILANG.EQ.0) THEN
              PRINT 100,CBID(1:LBID)//':'//CHAR(9)//
     &             'valeurs scalaires (binaire)'//CHAR(0)
            ELSE
              PRINT 100,CBID(1:LBID),':'//CHAR(9)//
     &             'scalar field (binary)'//CHAR(0)
            ENDIF
          ENDIF
        ELSEIF(IVAL.EQ.NDIM) THEN
          IVAL = 2
          IF (ISTDOUT.EQ.0) THEN
            IF (ILANG.EQ.0) THEN
              PRINT 100,CBID(1:LBID)//':'//CHAR(9)//
     &             'valeurs vectorielles (binaire)'//CHAR(0)
            ELSE
              PRINT 100,CBID(1:LBID)//':'//CHAR(9)//
     &             'vector field (binary)'//CHAR(0)
            ENDIF
          ENDIF
        ELSE
          GOTO 2000
        ENDIF
        IF (IARCH.EQ.1) THEN
          IF (ISTDOUT.EQ.0) THEN
            IF (ILANG.EQ.0) THEN
              PRINT 100,'(autre architecture)'
            ELSE
              PRINT 100,'(another architecture)'
            ENDIF
          ENDIF
Cfj        ELSE
Cfj          IF (ISTDOUT.EQ.0) THEN
Cfj            IF (ILANG.EQ.0) THEN
Cfj              PRINT*,'Fichier binaire'
Cfj            ELSE
Cfj              PRINT*,'Binary file'
Cfj            ENDIF
Cfj          ENDIF
        ENDIF
      ENDIF
      IF (IARCH.EQ.1) THEN
        CLOSE(2)
        CALL ouvrebin(2,CBID(1:LBID)//CHAR(0),0,IRC)
      ELSE
        REWIND(2)
      ENDIF
C
 100  FORMAT(A,$)
      END

