1/*
2 * ansi.h
3 */
4
5#ifndef COM32_LIB_SYS_ANSI_H
6#define COM32_LIB_SYS_ANSI_H
7
8#include <inttypes.h>
9#include <stdbool.h>
10#include "vesa/video.h"
11
12#define ANSI_MAX_PARMS	16
13
14enum ansi_state {
15    st_init,
16    st_esc,
17    st_csi,
18    st_tbl,
19    st_tblc,
20};
21
22struct curxy {
23    uint8_t x, y;
24} __attribute__ ((packed));
25
26struct term_state {
27    enum ansi_state state;
28    int nparms;			/* Number of parameters seen */
29    int parms[ANSI_MAX_PARMS];
30    bool pvt;			/* Private code? */
31    struct curxy xy;
32    struct curxy saved_xy;
33    attr_t cindex;		/* SOH color index */
34    uint8_t fg;
35    uint8_t bg;
36    uint8_t intensity;
37    bool vtgraphics;		/* VT graphics on/off */
38    bool underline;
39    bool blink;
40    bool reverse;
41    bool autocr;
42    bool autowrap;
43    bool cursor;
44};
45
46struct ansi_ops {
47    void (*erase) (const struct term_state * st, int x0, int y0, int x1,
48		   int y1);
49    void (*write_char) (int x, int y, uint8_t ch, const struct term_state * st);
50    void (*showcursor) (const struct term_state * st);
51    void (*scroll_up) (const struct term_state * st);
52    void (*set_cursor) (int x, int y, bool visible);
53    void (*beep) (void);
54};
55
56struct term_info {
57    int rows, cols;		/* Screen size */
58    int disabled;
59    struct term_state *ts;
60    const struct ansi_ops *op;
61};
62
63void __ansi_init(const struct term_info *ti);
64void __ansi_putchar(const struct term_info *ti, uint8_t ch);
65void __ansicon_beep(void);
66
67#endif /* COM32_LIB_SYS_ANSI_H */
68