#ifndef _VT100_SCREEN_H #define _VT100_SCREEN_H #include #include enum VT100ColorType { VT100_COLOR_DEFAULT, VT100_COLOR_IDX, VT100_COLOR_RGB }; enum VT100MouseReportingModeType { VT100_MOUSEREPORTING_NORMAL, VT100_MOUSEREPORTING_UTF8, VT100_MOUSEREPORTING_SGR }; enum VT100ButtonEventType { VT100_BUTTONEVENT_PRESS, VT100_BUTTONEVENT_RELEASE, VT100_BUTTONEVENT_MOTION }; enum VT100ButtonType { VT100_BUTTON_NONE, VT100_BUTTON_LEFT, VT100_BUTTON_MIDDLE, VT100_BUTTON_RIGHT, VT100_BUTTON_SCROLL_UP, VT100_BUTTON_SCROLL_DOWN }; 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; struct vt100_parser_state *parser_state; char *title; size_t title_len; char *icon_name; size_t icon_name_len; int scrollback_length; struct vt100_cell_attrs attrs; unsigned char mouse_reporting_mode; 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_any_motion: 1; unsigned int bracketed_paste: 1; unsigned int origin_mode: 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_any_motion(VT100Screen *vt); void vt100_screen_reset_mouse_reporting_any_motion(VT100Screen *vt); void vt100_screen_set_mouse_reporting_normal_mode(VT100Screen *vt); void vt100_screen_set_mouse_reporting_utf8_mode(VT100Screen *vt); void vt100_screen_set_mouse_reporting_sgr_mode(VT100Screen *vt); int vt100_screen_mouse_reporting_wants_button_press(VT100Screen *vt); int vt100_screen_mouse_reporting_wants_button_release(VT100Screen *vt); int vt100_screen_mouse_reporting_wants_button_motion(VT100Screen *vt); int vt100_screen_mouse_reporting_wants_any_motion(VT100Screen *vt); void vt100_screen_set_bracketed_paste(VT100Screen *vt); void vt100_screen_reset_bracketed_paste(VT100Screen *vt); void vt100_screen_set_origin_mode(VT100Screen *vt); void vt100_screen_reset_origin_mode(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); int vt100_screen_format_mouse_reporting_response( VT100Screen *vt, char *buf, size_t len, struct vt100_loc loc, int event_type, int button, int shift, int alt, int ctrl); void vt100_screen_cleanup(VT100Screen *vt); void vt100_screen_delete(VT100Screen *vt); #endif