From d58dd3b8bc42ed31232e4145696d7dacb117a31c Mon Sep 17 00:00:00 2001 From: Anselm R Garbe Date: Sun, 10 May 2009 13:17:09 +0100 Subject: backport of local changes --- st.h | 181 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 st.h (limited to 'st.h') diff --git a/st.h b/st.h new file mode 100644 index 0000000..be39ef4 --- /dev/null +++ b/st.h @@ -0,0 +1,181 @@ +/* See LICENSE for licence details. */ + +#define _XOPEN_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* 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
 [[ []  [;]] ] */
+	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);
-- 
cgit v1.2.3-13-gbd6f