diff options
-rw-r--r-- | apps/language.c | 13 | ||||
-rw-r--r-- | apps/language.h | 3 | ||||
-rw-r--r-- | apps/main.c | 2 | ||||
-rwxr-xr-x | tools/genlang | 15 |
4 files changed, 29 insertions, 4 deletions
diff --git a/apps/language.c b/apps/language.c index 2b9b6ff30b..847100e7da 100644 --- a/apps/language.c +++ b/apps/language.c | |||
@@ -25,9 +25,21 @@ extern int printf(const char *format, ...); | |||
25 | #include "language.h" | 25 | #include "language.h" |
26 | #include "lang.h" | 26 | #include "lang.h" |
27 | #include "debug.h" | 27 | #include "debug.h" |
28 | #include "string.h" | ||
28 | 29 | ||
29 | static unsigned char language_buffer[MAX_LANGUAGE_SIZE]; | 30 | static unsigned char language_buffer[MAX_LANGUAGE_SIZE]; |
30 | 31 | ||
32 | void lang_init(void) | ||
33 | { | ||
34 | int i; | ||
35 | unsigned char *ptr = (unsigned char *) language_builtin; | ||
36 | |||
37 | for (i = 0; i < LANG_LAST_INDEX_IN_ARRAY; i++) { | ||
38 | language_strings[i] = ptr; | ||
39 | ptr += strlen(ptr) + 1; /* advance pointer to next string */ | ||
40 | } | ||
41 | } | ||
42 | |||
31 | int lang_load(const char *filename) | 43 | int lang_load(const char *filename) |
32 | { | 44 | { |
33 | int filesize; | 45 | int filesize; |
@@ -39,6 +51,7 @@ int lang_load(const char *filename) | |||
39 | if(filesize != MAX_LANGUAGE_SIZE) { | 51 | if(filesize != MAX_LANGUAGE_SIZE) { |
40 | if((language_buffer[0] == LANGUAGE_COOKIE) && | 52 | if((language_buffer[0] == LANGUAGE_COOKIE) && |
41 | (language_buffer[1] == LANGUAGE_VERSION)) { | 53 | (language_buffer[1] == LANGUAGE_VERSION)) { |
54 | lang_init(); /* initialize with builtin */ | ||
42 | unsigned char *ptr=&language_buffer[2]; | 55 | unsigned char *ptr=&language_buffer[2]; |
43 | int id; | 56 | int id; |
44 | filesize-=2; | 57 | filesize-=2; |
diff --git a/apps/language.h b/apps/language.h index 62974459a5..80242962ea 100644 --- a/apps/language.h +++ b/apps/language.h | |||
@@ -24,5 +24,8 @@ | |||
24 | #define LANGUAGE_COOKIE 0x1a | 24 | #define LANGUAGE_COOKIE 0x1a |
25 | #define LANGUAGE_VERSION 0x02 | 25 | #define LANGUAGE_VERSION 0x02 |
26 | 26 | ||
27 | /* Initialize language array with the builtin strings */ | ||
28 | void lang_init(void); | ||
29 | |||
27 | /* load a given language file */ | 30 | /* load a given language file */ |
28 | int lang_load(const char *filename); | 31 | int lang_load(const char *filename); |
diff --git a/apps/main.c b/apps/main.c index cc270ba136..ef8ca7bea7 100644 --- a/apps/main.c +++ b/apps/main.c | |||
@@ -126,6 +126,7 @@ void init(void) | |||
126 | lcd_init(); | 126 | lcd_init(); |
127 | font_init(); | 127 | font_init(); |
128 | show_logo(); | 128 | show_logo(); |
129 | lang_init(); | ||
129 | settings_reset(); | 130 | settings_reset(); |
130 | settings_calc_config_sector(); | 131 | settings_calc_config_sector(); |
131 | settings_load(SETTINGS_ALL); | 132 | settings_load(SETTINGS_ALL); |
@@ -171,6 +172,7 @@ void init(void) | |||
171 | 172 | ||
172 | font_init(); | 173 | font_init(); |
173 | show_logo(); | 174 | show_logo(); |
175 | lang_init(); | ||
174 | 176 | ||
175 | set_irq_level(0); | 177 | set_irq_level(0); |
176 | #ifdef DEBUG | 178 | #ifdef DEBUG |
diff --git a/tools/genlang b/tools/genlang index e13cd3faf9..2677735d2e 100755 --- a/tools/genlang +++ b/tools/genlang | |||
@@ -30,8 +30,11 @@ print HFILE <<MOO | |||
30 | */ | 30 | */ |
31 | #define str(x) language_strings[x] | 31 | #define str(x) language_strings[x] |
32 | 32 | ||
33 | /* this is the array with all the strings */ | 33 | /* this is the array for holding the string pointers. |
34 | It will be initialized at runtime. */ | ||
34 | extern unsigned char *language_strings[]; | 35 | extern unsigned char *language_strings[]; |
36 | /* this contains the concatenation of all strings, separated by \0 chars */ | ||
37 | extern const unsigned char language_builtin[]; | ||
35 | 38 | ||
36 | /* The enum below contains all available strings */ | 39 | /* The enum below contains all available strings */ |
37 | enum { | 40 | enum { |
@@ -41,8 +44,11 @@ MOO | |||
41 | print CFILE <<MOO | 44 | print CFILE <<MOO |
42 | /* This file was automaticly generated using genlang, the strings come | 45 | /* This file was automaticly generated using genlang, the strings come |
43 | from "$input" */ | 46 | from "$input" */ |
47 | |||
48 | #include "$prefix.h" | ||
44 | 49 | ||
45 | unsigned char *language_strings[]={ | 50 | unsigned char *language_strings[LANG_LAST_INDEX_IN_ARRAY]; |
51 | const unsigned char language_builtin[] = | ||
46 | MOO | 52 | MOO |
47 | ; | 53 | ; |
48 | 54 | ||
@@ -85,7 +91,8 @@ while(<LANG>) { | |||
85 | } | 91 | } |
86 | else { | 92 | else { |
87 | push @hfile, $set{'id'}; | 93 | push @hfile, $set{'id'}; |
88 | print CFILE " $value,\n"; | 94 | $value =~ s/\"$/\\0\"/; |
95 | print CFILE " $value\n"; | ||
89 | } | 96 | } |
90 | 97 | ||
91 | undef %set; | 98 | undef %set; |
@@ -118,7 +125,7 @@ MOO | |||
118 | ; | 125 | ; |
119 | 126 | ||
120 | print CFILE <<MOO | 127 | print CFILE <<MOO |
121 | }; | 128 | ; |
122 | /* end of generated string list */ | 129 | /* end of generated string list */ |
123 | MOO | 130 | MOO |
124 | ; | 131 | ; |