/* * ansi.h */ #ifndef COM32_LIB_SYS_ANSI_H #define COM32_LIB_SYS_ANSI_H #include <inttypes.h> #include <stdbool.h> #include "vesa/video.h" #define ANSI_MAX_PARMS 16 enum ansi_state { st_init, st_esc, st_csi, st_tbl, st_tblc, }; struct curxy { uint8_t x, y; } __attribute__ ((packed)); struct term_state { enum ansi_state state; int nparms; /* Number of parameters seen */ int parms[ANSI_MAX_PARMS]; bool pvt; /* Private code? */ struct curxy xy; struct curxy saved_xy; attr_t cindex; /* SOH color index */ uint8_t fg; uint8_t bg; uint8_t intensity; bool vtgraphics; /* VT graphics on/off */ bool underline; bool blink; bool reverse; bool autocr; bool autowrap; bool cursor; }; struct ansi_ops { void (*erase) (const struct term_state * st, int x0, int y0, int x1, int y1); void (*write_char) (int x, int y, uint8_t ch, const struct term_state * st); void (*showcursor) (const struct term_state * st); void (*scroll_up) (const struct term_state * st); void (*set_cursor) (int x, int y, bool visible); void (*beep) (void); }; struct term_info { int rows, cols; /* Screen size */ int disabled; struct term_state *ts; const struct ansi_ops *op; }; void __ansi_init(const struct term_info *ti); void __ansi_putchar(const struct term_info *ti, uint8_t ch); void __ansicon_beep(void); #endif /* COM32_LIB_SYS_ANSI_H */