]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/jpg/toppm.c
6fac8f3b3324adfd15db7051956a01a9b2d23b0a
[plan9front.git] / sys / src / cmd / jpg / toppm.c
1 #include <u.h>
2 #include <libc.h>
3 #include <draw.h>
4 #include <memdraw.h>
5 #include <ctype.h>
6 #include <bio.h>
7 #include "imagefile.h"
8
9 void
10 usage(void)
11 {
12         fprint(2, "usage: toppm [-c 'comment'] [-r] [file]\n");
13         exits("usage");
14 }
15
16 void
17 main(int argc, char *argv[])
18 {
19         Biobuf bout;
20         Memimage *i, *ni;
21         int fd, rflag;
22         char buf[256];
23         char *err, *comment;
24
25         rflag = 0;
26         comment = nil;
27         ARGBEGIN{
28         case 'c':
29                 comment = ARGF();
30                 if(comment == nil)
31                         usage();
32                 if(strchr(comment, '\n') != nil){
33                         fprint(2, "ppm: comment cannot contain newlines\n");
34                         usage();
35                 }
36                 break;
37         case 'r':
38                 rflag = 1;
39                 break;
40         default:
41                 usage();
42         }ARGEND
43
44         if(argc > 1)
45                 usage();
46
47         if(Binit(&bout, 1, OWRITE) < 0)
48                 sysfatal("Binit failed: %r");
49
50         memimageinit();
51
52         err = nil;
53
54         if(argc == 0){
55                 i = readmemimage(0);
56                 if(i == nil)
57                         sysfatal("reading input: %r");
58                 ni = memmultichan(i);
59                 if(ni == nil)
60                         sysfatal("converting image to RGBV: %r");
61                 if(i != ni){
62                         freememimage(i);
63                         i = ni;
64                 }
65                 err = memwriteppm(&bout, i, comment, rflag);
66         }else{
67                 fd = open(argv[0], OREAD);
68                 if(fd < 0)
69                         sysfatal("can't open %s: %r", argv[0]);
70                 i = readmemimage(fd);
71                 if(i == nil)
72                         sysfatal("can't readimage %s: %r", argv[0]);
73                 close(fd);
74                 ni = memmultichan(i);
75                 if(ni == nil)
76                         sysfatal("converting image to RGB24: %r");
77                 if(i != ni){
78                         freememimage(i);
79                         i = ni;
80                 }
81                 if(comment)
82                         err = memwriteppm(&bout, i, comment, rflag);
83                 else{
84                         snprint(buf, sizeof buf, "Converted by Plan 9 from %s", argv[0]);
85                         err = memwriteppm(&bout, i, buf, rflag);
86                 }
87                 freememimage(i);
88         }
89
90         if(err != nil)
91                 fprint(2, "toppm: %s\n", err);
92         exits(err);
93 }