19a747e4fSDavid du Colombier #include <u.h> 29a747e4fSDavid du Colombier #include <libc.h> 39a747e4fSDavid du Colombier #include <bio.h> 49a747e4fSDavid du Colombier #include <thread.h> 59a747e4fSDavid du Colombier 69a747e4fSDavid du Colombier /* acme */ 79a747e4fSDavid du Colombier typedef struct Event Event; 89a747e4fSDavid du Colombier typedef struct Window Window; 99a747e4fSDavid du Colombier 109a747e4fSDavid du Colombier enum 119a747e4fSDavid du Colombier { 129a747e4fSDavid du Colombier STACK = 8192, 139a747e4fSDavid du Colombier EVENTSIZE = 256, 149a747e4fSDavid du Colombier NEVENT = 5, 159a747e4fSDavid du Colombier }; 169a747e4fSDavid du Colombier 179a747e4fSDavid du Colombier struct Event 189a747e4fSDavid du Colombier { 199a747e4fSDavid du Colombier int c1; 209a747e4fSDavid du Colombier int c2; 219a747e4fSDavid du Colombier int q0; 229a747e4fSDavid du Colombier int q1; 239a747e4fSDavid du Colombier int flag; 249a747e4fSDavid du Colombier int nb; 259a747e4fSDavid du Colombier int nr; 269a747e4fSDavid du Colombier char b[EVENTSIZE*UTFmax+1]; 279a747e4fSDavid du Colombier Rune r[EVENTSIZE+1]; 289a747e4fSDavid du Colombier }; 299a747e4fSDavid du Colombier 309a747e4fSDavid du Colombier struct Window 319a747e4fSDavid du Colombier { 329a747e4fSDavid du Colombier /* file descriptors */ 339a747e4fSDavid du Colombier int ctl; 349a747e4fSDavid du Colombier int event; 359a747e4fSDavid du Colombier int addr; 369a747e4fSDavid du Colombier int data; 379a747e4fSDavid du Colombier Biobuf *body; 389a747e4fSDavid du Colombier 399a747e4fSDavid du Colombier /* event input */ 409a747e4fSDavid du Colombier char buf[512]; 419a747e4fSDavid du Colombier char *bufp; 429a747e4fSDavid du Colombier int nbuf; 439a747e4fSDavid du Colombier Event e[NEVENT]; 449a747e4fSDavid du Colombier 45*90630c3aSDavid du Colombier int warned; 469a747e4fSDavid du Colombier int id; 479a747e4fSDavid du Colombier int open; 489a747e4fSDavid du Colombier Channel *cevent; /* chan(Event*) */ 499a747e4fSDavid du Colombier }; 509a747e4fSDavid du Colombier 519a747e4fSDavid du Colombier extern Window* newwindow(void); 529a747e4fSDavid du Colombier extern int winopenfile(Window*, char*); 539a747e4fSDavid du Colombier extern void winopenbody(Window*, int); 549a747e4fSDavid du Colombier extern void winclosebody(Window*); 559a747e4fSDavid du Colombier extern void wintagwrite(Window*, char*, int); 569a747e4fSDavid du Colombier extern void winname(Window*, char*); 579a747e4fSDavid du Colombier extern void winwriteevent(Window*, Event*); 589a747e4fSDavid du Colombier extern void winread(Window*, uint, uint, char*); 599a747e4fSDavid du Colombier extern int windel(Window*, int); 609a747e4fSDavid du Colombier extern void wingetevent(Window*, Event*); 619a747e4fSDavid du Colombier extern void wineventproc(void*); 629a747e4fSDavid du Colombier extern void winwritebody(Window*, char*, int); 639a747e4fSDavid du Colombier extern void winclean(Window*); 64*90630c3aSDavid du Colombier extern int winisdirty(Window*); 659a747e4fSDavid du Colombier extern int winselect(Window*, char*, int); 669a747e4fSDavid du Colombier extern int winsetaddr(Window*, char*, int); 679a747e4fSDavid du Colombier extern char* winreadbody(Window*, int*); 689a747e4fSDavid du Colombier extern void windormant(Window*); 699a747e4fSDavid du Colombier extern void winsetdump(Window*, char*, char*); 709a747e4fSDavid du Colombier 719a747e4fSDavid du Colombier extern char* readfile(char*, char*, int*); 729a747e4fSDavid du Colombier extern void ctlprint(int, char*, ...); 739a747e4fSDavid du Colombier extern void* emalloc(uint); 749a747e4fSDavid du Colombier extern char* estrdup(char*); 759a747e4fSDavid du Colombier extern char* estrstrdup(char*, char*); 769a747e4fSDavid du Colombier extern char* egrow(char*, char*, char*); 779a747e4fSDavid du Colombier extern char* eappend(char*, char*, char*); 789a747e4fSDavid du Colombier extern void error(char*, ...); 799a747e4fSDavid du Colombier extern int tokenizec(char*, char**, int, char*); 809a747e4fSDavid du Colombier 819a747e4fSDavid du Colombier typedef struct Treq Treq; 829a747e4fSDavid du Colombier typedef struct Wiki Wiki; 839a747e4fSDavid du Colombier 849a747e4fSDavid du Colombier struct Treq { 859a747e4fSDavid du Colombier char *title; 869a747e4fSDavid du Colombier Channel *c; /* chan(int) */ 879a747e4fSDavid du Colombier }; 889a747e4fSDavid du Colombier 899a747e4fSDavid du Colombier struct Wiki { 909a747e4fSDavid du Colombier QLock; 919a747e4fSDavid du Colombier int isnew; 929a747e4fSDavid du Colombier int special; 939a747e4fSDavid du Colombier char *arg; 949a747e4fSDavid du Colombier char *addr; 959a747e4fSDavid du Colombier int n; 969a747e4fSDavid du Colombier int dead; 979a747e4fSDavid du Colombier Window *win; 989a747e4fSDavid du Colombier ulong time; 999a747e4fSDavid du Colombier int linked; 1009a747e4fSDavid du Colombier Wiki *next; 1019a747e4fSDavid du Colombier Wiki *prev; 1029a747e4fSDavid du Colombier }; 1039a747e4fSDavid du Colombier 1049a747e4fSDavid du Colombier extern int debug; 1059a747e4fSDavid du Colombier extern int mapfd; 1069a747e4fSDavid du Colombier extern char *email; 1079a747e4fSDavid du Colombier extern char *dir; 1089a747e4fSDavid du Colombier 1099a747e4fSDavid du Colombier void wikinew(char*); 1109a747e4fSDavid du Colombier int wikiopen(char*, char*); 1119a747e4fSDavid du Colombier int wikiput(Wiki*); 1129a747e4fSDavid du Colombier void wikiget(Wiki*); 1139a747e4fSDavid du Colombier int wikidiff(Wiki*); 1149a747e4fSDavid du Colombier 115