__                 _ _                _
  / _| ___   ___   __| | |__   __ _ _ __| | __
 | |_ / _ \ / _ \ / _` | '_ \ / _` | '__| |/ /
 |  _| (_) | (_) | (_| | |_) | (_| | |  |   <
 |_|  \___/ \___/ \__,_|_.__/ \__,_|_|  |_|\_\

A personal BBS  ·  Missoula, Montana  ·  formerly NaClCON BBS

Connect from your terminal: telnet naclconbbs.net 23  |  ssh naclconbbs.net -p 2222

  • src/sbbs3/ansi_parser_test.cpp ansi_terminal.cpp ansi_terminal.h con_o

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Thu Sep 24 21:22:49 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/12d817c0b81a049f4434b5bf
    Modified Files:
    src/sbbs3/ansi_parser_test.cpp ansi_terminal.cpp ansi_terminal.h con_out.cpp terminal.h
    Log Message:
    Keep whole control strings out of the line buffer

    restoreline() replays the line buffer to redraw a line after, for
    example, a node message interrupts it. The line buffer already skipped
    the body of a DCS/OSC/PM/APC string, but kept its "ESC _" introducer and
    the final byte of its terminator. Replaying those opens a string the
    terminal never sees closed, so it swallows all following output: an
    @SOUND: in a prompt, followed by an incoming node message, was enough.

    term_out() now records where each sequence begins in the line buffer and
    rolls the buffer back to that point when a sequence completes, or breaks, having been a control string. CSI sequences are left in place, so
    restoreline() still restores colors.

    ansi_parser_test.cpp pins the parser states this depends on.

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

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