aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/draw
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-01-13 04:49:19 +0000
committerrsc <devnull@localhost>2005-01-13 04:49:19 +0000
commitc8b6342d3c2a167dec16931815926e9e4387e7ef (patch)
tree80d3ec6ea074462b30639168113def880476dad6 /src/cmd/draw
parent741f510ce758f77ed5193256fb693a09a7daecce (diff)
downloadplan9port-c8b6342d3c2a167dec16931815926e9e4387e7ef.tar.gz
plan9port-c8b6342d3c2a167dec16931815926e9e4387e7ef.tar.bz2
plan9port-c8b6342d3c2a167dec16931815926e9e4387e7ef.zip
Many small edits.
Diffstat (limited to 'src/cmd/draw')
-rw-r--r--src/cmd/draw/iconv.c102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/cmd/draw/iconv.c b/src/cmd/draw/iconv.c
new file mode 100644
index 00000000..5a955200
--- /dev/null
+++ b/src/cmd/draw/iconv.c
@@ -0,0 +1,102 @@
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+#include <memdraw.h>
+
+void
+usage(void)
+{
+ fprint(2, "usage: iconv [-u] [-c chanstr] [file]\n");
+ exits("usage");
+}
+
+void
+writeuncompressed(int fd, Memimage *m)
+{
+ char chanstr[32];
+ int bpl, y, j;
+ uchar *buf;
+
+ if(chantostr(chanstr, m->chan) == nil)
+ sysfatal("can't convert channel descriptor: %r");
+ fprint(fd, "%11s %11d %11d %11d %11d ",
+ chanstr, m->r.min.x, m->r.min.y, m->r.max.x, m->r.max.y);
+
+ bpl = bytesperline(m->r, m->depth);
+ buf = malloc(bpl);
+ if(buf == nil)
+ sysfatal("malloc failed: %r");
+ for(y=m->r.min.y; y<m->r.max.y; y++){
+ j = unloadmemimage(m, Rect(m->r.min.x, y, m->r.max.x, y+1), buf, bpl);
+ if(j != bpl)
+ sysfatal("image unload failed: %r");
+ if(write(fd, buf, bpl) != bpl)
+ sysfatal("write failed: %r");
+ }
+ free(buf);
+}
+
+void
+main(int argc, char *argv[])
+{
+ char *tostr, *file;
+ int fd, uncompressed;
+ ulong tochan;
+ Memimage *m, *n;
+
+ tostr = nil;
+ uncompressed = 0;
+ ARGBEGIN{
+ case 'c':
+ tostr = EARGF(usage());
+ break;
+ case 'u':
+ uncompressed = 1;
+ break;
+ default:
+ usage();
+ }ARGEND
+
+ memimageinit();
+
+ file = "<stdin>";
+ m = nil;
+
+ switch(argc){
+ case 0:
+ m = readmemimage(0);
+ break;
+ case 1:
+ file = argv[0];
+ fd = open(file, OREAD);
+ if(fd < 0)
+ sysfatal("can't open %s: %r", file);
+ m = readmemimage(fd);
+ close(fd);
+ break;
+ default:
+ usage();
+ }
+
+ if(m == nil)
+ sysfatal("can't read %s: %r", file);
+
+ if(tostr == nil)
+ tochan = m->chan;
+ else{
+ tochan = strtochan(tostr);
+ if(tochan == 0)
+ sysfatal("bad channel descriptor '%s'", tostr);
+ }
+
+ n = allocmemimage(m->r, tochan);
+ if(n == nil)
+ sysfatal("can't allocate new image: %r");
+
+ memimagedraw(n, n->r, m, m->r.min, nil, ZP, S);
+ if(uncompressed)
+ writeuncompressed(1, n);
+ else
+ writememimage(1, n);
+ exits(nil);
+}