xref: /plan9-contrib/acme/mail/src/dat.h (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1 enum
2 {
3 	False,
4 	True,
5 	EVENTSIZE=256,
6 };
7 
8 typedef	adt	Box;
9 typedef	adt	Mesg;
10 
11 typedef	aggr	Event;
12 
13 adt Win
14 {
15 extern	int	winid;
16 		int	addr;
17 		Biobuf *body;
18 		int	ctl;
19 		int	data;
20 		int	event;
21 		byte	buf[512];
22 		byte	*bufp;
23 		int	nbuf;
24 
25 		void	wnew(*Win);
26 		void	wwritebody(*Win, byte *s, int n);
27 		void	wread(*Win, uint, uint, byte*);
28 		void	wclean(*Win);
29 		void	wname(*Win, byte*);
30 		void	wdormant(*Win);
31 		void	wevent(*Win, Event*);
32 		void	wshow(*Win);
33 		void	wtagwrite(*Win, byte*, int);
34 		void	wwriteevent(*Win, Event*);
35 		void	wslave(*Win, chan(Event));
36 		void	wreplace(*Win, byte*, byte*, int);
37 		void	wselect(*Win, byte*);
38 		void	wsetdump(*Win, byte*, byte*);
39 		int	wdel(*Win, int);
40 		(int, byte*)	wreadall(*Win);
41 
42 intern	void	ctlwrite(*Win, byte*);
43 intern	int	getec(*Win);
44 intern	int	geten(*Win);
45 intern	int	geter(*Win, byte*, int*);
46 intern	int	openfile(*Win, byte*);
47 intern	void	openbody(*Win, int);
48 };
49 
50 adt Mesg
51 {
52 		Win;
53 extern	int		id;
54 extern	byte		*hdr;
55 extern	byte		*realhdr;
56 extern	byte		*replyto;
57 extern	byte		*text;
58 extern	byte		*subj;
59 extern	Mesg	*next;
60 extern	int		lhdr;
61 extern	int		ltext;
62 extern	int		lrealhdr;
63 extern	int		lline1;
64 		Box		*box;
65 		int		isopen;
66 		int		posted;
67 
68 		Mesg*	read(Box*);
69 		void		open(*Mesg);
70 		void		slave(*Mesg);
71 		void		free(*Mesg);
72 		void		save(*Mesg, byte*);
73 		void		mkreply(*Mesg);
74 		void		mkmail(Box*, byte*);
75 		void		putpost(*Mesg, Event*);
76 
77 intern	int		command(*Mesg, byte*);
78 intern	void		send(*Mesg);
79 };
80 
81 adt Box
82 {
83 		Win;
84 		int		nm;
85 		int		readonly;
86 		Mesg	*m;
87 extern	byte		*file;
88 		Biobuf	*io;
89 		int		clean;
90 extern	uint		len;
91 extern	chan(Mesg*)	cdel;
92 extern	chan(Event)	cevent;
93 extern	chan(int)		cmore;
94 
95 		byte		*line;
96 		int		linelen;
97 		int		freeline;
98 		byte		*peekline;
99 		int		peeklinelen;
100 		int		peekfreeline;
101 
102 		Box*		read(byte*, int);
103 		void		readmore(*Box);
104 		(int,byte*)	readline(*Box);
105 		void		unreadline(*Box);
106 		void		slave(*Box);
107 		void		mopen(*Box, int);
108 		void		rewrite(*Box);
109 		void		mdel(*Box, Mesg*);
110 		void		event(*Box, Event);
111 
112 intern	int		command(*Box, byte*);
113 };
114 
115 aggr Event
116 {
117 	int	c1;
118 	int	c2;
119 	int	q0;
120 	int	q1;
121 	int	flag;
122 	int	nb;
123 	int	nr;
124 	byte	b[EVENTSIZE*UTFmax+1];
125 	Rune	r[EVENTSIZE+1];
126 };
127 
128 Box	*mbox;
129 byte	*mboxfile;
130 byte	*usermboxfile;
131 byte	*usermboxdir;
132 byte	*user;
133 byte	*date;
134