summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/language.c70
-rw-r--r--apps/language.h35
2 files changed, 105 insertions, 0 deletions
diff --git a/apps/language.c b/apps/language.c
new file mode 100644
index 0000000000..a4b2b0dabc
--- /dev/null
+++ b/apps/language.c
@@ -0,0 +1,70 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2002 Daniel Stenberg
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include <file.h>
21
22#include "language.h"
23#include "lang.h"
24#include "debug.h"
25
26static unsigned char language_buffer[MAX_LANGUAGE_SIZE];
27
28void lang_load(char *filename)
29{
30 int filesize;
31 int fd = open(filename, O_RDONLY);
32 if(fd == -1)
33 return;
34 filesize = read(fd, language_buffer, MAX_LANGUAGE_SIZE);
35 if(filesize != MAX_LANGUAGE_SIZE) {
36 if((language_buffer[0] == LANGUAGE_COOKIE) &&
37 (language_buffer[1] == LANGUAGE_VERSION)) {
38 unsigned char *ptr=&language_buffer[2];
39 int id;
40 filesize-=2;
41
42 while(filesize>3) {
43 id = (ptr[0]<<8) | ptr[1];
44 ptr+=2;
45 language_strings[id] = ptr;
46 while(*ptr) {
47 filesize--;
48 ptr++;
49 }
50 filesize-=3;
51 ptr++; /* pass the terminating newline */
52 }
53
54 }
55 else {
56 DEBUGF("Illegal language file\n");
57 }
58 }
59 else {
60 DEBUGF("Language %s too large: %d\n", filename, filesize);
61 }
62 close(fd);
63}
64
65/* -----------------------------------------------------------------
66 * local variables:
67 * eval: (load-file "../firmware/rockbox-mode.el")
68 * vim: et sw=4 ts=8 sts=4 tw=78
69 * end:
70 */
diff --git a/apps/language.h b/apps/language.h
new file mode 100644
index 0000000000..92b80ec018
--- /dev/null
+++ b/apps/language.h
@@ -0,0 +1,35 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2002 Daniel Stenberg
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20/* size of the buffer used for loadable, translated strings */
21#define MAX_LANGUAGE_SIZE 4096
22
23/* both these must match the two initial bytes in the binary lang file */
24#define LANGUAGE_COOKIE 0x1a
25#define LANGUAGE_VERSION 0x01
26
27/* load a given language file */
28void lang_load(char *filename);
29
30/* -----------------------------------------------------------------
31 * local variables:
32 * eval: (load-file "../firmware/rockbox-mode.el")
33 * vim: et sw=4 ts=8 sts=4 tw=78
34 * end:
35 */