Blame


1 8a3b2ceb 2004-04-24 devnull #include <u.h>
2 8a3b2ceb 2004-04-24 devnull #include <libc.h>
3 8a3b2ceb 2004-04-24 devnull #include <bio.h>
4 8a3b2ceb 2004-04-24 devnull #include <draw.h>
5 8a3b2ceb 2004-04-24 devnull #include "sky.h"
6 8a3b2ceb 2004-04-24 devnull
7 8a3b2ceb 2004-04-24 devnull void
8 8a3b2ceb 2004-04-24 devnull displaypic(Picture *pic)
9 8a3b2ceb 2004-04-24 devnull {
10 8a3b2ceb 2004-04-24 devnull int p[2];
11 8a3b2ceb 2004-04-24 devnull int i, n;
12 8a3b2ceb 2004-04-24 devnull uchar *a;
13 8a3b2ceb 2004-04-24 devnull
14 fa325e9b 2020-01-10 cross
15 8a3b2ceb 2004-04-24 devnull if(pipe(p) < 0){
16 8a3b2ceb 2004-04-24 devnull fprint(2, "pipe failed: %r\n");
17 8a3b2ceb 2004-04-24 devnull return;
18 8a3b2ceb 2004-04-24 devnull }
19 8a3b2ceb 2004-04-24 devnull switch(rfork(RFPROC|RFFDG)){
20 8a3b2ceb 2004-04-24 devnull case -1:
21 8a3b2ceb 2004-04-24 devnull fprint(2, "fork failed: %r\n");
22 8a3b2ceb 2004-04-24 devnull return;
23 8a3b2ceb 2004-04-24 devnull
24 8a3b2ceb 2004-04-24 devnull case 0:
25 8a3b2ceb 2004-04-24 devnull close(p[1]);
26 8a3b2ceb 2004-04-24 devnull dup(p[0], 0);
27 8a3b2ceb 2004-04-24 devnull close(p[0]);
28 cbeb0b26 2006-04-01 devnull /* execl("/bin/page", "page", "-w", 0); */
29 122fda59 2009-04-30 rsc execlp("img", "img", nil);
30 8a3b2ceb 2004-04-24 devnull fprint(2, "exec failed: %r\n");
31 8a3b2ceb 2004-04-24 devnull exits("exec");
32 8a3b2ceb 2004-04-24 devnull
33 8a3b2ceb 2004-04-24 devnull default:
34 8a3b2ceb 2004-04-24 devnull close(p[0]);
35 8a3b2ceb 2004-04-24 devnull fprint(p[1], "%11s %11d %11d %11d %11d ",
36 8a3b2ceb 2004-04-24 devnull "k8", pic->minx, pic->miny, pic->maxx, pic->maxy);
37 8a3b2ceb 2004-04-24 devnull n = (pic->maxx-pic->minx)*(pic->maxy-pic->miny);
38 8a3b2ceb 2004-04-24 devnull /* release the memory as we hand it off; this could be a big piece of data */
39 8a3b2ceb 2004-04-24 devnull a = pic->data;
40 8a3b2ceb 2004-04-24 devnull while(n > 0){
41 db56dbf3 2009-05-26 rsc i = 8192 - (((uintptr)a)&8191);
42 8a3b2ceb 2004-04-24 devnull if(i > n)
43 8a3b2ceb 2004-04-24 devnull i = n;
44 8a3b2ceb 2004-04-24 devnull if(write(p[1], a, i)!=i)
45 8a3b2ceb 2004-04-24 devnull fprint(2, "write error: %r\n");
46 122fda59 2009-04-30 rsc /* if(i == 8192) /* page aligned */
47 cbeb0b26 2006-04-01 devnull /* segfree(a, i); */
48 8a3b2ceb 2004-04-24 devnull n -= i;
49 8a3b2ceb 2004-04-24 devnull a += i;
50 8a3b2ceb 2004-04-24 devnull }
51 8a3b2ceb 2004-04-24 devnull free(pic->data);
52 8a3b2ceb 2004-04-24 devnull free(pic);
53 8a3b2ceb 2004-04-24 devnull close(p[1]);
54 8a3b2ceb 2004-04-24 devnull break;
55 8a3b2ceb 2004-04-24 devnull }
56 8a3b2ceb 2004-04-24 devnull }
57 8a3b2ceb 2004-04-24 devnull
58 8a3b2ceb 2004-04-24 devnull void
59 8a3b2ceb 2004-04-24 devnull displayimage(Image *im)
60 8a3b2ceb 2004-04-24 devnull {
61 fa325e9b 2020-01-10 cross int p[2];
62 8a3b2ceb 2004-04-24 devnull
63 8a3b2ceb 2004-04-24 devnull if(pipe(p) < 0){
64 8a3b2ceb 2004-04-24 devnull fprint(2, "pipe failed: %r\n");
65 8a3b2ceb 2004-04-24 devnull return;
66 8a3b2ceb 2004-04-24 devnull }
67 8a3b2ceb 2004-04-24 devnull switch(rfork(RFPROC|RFFDG)){
68 8a3b2ceb 2004-04-24 devnull case -1:
69 8a3b2ceb 2004-04-24 devnull fprint(2, "fork failed: %r\n");
70 8a3b2ceb 2004-04-24 devnull return;
71 8a3b2ceb 2004-04-24 devnull
72 8a3b2ceb 2004-04-24 devnull case 0:
73 8a3b2ceb 2004-04-24 devnull close(p[1]);
74 8a3b2ceb 2004-04-24 devnull dup(p[0], 0);
75 8a3b2ceb 2004-04-24 devnull close(p[0]);
76 122fda59 2009-04-30 rsc execlp("img", "img", nil);
77 cbeb0b26 2006-04-01 devnull /* execl("/bin/page", "page", "-w", 0); */
78 8a3b2ceb 2004-04-24 devnull fprint(2, "exec failed: %r\n");
79 8a3b2ceb 2004-04-24 devnull exits("exec");
80 8a3b2ceb 2004-04-24 devnull
81 8a3b2ceb 2004-04-24 devnull default:
82 8a3b2ceb 2004-04-24 devnull close(p[0]);
83 8a3b2ceb 2004-04-24 devnull writeimage(p[1], im, 0);
84 8a3b2ceb 2004-04-24 devnull freeimage(im);
85 8a3b2ceb 2004-04-24 devnull close(p[1]);
86 8a3b2ceb 2004-04-24 devnull break;
87 8a3b2ceb 2004-04-24 devnull }
88 8a3b2ceb 2004-04-24 devnull }