8 typedef struct Pix Pix;
25 void getimage(Rtext *t, Www *w){
31 char err[512], buf[80], *s;
35 seturl(&url, ap->image, w->url->fullname);
36 for(p=w->pix;p!=nil; p=p->next)
37 if(strcmp(ap->image, p->name)==0 && ap->width==p->width && ap->height==p->height){
45 snprint(err, sizeof(err), "[img: %s: %r]", url.reltext);
53 if(typ < 0 || typ >= nelem(pixcmd) || pixcmd[typ] == nil){
54 werrstr("unknown image type");
57 if((fd = pipeline(fd, "exec %s", pixcmd[typ])) < 0)
59 if(ap->width>0 || ap->height>0){
61 s += sprint(s, "exec resize");
63 s += sprint(s, " -x %d", ap->width);
65 s += sprint(s, " -y %d", ap->height);
66 if((fd = pipeline(fd, buf)) < 0)
69 b=readimage(display, fd, 1);
71 werrstr("can't read image");
75 p=emalloc(sizeof(Pix));
76 nstrcpy(p->name, ap->image, sizeof(p->name));
86 void getpix(Rtext *t, Www *w){
87 int i, pid, nworker, worker[NXPROC];
91 for(i=0; i<nelem(worker); i++)
97 pid = rfork(RFFDG|RFPROC|RFMEM);
100 fprint(2, "fork: %r\n");
106 for(i=0; i<nelem(worker); i++)
113 while(nworker == nelem(worker)){
114 if((pid = waitpid()) < 0)
116 for(i=0; i<nelem(worker); i++)
117 if(worker[i] == pid){
128 if((pid = waitpid()) < 0)
130 for(i=0; i<nelem(worker); i++)
131 if(worker[i] == pid){
139 ulong countpix(void *p){
142 for(x = p; x; x = x->next)
143 n += Dy(x->b->r)*bytesperline(x->b->r, x->b->depth);
147 void freepix(void *p){