summaryrefslogtreecommitdiffstats
path: root/tmux.h
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2007-09-28 22:47:22 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2007-09-28 22:47:22 +0000
commitaafee17de62d21f5cd5ced9a798a89c39bb8a70a (patch)
tree0f883f4683c033ae13e57ac8caf22d024b2d9c40 /tmux.h
parentd2e035f892ac8b21889e0124157a9be4f94462d3 (diff)
New input parser via state machine.
Diffstat (limited to 'tmux.h')
-rw-r--r--tmux.h77
1 files changed, 72 insertions, 5 deletions
diff --git a/tmux.h b/tmux.h
index 9f01ae5c..a4173985 100644
--- a/tmux.h
+++ b/tmux.h
@@ -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 **);