/* * doit.c: Quick hack to play a sequence of GIF files. * * Rob McCool * * This code is released into the public domain. Do whatever * you want with it. * */ #include #include #include #include #include #include #define HEADER \ "Content-type: multipart/x-mixed-replace;boundary=ThisRandomString\n" \ #define RANDOMSTRING "\n--ThisRandomString\n" #define ENDSTRING "\n--ThisRandomString--\n" #define CTSTRING "Content-type: image/gif\n\n" int main(int argc, char *argv[]) { struct stat fi; char fn[50]; caddr_t fp; int fd; int i,j; if (write(STDOUT_FILENO, HEADER, strlen(HEADER)) == -1) { exit(0); } if (write(STDOUT_FILENO, RANDOMSTRING, strlen(RANDOMSTRING)) == -1) { exit(0); } sleep(1); for (j=0; j <4; j++) for ( i = 1; i < 8; i++ ) { if (write(STDOUT_FILENO, CTSTRING, strlen(CTSTRING)) == -1) { exit(0); } sprintf(fn, "/gifs/run%d.gif", i); if( (fd = open(fn, O_RDONLY)) == -1) { continue; } fstat(fd, &fi); fp = mmap(NULL, fi.st_size, PROT_READ, MAP_PRIVATE, fd, 0); if (fp == (caddr_t) -1) { exit(0); } if (write(STDOUT_FILENO, (void *) fp, fi.st_size) == -1) { exit(0); } munmap(fp, fi.st_size); close(fd); if (write(STDOUT_FILENO, RANDOMSTRING, strlen(RANDOMSTRING)) == -1) { exit(0); } } write(STDOUT_FILENO, ENDSTRING, strlen(ENDSTRING)); }