      subroutine lifichtab(question,iopt,fich,long,ilang)
c
      character*12  ident
      character*128 fich
      character*256 ligne
      character*(*) question
      logical la
      integer timec
c
 1    call print_moi_ca(question,iopt)
c
      read(*,'(a)') ligne
      ideb=0
 10   ideb=ideb+1
      if (ligne(ideb:ideb).eq.' '.and.ideb.lt.256) goto 10
      if (ideb.eq.256) then
        long=-1
        return
      endif
c
      ifin = ideb
 20   ifin=ifin+1
      if (ligne(ifin:ifin).ne.' '.and.ifin.lt.256) goto 20
      if (ligne(ifin:ifin).eq.' ') ifin = ifin-1
c
      long = ifin+1-ideb
      if (long.gt.128) then
        if (ilang.eq.0) then
          print*,
     &  'REPONSE TROP LONGUE (',long,' CARACTERES) - TRONQUEE A 128'
        else
          print*,
     &  'TOO LONG ANSWER (',long,' CHARACTERS) - TRUNCATED TO 128'
        endif
        long=128
      endif
c
      fich(1:long) = ligne(ideb:ifin)
      if (long.lt.128) then
        do i=long+1,128
          fich(i:i) = ' '
        enddo
      endif
c
      ISTAR = 0
      IF (fich(long:long).EQ.CHAR(9)
     &.OR.fich(long:long).EQ.CHAR(27)) THEN
        ISTAR = 1
        fich(long:long) = '*'
      ELSE
        DO I=1,long
          IF (fich(I:I).EQ.'*'.OR.fich(I:I).EQ.'?') ISTAR = 1
        ENDDO
      ENDIF
      IF (ISTAR.EQ.1) THEN
        IF (long.EQ.1) THEN
          if (ilang.eq.0) then
            PRINT*,'Les fichiers présents :'
          else
            PRINT*,'Files in the current dir:'
          endif
          CALL EXEC('ls')
        ELSE
          call premier_libre(libre)
          if (libre.le.0) goto 1
          letemps = timec()
          write(ident,'(I12.12)') letemps
          CALL EXEC('ls '//fich(1:long)//' > /tmp/liste'//ident)
          OPEN(libre,FILE='/tmp/liste'//ident,IOSTAT=IERR)
          IF (IERR.EQ.0) THEN
            ILU = 0
            READ(libre,'(A)',END=1002,ERR=1002) ligne
            ILU = 1
            READ(libre,'(A)',END=1002,ERR=1002) ligne
            ILU = 2
 1002       IF (ILU.EQ.1) THEN
              CALL ENLEVE_TOUS_BLANCS(ligne,ll,256)
              fich(1:ll) = ligne(1:ll)
              long = ll
              call lifich(fich(1:ll)//'  (confirmation <return>)'
     &                   ,0,ligne,lonli)
              if (lonli.ne.0) goto 1
            ELSEIF(ILU.EQ.2) THEN
              CALL EXEC('cat /tmp/liste'//ident)
            ELSE
              if (ilang.eq.0) then
                PRINT*,'*** pas de fichiers '//fich(1:long)
              else
                PRINT*,'*** no files '//fich(1:long)
              endif
            ENDIF
            CLOSE(libre)
            CALL EXEC('/bin/rm -f /tmp/liste'//ident)
            IF (ILU.EQ.1) THEN
              GOTO 1001
            ELSE
              GOTO 1
            ENDIF
          ELSE
            GOTO 1
          ENDIF
        ENDIF
        PRINT*,' '
        GOTO 1
      ENDIF
 1001 INQUIRE(FILE=fich(1:long),EXIST=LA)
      IF (.NOT.LA) THEN
        IF (ilang.eq.0) then
          PRINT*,'---> On n''a pas trouvé ',fich(1:long)
          PRINT*,
     &'---> Pour voir la liste des fichiers, tapez <esc> puis <return>'
        else
          PRINT*,'---> I didn''t find ',fich(1:long)
          PRINT*,
     &'---> To see the file list, type <esc> then <return>'
        endif
        GOTO 1
      ENDIF
c
      if (iopt.gt.0) write(iopt,'(a)') fich(1:long)
      end
