aboutsummaryrefslogtreecommitdiffstats
path: root/tmt.h
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2019-01-30 16:04:57 +0100
committerGerd Hoffmann <kraxel@redhat.com>2019-01-30 16:04:57 +0100
commitc1da53fd1611719b6daee6ab217c9ffaac9dbc00 (patch)
tree892cd0ae40dfb512de6ea0862db355b5ddd8b5d8 /tmt.h
parentac9005bf0bbf50f14dc1b368be5084c8e0510a5d (diff)
downloadfbida-c1da53fd1611719b6daee6ab217c9ffaac9dbc00.tar.gz
add simple, experimental terminal emulator
Diffstat (limited to 'tmt.h')
-rw-r--r--tmt.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/tmt.h b/tmt.h
new file mode 100644
index 0000000..ae0ddbb
--- /dev/null
+++ b/tmt.h
@@ -0,0 +1,140 @@
+/* Copyright (c) 2017 Rob King
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the copyright holder nor the
+ * names of contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS,
+ * COPYRIGHT HOLDERS, OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef TMT_H
+#define TMT_H
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <wchar.h>
+
+/**** INVALID WIDE CHARACTER */
+#ifndef TMT_INVALID_CHAR
+#define TMT_INVALID_CHAR ((wchar_t)0xfffd)
+#endif
+
+/**** INPUT SEQUENCES */
+#define TMT_KEY_UP "\033[A"
+#define TMT_KEY_DOWN "\033[B"
+#define TMT_KEY_RIGHT "\033[C"
+#define TMT_KEY_LEFT "\033[D"
+#define TMT_KEY_HOME "\033[H"
+#define TMT_KEY_END "\033[Y"
+#define TMT_KEY_INSERT "\033[L"
+#define TMT_KEY_BACKSPACE "\x08"
+#define TMT_KEY_ESCAPE "\x1b"
+#define TMT_KEY_BACK_TAB "\033[Z"
+#define TMT_KEY_PAGE_UP "\033[V"
+#define TMT_KEY_PAGE_DOWN "\033[U"
+#define TMT_KEY_F1 "\033OP"
+#define TMT_KEY_F2 "\033OQ"
+#define TMT_KEY_F3 "\033OR"
+#define TMT_KEY_F4 "\033OS"
+#define TMT_KEY_F5 "\033OT"
+#define TMT_KEY_F6 "\033OU"
+#define TMT_KEY_F7 "\033OV"
+#define TMT_KEY_F8 "\033OW"
+#define TMT_KEY_F9 "\033OX"
+#define TMT_KEY_F10 "\033OY"
+
+/**** BASIC DATA STRUCTURES */
+typedef struct TMT TMT;
+
+typedef enum{
+ TMT_COLOR_DEFAULT = -1,
+ TMT_COLOR_BLACK = 1,
+ TMT_COLOR_RED,
+ TMT_COLOR_GREEN,
+ TMT_COLOR_YELLOW,
+ TMT_COLOR_BLUE,
+ TMT_COLOR_MAGENTA,
+ TMT_COLOR_CYAN,
+ TMT_COLOR_WHITE,
+ TMT_COLOR_MAX
+} tmt_color_t;
+
+typedef struct TMTATTRS TMTATTRS;
+struct TMTATTRS{
+ bool bold;
+ bool dim;
+ bool underline;
+ bool blink;
+ bool reverse;
+ bool invisible;
+ tmt_color_t fg;
+ tmt_color_t bg;
+};
+
+typedef struct TMTCHAR TMTCHAR;
+struct TMTCHAR{
+ wchar_t c;
+ TMTATTRS a;
+};
+
+typedef struct TMTPOINT TMTPOINT;
+struct TMTPOINT{
+ size_t r;
+ size_t c;
+};
+
+typedef struct TMTLINE TMTLINE;
+struct TMTLINE{
+ bool dirty;
+ TMTCHAR chars[];
+};
+
+typedef struct TMTSCREEN TMTSCREEN;
+struct TMTSCREEN{
+ size_t nline;
+ size_t ncol;
+
+ TMTLINE **lines;
+};
+
+/**** CALLBACK SUPPORT */
+typedef enum{
+ TMT_MSG_MOVED,
+ TMT_MSG_UPDATE,
+ TMT_MSG_ANSWER,
+ TMT_MSG_BELL,
+ TMT_MSG_CURSOR
+} tmt_msg_t;
+
+typedef void (*TMTCALLBACK)(tmt_msg_t m, struct TMT *v, const void *r, void *p);
+
+/**** PUBLIC FUNCTIONS */
+TMT *tmt_open(size_t nline, size_t ncol, TMTCALLBACK cb, void *p,
+ const wchar_t *acs);
+void tmt_close(TMT *vt);
+bool tmt_resize(TMT *vt, size_t nline, size_t ncol);
+void tmt_write(TMT *vt, const char *s, size_t n);
+const TMTSCREEN *tmt_screen(const TMT *vt);
+const TMTPOINT *tmt_cursor(const TMT *vt);
+void tmt_clean(TMT *vt);
+void tmt_reset(TMT *vt);
+
+#endif