diff options
author | Anselm R Garbe <garbeam@gmail.com> | 2009-05-10 13:17:09 +0100 |
---|---|---|
committer | Anselm R Garbe <garbeam@gmail.com> | 2009-05-10 13:17:09 +0100 |
commit | c740fb5be8be9f75e1ed69758d05773c96d079ee (patch) | |
tree | dfe3362a600e9491a687cd765158b70d3328333d /st.h | |
parent | ad4256295bb9edc8f33c95db2be6775765ee6314 (diff) | |
download | st-c740fb5be8be9f75e1ed69758d05773c96d079ee.tar.gz st-c740fb5be8be9f75e1ed69758d05773c96d079ee.tar.bz2 |
backport of local changes
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); |