mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-01 08:07:10 -04:00
4daea139cd
Fix packjt truncation error and text3 null detection. Add additional test messages. Add check message capability to jt65code and jt9code so that comparison confirms expected output. jt65code and jt9code now should always have identical outputs..should allow for automatic regression testing. Thanks to Mike, W9MDB, for this contribution. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7649 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
102 lines
3.2 KiB
Fortran
102 lines
3.2 KiB
Fortran
program JT65code
|
|
|
|
! Provides examples of message packing, bit and symbol ordering,
|
|
! Reed Solomon encoding, and other necessary details of the JT65
|
|
! protocol.
|
|
|
|
use packjt
|
|
character*22 msg,msgchk,msg0,msg1,decoded,cok*3,bad*1,msgtype*10,expected
|
|
integer dgen(12),sent(63),tmp(63),recd(12),era(51)
|
|
include 'testmsg.f90'
|
|
|
|
nargs=iargc()
|
|
if(nargs.ne.1) then
|
|
print*,'Usage: jt65code "message"'
|
|
print*,' jt65code -t'
|
|
go to 999
|
|
endif
|
|
|
|
call getarg(1,msg) !Get message from command line
|
|
msgchk=msg
|
|
call fmtmsg(msgchk,iz)
|
|
nmsg=1
|
|
if(msg(1:2).eq."-t") then
|
|
if (NTEST+5 > MAXTEST) then
|
|
write(*,*) "NTEST exceed MAXTEST"
|
|
endif
|
|
testmsg(NTEST+1)="KA1ABC WB9XYZ EN34 OOO"
|
|
testmsg(NTEST+2)="KA1ABC WB9XYZ OOO"
|
|
testmsg(NTEST+3)="RO"
|
|
testmsg(NTEST+4)="RRR"
|
|
testmsg(NTEST+5)="73"
|
|
testmsgchk(NTEST+1)="KA1ABC WB9XYZ EN34 OOO"
|
|
testmsgchk(NTEST+2)="KA1ABC WB9XYZ OOO"
|
|
testmsgchk(NTEST+3)="RO"
|
|
testmsgchk(NTEST+4)="RRR"
|
|
testmsgchk(NTEST+5)="73"
|
|
nmsg=NTEST+5
|
|
endif
|
|
|
|
write(*,1010)
|
|
1010 format(" Message Decoded Err? Type Expected"/ &
|
|
76("-"))
|
|
|
|
do imsg=1,nmsg
|
|
if(nmsg.gt.1) then
|
|
msg=testmsg(imsg)
|
|
msgchk=testmsgchk(imsg)
|
|
endif
|
|
|
|
call fmtmsg(msg,iz) !To upper, collapse mult blanks
|
|
msg0=msg !Input message
|
|
call chkmsg(msg,cok,nspecial,flip) !See if it includes "OOO" report
|
|
msg1=msg !Message without "OOO"
|
|
|
|
if(nspecial.gt.0) then !or is a shorthand message
|
|
if(nspecial.eq.2) decoded="RO"
|
|
if(nspecial.eq.3) decoded="RRR"
|
|
if(nspecial.eq.4) decoded="73"
|
|
itype=-1
|
|
msgtype="Shorthand"
|
|
go to 10
|
|
endif
|
|
|
|
call packmsg(msg1,dgen,itype) !Pack message into 12 six-bit bytes
|
|
msgtype=""
|
|
if(itype.eq.1) msgtype="Std Msg"
|
|
if(itype.eq.2) msgtype="Type 1 pfx"
|
|
if(itype.eq.3) msgtype="Type 1 sfx"
|
|
if(itype.eq.4) msgtype="Type 2 pfx"
|
|
if(itype.eq.5) msgtype="Type 2 sfx"
|
|
if(itype.eq.6) msgtype="Free text"
|
|
|
|
call rs_encode(dgen,sent) !RS encode
|
|
call interleave63(sent,1) !Interleave channel symbols
|
|
call graycode(sent,63,1,sent) !Apply Gray code
|
|
|
|
call graycode(sent,63,-1,tmp) !Remove Gray code
|
|
call interleave63(tmp,-1) !Remove interleaving
|
|
call rs_decode(tmp,era,0,recd,nerr) !Decode the message
|
|
call unpackmsg(recd,decoded) !Unpack the user message
|
|
if(cok.eq."OOO") decoded(20:22)=cok
|
|
call fmtmsg(decoded,iz)
|
|
|
|
10 bad=" "
|
|
if(decoded.ne.msgchk) bad="*"
|
|
expected = 'EXACT'
|
|
if (msg0.ne.msgchk) expected = 'TRUNCATED'
|
|
if (nmsg.eq.1) expected = 'UNKNOWN'
|
|
write(*,1020) imsg,msg0,decoded,bad,itype,msgtype,expected
|
|
1020 format(i2,'.',1x,a22,1x,a22,1x,a1,i3,":",a10,2x,a22)
|
|
enddo
|
|
|
|
if(nmsg.eq.1 .and. nspecial.eq.0) then
|
|
write(*,1030) dgen
|
|
1030 format(/'Packed message, 6-bit symbols ',12i3) !Display packed symbols
|
|
|
|
write(*,1040) sent
|
|
1040 format(/'Information-carrying channel symbols'/(i5,20i3))
|
|
endif
|
|
|
|
999 end program JT65code
|