      subroutine cd01e(in,jn,kn,ln,a,esp1)
      IMPLICIT REAL*8(A-H,O-X,Z),LOGICAL*1 (Y)
      parameter(maxsym=8,maxorbcas=16)
      include 'maxorb.prm'
c
c    |-*-*-*-*-*-*-*-|-*-*-*-*-*-*-*-|-*-*-*-*-*-*-*-|-*-*-*-*-*-*-*-|
c    |                      esp1     |(iadrv)|       | |
c                                                     (ysgn)
c
      common/dim/iadri ; integer(8) iadri
      common /cs/ noac,nelac,numac(maxorbcas),itype(maxorb),is0,ms2
      common /icd1/ispin(2)
      common/sgn/ksgn(maxorb+maxorb),isgn0,intsgn
      common/sy3/itorbi(maxorb),isbrot(maxorb),itorbc(maxorb)
     *,itorbs(maxorb)
      dimension esp1(iadri*3)
      character*1 syspin
      common/sysp1/syspin
      common/test/itest(100)
      common/g2/lg2,ig2,lg2p,ig2p,lg2m,ig2m,ng2,yg2,yga2
      yw=.false.
      yw1=.false.
c
c---------------------------------------------------
c      integrales avec echange
c---------------------------------------------------
c
      if(itest(59).eq.3) then
         if(in.ne.kn.and.(itype(in).ne.2.or.itype(kn).ne.2))return
         if(jn.ne.ln.and.(itype(jn).ne.2.or.itype(ln).ne.2))return
      endif
c___tous les spins sont egaux : il y a des conditions d'inegalite
      if(in.eq.jn) return
      if(kn.eq.ln) return
      if(jn.eq.kn) return
      if(yga2) then
c         print*,'CD01E',in,jn,kn,ln
c         if(in.eq.kn.or.jn.eq.ln.or.in.eq.ln) return
      endif
c
c--   changement de signe pour les int <ijil> si i est inactive
c      print*,'in,jn,kn,ln',in,jn,kn,ln
c      print*,'a entree',a
c      if(in.eq.kn.and.itype(in).eq.1) a=-a
c      if(jn.eq.ln.and.itype(jn).eq.1) a=-a
c--   changement de signe pour les int <ijil> si i est entre j et l
c      print*,'a 2',a
      if(in.eq.kn.and.
     *(isbrot(ln)-isbrot(in))*(isbrot(jn)-isbrot(in)).lt.0) a=-a
      if(jn.eq.ln.and.
     *(isbrot(kn)-isbrot(jn))*(isbrot(in)-isbrot(jn)).lt.0) a=-a
c      print*,'a 3',a
c
      if(syspin.eq.'0') then
         ideb=0
      else
         ideb=2
      endif
      do ispint=ideb,2,2
         if(ispint.eq.0) then
            ispin(1)=-1
            ispin(2)=-1
         else
            ispin(1)=1
            ispin(2)=1
         endif
c---------integrale avec echange
         intsgn=1
         if(yw1)write(6,'(a20,4i4,f12.8)')
     *   'int avec echange ',ln,kn,jn,in,a
         if(yga2) a=1.d0
         call cd02r(ln,kn,jn,in,a,esp1)
         if(yga2) then
            if(ispint.eq.0) then
               call disin1(lg2m,ig2m,58,ln,kn,jn,in,a,3)
            else
               call disin1(lg2p,ig2p,57,ln,kn,jn,in,a,2)
            endif
         endif
      enddo
      return
      end
