summaryrefslogtreecommitdiff
path: root/libterm
diff options
context:
space:
mode:
Diffstat (limited to 'libterm')
-rw-r--r--libterm/debug.h69
-rw-r--r--libterm/screen_modes.h15
-rw-r--r--libterm/term.h70
-rw-r--r--libterm/term_gui.h24
-rw-r--r--libterm/term_io.h32
5 files changed, 210 insertions, 0 deletions
diff --git a/libterm/debug.h b/libterm/debug.h
new file mode 100644
index 0000000..a79ea77
--- /dev/null
+++ b/libterm/debug.h
@@ -0,0 +1,69 @@
+#ifndef __LIBTERM_DEBUG_UTILS_H
+#define __LIBTERM_DEBUG_UTILS_H
+
+//what about kprintf?
+
+//config options
+#define PRINTF printf
+#define COLORIZE
+#define PRINT_LINENUM
+#define PRINT_FILENAME
+#define PRINT_DEBUG
+
+
+//use color
+#ifdef COLORIZE
+ #define D_COLOR "1;32m"
+ #define D_COLOR_S "\033[" D_COLOR
+ #define D_COLOR_E "\033[0m"
+ #define E_COLOR "1;31m"
+ #define E_COLOR_S "\033[" E_COLOR
+ #define E_COLOR_E "\033[0m"
+#else
+ #define D_COLOR
+ #define D_COLOR_S
+ #define D_COLOR_E
+ #define E_COLOR
+ #define E_COLOR_S
+ #define E_COLOR_E
+#endif
+
+//print debug line
+#ifdef PRINT_LINENUM
+ #define PRINT_LINE_F "LINE:%d "
+ #define PRINT_LINE_D __LINE__
+#else
+ #define PRINT_LINE_F ""
+ #define PRINT_LINE_D ""
+#endif
+
+//print
+#ifdef PRINT_FILENAME
+ #define PRINT_FILE_F "FILE:%s "
+ #define PRINT_FILE_D __FILE__
+#else
+ #define PRINT_FILE_F ""
+ #define PRINT_FILE_D ""
+#endif
+
+//print debug string
+#ifdef PRINT_DEBUG
+ #define PRINT_DEBUG_F "Debug: "
+#else
+ #define PRINT_DEBUG_F ""
+#endif
+
+#define PRINT( format, args ... ) PRINTF( D_COLOR_S PRINT_DEBUG_F \
+ PRINT_FILE_F PRINT_LINE_F format D_COLOR_E, PRINT_FILE_D, \
+ PRINT_LINE_D, ##args);
+
+#define ERROR( format, args ... ) PRINTF( E_COLOR_S PRINT_DEBUG_F \
+ PRINT_FILE_F PRINT_LINE_F format E_COLOR_E, PRINT_FILE_D, \
+ PRINT_LINE_D, ##args);
+
+#define PNL() PRINT("\n");
+
+#define ENL() ERROR("\n");
+
+
+#endif
diff --git a/libterm/screen_modes.h b/libterm/screen_modes.h
new file mode 100644
index 0000000..261cbf5
--- /dev/null
+++ b/libterm/screen_modes.h
@@ -0,0 +1,15 @@
+#ifndef __LIBTERM_SCREEN_MODES_H
+#define __LIBTERM_SCREEN_MODES_H
+
+typedef enum
+{
+ SCREEN_MODE_NONE=0,
+ SCREEN_MODE_80x25
+} screen_mode_e;
+
+typedef struct term_screen_mode
+{
+ screen_mode_e mode;
+} term_screen_mode;
+
+#endif
diff --git a/libterm/term.h b/libterm/term.h
new file mode 100644
index 0000000..df3d7b1
--- /dev/null
+++ b/libterm/term.h
@@ -0,0 +1,70 @@
+#ifndef __LIBTERM_TERM_H
+#define __LIBTERM_TERM_H
+
+#include <termios.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
+
+#include "screen_modes.h"
+#include "debug.h"
+
+enum TERM_KEY_ACTION {
+ KEY_NULL = 0, /* NULL */
+ CTRL_A = 1, /* Ctrl+a */
+ CTRL_B = 2, /* Ctrl-b */
+ CTRL_C = 3, /* Ctrl-c */
+ CTRL_D = 4, /* Ctrl-d */
+ CTRL_E = 5, /* Ctrl-e */
+ CTRL_F = 6, /* Ctrl-f */
+ CTRL_H = 8, /* Ctrl-h */
+ TAB = 9, /* Tab */
+ CTRL_K = 11, /* Ctrl+k */
+ CTRL_L = 12, /* Ctrl+l */
+ ENTER = 13, /* Enter */
+ CTRL_N = 14, /* Ctrl-n */
+ CTRL_P = 16, /* Ctrl-p */
+ CTRL_T = 20, /* Ctrl-t */
+ CTRL_U = 21, /* Ctrl+u */
+ CTRL_W = 23, /* Ctrl+w */
+ ESC = 27, /* Escape */
+ QMARK = 63, /* ? */
+ BACKSPACE = 127 /* Backspace */
+};
+
+
+#define TK_ENTER 13
+#define TK_ESC 27
+#define TK_BACKSPACE 8
+
+typedef struct term_screen
+{
+ int ifd, ofd;
+ struct termios orig_i, orig_o;
+ struct termios raw_i, raw_o;
+ screen_mode_e mode;
+} term_screen;
+
+int term_init( term_screen *ts );
+int term_set_speed( term_screen *ts, speed_t speed);
+int term_get_maxcol( term_screen *ts );
+int term_get_maxrow( term_screen *ts );
+int term_cur_get_c( term_screen *ts );
+int term_cur_get_r( term_screen *ts );
+int term_cur_set_c( term_screen *ts, unsigned int pc );
+int term_cur_set_r( term_screen *ts, unsigned int pr );
+int term_cur_set_cr( term_screen *ts, unsigned int pc , unsigned int pr );
+int term_clr_scr( term_screen *ts );
+int term_set_raw_mode( term_screen *ts );
+int term_mode_rows( term_screen *ts );
+int term_mode_columns( term_screen *ts );
+void term_set_orig_mode( term_screen *ts );
+
+#endif
diff --git a/libterm/term_gui.h b/libterm/term_gui.h
new file mode 100644
index 0000000..408382e
--- /dev/null
+++ b/libterm/term_gui.h
@@ -0,0 +1,24 @@
+#ifndef __LIBTERM_TERM_GUI_H
+#define __LIBTERM_TERM_GUI_H
+
+#include "term.h"
+#include "term_io.h"
+
+typedef struct term_gui
+{
+ term_screen *ts;
+ int w;
+ int h;
+ int abs_x;
+ int abs_y;
+} term_gui;
+
+int term_gui_init( term_gui *tg, term_screen *ts );
+int term_set_wh( term_screen *tg, int width, int height );
+int term_gui_input_box( term_gui *ts, int x, int y, int w, int h, char *prompt,
+ char *str, size_t sz );
+int term_gui_draw( term_gui *tg );
+int term_gui_destroy( term_gui *tg );
+
+
+#endif \ No newline at end of file
diff --git a/libterm/term_io.h b/libterm/term_io.h
new file mode 100644
index 0000000..48deb67
--- /dev/null
+++ b/libterm/term_io.h
@@ -0,0 +1,32 @@
+#ifndef __LIBTERM_PRINT_UTILS_H
+#define __LIBTERM_PRINT_UTILS_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stdint.h>
+
+#include "screen_modes.h"
+#include "term.h"
+
+#define READLINE_NONE 0 //none
+#define READLINE_ALPHA 1 //isalpsha
+#define READLINE_TEXT 2 //[a-zA-Z0-9] + ispunct
+#define READLINE_HIDDEN 3 //[a-zA-Z]
+#define READLINE_NUMBER 4 //[0-9]
+#define READLINE_SYMBOL 5 //not yet
+#define READLINE_ALPHANUM 6 //not yet
+
+
+int term_fprint( screen_mode_e mode, FILE *f );
+int term_print( term_screen *ts, const char *s, size_t n );
+int term_print_xy( term_screen *ts, const char *buf, size_t size,
+ int init_column, int init_row);
+int term_draw_hline( term_screen *ts, int pc, int pr, int sz, char ch );
+int term_getc( term_screen *ts );
+int64_t term_getb( term_screen *ts );
+int term_putc( term_screen *ts, char c );
+int term_readline( term_screen *ts, char *str, size_t str_size, int flag );
+int term_printf( term_screen *ts, const char *format, ...);
+
+#endif