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