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