7 use Time::HiRes qw(time usleep);
10 if (!getopts('b:e:fp', \%opt) || !$ARGV[0]) {
11 die "Usage: $0 [-b starttime] [-e endtime] [-f] [-p] logfile\n"
12 . "-f ... replay as fast as possible, without pausing\n"
13 . "-p ... at the end, want for a keypress\n";
16 my $logfile = shift @ARGV;
18 open my $logfh, '<', $logfile
19 or die "Can't open $logfile: $!";
21 my $start_prog_time = time;
24 while (my $line = <$logfh>) {
26 $line =~ s/\A\s+//xms;
27 my ($l_time, @data) = split(/\s+/, $line);
29 next if ($opt{b} && $opt{b} > $l_time);
30 next if ($opt{e} && $opt{e} < $l_time);
32 print pack("C*", map { hex $_ } @data);
36 $start_log_time ||= $l_time;
38 my $log_delay = $l_time - $start_log_time;
39 my $real_delay = time - $start_prog_time;
40 if ($real_delay < $log_delay) {
41 print STDERR "usleep for ", $log_delay - $real_delay, "\n";
42 usleep(1000_000 * ($log_delay - $real_delay));
48 print STDERR "Replay log finished - press a key: ";