17dd7cddfSDavid du Colombier typedef struct Event Event; 29a747e4fSDavid du Colombier typedef struct Exec Exec; 37dd7cddfSDavid du Colombier typedef struct Message Message; 47dd7cddfSDavid du Colombier typedef struct Window Window; 57dd7cddfSDavid du Colombier 6219b2ee8SDavid du Colombier enum 7219b2ee8SDavid du Colombier { 87dd7cddfSDavid du Colombier STACK = 8192, 9219b2ee8SDavid du Colombier EVENTSIZE = 256, 107dd7cddfSDavid du Colombier NEVENT = 5, 11219b2ee8SDavid du Colombier }; 12219b2ee8SDavid du Colombier 137dd7cddfSDavid du Colombier struct Event 14219b2ee8SDavid du Colombier { 15219b2ee8SDavid du Colombier int c1; 16219b2ee8SDavid du Colombier int c2; 17219b2ee8SDavid du Colombier int q0; 18219b2ee8SDavid du Colombier int q1; 19219b2ee8SDavid du Colombier int flag; 20219b2ee8SDavid du Colombier int nb; 21219b2ee8SDavid du Colombier int nr; 227dd7cddfSDavid du Colombier char b[EVENTSIZE*UTFmax+1]; 23219b2ee8SDavid du Colombier Rune r[EVENTSIZE+1]; 24219b2ee8SDavid du Colombier }; 25219b2ee8SDavid du Colombier 267dd7cddfSDavid du Colombier struct Window 277dd7cddfSDavid du Colombier { 287dd7cddfSDavid du Colombier /* file descriptors */ 297dd7cddfSDavid du Colombier int ctl; 307dd7cddfSDavid du Colombier int event; 317dd7cddfSDavid du Colombier int addr; 327dd7cddfSDavid du Colombier int data; 337dd7cddfSDavid du Colombier Biobuf *body; 347dd7cddfSDavid du Colombier 357dd7cddfSDavid du Colombier /* event input */ 367dd7cddfSDavid du Colombier char buf[512]; 377dd7cddfSDavid du Colombier char *bufp; 387dd7cddfSDavid du Colombier int nbuf; 397dd7cddfSDavid du Colombier Event e[NEVENT]; 407dd7cddfSDavid du Colombier 417dd7cddfSDavid du Colombier int id; 427dd7cddfSDavid du Colombier int open; 437dd7cddfSDavid du Colombier Channel *cevent; 447dd7cddfSDavid du Colombier }; 457dd7cddfSDavid du Colombier 467dd7cddfSDavid du Colombier struct Message 477dd7cddfSDavid du Colombier { 487dd7cddfSDavid du Colombier Window *w; 497dd7cddfSDavid du Colombier int ctlfd; 507dd7cddfSDavid du Colombier char *name; 517dd7cddfSDavid du Colombier char *replyname; 527dd7cddfSDavid du Colombier uchar opened; 537dd7cddfSDavid du Colombier uchar dirty; 547dd7cddfSDavid du Colombier uchar isreply; 557dd7cddfSDavid du Colombier uchar deleted; 567dd7cddfSDavid du Colombier uchar writebackdel; 577dd7cddfSDavid du Colombier uchar tagposted; 589a747e4fSDavid du Colombier uchar recursed; 599a747e4fSDavid du Colombier uchar level; 607dd7cddfSDavid du Colombier 617dd7cddfSDavid du Colombier /* header info */ 627dd7cddfSDavid du Colombier char *fromcolon; /* from header file; all rest are from info file */ 637dd7cddfSDavid du Colombier char *from; 647dd7cddfSDavid du Colombier char *to; 657dd7cddfSDavid du Colombier char *cc; 667dd7cddfSDavid du Colombier char *replyto; 677dd7cddfSDavid du Colombier char *date; 687dd7cddfSDavid du Colombier char *subject; 697dd7cddfSDavid du Colombier char *type; 707dd7cddfSDavid du Colombier char *disposition; 717dd7cddfSDavid du Colombier char *filename; 727dd7cddfSDavid du Colombier char *digest; 737dd7cddfSDavid du Colombier 747dd7cddfSDavid du Colombier Message *next; /* next in this mailbox */ 757dd7cddfSDavid du Colombier Message *prev; /* prev in this mailbox */ 767dd7cddfSDavid du Colombier Message *head; /* first subpart */ 777dd7cddfSDavid du Colombier Message *tail; /* last subpart */ 787dd7cddfSDavid du Colombier }; 797dd7cddfSDavid du Colombier 809a747e4fSDavid du Colombier enum 819a747e4fSDavid du Colombier { 829a747e4fSDavid du Colombier NARGS = 100, 839a747e4fSDavid du Colombier NARGCHAR = 8*1024, 849a747e4fSDavid du Colombier EXECSTACK = STACK+(NARGS+1)*sizeof(char*)+NARGCHAR 859a747e4fSDavid du Colombier }; 869a747e4fSDavid du Colombier 879a747e4fSDavid du Colombier struct Exec 889a747e4fSDavid du Colombier { 899a747e4fSDavid du Colombier char *prog; 909a747e4fSDavid du Colombier char **argv; 919a747e4fSDavid du Colombier int p[2]; /* p[1] is write to program; p[0] set to prog fd 0*/ 929a747e4fSDavid du Colombier int q[2]; /* q[0] is read from program; q[1] set to prog fd 1 */ 939a747e4fSDavid du Colombier Channel *sync; 949a747e4fSDavid du Colombier }; 959a747e4fSDavid du Colombier 967dd7cddfSDavid du Colombier extern Window* newwindow(void); 977dd7cddfSDavid du Colombier extern int winopenfile(Window*, char*); 987dd7cddfSDavid du Colombier extern void winopenbody(Window*, int); 997dd7cddfSDavid du Colombier extern void winclosebody(Window*); 1007dd7cddfSDavid du Colombier extern void wintagwrite(Window*, char*, int); 1017dd7cddfSDavid du Colombier extern void winname(Window*, char*); 1027dd7cddfSDavid du Colombier extern void winwriteevent(Window*, Event*); 1037dd7cddfSDavid du Colombier extern void winread(Window*, uint, uint, char*); 1047dd7cddfSDavid du Colombier extern int windel(Window*, int); 1057dd7cddfSDavid du Colombier extern void wingetevent(Window*, Event*); 1067dd7cddfSDavid du Colombier extern void wineventproc(void*); 1077dd7cddfSDavid du Colombier extern void winwritebody(Window*, char*, int); 1087dd7cddfSDavid du Colombier extern void winclean(Window*); 1097dd7cddfSDavid du Colombier extern int winselect(Window*, char*, int); 1109a747e4fSDavid du Colombier extern char* winselection(Window*); 1117dd7cddfSDavid du Colombier extern int winsetaddr(Window*, char*, int); 1127dd7cddfSDavid du Colombier extern char* winreadbody(Window*, int*); 1137dd7cddfSDavid du Colombier extern void windormant(Window*); 1147dd7cddfSDavid du Colombier extern void winsetdump(Window*, char*, char*); 1157dd7cddfSDavid du Colombier 1167dd7cddfSDavid du Colombier extern void readmbox(Message*, char*, char*); 1177dd7cddfSDavid du Colombier extern void rewritembox(Window*, Message*); 1187dd7cddfSDavid du Colombier 119*d9306527SDavid du Colombier extern void mkreply(Message*, char*, char*, Plumbattr*, char*); 1207dd7cddfSDavid du Colombier extern void delreply(Message*); 1217dd7cddfSDavid du Colombier 1227dd7cddfSDavid du Colombier extern int mesgadd(Message*, char*, Dir*, char*); 1237dd7cddfSDavid du Colombier extern void mesgmenu(Window*, Message*); 1247dd7cddfSDavid du Colombier extern void mesgmenunew(Window*, Message*); 1257dd7cddfSDavid du Colombier extern int mesgopen(Message*, char*, char*, Message*, int, char*); 1267dd7cddfSDavid du Colombier extern void mesgctl(void*); 1277dd7cddfSDavid du Colombier extern void mesgsend(Message*); 1287dd7cddfSDavid du Colombier extern void mesgdel(Message*, Message*); 1297dd7cddfSDavid du Colombier extern void mesgmenudel(Window*, Message*, Message*); 1307dd7cddfSDavid du Colombier extern void mesgmenumark(Window*, char*, char*); 1317dd7cddfSDavid du Colombier extern void mesgmenumarkdel(Window*, Message*, Message*, int); 1327dd7cddfSDavid du Colombier extern Message* mesglookup(Message*, char*, char*); 1337dd7cddfSDavid du Colombier extern Message* mesglookupfile(Message*, char*, char*); 1347dd7cddfSDavid du Colombier extern void mesgfreeparts(Message*); 1357dd7cddfSDavid du Colombier 1367dd7cddfSDavid du Colombier extern char* readfile(char*, char*, int*); 1379a747e4fSDavid du Colombier extern char* readbody(char*, char*, int*); 1387dd7cddfSDavid du Colombier extern void ctlprint(int, char*, ...); 1397dd7cddfSDavid du Colombier extern void* emalloc(uint); 1409a747e4fSDavid du Colombier extern void* erealloc(void*, uint); 1417dd7cddfSDavid du Colombier extern char* estrdup(char*); 1427dd7cddfSDavid du Colombier extern char* estrstrdup(char*, char*); 1437dd7cddfSDavid du Colombier extern char* egrow(char*, char*, char*); 1447dd7cddfSDavid du Colombier extern char* eappend(char*, char*, char*); 1457dd7cddfSDavid du Colombier extern void error(char*, ...); 1467dd7cddfSDavid du Colombier extern int tokenizec(char*, char**, int, char*); 1479a747e4fSDavid du Colombier extern void execproc(void*); 1487dd7cddfSDavid du Colombier 1497dd7cddfSDavid du Colombier #pragma varargck argpos error 1 1507dd7cddfSDavid du Colombier #pragma varargck argpos ctlprint 2 1517dd7cddfSDavid du Colombier 1527dd7cddfSDavid du Colombier extern Window *wbox; 1537dd7cddfSDavid du Colombier extern Message mbox; 1547dd7cddfSDavid du Colombier extern Message replies; 15580ee5cbfSDavid du Colombier extern char *fsname; 1567dd7cddfSDavid du Colombier extern int plumbsendfd; 1577dd7cddfSDavid du Colombier extern int plumbseemailfd; 1587dd7cddfSDavid du Colombier extern char *home; 1599a747e4fSDavid du Colombier extern char *outgoing; 1607dd7cddfSDavid du Colombier extern char *mailboxdir; 1619a747e4fSDavid du Colombier extern char *user; 1627dd7cddfSDavid du Colombier extern char deleted[]; 1637dd7cddfSDavid du Colombier extern int wctlfd; 1649a747e4fSDavid du Colombier extern int shortmenu; 165