summaryrefslogtreecommitdiffstats
path: root/loader
diff options
context:
space:
mode:
authorMatt Wilson <msw@redhat.com>2000-02-02 23:08:19 +0000
committerMatt Wilson <msw@redhat.com>2000-02-02 23:08:19 +0000
commit50146d814fbd191a75f6ac38debf8764e86b4072 (patch)
treed2fd3d3a211c26361f9ee0e2437c9c49b0f0918e /loader
parent8812747ee0f26dcc8638759fb3c97e0a0029e6a6 (diff)
downloadanaconda-50146d814fbd191a75f6ac38debf8764e86b4072.tar.gz
anaconda-50146d814fbd191a75f6ac38debf8764e86b4072.tar.xz
anaconda-50146d814fbd191a75f6ac38debf8764e86b4072.zip
read lang-table
Diffstat (limited to 'loader')
-rw-r--r--loader/lang.c59
1 files changed, 31 insertions, 28 deletions
diff --git a/loader/lang.c b/loader/lang.c
index 46050d8bd..19a4836d9 100644
--- a/loader/lang.c
+++ b/loader/lang.c
@@ -73,34 +73,35 @@ struct langInfo {
char * lang, * key, * font, * map, * lc_all;
} ;
-#ifdef INCLUDE_KON
-static const struct langInfo languages[] = {
- { "English", "en", NULL, NULL, "en_US" },
- { "Japanese", "ja", NULL, NULL, "ja_JP.ujis" },
-};
-#else
-/* FONT LIST STARTS */
-static const struct langInfo languages[] = {
- { "Czech", "cs", "lat2-sun16", "iso02", "cs_CZ" },
- { "English", "en", NULL, NULL, "en_US" },
- { "French", "fr", NULL, NULL, "fr_FR" },
- { "German", "de", NULL, NULL, "de_DE" },
- { "Hungarian", "hu", "lat2-sun16", "iso02", "hu_HU" },
- { "Icelandic", "is", "lat0-sun16", "iso15", "is_IS" },
- { "Indonesian", "id", "lat0-sun16", "iso15", "id_ID" },
- { "Italian", "it", "lat0-sun16", "iso15", "it_IT" },
- { "Norwegian", "no", "lat0-sun16", "iso15", "no_NO" },
- { "Romanian", "ro", "lat2-sun16", "iso02", "ro_RO" },
- { "Russian", "ru", "Cyr_a8x16", "koi2alt", "ru_RU.KOI8-R" },
- { "Serbian", "sr", "lat2-sun16", "iso02", "sr_YU" },
- { "Slovak", "sk", "lat2-sun16", "iso02", "sk_SK" },
- { "Slovenian", "sl", "lat2-sun16", "iso02", "sl_SI" },
- { "Turkish", "tr", "iso05.f16", "iso05", "tr_TR" },
- { "Ukrainian", "uk", "Cyr_a8x16", "koi2alt", "ru_RU.KOI8-R" },
-};
-/* FONT LIST ENDS */
-#endif
-const int numLanguages = sizeof(languages) / sizeof(struct langInfo);
+static struct langInfo * languages = NULL;
+static int numLanguages = 0;
+
+static void loadLanguageList(int flags) {
+ char * file = FL_TESTING(flags) ? "../lang-table" :
+ "/etc/lang-table";
+ FILE * f;
+ char line[256];
+ char name[256], key[256], sun[256], console[256], code[256];
+ int lineNum = 0;
+
+ f = fopen(file, "r");
+
+ while (fgets(line, sizeof(line), f)) {
+ lineNum++;
+ languages = realloc(languages, sizeof(*languages) * (numLanguages + 1));
+ if (sscanf(line, "%s %s %s %s %s\n", name, key, sun, console,
+ code) != 5) {
+ logMessage("bad line %d in lang-table", lineNum);
+ } else {
+ languages[numLanguages].lang = strdup(name);
+ languages[numLanguages].key = strdup(key);
+ languages[numLanguages].font = strdup(sun);
+ languages[numLanguages].map = strdup(console);
+ languages[numLanguages].lc_all = strdup(code);
+ numLanguages++;
+ }
+ }
+}
void loadLanguage (char * file, int flags) {
char filename[200];
@@ -246,6 +247,8 @@ int chooseLanguage(char ** lang, int flags) {
int i;
int english = 0;
+ if (!languages) loadLanguageList(flags);
+
langs = alloca(sizeof(*langs) * (numLanguages + 1));
for (i = 0; i < numLanguages; i++) {