• src/doors/syncduke/syncduke.h syncduke_io.c syncduke_node.c

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Wed Jul 1 23:24:33 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/1a3f9d5049b422d6aa1f18d9
    Modified Files:
    src/doors/syncduke/syncduke.h syncduke_io.c syncduke_node.c
    Log Message:
    syncduke: cross-tier who's-online/message banner overlay

    Adds the banner overlay mechanism (Task 2 of the node-features plan): syncduke_node.c gains banner state (g_ov rows + expiry + change signature)
    and syncduke_node_overlay_sig()/syncduke_node_draw(), a top-strip painted
    via syncduke_out_put over sixel/JXL/text tiers alike and auto-clearing on expiry. present() (syncduke_io.c) folds the banner signature into its
    frame de-dupe so a banner-only change is never skipped, forces a repaint (syncduke_have_last=0 + rt_invalidate()) when the banner changes, and
    draws the banner after each frame emit.

    Exposes syncduke_clock_ms() (syncduke_io.c) as a non-static accessor for
    the same monotonic ms clock present()/pacing already use, so the banner's expiry timer shares that exact clock domain rather than a second, merely similar copy (syncduke_in_now_ms() in syncduke_input.c is static and a
    separate instance).

    The banner is currently unused (Tasks 3/4 wire Ctrl-U and incoming
    messages as producers); a temporary self-test call was build-verified
    then removed before this commit.

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

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