Merge branch 'upstream-svn' into upstream
[navit-package] / navit / main.c
index 303fe77..0bc92a0 100644 (file)
@@ -65,104 +65,6 @@ static void sigchld(int sig)
 #endif
 }
 
-#if 0
-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.\n");
-               homedir =g_strdup(".");
-       } else {
-               homedir=g_strdup(homedir);
-       }
-       return homedir;
-}
-#endif
-
-static GList *navit;
-
-struct iter {
-       GList *list;
-};
-
-struct iter *
-main_iter_new(void)
-{
-       struct iter *ret=g_new0(struct iter, 1);
-       ret->list=navit;
-       return ret;
-}
-
-void
-main_iter_destroy(struct iter *iter)
-{
-       g_free(iter);
-}
-
-struct navit *
-main_get_navit(struct iter *iter)
-{
-       GList *list;
-       struct navit *ret=NULL;
-       if (iter)
-               list=iter->list;
-       else
-               list=navit;
-       if (list) {
-               ret=(struct navit *)(list->data);
-               if (iter)
-                       iter->list=g_list_next(iter->list);
-       }
-       return ret;
-
-}
-void
-main_add_navit(struct navit *nav)
-{
-       navit=g_list_prepend(navit, nav);
-       callback_list_call_2(cbl, nav, 1);
-}
-
-void
-main_remove_navit(struct navit *nav)
-{
-       navit=g_list_remove(navit, nav);
-       callback_list_call_2(cbl, nav, 0);
-       if (! navit)
-               event_main_loop_quit();
-}
-
-int
-main_add_attr(struct attr *attr)
-{
-       switch (attr->type)
-       {
-       case attr_callback:
-               callback_list_add(cbl, attr->u.callback);
-               return 1;
-       default:
-               return 0;
-       }
-}
-
-int
-main_remove_attr(struct attr *attr)
-{
-       switch (attr->type)
-       {
-       case attr_callback:
-               callback_list_remove(cbl, attr->u.callback);
-               return 1;
-       default:
-               return 0;
-       }
-}
-
-
 #ifdef HAVE_API_WIN32
 void
 setenv(char *var, char *val, int overwrite)
@@ -185,7 +87,9 @@ static char *environment_vars[][5]={
        {"NAVIT_SHAREDIR",    ":",          ":/share/navit", ":",           ":/share"},
        {"NAVIT_LOCALEDIR",   ":/../locale",":/share/locale",":\\locale",   ":/locale"},
        {"NAVIT_USER_DATADIR",":",          "~/.navit",      ":\\data",     ":/home"},
+#if 1
        {"NAVIT_LOGFILE",     NULL,         NULL,            ":\\navit.log",NULL},
+#endif
        {"NAVIT_LIBPREFIX",   "*/.libs/",   NULL,            NULL,          NULL},
        {NULL,                NULL,         NULL,            NULL,          NULL},
 };
@@ -194,7 +98,7 @@ static void
 main_setup_environment(int mode)
 {
        int i=0;
-       char *var,*val;
+       char *var,*val,*homedir;
        while ((var=environment_vars[i][0])) {
                val=environment_vars[i][mode+1];
                if (val) {
@@ -206,7 +110,10 @@ main_setup_environment(int mode)
                                        val=g_strdup_printf("%s%s", getenv("NAVIT_PREFIX"), val+1);
                                break;
                        case '~':
-                               val=g_strdup_printf("%s%s", getenv("HOME"), val+1);
+                               homedir=getenv("HOME");
+                               if (!homedir)
+                                       homedir="./";
+                               val=g_strdup_printf("%s%s", homedir, val+1);
                                break;
                        default:
                                val=g_strdup(val);
@@ -219,6 +126,40 @@ main_setup_environment(int mode)
        }
 }
 
+#ifdef HAVE_API_WIN32_BASE
+char *nls_table[][3]={
+       {"DAN","DNK","da_DK"},
+       {"DEU","DEU","de_DE"},
+       {"DEA","AUT","de_AT"},
+       {"ENU","USA","en_US"},
+       {"FRA","FRA","fr_FR"},
+       {"RUS","RUS","ru_RU"},
+       {NULL,NULL,NULL},
+};
+
+static void
+win_set_nls(void)
+{
+       wchar_t wcountry[32],wlang[32]; 
+       char country[32],lang[32];
+       int i=0;
+
+       GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SABBREVLANGNAME, wlang, sizeof(wlang));
+       WideCharToMultiByte(CP_ACP,0,wlang,-1,lang,sizeof(lang),NULL,NULL);
+       GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SABBREVCTRYNAME, wcountry, sizeof(wcountry));
+       WideCharToMultiByte(CP_ACP,0,wcountry,-1,country,sizeof(country),NULL,NULL);
+       while (nls_table[i][0]) {
+               if (!strcmp(nls_table[i][0], lang) && !(strcmp(nls_table[i][1], country))) {
+                       dbg(1,"Setting LANG=%s for Lang %s Country %s\n",nls_table[i][2], lang, country);
+                       setenv("LANG",nls_table[i][2],0);
+                       return;
+               }
+               i++;
+       }
+       dbg(1,"Lang %s Country %s not found\n",lang,country);
+}
+#endif
+
 void
 main_init(char *program)
 {
@@ -229,6 +170,9 @@ main_init(char *program)
        signal(SIGCHLD, sigchld);
 #endif
        cbl=callback_list_new();
+#ifdef HAVE_API_WIN32_BASE
+       win_set_nls();
+#endif
        setenv("LC_NUMERIC","C",1);
        setlocale(LC_ALL,"");
        setlocale(LC_NUMERIC,"C");