aboutsummaryrefslogtreecommitdiff
path: root/sayeth.h
diff options
context:
space:
mode:
Diffstat (limited to 'sayeth.h')
-rw-r--r--sayeth.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/sayeth.h b/sayeth.h
new file mode 100644
index 0000000..dea73c9
--- /dev/null
+++ b/sayeth.h
@@ -0,0 +1,56 @@
+#ifndef SAYETH_SAYETH_H
+#define SAYETH_SAYETH_H
+#include <stdlib.h>
+
+// Maximum length of input text
+#define INPUT_BUFSIZ 4096
+
+// Maximum length of art data
+#define DATA_BUFSIZ 8192
+
+// Seed global driver array with n records
+#define DRIVERS_ALLOC_DEFAULT 128
+
+struct Driver {
+ char *name; // Driver name (passed to '-d' argument)
+ size_t box_indent; // Shift box n columns to the right
+ char *box_elements; // Border characters
+ // top left, top, top right, sides, bottom left, bottom, bottom right
+ // e.g. "/-\|\-/'
+ /*
+ * /--------\
+ * | |
+ * \--------/
+ */
+ size_t caret_pos; // Above or below the box
+ size_t caret_indent; // Shift caret n columns to the right
+ size_t caret_attached; // Inject a new line *after* art data, or not?
+ char *caret; // Caret characters
+ // e.g. "\n \ |\n \ |\n \|\n"
+ /*
+ * \ |
+ * \ |
+ * \|
+ */
+ size_t data_indent; // Shift art data n columns to the right
+ char *data; // Art data (up to size: DATA_BUFSIZ - 1)
+};
+
+void repchar(char ch, size_t limit);
+size_t get_longest_line(char *s);
+
+struct Driver *driver_load(char *filename);
+struct Driver *driver_lookup(char *name);
+int driver_register(struct Driver *driver);
+void driver_run(struct Driver *driver, char *input);
+void drivers_free(void);
+
+void box_draw_top(size_t y, size_t longest);
+void box_draw_bottom(size_t y, size_t longest);
+void box_draw_next_line(size_t y);
+void box_draw_end_line(size_t longest, size_t len);
+int box_printf(const char *fmt, ...);
+
+void caret_draw(char *data, size_t indent, size_t attached);
+void data_draw(char *data, size_t indent);
+#endif //SAYETH_SAYETH_H