|  | #include <u.h> | 
|  | #include <libc.h> | 
|  | #include <bio.h> | 
|  | #include <draw.h> | 
|  | #include "sky.h" | 
|  |  | 
|  | void | 
|  | displaypic(Picture *pic) | 
|  | { | 
|  | int p[2]; | 
|  | int i, n; | 
|  | uchar *a; | 
|  |  | 
|  |  | 
|  | if(pipe(p) < 0){ | 
|  | fprint(2, "pipe failed: %r\n"); | 
|  | return; | 
|  | } | 
|  | switch(rfork(RFPROC|RFFDG)){ | 
|  | case -1: | 
|  | fprint(2, "fork failed: %r\n"); | 
|  | return; | 
|  |  | 
|  | case 0: | 
|  | close(p[1]); | 
|  | dup(p[0], 0); | 
|  | close(p[0]); | 
|  | //	execl("/bin/page", "page", "-w", 0); | 
|  | execlp("img", "img", 0); | 
|  | fprint(2, "exec failed: %r\n"); | 
|  | exits("exec"); | 
|  |  | 
|  | default: | 
|  | close(p[0]); | 
|  | fprint(p[1], "%11s %11d %11d %11d %11d ", | 
|  | "k8", pic->minx, pic->miny, pic->maxx, pic->maxy); | 
|  | n = (pic->maxx-pic->minx)*(pic->maxy-pic->miny); | 
|  | /* release the memory as we hand it off; this could be a big piece of data */ | 
|  | a = pic->data; | 
|  | while(n > 0){ | 
|  | i = 8192 - (((int)a)&8191); | 
|  | if(i > n) | 
|  | i = n; | 
|  | if(write(p[1], a, i)!=i) | 
|  | fprint(2, "write error: %r\n"); | 
|  | //	if(i == 8192)	/* page aligned */ | 
|  | //		segfree(a, i); | 
|  | n -= i; | 
|  | a += i; | 
|  | } | 
|  | free(pic->data); | 
|  | free(pic); | 
|  | close(p[1]); | 
|  | break; | 
|  | } | 
|  | } | 
|  |  | 
|  | void | 
|  | displayimage(Image *im) | 
|  | { | 
|  | int p[2]; | 
|  |  | 
|  | if(pipe(p) < 0){ | 
|  | fprint(2, "pipe failed: %r\n"); | 
|  | return; | 
|  | } | 
|  | switch(rfork(RFPROC|RFFDG)){ | 
|  | case -1: | 
|  | fprint(2, "fork failed: %r\n"); | 
|  | return; | 
|  |  | 
|  | case 0: | 
|  | close(p[1]); | 
|  | dup(p[0], 0); | 
|  | close(p[0]); | 
|  | execlp("img", "img", 0); | 
|  | //	execl("/bin/page", "page", "-w", 0); | 
|  | fprint(2, "exec failed: %r\n"); | 
|  | exits("exec"); | 
|  |  | 
|  | default: | 
|  | close(p[0]); | 
|  | writeimage(p[1], im, 0); | 
|  | freeimage(im); | 
|  | close(p[1]); | 
|  | break; | 
|  | } | 
|  | } |