#include <u.h> | |
#include <libc.h> | |
#include <draw.h> | |
#include <memdraw.h> | |
#include <ctype.h> | |
#include <bio.h> | |
#include "imagefile.h" | |
void | |
usage(void) | |
{ | |
fprint(2, "usage: toppm [-c 'comment'] [file]\n"); | |
exits("usage"); | |
} | |
void | |
main(int argc, char *argv[]) | |
{ | |
Biobuf bout; | |
Memimage *i, *ni; | |
int fd; | |
char buf[256]; | |
char *err, *comment; | |
comment = nil; | |
ARGBEGIN{ | |
case 'c': | |
comment = ARGF(); | |
if(comment == nil) | |
usage(); | |
if(strchr(comment, '\n') != nil){ | |
fprint(2, "ppm: comment cannot contain newlines\n"); | |
usage(); | |
} | |
break; | |
default: | |
usage(); | |
}ARGEND | |
if(argc > 1) | |
usage(); | |
if(Binit(&bout, 1, OWRITE) < 0) | |
sysfatal("Binit failed: %r"); | |
memimageinit(); | |
err = nil; | |
if(argc == 0){ | |
i = readmemimage(0); | |
if(i == nil) | |
sysfatal("reading input: %r"); | |
ni = memmultichan(i); | |
if(ni == nil) | |
sysfatal("converting image to RGBV: %r"); | |
if(i != ni){ | |
freememimage(i); | |
i = ni; | |
} | |
if(err == nil) | |
err = memwriteppm(&bout, i, comment); | |
}else{ | |
fd = open(argv[0], OREAD); | |
if(fd < 0) | |
sysfatal("can't open %s: %r", argv[0]); | |
i = readmemimage(fd); | |
if(i == nil) | |
sysfatal("can't readimage %s: %r", argv[0]); | |
close(fd); | |
ni = memmultichan(i); | |
if(ni == nil) | |
sysfatal("converting image to RGBV: %r"); | |
if(i != ni){ | |
freememimage(i); | |
i = ni; | |
} | |
if(comment) | |
err = memwriteppm(&bout, i, comment); | |
else{ | |
snprint(buf, sizeof buf, "Converted by Plan 9 from %s", argv[0]); | |
err = memwriteppm(&bout, i, buf); | |
} | |
freememimage(i); | |
} | |
if(err != nil) | |
fprint(2, "toppm: %s\n", err); | |
exits(err); | |
} |