https://gitlab.synchro.net/main/sbbs/-/commit/17dad6930d25c946b9cc999d
Modified Files:
src/doors/syncconquer/door/door_io.c src/doors/termgfx/term.c term.h Log Message:
syncconquer: don't trust xterm's text-area size as a sixel ceiling
Both C&C titles rendered an all-black screen in a MAXIMIZED xterm (sixel
mode) while a small xterm window and Foot played fine. Cause: xterm
discards a sixel whose declared raster exceeds its maxGraphicSize
(~1000x1000) whole rather than clipping it, and door_calc_rect() was
trusting the terminal's exact pixel canvas (ESC[14t) as the sixel
ceiling whenever it was reported -- but xterm's ESC[14t answer is its
big TEXT-AREA size (~1900px maximized), not its graphics ceiling. So the
door emitted a 1833x1146 sixel that xterm dropped entirely. The later click-to-see-buttons was the dirty-rect path emitting small (<1000)
partial sixels that squeaked under the ceiling. (SyncDuke/SyncDOOM clamp
to the safe ceiling unless XTSMGRAPHICS is reported and never had this; syncconquer alone trusted the exact canvas, to fill WT/Foot windows.)
Identify xterm via XTVERSION and resolve the sixel ceiling in precedence
order: a reported XTSMGRAPHICS ceiling, else an exact canvas ONLY when
not xterm (Windows Terminal / Foot / SyncTERM render well past 1000px),
else the safe ~1000px floor. xterm now clamps to 1000x625 and renders;
other terminals keep their full window size. The negotiated geometry log
line and Ctrl-S stats gain an xterm marker.
Adds termgfx_term_parse_xtversion() to the shared termgfx/term.{c,h} -- a rolling-window raw scan of the XTVERSION reply (DCS >|<name>(<ver>) ST),
a sibling of termgfx_term_parse_status() -- so the doors that roll their
own terminal I/O can identify xterm. This ports into syncconquer's
private terminal-I/O copy the fix the shared termgfx_termio.c already
carries.
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net