program ft8d

! Decode FT8 data read from *.wav files.

  include 'ft8_params.f90'
  character*12 arg
  character infile*80,datetime*13,message*22
  real s(NH1,NHSYM)
  real candidate(3,100)
  integer ihdr(11)
  integer*2 iwave(NMAX)                 !Generated full-length waveform  
  real dd(NMAX)
 
  nargs=iargc()
  if(nargs.lt.3) then
     print*,'Usage:   ft8d MaxIt Norder file1 [file2 ...]'
     print*,'Example  ft8d   40     2   *.wav'
     go to 999
  endif
  call getarg(1,arg)
  read(arg,*) max_iterations
  call getarg(2,arg)
  read(arg,*) norder
  nfiles=nargs-2

  twopi=8.0*atan(1.0)
  fs=12000.0                             !Sample rate
  dt=1.0/fs                              !Sample interval (s)
  tt=NSPS*dt                             !Duration of "itone" symbols (s)
  ts=2*NSPS*dt                           !Duration of OQPSK symbols (s)
  baud=1.0/tt                            !Keying rate (baud)
  txt=NZ*dt                              !Transmission length (s)
  nfa=100.0
  nfb=3000.0
  nfqso=1500.0

  do ifile=1,nfiles
     call getarg(ifile+2,infile)
     open(10,file=infile,status='old',access='stream')
     read(10,end=999) ihdr,iwave
     close(10)
     j2=index(infile,'.wav')
     read(infile(j2-6:j2-1),*) nutc
     datetime=infile(j2-13:j2-1)
     call sync8(iwave,nfa,nfb,nfqso,s,candidate,ncand)
     syncmin=2.0
     dd=iwave
     do icand=1,ncand
       sync=candidate(3,icand)
       if( sync.lt.syncmin) cycle
       f1=candidate(1,icand)
       xdt=candidate(2,icand)
       nsnr=min(99,nint(10.0*log10(sync)-25.5))
       call ft8b(dd,nfqso,f1,xdt,nharderrors,dmin,nbadcrc,message,xsnr)
       nsnr=xsnr
       xdt=xdt-0.6
       write(*,1110) datetime,0,nsnr,xdt,f1,message,nharderrors,dmin
1110   format(a13,2i4,f6.2,f7.1,' ~ ',a22,i6,f7.1)
     enddo
  enddo   ! ifile loop

999 end program ft8d