Run the action macros in a function key message
A function key message was read as text and nothing else, so a message file
written for N1MM lost half of what it said: {WIPE}, {LOG}, {RUN} and the rest
expanded to nothing and the key only sent characters.
Reading a message now produces a plan rather than a string. MessagePlan.Read
walks the template once and sorts what it finds into three parts: the actions
that run before anything goes out, the text that goes on the air, and the
actions that wait until it has gone. N1MM's {END} decides which side an action
falls on, and text after {END} is dropped, because the message is over by then.
So TU {LOG}{END}{WIPE} logs the contact, sends TU, and clears the boxes when the
key has finished sending.
The actions that are carried out: {WIPE}, {LOG}, {RUN}, {S&P}, {SPACE},
{SPOTME}, {STOPTX}, {FREQUP}, {FREQDN}, {PGUP}, {PGDN}, {JUMPRX}, {JUMPRXTX},
{CTRLF1} to {CTRLF12} for sending on the other radio, {TELNET sh/dx} for a
command to the cluster node, and {OTRSP TX2} for one to the SO2R box. The last
one wanted a way to send a command straight to the box, so So2rBox grew one.
The frequency steps are two settings, with N1MM's own two numbers behind them.
Waiting on the keyer is the part worth reading twice. What follows {END} runs
when the keyer says the message has gone out, which is the only honest moment:
timing it from the length of the text is a guess that goes wrong exactly when
the contest is busy. A keyer that does not report completion is taken at its
word as soon as the text is handed over, and one that goes quiet is given two
minutes before the actions run anyway, because never running them is worse.
Running it against a fake cwdaemon and a fake node showed the message text on
the keyer, the telnet command at the node, RUN lighting up before the message
and the boxes clearing after it. That is also what showed the entry window was
not redrawing between the actions and the message.
What is still read and passed over is written down: the CAT, audio, rotator,
stereo and call-stacking families, the digital TNC macros, and the CW keyer
characters < > ~ ] [ + = , which belong to the keyer rather than to the
expander. {EXCHSENT} waits on ESM, which is next.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -72,24 +72,19 @@ N1MM's to run. A page that changes shape would stop the download working; the
|
||||
reading only needs `telnet://` links in a table, and the old list stays in place
|
||||
when a download brings back something unreadable.
|
||||
|
||||
**The action macros do nothing.** The text macros are N1MM's, spelled as its
|
||||
function-key documentation spells them, and they are listed in the README. What
|
||||
is missing is the other half of N1MM's table: the macros that run a program
|
||||
command rather than standing for text — `{WIPE}`, `{LOG}`, `{ENTER}`, `{RUN}`,
|
||||
`{S&P}`, `{SPOTME}`, `{TOGGLE}`, `{END}`, the `{CAT…}` and `{OTRSP…}` families,
|
||||
the audio, rotator and call-stacking macros. They expand to nothing, so a
|
||||
message that holds one sends the right characters and takes no action.
|
||||
**Not every action macro is acted on.** The text macros and the action macros
|
||||
that this program can carry out are listed in the README. What is read and
|
||||
passed over: the `{CAT…}` and radio-hex families, the audio and rotator macros,
|
||||
`{STEREOON}` and `{STEREOOFF}`, the call-stacking macros, `{CONDJUMP}`,
|
||||
`{QSYCQ}`, `{FORCELOG}`, `{SwapContests}`, the digital TNC macros (`{ENTER}`,
|
||||
`{ESC}`, `{CTRL-A}`…), and the wav-directory macros, which wait on voice keying.
|
||||
`{EXCHSENT}` waits on ESM, which does not exist yet. A message holding any of
|
||||
them still sends the right characters.
|
||||
|
||||
They cannot be added to `MessageExpander` as it stands: it turns a template into
|
||||
a string, and an action macro has to reach the entry window, the keyer or the
|
||||
SO2R box, some of it after the message has been sent (that is what N1MM's
|
||||
`{END}` is for). That wants a different shape — a list of steps rather than a
|
||||
string.
|
||||
|
||||
Two more text macros are out for want of the data behind them: `{LASTEXCH}`,
|
||||
which N1MM only fills for ROPOCO and LZ Open, and `{OPERATOR}`, because there is
|
||||
no operator separate from the station callsign here. `@`, which voices the
|
||||
receive frequency from recorded letter files, waits on voice keying.
|
||||
The CW keyer macros are not read either: `<` and `>` for speed, `~` for a half
|
||||
space, and the prosign characters `]`, `[`, `+` and `=`. They belong to the
|
||||
keyer rather than to the expander — cwdaemon and a WinKeyer each have their own
|
||||
way of saying them — and they go out as the characters they are.
|
||||
|
||||
**The busted-spot check is one character wide.** N1MM offers two. Every call one
|
||||
character away from the spotted one is looked up in the callsign database, which
|
||||
|
||||
Reference in New Issue
Block a user