Add hooks header
With macros for declaring hooks in header, in code, actually hooking and calling the originals Also with CL_CreateMove hooked
This commit is contained in:
parent
9b20d7e71f
commit
ef8504cdc9
|
@ -0,0 +1,65 @@
|
|||
|
||||
#ifndef _HOOKS_H
|
||||
#define _HOOKS_H
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#include "sdk.h"
|
||||
|
||||
/*
|
||||
* Table of prefixes:
|
||||
* prefix | meaning
|
||||
* -------+----------------------------
|
||||
* *_t | typedef (function type)
|
||||
* h_* | hook function (ours)
|
||||
* ho_* | hook original (ptr to orig)
|
||||
*
|
||||
*
|
||||
* DECL_HOOK_EXTERN: Version for the header. typedef's the function pointer with
|
||||
* the return type, name and args. Example:
|
||||
*
|
||||
* DECL_HOOK_EXTERN(int, test, double, double);
|
||||
* typedef int (*test_t)(double, double);
|
||||
* extern test_t ho_test; // Original
|
||||
* int h_test(double, double); // Our func
|
||||
*
|
||||
*
|
||||
* DECL_HOOK: Macro for declaring the global function pointer for the original
|
||||
* in the source file. Example:
|
||||
*
|
||||
* DECL_HOOK(test);
|
||||
* test_t ho_test = NULL; // Original
|
||||
*
|
||||
*
|
||||
* HOOK: Macro for storing the original function ptr of an interface and hooking
|
||||
* our own. Example:
|
||||
*
|
||||
* HOOK(gp_client, CL_CreateMove);
|
||||
* ho_CL_CreateMove = gp_client->CL_CreateMove; // Original
|
||||
* gp_client->CL_CreateMove = h_CL_CreateMove; // Our func
|
||||
*
|
||||
*
|
||||
* ORIGINAL: Macro for calling the original function. Example:
|
||||
*
|
||||
* ORIGINAL(CL_CreateMove, frametime, cmd, active);
|
||||
* ho_CL_CreateMove(frametime, cmd, active); // Original
|
||||
*/
|
||||
#define DECL_HOOK_EXTERN(type, name, ...) \
|
||||
typedef type (*name##_t)(__VA_ARGS__); \
|
||||
extern name##_t ho_##name; \
|
||||
type h_##name(__VA_ARGS__);
|
||||
|
||||
#define DECL_HOOK(name) name##_t ho_##name = NULL;
|
||||
|
||||
#define HOOK(interface, name) \
|
||||
ho_##name = interface->name; \
|
||||
interface->name = h_##name;
|
||||
|
||||
#define ORIGINAL(name, ...) ho_##name(__VA_ARGS__);
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
bool hooks_init(void);
|
||||
DECL_HOOK_EXTERN(void, CL_CreateMove, float, usercmd_t*, int);
|
||||
|
||||
#endif /* _HOOKS_H */
|
Loading…
Reference in New Issue