Initial commit.
This commit is contained in:
158
codemp/qcommon/files.h
Normal file
158
codemp/qcommon/files.h
Normal file
@@ -0,0 +1,158 @@
|
||||
#ifndef __FILES_H
|
||||
#define __FILES_H
|
||||
|
||||
/*
|
||||
Structures local to the files_* modules.
|
||||
*/
|
||||
|
||||
#ifdef _XBOX
|
||||
#include "../goblib/goblib.h"
|
||||
|
||||
typedef int wfhandle_t;
|
||||
#else
|
||||
#include "../zlib32/zip.h"
|
||||
#include "unzip.h"
|
||||
#endif
|
||||
|
||||
#define BASEGAME "base"
|
||||
#define DEMOGAME "demo"
|
||||
|
||||
// every time a new demo pk3 file is built, this checksum must be updated.
|
||||
// the easiest way to get it is to just run the game and see what it spits out
|
||||
#define DEMO_PAK_CHECKSUM 437558517u
|
||||
|
||||
// if this is defined, the executable positively won't work with any paks other
|
||||
// than the demo pak, even if productid is present. This is only used for our
|
||||
// last demo release to prevent the mac and linux users from using the demo
|
||||
// executable with the production windows pak before the mac/linux products
|
||||
// hit the shelves a little later
|
||||
// NOW defined in build files
|
||||
//#define PRE_RELEASE_TADEMO
|
||||
|
||||
#define MAX_ZPATH 256
|
||||
#define MAX_SEARCH_PATHS 4096
|
||||
#define MAX_FILEHASH_SIZE 1024
|
||||
|
||||
typedef struct fileInPack_s {
|
||||
char *name; // name of the file
|
||||
unsigned long pos; // file info position in zip
|
||||
struct fileInPack_s* next; // next file in the hash
|
||||
} fileInPack_t;
|
||||
|
||||
typedef struct {
|
||||
char pakFilename[MAX_OSPATH]; // c:\quake3\base\pak0.pk3
|
||||
char pakBasename[MAX_OSPATH]; // pak0
|
||||
char pakGamename[MAX_OSPATH]; // base
|
||||
#ifndef _XBOX
|
||||
unzFile handle; // handle to zip file
|
||||
#endif
|
||||
int checksum; // regular checksum
|
||||
int pure_checksum; // checksum for pure
|
||||
int numfiles; // number of files in pk3
|
||||
int referenced; // referenced file flags
|
||||
int hashSize; // hash table size (power of 2)
|
||||
fileInPack_t* *hashTable; // hash table
|
||||
fileInPack_t* buildBuffer; // buffer with the filenames etc.
|
||||
} pack_t;
|
||||
|
||||
typedef struct {
|
||||
char path[MAX_OSPATH]; // c:\jk2
|
||||
char gamedir[MAX_OSPATH]; // base
|
||||
} directory_t;
|
||||
|
||||
typedef struct searchpath_s {
|
||||
struct searchpath_s *next;
|
||||
|
||||
pack_t *pack; // only one of pack / dir will be non NULL
|
||||
directory_t *dir;
|
||||
} searchpath_t;
|
||||
|
||||
|
||||
typedef union qfile_gus {
|
||||
FILE* o;
|
||||
#ifndef _XBOX
|
||||
unzFile z;
|
||||
#endif
|
||||
} qfile_gut;
|
||||
|
||||
typedef struct qfile_us {
|
||||
qfile_gut file;
|
||||
qboolean unique;
|
||||
} qfile_ut;
|
||||
|
||||
|
||||
typedef struct {
|
||||
qfile_ut handleFiles;
|
||||
qboolean handleSync;
|
||||
int baseOffset;
|
||||
int fileSize;
|
||||
int zipFilePos;
|
||||
qboolean zipFile;
|
||||
qboolean streamed;
|
||||
char name[MAX_ZPATH];
|
||||
|
||||
#ifdef _XBOX
|
||||
GOBHandle ghandle;
|
||||
qboolean gob;
|
||||
qboolean used;
|
||||
wfhandle_t whandle;
|
||||
#endif
|
||||
} fileHandleData_t;
|
||||
|
||||
|
||||
extern char fs_gamedir[MAX_OSPATH]; // this will be a single file name with no separators
|
||||
extern cvar_t *fs_debug;
|
||||
extern cvar_t *fs_homepath;
|
||||
extern cvar_t *fs_basepath;
|
||||
extern cvar_t *fs_basegame;
|
||||
extern cvar_t *fs_cdpath;
|
||||
extern cvar_t *fs_copyfiles;
|
||||
extern cvar_t *fs_gamedirvar;
|
||||
extern cvar_t *fs_restrict;
|
||||
extern cvar_t *fs_dirbeforepak; //rww - when building search path, keep directories at top and insert pk3's under them
|
||||
extern searchpath_t *fs_searchpaths;
|
||||
extern int fs_readCount; // total bytes read
|
||||
extern int fs_loadCount; // total files read
|
||||
extern int fs_loadStack; // total files in memory
|
||||
extern int fs_packFiles; // total number of files in packs
|
||||
|
||||
extern int fs_fakeChkSum;
|
||||
extern int fs_checksumFeed;
|
||||
|
||||
extern fileHandleData_t fsh[MAX_FILE_HANDLES];
|
||||
|
||||
extern qboolean initialized;
|
||||
|
||||
// never load anything from pk3 files that are not present at the server when pure
|
||||
extern int fs_numServerPaks;
|
||||
extern int fs_serverPaks[MAX_SEARCH_PATHS]; // checksums
|
||||
extern char *fs_serverPakNames[MAX_SEARCH_PATHS]; // pk3 names
|
||||
|
||||
// only used for autodownload, to make sure the client has at least
|
||||
// all the pk3 files that are referenced at the server side
|
||||
extern int fs_numServerReferencedPaks;
|
||||
extern int fs_serverReferencedPaks[MAX_SEARCH_PATHS]; // checksums
|
||||
extern char *fs_serverReferencedPakNames[MAX_SEARCH_PATHS]; // pk3 names
|
||||
|
||||
// last valid game folder used
|
||||
extern char lastValidBase[MAX_OSPATH];
|
||||
extern char lastValidGame[MAX_OSPATH];
|
||||
|
||||
#ifdef FS_MISSING
|
||||
extern FILE* missingFiles;
|
||||
#endif
|
||||
|
||||
|
||||
void FS_Startup( const char *gameName );
|
||||
qboolean FS_CreatePath(char *OSPath);
|
||||
char *FS_BuildOSPath( const char *base, const char *game, const char *qpath );
|
||||
char *FS_BuildOSPath( const char *qpath );
|
||||
fileHandle_t FS_HandleForFile(void);
|
||||
qboolean FS_FilenameCompare( const char *s1, const char *s2 );
|
||||
int FS_SV_FOpenFileRead( const char *filename, fileHandle_t *fp );
|
||||
void FS_Shutdown( void );
|
||||
void FS_SetRestrictions(void);
|
||||
void FS_CheckInit(void);
|
||||
void FS_ReplaceSeparators( char *path );
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user