X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=progsvm.h;h=7e6250a4f8bfa7a80fb27c9f1898ef0d5dc750c8;hb=a19dce25671ecfa28e4eb3861f8636750bf3ba68;hp=c977d7ab6b05e097fef515c757ebb4f7f54a8d86;hpb=11e05215e5f3cee630f54b9836dab1b36b5b4ffc;p=xonotic%2Fdarkplaces.git diff --git a/progsvm.h b/progsvm.h index c977d7ab..7e6250a4 100644 --- a/progsvm.h +++ b/progsvm.h @@ -31,6 +31,7 @@ The code uses void pointers instead. #include "pr_comp.h" // defs shared with qcc #include "progdefs.h" // generated by program cdefs +#include "clprogdefs.h" // generated by program cdefs /* typedef union vm_eval_s @@ -203,11 +204,13 @@ typedef struct prvm_edict_s union { void *vp; - entvars_t *server; + entvars_t *server; + cl_entvars_t *client; } fields; } prvm_edict_t; -#define PRVM_GETEDICTFIELDVALUE(ed, fieldoffset) (fieldoffset ? (prvm_eval_t *)((qbyte *)ed->fields.vp + fieldoffset) : NULL) +#define PRVM_GETEDICTFIELDVALUE(ed, fieldoffset) (fieldoffset ? (prvm_eval_t *)((unsigned char *)ed->fields.vp + fieldoffset) : NULL) +#define PRVM_GETGLOBALFIELDVALUE(fieldoffset) (fieldoffset ? (prvm_eval_t *)((unsigned char *)prog->globals.generic + fieldoffset) : NULL) /*// this struct is the basic requirement for a qc prog typedef struct prvm_pr_globalvars_s @@ -242,8 +245,11 @@ typedef struct prvm_builtin_mem_s #define PRVM_FE_CHAIN 4 #define PRVM_OP_STATE 1 -#define PRVM_MAX_STACK_DEPTH 256 -#define PRVM_LOCALSTACK_SIZE 2048 +#define PRVM_MAX_STACK_DEPTH 1024 +#define PRVM_LOCALSTACK_SIZE 16384 + +#define PRVM_MAX_OPENFILES 256 +#define PRVM_MAX_OPENSEARCHES 128 typedef void (*prvm_builtin_t) (void); @@ -263,9 +269,12 @@ typedef struct prvm_prog_s int *statement_linenums; // NULL if not available + double *statement_profile; // only incremented if prvm_statementprofiling is on + union { float *generic; globalvars_t *server; + cl_globalvars_t *client; } globals; int maxknownstrings; @@ -274,7 +283,7 @@ typedef struct prvm_prog_s // (simple optimization of the free string search) int firstfreeknownstring; const char **knownstrings; - qbyte *knownstrings_freeable; + unsigned char *knownstrings_freeable; const char ***stringshash; // all memory allocations related to this vm_prog (code, edicts, strings) @@ -304,6 +313,9 @@ typedef struct prvm_prog_s //============================================================================ // until this point everything also exists (with the pr_ prefix) in the old vm + qfile_t *openfiles[PRVM_MAX_OPENFILES]; + fssearch_t *opensearches[PRVM_MAX_OPENSEARCHES]; + // copies of some vars that were former read from sv int num_edicts; // number of edicts for which space has been (should be) allocated @@ -314,7 +326,6 @@ typedef struct prvm_prog_s // number of reserved edicts (allocated from 1) int reserved_edicts; // [INIT] - prvm_edict_t *edicts; void *edictsfields; void *edictprivate; @@ -371,7 +382,7 @@ typedef struct prvm_prog_s void (*init_cmd)(void); // [INIT] used by PRVM_InitProg void (*reset_cmd)(void); // [INIT] used by PRVM_ResetProg - void (*error_cmd)(const char *format, ...); // [INIT] + void (*error_cmd)(const char *format, ...) DP_FUNC_PRINTF(1); // [INIT] } prvm_prog_t; @@ -423,13 +434,16 @@ void *_PRVM_Alloc (size_t buffersize, const char *filename, int fileline); void _PRVM_Free (void *buffer, const char *filename, int fileline); void _PRVM_FreeAll (const char *filename, int fileline); +void PRVM_Profile (int maxfunctions, int mininstructions); void PRVM_Profile_f (void); +void PRVM_PrintFunction_f (void); void PRVM_PrintState(void); void PRVM_CrashAll (void); void PRVM_Crash (void); int PRVM_ED_FindFieldOffset(const char *field); +int PRVM_ED_FindGlobalOffset(const char *global); ddef_t *PRVM_ED_FindField (const char *name); mfunction_t *PRVM_ED_FindFunction (const char *name); @@ -439,6 +453,7 @@ prvm_edict_t *PRVM_ED_Alloc (void); void PRVM_ED_Free (prvm_edict_t *ed); void PRVM_ED_ClearEdict (prvm_edict_t *e); +void PRVM_PrintFunctionStatements (const char *name); void PRVM_ED_Print(prvm_edict_t *ed); void PRVM_ED_Write (qfile_t *f, prvm_edict_t *ed); const char *PRVM_ED_ParseEdict (const char *data, prvm_edict_t *ent); @@ -505,12 +520,11 @@ void PRVM_FreeString(int num); #define PRVM_End prog = 0 #endif - //#define PRVM_SAFENAME #ifndef PRVM_SAFENAME - #define PRVM_NAME (prog->name) +# define PRVM_NAME (prog->name) #else - #define PRVM_NAME (prog->name ? prog->name : "Unknown prog name") +# define PRVM_NAME (prog->name ? prog->name : "Unknown prog name") #endif // helper macro to make function pointer calls easier @@ -537,6 +551,7 @@ qboolean PRVM_ProgLoaded(int prognr); int PRVM_GetProgNr(void); +void VM_Warning(const char *fmt, ...) DP_FUNC_PRINTF(1); // TODO: fill in the params //void PRVM_Create();