• src/doors/termgfx/termgfx_termio.c

    From Rob Swindell (on Debian Linux)@1:103/705 to Git commit to main/sbbs/master on Wed Jul 22 20:38:40 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/a69d062a745f0a2ea36b379f
    Modified Files:
    src/doors/termgfx/termgfx_termio.c
    Log Message:
    termgfx present_rgbx: subset the per-frame palette on all terminals

    present_rgbx re-quantizes and re-sends its palette every frame and has
    no dirty-box path, so nothing relies on persisted registers -- making SIXEL_PAL_USED safe on every terminal here, SyncTERM included. Each
    truecolor frame now defines only the registers its quantized image
    uses. Used by SyncRPG.

    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell (on Debian Linux)@1:103/705 to Git commit to main/sbbs/master on Thu Jul 23 02:18:02 2026
    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>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)