https://gitlab.synchro.net/main/sbbs/-/commit/a9097117205e8010151f5c49
Modified Files:
src/conio/ciolib.c ciolib.h cterm.adoc cterm.c cterm.h src/syncterm/term.c
Log Message:
Implement ECMA-48 screen content readback via SSA/ESA/STS
Standard ECMA-48 selected area transmission mechanism:
- ESC F (SSA): mark start of selected area
- ESC G (ESA): mark end of selected area (inclusive)
- ESC S (STS): trigger transmission of selected area content
Transmission modes (ANSI SM/RM):
- FETM (mode 14): INSERT=attributed stream with SGR, EXCLUDE=text only
- TTM (mode 16): CURSOR=end before cursor, ALL=full SSA-to-ESA region
- SATM/MATM/GATM permanently locked at recommended reset defaults
Response framed as SOS CTerm:STS:<N>: <content> ST where N=0 (INSERT)
or N=1 (EXCLUDE). Content is linear cell sequence in presentation
order with SGR minimal diffs, doorway encoding for C0/DEL in cells,
and OSC 8 for hyperlink changes.
SSA/ESA invalidated by margin changes, origin mode toggle, and RIS.
Works with origin mode + margins for rectangular area readback.
Also adds:
- response_cb on cterm struct for unbounded response output
- cterm_respond()/cterm_respond_printf() helpers
- ciolib_get_hyperlink_params() API
- DECRQM for ANSI modes 1,14,15,16,17 (discoverability)
- retbuf flush before STS for correct response ordering
- Save/restore response_buf for re-entrant cterm_write
Co-Authored-By: Claude Opus 4.6 (1M context) <
noreply@anthropic.com>
---
■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net