mirror of
https://bitbucket.org/CPMADevs/cnq3
synced 2024-11-30 07:41:45 +00:00
57 lines
2.5 KiB
C
57 lines
2.5 KiB
C
// only include in cg_ext.c, g_ext.c, ui_ext.c
|
|
|
|
#ifndef Q3_VM
|
|
#include "q_shared.h"
|
|
extern dllSyscall_t syscall;
|
|
#endif
|
|
|
|
#define EMPTY
|
|
|
|
#ifdef Q3_VM
|
|
#define DEF_TRAP_0(ret, R, Name) typedef R (*Name##_t)(void); Name##_t Name
|
|
#define DEF_TRAP_1(ret, R, Name, A1) typedef R (*Name##_t)(A1); Name##_t Name
|
|
#define DEF_TRAP_2(ret, R, Name, A1, A2) typedef R (*Name##_t)(A1, A2); Name##_t Name
|
|
#define DEF_TRAP_3(ret, R, Name, A1, A2, A3) typedef R (*Name##_t)(A1, A2, A3); Name##_t Name
|
|
#define DEF_TRAP_4(ret, R, Name, A1, A2, A3, A4) typedef R (*Name##_t)(A1, A2, A3, A4); Name##_t Name
|
|
#define DEF_TRAP_5(ret, R, Name, A1, A2, A3, A4, A5) typedef R (*Name##_t)(A1, A2, A3, A4, A5); Name##_t Name
|
|
#define DEF_TRAP_6(ret, R, Name, A1, A2, A3, A4, A5, A6) typedef R (*Name##_t)(A1, A2, A3, A4, A5, A6); Name##_t Name
|
|
#else
|
|
#define DEF_TRAP_0(ret, R, Name) R Name(void) { ret syscall(cpma_ext.Name); }
|
|
#define DEF_TRAP_1(ret, R, Name, A1) R Name(A1 a1) { ret syscall(cpma_ext.Name, (intptr_t)a1); }
|
|
#define DEF_TRAP_2(ret, R, Name, A1, A2) R Name(A1 a1, A2 a2) { ret syscall(cpma_ext.Name, (intptr_t)a1, (intptr_t)a2); }
|
|
#define DEF_TRAP_3(ret, R, Name, A1, A2, A3) R Name(A1 a1, A2 a2, A3 a3) { ret syscall(cpma_ext.Name, (intptr_t)a1, (intptr_t)a2, (intptr_t)a3); }
|
|
#define DEF_TRAP_4(ret, R, Name, A1, A2, A3, A4) R Name(A1 a1, A2 a2, A3 a3, A4 a4) { ret syscall(cpma_ext.Name, (intptr_t)a1, (intptr_t)a2, (intptr_t)a3, (intptr_t)a4); }
|
|
#define DEF_TRAP_5(ret, R, Name, A1, A2, A3, A4, A5) R Name(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { ret syscall(cpma_ext.Name, (intptr_t)a1, (intptr_t)a2, (intptr_t)a3, (intptr_t)a4, (intptr_t)a5); }
|
|
#define DEF_TRAP_6(ret, R, Name, A1, A2, A3, A4, A5, A6) R Name(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { ret syscall(cpma_ext.Name, (intptr_t)a1, (intptr_t)a2, (intptr_t)a3, (intptr_t)a4, (intptr_t)a5, (intptr_t)a6); }
|
|
#endif
|
|
|
|
#ifdef Q3_VM
|
|
#define GET_TRAP(Name) \
|
|
do { \
|
|
if (trap_GetValue(syscallStr, sizeof(syscallStr), #Name) && \
|
|
sscanf(syscallStr, "%d", &syscallId) == 1 && \
|
|
syscallId != 0) { \
|
|
cpma_ext.Name = syscallId; \
|
|
Name = (Name##_t)(~syscallId); \
|
|
} \
|
|
} while (0)
|
|
#else
|
|
#define GET_TRAP(Name) \
|
|
do { \
|
|
if (trap_GetValue(syscallStr, sizeof(syscallStr), #Name) && \
|
|
sscanf(syscallStr, "%d", &syscallId) == 1 && \
|
|
syscallId != 0) { \
|
|
cpma_ext.Name = syscallId; \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
#define GET_CMD(Name) \
|
|
do { \
|
|
if (trap_GetValue(syscallStr, sizeof(syscallStr), #Name) && \
|
|
syscallStr[0] == '1') { \
|
|
cpma_ext.Name = qtrue; \
|
|
} \
|
|
} while (0)
|
|
|
|
#define GET_CAP(Name) GET_CMD(Name)
|