URI:
       ttoppm.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       ttoppm.c (1571B)
       ---
            1 #include <u.h>
            2 #include <libc.h>
            3 #include <draw.h>
            4 #include <memdraw.h>
            5 #include <ctype.h>
            6 #include <bio.h>
            7 #include "imagefile.h"
            8 
            9 void
           10 usage(void)
           11 {
           12         fprint(2, "usage: toppm [-c 'comment'] [file]\n");
           13         exits("usage");
           14 }
           15 
           16 void
           17 main(int argc, char *argv[])
           18 {
           19         Biobuf bout;
           20         Memimage *i, *ni;
           21         int fd;
           22         char buf[256];
           23         char *err, *comment;
           24 
           25         comment = nil;
           26         ARGBEGIN{
           27         case 'c':
           28                 comment = ARGF();
           29                 if(comment == nil)
           30                         usage();
           31                 if(strchr(comment, '\n') != nil){
           32                         fprint(2, "ppm: comment cannot contain newlines\n");
           33                         usage();
           34                 }
           35                 break;
           36         default:
           37                 usage();
           38         }ARGEND
           39 
           40         if(argc > 1)
           41                 usage();
           42 
           43         if(Binit(&bout, 1, OWRITE) < 0)
           44                 sysfatal("Binit failed: %r");
           45 
           46         memimageinit();
           47 
           48         err = nil;
           49 
           50         if(argc == 0){
           51                 i = readmemimage(0);
           52                 if(i == nil)
           53                         sysfatal("reading input: %r");
           54                 ni = memmultichan(i);
           55                 if(ni == nil)
           56                         sysfatal("converting image to RGBV: %r");
           57                 if(i != ni){
           58                         freememimage(i);
           59                         i = ni;
           60                 }
           61                 if(err == nil)
           62                         err = memwriteppm(&bout, i, comment);
           63         }else{
           64                 fd = open(argv[0], OREAD);
           65                 if(fd < 0)
           66                         sysfatal("can't open %s: %r", argv[0]);
           67                 i = readmemimage(fd);
           68                 if(i == nil)
           69                         sysfatal("can't readimage %s: %r", argv[0]);
           70                 close(fd);
           71                 ni = memmultichan(i);
           72                 if(ni == nil)
           73                         sysfatal("converting image to RGBV: %r");
           74                 if(i != ni){
           75                         freememimage(i);
           76                         i = ni;
           77                 }
           78                 if(comment)
           79                         err = memwriteppm(&bout, i, comment);
           80                 else{
           81                         snprint(buf, sizeof buf, "Converted by Plan 9 from %s", argv[0]);
           82                         err = memwriteppm(&bout, i, buf);
           83                 }
           84                 freememimage(i);
           85         }
           86 
           87         if(err != nil)
           88                 fprint(2, "toppm: %s\n", err);
           89         exits(err);
           90 }