Menu ▾ ▴

#294 DECRQSS `*r` reports speed 0 when emulation came from the BBS list entry

1.10
open
None
X11
1.10a
2026-09-22
2026-09-22
No

Output speed emulation set via the BBS list entry's BPS Rate is not reflected
in the DECSCS status string. A host that queries gets "unlimited" while every
byte is being paced.

Repro (no BBS needed):

printf '\033P$q*r\033\\' | nc -l 2323

Connect to localhost:2323 with the entry's BPS Rate set to 2400.

expected:  ESC P 1 $ r ; 4 * r ESC \
actual:    ESC P 1 $ r ; 0 * r ESC \

Control: with BPS Rate 0, have the host send CSI ; 4 * r before the query.
The response is then ;4*r, so the query path itself is fine.

doterm() loads the entry rate into its own speed local (term.c,
speed = bbs->bpsrate) and the byte pump gates on that. cterm->decscs_speed
is initialized to 0 (cterm.c) and written only by cterm_handle_decscs()
(cterm_cterm.c), which runs only for a host-sent DECSCS. The DECRQSS handler
(cterm_dec.c) derives its response from decscs_speed alone.

Consequence: a host cannot tell that emulation is active, so it cannot lift the
throttle around a bulk transfer or warn the user.

Discussion

Anonymous
Anonymous

Add attachments
Cancel