small fix
[apps/madtty.git] / madtty / madtty.h
index 25da678..2defa71 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>
+#include <wchar.h>
 
 #define MAX_CSI_ES_PARAMS 32
 #define ESEQ_BUF_SIZE     128  /* size of escape sequence buffer */
 
+typedef struct mtty_row_t {
+    wchar_t  *text;
+    uint16_t *attr;
+} mtty_row_t;
+
 /* Represents each of the text cells in the terminal screen */
 typedef struct {
     char s[4];
     char len;
-    attr_t attrs;
+    int16_t attrs;
 } RoteCell;
 
 typedef struct {
@@ -50,16 +56,22 @@ typedef struct {
 
     /* geometry */
     int rows, cols;
-    int scrolltop, scrollbottom;
-    RoteCell **cells;
+
+    mtty_row_t *lines;
+    mtty_row_t *scroll_top;
+    mtty_row_t *scroll_bot;
 
     /* cursor */
-    attr_t curattrs;
-    int curs_row, curs_col;
+    unsigned curattrs;
+    mtty_row_t *curs_row;
+    int curs_col;
     int curs_srow, curs_scol;
 
+    /* buffers and parsing state */
+    mbstate_t ps;
+    char rbuf[BUFSIZ];
     char esbuf[ESEQ_BUF_SIZE];
-    int  esbuf_len;
+    int  rbuf_len, esbuf_len;
 } madtty_t;
 
 void madtty_initialize(void);
@@ -68,12 +80,9 @@ 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);
+int madtty_process(madtty_t *rt);
+void madtty_keypress(madtty_t *rt, int keycode);
 void madtty_draw(madtty_t *rt, WINDOW *win, int startrow, int startcol);
 
-void madtty_keypress(madtty_t *rt, int keycode);
 
 #endif /* MADTTY_MADTTY_H */