41struct framegroupblend_s;
50typedef struct prvm_stack_s
60typedef union prvm_eval_s
72typedef struct prvm_required_field_s
78#define PRVM_EDICT_MARK_WAIT_FOR_SETORIGIN -1
79#define PRVM_EDICT_MARK_SETORIGIN_CAUGHT -2
82typedef struct prvm_edict_private_s
90typedef struct prvm_edict_s
136#define PRVM_alledictfloat(ed, fieldname) (PRVM_EDICTFIELDFLOAT(ed, prog->fieldoffsets.fieldname))
137#define PRVM_alledictvector(ed, fieldname) (PRVM_EDICTFIELDVECTOR(ed, prog->fieldoffsets.fieldname))
138#define PRVM_alledictstring(ed, fieldname) (PRVM_EDICTFIELDSTRING(ed, prog->fieldoffsets.fieldname))
139#define PRVM_alledictedict(ed, fieldname) (PRVM_EDICTFIELDEDICT(ed, prog->fieldoffsets.fieldname))
140#define PRVM_alledictfunction(ed, fieldname) (PRVM_EDICTFIELDFUNCTION(ed, prog->fieldoffsets.fieldname))
141#define PRVM_allglobalfloat(fieldname) (PRVM_GLOBALFIELDFLOAT(prog->globaloffsets.fieldname))
142#define PRVM_allglobalvector(fieldname) (PRVM_GLOBALFIELDVECTOR(prog->globaloffsets.fieldname))
143#define PRVM_allglobalstring(fieldname) (PRVM_GLOBALFIELDSTRING(prog->globaloffsets.fieldname))
144#define PRVM_allglobaledict(fieldname) (PRVM_GLOBALFIELDEDICT(prog->globaloffsets.fieldname))
145#define PRVM_allglobalfunction(fieldname) (PRVM_GLOBALFIELDFUNCTION(prog->globaloffsets.fieldname))
146#define PRVM_allfunction(funcname) (prog->funcoffsets.funcname)
148#define PRVM_drawedictfloat(ed, fieldname) (PRVM_EDICTFIELDFLOAT(ed, prog->fieldoffsets.fieldname))
149#define PRVM_drawedictvector(ed, fieldname) (PRVM_EDICTFIELDVECTOR(ed, prog->fieldoffsets.fieldname))
150#define PRVM_drawedictstring(ed, fieldname) (PRVM_EDICTFIELDSTRING(ed, prog->fieldoffsets.fieldname))
151#define PRVM_drawedictedict(ed, fieldname) (PRVM_EDICTFIELDEDICT(ed, prog->fieldoffsets.fieldname))
152#define PRVM_drawedictfunction(ed, fieldname) (PRVM_EDICTFIELDFUNCTION(ed, prog->fieldoffsets.fieldname))
153#define PRVM_drawglobalfloat(fieldname) (PRVM_GLOBALFIELDFLOAT(prog->globaloffsets.fieldname))
154#define PRVM_drawglobalvector(fieldname) (PRVM_GLOBALFIELDVECTOR(prog->globaloffsets.fieldname))
155#define PRVM_drawglobalstring(fieldname) (PRVM_GLOBALFIELDSTRING(prog->globaloffsets.fieldname))
156#define PRVM_drawglobaledict(fieldname) (PRVM_GLOBALFIELDEDICT(prog->globaloffsets.fieldname))
157#define PRVM_drawglobalfunction(fieldname) (PRVM_GLOBALFIELDFUNCTION(prog->globaloffsets.fieldname))
158#define PRVM_drawfunction(funcname) (prog->funcoffsets.funcname)
160#define PRVM_gameedictfloat(ed, fieldname) (PRVM_EDICTFIELDFLOAT(ed, prog->fieldoffsets.fieldname))
161#define PRVM_gameedictvector(ed, fieldname) (PRVM_EDICTFIELDVECTOR(ed, prog->fieldoffsets.fieldname))
162#define PRVM_gameedictstring(ed, fieldname) (PRVM_EDICTFIELDSTRING(ed, prog->fieldoffsets.fieldname))
163#define PRVM_gameedictedict(ed, fieldname) (PRVM_EDICTFIELDEDICT(ed, prog->fieldoffsets.fieldname))
164#define PRVM_gameedictfunction(ed, fieldname) (PRVM_EDICTFIELDFUNCTION(ed, prog->fieldoffsets.fieldname))
165#define PRVM_gameglobalfloat(fieldname) (PRVM_GLOBALFIELDFLOAT(prog->globaloffsets.fieldname))
166#define PRVM_gameglobalvector(fieldname) (PRVM_GLOBALFIELDVECTOR(prog->globaloffsets.fieldname))
167#define PRVM_gameglobalstring(fieldname) (PRVM_GLOBALFIELDSTRING(prog->globaloffsets.fieldname))
168#define PRVM_gameglobaledict(fieldname) (PRVM_GLOBALFIELDEDICT(prog->globaloffsets.fieldname))
169#define PRVM_gameglobalfunction(fieldname) (PRVM_GLOBALFIELDFUNCTION(prog->globaloffsets.fieldname))
170#define PRVM_gamefunction(funcname) (prog->funcoffsets.funcname)
172#define PRVM_serveredictfloat(ed, fieldname) (PRVM_EDICTFIELDFLOAT(ed, prog->fieldoffsets.fieldname))
173#define PRVM_serveredictvector(ed, fieldname) (PRVM_EDICTFIELDVECTOR(ed, prog->fieldoffsets.fieldname))
174#define PRVM_serveredictstring(ed, fieldname) (PRVM_EDICTFIELDSTRING(ed, prog->fieldoffsets.fieldname))
175#define PRVM_serveredictedict(ed, fieldname) (PRVM_EDICTFIELDEDICT(ed, prog->fieldoffsets.fieldname))
176#define PRVM_serveredictfunction(ed, fieldname) (PRVM_EDICTFIELDFUNCTION(ed, prog->fieldoffsets.fieldname))
177#define PRVM_serverglobalfloat(fieldname) (PRVM_GLOBALFIELDFLOAT(prog->globaloffsets.fieldname))
178#define PRVM_serverglobalvector(fieldname) (PRVM_GLOBALFIELDVECTOR(prog->globaloffsets.fieldname))
179#define PRVM_serverglobalstring(fieldname) (PRVM_GLOBALFIELDSTRING(prog->globaloffsets.fieldname))
180#define PRVM_serverglobaledict(fieldname) (PRVM_GLOBALFIELDEDICT(prog->globaloffsets.fieldname))
181#define PRVM_serverglobalfunction(fieldname) (PRVM_GLOBALFIELDFUNCTION(prog->globaloffsets.fieldname))
182#define PRVM_serverfunction(funcname) (prog->funcoffsets.funcname)
184#define PRVM_clientedictfloat(ed, fieldname) (PRVM_EDICTFIELDFLOAT(ed, prog->fieldoffsets.fieldname))
185#define PRVM_clientedictvector(ed, fieldname) (PRVM_EDICTFIELDVECTOR(ed, prog->fieldoffsets.fieldname))
186#define PRVM_clientedictstring(ed, fieldname) (PRVM_EDICTFIELDSTRING(ed, prog->fieldoffsets.fieldname))
187#define PRVM_clientedictedict(ed, fieldname) (PRVM_EDICTFIELDEDICT(ed, prog->fieldoffsets.fieldname))
188#define PRVM_clientedictfunction(ed, fieldname) (PRVM_EDICTFIELDFUNCTION(ed, prog->fieldoffsets.fieldname))
189#define PRVM_clientglobalfloat(fieldname) (PRVM_GLOBALFIELDFLOAT(prog->globaloffsets.fieldname))
190#define PRVM_clientglobalvector(fieldname) (PRVM_GLOBALFIELDVECTOR(prog->globaloffsets.fieldname))
191#define PRVM_clientglobalstring(fieldname) (PRVM_GLOBALFIELDSTRING(prog->globaloffsets.fieldname))
192#define PRVM_clientglobaledict(fieldname) (PRVM_GLOBALFIELDEDICT(prog->globaloffsets.fieldname))
193#define PRVM_clientglobalfunction(fieldname) (PRVM_GLOBALFIELDFUNCTION(prog->globaloffsets.fieldname))
194#define PRVM_clientfunction(funcname) (prog->funcoffsets.funcname)
196#define PRVM_menuedictfloat(ed, fieldname) (PRVM_EDICTFIELDFLOAT(ed, prog->fieldoffsets.fieldname))
197#define PRVM_menuedictvector(ed, fieldname) (PRVM_EDICTFIELDVECTOR(ed, prog->fieldoffsets.fieldname))
198#define PRVM_menuedictstring(ed, fieldname) (PRVM_EDICTFIELDSTRING(ed, prog->fieldoffsets.fieldname))
199#define PRVM_menuedictedict(ed, fieldname) (PRVM_EDICTFIELDEDICT(ed, prog->fieldoffsets.fieldname))
200#define PRVM_menuedictfunction(ed, fieldname) (PRVM_EDICTFIELDFUNCTION(ed, prog->fieldoffsets.fieldname))
201#define PRVM_menuglobalfloat(fieldname) (PRVM_GLOBALFIELDFLOAT(prog->globaloffsets.fieldname))
202#define PRVM_menuglobalvector(fieldname) (PRVM_GLOBALFIELDVECTOR(prog->globaloffsets.fieldname))
203#define PRVM_menuglobalstring(fieldname) (PRVM_GLOBALFIELDSTRING(prog->globaloffsets.fieldname))
204#define PRVM_menuglobaledict(fieldname) (PRVM_GLOBALFIELDEDICT(prog->globaloffsets.fieldname))
205#define PRVM_menuglobalfunction(fieldname) (PRVM_GLOBALFIELDFUNCTION(prog->globaloffsets.fieldname))
206#define PRVM_menufunction(funcname) (prog->funcoffsets.funcname)
209#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)))
210#define PRVM_EDICTFIELDFLOAT(ed, fieldoffset) (PRVM_EDICTFIELDVALUE(ed, fieldoffset)->_float)
211#define PRVM_EDICTFIELDVECTOR(ed, fieldoffset) (PRVM_EDICTFIELDVALUE(ed, fieldoffset)->vector)
212#define PRVM_EDICTFIELDSTRING(ed, fieldoffset) (PRVM_EDICTFIELDVALUE(ed, fieldoffset)->string)
213#define PRVM_EDICTFIELDEDICT(ed, fieldoffset) (PRVM_EDICTFIELDVALUE(ed, fieldoffset)->edict)
214#define PRVM_EDICTFIELDFUNCTION(ed, fieldoffset) (PRVM_EDICTFIELDVALUE(ed, fieldoffset)->function)
215#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)))
216#define PRVM_GLOBALFIELDFLOAT(fieldoffset) (PRVM_GLOBALFIELDVALUE(fieldoffset)->_float)
217#define PRVM_GLOBALFIELDVECTOR(fieldoffset) (PRVM_GLOBALFIELDVALUE(fieldoffset)->vector)
218#define PRVM_GLOBALFIELDSTRING(fieldoffset) (PRVM_GLOBALFIELDVALUE(fieldoffset)->string)
219#define PRVM_GLOBALFIELDEDICT(fieldoffset) (PRVM_GLOBALFIELDVALUE(fieldoffset)->edict)
220#define PRVM_GLOBALFIELDFUNCTION(fieldoffset) (PRVM_GLOBALFIELDVALUE(fieldoffset)->function)
222#define PRVM_EDICTFIELDVALUE(ed, fieldoffset) ((prvm_eval_t *)(ed->fields.fp + fieldoffset))
223#define PRVM_EDICTFIELDFLOAT(ed, fieldoffset) (((prvm_eval_t *)(ed->fields.fp + fieldoffset))->_float)
224#define PRVM_EDICTFIELDVECTOR(ed, fieldoffset) (((prvm_eval_t *)(ed->fields.fp + fieldoffset))->vector)
225#define PRVM_EDICTFIELDSTRING(ed, fieldoffset) (((prvm_eval_t *)(ed->fields.fp + fieldoffset))->string)
226#define PRVM_EDICTFIELDEDICT(ed, fieldoffset) (((prvm_eval_t *)(ed->fields.fp + fieldoffset))->edict)
227#define PRVM_EDICTFIELDFUNCTION(ed, fieldoffset) (((prvm_eval_t *)(ed->fields.fp + fieldoffset))->function)
228#define PRVM_GLOBALFIELDVALUE(fieldoffset) ((prvm_eval_t *)(prog->globals.fp + fieldoffset))
229#define PRVM_GLOBALFIELDFLOAT(fieldoffset) (((prvm_eval_t *)(prog->globals.fp + fieldoffset))->_float)
230#define PRVM_GLOBALFIELDVECTOR(fieldoffset) (((prvm_eval_t *)(prog->globals.fp + fieldoffset))->vector)
231#define PRVM_GLOBALFIELDSTRING(fieldoffset) (((prvm_eval_t *)(prog->globals.fp + fieldoffset))->string)
232#define PRVM_GLOBALFIELDEDICT(fieldoffset) (((prvm_eval_t *)(prog->globals.fp + fieldoffset))->edict)
233#define PRVM_GLOBALFIELDFUNCTION(fieldoffset) (((prvm_eval_t *)(prog->globals.fp + fieldoffset))->function)
238#define PRVM_OP_STATE 1
239#define PRVM_CSQC_SIMPLE 2
242#define PRVM_MAX_STACK_DEPTH 128
243#define PRVM_LOCALSTACK_SIZE 2048
245#define PRVM_MAX_OPENFILES 16
246#define PRVM_MAX_OPENSEARCHES 8
248#define PRVM_MAX_STACK_DEPTH 1024
249#define PRVM_LOCALSTACK_SIZE 16384
251#define PRVM_MAX_OPENFILES 256
252#define PRVM_MAX_OPENSEARCHES 128
259typedef struct prvm_prog_fieldoffsets_s
261#define PRVM_DECLARE_serverglobalfloat(x)
262#define PRVM_DECLARE_serverglobalvector(x)
263#define PRVM_DECLARE_serverglobalstring(x)
264#define PRVM_DECLARE_serverglobaledict(x)
265#define PRVM_DECLARE_serverglobalfunction(x)
266#define PRVM_DECLARE_clientglobalfloat(x)
267#define PRVM_DECLARE_clientglobalvector(x)
268#define PRVM_DECLARE_clientglobalstring(x)
269#define PRVM_DECLARE_clientglobaledict(x)
270#define PRVM_DECLARE_clientglobalfunction(x)
271#define PRVM_DECLARE_menuglobalfloat(x)
272#define PRVM_DECLARE_menuglobalvector(x)
273#define PRVM_DECLARE_menuglobalstring(x)
274#define PRVM_DECLARE_menuglobaledict(x)
275#define PRVM_DECLARE_menuglobalfunction(x)
276#define PRVM_DECLARE_serverfieldfloat(x)
277#define PRVM_DECLARE_serverfieldvector(x)
278#define PRVM_DECLARE_serverfieldstring(x)
279#define PRVM_DECLARE_serverfieldedict(x)
280#define PRVM_DECLARE_serverfieldfunction(x)
281#define PRVM_DECLARE_clientfieldfloat(x)
282#define PRVM_DECLARE_clientfieldvector(x)
283#define PRVM_DECLARE_clientfieldstring(x)
284#define PRVM_DECLARE_clientfieldedict(x)
285#define PRVM_DECLARE_clientfieldfunction(x)
286#define PRVM_DECLARE_menufieldfloat(x)
287#define PRVM_DECLARE_menufieldvector(x)
288#define PRVM_DECLARE_menufieldstring(x)
289#define PRVM_DECLARE_menufieldedict(x)
290#define PRVM_DECLARE_menufieldfunction(x)
291#define PRVM_DECLARE_serverfunction(x)
292#define PRVM_DECLARE_clientfunction(x)
293#define PRVM_DECLARE_menufunction(x)
294#define PRVM_DECLARE_field(x) int x;
295#define PRVM_DECLARE_global(x)
296#define PRVM_DECLARE_function(x)
298#undef PRVM_DECLARE_serverglobalfloat
299#undef PRVM_DECLARE_serverglobalvector
300#undef PRVM_DECLARE_serverglobalstring
301#undef PRVM_DECLARE_serverglobaledict
302#undef PRVM_DECLARE_serverglobalfunction
303#undef PRVM_DECLARE_clientglobalfloat
304#undef PRVM_DECLARE_clientglobalvector
305#undef PRVM_DECLARE_clientglobalstring
306#undef PRVM_DECLARE_clientglobaledict
307#undef PRVM_DECLARE_clientglobalfunction
308#undef PRVM_DECLARE_menuglobalfloat
309#undef PRVM_DECLARE_menuglobalvector
310#undef PRVM_DECLARE_menuglobalstring
311#undef PRVM_DECLARE_menuglobaledict
312#undef PRVM_DECLARE_menuglobalfunction
313#undef PRVM_DECLARE_serverfieldfloat
314#undef PRVM_DECLARE_serverfieldvector
315#undef PRVM_DECLARE_serverfieldstring
316#undef PRVM_DECLARE_serverfieldedict
317#undef PRVM_DECLARE_serverfieldfunction
318#undef PRVM_DECLARE_clientfieldfloat
319#undef PRVM_DECLARE_clientfieldvector
320#undef PRVM_DECLARE_clientfieldstring
321#undef PRVM_DECLARE_clientfieldedict
322#undef PRVM_DECLARE_clientfieldfunction
323#undef PRVM_DECLARE_menufieldfloat
324#undef PRVM_DECLARE_menufieldvector
325#undef PRVM_DECLARE_menufieldstring
326#undef PRVM_DECLARE_menufieldedict
327#undef PRVM_DECLARE_menufieldfunction
328#undef PRVM_DECLARE_serverfunction
329#undef PRVM_DECLARE_clientfunction
330#undef PRVM_DECLARE_menufunction
331#undef PRVM_DECLARE_field
332#undef PRVM_DECLARE_global
333#undef PRVM_DECLARE_function
338typedef struct prvm_prog_globaloffsets_s
340#define PRVM_DECLARE_serverglobalfloat(x)
341#define PRVM_DECLARE_serverglobalvector(x)
342#define PRVM_DECLARE_serverglobalstring(x)
343#define PRVM_DECLARE_serverglobaledict(x)
344#define PRVM_DECLARE_serverglobalfunction(x)
345#define PRVM_DECLARE_clientglobalfloat(x)
346#define PRVM_DECLARE_clientglobalvector(x)
347#define PRVM_DECLARE_clientglobalstring(x)
348#define PRVM_DECLARE_clientglobaledict(x)
349#define PRVM_DECLARE_clientglobalfunction(x)
350#define PRVM_DECLARE_menuglobalfloat(x)
351#define PRVM_DECLARE_menuglobalvector(x)
352#define PRVM_DECLARE_menuglobalstring(x)
353#define PRVM_DECLARE_menuglobaledict(x)
354#define PRVM_DECLARE_menuglobalfunction(x)
355#define PRVM_DECLARE_serverfieldfloat(x)
356#define PRVM_DECLARE_serverfieldvector(x)
357#define PRVM_DECLARE_serverfieldstring(x)
358#define PRVM_DECLARE_serverfieldedict(x)
359#define PRVM_DECLARE_serverfieldfunction(x)
360#define PRVM_DECLARE_clientfieldfloat(x)
361#define PRVM_DECLARE_clientfieldvector(x)
362#define PRVM_DECLARE_clientfieldstring(x)
363#define PRVM_DECLARE_clientfieldedict(x)
364#define PRVM_DECLARE_clientfieldfunction(x)
365#define PRVM_DECLARE_menufieldfloat(x)
366#define PRVM_DECLARE_menufieldvector(x)
367#define PRVM_DECLARE_menufieldstring(x)
368#define PRVM_DECLARE_menufieldedict(x)
369#define PRVM_DECLARE_menufieldfunction(x)
370#define PRVM_DECLARE_serverfunction(x)
371#define PRVM_DECLARE_clientfunction(x)
372#define PRVM_DECLARE_menufunction(x)
373#define PRVM_DECLARE_field(x)
374#define PRVM_DECLARE_global(x) int x;
375#define PRVM_DECLARE_function(x)
377#undef PRVM_DECLARE_serverglobalfloat
378#undef PRVM_DECLARE_serverglobalvector
379#undef PRVM_DECLARE_serverglobalstring
380#undef PRVM_DECLARE_serverglobaledict
381#undef PRVM_DECLARE_serverglobalfunction
382#undef PRVM_DECLARE_clientglobalfloat
383#undef PRVM_DECLARE_clientglobalvector
384#undef PRVM_DECLARE_clientglobalstring
385#undef PRVM_DECLARE_clientglobaledict
386#undef PRVM_DECLARE_clientglobalfunction
387#undef PRVM_DECLARE_menuglobalfloat
388#undef PRVM_DECLARE_menuglobalvector
389#undef PRVM_DECLARE_menuglobalstring
390#undef PRVM_DECLARE_menuglobaledict
391#undef PRVM_DECLARE_menuglobalfunction
392#undef PRVM_DECLARE_serverfieldfloat
393#undef PRVM_DECLARE_serverfieldvector
394#undef PRVM_DECLARE_serverfieldstring
395#undef PRVM_DECLARE_serverfieldedict
396#undef PRVM_DECLARE_serverfieldfunction
397#undef PRVM_DECLARE_clientfieldfloat
398#undef PRVM_DECLARE_clientfieldvector
399#undef PRVM_DECLARE_clientfieldstring
400#undef PRVM_DECLARE_clientfieldedict
401#undef PRVM_DECLARE_clientfieldfunction
402#undef PRVM_DECLARE_menufieldfloat
403#undef PRVM_DECLARE_menufieldvector
404#undef PRVM_DECLARE_menufieldstring
405#undef PRVM_DECLARE_menufieldedict
406#undef PRVM_DECLARE_menufieldfunction
407#undef PRVM_DECLARE_serverfunction
408#undef PRVM_DECLARE_clientfunction
409#undef PRVM_DECLARE_menufunction
410#undef PRVM_DECLARE_field
411#undef PRVM_DECLARE_global
412#undef PRVM_DECLARE_function
417typedef struct prvm_prog_funcoffsets_s
419#define PRVM_DECLARE_serverglobalfloat(x)
420#define PRVM_DECLARE_serverglobalvector(x)
421#define PRVM_DECLARE_serverglobalstring(x)
422#define PRVM_DECLARE_serverglobaledict(x)
423#define PRVM_DECLARE_serverglobalfunction(x)
424#define PRVM_DECLARE_clientglobalfloat(x)
425#define PRVM_DECLARE_clientglobalvector(x)
426#define PRVM_DECLARE_clientglobalstring(x)
427#define PRVM_DECLARE_clientglobaledict(x)
428#define PRVM_DECLARE_clientglobalfunction(x)
429#define PRVM_DECLARE_menuglobalfloat(x)
430#define PRVM_DECLARE_menuglobalvector(x)
431#define PRVM_DECLARE_menuglobalstring(x)
432#define PRVM_DECLARE_menuglobaledict(x)
433#define PRVM_DECLARE_menuglobalfunction(x)
434#define PRVM_DECLARE_serverfieldfloat(x)
435#define PRVM_DECLARE_serverfieldvector(x)
436#define PRVM_DECLARE_serverfieldstring(x)
437#define PRVM_DECLARE_serverfieldedict(x)
438#define PRVM_DECLARE_serverfieldfunction(x)
439#define PRVM_DECLARE_clientfieldfloat(x)
440#define PRVM_DECLARE_clientfieldvector(x)
441#define PRVM_DECLARE_clientfieldstring(x)
442#define PRVM_DECLARE_clientfieldedict(x)
443#define PRVM_DECLARE_clientfieldfunction(x)
444#define PRVM_DECLARE_menufieldfloat(x)
445#define PRVM_DECLARE_menufieldvector(x)
446#define PRVM_DECLARE_menufieldstring(x)
447#define PRVM_DECLARE_menufieldedict(x)
448#define PRVM_DECLARE_menufieldfunction(x)
449#define PRVM_DECLARE_serverfunction(x)
450#define PRVM_DECLARE_clientfunction(x)
451#define PRVM_DECLARE_menufunction(x)
452#define PRVM_DECLARE_field(x)
453#define PRVM_DECLARE_global(x)
454#define PRVM_DECLARE_function(x) int x;
456#undef PRVM_DECLARE_serverglobalfloat
457#undef PRVM_DECLARE_serverglobalvector
458#undef PRVM_DECLARE_serverglobalstring
459#undef PRVM_DECLARE_serverglobaledict
460#undef PRVM_DECLARE_serverglobalfunction
461#undef PRVM_DECLARE_clientglobalfloat
462#undef PRVM_DECLARE_clientglobalvector
463#undef PRVM_DECLARE_clientglobalstring
464#undef PRVM_DECLARE_clientglobaledict
465#undef PRVM_DECLARE_clientglobalfunction
466#undef PRVM_DECLARE_menuglobalfloat
467#undef PRVM_DECLARE_menuglobalvector
468#undef PRVM_DECLARE_menuglobalstring
469#undef PRVM_DECLARE_menuglobaledict
470#undef PRVM_DECLARE_menuglobalfunction
471#undef PRVM_DECLARE_serverfieldfloat
472#undef PRVM_DECLARE_serverfieldvector
473#undef PRVM_DECLARE_serverfieldstring
474#undef PRVM_DECLARE_serverfieldedict
475#undef PRVM_DECLARE_serverfieldfunction
476#undef PRVM_DECLARE_clientfieldfloat
477#undef PRVM_DECLARE_clientfieldvector
478#undef PRVM_DECLARE_clientfieldstring
479#undef PRVM_DECLARE_clientfieldedict
480#undef PRVM_DECLARE_clientfieldfunction
481#undef PRVM_DECLARE_menufieldfloat
482#undef PRVM_DECLARE_menufieldvector
483#undef PRVM_DECLARE_menufieldstring
484#undef PRVM_DECLARE_menufieldedict
485#undef PRVM_DECLARE_menufieldfunction
486#undef PRVM_DECLARE_serverfunction
487#undef PRVM_DECLARE_clientfunction
488#undef PRVM_DECLARE_menufunction
489#undef PRVM_DECLARE_field
490#undef PRVM_DECLARE_global
491#undef PRVM_DECLARE_function
496#define STRINGBUFFER_SAVED 1
497#define STRINGBUFFER_QCFLAGS 1
498#define STRINGBUFFER_TEMP 128
499typedef struct prvm_stringbuffer_s
510#define KNOWNSTRINGFLAG_ENGINE 1
511#define KNOWNSTRINGFLAG_GCMARK 2
512#define KNOWNSTRINGFLAG_GCPRUNE 4
514typedef enum prvm_prog_garbagecollection_state_stage_e
524typedef struct prvm_prog_garbagecollection_state_s
536typedef struct prvm_prog_s
734 void (*begin_increase_edicts)(
struct prvm_prog_s *prog);
735 void (*end_increase_edicts)(
struct prvm_prog_s *prog);
740 void (*count_edicts)(
struct prvm_prog_s *prog);
744 void (*init_cmd)(
struct prvm_prog_s *prog);
745 void (*reset_cmd)(
struct prvm_prog_s *prog);
749 void (*ExecuteProgram)(struct prvm_prog_s *prog,
func_t fnum, const
char *errormessage);
752typedef enum prvm_progindex_e
764#define PRVM_GetProg(n) (&prvm_prog_list[(n)])
765#define PRVM_ProgLoaded(n) (PRVM_GetProg(n)->loaded)
766#define SVVM_prog (&prvm_prog_list[PRVM_PROG_SERVER])
767#define CLVM_prog (&prvm_prog_list[PRVM_PROG_CLIENT])
769#define MVM_prog (&prvm_prog_list[PRVM_PROG_MENU])
807void MVM_ExecuteProgram (
prvm_prog_t *prog,
func_t fnum,
const char *errormessage);
810#define SVVM_ExecuteProgram PRVM_ExecuteProgram
811#define CLVM_ExecuteProgram PRVM_ExecuteProgram
813#define MVM_ExecuteProgram PRVM_ExecuteProgram
815void PRVM_ExecuteProgram (
prvm_prog_t *prog,
func_t fnum,
const char *errormessage);
818#define PRVM_Alloc(buffersize) Mem_Alloc(prog->progs_mempool, buffersize)
819#define PRVM_Free(buffer) Mem_Free(buffer)
841#define PRVM_ED_FindFieldOffset_FromStruct(st, field) prog->fieldoffsets . field = ((int *)(&((st *)NULL)-> field ) - ((int *)NULL))
842#define PRVM_ED_FindGlobalOffset_FromStruct(st, field) prog->globaloffsets . field = ((int *)(&((st *)NULL)-> field ) - ((int *)NULL))
866#define PRVM_EDICT(n) (((unsigned)(n) < (unsigned int)prog->max_edicts) ? (unsigned int)(n) : PRVM_EDICT_NUM_ERROR(prog, (unsigned int)(n), __FILE__, __LINE__))
867#define PRVM_EDICT_NUM(n) (prog->edicts + PRVM_EDICT(n))
870#define PRVM_NUM_FOR_EDICT(e) ((int)((prvm_edict_t *)(e) - prog->edicts))
873#define PRVM_NEXT_EDICT(e) ((e) + 1)
875#define PRVM_EDICT_TO_PROG(e) (PRVM_NUM_FOR_EDICT(e))
877#define PRVM_PROG_TO_EDICT(n) (PRVM_EDICT_NUM(n))
882#define PRVM_G_FLOAT(o) (prog->globals.fp[o])
883#define PRVM_G_INT(o) (prog->globals.ip[o])
884#define PRVM_G_EDICT(o) (PRVM_PROG_TO_EDICT(prog->globals.ip[o]))
885#define PRVM_G_EDICTNUM(o) PRVM_NUM_FOR_EDICT(PRVM_G_EDICT(o))
886#define PRVM_G_VECTOR(o) (&prog->globals.fp[o])
887#define PRVM_G_STRING(o) (PRVM_GetString(prog, prog->globals.ip[o]))
891#define PRVM_E_FLOAT(e,o) (e->fields.fp[o])
892#define PRVM_E_INT(e,o) (e->fields.ip[o])
894#define PRVM_E_STRING(e,o) (PRVM_GetString(prog, e->fields.ip[o]))
void CLVM_init_cmd(prvm_prog_t *prog)
prvm_builtin_t vm_cl_builtins[]
void CLVM_reset_cmd(prvm_prog_t *prog)
const int vm_cl_numbuiltins
GLint GLint GLint GLsizei GLsizei GLenum format
GLsizeiptr const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
const int vm_m_numbuiltins
prvm_builtin_t vm_m_builtins[]
void MVM_init_cmd(prvm_prog_t *prog)
void MVM_reset_cmd(prvm_prog_t *prog)
const char * vm_m_extensions[]
void PRVM_Profile_f(struct cmd_state_s *cmd)
void PRVM_ED_LoadFromFile(prvm_prog_t *prog, const char *data)
void PRVM_ED_ClearEdict(prvm_prog_t *prog, prvm_edict_t *e)
int PRVM_SetTempString(prvm_prog_t *prog, const char *s, size_t slen)
Takes an strlen (not a buffer size).
void PRVM_ED_CallPostspawnFunction(prvm_prog_t *prog, prvm_edict_t *ent)
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_Cmd_Init(prvm_prog_t *prog)
void VM_Warning(prvm_prog_t *prog, const char *fmt,...) DP_FUNC_PRINTF(2)
void PRVM_Init_Exec(prvm_prog_t *prog)
char * PRVM_UglyValueString(prvm_prog_t *prog, etype_t type, prvm_eval_t *val, char *line, size_t linelength)
mdef_t * PRVM_ED_FindGlobal(prvm_prog_t *prog, const char *name)
void PRVM_Prog_Load(prvm_prog_t *prog, const char *filename, unsigned char *data, fs_offset_t size, void CheckRequiredFuncs(prvm_prog_t *prog, const char *filename), int numrequiredfields, prvm_required_field_t *required_field, int numrequiredglobals, prvm_required_field_t *required_global)
void VM_UpdateEdictSkeleton(prvm_prog_t *prog, prvm_edict_t *ed, const struct model_s *edmodel, const struct frameblend_s *frameblend)
void PRVM_ChildProfile_f(struct cmd_state_s *cmd)
void PRVM_ED_Write(prvm_prog_t *prog, struct qfile_s *f, prvm_edict_t *ed)
int PRVM_ED_FindGlobalOffset(prvm_prog_t *prog, const char *name)
#define PRVM_MAX_OPENFILES
void PRVM_Prog_Init(prvm_prog_t *prog, struct cmd_state_s *cmd)
Initializing a vm: Call InitProg with the num Set up the fields marked with [INIT] in the prog struct...
mfunction_t * PRVM_ED_FindFunction(prvm_prog_t *prog, const char *name)
const char * PRVM_ChangeEngineString(prvm_prog_t *prog, int i, const char *s)
int PRVM_SetEngineString(prvm_prog_t *prog, const char *s)
void VM_Cmd_Reset(prvm_prog_t *prog)
const char * vm_sv_extensions[]
client also uses this
void PRVM_ED_PrintNum(prvm_prog_t *prog, int ent, const char *wildcard_fieldname)
void PRVM_FreeString(prvm_prog_t *prog, int num)
qbool PRVM_ED_ParseEpair(prvm_prog_t *prog, prvm_edict_t *ent, mdef_t *key, const char *s, qbool parsebackslash)
prvm_builtin_t vm_sv_builtins[]
const char * PRVM_ED_ParseEdict(prvm_prog_t *prog, const char *data, prvm_edict_t *ent, qbool saveload)
prvm_prog_t * PRVM_ProgFromString(const char *str)
int PRVM_AllocString(prvm_prog_t *prog, size_t bufferlength, char **pointer)
unsigned int PRVM_EDICT_NUM_ERROR(prvm_prog_t *prog, unsigned int n, const char *filename, int fileline)
void(* prvm_builtin_t)(struct prvm_prog_s *prog)
const char * PRVM_GetString(prvm_prog_t *prog, int num)
void PRVM_ED_WriteGlobals(prvm_prog_t *prog, struct qfile_s *f)
prvm_eval_t * PRVM_ED_FindGlobalEval(prvm_prog_t *prog, const char *name)
void PRVM_Prog_Reset(prvm_prog_t *prog)
#define PRVM_MAX_STACK_DEPTH
void VM_GenerateFrameGroupBlend(prvm_prog_t *prog, struct framegroupblend_s *framegroupblend, const prvm_edict_t *ed)
void SVVM_ExecuteProgram(prvm_prog_t *prog, func_t fnum, const char *errormessage)
int prvm_type_size[8]
for consistency : I think a goal of this sub-project is to make the new vm mostly independent from th...
void PRVM_Breakpoint(prvm_prog_t *prog, int stack_index, const char *text)
void PRVM_GarbageCollection(prvm_prog_t *prog)
prvm_prog_t * PRVM_FriendlyProgFromString(const char *str)
for console commands (prints error if name unknown and returns NULL, prints error if prog not loaded ...
void SVVM_reset_cmd(prvm_prog_t *prog)
void PRVM_ED_ParseGlobals(prvm_prog_t *prog, const char *data)
void PRVM_CallProfile_f(struct cmd_state_s *cmd)
void VM_RemoveEdictSkeleton(prvm_prog_t *prog, prvm_edict_t *ed)
void PRVM_MEM_IncreaseEdicts(prvm_prog_t *prog)
void PRVM_PrintFunction_f(struct cmd_state_s *cmd)
mdef_t * PRVM_ED_FindField(prvm_prog_t *prog, const char *name)
prvm_prog_garbagecollection_state_stage_t
@ PRVM_GC_KNOWNSTRINGS_SWEEP
void SVVM_init_cmd(prvm_prog_t *prog)
void PRVM_ExplicitCoverageEvent(prvm_prog_t *prog, mfunction_t *func, int statement)
const int vm_sv_numbuiltins
int PRVM_ED_FindFieldOffset(prvm_prog_t *prog, const char *name)
void CLVM_ExecuteProgram(prvm_prog_t *prog, func_t fnum, const char *errormessage)
char * PRVM_GlobalString(prvm_prog_t *prog, int ofs, char *line, size_t linelength)
#define PRVM_MAX_OPENSEARCHES
#define PRVM_LOCALSTACK_SIZE
void PRVM_Profile(prvm_prog_t *prog, int maxfunctions, double mintime, int sortby)
void PRVM_PrintFunctionStatements(prvm_prog_t *prog, const char *name)
qbool PRVM_ED_CallSpawnFunction(prvm_prog_t *prog, prvm_edict_t *ent, const char *data, const char *start)
char * PRVM_GlobalStringNoContents(prvm_prog_t *prog, int ofs, char *line, size_t linelength)
void VM_FrameBlendFromFrameGroupBlend(struct frameblend_s *frameblend, const struct framegroupblend_s *framegroupblend, const struct model_s *model, double curtime)
void PRVM_ED_Free(prvm_prog_t *prog, prvm_edict_t *ed)
void PRVM_ED_PrintEdicts_f(struct cmd_state_s *cmd)
void PRVM_ED_Print(prvm_prog_t *prog, prvm_edict_t *ed, const char *wildcard_fieldname)
mdef_t * PRVM_ED_FieldAtOfs(prvm_prog_t *prog, unsigned int ofs)
void PRVM_StackTrace(prvm_prog_t *prog)
void PRVM_PrintState(prvm_prog_t *prog, int stack_index)
void PRVM_ED_CallPrespawnFunction(prvm_prog_t *prog, prvm_edict_t *ent)
prvm_eval_t prvm_badvalue
func_t PRVM_ED_FindFunctionOffset(prvm_prog_t *prog, const char *name)
void PRVM_ShortStackTrace(prvm_prog_t *prog, char *buf, size_t bufsize)
const char * PRVM_AllocationOrigin(prvm_prog_t *prog)
prvm_prog_t prvm_prog_list[PRVM_PROG_MAX]
prvm_edict_t * PRVM_ED_Alloc(prvm_prog_t *prog)
qbool PRVM_ED_CanAlloc(prvm_prog_t *prog, prvm_edict_t *e)
#define MAX_EDICTS
max number of objects in game world at once (32768 protocol limit)
#define DP_FUNC_PRINTF(n)
#define MAX_QPATH
max length of a quake game pathname
int mark
mark for the leak detector
const char * allocation_origin
place in the code where it was allocated (for the leak detector)
qbool free
true if this edict is unused
double freetime
sv.time when the object was freed (to prevent early reuse which could mess up client interpolation or...
struct edict_engineprivate_s * server
FIXME: this server pointer really means world, not server (it is used by both server qc and client qc...
prvm_edict_private_t * required
int knownstrings_sweep_progress
int globals_mark_progress
int fields_mark_progress_entity
const char * statestring
printed together with backtraces
prvm_eval_t watch_global_value
int * statement_linenums
NULL if not available.
int entityfields
number of vec_t fields in progs (some variables are 3)
struct animatemodel_cache * animatemodel_cache
int entityfieldsarea
LadyHavoc: equal to max_edicts * entityfields (for bounds checking)
prvm_builtin_t * builtins
qbool loaded
used to indicate whether a prog is loaded
prvm_prog_funcoffsets_t funcoffsets
unsigned char * knownstrings_flags
mdef_t * self
if self != 0 then there is a global self
int edictprivate_size
size of the engine private struct
const char * name
name of the prog, e.g. "Server", "Client" or "Menu" (used for text output)
const char ** knownstrings
int num_edicts
copies of some vars that were former read from sv
prvm_prog_fieldoffsets_t fieldoffsets
double inittime
system time when QC initialization code finished (any entity created before is not a leak)
int limit_edicts
used instead of the constant MAX_EDICTS
qbool allowworldwrites
allow writing to world entity fields, this is set by server init and cleared before first server fram...
prvm_prog_globaloffsets_t globaloffsets
unsigned flag
flag - used to store general flags like PRVM_GE_SELF, etc.
double * explicit_profile
only incremented if prvm_statementprofiling is on
struct model_s * polygonbegin_model
this tracks the last polygonbegin's choice of CL_Mesh_CSQC or CL_Mesh_UI for this polygon
int polygonbegin_drawflags
float * polygonbegin_vertexdata
double * statement_profile
only incremented if prvm_statementprofiling is on
const char *** stringshash
mempool_t * progs_mempool
all memory allocations related to this vm_prog (code, edicts, strings)
int polygonbegin_maxvertices
int polygonbegin_numvertices
qbool polygonbegin_guess2d
indicates if polygonbegin should be interpreted as 2d (clearscene sets this to false,...
etype_t watch_global_type
memexpandablearray_t stringbuffersarray
struct cmd_state_s * console_cmd
points to the relevant console command interpreter for this vm (cmd_local or &cmd_server),...
int max_edicts
number of edicts for which space has been (should be) allocated
void * po
translation buffer (only needs to be freed on unloading progs, type is private to prvm_edict....
mstatement_t * statements
const char ** knownstrings_origin
sizebuf_t tempstringsbuf
buffer for storing all tempstrings created during one invocation of ExecuteProgram
int firstfreeknownstring
this is updated whenever a string is removed or added (simple optimization of the free string search)
prvm_prog_garbagecollection_state_t gc
garbage collection status
int numexplicitcoveragestatements
prvm_eval_t watch_edictfield_value
double profiletime
system time when last PRVM_CallProfile was called (or PRVM_Prog_Load initially)
const char ** extensionstring
int * statement_columnnums
NULL if not available.
double starttime
system time when PRVM_Prog_Load was called
int reserved_edicts
number of reserved edicts (allocated from 1)
double builtinsprofile_acc