https://gitlab.synchro.net/main/sbbs/-/commit/c6d429e9400c9239371468c4
Modified Files:
src/doors/termgfx/termgfx_termio.c
Log Message:
termgfx: honor the BBS session time limit
termio read DOOR32.SYS for its socket and DISCARDED line 9, the caller's minutes left. A door driven through it therefore ran until the player quit,
and the BBS reclaimed the node only when the session itself ended -- every sibling door has honored this for a long time; syncscumm and syncrpg never have.
The limit now comes from the drop file, or from an explicit -t<seconds> (Synchronet's %T) which overrides it, exactly as the siblings resolve it. -t
is matched on an all-digit suffix and marked consumed, so it never reaches
the engine's argv and an engine word option starting with -t passes through untouched.
Over the last minute the remaining time appears on the shared notice row,
then the session ends by setting g_quit -- the same clean unwind an idle timeout uses, so the engine saves whatever it saves rather than being killed mid-write.
Two things about that notice are deliberate. It runs from the pump, not the present path, for the reason the idle poll does: this door presents only
when the engine's dirty flag says the frame changed, so a countdown driven
by frames would stall on a static screen. And it runs AFTER the idle poll,
so when both want the row this one wins -- the idle countdown can be
dismissed by pressing a key, this one cannot, and offering "press any key" against a limit no key will move would be a lie.
Verified offline: -t fires to the millisecond, a DOOR32.SYS granting one
minute exits at 60.0s (the field that was previously thrown away), -t
overrides that drop file, and a session with no limit at all never fires.
Co-Authored-By: Claude Opus 4.8 (1M context) <
noreply@anthropic.com>
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net