| 
									
										
										
										
											2018-01-30 15:25:10 +00:00
										 |  |  | program ft8code
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-19 16:36:32 -05:00
										 |  |  | ! Provides examples of message packing, LDPC(174,91) encoding, bit and
 | 
					
						
							| 
									
										
										
										
											2018-01-30 15:25:10 +00:00
										 |  |  | ! symbol ordering, and other details of the FT8 protocol.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-19 16:36:32 -05:00
										 |  |  |   use packjt77
 | 
					
						
							| 
									
										
										
										
											2018-01-30 15:25:10 +00:00
										 |  |  |   include 'ft8_params.f90'               !Set various constants
 | 
					
						
							|  |  |  |   include 'ft8_testmsg.f90'
 | 
					
						
							|  |  |  |   parameter (NWAVE=NN*NSPS)
 | 
					
						
							| 
									
										
										
										
											2018-10-19 16:36:32 -05:00
										 |  |  |  
 | 
					
						
							|  |  |  |   character*37 msg,msgsent
 | 
					
						
							| 
									
										
										
										
											2018-01-30 15:25:10 +00:00
										 |  |  |   character*9 comment
 | 
					
						
							| 
									
										
										
										
											2018-12-05 16:06:33 -06:00
										 |  |  |   character bad*1,msgtype*18
 | 
					
						
							| 
									
										
										
										
											2018-01-30 15:25:10 +00:00
										 |  |  |   integer itone(NN)
 | 
					
						
							| 
									
										
										
										
											2018-10-19 16:36:32 -05:00
										 |  |  |   integer*1 msgbits(77)
 | 
					
						
							| 
									
										
										
										
											2018-01-30 15:25:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ! Get command-line argument(s)
 | 
					
						
							|  |  |  |   nargs=iargc()
 | 
					
						
							|  |  |  |   if(nargs.ne.1 .and. nargs.ne.3) then
 | 
					
						
							|  |  |  |      print*
 | 
					
						
							|  |  |  |      print*,'Program ft8code:  Provides examples of message packing, ',       &
 | 
					
						
							| 
									
										
										
										
											2018-10-19 16:36:32 -05:00
										 |  |  |           'LDPC(174,91) encoding,'
 | 
					
						
							| 
									
										
										
										
											2018-01-30 15:25:10 +00:00
										 |  |  |      print*,'bit and symbol ordering, and other details of the FT8 protocol.'
 | 
					
						
							|  |  |  |      print*
 | 
					
						
							|  |  |  |      print*,'Usage: ft8code [-c grid] "message"  # Results for specified message'
 | 
					
						
							|  |  |  |      print*,'       ft8code -t                   # Examples of all message types'
 | 
					
						
							|  |  |  |      go to 999
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   call getarg(1,msg)                    !Message to be transmitted
 | 
					
						
							|  |  |  |   if(len(trim(msg)).eq.2 .and. msg(1:2).eq.'-t') then
 | 
					
						
							| 
									
										
										
										
											2018-10-19 16:36:32 -05:00
										 |  |  |      nmsg=NTEST
 | 
					
						
							| 
									
										
										
										
											2018-01-30 15:25:10 +00:00
										 |  |  |   else
 | 
					
						
							| 
									
										
										
										
											2018-10-19 16:36:32 -05:00
										 |  |  |      call fmtmsg(msg,iz)          !To upper case; collapse multiple blanks
 | 
					
						
							| 
									
										
										
										
											2018-01-30 15:25:10 +00:00
										 |  |  |      nmsg=1
 | 
					
						
							|  |  |  |   endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   write(*,1010)
 | 
					
						
							| 
									
										
										
										
											2018-10-19 16:36:32 -05:00
										 |  |  | 1010 format(4x,'Message',31x,'Decoded',29x,'Err i3.n3'/100('-')) 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 15:25:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   do imsg=1,nmsg
 | 
					
						
							|  |  |  |      if(nmsg.gt.1) msg=testmsg(imsg)
 | 
					
						
							|  |  |  |      
 | 
					
						
							|  |  |  | ! Generate msgsent, msgbits, and itone
 | 
					
						
							| 
									
										
										
										
											2018-10-19 16:36:32 -05:00
										 |  |  |      i3=-1
 | 
					
						
							|  |  |  |      n3=-1
 | 
					
						
							| 
									
										
										
										
											2018-11-05 11:59:48 -05:00
										 |  |  |      call genft8(msg,i3,n3,msgsent,msgbits,itone)
 | 
					
						
							| 
									
										
										
										
											2018-10-19 16:36:32 -05:00
										 |  |  |      msgtype=""
 | 
					
						
							|  |  |  |      if(i3.eq.0) then
 | 
					
						
							|  |  |  |         if(n3.eq.0) msgtype="Free text"
 | 
					
						
							|  |  |  |         if(n3.eq.1) msgtype="DXpedition mode"
 | 
					
						
							|  |  |  |         if(n3.eq.2) msgtype="EU VHF Contest"
 | 
					
						
							|  |  |  |         if(n3.eq.3) msgtype="ARRL Field Day"
 | 
					
						
							|  |  |  |         if(n3.eq.4) msgtype="ARRL Field Day"
 | 
					
						
							|  |  |  |         if(n3.eq.5) msgtype="Telemetry"
 | 
					
						
							|  |  |  |         if(n3.ge.6) msgtype="Undefined type"
 | 
					
						
							|  |  |  |      endif 
 | 
					
						
							|  |  |  |      if(i3.eq.1) msgtype="Standard msg"
 | 
					
						
							|  |  |  |      if(i3.eq.2) msgtype="EU VHF Contest"
 | 
					
						
							|  |  |  |      if(i3.eq.3) msgtype="ARRL RTTY Roundup"
 | 
					
						
							|  |  |  |      if(i3.eq.4) msgtype="Nonstandard calls"
 | 
					
						
							|  |  |  |      if(i3.ge.5) msgtype="Undefined msg type"
 | 
					
						
							|  |  |  |      if(i3.ge.1) n3=-1
 | 
					
						
							|  |  |  |      bad=" "
 | 
					
						
							|  |  |  |      comment='         '
 | 
					
						
							|  |  |  |      if(msg.ne.msgsent) bad="*"
 | 
					
						
							|  |  |  |      if(n3.ge.0) then
 | 
					
						
							|  |  |  |         write(*,1020) imsg,msg,msgsent,bad,i3,n3,msgtype,comment
 | 
					
						
							| 
									
										
										
										
											2018-12-05 16:06:33 -06:00
										 |  |  | 1020    format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',i1,1x,a18,1x,a9)
 | 
					
						
							| 
									
										
										
										
											2018-01-30 15:25:10 +00:00
										 |  |  |      else
 | 
					
						
							| 
									
										
										
										
											2018-10-19 16:36:32 -05:00
										 |  |  |         write(*,1022) imsg,msg,msgsent,bad,i3,msgtype,comment
 | 
					
						
							| 
									
										
										
										
											2018-12-05 16:06:33 -06:00
										 |  |  | 1022    format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',1x,1x,a18,1x,a9)
 | 
					
						
							| 
									
										
										
										
											2018-01-30 15:25:10 +00:00
										 |  |  |      endif
 | 
					
						
							|  |  |  |   enddo
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if(nmsg.eq.1) then
 | 
					
						
							| 
									
										
										
										
											2018-10-19 16:36:32 -05:00
										 |  |  |      write(*,1030) msgbits
 | 
					
						
							|  |  |  | 1030 format(/'Message bits: ',/77i1)
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:13:56 +00:00
										 |  |  |      write(*,1034) itone
 | 
					
						
							| 
									
										
										
										
											2018-10-19 16:36:32 -05:00
										 |  |  | 1034 format(/'Channel symbols (tones):'/79i1)
 | 
					
						
							| 
									
										
										
										
											2018-01-30 15:25:10 +00:00
										 |  |  |   endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 999 end program ft8code
 |