| 
									
										
										
										
											2014-10-19 00:56:41 +00:00
										 |  |  | subroutine gen65(msg0,ichk,msgsent,itone,itype)
 | 
					
						
							| 
									
										
										
										
											2013-07-08 13:17:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Encodes a JT65 message to yieild itone(1:126)
 | 
					
						
							|  |  |  | ! Temporarily, does not implement EME shorthands
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-22 17:48:03 +00:00
										 |  |  |   use packjt
 | 
					
						
							| 
									
										
										
										
											2013-07-08 13:17:22 +00:00
										 |  |  |   character*22 msg0
 | 
					
						
							|  |  |  |   character*22 message          !Message to be generated
 | 
					
						
							|  |  |  |   character*22 msgsent          !Message as it will be received
 | 
					
						
							|  |  |  |   integer itone(126)
 | 
					
						
							| 
									
										
										
										
											2016-03-24 15:44:48 +00:00
										 |  |  |   character*3 cok               !'   ' or 'OOO'
 | 
					
						
							| 
									
										
										
										
											2013-07-08 13:17:22 +00:00
										 |  |  |   integer dgen(13)
 | 
					
						
							|  |  |  |   integer sent(63)
 | 
					
						
							|  |  |  |   integer nprc(126)
 | 
					
						
							|  |  |  |   data nprc/1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0,  &
 | 
					
						
							|  |  |  |             0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,  &
 | 
					
						
							|  |  |  |             0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,  &
 | 
					
						
							|  |  |  |             0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1,  &
 | 
					
						
							|  |  |  |             1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1,  &
 | 
					
						
							|  |  |  |             0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1,  &
 | 
					
						
							|  |  |  |             1,1,1,1,1,1/
 | 
					
						
							|  |  |  |   save
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-22 17:48:03 +00:00
										 |  |  |   if(msg0(1:1).eq.'@') then
 | 
					
						
							|  |  |  |      read(msg0(2:5),*,end=1,err=1) nfreq
 | 
					
						
							|  |  |  |      go to 2
 | 
					
						
							|  |  |  | 1    nfreq=1000
 | 
					
						
							|  |  |  | 2    itone(1)=nfreq
 | 
					
						
							|  |  |  |   else
 | 
					
						
							|  |  |  |      message=msg0
 | 
					
						
							|  |  |  |      do i=1,22
 | 
					
						
							|  |  |  |         if(ichar(message(i:i)).eq.0) then
 | 
					
						
							|  |  |  |            message(i:)='                      '
 | 
					
						
							|  |  |  |            exit
 | 
					
						
							|  |  |  |         endif
 | 
					
						
							|  |  |  |      enddo
 | 
					
						
							| 
									
										
										
										
											2013-07-08 13:17:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-22 17:48:03 +00:00
										 |  |  |      do i=1,22                               !Strip leading blanks
 | 
					
						
							|  |  |  |         if(message(1:1).ne.' ') exit
 | 
					
						
							|  |  |  |         message=message(i+1:)
 | 
					
						
							|  |  |  |      enddo
 | 
					
						
							| 
									
										
										
										
											2013-07-08 13:17:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-24 15:44:48 +00:00
										 |  |  |      call chkmsg(message,cok,nspecial,flip)
 | 
					
						
							| 
									
										
										
										
											2016-11-13 20:04:09 +00:00
										 |  |  |      ntest=0
 | 
					
						
							|  |  |  |      if(flip.lt.0.0) ntest=1
 | 
					
						
							| 
									
										
										
										
											2015-04-22 17:48:03 +00:00
										 |  |  |      if(nspecial.eq.0) then
 | 
					
						
							| 
									
										
										
										
											2018-07-11 10:13:42 -04:00
										 |  |  |         call packmsg(message,dgen,itype)    !Pack message into 72 bits
 | 
					
						
							|  |  |  |         call unpackmsg(dgen,msgsent)        !Unpack to get message sent
 | 
					
						
							| 
									
										
										
										
											2016-11-21 15:46:17 +00:00
										 |  |  |         msgsent(20:22)=cok
 | 
					
						
							|  |  |  |         call fmtmsg(msgsent,iz)
 | 
					
						
							| 
									
										
										
										
											2015-04-22 17:48:03 +00:00
										 |  |  |         if(ichk.ne.0) go to 999             !Return if checking only
 | 
					
						
							| 
									
										
										
										
											2013-07-08 13:17:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-22 17:48:03 +00:00
										 |  |  |         call rs_encode(dgen,sent)           !Apply Reed-Solomon code
 | 
					
						
							|  |  |  |         call interleave63(sent,1)           !Apply interleaving
 | 
					
						
							|  |  |  |         call graycode65(sent,63,1)          !Apply Gray code
 | 
					
						
							|  |  |  |         nsym=126                            !Symbols per transmission
 | 
					
						
							| 
									
										
										
										
											2016-03-24 15:44:48 +00:00
										 |  |  |         k=0
 | 
					
						
							|  |  |  |         do j=1,nsym
 | 
					
						
							| 
									
										
										
										
											2016-11-13 20:04:09 +00:00
										 |  |  |            if(nprc(j).eq.ntest) then
 | 
					
						
							| 
									
										
										
										
											2016-03-24 15:44:48 +00:00
										 |  |  |               k=k+1
 | 
					
						
							|  |  |  |               itone(j)=sent(k)+2
 | 
					
						
							|  |  |  |            else
 | 
					
						
							|  |  |  |               itone(j)=0
 | 
					
						
							|  |  |  |            endif
 | 
					
						
							|  |  |  |         enddo
 | 
					
						
							| 
									
										
										
										
											2013-07-08 13:17:22 +00:00
										 |  |  |      else
 | 
					
						
							| 
									
										
										
										
											2015-04-22 17:48:03 +00:00
										 |  |  |         nsym=32
 | 
					
						
							| 
									
										
										
										
											2016-03-24 15:44:48 +00:00
										 |  |  |         k=0
 | 
					
						
							|  |  |  |         do j=1,nsym
 | 
					
						
							|  |  |  |            do n=1,4
 | 
					
						
							|  |  |  |               k=k+1
 | 
					
						
							|  |  |  |               if(iand(j,1).eq.1) itone(k)=0
 | 
					
						
							|  |  |  |               if(iand(j,1).eq.0) itone(k)=10*nspecial
 | 
					
						
							|  |  |  |               if(k.eq.126) go to 10
 | 
					
						
							|  |  |  |            enddo
 | 
					
						
							|  |  |  |         enddo
 | 
					
						
							|  |  |  | 10      msgsent=message
 | 
					
						
							|  |  |  |         itype=7
 | 
					
						
							| 
									
										
										
										
											2013-07-08 13:17:22 +00:00
										 |  |  |      endif
 | 
					
						
							| 
									
										
										
										
											2015-04-22 17:48:03 +00:00
										 |  |  |   endif
 | 
					
						
							| 
									
										
										
										
											2013-07-08 13:17:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 999 return
 | 
					
						
							|  |  |  | end subroutine gen65
 |