1+ #ifndef R_FS_H
2+ #define R_FS_H
3+
4+ #include "../gameshared/q_arch.h"
5+
6+ #define DECLARE_TYPEDEF_METHOD ( ret , name , ... ) \
7+ typedef ret(*name##Fn )( __VA_ARGS__ ); \
8+ ret name (__VA_ARGS__);
9+
10+ // file loading
11+ DECLARE_TYPEDEF_METHOD ( int , FS_FOpenFile , const char * filename , int * filenum , int mode );
12+ DECLARE_TYPEDEF_METHOD ( int , FS_FOpenBaseFile , const char * filename , int * filenum , int mode );
13+ DECLARE_TYPEDEF_METHOD ( int , FS_FOpenAbsoluteFile , const char * filename , int * filenum , int mode );
14+ DECLARE_TYPEDEF_METHOD ( void , FS_FCloseFile , int file );
15+
16+ DECLARE_TYPEDEF_METHOD ( int , FS_LoadFileExt , const char * path , int flags , void * * buffer , void * stack , size_t stackSize , const char * filename , int fileline );
17+ DECLARE_TYPEDEF_METHOD ( int , FS_LoadBaseFileExt , const char * path , int flags , void * * buffer , void * stack , size_t stackSize , const char * filename , int fileline );
18+ DECLARE_TYPEDEF_METHOD ( void , FS_FreeFile , void * buffer );
19+ DECLARE_TYPEDEF_METHOD ( void , FS_FreeBaseFile , void * buffer );
20+ #define FS_LoadFile (path ,buffer ,stack ,stacksize ) FS_LoadFileExt(path,0,buffer,stack,stacksize,__FILE__,__LINE__)
21+ #define FS_LoadBaseFile (path ,buffer ,stack ,stacksize ) FS_LoadBaseFileExt(path,0,buffer,stack,stacksize,__FILE__,__LINE__)
22+ #define FS_LoadCacheFile (path ,buffer ,stack ,stacksize ) FS_LoadFileExt(path,FS_CACHE,buffer,stack,stacksize,__FILE__,__LINE__)
23+
24+ struct fs_import_s {
25+ FS_LoadFileExtFn FS_LoadFileExt ;
26+ FS_LoadBaseFileExtFn FS_LoadBaseFileExt ;
27+ FS_FreeFileFn FS_FreeFile ;
28+ FS_FreeBaseFileFn FS_FreeBaseFile ;
29+ FS_FOpenFileFn FS_FOpenFile ;
30+ FS_FOpenBaseFileFn FS_FOpenBaseFile ;
31+ FS_FOpenAbsoluteFileFn FS_FOpenAbsoluteFile ;
32+ FS_FCloseFileFn FS_FCloseFile ;
33+ };
34+ static const struct fs_import_s default_fs_imports_s = {
35+ .FS_FreeFile = FS_FreeFile ,
36+ .FS_LoadFileExt = FS_LoadFileExt ,
37+ .FS_LoadBaseFileExt = FS_LoadBaseFileExt ,
38+ .FS_FreeBaseFile = FS_FreeBaseFile ,
39+ .FS_FOpenFile = FS_FOpenFile ,
40+ .FS_FOpenBaseFile = FS_FOpenBaseFile ,
41+ .FS_FOpenAbsoluteFile = FS_FOpenAbsoluteFile ,
42+ .FS_FCloseFile = FS_FCloseFile ,
43+ };
44+
45+ #if FS_DEFINE_INTERFACE_IMPL
46+ extern struct fs_import_s fs_import ;
47+ struct fs_import_s fs_import ;
48+ int FS_LoadFileExt (const char * path , int flags , void * * buffer , void * stack , size_t stackSize , const char * filename , int fileline ) {return fs_import .FS_LoadFileExt (path , flags , buffer , stack , stackSize , filename , fileline );}
49+ int FS_LoadBaseFileExt (const char * path , int flags , void * * buffer , void * stack , size_t stackSize , const char * filename , int fileline ) {return fs_import .FS_LoadBaseFileExt (path , flags , buffer , stack , stackSize , filename , fileline );}
50+ void FS_FreeFile (void * buffer ) {return fs_import .FS_FreeFile (buffer );}
51+ void FS_FreeBaseFile (void * buffer ) {return fs_import .FS_FreeFile (buffer );}
52+ int FS_FOpenFile (const char * filename , int * filenum , int mode ) { return fs_import .FS_FOpenFile (filename , filenum , mode );}
53+ int FS_FOpenBaseFile (const char * filename , int * filenum , int mode ) { return fs_import .FS_FOpenBaseFile (filename , filenum , mode );}
54+ int FS_FOpenAbsoluteFile (const char * filename , int * filenum , int mode ) { return fs_import .FS_FOpenAbsoluteFile (filename , filenum , mode );}
55+ void FS_FCloseFile (int file ) { fs_import .FS_FCloseFile (file ); }
56+ #endif
57+
58+ #endif
59+
60+ #undef DECLARE_TYPEDEF_METHOD
0 commit comments