2009-04-01 22:03:56 +00:00
# include "hash.h"
2012-05-09 15:30:53 +00:00
typedef struct
{
bucket_t buck ;
int depth ; /*shallower files will remove deeper files*/
} fsbucket_t ;
2009-04-01 22:03:56 +00:00
extern hashtable_t filesystemhash ; //this table is the one to build your hash references into
extern int fs_hash_dups ; //for tracking efficiency. no functional use.
extern int fs_hash_files ; //for tracking efficiency. no functional use.
2013-03-31 04:21:08 +00:00
struct searchpath_s ;
2009-04-01 22:03:56 +00:00
typedef struct {
2013-05-03 04:28:08 +00:00
void ( QDECL * GetDisplayPath ) ( void * handle , char * outpath , unsigned int pathsize ) ;
void ( QDECL * ClosePath ) ( void * handle ) ;
void ( QDECL * BuildHash ) ( void * handle , int depth , void ( QDECL * FS_AddFileHash ) ( int depth , const char * fname , fsbucket_t * filehandle , void * pathhandle ) ) ;
qboolean ( QDECL * FindFile ) ( void * handle , flocation_t * loc , const char * name , void * hashedresult ) ; //true if found (hashedresult can be NULL)
2009-04-01 22:03:56 +00:00
//note that if rawfile and offset are set, many Com_FileOpens will read the raw file
//otherwise ReadFile will be called instead.
2013-05-03 04:28:08 +00:00
void ( QDECL * ReadFile ) ( void * handle , flocation_t * loc , char * buffer ) ; //reads the entire file in one go (size comes from loc, so make sure the loc is valid, this is for performance with compressed archives)
int ( QDECL * EnumerateFiles ) ( void * handle , const char * match , int ( QDECL * func ) ( const char * fname , int fsize , void * parm , void * spath ) , void * parm ) ;
2009-04-01 22:03:56 +00:00
2013-05-03 04:28:08 +00:00
void * ( QDECL * OpenNew ) ( vfsfile_t * file , const char * desc ) ; //returns a handle to a new pak/path
2009-04-01 22:03:56 +00:00
2013-05-03 04:28:08 +00:00
int ( QDECL * GeneratePureCRC ) ( void * handle , int seed , int usepure ) ;
2009-04-01 22:03:56 +00:00
2013-05-03 04:28:08 +00:00
vfsfile_t * ( QDECL * OpenVFS ) ( void * handle , flocation_t * loc , const char * mode ) ;
2012-05-09 15:30:53 +00:00
2013-05-03 04:28:08 +00:00
qboolean ( QDECL * PollChanges ) ( void * handle ) ; //returns true if there were changes
2009-04-01 22:03:56 +00:00
} searchpathfuncs_t ;
//the stdio filesystem is special as that's the starting point of the entire filesystem
//warning: the handle is known to be a string pointer to the dir name
extern searchpathfuncs_t osfilefuncs ;
2013-05-03 04:28:08 +00:00
vfsfile_t * QDECL VFSOS_Open ( const char * osname , const char * mode ) ;
2010-11-11 04:03:16 +00:00
vfsfile_t * FS_DecompressGZip ( vfsfile_t * infile ) ;
2009-04-01 22:03:56 +00:00
2013-05-03 04:28:08 +00:00
int FS_RegisterFileSystemType ( void * module , const char * extension , searchpathfuncs_t * funcs , qboolean loadscan ) ;
2009-04-02 22:25:54 +00:00
void FS_UnRegisterFileSystemType ( int idx ) ;
2013-05-03 04:28:08 +00:00
void FS_UnRegisterFileSystemModule ( void * module ) ;