text: #include <u.h>
  #include <lib9.h>
  #include <draw.h>
  #include <memdraw.h>
  #include <ctype.h>
  #include <bio.h>
  #include <flate.h>
  #include "imagefile.h"
  
  void
  usage(void)
  {
  	fprint(2, "usage: topng [-c 'comment'] [-g 'gamma'] [file]\n");
  	exits("usage");
  }
  
  void
  main(int argc, char *argv[])
  {
  	Biobuf bout;
  	Memimage *i;
  	int fd;
  	char *err, *filename;
  	ImageInfo II;
  
  	ARGBEGIN{
  	case 'c':
  		II.comment = ARGF();
  		if(II.comment == nil)
  			usage();
  		II.fields_set |= II_COMMENT;
  		break;
  	case 'g':
  		II.gamma = atof(ARGF());
  		if(II.gamma == 0.)
  			usage();
  		II.fields_set |= II_GAMMA;
  		break;
  	case 't':
  		break;
  	default:
  		usage();
  	}ARGEND
  
  	if(Binit(&bout, 1, OWRITE) < 0)
  		sysfatal("Binit failed: %r");
  	memimageinit();
  
  	if(argc == 0){
  		fd = 0;
  		filename = "<stdin>";
  	}else{
  		fd = open(argv[0], OREAD);
  		if(fd < 0)
  			sysfatal("can't open %s: %r", argv[0]);
  		filename = argv[0];
  	}
  
  	i = readmemimage(fd);
  	if(i == nil)
  		sysfatal("can't readimage %s: %r", filename);
  	close(fd);
  
  	err = memwritepng(&bout, i, &II);
  	freememimage(i);
  
  	if(err != nil)
  		fprint(2, "topng: %s\n", err);
  	exits(err);
  }
  