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