diff options
author | rsc <devnull@localhost> | 2004-04-24 17:05:43 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2004-04-24 17:05:43 +0000 |
commit | 8a3b2ceb0ff632c47e1516d3ffef8572dc8eb974 (patch) | |
tree | 4325779f2b9fcfccc586bb7f9359b5986b1cdb14 /src/cmd/scat/display.c | |
parent | 3f8c70e97c2eb85992424439af56a4dd6412b8c6 (diff) | |
download | plan9port-8a3b2ceb0ff632c47e1516d3ffef8572dc8eb974.tar.gz plan9port-8a3b2ceb0ff632c47e1516d3ffef8572dc8eb974.tar.bz2 plan9port-8a3b2ceb0ff632c47e1516d3ffef8572dc8eb974.zip |
Add scat. Temporary fix to rc r.e. note groups.
Diffstat (limited to 'src/cmd/scat/display.c')
-rw-r--r-- | src/cmd/scat/display.c | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/cmd/scat/display.c b/src/cmd/scat/display.c new file mode 100644 index 00000000..11642e59 --- /dev/null +++ b/src/cmd/scat/display.c @@ -0,0 +1,88 @@ +#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; + } +} |