From 8d38c965ddbb0cd34189626a0002d33f1a9d1d2d Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 24 Sep 2002 12:39:33 +0000 Subject: [PATCH] binary language load support git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2388 a1c6a512-1295-4272-9138-f99709370657 --- apps/language.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ apps/language.h | 35 +++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 apps/language.c create mode 100644 apps/language.h 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 + +#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: + */