Пример #1
0
int main_real(int argc, char **argv)
{
	dbg(0, "in main loop 001 ##########################\n");


	xmlerror *error = NULL;
	char *config_file = NULL;
	int opt;
	char *cp;
	struct attr navit;

	GList *list = NULL, *li;
	main_argc = argc;
	main_argv = argv;

	//dbg(0, "in main loop 002 ##########################\n");

#ifdef HAVE_GLIB
	event_glib_init();
	//dbg(0,"in main loop 003 ##########################\n");
#else
	_g_slice_thread_init_nomessage();
	//dbg(0, "in main loop 004 ##########################\n");
#endif


	atom_init();
	main_init(argv[0]);
	main_init_nls();
	debug_init(argv[0]); // ??


	cp = getenv("NAVIT_LOGFILE");
	if (cp)
	{
		debug_set_logfile(cp);
	}
#ifdef HAVE_API_WIN32_CE
	else
	{
		debug_set_logfile("/Storage Card/navit.log");
	}
#endif




	//dbg(0, "in main loop 005 ##########################\n");
	file_init();
	//dbg(0, "in main loop 006 ##########################\n");

#ifndef USE_PLUGINS
	//dbg(0, "in main loop 007 ##########################\n");
	builtin_init();
#endif

	//dbg(0, "in main loop 008 ##########################\n");
	route_init();
	//dbg(0, "in main loop 008.1 ##########################\n");
	navigation_init();
	//dbg(0, "in main loop 008.2 ##########################\n");
	tracking_init();
	//dbg(0, "in main loop 008.3 ##########################\n");
	search_init();
	//dbg(0, "in main loop 008.4 ##########################\n");
	linguistics_init();
	//dbg(0, "in main loop 0014 ##########################\n");


	config_file = NULL;
#ifdef HAVE_GETOPT_H
	opterr=0; //don't bomb out on errors.
#endif /* _MSC_VER */
	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", 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;
#ifdef HAVE_GETOPT_H
					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);
#endif
			}
		}
		// 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
	//{

		dbg(0, "navit_share_dir=%s\n", navit_share_dir);
		list = g_list_append(list, g_strjoin(NULL, navit_share_dir, "/navit.xml", NULL));
		//list = g_list_append(list, g_strdup("navit.xml"));

#ifdef HAVE_API_ANDROID
		// **disabled** // new preferred location (the new one should have priority over the legacy!)
		// **disabled** // list = g_list_append(list,g_strdup("/sdcard/zanavi/navit.xml"));
#endif

		//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;
	for (;;)
	{
		if (li == NULL)
		{
			// We have not found an existing config file from all possibilities
			dbg(0, "No config file navit.xml, navit.xml.local found\n");
			return 1;
		}
		// Try the next config file possibility from the list
		config_file = li->data;
		if (file_exists(config_file))
		{
			break;
		}
		else
		{
			g_free(config_file);
		}
		li = g_list_next(li);
	}


	// ############### load XML config file, and call all the init/new functions ################
	// ############### load XML config file, and call all the init/new functions ################
	// ############### load XML config file, and call all the init/new functions ################
	clock_t s_ = debug_measure_start();
	if (!config_load(config_file, &error))
	{
	}
	debug_mrp("load and init xmlconfig:", debug_measure_end(s_));
	// ############### load XML config file, and call all the init/new functions ################
	// ############### load XML config file, and call all the init/new functions ################
	// ############### load XML config file, and call all the init/new functions ################

	while (li)
	{
		g_free(li->data);
		li = g_list_next(li);
	}

	g_list_free(list);


	if (!config_get_attr(config, attr_navit, &navit, NULL) && !config_empty_ok)
	{
		dbg(0, "No instance has been created, exiting\n");
		exit(1);
	}

	dbg(0, "in main loop 026 ##########################\n");
	event_main_loop_run();
	dbg(0, "after main loop ##########################");

#ifndef HAVE_API_ANDROID
	debug_finished();
#endif


	return 0;
}
Пример #2
0
int main_real(int argc, char * const* argv)
{
	xmlerror *error = NULL;
	char *config_file = NULL, *command=NULL, *startup_file=NULL;
	int opt;
	char *cp;
	struct attr navit, conf;

	GList *list = NULL, *li;
	main_argc=argc;
	main_argv=argv;

#ifdef HAVE_GLIB
	event_glib_init();
#else
	_g_slice_thread_init_nomessage();
#endif
	atom_init();
	main_init(argv[0]);
	navit_nls_main_init();
	debug_init(argv[0]);

	cp = getenv("NAVIT_LOGFILE");
	if (cp) {
		debug_set_logfile(cp);
	}
#ifdef HAVE_API_WIN32_CE
	else {	
		debug_set_logfile("/Storage Card/navit.log");
	}
#endif
	file_init();
#ifndef USE_PLUGINS
	builtin_init();
#endif
	route_init();
	navigation_init();
	tracking_init();
	search_init();
	linguistics_init();
	geom_init();
	config_file=NULL;
#ifdef HAVE_GETOPT_H
	opterr=0;  //don't bomb out on errors.
#endif /* _MSC_VER */
	/* ingore iphone command line argument */
	if (argc == 2 && !strcmp(argv[1],"-RegisterForSystemEvents"))
		argc=1;
	if (argc > 1) {
		/* Don't forget to update the manpage if you modify theses options */
		while((opt = getopt(argc, argv, ":hvc:d:e:s:")) != -1) {
			switch(opt) {
			case 'h':
				print_usage();
				exit(0);
				break;
			case 'v':
				printf("%s %s\n", "navit", version);
				exit(0);
				break;
			case 'c':
				printf("config file n is set to `%s'\n", optarg);
	            config_file = optarg;
				break;
			case 'd':
				debug_set_global_level(atoi(optarg), 1);
				break;
			case 'e':
				command=optarg;
				break;
			case 's':
				startup_file=optarg;
				break;
#ifdef HAVE_GETOPT_H
			case ':':
				fprintf(stderr, "navit: Error - Option `%c' needs a value\n", optopt);
				print_usage();
				exit(2);
				break;
			case '?':
				fprintf(stderr, "navit: Error - No such option: `%c'\n", optopt);
				print_usage();
				exit(3);
#endif
			}
	  }
		// 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,getenv("NAVIT_USER_DATADIR"), "/navit.xml" , NULL));
		list = g_list_append(list,g_strdup("navit.xml.local"));
		list = g_list_append(list,g_strdup("navit.xml"));
#ifdef HAVE_API_ANDROID
		// new preferred location (the new one should have priority over the legacy!)
		list = g_list_append(list,g_strdup("/sdcard/navit/navit.xml"));
		// legacy location, still supported
		list = g_list_append(list,g_strdup("/sdcard/navit.xml"));
#endif
		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;
	for (;;) {
		if (li == NULL) {
			// We have not found an existing config file from all possibilities
			dbg(0, "%s", _("No config file navit.xml, navit.xml.local found\n"));
			return 4;
		}
        // Try the next config file possibility from the list
		config_file = li->data;
		dbg(1,"trying %s\n",config_file);
		if (file_exists(config_file)) {
			break;
		}
		g_free(config_file);
		li = g_list_next(li);
	}

	dbg(0,"Loading %s\n",config_file);
	if (!config_load(config_file, &error)) {
		dbg(0, _("Error parsing config file '%s': %s\n"), config_file, error ? error->message : "");
	} else {
		dbg(0, _("Using config file '%s'\n"), config_file);
	}
	while (li) {
		g_free(li->data);
		li = g_list_next(li);
	}
	g_list_free(list);
	if (! config_get_attr(config, attr_navit, &navit, NULL) && !config_empty_ok) {
		dbg(0, "%s", _("Internal initialization failed, exiting. Check previous error messages.\n"));
		exit(5);
	}
	conf.type=attr_config;
	conf.u.config=config;
	if (startup_file) {
		FILE *f=fopen(startup_file,"r");
		if (f) {
			char buffer[4096];
			while(fgets(buffer, sizeof(buffer), f)) {
				command_evaluate(&conf, buffer);
			}
		}
	}
	if (command) {
		command_evaluate(&conf, command);
	}
	event_main_loop_run();

	/* TODO: Android actually has no event loop, so we can't free all allocated resources here. Have to find better place to
	 *  free all allocations on program exit. And don't forget to free all the stuff allocated in the code above.
	 */
#ifndef HAVE_API_ANDROID
	linguistics_free();
	debug_finished();
#endif
	return 0;
}
Пример #3
0
int main_real(int argc, char **argv)
{
	xmlerror *error = NULL;
	char *config_file = NULL;
	int opt;
	char *cp;
	struct attr navit;

	GList *list = NULL, *li;
	main_argc=argc;
	main_argv=argv;


#ifdef HAVE_GLIB
	event_glib_init();
#else
	_g_slice_thread_init_nomessage();
#endif
	atom_init();
	main_init(argv[0]);
	main_init_nls();
	debug_init(argv[0]);

	cp = getenv("NAVIT_LOGFILE");
	if (cp)
		debug_set_logfile(cp);
#ifdef HAVE_API_WIN32_CE
	else
		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();
	linguistics_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", 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,getenv("NAVIT_USER_DATADIR"), "/navit.xml" , NULL));
		list = g_list_append(list,g_strdup("navit.xml.local"));
		list = g_list_append(list,g_strdup("navit.xml"));
#ifdef HAVE_API_ANDROID
		list = g_list_append(list,g_strdup("/sdcard/navit.xml"));
#endif
		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;
	for (;;) {
		if (li == NULL) {
			// We have not found an existing config file from all possibilities
			dbg(0,_("No config file navit.xml, navit.xml.local found\n"));
			return 1;
		}
        // Try the next config file possibility from the list
		config_file = li->data;
		if (file_exists(config_file))
			break;
		else
			g_free(config_file);
		li = g_list_next(li);
	}

	if (!config_load(config_file, &error)) {
		dbg(0, _("Error parsing '%s': %s\n"), config_file, error ? error->message : "");
	} else {
		dbg(0, _("Using '%s'\n"), config_file);
	}
	while (li) {
		g_free(li->data);
		li = g_list_next(li);
	}
	g_list_free(list);
	if (! config_get_attr(config, attr_navit, &navit, NULL) && !config_empty_ok) {
		dbg(0, _("No instance has been created, exiting\n"));
		exit(1);
	}
	event_main_loop_run();

#ifndef HAVE_API_ANDROID
	debug_finished();
#endif
	return 0;
}