X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmain.C;h=7f860cefed4cf3584c104849e4c6abe33197b982;hp=e7fe8f676fffbcca353d9e5b3bb771cdfd7d2430;hb=502b6f3b6fd04f6b01c6d70dcb81aa304dd0db1c;hpb=fea29181a5e69959e00d520173d66577c2056989 diff --git a/cinelerra-5.1/cinelerra/main.C b/cinelerra-5.1/cinelerra/main.C index e7fe8f67..7f860cef 100644 --- a/cinelerra-5.1/cinelerra/main.C +++ b/cinelerra-5.1/cinelerra/main.C @@ -89,7 +89,7 @@ public: //PRINT_TRACE mwindow->load_filenames(filenames, LOADMODE_REPLACE); //PRINT_TRACE - if(filenames->size() == 1) + if( filenames->size() == 1 ) mwindow->gui->mainmenu->add_load(filenames->get(0)); //PRINT_TRACE mwindow->gui->unlock_window(); @@ -100,6 +100,7 @@ public: ArrayList *filenames; }; +long cin_timezone; int main(int argc, char *argv[]) { @@ -108,6 +109,12 @@ int main(int argc, char *argv[]) ArrayList filenames; FileSystem fs; + time_t st; time(&st); + struct tm ltm, gtm; + localtime_r(&st, <m); + gmtime_r(&st, >m); + int tzofs = ltm.tm_hour - gtm.tm_hour; + cin_timezone = tzofs * 60*60; int operation = DO_GUI; int deamon_port = DEAMON_PORT; @@ -115,10 +122,10 @@ int main(int argc, char *argv[]) char config_path[BCTEXTLEN]; char batch_path[BCTEXTLEN]; int nice_value = 20; + int load_perpetual = 1; config_path[0] = 0; batch_path[0] = 0; deamon_path[0] = 0; - EDL::id_lock = new Mutex("EDL::id_lock"); Units::init(); File::init_cin_path(); @@ -138,24 +145,24 @@ int main(int argc, char *argv[]) // Extract from locale language & region char locbuf[32], *p; locbuf[0] = 0; - if((p = strchr(loc, '.')) != 0 && (p - loc) < (int)sizeof(locbuf)-1) { + if( (p = strchr(loc, '.')) != 0 && (p - loc) < (int)sizeof(locbuf)-1 ) { strncpy(locbuf, loc, p - loc); locbuf[p - loc] = 0; } - else if(strlen(loc) < sizeof(locbuf)-1) + else if( strlen(loc) < sizeof(locbuf)-1 ) strcpy(locbuf, loc); // Locale 'C' does not give useful language info - assume en - if(!locbuf[0] || locbuf[0] == 'C') + if( !locbuf[0] || locbuf[0] == 'C' ) strcpy(locbuf, "en"); - if((p = strchr(locbuf, '_')) && p - locbuf < LEN_LANG) { + if( (p = strchr(locbuf, '_')) && p - locbuf < LEN_LANG ) { *p++ = 0; strcpy(BC_Resources::language, locbuf); - if(strlen(p) < LEN_LANG) + if( strlen(p) < LEN_LANG ) strcpy(BC_Resources::region, p); } - else if(strlen(locbuf) < LEN_LANG) + else if( strlen(locbuf) < LEN_LANG ) strcpy(BC_Resources::language, locbuf); } else @@ -168,88 +175,62 @@ int main(int argc, char *argv[]) int load_backup = 0; int start_remote_control = 0; - for(int i = 1; i < argc; i++) - { - if(!strcmp(argv[i], "-h")) - { + for( int i = 1; i < argc; i++ ) { + if( !strcmp(argv[i], "-h") ) { operation = DO_USAGE; } - else - if(!strcmp(argv[i], "-z")) - { + else if( !strcmp(argv[i], "-z") ) { start_remote_control = 1; } - else - if(!strcmp(argv[i], "-r")) - { + else if( !strcmp(argv[i], "-r") ) { operation = DO_BATCHRENDER; - if(argc > i + 1) - { - if(argv[i + 1][0] != '-') - { + if( argc > i + 1 ) { + if( argv[i + 1][0] != '-' ) { strcpy(batch_path, argv[i + 1]); i++; } } } - else - if(!strcmp(argv[i], "-c")) - { - if(argc > i + 1) - { + else if( !strcmp(argv[i], "-c") ) { + if( argc > i + 1 ) { strcpy(config_path, argv[i + 1]); i++; } - else - { + else { fprintf(stderr, _("%s: -c needs a filename.\n"), argv[0]); } } - else - if(!strcmp(argv[i], "-d") || !strcmp(argv[i], "-f")) - { - if(!strcmp(argv[i], "-d")) - operation = DO_DEAMON; - else - operation = DO_DEAMON_FG; - - if(argc > i + 1) - { - if(atol(argv[i + 1]) > 0) - { + else if( !strcmp(argv[i], "-d") || !strcmp(argv[i], "-f") ) { + operation = !strcmp(argv[i], "-d") ? DO_DEAMON : DO_DEAMON_FG; + if( argc > i + 1 ) { + if( atol(argv[i + 1]) > 0 ) { deamon_port = atol(argv[i + 1]); i++; } } } - else - if(!strcmp(argv[i], "-b")) - { + else if( !strcmp(argv[i], "-b") ) { operation = DO_BRENDER; - if(i > argc - 2) - { + if( i > argc - 2 ) { fprintf(stderr, _("-b may not be used by the user.\n")); exit(1); } else strcpy(deamon_path, argv[i + 1]); } - else - if(!strcmp(argv[i], "-n")) - { - if(argc > i + 1) - { + else if( !strcmp(argv[i], "-n") ) { + if( argc > i + 1 ) { nice_value = atol(argv[i + 1]); i++; } } - else - if(!strcmp(argv[i], "-x")) - { + else if( !strcmp(argv[i], "-x") ) { load_backup = 1; } - else - { + else if( !strcmp(argv[i], "-S") ) { + load_perpetual = 0; + } + else { char *new_filename; new_filename = new char[BCTEXTLEN]; strcpy(new_filename, argv[i]); @@ -260,11 +241,9 @@ int main(int argc, char *argv[]) - if(operation == DO_GUI || - operation == DO_DEAMON || - operation == DO_DEAMON_FG || - operation == DO_USAGE || - operation == DO_BATCHRENDER) { + if( operation == DO_GUI || + operation == DO_DEAMON || operation == DO_DEAMON_FG || + operation == DO_USAGE || operation == DO_BATCHRENDER) { #ifndef REPOMAINTXT #define REPOMAINTXT "" @@ -284,8 +263,7 @@ int main(int argc, char *argv[]) PROGRAM_NAME, PROGRAM_NAME); } - switch(operation) - { + switch( operation ) { case DO_USAGE: printf(_("\nUsage:\n")); printf(_("%s [-f] [-c configuration] [-d port] [-n nice] [-r batch file] [filenames]\n\n"), argv[0]); @@ -296,19 +274,18 @@ int main(int argc, char *argv[]) File::get_config_path(), CONFIG_FILE); printf(_("-r = batch render the contents of the batch file (%s/%s) with no GUI. batch file is optional.\n"), File::get_config_path(), BATCH_PATH); + printf(_("-S = do not reload perpetual session\n")); + printf(_("-x = reload from backup\n")); printf(_("filenames = files to load\n\n\n")); exit(0); break; case DO_DEAMON: - case DO_DEAMON_FG: - { - if(operation == DO_DEAMON) - { + case DO_DEAMON_FG: { + if( operation == DO_DEAMON ) { int pid = fork(); - if(pid) - { + if( pid ) { // Redhat 9 requires _exit instead of exit here. _exit(0); } @@ -319,36 +296,32 @@ int main(int argc, char *argv[]) nice_value, config_path); client.main_loop(); - break; - } + break; } // Same thing without detachment - case DO_BRENDER: - { + case DO_BRENDER: { RenderFarmClient client(0, deamon_path, 20, config_path); client.main_loop(); - break; - } + break; } - case DO_BATCHRENDER: - { + case DO_BATCHRENDER: { BatchRenderThread *thread = new BatchRenderThread; thread->start_rendering(config_path, batch_path); - break; - } + break; } - case DO_GUI: - { + case DO_GUI: { int restart = 0, done = 0; while( !done ) { BC_WindowBase::get_resources()->vframe_shm = 0; MWindow mwindow; mwindow.create_objects(1, !filenames.total, config_path); CommandLineThread *thread = 0; + if( mwindow.preferences->perpetual_session && load_perpetual ) + mwindow.load_undo_data(); //SET_TRACE // load the initial files on seperate tracks // use a new thread so it doesn't block the GUI @@ -383,6 +356,8 @@ int main(int argc, char *argv[]) done = 1; mwindow.save_defaults(); + if( mwindow.preferences->perpetual_session ) + mwindow.save_undo_data(); //PRINT_TRACE filenames.remove_all_objects(); delete thread; @@ -400,16 +375,17 @@ int main(int argc, char *argv[]) av[ac++] = 0; execv(exe_path, av); } - } //SET_TRACE DISABLE_BUFFER - break; + break; } } filenames.remove_all_objects(); - delete EDL::id_lock; EDL::id_lock = 0; Units::finit(); + time_t et; time(&et); + long dt = et - st; + printf("Session time: %ld:%02ld:%02ld\n", dt/3600, dt%3600/60, dt%60); return 0; }