| /* vi: set sw=4 ts=4: */ | |
| /* | |
| * scriptreplay - play back typescripts, using timing information | |
| * | |
| * pascal.bellard@ads-lu.com | |
| * | |
| * Licensed under GPLv2 or later, see file LICENSE in this source tree. | |
| */ | |
| //config:config SCRIPTREPLAY | |
| //config: bool "scriptreplay (2.4 kb)" | |
| //config: default y | |
| //config: help | |
| //config: This program replays a typescript, using timing information | |
| //config: given by script -t. | |
| //applet:IF_SCRIPTREPLAY(APPLET(scriptreplay, BB_DIR_BIN, BB_SUID_DROP)) | |
| //kbuild:lib-$(CONFIG_SCRIPTREPLAY) += scriptreplay.o | |
| //usage:#define scriptreplay_trivial_usage | |
| //usage: "TIMINGFILE [TYPESCRIPT [DIVISOR]]" | |
| //usage:#define scriptreplay_full_usage "\n\n" | |
| //usage: "Play back typescripts, using timing information" | |
| #include "libbb.h" | |
| int scriptreplay_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | |
| int scriptreplay_main(int argc UNUSED_PARAM, char **argv) | |
| { | |
| const char *script = "typescript"; | |
| double delay, factor = 1000000.0; | |
| int fd; | |
| unsigned long count; | |
| FILE *tfp; | |
| if (!argv[1]) | |
| bb_show_usage(); | |
| if (argv[2]) { | |
| script = argv[2]; | |
| if (argv[3]) | |
| factor /= atof(argv[3]); | |
| } | |
| tfp = xfopen_for_read(argv[1]); | |
| fd = xopen(script, O_RDONLY); | |
| while (fscanf(tfp, "%lf %lu\n", &delay, &count) == 2) { | |
| usleep(delay * factor); | |
| bb_copyfd_exact_size(fd, STDOUT_FILENO, count); | |
| } | |
| if (ENABLE_FEATURE_CLEAN_UP) { | |
| close(fd); | |
| fclose(tfp); | |
| } | |
| return EXIT_SUCCESS; | |
| } |