      subroutine bzap(dat,jz,nadd,mode,fzap)

      parameter (NMAX=1024*1024)
      parameter (NMAXH=NMAX)
      real dat(jz),x(NMAX)
      real fzap(200)
      complex c(NMAX)
      equivalence (x,c)

      xn=log(float(jz))/log(2.0)
      n=xn
      if((xn-n).gt.0.) n=n+1
      nfft=2**n
      nh=nfft/nadd
      nq=nh/2
      do i=1,jz
         x(i)=dat(i)
      enddo
      if(nfft.gt.jz) call zero(x(jz+1),nfft-jz)

      call xfft(x,nfft)

C  This is a kludge:
      df=11025.0/(nadd*nfft)
      if(mode.eq.2) df=11025.0/(2*nadd*nfft)

      tol=10.
      itol=nint(2.0/df)
      do izap=1,200
         if(fzap(izap).eq.0.0) goto 10
         ia=(fzap(izap)-tol)/df 
         ib=(fzap(izap)+tol)/df
         smax=0.
         ipk=0 !Shut up compiler warnings. -db
         do i=ia+1,ib+1
            s=real(c(i))**2 + aimag(c(i))**2
            if(s.gt.smax) then
               smax=s
               ipk=i
            endif
         enddo
         fzap(izap)=df*(ipk-1)

         do i=ipk-itol,ipk+itol
            c(i)=0.
         enddo
      enddo

 10   ia=70/df
      do i=1,ia
         c(i)=0.
      enddo
      ia=2700.0/df
      do i=ia,nq+1
         c(i)=0.
      enddo
      do i=2,nq
         c(nh+2-i)=conjg(c(i))
      enddo

      call four2a(c,nh,1,1,-1)
      fac=1.0/nfft
      do i=1,jz/nadd
         dat(i)=fac*x(i)
      enddo

      return
      end
