67 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
subroutine wqencode(msg,ntype,data0)
 | 
						|
 | 
						|
!  Parse and encode a WSPR message.
 | 
						|
 | 
						|
  use packjt
 | 
						|
  parameter (MASK15=32767)
 | 
						|
  character*22 msg
 | 
						|
  character*12 call1,call2
 | 
						|
  character grid4*4
 | 
						|
  logical lbad1,lbad2
 | 
						|
  integer*1 data0(11)
 | 
						|
  integer nu(0:9)
 | 
						|
  data nu/0,-1,1,0,-1,2,1,0,-1,1/
 | 
						|
 | 
						|
! Standard WSPR message (types 0 3 7 10 13 17 ... 60)
 | 
						|
  i1=index(msg,' ')
 | 
						|
  i2=index(msg,'/')
 | 
						|
  i3=index(msg,'<')
 | 
						|
  call1=msg(:i1-1)
 | 
						|
  if(i1.lt.3 .or. i1.gt.7 .or. i2.gt.0 .or. i3.gt.0) go to 10
 | 
						|
  grid4=msg(i1+1:i1+4)
 | 
						|
  call packcall(call1,n1,lbad1)
 | 
						|
  call packgrid(grid4,ng,lbad2)
 | 
						|
  if(lbad1 .or. lbad2) go to 10
 | 
						|
  ndbm=0
 | 
						|
  read(msg(i1+5:),*) ndbm
 | 
						|
  if(ndbm.lt.0) ndbm=0
 | 
						|
  if(ndbm.gt.60) ndbm=60
 | 
						|
  ndbm=ndbm+nu(mod(ndbm,10))
 | 
						|
  n2=128*ng + (ndbm+64)
 | 
						|
  call pack50(n1,n2,data0)
 | 
						|
  ntype=ndbm
 | 
						|
  go to 900
 | 
						|
 | 
						|
10 if(i2.ge.2 .and. i3.lt.1) then
 | 
						|
     call packpfx(call1,n1,ng,nadd)
 | 
						|
     ndbm=0
 | 
						|
     read(msg(i1+1:),*) ndbm
 | 
						|
     if(ndbm.lt.0) ndbm=0
 | 
						|
     if(ndbm.gt.60) ndbm=60
 | 
						|
     ndbm=ndbm+nu(mod(ndbm,10))
 | 
						|
     ntype=ndbm + 1 + nadd
 | 
						|
     n2=128*ng + ntype + 64
 | 
						|
     call pack50(n1,n2,data0)
 | 
						|
  else if(i3.eq.1) then
 | 
						|
     i4=index(msg,'>')
 | 
						|
     call1=msg(2:i4-1)
 | 
						|
     call hash(call1,i4-2,ih)
 | 
						|
     i5=index(trim(msg(i1+1:)),' ')
 | 
						|
! Convert grid to valid callsign format - first character moved to end
 | 
						|
     call2=msg(i1+2:i1+i5-1)//msg(i1+1:i1+1)//'        '
 | 
						|
     call packcall(call2,n1,lbad1)
 | 
						|
     ndbm=0
 | 
						|
     read(msg(i1+i5+1:),*) ndbm
 | 
						|
     if(ndbm.lt.0) ndbm=0
 | 
						|
     if(ndbm.gt.60) ndbm=60
 | 
						|
     ndbm=ndbm+nu(mod(ndbm,10))
 | 
						|
     ntype=-(ndbm+1)
 | 
						|
     n2=128*ih + ntype + 64
 | 
						|
     call pack50(n1,n2,data0)
 | 
						|
  endif
 | 
						|
  go to 900
 | 
						|
 | 
						|
900 continue
 | 
						|
  return
 | 
						|
end subroutine wqencode
 |