mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 13:30:52 -05:00 
			
		
		
		
	Validate grids in 77-bit and 50-bit message unpacking
This commit is contained in:
		
							parent
							
								
									8e95daf963
								
							
						
					
					
						commit
						caba1fbe72
					
				@ -216,7 +216,7 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
 | 
			
		||||
  character*38 c
 | 
			
		||||
  character*36 a2
 | 
			
		||||
  integer hashmy10,hashmy12,hashmy22,hashdx10,hashdx12,hashdx22
 | 
			
		||||
  logical unpk28_success,unpk77_success
 | 
			
		||||
  logical unpk28_success,unpk77_success,unpkg4_success
 | 
			
		||||
  logical dxcall13_set,mycall13_set
 | 
			
		||||
 | 
			
		||||
  data a2/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'/,nzzz/46656/
 | 
			
		||||
@ -363,10 +363,11 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
 | 
			
		||||
        idbm=nint(idbm*10.0/3.0)
 | 
			
		||||
        call unpack28(n28,call_1,unpk28_success) 
 | 
			
		||||
        if(.not.unpk28_success) unpk77_success=.false.
 | 
			
		||||
        call to_grid4(igrid4,grid4)
 | 
			
		||||
        call to_grid4(igrid4,grid4,unpkg4_success)
 | 
			
		||||
        if(.not.unpkg4_success) unpk77_success=.false.
 | 
			
		||||
        write(crpt,'(i3)') idbm
 | 
			
		||||
        msg=trim(call_1)//' '//grid4//' '//trim(adjustl(crpt))
 | 
			
		||||
        call save_hash_call(call_1,n10,n12,n22)    !### Is this OK here? ###
 | 
			
		||||
        if (unpk77_success) call save_hash_call(call_1,n10,n12,n22) !### Is this OK here? ###
 | 
			
		||||
 | 
			
		||||
     else if(itype.eq.2) then
 | 
			
		||||
! WSPR Type 2
 | 
			
		||||
@ -416,10 +417,9 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
 | 
			
		||||
        n28=n22+2063592
 | 
			
		||||
        call unpack28(n28,call_1,unpk28_success) 
 | 
			
		||||
        if(.not.unpk28_success) unpk77_success=.false.
 | 
			
		||||
        call to_grid(igrid6,grid6)
 | 
			
		||||
        call to_grid(igrid6,grid6,unpkg4_success)
 | 
			
		||||
        if(.not.unpkg4_success) unpk77_success=.false.
 | 
			
		||||
        msg=trim(call_1)//' '//grid6
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
     endif
 | 
			
		||||
     
 | 
			
		||||
  else if(i3.eq.1 .or. i3.eq.2) then
 | 
			
		||||
@ -448,7 +448,8 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
 | 
			
		||||
        if(i.ge.4) call add_call_to_recent_calls(call_2)
 | 
			
		||||
     endif
 | 
			
		||||
     if(igrid4.le.MAXGRID4) then
 | 
			
		||||
        call to_grid4(igrid4,grid4)
 | 
			
		||||
        call to_grid4(igrid4,grid4,unpkg4_success)
 | 
			
		||||
        if(.not.unpkg4_success) unpk77_success=.false.
 | 
			
		||||
        if(ir.eq.0) msg=trim(call_1)//' '//trim(call_2)//' '//grid4
 | 
			
		||||
        if(ir.eq.1) msg=trim(call_1)//' '//trim(call_2)//' R '//grid4
 | 
			
		||||
        if(msg(1:3).eq.'CQ ' .and. ir.eq.1) unpk77_success=.false.
 | 
			
		||||
@ -565,7 +566,7 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
 | 
			
		||||
     nrs=52+irpt
 | 
			
		||||
     write(cexch,1022) nrs,iserial
 | 
			
		||||
1022 format(i2,i4.4)
 | 
			
		||||
     call to_grid6(igrid6,grid6)
 | 
			
		||||
     call to_grid6(igrid6,grid6,unpk77_success)
 | 
			
		||||
     if(ir.eq.0) msg=trim(call_1)//' '//trim(call_2)//' '//cexch//' '//grid6
 | 
			
		||||
     if(ir.eq.1) msg=trim(call_1)//' '//trim(call_2)//' R '//cexch//' '//grid6
 | 
			
		||||
 | 
			
		||||
@ -1495,60 +1496,84 @@ subroutine add_call_to_recent_calls(callsign)
 | 
			
		||||
  return
 | 
			
		||||
end subroutine add_call_to_recent_calls
 | 
			
		||||
 | 
			
		||||
subroutine to_grid4(n,grid4)
 | 
			
		||||
subroutine to_grid4(n,grid4,ok)
 | 
			
		||||
  character*4 grid4
 | 
			
		||||
  logical ok
 | 
			
		||||
 | 
			
		||||
  ok=.false.
 | 
			
		||||
  j1=n/(18*10*10)
 | 
			
		||||
  if (j1.lt.0.or.j1.gt.17) goto 900
 | 
			
		||||
  n=n-j1*18*10*10
 | 
			
		||||
  j2=n/(10*10)
 | 
			
		||||
  if (j2.lt.0.or.j2.gt.17) goto 900
 | 
			
		||||
  n=n-j2*10*10
 | 
			
		||||
  j3=n/10
 | 
			
		||||
  if (j3.lt.0.or.j3.gt.9) goto 900
 | 
			
		||||
  j4=n-j3*10
 | 
			
		||||
  if (j4.lt.0.or.j4.gt.9) goto 900
 | 
			
		||||
  grid4(1:1)=char(j1+ichar('A'))
 | 
			
		||||
  grid4(2:2)=char(j2+ichar('A'))
 | 
			
		||||
  grid4(3:3)=char(j3+ichar('0'))
 | 
			
		||||
  grid4(4:4)=char(j4+ichar('0'))
 | 
			
		||||
  ok=.true.
 | 
			
		||||
 | 
			
		||||
  return
 | 
			
		||||
900 return
 | 
			
		||||
end subroutine to_grid4
 | 
			
		||||
 | 
			
		||||
subroutine to_grid6(n,grid6)
 | 
			
		||||
subroutine to_grid6(n,grid6,ok)
 | 
			
		||||
  character*6 grid6
 | 
			
		||||
  logical ok
 | 
			
		||||
 | 
			
		||||
  ok=.false.
 | 
			
		||||
  j1=n/(18*10*10*24*24)
 | 
			
		||||
  if (j1.lt.0.or.j1.gt.17) goto 900
 | 
			
		||||
  n=n-j1*18*10*10*24*24
 | 
			
		||||
  j2=n/(10*10*24*24)
 | 
			
		||||
  if (j2.lt.0.or.j2.gt.17) goto 900
 | 
			
		||||
  n=n-j2*10*10*24*24
 | 
			
		||||
  j3=n/(10*24*24)
 | 
			
		||||
  if (j3.lt.0.or.j3.gt.9) goto 900
 | 
			
		||||
  n=n-j3*10*24*24
 | 
			
		||||
  j4=n/(24*24)
 | 
			
		||||
  if (j4.lt.0.or.j4.gt.9) goto 900
 | 
			
		||||
  n=n-j4*24*24
 | 
			
		||||
  j5=n/24
 | 
			
		||||
  if (j5.lt.0.or.j5.gt.23) goto 900
 | 
			
		||||
  j6=n-j5*24
 | 
			
		||||
  if (j6.lt.0.or.j6.gt.23) goto 900
 | 
			
		||||
  grid6(1:1)=char(j1+ichar('A'))
 | 
			
		||||
  grid6(2:2)=char(j2+ichar('A'))
 | 
			
		||||
  grid6(3:3)=char(j3+ichar('0'))
 | 
			
		||||
  grid6(4:4)=char(j4+ichar('0'))
 | 
			
		||||
  grid6(5:5)=char(j5+ichar('A'))
 | 
			
		||||
  grid6(6:6)=char(j6+ichar('A'))  
 | 
			
		||||
  ok=.true.
 | 
			
		||||
 | 
			
		||||
  return
 | 
			
		||||
900 return
 | 
			
		||||
end subroutine to_grid6
 | 
			
		||||
 | 
			
		||||
subroutine to_grid(n,grid6)
 | 
			
		||||
subroutine to_grid(n,grid6,ok)
 | 
			
		||||
  ! 4-, or 6-character grid
 | 
			
		||||
  character*6 grid6
 | 
			
		||||
  logical ok
 | 
			
		||||
 | 
			
		||||
  ok=.false.
 | 
			
		||||
  j1=n/(18*10*10*25*25)
 | 
			
		||||
  if (j1.lt.0.or.j1.gt.17) goto 900
 | 
			
		||||
  n=n-j1*18*10*10*25*25
 | 
			
		||||
  j2=n/(10*10*25*25)
 | 
			
		||||
  if (j2.lt.0.or.j2.gt.17) goto 900
 | 
			
		||||
  n=n-j2*10*10*25*25
 | 
			
		||||
  j3=n/(10*25*25)
 | 
			
		||||
  if (j3.lt.0.or.j3.gt.9) goto 900
 | 
			
		||||
  n=n-j3*10*25*25
 | 
			
		||||
  j4=n/(25*25)
 | 
			
		||||
  if (j4.lt.0.or.j4.gt.9) goto 900
 | 
			
		||||
  n=n-j4*25*25
 | 
			
		||||
  j5=n/25
 | 
			
		||||
  if (j5.lt.0.or.j5.gt.24) goto 900
 | 
			
		||||
  j6=n-j5*25
 | 
			
		||||
  if (j6.lt.0.or.j6.gt.24) goto 900
 | 
			
		||||
  grid6=''
 | 
			
		||||
  grid6(1:1)=char(j1+ichar('A'))
 | 
			
		||||
  grid6(2:2)=char(j2+ichar('A'))
 | 
			
		||||
@ -1558,8 +1583,9 @@ subroutine to_grid(n,grid6)
 | 
			
		||||
     grid6(5:5)=char(j5+ichar('A'))
 | 
			
		||||
     grid6(6:6)=char(j6+ichar('A'))
 | 
			
		||||
  endif
 | 
			
		||||
  ok=.true.
 | 
			
		||||
 | 
			
		||||
  return
 | 
			
		||||
900 return
 | 
			
		||||
end subroutine to_grid
 | 
			
		||||
 | 
			
		||||
end module packjt77
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user