26 lines
1.1 KiB
TypeScript
26 lines
1.1 KiB
TypeScript
// What a decoding program is CALLED, as against what it calls itself.
|
|
//
|
|
// Every WSJT-X-family packet carries an "id" naming the sending program, and
|
|
// OpsLog shows it wherever a receiver has to be told apart from another. Most
|
|
// of them send the name on the box: "WSJT-X", "JTDX", "MSHV".
|
|
//
|
|
// Nexus does not. It announces itself as "Tempo" — the name of the engine
|
|
// inside it — so an operator running Nexus saw a program on their screen they
|
|
// have never heard of, and had to work out that it was theirs.
|
|
//
|
|
// Only the LABEL is translated. The id stays the routing key everywhere else:
|
|
// a Reply, a Halt and the auto-call's own bookkeeping are matched against what
|
|
// the program sent, and renaming that would send them to nobody.
|
|
const NAMES: Record<string, string> = {
|
|
TEMPO: 'Nexus',
|
|
};
|
|
|
|
export function decoderName(id?: string): string {
|
|
const raw = (id ?? '').trim();
|
|
if (!raw) return '';
|
|
// Matched on the leading word: some programs append a version or an instance
|
|
// number ("WSJT-X - 2", "Tempo 1.4"), and the name is the part before it.
|
|
const head = raw.split(/[\s\-–—]+/)[0].toUpperCase();
|
|
return NAMES[head] ?? raw;
|
|
}
|