// 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 = { 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; }