xref: /plan9/sys/src/cmd/abaco/dat.h (revision 7ab27030036b6c877a6f81728daeda263d1ca3cf)
1 typedef	struct	Box Box;
2 typedef	struct	Cimage Cimage;
3 typedef	struct	Column Column;
4 typedef	struct	Exec Exec;
5 typedef	struct	Line Line;
6 typedef	struct	Page Page;
7 typedef	struct	Row Row;
8 typedef	struct	Runestr Runestr;
9 typedef	struct	Text	Text;
10 typedef	struct	Timer Timer;
11 typedef	struct	Url Url;
12 typedef	struct	Window Window;
13 
14 struct Runestr
15 {
16 	Rune	*r;
17 	int	nr;
18 };
19 
20 enum
21 {
22 	Rowtag,
23 	Columntag,
24 	Tag,
25 	Urltag,
26 	Statustag,
27 	Entry,
28 	Textarea,
29 };
30 
31 struct Text
32 {
33 	Frame;
34 	uint		org;
35 	uint		q0;
36 	uint		q1;
37 	int		what;
38 	Window	*w;
39 	Rectangle scrollr;
40 	Rectangle lastsr;
41 	Rectangle all;
42 	Row		*row;
43 	Column	*col;
44 	Runestr	rs;
45 };
46 
47 uint		textbacknl(Text*, uint, uint);
48 int		textbswidth(Text*, Rune);
49 int		textclickmatch(Text*, int, int, int, uint*);
50 void		textclose(Text*);
51 void		textdelete(Text*, uint, uint);
52 void		textdoubleclick(Text*, uint*, uint*);
53 void		textfill(Text*);
54 void		textframescroll(Text*, int);
55 void		textinit(Text *, Image *, Rectangle, Font *, Image **);
56 void		textinsert(Text*, uint, Rune*, uint);
57 void		textredraw(Text *, Rectangle, Font *, Image *);
58 int		textresize(Text *, Image *, Rectangle);
59 void		textscrdraw(Text*);
60 void		textscroll(Text*, int);
61 void		textselect(Text*);
62 int		textselect2(Text *, uint *, uint *, Text **);
63 int		textselect3(Text *, uint *, uint *);
64 void		textset(Text *, Rune *, int);
65 void		textsetorigin(Text*, uint, int);
66 void		textsetselect(Text*, uint, uint);
67 void		textshow(Text*, uint, uint, int);
68 void		texttype(Text*, Rune);
69 void		textmouse(Text *, Point, int);
70 
71 struct Line
72 {
73 	Rectangle	r;
74 	int		state;
75 	int		hastext;
76 	int		hastable;
77 	Box		*boxes;
78 	Box		*lastbox;
79 	Line		*prev;
80 	Line		*next;
81 };
82 
83 struct Box
84 {
85 	Item 	*i;
86 	Rectangle	 r;
87 
88 	void		(*draw)(Box *, Page *, Image *);
89 	void		(*mouse)(Box *, Page *, int);
90 	void		(*key)(Box *, Page *, Rune);
91 	Box		*prev;
92 	Box		*next;
93 };
94 
95 Box*		boxalloc(Line *, Item *, Rectangle);
96 void		boxinit(Box *);
97 
98 struct Lay
99 {
100 	Rectangle	r;
101 	int		width;
102 	int		xwall;
103 	Line		*lines;
104 	Line		*lastline;
105 	Font		*font;
106 	Ifloat	*floats;
107 	int		laying;
108 };
109 
110 void		laypage(Page *p);
111 Lay*		layitems(Item *, Rectangle, int);
112 void		laydraw(Page *, Image *, Lay *);
113 void		layfree(Lay *);
114 
115 struct Cimage
116 {
117 		Ref;
118 	Image	*i;
119 	Memimage *mi;
120 	Url		*url;
121 	Cimage	*next;
122 };
123 
124 struct Url
125 {
126 		Ref;			/* urls in window.url[] are not freed */
127 	int		id;
128 	int		method;	/* HGet or HPost */
129 	Runestr	src;		/* requested url */
130 	Runestr	act;		/* actual url (redirection) */
131 	Runestr	post;		/* only set if method==HPost */
132 	Runestr	ctype;	/* content type */
133 };
134 
135 Url*		urlalloc(Runestr *, Runestr *, int);
136 void		urlfree(Url *);
137 Url*		urldup(Url *);
138 int		urlopen(Url *);
139 
140 struct Page
141 {
142 	Url		*url;
143 	Runestr	title;
144 	Window	*w;
145 	Image	*b;
146 
147 	Rectangle	r;
148 	Rectangle all;
149 	Rectangle	vscrollr;
150 	Rectangle	hscrollr;
151 	Row		*row;
152 	Column	*col;
153 
154 	Docinfo	*doc;
155 	Kidinfo	*kidinfo;
156 	Item		*items;
157 	Lay		*lay;
158 	Point		pos;
159 
160 	int		selecting;
161 	Point		top, bot;
162 	Box		*topbx, *botbx;
163 
164 	int		aborting;
165 	int		changed;
166 	int		loading;
167 
168 	Rune		*status;
169 
170 	Page		*parent;
171 	Page		*child;
172 	Page		*next;
173 
174 	Cimage 	**cimage;
175 	int		ncimage;
176 
177 	struct{
178 		long	t;
179 		Runestr rs;
180 	}refresh;
181 };
182 
183 void		pageget(Page *, Runestr *, Runestr *, int, int);
184 void		pageload(Page *, Url *, int);
185 void		pageclose(Page *);
186 void		pageredraw(Page *);
187 void		pagerender(Page *);
188 void		pagemouse(Page *, Point, int);
189 void		pagetype(Page *, Rune, Point);
190 void		pagescrldraw(Page *);
191 void		pagescroll(Page *, int, int);
192 int		pagescrollxy(Page *, int, int);
193 int		pageabort(Page *);
194 void		pagesnarf(Page *);
195 void		pagesetrefresh(Page *);
196 int		pagerefresh(Page *);
197 
198 struct Window
199 {
200 		Ref;
201 		QLock;
202 	Text		tag;
203 	Text		url;
204 	Page		page;
205 	Text		status;
206 	int		owner;
207 	int		inpage;
208 	Rectangle	r;
209 	Column	*col;
210 	struct{
211 		Url	**url;
212 		int	nurl;
213 		int	cid;
214 	}history;
215 };
216 
217 void		wininit(Window *, Window *, Rectangle);
218 int		winclean(Window *, int);
219 void		winclose(Window *);
220 int		winresize(Window *, Rectangle, int);
221 Text*	wintext(Window *, Point);
222 void		winlock(Window *, int);
223 void		winunlock(Window *);
224 void		winaddhist(Window *, Url *);
225 void		wingohist(Window *, int);
226 void		winsettag(Window *);
227 void		winseturl(Window *);
228 void		winsetstatus(Window *w, Rune *);
229 Text*	wintype(Window *, Point, Rune);
230 Text*	winmouse(Window *, Point, int);
231 void		winmousebut(Window *);
232 void		windebug(Window *);
233 
234 struct Column
235 {
236 	Rectangle r;
237 	Text	tag;
238 	Row		*row;
239 	Window	**w;
240 	int		nw;
241 	int		safe;
242 };
243 
244 void		colinit(Column*, Rectangle);
245 Window*	coladd(Column*, Window*, Window*, int);
246 void		colclose(Column*, Window*, int);
247 void		colcloseall(Column*);
248 void		colresize(Column*, Rectangle);
249 Text*	colwhich(Column*, Point, Rune, int);
250 void		coldragwin(Column*, Window*, int);
251 void		colgrow(Column*, Window*, int);
252 int		colclean(Column*);
253 void		colsort(Column*);
254 void		colmousebut(Column*);
255 
256 struct Row
257 {
258 	QLock;
259 	Rectangle r;
260 	Text	tag;
261 	Column	**col;
262 	int		ncol;
263 
264 };
265 
266 void		rowinit(Row*, Rectangle);
267 Column*	rowadd(Row*, Column *c, int);
268 void		rowclose(Row*, Column*, int);
269 Text*	rowwhich(Row*, Point, Rune, int);
270 Column*	rowwhichcol(Row*, Point);
271 void		rowresize(Row*, Rectangle);
272 void		rowdragcol(Row*, Column*, int but);
273 
274 struct Exec
275 {
276 	char		*cmd;
277 	int		p[2];		/* p[1] is write to program; p[0] set to prog fd 0*/
278 	int		q[2];		/* q[0] is read from program; q[1] set to prog fd 1 */
279 	Channel	*sync;	/* chan(ulong) */
280 };
281 
282 struct Timer
283 {
284 	int		dt;
285 	int		cancel;
286 	Channel	*c;		/* chan(int) */
287 	Timer	*next;
288 };
289 
290 enum
291 {
292 	Scrollsize	=	12,
293 	Scrollgap	=	4,
294 	Margin =		4,
295 	Border =		2,
296 	Space  =		2,
297 	Tabspace =	30,
298 	Boxsize =		12,
299 	WFont =		FntR*NumSize+Tiny,
300 
301 	Panspeed = 	4,
302 	Maxtab =		8,
303 
304 	BUFSIZE =		1024*8,
305 	RBUFSIZE =	BUFSIZE/sizeof(Rune),
306 	STACK =		64*1024,
307 };
308 
309 enum
310 {
311 	FALSE,
312 	TRUE,
313 	XXX,
314 };
315 
316 enum
317 {
318 	Light = 0xEEEEEE,
319 	Dark = 0x666666,
320 	Red = 0xBB0000,
321 	Back = 0xCCCCCC,
322 };
323 
324 Mouse		*mouse;
325 Mousectl		*mousectl;
326 Keyboardctl	*keyboardctl;
327 Image		*tagcols[NCOL];
328 Image		*textcols[NCOL];
329 Image		*but2col;
330 Image		*but3col;
331 Image		*button;
332 Image		*colbutton;
333 Font			*passfont;
334 Cursor		boxcursor;
335 Row			row;
336 Text			*argtext;
337 Text			*seltext;
338 Text			*typetext;
339 Page			*selpage;
340 Column		*activecol;
341 char			*webmountpt;
342 int			plumbsendfd;
343 int			webctlfd;
344 char			*charset;
345 int			procstderr;
346 
347 enum
348 {
349 	Kscrolloneup		= KF|0x20,
350 	Kscrollonedown	= KF|0x21,
351 };
352 
353 Channel		*cplumb;		/* chan(Plumbmsg*) */
354 Channel		*cexit;		/* chan(int) */
355 Channel		*crefresh;		/* chan(page *) */
356