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