Send the messages N1MM actually reads

Three of the messages this program sends were its own invention or in the
wrong units, so an N1MM beside it read them wrongly or not at all.

| Message | N1MM | What was sent |
|---|---|---|
| `XMIT` | transmitting, the function key's caption, Run2, F1 pressed, stop sending | transmitting, the radio number |
| `PASSFREQ` | the frequency in hundredths of a kilohertz, and nothing else | the frequency in kilohertz, and a callsign |
| `FREQ` | the frequency in hundredths of a kilohertz | `BANDMAP`, which N1MM has no such message for |

So N1MM showed a radio number where the other operators read what a
station is sending, read a pass on 14205.5 as 140.25, and never saw this
station move at all. `BANDMAP` is gone: the frequency goes out in `FREQ`
when the radio moves and the mode, run and the rest ride in the `STATUS`
that follows it, which is where N1MM carries them.

The `Msg` column now shows what a station is sending, which is what the
caption is for. `PassCall` and `RadioNumber` are gone from the station:
neither is on the wire, so neither was ever anything but this program
talking to itself.

**A station that reconnects resynchronises by itself.** N1MM sends
`LASTQAT` — when I last worked anybody — as soon as a connection opens,
and a station holding nothing that late asks for the hours in between. An
empty log asks for nothing: a program that has just been started has no
business pulling the whole contest across, and N1MM suppresses it the same
way. The answer goes over the connection this station opens, which is not
always up when the message arrives, so a resync that has nothing to ask
over waits for it rather than being lost — and one that still cannot send
stops and says so instead of leaving the row resynchronising for the rest
of the contest.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PdAYHcdRktqKry7nk414TU
This commit is contained in:
2026-09-03 22:54:16 +00:00
co-authored by Claude Opus 5
parent 2a21c772ad
commit b5d86c1677
11 changed files with 297 additions and 90 deletions
+13 -3
View File
@@ -364,8 +364,9 @@ DATA__07%SHACK-PC%QSO%2026-09-03 12:34:56%DL1ABC%…~__DATA
which is the sending station's number, its computer name, the message type and
the fields of that type. `%` and `~` cannot appear in a field, so N1MM writes
`!` in their place. What is read and sent: contacts, edits, deletes, resyncs,
`IAM`, the echo pair, chat, the pass frequency, transmit on and off, and where a
station is. The rest of N1MM's forty-odd types — the score and sked windows, the
`IAM`, the echo pair, chat, the pass frequency, transmit on and off, where a
station is tuned, the time of a station's last contact, and the four messages a
resync is made of. The rest of N1MM's forty-odd types — the score and sked windows, the
log check, the spot lists, the serial-number pool — are passed over, which
N1MM's own reader also does for a type it does not know.
@@ -380,7 +381,9 @@ nothing arrives.
Where a station is goes out once a second when it has changed, rather than from
each of the dozen places it can change from. In a multi-single entry that is
what the other operators watch.
what the other operators watch. The frequency goes on its own in N1MM's `FREQ`,
in hundredths of a kilohertz; the mode, run and the rest ride in the `STATUS`
that follows it.
**The status message.** `STATUS` goes out every five seconds whether anything
has changed or not, and it is what fills the other operators' windows: the pass
@@ -439,6 +442,13 @@ Every contact logged here now carries the computer that made it —
`NetBiosName`, which N1MM stamps and this program did not — because that is what
a resync asks for a block of contacts by.
A station that reconnects resynchronises by itself. N1MM sends `LASTQAT` — when
I last worked anybody — as soon as a connection opens, and a station that holds
nothing of that station's that late starts a resync from where its own copy
stops. An empty log asks for nothing: a program that has just been started has
no business pulling the whole contest across, and N1MM suppresses it the same
way.
**Rescore** writes the points and multiplier flags of a period back to the
database. The log in memory scores itself whenever it changes, so this is for
the stored rows: N1MM reads those columns rather than working them out, and a