xref: /plan9-contrib/acme/wiki/src/awiki.h (revision 90630c3ae7e1186c94d00c68ec472672552283ad)
19a747e4fSDavid du Colombier #include <u.h>
29a747e4fSDavid du Colombier #include <libc.h>
39a747e4fSDavid du Colombier #include <bio.h>
49a747e4fSDavid du Colombier #include <thread.h>
59a747e4fSDavid du Colombier 
69a747e4fSDavid du Colombier /* acme */
79a747e4fSDavid du Colombier typedef struct Event Event;
89a747e4fSDavid du Colombier typedef struct Window Window;
99a747e4fSDavid du Colombier 
109a747e4fSDavid du Colombier enum
119a747e4fSDavid du Colombier {
129a747e4fSDavid du Colombier 	STACK		= 8192,
139a747e4fSDavid du Colombier 	EVENTSIZE	= 256,
149a747e4fSDavid du Colombier 	NEVENT		= 5,
159a747e4fSDavid du Colombier };
169a747e4fSDavid du Colombier 
179a747e4fSDavid du Colombier struct Event
189a747e4fSDavid du Colombier {
199a747e4fSDavid du Colombier 	int	c1;
209a747e4fSDavid du Colombier 	int	c2;
219a747e4fSDavid du Colombier 	int	q0;
229a747e4fSDavid du Colombier 	int	q1;
239a747e4fSDavid du Colombier 	int	flag;
249a747e4fSDavid du Colombier 	int	nb;
259a747e4fSDavid du Colombier 	int	nr;
269a747e4fSDavid du Colombier 	char	b[EVENTSIZE*UTFmax+1];
279a747e4fSDavid du Colombier 	Rune	r[EVENTSIZE+1];
289a747e4fSDavid du Colombier };
299a747e4fSDavid du Colombier 
309a747e4fSDavid du Colombier struct Window
319a747e4fSDavid du Colombier {
329a747e4fSDavid du Colombier 	/* file descriptors */
339a747e4fSDavid du Colombier 	int		ctl;
349a747e4fSDavid du Colombier 	int		event;
359a747e4fSDavid du Colombier 	int		addr;
369a747e4fSDavid du Colombier 	int		data;
379a747e4fSDavid du Colombier 	Biobuf	*body;
389a747e4fSDavid du Colombier 
399a747e4fSDavid du Colombier 	/* event input */
409a747e4fSDavid du Colombier 	char		buf[512];
419a747e4fSDavid du Colombier 	char		*bufp;
429a747e4fSDavid du Colombier 	int		nbuf;
439a747e4fSDavid du Colombier 	Event	e[NEVENT];
449a747e4fSDavid du Colombier 
45*90630c3aSDavid du Colombier 	int		warned;
469a747e4fSDavid du Colombier 	int		id;
479a747e4fSDavid du Colombier 	int		open;
489a747e4fSDavid du Colombier 	Channel	*cevent;	/* chan(Event*) */
499a747e4fSDavid du Colombier };
509a747e4fSDavid du Colombier 
519a747e4fSDavid du Colombier extern	Window*	newwindow(void);
529a747e4fSDavid du Colombier extern	int		winopenfile(Window*, char*);
539a747e4fSDavid du Colombier extern	void		winopenbody(Window*, int);
549a747e4fSDavid du Colombier extern	void		winclosebody(Window*);
559a747e4fSDavid du Colombier extern	void		wintagwrite(Window*, char*, int);
569a747e4fSDavid du Colombier extern	void		winname(Window*, char*);
579a747e4fSDavid du Colombier extern	void		winwriteevent(Window*, Event*);
589a747e4fSDavid du Colombier extern	void		winread(Window*, uint, uint, char*);
599a747e4fSDavid du Colombier extern	int		windel(Window*, int);
609a747e4fSDavid du Colombier extern	void		wingetevent(Window*, Event*);
619a747e4fSDavid du Colombier extern	void		wineventproc(void*);
629a747e4fSDavid du Colombier extern	void		winwritebody(Window*, char*, int);
639a747e4fSDavid du Colombier extern	void		winclean(Window*);
64*90630c3aSDavid du Colombier extern	int		winisdirty(Window*);
659a747e4fSDavid du Colombier extern	int		winselect(Window*, char*, int);
669a747e4fSDavid du Colombier extern	int		winsetaddr(Window*, char*, int);
679a747e4fSDavid du Colombier extern	char*	winreadbody(Window*, int*);
689a747e4fSDavid du Colombier extern	void		windormant(Window*);
699a747e4fSDavid du Colombier extern	void		winsetdump(Window*, char*, char*);
709a747e4fSDavid du Colombier 
719a747e4fSDavid du Colombier extern	char*	readfile(char*, char*, int*);
729a747e4fSDavid du Colombier extern	void		ctlprint(int, char*, ...);
739a747e4fSDavid du Colombier extern	void*	emalloc(uint);
749a747e4fSDavid du Colombier extern	char*	estrdup(char*);
759a747e4fSDavid du Colombier extern	char*	estrstrdup(char*, char*);
769a747e4fSDavid du Colombier extern	char*	egrow(char*, char*, char*);
779a747e4fSDavid du Colombier extern	char*	eappend(char*, char*, char*);
789a747e4fSDavid du Colombier extern	void		error(char*, ...);
799a747e4fSDavid du Colombier extern	int		tokenizec(char*, char**, int, char*);
809a747e4fSDavid du Colombier 
819a747e4fSDavid du Colombier typedef struct Treq Treq;
829a747e4fSDavid du Colombier typedef struct Wiki Wiki;
839a747e4fSDavid du Colombier 
849a747e4fSDavid du Colombier struct Treq {
859a747e4fSDavid du Colombier 	char *title;
869a747e4fSDavid du Colombier 	Channel *c;	/* chan(int) */
879a747e4fSDavid du Colombier };
889a747e4fSDavid du Colombier 
899a747e4fSDavid du Colombier struct Wiki {
909a747e4fSDavid du Colombier 	QLock;
919a747e4fSDavid du Colombier 	int isnew;
929a747e4fSDavid du Colombier 	int special;
939a747e4fSDavid du Colombier 	char *arg;
949a747e4fSDavid du Colombier 	char *addr;
959a747e4fSDavid du Colombier 	int n;
969a747e4fSDavid du Colombier 	int dead;
979a747e4fSDavid du Colombier 	Window *win;
989a747e4fSDavid du Colombier 	ulong time;
999a747e4fSDavid du Colombier 	int linked;
1009a747e4fSDavid du Colombier 	Wiki *next;
1019a747e4fSDavid du Colombier 	Wiki *prev;
1029a747e4fSDavid du Colombier };
1039a747e4fSDavid du Colombier 
1049a747e4fSDavid du Colombier extern int debug;
1059a747e4fSDavid du Colombier extern int mapfd;
1069a747e4fSDavid du Colombier extern char *email;
1079a747e4fSDavid du Colombier extern char *dir;
1089a747e4fSDavid du Colombier 
1099a747e4fSDavid du Colombier void wikinew(char*);
1109a747e4fSDavid du Colombier int wikiopen(char*, char*);
1119a747e4fSDavid du Colombier int wikiput(Wiki*);
1129a747e4fSDavid du Colombier void wikiget(Wiki*);
1139a747e4fSDavid du Colombier int wikidiff(Wiki*);
1149a747e4fSDavid du Colombier 
115