diff options
Diffstat (limited to 'st.h')
| -rw-r--r-- | st.h | 181 | 
1 files changed, 181 insertions, 0 deletions
@@ -0,0 +1,181 @@ +/* See LICENSE for licence details. */ + +#define _XOPEN_SOURCE +#include <ctype.h> +#include <fcntl.h> +#include <locale.h> +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/select.h> +#include <sys/ioctl.h> +#include <X11/Xlib.h> +#include <X11/keysym.h> +#include <X11/Xutil.h> + +/* special keys */ +#define KEYDELETE "\033[3~" +#define KEYHOME   "\033[1~" +#define KEYEND    "\033[4~" +#define KEYPREV   "\033[5~" +#define KEYNEXT   "\033[6~" + +#define TNAME "st" +#define SHELL "/bin/bash" +#define TAB    8 + +#define FONT "-*-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*" +#define BORDER 3 +#define LINESPACE 1 /* additional pixel between each line */ + +/* Default colors */ +#define DefaultFG 7 +#define DefaultBG 0 +#define DefaultCS 1 +#define BellCol   DefaultFG /* visual bell color */ + +static char* colorname[] = { +	"black", +	"red", +	"green", +	"yellow", +	"blue", +	"magenta", +	"cyan", +	"white", +}; + + +/* Arbitrary sizes */ +#define ESCSIZ 256 +#define ESCARG 16 + +#define MIN(a, b)  ((a) < (b) ? (a) : (b)) +#define MAX(a, b)  ((a) < (b) ? (b) : (a)) +#define LEN(a)     (sizeof(a) / sizeof(a[0])) +#define DEFAULT(a, b)     (a) = (a) ? (a) : (b)     +#define BETWEEN(x, a, b)  ((a) <= (x) && (x) <= (b)) +#define LIMIT(x, a, b)    (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x) + + +enum { ATnone=0 , ATreverse=1 , ATunderline=2, ATbold=4 }; /* Attribute */ +enum { CSup, CSdown, CSright, CSleft, CShide, CSdraw, CSwrap, CSsave, CSload }; /* Cursor */ +enum { CRset=1 , CRupdate=2 }; /* Character state */ +enum { TMwrap=1 , TMinsert=2 }; /* Terminal mode */ +enum { SCupdate, SCredraw }; /* screen draw mode */ + +#ifdef TRUECOLOR +#error Truecolor not implemented yet +typedef int Color; +#else +typedef char Color; +#endif + + +typedef struct { +	char c;     /* character code  */ +	char mode;  /* attribute flags */ +	Color fg;   /* foreground      */ +	Color bg;   /* background      */ +	char state; /* state flag      */ +} Glyph; + +typedef Glyph* Line; + +typedef struct { +	Glyph attr;  /* current char attributes */ +	char hidden; +	int x; +	int y; +} TCursor; + +/* Escape sequence structs */ +typedef struct { +	char buf[ESCSIZ+1]; /* raw string */ +	int len;            /* raw string length */ +	/* ESC <pre> [[ [<priv>] <arg> [;]] <mode>] */ +	char pre;            +	char priv; +	int arg[ESCARG+1]; +	int narg;           /* nb of args */ +	char mode; +} Escseq; + +/* Internal representation of the screen */ +typedef struct { +	int row;    /* nb row */   +	int col;    /* nb col */ +	Line* line; /* screen */ +	TCursor c;  /* cursor */ +	int top;    /* top    scroll limit */ +	int bot;    /* bottom scroll limit */ +	int mode;   /* terminal mode */ +} Term; + +/* Purely graphic info */ +typedef struct { +	Display* dis; +	Window win; +	int scr; +	int w;  /* window width  */ +	int h;  /* window height */ +	int ch; /* char height */ +	int cw; /* char width  */ +} XWindow;  + +/* Drawing Context */ +typedef struct { +	unsigned long col[LEN(colorname)]; +	XFontStruct* font; +	GC gc; +} DC; + + +void die(const char *errstr, ...); +void draw(int); +void execsh(void); +void kpress(XKeyEvent *); +void resize(XEvent *); +void run(void); + +int escaddc(char); +int escfinal(char); +void escdump(void); +void eschandle(void); +void escparse(void); +void escreset(void); + +void tclearregion(int, int, int, int); +void tcpos(int); +void tcursor(int); +void tdeletechar(int); +void tdeleteline(int); +void tdump(void); +void tinsertblank(int); +void tinsertblankline(int); +void tmoveto(int, int); +void tnew(int, int); +void tnewline(void); +void tputc(char); +void tputs(char*, int); +void tresize(int, int); +void tscroll(void); +void tsetattr(int*, int); +void tsetchar(char); +void tsetscroll(int, int); + +void ttynew(void); +void ttyread(void); +void ttyresize(int, int); +void ttywrite(char *, size_t); + +unsigned long xgetcol(const char *); +void xclear(int, int, int, int); +void xcursor(int); +void xdrawc(int, int, Glyph); +void xinit(void); +void xscroll(void);  | 
