diff --git a/apps/language.c b/apps/language.c index cdcfbe19b2..fe9ad5e97d 100644 --- a/apps/language.c +++ b/apps/language.c @@ -43,23 +43,15 @@ #define HEADER_SIZE 4 static unsigned char language_buffer[MAX_LANGUAGE_SIZE]; - -void lang_init(void) -{ - int i; - unsigned char *ptr = (unsigned char *) language_builtin; - - for (i = 0; i < LANG_LAST_INDEX_IN_ARRAY; i++) { - language_strings[i] = ptr; - ptr += strlen((char *)ptr) + 1; /* advance pointer to next string */ - } -} - static unsigned char lang_options = 0; -int lang_is_rtl(void) +void lang_init(const unsigned char *builtin, unsigned char **dest, int count) { - return (lang_options & LANGUAGE_FLAG_RTL) != 0; + while(count--) { + *dest++ = (unsigned char *)builtin; + /* advance pointer to next string */ + builtin += strlen((char *)builtin) + 1; + } } int lang_load(const char *filename) @@ -79,7 +71,9 @@ int lang_load(const char *filename) read(fd, language_buffer, MAX_LANGUAGE_SIZE); unsigned char *ptr = language_buffer; int id; - lang_init(); /* initialize with builtin */ + /* initialize with builtin */ + lang_init(language_builtin, language_strings, + LANG_LAST_INDEX_IN_ARRAY); while(fsize>3) { id = (ptr[0]<<8) | ptr[1]; /* get two-byte id */ @@ -113,7 +107,7 @@ int lang_load(const char *filename) return retcode; } -int lang_english_to_id(const char* english) +int lang_english_to_id(const char *english) { int i; unsigned char *ptr = (unsigned char *) language_builtin; @@ -125,3 +119,8 @@ int lang_english_to_id(const char* english) } return -1; } + +int lang_is_rtl(void) +{ + return (lang_options & LANGUAGE_FLAG_RTL) != 0; +} diff --git a/apps/language.h b/apps/language.h index c2a1b70e18..4cfe2b22ce 100644 --- a/apps/language.h +++ b/apps/language.h @@ -22,13 +22,13 @@ ****************************************************************************/ /* Initialize language array with the builtin strings */ -void lang_init(void); +void lang_init(const unsigned char *builtin, unsigned char **dest, int count); /* load a given language file */ int lang_load(const char *filename); /* get the ID of an english string so it can be localised */ -int lang_english_to_id(const char* english); +int lang_english_to_id(const char *english); /* returns whether the loaded language is a right-to-left language */ int lang_is_rtl(void); diff --git a/apps/main.c b/apps/main.c index f48dd2d0a0..ca0cded351 100644 --- a/apps/main.c +++ b/apps/main.c @@ -312,7 +312,7 @@ static void init(void) button_init(); backlight_init(); sim_tasks_init(); - lang_init(); + lang_init(language_builtin, language_strings, LANG_LAST_INDEX_IN_ARRAY); #ifdef DEBUG debug_init(); #endif @@ -403,7 +403,7 @@ static void init(void) font_init(); show_logo(); - lang_init(); + lang_init(language_builtin, language_strings, LANG_LAST_INDEX_IN_ARRAY); #ifdef DEBUG debug_init();