mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			126 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import sys
 | |
| from datetime import datetime
 | |
| mycall="K1JT"
 | |
| mygrid="FN20"
 | |
| 
 | |
| # Keyed with hiscall:
 | |
| Freq={}
 | |
| T0={}
 | |
| RcvdExch={}
 | |
| Grid={}
 | |
| 
 | |
| # Keyed with hiscall_band:
 | |
| Staged={}
 | |
| TimeLogged={}
 | |
| QSOinProgress={}
 | |
| # QSOinProgress bit values:
 | |
| #  1 He called me
 | |
| #  2 I called him
 | |
| #  4 Received his exchange
 | |
| #  8 Received his Roger
 | |
| # 16 Sent Roger
 | |
| # 32 Staged for logging
 | |
| 
 | |
| def isGrid(g):
 | |
|     """Return True if g is a valid grid4 and not RR73"""
 | |
|     if len(g)!=4 or g=="RR73": return False
 | |
|     if ord(g[0:1])<ord('A') or ord(g[0:1])>ord('R'): return False
 | |
|     if ord(g[1:2])<ord('A') or ord(g[1:2])>ord('R'): return False
 | |
|     if ord(g[2:3])<ord('0') or ord(g[2:3])>ord('9'): return False
 | |
|     if ord(g[3:4])<ord('0') or ord(g[3:4])>ord('9'): return False
 | |
|     return True
 | |
| 
 | |
| if len(sys.argv)!=4:
 | |
|     print "Usage:   python all2cab.py <mycall> <mygrid> <infile>"
 | |
|     print "Example: python all2cab.py K1JT FN20 all_wwdigi_2019.txt"
 | |
|     exit()
 | |
| 
 | |
| f=open(sys.argv[3],mode='r')
 | |
| ss=f.readlines()
 | |
| f.close
 | |
| dt0=datetime.strptime(ss[0][0:13],"%y%m%d_%H%M%S")
 | |
| iz=len(ss)
 | |
| nqso=0
 | |
| hiscall_band=""
 | |
| 
 | |
| for i in range(iz):
 | |
|     s=ss[i][0:80].strip()
 | |
|     dt=datetime.strptime(s[0:13],"%y%m%d_%H%M%S")
 | |
|     tx=" Tx " in s              #True if this is my transmission
 | |
|     w=s.split()
 | |
|     if len(w)<10: continue
 | |
|     if w[7]=="CQ":
 | |
|         cq=True
 | |
|         if w[8].isalpha():
 | |
|             s=s.replace(" CQ "," CQ_")
 | |
|             w=s.split()
 | |
|     if len(w)<10: continue
 | |
|     c1=w[7]
 | |
|     c2=w[8]
 | |
|     c3=w[9]
 | |
|     roger = c3=="R"
 | |
|     if roger: c3=w[10]
 | |
|     cq = (c1=="CQ" or c1[0:3]=="CQ_")
 | |
|     if cq:
 | |
|         Grid[c2]=c3
 | |
| 
 | |
|     hiscall=""
 | |
|     if tx and not cq:
 | |
|         hiscall=c1
 | |
|     if c1==mycall:
 | |
|         freq=int(1000.0*float(s[13:23])) + int((int(s[42:47]))/1000)
 | |
|         hiscall=c2
 | |
|         Freq[hiscall]=freq
 | |
|         MHz="%3d" % int(float(s[13:23]))
 | |
|         hiscall_band=hiscall+MHz
 | |
|         n=QSOinProgress.get(hiscall_band,0)
 | |
|         n = n | 1                                 #He called me
 | |
|         if roger or c3=="RR73" or c3=="RRR" or c3=="73":
 | |
|             n = n | 8                             # Rcvd Roger
 | |
|         if isGrid(c3):
 | |
|             hisgrid=c3
 | |
|             RcvdExch[hiscall]=hisgrid
 | |
|             n = n | 4                             #Received his exchange
 | |
|         else:
 | |
|             g=Grid.get(hiscall,"")
 | |
|             if isGrid(g):
 | |
|                 RcvdExch[hiscall]=g
 | |
|                 n = n | 4                         #Received his exchange
 | |
|         QSOinProgress[hiscall_band]=n
 | |
|         
 | |
|     if len(hiscall)>=3:
 | |
|         MHz="%3d" % int(float(s[13:23]))
 | |
|         hiscall_band=hiscall+MHz
 | |
|         if tx:
 | |
|             n=QSOinProgress.get(hiscall_band,0)
 | |
|             n = n | 2                             #I called him
 | |
|             if roger or c3=="RR73" or c3=="RRR" or c3=="73":
 | |
|                 n = n | 4 | 16                    #Rcvd Exch, Sent Roger
 | |
|             if c3=="RR73" or c3=="RRR" or c3=="73":
 | |
|                 n = n | 8                         #Rcvd Exch, Sent Roger
 | |
|             QSOinProgress[hiscall_band]=n
 | |
|         T0[hiscall]=dt
 | |
| 
 | |
|     if len(hiscall_band)<5 or len(hiscall)<3: continue
 | |
|     
 | |
|     if QSOinProgress.get(hiscall_band,0)>=31:
 | |
|         n=QSOinProgress.get(hiscall_band,0)
 | |
|         n = n | 32
 | |
|         QSOinProgress[hiscall_band]=n
 | |
|         t=str(T0[hiscall])[0:16]
 | |
|         t=t[0:13] + t[14:16]
 | |
|         buf="QSO: %5d DG %s %-10s    %s       %-10s    %s" % (Freq[hiscall],t,\
 | |
|                 mycall,mygrid,hiscall,RcvdExch.get(hiscall,"    "))
 | |
|         MHz="%3d" % int(float(s[13:23]))
 | |
|         hiscall_band=hiscall+MHz
 | |
|         t=Staged.get(hiscall_band,"")
 | |
|         time_diff=-1
 | |
|         if TimeLogged.get(hiscall_band,0)!=0:
 | |
|             time_diff=(T0[hiscall] - TimeLogged[hiscall_band]).total_seconds()
 | |
|         if time_diff == -1 or time_diff > 180:    #Log only once within 3 min
 | |
|             Staged[hiscall_band]=buf              #Staged for logging
 | |
|             nqso=nqso+1
 | |
|             TimeLogged[hiscall_band]=T0[hiscall]
 | |
|             print buf                             #For now, log anything staged
 | |
|             del QSOinProgress[hiscall_band]
 |