• Auto-pause no longer works with ANSI output

    From Rob Swindell@VERT to GitLab issue in main/sbbs on Sun Jul 20 14:38:01 2025
    open https://gitlab.synchro.net/main/sbbs/-/issues/953

    Issue was reported by "Dumas Walker" - Capitol City Online BBS, v3.20, the screen is auto-paused before a screen clear following the display of the attached logon.ans file. With Deuce's terminal output abstraction, added in v3.21, the auto-pause no longer happens.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to GitLab note in main/sbbs on Sun Jul 20 14:39:23 2025
    https://gitlab.synchro.net/main/sbbs/-/issues/953#note_7449

    Example problematic ANSI file: [logon.ans](/uploads/0adee1f719de5960244fdda2d83abda4/logon.ans)

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to GitLab note in main/sbbs on Sat Aug 9 11:13:37 2025
    https://gitlab.synchro.net/main/sbbs/-/issues/953#note_7494

    This appears to be due to the line counter being reset by the last non-blank line in that file.

    Since it uses a Cursor Position (CUP) sequence (which sets the row), the line counter gets reset on the assumption that this is an ANSI animation and the line counter should be defeated.

    The old code should have been doing this for CUP as well [here](https://gitlab.synchro.net/main/sbbs/-/blob/sbbs320b/src/sbbs3/putmsg.cpp?ref_type=tags#L387) so it's not completely clear what the exact reproduction case is, possibly it's just due to improved blank line detection?

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to GitLab note in main/sbbs on Sat Aug 9 11:18:06 2025
    https://gitlab.synchro.net/main/sbbs/-/issues/953#note_7495

    As a test, does this modified file (trailing ANSI faffing removed) "fail" under v3.20 as well?

    [logon2.ans](/uploads/8347ae88ef67b8513c1a6263f44fbd85/logon2.ans)

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to GitLab note in main/sbbs on Sat Aug 9 13:35:05 2025
    https://gitlab.synchro.net/main/sbbs/-/issues/953#note_7497

    The logon2.ans you provided does not trigger a screen pause upon screen clear after being displayed in SBBS v3.20.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to GitLab note in main/sbbs on Sat Aug 9 16:07:08 2025
    https://gitlab.synchro.net/main/sbbs/-/issues/953#note_7500

    So yeah, this is working as intended. My guess is that the "\\e\[255D" at the end increased the column so the "\\r\\n" was marked as a non-blank line, so pause wasn't triggered.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to GitLab note in main/sbbs on Sat Aug 9 16:08:27 2025
    https://gitlab.synchro.net/main/sbbs/-/issues/953#note_7501

    If he wants to re-enable the pause, I think that just adding a space before the CR will do that.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to GitLab note in main/sbbs on Mon Aug 11 16:04:50 2025
    https://gitlab.synchro.net/main/sbbs/-/issues/953#note_7522

    Okay, so it was just a unique ANSI file that triggered this difference in behavior between v3.20 and v3.21?

    I seem to recall TheDraw always (or frequently) adding these ESC[255D sequences to ends of saved files. I worry that this won't be that unique of a pattern found in ANSI files saved by TheDraw.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to GitLab note in main/sbbs on Mon Aug 11 17:33:56 2025
    https://gitlab.synchro.net/main/sbbs/-/issues/953#note_7529

    Not "unique" in any way... basically, v3.20 thought something worth pausing for was written after the last CUP sequence and v3.21 knows that is not true.

    There's really two contributing factors here:

    1. The line counter is reset on ANSI animation where "ANSI animation" is defined as "something that moves to a different line".
    2. The line counter does not increment from zero for blank lines where "blank line" was very complicated in v3.20 and is simpler, but still not documented in v3.21.

    The basic difference is that how the cursor is moved around used to result in column being incorrect, but now column is correct, so the result is detected as a blank lines which, at the top of a new screen, do not increment the line counter.

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Accession@VERT/PHARCYDE to Deuce on Tue Aug 12 12:40:35 2025
    Hey Deuc¨!
    On Mon, Aug 11 2025 19:33:56 -0500, you wrote:
    https://gitlab.synchro.net/main/sbbs/-/issues/953#note_7529

    Not "unique" in any way... basically, v3.20 thought something worth
    pausing for was written after the last CUP sequence and v3.21 knows
    that is not true.

    There's really two contributing factors here:

    1. The line counter is reset on ANSI animation where "ANSI
    animation" is defined as "something that moves to a different line".
    2. The line counter does not increment from zero for blank lines
    where "blank line" was very complicated in v3.20 and is simpler, but
    still not documented in v3.21.

    The basic difference is that how the cursor is moved around used to
    result in column being incorrect, but now column is correct, so the
    result is detected as a blank lines which, at the top of a new
    screen, do not increment the line counter.
    Would this have anything to do with the fact that sometime recently (within the past month or two, probably), after scanning for new messages and files, it used to display things like:
    Someone sent you EchoMail on Fidonet TUXPOWER
    Someone sent you EchoMail on Fidonet TUXPOWER
    Another sent you Netmail ...
    <PAUSE>
    .. and now it doesn't pause after these are displayed? Now instead, they flash by on the screen, and then the main menu is displayed.
    I understand that a pause can be added wherever you want, but I figured I'd mention it as there may be some other occurrences where this is happening when it didn't previously.
    Regards,
    Nick
    ... Sarcasm, because beating people up is illegal.
    ---
    þ Synchronet þ _thePharcyde telnet://bbs.pharcyde.org (Wisconsin)
  • From Accession@VERT/PHARCYDE to Accession on Tue Aug 12 12:52:03 2025
    Hey Accession!

    On Tue, Aug 12 2025 12:40:35 -0500, you wrote:

    For the record, my original reply to Deuce had proper spacing between the quoted text, as well as my paragraphs. Probably about time to stop using Thunderbird as a newsreader, as it continues to do wierd shit like that at times. ;(

    Regards,
    Nick

    ... Sarcasm: because beating people up is illegal.
    ---
    þ Synchronet þ _thePharcyde telnet://bbs.pharcyde.org (Wisconsin)
  • From Rob Swindell@VERT to GitLab issue in main/sbbs on Fri Aug 15 12:27:21 2025
    close https://gitlab.synchro.net/main/sbbs/-/issues/953

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to GitLab note in main/sbbs on Fri Aug 15 12:27:21 2025
    https://gitlab.synchro.net/main/sbbs/-/issues/953#note_7536

    The v3.20 code for detecting ANSI animation in a display file (and thus resetting the line counter) was this:
    ```
    /* ansi escape sequence */
    if (outchar_esc >= ansiState_csi) {
    if (str[l] == 'A' || str[l] == 'B' || str[l] == 'H' || str[l] == 'J'
    || str[l] == 'f' || str[l] == 'u') /* ANSI anim */
    lncntr = 0; /* so defeat pause */
    ```

    The new v3.21 code for this is now:

    ```
    if ((!ansiParser.ansi_was_private) && ansiParser.ansi_ibs == "") {
    if (strchr("AFkBEeHfJdu", ansiParser.ansi_final_byte) != nullptr) /* ANSI anim */
    term->lncntr = 0; /* so defeat pause */
    }
    ```
    Which look sufficiently equivalent to me.

    It makes sense that an ESC[255D would move the column counter (at least to the right-most column <= 255, whatever that is). The last displayed line is actually not blank (ends in "SysOp)"), but then there's a cursor reposition with 'H' (triggering the reset logic above in both v3.20 and v3.21), followed by an ESC[A which moves the cursor up one row, then the ESC[255D (moving to the far right column), then CR LF LF.

    So yeah, this is sufficiently convoluted that I do figure it just be an ANSI animation file and thus all bets off with regards to line-counting and auto-pausing. I don't know exactly what was happening in v3.20 (without stepping through its code while displaying this file), but I'm kind of surprised it considered there to be a non-zero line counter before the next screen clear after displaying this file. Could've been unintended behavior in v3.20 as I can imagine a sequence of animated-ANSI files that a sysop might want to send without a [Hit a key] pause prompt appearing between them and the v3.20 behavior couldn't been an unpleasant surprise. The reality is today, most BBSes are used with speeds so fast that the user never actually sees the ANSImation file unless they're artificially throttled.

    So I'm fine to close the issue: SysOp shouldn't save the file as ANSImation (e.g. in TheDraw) if they want Synchronet's auto-pause functionality.

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