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