busybox/util-linux/scriptreplay.c
<<
>>
Prefs
   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