| #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", nil); | 
 | 		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 - (((uintptr)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", nil); | 
 | 	/*	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; | 
 | 	} | 
 | } |