/***************************************************************************
 *
 * resman.h
 *
 ***************************************************************************
 *
 * run-time resource manager
 *
 ***************************************************************************/

#ifndef RESMAN_H_INCLUDED
#define RESMAN_H_INCLUDED

/*
 * includes
 */

/*
 * defines
 */

#define ResPurgeID(p,x)                 ResPurge(&((p)->resourceHandles[x]))
#define ResIDToHandle(p,id)             (&((p)->resourceHandles[id]))

/*
 * typedefs
 */

/*
 * structures
 */

struct openSet
{
        int                     numResources;
        unsigned char   	**resourceHandles;
        struct tag              *tagList[256];
        unsigned long   	*resOffsets;
        char                    currentSetName[128];
        char                    currentSetDataName[128];
        int 			resLevel;
	unsigned long		romOffset;	// used on N64 only
	unsigned long		flags;
};

/*
 * globals
 */

extern void (*resmanPoll)(void);

/*
 * function prototypes
 */

extern int              ResOpenSet(char *setName,struct openSet **pp);
extern void             ResInit(struct openSet *p);
extern void             ResCloseSet(struct openSet *p);
extern void             ResPurge(unsigned char **handle);
extern void             ResPurgeAll(struct openSet *s);
extern unsigned char *  ResOpenName(struct openSet *p,char *name,int *id);
extern unsigned char *  ResOpenID(struct openSet *p,int id);
extern void             ResSetConstructor(char *pref,void (*construct)(unsigned char **));
extern int              ResLookupTag(struct openSet *p,char *tag);
extern long             ResGetSize(struct openSet *p,int id);
extern void             ResSetTmpBuffer(unsigned char *tmp);

#endif

