diff --git a/.gitattributes b/.gitattributes index b1e1bbf70..2712bf16d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,3 +3,4 @@ /lib/fsk4hf export-ignore /lib/fsk4hf export-ignore /robots export-ignore +/plots export-ignore diff --git a/CMakeLists.txt b/CMakeLists.txt index 3147d7c98..fb79c1880 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -479,6 +479,7 @@ set (wsjt_FSRCS lib/ft8/genft8.f90 lib/genmsk_128_90.f90 lib/genmsk40.f90 + lib/ft4/ft4code.f90 lib/ft4/genft4.f90 lib/ft4/gen_ft4wave.f90 lib/ft8/gen_ft8wave.f90 @@ -1305,6 +1306,9 @@ target_link_libraries (jt65 wsjt_fort wsjt_cxx) add_executable (ft8code lib/ft8/ft8code.f90 wsjtx.rc) target_link_libraries (ft8code wsjt_fort wsjt_cxx) +add_executable (ft4code lib/ft4/ft4code.f90 wsjtx.rc) +target_link_libraries (ft4code wsjt_fort wsjt_cxx) + add_executable (ft8 lib/ft8.f90 wsjtx.rc) target_link_libraries (ft8 wsjt_fort wsjt_cxx) diff --git a/Configuration.ui b/Configuration.ui index 53091a905..e86fe984a 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -951,7 +951,7 @@ a few, particularly some Kenwood rigs, require it). - <html><head/><body><p>Use the RS-232 DTR control line to toggle your radio's PTT, requires hardware to inteface the line.</p><p>Some commercial interface units also use this method.</p><p>The DTR control line of the CAT serial port may be used for this or a DTR control line on a different serial port may be used.</p></body></html> + <html><head/><body><p>Use the RS-232 DTR control line to toggle your radio's PTT, requires hardware to interface the line.</p><p>Some commercial interface units also use this method.</p><p>The DTR control line of the CAT serial port may be used for this or a DTR control line on a different serial port may be used.</p></body></html> &DTR @@ -982,7 +982,7 @@ other hardware interface for PTT. - <html><head/><body><p>Use the RS-232 RTS control line to toggle your radio's PTT, requires hardware to inteface the line.</p><p>Some commercial interface units also use this method.</p><p>The RTS control line of the CAT serial port may be used for this or a RTS control line on a different serial port may be used. Note that this option is not available on the CAT serial port when hardware flow control is used.</p></body></html> + <html><head/><body><p>Use the RS-232 RTS control line to toggle your radio's PTT, requires hardware to interface the line.</p><p>Some commercial interface units also use this method.</p><p>The RTS control line of the CAT serial port may be used for this or a RTS control line on a different serial port may be used. Note that this option is not available on the CAT serial port when hardware flow control is used.</p></body></html> R&TS @@ -1080,7 +1080,7 @@ or bandwidth is selected). - If this is availabe then it is usually the correct mode for this program. + If this is available then it is usually the correct mode for this program. Data/P&kt diff --git a/doc/common/links.adoc b/doc/common/links.adoc index e77dafdaa..ae1738f63 100644 --- a/doc/common/links.adoc +++ b/doc/common/links.adoc @@ -94,7 +94,7 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes. :win32_openssl: https://slproweb.com/download/Win32OpenSSL_Light-1_0_2t.exe[Win32 OpenSSL Light Package] :win64_openssl: https://slproweb.com/download/Win64OpenSSL_Light-1_1_0L.exe[Win64 OpenSSL Light Package] :writelog: https://writelog.com/[Writelog] -:wsjt_yahoo_group: https://groups.yahoo.com/neo/groups/wsjtgroup/info[WSJT Group] +:wsjtx_group: https://groups.io/g/WSJTX[WSJTX Group] :wsjtx: http://physics.princeton.edu/pulsar/K1JT/wsjtx.html[WSJT-X] :wspr0_guide: http://www.physics.princeton.edu/pulsar/K1JT/WSPR0_Instructions.TXT[WSPR0 Guide] :wspr: http://physics.princeton.edu/pulsar/K1JT/wspr.html[WSPR Home Page] diff --git a/doc/user_guide/en/support.adoc b/doc/user_guide/en/support.adoc index 0a7e74b09..805ea0493 100644 --- a/doc/user_guide/en/support.adoc +++ b/doc/user_guide/en/support.adoc @@ -1,8 +1,8 @@ === Help with Setup The best source of help in setting up your station or configuring -_WSJT-X_ is the {wsjt_yahoo_group} at email address -wsjtgroup@yahoogroups.com. The chances are good that someone with +_WSJT-X_ is the {wsjtx_group} at email address +wsjtx@groups.io. The chances are good that someone with similar interests and equipment has already solved your problem and will be happy to help. To post messages here you will need to join the group. diff --git a/lib/77bit/g8 b/lib/77bit/g8 index 2258817d3..33819134d 100644 --- a/lib/77bit/g8 +++ b/lib/77bit/g8 @@ -1,2 +1,3 @@ -gfortran -o test28 -fbounds-check -Wall -Wno-conversion test28.f90 pack28.f90 \ - unpack28.f90 ihashcall.f90 hash22.f90 save_hash_call.f90 +gfortran -c packjt77.f90 +gfortran -o test28 -fbounds-check -Wall -Wno-conversion test28.f90 \ + ../chkcall.f90 packjt77.o diff --git a/lib/77bit/packjt77.f90 b/lib/77bit/packjt77.f90 index c93776105..b693da0eb 100644 --- a/lib/77bit/packjt77.f90 +++ b/lib/77bit/packjt77.f90 @@ -808,7 +808,7 @@ subroutine pack77_01(nwords,w,i3,n3,c77) call chkcall(w(3),bcall_2,ok2) if(.not.ok2) go to 900 !3rd word must be a valid basecall -! Type 0.1: K1ABC RR73; W9XYZ -11 28 28 10 5 71 DXpedition Mode +! Type 0.1: K1ABC RR73; W9XYZ -11 28 28 10 5 71 i3=0 n3=1 call pack28(w(1),n28a) @@ -826,6 +826,9 @@ end subroutine pack77_01 subroutine pack77_02(nwords,w,i3,n3,c77) +! Pack a Type 0.2 message: EU VHF Contest mode +! Example message: PA3XYZ/P R 590003 IO91NP 28 1 1 3 12 25 + character*13 w(19),c13 character*77 c77 character*6 bcall_1,grid6 @@ -879,7 +882,9 @@ end subroutine pack77_02 subroutine pack77_03(nwords,w,i3,n3,c77) + ! Check 0.3 and 0.4 (ARRL Field Day exchange) +! Example message: WA9XYZ KA1ABC R 16A EMA 28 28 1 4 3 7 71 parameter (NSEC=84) !Number of ARRL Sections character*13 w(19) @@ -941,8 +946,11 @@ subroutine pack77_03(nwords,w,i3,n3,c77) return end subroutine pack77_03 + subroutine pack77_1(nwords,w,i3,n3,c77) + ! Check Type 1 (Standard 77-bit message) and Type 2 (ditto, with a "/P" call) +! Example message: WA9XYZ/R KA1ABC/R R FN42 28 1 28 1 1 15 74 parameter (MAXGRID4=32400) character*13 w(19),c13 @@ -1043,10 +1051,12 @@ end subroutine pack77_1 subroutine pack77_3(nwords,w,i3,n3,c77) -! Check Type 2 (ARRL RTTY contest exchange) -!ARRL RTTY - US/Can: rpt state/prov R 579 MA -! - DX: rpt serial R 559 0013 - + +! Check Type 3 (ARRL RTTY contest exchange) +! ARRL RTTY - US/Can: rpt state/prov R 579 MA +! - DX: rpt serial R 559 0013 +! Example message: TU; W9XYZ K1ABC R 579 MA 1 28 28 1 3 13 74 + parameter (NUSCAN=65) !Number of US states and Canadian provinces/territories character*13 w(19) character*77 c77 @@ -1111,8 +1121,11 @@ subroutine pack77_3(nwords,w,i3,n3,c77) 900 return end subroutine pack77_3 + subroutine pack77_4(nwords,w,i3,n3,c77) -! Check Type 3 (One nonstandard call and one hashed call) + +! Check Type 4 (One nonstandard call and one hashed call) +! Example message: PJ4/KA1ABC RR73 12 58 1 2 1 74 integer*8 n58 logical ok1,ok2 @@ -1180,8 +1193,9 @@ subroutine pack77_4(nwords,w,i3,n3,c77) end subroutine pack77_4 subroutine pack77_5(nwords,w,i3,n3,c77) + ! Check Type 5 (WWROF contest exchange) - +!Example message: TU; W9XYZ K1ABC R-09 FN 1 28 28 1 7 9 74 WWROF contest character*13 w(19) character*77 c77 character*6 bcall_1,bcall_2 @@ -1224,7 +1238,7 @@ subroutine pack77_5(nwords,w,i3,n3,c77) if(trim(w(1)).eq.'TU;') itu=1 call pack28(w(1+itu),n28a) call pack28(w(2+itu),n28b) -! 5 TU; W9XYZ K1ABC R-09 FN 1 28 28 1 7 9 74 WWROF contest +!Example message: TU; W9XYZ K1ABC R-09 FN 1 28 28 1 7 9 74 WWROF contest write(c77,1010) itu,n28a,n28b,ir,irpt,nexch,i3 1010 format(b1,2b28.28,b1,b7.7,b9.9,b3.3) diff --git a/lib/77bit/test28.f90 b/lib/77bit/test28.f90 index 67bde4afb..30ce15445 100644 --- a/lib/77bit/test28.f90 +++ b/lib/77bit/test28.f90 @@ -1,11 +1,20 @@ program test28 + use packjt77 parameter (NTOKENS=2063592,MAX22=4194304) - character*13 call_0,call_1,bare_call_1 + character*13 arg,call_00,call_0,call_1 character*1 cerr + logical unpk28_success nargs=iargc() - open(10,file='test28.txt',status='old') + n28=-1 + if(nargs.eq.1) then + call getarg(1,arg) + read(arg,'(i13)',err=2) n28 + endif + if(n28.ge.0) go to 100 + +2 open(10,file='test28.txt',status='old') write(*,1000) 1000 format('Encoded text Recovered text n28 Err? Type'/60('-')) @@ -14,30 +23,41 @@ program test28 if(nargs.eq.0) then read(10,'(a13)',end=999) call_0 else - call getarg(1,call_0) + call_0=arg endif if(call_0.eq.' ') exit if(call_0(1:3).eq.'CQ ' .and. call_0(4:4).ne.' ') call_0(3:3)='_' call_1=' ' - call pack28(call_0,n28) - call unpack28(n28,call_1) + call_00=call_0 + call pack28(call_00,n28) + call unpack28(n28,call_1,unpk28_success) cerr=' ' if(call_0.ne.call_1) cerr='*' - if(call_1(1:1).eq.'<') then - i=index(call_1,'>') - bare_call_1=call_1(2:i-1)//' ' - endif - if(call_0.eq.bare_call_1) cerr=' ' if(call_0(1:3).eq.'CQ_') call_0(3:3)=' ' if(call_1(1:3).eq.'CQ_') call_1(3:3)=' ' if(n28.lt.NTOKENS) write(*,1010) call_0,call_1,n28,cerr 1010 format(a13,2x,a13,i10,2x,a1,2x,'Special token') - if(n28.ge.NTOKENS .and. n28.lt.NTOKENS+MAX22) write(*,1012) call_0, & - call_1,n28,cerr -1012 format(a13,2x,a13,i10,2x,a1,2x,'22-bit hash') + if(n28.ge.NTOKENS .and. n28.lt.NTOKENS+MAX22) then + call_00=call_0 + call save_hash_call(call_00,n10,n12,n22) + write(*,1012) call_0,call_1,n28,cerr,n22 +1012 format(a13,2x,a13,i10,2x,a1,2x,'22-bit hash',i15) + endif if(n28.ge.NTOKENS+MAX22) write(*,1014) call_0,call_1,n28,cerr 1014 format(a13,2x,a13,i10,2x,a1,2x,'Standard callsign') if(nargs.gt.0) exit enddo + go to 999 + +100 call unpack28(n28,call_1,unpk28_success) + cerr=' ' + if(.not.unpk28_success) cerr='*' + if(call_1(1:3).eq.'CQ_') call_1(3:3)=' ' + if(n28.lt.NTOKENS) write(*,2010) n28,call_1,cerr +2010 format(i10,2x,a13,2x,a1,2x,'Special token') + if(n28.ge.NTOKENS .and. n28.lt.NTOKENS+MAX22) write(*,2012) n28,call_1,cerr +2012 format(i10,2x,a13,2x,a1,2x,'22-bit hash') + if(n28.ge.NTOKENS+MAX22) write(*,2014) n28,call_1,cerr +2014 format(i10,2x,a13,2x,a1,2x,'Standard callsign') 999 end program test28 diff --git a/lib/77bit/test28.txt b/lib/77bit/test28.txt index 442215b61..b2801121b 100644 --- a/lib/77bit/test28.txt +++ b/lib/77bit/test28.txt @@ -12,23 +12,16 @@ CQ_AAA CQ_ZZZ CQ_AAAA CQ_ZZZZ -EI30T -YW18FIFA -KH1/KH7Z + + -ZS9YOTA -YB50ST -00A -99ZZZ -000A -009ZZZ -999ZZZ -HA70BAY -WB2000XYZ -WB2000XYZABCD -ZM90DX + + + + + -HB9GOLD + A0 A0A K1ABC diff --git a/lib/ft4/ft4_testmsg.f90 b/lib/ft4/ft4_testmsg.f90 new file mode 100644 index 000000000..0d700ead1 --- /dev/null +++ b/lib/ft4/ft4_testmsg.f90 @@ -0,0 +1,50 @@ + parameter (MAXTEST=75,NTEST=47) + character*37 testmsg(MAXTEST) + data testmsg(1:NTEST)/ & + "TNX BOB 73 GL", & ! 0.0 + "PA9XYZ 590003 IO91NP", & ! 0.2 + "G4ABC/P R 570007 JO22DB", & ! 0.2 + "K1ABC W9XYZ 6A WI", & ! 0.3 + "W9XYZ K1ABC R 17B EMA", & ! 0.3 + "123456789ABCDEF012", & ! 0.5 + "CQ K1ABC FN42", & ! 1. + "K1ABC W9XYZ EN37", & ! 1. + "W9XYZ K1ABC -11", & ! 1. + "K1ABC W9XYZ R-09", & ! 1. + "W9XYZ K1ABC RRR", & ! 1. + "K1ABC W9XYZ 73", & ! 1. + "K1ABC W9XYZ RR73", & ! 1. + "CQ FD K1ABC FN42", & ! 1. + "CQ TEST K1ABC/R FN42", & ! 1. + "K1ABC/R W9XYZ EN37", & ! 1. + "W9XYZ K1ABC/R R FN42", & ! 1. + "K1ABC/R W9XYZ RR73", & ! 1. + "CQ TEST K1ABC FN42", & ! 1. + "W9XYZ -11", & ! 1. + " W9XYZ R-09", & ! 1. + "CQ W9XYZ EN37", & ! 1. + " W9XYZ -11", & ! 1. + "W9XYZ R-09", & ! 1. + " KA1ABC", & ! 1. + "KA1ABC -11", & ! 1. + " KA1ABC R-17", & ! 1. + " KA1ABC 73", & ! 1. + "CQ G4ABC/P IO91", & ! 2. + "G4ABC/P PA9XYZ JO22", & ! 2. + "PA9XYZ G4ABC/P RR73", & ! 2. + "K1ABC W9XYZ 579 WI", & ! 3. + "W9XYZ K1ABC R 589 MA", & ! 3. + "K1ABC KA0DEF 559 MO", & ! 3. + "TU; KA0DEF K1ABC R 569 MA", & ! 3. + "KA1ABC G3AAA 529 0013", & ! 3. + "TU; G3AAA K1ABC R 559 MA", & ! 3. + "CQ KH1/KH7Z", & ! 4. + "CQ PJ4/K1ABC", & ! 4. + "PJ4/K1ABC ", & ! 4. + " PJ4/K1ABC RRR", & ! 4. + "PJ4/K1ABC 73", & ! 4. + " YW18FIFA", & ! 4. + "YW18FIFA RRR", & ! 4. + " YW18FIFA 73", & ! 4. + "CQ YW18FIFA", & ! 4. + " YW18FIFA RR73"/ diff --git a/lib/ft4/ft4code.f90 b/lib/ft4/ft4code.f90 new file mode 100644 index 000000000..a7b2ccdd2 --- /dev/null +++ b/lib/ft4/ft4code.f90 @@ -0,0 +1,101 @@ +program ft4code + +! Provides examples of message packing, LDPC(174,91) encoding, bit and +! symbol ordering, and other details of the FT8 protocol. + + use packjt77 + include 'ft4_params.f90' !Set various constants + include 'ft4_testmsg.f90' + parameter (NWAVE=NN*NSPS) + + character*37 msg,msgsent + character*77 c77 + character*9 comment + character bad*1,msgtype*18 + integer itone(NN) + integer*1 msgbits(77),rvec(77),codeword(174) + data rvec/0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0, & + 1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, & + 0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/ + +! Get command-line argument(s) + nargs=iargc() + if(nargs.ne.1 .and. nargs.ne.3) then + print* + print*,'Program ft4code: Provides examples of message packing, ', & + 'LDPC(174,91) encoding,' + print*,'bit and symbol ordering, and other details of the FT4 protocol.' + print* + print*,'Usage: ft4code [-c grid] "message" # Results for specified message' + print*,' ft4code -t # Examples of all message types' + go to 999 + endif + + call getarg(1,msg) !Message to be transmitted + if(len(trim(msg)).eq.2 .and. msg(1:2).eq.'-t') then + nmsg=NTEST + else + call fmtmsg(msg,iz) !To upper case; collapse multiple blanks + nmsg=1 + endif + + write(*,1010) +1010 format(4x,'Message',31x,'Decoded',29x,'Err i3.n3'/100('-')) + + do imsg=1,nmsg + if(nmsg.gt.1) msg=testmsg(imsg) + +! Generate msgsent, msgbits, and itone + i3=-1 + n3=-1 + call pack77(msg,i3,n3,c77) + call genft4(msg,0,msgsent,msgbits,itone) + call encode174_91(msgbits,codeword) + msgtype="" + if(i3.eq.0) then + if(n3.eq.0) msgtype="Free text" + if(n3.eq.1) msgtype="DXpedition mode" + if(n3.eq.2) msgtype="EU VHF Contest" + if(n3.eq.3) msgtype="ARRL Field Day" + if(n3.eq.4) msgtype="ARRL Field Day" + if(n3.eq.5) msgtype="Telemetry" + if(n3.ge.6) msgtype="Undefined type" + endif + if(i3.eq.1) msgtype="Standard msg" + if(i3.eq.2) msgtype="EU VHF Contest" + if(i3.eq.3) msgtype="ARRL RTTY Roundup" + if(i3.eq.4) msgtype="Nonstandard calls" + if(i3.ge.5) msgtype="Undefined msg type" + if(i3.ge.1) n3=-1 + bad=" " + comment=' ' + if(msg.ne.msgsent) bad="*" + if(n3.ge.0) then + write(*,1020) imsg,msg,msgsent,bad,i3,n3,msgtype,comment +1020 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',i1,1x,a18,1x,a9) + else + write(*,1022) imsg,msg,msgsent,bad,i3,msgtype,comment +1022 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',1x,1x,a18,1x,a9) + endif + enddo + + if(nmsg.eq.1) then + write(*,1030) ieor(msgbits,rvec) +1030 format(/'Source-encoded message before scrambling, 77 bits: ',/77i1) + write(*,1032) rvec +1032 format(/'Scrambling vector, 77 bits: ',/77i1) + write(*,1034) msgbits +1034 format(/'Source-encoded message after scrambling, 77 bits:'/77i1) + write(*,1036) codeword(78:91) +1036 format(/'14-bit CRC: ',/14i1) + write(*,1038) codeword(92:174) +1038 format(/'83 Parity bits: ',/83i1) + write(*,1040) 0,itone,0 +1040 format(/'Channel symbols (105 tones):'/ & + 'R Sync',13x,'Data',13x, & + ' Sync',13x,'Data',13x, & + ' Sync',13x,'Data',13x,' Sync R'/ & + i1,1x,4i1,1x,29i1,1x,4i1,1x,29i1,1x,4i1,1x,29i1,1x,4i1,i2) + endif + +999 end program ft4code diff --git a/lib/ft8/ft8_testmsg.f90 b/lib/ft8/ft8_testmsg.f90 index 2a1bf8f9e..253641d27 100644 --- a/lib/ft8/ft8_testmsg.f90 +++ b/lib/ft8/ft8_testmsg.f90 @@ -1,51 +1,51 @@ parameter (MAXTEST=75,NTEST=48) character*37 testmsg(MAXTEST) data testmsg(1:NTEST)/ & - "CQ K1ABC FN42", & - "K1ABC W9XYZ EN37", & - "W9XYZ K1ABC -11", & - "K1ABC W9XYZ R-09", & - "W9XYZ K1ABC RRR", & - "K1ABC W9XYZ 73", & - "K1ABC W9XYZ RR73", & - "CQ KH1/KH7Z", & - "K1ABC RR73; W9XYZ -08", & - "CQ FD K1ABC FN42", & - "K1ABC W9XYZ 6A WI", & - "W9XYZ K1ABC R 2B EMA", & - "CQ TEST K1ABC/R FN42", & - "K1ABC/R W9XYZ EN37", & - "W9XYZ K1ABC/R R FN42", & - "K1ABC/R W9XYZ RR73", & - "CQ TEST K1ABC FN42", & - "K1ABC W9XYZ 579 WI", & - "W9XYZ K1ABC R 589 MA", & - "K1ABC KA0DEF 559 MO", & - "TU; KA0DEF K1ABC R 569 MA", & - "KA1ABC G3AAA 529 0013", & - "TU; G3AAA K1ABC R 559 MA", & - "CQ G4ABC/P IO91", & - "G4ABC/P PA9XYZ JO22", & - "PA9XYZ 590003 IO91NP", & - "G4ABC/P R 570007 JO22DB", & - "PA9XYZ G4ABC/P RR73", & - "CQ PJ4/K1ABC", & - "PJ4/K1ABC ", & - "W9XYZ -11", & - " W9XYZ R-09", & - " PJ4/K1ABC RRR", & - "PJ4/K1ABC 73", & - "CQ W9XYZ EN37", & - " YW18FIFA", & - " W9XYZ -11", & - "W9XYZ R-09", & - "YW18FIFA RRR", & - " YW18FIFA 73", & - "TNX BOB 73 GL", & - "CQ YW18FIFA", & - " KA1ABC", & - "KA1ABC -11", & - " KA1ABC R-17", & - " YW18FIFA RR73", & - " KA1ABC 73", & - "123456789ABCDEF012"/ + "TNX BOB 73 GL", & ! 0.0 + "K1ABC RR73; W9XYZ -08", & ! 0.1 + "PA9XYZ 590003 IO91NP", & ! 0.2 + "G4ABC/P R 570007 JO22DB", & ! 0.2 + "K1ABC W9XYZ 6A WI", & ! 0.3 + "W9XYZ K1ABC R 17B EMA", & ! 0.3 + "123456789ABCDEF012", & ! 0.5 + "CQ K1ABC FN42", & ! 1. + "K1ABC W9XYZ EN37", & ! 1. + "W9XYZ K1ABC -11", & ! 1. + "K1ABC W9XYZ R-09", & ! 1. + "W9XYZ K1ABC RRR", & ! 1. + "K1ABC W9XYZ 73", & ! 1. + "K1ABC W9XYZ RR73", & ! 1. + "CQ FD K1ABC FN42", & ! 1. + "CQ TEST K1ABC/R FN42", & ! 1. + "K1ABC/R W9XYZ EN37", & ! 1. + "W9XYZ K1ABC/R R FN42", & ! 1. + "K1ABC/R W9XYZ RR73", & ! 1. + "CQ TEST K1ABC FN42", & ! 1. + "W9XYZ -11", & ! 1. + " W9XYZ R-09", & ! 1. + "CQ W9XYZ EN37", & ! 1. + " W9XYZ -11", & ! 1. + "W9XYZ R-09", & ! 1. + " KA1ABC", & ! 1. + "KA1ABC -11", & ! 1. + " KA1ABC R-17", & ! 1. + " KA1ABC 73", & ! 1. + "CQ G4ABC/P IO91", & ! 2. + "G4ABC/P PA9XYZ JO22", & ! 2. + "PA9XYZ G4ABC/P RR73", & ! 2. + "K1ABC W9XYZ 579 WI", & ! 3. + "W9XYZ K1ABC R 589 MA", & ! 3. + "K1ABC KA0DEF 559 MO", & ! 3. + "TU; KA0DEF K1ABC R 569 MA", & ! 3. + "KA1ABC G3AAA 529 0013", & ! 3. + "TU; G3AAA K1ABC R 559 MA", & ! 3. + "CQ KH1/KH7Z", & ! 4. + "CQ PJ4/K1ABC", & ! 4. + "PJ4/K1ABC ", & ! 4. + " PJ4/K1ABC RRR", & ! 4. + "PJ4/K1ABC 73", & ! 4. + " YW18FIFA", & ! 4. + "YW18FIFA RRR", & ! 4. + " YW18FIFA 73", & ! 4. + "CQ YW18FIFA", & ! 4. + " YW18FIFA RR73"/ diff --git a/lib/ft8/ft8code.f90 b/lib/ft8/ft8code.f90 index cbafd34be..8d5b52799 100644 --- a/lib/ft8/ft8code.f90 +++ b/lib/ft8/ft8code.f90 @@ -12,7 +12,8 @@ program ft8code character*9 comment character bad*1,msgtype*18 integer itone(NN) - integer*1 msgbits(77) + integer*1 msgbits(77),codeword(174) + logical short ! Get command-line argument(s) nargs=iargc() @@ -23,19 +24,22 @@ program ft8code print*,'bit and symbol ordering, and other details of the FT8 protocol.' print* print*,'Usage: ft8code [-c grid] "message" # Results for specified message' - print*,' ft8code -t # Examples of all message types' + print*,' ft8code -T # Examples of all message types' + print*,' ft8code -t # Short format examples' go to 999 endif call getarg(1,msg) !Message to be transmitted - if(len(trim(msg)).eq.2 .and. msg(1:2).eq.'-t') then + short=.false. + if(len(trim(msg)).eq.2 .and. (msg(1:2).eq.'-T' .or. msg(1:2).eq.'-t')) then nmsg=NTEST + short=msg(1:2).eq.'-t' else call fmtmsg(msg,iz) !To upper case; collapse multiple blanks nmsg=1 endif - write(*,1010) + if(.not.short) write(*,1010) 1010 format(4x,'Message',31x,'Decoded',29x,'Err i3.n3'/100('-')) do imsg=1,nmsg @@ -45,6 +49,7 @@ program ft8code i3=-1 n3=-1 call genft8(msg,i3,n3,msgsent,msgbits,itone) + call encode174_91(msgbits,codeword) msgtype="" if(i3.eq.0) then if(n3.eq.0) msgtype="Free text" @@ -58,26 +63,42 @@ program ft8code if(i3.eq.1) msgtype="Standard msg" if(i3.eq.2) msgtype="EU VHF Contest" if(i3.eq.3) msgtype="ARRL RTTY Roundup" - if(i3.eq.4) msgtype="Nonstandard calls" - if(i3.ge.5) msgtype="Undefined msg type" + if(i3.eq.4) msgtype="Nonstandard call" + if(i3.ge.5) msgtype="Undefined type" if(i3.ge.1) n3=-1 bad=" " comment=' ' if(msg.ne.msgsent) bad="*" - if(n3.ge.0) then - write(*,1020) imsg,msg,msgsent,bad,i3,n3,msgtype,comment -1020 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',i1,1x,a18,1x,a9) + if(short) then + if(n3.ge.0) then + write(*,1020) i3,n3,msg,bad,msgtype +1020 format(i1,'.',i1,2x,a37,1x,a1,1x,a18) + else + write(*,1022) i3,msg,bad,msgtype +1022 format(i1,'.',3x,a37,1x,a1,1x,a18) + endif else - write(*,1022) imsg,msg,msgsent,bad,i3,msgtype,comment -1022 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',1x,1x,a18,1x,a9) + if(n3.ge.0) then + write(*,1024) imsg,msg,msgsent,bad,i3,n3,msgtype,comment +1024 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',i1,1x,a18,1x,a9) + else + write(*,1026) imsg,msg,msgsent,bad,i3,msgtype,comment +1026 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',1x,1x,a18,1x,a9) + endif endif enddo if(nmsg.eq.1) then write(*,1030) msgbits -1030 format(/'Message bits: ',/77i1) +1030 format(/'Source-encoded message, 77 bits: ',/77i1) + write(*,1031) codeword(78:91) +1031 format(/'14-bit CRC: ',/14i1) + write(*,1032) codeword(92:174) +1032 format(/'83 Parity bits: ',/83i1) write(*,1034) itone -1034 format(/'Channel symbols (tones):'/79i1) +1034 format(/'Channel symbols (79 tones):'/ & + ' Sync ',14x,'Data',15x,'Sync',15x,'Data',15x,'Sync'/ & + 7i1,1x,29i1,1x,7i1,1x,29i1,1x,7i1) endif 999 end program ft8code diff --git a/translations/wsjtx_en_GB.ts b/translations/wsjtx_en_GB.ts index 2e0570962..261d4486d 100644 --- a/translations/wsjtx_en_GB.ts +++ b/translations/wsjtx_en_GB.ts @@ -2066,7 +2066,7 @@ Yellow when too low - Frequncy entry + Frequency entry @@ -2894,12 +2894,12 @@ list. The list can be maintained in Settings (F2). - <html><head/><body><p>6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</p></body></html> + <html><head/><body><p>6 digit locators cause 2 different messages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</p></body></html> - 6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol. + 6 digit locators cause 2 different messages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol. diff --git a/translations/wsjtx_pt_PT.ts b/translations/wsjtx_pt_PT.ts index 6167f5d8d..3aae238db 100644 --- a/translations/wsjtx_pt_PT.ts +++ b/translations/wsjtx_pt_PT.ts @@ -2066,7 +2066,7 @@ Yellow when too low - Frequncy entry + Frequency entry @@ -2894,12 +2894,12 @@ list. The list can be maintained in Settings (F2). - <html><head/><body><p>6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</p></body></html> + <html><head/><body><p>6 digit locators cause 2 different messages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</p></body></html> - 6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol. + 6 digit locators cause 2 different messages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol. diff --git a/widgets/mainwindow.ui b/widgets/mainwindow.ui index c37da3885..288ce9a57 100644 --- a/widgets/mainwindow.ui +++ b/widgets/mainwindow.ui @@ -1,4 +1,4 @@ - + MainWindow @@ -981,7 +981,7 @@ QPushButton[state="ok"] { <html><head/><body><p>Select operating band or enter frequency in MHz or enter kHz increment followed by k.</p></body></html> - Frequncy entry + Frequency entry Select operating band or enter frequency in MHz or enter kHz increment followed by k. @@ -2635,10 +2635,10 @@ list. The list can be maintained in Settings (F2). - <html><head/><body><p>6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</p></body></html> + <html><head/><body><p>6 digit locators cause 2 different messages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</p></body></html> - 6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol. + 6 digit locators cause 2 different messages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol. Prefer type 1 messages