123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #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);
- }
|