|  | #include <u.h> | 
|  | #include <libc.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); | 
|  | } |