WSJT-X/lib/gen4.f90

44 lines
1.3 KiB
Fortran

subroutine gen4(msg0,ichk,msgsent,itone,itype)
! Encode a JT4 message. Returns msgsent, the message as it will be
! decoded, an integer array itone(206) of 4-FSK tons values in the
! range 0-3; and itype, the JT message type.
use jt4
use packjt
character*22 msg0
character*22 message !Message to be generated
character*22 msgsent !Message as it will be received
character*1 c
integer itone(206)
integer*4 i4Msg6BitWords(13) !72-bit message as 6-bit words
integer mettab(-128:127,0:1)
save
if(msg0(1:1).eq.'@') then
read(msg0(2:5),*,end=1,err=1) nfreq
go to 2
1 nfreq=1000
2 itone(1)=nfreq
msgsent=msg0
else
call getmet4(mettab,ndelta)
message=msg0
call fmtmsg(message,iz)
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 encode4(message,itone) !Encode the information bits
i1=index(message,'-')
c=message(i1+1:i1+1)
if(i1.ge.9 .and. c.ge.'0' .and. c.le.'3') then
itone=2*itone + (1-npr(2:)) !Inverted '#' sync
else
itone=2*itone + npr(2:) !Data = MSB, sync = LSB
endif
endif
999 return
end subroutine gen4