23 #include "xmlconfig.h"
27 #include "navigation.h"
30 #define _(STRING) gettext(STRING)
32 struct map_data *map_data_default;
34 static void sigchld(int sig)
38 while (waitpid(-1, &status, WNOHANG) > 0);
43 static gchar *get_home_directory(void)
45 static gchar *homedir = NULL;
47 if (homedir) return homedir;
48 homedir = getenv("HOME");
53 // p = getpwuid(getuid());
54 // if (p) homedir = p->pw_dir;
58 g_warning("Could not find home directory. Using current directory as home directory.");
73 struct iter *ret=g_new0(struct iter, 1);
79 main_iter_destroy(struct iter *iter)
85 main_get_navit(struct iter *iter)
88 struct navit *ret=NULL;
94 ret=(struct navit *)(list->data);
96 iter->list=g_list_next(iter->list);
102 main_add_navit(struct navit *nav)
104 navit=g_list_prepend(navit, nav);
108 main_remove_navit(struct navit *nav)
110 navit=g_list_remove(navit, nav);
112 event_main_loop_quit();
118 printf(_("navit usage:\nnavit [options] [configfile]\n\t-d <n>: set the debug output level to <n>.\n\t-h: print this usage info.\n\t-v: Print the version and exit.\n"));
121 int main(int argc, char **argv)
123 GError *error = NULL;
124 char *config_file = NULL;
130 signal(SIGCHLD, sigchld);
133 setenv("LC_NUMERIC","C",1);
134 setlocale(LC_ALL,"");
135 setlocale(LC_NUMERIC,"C");
136 if (file_exists("navit.c") || file_exists("navit.o")) {
137 char buffer[PATH_MAX];
138 printf(_("Running from source directory\n"));
139 getcwd(buffer, PATH_MAX);
140 setenv("NAVIT_PREFIX", buffer, 0);
141 setenv("NAVIT_LIBDIR", buffer, 0);
142 setenv("NAVIT_SHAREDIR", buffer, 0);
143 setenv("NAVIT_LIBPREFIX", "*/.libs/", 0);
144 s=g_strdup_printf("%s/../locale", buffer);
145 setenv("NAVIT_LOCALEDIR", s, 0);
148 if (!getenv("NAVIT_PREFIX")) {
150 if (l > 10 && !strcmp(argv[0]+l-10,"/bin/navit")) {
153 if (strcmp(s, PREFIX))
154 printf(_("setting '%s' to '%s'\n"), "NAVIT_PREFIX", s);
155 setenv("NAVIT_PREFIX", s, 0);
158 setenv("NAVIT_PREFIX", PREFIX, 0);
161 s=g_strdup_printf("locale");
163 s=g_strdup_printf("%s/share/locale", getenv("NAVIT_PREFIX"));
165 setenv("NAVIT_LOCALEDIR", s, 0);
168 s=g_strdup_printf(".");
170 s=g_strdup_printf("%s/share/navit", getenv("NAVIT_PREFIX"));
172 setenv("NAVIT_SHAREDIR", s, 0);
174 s=g_strdup_printf("%s/lib/navit", getenv("NAVIT_PREFIX"));
175 setenv("NAVIT_LIBDIR", s, 0);
178 bindtextdomain(PACKAGE, getenv("NAVIT_LOCALEDIR"));
179 bind_textdomain_codeset (PACKAGE, "UTF-8");
183 if (getenv("LC_ALL"))
184 dbg(0,"Warning: LC_ALL is set, this might lead to problems\n");
186 extern void builtin_init(void);
190 /* handled in gui/gtk */
192 gtk_init(&argc, &argv);
195 s = getenv("NAVIT_WID");
197 setenv("SDL_WINDOWID", s, 0);
203 opterr=0; //don't bomb out on errors.
205 while((opt = getopt(argc, argv, ":hvd:")) != -1) {
212 printf("%s %s\n", "navit", "0.0.4+svn");
216 printf("TODO Verbose option is set to `%s'\n", optarg);
219 fprintf(stderr, "navit: Error - Option `%c' needs a value\n", optopt);
224 fprintf(stderr, "navit: Error - No such option: `%c'\n", optopt);
230 // the first non-option argument is the config file
232 config_file=argv[optind];
235 config_file=g_strjoin(NULL,get_home_directory(), "/.navit/navit.xml" , NULL);
236 if (!file_exists(config_file)) {
242 if (file_exists("navit.xml.local"))
243 config_file="navit.xml.local";
246 if (file_exists("navit.xml"))
247 config_file="navit.xml";
250 config_file=g_strjoin(NULL,getenv("NAVIT_SHAREDIR"), "/navit.xml.local" , NULL);
251 if (!file_exists(config_file)) {
257 config_file=g_strjoin(NULL,getenv("NAVIT_SHAREDIR"), "/navit.xml" , NULL);
258 if (!file_exists(config_file)) {
264 printf(_("No config file navit.xml, navit.xml.local found\n"));
267 if (!config_load(config_file, &error)) {
268 printf(_("Error parsing '%s': %s\n"), config_file, error->message);
271 printf(_("Using '%s'\n"), config_file);
274 printf(_("No instance has been created, exiting\n"));
278 gui_run_main_loop(main_loop_gui);
280 event_main_loop_run();