summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/language.c13
-rw-r--r--apps/language.h3
-rw-r--r--apps/main.c2
-rwxr-xr-xtools/genlang15
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
29static unsigned char language_buffer[MAX_LANGUAGE_SIZE]; 30static unsigned char language_buffer[MAX_LANGUAGE_SIZE];
30 31
32void 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
31int lang_load(const char *filename) 43int 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 */
28void lang_init(void);
29
27/* load a given language file */ 30/* load a given language file */
28int lang_load(const char *filename); 31int 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. */
34extern unsigned char *language_strings[]; 35extern unsigned char *language_strings[];
36/* this contains the concatenation of all strings, separated by \0 chars */
37extern const unsigned char language_builtin[];
35 38
36/* The enum below contains all available strings */ 39/* The enum below contains all available strings */
37enum { 40enum {
@@ -41,8 +44,11 @@ MOO
41print CFILE <<MOO 44print 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
45unsigned char *language_strings[]={ 50unsigned char *language_strings[LANG_LAST_INDEX_IN_ARRAY];
51const unsigned char language_builtin[] =
46MOO 52MOO
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
120print CFILE <<MOO 127print CFILE <<MOO
121}; 128;
122/* end of generated string list */ 129/* end of generated string list */
123MOO 130MOO
124 ; 131 ;