master ohmu/acme2k / src / cmd / acme / mail / dat.h
ohmu  ·  2026-09-21
  1typedef struct Event Event;
  2typedef struct Exec Exec;
  3typedef struct Message Message;
  4typedef struct Window Window;
  5
  6enum
  7{
  8	STACK		= 8192,
  9	EVENTSIZE	= 256,
 10	NEVENT		= 5
 11};
 12
 13struct Event
 14{
 15	int	c1;
 16	int	c2;
 17	int	q0;
 18	int	q1;
 19	int	flag;
 20	int	nb;
 21	int	nr;
 22	char	b[EVENTSIZE*UTFmax+1];
 23	Rune	r[EVENTSIZE+1];
 24};
 25
 26struct Window
 27{
 28	/* coordinate wineventproc and window thread */
 29	QLock	lk;
 30	int		ref;
 31
 32	/* file descriptors */
 33	CFid*		ctl;
 34	CFid*		event;
 35	CFid*		addr;
 36	CFid*		data;
 37	CFid*		body;
 38
 39	/* event input */
 40	char		buf[512];
 41	char		*bufp;
 42	int		nbuf;
 43	Event	e[NEVENT];
 44
 45	int		id;
 46	int		open;
 47	Channel	*cevent;
 48};
 49
 50struct Message
 51{
 52	Window	*w;
 53	CFid*	ctlfd;
 54	char		*name;
 55	char		*replyname;
 56	uchar	opened;
 57	uchar	dirty;
 58	uchar	isreply;
 59	uchar	deleted;
 60	uchar	writebackdel;
 61	uchar	tagposted;
 62	uchar	recursed;
 63	uchar	level;
 64	uint		replywinid;
 65
 66	/* header info */
 67	char		*from;
 68	char		*fromcolon;
 69	char		*to;
 70	char		*cc;
 71	char		*replyto;
 72	char		*sender;
 73	char		*date;
 74	char		*subject;
 75	char		*type;
 76	char		*disposition;
 77	char		*filename;
 78	char		*digest;
 79
 80	Message	*next;	/* next in this mailbox */
 81	Message	*prev;	/* prev in this mailbox */
 82	Message	*head;	/* first subpart */
 83	Message	*tail;		/* last subpart */
 84};
 85
 86enum
 87{
 88	NARGS		= 100,
 89	NARGCHAR	= 8*1024,
 90	EXECSTACK 	= STACK+(NARGS+1)*sizeof(char*)+NARGCHAR
 91};
 92
 93struct Exec
 94{
 95	char		*prog;
 96	char		**argv;
 97	int		p[2];	/* p[1] is write to program; p[0] set to prog fd 0*/
 98	int		q[2];	/* q[0] is read from program; q[1] set to prog fd 1 */
 99	Channel	*sync;
100};
101
102extern	Window*	newwindow(void);
103extern	CFid*	winopenfile(Window*, char*);
104extern	void		winopenbody(Window*, int);
105extern	void		winclosebody(Window*);
106extern	void		wintagwrite(Window*, char*, int);
107extern	void		winname(Window*, char*);
108extern	void		winwriteevent(Window*, Event*);
109extern	void		winread(Window*, uint, uint, char*);
110extern	int		windel(Window*, int);
111extern	void		wingetevent(Window*, Event*);
112extern	void		wineventproc(void*);
113extern	void		winwritebody(Window*, char*, int);
114extern	void		winclean(Window*);
115extern	int		winselect(Window*, char*, int);
116extern	char*	winselection(Window*);
117extern	int		winsetaddr(Window*, char*, int);
118extern	char*	winreadbody(Window*, int*);
119extern	void		windormant(Window*);
120extern	void		winsetdump(Window*, char*, char*);
121extern	void		winincref(Window*);
122extern	void		windecref(Window*);
123
124extern	void		readmbox(Message*, char*, char*);
125extern	void		rewritembox(Window*, Message*);
126
127extern	void		mkreply(Message*, char*, char*, Plumbattr*, char*);
128extern	void		delreply(Message*);
129
130extern	int		mesgadd(Message*, char*, Dir*, char*);
131extern	void		mesgmenu(Window*, Message*);
132extern	void		mesgmenunew(Window*, Message*);
133extern	int		mesgopen(Message*, char*, char*, Message*, int, char*);
134extern	void		mesgctl(void*);
135extern	void		mesgsend(Message*);
136extern	void		mesgdel(Message*, Message*);
137extern	void		mesgmenudel(Window*, Message*, Message*);
138extern	void		mesgmenumark(Window*, char*, char*);
139extern	void		mesgmenumarkdel(Window*, Message*, Message*, int);
140extern	Message*	mesglookup(Message*, char*, char*);
141extern	Message*	mesglookupfile(Message*, char*, char*);
142extern	void		mesgfreeparts(Message*);
143extern	int		mesgcommand(Message*, char*);
144
145extern	char*	info(Message*, int, int);
146extern	char*	readfile(char*, char*, int*);
147extern	char*	readbody(char*, char*, int*);
148extern	void		ctlprint(CFid*, char*, ...);
149extern	void*	emalloc(uint);
150extern	void*	erealloc(void*, uint);
151extern	char*	estrdup(char*);
152extern	char*	estrstrdup(char*, char*);
153extern	char*	egrow(char*, char*, char*);
154extern	char*	eappend(char*, char*, char*);
155extern	void		error(char*, ...);
156extern	int		tokenizec(char*, char**, int, char*);
157extern	void		execproc(void*);
158extern	int		fsprint(CFid*, char*, ...);
159
160#pragma	varargck	argpos	error	1
161#pragma	varargck	argpos	ctlprint	2
162
163extern	Window	*wbox;
164extern	Message	mbox;
165extern	Message	replies;
166extern	char		*fsname;
167extern	CFid		*plumbsendfd;
168extern	CFid		*plumbseemailfd;
169extern	char		*mailhome;
170extern	char		*outgoing;
171extern	char		*mailboxdir;
172extern	char		*mboxname;
173extern	char		*user;
174extern	char		*srvname;
175extern	char		deleted[];
176extern	int		wctlfd;
177extern	int		shortmenu;
178
179extern	CFsys	*mailfs;
180extern	CFsys	*acmefs;
181