mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-23 20:58:55 -05:00
Permit signal reports in the range -50 to +49 dB
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@2779 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
d183afd95a
commit
807f673290
@ -2,33 +2,26 @@ subroutine packgrid(grid,ng,text)
|
|||||||
|
|
||||||
parameter (NGBASE=180*180)
|
parameter (NGBASE=180*180)
|
||||||
character*4 grid
|
character*4 grid
|
||||||
|
character*1 c1
|
||||||
logical text
|
logical text
|
||||||
|
|
||||||
text=.false.
|
text=.false.
|
||||||
if(grid.eq.' ') go to 90 !Blank grid is OK
|
if(grid.eq.' ') go to 90 !Blank grid is OK
|
||||||
|
|
||||||
if(grid(1:1).eq.'-') then !Test for numerical signal report
|
n=99
|
||||||
read(grid(2:3),*,err=1,end=1) n !NB: n is positive
|
c1=grid(1:1)
|
||||||
if(n.lt.1) n=1
|
read(grid,*,err=1) n
|
||||||
if(n.gt.50) n=50
|
go to 2
|
||||||
if(n.gt.30) then
|
1 read(grid(2:4),*,err=2) n
|
||||||
call n2grid(-n,grid) !Very low S/N use locators near -90
|
2 if(n.ge.-50 .and. n.le.49) then
|
||||||
go to 10
|
if(c1.eq.'R') then
|
||||||
|
write(grid,1002) n+50
|
||||||
|
1002 format('LA',i2.2)
|
||||||
|
else
|
||||||
|
write(grid,1003) n+50
|
||||||
|
1003 format('KA',i2.2)
|
||||||
endif
|
endif
|
||||||
1 ng=NGBASE+1+n
|
go to 10
|
||||||
go to 100
|
|
||||||
else if(grid(1:2).eq.'R-') then
|
|
||||||
read(grid(3:4),*,err=2,end=2) n
|
|
||||||
if(n.lt.1) n=1
|
|
||||||
if(n.gt.50) n=50
|
|
||||||
if(n.gt.30) then
|
|
||||||
call n2grid(-n-20,grid) !Very low S/N use locators near -90
|
|
||||||
go to 10
|
|
||||||
endif
|
|
||||||
|
|
||||||
2 if(n.eq.0) go to 90
|
|
||||||
ng=NGBASE+31+n
|
|
||||||
go to 100
|
|
||||||
else if(grid(1:2).eq.'RO') then
|
else if(grid(1:2).eq.'RO') then
|
||||||
ng=NGBASE+62
|
ng=NGBASE+62
|
||||||
go to 100
|
go to 100
|
||||||
@ -54,6 +47,7 @@ subroutine packgrid(grid,ng,text)
|
|||||||
|
|
||||||
90 ng=NGBASE + 1
|
90 ng=NGBASE + 1
|
||||||
|
|
||||||
100 return
|
100 continue
|
||||||
|
return
|
||||||
end subroutine packgrid
|
end subroutine packgrid
|
||||||
|
|
||||||
|
111
lib/packmsg.f
111
lib/packmsg.f
@ -1,111 +0,0 @@
|
|||||||
subroutine packmsg(msg,dat,text)
|
|
||||||
|
|
||||||
parameter (NBASE=37*36*10*27*27*27)
|
|
||||||
parameter (NBASE2=262178562)
|
|
||||||
character*22 msg
|
|
||||||
integer dat(12)
|
|
||||||
character*12 c1,c2
|
|
||||||
character*4 c3
|
|
||||||
character*6 grid6
|
|
||||||
logical text1,text2,text3,text
|
|
||||||
|
|
||||||
text=.false.
|
|
||||||
C Convert all letters to upper case
|
|
||||||
iz=22
|
|
||||||
do i=1,22
|
|
||||||
if(msg(i:i).ge.'a' .and. msg(i:i).le.'z')
|
|
||||||
+ msg(i:i)= char(ichar(msg(i:i))+ichar('A')-ichar('a'))
|
|
||||||
if(msg(i:i).ne.' ') iz=i
|
|
||||||
enddo
|
|
||||||
do iter=1,5 !Collapse multiple blanks into one
|
|
||||||
ib2=index(msg(1:iz),' ')
|
|
||||||
if(ib2.lt.1) go to 5
|
|
||||||
msg=msg(1:ib2)//msg(ib2+2:)
|
|
||||||
iz=iz-1
|
|
||||||
enddo
|
|
||||||
|
|
||||||
C See if it's a CQ message
|
|
||||||
5 if(msg(1:3).eq.'CQ ') then
|
|
||||||
i=3
|
|
||||||
C ... and if so, does it have a reply frequency?
|
|
||||||
if(msg(4:4).ge.'0' .and. msg(4:4).le.'9' .and.
|
|
||||||
+ msg(5:5).ge.'0' .and. msg(5:5).le.'9' .and.
|
|
||||||
+ msg(6:6).ge.'0' .and. msg(6:6).le.'9') i=7
|
|
||||||
go to 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
do i=1,22
|
|
||||||
if(msg(i:i).eq.' ') go to 1 !Get 1st blank
|
|
||||||
enddo
|
|
||||||
go to 10 !Consider msg as plain text
|
|
||||||
|
|
||||||
1 ia=i
|
|
||||||
c1=msg(1:ia-1)
|
|
||||||
do i=ia+1,22
|
|
||||||
if(msg(i:i).eq.' ') go to 2 !Get 2nd blank
|
|
||||||
enddo
|
|
||||||
go to 10 !Consider msg as plain text
|
|
||||||
|
|
||||||
2 ib=i
|
|
||||||
c2=msg(ia+1:ib-1)
|
|
||||||
|
|
||||||
do i=ib+1,22
|
|
||||||
if(msg(i:i).eq.' ') go to 3 !Get 3rd blank
|
|
||||||
enddo
|
|
||||||
go to 10 !Consider msg as plain text
|
|
||||||
|
|
||||||
3 ic=i
|
|
||||||
c3=' '
|
|
||||||
if(ic.ge.ib+1) c3=msg(ib+1:ic)
|
|
||||||
if(c3.eq.'OOO ') c3=' ' !Strip out the OOO flag
|
|
||||||
call getpfx1(c1,k1,junk)
|
|
||||||
call packcall(c1,nc1,text1)
|
|
||||||
call getpfx1(c2,k2,nv2)
|
|
||||||
call packcall(c2,nc2,text2)
|
|
||||||
if(nv2.eq.0) then
|
|
||||||
if(k1.lt.0 .or. k2.lt.0 .or. k1*k2.ne.0) go to 10
|
|
||||||
if(k2.gt.0) k2=k2+450
|
|
||||||
k=max(k1,k2)
|
|
||||||
if(k.gt.0) then
|
|
||||||
call k2grid(k,grid6)
|
|
||||||
c3=grid6(:4)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
call packgrid(c3,ng,text3)
|
|
||||||
if(nv2.eq.0 .and. (.not.text1) .and. (.not.text2) .and.
|
|
||||||
+ (.not.text3)) go to 20
|
|
||||||
if(nv2.gt.0) then
|
|
||||||
if(nv2.eq.1) then
|
|
||||||
if(c1(1:3).eq.'CQ ') nc1=262178563 + k2
|
|
||||||
if(c1(1:4).eq.'QRZ ') nc1=264002072 + k2
|
|
||||||
if(c1(1:3).eq.'DE ') nc1=265825581 + k2
|
|
||||||
endif
|
|
||||||
if(nv2.eq.2) then
|
|
||||||
if(c1(1:3).eq.'CQ ') nc1=267649090 + k2
|
|
||||||
if(c1(1:4).eq.'QRZ ') nc1=267698375 + k2
|
|
||||||
if(c1(1:3).eq.'DE ') nc1=267747660 + k2
|
|
||||||
endif
|
|
||||||
go to 20
|
|
||||||
endif
|
|
||||||
|
|
||||||
C The message will be treated as plain text.
|
|
||||||
10 text=.true.
|
|
||||||
call packtext(msg,nc1,nc2,ng)
|
|
||||||
ng=ng+32768
|
|
||||||
|
|
||||||
C Encode data into 6-bit words
|
|
||||||
20 dat(1)=iand(ishft(nc1,-22),63) !6 bits
|
|
||||||
dat(2)=iand(ishft(nc1,-16),63) !6 bits
|
|
||||||
dat(3)=iand(ishft(nc1,-10),63) !6 bits
|
|
||||||
dat(4)=iand(ishft(nc1, -4),63) !6 bits
|
|
||||||
dat(5)=4*iand(nc1,15)+iand(ishft(nc2,-26),3) !4+2 bits
|
|
||||||
dat(6)=iand(ishft(nc2,-20),63) !6 bits
|
|
||||||
dat(7)=iand(ishft(nc2,-14),63) !6 bits
|
|
||||||
dat(8)=iand(ishft(nc2, -8),63) !6 bits
|
|
||||||
dat(9)=iand(ishft(nc2, -2),63) !6 bits
|
|
||||||
dat(10)=16*iand(nc2,3)+iand(ishft(ng,-12),15) !2+4 bits
|
|
||||||
dat(11)=iand(ishft(ng,-6),63)
|
|
||||||
dat(12)=iand(ng,63)
|
|
||||||
|
|
||||||
return
|
|
||||||
end
|
|
111
lib/packmsg.f90
Normal file
111
lib/packmsg.f90
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
subroutine packmsg(msg,dat,text)
|
||||||
|
|
||||||
|
parameter (NBASE=37*36*10*27*27*27)
|
||||||
|
parameter (NBASE2=262178562)
|
||||||
|
character*22 msg
|
||||||
|
integer dat(12)
|
||||||
|
character*12 c1,c2
|
||||||
|
character*4 c3
|
||||||
|
character*6 grid6
|
||||||
|
logical text1,text2,text3,text
|
||||||
|
|
||||||
|
text=.false.
|
||||||
|
! Convert all letters to upper case
|
||||||
|
iz=22
|
||||||
|
do i=1,22
|
||||||
|
if(msg(i:i).ge.'a' .and. msg(i:i).le.'z') &
|
||||||
|
msg(i:i)= char(ichar(msg(i:i))+ichar('A')-ichar('a'))
|
||||||
|
if(msg(i:i).ne.' ') iz=i
|
||||||
|
enddo
|
||||||
|
do iter=1,5 !Collapse multiple blanks into one
|
||||||
|
ib2=index(msg(1:iz),' ')
|
||||||
|
if(ib2.lt.1) go to 5
|
||||||
|
msg=msg(1:ib2)//msg(ib2+2:)
|
||||||
|
iz=iz-1
|
||||||
|
enddo
|
||||||
|
|
||||||
|
! See if it's a CQ message
|
||||||
|
5 if(msg(1:3).eq.'CQ ') then
|
||||||
|
i=3
|
||||||
|
! ... and if so, does it have a reply frequency?
|
||||||
|
if(msg(4:4).ge.'0' .and. msg(4:4).le.'9' .and. &
|
||||||
|
msg(5:5).ge.'0' .and. msg(5:5).le.'9' .and. &
|
||||||
|
msg(6:6).ge.'0' .and. msg(6:6).le.'9') i=7
|
||||||
|
go to 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
do i=1,22
|
||||||
|
if(msg(i:i).eq.' ') go to 1 !Get 1st blank
|
||||||
|
enddo
|
||||||
|
go to 10 !Consider msg as plain text
|
||||||
|
|
||||||
|
1 ia=i
|
||||||
|
c1=msg(1:ia-1)
|
||||||
|
do i=ia+1,22
|
||||||
|
if(msg(i:i).eq.' ') go to 2 !Get 2nd blank
|
||||||
|
enddo
|
||||||
|
go to 10 !Consider msg as plain text
|
||||||
|
|
||||||
|
2 ib=i
|
||||||
|
c2=msg(ia+1:ib-1)
|
||||||
|
|
||||||
|
do i=ib+1,22
|
||||||
|
if(msg(i:i).eq.' ') go to 3 !Get 3rd blank
|
||||||
|
enddo
|
||||||
|
go to 10 !Consider msg as plain text
|
||||||
|
|
||||||
|
3 ic=i
|
||||||
|
c3=' '
|
||||||
|
if(ic.ge.ib+1) c3=msg(ib+1:ic)
|
||||||
|
if(c3.eq.'OOO ') c3=' ' !Strip out the OOO flag
|
||||||
|
call getpfx1(c1,k1,junk)
|
||||||
|
call packcall(c1,nc1,text1)
|
||||||
|
call getpfx1(c2,k2,nv2)
|
||||||
|
call packcall(c2,nc2,text2)
|
||||||
|
if(nv2.eq.0) then
|
||||||
|
if(k1.lt.0 .or. k2.lt.0 .or. k1*k2.ne.0) go to 10
|
||||||
|
if(k2.gt.0) k2=k2+450
|
||||||
|
k=max(k1,k2)
|
||||||
|
if(k.gt.0) then
|
||||||
|
call k2grid(k,grid6)
|
||||||
|
c3=grid6(:4)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
call packgrid(c3,ng,text3)
|
||||||
|
if(nv2.eq.0 .and. (.not.text1) .and. (.not.text2) .and. &
|
||||||
|
(.not.text3)) go to 20
|
||||||
|
if(nv2.gt.0) then
|
||||||
|
if(nv2.eq.1) then
|
||||||
|
if(c1(1:3).eq.'CQ ') nc1=262178563 + k2
|
||||||
|
if(c1(1:4).eq.'QRZ ') nc1=264002072 + k2
|
||||||
|
if(c1(1:3).eq.'DE ') nc1=265825581 + k2
|
||||||
|
endif
|
||||||
|
if(nv2.eq.2) then
|
||||||
|
if(c1(1:3).eq.'CQ ') nc1=267649090 + k2
|
||||||
|
if(c1(1:4).eq.'QRZ ') nc1=267698375 + k2
|
||||||
|
if(c1(1:3).eq.'DE ') nc1=267747660 + k2
|
||||||
|
endif
|
||||||
|
go to 20
|
||||||
|
endif
|
||||||
|
|
||||||
|
! The message will be treated as plain text.
|
||||||
|
10 text=.true.
|
||||||
|
call packtext(msg,nc1,nc2,ng)
|
||||||
|
ng=ng+32768
|
||||||
|
|
||||||
|
! Encode data into 6-bit words
|
||||||
|
20 dat(1)=iand(ishft(nc1,-22),63) !6 bits
|
||||||
|
dat(2)=iand(ishft(nc1,-16),63) !6 bits
|
||||||
|
dat(3)=iand(ishft(nc1,-10),63) !6 bits
|
||||||
|
dat(4)=iand(ishft(nc1, -4),63) !6 bits
|
||||||
|
dat(5)=4*iand(nc1,15)+iand(ishft(nc2,-26),3) !4+2 bits
|
||||||
|
dat(6)=iand(ishft(nc2,-20),63) !6 bits
|
||||||
|
dat(7)=iand(ishft(nc2,-14),63) !6 bits
|
||||||
|
dat(8)=iand(ishft(nc2, -8),63) !6 bits
|
||||||
|
dat(9)=iand(ishft(nc2, -2),63) !6 bits
|
||||||
|
dat(10)=16*iand(nc2,3)+iand(ishft(ng,-12),15) !2+4 bits
|
||||||
|
dat(11)=iand(ishft(ng,-6),63)
|
||||||
|
dat(12)=iand(ng,63)
|
||||||
|
|
||||||
|
return
|
||||||
|
end subroutine packmsg
|
@ -1,40 +1,45 @@
|
|||||||
subroutine unpackgrid(ng,grid)
|
subroutine unpackgrid(ng,grid)
|
||||||
|
|
||||||
parameter (NGBASE=180*180)
|
parameter (NGBASE=180*180)
|
||||||
character grid*4,grid6*6
|
character grid*4,grid6*6
|
||||||
|
|
||||||
grid=' '
|
grid=' '
|
||||||
if(ng.ge.32400) go to 10
|
if(ng.ge.32400) go to 10
|
||||||
dlat=mod(ng,180)-90
|
dlat=mod(ng,180)-90
|
||||||
dlong=(ng/180)*2 - 180 + 2
|
dlong=(ng/180)*2 - 180 + 2
|
||||||
call deg2grid(dlong,dlat,grid6)
|
call deg2grid(dlong,dlat,grid6)
|
||||||
grid=grid6(:4)
|
grid=grid6(:4)
|
||||||
if(grid(2:2).eq.'A' .and. grid(4:4).eq.'0') then
|
if(grid(1:2).eq.'KA') then
|
||||||
i=ichar(grid(1:1))
|
read(grid(3:4),*) n
|
||||||
if(i.ge.ichar('A') .and. i.le.ichar('D')) then
|
n=n-50
|
||||||
call grid2n(grid,n)
|
write(grid,1001) n
|
||||||
if(n.ge.-50) write(grid,1012) n
|
1001 format(i3.2)
|
||||||
if(n.lt.-50) write(grid,1022) n+20
|
if(grid(1:1).eq.' ') grid(1:1)='+'
|
||||||
endif
|
else if(grid(1:2).eq.'LA') then
|
||||||
endif
|
read(grid(3:4),*) n
|
||||||
go to 100
|
n=n-50
|
||||||
|
write(grid,1002) n
|
||||||
|
1002 format('R',i3.2)
|
||||||
|
if(grid(2:2).eq.' ') grid(2:2)='+'
|
||||||
|
endif
|
||||||
|
go to 900
|
||||||
|
|
||||||
10 n=ng-NGBASE-1
|
10 n=ng-NGBASE-1
|
||||||
if(n.ge.1 .and.n.le.30) then
|
if(n.ge.1 .and.n.le.30) then
|
||||||
write(grid,1012) -n
|
write(grid,1012) -n
|
||||||
1012 format(i3.2)
|
1012 format(i3.2)
|
||||||
else if(n.ge.31 .and.n.le.60) then
|
else if(n.ge.31 .and.n.le.60) then
|
||||||
n=n-30
|
n=n-30
|
||||||
write(grid,1022) -n
|
write(grid,1022) -n
|
||||||
1022 format('R',i3.2)
|
1022 format('R',i3.2)
|
||||||
else if(n.eq.61) then
|
else if(n.eq.61) then
|
||||||
grid='RO'
|
grid='RO'
|
||||||
else if(n.eq.62) then
|
else if(n.eq.62) then
|
||||||
grid='RRR'
|
grid='RRR'
|
||||||
else if(n.eq.63) then
|
else if(n.eq.63) then
|
||||||
grid='73'
|
grid='73'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
100 return
|
900 return
|
||||||
end
|
end subroutine unpackgrid
|
||||||
|
|
||||||
|
100
lib/unpackmsg.f
100
lib/unpackmsg.f
@ -1,100 +0,0 @@
|
|||||||
subroutine unpackmsg(dat,msg)
|
|
||||||
|
|
||||||
parameter (NBASE=37*36*10*27*27*27)
|
|
||||||
parameter (NGBASE=180*180)
|
|
||||||
integer dat(12)
|
|
||||||
character c1*12,c2*12,grid*4,msg*22,grid6*6,psfx*4,junk2*4
|
|
||||||
logical cqnnn
|
|
||||||
|
|
||||||
cqnnn=.false.
|
|
||||||
nc1=ishft(dat(1),22) + ishft(dat(2),16) + ishft(dat(3),10)+
|
|
||||||
+ ishft(dat(4),4) + iand(ishft(dat(5),-2),15)
|
|
||||||
|
|
||||||
nc2=ishft(iand(dat(5),3),26) + ishft(dat(6),20) +
|
|
||||||
+ ishft(dat(7),14) + ishft(dat(8),8) + ishft(dat(9),2) +
|
|
||||||
+ iand(ishft(dat(10),-4),3)
|
|
||||||
|
|
||||||
ng=ishft(iand(dat(10),15),12) + ishft(dat(11),6) + dat(12)
|
|
||||||
|
|
||||||
if(ng.gt.32768) then
|
|
||||||
call unpacktext(nc1,nc2,ng,msg)
|
|
||||||
go to 100
|
|
||||||
endif
|
|
||||||
|
|
||||||
call unpackcall(nc1,c1,iv2,psfx)
|
|
||||||
if(iv2.eq.0) then
|
|
||||||
! This is an "original JT65" message
|
|
||||||
if(nc1.eq.NBASE+1) c1='CQ '
|
|
||||||
if(nc1.eq.NBASE+2) c1='QRZ '
|
|
||||||
nfreq=nc1-NBASE-3
|
|
||||||
if(nfreq.ge.0 .and. nfreq.le.999) then
|
|
||||||
write(c1,1002) nfreq
|
|
||||||
1002 format('CQ ',i3.3)
|
|
||||||
cqnnn=.true.
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
call unpackcall(nc2,c2,junk1,junk2)
|
|
||||||
call unpackgrid(ng,grid)
|
|
||||||
|
|
||||||
if(iv2.gt.0) then
|
|
||||||
! This is a JT65v2 message
|
|
||||||
n1=len_trim(psfx)
|
|
||||||
n2=len_trim(c2)
|
|
||||||
if(iv2.eq.1) msg='CQ '//psfx(:n1)//'/'//c2(:n2)//' '//grid
|
|
||||||
if(iv2.eq.2) msg='QRZ '//psfx(:n1)//'/'//c2(:n2)//' '//grid
|
|
||||||
if(iv2.eq.3) msg='DE '//psfx(:n1)//'/'//c2(:n2)//' '//grid
|
|
||||||
if(iv2.eq.4) msg='CQ '//c2(:n2)//'/'//psfx(:n1)//' '//grid
|
|
||||||
if(iv2.eq.5) msg='QRZ '//c2(:n2)//'/'//psfx(:n1)//' '//grid
|
|
||||||
if(iv2.eq.6) msg='DE '//c2(:n2)//'/'//psfx(:n1)//' '//grid
|
|
||||||
if(iv2.eq.7) msg='DE '//c2(:n2)//' '//grid
|
|
||||||
go to 100
|
|
||||||
else
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
grid6=grid//'ma'
|
|
||||||
call grid2k(grid6,k)
|
|
||||||
if(k.ge.1 .and. k.le.450) call getpfx2(k,c1)
|
|
||||||
if(k.ge.451 .and. k.le.900) call getpfx2(k,c2)
|
|
||||||
|
|
||||||
i=index(c1,char(0))
|
|
||||||
if(i.ge.3) c1=c1(1:i-1)//' '
|
|
||||||
i=index(c2,char(0))
|
|
||||||
if(i.ge.3) c2=c2(1:i-1)//' '
|
|
||||||
|
|
||||||
msg=' '
|
|
||||||
j=0
|
|
||||||
if(cqnnn) then
|
|
||||||
msg=c1//' '
|
|
||||||
j=7 !### ??? ###
|
|
||||||
go to 10
|
|
||||||
endif
|
|
||||||
|
|
||||||
do i=1,12
|
|
||||||
j=j+1
|
|
||||||
msg(j:j)=c1(i:i)
|
|
||||||
if(c1(i:i).eq.' ') go to 10
|
|
||||||
enddo
|
|
||||||
j=j+1
|
|
||||||
msg(j:j)=' '
|
|
||||||
|
|
||||||
10 do i=1,12
|
|
||||||
if(j.le.21) j=j+1
|
|
||||||
msg(j:j)=c2(i:i)
|
|
||||||
if(c2(i:i).eq.' ') go to 20
|
|
||||||
enddo
|
|
||||||
if(j.le.21) j=j+1
|
|
||||||
msg(j:j)=' '
|
|
||||||
|
|
||||||
20 if(k.eq.0) then
|
|
||||||
do i=1,4
|
|
||||||
if(j.le.21) j=j+1
|
|
||||||
msg(j:j)=grid(i:i)
|
|
||||||
enddo
|
|
||||||
if(j.le.21) j=j+1
|
|
||||||
msg(j:j)=' '
|
|
||||||
endif
|
|
||||||
|
|
||||||
100 return
|
|
||||||
end
|
|
100
lib/unpackmsg.f90
Normal file
100
lib/unpackmsg.f90
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
subroutine unpackmsg(dat,msg)
|
||||||
|
|
||||||
|
parameter (NBASE=37*36*10*27*27*27)
|
||||||
|
parameter (NGBASE=180*180)
|
||||||
|
integer dat(12)
|
||||||
|
character c1*12,c2*12,grid*4,msg*22,grid6*6,psfx*4,junk2*4
|
||||||
|
logical cqnnn
|
||||||
|
|
||||||
|
cqnnn=.false.
|
||||||
|
nc1=ishft(dat(1),22) + ishft(dat(2),16) + ishft(dat(3),10)+ &
|
||||||
|
ishft(dat(4),4) + iand(ishft(dat(5),-2),15)
|
||||||
|
|
||||||
|
nc2=ishft(iand(dat(5),3),26) + ishft(dat(6),20) + &
|
||||||
|
ishft(dat(7),14) + ishft(dat(8),8) + ishft(dat(9),2) + &
|
||||||
|
iand(ishft(dat(10),-4),3)
|
||||||
|
|
||||||
|
ng=ishft(iand(dat(10),15),12) + ishft(dat(11),6) + dat(12)
|
||||||
|
|
||||||
|
if(ng.gt.32768) then
|
||||||
|
call unpacktext(nc1,nc2,ng,msg)
|
||||||
|
go to 100
|
||||||
|
endif
|
||||||
|
|
||||||
|
call unpackcall(nc1,c1,iv2,psfx)
|
||||||
|
if(iv2.eq.0) then
|
||||||
|
! This is an "original JT65" message
|
||||||
|
if(nc1.eq.NBASE+1) c1='CQ '
|
||||||
|
if(nc1.eq.NBASE+2) c1='QRZ '
|
||||||
|
nfreq=nc1-NBASE-3
|
||||||
|
if(nfreq.ge.0 .and. nfreq.le.999) then
|
||||||
|
write(c1,1002) nfreq
|
||||||
|
1002 format('CQ ',i3.3)
|
||||||
|
cqnnn=.true.
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
call unpackcall(nc2,c2,junk1,junk2)
|
||||||
|
call unpackgrid(ng,grid)
|
||||||
|
|
||||||
|
if(iv2.gt.0) then
|
||||||
|
! This is a JT65v2 message
|
||||||
|
n1=len_trim(psfx)
|
||||||
|
n2=len_trim(c2)
|
||||||
|
if(iv2.eq.1) msg='CQ '//psfx(:n1)//'/'//c2(:n2)//' '//grid
|
||||||
|
if(iv2.eq.2) msg='QRZ '//psfx(:n1)//'/'//c2(:n2)//' '//grid
|
||||||
|
if(iv2.eq.3) msg='DE '//psfx(:n1)//'/'//c2(:n2)//' '//grid
|
||||||
|
if(iv2.eq.4) msg='CQ '//c2(:n2)//'/'//psfx(:n1)//' '//grid
|
||||||
|
if(iv2.eq.5) msg='QRZ '//c2(:n2)//'/'//psfx(:n1)//' '//grid
|
||||||
|
if(iv2.eq.6) msg='DE '//c2(:n2)//'/'//psfx(:n1)//' '//grid
|
||||||
|
if(iv2.eq.7) msg='DE '//c2(:n2)//' '//grid
|
||||||
|
go to 100
|
||||||
|
else
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
grid6=grid//'ma'
|
||||||
|
call grid2k(grid6,k)
|
||||||
|
if(k.ge.1 .and. k.le.450) call getpfx2(k,c1)
|
||||||
|
if(k.ge.451 .and. k.le.900) call getpfx2(k,c2)
|
||||||
|
|
||||||
|
i=index(c1,char(0))
|
||||||
|
if(i.ge.3) c1=c1(1:i-1)//' '
|
||||||
|
i=index(c2,char(0))
|
||||||
|
if(i.ge.3) c2=c2(1:i-1)//' '
|
||||||
|
|
||||||
|
msg=' '
|
||||||
|
j=0
|
||||||
|
if(cqnnn) then
|
||||||
|
msg=c1//' '
|
||||||
|
j=7 !### ??? ###
|
||||||
|
go to 10
|
||||||
|
endif
|
||||||
|
|
||||||
|
do i=1,12
|
||||||
|
j=j+1
|
||||||
|
msg(j:j)=c1(i:i)
|
||||||
|
if(c1(i:i).eq.' ') go to 10
|
||||||
|
enddo
|
||||||
|
j=j+1
|
||||||
|
msg(j:j)=' '
|
||||||
|
|
||||||
|
10 do i=1,12
|
||||||
|
if(j.le.21) j=j+1
|
||||||
|
msg(j:j)=c2(i:i)
|
||||||
|
if(c2(i:i).eq.' ') go to 20
|
||||||
|
enddo
|
||||||
|
if(j.le.21) j=j+1
|
||||||
|
msg(j:j)=' '
|
||||||
|
|
||||||
|
20 if(k.eq.0) then
|
||||||
|
do i=1,4
|
||||||
|
if(j.le.21) j=j+1
|
||||||
|
msg(j:j)=grid(i:i)
|
||||||
|
enddo
|
||||||
|
if(j.le.21) j=j+1
|
||||||
|
msg(j:j)=' '
|
||||||
|
endif
|
||||||
|
|
||||||
|
100 return
|
||||||
|
end subroutine unpackmsg
|
@ -1,4 +1,4 @@
|
|||||||
//--------------------------------------------------------------- MainWindow
|
//---------------------------------------------------------------- MainWindow
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "ui_mainwindow.h"
|
#include "ui_mainwindow.h"
|
||||||
#include "devsetup.h"
|
#include "devsetup.h"
|
||||||
|
Loading…
Reference in New Issue
Block a user