Blame


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"
8 28994509 2004-04-21 devnull
9 28994509 2004-04-21 devnull void
10 28994509 2004-04-21 devnull usage(void)
11 28994509 2004-04-21 devnull {
12 28994509 2004-04-21 devnull fprint(2, "usage: toppm [-c 'comment'] [file]\n");
13 28994509 2004-04-21 devnull exits("usage");
14 28994509 2004-04-21 devnull }
15 28994509 2004-04-21 devnull
16 28994509 2004-04-21 devnull void
17 28994509 2004-04-21 devnull main(int argc, char *argv[])
18 28994509 2004-04-21 devnull {
19 28994509 2004-04-21 devnull Biobuf bout;
20 28994509 2004-04-21 devnull Memimage *i, *ni;
21 28994509 2004-04-21 devnull int fd;
22 28994509 2004-04-21 devnull char buf[256];
23 28994509 2004-04-21 devnull char *err, *comment;
24 28994509 2004-04-21 devnull
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)
30 28994509 2004-04-21 devnull usage();
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");
33 28994509 2004-04-21 devnull usage();
34 28994509 2004-04-21 devnull }
35 28994509 2004-04-21 devnull break;
36 28994509 2004-04-21 devnull default:
37 28994509 2004-04-21 devnull usage();
38 28994509 2004-04-21 devnull }ARGEND
39 28994509 2004-04-21 devnull
40 28994509 2004-04-21 devnull if(argc > 1)
41 28994509 2004-04-21 devnull usage();
42 28994509 2004-04-21 devnull
43 28994509 2004-04-21 devnull if(Binit(&bout, 1, OWRITE) < 0)
44 28994509 2004-04-21 devnull sysfatal("Binit failed: %r");
45 28994509 2004-04-21 devnull
46 28994509 2004-04-21 devnull memimageinit();
47 28994509 2004-04-21 devnull
48 28994509 2004-04-21 devnull err = nil;
49 28994509 2004-04-21 devnull
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);
59 28994509 2004-04-21 devnull i = ni;
60 28994509 2004-04-21 devnull }
61 28994509 2004-04-21 devnull if(err == nil)
62 28994509 2004-04-21 devnull err = memwriteppm(&bout, i, comment);
63 28994509 2004-04-21 devnull }else{
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);
76 28994509 2004-04-21 devnull i = ni;
77 28994509 2004-04-21 devnull }
78 28994509 2004-04-21 devnull if(comment)
79 28994509 2004-04-21 devnull err = memwriteppm(&bout, i, comment);
80 28994509 2004-04-21 devnull else{
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);
83 28994509 2004-04-21 devnull }
84 28994509 2004-04-21 devnull freememimage(i);
85 28994509 2004-04-21 devnull }
86 28994509 2004-04-21 devnull
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);
90 28994509 2004-04-21 devnull }