1/* vi: set sw=4 ts=4: */ 2/* 3 * scriptreplay - play back typescripts, using timing information 4 * 5 * pascal.bellard@ads-lu.com 6 * 7 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 8 */ 9//config:config SCRIPTREPLAY 10//config: bool "scriptreplay (2.4 kb)" 11//config: default y 12//config: help 13//config: This program replays a typescript, using timing information 14//config: given by script -t. 15 16//applet:IF_SCRIPTREPLAY(APPLET(scriptreplay, BB_DIR_BIN, BB_SUID_DROP)) 17 18//kbuild:lib-$(CONFIG_SCRIPTREPLAY) += scriptreplay.o 19 20//usage:#define scriptreplay_trivial_usage 21//usage: "TIMINGFILE [TYPESCRIPT [DIVISOR]]" 22//usage:#define scriptreplay_full_usage "\n\n" 23//usage: "Play back typescripts, using timing information" 24 25#include "libbb.h" 26 27int scriptreplay_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 28int scriptreplay_main(int argc UNUSED_PARAM, char **argv) 29{ 30 const char *script = "typescript"; 31 double delay, factor = 1000000.0; 32 int fd; 33 unsigned long count; 34 FILE *tfp; 35 36 if (!argv[1]) 37 bb_show_usage(); 38 39 if (argv[2]) { 40 script = argv[2]; 41 if (argv[3]) 42 factor /= atof(argv[3]); 43 } 44 45 tfp = xfopen_for_read(argv[1]); 46 fd = xopen(script, O_RDONLY); 47 while (fscanf(tfp, "%lf %lu\n", &delay, &count) == 2) { 48 usleep(delay * factor); 49 bb_copyfd_exact_size(fd, STDOUT_FILENO, count); 50 } 51 if (ENABLE_FEATURE_CLEAN_UP) { 52 close(fd); 53 fclose(tfp); 54 } 55 return EXIT_SUCCESS; 56} 57