• src/sbbs3/ansi_terminal.cpp ansi_terminal.h con_out.cpp terminal.h

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Fri Nov 13 20:36:22 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/1635fb18e653ea4338efa893
    Modified Files:
    src/sbbs3/ansi_terminal.cpp ansi_terminal.h con_out.cpp terminal.h
    Log Message:
    Send the ANSI music terminator raw on UTF-8 connections

    ANSI music is CSI M, N or | followed by note characters and ended by SO
    (0x0E). On a UTF-8 terminal, cp437_out() translated every byte through cp437_unicode_tbl[], which maps 0x0E to U+266B (beamed eighth notes), so
    the terminal never saw the terminator and silently discarded the tune.

    ANSI_Terminal now tracks when output is inside a music string: it starts
    on CSI N, CSI |, or CSI M without parameters (with parameters, CSI M is
    Delete Line), continues through the music alphabet, and ends on SO or on
    any other byte. While a string is open, SO is sent untranslated; outside
    one, 0x0E still renders as the CP437 glyph. The note characters no longer advance the tracked column, and a completed music string is removed from
    the saved line so restoreline() doesn't replay the tune.

    Fixes #1344

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

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