Move the VT100 input processing logic out of vc_chr_write() into a new vt100_input() function that operates on QemuVT100 directly, rather than going through the Chardev/VCChardev layers. This continues the effort to decouple the VT100 emulation from the chardev backend, making the VT100 layer self-contained and reusable.
vc_chr_write() becomes a thin wrapper that extracts the QemuVT100 from the chardev and delegates to vt100_input(). Signed-off-by: Marc-André Lureau <[email protected]> --- ui/console-vc.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/ui/console-vc.c b/ui/console-vc.c index 87881c072ee..3ef492c2d4c 100644 --- a/ui/console-vc.c +++ b/ui/console-vc.c @@ -1058,29 +1058,35 @@ static void vt100_putchar(QemuVT100 *vt, int ch) DECLARE_INSTANCE_CHECKER(VCChardev, VC_CHARDEV, TYPE_CHARDEV_VC) -static int vc_chr_write(Chardev *chr, const uint8_t *buf, int len) +static int vt100_input(QemuVT100 *vt, const uint8_t *buf, int len) { - VCChardev *drv = VC_CHARDEV(chr); - QemuTextConsole *s = drv->console; int i; - s->vt.update_x0 = s->vt.width * FONT_WIDTH; - s->vt.update_y0 = s->vt.height * FONT_HEIGHT; - s->vt.update_x1 = 0; - s->vt.update_y1 = 0; - vt100_show_cursor(&s->vt, 0); + vt->update_x0 = vt->width * FONT_WIDTH; + vt->update_y0 = vt->height * FONT_HEIGHT; + vt->update_x1 = 0; + vt->update_y1 = 0; + vt100_show_cursor(vt, 0); for(i = 0; i < len; i++) { - vt100_putchar(&s->vt, buf[i]); + vt100_putchar(vt, buf[i]); } - vt100_show_cursor(&s->vt, 1); - if (s->vt.update_x0 < s->vt.update_x1) { - vt100_image_update(&s->vt, s->vt.update_x0, s->vt.update_y0, - s->vt.update_x1 - s->vt.update_x0, - s->vt.update_y1 - s->vt.update_y0); + vt100_show_cursor(vt, 1); + if (vt->update_x0 < vt->update_x1) { + vt100_image_update(vt, vt->update_x0, vt->update_y0, + vt->update_x1 - vt->update_x0, + vt->update_y1 - vt->update_y0); } return len; } +static int vc_chr_write(Chardev *chr, const uint8_t *buf, int len) +{ + VCChardev *drv = VC_CHARDEV(chr); + QemuTextConsole *s = drv->console; + + return vt100_input(&s->vt, buf, len); +} + void vt100_update_cursor(void) { QemuVT100 *vt; -- 2.53.0
