]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/jpg/tojpg.c
Libflac: Tell it that we have stdint.h so it finds SIZE_MAX
[plan9front.git] / sys / src / cmd / jpg / tojpg.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: %s [-c 'comment'] [-ks] [file]\n", argv0);
13         exits("usage");
14 }
15
16 void
17 main(int argc, char *argv[])
18 {
19         Biobuf bout;
20         Memimage *i, *ni;
21         int fd, kflag, sflag;
22         char *err, *file, *com;
23
24         kflag = sflag = 0;
25         com = nil;
26         ARGBEGIN {
27         case 'c':
28                 com = EARGF(usage());
29                 break;
30         case 'k':
31                 kflag = 1;
32                 break;
33         case 's':
34                 sflag = 1;
35                 break;
36         default:
37                 usage();
38         } ARGEND
39
40         if(argc > 1)
41                 usage();
42         if(argc == 0) {
43                 file = "<stdin>";
44                 fd = 0;
45         } else {
46                 file = argv[0];
47                 if((fd = open(file, OREAD)) < 0)
48                         sysfatal("open %s: %r", file);
49         }
50
51         if(Binit(&bout, 1, OWRITE) < 0)
52                 sysfatal("Binit: %r");
53         memimageinit();
54
55         if((i = readmemimage(fd)) == nil)
56                 sysfatal("readimage %s: %r", file);
57         close(fd);
58         if((ni = memmultichan(i)) == nil)
59                 sysfatal("converting image to RGB24: %r");
60         if(i != ni) {
61                 freememimage(i);
62                 i = ni;
63         }
64         err = memwritejpg(&bout, i, com, kflag, sflag);
65         freememimage(i);
66
67         if(err != nil)
68                 fprint(2, "%s: %s\n", argv0, err);
69         exits(err);
70 }