#!/usr/bin/perl
use strict; use warnings;

my $offset = $ARGV[0];
unless (defined $offset && $offset =~ /^-?\d+$/) {
	die "usage: stred <offset in ms>\n";
}

our $line_count;
my $l;

sub g {
	BEGIN { $line_count = 0; }
	$l = <STDIN>;
	if (defined $l) {
		++$line_count;
		chomp $l;
		$l =~ s/\r//;
	}
	return $l;
}
sub p {
	print $_[0], "\r\n";
}

sub parse_time {
	my ($time) = @_;
	my ($h, $m, $s, $ms) = $time =~ /^(\d\d):(\d\d):(\d\d),(\d\d\d)$/;
	defined $h or
		die "line $line_count: bad time format: $time\n";
	my $ms_tot = $ms + 1000 * ($s + 60 * ($m + 60 * $h));
	return $ms_tot;
}

sub format_time {
	my ($x) = @_;
	my $ms = $x % 1000; $x = ($x - $ms) / 1000;
	my $s = $x % 60; $x = ($x - $s) / 60;
	my $m = $x % 60; $x = ($x - $m) / 60;
	my $h = $x;
	return sprintf("%02d:%02d:%02d,%03d", $h, $m, $s, $ms);
}

my $count = 1;
my ($i, $times, @txt, $from, $to);
while (defined($i = g)) {
	$times = g;
	@txt = ();
	while (defined($l = g) && $l ne "") {
		push @txt, $l;
	}
	($from, $to) = $times =~ /^(.*?) --> (.*?)$/;
	defined $from or
		die "line $line_count: bad times format: $times\n";
	for my $x ($from, $to) {
		my $ms = parse_time($x);
		if (format_time($ms) ne $x) {
			die "parse_time / format_time did not work for: $x\n";
		}
		$ms += $offset;
		$x = format_time($ms);
	}
	$times = "$from --> $to";
#	p($count);
	p($i);
	p($times);
	p($_) for @txt;
	p('');
	++$count;
}

