char rbuf[BUFSIZ];
char ebuf[BUFSIZ];
int rlen, elen;
+ madtty_handler_t handler;
};
typedef struct t_row_t {
static void try_interpret_escape_seq(madtty_t *t)
{
char lastchar = t->ebuf[t->elen-1];
-
+ if(!*t->ebuf)
+ return;
+ if(t->handler){
+ switch((*(t->handler))(t, t->ebuf)){
+ case MADTTY_HANDLER_OK:
+ goto cancel;
+ case MADTTY_HANDLER_NOTYET:
+ return;
+ }
+ }
switch (*t->ebuf) {
- case '\0':
- return;
-
case 'M':
interpret_csi_SR(t);
cancel_escape_sequence(t);
bg = COLOR_BLACK;
return COLOR_PAIR((7 - fg) * 8 + bg);
}
+
+void madtty_set_handler(madtty_t *t, madtty_handler_t handler)
+{
+ t->handler = handler;
+}
#include <unistd.h>
#include <wchar.h>
+enum {
+ /* means escape sequence was handled */
+ MADTTY_HANDLER_OK,
+ /* means the escape sequence was not recognized yet, but
+ * there is hope that it still will once more characters
+ * arrive (i.e. it is not yet complete).
+ *
+ * The library will thus continue collecting characters
+ * and calling the handler as each character arrives until
+ * either OK or NOWAY is returned.
+ */
+ MADTTY_HANDLER_NOTYET,
+ /* means the escape sequence was not recognized, and there
+ * is no chance that it will even if more characters are
+ * added to it.
+ */
+ MADTTY_HANDLER_NOWAY
+};
+
typedef struct madtty_t madtty_t;
+typedef int (*madtty_handler_t)(madtty_t *, char *es);
void madtty_init_colors(void);
void madtty_init_vt100_graphics(void);
-
+void madtty_set_handler(madtty_t *, madtty_handler_t);
int madtty_color_pair(int fg, int bg);
madtty_t *madtty_create(int rows, int cols);