• src/doors/syncconquer/door/door_input.c door_io.c door_io.h

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Thu Jul 9 01:55:11 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/9545ba78544c17c9656d25b7
    Modified Files:
    src/doors/syncconquer/door/door_input.c door_io.c door_io.h
    Log Message:
    syncconquer: move onto termgfx keymode, arming the missing settle window

    Replaces the door's own copy of the terminal key-mode negotiation with termgfx/keymode.h (cf67bccb2a, thrown-29-throw): the evdev/kitty enable and restore sequences, the evdev-wins precedence, the kitty CSI-u parameter decoder, the evdev->ASCII table, and the modifier classifier.

    This fixes a real defect. SyncConquer enabled SyncTERM physical key
    reports without an enable-time settle window, which the other doors all
    had. SyncTERM re-reports every key held at the instant reports are
    enabled -- typically the Enter still down from selecting the door off the
    BBS menu -- so the door acted on a keypress the player never made, before
    the first frame was drawn. Press edges are now dropped for 500ms after enabling; releases and modifier tracking are honored throughout, so no
    key can stick down.

    The state moves to door_io.c (it sees the CTDA reply that enables evdev
    and owns the leave path that undoes it) and door_input.c reaches it
    through door_io_keymode(). door_io_now_ms() is exported so the settle
    check runs in the same monotonic clock domain as the pacing.

    No change to the bytes on the wire, the key->action map, or the modifier keycodes recognized (29/97 Ctrl, 42/54 Shift, 56/100 Alt -- the table
    this door already had is the one termgfx now carries, verified identical
    byte for byte across all four doors).

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Fri Jul 10 23:41:57 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/e2935fc86b51162e3ac36734
    Modified Files:
    src/doors/syncconquer/door/door_input.c door_io.c door_io.h
    Log Message:
    syncalert: add Ctrl-S stats overlay and fix door hotkeys in all key modes

    Ctrl-S toggles a live debug overlay: graphics tier, frame rate, wire
    throughput (K/Mbps), pacing depth, keyboard-event mode, mouse
    granularity, client charset, RTT, and canvas/grid/cell geometry. It's
    drawn as one condensed line on the bottom text row -- the one placement
    that survives every tier (sixel can't paint over its reserved bottom row; JXL/PPM and the text tiers layer a text overlay on top). The overlay does
    NOT bypass the frame-dedupe: on an unchanged frame it refreshes only the
    line (change-detected) rather than re-encoding the whole image, which is
    what made an earlier top-corner overlay flicker under sixel.

    Also fix the door-level Ctrl+letter hotkeys (Ctrl-D/F/U/P/S). They were
    only decoded on the legacy raw-byte input path, so under the negotiated
    evdev (SyncTERM) or kitty (Windows Terminal) keyboard mode -- where a
    modified key arrives as a CSI/evdev report, not a raw control byte -- they
    were silently swallowed during play (the same trap F4 already worked
    around). Route all three input paths through one door_io_hotkey()
    dispatcher; a commit flag fires the action on the press edge only while swallowing repeat/release, so a held key can't re-toggle or leak the
    letter into the game.

    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net