1 typedef struct Fsevent Fsevent; 2 typedef struct Event Event; 3 typedef struct Message Message; 4 typedef struct Window Window; 5 6 enum 7 { 8 STACK = 8192, 9 NPIPEDATA = 8000, 10 NPIPE = NPIPEDATA+32, 11 /* EVENTSIZE is really 256 in acme, but we use events internally and want bigger buffers */ 12 EVENTSIZE = 8192, 13 NEVENT = 5, 14 }; 15 16 struct Fsevent 17 { 18 int type; 19 void *r; 20 }; 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 35 struct Window 36 { 37 /* file descriptors */ 38 int ctl; 39 int event; 40 int addr; 41 int data; 42 int body; 43 44 /* event input */ 45 char buf[512]; 46 char *bufp; 47 int nbuf; 48 Event e[NEVENT]; 49 50 int id; 51 int open; 52 Channel *cevent; 53 }; 54 55 extern Window* newwindow(void); 56 extern int winopenfile(Window*, char*); 57 extern void wintagwrite(Window*, char*, int); 58 extern void winname(Window*, char*); 59 extern void winwriteevent(Window*, Event*); 60 extern int winread(Window*, uint, uint, char*); 61 extern int windel(Window*, int); 62 extern void wingetevent(Window*, Event*); 63 extern void wineventproc(void*); 64 extern void winclean(Window*); 65 extern int winselect(Window*, char*, int); 66 extern int winsetaddr(Window*, char*, int); 67 extern void windormant(Window*); 68 extern void winsetdump(Window*, char*, char*); 69 70 extern void ctlprint(int, char*, ...); 71 extern void* emalloc(uint); 72 extern char* estrdup(char*); 73 extern char* estrstrdup(char*, char*); 74 extern char* egrow(char*, char*, char*); 75 extern char* eappend(char*, char*, char*); 76 extern void error(char*, ...); 77 78 extern void startpipe(void); 79 extern void sendit(char*); 80 extern void execevent(Window *w, Event *e, int (*)(Window*, char*)); 81 82 extern void mountcons(void); 83 extern void fsloop(void*); 84 85 extern int newpipewin(int, char*); 86 extern void startpipe(void); 87 extern int pipecommand(Window*, char*); 88 extern void pipectl(void*); 89 90 #pragma varargck argpos error 1 91 #pragma varargck argpos ctlprint 2 92 93 extern Window *win; 94 extern Channel *fschan, *writechan; 95 96