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