xref: /plan9/sys/src/cmd/acme/dat.h (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier enum
2*219b2ee8SDavid du Colombier {
3*219b2ee8SDavid du Colombier 	Qdir,
4*219b2ee8SDavid du Colombier 	Qacme,
5*219b2ee8SDavid du Colombier 	Qcons,
6*219b2ee8SDavid du Colombier 	Qconsctl,
7*219b2ee8SDavid du Colombier 	Qindex,
8*219b2ee8SDavid du Colombier 	Qlabel,
9*219b2ee8SDavid du Colombier 	Qnew,
10*219b2ee8SDavid du Colombier 
11*219b2ee8SDavid du Colombier 	QWaddr,
12*219b2ee8SDavid du Colombier 	QWbody,
13*219b2ee8SDavid du Colombier 	QWctl,
14*219b2ee8SDavid du Colombier 	QWdata,
15*219b2ee8SDavid du Colombier 	QWevent,
16*219b2ee8SDavid du Colombier 	QWtag,
17*219b2ee8SDavid du Colombier 	QMAX,
18*219b2ee8SDavid du Colombier };
19*219b2ee8SDavid du Colombier 
20*219b2ee8SDavid du Colombier enum
21*219b2ee8SDavid du Colombier {
22*219b2ee8SDavid du Colombier 	Blockincr =	256,
23*219b2ee8SDavid du Colombier 	Maxblock = 	8*1024,
24*219b2ee8SDavid du Colombier 	NRange =		10,
25*219b2ee8SDavid du Colombier 	Infinity = 		0x7FFFFFFF,	/* huge value for regexp address */
26*219b2ee8SDavid du Colombier };
27*219b2ee8SDavid du Colombier 
28*219b2ee8SDavid du Colombier typedef	adt	Column;
29*219b2ee8SDavid du Colombier typedef	adt	Row;
30*219b2ee8SDavid du Colombier typedef	adt	Text;
31*219b2ee8SDavid du Colombier typedef	adt	Window;
32*219b2ee8SDavid du Colombier typedef	adt	Xfid;
33*219b2ee8SDavid du Colombier typedef	adt	Reffont;
34*219b2ee8SDavid du Colombier typedef	aggr	Dirlist;
35*219b2ee8SDavid du Colombier typedef	aggr	Range;
36*219b2ee8SDavid du Colombier typedef	aggr	Mntdir;
37*219b2ee8SDavid du Colombier 
38*219b2ee8SDavid du Colombier aggr Range
39*219b2ee8SDavid du Colombier {
40*219b2ee8SDavid du Colombier 	int	q0;
41*219b2ee8SDavid du Colombier 	int	q1;
42*219b2ee8SDavid du Colombier };
43*219b2ee8SDavid du Colombier 
44*219b2ee8SDavid du Colombier aggr Block
45*219b2ee8SDavid du Colombier {
46*219b2ee8SDavid du Colombier 	uint		addr;	/* disk address in bytes */
47*219b2ee8SDavid du Colombier 	union
48*219b2ee8SDavid du Colombier 	{
49*219b2ee8SDavid du Colombier 		uint	n;		/* number of used runes in block */
50*219b2ee8SDavid du Colombier 		Block	*next;	/* pointer to next in free list */
51*219b2ee8SDavid du Colombier 	};
52*219b2ee8SDavid du Colombier };
53*219b2ee8SDavid du Colombier 
54*219b2ee8SDavid du Colombier adt Disk
55*219b2ee8SDavid du Colombier {
56*219b2ee8SDavid du Colombier 		int		fd;
57*219b2ee8SDavid du Colombier 		uint	addr;	/* length of temp file */
58*219b2ee8SDavid du Colombier 		Block	*free[Maxblock/Blockincr+1];
59*219b2ee8SDavid du Colombier 
60*219b2ee8SDavid du Colombier 		Disk*	init();
61*219b2ee8SDavid du Colombier 		Block*	new(*Disk, uint);
62*219b2ee8SDavid du Colombier 		void	release(*Disk, Block*);
63*219b2ee8SDavid du Colombier 		void	read(*Disk, Block*, Rune*, uint);
64*219b2ee8SDavid du Colombier 		void	write(*Disk, Block**, Rune*, uint);
65*219b2ee8SDavid du Colombier };
66*219b2ee8SDavid du Colombier 
67*219b2ee8SDavid du Colombier adt Buffer
68*219b2ee8SDavid du Colombier {
69*219b2ee8SDavid du Colombier extern	uint	nc;
70*219b2ee8SDavid du Colombier 		Rune	*c;		/* cache */
71*219b2ee8SDavid du Colombier 		uint	cnc;	/* bytes in cache */
72*219b2ee8SDavid du Colombier 		uint	cmax;	/* size of allocated cache */
73*219b2ee8SDavid du Colombier 		uint	cq;		/* position of cache */
74*219b2ee8SDavid du Colombier 		int		cdirty;	/* cache needs to be written */
75*219b2ee8SDavid du Colombier 		uint	cbi;	/* index of cache Block */
76*219b2ee8SDavid du Colombier 		Block	**bl;	/* array of blocks */
77*219b2ee8SDavid du Colombier 		uint	nbl;	/* number of blocks */
78*219b2ee8SDavid du Colombier 
79*219b2ee8SDavid du Colombier 		void	insert(*Buffer, uint, Rune*, uint);
80*219b2ee8SDavid du Colombier 		void	delete(*Buffer, uint, uint);
81*219b2ee8SDavid du Colombier 		uint	load(*Buffer, uint, int, int*);
82*219b2ee8SDavid du Colombier 		void	read(*Buffer, uint, Rune*, uint);
83*219b2ee8SDavid du Colombier 		void	close(*Buffer);
84*219b2ee8SDavid du Colombier 		void	reset(*Buffer);
85*219b2ee8SDavid du Colombier intern	void	sizecache(*Buffer, uint);
86*219b2ee8SDavid du Colombier intern	void	flush(*Buffer);
87*219b2ee8SDavid du Colombier intern	void	setcache(*Buffer, uint);
88*219b2ee8SDavid du Colombier intern	void	addblock(*Buffer, uint, uint);
89*219b2ee8SDavid du Colombier intern	void	delblock(*Buffer, uint);
90*219b2ee8SDavid du Colombier };
91*219b2ee8SDavid du Colombier 
92*219b2ee8SDavid du Colombier adt File
93*219b2ee8SDavid du Colombier {
94*219b2ee8SDavid du Colombier extern	Buffer;			/* the data */
95*219b2ee8SDavid du Colombier extern	Buffer	delta;	/* transcript of changes */
96*219b2ee8SDavid du Colombier extern	Buffer	epsilon;/* inversion of delta for redo */
97*219b2ee8SDavid du Colombier extern	Rune		*name;	/* name of associated file */
98*219b2ee8SDavid du Colombier extern	int		nname;	/* size of name */
99*219b2ee8SDavid du Colombier 
100*219b2ee8SDavid du Colombier extern	int		seq;	/* if seq==0, File acts like Buffer */
101*219b2ee8SDavid du Colombier extern	int		mod;
102*219b2ee8SDavid du Colombier extern	Text		*curtext;	/* most recently used associated text */
103*219b2ee8SDavid du Colombier extern	Text		**text;	/* list of associated texts */
104*219b2ee8SDavid du Colombier extern	int		ntext;
105*219b2ee8SDavid du Colombier extern	int		dumpid;	/* used in dumping zeroxed windows */
106*219b2ee8SDavid du Colombier 
107*219b2ee8SDavid du Colombier 		File*	addtext(*File, Text*);
108*219b2ee8SDavid du Colombier 		void	deltext(*File, Text*);
109*219b2ee8SDavid du Colombier 		void	insert(*File, uint, Rune*, uint);
110*219b2ee8SDavid du Colombier 		void	delete(*File, uint, uint);
111*219b2ee8SDavid du Colombier 		uint	load(*File, uint, int, int*);
112*219b2ee8SDavid du Colombier 		void	setname(*File, Rune*, int);
113*219b2ee8SDavid du Colombier 		(uint, uint)	undo(*File, int, uint, uint);
114*219b2ee8SDavid du Colombier 		void	mark(*File);
115*219b2ee8SDavid du Colombier 		void	reset(*File);
116*219b2ee8SDavid du Colombier intern	void	close(*File);
117*219b2ee8SDavid du Colombier intern	void	undelete(*File, Buffer*, uint, uint);
118*219b2ee8SDavid du Colombier intern	void	uninsert(*File, Buffer*, uint, uint);
119*219b2ee8SDavid du Colombier intern	void	unsetname(*File, Buffer*);
120*219b2ee8SDavid du Colombier };
121*219b2ee8SDavid du Colombier 
122*219b2ee8SDavid du Colombier enum	/* Text.what */
123*219b2ee8SDavid du Colombier {
124*219b2ee8SDavid du Colombier 	Columntag,
125*219b2ee8SDavid du Colombier 	Rowtag,
126*219b2ee8SDavid du Colombier 	Tag,
127*219b2ee8SDavid du Colombier 	Body,
128*219b2ee8SDavid du Colombier };
129*219b2ee8SDavid du Colombier 
130*219b2ee8SDavid du Colombier adt Text
131*219b2ee8SDavid du Colombier {
132*219b2ee8SDavid du Colombier extern	File		*file;
133*219b2ee8SDavid du Colombier extern	Frame;
134*219b2ee8SDavid du Colombier extern	Reffont	*reffont;
135*219b2ee8SDavid du Colombier extern	uint	org;
136*219b2ee8SDavid du Colombier extern	uint	q0;
137*219b2ee8SDavid du Colombier extern	uint	q1;
138*219b2ee8SDavid du Colombier extern	int	what;
139*219b2ee8SDavid du Colombier extern	Window	*w;
140*219b2ee8SDavid du Colombier extern	Rectangle scrollr;
141*219b2ee8SDavid du Colombier extern	Rectangle lastsr;
142*219b2ee8SDavid du Colombier extern	Rectangle all;
143*219b2ee8SDavid du Colombier extern	Row		*row;
144*219b2ee8SDavid du Colombier extern	Column	*col;
145*219b2ee8SDavid du Colombier 
146*219b2ee8SDavid du Colombier extern	uint	eq0;	/* start of typing for ESC */
147*219b2ee8SDavid du Colombier 		uint	cq0;	/* cache position */
148*219b2ee8SDavid du Colombier extern	int		ncache;	/* storage for insert */
149*219b2ee8SDavid du Colombier 		int		ncachealloc;
150*219b2ee8SDavid du Colombier 		Rune	*cache;
151*219b2ee8SDavid du Colombier 		int	nofill;
152*219b2ee8SDavid du Colombier 
153*219b2ee8SDavid du Colombier 		void	init(*Text, File*, Rectangle, Reffont*);
154*219b2ee8SDavid du Colombier 		void	redraw(*Text, Rectangle, Font*, Bitmap*, int);
155*219b2ee8SDavid du Colombier 		void	insert(*Text, uint, Rune*, uint, int);
156*219b2ee8SDavid du Colombier 		(uint, int)	bsinsert(*Text, uint, Rune*, uint, int);
157*219b2ee8SDavid du Colombier 		void	delete(*Text, uint, uint, int);
158*219b2ee8SDavid du Colombier 		uint	load(*Text, uint, byte*);
159*219b2ee8SDavid du Colombier 		void	type(*Text, Rune);
160*219b2ee8SDavid du Colombier 		void	select(*Text);
161*219b2ee8SDavid du Colombier 		(int, Text*)	select2(*Text, uint*, uint*);
162*219b2ee8SDavid du Colombier 		int	select3(*Text, uint*, uint*);
163*219b2ee8SDavid du Colombier 		void	setselect(*Text, uint, uint);
164*219b2ee8SDavid du Colombier 		void	show(*Text, uint, uint);
165*219b2ee8SDavid du Colombier 		void	fill(*Text);
166*219b2ee8SDavid du Colombier 		void	commit(*Text, int);
167*219b2ee8SDavid du Colombier 		void	scroll(*Text, int);
168*219b2ee8SDavid du Colombier 		void	setorigin(*Text, uint, int);
169*219b2ee8SDavid du Colombier 		void	scrdraw(*Text);
170*219b2ee8SDavid du Colombier 		Rune	readc(*Text, uint);
171*219b2ee8SDavid du Colombier 		void	reset(*Text);
172*219b2ee8SDavid du Colombier 		int	reshape(*Text, Rectangle);
173*219b2ee8SDavid du Colombier 		void	close(*Text);
174*219b2ee8SDavid du Colombier 		void	framescroll(*Text, int);
175*219b2ee8SDavid du Colombier intern	int	select23(*Text, uint*, uint*, Bitmap*, int);
176*219b2ee8SDavid du Colombier intern	uint	backnl(*Text, uint, uint);
177*219b2ee8SDavid du Colombier intern	int	bswidth(*Text, Rune);
178*219b2ee8SDavid du Colombier intern	void	doubleclick(*Text, uint*, uint*);
179*219b2ee8SDavid du Colombier intern	int	clickmatch(*Text, int, int, int, uint*);
180*219b2ee8SDavid du Colombier intern	void	columnate(*Text, Dirlist**, int);
181*219b2ee8SDavid du Colombier };
182*219b2ee8SDavid du Colombier 
183*219b2ee8SDavid du Colombier adt Window
184*219b2ee8SDavid du Colombier {
185*219b2ee8SDavid du Colombier 		QLock;
186*219b2ee8SDavid du Colombier 		Ref;
187*219b2ee8SDavid du Colombier extern	Text		tag;
188*219b2ee8SDavid du Colombier extern	Text		body;
189*219b2ee8SDavid du Colombier extern	Rectangle	r;
190*219b2ee8SDavid du Colombier extern	byte		isdir;
191*219b2ee8SDavid du Colombier extern	byte		isscratch;
192*219b2ee8SDavid du Colombier extern	byte		filemenu;
193*219b2ee8SDavid du Colombier extern	byte		dirty;
194*219b2ee8SDavid du Colombier extern	int		id;
195*219b2ee8SDavid du Colombier extern	Range	addr;
196*219b2ee8SDavid du Colombier extern	Range	limit;
197*219b2ee8SDavid du Colombier extern	byte		nopen[QMAX];
198*219b2ee8SDavid du Colombier extern	byte		nomark;
199*219b2ee8SDavid du Colombier extern	byte		noscroll;
200*219b2ee8SDavid du Colombier extern	Column	*col;
201*219b2ee8SDavid du Colombier extern	Xfid		*eventx;
202*219b2ee8SDavid du Colombier extern	byte		*events;
203*219b2ee8SDavid du Colombier extern	int		nevents;
204*219b2ee8SDavid du Colombier extern	int		owner;
205*219b2ee8SDavid du Colombier extern	int		maxlines;
206*219b2ee8SDavid du Colombier extern	Dirlist	**dlp;
207*219b2ee8SDavid du Colombier extern	int		ndl;
208*219b2ee8SDavid du Colombier extern	int		putseq;
209*219b2ee8SDavid du Colombier extern	int		nincl;
210*219b2ee8SDavid du Colombier extern	Rune		**incl;
211*219b2ee8SDavid du Colombier extern	Reffont	*reffont;
212*219b2ee8SDavid du Colombier extern	QLock	ctllock;
213*219b2ee8SDavid du Colombier extern	uint		ctlfid;
214*219b2ee8SDavid du Colombier extern	byte		*dumpstr;
215*219b2ee8SDavid du Colombier extern	byte		*dumpdir;
216*219b2ee8SDavid du Colombier extern	int		dumpid;
217*219b2ee8SDavid du Colombier 
218*219b2ee8SDavid du Colombier 		void	init(*Window, Window*, Rectangle);
219*219b2ee8SDavid du Colombier 		void	lock(*Window, int);
220*219b2ee8SDavid du Colombier 		void	lock1(*Window, int);
221*219b2ee8SDavid du Colombier 		void	unlock(*Window);
222*219b2ee8SDavid du Colombier 		void	type(*Window, Text*, Rune);
223*219b2ee8SDavid du Colombier 		void	undo(*Window, int);
224*219b2ee8SDavid du Colombier 		void	setname(*Window, Rune*, int);
225*219b2ee8SDavid du Colombier 		void	settag(*Window);
226*219b2ee8SDavid du Colombier 		void	settag1(*Window);
227*219b2ee8SDavid du Colombier 		void	commit(*Window, Text*);
228*219b2ee8SDavid du Colombier 		int	reshape(*Window, Rectangle, int);
229*219b2ee8SDavid du Colombier 		void	close(*Window);
230*219b2ee8SDavid du Colombier 		void	delete(*Window);
231*219b2ee8SDavid du Colombier 		int	clean(*Window, int);
232*219b2ee8SDavid du Colombier 		void	dirfree(*Window);
233*219b2ee8SDavid du Colombier 		void	event(*Window, byte*, ...);
234*219b2ee8SDavid du Colombier 		void	mousebut(*Window);
235*219b2ee8SDavid du Colombier 		void	addincl(*Window, Rune*, int);
236*219b2ee8SDavid du Colombier 		void	cleartag(*Window);
237*219b2ee8SDavid du Colombier 		void	ctlprint(*Window, byte*);
238*219b2ee8SDavid du Colombier };
239*219b2ee8SDavid du Colombier 
240*219b2ee8SDavid du Colombier adt Column
241*219b2ee8SDavid du Colombier {
242*219b2ee8SDavid du Colombier extern	Rectangle r;
243*219b2ee8SDavid du Colombier extern	Text	tag;
244*219b2ee8SDavid du Colombier extern	Row		*row;
245*219b2ee8SDavid du Colombier extern	Window	**w;
246*219b2ee8SDavid du Colombier extern	int		nw;
247*219b2ee8SDavid du Colombier 		int		safe;
248*219b2ee8SDavid du Colombier 
249*219b2ee8SDavid du Colombier 		void	init(*Column, Rectangle);
250*219b2ee8SDavid du Colombier 		Window*	add(*Column, Window*, Window*, int);
251*219b2ee8SDavid du Colombier 		void	close(*Column, Window*, int);
252*219b2ee8SDavid du Colombier 		void	closeall(*Column);
253*219b2ee8SDavid du Colombier 		void	reshape(*Column, Rectangle);
254*219b2ee8SDavid du Colombier 		Text*	which(*Column, Point);
255*219b2ee8SDavid du Colombier 		void	dragwin(*Column, Window*, int);
256*219b2ee8SDavid du Colombier 		void	grow(*Column, Window*, int);
257*219b2ee8SDavid du Colombier 		int	clean(*Column);
258*219b2ee8SDavid du Colombier 		void	sort(*Column);
259*219b2ee8SDavid du Colombier 		void	mousebut(*Column);
260*219b2ee8SDavid du Colombier };
261*219b2ee8SDavid du Colombier 
262*219b2ee8SDavid du Colombier adt Row
263*219b2ee8SDavid du Colombier {
264*219b2ee8SDavid du Colombier 		QLock;
265*219b2ee8SDavid du Colombier extern	Rectangle r;
266*219b2ee8SDavid du Colombier extern	Text	tag;
267*219b2ee8SDavid du Colombier extern	Column	**col;
268*219b2ee8SDavid du Colombier extern	int		ncol;
269*219b2ee8SDavid du Colombier 
270*219b2ee8SDavid du Colombier 		void	init(*Row, Rectangle);
271*219b2ee8SDavid du Colombier 		Column*	add(*Row, Column *c, int);
272*219b2ee8SDavid du Colombier 		void	close(*Row, Column*, int);
273*219b2ee8SDavid du Colombier 		Text*	which(*Row, Point);
274*219b2ee8SDavid du Colombier 		Column*	whichcol(*Row, Point);
275*219b2ee8SDavid du Colombier 		void	reshape(*Row, Rectangle);
276*219b2ee8SDavid du Colombier 		Text*	type(*Row, Rune, Point);
277*219b2ee8SDavid du Colombier 		void	dragcol(*Row, Column*, int but);
278*219b2ee8SDavid du Colombier 		int		clean(*Row);
279*219b2ee8SDavid du Colombier 		void		dump(*Row, byte*);
280*219b2ee8SDavid du Colombier 		void		load(*Row, byte*, int);
281*219b2ee8SDavid du Colombier };
282*219b2ee8SDavid du Colombier 
283*219b2ee8SDavid du Colombier aggr Timer
284*219b2ee8SDavid du Colombier {
285*219b2ee8SDavid du Colombier 	int		dt;
286*219b2ee8SDavid du Colombier 	chan(int)	c;
287*219b2ee8SDavid du Colombier 	Timer	*next;
288*219b2ee8SDavid du Colombier };
289*219b2ee8SDavid du Colombier 
290*219b2ee8SDavid du Colombier aggr Command
291*219b2ee8SDavid du Colombier {
292*219b2ee8SDavid du Colombier 	int		pid;
293*219b2ee8SDavid du Colombier 	Rune		*name;
294*219b2ee8SDavid du Colombier 	int		nname;
295*219b2ee8SDavid du Colombier 	byte		*text;
296*219b2ee8SDavid du Colombier 	byte		**av;
297*219b2ee8SDavid du Colombier 	Mntdir	*md;
298*219b2ee8SDavid du Colombier 	Command	*next;
299*219b2ee8SDavid du Colombier };
300*219b2ee8SDavid du Colombier 
301*219b2ee8SDavid du Colombier aggr Dirtab
302*219b2ee8SDavid du Colombier {
303*219b2ee8SDavid du Colombier 	byte	*name;
304*219b2ee8SDavid du Colombier 	uint	qid;
305*219b2ee8SDavid du Colombier 	uint	perm;
306*219b2ee8SDavid du Colombier };
307*219b2ee8SDavid du Colombier 
308*219b2ee8SDavid du Colombier aggr Mntdir
309*219b2ee8SDavid du Colombier {
310*219b2ee8SDavid du Colombier 	int		id;
311*219b2ee8SDavid du Colombier 	int		ref;
312*219b2ee8SDavid du Colombier 	Rune		*dir;
313*219b2ee8SDavid du Colombier 	int		ndir;
314*219b2ee8SDavid du Colombier 	Mntdir	*next;
315*219b2ee8SDavid du Colombier 	int		nincl;
316*219b2ee8SDavid du Colombier 	Rune		**incl;
317*219b2ee8SDavid du Colombier };
318*219b2ee8SDavid du Colombier 
319*219b2ee8SDavid du Colombier aggr Fid
320*219b2ee8SDavid du Colombier {
321*219b2ee8SDavid du Colombier 	uint		fid;
322*219b2ee8SDavid du Colombier 	int		busy;
323*219b2ee8SDavid du Colombier 	int		open;
324*219b2ee8SDavid du Colombier 	Qid		qid;
325*219b2ee8SDavid du Colombier 	Window	*w;
326*219b2ee8SDavid du Colombier 	Dirtab	*dir;
327*219b2ee8SDavid du Colombier 	Fid		*next;
328*219b2ee8SDavid du Colombier 	Mntdir	*mntdir;
329*219b2ee8SDavid du Colombier 	int		nrpart;
330*219b2ee8SDavid du Colombier 	byte		rpart[UTFmax];
331*219b2ee8SDavid du Colombier };
332*219b2ee8SDavid du Colombier 
333*219b2ee8SDavid du Colombier adt Xfid
334*219b2ee8SDavid du Colombier {
335*219b2ee8SDavid du Colombier 		uint	tid;
336*219b2ee8SDavid du Colombier extern	Fcall;
337*219b2ee8SDavid du Colombier extern	Xfid	*next;
338*219b2ee8SDavid du Colombier extern	chan(void(*)(Xfid*))	c;
339*219b2ee8SDavid du Colombier extern	Fid	*f;
340*219b2ee8SDavid du Colombier extern	byte	*buf;
341*219b2ee8SDavid du Colombier 		int	flushed;
342*219b2ee8SDavid du Colombier 
343*219b2ee8SDavid du Colombier 		void		ctl(*Xfid);
344*219b2ee8SDavid du Colombier 		void		flush(*Xfid);
345*219b2ee8SDavid du Colombier 		void		walk(*Xfid);
346*219b2ee8SDavid du Colombier 		void		open(*Xfid);
347*219b2ee8SDavid du Colombier 		void		close(*Xfid);
348*219b2ee8SDavid du Colombier 		void		read(*Xfid);
349*219b2ee8SDavid du Colombier 		void		write(*Xfid);
350*219b2ee8SDavid du Colombier 
351*219b2ee8SDavid du Colombier 		void		ctlwrite(*Xfid, Window*);
352*219b2ee8SDavid du Colombier 		void		eventread(*Xfid, Window*);
353*219b2ee8SDavid du Colombier 		void		eventwrite(*Xfid, Window*);
354*219b2ee8SDavid du Colombier 		void		indexread(*Xfid);
355*219b2ee8SDavid du Colombier 		void		utfread(*Xfid, Text*, uint, uint);
356*219b2ee8SDavid du Colombier 		int		runeread(*Xfid, Text*, uint, uint);
357*219b2ee8SDavid du Colombier };
358*219b2ee8SDavid du Colombier 
359*219b2ee8SDavid du Colombier adt
360*219b2ee8SDavid du Colombier Reffont
361*219b2ee8SDavid du Colombier {
362*219b2ee8SDavid du Colombier 		Ref;
363*219b2ee8SDavid du Colombier extern	Font		*f;
364*219b2ee8SDavid du Colombier 
365*219b2ee8SDavid du Colombier 		Reffont*	get(int, int, int, byte*);
366*219b2ee8SDavid du Colombier 		void		close(*Reffont);
367*219b2ee8SDavid du Colombier };
368*219b2ee8SDavid du Colombier 
369*219b2ee8SDavid du Colombier aggr Rangeset
370*219b2ee8SDavid du Colombier {
371*219b2ee8SDavid du Colombier 	Range	r[NRange];
372*219b2ee8SDavid du Colombier };
373*219b2ee8SDavid du Colombier 
374*219b2ee8SDavid du Colombier aggr Dirlist
375*219b2ee8SDavid du Colombier {
376*219b2ee8SDavid du Colombier 	Rune	*r;
377*219b2ee8SDavid du Colombier 	int		nr;
378*219b2ee8SDavid du Colombier 	int		wid;
379*219b2ee8SDavid du Colombier };
380*219b2ee8SDavid du Colombier 
381*219b2ee8SDavid du Colombier aggr Expand
382*219b2ee8SDavid du Colombier {
383*219b2ee8SDavid du Colombier 	uint	q0;
384*219b2ee8SDavid du Colombier 	uint	q1;
385*219b2ee8SDavid du Colombier 	Rune	*name;
386*219b2ee8SDavid du Colombier 	int	nname;
387*219b2ee8SDavid du Colombier 	byte	*bname;
388*219b2ee8SDavid du Colombier 	int	jump;
389*219b2ee8SDavid du Colombier 	Text	*at;
390*219b2ee8SDavid du Colombier 	int	a0;
391*219b2ee8SDavid du Colombier 	int	a1;
392*219b2ee8SDavid du Colombier };
393*219b2ee8SDavid du Colombier 
394*219b2ee8SDavid du Colombier enum
395*219b2ee8SDavid du Colombier {
396*219b2ee8SDavid du Colombier 	/* fbufalloc() guarantees room off end of BUFSIZE */
397*219b2ee8SDavid du Colombier 	BUFSIZE = MAXRPC,	/* size from fbufalloc() */
398*219b2ee8SDavid du Colombier 	RBUFSIZE = BUFSIZE/sizeof(Rune),
399*219b2ee8SDavid du Colombier 	EVENTSIZE = 256,
400*219b2ee8SDavid du Colombier 	Scrollwid = 12,	/* width of scroll bar */
401*219b2ee8SDavid du Colombier 	Scrollgap = 4,	/* gap right of scroll bar */
402*219b2ee8SDavid du Colombier 	Margin = 4,	/* margin around text */
403*219b2ee8SDavid du Colombier 	Border = 2,	/* line between rows, cols, windows */
404*219b2ee8SDavid du Colombier 	Maxtab = 4,	/* size of a tab, in units of the '0' character */
405*219b2ee8SDavid du Colombier };
406*219b2ee8SDavid du Colombier 
407*219b2ee8SDavid du Colombier #define	QID(w,q)	((w<<8)|(q))
408*219b2ee8SDavid du Colombier #define	WIN(q)	((((q).path&~CHDIR)>>8) & 0xFFFFFF)
409*219b2ee8SDavid du Colombier #define	FILE(q)	((q).path & 0xFF)
410*219b2ee8SDavid du Colombier 
411*219b2ee8SDavid du Colombier enum
412*219b2ee8SDavid du Colombier {
413*219b2ee8SDavid du Colombier 	FALSE,
414*219b2ee8SDavid du Colombier 	TRUE,
415*219b2ee8SDavid du Colombier 	XXX,
416*219b2ee8SDavid du Colombier };
417*219b2ee8SDavid du Colombier 
418*219b2ee8SDavid du Colombier enum
419*219b2ee8SDavid du Colombier {
420*219b2ee8SDavid du Colombier 	Null		= '-',
421*219b2ee8SDavid du Colombier 	Delete	= 'd',
422*219b2ee8SDavid du Colombier 	Insert	= 'i',
423*219b2ee8SDavid du Colombier 	Filename	= 'f',
424*219b2ee8SDavid du Colombier };
425*219b2ee8SDavid du Colombier 
426*219b2ee8SDavid du Colombier uint		seq;
427*219b2ee8SDavid du Colombier 
428*219b2ee8SDavid du Colombier Mouse		mouse;
429*219b2ee8SDavid du Colombier Bitmap		*darkgrey;
430*219b2ee8SDavid du Colombier Bitmap		*lightgrey;
431*219b2ee8SDavid du Colombier Reffont		reffont;
432*219b2ee8SDavid du Colombier Bitmap		*modbutton;
433*219b2ee8SDavid du Colombier Bitmap		*colbutton;
434*219b2ee8SDavid du Colombier Bitmap		*button;
435*219b2ee8SDavid du Colombier Cursor		boxcursor;
436*219b2ee8SDavid du Colombier Row			row;
437*219b2ee8SDavid du Colombier int			timerpid;
438*219b2ee8SDavid du Colombier Disk			*disk;
439*219b2ee8SDavid du Colombier Text			*seltext;
440*219b2ee8SDavid du Colombier Text			*argtext;
441*219b2ee8SDavid du Colombier Text			*mousetext;	/* global because Text.close needs to clear it */
442*219b2ee8SDavid du Colombier Text			*typetext;		/* global because Text.close needs to clear it */
443*219b2ee8SDavid du Colombier Text			*barttext;		/* shared between mousetask and keyboardtask */
444*219b2ee8SDavid du Colombier int			bartflag;
445*219b2ee8SDavid du Colombier Column		*activecol;
446*219b2ee8SDavid du Colombier Rectangle		nullrect;
447*219b2ee8SDavid du Colombier int			fsyspid;
448*219b2ee8SDavid du Colombier byte			*cputype;
449*219b2ee8SDavid du Colombier byte			*objtype;
450*219b2ee8SDavid du Colombier byte			*home;
451*219b2ee8SDavid du Colombier byte			*fontnames[2];
452*219b2ee8SDavid du Colombier 
453*219b2ee8SDavid du Colombier chan(Rune)[10]	ckeyboard;
454*219b2ee8SDavid du Colombier chan(Mouse)		cmouse;
455*219b2ee8SDavid du Colombier chan(Waitmsg)	cwait;
456*219b2ee8SDavid du Colombier chan(Command*)	ccommand;
457*219b2ee8SDavid du Colombier chan(Rune*)	ckill;
458*219b2ee8SDavid du Colombier chan(Xfid*)	cxfidalloc;
459*219b2ee8SDavid du Colombier chan(Xfid*)	cxfidfree;
460*219b2ee8SDavid du Colombier chan(int)		*mouseexit0;
461*219b2ee8SDavid du Colombier chan(int)		*mouseexit1;
462*219b2ee8SDavid du Colombier chan(byte*)	cerr;
463