mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05: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]
							 |