diff --git a/CMakeLists.txt b/CMakeLists.txt index a37f230b2..7f36a21c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1050,6 +1050,9 @@ add_executable (wsprsim ${wsprsim_CSRCS}) add_executable (jt4code lib/jt4code.f90 wsjtx.rc) target_link_libraries (jt4code wsjt_fort wsjt_cxx) +add_executable (msk144code lib/msk144code.f90 wsjtx.rc) +target_link_libraries (msk144code wsjt_fort wsjt_cxx) + add_executable (jt65 lib/jt65.f90 lib/jt65_test.f90 wsjtx.rc) target_link_libraries (jt65 wsjt_fort wsjt_cxx) diff --git a/lib/msk144code.f90 b/lib/msk144code.f90 new file mode 100644 index 000000000..6ccada7e0 --- /dev/null +++ b/lib/msk144code.f90 @@ -0,0 +1,66 @@ +program msk144code + +! Provides examples of message packing, bit and symbol ordering, +! LDPC encoding, and other necessary details of the MSK144 protocol. + + use packjt + character msg*22,msgsent*22,decoded,bad*1,msgtype*13,mygrid*6 + integer*4 i4tone(144) + logical*1 bcontest + include 'testmsg.f90' + data mygrid/'FN20qi'/ + + nargs=iargc() + if(nargs.ne.1) then + print*,'Usage: msk144code "message"' + print*,' msk144code -t' + print*,' ' + print*,'Examples:' + print*,' msk144code "KA1ABC WB9XYZ EN37"' + print*,' msk144code " R-03"' + go to 999 + endif + + bcontest=.false. + call getarg(1,msg) + nmsg=1 + if(msg(1:2).eq."-t") then + testmsg(NTEST+1)=" -03" + testmsg(NTEST+2)=" R+03" + testmsg(NTEST+3)=" RRR" + testmsg(NTEST+4)=" 73" + nmsg=NTEST+4 + endif + + write(*,1010) +1010 format(" Message Decoded Err? Type"/ & + 74("-")) + do imsg=1,nmsg + if(nmsg.gt.1) msg=testmsg(imsg) + call fmtmsg(msg,iz) !To upper case, collapse multiple blanks + ichk=0 + call genmsk144(msg,mygrid,ichk,bcontest,msgsent,i4tone,itype) + + msgtype="" + if(itype.eq.1) msgtype="Std Msg" + if(itype.eq.2) msgtype="Type 1 prefix" + if(itype.eq.3) msgtype="Type 1 suffix" + if(itype.eq.4) msgtype="Type 2 prefix" + if(itype.eq.5) msgtype="Type 2 suffix" + if(itype.eq.6) msgtype="Free text" + if(itype.eq.7) msgtype="Hashed callsigns" + + bad=" " + if(msgsent.ne.msg) bad="*" + write(*,1020) imsg,msg,msgsent,bad,itype,msgtype +1020 format(i2,'.',2x,a22,2x,a22,3x,a1,i3,": ",a13) + enddo + + if(nmsg.eq.1) then + n=144 + if(msg(1:1).eq."<") n=40 + write(*,1030) i4tone(1:n) +1030 format(/'Channel symbols:'/(72i1)) + endif + +999 end program msk144code