subroutine geniscat(msg,msgsent,itone) ! Generate an ISCAT waveform. parameter (NSZ=1291) character msg*28,msgsent*28 !Message to be transmitted integer imsg(30) integer itone(NSZ) real*8 sps character c*42 integer icos(4) !Costas array data icos/0,1,3,2/ data nsync/4/,nlen/2/,ndat/18/ data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ /.?@-'/ sps=256.d0*12000.d0/11025.d0 nsym=int(30*12000.d0/sps) nblk=nsync+nlen+ndat do i=22,1,-1 if(msg(i:i).ne.' ' .and. msg(i:i).ne.char(0)) exit enddo nmsg=i msglen=nmsg+1 k=0 kk=1 imsg(1)=40 !Always start with BOM char: '@' do i=1,nmsg !Define the tone sequence imsg(i+1)=36 !Illegal char set to blank do j=1,42 if(msg(i:i).eq.c(j:j)) imsg(i+1)=j-1 enddo enddo do i=1,nsym !Total symbols in 30 s j=mod(i-1,nblk)+1 if(j.le.nsync) then itone(i)=icos(j) !Insert 4x4 Costas array else if(j.gt.nsync .and. j.le.nsync+nlen) then itone(i)=msglen !Insert message-length indicator if(j.ge.nsync+2) then n=msglen + 5*(j-nsync-1) if(n.gt.41) n=n-42 itone(i)=n endif else k=k+1 kk=mod(k-1,msglen)+1 itone(i)=imsg(kk) endif enddo msgsent=msg return end subroutine geniscat