diff --git a/lib/q65_decode.f90 b/lib/q65_decode.f90 index eb0130da0..7869527d7 100644 --- a/lib/q65_decode.f90 +++ b/lib/q65_decode.f90 @@ -98,6 +98,10 @@ contains allocate (c00(0:nfft1-1)) allocate (c0(0:nfft1-1)) + if(lagain) then + call q65_hist(nfqso,dxcall=hiscall,dxgrid=hisgrid) + endif + nsps=1800 if(ntrperiod.eq.30) then nsps=3600 @@ -235,7 +239,7 @@ contains nsnr=nint(snr2) call this%callback(nutc,snr1,nsnr,dtdec,f0dec,decoded, & idec,nused,ntrperiod) -! if(iand(ndepth,128).ne.0) call q65_clravg !AutoClrAvg after decode + call q65_hist(nint(f0dec),msg0=decoded) if(iand(ndepth,128).ne.0 .and. .not.lagain .and. & int(abs(f0dec-nfqso)).le.ntol ) call q65_clravg !AutoClrAvg call sec0(1,tdecode) @@ -312,7 +316,7 @@ contains nsnr=nint(snr2) call this%callback(nutc,snr1,nsnr,dtdec,f0dec,decoded, & idec,nused,ntrperiod) -! if(iand(ndepth,128).ne.0) call q65_clravg !AutoClrAvg after decode + call q65_hist(nint(f0dec),msg0=decoded) if(iand(ndepth,128).ne.0 .and. .not.lagain .and. & int(abs(f0dec-nfqso)).le.ntol ) call q65_clravg !AutoClrAvg call sec0(1,tdecode) diff --git a/lib/qra/q65/q65.f90 b/lib/qra/q65/q65.f90 index 11da4a575..00beebf6b 100644 --- a/lib/qra/q65/q65.f90 +++ b/lib/qra/q65/q65.f90 @@ -700,5 +700,51 @@ subroutine q65_snr(dat4,dtdec,f0dec,mode_q65,nused,snr2) return end subroutine q65_snr - + +subroutine q65_hist(if0,msg0,dxcall,dxgrid) + + parameter (MAXHIST=100) + integer,intent(in) :: if0 + character(len=37),intent(in),optional :: msg0 + character(len=12),intent(out),optional :: dxcall + character(len=6),intent(out),optional :: dxgrid + character*6 g1 + character*37 msg(MAXHIST) + integer nf0(MAXHIST) + logical isgrid + data nhist/0/ + save nhist,nf0,msg + + isgrid(g1)=g1(1:1).ge.'A' .and. g1(1:1).le.'R' .and. g1(2:2).ge.'A' .and. & + g1(2:2).le.'R' .and. g1(3:3).ge.'0' .and. g1(3:3).le.'9' .and. & + g1(4:4).ge.'0' .and. g1(4:4).le.'9' .and. g1(1:4).ne.'RR73' + + if(present(dxcall)) go to 100 + + if(nhist.eq.MAXHIST) then + nf0(1:MAXHIST-1)=nf0(2:MAXHIST) + msg(1:MAXHIST-1)=msg(2:MAXHIST) + nhist=MAXHIST-1 + endif + nhist=nhist+1 + nf0(nhist)=if0 + msg(nhist)=msg0 + go to 900 + +100 dxcall=' ' + dxgrid=' ' + do i=1,nhist + if(abs(nf0(i)-if0).gt.10) cycle + i1=index(msg(i),' ') + if(i1.ge.4 .and. i1.le.13) then + i2=index(msg(i)(i1+1:),' ') + i1 + dxcall=msg(i)(i1+1:i2-1) + g1=msg(i)(i2+1:i2+4) + if(isgrid(g1)) dxgrid=g1(1:4) + endif + enddo + +900 return +end subroutine q65_hist + end module q65