diff options
author | Přemysl Janouch <p.janouch@gmail.com> | 2014-09-23 01:38:08 +0200 |
---|---|---|
committer | Přemysl Janouch <p.janouch@gmail.com> | 2014-09-23 03:05:01 +0200 |
commit | b630bf7a5f5ec85317db04f770ffc90664ac28f0 (patch) | |
tree | 52a0f40045809e71bc6fcac40d52e570f2fb2b59 /termkey-internal.h | |
parent | 7909067ac05e885211dafa255da0526543bb87bf (diff) | |
download | termo-b630bf7a5f5ec85317db04f770ffc90664ac28f0.tar.gz termo-b630bf7a5f5ec85317db04f770ffc90664ac28f0.tar.xz termo-b630bf7a5f5ec85317db04f770ffc90664ac28f0.zip |
WIP: Is mine now (^3^)
Seriously though, I've got some issues with how this thing is designed,
as well as with its formatting, and when you add the fact that the
original author wants to merge this thing into his bigger library that
also handles terminal output, which I'll kindly leave to ncurses,
it kind of makes sense for me to do this.
Manpages have been removed as they are going to become obsolete and
they're rather difficult to maintain. If anything, there will be
Doxygen-generated documentation.
The plan is to throw away any direct UTF-8 support and support all uni-
and multibyte character encodings. However some unrelated refactoring
is about to come first.
Diffstat (limited to 'termkey-internal.h')
-rw-r--r-- | termkey-internal.h | 156 |
1 files changed, 87 insertions, 69 deletions
diff --git a/termkey-internal.h b/termkey-internal.h index 733f148..cd7e6d7 100644 --- a/termkey-internal.h +++ b/termkey-internal.h @@ -1,94 +1,112 @@ -#ifndef GUARD_TERMKEY_INTERNAL_H_ -#define GUARD_TERMKEY_INTERNAL_H_ +#ifndef TERMKEY_INTERNAL_H +#define TERMKEY_INTERNAL_H #include "termkey.h" #include <stdint.h> #include <termios.h> -struct TermKeyDriver +typedef struct termkey_driver termkey_driver_t; +struct termkey_driver { - const char *name; - void *(*new_driver)(TermKey *tk, const char *term); - void (*free_driver)(void *info); - int (*start_driver)(TermKey *tk, void *info); - int (*stop_driver)(TermKey *tk, void *info); - TermKeyResult (*peekkey)(TermKey *tk, void *info, TermKeyKey *key, int force, size_t *nbytes); + const char *name; + void *(*new_driver) (termkey_t *tk, const char *term); + void (*free_driver) (void *info); + int (*start_driver) (termkey_t *tk, void *info); + int (*stop_driver) (termkey_t *tk, void *info); + termkey_result_t (*peekkey) (termkey_t *tk, + void *info, termkey_key_t *key, int force, size_t *nbytes); }; -struct keyinfo { - TermKeyType type; - TermKeySym sym; - int modifier_mask; - int modifier_set; +typedef struct keyinfo keyinfo_t; +struct keyinfo +{ + termkey_type_t type; + termkey_sym_t sym; + int modifier_mask; + int modifier_set; }; -struct TermKeyDriverNode; -struct TermKeyDriverNode { - struct TermKeyDriver *driver; - void *info; - struct TermKeyDriverNode *next; +typedef struct termkey_driver_node termkey_driver_node_t; +struct termkey_driver_node +{ + termkey_driver_t *driver; + void *info; + termkey_driver_node_t *next; }; -struct TermKey { - int fd; - int flags; - int canonflags; - unsigned char *buffer; - size_t buffstart; // First offset in buffer - size_t buffcount; // NUMBER of entires valid in buffer - size_t buffsize; // Total malloc'ed size - size_t hightide; /* Position beyond buffstart at which peekkey() should next start - * normally 0, but see also termkey_interpret_csi */ - - struct termios restore_termios; - char restore_termios_valid; - - int waittime; // msec - - char is_closed; - char is_started; - - int nkeynames; - const char **keynames; - - // There are 32 C0 codes - struct keyinfo c0[32]; - - struct TermKeyDriverNode *drivers; - - // Now some "protected" methods for the driver to call but which we don't - // want exported as real symbols in the library - struct { - void (*emit_codepoint)(TermKey *tk, long codepoint, TermKeyKey *key); - TermKeyResult (*peekkey_simple)(TermKey *tk, TermKeyKey *key, int force, size_t *nbytes); - TermKeyResult (*peekkey_mouse)(TermKey *tk, TermKeyKey *key, size_t *nbytes); - } method; +struct termkey +{ + int fd; + int flags; + int canonflags; + unsigned char *buffer; + size_t buffstart; // First offset in buffer + size_t buffcount; // NUMBER of entires valid in buffer + size_t buffsize; // Total malloc'ed size + + // Position beyond buffstart at which peekkey() should next start + // normally 0, but see also termkey_interpret_csi(). + size_t hightide; + + struct termios restore_termios; + char restore_termios_valid; + + int waittime; // msec + + char is_closed; + char is_started; + + int nkeynames; + const char **keynames; + + // There are 32 C0 codes + keyinfo_t c0[32]; + + termkey_driver_node_t *drivers; + + // Now some "protected" methods for the driver to call but which we don't + // want exported as real symbols in the library + struct + { + void (*emit_codepoint) (termkey_t *tk, + long codepoint, termkey_key_t *key); + termkey_result_t (*peekkey_simple) (termkey_t *tk, + termkey_key_t *key, int force, size_t *nbytes); + termkey_result_t (*peekkey_mouse) (termkey_t *tk, + termkey_key_t *key, size_t *nbytes); + } + method; }; -static inline void termkey_key_get_linecol(const TermKeyKey *key, int *line, int *col) +static inline void +termkey_key_get_linecol (const termkey_key_t *key, int *line, int *col) { - if(col) - *col = (unsigned char)key->code.mouse[1] | ((unsigned char)key->code.mouse[3] & 0x0f) << 8; + if (col) + *col = (unsigned char) key->code.mouse[1] + | ((unsigned char) key->code.mouse[3] & 0x0f) << 8; - if(line) - *line = (unsigned char)key->code.mouse[2] | ((unsigned char)key->code.mouse[3] & 0x70) << 4; + if (line) + *line = (unsigned char) key->code.mouse[2] + | ((unsigned char) key->code.mouse[3] & 0x70) << 4; } -static inline void termkey_key_set_linecol(TermKeyKey *key, int line, int col) +static inline void +termkey_key_set_linecol (termkey_key_t *key, int line, int col) { - if(line > 0xfff) - line = 0xfff; + if (line > 0xfff) + line = 0xfff; - if(col > 0x7ff) - col = 0x7ff; + if (col > 0x7ff) + col = 0x7ff; - key->code.mouse[1] = (line & 0x0ff); - key->code.mouse[2] = (col & 0x0ff); - key->code.mouse[3] = (line & 0xf00) >> 8 | (col & 0x300) >> 4; + key->code.mouse[1] = (line & 0x0ff); + key->code.mouse[2] = (col & 0x0ff); + key->code.mouse[3] = (line & 0xf00) >> 8 | (col & 0x300) >> 4; } -extern struct TermKeyDriver termkey_driver_csi; -extern struct TermKeyDriver termkey_driver_ti; +extern termkey_driver_t termkey_driver_csi; +extern termkey_driver_t termkey_driver_ti; + +#endif // ! TERMKEY_INTERNAL_H -#endif |