subroutine generOL
Use lewis_module
use decode_multip_data
implicit real*8 (a-h,o-x,z),logical*1(y)
!Definition de variables
character(200) :: bond
yw=.false.

!
!Lecture des liaisons et appel des subroutines
!
diff=.TRUE.     !Logical pour definir les orbitales diffuses
occupat=.FALSE. !Logical pour definir les orbitales occupees
ncoeur=0        !Totalise les orbitales de coeur
ndiff =0        !Totalise les orbitales diffuses
!
! Donnees Lewis   Donnees Lewis   Donnees Lewis   Donnees Lewis
!
! C AT1                      -->  coeur 1s de l'atome AT1
! B AT1-AT2                  -->  liaison simple AT1-AT2
! B AT1=AT2                  -->  liaison double AT1-AT2
! B AT1~AT2                  -->  liaison triple AT1-AT2
! DS1 AT1 AT2 [AT3 [AT4]]    -->  Doublet sigma. La direction est
!                                 la somme des vecteurs AT1-AT2, ou
!                                 AT1-ATi
!
!
!
!
!******************************************************************
!
!                 DEBUT DE LA LECTURE DES DONNEES
!
!******************************************************************
!
Do
read(5,'(A)',end=1) bond  !5 est au niveau de nos liaisons
   goto 2
   1 print'(/,a,/)','===no "/" ending list of data after namelist lewis===  STOP';stop
   2 continue
   bond=adjustl(bond)
   if(bond=='/') exit
   if(bond==' '.or.bond(1:1)=='*'.or.bond(1:1)=='!') cycle
   i=index(bond,'!')
   if(i>0) bond(i:)=' '
   print*,' '
   call maj(bond,200)
   long=200
   call suppdb(bond,long)
   nbdata=1

!******************************************************************
! Eventuellement, stop
   if(bond(1:4)=='STOP') stop

!******************************************************************
! Lecture de la donnee 'BOND', donnant la connectivite de la
! molecule
   if(bond(1:4)=='BOND') then
      call connectivite(bond)
      cycle
   endif

   print*,'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'// &
   '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
   print*, 'Travail en cours sur la donnee   ', trim(bond)
!==================================================================
   if (bond(1:5)=='GROUP') then
      call group
      cycle
   end if
!==================================================================
!******************************************************************
! Traitement des donnees multiples (par l'utilisation de "[" et "{")
! Apres l'appel a decode_multip_data1, les nouvelles donnees
! generees a partir de "bond" sont a lire sur ifilr
   call decode_multip_data1(bond)


!******************************************************************
! Transformation de la donnee, si elle est multiple, en plusieurs
! donnees non multiples
   call symbond(nbdata)
!         print*,'nb de donnees apres traitement des donnees'//
!     *   ' multiples'
!         print*,'et generation des donnees equivalentes en '//
!     *   'symetrie',nbdata
!******************************************************************

! On a lu une ligne de donnee, qui a genere nbdata lignes, a cause
! de la generation des donnees multiples ou de la symetrie
! --> donc, maintenant, boucle de 1 a nbdata pour traiter les
! donnees une a une
   do idata=1,nbdata
      prefix_label_OL=' '
      if(yw) print*,'lect ifilr'
      read(ifilr,'(a)') bond
      ! mise en memoire de ce qu'il y a apres ";" dans la donnee
      call fai_suppdata(bond,suppdata)
      ! suppdata est la fin de la donnee, apres ";"
      ! bond a maintenant ete ampute a partir du ";"
      i=index(suppdata,'LABEL=')
      if(i>0) prefix_label_OL=suppdata(i+7:i+7)
      if(prefix_label_OL=='G') then
         if(bond(1:1)=='C') prefix_label_OL='c'
         if(bond(1:1)=='B') prefix_label_OL='o'
         if(bond(1:1)=='V') prefix_label_OL='o'
         if(bond(1:1)=='O') prefix_label_OL='o'
      endif
      only=' '
      i=index(suppdata,'ONLY')
      if(i>0)only=suppdata(i-3:i-1)
!==================================================================
      if(bond(1:2)=='CP') then
         call copy(bond(4:))
         print*,'Gen: '//label_ol_temp(iorb),iorb
!==================================================================
      else if(bond(1:1)=='C') then
         if(prefix_label_OL==' ') prefix_label_OL='C'
         call coeur(bond(3:),prefix_label_OL,2)
         print*,'Gen: '//label_ol_temp(iorb),iorb
         ncoeur=ncoeur+1
!==================================================================
!            else if(bond(1:4)=='ATOM') then
!               if(prefix_label_OL==' ') prefix_label_OL='O'
!               call coeur(bond(6:),prefix_label_OL)
!               print*,'Gen: '//label_ol_temp(iorb),iorb
!==================================================================
      else if(bond(1:1)=='O') then
         if(prefix_label_OL==' ') prefix_label_OL='O'
         call coeur(bond(3:),prefix_label_OL,2)
         print*,'Gen: '//label_ol_temp(iorb),iorb
!==================================================================
      else if(bond(1:2)=='V ') then
         if(prefix_label_OL==' ') prefix_label_OL='O'
         call coeur(bond(3:),prefix_label_OL,0)
         print*,'Gen: '//label_ol_temp(iorb),iorb
!==================================================================
      else if(bond(1:2)=='T ') then
         if(prefix_label_OL==' ') prefix_label_OL='T'
         if(prefix_label_OL=='G') prefix_label_OL='t'
         iorb_old=iorb
         call coeur(bond(3:),prefix_label_OL,0)
         ndiff=ndiff+iorb-iorb_old
         print*,'Gen: '//label_ol_temp(iorb),iorb
!==================================================================
      else if (bond(1:1)=='B') then
         call liaison(bond(3:),prefix_label_OL,dist)
!              do k=1,norb
!                 print*,'label_ol',k,label_ol(k),label_ol_temp(k)
!              endde
!==================================================================
      else if (bond(1:3)=='DS1') then
         if(prefix_label_OL==' ') prefix_label_OL='O'
         if(prefix_label_OL=='G') prefix_label_OL='o'
         call doubletDS1(bond(5:))
               !print'(a,i6,a)','DS1   '//trim(bond(5:)),iorb,' Orb'
         print*,'Gen: '//label_ol_temp(iorb),iorb
!==================================================================
      else if (bond(1:3)=='VP1') then
         if(prefix_label_OL==' ') prefix_label_OL='O'
         if(prefix_label_OL=='G') prefix_label_OL='o'
         call doubletDP1(bond(5:),0)
               !print'(a,i6,a)','VP1   '//trim(bond(5:)),iorb,' Orb'
         print*,'Gen: '//label_ol_temp(iorb),iorb
!==================================================================
      else if (bond(1:3)=='DP1') then
         if(prefix_label_OL==' ') prefix_label_OL='O'
         if(prefix_label_OL=='G') prefix_label_OL='o'
         call doubletDP1(bond(5:),2)
               !print'(a,i6,a)','DP1   '//trim(bond(5:)),iorb,' Orb'
         print*,'Gen: '//label_ol_temp(iorb),iorb
!==================================================================
      else if (bond(1:3)=='D2 ') then
         if(prefix_label_OL==' ') prefix_label_OL='O'
         if(prefix_label_OL=='G') prefix_label_OL='o'
         call doubletD2(bond(4:))
               !print'(a,i6,a)','D2    '//trim(bond(4:)),iorb,' Orb'
         print*,'Gen: '//label_ol_temp(iorb-1),iorb-1
         print*,'Gen: '//label_ol_temp(iorb),iorb
!              do k=1,norb
!                 print*,'label_ol',k,label_ol(k),label_ol_temp(k)
!              enddo
!==================================================================
      else if (bond(1:3)=='D3 ') then
         if(prefix_label_OL==' ') prefix_label_OL='O'
         if(prefix_label_OL=='G') prefix_label_OL='o'
         call doubletD3(bond(4:))
               !print'(a,i6,a)','D3    '//trim(bond(4:)),iorb,' Orb'
         print*,'Gen: '//label_ol_temp(iorb-2),iorb-2
         print*,'Gen: '//label_ol_temp(iorb-1),iorb-1
         print*,'Gen: '//label_ol_temp(iorb),iorb
!==================================================================
      end if
!==================================================================
   enddo
!******************************************************************
   print*,'//////////////////////////////////////////////'// &
   '////////////////////////////////'
   print*,' '
   close(ifilr,status='delete')
   close(ifilw,status='delete')
end do
end
!       subroutine fai_prefix_label_OL(suppdata,prefix_label_OL)
!      character(*) :: suppdata,prefix_label_OL
!      if(index(suppdata,'LABEL=')>0) prefix_label_OL=suppdata(i+7:i+7)
!      if(i==0) then
!         if(prefix_label_OL==' ')prefix_label_OL='O'
!      else
!         prefix_label_OL=suppdata(i+7:i+7)
!      endif
!      end
