Skip to content

Commit 2f1bc87

Browse files
committed
feat: reduce boilerplate logic for importing modules
Signed-off-by: Michael Pollind <[email protected]>
1 parent 071863f commit 2f1bc87

File tree

8 files changed

+93
-15
lines changed

8 files changed

+93
-15
lines changed

source/client/cl_vid.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ static bool VID_LoadRefresh( const char *name )
317317

318318
VID_UnloadRefresh();
319319

320+
import.fs = &default_fs_imports_s;
320321
import.Com_Error = &Com_Error;
321322
import.Com_Printf = &Com_Printf;
322323
import.Com_DPrintf = &Com_DPrintf;

source/qcommon/common.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ void Com_Printf( const char *format, ... )
229229
va_start( argptr, format );
230230
Q_vsnprintfz( msg, sizeof( msg ), format, argptr );
231231
va_end( argptr );
232+
printf("%s", msg);
232233

233234
QMutex_Lock( com_print_mutex );
234235

@@ -308,6 +309,7 @@ void Com_Error( com_error_code_t code, const char *format, ... )
308309
Q_vsnprintfz( msg, sizeof_msg, format, argptr );
309310
va_end( argptr );
310311

312+
printf("%s", msg);
311313
if( code == ERR_DROP )
312314
{
313315
Com_Printf( "********************\nERROR: %s\n********************\n", msg );

source/qcommon/fs.h

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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

source/qcommon/qcommon.h

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -715,12 +715,14 @@ const char *FS_AbsoluteNameForFile( const char *filename );
715715
const char *FS_AbsoluteNameForBaseFile( const char *filename );
716716
void FS_AddExtraPK3Directory( const char *path );
717717

718+
719+
#include "fs.h"
718720
// // game and base files
719721
// file streaming
720-
int FS_FOpenFile( const char *filename, int *filenum, int mode );
721-
int FS_FOpenBaseFile( const char *filename, int *filenum, int mode );
722-
int FS_FOpenAbsoluteFile( const char *filename, int *filenum, int mode );
723-
void FS_FCloseFile( int file );
722+
//int FS_FOpenFile( const char *filename, int *filenum, int mode );
723+
//int FS_FOpenBaseFile( const char *filename, int *filenum, int mode );
724+
//int FS_FOpenAbsoluteFile( const char *filename, int *filenum, int mode );
725+
//void FS_FCloseFile( int file );
724726

725727
int FS_Read( void *buffer, size_t len, int file );
726728
int FS_Print( int file, const char *msg );
@@ -734,13 +736,13 @@ bool FS_IsUrl( const char *url );
734736
int FS_FileNo( int file, size_t *offset );
735737

736738
// file loading
737-
int FS_LoadFileExt( const char *path, int flags, void **buffer, void *stack, size_t stackSize, const char *filename, int fileline );
738-
int FS_LoadBaseFileExt( const char *path, int flags, void **buffer, void *stack, size_t stackSize, const char *filename, int fileline );
739-
void FS_FreeFile( void *buffer );
740-
void FS_FreeBaseFile( void *buffer );
741-
#define FS_LoadFile(path,buffer,stack,stacksize) FS_LoadFileExt(path,0,buffer,stack,stacksize,__FILE__,__LINE__)
742-
#define FS_LoadBaseFile(path,buffer,stack,stacksize) FS_LoadBaseFileExt(path,0,buffer,stack,stacksize,__FILE__,__LINE__)
743-
#define FS_LoadCacheFile(path,buffer,stack,stacksize) FS_LoadFileExt(path,FS_CACHE,buffer,stack,stacksize,__FILE__,__LINE__)
739+
//int FS_LoadFileExt( const char *path, int flags, void **buffer, void *stack, size_t stackSize, const char *filename, int fileline );
740+
//int FS_LoadBaseFileExt( const char *path, int flags, void **buffer, void *stack, size_t stackSize, const char *filename, int fileline );
741+
//void FS_FreeFile( void *buffer );
742+
//void FS_FreeBaseFile( void *buffer );
743+
//#define FS_LoadFile(path,buffer,stack,stacksize) FS_LoadFileExt(path,0,buffer,stack,stacksize,__FILE__,__LINE__)
744+
//#define FS_LoadBaseFile(path,buffer,stack,stacksize) FS_LoadBaseFileExt(path,0,buffer,stack,stacksize,__FILE__,__LINE__)
745+
//#define FS_LoadCacheFile(path,buffer,stack,stacksize) FS_LoadFileExt(path,FS_CACHE,buffer,stack,stacksize,__FILE__,__LINE__)
744746

745747
/**
746748
* Maps an existing file on disk for reading.

source/ref_base/r_public.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,14 @@ typedef struct
123123
void ( *BufPipe_WriteCmd )( qbufPipe_t *queue, const void *cmd, unsigned cmd_size );
124124
int ( *BufPipe_ReadCmds )( qbufPipe_t *queue, unsigned (**cmdHandlers)( const void * ) );
125125
void ( *BufPipe_Wait )( qbufPipe_t *queue, int (*read)( qbufPipe_t *, unsigned( ** )(const void *), bool ),
126-
unsigned (**cmdHandlers)( const void * ), unsigned timeout_msec );
126+
unsigned (**cmdHandlers)( const void * ), unsigned timeout_msec );
127+
128+
struct fs_import_s* fs;
129+
127130
} ref_import_t;
128131

132+
133+
129134
typedef struct
130135
{
131136
// if API is different, the dll cannot be used

source/ref_gl/r_local.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
2929
#include "../qcommon/bsp.h"
3030
#include "../qcommon/patch.h"
3131

32+
#include "../qcommon/fs.h"
33+
3234
typedef struct { char *name; void **funcPointer; } dllfunc_t;
3335

3436
typedef struct mempool_s mempool_t;

source/ref_gl/r_main.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1722,7 +1722,7 @@ int R_LoadFile_( const char *path, int flags, void **buffer, const char *filenam
17221722
buf = NULL; // quiet compiler warning
17231723

17241724
// look for it in the filesystem or pack files
1725-
len = ri.FS_FOpenFile( path, &fhandle, FS_READ|flags );
1725+
len = FS_FOpenFile( path, &fhandle, FS_READ|flags );
17261726

17271727
if( !fhandle )
17281728
{
@@ -1733,7 +1733,7 @@ int R_LoadFile_( const char *path, int flags, void **buffer, const char *filenam
17331733

17341734
if( !buffer )
17351735
{
1736-
ri.FS_FCloseFile( fhandle );
1736+
FS_FCloseFile( fhandle );
17371737
return len;
17381738
}
17391739

@@ -1742,7 +1742,7 @@ int R_LoadFile_( const char *path, int flags, void **buffer, const char *filenam
17421742
*buffer = buf;
17431743

17441744
ri.FS_Read( buf, len, fhandle );
1745-
ri.FS_FCloseFile( fhandle );
1745+
FS_FCloseFile( fhandle );
17461746

17471747
return len;
17481748
}

source/ref_gl/r_public.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,17 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1818
1919
*/
2020

21+
#define FS_DEFINE_INTERFACE_IMPL 1
22+
#include "../qcommon/fs.h"
23+
2124
// r_public.c
2225
#include "r_local.h"
2326
#include "r_frontend.h"
2427

28+
2529
ref_import_t ri;
2630

31+
2732
/*
2833
* GetRefAPIVersion
2934
*/
@@ -45,6 +50,7 @@ extern "C"
4550
QF_DLL_EXPORT ref_export_t *GetRefAPI( ref_import_t *import )
4651
{
4752
static ref_export_t globals;
53+
fs_import = *import->fs;
4854

4955
ri = *import;
5056

0 commit comments

Comments
 (0)