summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/nds/libnds/source/common/gbfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/arm/nds/libnds/source/common/gbfs.c')
-rw-r--r--c/src/lib/libbsp/arm/nds/libnds/source/common/gbfs.c202
1 files changed, 0 insertions, 202 deletions
diff --git a/c/src/lib/libbsp/arm/nds/libnds/source/common/gbfs.c b/c/src/lib/libbsp/arm/nds/libnds/source/common/gbfs.c
deleted file mode 100644
index 7f174e4c84..0000000000
--- a/c/src/lib/libbsp/arm/nds/libnds/source/common/gbfs.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/*---------------------------------------------------------------------------------
- access object in a GBFS file
-
- Copyright 2002-2005 Damian Yerrick
-
- Additional code Dave Murphy
-
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
- OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
-
----------------------------------------------------------------------------------*/
-
-
-/*---------------------------------------------------------------------------------
- This code assumes a LITTLE ENDIAN target. It'll need a boatload
- of itohs and itohl calls if converted to run on Sega Genesis. It
- also assumes that the target uses 16-bit short and 32-bit longs.
----------------------------------------------------------------------------------*/
-
-#include <stdlib.h>
-#include <string.h>
-#include <nds/jtypes.h>
-#include "gbfs.h"
-
-/*---------------------------------------------------------------------------------
- change this to the end of your ROM,
- or to 0x02040000 for gba multiboot
- or to 0x24000000 for nds main ram
----------------------------------------------------------------------------------*/
-
-static const u32 * GBFS_1ST_SEARCH_LIMIT = (const u32 *)0x02400000;
-static const u32 * GBFS_2ND_SEARCH_START = (const u32 *)0x08000000;
-static const u32 * GBFS_2ND_SEARCH_LIMIT = (const u32 *)0x0a000000;
-/*---------------------------------------------------------------------------------
- a power of two, less than or equal to the argument passed to
- padbin. Increasing the stride makes find_first_gbfs_file()
- faster at the cost of a slightly larger binary.
----------------------------------------------------------------------------------*/
-static int GBFS_STRIDE = 256;
-
-/*---------------------------------------------------------------------------------
- Set the search limits and stride for searching
----------------------------------------------------------------------------------*/
-void gbfs_search_range(
- u32 gbfs_1st_limit,
- u32 gbfs_2nd_start, u32 gbfs_2nd_limit,
- u32 gbfs_stride
-) {
-//---------------------------------------------------------------------------------
- if ( 0 != gbfs_1st_limit ) GBFS_1ST_SEARCH_LIMIT = (u32 *)gbfs_1st_limit;
- if ( 0 != gbfs_2nd_limit ) GBFS_2ND_SEARCH_LIMIT = (u32 *)gbfs_2nd_limit;
- if ( 0 != gbfs_2nd_start ) GBFS_2ND_SEARCH_START = (u32 *)gbfs_2nd_start;
- if ( 0 != gbfs_stride ) GBFS_STRIDE = gbfs_stride;
-
-}
-
-//---------------------------------------------------------------------------------
-const GBFS_FILE * find_first_gbfs_file(const void *start) {
-//---------------------------------------------------------------------------------
- /* align the pointer */
- const u32 *here = (const u32 *)
- ((unsigned long)start & (-GBFS_STRIDE));
- const char rest_of_magic[] = "ightGBFS\r\n\x1a\n";
-
- /* Linear-search first in multiboot space. */
- while(here < GBFS_1ST_SEARCH_LIMIT)
- {
- /* We have to keep the magic code in two pieces; otherwise,
- this function may find itself and think it's a GBFS file.
- This obviously won't work if your compiler stores this
- numeric literal just before the literal string, but Devkit
- Advance R4 and R5 seem to keep numeric constant pools
- separate enough from string pools for this to work.
- */
- if(*here == 0x456e6950) { /* ASCII code for little endian "PinE" */
- /* We've matched the first four bytes.
- If the rest of the magic matches, then we've found a file. */
- if(!memcmp(here + 1, rest_of_magic, 12))
- return (const GBFS_FILE *)here;
- }
- here += GBFS_STRIDE / sizeof(here);
- }
-
- /* Now search in ROM space. */
- if(here < GBFS_2ND_SEARCH_START)
- here = GBFS_2ND_SEARCH_START;
- while(here < GBFS_2ND_SEARCH_LIMIT) {
- /* Search loop same as above. */
- if(*here == 0x456e6950) { /* ASCII code for little endian "PinE" */
- if(!memcmp(here + 1, rest_of_magic, 12))
- return (const GBFS_FILE *)here;
- }
- here += GBFS_STRIDE / sizeof(*here);
- }
- return 0;
-}
-
-
-//---------------------------------------------------------------------------------
-const void *skip_gbfs_file(const GBFS_FILE *file) {
-//---------------------------------------------------------------------------------
- return ((char *)file + file->total_len);
-}
-
-
-//---------------------------------------------------------------------------------
-static int namecmp(const void *a, const void *b) {
-//---------------------------------------------------------------------------------
- return memcmp(a, b, 24);
-}
-
-
-//---------------------------------------------------------------------------------
-const void *gbfs_get_obj( const GBFS_FILE *file,
- const char *name,
- u32 *len) {
-//---------------------------------------------------------------------------------
- char key[24] = {0};
-
- const GBFS_ENTRY *dirbase = (const GBFS_ENTRY *)((const char *)file + file->dir_off);
- size_t n_entries = file->dir_nmemb;
- const GBFS_ENTRY *here;
-
- strncpy(key, name, 24);
-
- here = bsearch( key, dirbase,
- n_entries, sizeof(GBFS_ENTRY),
- namecmp);
- if(!here)
- return NULL;
-
- if(len)
- *len = here->len;
- return (char *)file + here->data_offset;
-}
-
-
-//---------------------------------------------------------------------------------
-const void *gbfs_get_nth_obj( const GBFS_FILE *file,
- size_t n,
- char *name,
- u32 *len)
-//---------------------------------------------------------------------------------
-{
- const GBFS_ENTRY *dirbase = (const GBFS_ENTRY *)((const char *)file + file->dir_off);
- size_t n_entries = file->dir_nmemb;
- const GBFS_ENTRY *here = dirbase + n;
-
- if(n >= n_entries)
- return NULL;
-
- if(name) {
- strncpy(name, here->name, 24);
- name[24] = 0;
- }
-
- if(len)
- *len = here->len;
-
- return (char *)file + here->data_offset;
-}
-
-
-//---------------------------------------------------------------------------------
-void *gbfs_copy_obj( void *dst,
- const GBFS_FILE *file,
- const char *name) {
-//---------------------------------------------------------------------------------
- u32 len;
- const void *src = gbfs_get_obj(file, name, &len);
-
- if(!src)
- return NULL;
-
- memcpy(dst, src, len);
- return dst;
-}
-
-
-//---------------------------------------------------------------------------------
-size_t gbfs_count_objs(const GBFS_FILE *file) {
-//---------------------------------------------------------------------------------
- return file ? file->dir_nmemb : 0;
-}
-