xref: /plan9/acme/mail/src/dat.h (revision 853458f38e7eb3a48cfa3a36aefdb799375e398a)
1 typedef struct Event Event;
2 typedef struct Exec Exec;
3 typedef struct Message Message;
4 typedef struct Window Window;
5 
6 enum
7 {
8 	STACK		= 8192,
9 	EVENTSIZE	= 256,
10 	NEVENT		= 5,
11 };
12 
13 struct 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 
26 struct Window
27 {
28 	/* file descriptors */
29 	int		ctl;
30 	int		event;
31 	int		addr;
32 	int		data;
33 	Biobuf	*body;
34 
35 	/* event input */
36 	char		buf[512];
37 	char		*bufp;
38 	int		nbuf;
39 	Event	e[NEVENT];
40 
41 	int		id;
42 	int		open;
43 	Channel	*cevent;
44 };
45 
46 struct Message
47 {
48 	Window	*w;
49 	int		ctlfd;
50 	char		*name;
51 	char		*replyname;
52 	uchar	opened;
53 	uchar	dirty;
54 	uchar	isreply;
55 	uchar	deleted;
56 	uchar	writebackdel;
57 	uchar	tagposted;
58 	uchar	recursed;
59 	uchar	level;
60 
61 	/* header info */
62 	char		*fromcolon;	/* from header file; all rest are from info file */
63 	char		*from;
64 	char		*to;
65 	char		*cc;
66 	char		*replyto;
67 	char		*date;
68 	char		*subject;
69 	char		*type;
70 	char		*disposition;
71 	char		*filename;
72 	char		*digest;
73 
74 	Message	*next;	/* next in this mailbox */
75 	Message	*prev;	/* prev in this mailbox */
76 	Message	*head;	/* first subpart */
77 	Message	*tail;		/* last subpart */
78 };
79 
80 enum
81 {
82 	NARGS		= 100,
83 	NARGCHAR	= 8*1024,
84 	EXECSTACK 	= STACK+(NARGS+1)*sizeof(char*)+NARGCHAR
85 };
86 
87 struct Exec
88 {
89 	char		*prog;
90 	char		**argv;
91 	int		p[2];	/* p[1] is write to program; p[0] set to prog fd 0*/
92 	int		q[2];	/* q[0] is read from program; q[1] set to prog fd 1 */
93 	Channel	*sync;
94 };
95 
96 extern	Window*	newwindow(void);
97 extern	int		winopenfile(Window*, char*);
98 extern	void		winopenbody(Window*, int);
99 extern	void		winclosebody(Window*);
100 extern	void		wintagwrite(Window*, char*, int);
101 extern	void		winname(Window*, char*);
102 extern	void		winwriteevent(Window*, Event*);
103 extern	void		winread(Window*, uint, uint, char*);
104 extern	int		windel(Window*, int);
105 extern	void		wingetevent(Window*, Event*);
106 extern	void		wineventproc(void*);
107 extern	void		winwritebody(Window*, char*, int);
108 extern	void		winclean(Window*);
109 extern	int		winselect(Window*, char*, int);
110 extern	char*	winselection(Window*);
111 extern	int		winsetaddr(Window*, char*, int);
112 extern	char*	winreadbody(Window*, int*);
113 extern	void		windormant(Window*);
114 extern	void		winsetdump(Window*, char*, char*);
115 
116 extern	void		readmbox(Message*, char*, char*);
117 extern	void		rewritembox(Window*, Message*);
118 
119 extern	void		mkreply(Message*, char*, char*, Plumbattr*, char*);
120 extern	void		delreply(Message*);
121 
122 extern	int		mesgadd(Message*, char*, Dir*, char*);
123 extern	void		mesgmenu(Window*, Message*);
124 extern	void		mesgmenunew(Window*, Message*);
125 extern	int		mesgopen(Message*, char*, char*, Message*, int, char*);
126 extern	void		mesgctl(void*);
127 extern	void		mesgsend(Message*);
128 extern	void		mesgdel(Message*, Message*);
129 extern	void		mesgmenudel(Window*, Message*, Message*);
130 extern	void		mesgmenumark(Window*, char*, char*);
131 extern	void		mesgmenumarkdel(Window*, Message*, Message*, int);
132 extern	Message*	mesglookup(Message*, char*, char*);
133 extern	Message*	mesglookupfile(Message*, char*, char*);
134 extern	void		mesgfreeparts(Message*);
135 
136 extern	char*	readfile(char*, char*, int*);
137 extern	char*	readbody(char*, char*, int*);
138 extern	void		ctlprint(int, char*, ...);
139 extern	void*	emalloc(uint);
140 extern	void*	erealloc(void*, uint);
141 extern	char*	estrdup(char*);
142 extern	char*	estrstrdup(char*, char*);
143 extern	char*	egrow(char*, char*, char*);
144 extern	char*	eappend(char*, char*, char*);
145 extern	void		error(char*, ...);
146 extern	int		tokenizec(char*, char**, int, char*);
147 extern	void		execproc(void*);
148 
149 #pragma	varargck	argpos	error	1
150 #pragma	varargck	argpos	ctlprint	2
151 
152 extern	Window	*wbox;
153 extern	Message	mbox;
154 extern	Message	replies;
155 extern	char		*fsname;
156 extern	int		plumbsendfd;
157 extern	int		plumbseemailfd;
158 extern	char		*home;
159 extern	char		*outgoing;
160 extern	char		*mailboxdir;
161 extern	char		*user;
162 extern	char		deleted[];
163 extern	int		wctlfd;
164 extern	int		shortmenu;
165