aboutsummaryrefslogtreecommitdiff
path: root/sys/cmd/term/term.h
blob: 62c407fade2a96bd72128491afc793b760c8c124 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
/* See LICENSE for license details. */
#pragma once

#include <u.h>
#include <libn.h>

#include <errno.h>
#include <signal.h>
#include <sys/ioctl.h>
#include <sys/select.h>
#include <sys/types.h>
#include <sys/wait.h>

// -----------------------------------------------------------------------
// macros

#define BETWEEN(x, a, b)	((a) <= (x) && (x) <= (b))
#define DIVCEIL(n, d)		(((n) + ((d) - 1)) / (d))
#define DEFAULT(a, b)		(a) = (a) ? (a) : (b)
#define LIMIT(x, a, b)		(x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x)
#define GLYPHCMP(a, b)		((a).mode != (b).mode || (a).fg != (b).fg || \
				(a).bg != (b).bg)
#define TIMEDIFF(t1, t2)	((t1.tv_sec-t2.tv_sec)*1000 + \
				(t1.tv_nsec-t2.tv_nsec)/1E6)
#define MODBIT(x, set, bit)	((set) ? ((x) |= (bit)) : ((x) &= ~(bit)))

#define TRUECOLOR(r,g,b)	(1 << 24 | (r) << 16 | (g) << 8 | (b))
#define IS_TRUECOL(x)		(1 << 24 & (x))

#define iota(x) 1 << (x)

// -----------------------------------------------------------------------
// constants 

enum {
	Gnil,
	Gbold      = iota(0),
	Gfaint     = iota(1),
	Gitalic    = iota(2),
	Gunline    = iota(3),
	Gblink     = iota(4),
	Greverse   = iota(5),
	Ginvisible = iota(6),
	Gstruck    = iota(7),
	Gwrap      = iota(8),
	Gwide      = iota(9),
	Gwdummy    = iota(10),
	Gboldfaint = Gbold | Gfaint,
};

enum {
	SelIdle  = 0,
	SelEmpty = 1,
	SelReady = 2
};

enum {
	SelRegular     = 1,
	SelRectangular = 2
};

enum {
	SnapWord = 1,
	SnapLine = 2
};

enum win_mode {
	Wvisible     = 1 << 0,
	Wfocused     = 1 << 1,
	Wappkeypad   = 1 << 2,
	Wmousebtn    = 1 << 3,
	Wmousemotion = 1 << 4,
	Wreverse     = 1 << 5,
	Wkbdblock    = 1 << 6,
	Whide        = 1 << 7,
	Wappcursor   = 1 << 8,
	Wmousesgr    = 1 << 9,
	W8bit        = 1 << 10,
	Wblink       = 1 << 11,
	Wbflink      = 1 << 12,
	Wfocus       = 1 << 13,
	Wmousex10    = 1 << 14,
	Wmousemany   = 1 << 15,
	Wbrcktpaste  = 1 << 16,
	Wnumlock     = 1 << 17,
	Wmouse       = Wmousebtn|Wmousemotion|Wmousex10|Wmousemany,
};


// -----------------------------------------------------------------------
// types
typedef struct Letter Letter;

struct Letter {
	rune u;           /* character code */
	ushort mode;      /* attribute flags */
	uint32_t fg;      /* foreground  */
	uint32_t bg;      /* background  */
};

typedef Letter *Line;

typedef union {
	int i;
	uint ui;
	float f;
	 void *v;
	 char *s;
} Arg;

void xbell(void);
void xclipcopy(void);
void xdrawcursor(int, int, Letter, int, int, Letter);
void xdrawline(Line, int, int, int);
void xfinishdraw(void);
void xloadcols(void);
int  xsetcolorname(int, char *);
void xsettitle(char *);
int  xsetcursor(int);
void xsetmode(int, uint);
void xsetpointermotion(int);
void xsetsel(char *);
int  xstartdraw(void);
void xximspot(int, int);

void die( char *, ...);
void redraw(void);
void draw(void);

void printscreen(Arg *);
void printsel(Arg *);
void sendbreak(Arg *);
void toggleprinter(Arg *);

int tattrset(int);
void tnew(int, int);
void tresize(int, int);
void tsetdirtattr(int);
void ttyhangup(void);
int ttynew(char *, char *, char *, char **);
size_t ttyread(void);
void ttyresize(int, int);
void ttywrite( char *, size_t, int);

void resettitle(void);

void selclear(void);
void selinit(void);
void selstart(int, int, int);
void selextend(int, int, int, int);
int selected(int, int);
char *getsel(void);

void *xmalloc(size_t);
void *xrealloc(void *, size_t);
char *xstrdup(char *);

/* config.h globals */
extern char         *utmp;
extern char         *scroll;
extern char         *stty_args;
extern char         *vtiden;
extern wchar_t      *worddelimiters;
extern int          allowaltscreen;
extern int          allowwindowops;
extern char         *termname;
extern unsigned int tabspaces;
extern unsigned int defaultfg;
extern unsigned int defaultbg;