#include #include #include #include #include #include #include "imagefile.h" void usage(void) { fprint(2, "usage: togif [-l loopcount] [-c 'comment'] [-d Δt (ms)] [-t transparency-index] [file ... [-d Δt] file ...]\n"); exits("usage"); } #define UNSET (-12345678) void main(int argc, char *argv[]) { Biobuf bout; Memimage *i, *ni; int fd, j, dt, trans, loop; char buf[256]; char *err, *comment, *s; comment = nil; dt = -1; trans = -1; loop = UNSET; ARGBEGIN{ case 'l': s = ARGF(); if(s==nil || (!isdigit(s[0]) && s[0]!='-')) usage(); loop = atoi(s); break; case 'c': comment = ARGF(); if(comment == nil) usage(); break; case 'd': s = ARGF(); if(s==nil || !isdigit(s[0])) usage(); dt = atoi(s); break; case 't': s = ARGF(); if(s==nil || !isdigit(s[0])) usage(); trans = atoi(s); if(trans > 255) usage(); break; default: usage(); }ARGEND 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 = memonechan(i); if(ni == nil) sysfatal("converting image to RGBV: %r"); if(i != ni){ freememimage(i); i = ni; } err = memstartgif(&bout, i, -1); if(err == nil){ if(comment) err = memwritegif(&bout, i, comment, dt, trans); else{ snprint(buf, sizeof buf, "Converted by Plan 9 from "); err = memwritegif(&bout, i, buf, dt, trans); } } }else{ if(loop == UNSET){ if(argc == 1) loop = -1; /* no loop for single image */ else loop = 0; /* the default case: 0 means infinite loop */ } for(j=0; j