URI:
       ttogif.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
       ---
       ttogif.c (2856B)
       ---
            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: togif [-l loopcount] [-c 'comment'] [-d Δt (ms)] [-t transparency-index] [file ... [-d Δt] file ...]\n");
           13         exits("usage");
           14 }
           15 
           16 #define        UNSET (-12345678)
           17 
           18 void
           19 main(int argc, char *argv[])
           20 {
           21         Biobuf bout;
           22         Memimage *i, *ni;
           23         int fd, j, dt, trans, loop;
           24         char buf[256];
           25         char *err, *comment, *s;
           26 
           27         comment = nil;
           28         dt = -1;
           29         trans = -1;
           30         loop = UNSET;
           31         ARGBEGIN{
           32         case 'l':
           33                 s = ARGF();
           34                 if(s==nil || (!isdigit((uchar)s[0]) && s[0]!='-'))
           35                         usage();
           36                 loop = atoi(s);
           37                 break;
           38         case 'c':
           39                 comment = ARGF();
           40                 if(comment == nil)
           41                         usage();
           42                 break;
           43         case 'd':
           44                 s = ARGF();
           45                 if(s==nil || !isdigit((uchar)s[0]))
           46                         usage();
           47                 dt = atoi(s);
           48                 break;
           49         case 't':
           50                 s = ARGF();
           51                 if(s==nil || !isdigit((uchar)s[0]))
           52                         usage();
           53                 trans = atoi(s);
           54                 if(trans > 255)
           55                         usage();
           56                 break;
           57         default:
           58                 usage();
           59         }ARGEND
           60 
           61         if(Binit(&bout, 1, OWRITE) < 0)
           62                 sysfatal("Binit failed: %r");
           63 
           64         memimageinit();
           65 
           66         err = nil;
           67 
           68         if(argc == 0){
           69                 i = readmemimage(0);
           70                 if(i == nil)
           71                         sysfatal("reading input: %r");
           72                 ni = memonechan(i);
           73                 if(ni == nil)
           74                         sysfatal("converting image to RGBV: %r");
           75                 if(i != ni){
           76                         freememimage(i);
           77                         i = ni;
           78                 }
           79                 err = memstartgif(&bout, i, -1);
           80                 if(err == nil){
           81                         if(comment)
           82                                 err = memwritegif(&bout, i, comment, dt, trans);
           83                         else{
           84                                 snprint(buf, sizeof buf, "Converted by Plan 9 from <stdin>");
           85                                 err = memwritegif(&bout, i, buf, dt, trans);
           86                         }
           87                 }
           88         }else{
           89                 if(loop == UNSET){
           90                         if(argc == 1)
           91                                 loop = -1;        /* no loop for single image */
           92                         else
           93                                 loop = 0;        /* the default case: 0 means infinite loop */
           94                 }
           95                 for(j=0; j<argc; j++){
           96                         if(argv[j][0] == '-' && argv[j][1]=='d'){
           97                                 /* time change */
           98                                 if(argv[j][2] == '\0'){
           99                                         s = argv[++j];
          100                                         if(j == argc)
          101                                                 usage();
          102                                 }else
          103                                         s = &argv[j][2];
          104                                 if(!isdigit((uchar)s[0]))
          105                                         usage();
          106                                 dt = atoi(s);
          107                                 if(j == argc-1)        /* last argument must be file */
          108                                         usage();
          109                                 continue;
          110                         }
          111                         fd = open(argv[j], OREAD);
          112                         if(fd < 0)
          113                                 sysfatal("can't open %s: %r", argv[j]);
          114                         i = readmemimage(fd);
          115                         if(i == nil)
          116                                 sysfatal("can't readimage %s: %r", argv[j]);
          117                         close(fd);
          118                         ni = memonechan(i);
          119                         if(ni == nil)
          120                                 sysfatal("converting image to RGBV: %r");
          121                         if(i != ni){
          122                                 freememimage(i);
          123                                 i = ni;
          124                         }
          125                         if(j == 0){
          126                                 err = memstartgif(&bout, i, loop);
          127                                 if(err != nil)
          128                                         break;
          129                         }
          130                         if(comment)
          131                                 err = memwritegif(&bout, i, comment, dt, trans);
          132                         else{
          133                                 snprint(buf, sizeof buf, "Converted by Plan 9 from %s", argv[j]);
          134                                 err = memwritegif(&bout, i, buf, dt, trans);
          135                         }
          136                         if(err != nil)
          137                                 break;
          138                         freememimage(i);
          139                         comment = nil;
          140                 }
          141         }
          142         memendgif(&bout);
          143 
          144         if(err != nil)
          145                 fprint(2, "togif: %s\n", err);
          146         exits(err);
          147 }