#include "commun.h"

const char test_format[] = " Game boy advance filesystem by Brünni ****";

#define ALIGNEMENT				1024
#define LIMITE_RECHERCHE		((const u32 *) 0x09000000)

TAF *gblTaf;
void *gblData;
FICHIER *gblCurFile;

void InitFS()
{
	const u32 *ici = (u32 *) ((u32) InitFS & (-ALIGNEMENT));

	while (ici < LIMITE_RECHERCHE)
	{
		if (*ici == 0x2a2a2a2a)
		{        //Les étoiles
			if (!memcmp(ici + 1, test_format, 44))
			{
				ici += 48 / 4;
				break;
			}
		}

		ici += ALIGNEMENT / 4;
	}

	if (ici >= LIMITE_RECHERCHE)
		gblTaf = NULL, gblData = NULL;
	else
	{
		gblTaf = (TAF *) ici;
		gblData = (void *) ici + gblTaf->nbFichiers * sizeof(FICHIER) + sizeof(int);
	}
}

/*int Test(const char *symbole)     {
    int i,j=0;
    for (i=0;i<gblTaf->nbFichiers;i++)          {
        if (!strcmp(symbole,gblTaf->f[i].nom))
            j++;
    }
    return j;
}*/
void *SymFind(const char *symbole, FICHIER **f)
{
	int i;
	if (!gblTaf)
		return NULL;

/*    Test(symbole);
    Test(symbole);
    Test(symbole);
    Test(symbole);
    Test(symbole);
    Test(symbole);*/
	for (i = 0; i < gblTaf->nbFichiers; i++)
	{
		if (!strcmp(symbole, gblTaf->f[i].nom))
		{
			if (f != NULL)
				*f = &gblTaf->f[i];
			return (void *) gblData + gblTaf->f[i].offset;
		}
	}

	return NULL;
}
