xref: /plan9/acme/mail/src/dat.h (revision 853458f38e7eb3a48cfa3a36aefdb799375e398a)
17dd7cddfSDavid du Colombier typedef struct Event Event;
29a747e4fSDavid du Colombier typedef struct Exec Exec;
37dd7cddfSDavid du Colombier typedef struct Message Message;
47dd7cddfSDavid du Colombier typedef struct Window Window;
57dd7cddfSDavid du Colombier 
6219b2ee8SDavid du Colombier enum
7219b2ee8SDavid du Colombier {
87dd7cddfSDavid du Colombier 	STACK		= 8192,
9219b2ee8SDavid du Colombier 	EVENTSIZE	= 256,
107dd7cddfSDavid du Colombier 	NEVENT		= 5,
11219b2ee8SDavid du Colombier };
12219b2ee8SDavid du Colombier 
137dd7cddfSDavid du Colombier struct Event
14219b2ee8SDavid du Colombier {
15219b2ee8SDavid du Colombier 	int	c1;
16219b2ee8SDavid du Colombier 	int	c2;
17219b2ee8SDavid du Colombier 	int	q0;
18219b2ee8SDavid du Colombier 	int	q1;
19219b2ee8SDavid du Colombier 	int	flag;
20219b2ee8SDavid du Colombier 	int	nb;
21219b2ee8SDavid du Colombier 	int	nr;
227dd7cddfSDavid du Colombier 	char	b[EVENTSIZE*UTFmax+1];
23219b2ee8SDavid du Colombier 	Rune	r[EVENTSIZE+1];
24219b2ee8SDavid du Colombier };
25219b2ee8SDavid du Colombier 
267dd7cddfSDavid du Colombier struct Window
277dd7cddfSDavid du Colombier {
287dd7cddfSDavid du Colombier 	/* file descriptors */
297dd7cddfSDavid du Colombier 	int		ctl;
307dd7cddfSDavid du Colombier 	int		event;
317dd7cddfSDavid du Colombier 	int		addr;
327dd7cddfSDavid du Colombier 	int		data;
337dd7cddfSDavid du Colombier 	Biobuf	*body;
347dd7cddfSDavid du Colombier 
357dd7cddfSDavid du Colombier 	/* event input */
367dd7cddfSDavid du Colombier 	char		buf[512];
377dd7cddfSDavid du Colombier 	char		*bufp;
387dd7cddfSDavid du Colombier 	int		nbuf;
397dd7cddfSDavid du Colombier 	Event	e[NEVENT];
407dd7cddfSDavid du Colombier 
417dd7cddfSDavid du Colombier 	int		id;
427dd7cddfSDavid du Colombier 	int		open;
437dd7cddfSDavid du Colombier 	Channel	*cevent;
447dd7cddfSDavid du Colombier };
457dd7cddfSDavid du Colombier 
467dd7cddfSDavid du Colombier struct Message
477dd7cddfSDavid du Colombier {
487dd7cddfSDavid du Colombier 	Window	*w;
497dd7cddfSDavid du Colombier 	int		ctlfd;
507dd7cddfSDavid du Colombier 	char		*name;
517dd7cddfSDavid du Colombier 	char		*replyname;
527dd7cddfSDavid du Colombier 	uchar	opened;
537dd7cddfSDavid du Colombier 	uchar	dirty;
547dd7cddfSDavid du Colombier 	uchar	isreply;
557dd7cddfSDavid du Colombier 	uchar	deleted;
567dd7cddfSDavid du Colombier 	uchar	writebackdel;
577dd7cddfSDavid du Colombier 	uchar	tagposted;
589a747e4fSDavid du Colombier 	uchar	recursed;
599a747e4fSDavid du Colombier 	uchar	level;
607dd7cddfSDavid du Colombier 
617dd7cddfSDavid du Colombier 	/* header info */
627dd7cddfSDavid du Colombier 	char		*fromcolon;	/* from header file; all rest are from info file */
637dd7cddfSDavid du Colombier 	char		*from;
647dd7cddfSDavid du Colombier 	char		*to;
657dd7cddfSDavid du Colombier 	char		*cc;
667dd7cddfSDavid du Colombier 	char		*replyto;
677dd7cddfSDavid du Colombier 	char		*date;
687dd7cddfSDavid du Colombier 	char		*subject;
697dd7cddfSDavid du Colombier 	char		*type;
707dd7cddfSDavid du Colombier 	char		*disposition;
717dd7cddfSDavid du Colombier 	char		*filename;
727dd7cddfSDavid du Colombier 	char		*digest;
737dd7cddfSDavid du Colombier 
747dd7cddfSDavid du Colombier 	Message	*next;	/* next in this mailbox */
757dd7cddfSDavid du Colombier 	Message	*prev;	/* prev in this mailbox */
767dd7cddfSDavid du Colombier 	Message	*head;	/* first subpart */
777dd7cddfSDavid du Colombier 	Message	*tail;		/* last subpart */
787dd7cddfSDavid du Colombier };
797dd7cddfSDavid du Colombier 
809a747e4fSDavid du Colombier enum
819a747e4fSDavid du Colombier {
829a747e4fSDavid du Colombier 	NARGS		= 100,
839a747e4fSDavid du Colombier 	NARGCHAR	= 8*1024,
849a747e4fSDavid du Colombier 	EXECSTACK 	= STACK+(NARGS+1)*sizeof(char*)+NARGCHAR
859a747e4fSDavid du Colombier };
869a747e4fSDavid du Colombier 
879a747e4fSDavid du Colombier struct Exec
889a747e4fSDavid du Colombier {
899a747e4fSDavid du Colombier 	char		*prog;
909a747e4fSDavid du Colombier 	char		**argv;
919a747e4fSDavid du Colombier 	int		p[2];	/* p[1] is write to program; p[0] set to prog fd 0*/
929a747e4fSDavid du Colombier 	int		q[2];	/* q[0] is read from program; q[1] set to prog fd 1 */
939a747e4fSDavid du Colombier 	Channel	*sync;
949a747e4fSDavid du Colombier };
959a747e4fSDavid du Colombier 
967dd7cddfSDavid du Colombier extern	Window*	newwindow(void);
977dd7cddfSDavid du Colombier extern	int		winopenfile(Window*, char*);
987dd7cddfSDavid du Colombier extern	void		winopenbody(Window*, int);
997dd7cddfSDavid du Colombier extern	void		winclosebody(Window*);
1007dd7cddfSDavid du Colombier extern	void		wintagwrite(Window*, char*, int);
1017dd7cddfSDavid du Colombier extern	void		winname(Window*, char*);
1027dd7cddfSDavid du Colombier extern	void		winwriteevent(Window*, Event*);
1037dd7cddfSDavid du Colombier extern	void		winread(Window*, uint, uint, char*);
1047dd7cddfSDavid du Colombier extern	int		windel(Window*, int);
1057dd7cddfSDavid du Colombier extern	void		wingetevent(Window*, Event*);
1067dd7cddfSDavid du Colombier extern	void		wineventproc(void*);
1077dd7cddfSDavid du Colombier extern	void		winwritebody(Window*, char*, int);
1087dd7cddfSDavid du Colombier extern	void		winclean(Window*);
1097dd7cddfSDavid du Colombier extern	int		winselect(Window*, char*, int);
1109a747e4fSDavid du Colombier extern	char*	winselection(Window*);
1117dd7cddfSDavid du Colombier extern	int		winsetaddr(Window*, char*, int);
1127dd7cddfSDavid du Colombier extern	char*	winreadbody(Window*, int*);
1137dd7cddfSDavid du Colombier extern	void		windormant(Window*);
1147dd7cddfSDavid du Colombier extern	void		winsetdump(Window*, char*, char*);
1157dd7cddfSDavid du Colombier 
1167dd7cddfSDavid du Colombier extern	void		readmbox(Message*, char*, char*);
1177dd7cddfSDavid du Colombier extern	void		rewritembox(Window*, Message*);
1187dd7cddfSDavid du Colombier 
119*d9306527SDavid du Colombier extern	void		mkreply(Message*, char*, char*, Plumbattr*, char*);
1207dd7cddfSDavid du Colombier extern	void		delreply(Message*);
1217dd7cddfSDavid du Colombier 
1227dd7cddfSDavid du Colombier extern	int		mesgadd(Message*, char*, Dir*, char*);
1237dd7cddfSDavid du Colombier extern	void		mesgmenu(Window*, Message*);
1247dd7cddfSDavid du Colombier extern	void		mesgmenunew(Window*, Message*);
1257dd7cddfSDavid du Colombier extern	int		mesgopen(Message*, char*, char*, Message*, int, char*);
1267dd7cddfSDavid du Colombier extern	void		mesgctl(void*);
1277dd7cddfSDavid du Colombier extern	void		mesgsend(Message*);
1287dd7cddfSDavid du Colombier extern	void		mesgdel(Message*, Message*);
1297dd7cddfSDavid du Colombier extern	void		mesgmenudel(Window*, Message*, Message*);
1307dd7cddfSDavid du Colombier extern	void		mesgmenumark(Window*, char*, char*);
1317dd7cddfSDavid du Colombier extern	void		mesgmenumarkdel(Window*, Message*, Message*, int);
1327dd7cddfSDavid du Colombier extern	Message*	mesglookup(Message*, char*, char*);
1337dd7cddfSDavid du Colombier extern	Message*	mesglookupfile(Message*, char*, char*);
1347dd7cddfSDavid du Colombier extern	void		mesgfreeparts(Message*);
1357dd7cddfSDavid du Colombier 
1367dd7cddfSDavid du Colombier extern	char*	readfile(char*, char*, int*);
1379a747e4fSDavid du Colombier extern	char*	readbody(char*, char*, int*);
1387dd7cddfSDavid du Colombier extern	void		ctlprint(int, char*, ...);
1397dd7cddfSDavid du Colombier extern	void*	emalloc(uint);
1409a747e4fSDavid du Colombier extern	void*	erealloc(void*, uint);
1417dd7cddfSDavid du Colombier extern	char*	estrdup(char*);
1427dd7cddfSDavid du Colombier extern	char*	estrstrdup(char*, char*);
1437dd7cddfSDavid du Colombier extern	char*	egrow(char*, char*, char*);
1447dd7cddfSDavid du Colombier extern	char*	eappend(char*, char*, char*);
1457dd7cddfSDavid du Colombier extern	void		error(char*, ...);
1467dd7cddfSDavid du Colombier extern	int		tokenizec(char*, char**, int, char*);
1479a747e4fSDavid du Colombier extern	void		execproc(void*);
1487dd7cddfSDavid du Colombier 
1497dd7cddfSDavid du Colombier #pragma	varargck	argpos	error	1
1507dd7cddfSDavid du Colombier #pragma	varargck	argpos	ctlprint	2
1517dd7cddfSDavid du Colombier 
1527dd7cddfSDavid du Colombier extern	Window	*wbox;
1537dd7cddfSDavid du Colombier extern	Message	mbox;
1547dd7cddfSDavid du Colombier extern	Message	replies;
15580ee5cbfSDavid du Colombier extern	char		*fsname;
1567dd7cddfSDavid du Colombier extern	int		plumbsendfd;
1577dd7cddfSDavid du Colombier extern	int		plumbseemailfd;
1587dd7cddfSDavid du Colombier extern	char		*home;
1599a747e4fSDavid du Colombier extern	char		*outgoing;
1607dd7cddfSDavid du Colombier extern	char		*mailboxdir;
1619a747e4fSDavid du Colombier extern	char		*user;
1627dd7cddfSDavid du Colombier extern	char		deleted[];
1637dd7cddfSDavid du Colombier extern	int		wctlfd;
1649a747e4fSDavid du Colombier extern	int		shortmenu;
165