mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:10 +00:00
Move the VT100 terminal emulation code into dedicated ui/vt100.c and ui/vt100.h files, completing the extraction from console-vc.c started in the previous patches. This makes the VT100 layer a self-contained module that can be reused independently of the chardev/console infrastructure. The code is moved as-is, with minor coding style fixes (adding missing braces, fixing whitespace) applied during the move. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
96 lines
2.2 KiB
C
96 lines
2.2 KiB
C
/*
|
|
* SPDX-License-Identifier: MIT
|
|
* QEMU vt100
|
|
*/
|
|
#ifndef VT100_H
|
|
#define VT100_H
|
|
|
|
#include "chardev/char.h"
|
|
#include "ui/console.h"
|
|
#include "qemu/fifo8.h"
|
|
#include "qemu/queue.h"
|
|
|
|
typedef struct TextAttributes {
|
|
uint8_t fgcol:4;
|
|
uint8_t bgcol:4;
|
|
uint8_t bold:1;
|
|
uint8_t uline:1;
|
|
uint8_t blink:1;
|
|
uint8_t invers:1;
|
|
uint8_t unvisible:1;
|
|
} TextAttributes;
|
|
|
|
#define TEXT_ATTRIBUTES_DEFAULT ((TextAttributes) { \
|
|
.fgcol = QEMU_COLOR_WHITE, \
|
|
.bgcol = QEMU_COLOR_BLACK \
|
|
})
|
|
|
|
typedef struct TextCell {
|
|
uint8_t ch;
|
|
TextAttributes t_attrib;
|
|
} TextCell;
|
|
|
|
#define MAX_ESC_PARAMS 3
|
|
|
|
enum TTYState {
|
|
TTY_STATE_NORM,
|
|
TTY_STATE_ESC,
|
|
TTY_STATE_CSI,
|
|
TTY_STATE_G0,
|
|
TTY_STATE_G1,
|
|
TTY_STATE_OSC,
|
|
};
|
|
|
|
typedef struct QemuVT100 QemuVT100;
|
|
|
|
struct QemuVT100 {
|
|
pixman_image_t *image;
|
|
void (*image_update)(QemuVT100 *vt, int x, int y, int width, int height);
|
|
|
|
ChardevVCEncoding encoding;
|
|
int width;
|
|
int height;
|
|
int total_height;
|
|
int backscroll_height;
|
|
int x, y;
|
|
int y_displayed;
|
|
int y_base;
|
|
TextCell *cells;
|
|
int text_x[2], text_y[2], cursor_invalidate;
|
|
int echo;
|
|
|
|
int update_x0;
|
|
int update_y0;
|
|
int update_x1;
|
|
int update_y1;
|
|
|
|
enum TTYState state;
|
|
int esc_params[MAX_ESC_PARAMS];
|
|
int nb_esc_params;
|
|
uint32_t utf8_state; /* UTF-8 DFA decoder state */
|
|
uint32_t utf8_codepoint; /* accumulated UTF-8 code point */
|
|
TextAttributes t_attrib; /* currently active text attributes */
|
|
TextAttributes t_attrib_saved;
|
|
int x_saved, y_saved;
|
|
/* fifo for key pressed */
|
|
Fifo8 out_fifo;
|
|
void (*out_flush)(QemuVT100 *vt);
|
|
|
|
QTAILQ_ENTRY(QemuVT100) list;
|
|
};
|
|
|
|
void vt100_init(QemuVT100 *vt,
|
|
pixman_image_t *image,
|
|
ChardevVCEncoding encoding,
|
|
void (*image_update)(QemuVT100 *vt, int x, int y, int width, int height),
|
|
void (*out_flush)(QemuVT100 *vt));
|
|
void vt100_fini(QemuVT100 *vt);
|
|
|
|
void vt100_update_cursor(void);
|
|
size_t vt100_input(QemuVT100 *vt, const uint8_t *buf, size_t len);
|
|
void vt100_keysym(QemuVT100 *vt, int keysym);
|
|
void vt100_set_image(QemuVT100 *vt, pixman_image_t *image);
|
|
void vt100_refresh(QemuVT100 *vt);
|
|
|
|
#endif
|