• src/doors/syncdoom/README.md i_system.c syncdoom.c xtrn/syncdoom/syncd

    From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Sun Jul 5 16:37:05 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/42b968575b3f556a9306fb5a
    Modified Files:
    src/doors/syncdoom/README.md i_system.c syncdoom.c xtrn/syncdoom/syncdoom.example.ini
    Log Message:
    syncdoom: log fatal errors to a file instead of a modal dialog

    A fatal engine error (I_Error -- e.g. a bad WAD) popped a modal GUI dialog (MessageBoxW on Win32, zenity on *nix). In a door that is actively harmful:
    the box BLOCKS the door process, and under a Windows service it lands on a non-interactive window station nobody can dismiss, so the node hangs until the session times out while the remote user sees a frozen screen -- and the sysop usually never sees the box at all.

    Record the error durably and non-interactively instead:

    - I_Error routes the message through dlog() -- stderr (captured into the BBS
    log on *nix) plus, on Win32, OutputDebugString (DebugView) -- then exits.
    - Add a durable file log, off by default: -log <path>, syncdoom.ini
    [debug] log, or $SYNCDOOM_LOG. dlog() now writes every diagnostic line and
    the fatal error to it. A bare filename lands in <SBBSDATA>/syncdoom/ (the
    door's data dir), a path with a separator is used verbatim; the filename is
    node-tagged as syncdoom_n<node>.log so concurrent sessions don't collide.
    This matters most on Windows, where a native socket door's stderr is NOT
    captured by the BBS (no EX_STDOUT pipe), so the file is the only durable sink.
    - Remove the now-dead popup code (MessageBoxW / CFUserNotification / zenity
    helpers) and the -nogui parm that only suppressed it.

    Also drop the -l<rows> fallback option: the door always live-probes the terminal size (then terminal.ini, else a 25-row default), so a manual row count is never needed. This also fixes a latent bug -- the -l prefix match silently swallowed -log -- and a legacy -l%R from an existing install command line is still harmlessly stripped before the engine sees it.

    Verified under MSVC: a forced I_Error (bogus IWAD) exits promptly with no dialog and writes the banner + "FATAL: ..." to <data>/syncdoom/syncdoom_n<N>.log
    via both the -log arg and the env var.

    Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net