diff --git a/CMakeLists.txt b/CMakeLists.txt index a274d049f..df7e5f16f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -330,6 +330,7 @@ set (wsjt_FSRCS lib/gen9.f90 lib/geniscat.f90 lib/genmsk.f90 + lib/genmsk_short.f90 lib/genwspr.f90 lib/geodist.f90 lib/getlags.f90 diff --git a/lib/genmsk.f90 b/lib/genmsk.f90 index 45827d1a8..93fa0202a 100644 --- a/lib/genmsk.f90 +++ b/lib/genmsk.f90 @@ -50,6 +50,13 @@ subroutine genmsk(msg0,ichk,msgsent,i4tone,itype) message=message(i+1:) enddo + if(message(1:1).eq.'<') then + call genmsk_short(message,msgsent,i4tone,itype) + if(itype.lt.0) go to 999 + itone(38)=-37 + go to 900 + endif + 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 @@ -93,7 +100,7 @@ subroutine genmsk(msg0,ichk,msgsent,i4tone,itype) if(mod(nn3,2).eq.0) i4tone(36+n1+n2+n3)=1 !1 parity bit endif - n=count(i4tone.eq.0) +900 n=count(i4tone.eq.0) if(mod(n,2).ne.0) stop 'Parity error in genmsk.' 999 return diff --git a/lib/genmsk_short.f90 b/lib/genmsk_short.f90 new file mode 100644 index 000000000..70aca56e3 --- /dev/null +++ b/lib/genmsk_short.f90 @@ -0,0 +1,45 @@ +subroutine genmsk_short(msg,msgsent,itone,itype) + + use hashing + character*22 msg0,msg,msgsent + character*3 crpt,rpt(0:7) + integer itone(37) + integer b11(11) + integer golay_15_3(0:7) + data b11/1,1,1,0,0,0,1,0,0,1,0/ !Barker 11 code + data rpt /'26 ','27 ','28 ','R26','R27','R28','RRR','73 '/ + data golay_15_3/00000,07025,11704,14025,19164,20909,26468,31765/ + + itype=-1 + msgsent='*** bad message ***' + itone=0 + i1=index(msg,'>') + if(i1.lt.9) go to 900 + crpt=msg(i1+2:i1+5) + do i=0,7 + if(crpt.eq.rpt(i)) go to 10 + enddo + go to 900 + +10 itone(1:11)=b11 + irpt=i + ncodeword=golay_15_3(irpt) !Save the 15-bit codeword for report + do i=26,12,-1 !Insert codeword into itone array + itone(i)=iand(ncodeword,1) + ncodeword=ncodeword/2 + enddo + call hash(msg(2:i1-1),i1-2,ihash) + ihash=iand(ihash,1023) !10-bit hash for the two callsigns + n=ihash + do i=36,27,-1 + itone(i)=iand(n,1) + n=n/2 + enddo + n=count(itone(1:36).eq.0) + itone(37)=1 + if(iand(n,1).eq.1) itone(37)=0 + msgsent=msg + itype=7 + +900 return +end subroutine genmsk_short