Audits every case label in C's command.c against this port's dispatch and leaves the audit behind as a standing test, so the two lists cannot drift again. A missing dispatch entry is the one porting error that leaves no trace at build time: the port is function-by-function, so every C function has a Go counterpart and a dropped key dangles nothing, fails to compile nowhere, and simply answers "illegal command" the first time a player presses it. That is how '+' (#11) survived until PR #30 found it by accident. Result: no further missing keys. '+' was the only one. Recording that as a negative result — the class of bug is real, it has now been searched for exhaustively rather than stumbled upon, and the search came back empty. Eighty labels: sixty-five in the main switch, fifteen in the wizard sub-switch. commandHandlers is pinned by set equality in both directions. A missing key is the '+' bug; an extra key is the same bug mirrored, since the likeliest way to acquire one is promoting a key out of the wizard sub-switch, which would expose a MASTER debug command in ordinary play. The main-switch keys that commandHandlers cannot hold - the goto-over re-dispatches, F-to-f, 'a' and 'm' - are covered separately through dispatchKey, because dropping one of those is just as silent as dropping a map entry. Two traps are documented in the file. rogue.h 52-53 defines when as break;case, so a grep for 'case ' finds ten of the eighty labels. And the main/wizard split is load-bearing: '+' was a divergence in ordinary play, not just wizard mode, precisely because it is a main-switch key. Confirms this port targets the MASTER build: all four #ifdef MASTER sites in command.c are ported unconditionally, as is sticks.c 237.
8.7 KiB
8.7 KiB