X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fmain.cpp;h=9e0a56ab9d394acf7ec42e01089654cb978c0f5b;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=b253c3b258fec5eb1c32b42ac728c351f0fb8c78;hpb=e3acc0b267b14fda5db3c7bbb2f218b993ef84b3;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/main.cpp b/synfig-core/trunk/src/synfig/main.cpp index b253c3b..9e0a56a 100644 --- a/synfig-core/trunk/src/synfig/main.cpp +++ b/synfig-core/trunk/src/synfig/main.cpp @@ -1,27 +1,29 @@ -/* === S I N F G =========================================================== */ -/*! \file main.cpp +/* === S Y N F I G ========================================================= */ +/*! \file synfig/main.cpp ** \brief \writeme ** -** $Id: main.cpp,v 1.3 2005/01/10 07:40:26 darco Exp $ +** $Id$ ** ** \legal -** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007, 2008 Chris Moore ** -** This software and associated documentation -** are CONFIDENTIAL and PROPRIETARY property of -** the above-mentioned copyright holder. +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. ** -** You may not copy, print, publish, or in any -** other way distribute this software without -** a prior written agreement with -** the copyright holder. +** This package is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. ** \endlegal */ /* ========================================================================= */ /* === H E A D E R S ======================================================= */ -//#define SINFG_NO_ANGLE +//#define SYNFIG_NO_ANGLE #ifdef USING_PCH # include "pch.h" @@ -53,10 +55,6 @@ #include "mutex.h" -#ifdef DEATH_TIME -#include -#endif - #ifdef HAVE_SIGNAL_H #include #endif @@ -65,29 +63,22 @@ using namespace std; using namespace etl; -using namespace sinfg; +using namespace synfig; /* === M A C R O S ========================================================= */ -#define MODULE_LIST_FILENAME "sinfg_modules.cfg" +#define MODULE_LIST_FILENAME "synfig_modules.cfg" /* === S T A T I C S ======================================================= */ -static etl::reference_counter sinfg_ref_count_(0); +static etl::reference_counter synfig_ref_count_(0); /* === P R O C E D U R E S ================================================= */ /* === M E T H O D S ======================================================= */ - - - - - - - const char * -sinfg::get_version() +synfig::get_version() { #ifdef VERSION return VERSION; @@ -97,141 +88,98 @@ sinfg::get_version() } const char * -sinfg::get_build_date() +synfig::get_build_date() { return __DATE__; } -const char * -sinfg::get_build_time() -{ - return __TIME__; -} - -extern const char *get_build_time(); - bool -sinfg::check_version_(int version,int vec_size, int color_size,int canvas_size,int layer_size) +synfig::check_version_(int version,int vec_size, int color_size,int canvas_size,int layer_size) { bool ret=true; - CHECK_EXPIRE_TIME(); - - if(version!=SINFG_LIBRARY_VERSION) + if(version!=SYNFIG_LIBRARY_VERSION) { - sinfg::error(_("API Version mismatch (LIB:%d, PROG:%d)"),SINFG_LIBRARY_VERSION,version); + synfig::error(_("API Version mismatch (LIB:%d, PROG:%d)"),SYNFIG_LIBRARY_VERSION,version); ret=false; } if(vec_size!=sizeof(Vector)) { - sinfg::error(_("Size of Vector mismatch (app:%d, lib:%d)"),vec_size,sizeof(Vector)); + synfig::error(_("Size of Vector mismatch (app:%d, lib:%d)"),vec_size,sizeof(Vector)); ret=false; } if(color_size!=sizeof(Color)) { - sinfg::error(_("Size of Color mismatch (app:%d, lib:%d)"),color_size,sizeof(Color)); + synfig::error(_("Size of Color mismatch (app:%d, lib:%d)"),color_size,sizeof(Color)); ret=false; } if(canvas_size!=sizeof(Canvas)) { - sinfg::error(_("Size of Canvas mismatch (app:%d, lib:%d)"),canvas_size,sizeof(Canvas)); + synfig::error(_("Size of Canvas mismatch (app:%d, lib:%d)"),canvas_size,sizeof(Canvas)); ret=false; } if(layer_size!=sizeof(Layer)) { - sinfg::error(_("Size of Layer mismatch (app:%d, lib:%d)"),layer_size,sizeof(Layer)); + synfig::error(_("Size of Layer mismatch (app:%d, lib:%d)"),layer_size,sizeof(Layer)); ret=false; } - + return ret; } -static void broken_pipe_signal (int sig) { - sinfg::warning("Broken Pipe..."); +static void broken_pipe_signal (int /*sig*/) { + synfig::warning("Broken Pipe..."); } bool retrieve_modules_to_load(String filename,std::list &modules_to_load) { - if(filename=="standard") + std::ifstream file(filename.c_str()); + + if(!file) { + // warning("Cannot open "+filename); return false; -/* - if(find(modules_to_load.begin(),modules_to_load.end(),"trgt_bmp")==modules_to_load.end()) - modules_to_load.push_back("trgt_bmp"); - if(find(modules_to_load.begin(),modules_to_load.end(),"trgt_gif")==modules_to_load.end()) - modules_to_load.push_back("trgt_gif"); - if(find(modules_to_load.begin(),modules_to_load.end(),"trgt_dv")==modules_to_load.end()) - modules_to_load.push_back("trgt_dv"); - if(find(modules_to_load.begin(),modules_to_load.end(),"mod_ffmpeg")==modules_to_load.end()) - modules_to_load.push_back("mod_ffmpeg"); - if(find(modules_to_load.begin(),modules_to_load.end(),"mod_imagemagick")==modules_to_load.end()) - modules_to_load.push_back("mod_imagemagick"); - if(find(modules_to_load.begin(),modules_to_load.end(),"lyr_std")==modules_to_load.end()) - modules_to_load.push_back("lyr_std"); - if(find(modules_to_load.begin(),modules_to_load.end(),"lyr_freetype")==modules_to_load.end()) - modules_to_load.push_back("lyr_freetype"); -#ifdef HAVE_LIBPNG - if(find(modules_to_load.begin(),modules_to_load.end(),"trgt_png")==modules_to_load.end()) - modules_to_load.push_back("trgt_png"); -#endif -#ifdef HAVE_OPENEXR - if(find(modules_to_load.begin(),modules_to_load.end(),"mod_openexr")==modules_to_load.end()) - modules_to_load.push_back("mod_openexr"); -#endif -*/ } - else + + while(file) { - std::ifstream file(filename.c_str()); - if(!file) - { - // warning("Cannot open "+filename); - return false; - } - while(file) - { - String modulename; - getline(file,modulename); - if(!modulename.empty() && find(modules_to_load.begin(),modules_to_load.end(),modulename)==modules_to_load.end()) - modules_to_load.push_back(modulename); - } + String modulename; + getline(file,modulename); + if(!modulename.empty() && find(modules_to_load.begin(),modules_to_load.end(),modulename)==modules_to_load.end()) + modules_to_load.push_back(modulename); } - - return true; } - - - - -sinfg::Main::Main(const sinfg::String& basepath,ProgressCallback *cb): - ref_count_(sinfg_ref_count_) +synfig::Main::Main(const synfig::String& basepath,ProgressCallback *cb): + ref_count_(synfig_ref_count_) { if(ref_count_.count()) return; - sinfg_ref_count_.reset(); - ref_count_=sinfg_ref_count_; - - // Add initialization after this point + synfig_ref_count_.reset(); + ref_count_=synfig_ref_count_; + // Add initialization after this point - CHECK_EXPIRE_TIME(); +#ifdef ENABLE_NLS + bindtextdomain("synfig", LOCALEDIR); + bind_textdomain_codeset("synfig", "UTF-8"); +#endif String prefix=basepath+"/.."; - int i; + unsigned int i; #ifdef _DEBUG std::set_terminate(__gnu_cxx::__verbose_terminate_handler); #endif - + #if defined(HAVE_SIGNAL_H) && defined(SIGPIPE) signal(SIGPIPE, broken_pipe_signal); #endif - + //_config_search_path=new vector"string.h"(); - + // Init the subsystems if(cb)cb->amount_complete(0, 100); if(cb)cb->task(_("Starting Subsystem \"Modules\"")); @@ -252,7 +200,7 @@ sinfg::Main::Main(const sinfg::String& basepath,ProgressCallback *cb): Module::subsys_stop(); throw std::runtime_error(_("Unable to initialize subsystem \"Targets\"")); } - + if(cb)cb->task(_("Starting Subsystem \"Importers\"")); if(!Importer::subsys_init()) { @@ -271,128 +219,122 @@ sinfg::Main::Main(const sinfg::String& basepath,ProgressCallback *cb): Module::subsys_stop(); throw std::runtime_error(_("Unable to initialize subsystem \"ValueNodes\"")); } - + // Load up the list importer Importer::book()[String("lst")]=ListImporter::create; - - - // Load up the modules + // Load up the modules std::list modules_to_load; std::vector locations; - - if(!getenv("SYNFIG_MODULE_LIST")) + + if(getenv("SYNFIG_MODULE_LIST")) + locations.push_back(getenv("SYNFIG_MODULE_LIST")); + else { - locations.push_back("standard"); - locations.push_back("./"MODULE_LIST_FILENAME); //1 - locations.push_back("../etc/"MODULE_LIST_FILENAME); //1 - locations.push_back("~/.sinfg/"MODULE_LIST_FILENAME); //2 - locations.push_back(prefix+"/etc/"+MODULE_LIST_FILENAME); //3 - locations.push_back("/usr/local/etc/"MODULE_LIST_FILENAME); + locations.push_back("./"MODULE_LIST_FILENAME); + locations.push_back("../etc/"MODULE_LIST_FILENAME); + if(getenv("HOME")) + locations.push_back(strprintf("%s/.synfig/%s", getenv("HOME"), MODULE_LIST_FILENAME)); #ifdef SYSCONFDIR locations.push_back(SYSCONFDIR"/"MODULE_LIST_FILENAME); #endif + locations.push_back(prefix+"/etc/"+MODULE_LIST_FILENAME); + locations.push_back("/usr/local/etc/"MODULE_LIST_FILENAME); #ifdef __APPLE__ locations.push_back("/Library/Frameworks/synfig.framework/Resources/"MODULE_LIST_FILENAME); locations.push_back("/Library/Synfig/"MODULE_LIST_FILENAME); - locations.push_back("~/Library/Synfig/"MODULE_LIST_FILENAME); + if(getenv("HOME")) + locations.push_back(strprintf("%s/Library/Synfig/%s", getenv("HOME"), MODULE_LIST_FILENAME)); #endif #ifdef WIN32 locations.push_back("C:\\Program Files\\Synfig\\etc\\"MODULE_LIST_FILENAME); #endif } - else - { - locations.push_back(getenv("SYNFIG_MODULE_LIST")); - } -/* - const char *locations[]= - { - "standard", //0 - "./"MODULE_LIST_FILENAME, //1 - "../etc/"MODULE_LIST_FILENAME, //1 - "~/.sinfg/"MODULE_LIST_FILENAME, //2 - "/usr/local/lib/sinfg/modules/"MODULE_LIST_FILENAME, //3 - "/usr/local/etc/"MODULE_LIST_FILENAME, -#ifdef SYSCONFDIR - SYSCONFDIR"/"MODULE_LIST_FILENAME, -#endif -#ifdef __APPLE__ - "/Library/Frameworks/sinfg.framework/Resources/"MODULE_LIST_FILENAME, - "/Library/SINFG/"MODULE_LIST_FILENAME, - "~/Library/SINFG/"MODULE_LIST_FILENAME, -#endif -#ifdef WIN32 - "C:\\Program Files\\SINFG\\etc\\"MODULE_LIST_FILENAME, -#endif - }; -*/ - + for(i=0;itask(strprintf(_("Loading modules from %s"),locations[i].c_str())); - + break; + } + + if (i == locations.size()) + { + Importer::subsys_stop(); + Target::subsys_stop(); + Layer::subsys_stop(); + Module::subsys_stop(); + throw std::runtime_error(strprintf(_("Unable to open module list file '%s'"), MODULE_LIST_FILENAME)); + } + std::list::iterator iter; - + + Module::register_default_modules(cb); + for(i=0,iter=modules_to_load.begin();iter!=modules_to_load.end();++iter,i++) { Module::Register(*iter,cb); if(cb)cb->amount_complete((i+1)*100,modules_to_load.size()*100); } - -// load_modules(cb); - - CHECK_EXPIRE_TIME(); - if(cb)cb->amount_complete(100, 100); if(cb)cb->task(_("DONE")); } -sinfg::Main::~Main() +synfig::Main::~Main() { ref_count_.detach(); - if(!sinfg_ref_count_.unique()) + if(!synfig_ref_count_.unique()) return; - sinfg_ref_count_.detach(); + synfig_ref_count_.detach(); // Add deinitialization after this point if(get_open_canvas_map().size()) { - sinfg::warning("Canvases still open!"); - std::map >::iterator iter; + synfig::warning("Canvases still open!"); + std::map >::iterator iter; for(iter=get_open_canvas_map().begin();iter!=get_open_canvas_map().end();++iter) { - sinfg::warning("%s: count()=%d",iter->first.c_str(), iter->second.count()); + synfig::warning("%s: count()=%d",iter->first.c_str(), iter->second.count()); } } - + + // synfig::info("ValueNode::subsys_stop()"); ValueNode::subsys_stop(); + // synfig::info("Importer::subsys_stop()"); Importer::subsys_stop(); + // synfig::info("Target::subsys_stop()"); Target::subsys_stop(); + // synfig::info("Layer::subsys_stop()"); Layer::subsys_stop(); - - /*! \fixme For some reason, uncommenting the next - ** line will cause things to crash. This needs to be - ** looked into at some point. */ - //Module::subsys_stop(); + /*! \todo For some reason, uncommenting the next line will cause things to crash. + This needs to be looked into at some point. */ + // synfig::info("Module::subsys_stop()"); + // Module::subsys_stop(); + // synfig::info("Exiting"); #if defined(HAVE_SIGNAL_H) && defined(SIGPIPE) signal(SIGPIPE, SIG_DFL); #endif } - - - - - - - +static const String +current_time() +{ + const int buflen = 50; + time_t t; + struct tm *lt; + char b[buflen]; + time(&t); + lt = localtime(&t); + strftime(b, buflen, " [%X] ", lt); + return String(b); +} void -sinfg::error(const char *format,...) +synfig::error(const char *format,...) { va_list args; va_start(args,format); @@ -400,14 +342,14 @@ sinfg::error(const char *format,...) } void -sinfg::error(const String &str) +synfig::error(const String &str) { static Mutex mutex; Mutex::Lock lock(mutex); - cerr<<"sinfg("<