|
0
|
1 /* See LICENSE for license details. */ |
|
|
2 |
|
|
3 #include <stdint.h> |
|
|
4 #include <sys/types.h> |
|
|
5 |
|
|
6 /* macros */ |
|
|
7 #define MIN(a, b) ((a) < (b) ? (a) : (b)) |
|
|
8 #define MAX(a, b) ((a) < (b) ? (b) : (a)) |
|
|
9 #define LEN(a) (sizeof(a) / sizeof(a)[0]) |
|
|
10 #define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b)) |
|
|
11 #define DIVCEIL(n, d) (((n) + ((d) - 1)) / (d)) |
|
|
12 #define DEFAULT(a, b) (a) = (a) ? (a) : (b) |
|
|
13 #define LIMIT(x, a, b) (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x) |
|
|
14 #define ATTRCMP(a, b) ((a).mode != (b).mode || (a).fg != (b).fg || \ |
|
|
15 (a).bg != (b).bg) |
|
|
16 #define TIMEDIFF(t1, t2) ((t1.tv_sec-t2.tv_sec)*1000 + \ |
|
|
17 (t1.tv_nsec-t2.tv_nsec)/1E6) |
|
|
18 #define MODBIT(x, set, bit) ((set) ? ((x) |= (bit)) : ((x) &= ~(bit))) |
|
|
19 |
|
|
20 #define TRUECOLOR(r,g,b) (1 << 24 | (r) << 16 | (g) << 8 | (b)) |
|
|
21 #define IS_TRUECOL(x) (1 << 24 & (x)) |
|
|
22 |
|
|
23 enum glyph_attribute { |
|
|
24 ATTR_NULL = 0, |
|
|
25 ATTR_BOLD = 1 << 0, |
|
|
26 ATTR_FAINT = 1 << 1, |
|
|
27 ATTR_ITALIC = 1 << 2, |
|
|
28 ATTR_UNDERLINE = 1 << 3, |
|
|
29 ATTR_BLINK = 1 << 4, |
|
|
30 ATTR_REVERSE = 1 << 5, |
|
|
31 ATTR_INVISIBLE = 1 << 6, |
|
|
32 ATTR_STRUCK = 1 << 7, |
|
|
33 ATTR_WRAP = 1 << 8, |
|
|
34 ATTR_WIDE = 1 << 9, |
|
|
35 ATTR_WDUMMY = 1 << 10, |
|
|
36 ATTR_BOLD_FAINT = ATTR_BOLD | ATTR_FAINT, |
|
|
37 }; |
|
|
38 |
|
|
39 enum selection_mode { |
|
|
40 SEL_IDLE = 0, |
|
|
41 SEL_EMPTY = 1, |
|
|
42 SEL_READY = 2 |
|
|
43 }; |
|
|
44 |
|
|
45 enum selection_type { |
|
|
46 SEL_REGULAR = 1, |
|
|
47 SEL_RECTANGULAR = 2 |
|
|
48 }; |
|
|
49 |
|
|
50 enum selection_snap { |
|
|
51 SNAP_WORD = 1, |
|
|
52 SNAP_LINE = 2 |
|
|
53 }; |
|
|
54 |
|
|
55 typedef unsigned char uchar; |
|
|
56 typedef unsigned int uint; |
|
|
57 typedef unsigned long ulong; |
|
|
58 typedef unsigned short ushort; |
|
|
59 |
|
|
60 typedef uint_least32_t Rune; |
|
|
61 |
|
|
62 #define Glyph Glyph_ |
|
|
63 typedef struct { |
|
|
64 Rune u; /* character code */ |
|
|
65 ushort mode; /* attribute flags */ |
|
|
66 uint32_t fg; /* foreground */ |
|
|
67 uint32_t bg; /* background */ |
|
|
68 } Glyph; |
|
|
69 |
|
|
70 typedef Glyph *Line; |
|
|
71 |
|
|
72 typedef union { |
|
|
73 int i; |
|
|
74 uint ui; |
|
|
75 float f; |
|
|
76 const void *v; |
|
|
77 const char *s; |
|
|
78 } Arg; |
|
|
79 |
|
|
80 void die(const char *, ...); |
|
|
81 void redraw(void); |
|
|
82 void draw(void); |
|
|
83 |
|
|
84 void printscreen(const Arg *); |
|
|
85 void printsel(const Arg *); |
|
|
86 void sendbreak(const Arg *); |
|
|
87 void toggleprinter(const Arg *); |
|
|
88 |
|
|
89 int tattrset(int); |
|
|
90 void tnew(int, int); |
|
|
91 void tresize(int, int); |
|
|
92 void tsetdirtattr(int); |
|
|
93 void ttyhangup(void); |
|
|
94 int ttynew(const char *, char *, const char *, char **); |
|
|
95 size_t ttyread(void); |
|
|
96 void ttyresize(int, int); |
|
|
97 void ttywrite(const char *, size_t, int); |
|
|
98 |
|
|
99 void resettitle(void); |
|
|
100 |
|
|
101 void selclear(void); |
|
|
102 void selinit(void); |
|
|
103 void selstart(int, int, int); |
|
|
104 void selextend(int, int, int, int); |
|
|
105 int selected(int, int); |
|
|
106 char *getsel(void); |
|
|
107 |
|
|
108 size_t utf8encode(Rune, char *); |
|
|
109 |
|
|
110 void *xmalloc(size_t); |
|
|
111 void *xrealloc(void *, size_t); |
|
|
112 char *xstrdup(const char *); |
|
|
113 |
|
|
114 /* config.h globals */ |
|
|
115 extern char *utmp; |
|
|
116 extern char *scroll; |
|
|
117 extern char *stty_args; |
|
|
118 extern char *vtiden; |
|
|
119 extern wchar_t *worddelimiters; |
|
|
120 extern int allowaltscreen; |
|
|
121 extern int allowwindowops; |
|
|
122 extern char *termname; |
|
|
123 extern unsigned int tabspaces; |
|
|
124 extern unsigned int defaultfg; |
|
|
125 extern unsigned int defaultbg; |
|
|
126 extern unsigned int defaultcs; |