mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	Nearly finished with pack77/unpack77.
This commit is contained in:
		
							parent
							
								
									983cd3f31c
								
							
						
					
					
						commit
						617b0bffc8
					
				
							
								
								
									
										12
									
								
								lib/77bit/CQ_messages.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								lib/77bit/CQ_messages.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| CQ K1ABC FN42 | ||||
| DE K1ABC FN42 | ||||
| QRZ K1ABC FN42 | ||||
| CQ AA K1ABC FN42 | ||||
| CQ ZZ K1ABC FN42 | ||||
| CQ 000 K1ABC FN42 | ||||
| CQ 313 K1ABC FN42 | ||||
| CQ 999 K1ABC FN42 | ||||
| CQ AAA K1ABC FN42 | ||||
| CQ ZZZ K1ABC FN42 | ||||
| CQ AAAA K1ABC FN42 | ||||
| CQ ZZZZ K1ABC FN42 | ||||
| @ -3,26 +3,22 @@ program encode77 | ||||
|   character msg*37,msg0*37,cerr*1 | ||||
|   character*77 c77 | ||||
| 
 | ||||
|   open(10,file='msgtypes.txt',status='old') | ||||
| 
 | ||||
| ! Skip over first two lines | ||||
|   read(10,1001) cerr | ||||
|   read(10,1001) cerr | ||||
| 1001 format(a1) | ||||
|    | ||||
|   nargs=iargc() | ||||
|   do iline=1,999 | ||||
|      read(10,1002,end=999) i3a,n3a,msg0 | ||||
| 1002 format(i1,i4,1x,a37) | ||||
|      if(nargs.eq.1) then | ||||
|         call getarg(1,msg0) | ||||
|      else | ||||
|         read(*,1002,end=999) msg0 | ||||
| 1002    format(a37) | ||||
|      endif | ||||
|      if(msg0.eq.'                                     ') exit | ||||
|      i3=i3a | ||||
|      n3=n3a | ||||
| !     if(i3a.gt.1 .or. n3a.gt.5) cycle | ||||
|      call pack77(msg0,i3,n3,c77) | ||||
|      call unpack77(c77,msg) | ||||
|      cerr=' ' | ||||
|      if(i3a.ne.i3 .or. n3a.ne.n3 .or. msg.ne.msg0) cerr='*' | ||||
|      if(msg.ne.msg0) cerr='*' | ||||
|      write(*,1004) i3,n3,cerr,msg0,msg | ||||
| 1004 format(i1,'.',i1,1x,a1,1x,a37,1x,a37) | ||||
|      if(nargs.eq.1) exit | ||||
|   enddo | ||||
| 
 | ||||
| 999 end program encode77 | ||||
|  | ||||
							
								
								
									
										36
									
								
								lib/77bit/messages.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								lib/77bit/messages.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| FREE TEXT MSG                        71               0   71 | ||||
| K1ABC RR73; W9XYZ <KH1/KH7Z> -12     28 28 10 5       1   71   DXpedition Mode | ||||
| PA3XYZ/P R 590003 IO91NP             28 1 1 3 12 25   2   70   EU VHF contest (2) | ||||
| PA3XYZ 520093 IO91NP                 28 1 1 3 12 25   2   70   EU VHF contest (2) | ||||
| WA9XYZ KA1ABC R 16A EMA              28 28 1 4 3 7    3   71   ARRL Field Day | ||||
| WA9XYZ KA1ABC 7D EMA                 28 28 1 4 3 7    3   71   ARRL Field Day | ||||
| WA9XYZ G8ABC 1D DX                   28 28 1 4 3 7    3   71   ARRL Field Day | ||||
| WA9XYZ KA1ABC R 32A EMA              28 28 1 4 3 7    4   71   ARRL Field Day | ||||
| 123456789ABCDEF012                   71                   71   Telemetry (18 hex) | ||||
| 7123456789ABCDEF01                   71                   71   Telemetry (18 hex) | ||||
| 71234567                             71                   71   Telemetry (18 hex) | ||||
| 81234567                             71                   71   Telemetry (18 hex) | ||||
| 8123456789ABCDEF01                   71                   71   Telemetry (18 hex) | ||||
| WA9XYZ/R KA1ABC/R R FN42             28 1 28 1 1 15       74   Standard msg | ||||
| WA9XYZ KA1ABC R-19                   28 1 28 1 1 15       74   Standard msg | ||||
| WA9XYZ KA1ABC +03                    28 1 28 1 1 15       74   Standard msg | ||||
| PA1XYZ/P GM4ABC/P R FN42             28 1 28 1 1 15       74   EU VHF Contest | ||||
| TU; W9XYZ K1ABC R 579 MA             1 28 28 1 3 13       74   ARRL RTTY contest | ||||
| TU; W9XYZ G8ABC R 559 0013           1 28 28 1 3 13       74   ARRL RTTY (DX) | ||||
| <WA9XYZ> PJ4/KA1ABC                  13 58 1 2            74   Nonstandard call | ||||
| PJ4/KA1ABC <WA9XYZ> RRR              13 58 1 2            74   Nonstandard call | ||||
| <WA9XYZ> PJ4/KA1ABC RR73             13 58 1 2            74   Nonstandard call | ||||
| PJ4/KA1ABC <WA9XYZ> 73               13 58 1 2            74   Nonstandard call | ||||
| <WA9XYZ> PJ4/KA1ABC 73               13 58 1 2            74   Nonstandard call | ||||
| CQ K1ABC FN42 | ||||
| DE K1ABC FN42 | ||||
| QRZ K1ABC FN42 | ||||
| CQ AA K1ABC FN42 | ||||
| CQ ZZ K1ABC FN42 | ||||
| CQ 000 K1ABC FN42 | ||||
| CQ 313 K1ABC FN42 | ||||
| CQ 999 K1ABC FN42 | ||||
| CQ AAA K1ABC FN42 | ||||
| CQ ZZZ K1ABC FN42 | ||||
| CQ AAAA K1ABC FN42 | ||||
| CQ ZZZZ K1ABC FN42 | ||||
| @ -14,6 +14,7 @@ i3 n3 | ||||
| 0   5 81234567                             71                   71   Telemetry (18 hex) | ||||
| 0   5 8123456789ABCDEF01                   71                   71   Telemetry (18 hex) | ||||
| 1     WA9XYZ/R KA1ABC/R R FN42             28 1 28 1 1 15       74   Standard msg | ||||
| 1     WA9XYZ KA1ABC R-11                   28 1 28 1 1 15       74   Standard msg | ||||
| 2     PA1XYZ/P GM4ABC/P R FN42             28 1 28 1 1 15       74   EU VHF Contest | ||||
| 3     TU; W9XYZ K1ABC R 579 MA             1 28 28 1 3 13       74   ARRL RTTY contest | ||||
| 3     TU; W9XYZ G8ABC R 559 0013           1 28 28 1 3 13       74   ARRL RTTY (DX) | ||||
|  | ||||
| @ -14,6 +14,7 @@ subroutine pack77(msg,i3,n3,c77) | ||||
|   call split77(msg,nwords,nw,w) | ||||
|   i3=-1 | ||||
|   n3=-1 | ||||
|   if(msg(1:3).eq.'CQ ' .or. msg(1:3).eq.'DE ' .or. msg(1:4).eq.'QRZ ') go to 100 | ||||
| 
 | ||||
| ! Check 0.1 (DXpedition mode) | ||||
|   call pack77_01(nwords,w,i3,n3,c77) | ||||
| @ -43,7 +44,7 @@ subroutine pack77(msg,i3,n3,c77) | ||||
|   endif | ||||
| 
 | ||||
| ! Check Types 1 and 2 (Standard 77-bit message (type 1) or with "/P" (type 2)) | ||||
|   call pack77_1(nwords,w,i3,n3,c77) | ||||
| 100 call pack77_1(nwords,w,i3,n3,c77) | ||||
|   if(i3.ge.0) go to 900 | ||||
| 
 | ||||
| ! Check Type 3 (ARRL RTTY contest exchange) | ||||
|  | ||||
| @ -1,10 +1,12 @@ | ||||
| subroutine pack77_1(nwords,w,i3,n3,c77) | ||||
| ! Check Type 1 (Standard 77-bit message) and Type 2 (ditto, with a "/P" call) | ||||
| 
 | ||||
|   parameter (MAXGRID4=32400) | ||||
|   character*13 w(19),c13 | ||||
|   character*77 c77 | ||||
|   character*6 bcall_1,bcall_2 | ||||
|   character*4 grid4 | ||||
|   character c1*1,c2*2 | ||||
|   logical is_grid4 | ||||
|   logical ok1,ok2 | ||||
|   is_grid4(grid4)=len(trim(grid4)).eq.4 .and.                        & | ||||
| @ -13,11 +15,23 @@ subroutine pack77_1(nwords,w,i3,n3,c77) | ||||
|        grid4(3:3).ge.'0' .and. grid4(3:3).le.'9' .and.               & | ||||
|        grid4(4:4).ge.'0' .and. grid4(4:4).le.'9' | ||||
| 
 | ||||
| !  print*,'b',nwords,w(1:nwords) | ||||
|   if(nwords.lt.3 .or. nwords.gt.4) return | ||||
|   call chkcall(w(1),bcall_1,ok1) | ||||
|   call chkcall(w(2),bcall_2,ok2) | ||||
|   if(w(1)(1:3).eq.'DE ' .or. w(1)(1:3).eq.'CQ_' .or. w(1)(1:4).eq.'QRZ ') ok1=.true. | ||||
|   if(.not.ok1 .or. .not.ok2) return | ||||
|   if(.not.is_grid4(w(nwords)(1:4))) return | ||||
|   c1=w(nwords)(1:1) | ||||
|   c2=w(nwords)(1:2) | ||||
|   if(.not.is_grid4(w(nwords)(1:4)) .and. c1.ne.'+' .and. c1.ne.'-' & | ||||
|        .and. c2.ne.'R+' .and. c2.ne.'R-') return | ||||
|   if(c1.eq.'+' .or. c1.eq.'-') then | ||||
|      ir=0 | ||||
|      read(w(nwords),*) irpt | ||||
|   else if(c2.eq.'R+' .or. c2.eq.'R-') then | ||||
|      ir=1 | ||||
|      read(w(nwords)(2:),*) irpt | ||||
|   endif | ||||
| 
 | ||||
| ! 1     WA9XYZ/R KA1ABC/R R FN42           28 1 28 1 1 15   74   Standard msg | ||||
| ! 2     PA3XYZ/P GM4ABC/P R JO22           28 1 28 1 1 15   74   EU VHF contest   | ||||
| @ -28,6 +42,7 @@ subroutine pack77_1(nwords,w,i3,n3,c77) | ||||
|      if(index(w(1),'/P').ge.4 .or. index(w(2),'/P').ge.4) i3=2  !Type 2, with "/P" | ||||
|   endif | ||||
|   c13=bcall_1//'       ' | ||||
|   if(c13(1:3).eq.'CQ_') c13=w(1) | ||||
|   call pack28(c13,n28a) | ||||
|   c13=bcall_2//'       ' | ||||
|   call pack28(c13,n28b) | ||||
| @ -35,16 +50,23 @@ subroutine pack77_1(nwords,w,i3,n3,c77) | ||||
|   ipb=0 | ||||
|   if(index(w(1),'/P').ge.4 .or. index(w(1),'/R').ge.4) ipa=1 | ||||
|   if(index(w(2),'/P').ge.4 .or. index(w(2),'/R').ge.4) ipb=1 | ||||
|   ir=0 | ||||
|   if(w(3).eq.'R ') ir=1 | ||||
|    | ||||
|   grid4=w(nwords)(1:4) | ||||
|   j1=(ichar(grid4(1:1))-ichar('A'))*18*10*10 | ||||
|   j2=(ichar(grid4(2:2))-ichar('A'))*10*10 | ||||
|   j3=(ichar(grid4(3:3))-ichar('0'))*10 | ||||
|   j4=(ichar(grid4(4:4))-ichar('0')) | ||||
|   igrid4=j1+j2+j3+j4 | ||||
|   if(is_grid4(grid4)) then | ||||
|      ir=0 | ||||
|      if(w(3).eq.'R ') ir=1 | ||||
|      j1=(ichar(grid4(1:1))-ichar('A'))*18*10*10 | ||||
|      j2=(ichar(grid4(2:2))-ichar('A'))*10*10 | ||||
|      j3=(ichar(grid4(3:3))-ichar('0'))*10 | ||||
|      j4=(ichar(grid4(4:4))-ichar('0')) | ||||
|      igrid4=j1+j2+j3+j4 | ||||
|   else | ||||
|      igrid4=MAXGRID4 + 35 + irpt | ||||
|   endif | ||||
|   write(c77,1000) n28a,ipa,n28b,ipb,ir,igrid4,i3 | ||||
| 1000 format(2(b28.28,b1),b1,b15.15,b3.3) | ||||
| !  print*,igrid4 | ||||
| !  print*,c77 | ||||
| 
 | ||||
|   return | ||||
| end subroutine pack77_1 | ||||
|  | ||||
| @ -41,7 +41,7 @@ subroutine pack77_4(nwords,w,i3,n3,c77) | ||||
|      nrpt=0 | ||||
|      if(trim(w(3)).eq.'RRR') nrpt=1 | ||||
|      if(trim(w(3)).eq.'RR73') nrpt=2 | ||||
|      if(trim(w(3)).eq.'73') nrpr=3 | ||||
|      if(trim(w(3)).eq.'73') nrpt=3 | ||||
|      write(c77,1010) n13,n58,iflip,nrpt,i3 | ||||
| 1010 format(b13.13,b58.58,b1,b2.2,b3.3) | ||||
|   endif | ||||
|  | ||||
| @ -5,6 +5,8 @@ subroutine split77(msg,nwords,nw,w) | ||||
|   character*37 msg | ||||
|   character*13 w(19) | ||||
|   character*1 c,c0 | ||||
|   character*6 bcall_1 | ||||
|   logical ok1 | ||||
|   integer nw(19) | ||||
|      | ||||
|   iz=len(trim(msg)) | ||||
| @ -24,13 +26,21 @@ subroutine split77(msg,nwords,nw,w) | ||||
|      n=n+1                                      !Index in word | ||||
|      msg(j:j)=c | ||||
|      if(c.ge.'a' .and. c.le.'z') msg(j:j)=char(ichar(c)-32)  !Force upper case | ||||
|      w(k)(n:n)=c                                !Copy character c into word | ||||
|      if(n.le.13) w(k)(n:n)=c                    !Copy character c into word | ||||
|      c0=c | ||||
|   enddo | ||||
|   iz=j                                          !Message length | ||||
|   nwords=k                                      !Number of words in msg | ||||
|   nw(k)=len(trim(w(k))) | ||||
|   msg(iz+1:)='                                     ' | ||||
| 
 | ||||
|    | ||||
|   call chkcall(w(3),bcall_1,ok1) | ||||
|   if(ok1 .and. w(1)(1:3).eq.'CQ ') then | ||||
|      w(1)='CQ_'//w(2)(1:10) | ||||
|      w(2:12)=w(3:13) | ||||
|      nwords=nwords-1 | ||||
|   endif | ||||
| !  print*,'a',nwords,w(1:nwords) | ||||
|    | ||||
|   return | ||||
| end subroutine split77 | ||||
|  | ||||
| @ -27,6 +27,7 @@ subroutine unpack28(n28_0,c13) | ||||
|      endif | ||||
|      if(n28.le.532443) then | ||||
|         n=n28-1003 | ||||
|         n0=n | ||||
|         i1=n/(27*27*27) | ||||
|         n=n-27*27*27*i1 | ||||
|         i2=n/(27*27) | ||||
|  | ||||
| @ -2,6 +2,7 @@ subroutine unpack77(c77,msg) | ||||
| 
 | ||||
|   parameter (NSEC=84)      !Number of ARRL Sections | ||||
|   parameter (NUSCAN=65)    !Number of US states and Canadian provinces | ||||
|   parameter (MAXGRID4=32400) | ||||
|   integer*8 n58 | ||||
|   integer ntel(3) | ||||
|   character*77 c77 | ||||
| @ -124,25 +125,40 @@ subroutine unpack77(c77,msg) | ||||
| 1000 format(2(b28,b1),b1,b15,b3) | ||||
|      call unpack28(n28a,call_1) | ||||
|      call unpack28(n28b,call_2) | ||||
|      if(call_1(1:3).eq.'CQ_') call_1(3:3)=' ' | ||||
|      i=index(call_1,' ') | ||||
|      if(i.ge.4 .and. ipa.eq.1 .and. i3.eq.1) call_1(i:i+1)='/R' | ||||
|      if(i.ge.4 .and. ipa.eq.1 .and. i3.eq.2) call_1(i:i+1)='/P' | ||||
|      if(i.ge.4 .and. ipb.eq.1 .and. i3.eq.1) call_2(i:i+1)='/R' | ||||
|      if(i.ge.4 .and. ipb.eq.1 .and. i3.eq.2) call_2(i:i+1)='/P' | ||||
| 
 | ||||
|      n=igrid4 | ||||
|      j1=n/(18*10*10) | ||||
|      n=n-j1*18*10*10 | ||||
|      j2=n/(10*10) | ||||
|      n=n-j2*10*10 | ||||
|      j3=n/10 | ||||
|      j4=n-j3*10 | ||||
|      grid4(1:1)=char(j1+ichar('A')) | ||||
|      grid4(2:2)=char(j2+ichar('A')) | ||||
|      grid4(3:3)=char(j3+ichar('0')) | ||||
|      grid4(4:4)=char(j4+ichar('0')) | ||||
|      if(ir.eq.0) msg=trim(call_1)//' '//trim(call_2)//' '//grid4 | ||||
|      if(ir.eq.1) msg=trim(call_1)//' '//trim(call_2)//' R '//grid4 | ||||
|      if(igrid4.le.MAXGRID4) then | ||||
|         n=igrid4 | ||||
|         j1=n/(18*10*10) | ||||
|         n=n-j1*18*10*10 | ||||
|         j2=n/(10*10) | ||||
|         n=n-j2*10*10 | ||||
|         j3=n/10 | ||||
|         j4=n-j3*10 | ||||
|         grid4(1:1)=char(j1+ichar('A')) | ||||
|         grid4(2:2)=char(j2+ichar('A')) | ||||
|         grid4(3:3)=char(j3+ichar('0')) | ||||
|         grid4(4:4)=char(j4+ichar('0')) | ||||
|         if(ir.eq.0) msg=trim(call_1)//' '//trim(call_2)//' '//grid4 | ||||
|         if(ir.eq.1) msg=trim(call_1)//' '//trim(call_2)//' R '//grid4 | ||||
|      else | ||||
|         irpt=igrid4-MAXGRID4 | ||||
|         if(irpt.eq.1) msg=trim(call_1)//' '//trim(call_2) | ||||
|         if(irpt.eq.2) msg=trim(call_1)//' '//trim(call_2)//' RRR' | ||||
|         if(irpt.eq.2) msg=trim(call_1)//' '//trim(call_2)//' RR73' | ||||
|         if(irpt.eq.4) msg=trim(call_1)//' '//trim(call_2)//' 73' | ||||
|         if(irpt.ge.5) then | ||||
|            write(crpt,'(i3.2)') irpt-35 | ||||
|            if(crpt(1:1).eq.' ') crpt(1:1)='+' | ||||
|            if(ir.eq.0) msg=trim(call_1)//' '//trim(call_2)//' '//crpt | ||||
|            if(ir.eq.1) msg=trim(call_1)//' '//trim(call_2)//' R'//crpt | ||||
|         endif | ||||
|      endif | ||||
| 
 | ||||
|   else if(i3.eq.3) then | ||||
| ! Type 3: ARRL RTTY Contest | ||||
| @ -184,7 +200,6 @@ subroutine unpack77(c77,msg) | ||||
|              ' R '//crpt//' '//cserial | ||||
|      endif | ||||
|   else if(i3.eq.4) then | ||||
| !     print*,c77 | ||||
|      read(c77,1050) n13,n58,iflip,nrpt | ||||
| 1050 format(b13,b58,b1,b2) | ||||
|      do i=11,1,-1 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user