      program ADD_LABEL
      use mod_lirorb
!     
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!     Ajout de labels a la fin d'un fichier d'orbitales
!     fich1 : fichier de depart sans labels
!     fich2 : fichier de sortie avec labels
!     fich_ref : fichier ou sont pris les labels
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
      IMPLICIT REAL*8(A-H,O-X,Z),logical*1(y)
      character*80 fich_ref,fich1,fich2,aa
      character*1280 namel
      character(18),allocatable :: label(:)
      dimension isym(8)
      integer eof
      logical numeros
      character(1) sym
      character(3) orb
      integer frozen(8),inac(8),act(8)
      numeros=.false.
      frozen=0
      inac=0
      act=0
      call lecnam('&ADD_LABEL ',namel,5,ierr,1)
      call namela(namel,FICH1,'FICH1')
      call namela(namel,FICH2,'FICH2')
      call namela(namel,FICH_REF,'FICH_REF')
      call namell(namel,NUMEROS,'NUMEROS',4)
      call nameli(namel,FROZEN,'FROZEN',4)
      call nameli(namel,INAC,'INAC',4)
      call nameli(namel,ACT,'ACT',4)
      print*,' '
      print*,'*******************************************************'
      print*,'======================================================='
      print*,'                       ADD_LABEL'
      print*,'======================================================='
      print*,'*******************************************************'
      print*,' '
      if(.not.numeros)
     *print'(2a)',' les labels sont pris dans ',trim(fich_ref)
      print'(2a)',' FICHIER A corriger        ',trim(fich1)
      print'(2a)',' FICHIER corrige           ',trim(fich2)
      print*,' '
      open(1,file=fich1,status='old')
      if(fich1.ne.fich2.and.numeros)
     *open(2,file=fich2,status='unknown')
      if(.not.numeros) open(3,file=fich_ref,status='old')
!
!     on verifie que le fichier n'a pas de labels
!
      do
         read(1,'(a80)',iostat=eof) aa
         if(eof/=0) exit
         if(index(aa,'LABELS').ne.0) then
            print*,'le fichier ',trim(fich1),' contient deja des labels'
            stop
         endif
         write(2,'(a)') trim(aa)
      enddo

      if(numeros) then
!
!     on cherche le nombre d'orbitales
!
         call lirorb(fich1,norb,nsym,isym,51,54,ifillab=1,ifiloc=2)
         allocate(label(norb))
         ii=0
         ii0=1
         rewind 1
         do is=1,nsym
            write(sym,'(i1)') is
            do i=1,isym(is)
               ii=ii+1
               write(orb,'(i3)') i
               orb=adjustl(orb)
               label(ii)='SYM_'//sym//'_O'//trim(orb)
               if(frozen(is)>0) then
                  frozen(is)=frozen(is)-1
                  label(ii)='G_'//trim(label(ii))
               endif
               if(inac(is)>0) then
                  inac(is)=inac(is)-1
               else
                  if(act(is)>0) then
                     act(is)=act(is)-1
                     label(ii)='A_'//trim(label(ii))
                  endif
               endif
            enddo
            write(1) label(ii0:ii)
            ii0=ii+1
         enddo
         rewind 1
         call ecriorb('* ADD_LABEL',fich2,nsym,isym,
     *   51,54,ifillab=1,ifiloc=2)
      else
!
!     on lit les labels
!
         y=.false.
         do
            read(3,'(a80)',iostat=eof) aa
            if(eof/=0) then
               if(y) exit
               print*,'le fichier ',trim(fich_ref),
     *         ' ne contient pas de labels'
               stop
            endif
            if(index(aa,'LABELS').ne.0) y=.true.
            if(y)write(2,'(a)') trim(aa)
         enddo
      endif
      end
