File: deep4.f90

package info (click to toggle)
wsjtx 2.0.0%2Brepack-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 192,624 kB
  • sloc: cpp: 1,071,838; ansic: 60,751; f90: 25,266; python: 20,318; sh: 10,636; xml: 8,148; cs: 2,121; fortran: 2,051; yacc: 472; asm: 353; makefile: 316; perl: 19
file content (169 lines) | stat: -rw-r--r-- 4,736 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
subroutine deep4(sym0,neme,flip,mycall,hiscall,hisgrid,decoded,qual)

! Deep search routine for JT4

  use prog_args
  parameter (MAXCALLS=7000,MAXRPT=63)
  real*4 sym0(206),sym(206)
  character callsign*12,grid*4,message*22,hisgrid*6,ceme*3
  character*12 mycall,hiscall
  character mycall0*12,hiscall0*12,hisgrid0*6
  character*22 decoded
  character*22 testmsg(2*MAXCALLS + 2 + MAXRPT)
  character*15 callgrid(MAXCALLS)
  character*180 line
  character*4 rpt(MAXRPT)
  integer ncode(206)
  real*4   code(206,2*MAXCALLS + 2 + MAXRPT)
  real pp(2*MAXCALLS + 2 + MAXRPT)
  data neme0/-99/
  data rpt/'-01','-02','-03','-04','-05',          &
           '-06','-07','-08','-09','-10',          &
           '-11','-12','-13','-14','-15',          &
           '-16','-17','-18','-19','-20',          &
           '-21','-22','-23','-24','-25',          &
           '-26','-27','-28','-29','-30',          &
           'R-01','R-02','R-03','R-04','R-05',     &
           'R-06','R-07','R-08','R-09','R-10',     &
           'R-11','R-12','R-13','R-14','R-15',     &
           'R-16','R-17','R-18','R-19','R-20',     &
           'R-21','R-22','R-23','R-24','R-25',     &
           'R-26','R-27','R-28','R-29','R-30',     &
           'RO','RRR','73'/
  save mycall0,hiscall0,hisgrid0,neme0,ntot,code,testmsg

  sym=sym0
  if(mycall.eq.mycall0 .and. hiscall.eq.hiscall0 .and.         &
       hisgrid.eq.hisgrid0 .and. neme.eq.neme0) go to 30

  open(23,file=trim(data_dir)//'/CALL3.TXT',status='unknown')
  k=0
  icall=0
  do n=1,MAXCALLS
     if(n.eq.1) then
        callsign=hiscall
        do i=4,12
           if(ichar(callsign(i:i)).eq.0) callsign(i:i)=' '
        enddo
        grid=hisgrid(1:4)
        if(ichar(grid(3:3)).eq.0) grid(3:3)=' '
        if(ichar(grid(4:4)).eq.0) grid(4:4)=' '
     else
        read(23,1002,end=20) line
1002    format (A80)
        if(line(1:4).eq.'ZZZZ') go to 20
        if(line(1:2).eq.'//') go to 10
        i1=index(line,',')
        if(i1.lt.4) go to 10
        i2=index(line(i1+1:),',')
        if(i2.lt.5) go to 10
        i2=i2+i1
        i3=index(line(i2+1:),',')
        if(i3.lt.1) i3=index(line(i2+1:),' ')
        i3=i2+i3
        callsign=line(1:i1-1)
        grid=line(i1+1:i2-1)
        ceme=line(i2+1:i3-1)
        if(neme.eq.1 .and. ceme.ne.'EME') go to 10
     endif

     icall=icall+1
     j1=index(mycall,' ') - 1
     if(j1.le.-1) j1=12
     if(j1.lt.3) j1=6
     j2=index(callsign,' ') - 1
     if(j2.le.-1) j2=12
     if(j2.lt.3) j2=6
     j3=index(mycall,'/')                 ! j3>0 means compound mycall
     j4=index(callsign,'/')               ! j4>0 means compound hiscall
     callgrid(icall)=callsign(1:j2)

     mz=1
! Allow MyCall + HisCall + rpt (?)
     if(n.eq.1 .and. j3.lt.1 .and. j4.lt.1 .and. callsign(1:6).ne.'      ') &
          mz=MAXRPT+1
     do m=1,mz
        if(m.gt.1) grid=rpt(m-1)
        if(j3.lt.1 .and.j4.lt.1) callgrid(icall)=callsign(1:j2)//' '//grid
        message=mycall(1:j1)//' '//callgrid(icall)
        k=k+1
        testmsg(k)=message
        call encode4(message,ncode)
        code(1:206,k)=2*ncode(1:206)-1
        if(n.ge.2) then
! Insert CQ message
           if(j4.lt.1) callgrid(icall)=callsign(1:j2)//' '//grid
           message='CQ '//callgrid(icall)
           k=k+1
           testmsg(k)=message
           call encode4(message,ncode)
        code(1:206,k)=2*ncode(1:206)-1
        endif
     enddo
10   continue
  enddo

20 continue
  close(23)
  ntot=k

30 mycall0=mycall
  hiscall0=hiscall
  hisgrid0=hisgrid
  neme0=neme

  sq=0.
  do j=1,206
     sq=sq + sym(j)**2
  enddo
  rms=sqrt(sq/206.0)
  sym=sym/rms

  p1=-1.e30
  p2=-1.e30
  do k=1,ntot
     pp(k)=0.
! Should re-instate the following:
!     if(k.ge.2 .and. k.le.64 .and. flip.gt.0.0) cycle   
! Test all messages if flip=+1; skip the CQ messages if flip=-1.
     if(flip.gt.0.0 .or. testmsg(k)(1:3).ne.'CQ ') then
        p=0.
        do j=1,206
           p=p + code(j,k)*sym(j)
        enddo
        pp(k)=p
        if(p.gt.p1) then
           p1=p
           ip1=k
        endif
     endif
  enddo

  do i=1,ntot
     if(pp(i).gt.p2 .and. testmsg(i).ne.testmsg(ip1)) p2=pp(i)
  enddo

  qual=p1-max(1.15*p2,70.0)

! ### DO NOT REMOVE ### 
  rewind 77
  if(ip1.ge.1 .and. ip1.le.2*MAXCALLS+2+MAXRPT) write(77,1001) p1,p2,ntot,   &
       rms,qual,ip1,testmsg(ip1)
1001 format(2f8.2,i8,2f8.2,i6,2x,a22)
  call flush(77)

  if(qual.gt.1.0) then
     decoded=testmsg(ip1)
  else
     decoded='                      '
     qual=0.
  endif

! Make sure everything is upper case.
  do i=1,22
     if(decoded(i:i).ge.'a' .and. decoded(i:i).le.'z')                &
          decoded(i:i)=char(ichar(decoded(i:i))-32)
  enddo

  return
end subroutine deep4