xref: /plan9/acme/wiki/src/awiki.h (revision 90630c3ae7e1186c94d00c68ec472672552283ad)
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include <thread.h>
5 
6 /* acme */
7 typedef struct Event Event;
8 typedef struct Window Window;
9 
10 enum
11 {
12 	STACK		= 8192,
13 	EVENTSIZE	= 256,
14 	NEVENT		= 5,
15 };
16 
17 struct Event
18 {
19 	int	c1;
20 	int	c2;
21 	int	q0;
22 	int	q1;
23 	int	flag;
24 	int	nb;
25 	int	nr;
26 	char	b[EVENTSIZE*UTFmax+1];
27 	Rune	r[EVENTSIZE+1];
28 };
29 
30 struct Window
31 {
32 	/* file descriptors */
33 	int		ctl;
34 	int		event;
35 	int		addr;
36 	int		data;
37 	Biobuf	*body;
38 
39 	/* event input */
40 	char		buf[512];
41 	char		*bufp;
42 	int		nbuf;
43 	Event	e[NEVENT];
44 
45 	int		warned;
46 	int		id;
47 	int		open;
48 	Channel	*cevent;	/* chan(Event*) */
49 };
50 
51 extern	Window*	newwindow(void);
52 extern	int		winopenfile(Window*, char*);
53 extern	void		winopenbody(Window*, int);
54 extern	void		winclosebody(Window*);
55 extern	void		wintagwrite(Window*, char*, int);
56 extern	void		winname(Window*, char*);
57 extern	void		winwriteevent(Window*, Event*);
58 extern	void		winread(Window*, uint, uint, char*);
59 extern	int		windel(Window*, int);
60 extern	void		wingetevent(Window*, Event*);
61 extern	void		wineventproc(void*);
62 extern	void		winwritebody(Window*, char*, int);
63 extern	void		winclean(Window*);
64 extern	int		winisdirty(Window*);
65 extern	int		winselect(Window*, char*, int);
66 extern	int		winsetaddr(Window*, char*, int);
67 extern	char*	winreadbody(Window*, int*);
68 extern	void		windormant(Window*);
69 extern	void		winsetdump(Window*, char*, char*);
70 
71 extern	char*	readfile(char*, char*, int*);
72 extern	void		ctlprint(int, char*, ...);
73 extern	void*	emalloc(uint);
74 extern	char*	estrdup(char*);
75 extern	char*	estrstrdup(char*, char*);
76 extern	char*	egrow(char*, char*, char*);
77 extern	char*	eappend(char*, char*, char*);
78 extern	void		error(char*, ...);
79 extern	int		tokenizec(char*, char**, int, char*);
80 
81 typedef struct Treq Treq;
82 typedef struct Wiki Wiki;
83 
84 struct Treq {
85 	char *title;
86 	Channel *c;	/* chan(int) */
87 };
88 
89 struct Wiki {
90 	QLock;
91 	int isnew;
92 	int special;
93 	char *arg;
94 	char *addr;
95 	int n;
96 	int dead;
97 	Window *win;
98 	ulong time;
99 	int linked;
100 	Wiki *next;
101 	Wiki *prev;
102 };
103 
104 extern int debug;
105 extern int mapfd;
106 extern char *email;
107 extern char *dir;
108 
109 void wikinew(char*);
110 int wikiopen(char*, char*);
111 int wikiput(Wiki*);
112 void wikiget(Wiki*);
113 int wikidiff(Wiki*);
114 
115