Glue between the null display driver and the rest of Magic so that
running with -d null does not require any process-level resources
(signals, timers, stdin, an X display, or a Tcl interpreter).
* utils/signals.c — gate setitimer, fcntl-based file watches, kill
and the legacy sigsetmask/sigaction setup behind #ifdef
__EMSCRIPTEN__. Every signals path becomes a no-op in WASM.
Also fixes DBWriteBackup() being called with one argument when
its real prototype takes three.
* windows/windDisp.c — WindUpdate() returns immediately when
GrDisplayStatus == DISPLAY_SUSPEND. This is the runtime
counterpart to the null driver's DISPLAY_SUSPEND state.
* extflat/EFargs.c — EFArgs() with a missing input name no longer
jumps to "usage:" in headless WASM (which would call MainExit and
kill the process); it sets *err_result and returns NULL so the
caller can decide what to do. Native MAGIC_WRAPPER and native
non-MAGIC_WRAPPER builds keep their original behavior.
* dbwind/DBWcommands.c — registers exttosim / ext2sim / exttospice /
ext2spice in non-MAGIC_WRAPPER builds. Without this, WASM users
could not invoke these commands at all (they were previously
inside an #ifdef MAGIC_WRAPPER block). The C implementations
(CmdExtToSim / CmdExtToSpice) are linked unconditionally outside
modular builds.
* textio/txCommands.c, textio/textio.h — TxDispatchString(), a new
library-style command entry point that parses a single string,
dispatches it through WindSendCommand and returns a status code.
This is what magic_wasm_run_command() calls from JavaScript.