From 102c3742487dba76ec72d5f56a2c3041344b2d68 Mon Sep 17 00:00:00 2001 From: Sebastian Leonhardt Date: Fri, 8 Jan 2016 01:05:36 +0100 Subject: added xrick game original xrick code by 'BigOrno' at: http://www.bigorno.net/xrick/ Rockbox port, plus bugfixes at: https://github.com/pierluigi-vicinanza/xrick Further changes: * Additonal fixes from g#3026 * Port to modern plugin API * Add Pluginlib keymap fallback * Support all >1bpp screens * Fix build warnings in miniz * Better error message when resources are missing Change-Id: Id83928bc2539901b0221692f65cbca41389c58e7 --- apps/plugins/xrick/system/sysfile_rockbox.c | 122 ++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 apps/plugins/xrick/system/sysfile_rockbox.c (limited to 'apps/plugins/xrick/system/sysfile_rockbox.c') diff --git a/apps/plugins/xrick/system/sysfile_rockbox.c b/apps/plugins/xrick/system/sysfile_rockbox.c new file mode 100644 index 0000000000..72227d5301 --- /dev/null +++ b/apps/plugins/xrick/system/sysfile_rockbox.c @@ -0,0 +1,122 @@ + /*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Port of xrick, a Rick Dangerous clone, to Rockbox. + * See http://www.bigorno.net/xrick/ + * + * Copyright (C) 2008-2014 Pierluigi Vicinanza + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "xrick/system/system.h" + +#include "xrick/config.h" +#include "xrick/util.h" + +#include "plugin.h" + +#define XRICK_GAME_DIR ROCKBOX_DIR "/xrick/" + +/* + * Global variables + */ +const char *sysfile_defaultPath = XRICK_GAME_DIR; + +/* + * Local variables + */ +static char *rootPath = NULL; + +/* + * + */ +bool sysfile_setRootPath(const char *name) +{ + rootPath = u_strdup(name); + return (rootPath != NULL); +} + +/* + * + */ +void sysfile_clearRootPath() +{ + sysmem_pop(rootPath); + rootPath = NULL; +} + +/* + * Open a data file. + */ +file_t sysfile_open(const char *name) +{ + int fd; + + size_t fullPathLength = rb->strlen(rootPath) + rb->strlen(name) + 2; + char *fullPath = sysmem_push(fullPathLength); + if (!fullPath) + { + return NULL; + } + rb->snprintf(fullPath, fullPathLength, "%s/%s", rootPath, name); + fd = rb->open(fullPath, O_RDONLY); + sysmem_pop(fullPath); + + /* + * note: I've never seen zero/NULL being used as a file descriptor under Rockbox. + * Putting a check here in case this will ever happen (will need a fix). + */ + if (fd == 0) + { + sys_error("(file) unsupported file descriptor (zero/NULL) being used"); + } + if (fd < 0) + { + return NULL; + } + + return (file_t)fd; +} + +/* + * Read a file within a data archive. + */ +int sysfile_read(file_t file, void *buf, size_t size, size_t count) +{ + int fd = (int)file; + return (rb->read(fd, buf, size * count) / size); +} + +/* + * Seek. + */ +int sysfile_seek(file_t file, long offset, int origin) +{ + int fd = (int)file; + return rb->lseek(fd, offset, origin); +} + +/* + * Close a file within a data archive. + */ +void sysfile_close(file_t file) +{ + int fd = (int)file; + rb->close(fd); +} + +/* eof */ -- cgit v1.2.3