• src/doors/syncdoom/syncdoom.c

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Saturday, June 20, 2026 14:04:41
    https://gitlab.synchro.net/main/sbbs/-/commit/4820eaed990ac607d5ece6da
    Modified Files:
    src/doors/syncdoom/syncdoom.c
    Log Message:
    syncdoom: anchor the sixel image at top-left when terminal pixels are unknown

    Sixel is positioned by text cell, but the image is sized in pixels; on a terminal
    that doesn't report its real cell-pixel size (e.g. xterm with allowWindowOps off)
    the door assumed 16px-tall cells, so the "centered" row landed too low and the frame looked bottom-anchored. When real geometry is unknown, anchor the sixel at
    row 1, col 1 -- predictable, and what a user expects. JXL/PPM (SyncTERM, real geometry) still center via the APC DX/DY offsets.

    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

    ---
    þ 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 Saturday, June 20, 2026 14:04:41
    https://gitlab.synchro.net/main/sbbs/-/commit/b4c533c170213b49b9820604
    Modified Files:
    src/doors/syncdoom/syncdoom.c
    Log Message:
    syncdoom: cap the text-tier render grid on oversized terminals

    A maximized terminal can measure huge (e.g. 561x105); the text tier then renders
    the full grid -- ~330 KB per frame, 1.5+ MB/s -- which floods the link and trips
    the dead-client watchdog, so the door looks like it auto-terminates. Beyond Doom's own detail the extra cells add only bytes, so cap the text grid to [video] text_max_cols x text_max_rows (default 200x80; 0 = uncapped). Invisible for normal terminals; it only bounds the maximized case.

    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

    ---
    þ 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 Monday, August 17, 2026 02:35:26
    https://gitlab.synchro.net/main/sbbs/-/commit/92c2fd33bdff650976b48e11
    Modified Files:
    src/doors/syncdoom/syncdoom.c
    Log Message:
    syncdoom: on a tty, VMIN=0 makes "no input" indistinguishable from EOF

    The *nix stdio path put the terminal in raw mode with VMIN=0/VTIME=0 and
    relied on O_NONBLOCK to report an empty read as -1/EAGAIN. A tty does not
    work that way: with VMIN and VTIME both zero the read timeout is zero, and
    the kernel returns 0 before it ever consults O_NONBLOCK. conn_read() maps 0
    to EOF, so the first input pump with nobody mid-keystroke set g_hangup and
    the door exited with status 0 on its very first frame -- immediately after "ST_Init: Init status bar.", and with no diagnostic.

    VMIN=1 restores the distinction conn_read() depends on: -1/EAGAIN when no
    byte is waiting, 0 only when the client really has gone. O_NONBLOCK is what keeps the read from blocking.

    This left stdio mode unusable on every *nix host, whether the door was
    started from a shell or handed its stdio by a BBS. The path had only ever
    been exercised over pipes, where tcgetattr() fails, the termios block is skipped, and 0 does mean EOF. A BBS gives a stdio door a pty, so the door applied VMIN=0 there as well -- overriding, under Synchronet's XTRN_STDIO,
    the cfmakeraw() the BBS had just done.

    Socket doors are unaffected: raw_input_on() returns early on one.

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