Add the possibility to register custom escape sequence handlers.
[apps/madtty.git] / madtty / madtty.h
index 25da678..0a1e451 100644 (file)
 #ifndef MADTTY_MADTTY_H
 #define MADTTY_MADTTY_H
 
-#include <ncursesw/curses.h>
+#include <ncurses.h>
 #include <stdbool.h>
 #include <stdint.h>
 #include <stdlib.h>
 #include <sys/types.h>
 #include <unistd.h>
-
-#define MAX_CSI_ES_PARAMS 32
-#define ESEQ_BUF_SIZE     128  /* size of escape sequence buffer */
-
-/* Represents each of the text cells in the terminal screen */
-typedef struct {
-    char s[4];
-    char len;
-    attr_t attrs;
-} RoteCell;
-
-typedef struct {
-    int   pty;
-    pid_t childpid;
-
-    /* flags */
-    unsigned insert    : 1;
-    unsigned escaped   : 1;
-    unsigned graphmode : 1;
-
-    /* geometry */
-    int rows, cols;
-    int scrolltop, scrollbottom;
-    RoteCell **cells;
-
-    /* cursor */
-    attr_t curattrs;
-    int curs_row, curs_col;
-    int curs_srow, curs_scol;
-
-    char esbuf[ESEQ_BUF_SIZE];
-    int  esbuf_len;
-} madtty_t;
-
-void madtty_initialize(void);
+#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);
-void madtty_destroy(madtty_t *rt);
-pid_t madtty_forkpty(madtty_t *rt, const char *path, const char *argv[]);
-
-int madtty_read(madtty_t *rt, char *buf, int buflen);
-int madtty_write(madtty_t *rt, const char *data, int length);
-
-int madtty_inject(madtty_t *rt, const char *data, int length);
-void madtty_draw(madtty_t *rt, WINDOW *win, int startrow, int startcol);
-
-void madtty_keypress(madtty_t *rt, int keycode);
+void madtty_resize(madtty_t *, int rows, int cols);
+void madtty_destroy(madtty_t *);
+pid_t madtty_forkpty(madtty_t *, const char *, const char *argv[], int *pty);
+int madtty_getpty(madtty_t *);
+
+int madtty_process(madtty_t *);
+void madtty_keypress(madtty_t *, int keycode);
+void madtty_draw(madtty_t *, WINDOW *win, int startrow, int startcol);
 
 #endif /* MADTTY_MADTTY_H */