aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/jpg/toppm.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2004-04-21 22:19:33 +0000
committerrsc <devnull@localhost>2004-04-21 22:19:33 +0000
commit28994509cc11ac6a5443054dfae1fedfb69039bc (patch)
tree9d5adcd11af2708db0ecc246e008c308ca0f97d4 /src/cmd/jpg/toppm.c
parenta01e58366c54804f15f84d6e21d13f2e4080977a (diff)
downloadplan9port-28994509cc11ac6a5443054dfae1fedfb69039bc.tar.gz
plan9port-28994509cc11ac6a5443054dfae1fedfb69039bc.tar.bz2
plan9port-28994509cc11ac6a5443054dfae1fedfb69039bc.zip
Why not?
Diffstat (limited to 'src/cmd/jpg/toppm.c')
-rw-r--r--src/cmd/jpg/toppm.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/cmd/jpg/toppm.c b/src/cmd/jpg/toppm.c
new file mode 100644
index 00000000..e3094655
--- /dev/null
+++ b/src/cmd/jpg/toppm.c
@@ -0,0 +1,90 @@
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+#include <memdraw.h>
+#include <ctype.h>
+#include <bio.h>
+#include "imagefile.h"
+
+void
+usage(void)
+{
+ fprint(2, "usage: toppm [-c 'comment'] [file]\n");
+ exits("usage");
+}
+
+void
+main(int argc, char *argv[])
+{
+ Biobuf bout;
+ Memimage *i, *ni;
+ int fd;
+ char buf[256];
+ char *err, *comment;
+
+ comment = nil;
+ ARGBEGIN{
+ case 'c':
+ comment = ARGF();
+ if(comment == nil)
+ usage();
+ if(strchr(comment, '\n') != nil){
+ fprint(2, "ppm: comment cannot contain newlines\n");
+ usage();
+ }
+ break;
+ default:
+ usage();
+ }ARGEND
+
+ if(argc > 1)
+ usage();
+
+ if(Binit(&bout, 1, OWRITE) < 0)
+ sysfatal("Binit failed: %r");
+
+ memimageinit();
+
+ err = nil;
+
+ if(argc == 0){
+ i = readmemimage(0);
+ if(i == nil)
+ sysfatal("reading input: %r");
+ ni = memmultichan(i);
+ if(ni == nil)
+ sysfatal("converting image to RGBV: %r");
+ if(i != ni){
+ freememimage(i);
+ i = ni;
+ }
+ if(err == nil)
+ err = memwriteppm(&bout, i, comment);
+ }else{
+ fd = open(argv[0], OREAD);
+ if(fd < 0)
+ sysfatal("can't open %s: %r", argv[0]);
+ i = readmemimage(fd);
+ if(i == nil)
+ sysfatal("can't readimage %s: %r", argv[0]);
+ close(fd);
+ ni = memmultichan(i);
+ if(ni == nil)
+ sysfatal("converting image to RGBV: %r");
+ if(i != ni){
+ freememimage(i);
+ i = ni;
+ }
+ if(comment)
+ err = memwriteppm(&bout, i, comment);
+ else{
+ snprint(buf, sizeof buf, "Converted by Plan 9 from %s", argv[0]);
+ err = memwriteppm(&bout, i, buf);
+ }
+ freememimage(i);
+ }
+
+ if(err != nil)
+ fprint(2, "toppm: %s\n", err);
+ exits(err);
+}