Blob


1 typedef struct Event Event;
2 typedef struct Exec Exec;
3 typedef struct Message Message;
4 typedef struct Window Window;
6 enum
7 {
8 STACK = 8192,
9 EVENTSIZE = 256,
10 NEVENT = 5
11 };
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 };
26 struct Window
27 {
28 /* coordinate wineventproc and window thread */
29 QLock lk;
30 int ref;
32 /* file descriptors */
33 CFid* ctl;
34 CFid* event;
35 CFid* addr;
36 CFid* data;
37 CFid* body;
39 /* event input */
40 char buf[512];
41 char *bufp;
42 int nbuf;
43 Event e[NEVENT];
45 int id;
46 int open;
47 Channel *cevent;
48 };
50 struct 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;
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;
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 };
86 enum
87 {
88 NARGS = 100,
89 NARGCHAR = 8*1024,
90 EXECSTACK = STACK+(NARGS+1)*sizeof(char*)+NARGCHAR
91 };
93 struct 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 };
102 extern Window* newwindow(void);
103 extern CFid* winopenfile(Window*, char*);
104 extern void winopenbody(Window*, int);
105 extern void winclosebody(Window*);
106 extern void wintagwrite(Window*, char*, int);
107 extern void winname(Window*, char*);
108 extern void winwriteevent(Window*, Event*);
109 extern void winread(Window*, uint, uint, char*);
110 extern int windel(Window*, int);
111 extern void wingetevent(Window*, Event*);
112 extern void wineventproc(void*);
113 extern void winwritebody(Window*, char*, int);
114 extern void winclean(Window*);
115 extern int winselect(Window*, char*, int);
116 extern char* winselection(Window*);
117 extern int winsetaddr(Window*, char*, int);
118 extern char* winreadbody(Window*, int*);
119 extern void windormant(Window*);
120 extern void winsetdump(Window*, char*, char*);
121 extern void winincref(Window*);
122 extern void windecref(Window*);
124 extern void readmbox(Message*, char*, char*);
125 extern void rewritembox(Window*, Message*);
127 extern void mkreply(Message*, char*, char*, Plumbattr*, char*);
128 extern void delreply(Message*);
130 extern int mesgadd(Message*, char*, Dir*, char*);
131 extern void mesgmenu(Window*, Message*);
132 extern void mesgmenunew(Window*, Message*);
133 extern int mesgopen(Message*, char*, char*, Message*, int, char*);
134 extern void mesgctl(void*);
135 extern void mesgsend(Message*);
136 extern void mesgdel(Message*, Message*);
137 extern void mesgmenudel(Window*, Message*, Message*);
138 extern void mesgmenumark(Window*, char*, char*);
139 extern void mesgmenumarkdel(Window*, Message*, Message*, int);
140 extern Message* mesglookup(Message*, char*, char*);
141 extern Message* mesglookupfile(Message*, char*, char*);
142 extern void mesgfreeparts(Message*);
143 extern int mesgcommand(Message*, char*);
145 extern char* info(Message*, int, int);
146 extern char* readfile(char*, char*, int*);
147 extern char* readbody(char*, char*, int*);
148 extern void ctlprint(CFid*, char*, ...);
149 extern void* emalloc(uint);
150 extern void* erealloc(void*, uint);
151 extern char* estrdup(char*);
152 extern char* estrstrdup(char*, char*);
153 extern char* egrow(char*, char*, char*);
154 extern char* eappend(char*, char*, char*);
155 extern void error(char*, ...);
156 extern int tokenizec(char*, char**, int, char*);
157 extern void execproc(void*);
158 extern int fsprint(CFid*, char*, ...);
160 #pragma varargck argpos error 1
161 #pragma varargck argpos ctlprint 2
163 extern Window *wbox;
164 extern Message mbox;
165 extern Message replies;
166 extern char *fsname;
167 extern CFid *plumbsendfd;
168 extern CFid *plumbseemailfd;
169 extern char *home;
170 extern char *outgoing;
171 extern char *mailboxdir;
172 extern char *mboxname;
173 extern char *user;
174 extern char *srvname;
175 extern char deleted[];
176 extern int wctlfd;
177 extern int shortmenu;
179 extern CFsys *mailfs;
180 extern CFsys *acmefs;