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 /* file descriptors */
29 CFid* ctl;
30 CFid* event;
31 CFid* addr;
32 CFid* data;
33 CFid* body;
35 /* event input */
36 char buf[512];
37 char *bufp;
38 int nbuf;
39 Event e[NEVENT];
41 int id;
42 int open;
43 Channel *cevent;
44 };
46 struct Message
47 {
48 Window *w;
49 CFid* 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;
61 /* header info */
62 char *from;
63 char *to;
64 char *cc;
65 char *replyto;
66 char *date;
67 char *subject;
68 char *type;
69 char *disposition;
70 char *filename;
71 char *digest;
73 Message *next; /* next in this mailbox */
74 Message *prev; /* prev in this mailbox */
75 Message *head; /* first subpart */
76 Message *tail; /* last subpart */
77 };
79 enum
80 {
81 NARGS = 100,
82 NARGCHAR = 8*1024,
83 EXECSTACK = STACK+(NARGS+1)*sizeof(char*)+NARGCHAR
84 };
86 struct Exec
87 {
88 char *prog;
89 char **argv;
90 int p[2]; /* p[1] is write to program; p[0] set to prog fd 0*/
91 int q[2]; /* q[0] is read from program; q[1] set to prog fd 1 */
92 Channel *sync;
93 };
95 extern Window* newwindow(void);
96 extern CFid* winopenfile(Window*, char*);
97 extern void winopenbody(Window*, int);
98 extern void winclosebody(Window*);
99 extern void wintagwrite(Window*, char*, int);
100 extern void winname(Window*, char*);
101 extern void winwriteevent(Window*, Event*);
102 extern void winread(Window*, uint, uint, char*);
103 extern int windel(Window*, int);
104 extern void wingetevent(Window*, Event*);
105 extern void wineventproc(void*);
106 extern void winwritebody(Window*, char*, int);
107 extern void winclean(Window*);
108 extern int winselect(Window*, char*, int);
109 extern char* winselection(Window*);
110 extern int winsetaddr(Window*, char*, int);
111 extern char* winreadbody(Window*, int*);
112 extern void windormant(Window*);
113 extern void winsetdump(Window*, char*, char*);
115 extern void readmbox(Message*, char*, char*);
116 extern void rewritembox(Window*, Message*);
118 extern void mkreply(Message*, char*, char*, Plumbattr*, char*);
119 extern void delreply(Message*);
121 extern int mesgadd(Message*, char*, Dir*, char*);
122 extern void mesgmenu(Window*, Message*);
123 extern void mesgmenunew(Window*, Message*);
124 extern int mesgopen(Message*, char*, char*, Message*, int, char*);
125 extern void mesgctl(void*);
126 extern void mesgsend(Message*);
127 extern void mesgdel(Message*, Message*);
128 extern void mesgmenudel(Window*, Message*, Message*);
129 extern void mesgmenumark(Window*, char*, char*);
130 extern void mesgmenumarkdel(Window*, Message*, Message*, int);
131 extern Message* mesglookup(Message*, char*, char*);
132 extern Message* mesglookupfile(Message*, char*, char*);
133 extern void mesgfreeparts(Message*);
135 extern char* readfile(char*, char*, int*);
136 extern char* readbody(char*, char*, int*);
137 extern void ctlprint(CFid*, char*, ...);
138 extern void* emalloc(uint);
139 extern void* erealloc(void*, uint);
140 extern char* estrdup(char*);
141 extern char* estrstrdup(char*, char*);
142 extern char* egrow(char*, char*, char*);
143 extern char* eappend(char*, char*, char*);
144 extern void error(char*, ...);
145 extern int tokenizec(char*, char**, int, char*);
146 extern void execproc(void*);
147 extern int fsprint(CFid*, char*, ...);
149 #pragma varargck argpos error 1
150 #pragma varargck argpos ctlprint 2
152 extern Window *wbox;
153 extern Message mbox;
154 extern Message replies;
155 extern char *fsname;
156 extern CFid *plumbsendfd;
157 extern CFid *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;
166 extern CFsys *mailfs;
167 extern CFsys *acmefs;