plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

topng.c (1116B)


      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
     11 usage(void)
     12 {
     13 	fprint(2, "usage: topng [-c 'comment'] [-g 'gamma'] [file]\n");
     14 	exits("usage");
     15 }
     16 
     17 void
     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 }