#!/usr/bin/perl

use constant VERZE => '1.2';   #verze programu
use constant MIN_DELKA => 0.3; #minimalni delka titulku
#use diagnostics;
use locale; #pro funkci -g
use Getopt::Std;

&getopts( "hvcrs:fm:eo:ngt:" );

#volby programu:
#-h        help
#-v        version
#-c        check - kontrola casovani titulku
#-r        repair - oprava casovani titulku
#-s cislo  shift - posun titulku o cislo sekund +/-
#-f        force shift - pri posunu titulku do zaporu je nezapise=osekavani titulku
#-m cislo  movement - zmena dynamiky titulku - prodlouzeni/zkraceni
#-e        empty - vynechavani titulku, ktere neobsahuji zadny text
#-o nazev  output - moznost zadat nazev vystupniho souboru
#-n        renumber - precislovani titulku od 1
#-g        grammar - oprava textovych chyb titulku a zamena l za I
#-t cislo  transform - prevod SRT titulku do formatu SUB MicroDVD, cislo je FPS

#=====================================================
#                 HLAVNI PROGRAM
#=====================================================

if ( $opt_c and $opt_r ) { die "Volby -c a -r nemohou byt pouzity soucasne!\n"; }
if ( $opt_c and $opt_s ) { die "Volby -c a -s nemohou byt pouzity soucasne!\n"; }
if ( $opt_s and $opt_r ) { die "Volby -s a -r nemohou byt pouzity soucasne!\n"; }
if ( $opt_t and ( $opt_c or $opt_r or $opt_s )) { die "Volbu -t nelze pouzit soucasne s -c -r ci -s !\n"; }

if ( $opt_h or $opt_v or $opt_c or $opt_r or $opt_s or $opt_t or $opt_m ) {
    if ( $opt_h ) { &napoveda; }
    if ( $opt_v ) { &verze; }
    if ( $opt_c ) { &check_tit; }
    if ( $opt_r ) { &repair_tit; }
    if ( $opt_s or $opt_m ) { &shift_tit; }
    if ( $opt_t ) { &trans_tit; }

}
else { print "Nebyla zadana platna volba, viz srtrepair -h\n"; }




#=====================================================
#                 PODPROGRAMY
#=====================================================





#vstup:  retezec obsahujici casovani titulku formatu XX:XX:XX,XXX --> XX:XX:XX,XXX
#vystup: jedno cislo predstavujici zacatek titulku v sekundach
sub cas_tit_beg_cislo {
    my ( $radek ) = @_;
    my ( $hod, $min, $sec, $tis, $cas );
    ( $hod, $min, $sec, $tis ) = $radek =~ /\s*(\d+):(\d+):(\d+),(\d+).*->/;
#    print "zacatek: $hod:$min:$sec,$tis\n";
    $cas = 3600*$hod + 60*$min + $sec + $tis/1000;
    return $cas;
}


#vstup:  retezec obsahujici casovani titulku formatu XX:XX:XX,XXX --> XX:XX:XX,XXX
#vystup: jedno cislo predstavujici konec titulku v sekundach
sub cas_tit_end_cislo {
    my ( $radek ) = @_;
    my ( $hod, $min, $sec, $tis, $cas );
    ( $hod, $min, $sec, $tis ) = $radek =~ /->\s*(\d+):(\d+):(\d+),(\d+)/;
#    print "konec: $hod:$min:$sec,$tis\n";
    $cas = 3600*$hod + 60*$min + $sec + $tis/1000;
    return $cas;
}


#vstup:  cislo v sekundach
#vystup: retezec obsahujici cas ve formatu XX:XX:XX,XXX
sub cislo_na_cas {
    my ( $cas ) = @_;
    my ( $cas_text );
    my ( $cislo );
    
    $cislo = int($cas/3600);
    $cas_text = "0".$cislo.":";
    $cas -= $cislo*3600;
    
    $cislo = int($cas/60);
    if ( $cislo < 10 ) { $cas_text .= "0".$cislo.":"; }
    else { $cas_text .= $cislo.":"; }
    $cas -= $cislo*60;
    
    $cislo = int($cas);
    if ( $cislo < 10 ) { $cas_text .= "0".$cislo.","; }
    else { $cas_text .= $cislo.","; }
    $cas -= $cislo;
    
    $cislo = int($cas*1000);
    if ( $cislo < 10 ) { $cas_text .= "00".$cislo; }
    elsif ( $cislo < 100 ) { $cas_text .= "0".$cislo; }
    else { $cas_text .= $cislo; }

    return $cas_text;
}


#vstup:  retezec s titulky
#vystup: retezec s opravenymi titulky
sub grammar {
    my ( $opraveno ) = @_;

    $opraveno =~ s/\'\'/\"/g;
    $opraveno =~ s/\'\"/\"/g;
    $opraveno =~ s/\"\'/\"/g;
    $opraveno =~ s/\ +\"/\"/g;
    $opraveno =~ s/\"\ +/\"/g;
    $opraveno =~ s/(\"[^\"]*\")/\ $1\ /g;
    $opraveno =~ s/\"\"/\"/g;
    $opraveno =~ s/\ +,/,/g;
    $opraveno =~ s/\ +\./\./g;
    $opraveno =~ s/\ +\?/\?/g;
    $opraveno =~ s/\ +!/!/g;
    $opraveno =~ s/(\d)\ (\d)/$1$2/g;
    $opraveno =~ s/(\d)\ (\d)/$1$2/g;
    $opraveno =~ s/,\.\.\./\.\.\./g;
    $opraveno =~ s/\?\./\?/g;
    $opraveno =~ s/!\./!/g;
    $opraveno =~ s/,([^\d\"|])/,\ $1/g;
    $opraveno =~ s/\;/\;\ /g;
    $opraveno =~ s/:([^\d])/:\ $1/g;
    $opraveno =~ s/\?([^!\?\"|\)\s])/\?\ $1/g;
    $opraveno =~ s/!([^!\?\"|\)\s])/!\ $1/g;
    $opraveno =~ s/\"\ \"([^\w])/\"$1/g;
    $opraveno =~ s/\ +/\ /g;
    $opraveno =~ s/d\'/ď/g;
    $opraveno =~ s/t\'/ť/g;
    $opraveno =~ s/^\ +//g;
    $opraveno =~ s/\ +$//g;
    $opraveno =~ s/\blhned/Ihned/g;
    $opraveno =~ s/\blk([^aá])/Ik$1/g;
    $opraveno =~ s/\blkar/Ikar/g;
    $opraveno =~ s/\bln([^ouě])/In$1/g;
    $opraveno =~ s/\blnov/Inov/g;
    $opraveno =~ s/\blnui/Inui/g;
    $opraveno =~ s/\blont/Iont/g;
    $opraveno =~ s/\bloniz/Ioniz/g;
    $opraveno =~ s/\blono/Iono/g;
    $opraveno =~ s/\blpsa/Ipsa/g;
    $opraveno =~ s/\blpeka/Ipeka/g;
    $opraveno =~ s/\blQ/IQ/g;
    $opraveno =~ s/\bls([^t])/Is$1/g;
    $opraveno =~ s/\bl([bcdfgjmrtwxz])/I$1/g;
    $opraveno =~ s/\bIze\b/lze/g;
#rucne nutno projit slova lva/lvu,jestli nema byt Iva/Ivu
    $opraveno =~ s/\blan\b/Ian/g;
    $opraveno =~ s/\blvan/Ivan/g;
    $opraveno =~ s/\blvet/Ivet/g;
    $opraveno =~ s/\blvo\b/Ivo/g;
    $opraveno =~ s/\blvon/Ivon/g;
    $opraveno =~ s/\blvoš/Ivoš/g;
    $opraveno =~ s/\bl\b/I/g;
    $opraveno =~ s/\bIž/lž/g;
    $opraveno =~ s/n\.I\./n\.l\./g;
    $opraveno =~ s/\bll\b/II/g;
    $opraveno =~ s/\blll\b/III/g;
    $opraveno =~ s/Vll\b/VII/g;
    $opraveno =~ s/Vlll\b/VIII/g;
    $opraveno =~ s/Xll\b/XII/g;
    $opraveno =~ s/Xlll\b/XIII/g;
    $opraveno =~ s/l([[:upper:]])/I$1/g;
    $opraveno =~ s/([[:upper:]])l\b/$1I/g;
    $opraveno =~ s/\bll/Il/g;
    $opraveno =~ s/\.\ l/\.\ I/g;

    return $opraveno;
}


#vstup:  zadny, jen musi byt otevren soubor s titulky ZDROJ
#vystup: indexovane pole obsahujici jednotlive radky jednoho titulku
#        a pocet techto radku (horni index); posledni radek pole je prazdny;
#        index musi byt vracen jako prvni parametr, 
#        jinak ho na vystupu pohlti pole !!!
sub nacti_titulek {
    my( $radek, @titulek, $index );
    
    while ($radek = <ZDROJ>) {

	if ( $radek =~ /\s*\d+\s*/) {

    	    $index = 1;
	    $titulek[$index] = $radek;
    
	    while ( not $radek =~ /^\s*$/ ) {
		$index++;
		$radek = <ZDROJ>;
		$titulek[$index] = $radek;
	    }
	    print ".";
	    return ( $index, @titulek );
	}
    }
}

#vstup:  nic
#vystup: nic resp. tisk napovedy na obrazovku
sub napoveda {

    print "\n";
    print "Program srtrepair slouzi ke zpracovani titulku ve formatu SRT vytvorenych programy subtitle2pgm a dvdsub.\n";
    print "Pouziti: srtrepair [volby] Vstupni_SRT_titulky\n";
    print "Pozor!!! nazev vstupniho SRT souboru musi byt uplne posledni!\n";
    print "  -h          tento help\n";
    print "  -v          verze tohoto programu\n";
    print "  -c          check - kontrola prekryvu casovani titulku\n";
    print "  -r          repair - oprava prekryvu casovani titulku\n";
    print "  -o <nazev>  output - mozno zadat nazev noveho souboru pri -r -s -t\n";
    print "                     - bez pouziti volby je vytvoren soubor *.new\n";
    print "  -s <cislo>  shift - posun vsech titulku o <cislo> sekund +/-\n";
    print "                    - <cislo> muze mit max. 3 desetinna mista\n";
    print "  -f          force - v pripade vzniku zapornych titulku pri posunu\n";
    print "                      nezahlasi chybu, ale preskoci je\n";
    print "  -m <cislo>  movement - zmena dynamiky(+/-) / celkove delky titulku\n";
    print "                       - <cislo> je zmena v sec za 1 sec,\n";
    print "                       - neovlivni 1.titulek\n";
    print "  -g          grammar - kontroluje chyby po OCR software a resi problem\n";
    print "                        zameny maleho L za velke i\n";
    print "  -e          empty - vynechavani titulku, ktere neobsahuji zadny text\n";
    print "                    - ma smysl jen s volbami -r -s -t\n";
    print "  -n          renumber - precisluje titulky postupne od 1\n";
    print "                       - doporuceno pri pouziti -e\n";
    print "  -t <cislo>  transform - prevede SRT titulky na format SUB MicroDVD\n";
    print "                        - povinne <cislo> udava FPS videa (obvykle 25)\n";
    print "---------------\n";
    print "Formaty vypisu:\n";
    print ".......  za kazdy nacteny titulek je vypsana tecka; jakysi ukazatel prubehu\n";
    print "128-129  titulek 129 zacina drive, nez titulek 128 konci; pomuze -r\n";
    print "130!!!   delka titulku 130 je mensi nez ",MIN_DELKA," sec popr. zaporna,\n";
    print "         zde je nutny rucni zasah\n";
    print "---------------\n";
    print "Priklady:\n\n";
    print " srtrepair -reno Nove.srt Titulky.srt\n";
    print "    -opravi prekryvajici se Titulky.srt, vynecha titulky bez textu\n";
    print "     a vsechny precisluje od 1 a ulozi vysledek do Nove.srt\n\n";
    print " srtrepair -ens -62.250 -o Nove.srt Titulky.srt\n";
    print "    -vsechny titulky budou zacinat (a koncit :o) o 62.25 sec drive,\n";
    print "     vynecha titulky bez textu a vsechny precisluje od 1 a vysledek\n";
    print "     ulozi do Nove.srt\n\n";
    print " srtrepair -s 1.247 -m -0.008333 -o Nove.srt Titulky.srt\n";
    print "    -zrychli titulky o 5sec na 10min (5/600=0.008333) a jejich zacatek\n";
    print "     posune o 1.247sec a vse ulozi do Nove.srt\n\n";
    print " srtrepair -et 25 -o Nove.sub Titulky.srt\n";
    print "    -prevede SRT Titulky.srt na SUB format, pritom vynecha titulky\n";
    print "     bez textu a vse ulozi do Nove.sub\n";
    print "---------------\n";
    print "Pozn.: Pokud jako parametr pro -s davate nulu, piste -s 00 ci -s 0.0 ci -s -0\n";
    print "       Vyplyva to z pozadavku Perlu: -s 0 totiz odpovida opt_s=nedef;\n\n";

}


#vstup:  nic
#vystup: nic resp. tisk verze na obrazovku
sub verze {

    print "srtrepair ver. ",VERZE,"\n";
    print "Vytvoreno na platforme LinuxMandrake 9.0; perl v5.8.0\n";
    print 'Tomas Hanusek, xhant04@centrum.cz, http://hanus.host.sk',"\n";

}

sub check_tit {
    my ( $i, $index1, $index2, @titulek1, @titulek2 );
    my ( $cas_beg1, $cas_beg2, $cas_end1, $cas_end2, $chyby, $prazdne );

    if ( $ARGV[0] ) {

	
	if ( $opt_r ) {
	    if ( $opt_o ) { open( ZDROJ ,$opt_o ) or die ("Nemohu otevrit soubor \'$opt_o\'!\n"); }
	    else { open( ZDROJ, "$ARGV[0].new") or die ("Nemohu otevrit soubor \'$ARGV[0].new\'!\n"); }
	}
	else {
	    open( ZDROJ, $ARGV[0] ) or die ("Nemohu otevrit soubor \'$ARGV[0]\'!\n");
	}

	$chyby = $prazdne = 0;

	( $index1, @titulek1 ) = &nacti_titulek;
	if ( $index1 < 4 ) { $prazdne++; }

	while ( $index1 ) {

		
#	print "Titulek c.$titulek1[1]";
#	for ( $i=3; $i<=$index1; $i++) {
#	print "$titulek1[$i]";
#	}
#	print "delka: ",$cas_end1-$cas_beg1,"\n";
#	print "pocet radku v titulku:$index1\n\n";

	    ( $index2, @titulek2 ) = &nacti_titulek;
	    if ( $index2 < 4 ) { $prazdne++; }	    
	    
	    if ( $index2 ) {
		
		$cas_beg1 = &cas_tit_beg_cislo($titulek1[2]);
		$cas_end1 = &cas_tit_end_cislo($titulek1[2]);		
		
		$cas_beg2 = &cas_tit_beg_cislo($titulek2[2]);
		$cas_end2 = &cas_tit_end_cislo($titulek2[2]);		
		
		chomp($titulek1[1]);
		chomp($titulek2[1]);
		
		if ( ($cas_end1 - $cas_beg1)<MIN_DELKA ) {
		    print "$titulek1[1]!!!";
		    $chyby++;
		}
		
		if ( $cas_end1 >= $cas_beg2 ) {
		    print "$titulek1[1]-$titulek2[1]";
		    $chyby++;
		}
		
		for ( $i=1 ; $i<=$index2 ; $i++ ) { 
		    $titulek1[$i] = $titulek2[$i];
		    $index1 = $index2;
		}
		    
	    }
	    else { $index1 = undef; }	    
	    
	}
    
	close(ZDROJ);
	print "\nCelkem nalezeno chyb: $chyby\n";
	$prazdne--; #po poslednim titulku se jeste jednou nacita
	print "Pocet titulku bez textu: $prazdne\n\n";
	
    }
    else {
	print "Nebylo zadano jmeno souboru s SRT titulky! viz srtrepair -h\n";
    }
}


sub repair_tit {
    my ( $i, $index1, $index2, @titulek1, @titulek2, $cislo_titulku );
    my ( $cas_beg1, $cas_beg2, $cas_end1, $cas_end2 );

    if ( $ARGV[0] ) {

	open( ZDROJ, $ARGV[0] ) or die ("Nemohu otevrit soubor \'$ARGV[0]\'!\n");
	if ( $opt_o ) { open( NOVY ,">$opt_o" ) or die ("Nemohu vytvorit soubor \'$opt_o\'!\n"); }
	else { open( NOVY, ">$ARGV[0].new") or die ("Nemohu vytvorit soubor \'$ARGV[0].new\'!\n"); }

#	$chyby = 0;
	$cislo_titulku = 1;

	if ( $opt_e ) {
	    do {
		( $index1, @titulek1 ) = &nacti_titulek;
	    } while ( $index1<4 );
	}
	else { ( $index1, @titulek1 ) = &nacti_titulek; }


	while ( $index1 ) {

		
#	print "Titulek c.$titulek1[1]";
#	for ( $i=3; $i<=$index1; $i++) {
#	print "$titulek1[$i]";
#	}
#	print "delka: ",$cas_end1-$cas_beg1,"\n";
#	print "pocet radku v titulku:$index1\n\n";

	    ( $index2, @titulek2 ) = &nacti_titulek;
	    
	    if ( $index2 ) {
		
		unless ( $opt_e and $index2<4 ) {

		$cas_beg1 = &cas_tit_beg_cislo($titulek1[2]);
		$cas_end1 = &cas_tit_end_cislo($titulek1[2]);		
		
		$cas_beg2 = &cas_tit_beg_cislo($titulek2[2]);
		$cas_end2 = &cas_tit_end_cislo($titulek2[2]);		
		
#		chomp($titulek1[1]);
#		chomp($titulek2[1]);
		
#		if ( ($cas_end1 - $cas_beg1)<MIN_DELKA ) {
#		    print "$titulek1[1]!!!";
#		    $chyby++;
#		}
		
		if ( $cas_end1 >= $cas_beg2 ) {

		    if ( $titulek1[$index1-1] =~ /[,-;][\n\r\f]/ ) {
			$cas_beg2 = $cas_end1 + 0.2;
		    }
		    elsif ( $index2 > 4 ) {
			$cas_beg2 = $cas_end2 - 4;
			if ( $cas_end1 > $cas_beg2 ) { $cas_beg2 = $cas_end1 + 0.2; }
		    }
		    elsif ( length($titulek2[3]) < 10 ) { 
			$cas_beg2 = $cas_end2 - 1.5; 
			if ( $cas_end1 > $cas_beg2 ) { $cas_beg2 = $cas_end1 + 0.2; }
		    }
		    else {
			$cas_beg2 = $cas_end2 - 2.8; 
			if ( $cas_end1 > $cas_beg2 ) { $cas_beg2 = $cas_end1 + 0.2; }
		    }
		    
		    $titulek2[2] = &cislo_na_cas($cas_beg2)." --> ".&cislo_na_cas($cas_end2)."\n";
		
		}

		if ( $opt_n ) { $titulek1[1] = $cislo_titulku."\n"; }
		for ( $i=1 ; $i<=$index1 ; $i++ ) {
		    if ( $opt_g ) { $titulek1[$i] = &grammar($titulek1[$i]); }
		    print NOVY $titulek1[$i];
		}
		
		$cislo_titulku++;
		
		for ( $i=1 ; $i<=$index2 ; $i++ ) { 
		    $titulek1[$i] = $titulek2[$i];
		    $index1 = $index2;
		}
		    
		} #konec unless
		
	    }
	    else { 
	    
	    if ( $opt_n ) { $titulek1[1] = $cislo_titulku."\n"; }
	    for ( $i=1 ; $i<=$index1 ; $i++ ) {
		    if ( $opt_g ) { $titulek1[$i] = &grammar($titulek1[$i]); }
		    print NOVY $titulek1[$i];	    
	    }
	    	    
	    $index1 = undef; }	    
	    
	}
    
	close(ZDROJ);
	close(NOVY);
	
	print "\nKontroluji po sobe:\n";

	&check_tit;
	
    }
    else {
	print "Nebylo zadano jmeno souboru s SRT titulky! viz srtrepair -h\n";
    }
}


sub shift_tit {
    my ( $i, $index1, @titulek1, $cislo_titulku );
    my ( $cas_beg1, $cas_end1, $posun, $mov );


    if ( $opt_s ) {

        ( $posun ) = $opt_s =~ /^(-?\d+\.?\d{0,3})$/;

	( $opt_s =~ /^(-?\d+\.?\d{0,3})$/ ) or die ("Parametr pro volbu -s byl zadan spatne nebo vubec!\n");

    } else { $posun = 0; }


    if ( $opt_m ) {

	( $mov ) = $opt_m =~ /^(-?\d+\.?\d*)$/;

	( $opt_m =~ /^(-?\d+\.?\d*)$/ ) or die ("Parametr pro volbu -m byl zadan spatne nebo vubec!\n");

	$mov += 1;
    
    } else { $mov = 1; }

#    print "mov:   $mov\n";
#    print "posun: $posun\n";

    if ( $ARGV[0] ) {

	open( ZDROJ, $ARGV[0] ) or die ("Nemohu otevrit soubor \'$ARGV[0]\'!\n");
	if ( $opt_o ) { open( NOVY ,">$opt_o" ) or die ("Nemohu vytvorit soubor \'$opt_o\'!\n"); }
	else { open( NOVY, ">$ARGV[0].new") or die ("Nemohu vytvorit soubor \'$ARGV[0].new\'!\n"); }

	$cislo_titulku = 1;

	( $index1, @titulek1 ) = &nacti_titulek;

	while ( $index1 ) {

	    if ( $opt_s != 0 or $opt_m ) {

		if ( $cislo_titulku>1 ) {
		    $cas_beg1 = &cas_tit_beg_cislo($titulek1[2]) * $mov + $posun;
		    $cas_end1 = &cas_tit_end_cislo($titulek1[2]) * $mov + $posun;
		}
		else {
		    $cas_beg1 = &cas_tit_beg_cislo($titulek1[2]) + $posun;
		    $cas_end1 = &cas_tit_end_cislo($titulek1[2]) + $posun;		
		}

		if ( not $opt_f and ( $cas_beg1<0 or $cas_end1<0 ) ) {
		    close (ZDROJ);
		    close (NOVY);
		    die ("Zadany posun zpusobi zaporne casovani titulku!!!\n");
		}

		$titulek1[2] = &cislo_na_cas($cas_beg1)." --> ".&cislo_na_cas($cas_end1)."\n";
	    }
	
	    if ( $opt_n ) { $titulek1[1] = $cislo_titulku."\n"; }
	    
	    unless ( ( $opt_e and $index1<4 ) or $cas_beg1<0 ) {
		$cislo_titulku++;
		for ( $i=1 ; $i<=$index1 ; $i++ ) {
		    if ( $opt_g ) { $titulek1[$i] = &grammar($titulek1[$i]); }
		    print NOVY $titulek1[$i];
		}
	    }

	    ( $index1, @titulek1 ) = &nacti_titulek;
	}
    
	close(ZDROJ);
	close(NOVY);
	
	print "\n";
    
    }
    else {
	print "Nebylo zadano jmeno souboru s SRT titulky! viz srtrepair -h\n";
    }
}



sub trans_tit {
    my ( $i, $index1, @titulek1 );
    my ( $cas_beg1, $cas_end1, $fps, $radek );

    ( $fps ) = $opt_t =~ /(\d+\.?\d{0,3})/;

    ( $opt_t =~ /(\d+\.?\d{0,3})/ ) or die ("Parametr pro volbu -t byl zadan spatne nebo vubec!\n");

    if ( $ARGV[0] ) {

	open( ZDROJ, $ARGV[0] ) or die ("Nemohu otevrit soubor \'$ARGV[0]\'!\n");
	if ( $opt_o ) { open( NOVY ,">$opt_o" ) or die ("Nemohu vytvorit soubor \'$opt_o\'!\n"); }
	else { open( NOVY, ">$ARGV[0].new") or die ("Nemohu vytvorit soubor \'$ARGV[0].new\'!\n"); }

	( $index1, @titulek1 ) = &nacti_titulek;

	while ( $index1 ) {

	    unless ( $opt_e and $index1<4 ) {
	
		$cas_beg1 = int( &cas_tit_beg_cislo($titulek1[2])*$fps );
		$cas_end1 = int( &cas_tit_end_cislo($titulek1[2])*$fps );		

		for ( $i=3 ; $i<$index1 ; $i++ ) {
	    	    chomp($titulek1[$i]);
		}

		$radek = "{$cas_beg1}{$cas_end1}";
		for ( $i=3 ; $i<$index1 ; $i++ ) {
	    	    $radek .= "$titulek1[$i]|";
		}
		unless ( $index1<4 ) { chop($radek); }
		$radek .= "\n";

		if ( $opt_g ) { $radek = &grammar($radek); }
		print NOVY $radek;

	    }

	    ( $index1, @titulek1 ) = &nacti_titulek;
	}
    
	close(ZDROJ);
	close(NOVY);
	
	print "\n";

    }
    else {
	print "Nebylo zadano jmeno souboru s SRT titulky! viz srtrepair -h\n";
    }
}
