]> git.armaanb.net Git - st.git/blob - st.h
handle tabulation (still not perfect)
[st.git] / st.h
1 /* See LICENSE for licence details. */
2 #define _XOPEN_SOURCE
3 #include <ctype.h>
4 #include <fcntl.h>
5 #include <locale.h>
6 #include <stdarg.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <sys/ioctl.h>
11 #include <sys/select.h>
12 #include <sys/stat.h>
13 #include <sys/types.h>
14 #include <unistd.h>
15 #include <X11/Xlib.h>
16 #include <X11/keysym.h>
17 #include <X11/Xutil.h>
18
19 /* special keys */
20 #define KEYDELETE "\033[3~"
21 #define KEYHOME   "\033[1~"
22 #define KEYEND    "\033[4~"
23 #define KEYPREV   "\033[5~"
24 #define KEYNEXT   "\033[6~"
25
26 #define TNAME "st"
27 #define SHELL "/bin/bash"
28 #define TAB    8
29
30 #define FONT "fixed"
31 #define BORDER 3
32 #define LINESPACE 1 /* additional pixel between each line */
33
34 /* Default colors */
35 #define DefaultFG 7
36 #define DefaultBG 0
37 #define DefaultCS 1
38 #define BellCol   DefaultFG /* visual bell color */
39
40 static char* colorname[] = {
41         "black",
42         "red",
43         "green",
44         "yellow",
45         "blue",
46         "magenta",
47         "cyan",
48         "white",
49 };
50
51 /* Arbitrary sizes */
52 #define ESCSIZ 256
53 #define ESCARG 16
54
55 #define MIN(a, b)  ((a) < (b) ? (a) : (b))
56 #define MAX(a, b)  ((a) < (b) ? (b) : (a))
57 #define LEN(a)     (sizeof(a) / sizeof(a[0]))
58 #define DEFAULT(a, b)     (a) = (a) ? (a) : (b)    
59 #define BETWEEN(x, a, b)  ((a) <= (x) && (x) <= (b))
60 #define LIMIT(x, a, b)    (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x)
61
62
63 enum { ATnone=0 , ATreverse=1 , ATunderline=2, ATbold=4 }; /* Attribute */
64 enum { CSup, CSdown, CSright, CSleft, CShide, CSdraw, CSwrap, CSsave, CSload }; /* Cursor */
65 enum { CRset=1 , CRupdate=2 }; /* Character state */
66 enum { TMwrap=1 , TMinsert=2 }; /* Terminal mode */
67 enum { SCupdate, SCredraw }; /* screen draw mode */
68
69 typedef int Color;
70
71 typedef struct {
72         char c;     /* character code  */
73         char mode;  /* attribute flags */
74         Color fg;   /* foreground      */
75         Color bg;   /* background      */
76         char state; /* state flag      */
77 } Glyph;
78
79 typedef Glyph* Line;
80
81 typedef struct {
82         Glyph attr;  /* current char attributes */
83         char hidden;
84         int x;
85         int y;
86 } TCursor;
87
88 /* Escape sequence structs */
89 typedef struct {
90         char buf[ESCSIZ+1]; /* raw string */
91         int len;            /* raw string length */
92         /* ESC <pre> [[ [<priv>] <arg> [;]] <mode>] */
93         char pre;           
94         char priv;
95         int arg[ESCARG+1];
96         int narg;           /* nb of args */
97         char mode;
98 } Escseq;
99
100 /* Internal representation of the screen */
101 typedef struct {
102         int row;    /* nb row */  
103         int col;    /* nb col */
104         Line* line; /* screen */
105         TCursor c;  /* cursor */
106         int top;    /* top    scroll limit */
107         int bot;    /* bottom scroll limit */
108         int mode;   /* terminal mode */
109 } Term;
110
111 /* Purely graphic info */
112 typedef struct {
113         Display* dis;
114         Window win;
115         int scr;
116         int w;  /* window width  */
117         int h;  /* window height */
118         int ch; /* char height */
119         int cw; /* char width  */
120 } XWindow; 
121
122 /* Drawing Context */
123 typedef struct {
124         unsigned long col[LEN(colorname)];
125         XFontStruct* font;
126         GC gc;
127 } DC;
128
129
130 void die(const char *errstr, ...);
131 void draw(int);
132 void execsh(void);
133 void kpress(XKeyEvent *);
134 void resize(XEvent *);
135 void run(void);
136
137 int escaddc(char);
138 int escfinal(char);
139 void escdump(void);
140 void eschandle(void);
141 void escparse(void);
142 void escreset(void);
143
144 void tclearregion(int, int, int, int);
145 void tcpos(int);
146 void tcursor(int);
147 void tdeletechar(int);
148 void tdeleteline(int);
149 void tdump(void);
150 void tinsertblank(int);
151 void tinsertblankline(int);
152 void tmoveto(int, int);
153 void tnew(int, int);
154 void tnewline(void);
155 void tputc(char);
156 void tputs(char*, int);
157 void tresize(int, int);
158 void tscroll(void);
159 void tsetattr(int*, int);
160 void tsetchar(char);
161 void tsetscroll(int, int);
162
163 void ttynew(void);
164 void ttyread(void);
165 void ttyresize(int, int);
166 void ttywrite(char *, size_t);
167
168 unsigned long xgetcol(const char *);
169 void xclear(int, int, int, int);
170 void xcursor(int);
171 void xdrawc(int, int, Glyph);
172 void xinit(void);
173 void xscroll(void);