xref: /plan9-contrib/sys/src/cmd/jpg/topng.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
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 <flate.h>
8 #include "imagefile.h"
9 
10 void
usage(void)11 usage(void)
12 {
13 	fprint(2, "usage: topng [-c 'comment'] [-g 'gamma'] [file]\n");
14 	exits("usage");
15 }
16 
17 void
main(int argc,char * argv[])18 main(int argc, char *argv[])
19 {
20 	Biobuf bout;
21 	Memimage *i;
22 	int fd;
23 	char *err, *filename;
24 	ImageInfo II;
25 
26 	ARGBEGIN{
27 	case 'c':
28 		II.comment = ARGF();
29 		if(II.comment == nil)
30 			usage();
31 		II.fields_set |= II_COMMENT;
32 		break;
33 	case 'g':
34 		II.gamma = atof(ARGF());
35 		if(II.gamma == 0.)
36 			usage();
37 		II.fields_set |= II_GAMMA;
38 		break;
39 	case 't':
40 		break;
41 	default:
42 		usage();
43 	}ARGEND
44 
45 	if(Binit(&bout, 1, OWRITE) < 0)
46 		sysfatal("Binit failed: %r");
47 	memimageinit();
48 
49 	if(argc == 0){
50 		fd = 0;
51 		filename = "<stdin>";
52 	}else{
53 		fd = open(argv[0], OREAD);
54 		if(fd < 0)
55 			sysfatal("can't open %s: %r", argv[0]);
56 		filename = argv[0];
57 	}
58 
59 	i = readmemimage(fd);
60 	if(i == nil)
61 		sysfatal("can't readimage %s: %r", filename);
62 	close(fd);
63 
64 	err = memwritepng(&bout, i, &II);
65 	freememimage(i);
66 
67 	if(err != nil)
68 		fprint(2, "topng: %s\n", err);
69 	exits(err);
70 }
71