1subroutine genqra64(msg0,ichk,msgsent,itone,itype)
2
3! Encodes a QRA64 message to yield itone(1:84) or a QRA65 msg, itone(1:85)
4
5  use packjt
6  character*22 msg0
7  character*22 message            !Message to be generated
8  character*22 msgsent            !Message as it will be received
9  integer itone(85)               !QRA64 uses only 84
10  character*3 cok                 !'   ' or 'OOO'
11  integer dgen(13)
12  integer sent(63)
13  integer isync(22)
14  integer icos7(0:6)
15  data icos7/2,5,6,0,4,1,3/       !Defines a 7x7 Costas array
16  data isync/1,9,12,13,15,22,23,26,27,33,35,38,46,50,55,60,62,66,69,74,76,85/
17  save
18
19  if(msg0(1:1).eq.'@') then
20     read(msg0(2:5),*,end=1,err=1) nfreq
21     go to 2
221    nfreq=1000
232    itone(1)=nfreq
24     write(msgsent,1000) nfreq
251000 format(i5,' Hz')
26  else
27     message=msg0
28     do i=1,22
29        if(ichar(message(i:i)).eq.0) then
30           message(i:)='                      '
31           exit
32        endif
33     enddo
34
35     do i=1,22                               !Strip leading blanks
36        if(message(1:1).ne.' ') exit
37        message=message(i+1:)
38     enddo
39
40     call chkmsg(message,cok,nspecial,flip)
41     call packmsg(message,dgen,itype)    !Pack message into 72 bits
42     call unpackmsg(dgen,msgsent)        !Unpack to get message sent
43     if(ichk.eq.1) go to 999             !Return if checking only
44     call qra64_enc(dgen,sent)           !Encode using QRA64
45
46     if(ichk.eq.65) then
47! Experimental QRA65 mode
48        j=1
49        k=0
50        do i=1,85
51           if(i.eq.isync(j)) then
52              j=j+1                      !Index for next sync symbol
53              itone(i)=0                 !Insert a sync symbol
54           else
55              k=k+1
56              itone(i)=sent(k) + 1
57           endif
58        enddo
59     else
60! Original QRA64 mode
61        itone(1:7)=10*icos7              !Insert 7x7 Costas array in 3 places
62        itone(8:39)=sent(1:32)
63        itone(40:46)=10*icos7
64        itone(47:77)=sent(33:63)
65        itone(78:84)=10*icos7
66     endif
67  endif
68
69999 return
70end subroutine genqra64
71