/* Chrysalide - Outil d'analyse de fichiers binaires * main.c - fichier d'entrée du programme * * Copyright (C) 2009-2014 Cyrille Bagard * * This file is part of Chrysalide. * * Chrysalide 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 3 of the License, or * (at your option) any later version. * * Chrysalide 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. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include "analysis/project.h" #include "analysis/db/server.h" #include "common/xdg.h" #include "core/core.h" #include "core/params.h" #include "glibext/delayed.h" #include "glibext/gbinportion.h" #include "gui/editor.h" #include "gui/core/core.h" #include "gui/core/global.h" #include "plugins/pglist.h" // TODO : remme! #include "format/mangling/itanium/abi.h" #include "analysis/db/cdb.h" /****************************************************************************** * * * Paramètres : - * * * * Description : Affiche des indications sur la version courante du programme.* * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void show_version(void) { printf("\n"); printf("-o- Chrysalide r%u -o-\n", REVISION); printf(_("Last compiled on %s at %s\n"), __DATE__, __TIME__); printf("\n"); printf(_("Data directory: %s\n"), PACKAGE_DATA_DIR); printf(_("Plugins directory: %s\n"), PLUGINS_DIR); printf(_("Locale directory: %s\n"), LOCALE_DIR); printf("\n"); } /****************************************************************************** * * * Paramètres : argc = nombre d'arguments dans la ligne de commande. * * argv = arguments de la ligne de commande. * * * * Description : Point d'entrée du programme. * * * * Retour : EXIT_SUCCESS si le prgm s'est déroulé sans encombres. * * * * Remarques : - * * * ******************************************************************************/ int main(int argc, char **argv) { int result; /* Bilan de l'exécution */ GtkWidget *editor; /* Fenêtre graphique */ GDbServer *server; /* Enregistrements locaux */ GGenConfig *config; /* Configuration globale */ bool status; /* Bilan d'opérations */ char *author; /* Identification à diffuser */ char *pub; /* Chemin de la clef publique */ bool welcome; /* Affichage de la bienvenue ? */ result = EXIT_FAILURE; if (argc > 1 && strcmp(argv[1], "--version") == 0) { show_version(); return EXIT_SUCCESS; } setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALE_DIR); textdomain(PACKAGE); /* Initialisation de GTK */ g_set_prgname("Chrysalide"); setlocale (LC_ALL, ""); gtk_init(&argc, &argv); /* Initialisation du programme */ if (!load_all_basic_components()) return EXIT_FAILURE; /* * this initialize the library and check potential ABI mismatches * between the version it was compiled for and the actual shared * library used. */ /*LIBXML_TEST_VERSION*/ //add_pixmap_directory(PACKAGE_DATA_DIR); //add_pixmap_directory(PACKAGE_SOURCE_DIR G_DIR_SEPARATOR_S "pixmaps"); /* Création de l'interface */ //test_itanium(); //exit(-1); #if 0 do { core_db_info info; strcpy(info.hash, "47cd68c5c46f36a5d48ebf347d6558a8eee23e11f9420227935658c3e97b6e27"); GCdbArchive *archive = g_cdb_archive_new(true, NULL, &info); printf("written ? %d\n", g_cdb_archive_write(archive) ); exit(0); } while (0); #endif editor = create_editor(); if (editor == NULL) goto failed_to_load_editor; gtk_widget_show_now(editor); init_work_queue(get_global_status()); init_all_plugins(G_OBJECT(editor)); config = get_main_configuration(); status = complete_loading_of_all_gui_components(config); if (!status) goto exit_complete_gui; /* Utilisateur représenté */ if (!g_generic_config_get_value(config, MPK_AUTHOR_NAME, &author)) /*goto glbcl_exit*/; /* Chemin vers la clef privée */ pub = get_xdg_config_dir("chrysalide" G_DIR_SEPARATOR_S "id_rsa.pub"); server = g_db_server_new_internal(author, pub); g_db_server_start(server); /* Charge le dernier projet ? */ gboolean load_last_project(GGenConfig *cfg) { const char *filename; /* Chemin du dernier projet */ GStudyProject *project; /* Nouveau projet courant */ if (!g_generic_config_get_value(cfg, MPK_LAST_PROJECT, &filename)) filename = NULL; if (filename == NULL) project = g_study_project_new(G_OBJECT(editor)); else project = g_study_project_open(G_OBJECT(editor), filename); set_current_project(project); return G_SOURCE_REMOVE; } g_generic_config_get_value(config, MPK_WELCOME_STARTUP, &welcome); if (!welcome) g_idle_add((GSourceFunc)load_last_project, config); else set_current_project(g_study_project_new(G_OBJECT(editor))); /* Exécution du programme */ result = EXIT_SUCCESS; gtk_main(); g_db_server_stop(server); exit_complete_gui: exit_all_plugins(); //gtk_widget_destroy(editor); failed_to_load_editor: unload_all_basic_components(); return result; }