diff options
-rw-r--r-- | apps/language.c | 70 | ||||
-rw-r--r-- | apps/language.h | 35 |
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 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2002 Daniel Stenberg + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include <file.h> + +#include "language.h" +#include "lang.h" +#include "debug.h" + +static unsigned char language_buffer[MAX_LANGUAGE_SIZE]; + +void lang_load(char *filename) +{ + int filesize; + int fd = open(filename, O_RDONLY); + if(fd == -1) + return; + filesize = read(fd, language_buffer, MAX_LANGUAGE_SIZE); + if(filesize != MAX_LANGUAGE_SIZE) { + if((language_buffer[0] == LANGUAGE_COOKIE) && + (language_buffer[1] == LANGUAGE_VERSION)) { + unsigned char *ptr=&language_buffer[2]; + int id; + filesize-=2; + + while(filesize>3) { + id = (ptr[0]<<8) | ptr[1]; + ptr+=2; + language_strings[id] = ptr; + while(*ptr) { + filesize--; + ptr++; + } + filesize-=3; + ptr++; /* pass the terminating newline */ + } + + } + else { + DEBUGF("Illegal language file\n"); + } + } + else { + DEBUGF("Language %s too large: %d\n", filename, filesize); + } + close(fd); +} + +/* ----------------------------------------------------------------- + * local variables: + * eval: (load-file "../firmware/rockbox-mode.el") + * vim: et sw=4 ts=8 sts=4 tw=78 + * end: + */ 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 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2002 Daniel Stenberg + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +/* size of the buffer used for loadable, translated strings */ +#define MAX_LANGUAGE_SIZE 4096 + +/* both these must match the two initial bytes in the binary lang file */ +#define LANGUAGE_COOKIE 0x1a +#define LANGUAGE_VERSION 0x01 + +/* load a given language file */ +void lang_load(char *filename); + +/* ----------------------------------------------------------------- + * local variables: + * eval: (load-file "../firmware/rockbox-mode.el") + * vim: et sw=4 ts=8 sts=4 tw=78 + * end: + */ |