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]
 |