awiki.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. #include <u.h>
  10. #include <libc.h>
  11. #include <bio.h>
  12. #include <thread.h>
  13. /* acme */
  14. typedef struct Event Event;
  15. typedef struct Window Window;
  16. enum
  17. {
  18. STACK = 8192,
  19. EVENTSIZE = 256,
  20. NEVENT = 5,
  21. };
  22. struct Event
  23. {
  24. int c1;
  25. int c2;
  26. int q0;
  27. int q1;
  28. int flag;
  29. int nb;
  30. int nr;
  31. char b[EVENTSIZE*UTFmax+1];
  32. Rune r[EVENTSIZE+1];
  33. };
  34. struct Window
  35. {
  36. /* file descriptors */
  37. int ctl;
  38. int event;
  39. int addr;
  40. int data;
  41. Biobuf *body;
  42. /* event input */
  43. char buf[512];
  44. char *bufp;
  45. int nbuf;
  46. Event e[NEVENT];
  47. int warned;
  48. int id;
  49. int open;
  50. Channel *cevent; /* chan(Event*) */
  51. };
  52. extern Window* newwindow(void);
  53. extern int winopenfile(Window*, char*);
  54. extern void winopenbody(Window*, int);
  55. extern void winclosebody(Window*);
  56. extern void wintagwrite(Window*, char*, int);
  57. extern void winname(Window*, char*);
  58. extern void winwriteevent(Window*, Event*);
  59. extern void winread(Window*, u32, u32, char*);
  60. extern int windel(Window*, int);
  61. extern void wingetevent(Window*, Event*);
  62. extern void wineventproc(void*);
  63. extern void winwritebody(Window*, char*, int);
  64. extern void winclean(Window*);
  65. extern int winisdirty(Window*);
  66. extern int winselect(Window*, char*, int);
  67. extern int winsetaddr(Window*, char*, int);
  68. extern char* winreadbody(Window*, int*);
  69. extern void windormant(Window*);
  70. extern void winsetdump(Window*, char*, char*);
  71. extern char* readfile(char*, char*, int*);
  72. extern void ctlprint(int, char*, ...);
  73. extern void* emalloc(u32);
  74. extern char* estrdup(char*);
  75. extern char* estrstrdup(char*, char*);
  76. extern char* egrow(char*, char*, char*);
  77. extern char* eappend(char*, char*, char*);
  78. extern void error(char*, ...);
  79. extern int tokenizec(char*, char**, int, char*);
  80. typedef struct Treq Treq;
  81. typedef struct Wiki Wiki;
  82. struct Treq {
  83. char *title;
  84. Channel *c; /* chan(int) */
  85. };
  86. struct Wiki {
  87. QLock lk;
  88. int isnew;
  89. int special;
  90. char *arg;
  91. char *addr;
  92. int n;
  93. int dead;
  94. Window *win;
  95. u32 time;
  96. int linked;
  97. Wiki *next;
  98. Wiki *prev;
  99. };
  100. extern int debug;
  101. extern int mapfd;
  102. extern char *email;
  103. extern char *dir;
  104. void wikinew(char*);
  105. int wikiopen(char*, char*);
  106. int wikiput(Wiki*);
  107. void wikiget(Wiki*);
  108. int wikidiff(Wiki*);