mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			162 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
| program chkdec
 | |
| 
 | |
|   parameter(NMAX=100)
 | |
|   character*88 line
 | |
|   character*37 msg(NMAX),msg0,msg1
 | |
|   character*2 c2(NMAX)
 | |
|   character*1 c1(NMAX)
 | |
|   character*1 only
 | |
|   integer nsnr(NMAX,0:1),nf(NMAX,0:1)
 | |
|   real dt(NMAX,0:1)
 | |
|   logical found,eof
 | |
| 
 | |
| ! These files are sorted by freq within each Rx sequence
 | |
|   open(10,file='all.wsjtx',status='old')
 | |
|   open(11,file='all.jtdx',status='old')
 | |
|   write(20,1030)
 | |
| 1030 format('  iseq    B   w   j   W  W+   J   E       B     w     j     W',  &
 | |
|           '    W+     J     E'/80('-'))
 | |
| 
 | |
|   nutc0=-1
 | |
|   nbt=0        !Both
 | |
|   nwt=0        !WSJT-X only
 | |
|   njt=0        !JTDX only
 | |
|   net=0        !Either
 | |
|   n7t=0        !a7
 | |
|   eof=.false.
 | |
|   
 | |
|   do iseq=1,9999
 | |
|      j=0
 | |
|      msg=' '
 | |
|      nsnr=-99
 | |
|      nf=-99
 | |
|      dt=-99
 | |
|      c1=' '
 | |
|      c2=' '
 | |
|      do i=1,NMAX
 | |
|         read(10,'(a88)',end=8) line           !Read from the WSJT-X file
 | |
|         if(line(25:30).ne.'Rx FT8') cycle     !Ignore any line not an FT8 decode
 | |
|         read(line(8:13),*) nutc
 | |
|         if(nutc0.lt.0) nutc0=nutc             !First time only
 | |
|         if(nutc.ne.nutc0) then
 | |
|            backspace(10)
 | |
|            go to 10                            !Finished WSJT-X for this sequence
 | |
|         endif
 | |
|         j=j+1
 | |
|         if(j.eq.1) then
 | |
|            nf(j,0)=-1
 | |
|            j=j+1
 | |
|         endif
 | |
|         read(line,1001) nsnr(j,0),dt(j,0),nf(j,0),msg(j),c2(j)
 | |
| 1001    format(30x,i7,f5.1,i5,1x,a36,2x,a2)
 | |
| !        if(nutc.eq.180215 .and. c2(j).eq.'a7') print*,'aaa',j,nf(j,0),c2(j)
 | |
|         nutc0=nutc
 | |
|      enddo  ! i
 | |
|      
 | |
| 8    eof=.true.
 | |
| 10   jz=j
 | |
|      do i=1,NMAX
 | |
|         read(11,'(a88)',end=20) line           !Read from the JTDX file
 | |
|         if(line(31:31).ne.'~') cycle           !Ignore any line not an FT8 decode
 | |
|         read(line(10:15),*) nutc
 | |
|         if(nutc.ne.nutc0) then
 | |
|            backspace(11)
 | |
|            go to 20                            !Finished JTDX for this sequence
 | |
|         endif
 | |
|         msg1=line(33:58)
 | |
|         read(line(25:29),*) nf1
 | |
|         found=.false.
 | |
|         do j=1,jz
 | |
|            if(msg(j).eq.msg1) then
 | |
|               read(line,1002) nsnr(j,1),dt(j,1),nf(j,1),c1(j)
 | |
| 1002          format(15x,i4,f5.1,i5,29x,a1)
 | |
|               found=.true.
 | |
|               exit
 | |
|            endif
 | |
|            i1=index(msg(j),'<')
 | |
|            if(i1.gt.0) then
 | |
|               i2=index(msg(j),'>')
 | |
|               msg0=msg(j)(1:i1-1)//msg(j)(i1+1:i2-1)//msg(j)(i2+1:)
 | |
|               if(msg0.eq.msg1) then
 | |
|                  read(line,1002) nsnr(j,1),dt(j,1),nf(j,1),c1(j)
 | |
|                  found=.true.
 | |
|                  exit
 | |
|               endif
 | |
|            endif
 | |
|         enddo  ! j
 | |
| 
 | |
|         if(.not.found) then                    !Insert this one as a new message
 | |
|            do j=1,jz
 | |
|               if(nf1.ge.nf(j,0) .and. nf1.lt.nf(j+1,0)) then
 | |
|                  jj=j+1
 | |
|                  exit
 | |
|               endif
 | |
|            enddo
 | |
|            do j=jz+1,jj+1,-1
 | |
|               nsnr(j,0)=nsnr(j-1,0)
 | |
|               dt(j,0)=dt(j-1,0)
 | |
|               nf(j,0)=nf(j-1,0)
 | |
|               msg(j)=msg(j-1)
 | |
|               c1(j)=c1(j-1)
 | |
|               c2(j)=c2(j-1)
 | |
|            enddo  ! j
 | |
|            read(line,1004) nsnr(jj,1),dt(jj,1),nf(jj,1),msg(jj),c1(jj)
 | |
| 1004       format(15x,i4,f5.1,i5,3x,a26,a1)
 | |
|            c2(jj)='  '
 | |
|            nsnr(jj,0)=-99
 | |
|            dt(jj,0)=-99.0
 | |
|            nf(jj,0)=-99
 | |
|            jz=jz+1
 | |
|         endif
 | |
|      enddo  ! i
 | |
| 
 | |
| 20   nb=0
 | |
|      nw=0
 | |
|      nj=0
 | |
|      ne=0
 | |
|      n7=0
 | |
|      do j=2,jz
 | |
|         write(line,1020) nutc0,j,nsnr(j,:),dt(j,:),nf(j,:),msg(j)(1:26),   &
 | |
|              c2(j),c1(j)
 | |
| 1020    format(i6.6,i3,1x,2i4,1x,2f6.1,1x,2i5,1x,a26,1x,a2,1x,a1)
 | |
|         if(c2(j).eq.'a7') n7=n7+1
 | |
|         only=' '
 | |
|         if(line(12:14).eq.'-99') then
 | |
|            line(12:14)='   '
 | |
|            only='j'
 | |
|            nj=nj+1
 | |
| !           if(c2(j).eq.'a7') print*,'aaa ',trim(line)
 | |
|         endif
 | |
|         if(line(16:18).eq.'-99') then
 | |
|            line(16:18)='   '
 | |
|            only='w'
 | |
|            nw=nw+1
 | |
|         endif
 | |
|         if(line(12:14).ne.'   ' .or. line(16:19).ne.'   ') ne=ne+1
 | |
|         if(line(12:14).ne.'   ' .and. line(16:19).ne.'   ') nb=nb+1
 | |
|         if(line(21:25).eq.'-99.0') line(21:25)='     '
 | |
|         if(line(27:31).eq.'-99.0') line(27:31)='     '
 | |
|         if(line(35:37).eq.'-99') line(35:37)='   '
 | |
|         if(line(40:42).eq.'-99') line(40:42)='   '
 | |
| !        if(line(12:14).ne.'   ') nw=nw+1
 | |
| !        if(line(16:18).ne.'   ') nj=nj+1
 | |
|         write(*,'(a74,1x,a1)') line(1:74),only
 | |
|      enddo  ! j
 | |
| 
 | |
|      nbt=nbt+nb
 | |
|      nwt=nwt+nw
 | |
|      n7t=n7t+n7
 | |
|      njt=njt+nj
 | |
|      net=net+ne
 | |
|      nutc0=nutc
 | |
|      write(*,*)
 | |
| 
 | |
|      write(20,1031) iseq,nb,nw,nj,nb+nw-n7,nb+nw,nb+nj,ne,nbt,nwt,njt,   &
 | |
|           nbt+nwt-n7t,nbt+nwt,nbt+njt,net
 | |
| 1031 format(i5,2x,7i4,2x,7i6)
 | |
|      if(eof) exit
 | |
| !     if(iseq.eq.2) exit
 | |
|   enddo  ! iseq
 | |
| 
 | |
| end program chkdec
 |