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 14 enum ansi_state { 15 st_init, 16 st_esc, 17 st_csi, 18 st_tbl, 19 st_tblc, 20 }; 21 22 struct curxy { 23 uint8_t x, y; 24 } __attribute__ ((packed)); 25 26 struct 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 46 struct 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 56 struct term_info { 57 int rows, cols; /* Screen size */ 58 int disabled; 59 struct term_state *ts; 60 const struct ansi_ops *op; 61 }; 62 63 void __ansi_init(const struct term_info *ti); 64 void __ansi_putchar(const struct term_info *ti, uint8_t ch); 65 void __ansicon_beep(void); 66 67 #endif /* COM32_LIB_SYS_ANSI_H */ 68