#ifndef _VT100_SCREEN_H #define _VT100_SCREEN_H #include #include enum VT100ColorType { VT100_COLOR_DEFAULT, VT100_COLOR_IDX, VT100_COLOR_RGB }; struct vt100_loc { int row; int col; }; struct vt100_color { union { struct { union { struct { unsigned char r; unsigned char g; unsigned char b; }; unsigned char idx; }; unsigned char type; }; uint32_t id; }; }; struct vt100_cell_attrs { struct vt100_color fgcolor; struct vt100_color bgcolor; union { struct { unsigned int bold: 1; unsigned int italic: 1; unsigned int underline: 1; unsigned int inverse: 1; }; unsigned char attrs; }; }; struct vt100_cell { char contents[8]; size_t len; struct vt100_cell_attrs attrs; unsigned int is_wide: 1; }; struct vt100_row { struct vt100_cell *cells; unsigned int wrapped: 1; }; struct vt100_grid { struct vt100_loc cur; struct vt100_loc max; struct vt100_loc saved; int scroll_top; int scroll_bottom; int row_count; int row_capacity; int row_top; struct vt100_row *rows; }; struct vt100_parser_state; struct vt100_screen { struct vt100_grid *grid; struct vt100_grid *alternate; char *title; size_t title_len; char *icon_name; size_t icon_name_len; struct vt100_cell_attrs attrs; int scrollback_length; struct vt100_parser_state *parser_state; unsigned int hide_cursor: 1; unsigned int application_keypad: 1; unsigned int application_cursor: 1; unsigned int mouse_reporting_press: 1; unsigned int mouse_reporting_press_release: 1; unsigned int mouse_reporting_button_motion: 1; unsigned int mouse_reporting_sgr_mode: 1; unsigned int bracketed_paste: 1; unsigned int visual_bell: 1; unsigned int audible_bell: 1; unsigned int update_title: 1; unsigned int update_icon_name: 1; unsigned int dirty: 1; unsigned int custom_scrollback_length: 1; }; VT100Screen *vt100_screen_new(int rows, int cols); void vt100_screen_init(VT100Screen *vt); void vt100_screen_set_window_size(VT100Screen *vt, int rows, int cols); void vt100_screen_set_scrollback_length(VT100Screen *vt, int rows); int vt100_screen_process_string(VT100Screen *vt, char *buf, size_t len); void vt100_screen_get_string_plaintext( VT100Screen *vt, struct vt100_loc *start, struct vt100_loc *end, char **strp, size_t *lenp); void vt100_screen_get_string_formatted( VT100Screen *vt, struct vt100_loc *start, struct vt100_loc *end, char **strp, size_t *lenp); struct vt100_cell *vt100_screen_cell_at(VT100Screen *vt, int row, int col); void vt100_screen_audible_bell(VT100Screen *vt); void vt100_screen_visual_bell(VT100Screen *vt); void vt100_screen_show_string_ascii(VT100Screen *vt, char *buf, size_t len); void vt100_screen_show_string_utf8(VT100Screen *vt, char *buf, size_t len); void vt100_screen_move_to(VT100Screen *vt, int row, int col); void vt100_screen_clear_screen(VT100Screen *vt); void vt100_screen_clear_screen_forward(VT100Screen *vt); void vt100_screen_clear_screen_backward(VT100Screen *vt); void vt100_screen_kill_line(VT100Screen *vt); void vt100_screen_kill_line_forward(VT100Screen *vt); void vt100_screen_kill_line_backward(VT100Screen *vt); void vt100_screen_insert_characters(VT100Screen *vt, int count); void vt100_screen_insert_lines(VT100Screen *vt, int count); void vt100_screen_delete_characters(VT100Screen *vt, int count); void vt100_screen_delete_lines(VT100Screen *vt, int count); void vt100_screen_erase_characters(VT100Screen *vt, int count); void vt100_screen_scroll_down(VT100Screen *vt, int count); void vt100_screen_scroll_up(VT100Screen *vt, int count); void vt100_screen_move_down_or_scroll(VT100Screen *vt); void vt100_screen_move_up_or_scroll(VT100Screen *vt); void vt100_screen_set_scroll_region( VT100Screen *vt, int top, int bottom, int left, int right); void vt100_screen_reset_text_attributes(VT100Screen *vt); void vt100_screen_set_fg_color(VT100Screen *vt, int idx); void vt100_screen_set_fg_color_rgb( VT100Screen *vt, unsigned char r, unsigned char g, unsigned char b); void vt100_screen_reset_fg_color(VT100Screen *vt); void vt100_screen_set_bg_color(VT100Screen *vt, int idx); void vt100_screen_set_bg_color_rgb( VT100Screen *vt, unsigned char r, unsigned char g, unsigned char b); void vt100_screen_reset_bg_color(VT100Screen *vt); void vt100_screen_set_bold(VT100Screen *vt); void vt100_screen_set_italic(VT100Screen *vt); void vt100_screen_set_underline(VT100Screen *vt); void vt100_screen_set_inverse(VT100Screen *vt); void vt100_screen_reset_bold(VT100Screen *vt); void vt100_screen_reset_italic(VT100Screen *vt); void vt100_screen_reset_underline(VT100Screen *vt); void vt100_screen_reset_inverse(VT100Screen *vt); void vt100_screen_use_alternate_buffer(VT100Screen *vt); void vt100_screen_use_normal_buffer(VT100Screen *vt); void vt100_screen_save_cursor(VT100Screen *vt); void vt100_screen_restore_cursor(VT100Screen *vt); void vt100_screen_show_cursor(VT100Screen *vt); void vt100_screen_hide_cursor(VT100Screen *vt); void vt100_screen_set_application_keypad(VT100Screen *vt); void vt100_screen_reset_application_keypad(VT100Screen *vt); void vt100_screen_set_application_cursor(VT100Screen *vt); void vt100_screen_reset_application_cursor(VT100Screen *vt); void vt100_screen_set_mouse_reporting_press(VT100Screen *vt); void vt100_screen_reset_mouse_reporting_press(VT100Screen *vt); void vt100_screen_set_mouse_reporting_press_release(VT100Screen *vt); void vt100_screen_reset_mouse_reporting_press_release(VT100Screen *vt); void vt100_screen_set_mouse_reporting_button_motion(VT100Screen *vt); void vt100_screen_reset_mouse_reporting_button_motion(VT100Screen *vt); void vt100_screen_set_mouse_reporting_sgr_mode(VT100Screen *vt); void vt100_screen_reset_mouse_reporting_sgr_mode(VT100Screen *vt); void vt100_screen_set_bracketed_paste(VT100Screen *vt); void vt100_screen_reset_bracketed_paste(VT100Screen *vt); void vt100_screen_set_window_title(VT100Screen *vt, char *buf, size_t len); void vt100_screen_set_icon_name(VT100Screen *vt, char *buf, size_t len); int vt100_screen_row_max_col(VT100Screen *vt, int row); void vt100_screen_cleanup(VT100Screen *vt); void vt100_screen_delete(VT100Screen *vt); #endif