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