xref: /plan9/acme/bin/source/win/dat.h (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1 typedef struct Fsevent Fsevent;
2 typedef struct Event Event;
3 typedef struct Message Message;
4 typedef struct Window Window;
5 
6 enum
7 {
8 	STACK		= 8192,
9 	NPIPEDATA	= 8000,
10 	NPIPE		= NPIPEDATA+32,
11 	/* EVENTSIZE is really 256 in acme, but we use events internally and want bigger buffers */
12 	EVENTSIZE	= 8192,
13 	NEVENT		= 5,
14 };
15 
16 struct Fsevent
17 {
18 	int	type;
19 	void	*r;
20 };
21 
22 struct Event
23 {
24 	int	c1;
25 	int	c2;
26 	int	q0;
27 	int	q1;
28 	int	flag;
29 	int	nb;
30 	int	nr;
31 	char	b[EVENTSIZE*UTFmax+1];
32 	Rune	r[EVENTSIZE+1];
33 };
34 
35 struct Window
36 {
37 	/* file descriptors */
38 	int		ctl;
39 	int		event;
40 	int		addr;
41 	int		data;
42 	int		body;
43 
44 	/* event input */
45 	char		buf[512];
46 	char		*bufp;
47 	int		nbuf;
48 	Event	e[NEVENT];
49 
50 	int		id;
51 	int		open;
52 	Channel	*cevent;
53 };
54 
55 extern	Window*	newwindow(void);
56 extern	int		winopenfile(Window*, char*);
57 extern	void		wintagwrite(Window*, char*, int);
58 extern	void		winname(Window*, char*);
59 extern	void		winwriteevent(Window*, Event*);
60 extern	int		winread(Window*, uint, uint, char*);
61 extern	int		windel(Window*, int);
62 extern	void		wingetevent(Window*, Event*);
63 extern	void		wineventproc(void*);
64 extern	void		winclean(Window*);
65 extern	int		winselect(Window*, char*, int);
66 extern	int		winsetaddr(Window*, char*, int);
67 extern	void		windormant(Window*);
68 extern	void		winsetdump(Window*, char*, char*);
69 
70 extern	void		ctlprint(int, char*, ...);
71 extern	void*	emalloc(uint);
72 extern	char*	estrdup(char*);
73 extern	char*	estrstrdup(char*, char*);
74 extern	char*	egrow(char*, char*, char*);
75 extern	char*	eappend(char*, char*, char*);
76 extern	void		error(char*, ...);
77 
78 extern	void		startpipe(void);
79 extern	void		sendit(char*);
80 extern	void		execevent(Window *w, Event *e, int (*)(Window*, char*));
81 
82 extern	void		mountcons(void);
83 extern	void		fsloop(void*);
84 
85 extern	int		newpipewin(int, char*);
86 extern	void		startpipe(void);
87 extern	int		pipecommand(Window*, char*);
88 extern	void		pipectl(void*);
89 
90 #pragma	varargck	argpos	error	1
91 #pragma	varargck	argpos	ctlprint	2
92 
93 extern	Window	*win;
94 extern	Channel	*fschan, *writechan;
95 
96