Fix bugs for a few edge-case messages. Add some test files.

This commit is contained in:
Joe Taylor 2018-06-29 12:02:29 -04:00
parent 18a839963f
commit 2da8f51fc2
7 changed files with 199 additions and 71 deletions

View File

@ -19,7 +19,7 @@ i3.n3 Example message Bits Total Purpose
1 WA9XYZ/R KA1ABC/R R FN42 28 1 28 1 1 15 74 Standard msg
2 PA3XYZ/P GM4ABC/P R JO22 28 1 28 1 1 15 74 EU VHF contest
3 TU; W9XYZ K1ABC R 579 MA 1 28 28 1 3 13 74 ARRL RTTY contest
3 TU; W9XYZ K1ABC R 579 MA 1 28 28 1 3 13 74 ARRL RTTY Roundup
4 <WA9XYZ> PJ4/KA1ABC RR73 12 58 1 2 1 74 Nonstandard calls
5
6
@ -57,19 +57,21 @@ i3.n3
0.4 ARRL Field Day exchange (17-32 transmitters).
0.5 Telemetry, 71 bits
1. Two standard callsigns, Roger, and grid or report. Each callsign
may have an appended "/R" to indicate Rover status for NA VHF
contests.
2. Standard message for ARRL RTTY Roundup. Optional "TU;" at
2. Same as Type 1, but uses /P instead of /R. For European VHF contests.
3. Standard message for ARRL RTTY Roundup. Optional "TU;" at
beginning to finish a previous QSO; then two standard callsigns,
optional "R", a 3-bit report (529 to 599), and 13 bits to indicate
US state, Canadian province/territory, or DX serial number.
3. Same as Type 1, but uses /P instead of /R. For European VHF contests.
4. One nonstandard call with up to 11 characters, one hashed call,
followed by <blank>, RRR, RR73, or 73.
4. One hashed call; one standard, compound, or nonstandard call with
up to 11 characters; and an optional RRR, RR73, or 73.
---------------------------------------------------------------------------
The following are tentative: not to be included in first release.
@ -78,4 +80,3 @@ The following are tentative: not to be included in first release.
DX: RST + CQzone R 559 15 R1 r3 z6
6. CQ WPX RTTY - RST + serial R 589 0013 R1 r3 n12

View File

@ -1,6 +1,7 @@
program encode77
character msg*37,msg0*37,cerr*1
character*80 msg0
character msg*37,cerr*1
character*77 c77
nargs=iargc()
@ -14,16 +15,20 @@ program encode77
1000 format('i3.n3 Err Message to be encoded Decoded message'/ &
80('-'))
read(10,1002,end=999) msg0
1002 format(a37)
1002 format(a80)
endif
if(msg0.eq.' ') exit
call pack77(msg0,i3,n3,c77)
if(msg0(1:1).eq.'$') exit
if(msg0.eq.' ') cycle
if(msg0(2:2).eq.'.' .or. msg0(3:3).eq.'.') cycle
if(msg0(1:3).eq.'---') cycle
msg0=adjustl(msg0)
call pack77(msg0(1:37),i3,n3,c77)
call unpack77(c77,msg)
cerr=' '
if(msg.ne.msg0) cerr='*'
if(i3.eq.0) write(*,1004) i3,n3,cerr,msg0,msg
if(msg.ne.msg0(1:37)) cerr='*'
if(i3.eq.0) write(*,1004) i3,n3,cerr,msg0(1:37),msg
1004 format(i2,'.',i1,2x,a1,3x,a37,1x,a37)
if(i3.ge.1) write(*,1005) i3,cerr,msg0,msg
if(i3.ge.1) write(*,1005) i3,cerr,msg0(1:37),msg
1005 format(i2,'.',3x,a1,3x,a37,1x,a37)
if(nargs.eq.1) exit
enddo

41
lib/77bit/encode77.out Normal file
View File

@ -0,0 +1,41 @@
i3.n3 Err Message to be encoded Decoded message
--------------------------------------------------------------------------------
1. CQ K1ABC FN42 CQ K1ABC FN42
1. K1ABC W9XYZ EN37 K1ABC W9XYZ EN37
1. W9XYZ K1ABC -11 W9XYZ K1ABC -11
1. K1ABC W9XYZ R-09 K1ABC W9XYZ R-09
1. W9XYZ K1ABC RRR W9XYZ K1ABC RRR
1. K1ABC W9XYZ 73 K1ABC W9XYZ 73
1. CQ K1ABC FN42 CQ K1ABC FN42
1. K1ABC W9XYZ -09 K1ABC W9XYZ -09
1. W9XYZ K1ABC R-11 W9XYZ K1ABC R-11
1. K1ABC W9XYZ RR73 K1ABC W9XYZ RR73
1. W9XYZ K1ABC 73 W9XYZ K1ABC 73
4. CQ KH1/KH7Z CQ KH1/KH7Z
1. KH7Z K1ABC FN42 KH7Z K1ABC FN42
1. K1ABC KH7Z -12 K1ABC KH7Z -12
1. KH7Z K1ABC R-14 KH7Z K1ABC R-14
0.1 K1ABC RR73; W9XYZ <KH1/KH7Z> -08 K1ABC RR73; W9XYZ <KH1/KH7Z> -08
1. CQ FD K1ABC FN42 CQ FD K1ABC FN42
0.3 K1ABC W9XYZ 6A WI K1ABC W9XYZ 6A WI
0.3 W9XYZ K1ABC R 2B EMA W9XYZ K1ABC R 2B EMA
1. K1ABC W9XYZ RR73 K1ABC W9XYZ RR73
1. CQ TEST K1ABC/R FN42 CQ TEST K1ABC/R FN42
1. K1ABC/R W9XYZ EN37 K1ABC/R W9XYZ EN37
1. W9XYZ K1ABC/R R FN42 W9XYZ K1ABC/R R FN42
1. K1ABC/R W9XYZ RR73 K1ABC/R W9XYZ RR73
1. CQ TEST K1ABC FN42 CQ TEST K1ABC FN42
3. K1ABC W9XYZ 579 WI K1ABC W9XYZ 579 WI
3. W9XYZ K1ABC R 589 MA W9XYZ K1ABC R 589 MA
1. K1ABC W9XYZ RR73 K1ABC W9XYZ RR73
2. CQ G4ABC/P IO91 CQ G4ABC/P IO91
2. G4ABC/P PA9XYZ JO22 G4ABC/P PA9XYZ JO22
0.2 PA9XYZ 590003 IO91NP PA9XYZ 590003 IO91NP
0.2 G4ABC/P R 570007 JO22DB G4ABC/P R 570007 JO22DB
2. PA9XYZ G4ABC/P RR73 PA9XYZ G4ABC/P RR73
4. CQ PJ4/K1ABC CQ PJ4/K1ABC
4. <PJ4/K1ABC> W9XYZ <PJ4/K1ABC> W9XYZ
1. W9XYZ K1ABC -11 W9XYZ K1ABC -11
1. K1ABC W9XYZ R-09 K1ABC W9XYZ R-09
4. W9XYZ <PJ4/K1ABC> RRR W9XYZ <PJ4/K1ABC> RRR
4. <PJ4/K1ABC> W9XYZ 73 <PJ4/K1ABC> W9XYZ 73

View File

@ -1,49 +1,62 @@
FREE TEXT MSG 71 0 71
CQ YW18FIFA
K1ABC RR73; W9XYZ <KH1/KH7Z> -12 28 28 10 5 1 71 DXpedition Mode
PA3XYZ/P R 590003 IO91NP 28 1 1 3 12 25 2 70 EU VHF contest (2)
PA3XYZ 520093 IO91NP 28 1 1 3 12 25 2 70 EU VHF contest (2)
WA9XYZ KA1ABC R 16A EMA 28 28 1 4 3 7 3 71 ARRL Field Day
WA9XYZ KA1ABC 7D EMA 28 28 1 4 3 7 3 71 ARRL Field Day
WA9XYZ G8ABC 1D DX 28 28 1 4 3 7 3 71 ARRL Field Day
WA9XYZ KA1ABC R 32A EMA 28 28 1 4 3 7 4 71 ARRL Field Day
123456789ABCDEF012 71 71 Telemetry (18 hex)
71234567 71 71 Telemetry (18 hex)
81234567 71 71 Telemetry (18 hex)
7123456789ABCDEF01 71 71 Telemetry (18 hex)
8123456789ABCDEF01 71 71 Telemetry (18 hex)
WA9XYZ/R KA1ABC/R R FN42 28 1 28 1 1 15 74 Standard msg
WA9XYZ KA1ABC R-19 28 1 28 1 1 15 74 Standard msg
WA9XYZ KA1ABC +03 28 1 28 1 1 15 74 Standard msg
WA9XYZ KA1ABC -30 28 1 28 1 1 15 74 Standard msg
WA9XYZ KA1ABC +30 28 1 28 1 1 15 74 Standard msg
1. Standard QSO
-----------------------------------------------------------
CQ K1ABC FN42
DE K1ABC FN42
QRZ K1ABC FN42
CQ AA K1ABC FN42
CQ ZZ K1ABC FN42
CQ 000 K1ABC FN42
CQ 313 K1ABC FN42
CQ 999 K1ABC FN42
CQ AAA K1ABC FN42
CQ ZZZ K1ABC FN42
CQ AAAA K1ABC FN42
CQ ZZZZ K1ABC FN42
K1ABC W9XYZ EN37
W9XYZ K1ABC -11
K1ABC W9XYZ R-09
W9XYZ K1ABC RRR
K1ABC W9XYZ 73
2. Short-cycle QSO
-----------------------------------------------------------
CQ K1ABC FN42
K1ABC W9XYZ -09
W9XYZ K1ABC R-11
K1ABC W9XYZ RR73
W9XYZ K1ABC 73
3. FT8 DXpedition Mode
-----------------------------------------------------------
CQ KH1/KH7Z
CQ YW18FIFA
CQ W4/YW18FIFA
PA1XYZ/P GM4ABC/P R FN42 28 1 28 1 1 15 74 EU VHF Contest
TU; W9XYZ K1ABC R 579 MA 1 28 28 1 3 13 74 ARRL RTTY contest
TU; W9XYZ G8ABC R 559 0013 1 28 28 1 3 13 74 ARRL RTTY (DX)
W9XYZ K1ABC 519 MA 1 28 28 1 3 13 74 ARRL RTTY contest
W9XYZ K1ABC 529 MA 1 28 28 1 3 13 74 ARRL RTTY contest
W9XYZ K1ABC 599 MA 1 28 28 1 3 13 74 ARRL RTTY contest
W9XYZ K1ABC 599 SNJ 1 28 28 1 3 13 74 ARRL RTTY contest
W9XYZ G8ABC 529 0013 1 28 28 1 3 13 74 ARRL RTTY (DX)
W9XYZ G8ABC 599 0013 1 28 28 1 3 13 74 ARRL RTTY (DX)
<WA9XYZ> PJ4/KA1ABC 13 58 1 2 74 Nonstandard call
PJ4/KA1ABC <WA9XYZ> RRR 13 58 1 2 74 Nonstandard call
<WA9XYZ> PJ4/KA1ABC RR73 13 58 1 2 74 Nonstandard call
PJ4/KA1ABC <WA9XYZ> 73 13 58 1 2 74 Nonstandard call
<WA9XYZ> PJ4/KA1ABC 73 13 58 1 2 74 Nonstandard call
CQ 313 YW18FIFA
KH7Z K1ABC FN42
K1ABC KH7Z -12
KH7Z K1ABC R-14
K1ABC RR73; W9XYZ <KH1/KH7Z> -08
4. ARRL Field Day
-----------------------------------------------------------
CQ FD K1ABC FN42
K1ABC W9XYZ 6A WI
W9XYZ K1ABC R 2B EMA
K1ABC W9XYZ RR73
5. ARRL VHF Contests
-----------------------------------------------------------
CQ TEST K1ABC/R FN42
K1ABC/R W9XYZ EN37
W9XYZ K1ABC/R R FN42
K1ABC/R W9XYZ RR73
6. ARRL RTTY Contest
-----------------------------------------------------------
CQ TEST K1ABC FN42
K1ABC W9XYZ 579 WI
W9XYZ K1ABC R 589 MA
K1ABC W9XYZ RR73
7. EU VHF Contest
-----------------------------------------------------------
CQ G4ABC/P IO91
G4ABC/P PA9XYZ JO22
PA9XYZ 590003 IO91NP
G4ABC/P R 570007 JO22DB
PA9XYZ G4ABC/P RR73
8. Compound or goofy calls
-----------------------------------------------------------
CQ PJ4/K1ABC
<PJ4/K1ABC> W9XYZ
W9XYZ K1ABC -11
K1ABC W9XYZ R-09
W9XYZ <PJ4/K1ABC> RRR
<PJ4/K1ABC> W9XYZ 73

49
lib/77bit/messages_2.txt Normal file
View File

@ -0,0 +1,49 @@
FREE TEXT MSG 71 0 71
CQ YW18FIFA
K1ABC RR73; W9XYZ <KH1/KH7Z> -12 28 28 10 5 1 71 DXpedition Mode
PA3XYZ/P R 590003 IO91NP 28 1 1 3 12 25 2 70 EU VHF contest (2)
PA3XYZ 520093 IO91NP 28 1 1 3 12 25 2 70 EU VHF contest (2)
WA9XYZ KA1ABC R 16A EMA 28 28 1 4 3 7 3 71 ARRL Field Day
WA9XYZ KA1ABC 7D EMA 28 28 1 4 3 7 3 71 ARRL Field Day
WA9XYZ G8ABC 1D DX 28 28 1 4 3 7 3 71 ARRL Field Day
WA9XYZ KA1ABC R 32A EMA 28 28 1 4 3 7 4 71 ARRL Field Day
123456789ABCDEF012 71 71 Telemetry (18 hex)
71234567 71 71 Telemetry (18 hex)
81234567 71 71 Telemetry (18 hex)
7123456789ABCDEF01 71 71 Telemetry (18 hex)
8123456789ABCDEF01 71 71 Telemetry (18 hex)
WA9XYZ/R KA1ABC/R R FN42 28 1 28 1 1 15 74 Standard msg
WA9XYZ KA1ABC R-19 28 1 28 1 1 15 74 Standard msg
WA9XYZ KA1ABC +03 28 1 28 1 1 15 74 Standard msg
WA9XYZ KA1ABC -30 28 1 28 1 1 15 74 Standard msg
WA9XYZ KA1ABC +30 28 1 28 1 1 15 74 Standard msg
CQ K1ABC FN42
DE K1ABC FN42
QRZ K1ABC FN42
CQ AA K1ABC FN42
CQ ZZ K1ABC FN42
CQ 000 K1ABC FN42
CQ 313 K1ABC FN42
CQ 999 K1ABC FN42
CQ AAA K1ABC FN42
CQ ZZZ K1ABC FN42
CQ AAAA K1ABC FN42
CQ ZZZZ K1ABC FN42
CQ KH1/KH7Z
CQ YW18FIFA
CQ W4/YW18FIFA
PA1XYZ/P GM4ABC/P R FN42 28 1 28 1 1 15 74 EU VHF Contest
TU; W9XYZ K1ABC R 579 MA 1 28 28 1 3 13 74 ARRL RTTY contest
TU; W9XYZ G8ABC R 559 0013 1 28 28 1 3 13 74 ARRL RTTY (DX)
W9XYZ K1ABC 519 MA 1 28 28 1 3 13 74 ARRL RTTY contest
W9XYZ K1ABC 529 MA 1 28 28 1 3 13 74 ARRL RTTY contest
W9XYZ K1ABC 599 MA 1 28 28 1 3 13 74 ARRL RTTY contest
W9XYZ K1ABC 599 SNJ 1 28 28 1 3 13 74 ARRL RTTY contest
W9XYZ G8ABC 529 0013 1 28 28 1 3 13 74 ARRL RTTY (DX)
W9XYZ G8ABC 599 0013 1 28 28 1 3 13 74 ARRL RTTY (DX)
<WA9XYZ> PJ4/KA1ABC 13 58 1 2 74 Nonstandard call
PJ4/KA1ABC <WA9XYZ> RRR 13 58 1 2 74 Nonstandard call
<WA9XYZ> PJ4/KA1ABC RR73 13 58 1 2 74 Nonstandard call
PJ4/KA1ABC <WA9XYZ> 73 13 58 1 2 74 Nonstandard call
<WA9XYZ> PJ4/KA1ABC 73 13 58 1 2 74 Nonstandard call
CQ 313 YW18FIFA

View File

@ -15,28 +15,44 @@ subroutine pack77_1(nwords,w,i3,n3,c77)
grid4(3:3).ge.'0' .and. grid4(3:3).le.'9' .and. &
grid4(4:4).ge.'0' .and. grid4(4:4).le.'9'
if(nwords.lt.3 .or. nwords.gt.4) return
if(nwords.lt.2 .or. nwords.gt.4) return
call chkcall(w(1),bcall_1,ok1)
call chkcall(w(2),bcall_2,ok2)
if(w(1)(1:3).eq.'DE ' .or. w(1)(1:3).eq.'CQ_' .or. w(1)(1:3).eq.'CQ ' .or. &
w(1)(1:4).eq.'QRZ ') ok1=.true.
if(.not.ok1 .or. .not.ok2) return
if(nwords.eq.2 .and. (.not.ok2 .or. index(w(2),'/').ge.2)) return
if(nwords.eq.2) go to 10
c1=w(nwords)(1:1)
c2=w(nwords)(1:2)
if(.not.is_grid4(w(nwords)(1:4)) .and. c1.ne.'+' .and. c1.ne.'-' &
.and. c2.ne.'R+' .and. c2.ne.'R-') return
.and. c2.ne.'R+' .and. c2.ne.'R-' .and. trim(w(nwords)).ne.'RRR' .and. &
trim(w(nwords)).ne.'RR73' .and. trim(w(nwords)).ne.'73') return
if(c1.eq.'+' .or. c1.eq.'-') then
ir=0
read(w(nwords),*) irpt
irpt=irpt+35
else if(c2.eq.'R+' .or. c2.eq.'R-') then
ir=1
read(w(nwords)(2:),*) irpt
irpt=irpt+35
else if(trim(w(nwords)).eq.'RRR') then
ir=0
irpt=2
else if(trim(w(nwords)).eq.'RR73') then
ir=0
irpt=3
else if(trim(w(nwords)).eq.'73') then
ir=0
irpt=4
endif
! 1 WA9XYZ/R KA1ABC/R R FN42 28 1 28 1 1 15 74 Standard msg
! 2 PA3XYZ/P GM4ABC/P R JO22 28 1 28 1 1 15 74 EU VHF contest
if(nwords.eq.3 .or. (nwords.eq.4 .and. w(3)(1:2).eq.'R ')) then
10 if(nwords.eq.2 .or. nwords.eq.3 .or. (nwords.eq.4 .and. &
w(3)(1:2).eq.'R ')) then
n3=0
i3=1 !Type 1: Standard message, possibly with "/R"
if(index(w(1),'/P').ge.4 .or. index(w(2),'/P').ge.4) i3=2 !Type 2, with "/P"
@ -61,12 +77,15 @@ subroutine pack77_1(nwords,w,i3,n3,c77)
j4=(ichar(grid4(4:4))-ichar('0'))
igrid4=j1+j2+j3+j4
else
igrid4=MAXGRID4 + 35 + irpt
igrid4=MAXGRID4 + irpt
endif
if(nwords.eq.2) then
ir=0
irpt=1
igrid4=MAXGRID4+irpt
endif
write(c77,1000) n28a,ipa,n28b,ipb,ir,igrid4,i3
1000 format(2(b28.28,b1),b1,b15.15,b3.3)
! print*,igrid4
! print*,c77
return
end subroutine pack77_1

View File

@ -120,8 +120,7 @@ subroutine unpack77(c77,msg)
msg=adjustl(msg)
else if(i3.eq.1 .or. i3.eq.2) then
! Standard message (Type 1) or "/P" form of standard message for EU VHF contest (Type 2)
!### Here and elsewhere, must enable rpt/RRR/RR73/73 in igrid4
! Type 1 (standard message) or Type 2 ("/P" form for EU VHF contest)
read(c77,1000) n28a,ipa,n28b,ipb,ir,igrid4,i3
1000 format(2(b28,b1),b1,b15,b3)
call unpack28(n28a,call_1)
@ -130,6 +129,7 @@ subroutine unpack77(c77,msg)
i=index(call_1,' ')
if(i.ge.4 .and. ipa.eq.1 .and. i3.eq.1) call_1(i:i+1)='/R'
if(i.ge.4 .and. ipa.eq.1 .and. i3.eq.2) call_1(i:i+1)='/P'
i=index(call_2,' ')
if(i.ge.4 .and. ipb.eq.1 .and. i3.eq.1) call_2(i:i+1)='/R'
if(i.ge.4 .and. ipb.eq.1 .and. i3.eq.2) call_2(i:i+1)='/P'
@ -151,7 +151,7 @@ subroutine unpack77(c77,msg)
irpt=igrid4-MAXGRID4
if(irpt.eq.1) msg=trim(call_1)//' '//trim(call_2)
if(irpt.eq.2) msg=trim(call_1)//' '//trim(call_2)//' RRR'
if(irpt.eq.2) msg=trim(call_1)//' '//trim(call_2)//' RR73'
if(irpt.eq.3) msg=trim(call_1)//' '//trim(call_2)//' RR73'
if(irpt.eq.4) msg=trim(call_1)//' '//trim(call_2)//' 73'
if(irpt.ge.5) then
write(crpt,'(i3.2)') irpt-35