]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/jpg/toppm.c
cwfs: back to previous version
[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'] [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;
22         char buf[256];
23         char *err, *comment;
24
25         comment = nil;
26         ARGBEGIN{
27         case 'c':
28                 comment = ARGF();
29                 if(comment == nil)
30                         usage();
31                 if(strchr(comment, '\n') != nil){
32                         fprint(2, "ppm: comment cannot contain newlines\n");
33                         usage();
34                 }
35                 break;
36         default:
37                 usage();
38         }ARGEND
39
40         if(argc > 1)
41                 usage();
42
43         if(Binit(&bout, 1, OWRITE) < 0)
44                 sysfatal("Binit failed: %r");
45
46         memimageinit();
47
48         err = nil;
49
50         if(argc == 0){
51                 i = readmemimage(0);
52                 if(i == nil)
53                         sysfatal("reading input: %r");
54                 ni = memmultichan(i);
55                 if(ni == nil)
56                         sysfatal("converting image to RGBV: %r");
57                 if(i != ni){
58                         freememimage(i);
59                         i = ni;
60                 }
61                 if(err == nil)
62                         err = memwriteppm(&bout, i, comment);
63         }else{
64                 fd = open(argv[0], OREAD);
65                 if(fd < 0)
66                         sysfatal("can't open %s: %r", argv[0]);
67                 i = readmemimage(fd);
68                 if(i == nil)
69                         sysfatal("can't readimage %s: %r", argv[0]);
70                 close(fd);
71                 ni = memmultichan(i);
72                 if(ni == nil)
73                         sysfatal("converting image to RGBV: %r");
74                 if(i != ni){
75                         freememimage(i);
76                         i = ni;
77                 }
78                 if(comment)
79                         err = memwriteppm(&bout, i, comment);
80                 else{
81                         snprint(buf, sizeof buf, "Converted by Plan 9 from %s", argv[0]);
82                         err = memwriteppm(&bout, i, buf);
83                 }
84                 freememimage(i);
85         }
86
87         if(err != nil)
88                 fprint(2, "toppm: %s\n", err);
89         exits(err);
90 }