8 typedef struct Wpid Wpid;
24 newpipewin(int pid, char *p)
32 wintagwrite(w, "Send ", 5);
33 wp = emalloc(sizeof(Wpid));
36 wp->next = wpid; /* BUG: this happens in fsread proc (we don't use wpid, so it's okay) */
39 sendp(newpipechan, w);
44 pipecommand(Window *w, char *s)
50 while(*s==' ' || *s=='\t' || *s=='\n')
52 if(strcmp(s, "Delete")==0){
57 if(strcmp(s, "Del")==0){
62 if(strcmp(s, "Send") == 0){
64 w->addr = winopenfile(w, "addr");
65 ctlprint(w->ctl, "addr=dot\n");
66 seek(w->addr, 0UL, 0);
67 if(read(w->addr, tmp, 2*12) == 2*12){
76 t = realloc(t, k+8192+2);
78 error("alloc failed: %r\n");
79 n = read(snarffd, t+k, 8192);
87 t = emalloc((q1-q0)*UTFmax+2);
88 winread(w, q0, q1, t);
91 if(t!=nil && t[0]!='\0'){
92 if(t[k-1]!='\n' && t[k-1]!='\004'){
112 proccreate(wineventproc, w, STACK);
115 winsetaddr(w, "0", 0);
117 e = recvp(w->cevent);
121 fprint(2, "unknown message %c%c\n", e->c1, e->c2);
124 case 'E': /* write to body; can't affect us */
127 case 'F': /* generated by our actions; ignore */
130 case 'K': /* ignore */
137 execevent(w, e, pipecommand);
140 case 'l': /* reflect all searches back to acme */
147 case 'I': /* modify away; we don't care */
165 while(w = recvp(newpipechan))
166 threadcreate(pipectl, w, STACK);
172 newpipechan = chancreate(sizeof(Window*), 0);
173 threadcreate(newpipethread, nil, STACK);
174 snarffd = open("/dev/snarf", OREAD|OCEXEC);