1*80ee5cbfSDavid du Colombier /* acme */ 2*80ee5cbfSDavid du Colombier typedef struct Event Event; 3*80ee5cbfSDavid du Colombier typedef struct Window Window; 4*80ee5cbfSDavid du Colombier 5*80ee5cbfSDavid du Colombier enum 6*80ee5cbfSDavid du Colombier { 7*80ee5cbfSDavid du Colombier STACK = 8192, 8*80ee5cbfSDavid du Colombier EVENTSIZE = 256, 9*80ee5cbfSDavid du Colombier NEVENT = 5, 10*80ee5cbfSDavid du Colombier }; 11*80ee5cbfSDavid du Colombier 12*80ee5cbfSDavid du Colombier struct Event 13*80ee5cbfSDavid du Colombier { 14*80ee5cbfSDavid du Colombier int c1; 15*80ee5cbfSDavid du Colombier int c2; 16*80ee5cbfSDavid du Colombier int q0; 17*80ee5cbfSDavid du Colombier int q1; 18*80ee5cbfSDavid du Colombier int flag; 19*80ee5cbfSDavid du Colombier int nb; 20*80ee5cbfSDavid du Colombier int nr; 21*80ee5cbfSDavid du Colombier char b[EVENTSIZE*UTFmax+1]; 22*80ee5cbfSDavid du Colombier Rune r[EVENTSIZE+1]; 23*80ee5cbfSDavid du Colombier }; 24*80ee5cbfSDavid du Colombier 25*80ee5cbfSDavid du Colombier struct Window 26*80ee5cbfSDavid du Colombier { 27*80ee5cbfSDavid du Colombier /* file descriptors */ 28*80ee5cbfSDavid du Colombier int ctl; 29*80ee5cbfSDavid du Colombier int event; 30*80ee5cbfSDavid du Colombier int addr; 31*80ee5cbfSDavid du Colombier int data; 32*80ee5cbfSDavid du Colombier Biobuf *body; 33*80ee5cbfSDavid du Colombier 34*80ee5cbfSDavid du Colombier /* event input */ 35*80ee5cbfSDavid du Colombier char buf[512]; 36*80ee5cbfSDavid du Colombier char *bufp; 37*80ee5cbfSDavid du Colombier int nbuf; 38*80ee5cbfSDavid du Colombier Event e[NEVENT]; 39*80ee5cbfSDavid du Colombier 40*80ee5cbfSDavid du Colombier int dirtied; 41*80ee5cbfSDavid du Colombier int id; 42*80ee5cbfSDavid du Colombier int open; 43*80ee5cbfSDavid du Colombier Channel *cevent; /* chan(Event*) */ 44*80ee5cbfSDavid du Colombier }; 45*80ee5cbfSDavid du Colombier 46*80ee5cbfSDavid du Colombier extern Window* newwindow(void); 47*80ee5cbfSDavid du Colombier extern int winopenfile(Window*, char*); 48*80ee5cbfSDavid du Colombier extern void winopenbody(Window*, int); 49*80ee5cbfSDavid du Colombier extern void winclosebody(Window*); 50*80ee5cbfSDavid du Colombier extern void wintagwrite(Window*, char*, int); 51*80ee5cbfSDavid du Colombier extern void winname(Window*, char*); 52*80ee5cbfSDavid du Colombier extern void winwriteevent(Window*, Event*); 53*80ee5cbfSDavid du Colombier extern void winread(Window*, uint, uint, char*); 54*80ee5cbfSDavid du Colombier extern int windel(Window*, int); 55*80ee5cbfSDavid du Colombier extern void wingetevent(Window*, Event*); 56*80ee5cbfSDavid du Colombier extern void wineventproc(void*); 57*80ee5cbfSDavid du Colombier extern void winwritebody(Window*, char*, int); 58*80ee5cbfSDavid du Colombier extern void winclean(Window*); 59*80ee5cbfSDavid du Colombier extern int winselect(Window*, char*, int); 60*80ee5cbfSDavid du Colombier extern int winsetaddr(Window*, char*, int); 61*80ee5cbfSDavid du Colombier extern char* winreadbody(Window*, int*); 62*80ee5cbfSDavid du Colombier extern void windormant(Window*); 63*80ee5cbfSDavid du Colombier extern void winsetdump(Window*, char*, char*); 64*80ee5cbfSDavid du Colombier 65*80ee5cbfSDavid du Colombier extern char* readfile(char*, char*, int*); 66*80ee5cbfSDavid du Colombier extern void ctlprint(int, char*, ...); 67*80ee5cbfSDavid du Colombier extern void* emalloc(uint); 68*80ee5cbfSDavid du Colombier extern char* estrdup(char*); 69*80ee5cbfSDavid du Colombier extern char* estrstrdup(char*, char*); 70*80ee5cbfSDavid du Colombier extern char* estrstrstrdup(char*, char*, char*); 71*80ee5cbfSDavid du Colombier extern char* egrow(char*, char*, char*); 72*80ee5cbfSDavid du Colombier extern char* eappend(char*, char*, char*); 73*80ee5cbfSDavid du Colombier extern void error(char*, ...); 74*80ee5cbfSDavid du Colombier extern int tokenizec(char*, char**, int, char*); 75*80ee5cbfSDavid du Colombier 76