• 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