/** * Navit, a modular navigation system. * Copyright (C) 2005-2008 Navit Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * * This program 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., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include "config.h" #include "version.h" #include "item.h" #include "coord.h" #include "main.h" #include "route.h" #include "navigation.h" #include "track.h" #include "debug.h" #include "event.h" #include "event_glib.h" #include "xmlconfig.h" #include "file.h" #include "search.h" #define _(STRING) gettext(STRING) static void print_usage(void) { printf(_("navit usage:\nnavit [options] [configfile]\n\t-c : use as config file\n\t-d : set the debug output level to . (TODO)\n\t-h: print this usage info and exit.\n\t-v: Print the version and exit.\n")); } static gchar * get_home_directory(void) { static gchar *homedir = NULL; if (homedir) return homedir; homedir = getenv("HOME"); if (!homedir) { dbg(0,"Could not find home directory. Using current directory as home directory."); #ifdef _WIN32_WCE homedir = "/Storage Card/"; #else homedir = "."; #endif } else { homedir=g_strdup(homedir); } return homedir; } int main(int argc, char **argv) { GError *error = NULL; char *config_file = NULL; char *s; int l; int opt; GList *list = NULL, *li; #ifdef HAVE_GLIB event_glib_init(); #endif main_init(argv[0]); main_init_nls(); debug_init(argv[0]); #ifdef __CEGCC__ debug_set_logfile("/Storage Card/navit.log"); #endif file_init(); #ifndef USE_PLUGINS extern void builtin_init(void); builtin_init(); #endif route_init(); navigation_init(); tracking_init(); search_init(); config_file=NULL; opterr=0; //don't bomb out on errors. if (argc > 1) { /* DEVELOPPERS : don't forget to update the manpage if you modify theses options */ while((opt = getopt(argc, argv, ":hvc:d:")) != -1) { switch(opt) { case 'h': print_usage(); exit(0); break; case 'v': printf("%s %s\n", "navit", PACKAGE_VERSION" "SVN_VERSION); exit(0); break; case 'c': printf("config file n is set to `%s'\n", optarg); config_file = optarg; break; case 'd': printf("TODO Verbose option is set to `%s'\n", optarg); break; case ':': fprintf(stderr, "navit: Error - Option `%c' needs a value\n", optopt); print_usage(); exit(1); break; case '?': fprintf(stderr, "navit: Error - No such option: `%c'\n", optopt); print_usage(); exit(1); } } } // use 1st cmd line option that is left for the config file if (optind < argc) config_file = argv[optind]; // if config file is explicitely given only look for it, otherwise try std paths if (config_file) list = g_list_append(list,g_strdup(config_file)); else { list = g_list_append(list,g_strjoin(NULL,get_home_directory(), "/.navit/navit.xml" , NULL)); list = g_list_append(list,g_strdup("navit.xml.local")); list = g_list_append(list,g_strdup("navit.xml")); list = g_list_append(list,g_strjoin(NULL,getenv("NAVIT_SHAREDIR"), "/navit.xml.local" , NULL)); list = g_list_append(list,g_strjoin(NULL,getenv("NAVIT_SHAREDIR"), "/navit.xml" , NULL)); #ifndef _WIN32 list = g_list_append(list,g_strdup("/etc/navit/navit.xml")); #endif } li = list; do { if (li == NULL) { // We have not found an existing config file from all possibilities printf(_("No config file navit.xml, navit.xml.local found\n")); exit(1); } // Try the next config file possibility from the list config_file = li->data; if (!file_exists(config_file)) g_free(config_file); li = g_list_next(li); } while (!file_exists(config_file)); g_list_free(list); #ifdef HAVE_GLIB event_request_system("glib","start"); #endif #ifdef __CEGCC__ config_file="\\Storage Card\\navit.xml"; #endif if (!config_load(config_file, &error)) { printf(_("Error parsing '%s': %s\n"), config_file, error->message); exit(1); } else { printf(_("Using '%s'\n"), config_file); } if (! main_get_navit(NULL)) { printf(_("No instance has been created, exiting\n")); exit(1); } event_main_loop_run(); return 0; }