180ee5cbfSDavid du Colombier #include <u.h>
280ee5cbfSDavid du Colombier #include <libc.h>
380ee5cbfSDavid du Colombier #include <draw.h>
480ee5cbfSDavid du Colombier #include <memdraw.h>
580ee5cbfSDavid du Colombier #include <ctype.h>
680ee5cbfSDavid du Colombier #include <bio.h>
780ee5cbfSDavid du Colombier #include <flate.h>
880ee5cbfSDavid du Colombier #include "imagefile.h"
980ee5cbfSDavid du Colombier
1080ee5cbfSDavid du Colombier void
usage(void)1180ee5cbfSDavid du Colombier usage(void)
1280ee5cbfSDavid du Colombier {
1380ee5cbfSDavid du Colombier fprint(2, "usage: topng [-c 'comment'] [-g 'gamma'] [file]\n");
1480ee5cbfSDavid du Colombier exits("usage");
1580ee5cbfSDavid du Colombier }
1680ee5cbfSDavid du Colombier
1780ee5cbfSDavid du Colombier void
main(int argc,char * argv[])1880ee5cbfSDavid du Colombier main(int argc, char *argv[])
1980ee5cbfSDavid du Colombier {
2080ee5cbfSDavid du Colombier Biobuf bout;
2180ee5cbfSDavid du Colombier Memimage *i;
2280ee5cbfSDavid du Colombier int fd;
2380ee5cbfSDavid du Colombier char *err, *filename;
2480ee5cbfSDavid du Colombier ImageInfo II;
2580ee5cbfSDavid du Colombier
2680ee5cbfSDavid du Colombier ARGBEGIN{
2780ee5cbfSDavid du Colombier case 'c':
2880ee5cbfSDavid du Colombier II.comment = ARGF();
2980ee5cbfSDavid du Colombier if(II.comment == nil)
3080ee5cbfSDavid du Colombier usage();
3180ee5cbfSDavid du Colombier II.fields_set |= II_COMMENT;
3280ee5cbfSDavid du Colombier break;
3380ee5cbfSDavid du Colombier case 'g':
3480ee5cbfSDavid du Colombier II.gamma = atof(ARGF());
3580ee5cbfSDavid du Colombier if(II.gamma == 0.)
3680ee5cbfSDavid du Colombier usage();
3780ee5cbfSDavid du Colombier II.fields_set |= II_GAMMA;
3880ee5cbfSDavid du Colombier break;
39*9a747e4fSDavid du Colombier case 't':
40*9a747e4fSDavid du Colombier break;
4180ee5cbfSDavid du Colombier default:
4280ee5cbfSDavid du Colombier usage();
4380ee5cbfSDavid du Colombier }ARGEND
4480ee5cbfSDavid du Colombier
4580ee5cbfSDavid du Colombier if(Binit(&bout, 1, OWRITE) < 0)
4680ee5cbfSDavid du Colombier sysfatal("Binit failed: %r");
4780ee5cbfSDavid du Colombier memimageinit();
4880ee5cbfSDavid du Colombier
4980ee5cbfSDavid du Colombier if(argc == 0){
5080ee5cbfSDavid du Colombier fd = 0;
5180ee5cbfSDavid du Colombier filename = "<stdin>";
5280ee5cbfSDavid du Colombier }else{
5380ee5cbfSDavid du Colombier fd = open(argv[0], OREAD);
5480ee5cbfSDavid du Colombier if(fd < 0)
5580ee5cbfSDavid du Colombier sysfatal("can't open %s: %r", argv[0]);
5680ee5cbfSDavid du Colombier filename = argv[0];
5780ee5cbfSDavid du Colombier }
5880ee5cbfSDavid du Colombier
5980ee5cbfSDavid du Colombier i = readmemimage(fd);
6080ee5cbfSDavid du Colombier if(i == nil)
6180ee5cbfSDavid du Colombier sysfatal("can't readimage %s: %r", filename);
6280ee5cbfSDavid du Colombier close(fd);
6380ee5cbfSDavid du Colombier
6480ee5cbfSDavid du Colombier err = memwritepng(&bout, i, &II);
6580ee5cbfSDavid du Colombier freememimage(i);
6680ee5cbfSDavid du Colombier
6780ee5cbfSDavid du Colombier if(err != nil)
6880ee5cbfSDavid du Colombier fprint(2, "topng: %s\n", err);
6980ee5cbfSDavid du Colombier exits(err);
7080ee5cbfSDavid du Colombier }
71