dat.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /*
  2. * This file is part of the UCB release of Plan 9. It is subject to the license
  3. * terms in the LICENSE file found in the top-level directory of this
  4. * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
  5. * part of the UCB release of Plan 9, including this file, may be copied,
  6. * modified, propagated, or distributed except according to the terms contained
  7. * in the LICENSE file.
  8. */
  9. typedef struct Event Event;
  10. typedef struct Exec Exec;
  11. typedef struct Message Message;
  12. typedef struct Window Window;
  13. enum
  14. {
  15. STACK = 8192,
  16. EVENTSIZE = 256,
  17. NEVENT = 5,
  18. };
  19. struct Event
  20. {
  21. int c1;
  22. int c2;
  23. int q0;
  24. int q1;
  25. int flag;
  26. int nb;
  27. int nr;
  28. char b[EVENTSIZE*UTFmax+1];
  29. Rune r[EVENTSIZE+1];
  30. };
  31. struct Window
  32. {
  33. /* file descriptors */
  34. int ctl;
  35. int event;
  36. int addr;
  37. int data;
  38. Biobuf *body;
  39. /* event input */
  40. char buf[512];
  41. char *bufp;
  42. int nbuf;
  43. Event e[NEVENT];
  44. int id;
  45. int open;
  46. Channel *cevent;
  47. };
  48. struct Message
  49. {
  50. Window *w;
  51. int ctlfd;
  52. char *name;
  53. char *replyname;
  54. uchar opened;
  55. uchar dirty;
  56. uchar isreply;
  57. uchar deleted;
  58. uchar writebackdel;
  59. uchar tagposted;
  60. uchar recursed;
  61. uchar level;
  62. /* header info */
  63. char *fromcolon; /* from header file; all rest are from info file */
  64. char *from;
  65. char *to;
  66. char *cc;
  67. char *replyto;
  68. char *date;
  69. char *subject;
  70. char *type;
  71. char *disposition;
  72. char *filename;
  73. char *digest;
  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. enum
  80. {
  81. NARGS = 100,
  82. NARGCHAR = 8*1024,
  83. EXECSTACK = STACK+(NARGS+1)*sizeof(char*)+NARGCHAR
  84. };
  85. struct Exec
  86. {
  87. char *prog;
  88. char **argv;
  89. int p[2]; /* p[1] is write to program; p[0] set to prog fd 0*/
  90. int q[2]; /* q[0] is read from program; q[1] set to prog fd 1 */
  91. Channel *sync;
  92. };
  93. extern Window* newwindow(void);
  94. extern int winopenfile(Window*, char*);
  95. extern void winopenbody(Window*, int);
  96. extern void winclosebody(Window*);
  97. extern void wintagwrite(Window*, char*, int);
  98. extern void winname(Window*, char*);
  99. extern void winwriteevent(Window*, Event*);
  100. extern void winread(Window*, uint, uint, char*);
  101. extern int windel(Window*, int);
  102. extern void wingetevent(Window*, Event*);
  103. extern void wineventproc(void*);
  104. extern void winwritebody(Window*, char*, int);
  105. extern void winclean(Window*);
  106. extern int winselect(Window*, char*, int);
  107. extern char* winselection(Window*);
  108. extern int winsetaddr(Window*, char*, int);
  109. extern char* winreadbody(Window*, int*);
  110. extern void windormant(Window*);
  111. extern void winsetdump(Window*, char*, char*);
  112. extern void readmbox(Message*, char*, char*);
  113. extern void rewritembox(Window*, Message*);
  114. extern void mkreply(Message*, char*, char*, Plumbattr*, char*);
  115. extern void delreply(Message*);
  116. extern int mesgadd(Message*, char*, Dir*, char*);
  117. extern void mesgmenu(Window*, Message*);
  118. extern void mesgmenunew(Window*, Message*);
  119. extern int mesgopen(Message*, char*, char*, Message*, int, char*);
  120. extern void mesgctl(void*);
  121. extern void mesgsend(Message*);
  122. extern void mesgdel(Message*, Message*);
  123. extern void mesgmenudel(Window*, Message*, Message*);
  124. extern void mesgmenumark(Window*, char*, char*);
  125. extern void mesgmenumarkdel(Window*, Message*, Message*, int);
  126. extern Message* mesglookup(Message*, char*, char*);
  127. extern Message* mesglookupfile(Message*, char*, char*);
  128. extern void mesgfreeparts(Message*);
  129. extern char* readfile(char*, char*, int*);
  130. extern char* readbody(char*, char*, int*);
  131. extern void ctlprint(int, char*, ...);
  132. extern void* emalloc(uint);
  133. extern void* erealloc(void*, uint);
  134. extern char* estrdup(char*);
  135. extern char* estrstrdup(char*, char*);
  136. extern char* egrow(char*, char*, char*);
  137. extern char* eappend(char*, char*, char*);
  138. extern void error(char*, ...);
  139. extern int tokenizec(char*, char**, int, char*);
  140. extern void execproc(void*);
  141. #pragma varargck argpos error 1
  142. #pragma varargck argpos ctlprint 2
  143. extern Window *wbox;
  144. extern Message mbox;
  145. extern Message replies;
  146. extern char *fsname;
  147. extern int plumbsendfd;
  148. extern int plumbseemailfd;
  149. extern char *home;
  150. extern char *outgoing;
  151. extern char *mailboxdir;
  152. extern char *user;
  153. extern char deleted[];
  154. extern int wctlfd;
  155. extern int shortmenu;