From 158163b29ce8de7e503a18e85d2f239a79349a2b Mon Sep 17 00:00:00 2001 From: Spoike <acceptthis@users.sourceforge.net> Date: Thu, 8 Sep 2005 01:55:56 +0000 Subject: [PATCH] renamed some parameters, and made them optional. if you don't provide the syscall function pointers, you can't load the vm as either dll or qvm (handy for when sv_pure stuff works properly) git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1288 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/common/qvm.c | 56 +++++++++++++++++++++++++-------------------- engine/common/vm.h | 6 ++--- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/engine/common/qvm.c b/engine/common/qvm.c index 4d42b6954..77debb7c9 100644 --- a/engine/common/qvm.c +++ b/engine/common/qvm.c @@ -55,8 +55,8 @@ struct vm_s { // common vm_type_t type; char name[MAX_QPATH]; - sys_call_t syscall; - sys_callex_t syscallex; + sys_calldll_t syscalldll; + sys_callqvm_t syscallqvm; // shared void *hInst; @@ -68,9 +68,9 @@ struct vm_s { #ifdef _WIN32 #include "winquake.h" -void *Sys_LoadDLL(const char *name, void **vmMain, int (EXPORT_FN *syscall)(int arg, ... )) +void *Sys_LoadDLL(const char *name, void **vmMain, sys_calldll_t syscall) { - void (VARGS *dllEntry)(int (EXPORT_FN *syscall)(int arg, ... )); + void (VARGS *dllEntry)(sys_calldll_t syscall); char dllname[MAX_OSPATH]; HINSTANCE hVM; @@ -264,10 +264,10 @@ typedef struct qvm_s qbyte *mem_ptr; // unsigned int cycles; // command cicles executed - sys_callex_t syscall; + sys_callqvm_t syscall; } qvm_t; -qvm_t *QVM_Load(const char *name, sys_callex_t syscall); +qvm_t *QVM_Load(const char *name, sys_callqvm_t syscall); void QVM_UnLoad(qvm_t *qvm); int QVM_Exec(qvm_t *qvm, int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7); @@ -372,7 +372,7 @@ typedef enum qvm_op_e /* ** QVM_Load */ -qvm_t *QVM_Load(const char *name, sys_callex_t syscall) +qvm_t *QVM_Load(const char *name, sys_callqvm_t syscall) { char path[MAX_QPATH]; vmHeader_t *header; @@ -972,9 +972,9 @@ void VM_PrintInfo(vm_t *vm) /* ** VM_Create */ -vm_t *VM_Create(vm_t *vm, const char *name, sys_call_t syscall, sys_callex_t syscallex) +vm_t *VM_Create(vm_t *vm, const char *name, sys_calldll_t syscalldll, sys_callqvm_t syscallqvm) { - if(!name || !*name || !syscall || !syscallex) + if(!name || !*name) Sys_Error("VM_Create: bad parms"); if (!vm) @@ -983,27 +983,33 @@ vm_t *VM_Create(vm_t *vm, const char *name, sys_call_t syscall, sys_callex_t sys // prepare vm struct memset(vm, 0, sizeof(vm_t)); Q_strncpyz(vm->name, name, sizeof(vm->name)); - vm->syscall=syscall; - vm->syscallex=syscallex; + vm->syscalldll=syscalldll; + vm->syscallqvm=syscallqvm; - if (!COM_CheckParm("-nodlls") && !COM_CheckParm("-nosos")) //:) + if (syscalldll) { - if((vm->hInst=Sys_LoadDLL(name, (void**)&vm->vmMain, syscall))) + if (!COM_CheckParm("-nodlls") && !COM_CheckParm("-nosos")) //:) { - Con_DPrintf("Creating native machine \"%s\"\n", name); - vm->type=VM_NATIVE; - return vm; + if((vm->hInst=Sys_LoadDLL(name, (void**)&vm->vmMain, syscalldll))) + { + Con_DPrintf("Creating native machine \"%s\"\n", name); + vm->type=VM_NATIVE; + return vm; + } } } - if((vm->hInst=QVM_Load(name, syscallex))) + if (syscallqvm) { - Con_DPrintf("Creating virtual machine \"%s\"\n", name); - vm->type=VM_BYTECODE; - return vm; + if((vm->hInst=QVM_Load(name, syscallqvm))) + { + Con_DPrintf("Creating virtual machine \"%s\"\n", name); + vm->type=VM_BYTECODE; + return vm; + } } Z_Free(vm); @@ -1040,15 +1046,15 @@ void VM_Destroy(vm_t *vm) qboolean VM_Restart(vm_t *vm) { char name[MAX_QPATH]; - sys_call_t syscall; - sys_callex_t syscallex; + sys_calldll_t syscalldll; + sys_callqvm_t syscallqvm; if(!vm) return false; // save params Q_strncpyz(name, vm->name, sizeof(name)); - syscall=vm->syscall; - syscallex=vm->syscallex; + syscalldll=vm->syscalldll; + syscallqvm=vm->syscallqvm; // restart switch(vm->type) @@ -1065,7 +1071,7 @@ qboolean VM_Restart(vm_t *vm) break; } - return VM_Create(vm, name, syscall, syscallex)!=NULL; + return VM_Create(vm, name, syscalldll, syscallqvm)!=NULL; } void *VM_MemoryBase(vm_t *vm) diff --git a/engine/common/vm.h b/engine/common/vm.h index 36957af28..cb97deeb0 100644 --- a/engine/common/vm.h +++ b/engine/common/vm.h @@ -10,8 +10,8 @@ -typedef int (EXPORT_FN *sys_call_t) (int arg, ...); -typedef long (*sys_callex_t) (void *offset, unsigned int mask, int fn, const long *arg); +typedef int (EXPORT_FN *sys_calldll_t) (int arg, ...); +typedef long (*sys_callqvm_t) (void *offset, unsigned int mask, int fn, const long *arg); typedef struct vm_s vm_t; @@ -23,7 +23,7 @@ typedef struct vm_s vm_t; // ------------------------- * interface * ------------------------- void VM_PrintInfo(vm_t *vm); -vm_t *VM_Create(vm_t *vm, const char *name, sys_call_t syscall, sys_callex_t syscallex); +vm_t *VM_Create(vm_t *vm, const char *name, sys_calldll_t syscalldll, sys_callqvm_t syscallqvm); void VM_Destroy(vm_t *vm); qboolean VM_Restart(vm_t *vm); int VARGS VM_Call(vm_t *vm, int instruction, ...);