diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2007-09-28 22:47:22 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2007-09-28 22:47:22 +0000 |
commit | aafee17de62d21f5cd5ced9a798a89c39bb8a70a (patch) | |
tree | 0f883f4683c033ae13e57ac8caf22d024b2d9c40 /tmux.h | |
parent | d2e035f892ac8b21889e0124157a9be4f94462d3 (diff) |
New input parser via state machine.
Diffstat (limited to 'tmux.h')
-rw-r--r-- | tmux.h | 77 |
1 files changed, 72 insertions, 5 deletions
@@ -1,4 +1,4 @@ -/* $Id: tmux.h,v 1.20 2007-09-28 21:41:52 mxey Exp $ */ +/* $Id: tmux.h,v 1.21 2007-09-28 22:47:21 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -391,6 +391,50 @@ struct screen { int mode; }; +/* Screen default contents. */ +#define SCREEN_DEFDATA ' ' +#define SCREEN_DEFATTR 0 +#define SCREEN_DEFCOLR 0x88 + +/* Input parser sequence argument. */ +struct input_arg { + size_t off; + size_t len; +}; + +/* Input character classes. */ +enum input_class { + INPUT_C0CONTROL, + INPUT_SPACE, + INPUT_INTERMEDIATE, + INPUT_PARAMETER, + INPUT_UPPERCASE, + INPUT_LOWERCASE, + INPUT_DELETE, + INPUT_C1CONTROL, + INPUT_G1DISPLAYABLE, + INPUT_SPECIAL +}; + +/* Input parser context. */ +struct input_ctx { + u_char *buf; + size_t len; + size_t off; + + struct buffer *b; + struct screen *s; + + void *(*state)(u_char, enum input_class, struct input_ctx *); + + size_t intoff; + size_t intlen; + + size_t saved; + u_char private; + ARRAY_DECL(, struct input_arg) args; +}; + /* Window structure. */ struct window { char name[MAXNAMELEN]; @@ -401,6 +445,8 @@ struct window { u_int references; + struct input_ctx ictx; + struct screen screen; }; ARRAY_DECL(windows, struct window *); @@ -492,8 +538,9 @@ void server_window_changed(struct client *); void server_draw_client(struct client *, u_int, u_int); /* input.c */ -void input_key(struct buffer *, int); -size_t input_parse(u_char *, size_t, struct buffer *, struct screen *); +void input_init(struct input_ctx *, struct screen *); +void input_free(struct input_ctx *); +size_t input_parse(struct input_ctx *, u_char *, size_t, struct buffer *); uint8_t input_extract8(struct buffer *); uint16_t input_extract16(struct buffer *); void input_store8(struct buffer *, uint8_t); @@ -502,12 +549,32 @@ void input_store_zero(struct buffer *, u_char); void input_store_one(struct buffer *, u_char, uint16_t); void input_store_two(struct buffer *, u_char, uint16_t, uint16_t); +/* input-key.c */ +void input_translate_key(struct buffer *, int); + /* screen.c */ void screen_create(struct screen *, u_int, u_int); void screen_resize(struct screen *, u_int, u_int); void screen_draw(struct screen *, struct buffer *, u_int, u_int); -void screen_character(struct screen *, u_char); -void screen_sequence(struct screen *, u_char *); +void screen_write_character(struct screen *, u_char); +void screen_insert_lines(struct screen *, u_int, u_int); +void screen_delete_lines(struct screen *, u_int, u_int); +void screen_insert_characters(struct screen *, u_int, u_int, u_int); +void screen_delete_characters(struct screen *, u_int, u_int, u_int); +void screen_cursor_up_scroll(struct screen *); +void screen_cursor_down_scroll(struct screen *); +void screen_scroll_region_up(struct screen *); +void screen_scroll_region_down(struct screen *); +void screen_scroll_up(struct screen *, u_int); +void screen_scroll_down(struct screen *, u_int); +void screen_fill_screen(struct screen *, u_char, u_char, u_char); +void screen_fill_line(struct screen *, u_int, u_char, u_char, u_char); +void screen_fill_end_of_screen( + struct screen *, u_int, u_int, u_char, u_char, u_char); +void screen_fill_end_of_line( + struct screen *, u_int, u_int, u_char, u_char, u_char); +void screen_fill_start_of_line( + struct screen *, u_int, u_int, u_char, u_char, u_char); /* local.c */ int local_init(struct buffer **, struct buffer **); |