]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/upas/Mail/dat.h
upas/fs: fix more locking bugs, remove debugging clutter, remove planb mbox code
[plan9front.git] / sys / src / cmd / upas / Mail / dat.h
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 extern  int             write2(int, int, char*, int, int);
122
123 extern  int             mesgadd(Message*, char*, Dir*, char*);
124 extern  void            mesgmenu(Window*, Message*);
125 extern  void            mesgmenunew(Window*, Message*);
126 extern  int             mesgopen(Message*, char*, char*, Message*, int, char*);
127 extern  void            mesgctl(void*);
128 extern  void            mesgsend(Message*);
129 extern  void            mesgdel(Message*, Message*);
130 extern  void            mesgmenudel(Window*, Message*, Message*);
131 extern  void            mesgmenumark(Window*, char*, char*);
132 extern  void            mesgmenumarkdel(Window*, Message*, Message*, int);
133 extern  Message*        mesglookup(Message*, char*, char*);
134 extern  Message*        mesglookupfile(Message*, char*, char*);
135 extern  void            mesgfreeparts(Message*);
136
137 extern  char*   readfile(char*, char*, int*);
138 extern  char*   readbody(char*, char*, int*);
139 extern  void            ctlprint(int, char*, ...);
140 extern  void*   emalloc(uint);
141 extern  void*   erealloc(void*, uint);
142 extern  char*   estrdup(char*);
143 extern  char*   estrstrdup(char*, char*);
144 extern  char*   egrow(char*, char*, char*);
145 extern  char*   eappend(char*, char*, char*);
146 extern  void            error(char*, ...);
147 extern  int             tokenizec(char*, char**, int, char*);
148 extern  void            execproc(void*);
149
150 #pragma varargck        argpos  error   1
151 #pragma varargck        argpos  ctlprint        2
152
153 extern  Window  *wbox;
154 extern  Message mbox;
155 extern  Message replies;
156 extern  char            *fsname;
157 extern  int             plumbsendfd;
158 extern  int             plumbseemailfd;
159 extern  char            *home;
160 extern  char            *outgoing;
161 extern  char            *mailboxdir;
162 extern  char            *user;
163 extern  char            deleted[];
164 extern  int             wctlfd;
165 extern  int             shortmenu;
166 extern  int             altmenu;