      module mod_lecnam
         interface nameli
            module procedure nameli1,nameli2,nameli4t,nameli8
         end interface
         contains
      SUBROUTINE lecnam(NAME,NAMEL,IUNIT,ierr,iecr)
      IMPLICIT REAL(8) (A-H,O-X,Z),LOGICAL(1)(Y)
!
!***********************************************************************
!   LECTURE DE LA NAMELIST DE NOM NAME. ON RANGE TOUTES LES DONNEES
!   DANS LA VARIABLE NAMEL.
!   IUNIT C'EST L'UNITE D'OU LES DONNES SONT LUS
!   Occorre fare attenzione al caso in cui due o piu' nomi della
!   namelist siano contenuti l'uno dentro l'altro. Ad esempio se
!   a e ab sono due variabili dello stesso tipo dichiarate in
!   namelist bisogna che il call namel.. per ab preceda il call per a
!   Quindi la regola e': sistemare per prime le variabili i cui nomi
!   sono piu' lunghi !!!!!!!!
!***********************************************************************
!
      character(*) namel
      character(*) NAME
      character(1000) CARTE
      namel=' '
!
! Boucle pour chercher la namelist
      do
         read(5,'(a)',end=1) carte
         carte=adjustl(carte)
         call majnam2(carte)
         i=index(carte,' ')
         if(name/=carte(1:i-1)) cycle
         ifin=0
! boucle pour lire la namelist
         do
!
! On met une virgule en fin de ligne
!
            l=len_trim(carte)
            if(carte(l:l)/='/'.and.carte(l-3:l)=='&END'.and.
     *      carte(l:l)/=',') carte(l+1:l+1)=','
            l=l+1
!
! Debut et fin du positionnement dans namel, positionnement
            ideb=ifin+1
            ifin=ifin+l
            namel(ideb:ifin)=carte(1:l)
            if(carte(l:l)=='/'.or/carte(l-3:l)=='END') return 
            read(5,'(a)',end=2) carte
            carte=adjustl(carte)
            call majnam2(carte)
         enddo
 1       continue
         print*,'namelist ',trim(name),' absente'
         stop
 2       continue
         print*,'namelist ',trim(name),' non terminee par / ou &end'
         stop
      enddo
      return
      end subroutine
       subroutine majnam(a2,l)
      IMPLICIT REAL(8) (A-H,O-X,Z),LOGICAL(1)(Y)
      character(1) a2(l)
      dimension ichang(0:80)
      yw=.false.
      ichang(0)=1
      do k=1,l
         if(a2(k).eq.'''') then
            ichang(k)=-ichang(k-1)
         else
            ichang(k)=ichang(k-1)
         endif
      enddo
      if(yw)       write(6,'('' ichang'',20i2)') (ichang(k),k=1,20)
      do k=1,l
         if(ichang(k).eq.1) call maj(a2(k),1)
      enddo
      return
      end subroutine
       subroutine majnam2(a2)
      IMPLICIT REAL(8) (A-H,O-X,Z),LOGICAL(1)(Y)
      character(*) a2
      integer,allocatable,dimension(:) :: ichang
      yw=.false.
      l=len_trim(a2)
      allocate(ichang(0:l))
      yw=.false.
      ichang(0)=1
      do k=1,l
         if(a2(k:k).eq.'''') then
            ichang(k)=-ichang(k-1)
         else
            ichang(k)=ichang(k-1)
         endif
      enddo
      if(yw)       write(6,'('' ichang'',20i2)') (ichang(k),k=1,20)
      do k=1,l
         if(ichang(k).eq.1) call maj(a2(k:k),1)
      enddo
      deallocate (ichang)
      return
      end subroutine
      
       subroutine maj(a2,l)
      character(1) a2(l)
      do k=1,l
c         write(6,*)'k,ichar',k,ichar(a2(k))
         if(ichar(a2(k)).ge.97.and.ichar(a2(k)).le.122)
     *   a2(k)=char(ichar(a2(k))-32)
      enddo
      return

            module procedure nameli1,nameli2,nameli4t,nameli8
       SUBROUTINE NAMELI1(NAMEL,IBUF,CBUF,ISIZE)
       end subroutine
       SUBROUTINE NAMELI2(NAMEL,IBUF,CBUF,ISIZE)
       end subroutine
       SUBROUTINE NAMELI8(NAMEL,IBUF,CBUF,ISIZE)
       end subroutine
       SUBROUTINE NAMELI4T(NAMEL,IBUF,CBUF,ISIZE)
C
C***********************************************************************
C   LECTURE DES DONNEES DE TYPE ENTIER DANS LE TABLEAU IBUF.
C   CBUF EST LE NOM DU TABLEAU.
C-----------------------------------------------------------------------
C  UN CALL LECNAM(NAME,NAMEL) EST NECESSAIRE AVANT L'APPEL A NAMELI
      IMPLICIT REAL(8) (A-H,O-X,Z),LOGICAL(1)(Y)
      dimension ibuf(*)
      
      print*,'nameli4t'
      
      i=index(namel,trim(cbuf)//'=')
      if(i>0) then
         id=i+index(namel(i+1:),'=')
         if=id+index(namel(id+1),'=')
         if(if==0) if=len_trim(namel)
         if=index(namel(1:if),',',back=.true.)
         j=index(namel(id:if),' ')
         do while (j/=0)
            call repl(namel(id:if,',',' ',yrepl)
         enddo
      endif
      return
      end subroutine
      end module
