chage .sub time



mkdir -pv ~/submod
cd ~/submod
touch submod.cpp
emacs submod.cpp




#include <iostream>
#include <fstream>


#include <string.h>
using namespace std ;


void eroare(string cod)
{
    cout << cod ;
    exit(0);
}

int transforma(std::ifstream *fsub1, std::ofstream *fsub2, int sec)
{
    string cuvant, sicuv1, socuv1 ;
    int itime1=0, itime2=0 ;
    int pos1=0, pos2=0, pos3=0, pos4=0 ;
    char format[200] ;
   
    //citeste cuvant pana la sfarsit de fisier
    while(!fsub1->eof())
    {       
     //daca incepe cu { atunci
     *fsub1 >> cuvant ;
     if((pos1 = cuvant.find_first_of("{")) !=  -1)
     {
         //da
             //scoate intre primul { si }{
             pos2 = cuvant.find_first_of("}"); if(pos2 == -1) continue ;
             sicuv1 = cuvant.substr(pos1+1, pos2) ;
            
             //transforma in int si aduna sec -> itime1
             itime1 = atoi(sicuv1.c_str()) ;
             itime1 += sec ;
             //scoate intre primul }{ si ultimul }
             pos3 = cuvant.find_last_of("{"); if(pos3 == -1) continue ;
             pos4 = cuvant.find_last_of("}"); if(pos4 == -1) continue ;
             sicuv1 = cuvant.substr(pos3+1, pos4) ;
            
             //transforma in int si aduna sec -> itime2
             itime2 = atoi(sicuv1.c_str()) ;
             itime2 += sec ;
             //scoate intre ultimul } si sfarsitul cuvantului
             //pune in sicuv1
             sicuv1 = cuvant.substr(pos4+1) ;
            
             //formeaza sirul socuv1 = { + itime1 + }{ + itime2 + } + sicuv1            
            sprintf(format, "%c%d%s%d%c%s", '{',itime1, "}{", itime2, '}', sicuv1.c_str()) ;
           
             //scrie in fisierul fsub2
             *fsub2 << endl ;
             *fsub2 << format << " " ;
            

     }//end if
     else
     {
         //nu
           //scrie cuvantul in fisierul fsub2
           *fsub2 << cuvant << " " ;
     }//end else
          
    }
     
    //successful termination ;
    return 1 ;
}

int main(int a, char* b[])
{
    string sub1("subtitle_in.sub") ;
    string sub2("subtitle_out.sub") ;
    int sec =0;
    cout << "subtitrare defecta: *.sub #:" /*must remove after*/ << sub1 ;
    //cin >> sub1 ;
    cout << endl << \
    "subtitrarea noua : *.sub #:" /*must remove after*/ << sub2 ;
    //cin >> sub2 ;
    cout << endl << \
    "timp devansare (sec)#:" ;
    cin >> sec ;

    ifstream  fsub1(sub1.c_str(), ios_base::in)  ;
    if(fsub1 == NULL) eroare(string("eroare la deschiderea fisierului sursa")) ;
   
    ofstream fsub2(sub2.c_str(), ios_base::out) ;
    if(fsub2 == NULL) eroare(string("eroare la deschiderea fisierului destinatie")) ;
   
   
    //start the transformation of subtitle file
    if( transforma(&fsub1, &fsub2, sec) == 1)
        cout << endl << "transformation was successful" ;
    else
        cout << endl << "transformation was unsuccessful " << endl ;
       
    fsub1.close() ;
    fsub2.close() ;
    getchar() ;
   
    return 0 ;   
}//and main


Makefile


touch Makefile
emacs Makefile



CPP = g++
OFLAG = -o
.SUFFIXES :  .o  .cpp  .c
.cpp.o :
    $(CPP) $(CPPFLAGS) -c $<
.c.o :
    $(CPP) $(CPPFLAGS) -c $<

all: \
    submod

test: all
    submod 

bugs:
    @echo No compiler bugs in this directory!

submod: submod.o
    $(CPP) $(OFLAG) submod submod.o


submod.o:  submod.cpp



How it works:
save submod.cpp
save Makefile
make
copy you .sub subtitle into the same directory as subtitle_in.sub
./submod     (type in the time offset in seconds)
look for subtitle_out.sub