WSJT-X/lib/gen9.f90
Bill Somerville dd1362b69a Rationalize NA contest mode
Generic message packing and unpacking routines now understand antipode
grid contest messages.  These messages  are now recognized as standard
messages in  message response processing and  dealt with appropriately
when contest mode is selected and applicable (currently FT8 and MSK144
only).

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@8062 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
2017-09-01 20:10:35 +00:00

66 lines
2.3 KiB
Fortran

subroutine gen9(msg0,ichk,msgsent,i4tone,itype)
! Encodes a JT9 message and returns msgsent, the message as it will
! be decoded, and an integer array i4tone(85) of 9-FSK tone values
! in the range 0-8.
use packjt
character*22 msg0
character*22 message !Message to be generated
character*22 msgsent !Message as it will be received
integer*4 i4Msg6BitWords(13) !72-bit message as 6-bit words
integer*1 i1Msg8BitBytes(13) !72 bits and zero tail as 8-bit bytes
integer*1 i1EncodedBits(207) !Encoded information-carrying bits
integer*1 i1ScrambledBits(207) !Encoded bits after interleaving
integer*4 i4DataSymbols(69) !Data symbols (values 0-7)
integer*4 i4GrayCodedSymbols(69) !Gray-coded symbols (values 0-7)
integer*4 i4tone(85) !Tone #s, data and sync (values 0-8)
include 'jt9sync.f90'
save
if(msg0(1:1).eq.'@') then
read(msg0(2:5),*,end=1,err=1) nfreq
go to 2
1 nfreq=1000
2 i4tone(1)=nfreq
else
message=msg0
do i=1,22
if(ichar(message(i:i)).eq.0) then
message(i:)=' '
exit
endif
enddo
do i=1,22 !Strip leading blanks
if(message(1:1).ne.' ') exit
message=message(i+1:)
enddo
call packmsg(message,i4Msg6BitWords,itype,.false.) !Pack into 12 6-bit bytes
call unpackmsg(i4Msg6BitWords,msgsent,.false.,' ') !Unpack to get msgsent
if(ichk.ne.0) go to 999
call entail(i4Msg6BitWords,i1Msg8BitBytes) !Add tail, make 8-bit bytes
nsym2=206
call encode232(i1Msg8BitBytes,nsym2,i1EncodedBits) !Encode K=32, r=1/2
i1EncodedBits(207)=0
call interleave9(i1EncodedBits,1,i1ScrambledBits) !Interleave bits
i1ScrambledBits(207)=0
call packbits(i1ScrambledBits,69,3,i4DataSymbols) !Pk 3-bits into words
call graycode(i4DataSymbols,69,1,i4GrayCodedSymbols) !Apply Gray code
! Insert sync symbols at ntone=0 and add 1 to the data-tone numbers.
j=0
do i=1,85
if(isync(i).eq.1) then
i4tone(i)=0
else
j=j+1
i4tone(i)=i4GrayCodedSymbols(j)+1
endif
enddo
endif
999 return
end subroutine gen9