WSJT-X/lib/gen9.f90
Bill Somerville 020803e901 Fix an array size parameter error in gen9.f90
Also use assumed shaped for dummy argument arrays where possible.

If a  Fortran procedure has  an interface declaration,  which includes
all procedures exported  from modules, then dummy  arguments should be
declared as assumed shape if possible.  This allows compiler generated
array bounds checking and compile time array shape checking.

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6456 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
2016-02-01 13:41:11 +00:00

64 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) !Pack into 12 6-bit bytes
call unpackmsg(i4Msg6BitWords,msgsent) !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
call interleave9(i1EncodedBits,1,i1ScrambledBits) !Interleave bits
call packbits(i1ScrambledBits,nsym2/3,3,i4DataSymbols) !Pk 3-bits into words
call graycode(i4DataSymbols,nsym2/3,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