From 8748aa8793480d713e59cade135e1c5b29cf5857 Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Sat, 17 Aug 2013 14:56:04 +0200 Subject: [PATCH] Move all public header information into libtsm.h Avoid splitting all information across different headers. But keep the old headers and add #warning's before including libtsm.h. Signed-off-by: David Herrmann --- src/libtsm.h | 257 +++++++++++++++++++++++++++++++++++++++++++++++++++++- src/tsm_screen.h | 166 +---------------------------------- src/tsm_unicode.h | 61 +------------ src/tsm_vte.h | 55 +----------- 4 files changed, 260 insertions(+), 279 deletions(-) diff --git a/src/libtsm.h b/src/libtsm.h index 9ac5009..b6325ee 100644 --- a/src/libtsm.h +++ b/src/libtsm.h @@ -32,8 +32,259 @@ #ifndef LIBTSM_H #define LIBTSM_H -#include -#include -#include +#include +#include +#include +#include + +/** + * tsm_log_t: + * @data: user-provided data + * @file: Source code file where the log message originated or NULL + * @line: Line number in source code or 0 + * @func: C function name or NULL + * @subs: Subsystem where the message came from or NULL + * @sev: Kernel-style severity between 0=FATAL and 7=DEBUG + * @format: printf-formatted message + * @args: arguments for printf-style @format + * + * This is the type of a logging callback function. You can always pass NULL + * instead of such a function to disable logging. + */ +typedef void (*tsm_log_t) (void *data, + const char *file, + int line, + const char *func, + const char *subs, + unsigned int sev, + const char *format, + va_list args); + +/* UCS4 helpers */ + +#define TSM_UCS4_MAX (0x7fffffffUL) +#define TSM_UCS4_INVALID (TSM_UCS4_MAX + 1) +#define TSM_UCS4_REPLACEMENT (0xfffdUL) +#define TSM_UCS4_MAXLEN 10 + +/* symbols */ + +struct tsm_symbol_table; +typedef uint32_t tsm_symbol_t; + +extern const tsm_symbol_t tsm_symbol_default; + +int tsm_symbol_table_new(struct tsm_symbol_table **out); +void tsm_symbol_table_ref(struct tsm_symbol_table *tbl); +void tsm_symbol_table_unref(struct tsm_symbol_table *tbl); + +tsm_symbol_t tsm_symbol_make(uint32_t ucs4); +tsm_symbol_t tsm_symbol_append(struct tsm_symbol_table *tbl, + tsm_symbol_t sym, uint32_t ucs4); +const uint32_t *tsm_symbol_get(struct tsm_symbol_table *tbl, + tsm_symbol_t *sym, size_t *size); +unsigned int tsm_symbol_get_width(struct tsm_symbol_table *tbl, + tsm_symbol_t sym); + +/* ucs4 to utf8 converter */ + +unsigned int tsm_ucs4_get_width(uint32_t ucs4); +size_t tsm_ucs4_to_utf8(uint32_t ucs4, char *out); +char *tsm_ucs4_to_utf8_alloc(const uint32_t *ucs4, size_t len, size_t *len_out); + +/* utf8 state machine */ + +struct tsm_utf8_mach; + +enum tsm_utf8_mach_state { + TSM_UTF8_START, + TSM_UTF8_ACCEPT, + TSM_UTF8_REJECT, + TSM_UTF8_EXPECT1, + TSM_UTF8_EXPECT2, + TSM_UTF8_EXPECT3, +}; + +int tsm_utf8_mach_new(struct tsm_utf8_mach **out); +void tsm_utf8_mach_free(struct tsm_utf8_mach *mach); + +int tsm_utf8_mach_feed(struct tsm_utf8_mach *mach, char c); +uint32_t tsm_utf8_mach_get(struct tsm_utf8_mach *mach); +void tsm_utf8_mach_reset(struct tsm_utf8_mach *mach); + +/* screen objects */ + +struct tsm_screen; + +#define TSM_SCREEN_INSERT_MODE 0x01 +#define TSM_SCREEN_AUTO_WRAP 0x02 +#define TSM_SCREEN_REL_ORIGIN 0x04 +#define TSM_SCREEN_INVERSE 0x08 +#define TSM_SCREEN_HIDE_CURSOR 0x10 +#define TSM_SCREEN_FIXED_POS 0x20 +#define TSM_SCREEN_ALTERNATE 0x40 + +#define TSM_SCREEN_OPT_RENDER_TIMING 0x01 + +struct tsm_screen_attr { + int8_t fccode; /* foreground color code or <0 for rgb */ + int8_t bccode; /* background color code or <0 for rgb */ + uint8_t fr; /* foreground red */ + uint8_t fg; /* foreground green */ + uint8_t fb; /* foreground blue */ + uint8_t br; /* background red */ + uint8_t bg; /* background green */ + uint8_t bb; /* background blue */ + unsigned int bold : 1; /* bold character */ + unsigned int underline : 1; /* underlined character */ + unsigned int inverse : 1; /* inverse colors */ + unsigned int protect : 1; /* cannot be erased */ +}; + +typedef int (*tsm_screen_prepare_cb) (struct tsm_screen *con, + void *data); +typedef int (*tsm_screen_draw_cb) (struct tsm_screen *con, + uint32_t id, + const uint32_t *ch, + size_t len, + unsigned int width, + unsigned int posx, + unsigned int posy, + const struct tsm_screen_attr *attr, + void *data); +typedef int (*tsm_screen_render_cb) (struct tsm_screen *con, + void *data); + +int tsm_screen_new(struct tsm_screen **out, tsm_log_t log, void *log_data); +void tsm_screen_ref(struct tsm_screen *con); +void tsm_screen_unref(struct tsm_screen *con); + +void tsm_screen_set_opts(struct tsm_screen *scr, unsigned int opts); +void tsm_screen_reset_opts(struct tsm_screen *scr, unsigned int opts); +unsigned int tsm_screen_get_opts(struct tsm_screen *scr); + +unsigned int tsm_screen_get_width(struct tsm_screen *con); +unsigned int tsm_screen_get_height(struct tsm_screen *con); +int tsm_screen_resize(struct tsm_screen *con, unsigned int x, + unsigned int y); +int tsm_screen_set_margins(struct tsm_screen *con, + unsigned int top, unsigned int bottom); +void tsm_screen_set_max_sb(struct tsm_screen *con, unsigned int max); +void tsm_screen_clear_sb(struct tsm_screen *con); + +void tsm_screen_sb_up(struct tsm_screen *con, unsigned int num); +void tsm_screen_sb_down(struct tsm_screen *con, unsigned int num); +void tsm_screen_sb_page_up(struct tsm_screen *con, unsigned int num); +void tsm_screen_sb_page_down(struct tsm_screen *con, unsigned int num); +void tsm_screen_sb_reset(struct tsm_screen *con); + +void tsm_screen_set_def_attr(struct tsm_screen *con, + const struct tsm_screen_attr *attr); +void tsm_screen_reset(struct tsm_screen *con); +void tsm_screen_set_flags(struct tsm_screen *con, unsigned int flags); +void tsm_screen_reset_flags(struct tsm_screen *con, unsigned int flags); +unsigned int tsm_screen_get_flags(struct tsm_screen *con); + +unsigned int tsm_screen_get_cursor_x(struct tsm_screen *con); +unsigned int tsm_screen_get_cursor_y(struct tsm_screen *con); + +void tsm_screen_set_tabstop(struct tsm_screen *con); +void tsm_screen_reset_tabstop(struct tsm_screen *con); +void tsm_screen_reset_all_tabstops(struct tsm_screen *con); + +void tsm_screen_write(struct tsm_screen *con, tsm_symbol_t ch, + const struct tsm_screen_attr *attr); +void tsm_screen_newline(struct tsm_screen *con); +void tsm_screen_scroll_up(struct tsm_screen *con, unsigned int num); +void tsm_screen_scroll_down(struct tsm_screen *con, unsigned int num); +void tsm_screen_move_to(struct tsm_screen *con, unsigned int x, + unsigned int y); +void tsm_screen_move_up(struct tsm_screen *con, unsigned int num, + bool scroll); +void tsm_screen_move_down(struct tsm_screen *con, unsigned int num, + bool scroll); +void tsm_screen_move_left(struct tsm_screen *con, unsigned int num); +void tsm_screen_move_right(struct tsm_screen *con, unsigned int num); +void tsm_screen_move_line_end(struct tsm_screen *con); +void tsm_screen_move_line_home(struct tsm_screen *con); +void tsm_screen_tab_right(struct tsm_screen *con, unsigned int num); +void tsm_screen_tab_left(struct tsm_screen *con, unsigned int num); +void tsm_screen_insert_lines(struct tsm_screen *con, unsigned int num); +void tsm_screen_delete_lines(struct tsm_screen *con, unsigned int num); +void tsm_screen_insert_chars(struct tsm_screen *con, unsigned int num); +void tsm_screen_delete_chars(struct tsm_screen *con, unsigned int num); +void tsm_screen_erase_cursor(struct tsm_screen *con); +void tsm_screen_erase_chars(struct tsm_screen *con, unsigned int num); +void tsm_screen_erase_cursor_to_end(struct tsm_screen *con, + bool protect); +void tsm_screen_erase_home_to_cursor(struct tsm_screen *con, + bool protect); +void tsm_screen_erase_current_line(struct tsm_screen *con, + bool protect); +void tsm_screen_erase_screen_to_cursor(struct tsm_screen *con, + bool protect); +void tsm_screen_erase_cursor_to_screen(struct tsm_screen *con, + bool protect); +void tsm_screen_erase_screen(struct tsm_screen *con, bool protect); + +void tsm_screen_selection_reset(struct tsm_screen *con); +void tsm_screen_selection_start(struct tsm_screen *con, + unsigned int posx, + unsigned int posy); +void tsm_screen_selection_target(struct tsm_screen *con, + unsigned int posx, + unsigned int posy); +int tsm_screen_selection_copy(struct tsm_screen *con, char **out); + +void tsm_screen_draw(struct tsm_screen *con, + tsm_screen_prepare_cb prepare_cb, + tsm_screen_draw_cb draw_cb, + tsm_screen_render_cb render_cb, + void *data); + +/* available character sets */ + +typedef tsm_symbol_t tsm_vte_charset[96]; + +extern tsm_vte_charset tsm_vte_unicode_lower; +extern tsm_vte_charset tsm_vte_unicode_upper; +extern tsm_vte_charset tsm_vte_dec_supplemental_graphics; +extern tsm_vte_charset tsm_vte_dec_special_graphics; + +/* virtual terminal emulator */ + +struct tsm_vte; + +/* keep in sync with shl_xkb_mods */ +enum tsm_vte_modifier { + TSM_SHIFT_MASK = (1 << 0), + TSM_LOCK_MASK = (1 << 1), + TSM_CONTROL_MASK = (1 << 2), + TSM_ALT_MASK = (1 << 3), + TSM_LOGO_MASK = (1 << 4), +}; + +/* keep in sync with TSM_INPUT_INVALID */ +#define TSM_VTE_INVALID 0xffffffff + +typedef void (*tsm_vte_write_cb) (struct tsm_vte *vte, + const char *u8, + size_t len, + void *data); + +int tsm_vte_new(struct tsm_vte **out, struct tsm_screen *con, + tsm_vte_write_cb write_cb, void *data, + tsm_log_t log, void *log_data); +void tsm_vte_ref(struct tsm_vte *vte); +void tsm_vte_unref(struct tsm_vte *vte); + +int tsm_vte_set_palette(struct tsm_vte *vte, const char *palette); + +void tsm_vte_reset(struct tsm_vte *vte); +void tsm_vte_hard_reset(struct tsm_vte *vte); +void tsm_vte_input(struct tsm_vte *vte, const char *u8, size_t len); +bool tsm_vte_handle_keyboard(struct tsm_vte *vte, uint32_t keysym, + uint32_t ascii, unsigned int mods, + uint32_t unicode); #endif /* LIBTSM_H */ diff --git a/src/tsm_screen.h b/src/tsm_screen.h index 0d78286..257935c 100644 --- a/src/tsm_screen.h +++ b/src/tsm_screen.h @@ -23,173 +23,11 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/* - * Screen Management - * This screen does not emulate any terminal at all. This subsystem just - * provides functions to draw a screen to a framebuffer and modifying the state - * of it. - */ - #ifndef TSM_SCREEN_H #define TSM_SCREEN_H -#include -#include -#include -#include -#include "tsm_unicode.h" - -/* screen objects */ - -struct tsm_screen; - -/** - * tsm_log_t: - * @data: user-provided data - * @file: Source code file where the log message originated or NULL - * @line: Line number in source code or 0 - * @func: C function name or NULL - * @subs: Subsystem where the message came from or NULL - * @sev: Kernel-style severity between 0=FATAL and 7=DEBUG - * @format: printf-formatted message - * @args: arguments for printf-style @format - * - * This is the type of a logging callback function. You can always pass NULL - * instead of such a function to disable logging. - */ -typedef void (*tsm_log_t) (void *data, - const char *file, - int line, - const char *func, - const char *subs, - unsigned int sev, - const char *format, - va_list args); - -#define TSM_SCREEN_INSERT_MODE 0x01 -#define TSM_SCREEN_AUTO_WRAP 0x02 -#define TSM_SCREEN_REL_ORIGIN 0x04 -#define TSM_SCREEN_INVERSE 0x08 -#define TSM_SCREEN_HIDE_CURSOR 0x10 -#define TSM_SCREEN_FIXED_POS 0x20 -#define TSM_SCREEN_ALTERNATE 0x40 - -#define TSM_SCREEN_OPT_RENDER_TIMING 0x01 - -struct tsm_screen_attr { - int8_t fccode; /* foreground color code or <0 for rgb */ - int8_t bccode; /* background color code or <0 for rgb */ - uint8_t fr; /* foreground red */ - uint8_t fg; /* foreground green */ - uint8_t fb; /* foreground blue */ - uint8_t br; /* background red */ - uint8_t bg; /* background green */ - uint8_t bb; /* background blue */ - unsigned int bold : 1; /* bold character */ - unsigned int underline : 1; /* underlined character */ - unsigned int inverse : 1; /* inverse colors */ - unsigned int protect : 1; /* cannot be erased */ -}; - -typedef int (*tsm_screen_prepare_cb) (struct tsm_screen *con, - void *data); -typedef int (*tsm_screen_draw_cb) (struct tsm_screen *con, - uint32_t id, - const uint32_t *ch, - size_t len, - unsigned int width, - unsigned int posx, - unsigned int posy, - const struct tsm_screen_attr *attr, - void *data); -typedef int (*tsm_screen_render_cb) (struct tsm_screen *con, - void *data); - -int tsm_screen_new(struct tsm_screen **out, tsm_log_t log, void *log_data); -void tsm_screen_ref(struct tsm_screen *con); -void tsm_screen_unref(struct tsm_screen *con); - -void tsm_screen_set_opts(struct tsm_screen *scr, unsigned int opts); -void tsm_screen_reset_opts(struct tsm_screen *scr, unsigned int opts); -unsigned int tsm_screen_get_opts(struct tsm_screen *scr); - -unsigned int tsm_screen_get_width(struct tsm_screen *con); -unsigned int tsm_screen_get_height(struct tsm_screen *con); -int tsm_screen_resize(struct tsm_screen *con, unsigned int x, - unsigned int y); -int tsm_screen_set_margins(struct tsm_screen *con, - unsigned int top, unsigned int bottom); -void tsm_screen_set_max_sb(struct tsm_screen *con, unsigned int max); -void tsm_screen_clear_sb(struct tsm_screen *con); - -void tsm_screen_sb_up(struct tsm_screen *con, unsigned int num); -void tsm_screen_sb_down(struct tsm_screen *con, unsigned int num); -void tsm_screen_sb_page_up(struct tsm_screen *con, unsigned int num); -void tsm_screen_sb_page_down(struct tsm_screen *con, unsigned int num); -void tsm_screen_sb_reset(struct tsm_screen *con); - -void tsm_screen_set_def_attr(struct tsm_screen *con, - const struct tsm_screen_attr *attr); -void tsm_screen_reset(struct tsm_screen *con); -void tsm_screen_set_flags(struct tsm_screen *con, unsigned int flags); -void tsm_screen_reset_flags(struct tsm_screen *con, unsigned int flags); -unsigned int tsm_screen_get_flags(struct tsm_screen *con); - -unsigned int tsm_screen_get_cursor_x(struct tsm_screen *con); -unsigned int tsm_screen_get_cursor_y(struct tsm_screen *con); - -void tsm_screen_set_tabstop(struct tsm_screen *con); -void tsm_screen_reset_tabstop(struct tsm_screen *con); -void tsm_screen_reset_all_tabstops(struct tsm_screen *con); - -void tsm_screen_write(struct tsm_screen *con, tsm_symbol_t ch, - const struct tsm_screen_attr *attr); -void tsm_screen_newline(struct tsm_screen *con); -void tsm_screen_scroll_up(struct tsm_screen *con, unsigned int num); -void tsm_screen_scroll_down(struct tsm_screen *con, unsigned int num); -void tsm_screen_move_to(struct tsm_screen *con, unsigned int x, - unsigned int y); -void tsm_screen_move_up(struct tsm_screen *con, unsigned int num, - bool scroll); -void tsm_screen_move_down(struct tsm_screen *con, unsigned int num, - bool scroll); -void tsm_screen_move_left(struct tsm_screen *con, unsigned int num); -void tsm_screen_move_right(struct tsm_screen *con, unsigned int num); -void tsm_screen_move_line_end(struct tsm_screen *con); -void tsm_screen_move_line_home(struct tsm_screen *con); -void tsm_screen_tab_right(struct tsm_screen *con, unsigned int num); -void tsm_screen_tab_left(struct tsm_screen *con, unsigned int num); -void tsm_screen_insert_lines(struct tsm_screen *con, unsigned int num); -void tsm_screen_delete_lines(struct tsm_screen *con, unsigned int num); -void tsm_screen_insert_chars(struct tsm_screen *con, unsigned int num); -void tsm_screen_delete_chars(struct tsm_screen *con, unsigned int num); -void tsm_screen_erase_cursor(struct tsm_screen *con); -void tsm_screen_erase_chars(struct tsm_screen *con, unsigned int num); -void tsm_screen_erase_cursor_to_end(struct tsm_screen *con, - bool protect); -void tsm_screen_erase_home_to_cursor(struct tsm_screen *con, - bool protect); -void tsm_screen_erase_current_line(struct tsm_screen *con, - bool protect); -void tsm_screen_erase_screen_to_cursor(struct tsm_screen *con, - bool protect); -void tsm_screen_erase_cursor_to_screen(struct tsm_screen *con, - bool protect); -void tsm_screen_erase_screen(struct tsm_screen *con, bool protect); - -void tsm_screen_selection_reset(struct tsm_screen *con); -void tsm_screen_selection_start(struct tsm_screen *con, - unsigned int posx, - unsigned int posy); -void tsm_screen_selection_target(struct tsm_screen *con, - unsigned int posx, - unsigned int posy); -int tsm_screen_selection_copy(struct tsm_screen *con, char **out); +#warning "Please include libtsm.h directly instead of any sub-headers." -void tsm_screen_draw(struct tsm_screen *con, - tsm_screen_prepare_cb prepare_cb, - tsm_screen_draw_cb draw_cb, - tsm_screen_render_cb render_cb, - void *data); +#include #endif /* TSM_SCREEN_H */ diff --git a/src/tsm_unicode.h b/src/tsm_unicode.h index 3bb8ca4..9d61356 100644 --- a/src/tsm_unicode.h +++ b/src/tsm_unicode.h @@ -23,68 +23,11 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/* - * Unicode Helpers - * This file provides small helpers to make working with Unicode/UTF8/UCS4 input - * and output much easier. - */ - #ifndef TSM_UNICODE_H #define TSM_UNICODE_H -#include -#include - -/* UCS4 helpers */ - -#define TSM_UCS4_MAX (0x7fffffffUL) -#define TSM_UCS4_INVALID (TSM_UCS4_MAX + 1) -#define TSM_UCS4_REPLACEMENT (0xfffdUL) -#define TSM_UCS4_MAXLEN 10 - -/* symbols */ - -struct tsm_symbol_table; -typedef uint32_t tsm_symbol_t; - -extern const tsm_symbol_t tsm_symbol_default; - -int tsm_symbol_table_new(struct tsm_symbol_table **out); -void tsm_symbol_table_ref(struct tsm_symbol_table *tbl); -void tsm_symbol_table_unref(struct tsm_symbol_table *tbl); - -tsm_symbol_t tsm_symbol_make(uint32_t ucs4); -tsm_symbol_t tsm_symbol_append(struct tsm_symbol_table *tbl, - tsm_symbol_t sym, uint32_t ucs4); -const uint32_t *tsm_symbol_get(struct tsm_symbol_table *tbl, - tsm_symbol_t *sym, size_t *size); -unsigned int tsm_symbol_get_width(struct tsm_symbol_table *tbl, - tsm_symbol_t sym); - -/* ucs4 to utf8 converter */ - -unsigned int tsm_ucs4_get_width(uint32_t ucs4); -size_t tsm_ucs4_to_utf8(uint32_t ucs4, char *out); -char *tsm_ucs4_to_utf8_alloc(const uint32_t *ucs4, size_t len, size_t *len_out); - -/* utf8 state machine */ - -struct tsm_utf8_mach; - -enum tsm_utf8_mach_state { - TSM_UTF8_START, - TSM_UTF8_ACCEPT, - TSM_UTF8_REJECT, - TSM_UTF8_EXPECT1, - TSM_UTF8_EXPECT2, - TSM_UTF8_EXPECT3, -}; - -int tsm_utf8_mach_new(struct tsm_utf8_mach **out); -void tsm_utf8_mach_free(struct tsm_utf8_mach *mach); +#warning "Please include libtsm.h directly instead of any sub-headers." -int tsm_utf8_mach_feed(struct tsm_utf8_mach *mach, char c); -uint32_t tsm_utf8_mach_get(struct tsm_utf8_mach *mach); -void tsm_utf8_mach_reset(struct tsm_utf8_mach *mach); +#include #endif /* TSM_UNICODE_H */ diff --git a/src/tsm_vte.h b/src/tsm_vte.h index a8e48d0..3c36aae 100644 --- a/src/tsm_vte.h +++ b/src/tsm_vte.h @@ -23,62 +23,11 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/* - * Virtual Terminal Emulator - * This is a vt100 implementation. It is written from scratch. It uses the - * screen state-machine as output and is tightly bound to it. - */ - #ifndef TSM_VTE_H #define TSM_VTE_H -#include -#include "tsm_screen.h" -#include "tsm_unicode.h" - -/* available character sets */ - -typedef tsm_symbol_t tsm_vte_charset[96]; - -extern tsm_vte_charset tsm_vte_unicode_lower; -extern tsm_vte_charset tsm_vte_unicode_upper; -extern tsm_vte_charset tsm_vte_dec_supplemental_graphics; -extern tsm_vte_charset tsm_vte_dec_special_graphics; - -/* virtual terminal emulator */ - -struct tsm_vte; - -/* keep in sync with shl_xkb_mods */ -enum tsm_vte_modifier { - TSM_SHIFT_MASK = (1 << 0), - TSM_LOCK_MASK = (1 << 1), - TSM_CONTROL_MASK = (1 << 2), - TSM_ALT_MASK = (1 << 3), - TSM_LOGO_MASK = (1 << 4), -}; - -/* keep in sync with TSM_INPUT_INVALID */ -#define TSM_VTE_INVALID 0xffffffff - -typedef void (*tsm_vte_write_cb) (struct tsm_vte *vte, - const char *u8, - size_t len, - void *data); - -int tsm_vte_new(struct tsm_vte **out, struct tsm_screen *con, - tsm_vte_write_cb write_cb, void *data, - tsm_log_t log, void *log_data); -void tsm_vte_ref(struct tsm_vte *vte); -void tsm_vte_unref(struct tsm_vte *vte); - -int tsm_vte_set_palette(struct tsm_vte *vte, const char *palette); +#warning "Please include libtsm.h directly instead of any sub-headers." -void tsm_vte_reset(struct tsm_vte *vte); -void tsm_vte_hard_reset(struct tsm_vte *vte); -void tsm_vte_input(struct tsm_vte *vte, const char *u8, size_t len); -bool tsm_vte_handle_keyboard(struct tsm_vte *vte, uint32_t keysym, - uint32_t ascii, unsigned int mods, - uint32_t unicode); +#include #endif /* TSM_VTE_H */ -- 2.7.4