Xinqi Bao's Git
1 /* See LICENSE for licence details. */
10 #include <sys/ioctl.h>
11 #include <sys/select.h>
13 #include <sys/types.h>
16 #include <X11/keysym.h>
17 #include <X11/Xutil.h>
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~"
27 #define SHELL "/bin/bash"
32 #define LINESPACE 1 /* additional pixel between each line */
38 #define BellCol DefaultFG /* visual bell color */
40 static char* colorname
[] = {
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)
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 */
72 char c
; /* character code */
73 char mode
; /* attribute flags */
74 Color fg
; /* foreground */
75 Color bg
; /* background */
76 char state
; /* state flag */
82 Glyph attr
; /* current char attributes */
88 /* Escape sequence structs */
90 char buf
[ESCSIZ
+1]; /* raw string */
91 int len
; /* raw string length */
92 /* ESC <pre> [[ [<priv>] <arg> [;]] <mode>] */
96 int narg
; /* nb of args */
100 /* Internal representation of the screen */
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 */
111 /* Purely graphic info */
116 int w
; /* window width */
117 int h
; /* window height */
118 int ch
; /* char height */
119 int cw
; /* char width */
122 /* Drawing Context */
124 unsigned long col
[LEN(colorname
)];
130 void die(const char *errstr
, ...);
133 void kpress(XKeyEvent
*);
134 void resize(XEvent
*);
140 void eschandle(void);
144 void tclearregion(int, int, int, int);
147 void tdeletechar(int);
148 void tdeleteline(int);
150 void tinsertblank(int);
151 void tinsertblankline(int);
152 void tmoveto(int, int);
156 void tputs(char*, int);
157 void tresize(int, int);
159 void tsetattr(int*, int);
161 void tsetscroll(int, int);
165 void ttyresize(int, int);
166 void ttywrite(char *, size_t);
168 unsigned long xgetcol(const char *);
169 void xclear(int, int, int, int);
171 void xdrawc(int, int, Glyph
);