2004-08-23 00:15:46 +00:00
|
|
|
#ifndef _VM_H
|
|
|
|
#define _VM_H
|
|
|
|
|
|
|
|
#ifdef _WIN32
|
2009-07-14 23:42:54 +00:00
|
|
|
#define EXPORT_FN __cdecl
|
2004-08-23 00:15:46 +00:00
|
|
|
#else
|
2009-07-14 23:42:54 +00:00
|
|
|
#define EXPORT_FN
|
2004-08-23 00:15:46 +00:00
|
|
|
#endif
|
|
|
|
|
2009-07-14 23:42:54 +00:00
|
|
|
typedef qintptr_t (EXPORT_FN *sys_calldll_t) (qintptr_t arg, ...);
|
2009-07-17 15:34:16 +00:00
|
|
|
typedef int (*sys_callqvm_t) (void *offset, quintptr_t mask, int fn, const int *arg);
|
2004-08-23 00:15:46 +00:00
|
|
|
|
|
|
|
typedef struct vm_s vm_t;
|
|
|
|
|
|
|
|
// for syscall users
|
2009-07-14 23:42:54 +00:00
|
|
|
#define VM_LONG(x) (*(int*)&(x)) //note: on 64bit platforms, the later bits can contain junk
|
|
|
|
#define VM_FLOAT(x) (*(float*)&(x)) //note: on 64bit platforms, the later bits can contain junk
|
2004-08-23 00:15:46 +00:00
|
|
|
#define VM_POINTER(x) ((x)?(void*)((char *)offset+((x)%mask)):NULL)
|
2004-10-10 06:32:29 +00:00
|
|
|
#define VM_OOB(p,l) (p + l >= mask || VM_POINTER(p) < offset)
|
2004-08-23 00:15:46 +00:00
|
|
|
// ------------------------- * interface * -------------------------
|
|
|
|
|
|
|
|
void VM_PrintInfo(vm_t *vm);
|
2015-02-02 08:01:53 +00:00
|
|
|
vm_t *VM_CreateBuiltin(const char *name, sys_calldll_t syscalldll, qintptr_t (*init)(qintptr_t *args));
|
2019-02-24 08:32:45 +00:00
|
|
|
vm_t *VM_Create(const char *dllname, sys_calldll_t syscalldll, const char *qvmname, sys_callqvm_t syscallqvm);
|
2016-07-12 00:40:13 +00:00
|
|
|
const char *VM_GetFilename(vm_t *vm);
|
2004-08-23 00:15:46 +00:00
|
|
|
void VM_Destroy(vm_t *vm);
|
2013-05-11 14:02:55 +00:00
|
|
|
//qboolean VM_Restart(vm_t *vm);
|
2009-07-14 23:42:54 +00:00
|
|
|
qintptr_t VARGS VM_Call(vm_t *vm, qintptr_t instruction, ...);
|
|
|
|
qboolean VM_NonNative(vm_t *vm);
|
2005-03-10 03:55:18 +00:00
|
|
|
void *VM_MemoryBase(vm_t *vm);
|
2011-07-30 14:14:56 +00:00
|
|
|
quintptr_t VM_MemoryMask(vm_t *vm);
|
2004-08-23 00:15:46 +00:00
|
|
|
|
2007-09-02 19:55:17 +00:00
|
|
|
#define VM_FS_READ 0
|
|
|
|
#define VM_FS_WRITE 1
|
|
|
|
#define VM_FS_APPEND 2
|
2018-07-05 16:21:44 +00:00
|
|
|
#define VM_FS_APPEND_SYNC 3 //I don't know, don't ask me. look at q3 source
|
2016-08-25 00:12:14 +00:00
|
|
|
qofs_t VM_fopen (const char *name, int *handle, int fmode, int owner);
|
2007-09-02 19:55:17 +00:00
|
|
|
int VM_FRead (char *dest, int quantity, int fnum, int owner);
|
2016-08-25 00:12:14 +00:00
|
|
|
int VM_FWrite (const char *dest, int quantity, int fnum, int owner);
|
|
|
|
qboolean VM_FSeek (int fnum, qofs_t offset, int seektype, int owner);
|
|
|
|
qofs_t VM_FTell (int fnum, int owner);
|
2007-09-02 19:55:17 +00:00
|
|
|
void VM_fclose (int fnum, int owner);
|
|
|
|
void VM_fcloseall (int owner);
|
2016-08-25 00:12:14 +00:00
|
|
|
int VM_GetFileList(const char *path, const char *ext, char *output, int buffersize);
|
2007-09-02 19:55:17 +00:00
|
|
|
|
2007-09-17 20:35:39 +00:00
|
|
|
typedef struct {
|
|
|
|
int handle;
|
|
|
|
int modificationCount;
|
|
|
|
float value;
|
|
|
|
int integer;
|
|
|
|
char string[256];
|
2013-05-03 04:28:08 +00:00
|
|
|
} q3vmcvar_t;
|
|
|
|
int VMQ3_Cvar_Register(q3vmcvar_t *v, char *name, char *defval, int flags);
|
|
|
|
int VMQ3_Cvar_Update(q3vmcvar_t *v);
|
2007-09-17 20:35:39 +00:00
|
|
|
|
2019-07-02 04:12:20 +00:00
|
|
|
typedef struct {
|
|
|
|
int tm_sec;
|
|
|
|
int tm_min;
|
|
|
|
int tm_hour;
|
|
|
|
int tm_mday;
|
|
|
|
int tm_mon;
|
|
|
|
int tm_year;
|
|
|
|
int tm_wday;
|
|
|
|
int tm_yday;
|
|
|
|
int tm_isdst;
|
|
|
|
} q3time_t;
|
|
|
|
qint64_t Q3VM_GetRealtime(q3time_t *qtime);
|
|
|
|
|
2004-08-23 00:15:46 +00:00
|
|
|
#endif
|