• src/doors/syncretro/syncretro.h syncretro_input.c syncretro_io.c

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Monday, July 13, 2026 01:09:59
    https://gitlab.synchro.net/main/sbbs/-/commit/ea627e6cf2f49ebe740dcff2
    Modified Files:
    src/doors/syncretro/syncretro.h syncretro_input.c syncretro_io.c
    Log Message:
    syncretro: start on sixel when the terminal has it, and read the whole numpad

    SIXEL WAS BEING MISSED ON SYNCTERM. The door asks the terminal two questions and asks them in this order: how big are you (the grid probe inside termgfx_term_probe) and what can you do (DA1, which is where sixel is advertised). So the grid reply always comes back FIRST -- and the settle gate opened on it alone. The very next frame built the tier list while the "I do sixel" reply was still in flight, read it as "no sixel", and started the
    player on a TEXT tier with no sixel anywhere in the F4 cycle. Whether both replies landed in one read was a matter of packet boundaries, which is why sixel would appear once in a session and never again. (The comment there claimed the settle window guaranteed DA1 had answered. It did not.)

    Wait for both answers now. And because a slow link can still answer after the window closes, the tier list rebuilds itself if sixel turns up late: a player who has not touched F4 is promoted to it -- he was on the fallback only
    because we did not know better yet -- while a player who HAS chosen a tier keeps the one he chose. Verified with the DA1 reply delayed 0, 300 and 800 ms: sixel every time, where it fell to half-block every time before.

    NUMLOCK HID HALF THE NUMPAD FROM KITTY TERMINALS. With NumLock ON the keypad reports KP_0..KP_9 (57399-57408); with it OFF the very same physical keys report the NAVIGATION functionals instead (KP_UP 57419, KP_LEFT 57417, ...). The decoder knew only the digits, so with NumLock off every numpad key fell through and was dropped -- the arrow keys drove the game and the numpad did nothing. SyncTERM was never affected: its evdev reports are physical keycodes, which NumLock does not touch.

    Both spellings fold to the same key here, deliberately. NumLock is a TYPING distinction -- it decides whether the key means "8" or "up" -- and on a game controller that key IS up: the top of a d-pad, or the 8 of the Intellivision's keypad. A player should not have to check a lock light to steer. (SyncConquer, a strategy game with a text UI, honors the distinction; a console door has no reason to.) Confirmed against a capture of a real kitty terminal rather than the spec: the codes arrive exactly as above, and the pad reads U=1 / D=1 / R=1 while the keys are held.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Tuesday, July 21, 2026 01:41:46
    https://gitlab.synchro.net/main/sbbs/-/commit/990418baddfa1cbfa276ed88
    Modified Files:
    src/doors/syncretro/syncretro.h syncretro_input.c syncretro_io.c
    Log Message:
    syncretro: hide the client's status line to reclaim its row

    A terminal that shows a status line reserves its bottom text row for it -- SyncTERM's default turns an 80x25 / 640x400 client into an 80x24 / 640x384 canvas -- so the door fractionally downscales every frame and loses single-pixel detail for nothing. That row matters more here than for a landscape console: an upright arcade game is height-bound.

    termgfx has had the DECSSDT seam for this all along, and syncduke, syncdoom, syncconquer and syncscumm all use it; SyncRetro was the one door that never adopted it. Emit termgfx_term_status_off BEFORE the canvas probe so the
    probe reports the reclaimed size -- after it, the door would scale to the
    old canvas and the row would go to waste.

    The sequence is prefixed with a DECRQSS query of the current setting; syncretro_input.c captures the reply (rolling window, since a 10-byte DCS
    can arrive split over a BBS link) so sr_io_leave() restores the player's
    status line to what it WAS rather than guessing. The BBS lent us the
    terminal; a door that hides the sysop's status line and never puts it back
    has broken his client. Falls back to 1 (indicator, SyncTERM's own default)
    if the terminal never answers. Terminals with no status line, or no
    DECSSDT, ignore the whole thing.

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