1 28994509 2004-04-21 devnull #include <u.h>
2 28994509 2004-04-21 devnull #include <libc.h>
3 28994509 2004-04-21 devnull #include <draw.h>
4 28994509 2004-04-21 devnull #include <memdraw.h>
5 28994509 2004-04-21 devnull #include <ctype.h>
6 28994509 2004-04-21 devnull #include <bio.h>
7 28994509 2004-04-21 devnull #include "imagefile.h"
10 28994509 2004-04-21 devnull usage(void)
12 28994509 2004-04-21 devnull fprint(2, "usage: toppm [-c 'comment'] [file]\n");
13 28994509 2004-04-21 devnull exits("usage");
17 28994509 2004-04-21 devnull main(int argc, char *argv[])
19 28994509 2004-04-21 devnull Biobuf bout;
20 28994509 2004-04-21 devnull Memimage *i, *ni;
22 28994509 2004-04-21 devnull char buf[256];
23 28994509 2004-04-21 devnull char *err, *comment;
25 28994509 2004-04-21 devnull comment = nil;
26 28994509 2004-04-21 devnull ARGBEGIN{
27 28994509 2004-04-21 devnull case 'c':
28 28994509 2004-04-21 devnull comment = ARGF();
29 28994509 2004-04-21 devnull if(comment == nil)
31 28994509 2004-04-21 devnull if(strchr(comment, '\n') != nil){
32 28994509 2004-04-21 devnull fprint(2, "ppm: comment cannot contain newlines\n");
40 28994509 2004-04-21 devnull if(argc > 1)
43 28994509 2004-04-21 devnull if(Binit(&bout, 1, OWRITE) < 0)
44 28994509 2004-04-21 devnull sysfatal("Binit failed: %r");
46 28994509 2004-04-21 devnull memimageinit();
48 28994509 2004-04-21 devnull err = nil;
50 28994509 2004-04-21 devnull if(argc == 0){
51 28994509 2004-04-21 devnull i = readmemimage(0);
52 28994509 2004-04-21 devnull if(i == nil)
53 28994509 2004-04-21 devnull sysfatal("reading input: %r");
54 28994509 2004-04-21 devnull ni = memmultichan(i);
55 28994509 2004-04-21 devnull if(ni == nil)
56 28994509 2004-04-21 devnull sysfatal("converting image to RGBV: %r");
57 28994509 2004-04-21 devnull if(i != ni){
58 28994509 2004-04-21 devnull freememimage(i);
61 28994509 2004-04-21 devnull if(err == nil)
62 28994509 2004-04-21 devnull err = memwriteppm(&bout, i, comment);
64 28994509 2004-04-21 devnull fd = open(argv[0], OREAD);
65 28994509 2004-04-21 devnull if(fd < 0)
66 28994509 2004-04-21 devnull sysfatal("can't open %s: %r", argv[0]);
67 28994509 2004-04-21 devnull i = readmemimage(fd);
68 28994509 2004-04-21 devnull if(i == nil)
69 28994509 2004-04-21 devnull sysfatal("can't readimage %s: %r", argv[0]);
70 28994509 2004-04-21 devnull close(fd);
71 28994509 2004-04-21 devnull ni = memmultichan(i);
72 28994509 2004-04-21 devnull if(ni == nil)
73 28994509 2004-04-21 devnull sysfatal("converting image to RGBV: %r");
74 28994509 2004-04-21 devnull if(i != ni){
75 28994509 2004-04-21 devnull freememimage(i);
78 28994509 2004-04-21 devnull if(comment)
79 28994509 2004-04-21 devnull err = memwriteppm(&bout, i, comment);
81 28994509 2004-04-21 devnull snprint(buf, sizeof buf, "Converted by Plan 9 from %s", argv[0]);
82 28994509 2004-04-21 devnull err = memwriteppm(&bout, i, buf);
84 28994509 2004-04-21 devnull freememimage(i);
87 28994509 2004-04-21 devnull if(err != nil)
88 28994509 2004-04-21 devnull fprint(2, "toppm: %s\n", err);
89 28994509 2004-04-21 devnull exits(err);