1*219b2ee8SDavid du Colombier #include <u.h> 2*219b2ee8SDavid du Colombier #include <libc.h> 3*219b2ee8SDavid du Colombier #include <bio.h> 4*219b2ee8SDavid du Colombier #include <libg.h> 5*219b2ee8SDavid du Colombier #include "sky.h" 6*219b2ee8SDavid du Colombier 7*219b2ee8SDavid du Colombier void 8*219b2ee8SDavid du Colombier display(Picture *pic) 9*219b2ee8SDavid du Colombier { 10*219b2ee8SDavid du Colombier int p[2]; 11*219b2ee8SDavid du Colombier int i, n; 12*219b2ee8SDavid du Colombier uchar *a; 13*219b2ee8SDavid du Colombier 14*219b2ee8SDavid du Colombier 15*219b2ee8SDavid du Colombier if(pipe(p) < 0){ 16*219b2ee8SDavid du Colombier fprint(2, "pipe failed: %r\n"); 17*219b2ee8SDavid du Colombier return; 18*219b2ee8SDavid du Colombier } 19*219b2ee8SDavid du Colombier switch(rfork(RFPROC|RFFDG|RFNOTEG|RFNOWAIT)){ 20*219b2ee8SDavid du Colombier case -1: 21*219b2ee8SDavid du Colombier fprint(2, "fork failed: %r\n"); 22*219b2ee8SDavid du Colombier return; 23*219b2ee8SDavid du Colombier 24*219b2ee8SDavid du Colombier case 0: 25*219b2ee8SDavid du Colombier close(p[1]); 26*219b2ee8SDavid du Colombier dup(p[0], 10); 27*219b2ee8SDavid du Colombier close(p[0]); 28*219b2ee8SDavid du Colombier execl("/bin/fb/9v", "9v", "/fd/10", 0); 29*219b2ee8SDavid du Colombier fprint(2, "exec failed: %r\n"); 30*219b2ee8SDavid du Colombier exits("exec"); 31*219b2ee8SDavid du Colombier 32*219b2ee8SDavid du Colombier default: 33*219b2ee8SDavid du Colombier close(p[0]); 34*219b2ee8SDavid du Colombier fprint(p[1], "%11d %11d %11d %11d %11d ", 35*219b2ee8SDavid du Colombier 3, pic->minx, pic->miny, pic->maxx, pic->maxy); 36*219b2ee8SDavid du Colombier n = (pic->maxx-pic->minx)*(pic->maxy-pic->miny); 37*219b2ee8SDavid du Colombier /* release the memory as we hand it off; this could be a big piece of data */ 38*219b2ee8SDavid du Colombier a = pic->data; 39*219b2ee8SDavid du Colombier while(n > 0){ 40*219b2ee8SDavid du Colombier i = 8192 - (((int)a)&8191); 41*219b2ee8SDavid du Colombier if(i > n) 42*219b2ee8SDavid du Colombier i = n; 43*219b2ee8SDavid du Colombier if(write(p[1], a, i)!=i) 44*219b2ee8SDavid du Colombier fprint(2, "write error: %r\n"); 45*219b2ee8SDavid du Colombier if(i == 8192) /* page aligned */ 46*219b2ee8SDavid du Colombier segfree(a, i); 47*219b2ee8SDavid du Colombier n -= i; 48*219b2ee8SDavid du Colombier a += i; 49*219b2ee8SDavid du Colombier } 50*219b2ee8SDavid du Colombier free(pic->data); 51*219b2ee8SDavid du Colombier free(pic); 52*219b2ee8SDavid du Colombier close(p[1]); 53*219b2ee8SDavid du Colombier break; 54*219b2ee8SDavid du Colombier } 55*219b2ee8SDavid du Colombier } 56