int run(GList **config) { char *fn; FILE* fp; GtkTreeModel *model = NULL; GtkTreeIter iter; char* selected; GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); model = gtk_tree_view_get_model(GTK_TREE_VIEW(GTK_TREE_VIEW(view))); if(gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get (model, &iter, COLUMN_LANG_CODE, &selected, -1); } else selected = "en_US"; setenv("LC_ALL", selected, 1); setenv("LANG", selected, 1); setenv("LANGUAGE", selected, 1); /* setlocale with tr_TR create some weird errors */ setlocale(LC_ALL, selected); /* workaround for turkish lang */ if(!strcmp(selected, "tr_TR")) setlocale(LC_CTYPE, "C"); bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); if(!strcmp("en_US", selected)) setenv("CHARSET", "iso-8859-1", 1); else if(!strcmp("es_AR", selected)) { setenv("CHARSET", "iso-8859-1", 1); setcharset("lat1-16.psfu.gz", config); } else if(!strcmp("de_DE", selected)) setenv("CHARSET", "iso-8859-15", 1); else if(!strcmp("fr_FR", selected)) setenv("CHARSET", "iso-8859-15", 1); else if(!strcmp("id_ID", selected)) setenv("CHARSET", "iso-8859-1", 1); else if(!strcmp("it_IT", selected)) { setenv("CHARSET", "iso-8859-1", 1); setcharset("lat9w-16.psfu.gz", config); } else if(!strcmp("cs_CZ", selected)) { setenv("CHARSET", "iso-8859-2", 1); setcharset("lat2-16.psfu.gz", config); } else if(!strcmp("hu_HU", selected)) { setenv("CHARSET", "iso-8859-2", 1); setcharset("lat2-16.psfu.gz", config); } else if(!strcmp("nl_NL", selected)) setenv("CHARSET", "iso-8859-1", 1); else if(!strcmp("pl_PL", selected)) { setenv("CHARSET", "iso-8859-2", 1); setcharset("lat2-16.psfu.gz", config); } else if(!strcmp("pt_PT", selected)) { setenv("CHARSET", "iso-8859-1", 1); setcharset("lat1-16.psfu.gz", config); } else if(!strcmp("sk_SK", selected)) { setenv("CHARSET", "iso-8859-2", 1); setcharset("lat2-16.psfu.gz", config); } else if(!strcmp("tr_TR", selected)) { setenv("CHARSET", "iso-8859-9", 1); } //* Create language files *// fn = strdup("/tmp/setup_XXXXXX"); mkstemp(fn); if ((fp = fopen(fn, "w")) == NULL) { perror(_("Could not open output file for writing")); return(-1); } fprintf(fp, "#!/bin/sh\n\n" "# /etc/profile.d/lang.sh\n\n" "# Set the system locale\n" "# For a list of locales which are supported by this machine, " "type: locale -a\n\n"); if(!getenv("LANG") || strcmp(getenv("LANG"), "zh_CN")) fprintf(fp, "export LANG=%s\n", getenv("LANG")); else { fprintf(fp, "if [ \"$TERM\" = \"linux\" ]; then\n\techo -ne \"\\e%%G\"\nfi\n"); fprintf(fp, "export LANG=zh_CN.utf8\n"); } fprintf(fp, "export LC_ALL=$LANG\n"); if(getenv("CHARSET")) fprintf(fp, "export CHARSET=%s\n", getenv("CHARSET")); fclose(fp); // sample: adds a "content" string titled "stuff" to the config list data_put(config, "lang.sh", fn); return 0; }
static int loop(const unsigned char *pattern, const unsigned char *string) { loop_state state = CURLFNM_LOOP_DEFAULT; unsigned char *p = (unsigned char *)pattern; unsigned char *s = (unsigned char *)string; unsigned char charset[CURLFNM_CHSET_SIZE] = { 0 }; int rc = 0; for(;;) { switch(state) { case CURLFNM_LOOP_DEFAULT: if(*p == '*') { while(*(p+1) == '*') /* eliminate multiple stars */ p++; if(*s == '\0' && *(p+1) == '\0') return CURL_FNMATCH_MATCH; rc = loop(p + 1, s); /* *.txt matches .txt <=> .txt matches .txt */ if(rc == CURL_FNMATCH_MATCH) return CURL_FNMATCH_MATCH; if(*s) /* let the star eat up one character */ s++; else return CURL_FNMATCH_NOMATCH; } else if(*p == '?') { if(ISPRINT(*s)) { s++; p++; } else if(*s == '\0') return CURL_FNMATCH_NOMATCH; else return CURL_FNMATCH_FAIL; /* cannot deal with other character */ } else if(*p == '\0') { if(*s == '\0') return CURL_FNMATCH_MATCH; else return CURL_FNMATCH_NOMATCH; } else if(*p == '\\') { state = CURLFNM_LOOP_BACKSLASH; p++; } else if(*p == '[') { unsigned char *pp = p+1; /* cannot handle with pointer to register */ if(setcharset(&pp, charset)) { int found = FALSE; if(charset[(unsigned int)*s]) found = TRUE; else if(charset[CURLFNM_ALNUM]) found = ISALNUM(*s); else if(charset[CURLFNM_ALPHA]) found = ISALPHA(*s); else if(charset[CURLFNM_DIGIT]) found = ISDIGIT(*s); else if(charset[CURLFNM_XDIGIT]) found = ISXDIGIT(*s); else if(charset[CURLFNM_PRINT]) found = ISPRINT(*s); else if(charset[CURLFNM_SPACE]) found = ISSPACE(*s); else if(charset[CURLFNM_UPPER]) found = ISUPPER(*s); else if(charset[CURLFNM_LOWER]) found = ISLOWER(*s); else if(charset[CURLFNM_BLANK]) found = ISBLANK(*s); else if(charset[CURLFNM_GRAPH]) found = ISGRAPH(*s); if(charset[CURLFNM_NEGATE]) found = !found; if(found) { p = pp+1; s++; memset(charset, 0, CURLFNM_CHSET_SIZE); } else return CURL_FNMATCH_NOMATCH; } else return CURL_FNMATCH_FAIL; } else { if(*p++ != *s++) return CURL_FNMATCH_NOMATCH; } break; case CURLFNM_LOOP_BACKSLASH: if(ISPRINT(*p)) { if(*p++ == *s++) state = CURLFNM_LOOP_DEFAULT; else return CURL_FNMATCH_NOMATCH; } else return CURL_FNMATCH_FAIL; break; } } }
int run(GList **config) { #ifdef GTK GtkWidget *label; GtkWidget *tv; GtkTreeIter iter; int i = 0; #endif #ifdef DIALOG dialog_vars.backtitle=gen_backtitle("Selecting language"); dlg_put_backtitle(); dlg_clear(); dialog_vars.default_item=strdup("en_US"); if(fw_menu("Please select your language", "Please select your language from the list. If your language " "is not in the list, you should probably choose English.", 0, 0, 0, LANGSNUM, langs) == -1) return(-1); FREE(dialog_vars.default_item); LOG("selected language: '%s'", dialog_vars.input_result); setenv("LC_ALL", dialog_vars.input_result, 1); setenv("LANG", dialog_vars.input_result, 1); setlocale(LC_ALL, dialog_vars.input_result); bindtextdomain("setup", "/usr/share/locale"); if(!strcmp("en_US", dialog_vars.input_result)) setenv("CHARSET", "iso-8859-1", 1); else if(!strcmp("es_AR", dialog_vars.input_result)) { setenv("CHARSET", "iso-8859-1", 1); setcharset("lat1-16.psfu.gz", config); } else if(!strcmp("de_DE", dialog_vars.input_result)) setenv("CHARSET", "iso-8859-15", 1); else if(!strcmp("fr_FR", dialog_vars.input_result)) setenv("CHARSET", "iso-8859-15", 1); else if(!strcmp("id_ID", dialog_vars.input_result)) setenv("CHARSET", "iso-8859-1", 1); else if(!strcmp("it_IT", dialog_vars.input_result)) { setenv("CHARSET", "iso-8859-1", 1); setcharset("lat9w-16.psfu.gz", config); } else if(!strcmp("cs_CZ", dialog_vars.input_result)) { setenv("CHARSET", "iso-8859-2", 1); setcharset("lat2-16.psfu.gz", config); } else if(!strcmp("hu_HU", dialog_vars.input_result)) { setenv("CHARSET", "iso-8859-2", 1); setcharset("lat2a-16.psfu.gz", config); } else if(!strcmp("nl_NL", dialog_vars.input_result)) setenv("CHARSET", "iso-8859-1", 1); else if(!strcmp("pl_PL", dialog_vars.input_result)) { setenv("CHARSET", "iso-8859-2", 1); setcharset("lat2-16.psfu.gz", config); } else if(!strcmp("pt_PT", dialog_vars.input_result)) { setenv("CHARSET", "iso-8859-1", 1); setcharset("lat1-16.psfu.gz", config); } else if(!strcmp("sk_SK", dialog_vars.input_result)) { setenv("CHARSET", "iso-8859-2", 1); setcharset("lat2-16.psfu.gz", config); } #endif #ifdef GTK tv = create_asklang_view(); gtk_container_add(GTK_CONTAINER(frame), tv); while (i <= LANGSNUM * 2) { gtk_list_store_append(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(tv))), &iter); gtk_list_store_set(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(tv))), &iter, 0, langs[i], 1, langs[i+1], -1); i = i+2; } gtk_widget_show_all(tv); #endif textdomain("setup"); return(0); }