diff --git a/cmd/parse_line.go b/cmd/parse_line.go index 02027ea..b031b97 100644 --- a/cmd/parse_line.go +++ b/cmd/parse_line.go @@ -40,6 +40,8 @@ type LogLine struct { QSLmsg string OMname string GridLoc string + RSTsent string + RSTrcvd string } var regexpIsBand = regexp.MustCompile("m$") @@ -52,7 +54,13 @@ var regexpIsGridLoc = regexp.MustCompile("^#") func ParseLine(inputStr string, previousLine LogLine) (logLine LogLine, errorMsg string){ //TODO: input null protection? + //Flag telling that we are processing data to the right of the callsign + //isRightOfCall := false + //TODO: Make something more intelligent + previousLine.Call = "" + previousLine.RSTsent = "" + previousLine.RSTrcvd = "" logLine = previousLine //TODO: what happens when we have <> or when there are multiple comments @@ -77,6 +85,23 @@ func ParseLine(inputStr string, previousLine LogLine) (logLine LogLine, errorMsg // Is it a mode? if lookupMode( strings.ToUpper(element)) { logLine.Mode = strings.ToUpper(element) + // Set the default RST depending of the mode + if (logLine.RSTsent == "") || (logLine.RSTrcvd == "") { + switch logLine.Mode { + case "SSB", "AM", "FM" : + logLine.RSTsent = "59" + logLine.RSTrcvd = "59" + case "CW", "RTTY", "PSK": + logLine.RSTsent = "599" + logLine.RSTrcvd = "599" + case "JT65", "JT9", "JT6M", "JT4", "JT44", "FSK441", "FT8", "ISCAT", "MSK144", "QRA64", "T10", "WSPR" : + logLine.RSTsent = "-10" + logLine.RSTrcvd = "-10" + } + + } else { + errorMsg = errorMsg + "Double definitiion of RST" + } continue } @@ -91,6 +116,7 @@ func ParseLine(inputStr string, previousLine LogLine) (logLine LogLine, errorMsg callErrorMsg := "" logLine.Call, callErrorMsg = ValidateCall(element) errorMsg = errorMsg + callErrorMsg + //isRightOfCall = true continue } @@ -155,6 +181,8 @@ func SprintLogRecord(logLine LogLine) (output string){ output = output + "QSLmsg " + logLine.QSLmsg + "\n" output = output + "OMname " + logLine.OMname + "\n" output = output + "GridLoc " + logLine.GridLoc + "\n" + output = output + "RSTsent " + logLine.RSTsent + "\n" + output = output + "RSTrcvd " + logLine.RSTrcvd + "\n" return output } diff --git a/cmd/parse_line_test.go b/cmd/parse_line_test.go index 154dca9..d4967b4 100644 --- a/cmd/parse_line_test.go +++ b/cmd/parse_line_test.go @@ -20,7 +20,7 @@ func TestParseLine(t *testing.T) { { "Parse band and mode only", args{ inputStr: "40m cw", previousLine: LogLine{ Mode: "SSB", }}, - LogLine{ Band: "40m", Mode: "CW",}, "", + LogLine{ Band: "40m", Mode: "CW", RSTsent: "599", RSTrcvd: "599"}, "", }, { "Parse for time", diff --git a/test/data/fullFeatureHeader.txt b/test/data/fullFeatureHeader.txt index 1c1b815..6b06405 100644 --- a/test/data/fullFeatureHeader.txt +++ b/test/data/fullFeatureHeader.txt @@ -13,4 +13,4 @@ date 2020-05-23 7.025 0958 iz2bzt 9 5 7.037 1012 on6zq 9 449 1020 dk5zx 9 7 -30m cw +