]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - progsvm.h
Patch by graphitemaster to support column number enhanced lno format.
[xonotic/darkplaces.git] / progsvm.h
index 83666557ceaad96fccd6a0ab8b9d4c9ac80534d9..e1fd5055fe8b5b6d631f15cec0c4d4376d3a3eee 100644 (file)
--- a/progsvm.h
+++ b/progsvm.h
@@ -228,13 +228,13 @@ extern prvm_eval_t prvm_badvalue;
 #define PRVM_menufunction(funcname)           (prog->funcoffsets.funcname)
 
 #if 1
-#define PRVM_EDICTFIELDVALUE(ed, fieldoffset)    (fieldoffset < 0 ? Con_Printf("Invalid fieldoffset at %s:%i\n", __FILE__, __LINE__), &prvm_badvalue : (prvm_eval_t *)(ed->fields.fp + fieldoffset))
+#define PRVM_EDICTFIELDVALUE(ed, fieldoffset)    ((fieldoffset) < 0 ? Con_Printf("Invalid fieldoffset at %s:%i\n", __FILE__, __LINE__), &prvm_badvalue : (prvm_eval_t *)((ed)->fields.fp + (fieldoffset)))
 #define PRVM_EDICTFIELDFLOAT(ed, fieldoffset)    (PRVM_EDICTFIELDVALUE(ed, fieldoffset)->_float)
 #define PRVM_EDICTFIELDVECTOR(ed, fieldoffset)   (PRVM_EDICTFIELDVALUE(ed, fieldoffset)->vector)
 #define PRVM_EDICTFIELDSTRING(ed, fieldoffset)   (PRVM_EDICTFIELDVALUE(ed, fieldoffset)->string)
 #define PRVM_EDICTFIELDEDICT(ed, fieldoffset)    (PRVM_EDICTFIELDVALUE(ed, fieldoffset)->edict)
 #define PRVM_EDICTFIELDFUNCTION(ed, fieldoffset) (PRVM_EDICTFIELDVALUE(ed, fieldoffset)->function)
-#define PRVM_GLOBALFIELDVALUE(fieldoffset)       (fieldoffset < 0 ? Con_Printf("Invalid fieldoffset at %s:%i\n", __FILE__, __LINE__), &prvm_badvalue : (prvm_eval_t *)(prog->globals.fp + fieldoffset))
+#define PRVM_GLOBALFIELDVALUE(fieldoffset)       ((fieldoffset) < 0 ? Con_Printf("Invalid fieldoffset at %s:%i\n", __FILE__, __LINE__), &prvm_badvalue : (prvm_eval_t *)(prog->globals.fp + (fieldoffset)))
 #define PRVM_GLOBALFIELDFLOAT(fieldoffset)       (PRVM_GLOBALFIELDVALUE(fieldoffset)->_float)
 #define PRVM_GLOBALFIELDVECTOR(fieldoffset)      (PRVM_GLOBALFIELDVALUE(fieldoffset)->vector)
 #define PRVM_GLOBALFIELDSTRING(fieldoffset)      (PRVM_GLOBALFIELDVALUE(fieldoffset)->string)
@@ -513,7 +513,9 @@ typedef struct prvm_prog_funcoffsets_s
 prvm_prog_funcoffsets_t;
 
 // stringbuffer flags
-#define STRINGBUFFER_SAVED     1 // saved in savegames
+#define STRINGBUFFER_SAVED     1   // saved in savegames
+#define STRINGBUFFER_QCFLAGS   1   // allowed to be set by QC
+#define STRINGBUFFER_TEMP      128 // internal use ONLY 
 typedef struct prvm_stringbuffer_s
 {
        int max_strings;
@@ -560,6 +562,7 @@ typedef struct prvm_prog_s
        int                                     numglobals;
 
        int                                     *statement_linenums; // NULL if not available
+       int                                     *statement_columnnums; // NULL if not available
 
        double                          *statement_profile; // only incremented if prvm_statementprofiling is on
 
@@ -591,6 +594,16 @@ typedef struct prvm_prog_s
        int                                     argc;
 
        int                                     trace;
+       int                                     break_statement;
+       int                                     break_stack_index;
+       int                                     watch_global;
+       etype_t                                 watch_global_type;
+       prvm_eval_t                             watch_global_value;
+       int                                     watch_edict;
+       int                                     watch_field;
+       etype_t                                 watch_field_type;
+       prvm_eval_t                             watch_edictfield_value;
+
        mfunction_t                     *xfunction;
        int                                     xstatement;
 
@@ -712,7 +725,9 @@ prvm_prog_t *PRVM_FriendlyProgFromString(const char *str); // for console comman
 #define PRVM_ProgLoaded(n) (PRVM_GetProg(n)->loaded)
 #define SVVM_prog (&prvm_prog_list[PRVM_PROG_SERVER])
 #define CLVM_prog (&prvm_prog_list[PRVM_PROG_CLIENT])
+#ifdef CONFIG_MENU
 #define MVM_prog (&prvm_prog_list[PRVM_PROG_MENU])
+#endif
 
 //============================================================================
 // prvm_cmds part
@@ -734,8 +749,10 @@ void SVVM_reset_cmd(prvm_prog_t *prog);
 void CLVM_init_cmd(prvm_prog_t *prog);
 void CLVM_reset_cmd(prvm_prog_t *prog);
 
+#ifdef CONFIG_MENU
 void MVM_init_cmd(prvm_prog_t *prog);
 void MVM_reset_cmd(prvm_prog_t *prog);
+#endif
 
 void VM_Cmd_Init(prvm_prog_t *prog);
 void VM_Cmd_Reset(prvm_prog_t *prog);
@@ -746,11 +763,15 @@ void PRVM_Init (void);
 #ifdef PROFILING
 void SVVM_ExecuteProgram (prvm_prog_t *prog, func_t fnum, const char *errormessage);
 void CLVM_ExecuteProgram (prvm_prog_t *prog, func_t fnum, const char *errormessage);
+#ifdef CONFIG_MENU
 void MVM_ExecuteProgram (prvm_prog_t *prog, func_t fnum, const char *errormessage);
+#endif
 #else
 #define SVVM_ExecuteProgram PRVM_ExecuteProgram
 #define CLVM_ExecuteProgram PRVM_ExecuteProgram
+#ifdef CONFIG_MENU
 #define MVM_ExecuteProgram PRVM_ExecuteProgram
+#endif
 void PRVM_ExecuteProgram (prvm_prog_t *prog, func_t fnum, const char *errormessage);
 #endif
 
@@ -763,7 +784,7 @@ void PRVM_ChildProfile_f (void);
 void PRVM_CallProfile_f (void);
 void PRVM_PrintFunction_f (void);
 
-void PRVM_PrintState(prvm_prog_t *prog);
+void PRVM_PrintState(prvm_prog_t *prog, int stack_index);
 void PRVM_Crash(prvm_prog_t *prog);
 void PRVM_ShortStackTrace(prvm_prog_t *prog, char *buf, size_t bufsize);
 const char *PRVM_AllocationOrigin(prvm_prog_t *prog);
@@ -822,7 +843,7 @@ unsigned int PRVM_EDICT_NUM_ERROR(prvm_prog_t *prog, unsigned int n, const char
 
 // FIXME: make these go away?
 #define        PRVM_E_FLOAT(e,o) (e->fields.fp[o])
-#define        PRVM_E_INT(e,o) (e->fields.fp[o])
+#define        PRVM_E_INT(e,o) (e->fields.ip[o])
 //#define      PRVM_E_VECTOR(e,o) (&(e->fields.fp[o]))
 #define        PRVM_E_STRING(e,o) (PRVM_GetString(prog, e->fields.ip[o]))
 
@@ -855,12 +876,14 @@ Call InitProg with the num
 Set up the fields marked with [INIT] in the prog struct
 Load a program with LoadProgs
 */
-// Load expects to be called right after Init
+// Load expects to be called right after Reset
 void PRVM_Prog_Init(prvm_prog_t *prog);
-void PRVM_Prog_Load(prvm_prog_t *prog, const char *filename, int numrequiredfunc, const char **required_func, int numrequiredfields, prvm_required_field_t *required_field, int numrequiredglobals, prvm_required_field_t *required_global);
+void PRVM_Prog_Load(prvm_prog_t *prog, const char *filename, unsigned char *data, fs_offset_t size, int numrequiredfunc, const char **required_func, int numrequiredfields, prvm_required_field_t *required_field, int numrequiredglobals, prvm_required_field_t *required_global);
 void PRVM_Prog_Reset(prvm_prog_t *prog);
 
 void PRVM_StackTrace(prvm_prog_t *prog);
+void PRVM_Breakpoint(prvm_prog_t *prog, int stack_index, const char *text);
+void PRVM_Watchpoint(prvm_prog_t *prog, int stack_index, const char *text, etype_t type, prvm_eval_t *o, prvm_eval_t *n);
 
 void VM_Warning(prvm_prog_t *prog, const char *fmt, ...) DP_FUNC_PRINTF(2);