      subroutine lis(ifil0,s,symtot,norb)
!
!-------------------------------------------------------------------
! en entree :
! un fichier Mono ou Monoloc deja ouvert sur l'unite ifil0
! ifil0 : numero de file (<0 pour ONEINT, <100 pour OVERLAP, sinon
!         Atomic One-Electron Integrals
!         si ifil0<0, le programme ouvre -ifil0
!         (on peut donner n'importe quelle valeur pour ifil0)
! symtot : 'SYM' ou 'TOTAL', selon comme on veut lire la matrice s
! (si le fichier a ete cree par ecriS, c'est equivalent)
! norb
!
! en sortie :
! s     : matrice carree a lire (deja dimensionnee a l'appel,
!         s(norb,norb))
!-------------------------------------------------------------------
!
      character(*) symtot
      character(80) aa
      character(7) :: mat1
      double precision s(norb,norb)
      double precision,allocatable,dimension(:) :: ajk
      dimension isym(8)
      logical yw
      yw=.false.
      s=0.d0
!
! Recouvrement ou Hmono ?
!
!     ifil<0  =>  on lit Hmono
!     ifil>0  =>  on lit la mat de recouvrement
      if(ifil0<0) then
         mat1='ONEINT'
         ifil=-ifil0
      else if(ifil0<100) then
         mat1='OVERLAP'
         ifil=ifil0
      else
         mat1='AOONEI'
         ifil=ifil0-100
      endif
      if(yw)print*,'mat1',mat1
      if(yw)print*,'symtot',symtot
      if(yw)print*,'ifil',ifil
!
!     lecture de la matrice de recouvrement ou de la matrice Hmono
!
      if(symtot=='SYM') then
         rewind ifil
         read(ifil) aa
         ii=0
         do while (ii==0)
            read(ifil) aa
            read(ifil)
            read(ifil)
            if(yw)print*,'aa',aa
            if(yw)print*,'bb',trim(mat1)//' MATRIX (SYM)'
            ii=index(aa,trim(mat1)//' MATRIX (SYM)')
         enddo
         backspace (ifil)
         backspace (ifil)
         read(ifil) nn,nsym,isym(1:nsym)
         if(yw)print*,'nn,nsym',nn,nsym
         allocate (ajk(nn))
         read(ifil) ajk
         ij=0
         do is=1,nsym
            do i=1,isym(is)
               i1=i+sum(isym(1:is-1))
               do j=1,i
                  j1=j+sum(isym(1:is-1))
                  ij=ij+1
                  s(i1,j1)=ajk(ij)
                  s(j1,i1)=ajk(ij)
               enddo
            enddo
         enddo
         deallocate (ajk)
!         if(yw) then
!            print*,'s dans ls (dans l''ordre des symetries)'
!            call script(s,norb,norb,norb,norb)
!         endif
      else if (symtot=='TOTAL') then
         rewind ifil
         read(ifil) aa
         ii=0
         do while (ii==0)
            read(ifil) aa
            read(ifil)
            read(ifil)
            ii=index(aa,'=='//trim(mat1)//' MATRIX (TOTAL)')
         enddo
         backspace (ifil)
         backspace (ifil)
         read(ifil) nn,nsym
         allocate (ajk(nn))
         read(ifil) ajk
         ii=0
         do k=1,norb
            do l=1,k
               ii=ii+1
               s(k,l)=ajk(ii)
               s(l,k)=ajk(ii)
            enddo
         enddo
         deallocate (ajk)
      else
         if(mat1=='OVERLAP') then
            print*,'mauvaise indication pour lire la matrice de'
     *      ,' recouvrement'
         else
            print*,'mauvaise indication pour lire la matrice Hmono'
         endif
         print*,'symtot=',symtot
         stop
      endif
      return
      end
