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
This commit is contained in:
Sebastian Leonhardt 2016-01-08 01:05:36 +01:00 committed by Solomon Peachy
parent 6f1e67e5e3
commit 102c374248
88 changed files with 16514 additions and 62 deletions

View file

@ -0,0 +1,141 @@
/*
* xrick/system/basic_funcs.h
*
* Copyright (C) 2008-2014 Pierluigi Vicinanza. All rights reserved.
*
* The use and distribution terms for this software are contained in the file
* named README, which can be found in the root of this distribution. By
* using this software in any fashion, you are agreeing to be bound by the
* terms of this license.
*
* You must not remove this notice, or any other, from this software.
*/
#ifndef _BASIC_FUNCS_H
#define _BASIC_FUNCS_H
#include "xrick/system/basic_types.h"
#include "xrick/system/system.h"
#ifdef __WIN32__
/* Windows is little endian only */
# define __ORDER_LITTLE_ENDIAN__ 1234
# define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
# define USE_DEFAULT_ENDIANNESS_FUNCTIONS
# include <stdlib.h> /* _byteswap_XXX */
#elif defined(ROCKBOX)
/* Rockbox*/
# include "plugin.h"
# define __ORDER_LITTLE_ENDIAN__ 1234
# define __ORDER_BIG_ENDIAN__ 4321
# ifdef ROCKBOX_BIG_ENDIAN
# define __BYTE_ORDER__ __ORDER_BIG_ENDIAN__
# else
# define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
# endif
#elif (defined(__FreeBSD__) && __FreeBSD_version >= 470000) || defined(__OpenBSD__) || defined(__NetBSD__)
/* *BSD */
# include <sys/endian.h>
# define __ORDER_BIG_ENDIAN__ BIG_ENDIAN
# define __ORDER_LITTLE_ENDIAN__ LITTLE_ENDIAN
# define __BYTE_ORDER__ BYTE_ORDER
#elif (defined(BSD) && (BSD >= 199103)) || defined(__MacOSX__)
/* more BSD */
# include <machine/endian.h>
# define __ORDER_BIG_ENDIAN__ BIG_ENDIAN
# define __ORDER_LITTLE_ENDIAN__ LITTLE_ENDIAN
# define __BYTE_ORDER__ BYTE_ORDER
#elif defined(__linux__) /*|| defined (__BEOS__)*/
/* Linux, BeOS */
# include <endian.h>
# define betoh16(x) be16toh(x)
# define letoh16(x) le16toh(x)
# define betoh32(x) be32toh(x)
# define letoh32(x) le32toh(x)
#else
/* shall we just '#include <endian.h>'? */
# define USE_DEFAULT_ENDIANNESS_FUNCTIONS
#endif /* __WIN32__ */
/* define default endianness */
#ifndef __ORDER_LITTLE_ENDIAN__
# define __ORDER_LITTLE_ENDIAN__ 1234
#endif
#ifndef __ORDER_BIG_ENDIAN__
# define __ORDER_BIG_ENDIAN__ 4321
#endif
#ifndef __BYTE_ORDER__
# warning "Byte order not defined on your system, assuming little endian!"
# define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
#endif
/* provide default endianness functions */
#ifdef USE_DEFAULT_ENDIANNESS_FUNCTIONS
# define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
inline uint32_t swap32(uint32_t x)
{
# ifdef _MSC_VER
return _byteswap_ulong(x);
# elif (GCC_VERSION > 40300) || defined(__clang__)
return __builtin_bswap32(x);
# else
return (x >> 24) |
((x >> 8) & 0x0000FF00) |
((x << 8) & 0x00FF0000) |
(x << 24);
# endif /* _MSC_VER */
}
inline uint16_t swap16(uint16_t x)
{
# ifdef _MSC_VER
return _byteswap_ushort(x);
# elif (GCC_VERSION > 40800) || defined(__clang__)
return __builtin_bswap16(x);
# else
return (x << 8)|(x >> 8);
# endif /* _MSC_VER */
}
# if (__BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__)
inline uint16_t htobe16(uint16_t host) { return swap16(host); }
inline uint16_t htole16(uint16_t host) { return host; }
inline uint16_t betoh16(uint16_t big_endian) { return swap16(big_endian); }
inline uint16_t letoh16(uint16_t little_endian) { return little_endian; }
inline uint32_t htobe32(uint32_t host) { return swap32(host); }
inline uint32_t htole32(uint32_t host) { return host; }
inline uint32_t betoh32(uint32_t big_endian) { return swap32(big_endian); }
inline uint32_t letoh32(uint32_t little_endian) { return little_endian; }
# elif (__BYTE_ORDER__==__ORDER_BIG_ENDIAN__)
inline uint16_t htobe16(uint16_t host) { return host; }
inline uint16_t htole16(uint16_t host) { return swap16(host); }
inline uint16_t betoh16(uint16_t big_endian) { return big_endian; }
inline uint16_t letoh16(uint16_t little_endian) { return swap16(little_endian); }
inline uint32_t htobe32(uint32_t host) { return host; }
inline uint32_t htole32(uint32_t host) { return swap32(host); }
inline uint32_t betoh32(uint32_t big_endian) { return big_endian; }
inline uint32_t letoh32(uint32_t little_endian) { return swap32(little_endian); }
# else
# error "Unknown/unsupported byte order!"
# endif
#endif /* USE_DEFAULT_ENDIANNESS_FUNCTIONS */
#endif /* ndef _BASIC_FUNCS_H */
/* eof */