From c8b6342d3c2a167dec16931815926e9e4387e7ef Mon Sep 17 00:00:00 2001 From: rsc Date: Thu, 13 Jan 2005 04:49:19 +0000 Subject: Many small edits. --- src/cmd/draw/iconv.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/cmd/draw/iconv.c (limited to 'src/cmd/draw') 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 +#include +#include +#include + +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; yr.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 = ""; + 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); +} -- cgit v1.2.3