https://gitlab.synchro.net/main/sbbs/-/commit/030a89ccc53f780b1f70221f
Modified Files:
docs/v322_new.md src/doors/syncdoom/README.md syncdoom.c src/doors/syncduke/README.md syncduke_config.c syncduke_door.c src/doors/syncmoo1/README.md syncmoo1_config.c syncmoo1_config.h syncmoo1_door.c syncmoo1_plat.c syncmoo1_plat.h xtrn/syncarcade/install-xtrn.ini xtrn/syncdoom/README.md install-xtrn.ini lobby.js syncdoom.example.ini xtrn/syncduke/install-xtrn.ini lobby.js syncduke.example.ini xtrn/syncivision/install-xtrn.ini xtrn/syncmoo1/syncmoo1.example.ini xtrn/syncnes/install-xtrn.ini
Log Message:
doors: don't leave a console window on the BBS machine (Windows)
SyncDOOM, SyncDuke and SyncMOO1 are console-subsystem programs, so a BBS
that spawns them with CREATE_NEW_CONSOLE gets one console window per
player on the server's desktop. The door draws to the client's terminal
and prints nothing there, so the window is pure noise.
Synchronet already suppresses it host-side: the xtrn entries carry XTRN_NODISPLAY, which spawns with CREATE_NO_WINDOW. Two gaps remained.
The SyncDOOM and SyncDuke lobbies spawn the door themselves, via
bbs.exec(), where the xtrn entry's setting does not apply -- so a lobby-launched game popped up a window even under Synchronet. They now
pass EX_NODISPLAY, controlled by a new [lobby] nodisplay key (default
on), as syncretro_lobby.js already did unconditionally.
On any other BBS there is no such setting at all. Each door therefore
closes its own console at startup: new [debug] hide_console (default
on) and the -showconsole / -hideconsole arguments. Only a console the
process owns is freed (GetConsoleProcessList() == 1), and only with a
door socket, so a run from a command prompt keeps its output and a
stdio door keeps fd 0/1. The three std streams are re-pointed at NUL,
since the engines print on paths we don't control. This mirrors
syncconquer's door_console_detach(), and composes with CREATE_NO_WINDOW,
which still avoids the brief flash before the door can act.
Ordering matters where a door captures its diagnostics: FreeConsole() invalidates stderr even when it has already been freopen()ed onto a
file, so the detach runs before SyncMOO1's stderr capture and before
SyncDuke's stdout-to-stderr dup2().
Sysop-facing docs no longer describe a component by the language it is
written in ("the C door", "the JS lobby"): a sysop neither knows nor
cares. Source-file names (lobby.js) still appear where the file itself
is meant.
---
� Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net