DarkPlaces
Game engine based on the Quake 1 engine by id Software, developed by LadyHavoc
 
prvm_cmds.h File Reference
#include "quakedef.h"
#include "progdefs.h"
#include "progsvm.h"
#include "clprogdefs.h"
#include "mprogdefs.h"
#include "cl_video.h"
+ Include dependency graph for prvm_cmds.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define VM_RETURN_EDICT(e)
 
#define VM_SAFEPARMCOUNT(p, f)
 
#define VM_SAFEPARMCOUNTRANGE(p1, p2, f)
 
#define VM_TEMPSTRING_MAXSIZE   MAX_INPUTLINE
 

Functions

void BufStr_Del (prvm_prog_t *prog, prvm_stringbuffer_t *stringbuffer)
 
prvm_stringbuffer_tBufStr_FindCreateReplace (prvm_prog_t *prog, int bufindex, unsigned flags, const char *format)
 
void BufStr_Flush (prvm_prog_t *prog)
 
void BufStr_Set (prvm_prog_t *prog, prvm_stringbuffer_t *stringbuffer, int strindex, const char *str)
 
qbool PRVM_ConsoleCommand (prvm_prog_t *prog, const char *text, size_t textlen, int *func, qbool preserve_self, int curself, double ptime, const char *error_message)
 
void VM_acos (prvm_prog_t *prog)
 
void VM_altstr_count (prvm_prog_t *prog)
 
void VM_altstr_get (prvm_prog_t *prog)
 
void VM_altstr_ins (prvm_prog_t *prog)
 
void VM_altstr_prepare (prvm_prog_t *prog)
 
void VM_altstr_set (prvm_prog_t *prog)
 
void VM_argv (prvm_prog_t *prog)
 
void VM_argv_end_index (prvm_prog_t *prog)
 
void VM_argv_start_index (prvm_prog_t *prog)
 
void VM_asin (prvm_prog_t *prog)
 
void VM_atan (prvm_prog_t *prog)
 
void VM_atan2 (prvm_prog_t *prog)
 
void VM_bitshift (prvm_prog_t *prog)
 
void VM_bound (prvm_prog_t *prog)
 
void VM_bprint (prvm_prog_t *prog)
 
void VM_break (prvm_prog_t *prog)
 
void VM_buf_copy (prvm_prog_t *prog)
 
void VM_buf_create (prvm_prog_t *prog)
 
void VM_buf_cvarlist (prvm_prog_t *prog)
 
void VM_buf_del (prvm_prog_t *prog)
 
void VM_buf_getsize (prvm_prog_t *prog)
 
void VM_buf_implode (prvm_prog_t *prog)
 
void VM_buf_loadfile (prvm_prog_t *prog)
 
void VM_buf_sort (prvm_prog_t *prog)
 
void VM_buf_writefile (prvm_prog_t *prog)
 
void VM_bufstr_add (prvm_prog_t *prog)
 
void VM_bufstr_find (prvm_prog_t *prog)
 
void VM_bufstr_free (prvm_prog_t *prog)
 
void VM_bufstr_get (prvm_prog_t *prog)
 
void VM_bufstr_set (prvm_prog_t *prog)
 
void VM_callfunction (prvm_prog_t *prog)
 
void VM_ceil (prvm_prog_t *prog)
 
void VM_centerprint (prvm_prog_t *prog)
 
void VM_changelevel (prvm_prog_t *prog)
 
void VM_changepitch (prvm_prog_t *prog)
 
void VM_changeyaw (prvm_prog_t *prog)
 
void VM_CheckEmptyString (prvm_prog_t *prog, const char *s)
 
void VM_checkextension (prvm_prog_t *prog)
 
void VM_chr (prvm_prog_t *prog)
 
void VM_chr2str (prvm_prog_t *prog)
 
void VM_cin_close (prvm_prog_t *prog)
 
void VM_cin_getstate (prvm_prog_t *prog)
 
void VM_cin_open (prvm_prog_t *prog)
 
void VM_cin_restart (prvm_prog_t *prog)
 
void VM_cin_setstate (prvm_prog_t *prog)
 
void VM_CL_getextresponse (prvm_prog_t *prog)
 
void VM_CL_isdemo (prvm_prog_t *prog)
 
void VM_CL_videoplaying (prvm_prog_t *prog)
 
void VM_ClearTraceGlobals (prvm_prog_t *prog)
 
void VM_clientcount (prvm_prog_t *prog)
 
void VM_clientstate (prvm_prog_t *prog)
 
void VM_coredump (prvm_prog_t *prog)
 
void VM_cos (prvm_prog_t *prog)
 
void VM_coverage (prvm_prog_t *prog)
 
void VM_crash (prvm_prog_t *prog)
 
void VM_crc16 (prvm_prog_t *prog)
 
void VM_cvar (prvm_prog_t *prog)
 
void VM_cvar_defstring (prvm_prog_t *prog)
 
void VM_cvar_description (prvm_prog_t *prog)
 
void VM_cvar_set (prvm_prog_t *prog)
 
void VM_cvar_string (prvm_prog_t *prog)
 
void VM_cvar_type (prvm_prog_t *prog)
 
void VM_digest_hex (prvm_prog_t *prog)
 
void VM_dprint (prvm_prog_t *prog)
 
void VM_drawcharacter (prvm_prog_t *prog)
 
void VM_drawcolorcodedstring (prvm_prog_t *prog)
 
void VM_drawfill (prvm_prog_t *prog)
 
void VM_drawline (prvm_prog_t *prog)
 
void VM_drawpic (prvm_prog_t *prog)
 
void VM_drawresetcliparea (prvm_prog_t *prog)
 
void VM_drawrotpic (prvm_prog_t *prog)
 
void VM_drawsetcliparea (prvm_prog_t *prog)
 
void VM_drawstring (prvm_prog_t *prog)
 
void VM_drawsubpic (prvm_prog_t *prog)
 
void VM_entityfieldname (prvm_prog_t *prog)
 
void VM_entityfieldtype (prvm_prog_t *prog)
 
void VM_eprint (prvm_prog_t *prog)
 
void VM_error (prvm_prog_t *prog)
 
void VM_etof (prvm_prog_t *prog)
 
void VM_etos (prvm_prog_t *prog)
 
void VM_fabs (prvm_prog_t *prog)
 
void VM_fclose (prvm_prog_t *prog)
 
void VM_fgets (prvm_prog_t *prog)
 
void VM_Files_CloseAll (prvm_prog_t *prog)
 
void VM_Files_Init (prvm_prog_t *prog)
 
void VM_find (prvm_prog_t *prog)
 
void VM_findchain (prvm_prog_t *prog)
 
void VM_findchainflags (prvm_prog_t *prog)
 
void VM_findchainfloat (prvm_prog_t *prog)
 
void VM_findflags (prvm_prog_t *prog)
 
void VM_findfloat (prvm_prog_t *prog)
 
void VM_findfont (prvm_prog_t *prog)
 
void VM_findkeysforcommand (prvm_prog_t *prog)
 
void VM_floor (prvm_prog_t *prog)
 
void VM_fopen (prvm_prog_t *prog)
 
void VM_fputs (prvm_prog_t *prog)
 
void VM_freepic (prvm_prog_t *prog)
 
void VM_ftoe (prvm_prog_t *prog)
 
void VM_ftos (prvm_prog_t *prog)
 
void VM_gecko_create (prvm_prog_t *prog)
 
void VM_gecko_destroy (prvm_prog_t *prog)
 
void VM_gecko_get_texture_extent (prvm_prog_t *prog)
 
void VM_gecko_keyevent (prvm_prog_t *prog)
 
void VM_gecko_movemouse (prvm_prog_t *prog)
 
void VM_gecko_navigate (prvm_prog_t *prog)
 
void VM_gecko_resize (prvm_prog_t *prog)
 
void VM_getbindmaps (prvm_prog_t *prog)
 
void VM_getentityfieldstring (prvm_prog_t *prog)
 
void VM_getimagesize (prvm_prog_t *prog)
 
void VM_getkeybind (prvm_prog_t *prog)
 
void VM_getmousepos (prvm_prog_t *prog)
 
void VM_getostype (prvm_prog_t *prog)
 
void VM_getsoundtime (prvm_prog_t *prog)
 
void VM_getsurfaceclippedpoint (prvm_prog_t *prog)
 
void VM_getsurfacenearpoint (prvm_prog_t *prog)
 
void VM_getsurfacenormal (prvm_prog_t *prog)
 
void VM_getsurfacenumpoints (prvm_prog_t *prog)
 
void VM_getsurfacenumtriangles (prvm_prog_t *prog)
 
void VM_getsurfacepoint (prvm_prog_t *prog)
 
void VM_getsurfacepointattribute (prvm_prog_t *prog)
 
void VM_getsurfacetexture (prvm_prog_t *prog)
 
void VM_getsurfacetriangle (prvm_prog_t *prog)
 
void VM_gettime (prvm_prog_t *prog)
 
void VM_infoadd (prvm_prog_t *prog)
 
void VM_infoget (prvm_prog_t *prog)
 
void VM_iscachedpic (prvm_prog_t *prog)
 
void VM_isfunction (prvm_prog_t *prog)
 
void VM_isserver (prvm_prog_t *prog)
 
void VM_itof (prvm_prog_t *prog)
 
void VM_keynumtostring (prvm_prog_t *prog)
 
void VM_loadfont (prvm_prog_t *prog)
 
void VM_loadfromdata (prvm_prog_t *prog)
 
void VM_loadfromfile (prvm_prog_t *prog)
 
void VM_localcmd (prvm_prog_t *prog)
 
void VM_localsound (prvm_prog_t *prog)
 
void VM_log (prvm_prog_t *prog)
 
void VM_makevectors (prvm_prog_t *prog)
 
void VM_matchpattern (prvm_prog_t *prog)
 
void VM_max (prvm_prog_t *prog)
 
void VM_min (prvm_prog_t *prog)
 
void VM_modulo (prvm_prog_t *prog)
 
void VM_netaddress_resolve (prvm_prog_t *prog)
 
void VM_nextent (prvm_prog_t *prog)
 
void VM_normalize (prvm_prog_t *prog)
 
void VM_nudgeoutofsolid (prvm_prog_t *prog)
 
void VM_numentityfields (prvm_prog_t *prog)
 
void VM_objerror (prvm_prog_t *prog)
 
void VM_parseentitydata (prvm_prog_t *prog)
 
void VM_physics_addforce (prvm_prog_t *prog)
 
void VM_physics_addtorque (prvm_prog_t *prog)
 
void VM_physics_enable (prvm_prog_t *prog)
 
void VM_pow (prvm_prog_t *prog)
 
void VM_precache_file (prvm_prog_t *prog)
 
void VM_precache_pic (prvm_prog_t *prog)
 
void VM_precache_sound (prvm_prog_t *prog)
 
void VM_print (prvm_prog_t *prog)
 
void VM_putentityfieldstring (prvm_prog_t *prog)
 
void VM_random (prvm_prog_t *prog)
 
void VM_randomvec (prvm_prog_t *prog)
 
void VM_registercvar (prvm_prog_t *prog)
 
void VM_remove (prvm_prog_t *prog)
 
void VM_rint (prvm_prog_t *prog)
 
void VM_search_begin (prvm_prog_t *prog)
 
void VM_search_end (prvm_prog_t *prog)
 
void VM_search_getfilename (prvm_prog_t *prog)
 
void VM_search_getsize (prvm_prog_t *prog)
 
void VM_setbindmaps (prvm_prog_t *prog)
 
void VM_setkeybind (prvm_prog_t *prog)
 
void VM_SetTraceGlobals (prvm_prog_t *prog, const trace_t *trace)
 
void VM_sin (prvm_prog_t *prog)
 
void VM_soundlength (prvm_prog_t *prog)
 
void VM_spawn (prvm_prog_t *prog)
 
void VM_sprint (prvm_prog_t *prog)
 
void VM_sprintf (prvm_prog_t *prog)
 
void VM_sqrt (prvm_prog_t *prog)
 
void VM_stackdump (prvm_prog_t *prog)
 
void VM_stof (prvm_prog_t *prog)
 
void VM_stov (prvm_prog_t *prog)
 
void VM_str2chr (prvm_prog_t *prog)
 
void VM_strcat (prvm_prog_t *prog)
 
void VM_strconv (prvm_prog_t *prog)
 
void VM_strdecolorize (prvm_prog_t *prog)
 
void VM_strftime (prvm_prog_t *prog)
 
void VM_stringtokeynum (prvm_prog_t *prog)
 
void VM_stringwidth (prvm_prog_t *prog)
 
void VM_strireplace (prvm_prog_t *prog)
 
void VM_strlen (prvm_prog_t *prog)
 
void VM_strlennocol (prvm_prog_t *prog)
 
void VM_strncasecmp (prvm_prog_t *prog)
 
void VM_strncmp (prvm_prog_t *prog)
 
void VM_strpad (prvm_prog_t *prog)
 
void VM_strreplace (prvm_prog_t *prog)
 
void VM_strstrofs (prvm_prog_t *prog)
 
void VM_strtolower (prvm_prog_t *prog)
 
void VM_strtoupper (prvm_prog_t *prog)
 
void VM_strunzone (prvm_prog_t *prog)
 
void VM_strzone (prvm_prog_t *prog)
 
void VM_substring (prvm_prog_t *prog)
 
void VM_SV_getextresponse (prvm_prog_t *prog)
 
void VM_tan (prvm_prog_t *prog)
 
void VM_tokenize (prvm_prog_t *prog)
 
void VM_tokenize_console (prvm_prog_t *prog)
 
void VM_tokenizebyseparator (prvm_prog_t *prog)
 
void VM_traceoff (prvm_prog_t *prog)
 
void VM_traceon (prvm_prog_t *prog)
 
void VM_uncolorstring (prvm_prog_t *prog)
 
void VM_uri_escape (prvm_prog_t *prog)
 
void VM_uri_get (prvm_prog_t *prog)
 
void VM_uri_unescape (prvm_prog_t *prog)
 
size_t VM_VarString (prvm_prog_t *prog, int first, char *out, size_t outsize)
 Returns the length of the *out string excluding the \0 terminator.
 
void VM_vectoangles (prvm_prog_t *prog)
 
void VM_vectorvectors (prvm_prog_t *prog)
 
void VM_vectoyaw (prvm_prog_t *prog)
 
void VM_vlen (prvm_prog_t *prog)
 
void VM_vtos (prvm_prog_t *prog)
 
void VM_wasfreed (prvm_prog_t *prog)
 
void VM_whichpack (prvm_prog_t *prog)
 
void VM_writetofile (prvm_prog_t *prog)
 

Macro Definition Documentation

◆ VM_RETURN_EDICT

◆ VM_SAFEPARMCOUNT

#define VM_SAFEPARMCOUNT ( p,
f )
Value:
if(prog->argc != p) prog->error_cmd(#f " wrong parameter count %i (" #p " expected ) !", prog->argc)
float f

Definition at line 207 of file prvm_cmds.h.

Referenced by VM_acos(), VM_altstr_count(), VM_altstr_get(), VM_altstr_ins(), VM_altstr_prepare(), VM_altstr_set(), VM_argv(), VM_argv_end_index(), VM_argv_start_index(), VM_asin(), VM_atan(), VM_atan2(), VM_bitshift(), VM_bound(), VM_buf_copy(), VM_buf_del(), VM_buf_getsize(), VM_buf_implode(), VM_buf_loadfile(), VM_buf_sort(), VM_bufstr_add(), VM_bufstr_free(), VM_bufstr_get(), VM_bufstr_set(), VM_ceil(), VM_changelevel(), VM_changepitch(), VM_checkextension(), VM_chr(), VM_cin_close(), VM_cin_getstate(), VM_cin_open(), VM_cin_restart(), VM_cin_setstate(), VM_CL_ambientsound(), VM_CL_checkbottom(), VM_CL_checkpvs(), VM_CL_copyentity(), VM_CL_effect(), VM_CL_GetEntity(), VM_CL_getextresponse(), VM_CL_getinputstate(), VM_CL_getmousepos(), VM_CL_getplayerkey(), VM_CL_getstatf(), VM_CL_getstats(), VM_CL_gettagindex(), VM_CL_gettaginfo(), VM_CL_isdemo(), VM_CL_lightstyle(), VM_CL_loadcubemap(), VM_CL_makestatic(), VM_CL_makevectors(), VM_CL_modelnameforindex(), VM_CL_particle(), VM_CL_particleeffectnum(), VM_CL_ParticleTheme(), VM_CL_ParticleThemeFree(), VM_CL_pointcontents(), VM_CL_pointsound(), VM_CL_precache_model(), VM_CL_project(), VM_CL_R_AddEntities(), VM_CL_R_AddEntity(), VM_CL_R_ClearScene(), VM_CL_R_PolygonEnd(), VM_CL_R_PolygonVertex(), VM_CL_R_RenderScene(), VM_CL_ReadAngle(), VM_CL_ReadByte(), VM_CL_ReadChar(), VM_CL_ReadCoord(), VM_CL_ReadFloat(), VM_CL_ReadLong(), VM_CL_ReadPicture(), VM_CL_ReadShort(), VM_CL_ReadString(), VM_CL_registercmd(), VM_CL_ResetParticle(), VM_CL_RotateMoves(), VM_CL_serverkey(), VM_CL_setattachment(), VM_CL_setcursormode(), VM_CL_setlistener(), VM_CL_setmodel(), VM_CL_setmodelindex(), VM_CL_setorigin(), VM_CL_setpause(), VM_CL_setsensitivityscale(), VM_CL_setsize(), VM_CL_te_beam(), VM_CL_te_blood(), VM_CL_te_bloodshower(), VM_CL_te_customflash(), VM_CL_te_explosion(), VM_CL_te_explosion2(), VM_CL_te_explosionquad(), VM_CL_te_explosionrgb(), VM_CL_te_flamejet(), VM_CL_te_gunshot(), VM_CL_te_gunshotquad(), VM_CL_te_knightspike(), VM_CL_te_lavasplash(), VM_CL_te_lightning1(), VM_CL_te_lightning2(), VM_CL_te_lightning3(), VM_CL_te_particlecube(), VM_CL_te_particlerain(), VM_CL_te_particlesnow(), VM_CL_te_plasmaburn(), VM_CL_te_smallflash(), VM_CL_te_spark(), VM_CL_te_spike(), VM_CL_te_spikequad(), VM_CL_te_superspike(), VM_CL_te_superspikequad(), VM_CL_te_tarexplosion(), VM_CL_te_teleport(), VM_CL_te_wizspike(), VM_CL_tracetoss(), VM_CL_unproject(), VM_CL_V_CalcRefdef(), VM_CL_videoplaying(), VM_clientcount(), VM_clientstate(), VM_coredump(), VM_cos(), VM_coverage(), VM_crash(), VM_drawcharacter(), VM_drawfill(), VM_drawline(), VM_drawresetcliparea(), VM_drawrotpic(), VM_drawsetcliparea(), VM_drawsubpic(), VM_eprint(), VM_etof(), VM_etos(), VM_fabs(), VM_fclose(), VM_fgets(), VM_find(), VM_findflags(), VM_findfloat(), VM_findfont(), VM_floor(), VM_fopen(), VM_fputs(), VM_freepic(), VM_ftoe(), VM_ftos(), VM_getbindmaps(), VM_getimagesize(), VM_getostype(), VM_getsoundtime(), VM_getsurfaceclippedpoint(), VM_getsurfacenearpoint(), VM_getsurfacenormal(), VM_getsurfacenumpoints(), VM_getsurfacenumtriangles(), VM_getsurfacepoint(), VM_getsurfacepointattribute(), VM_getsurfacetexture(), VM_getsurfacetriangle(), VM_infoget(), VM_iscachedpic(), VM_isfunction(), VM_isserver(), VM_itof(), VM_keynumtostring(), VM_loadfromdata(), VM_loadfromfile(), VM_log(), VM_M_addwantedserverlistkey(), VM_M_copyentity(), VM_M_crypto_getencryptlevel(), VM_M_crypto_getidfp(), VM_M_crypto_getidstatus(), VM_M_crypto_getkeyfp(), VM_M_crypto_getmyidfp(), VM_M_crypto_getmyidstatus(), VM_M_crypto_getmykeyfp(), VM_M_getgamedirinfo(), VM_M_getkeydest(), VM_M_getmousepos(), VM_M_getmousetarget(), VM_M_getserverlistindexforkey(), VM_M_getserverlistnumber(), VM_M_getserverliststat(), VM_M_getserverliststring(), VM_M_registercommand(), VM_M_resetserverlistmasks(), VM_M_resortserverlist(), VM_M_setkeydest(), VM_M_setmousetarget(), VM_M_setserverlistmasknumber(), VM_M_setserverlistmaskstring(), VM_M_setserverlistsort(), VM_M_WriteAngle(), VM_M_WriteByte(), VM_M_WriteChar(), VM_M_WriteCoord(), VM_M_WriteEntity(), VM_M_WriteLong(), VM_M_WriteShort(), VM_M_WriteString(), VM_makevectors(), VM_modulo(), VM_nextent(), VM_normalize(), VM_parseentitydata(), VM_physics_addforce(), VM_physics_addtorque(), VM_physics_enable(), VM_pow(), VM_precache_file(), VM_precache_sound(), VM_random(), VM_randomvec(), VM_remove(), VM_rint(), VM_search_end(), VM_search_getfilename(), VM_search_getsize(), VM_setbindmaps(), VM_sin(), VM_soundlength(), VM_spawn(), VM_sqrt(), VM_stackdump(), VM_stov(), VM_str2chr(), VM_strdecolorize(), VM_stringtokeynum(), VM_strireplace(), VM_strlen(), VM_strlennocol(), VM_strreplace(), VM_strtolower(), VM_strtoupper(), VM_strunzone(), VM_strzone(), VM_substring(), VM_SV_AddStat(), VM_SV_aim(), VM_SV_ambientsound(), VM_SV_checkbottom(), VM_SV_checkclient(), VM_SV_checkpvs(), VM_SV_clientcommand(), VM_SV_clienttype(), VM_SV_copyentity(), VM_SV_dropclient(), VM_SV_effect(), VM_SV_getextresponse(), VM_SV_getlight(), VM_SV_gettagindex(), VM_SV_gettaginfo(), VM_SV_lightstyle(), VM_SV_modelnameforindex(), VM_SV_MoveToGoal(), VM_SV_particle(), VM_SV_particleeffectnum(), VM_SV_pointcontents(), VM_SV_precache_model(), VM_SV_precache_sound(), VM_SV_registercommand(), VM_SV_serverkey(), VM_SV_setattachment(), VM_SV_setcolor(), VM_SV_setmodel(), VM_SV_setmodelindex(), VM_SV_setorigin(), VM_SV_setsize(), VM_SV_setspawnparms(), VM_SV_spawnclient(), VM_SV_te_beam(), VM_SV_te_blood(), VM_SV_te_bloodshower(), VM_SV_te_customflash(), VM_SV_te_explosion(), VM_SV_te_explosion2(), VM_SV_te_explosionquad(), VM_SV_te_explosionrgb(), VM_SV_te_flamejet(), VM_SV_te_gunshot(), VM_SV_te_gunshotquad(), VM_SV_te_knightspike(), VM_SV_te_lavasplash(), VM_SV_te_lightning1(), VM_SV_te_lightning2(), VM_SV_te_lightning3(), VM_SV_te_particlecube(), VM_SV_te_particlerain(), VM_SV_te_particlesnow(), VM_SV_te_plasmaburn(), VM_SV_te_smallflash(), VM_SV_te_spark(), VM_SV_te_spike(), VM_SV_te_spikequad(), VM_SV_te_superspike(), VM_SV_te_superspikequad(), VM_SV_te_tarexplosion(), VM_SV_te_teleport(), VM_SV_te_wizspike(), VM_SV_tracetoss(), VM_SV_trailparticles(), VM_SV_WriteAngle(), VM_SV_WriteByte(), VM_SV_WriteChar(), VM_SV_WriteCoord(), VM_SV_WriteEntity(), VM_SV_WriteLong(), VM_SV_WritePicture(), VM_SV_WriteShort(), VM_SV_WriteString(), VM_SV_WriteUnterminatedString(), VM_tan(), VM_tokenize(), VM_tokenize_console(), VM_traceoff(), VM_traceon(), VM_uncolorstring(), VM_vectorvectors(), VM_vectoyaw(), VM_vlen(), VM_vtos(), VM_wasfreed(), VM_whichpack(), and VM_writetofile().

◆ VM_SAFEPARMCOUNTRANGE

#define VM_SAFEPARMCOUNTRANGE ( p1,
p2,
f )
Value:
if(prog->argc < p1 || prog->argc > p2) prog->error_cmd(#f " wrong parameter count %i (" #p1 " to " #p2 " expected ) !", prog->argc)

Definition at line 206 of file prvm_cmds.h.

Referenced by VM_buf_create(), VM_buf_cvarlist(), VM_buf_writefile(), VM_bufstr_find(), VM_callfunction(), VM_centerprint(), VM_chr2str(), VM_CL_boxparticles(), VM_CL_droptofloor(), VM_CL_findbox(), VM_CL_findradius(), VM_CL_getlight(), VM_CL_getstati(), VM_CL_InitParticleSpawner(), VM_CL_ParticleThemeSave(), VM_CL_pointparticles(), VM_CL_R_AddDynamicLight(), VM_CL_R_PolygonBegin(), VM_CL_R_SetView(), VM_CL_runplayerphysics(), VM_CL_sound(), VM_CL_SpawnParticle(), VM_CL_SpawnParticleDelayed(), VM_CL_tracebox(), VM_CL_traceline(), VM_CL_trailparticles(), VM_CL_walkmove(), VM_crc16(), VM_cvar(), VM_cvar_defstring(), VM_cvar_description(), VM_cvar_set(), VM_cvar_string(), VM_cvar_type(), VM_digest_hex(), VM_dprint(), VM_drawcolorcodedstring(), VM_drawpic(), VM_drawstring(), VM_findchain(), VM_findchainflags(), VM_findchainfloat(), VM_findkeysforcommand(), VM_getkeybind(), VM_gettime(), VM_infoadd(), VM_loadfont(), VM_localcmd(), VM_localsound(), VM_M_getresolution(), VM_M_refreshserverlist(), VM_matchpattern(), VM_max(), VM_min(), VM_netaddress_resolve(), VM_nudgeoutofsolid(), VM_precache_pic(), VM_registercvar(), VM_search_begin(), VM_setkeybind(), VM_sprint(), VM_stof(), VM_strcat(), VM_strconv(), VM_strftime(), VM_stringwidth(), VM_strncasecmp(), VM_strncmp(), VM_strpad(), VM_strstrofs(), VM_SV_centerprint(), VM_SV_droptofloor(), VM_SV_findbox(), VM_SV_findradius(), VM_SV_makestatic(), VM_SV_pointparticles(), VM_SV_pointsound(), VM_SV_sound(), VM_SV_sprint(), VM_SV_stuffcmd(), VM_SV_tracebox(), VM_SV_traceline(), VM_SV_walkmove(), VM_tokenizebyseparator(), VM_uri_escape(), VM_uri_get(), VM_uri_unescape(), and VM_vectoangles().

◆ VM_TEMPSTRING_MAXSIZE

Function Documentation

◆ BufStr_Del()

void BufStr_Del ( prvm_prog_t * prog,
prvm_stringbuffer_t * stringbuffer )

Definition at line 3926 of file prvm_cmds.c.

3927{
3928 int i;
3929
3930 if (!stringbuffer)
3931 return;
3932
3933 for (i = 0;i < stringbuffer->num_strings;i++)
3934 if (stringbuffer->strings[i])
3935 Mem_Free(stringbuffer->strings[i]);
3936 if (stringbuffer->strings)
3937 Mem_Free(stringbuffer->strings);
3938 if(stringbuffer->origin)
3939 PRVM_Free((char *)stringbuffer->origin);
3941}
#define PRVM_Free(buffer)
Definition progsvm.h:819
int i
memexpandablearray_t stringbuffersarray
Definition progsvm.h:596
const char * origin
Definition progsvm.h:504
void Mem_ExpandableArray_FreeRecord(memexpandablearray_t *l, void *record)
Definition zone.c:743
#define Mem_Free(mem)
Definition zone.h:96

References i, Mem_ExpandableArray_FreeRecord(), Mem_Free, prvm_stringbuffer_t::num_strings, prvm_stringbuffer_t::origin, PRVM_Free, prvm_prog_t::stringbuffersarray, and prvm_stringbuffer_t::strings.

Referenced by BufStr_Flush(), SV_Loadgame_f(), and VM_buf_del().

◆ BufStr_FindCreateReplace()

prvm_stringbuffer_t * BufStr_FindCreateReplace ( prvm_prog_t * prog,
int bufindex,
unsigned flags,
const char * format )

Definition at line 3867 of file prvm_cmds.c.

3868{
3869 prvm_stringbuffer_t *stringbuffer;
3870 int i;
3871
3872 if (bufindex < 0)
3873 return NULL;
3874
3875 // find buffer with wanted index
3876 if (bufindex < (int)Mem_ExpandableArray_IndexRange(&prog->stringbuffersarray))
3877 {
3878 if ( (stringbuffer = (prvm_stringbuffer_t*) Mem_ExpandableArray_RecordAtIndex(&prog->stringbuffersarray, bufindex)) )
3879 {
3880 if (stringbuffer->flags & STRINGBUFFER_TEMP)
3881 stringbuffer->flags = flags; // created but has not been used yet
3882 return stringbuffer;
3883 }
3884 return NULL;
3885 }
3886
3887 // allocate new buffer with wanted index
3888 while(1)
3889 {
3891 stringbuffer->flags = STRINGBUFFER_TEMP;
3892 for (i = 0;stringbuffer != Mem_ExpandableArray_RecordAtIndex(&prog->stringbuffersarray, i);i++);
3893 if (i == bufindex)
3894 {
3895 stringbuffer->flags = flags; // mark as used
3896 break;
3897 }
3898 }
3899 return stringbuffer;
3900}
float flags
#define STRINGBUFFER_TEMP
Definition progsvm.h:498
#define NULL
Definition qtypes.h:12
unsigned char flags
Definition progsvm.h:505
size_t Mem_ExpandableArray_IndexRange(const memexpandablearray_t *l)
Definition zone.c:763
void * Mem_ExpandableArray_AllocRecord(memexpandablearray_t *l)
Definition zone.c:695
void * Mem_ExpandableArray_RecordAtIndex(const memexpandablearray_t *l, size_t index)
Definition zone.c:780

References flags, prvm_stringbuffer_t::flags, i, Mem_ExpandableArray_AllocRecord(), Mem_ExpandableArray_IndexRange(), Mem_ExpandableArray_RecordAtIndex(), NULL, STRINGBUFFER_TEMP, and prvm_prog_t::stringbuffersarray.

Referenced by SV_Loadgame_f().

◆ BufStr_Flush()

void BufStr_Flush ( prvm_prog_t * prog)

Definition at line 3943 of file prvm_cmds.c.

3944{
3945 prvm_stringbuffer_t *stringbuffer;
3946 int i, numbuffers;
3947
3949 for (i = 0; i < numbuffers; i++)
3951 BufStr_Del(prog, stringbuffer);
3953}
static int(ZEXPORT *qz_inflate)(z_stream *strm
void BufStr_Del(prvm_prog_t *prog, prvm_stringbuffer_t *stringbuffer)
Definition prvm_cmds.c:3926
mempool_t * progs_mempool
all memory allocations related to this vm_prog (code, edicts, strings)
Definition progsvm.h:602
void Mem_ExpandableArray_NewArray(memexpandablearray_t *l, mempool_t *mempool, size_t recordsize, int numrecordsperarray)
Definition zone.c:675

References BufStr_Del(), i, int(), Mem_ExpandableArray_IndexRange(), Mem_ExpandableArray_NewArray(), Mem_ExpandableArray_RecordAtIndex(), prvm_prog_t::progs_mempool, and prvm_prog_t::stringbuffersarray.

Referenced by SV_Loadgame_f().

◆ BufStr_Set()

void BufStr_Set ( prvm_prog_t * prog,
prvm_stringbuffer_t * stringbuffer,
int strindex,
const char * str )

Definition at line 3902 of file prvm_cmds.c.

3903{
3904 size_t alloclen;
3905
3906 if (!stringbuffer || strindex < 0)
3907 return;
3908
3909 BufStr_Expand(prog, stringbuffer, strindex);
3910 stringbuffer->num_strings = max(stringbuffer->num_strings, strindex + 1);
3911 if (stringbuffer->strings[strindex])
3912 Mem_Free(stringbuffer->strings[strindex]);
3913 stringbuffer->strings[strindex] = NULL;
3914
3915 if (str)
3916 {
3917 // not the NULL string!
3918 alloclen = strlen(str) + 1;
3919 stringbuffer->strings[strindex] = (char *)Mem_Alloc(prog->progs_mempool, alloclen);
3920 memcpy(stringbuffer->strings[strindex], str, alloclen);
3921 }
3922
3923 BufStr_Shrink(prog, stringbuffer);
3924}
#define max(A, B)
Definition mathlib.h:38
float strlen(string s)
static void BufStr_Expand(prvm_prog_t *prog, prvm_stringbuffer_t *stringbuffer, int strindex)
Definition prvm_cmds.c:3815
static void BufStr_Shrink(prvm_prog_t *prog, prvm_stringbuffer_t *stringbuffer)
Definition prvm_cmds.c:3831
#define Mem_Alloc(pool, size)
Definition zone.h:92

References BufStr_Expand(), BufStr_Shrink(), max, Mem_Alloc, Mem_Free, NULL, prvm_stringbuffer_t::num_strings, prvm_prog_t::progs_mempool, prvm_stringbuffer_t::strings, and strlen().

Referenced by SV_Loadgame_f(), and VM_bufstr_set().

◆ PRVM_ConsoleCommand()

qbool PRVM_ConsoleCommand ( prvm_prog_t * prog,
const char * text,
size_t textlen,
int * func,
qbool preserve_self,
int curself,
double ptime,
const char * error_message )

Definition at line 68 of file prvm_cmds.c.

69{
70 int restorevm_tempstringsbuf_cursize;
71 int save_self = 0; // hush compiler warning
72 qbool r = false;
73
74 if(!prog->loaded)
75 return false;
76
77 if(func)
78 {
79 if(preserve_self)
80 save_self = PRVM_gameglobaledict(self);
81 if(ptime)
83 PRVM_gameglobaledict(self) = curself;
84 restorevm_tempstringsbuf_cursize = prog->tempstringsbuf.cursize;
85 PRVM_G_INT(OFS_PARM0) = PRVM_SetTempString(prog, text, textlen);
86 prog->ExecuteProgram(prog, *func, error_message);
87 prog->tempstringsbuf.cursize = restorevm_tempstringsbuf_cursize;
88 if(preserve_self)
89 PRVM_gameglobaledict(self) = save_self;
90 r = (int) PRVM_G_FLOAT(OFS_RETURN) != 0;
91 }
92
93 return r;
94}
entity self
float time
#define OFS_PARM0
Definition pr_comp.h:34
int PRVM_SetTempString(prvm_prog_t *prog, const char *s, size_t slen)
Takes an strlen (not a buffer size).
#define PRVM_gameglobaledict(fieldname)
Definition progsvm.h:168
#define PRVM_gameglobalfloat(fieldname)
Definition progsvm.h:165
#define PRVM_G_FLOAT(o)
Definition progsvm.h:882
#define PRVM_G_INT(o)
Definition progsvm.h:883
bool qbool
Definition qtypes.h:9
dp_FragColor r
qbool loaded
used to indicate whether a prog is loaded
Definition progsvm.h:710
void(* ExecuteProgram)(struct prvm_prog_s *prog, func_t fnum, const char *errormessage)
pointer to one of the *VM_ExecuteProgram functions
Definition progsvm.h:749
sizebuf_t tempstringsbuf
buffer for storing all tempstrings created during one invocation of ExecuteProgram
Definition progsvm.h:644
int cursize
Definition common.h:54

References sizebuf_t::cursize, prvm_prog_t::ExecuteProgram, int(), prvm_prog_t::loaded, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_gameglobaledict, PRVM_gameglobalfloat, PRVM_SetTempString(), r, self, prvm_prog_t::tempstringsbuf, and time.

Referenced by CL_VM_ConsoleCommand(), MP_ConsoleCommand(), and SV_VM_ConsoleCommand().

◆ VM_acos()

void VM_acos ( prvm_prog_t * prog)

Definition at line 1668 of file prvm_cmds.c.

1669{
1672}
void VM_acos(prvm_prog_t *prog)
Definition prvm_cmds.c:1668
#define VM_SAFEPARMCOUNT(p, f)
Definition prvm_cmds.h:207

References OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, VM_acos(), and VM_SAFEPARMCOUNT.

Referenced by VM_acos().

◆ VM_altstr_count()

void VM_altstr_count ( prvm_prog_t * prog)

Definition at line 3621 of file prvm_cmds.c.

3622{
3623 const char *altstr, *pos;
3624 int count;
3625
3627
3628 altstr = PRVM_G_STRING( OFS_PARM0 );
3629 //VM_CheckEmptyString(prog, altstr );
3630
3631 for( count = 0, pos = altstr ; *pos ; pos++ ) {
3632 if( *pos == '\\' ) {
3633 if( !*++pos ) {
3634 break;
3635 }
3636 } else if( *pos == '\'' ) {
3637 count++;
3638 }
3639 }
3640
3642}
GLenum GLenum GLsizei count
Definition glquake.h:656
#define PRVM_G_STRING(o)
Definition progsvm.h:887
void VM_altstr_count(prvm_prog_t *prog)
Definition prvm_cmds.c:3621
float prvm_vec_t
Definition qtypes.h:55

References count, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, VM_altstr_count(), and VM_SAFEPARMCOUNT.

Referenced by VM_altstr_count().

◆ VM_altstr_get()

void VM_altstr_get ( prvm_prog_t * prog)

Definition at line 3683 of file prvm_cmds.c.

3684{
3685 const char *altstr, *pos;
3686 char *out;
3687 int count, size;
3688 char outstr[VM_TEMPSTRING_MAXSIZE];
3689
3691
3692 altstr = PRVM_G_STRING( OFS_PARM0 );
3693
3695 count = count * 2 + 1;
3696
3697 for( pos = altstr ; *pos && count ; pos++ )
3698 if( *pos == '\\' ) {
3699 if( !*++pos )
3700 break;
3701 } else if( *pos == '\'' )
3702 count--;
3703
3704 if( !*pos ) {
3705 PRVM_G_INT( OFS_RETURN ) = 0;
3706 return;
3707 }
3708
3709 for( out = outstr, size = sizeof(outstr) - 1 ; size && *pos ; size--, pos++, out++ )
3710 if( *pos == '\\' ) {
3711 if( !*++pos )
3712 break;
3713 *out = *pos;
3714 size--;
3715 } else if( *pos == '\'' )
3716 break;
3717 else
3718 *out = *pos;
3719
3720 *out = '\0';
3721 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, outstr, out - outstr);
3722}
vector size
#define OFS_PARM1
Definition pr_comp.h:35
void VM_altstr_get(prvm_prog_t *prog)
Definition prvm_cmds.c:3683
#define VM_TEMPSTRING_MAXSIZE
Definition prvm_cmds.h:215

References count, int(), OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), size, VM_altstr_get(), VM_SAFEPARMCOUNT, and VM_TEMPSTRING_MAXSIZE.

Referenced by VM_altstr_get().

◆ VM_altstr_ins()

void VM_altstr_ins ( prvm_prog_t * prog)

Definition at line 3775 of file prvm_cmds.c.

3776{
3777 int num;
3778 const char *set;
3779 const char *in;
3780 char *out;
3781 char outstr[VM_TEMPSTRING_MAXSIZE];
3782
3784
3785 in = PRVM_G_STRING( OFS_PARM0 );
3786 num = (int)PRVM_G_FLOAT( OFS_PARM1 );
3787 set = PRVM_G_STRING( OFS_PARM2 );
3788
3789 out = outstr;
3790 for( num = num * 2 + 2 ; *in && num > 0 ; *out++ = *in++ )
3791 if( *in == '\\' ) {
3792 if( !*++in ) {
3793 break;
3794 }
3795 } else if( *in == '\'' ) {
3796 num--;
3797 }
3798
3799 *out++ = '\'';
3800 for( ; *set ; *out++ = *set++ );
3801 *out++ = '\'';
3802
3803 out += dp_strlcpy(out, in, outstr + sizeof(outstr) - out);
3804 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, outstr, out - outstr);
3805}
#define dp_strlcpy(dst, src, dsize)
Definition common.h:303
#define OFS_PARM2
Definition pr_comp.h:36
void VM_altstr_ins(prvm_prog_t *prog)
Definition prvm_cmds.c:3775

References dp_strlcpy, int(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), VM_altstr_ins(), VM_SAFEPARMCOUNT, and VM_TEMPSTRING_MAXSIZE.

Referenced by VM_altstr_ins().

◆ VM_altstr_prepare()

void VM_altstr_prepare ( prvm_prog_t * prog)

Definition at line 3651 of file prvm_cmds.c.

3652{
3653 const char *instr, *in;
3654 char outstr[VM_TEMPSTRING_MAXSIZE];
3655 size_t outpos;
3656
3658
3659 instr = PRVM_G_STRING( OFS_PARM0 );
3660
3661 for (in = instr, outpos = 0; *in && outpos < sizeof(outstr) - 1; ++in)
3662 {
3663 if (*in == '\'' && outpos < sizeof(outstr) - 2)
3664 {
3665 outstr[outpos++] = '\\';
3666 outstr[outpos++] = '\'';
3667 }
3668 else
3669 outstr[outpos++] = *in;
3670 }
3671
3672 outstr[outpos] = '\0';
3673 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, outstr, outpos);
3674}
void VM_altstr_prepare(prvm_prog_t *prog)
Definition prvm_cmds.c:3651

References OFS_PARM0, OFS_RETURN, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), VM_altstr_prepare(), VM_SAFEPARMCOUNT, and VM_TEMPSTRING_MAXSIZE.

Referenced by VM_altstr_prepare().

◆ VM_altstr_set()

void VM_altstr_set ( prvm_prog_t * prog)

Definition at line 3731 of file prvm_cmds.c.

3732{
3733 int num;
3734 const char *altstr, *str;
3735 const char *in;
3736 char *out;
3737 char outstr[VM_TEMPSTRING_MAXSIZE];
3738
3740
3741 altstr = PRVM_G_STRING( OFS_PARM0 );
3742
3743 num = (int)PRVM_G_FLOAT( OFS_PARM1 );
3744
3745 str = PRVM_G_STRING( OFS_PARM2 );
3746
3747 out = outstr;
3748 for( num = num * 2 + 1, in = altstr; *in && num; *out++ = *in++ )
3749 if( *in == '\\' ) {
3750 if( !*++in ) {
3751 break;
3752 }
3753 } else if( *in == '\'' ) {
3754 num--;
3755 }
3756
3757 // copy set in
3758 for( ; *str; *out++ = *str++ );
3759 // now jump over the old content
3760 for( ; *in ; in++ )
3761 if( *in == '\'' || (*in == '\\' && !*++in) )
3762 break;
3763
3764 out += dp_strlcpy(out, in, outstr + sizeof(outstr) - out);
3765 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, outstr, out - outstr);
3766}
void VM_altstr_set(prvm_prog_t *prog)
Definition prvm_cmds.c:3731

References dp_strlcpy, int(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), VM_altstr_set(), VM_SAFEPARMCOUNT, and VM_TEMPSTRING_MAXSIZE.

Referenced by VM_altstr_set().

◆ VM_argv()

void VM_argv ( prvm_prog_t * prog)

Definition at line 2804 of file prvm_cmds.c.

2805{
2806 int token_num;
2807
2809
2810 token_num = (int)PRVM_G_FLOAT(OFS_PARM0);
2811
2812 if(token_num < 0)
2813 token_num += num_tokens;
2814
2815 if (token_num >= 0 && token_num < num_tokens)
2816 PRVM_G_INT(OFS_RETURN) = tokens[token_num];
2817 else
2819}
#define OFS_NULL
Definition pr_comp.h:32
void VM_argv(prvm_prog_t *prog)
Definition prvm_cmds.c:2804
static int tokens[VM_TEMPSTRING_MAXSIZE/2]
Definition prvm_cmds.c:2659
static int num_tokens
Definition prvm_cmds.c:2658

References int(), num_tokens, OFS_NULL, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, tokens, VM_argv(), and VM_SAFEPARMCOUNT.

Referenced by VM_argv(), VM_argv_end_index(), VM_argv_start_index(), VM_CL_getextresponse(), and VM_SV_getextresponse().

◆ VM_argv_end_index()

void VM_argv_end_index ( prvm_prog_t * prog)

Definition at line 2840 of file prvm_cmds.c.

2841{
2842 int token_num;
2843
2845
2846 token_num = (int)PRVM_G_FLOAT(OFS_PARM0);
2847
2848 if(token_num < 0)
2849 token_num += num_tokens;
2850
2851 if (token_num >= 0 && token_num < num_tokens)
2853 else
2855}
static int tokens_endpos[VM_TEMPSTRING_MAXSIZE/2]
Definition prvm_cmds.c:2661

References int(), num_tokens, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, tokens_endpos, VM_argv(), and VM_SAFEPARMCOUNT.

◆ VM_argv_start_index()

void VM_argv_start_index ( prvm_prog_t * prog)

Definition at line 2822 of file prvm_cmds.c.

2823{
2824 int token_num;
2825
2827
2828 token_num = (int)PRVM_G_FLOAT(OFS_PARM0);
2829
2830 if(token_num < 0)
2831 token_num += num_tokens;
2832
2833 if (token_num >= 0 && token_num < num_tokens)
2835 else
2837}
static int tokens_startpos[VM_TEMPSTRING_MAXSIZE/2]
Definition prvm_cmds.c:2660

References int(), num_tokens, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, tokens_startpos, VM_argv(), and VM_SAFEPARMCOUNT.

◆ VM_asin()

void VM_asin ( prvm_prog_t * prog)

Definition at line 1656 of file prvm_cmds.c.

1657{
1660}
void VM_asin(prvm_prog_t *prog)
Definition prvm_cmds.c:1656

References OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, VM_asin(), and VM_SAFEPARMCOUNT.

Referenced by VM_asin().

◆ VM_atan()

void VM_atan ( prvm_prog_t * prog)

Definition at line 1680 of file prvm_cmds.c.

1681{
1684}
void VM_atan(prvm_prog_t *prog)
Definition prvm_cmds.c:1680

References OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, VM_atan(), and VM_SAFEPARMCOUNT.

Referenced by VM_atan().

◆ VM_atan2()

void VM_atan2 ( prvm_prog_t * prog)

Definition at line 1692 of file prvm_cmds.c.

1693{
1696}
void VM_atan2(prvm_prog_t *prog)
Definition prvm_cmds.c:1692

References OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, VM_atan2(), and VM_SAFEPARMCOUNT.

Referenced by VM_atan2().

◆ VM_bitshift()

void VM_bitshift ( prvm_prog_t * prog)

Definition at line 3594 of file prvm_cmds.c.

3595{
3596 prvm_int_t n1, n2;
3598
3601 if(!n1)
3603 else
3604 if(n2 < 0)
3605 PRVM_G_FLOAT(OFS_RETURN) = (n1 >> -n2);
3606 else
3607 PRVM_G_FLOAT(OFS_RETURN) = (n1 << n2);
3608}
float fabs(float f)
void VM_bitshift(prvm_prog_t *prog)
Definition prvm_cmds.c:3594
int32_t prvm_int_t
Definition qtypes.h:56

References fabs(), OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, VM_bitshift(), and VM_SAFEPARMCOUNT.

Referenced by VM_bitshift().

◆ VM_bound()

void VM_bound ( prvm_prog_t * prog)

Definition at line 1829 of file prvm_cmds.c.

1830{
1833}
#define bound(min, num, max)
Definition mathlib.h:34
void VM_bound(prvm_prog_t *prog)
Definition prvm_cmds.c:1829

References bound, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_FLOAT, VM_bound(), and VM_SAFEPARMCOUNT.

Referenced by VM_bound().

◆ VM_bprint()

void VM_bprint ( prvm_prog_t * prog)

Definition at line 442 of file prvm_cmds.c.

443{
444 char string[VM_TEMPSTRING_MAXSIZE];
445
446 if(!sv.active)
447 {
448 VM_Warning(prog, "VM_bprint: server is not active!\n");
449 return;
450 }
451
452 VM_VarString(prog, 0, string, sizeof(string));
453 SV_BroadcastPrint(string);
454}
size_t VM_VarString(prvm_prog_t *prog, int first, char *out, size_t outsize)
Returns the length of the *out string excluding the \0 terminator.
Definition prvm_cmds.c:280
void VM_Warning(prvm_prog_t *prog, const char *fmt,...)
Definition prvm_cmds.c:25
server_t sv
local server
Definition sv_main.c:223
void SV_BroadcastPrint(const char *msg)
Definition sv_send.c:91
qbool active
false if only a net client
Definition server.h:66

References server_t::active, sv, SV_BroadcastPrint(), VM_TEMPSTRING_MAXSIZE, VM_VarString(), and VM_Warning().

◆ VM_break()

void VM_break ( prvm_prog_t * prog)

Definition at line 661 of file prvm_cmds.c.

662{
663 prog->error_cmd("%s: break statement", prog->name);
664}
const char * name
name of the prog, e.g. "Server", "Client" or "Menu" (used for text output)
Definition progsvm.h:700
void(* error_cmd)(const char *format,...) DP_FUNC_PRINTF(1) DP_FUNC_NORETURN
[INIT]
Definition progsvm.h:747

References prvm_prog_t::error_cmd, and prvm_prog_t::name.

◆ VM_buf_copy()

void VM_buf_copy ( prvm_prog_t * prog)

Definition at line 4039 of file prvm_cmds.c.

4040{
4041 prvm_stringbuffer_t *srcstringbuffer, *dststringbuffer;
4042 int i;
4044
4046 if(!srcstringbuffer)
4047 {
4048 VM_Warning(prog, "VM_buf_copy: invalid source buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM0));
4049 return;
4050 }
4052 if(i == (int)PRVM_G_FLOAT(OFS_PARM0))
4053 {
4054 VM_Warning(prog, "VM_buf_copy: source == destination (%i)\n", i);
4055 return;
4056 }
4058 if(!dststringbuffer)
4059 {
4060 VM_Warning(prog, "VM_buf_copy: invalid destination buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM1));
4061 return;
4062 }
4063
4064 for (i = 0;i < dststringbuffer->num_strings;i++)
4065 if (dststringbuffer->strings[i])
4066 Mem_Free(dststringbuffer->strings[i]);
4067 if (dststringbuffer->strings)
4068 Mem_Free(dststringbuffer->strings);
4069 *dststringbuffer = *srcstringbuffer;
4070 if (dststringbuffer->max_strings)
4071 dststringbuffer->strings = (char **)Mem_Alloc(prog->progs_mempool, sizeof(dststringbuffer->strings[0]) * dststringbuffer->max_strings);
4072
4073 for (i = 0;i < dststringbuffer->num_strings;i++)
4074 {
4075 if (srcstringbuffer->strings[i])
4076 {
4077 size_t stringlen;
4078 stringlen = strlen(srcstringbuffer->strings[i]) + 1;
4079 dststringbuffer->strings[i] = (char *)Mem_Alloc(prog->progs_mempool, stringlen);
4080 memcpy(dststringbuffer->strings[i], srcstringbuffer->strings[i], stringlen);
4081 }
4082 }
4083}
void VM_buf_copy(prvm_prog_t *prog)
Definition prvm_cmds.c:4039

References i, int(), prvm_stringbuffer_t::max_strings, Mem_Alloc, Mem_ExpandableArray_RecordAtIndex(), Mem_Free, prvm_stringbuffer_t::num_strings, OFS_PARM0, OFS_PARM1, prvm_prog_t::progs_mempool, PRVM_G_FLOAT, prvm_prog_t::stringbuffersarray, prvm_stringbuffer_t::strings, strlen(), VM_buf_copy(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_buf_copy().

◆ VM_buf_create()

void VM_buf_create ( prvm_prog_t * prog)

Definition at line 3964 of file prvm_cmds.c.

3965{
3966 prvm_stringbuffer_t *stringbuffer;
3967 int i;
3968
3970
3971 // VorteX: optional parm1 (buffer format) is unfinished, to keep intact with future databuffers extension must be set to "string"
3972 if(prog->argc >= 1 && strcmp(PRVM_G_STRING(OFS_PARM0), "string"))
3973 {
3975 return;
3976 }
3978 for (i = 0;stringbuffer != Mem_ExpandableArray_RecordAtIndex(&prog->stringbuffersarray, i);i++);
3979 stringbuffer->origin = PRVM_AllocationOrigin(prog);
3980 // optional flags parm
3981 if (prog->argc >= 2)
3984}
#define STRINGBUFFER_QCFLAGS
Definition progsvm.h:497
const char * PRVM_AllocationOrigin(prvm_prog_t *prog)
Definition prvm_edict.c:223
void VM_buf_create(prvm_prog_t *prog)
Definition prvm_cmds.c:3964
#define VM_SAFEPARMCOUNTRANGE(p1, p2, f)
Definition prvm_cmds.h:206

References prvm_prog_t::argc, prvm_stringbuffer_t::flags, i, int(), Mem_ExpandableArray_AllocRecord(), Mem_ExpandableArray_RecordAtIndex(), OFS_PARM0, OFS_PARM1, OFS_RETURN, prvm_stringbuffer_t::origin, PRVM_AllocationOrigin(), PRVM_G_FLOAT, PRVM_G_STRING, STRINGBUFFER_QCFLAGS, prvm_prog_t::stringbuffersarray, VM_buf_create(), and VM_SAFEPARMCOUNTRANGE.

Referenced by VM_buf_create().

◆ VM_buf_cvarlist()

void VM_buf_cvarlist ( prvm_prog_t * prog)

Definition at line 4659 of file prvm_cmds.c.

4660{
4661 cvar_t *cvar;
4662 const char *partial, *antipartial;
4663 size_t len, antilen;
4664 size_t alloclen;
4665 qbool ispattern, antiispattern;
4666 int n;
4667 prvm_stringbuffer_t *stringbuffer;
4669
4671 if(!stringbuffer)
4672 {
4673 VM_Warning(prog, "VM_bufstr_free: invalid buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM0));
4674 return;
4675 }
4676
4677 partial = PRVM_G_STRING(OFS_PARM1);
4678 if(!partial)
4679 len = 0;
4680 else
4681 len = strlen(partial);
4682
4683 if(prog->argc == 3)
4684 antipartial = PRVM_G_STRING(OFS_PARM2);
4685 else
4686 antipartial = NULL;
4687 if(!antipartial)
4688 antilen = 0;
4689 else
4690 antilen = strlen(antipartial);
4691
4692 for (n = 0;n < stringbuffer->num_strings;n++)
4693 if (stringbuffer->strings[n])
4694 Mem_Free(stringbuffer->strings[n]);
4695 if (stringbuffer->strings)
4696 Mem_Free(stringbuffer->strings);
4697 stringbuffer->strings = NULL;
4698
4699 ispattern = partial && (strchr(partial, '*') || strchr(partial, '?'));
4700 antiispattern = antipartial && (strchr(antipartial, '*') || strchr(antipartial, '?'));
4701
4702 n = 0;
4703 for(cvar = prog->console_cmd->cvars->vars; cvar; cvar = cvar->next)
4704 {
4705 if(len && (ispattern ? !matchpattern_with_separator(cvar->name, partial, false, "", false) : strncmp(partial, cvar->name, len)))
4706 continue;
4707
4708 if(antilen && (antiispattern ? matchpattern_with_separator(cvar->name, antipartial, false, "", false) : !strncmp(antipartial, cvar->name, antilen)))
4709 continue;
4710
4711 ++n;
4712 }
4713
4714 stringbuffer->max_strings = stringbuffer->num_strings = n;
4715 if (stringbuffer->max_strings)
4716 stringbuffer->strings = (char **)Mem_Alloc(prog->progs_mempool, sizeof(stringbuffer->strings[0]) * stringbuffer->max_strings);
4717
4718 n = 0;
4719 for(cvar = prog->console_cmd->cvars->vars; cvar; cvar = cvar->next)
4720 {
4721 if(len && (ispattern ? !matchpattern_with_separator(cvar->name, partial, false, "", false) : strncmp(partial, cvar->name, len)))
4722 continue;
4723
4724 if(antilen && (antiispattern ? matchpattern_with_separator(cvar->name, antipartial, false, "", false) : !strncmp(antipartial, cvar->name, antilen)))
4725 continue;
4726
4727 alloclen = strlen(cvar->name) + 1;
4728 stringbuffer->strings[n] = (char *)Mem_Alloc(prog->progs_mempool, alloclen);
4729 memcpy(stringbuffer->strings[n], cvar->name, alloclen);
4730
4731 ++n;
4732 }
4733}
int matchpattern_with_separator(const char *in, const char *pattern, int caseinsensitive, const char *separators, qbool wildcard_least_one)
Definition filematch.c:23
#define n(x, y)
float cvar(string name)
void VM_buf_cvarlist(prvm_prog_t *prog)
Definition prvm_cmds.c:4659
Definition cvar.h:66
struct cmd_state_s * console_cmd
points to the relevant console command interpreter for this vm (cmd_local or &cmd_server),...
Definition progsvm.h:641

References prvm_prog_t::argc, prvm_prog_t::console_cmd, cvar(), matchpattern_with_separator(), prvm_stringbuffer_t::max_strings, Mem_Alloc, Mem_ExpandableArray_RecordAtIndex(), Mem_Free, n, NULL, prvm_stringbuffer_t::num_strings, OFS_PARM0, OFS_PARM1, OFS_PARM2, prvm_prog_t::progs_mempool, PRVM_G_FLOAT, PRVM_G_STRING, prvm_prog_t::stringbuffersarray, prvm_stringbuffer_t::strings, strlen(), VM_buf_cvarlist(), VM_SAFEPARMCOUNTRANGE, and VM_Warning().

Referenced by VM_buf_cvarlist().

◆ VM_buf_del()

void VM_buf_del ( prvm_prog_t * prog)

Definition at line 3995 of file prvm_cmds.c.

3996{
3997 prvm_stringbuffer_t *stringbuffer;
4000 if (stringbuffer)
4001 BufStr_Del(prog, stringbuffer);
4002 else
4003 {
4004 VM_Warning(prog, "VM_buf_del: invalid buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM0));
4005 return;
4006 }
4007}
void VM_buf_del(prvm_prog_t *prog)
Definition prvm_cmds.c:3995

References BufStr_Del(), Mem_ExpandableArray_RecordAtIndex(), OFS_PARM0, PRVM_G_FLOAT, prvm_prog_t::stringbuffersarray, VM_buf_del(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_buf_del().

◆ VM_buf_getsize()

void VM_buf_getsize ( prvm_prog_t * prog)

Definition at line 4016 of file prvm_cmds.c.

4017{
4018 prvm_stringbuffer_t *stringbuffer;
4020
4022 if(!stringbuffer)
4023 {
4025 VM_Warning(prog, "VM_buf_getsize: invalid buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM0));
4026 return;
4027 }
4028 else
4029 PRVM_G_FLOAT(OFS_RETURN) = stringbuffer->num_strings;
4030}
void VM_buf_getsize(prvm_prog_t *prog)
Definition prvm_cmds.c:4016

References Mem_ExpandableArray_RecordAtIndex(), prvm_stringbuffer_t::num_strings, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, prvm_prog_t::stringbuffersarray, VM_buf_getsize(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_buf_getsize().

◆ VM_buf_implode()

void VM_buf_implode ( prvm_prog_t * prog)

Definition at line 4128 of file prvm_cmds.c.

4129{
4130 prvm_stringbuffer_t *stringbuffer;
4131 char k[VM_TEMPSTRING_MAXSIZE];
4132 size_t k_len;
4133 const char *sep;
4134 int i;
4135 size_t l;
4136
4138
4141 if(!stringbuffer)
4142 {
4143 VM_Warning(prog, "VM_buf_implode: invalid buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM0));
4144 return;
4145 }
4146 if(!stringbuffer->num_strings)
4147 return;
4148 sep = PRVM_G_STRING(OFS_PARM1);
4149 k[0] = '\0';
4150 k_len = 0;
4151 for(l = i = 0;i < stringbuffer->num_strings;i++)
4152 {
4153 if(stringbuffer->strings[i])
4154 {
4155 l += (i > 0 ? strlen(sep) : 0) + strlen(stringbuffer->strings[i]);
4156 if (l >= sizeof(k) - 1)
4157 break;
4158 dp_strlcat(k, sep, sizeof(k));
4159 k_len = dp_strlcat(k, stringbuffer->strings[i], sizeof(k));
4160 }
4161 }
4162 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, k, k_len);
4163}
#define dp_strlcat(dst, src, dsize)
Definition common.h:304
void VM_buf_implode(prvm_prog_t *prog)
Definition prvm_cmds.c:4128

References dp_strlcat, i, Mem_ExpandableArray_RecordAtIndex(), prvm_stringbuffer_t::num_strings, OFS_NULL, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), prvm_prog_t::stringbuffersarray, prvm_stringbuffer_t::strings, strlen(), VM_buf_implode(), VM_SAFEPARMCOUNT, VM_TEMPSTRING_MAXSIZE, and VM_Warning().

Referenced by VM_buf_implode().

◆ VM_buf_loadfile()

void VM_buf_loadfile ( prvm_prog_t * prog)

Definition at line 4318 of file prvm_cmds.c.

4319{
4320 size_t alloclen;
4321 prvm_stringbuffer_t *stringbuffer;
4322 char string[VM_TEMPSTRING_MAXSIZE];
4323 int strindex, c, end;
4324 const char *filename;
4325 char vabuf[1024];
4326 qfile_t *file;
4327
4329
4330 // get file
4331 filename = PRVM_G_STRING(OFS_PARM0);
4332 file = FS_OpenVirtualFile(va(vabuf, sizeof(vabuf), "data/%s", filename), false);
4333 if (file == NULL)
4334 file = FS_OpenVirtualFile(va(vabuf, sizeof(vabuf), "%s", filename), false);
4335 if (file == NULL)
4336 {
4338 VM_Warning(prog, "VM_buf_loadfile: failed to open file %s\n", filename);
4340 return;
4341 }
4342
4343 // get string buffer
4345 if(!stringbuffer)
4346 {
4347 VM_Warning(prog, "VM_buf_loadfile: invalid buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM1));
4349 return;
4350 }
4351
4352 // read file (append to the end of buffer)
4353 strindex = stringbuffer->num_strings;
4354 while(1)
4355 {
4356 // read line
4357 end = 0;
4358 for (;;)
4359 {
4360 c = FS_Getc(file);
4361 if (c == '\r' || c == '\n' || c < 0)
4362 break;
4363 if (end < VM_TEMPSTRING_MAXSIZE - 1)
4364 string[end++] = c;
4365 }
4366 string[end] = 0;
4367 // remove \n following \r
4368 if (c == '\r')
4369 {
4370 c = FS_Getc(file);
4371 if (c != '\n')
4372 FS_UnGetc(file, (unsigned char)c);
4373 }
4374 // add and continue
4375 if (c >= 0 || end)
4376 {
4377 BufStr_Expand(prog, stringbuffer, strindex);
4378 stringbuffer->num_strings = max(stringbuffer->num_strings, strindex + 1);
4379 alloclen = strlen(string) + 1;
4380 stringbuffer->strings[strindex] = (char *)Mem_Alloc(prog->progs_mempool, alloclen);
4381 memcpy(stringbuffer->strings[strindex], string, alloclen);
4382 strindex = stringbuffer->num_strings;
4383 }
4384 else
4385 break;
4386 }
4387
4388 // close file
4389 FS_Close(file);
4391}
char * va(char *buf, size_t buflen, const char *format,...)
Definition common.c:972
qfile_t * FS_OpenVirtualFile(const char *filepath, qbool quiet)
Definition fs.c:2928
int FS_UnGetc(qfile_t *file, unsigned char c)
Definition fs.c:3341
int FS_Close(qfile_t *file)
Definition fs.c:2970
int FS_Getc(qfile_t *file)
Definition fs.c:3323
cvar_t developer_extra
Definition host.c:49
void VM_buf_loadfile(prvm_prog_t *prog)
Definition prvm_cmds.c:4318
int integer
Definition cvar.h:73

References BufStr_Expand(), developer_extra, FS_Close(), FS_Getc(), FS_OpenVirtualFile(), FS_UnGetc(), cvar_t::integer, max, Mem_Alloc, Mem_ExpandableArray_RecordAtIndex(), NULL, prvm_stringbuffer_t::num_strings, OFS_PARM0, OFS_PARM1, OFS_RETURN, prvm_prog_t::progs_mempool, PRVM_G_FLOAT, PRVM_G_STRING, prvm_prog_t::stringbuffersarray, prvm_stringbuffer_t::strings, strlen(), va(), VM_buf_loadfile(), VM_SAFEPARMCOUNT, VM_TEMPSTRING_MAXSIZE, and VM_Warning().

Referenced by VM_buf_loadfile().

◆ VM_buf_sort()

void VM_buf_sort ( prvm_prog_t * prog)

Definition at line 4093 of file prvm_cmds.c.

4094{
4095 prvm_stringbuffer_t *stringbuffer;
4097
4099 if(!stringbuffer)
4100 {
4101 VM_Warning(prog, "VM_buf_sort: invalid buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM0));
4102 return;
4103 }
4104 if(stringbuffer->num_strings <= 0)
4105 {
4106 VM_Warning(prog, "VM_buf_sort: tried to sort empty buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM0));
4107 return;
4108 }
4111 stringbuffers_sortlength = 0x7FFFFFFF;
4112
4114 qsort(stringbuffer->strings, stringbuffer->num_strings, sizeof(char*), BufStr_SortStringsUP);
4115 else
4116 qsort(stringbuffer->strings, stringbuffer->num_strings, sizeof(char*), BufStr_SortStringsDOWN);
4117
4118 BufStr_Shrink(prog, stringbuffer);
4119}
static int BufStr_SortStringsUP(const void *in1, const void *in2)
Definition prvm_cmds.c:3847
void VM_buf_sort(prvm_prog_t *prog)
Definition prvm_cmds.c:4093
static size_t stringbuffers_sortlength
Definition prvm_cmds.c:3813
static int BufStr_SortStringsDOWN(const void *in1, const void *in2)
Definition prvm_cmds.c:3857

References BufStr_Shrink(), BufStr_SortStringsDOWN(), BufStr_SortStringsUP(), int(), Mem_ExpandableArray_RecordAtIndex(), prvm_stringbuffer_t::num_strings, OFS_PARM0, OFS_PARM1, OFS_PARM2, PRVM_G_FLOAT, stringbuffers_sortlength, prvm_prog_t::stringbuffersarray, prvm_stringbuffer_t::strings, VM_buf_sort(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_buf_sort().

◆ VM_buf_writefile()

void VM_buf_writefile ( prvm_prog_t * prog)

Definition at line 4401 of file prvm_cmds.c.

4402{
4403 int filenum, strindex, strnum, strlength;
4404 prvm_stringbuffer_t *stringbuffer;
4405
4407
4408 // get file
4409 filenum = (int)PRVM_G_FLOAT(OFS_PARM0);
4410 if (filenum < 0 || filenum >= PRVM_MAX_OPENFILES)
4411 {
4412 VM_Warning(prog, "VM_buf_writefile: invalid file handle %i\n", filenum);
4413 return;
4414 }
4415 if (prog->openfiles[filenum] == NULL)
4416 {
4417 VM_Warning(prog, "VM_buf_writefile: no such file handle %i (or file has been closed)\n", filenum);
4418 return;
4419 }
4420
4421 // get string buffer
4423 if(!stringbuffer)
4424 {
4425 VM_Warning(prog, "VM_buf_writefile: invalid buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM1));
4427 return;
4428 }
4429
4430 // get start and end parms
4431 if (prog->argc > 3)
4432 {
4433 strindex = (int)PRVM_G_FLOAT(OFS_PARM2);
4434 strnum = (int)PRVM_G_FLOAT(OFS_PARM3);
4435 }
4436 else if (prog->argc > 2)
4437 {
4438 strindex = (int)PRVM_G_FLOAT(OFS_PARM2);
4439 strnum = stringbuffer->num_strings - strindex;
4440 }
4441 else
4442 {
4443 strindex = 0;
4444 strnum = stringbuffer->num_strings;
4445 }
4446 if (strindex < 0 || strindex >= stringbuffer->num_strings)
4447 {
4448 VM_Warning(prog, "VM_buf_writefile: wrong start string index %i\n", strindex);
4450 return;
4451 }
4452 if (strnum < 0)
4453 {
4454 VM_Warning(prog, "VM_buf_writefile: wrong strings count %i\n", strnum);
4456 return;
4457 }
4458
4459 // write
4460 while(strindex < stringbuffer->num_strings && strnum)
4461 {
4462 if (stringbuffer->strings[strindex])
4463 {
4464 if ((strlength = (int)strlen(stringbuffer->strings[strindex])))
4465 FS_Write(prog->openfiles[filenum], stringbuffer->strings[strindex], strlength);
4466 FS_Write(prog->openfiles[filenum], "\n", 1);
4467 }
4468 strindex++;
4469 strnum--;
4470 }
4471
4473}
fs_offset_t FS_Write(qfile_t *file, const void *data, size_t datasize)
Definition fs.c:3019
#define OFS_PARM3
Definition pr_comp.h:37
#define PRVM_MAX_OPENFILES
Definition progsvm.h:251
void VM_buf_writefile(prvm_prog_t *prog)
Definition prvm_cmds.c:4401
struct qfile_s * openfiles[PRVM_MAX_OPENFILES]
Definition progsvm.h:636

References prvm_prog_t::argc, FS_Write(), int(), Mem_ExpandableArray_RecordAtIndex(), NULL, prvm_stringbuffer_t::num_strings, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_RETURN, prvm_prog_t::openfiles, PRVM_G_FLOAT, PRVM_MAX_OPENFILES, prvm_prog_t::stringbuffersarray, prvm_stringbuffer_t::strings, strlen(), VM_buf_writefile(), VM_SAFEPARMCOUNTRANGE, and VM_Warning().

Referenced by VM_buf_writefile().

◆ VM_bufstr_add()

void VM_bufstr_add ( prvm_prog_t * prog)

Definition at line 4235 of file prvm_cmds.c.

4236{
4237 int order, strindex;
4238 prvm_stringbuffer_t *stringbuffer;
4239 const char *string;
4240 size_t alloclen;
4241
4243
4246 if(!stringbuffer)
4247 {
4248 VM_Warning(prog, "VM_bufstr_add: invalid buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM0));
4249 return;
4250 }
4251 if(!PRVM_G_INT(OFS_PARM1)) // NULL string
4252 {
4253 VM_Warning(prog, "VM_bufstr_add: can not add an empty string to buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM0));
4254 return;
4255 }
4256 string = PRVM_G_STRING(OFS_PARM1);
4257 order = (int)PRVM_G_FLOAT(OFS_PARM2);
4258 if(order)
4259 strindex = stringbuffer->num_strings;
4260 else
4261 for (strindex = 0;strindex < stringbuffer->num_strings;strindex++)
4262 if (stringbuffer->strings[strindex] == NULL)
4263 break;
4264
4265 BufStr_Expand(prog, stringbuffer, strindex);
4266
4267 stringbuffer->num_strings = max(stringbuffer->num_strings, strindex + 1);
4268 alloclen = strlen(string) + 1;
4269 stringbuffer->strings[strindex] = (char *)Mem_Alloc(prog->progs_mempool, alloclen);
4270 memcpy(stringbuffer->strings[strindex], string, alloclen);
4271
4272 PRVM_G_FLOAT(OFS_RETURN) = strindex;
4273}
GLsizei const GLchar ** string
Definition glquake.h:728
void VM_bufstr_add(prvm_prog_t *prog)
Definition prvm_cmds.c:4235

References BufStr_Expand(), int(), max, Mem_Alloc, Mem_ExpandableArray_RecordAtIndex(), NULL, prvm_stringbuffer_t::num_strings, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, prvm_prog_t::progs_mempool, PRVM_G_FLOAT, PRVM_G_INT, PRVM_G_STRING, string, prvm_prog_t::stringbuffersarray, prvm_stringbuffer_t::strings, strlen(), VM_bufstr_add(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_bufstr_add().

◆ VM_bufstr_find()

void VM_bufstr_find ( prvm_prog_t * prog)

Definition at line 4564 of file prvm_cmds.c.

4565{
4566 prvm_stringbuffer_t *stringbuffer;
4567 char string[VM_TEMPSTRING_MAXSIZE];
4568 int matchrule, matchlen, i, step;
4569 const char *match;
4570
4572
4574
4575 // get string buffer
4577 if(!stringbuffer)
4578 {
4579 VM_Warning(prog, "VM_bufstr_find: invalid buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM0));
4580 return;
4581 }
4582
4583 // get pattern/rule
4584 matchrule = (int)PRVM_G_FLOAT(OFS_PARM2);
4585 if (matchrule < 0 || matchrule > 5)
4586 {
4587 VM_Warning(prog, "VM_bufstr_find: invalid match rule %i\n", matchrule);
4588 return;
4589 }
4590 if (matchrule)
4591 match = PRVM_G_STRING(OFS_PARM1);
4592 else
4593 {
4594 dp_strlcpy(string, PRVM_G_STRING(OFS_PARM1), sizeof(string));
4595 match = detect_match_rule(string, &matchrule);
4596 }
4597 matchlen = (int)strlen(match);
4598
4599 // find
4600 i = (prog->argc > 3) ? (int)PRVM_G_FLOAT(OFS_PARM3) : 0;
4601 step = (prog->argc > 4) ? (int)PRVM_G_FLOAT(OFS_PARM4) : 1;
4602 while(i < stringbuffer->num_strings)
4603 {
4604 if (stringbuffer->strings[i] && match_rule(stringbuffer->strings[i], VM_TEMPSTRING_MAXSIZE, match, matchlen, matchrule))
4605 {
4607 break;
4608 }
4609 i += step;
4610 }
4611}
#define OFS_PARM4
Definition pr_comp.h:38
static qbool match_rule(const char *string, int max_string, const char *pattern, int patternlength, int rule)
Definition prvm_cmds.c:4537
static const char * detect_match_rule(char *pattern, int *matchrule)
Definition prvm_cmds.c:4482
void VM_bufstr_find(prvm_prog_t *prog)
Definition prvm_cmds.c:4564

References prvm_prog_t::argc, detect_match_rule(), dp_strlcpy, i, int(), match_rule(), Mem_ExpandableArray_RecordAtIndex(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, prvm_prog_t::stringbuffersarray, prvm_stringbuffer_t::strings, strlen(), VM_bufstr_find(), VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, and VM_Warning().

Referenced by VM_bufstr_find().

◆ VM_bufstr_free()

void VM_bufstr_free ( prvm_prog_t * prog)

Definition at line 4282 of file prvm_cmds.c.

4283{
4284 int i;
4285 prvm_stringbuffer_t *stringbuffer;
4287
4289 if(!stringbuffer)
4290 {
4291 VM_Warning(prog, "VM_bufstr_free: invalid buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM0));
4292 return;
4293 }
4295 if(i < 0)
4296 {
4297 VM_Warning(prog, "VM_bufstr_free: invalid string index %i\n", i);
4298 return;
4299 }
4300
4301 if (i < stringbuffer->num_strings)
4302 {
4303 if(stringbuffer->strings[i])
4304 Mem_Free(stringbuffer->strings[i]);
4305 stringbuffer->strings[i] = NULL;
4306 }
4307
4308 BufStr_Shrink(prog, stringbuffer);
4309}
void VM_bufstr_free(prvm_prog_t *prog)
Definition prvm_cmds.c:4282

References BufStr_Shrink(), i, int(), Mem_ExpandableArray_RecordAtIndex(), Mem_Free, NULL, OFS_PARM0, OFS_PARM1, PRVM_G_FLOAT, prvm_prog_t::stringbuffersarray, prvm_stringbuffer_t::strings, VM_bufstr_free(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_bufstr_free().

◆ VM_bufstr_get()

void VM_bufstr_get ( prvm_prog_t * prog)

Definition at line 4172 of file prvm_cmds.c.

4173{
4174 prvm_stringbuffer_t *stringbuffer;
4175 int strindex;
4177
4180 if(!stringbuffer)
4181 {
4182 VM_Warning(prog, "VM_bufstr_get: invalid buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM0));
4183 return;
4184 }
4185 strindex = (int)PRVM_G_FLOAT(OFS_PARM1);
4186 if (strindex < 0)
4187 {
4188 // VM_Warning(prog, "VM_bufstr_get: invalid string index %i\n", strindex);
4189 return;
4190 }
4191 if (strindex < stringbuffer->num_strings && stringbuffer->strings[strindex])
4192 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, stringbuffer->strings[strindex], strlen(stringbuffer->strings[strindex]));
4193}
void VM_bufstr_get(prvm_prog_t *prog)
Definition prvm_cmds.c:4172

References int(), Mem_ExpandableArray_RecordAtIndex(), OFS_NULL, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_SetTempString(), prvm_prog_t::stringbuffersarray, prvm_stringbuffer_t::strings, strlen(), VM_bufstr_get(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_bufstr_get().

◆ VM_bufstr_set()

void VM_bufstr_set ( prvm_prog_t * prog)

Definition at line 4202 of file prvm_cmds.c.

4203{
4204 int strindex;
4205 prvm_stringbuffer_t *stringbuffer;
4206 const char *news;
4207
4209
4211 if(!stringbuffer)
4212 {
4213 VM_Warning(prog, "VM_bufstr_set: invalid buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM0));
4214 return;
4215 }
4216 strindex = (int)PRVM_G_FLOAT(OFS_PARM1);
4217 if(strindex < 0 || strindex >= 1000000) // huge number of strings
4218 {
4219 VM_Warning(prog, "VM_bufstr_set: invalid string index %i\n", strindex);
4220 return;
4221 }
4222
4223 news = PRVM_G_STRING(OFS_PARM2);
4224 BufStr_Set(prog, stringbuffer, strindex, news);
4225}
void BufStr_Set(prvm_prog_t *prog, prvm_stringbuffer_t *stringbuffer, int strindex, const char *str)
Definition prvm_cmds.c:3902
void VM_bufstr_set(prvm_prog_t *prog)
Definition prvm_cmds.c:4202

References BufStr_Set(), int(), Mem_ExpandableArray_RecordAtIndex(), OFS_PARM0, OFS_PARM1, OFS_PARM2, PRVM_G_FLOAT, PRVM_G_STRING, prvm_prog_t::stringbuffersarray, VM_bufstr_set(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_bufstr_set().

◆ VM_callfunction()

void VM_callfunction ( prvm_prog_t * prog)

Definition at line 5705 of file prvm_cmds.c.

5706{
5707 mfunction_t *func;
5708 const char *s;
5709
5711
5712 s = PRVM_G_STRING(OFS_PARM0+(prog->argc - 1)*3);
5713
5714 VM_CheckEmptyString(prog, s);
5715
5716 func = PRVM_ED_FindFunction(prog, s);
5717
5718 if(!func)
5719 prog->error_cmd("VM_callfunction: function %s not found !", s);
5720 else if (func->first_statement < 0)
5721 {
5722 // negative statements are built in functions
5723 int builtinnumber = -func->first_statement;
5724 prog->xfunction->builtinsprofile++;
5725 if (builtinnumber < prog->numbuiltins && prog->builtins[builtinnumber])
5726 prog->builtins[builtinnumber](prog);
5727 else
5728 prog->error_cmd("No such builtin #%i in %s; most likely cause: outdated engine build. Try updating!", builtinnumber, prog->name);
5729 }
5730 else if(func - prog->functions > 0)
5731 {
5732 prog->argc--;
5733 prog->ExecuteProgram(prog, func - prog->functions,"");
5734 prog->argc++;
5735 }
5736}
mfunction_t * PRVM_ED_FindFunction(prvm_prog_t *prog, const char *name)
Definition prvm_edict.c:425
void VM_CheckEmptyString(prvm_prog_t *prog, const char *s)
Definition prvm_cmds.c:62
void VM_callfunction(prvm_prog_t *prog)
Definition prvm_cmds.c:5705
int32_t first_statement
Definition pr_comp.h:444
double builtinsprofile
Definition pr_comp.h:452
prvm_builtin_t * builtins
Definition progsvm.h:604
mfunction_t * functions
Definition progsvm.h:541
mfunction_t * xfunction
Definition progsvm.h:620

References prvm_prog_t::argc, prvm_prog_t::builtins, mfunction_t::builtinsprofile, prvm_prog_t::error_cmd, prvm_prog_t::ExecuteProgram, mfunction_t::first_statement, prvm_prog_t::functions, prvm_prog_t::name, OFS_PARM0, PRVM_ED_FindFunction(), PRVM_G_STRING, VM_callfunction(), VM_CheckEmptyString(), VM_SAFEPARMCOUNTRANGE, and prvm_prog_t::xfunction.

Referenced by VM_callfunction().

◆ VM_ceil()

void VM_ceil ( prvm_prog_t * prog)

Definition at line 1541 of file prvm_cmds.c.

1542{
1544
1546}
float ceil(float f)
void VM_ceil(prvm_prog_t *prog)
Definition prvm_cmds.c:1541

References ceil(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, VM_ceil(), and VM_SAFEPARMCOUNT.

Referenced by VM_ceil().

◆ VM_centerprint()

void VM_centerprint ( prvm_prog_t * prog)

Definition at line 499 of file prvm_cmds.c.

500{
501 char string[VM_TEMPSTRING_MAXSIZE];
502
504 VM_VarString(prog, 0, string, sizeof(string));
505 SCR_CenterPrint(string);
506}
void SCR_CenterPrint(const char *str)
Definition cl_screen.c:144
void VM_centerprint(prvm_prog_t *prog)
Definition prvm_cmds.c:499

References SCR_CenterPrint(), VM_centerprint(), VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_centerprint().

◆ VM_changelevel()

void VM_changelevel ( prvm_prog_t * prog)

Definition at line 1592 of file prvm_cmds.c.

1593{
1594 char vabuf[1024];
1596
1597 if(!sv.active)
1598 {
1599 VM_Warning(prog, "VM_changelevel: server is not active!\n");
1600 return;
1601 }
1602
1603// make sure we don't issue two changelevels
1605 return;
1606 svs.changelevel_issued = true;
1607
1608 Cbuf_AddText(cmd_local, va(vabuf, sizeof(vabuf), "changelevel %s\n", PRVM_G_STRING(OFS_PARM0)));
1609}
void Cbuf_AddText(cmd_state_t *cmd, const char *text)
Definition cmd.c:264
cmd_state_t * cmd_local
command interpreter for local commands injected by SVQC, CSQC, MQC, server or client engine code uses...
Definition cmd.c:25
void VM_changelevel(prvm_prog_t *prog)
Definition prvm_cmds.c:1592
server_static_t svs
persistant server info
Definition sv_main.c:224
qbool changelevel_issued
cleared when at SV_SpawnServer
Definition server.h:34

References server_t::active, Cbuf_AddText(), server_static_t::changelevel_issued, cmd_local, OFS_PARM0, PRVM_G_STRING, sv, svs, va(), VM_changelevel(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_changelevel().

◆ VM_changepitch()

void VM_changepitch ( prvm_prog_t * prog)

Definition at line 4805 of file prvm_cmds.c.

4806{
4807 prvm_edict_t *ent;
4808 float ideal, current, move, speed;
4809
4811
4812 ent = PRVM_G_EDICT(OFS_PARM0);
4813 if (ent == prog->edicts)
4814 {
4815 VM_Warning(prog, "changepitch: can not modify world entity\n");
4816 return;
4817 }
4818 if (ent->free)
4819 {
4820 VM_Warning(prog, "changepitch: can not modify free entity\n");
4821 return;
4822 }
4823 current = PRVM_gameedictvector(ent, angles)[0];
4824 current = ANGLEMOD(current);
4825 ideal = PRVM_gameedictfloat(ent, idealpitch);
4826 speed = PRVM_gameedictfloat(ent, pitch_speed);
4827
4828 if (current == ideal)
4829 return;
4830 move = ideal - current;
4831 if (ideal > current)
4832 {
4833 if (move >= 180)
4834 move = move - 360;
4835 }
4836 else
4837 {
4838 if (move <= -180)
4839 move = move + 360;
4840 }
4841 if (move > 0)
4842 {
4843 if (move > speed)
4844 move = speed;
4845 }
4846 else
4847 {
4848 if (move < -speed)
4849 move = -speed;
4850 }
4851
4852 current += move;
4853 PRVM_gameedictvector(ent, angles)[0] = ANGLEMOD(current);
4854}
vector angles
float idealpitch
float pitch_speed
#define ANGLEMOD(a)
Definition mathlib.h:67
#define PRVM_gameedictvector(ed, fieldname)
Definition progsvm.h:161
#define PRVM_gameedictfloat(ed, fieldname)
Definition progsvm.h:160
#define PRVM_G_EDICT(o)
Definition progsvm.h:884
void VM_changepitch(prvm_prog_t *prog)
Definition prvm_cmds.c:4805
qbool free
true if this edict is unused
Definition progsvm.h:93
prvm_edict_t * edicts
Definition progsvm.h:680

References ANGLEMOD, angles, prvm_prog_t::edicts, prvm_edict_t::free, idealpitch, OFS_PARM0, pitch_speed, PRVM_G_EDICT, PRVM_gameedictfloat, PRVM_gameedictvector, VM_changepitch(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_changepitch().

◆ VM_changeyaw()

void VM_changeyaw ( prvm_prog_t * prog)

Definition at line 4747 of file prvm_cmds.c.

4748{
4749 prvm_edict_t *ent;
4750 float ideal, current, move, speed;
4751
4752 // this is called (VERY HACKISHLY) by VM_SV_MoveToGoal, so it can not use any
4753 // parameters because they are the parameters to VM_SV_MoveToGoal, not this
4754 //VM_SAFEPARMCOUNT(0, VM_changeyaw);
4755
4757 if (ent == prog->edicts)
4758 {
4759 VM_Warning(prog, "changeyaw: can not modify world entity\n");
4760 return;
4761 }
4762 if (ent->free)
4763 {
4764 VM_Warning(prog, "changeyaw: can not modify free entity\n");
4765 return;
4766 }
4767 current = PRVM_gameedictvector(ent, angles)[1];
4768 current = ANGLEMOD(current);
4769 ideal = PRVM_gameedictfloat(ent, ideal_yaw);
4770 speed = PRVM_gameedictfloat(ent, yaw_speed);
4771
4772 if (current == ideal)
4773 return;
4774 move = ideal - current;
4775 if (ideal > current)
4776 {
4777 if (move >= 180)
4778 move = move - 360;
4779 }
4780 else
4781 {
4782 if (move <= -180)
4783 move = move + 360;
4784 }
4785 if (move > 0)
4786 {
4787 if (move > speed)
4788 move = speed;
4789 }
4790 else
4791 {
4792 if (move < -speed)
4793 move = -speed;
4794 }
4795
4796 current += move;
4797 PRVM_gameedictvector(ent, angles)[1] = ANGLEMOD(current);
4798}
float ideal_yaw
Definition progsdefs.qc:184
float yaw_speed
Definition progsdefs.qc:185
#define PRVM_PROG_TO_EDICT(n)
Definition progsvm.h:877

References ANGLEMOD, angles, prvm_prog_t::edicts, prvm_edict_t::free, ideal_yaw, PRVM_gameedictfloat, PRVM_gameedictvector, PRVM_gameglobaledict, PRVM_PROG_TO_EDICT, self, VM_Warning(), and yaw_speed.

Referenced by SV_StepDirection().

◆ VM_CheckEmptyString()

◆ VM_checkextension()

void VM_checkextension ( prvm_prog_t * prog)

Definition at line 363 of file prvm_cmds.c.

364{
366
368}
static qbool checkextension(prvm_prog_t *prog, const char *name)
Definition prvm_cmds.c:323
void VM_checkextension(prvm_prog_t *prog)
Definition prvm_cmds.c:363

References checkextension(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, VM_checkextension(), and VM_SAFEPARMCOUNT.

Referenced by VM_checkextension().

◆ VM_chr()

void VM_chr ( prvm_prog_t * prog)

Definition at line 3303 of file prvm_cmds.c.

3304{
3305 /*
3306 char tmp[2];
3307 VM_SAFEPARMCOUNT(1, VM_chr);
3308
3309 tmp[0] = (unsigned char) PRVM_G_FLOAT(OFS_PARM0);
3310 tmp[1] = 0;
3311
3312 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, tmp);
3313 */
3314
3315 char tmp[8];
3316 int len;
3317
3319 len = u8_fromchar((Uchar)PRVM_G_FLOAT(OFS_PARM0), tmp, sizeof(tmp));
3320 tmp[len] = '\0';
3321 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, tmp, len);
3322}
void VM_chr(prvm_prog_t *prog)
Definition prvm_cmds.c:3303
int u8_fromchar(Uchar w, char *to, size_t maxlen)
Encode a wide-character into utf-8.
Definition utf8lib.c:628
int32_t Uchar
Definition utf8lib.h:35

References OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_SetTempString(), u8_fromchar(), VM_chr(), and VM_SAFEPARMCOUNT.

Referenced by VM_chr().

◆ VM_chr2str()

void VM_chr2str ( prvm_prog_t * prog)

Definition at line 4918 of file prvm_cmds.c.

4919{
4920 /*
4921 char t[9];
4922 int i;
4923 VM_SAFEPARMCOUNTRANGE(0, 8, VM_chr2str);
4924 for(i = 0;i < prog->argc && i < (int)sizeof(t) - 1;i++)
4925 t[i] = (unsigned char)PRVM_G_FLOAT(OFS_PARM0+i*3);
4926 t[i] = 0;
4927 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, t);
4928 */
4929 char t[9 * 4 + 1];
4930 int i;
4931 size_t len = 0;
4932
4934 for(i = 0; i < prog->argc && len < sizeof(t)-1; ++i)
4935 len += u8_fromchar((Uchar)PRVM_G_FLOAT(OFS_PARM0+i*3), t + len, sizeof(t)-1);
4936 t[len] = '\0';
4937 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, t, len);
4938}
void VM_chr2str(prvm_prog_t *prog)
Definition prvm_cmds.c:4918

References prvm_prog_t::argc, i, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_SetTempString(), u8_fromchar(), VM_chr2str(), and VM_SAFEPARMCOUNTRANGE.

Referenced by VM_chr2str().

◆ VM_cin_close()

void VM_cin_close ( prvm_prog_t * prog)

Definition at line 982 of file mvm_cmds.c.

983{
984 const char *name;
985
987
990
992}
clvideo_t * CL_GetVideoByName(const char *name)
Definition cl_video.c:284
void CL_CloseVideo(clvideo_t *video)
Definition cl_video.c:327
const GLchar * name
Definition glquake.h:601
void VM_cin_close(prvm_prog_t *prog)
Definition mvm_cmds.c:982

References CL_CloseVideo(), CL_GetVideoByName(), name, OFS_PARM0, PRVM_G_STRING, VM_CheckEmptyString(), VM_cin_close(), and VM_SAFEPARMCOUNT.

Referenced by VM_cin_close().

◆ VM_cin_getstate()

void VM_cin_getstate ( prvm_prog_t * prog)

Definition at line 1025 of file mvm_cmds.c.

1026{
1027 const char *name;
1028 clvideo_t *video;
1029
1031
1033 VM_CheckEmptyString(prog, name );
1034
1035 video = CL_GetVideoByName( name );
1036 if( video )
1037 PRVM_G_FLOAT( OFS_RETURN ) = (int)video->state;
1038 else
1039 PRVM_G_FLOAT( OFS_RETURN ) = 0;
1040}
void VM_cin_getstate(prvm_prog_t *prog)
Definition mvm_cmds.c:1025
clvideostate_t state
Definition cl_video.h:38

References CL_GetVideoByName(), int(), name, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, clvideo_t::state, VM_CheckEmptyString(), VM_cin_getstate(), and VM_SAFEPARMCOUNT.

Referenced by VM_cin_getstate().

◆ VM_cin_open()

void VM_cin_open ( prvm_prog_t * prog)

Definition at line 956 of file mvm_cmds.c.

957{
958 const char *file;
959 const char *name;
960
962
963 file = PRVM_G_STRING( OFS_PARM0 );
965
966 VM_CheckEmptyString(prog, file );
968
969 if( CL_OpenVideo( file, name, MENUOWNER, "" ) )
971 else
973}
clvideo_t * CL_OpenVideo(const char *filename, const char *name, int owner, const char *subtitlesfile)
Definition cl_video.c:245
#define MENUOWNER
Definition cl_video.h:11
void VM_cin_open(prvm_prog_t *prog)
Definition mvm_cmds.c:956

References CL_OpenVideo(), MENUOWNER, name, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, VM_CheckEmptyString(), VM_cin_open(), and VM_SAFEPARMCOUNT.

Referenced by VM_cin_open().

◆ VM_cin_restart()

void VM_cin_restart ( prvm_prog_t * prog)

Definition at line 1049 of file mvm_cmds.c.

1050{
1051 const char *name;
1052 clvideo_t *video;
1053
1055
1057 VM_CheckEmptyString(prog, name );
1058
1059 video = CL_GetVideoByName( name );
1060 if( video )
1061 CL_RestartVideo( video );
1062}
void CL_RestartVideo(clvideo_t *video)
Definition cl_video.c:309
void VM_cin_restart(prvm_prog_t *prog)
Definition mvm_cmds.c:1049

References CL_GetVideoByName(), CL_RestartVideo(), name, OFS_PARM0, PRVM_G_STRING, VM_CheckEmptyString(), VM_cin_restart(), and VM_SAFEPARMCOUNT.

Referenced by VM_cin_restart().

◆ VM_cin_setstate()

void VM_cin_setstate ( prvm_prog_t * prog)

Definition at line 1000 of file mvm_cmds.c.

1001{
1002 const char *name;
1003 clvideostate_t state;
1004 clvideo_t *video;
1005
1007
1009 VM_CheckEmptyString(prog, name );
1010
1011 state = (clvideostate_t)((int)PRVM_G_FLOAT( OFS_PARM1 ));
1012
1013 video = CL_GetVideoByName( name );
1014 if( video && state > CLVIDEO_UNUSED && state < CLVIDEO_STATECOUNT )
1015 CL_SetVideoState( video, state );
1016}
void CL_SetVideoState(clvideo_t *video, clvideostate_t state)
Definition cl_video.c:298
clvideostate_t
Definition cl_video.h:14
@ CLVIDEO_STATECOUNT
Definition cl_video.h:21
@ CLVIDEO_UNUSED
Definition cl_video.h:15
void VM_cin_setstate(prvm_prog_t *prog)
Definition mvm_cmds.c:1000

References CL_GetVideoByName(), CL_SetVideoState(), CLVIDEO_STATECOUNT, CLVIDEO_UNUSED, name, OFS_PARM0, OFS_PARM1, PRVM_G_FLOAT, PRVM_G_STRING, VM_CheckEmptyString(), VM_cin_setstate(), and VM_SAFEPARMCOUNT.

Referenced by VM_cin_setstate().

◆ VM_CL_getextresponse()

void VM_CL_getextresponse ( prvm_prog_t * prog)

Definition at line 5612 of file prvm_cmds.c.

5613{
5615
5616 if (cl_net_extresponse_count <= 0)
5618 else
5619 {
5620 int first;
5624 }
5625}
GLint first
Definition glquake.h:671
unsigned cl_net_extresponse_last
Definition netconn.c:162
unsigned cl_net_extresponse_count
Definition netconn.c:161
char cl_net_extresponse[NET_EXTRESPONSE_MAX][1400]
Definition netconn.c:160
#define NET_EXTRESPONSE_MAX
Definition netconn.h:48

References cl_net_extresponse, cl_net_extresponse_count, cl_net_extresponse_last, first, NET_EXTRESPONSE_MAX, OFS_NULL, OFS_RETURN, PRVM_G_INT, PRVM_SetTempString(), strlen(), VM_argv(), and VM_SAFEPARMCOUNT.

◆ VM_CL_isdemo()

void VM_CL_isdemo ( prvm_prog_t * prog)

Definition at line 5684 of file prvm_cmds.c.

5685{
5688}
client_static_t cls
Definition cl_main.c:116
void VM_CL_isdemo(prvm_prog_t *prog)
Definition prvm_cmds.c:5684
qbool demoplayback
Definition client.h:587

References cls, client_static_t::demoplayback, OFS_RETURN, PRVM_G_FLOAT, VM_CL_isdemo(), and VM_SAFEPARMCOUNT.

Referenced by VM_CL_isdemo().

◆ VM_CL_videoplaying()

void VM_CL_videoplaying ( prvm_prog_t * prog)

Definition at line 5691 of file prvm_cmds.c.

5692{
5695}
int cl_videoplaying
Definition cl_video.c:458
void VM_CL_videoplaying(prvm_prog_t *prog)
Definition prvm_cmds.c:5691

References cl_videoplaying, OFS_RETURN, PRVM_G_FLOAT, VM_CL_videoplaying(), and VM_SAFEPARMCOUNT.

Referenced by VM_CL_videoplaying().

◆ VM_ClearTraceGlobals()

void VM_ClearTraceGlobals ( prvm_prog_t * prog)

Definition at line 5245 of file prvm_cmds.c.

5246{
5247 // clean up all trace globals when leaving the VM (anti-triggerbot safeguard)
5261}
float trace_dphitcontents
entity trace_ent
float trace_dpstartcontents
string trace_dphittexturename
vector trace_endpos
float trace_startsolid
float trace_inopen
float trace_dphitq3surfaceflags
float trace_fraction
float trace_allsolid
vector trace_plane_normal
float trace_plane_dist
float trace_inwater
#define VectorClear(a)
Definition mathlib.h:97
#define PRVM_gameglobalvector(fieldname)
Definition progsvm.h:166
#define PRVM_gameglobalstring(fieldname)
Definition progsvm.h:167

References prvm_prog_t::edicts, PRVM_EDICT_TO_PROG, PRVM_gameglobaledict, PRVM_gameglobalfloat, PRVM_gameglobalstring, PRVM_gameglobalvector, trace_allsolid, trace_dphitcontents, trace_dphitq3surfaceflags, trace_dphittexturename, trace_dpstartcontents, trace_endpos, trace_ent, trace_fraction, trace_inopen, trace_inwater, trace_plane_dist, trace_plane_normal, trace_startsolid, and VectorClear.

Referenced by CL_VM_PreventInformationLeaks().

◆ VM_clientcount()

void VM_clientcount ( prvm_prog_t * prog)

Definition at line 2878 of file prvm_cmds.c.

2879{
2881
2883}
void VM_clientcount(prvm_prog_t *prog)
Definition prvm_cmds.c:2878
int maxclients
number of svs.clients slots (updated by maxplayers command)
Definition server.h:28

References server_static_t::maxclients, OFS_RETURN, PRVM_G_FLOAT, svs, VM_clientcount(), and VM_SAFEPARMCOUNT.

Referenced by VM_clientcount().

◆ VM_clientstate()

void VM_clientstate ( prvm_prog_t * prog)

Definition at line 2892 of file prvm_cmds.c.

2893{
2895
2896
2897 switch( cls.state ) {
2898 case ca_uninitialized:
2899 case ca_dedicated:
2901 break;
2902 case ca_disconnected:
2904 break;
2905 case ca_connected:
2907 break;
2908 default:
2909 // should never be reached!
2910 break;
2911 }
2912}
@ ca_dedicated
Definition client.h:530
@ ca_connected
Definition client.h:532
@ ca_uninitialized
Definition client.h:529
@ ca_disconnected
Definition client.h:531
void VM_clientstate(prvm_prog_t *prog)
Definition prvm_cmds.c:2892
cactive_t state
Definition client.h:568

References ca_connected, ca_dedicated, ca_disconnected, ca_uninitialized, cls, OFS_RETURN, PRVM_G_FLOAT, client_static_t::state, VM_clientstate(), and VM_SAFEPARMCOUNT.

Referenced by VM_clientstate().

◆ VM_coredump()

void VM_coredump ( prvm_prog_t * prog)

Definition at line 1421 of file prvm_cmds.c.

1422{
1424
1425 Cbuf_AddText(cmd_local, "prvm_edicts ");
1426 Cbuf_AddText(cmd_local, prog->name);
1427 Cbuf_AddText(cmd_local, "\n");
1428}
void VM_coredump(prvm_prog_t *prog)
Definition prvm_cmds.c:1421

References Cbuf_AddText(), cmd_local, prvm_prog_t::name, VM_coredump(), and VM_SAFEPARMCOUNT.

Referenced by VM_coredump().

◆ VM_cos()

void VM_cos ( prvm_prog_t * prog)

Definition at line 1630 of file prvm_cmds.c.

1631{
1634}
float cos(float f)
void VM_cos(prvm_prog_t *prog)
Definition prvm_cmds.c:1630

References cos(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, VM_cos(), and VM_SAFEPARMCOUNT.

Referenced by VM_cos().

◆ VM_coverage()

void VM_coverage ( prvm_prog_t * prog)

Definition at line 6641 of file prvm_cmds.c.

6642{
6644 if (prog->explicit_profile[prog->xstatement]++ == 0 && (prvm_coverage.integer & 2))
6646}
void PRVM_ExplicitCoverageEvent(prvm_prog_t *prog, mfunction_t *func, int statement)
Definition prvm_exec.c:924
cvar_t prvm_coverage
Definition prvm_edict.c:39
void VM_coverage(prvm_prog_t *prog)
Definition prvm_cmds.c:6641
double * explicit_profile
only incremented if prvm_statementprofiling is on
Definition progsvm.h:575
int xstatement
Definition progsvm.h:621

References prvm_prog_t::explicit_profile, cvar_t::integer, prvm_coverage, PRVM_ExplicitCoverageEvent(), VM_coverage(), VM_SAFEPARMCOUNT, prvm_prog_t::xfunction, and prvm_prog_t::xstatement.

Referenced by VM_coverage().

◆ VM_crash()

void VM_crash ( prvm_prog_t * prog)

Definition at line 1452 of file prvm_cmds.c.

1453{
1455
1456 prog->error_cmd("Crash called by %s",prog->name);
1457}
void VM_crash(prvm_prog_t *prog)
Definition prvm_cmds.c:1452

References prvm_prog_t::error_cmd, prvm_prog_t::name, VM_crash(), and VM_SAFEPARMCOUNT.

Referenced by VM_crash().

◆ VM_crc16()

void VM_crc16 ( prvm_prog_t * prog)

Definition at line 5162 of file prvm_cmds.c.

5163{
5164 float insensitive;
5165 char s[VM_TEMPSTRING_MAXSIZE];
5166 size_t slen;
5167
5169 insensitive = PRVM_G_FLOAT(OFS_PARM0);
5170 slen = VM_VarString(prog, 1, s, sizeof(s));
5171 PRVM_G_FLOAT(OFS_RETURN) = (unsigned short) ((insensitive ? CRC_Block_CaseInsensitive : CRC_Block) ((unsigned char *) s, slen));
5172}
unsigned short CRC_Block(const unsigned char *data, size_t size)
Definition com_crc16.c:75
unsigned short CRC_Block_CaseInsensitive(const unsigned char *data, size_t size)
Definition com_crc16.c:83
void VM_crc16(prvm_prog_t *prog)
Definition prvm_cmds.c:5162

References CRC_Block(), CRC_Block_CaseInsensitive(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, VM_crc16(), VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_crc16().

◆ VM_cvar()

void VM_cvar ( prvm_prog_t * prog)

Definition at line 700 of file prvm_cmds.c.

701{
702 char string[VM_TEMPSTRING_MAXSIZE];
704 VM_VarString(prog, 0, string, sizeof(string));
705 VM_CheckEmptyString(prog, string);
706 PRVM_G_FLOAT(OFS_RETURN) = PRVM_Cvar_ReadOk(prog, string) ? Cvar_VariableValue(prog->console_cmd->cvars, string, prog->console_cmd->cvars_flagsmask) : 0;
707}
float Cvar_VariableValue(cvar_state_t *cvars, const char *var_name, unsigned neededflags)
Definition cvar.c:129
static qbool PRVM_Cvar_ReadOk(prvm_prog_t *prog, const char *string)
Definition prvm_cmds.c:686
void VM_cvar(prvm_prog_t *prog)
Definition prvm_cmds.c:700

References prvm_prog_t::console_cmd, Cvar_VariableValue(), OFS_RETURN, PRVM_Cvar_ReadOk(), PRVM_G_FLOAT, VM_CheckEmptyString(), VM_cvar(), VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_cvar().

◆ VM_cvar_defstring()

void VM_cvar_defstring ( prvm_prog_t * prog)

Definition at line 786 of file prvm_cmds.c.

787{
788 char cvar_name[VM_TEMPSTRING_MAXSIZE];
789 const char *cvar_defstring;
790
792 VM_VarString(prog, 0, cvar_name, sizeof(cvar_name));
793 VM_CheckEmptyString(prog, cvar_name);
794 cvar_defstring = Cvar_VariableDefString(prog->console_cmd->cvars, cvar_name, prog->console_cmd->cvars_flagsmask);
796}
const char * Cvar_VariableDefString(cvar_state_t *cvars, const char *var_name, unsigned neededflags)
Definition cvar.c:159
const string cvar_defstring(string name)
void VM_cvar_defstring(prvm_prog_t *prog)
Definition prvm_cmds.c:786

References prvm_prog_t::console_cmd, cvar_defstring(), Cvar_VariableDefString(), OFS_RETURN, PRVM_G_INT, PRVM_SetTempString(), strlen(), VM_CheckEmptyString(), VM_cvar_defstring(), VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_cvar_defstring().

◆ VM_cvar_description()

void VM_cvar_description ( prvm_prog_t * prog)

Definition at line 805 of file prvm_cmds.c.

806{
807 char cvar_name[VM_TEMPSTRING_MAXSIZE];
808 const char *cvar_desc;
809
811 VM_VarString(prog, 0, cvar_name, sizeof(cvar_name));
812 VM_CheckEmptyString(prog, cvar_name);
813 cvar_desc = Cvar_VariableDescription(prog->console_cmd->cvars, cvar_name, prog->console_cmd->cvars_flagsmask);
814 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, cvar_desc, strlen(cvar_desc));
815}
const char * Cvar_VariableDescription(cvar_state_t *cvars, const char *var_name, unsigned neededflags)
Definition cvar.c:174
void VM_cvar_description(prvm_prog_t *prog)
Definition prvm_cmds.c:805

References prvm_prog_t::console_cmd, Cvar_VariableDescription(), OFS_RETURN, PRVM_G_INT, PRVM_SetTempString(), strlen(), VM_CheckEmptyString(), VM_cvar_description(), VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_cvar_description().

◆ VM_cvar_set()

void VM_cvar_set ( prvm_prog_t * prog)

Definition at line 823 of file prvm_cmds.c.

824{
825 const char *name;
827 cvar_t *cvar;
828
832 cvar = Cvar_FindVar(prog->console_cmd->cvars, name, prog->console_cmd->cvars_flagsmask);
833 if (!cvar)
834 {
835 VM_Warning(prog, "VM_cvar_set: variable %s not found\n", name);
836 return;
837 }
838 if (cvar->flags & CF_READONLY)
839 {
840 VM_Warning(prog, "VM_cvar_set: variable %s is read-only\n", cvar->name);
841 return;
842 }
843 VM_VarString(prog, 1, value, sizeof(value));
845}
#define CF_READONLY
cvar cannot be changed from the console or the command buffer, and is considered CF_PERSISTENT
Definition cmd.h:54
void Cvar_SetQuick(cvar_t *var, const char *value)
Definition cvar.c:436
cvar_t * Cvar_FindVar(cvar_state_t *cvars, const char *var_name, unsigned neededflags)
Definition cvar.c:36
GLsizei const GLfloat * value
Definition glquake.h:740
void VM_cvar_set(prvm_prog_t *prog)
Definition prvm_cmds.c:823

References CF_READONLY, prvm_prog_t::console_cmd, cvar(), Cvar_FindVar(), Cvar_SetQuick(), name, OFS_PARM0, PRVM_G_STRING, value, VM_CheckEmptyString(), VM_cvar_set(), VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, VM_VarString(), and VM_Warning().

Referenced by VM_cvar_set().

◆ VM_cvar_string()

void VM_cvar_string ( prvm_prog_t * prog)

Definition at line 762 of file prvm_cmds.c.

763{
764 char cvar_name[VM_TEMPSTRING_MAXSIZE];
765
767 VM_VarString(prog, 0, cvar_name, sizeof(cvar_name));
768 VM_CheckEmptyString(prog, cvar_name);
769 if (PRVM_Cvar_ReadOk(prog, cvar_name))
770 {
771 const char *cvar_string = Cvar_VariableString(prog->console_cmd->cvars, cvar_name, prog->console_cmd->cvars_flagsmask);
773 }
774 else
776}
const char * Cvar_VariableString(cvar_state_t *cvars, const char *var_name, unsigned neededflags)
Definition cvar.c:149
const string cvar_string(string name)
void VM_cvar_string(prvm_prog_t *prog)
Definition prvm_cmds.c:762

References prvm_prog_t::console_cmd, cvar_string(), Cvar_VariableString(), OFS_RETURN, PRVM_Cvar_ReadOk(), PRVM_G_INT, PRVM_SetTempString(), strlen(), VM_CheckEmptyString(), VM_cvar_string(), VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_cvar_string().

◆ VM_cvar_type()

void VM_cvar_type ( prvm_prog_t * prog)

Definition at line 722 of file prvm_cmds.c.

723{
724 char string[VM_TEMPSTRING_MAXSIZE];
725 cvar_t *cvar;
726 int ret;
727
729 VM_VarString(prog, 0, string, sizeof(string));
730 VM_CheckEmptyString(prog, string);
731 cvar = Cvar_FindVar(prog->console_cmd->cvars, string, prog->console_cmd->cvars_flagsmask);
732
733
734 if(!cvar)
735 {
737 return; // CVAR_TYPE_NONE
738 }
739
740 ret = 1; // CVAR_EXISTS
741 if(cvar->flags & CF_ARCHIVE)
742 ret |= 2; // CVAR_TYPE_SAVED
743 if(cvar->flags & CF_PRIVATE)
744 ret |= 4; // CVAR_TYPE_PRIVATE
745 if(!(cvar->flags & CF_ALLOCATED))
746 ret |= 8; // CVAR_TYPE_ENGINE
747 if(cvar->description != cvar_dummy_description)
748 ret |= 16; // CVAR_TYPE_HASDESCRIPTION
749 if(cvar->flags & CF_READONLY)
750 ret |= 32; // CVAR_TYPE_READONLY
751
753}
#define CF_ALLOCATED
created by Cvar_Get() (console or QC)
Definition cmd.h:64
#define CF_ARCHIVE
cvar should have its set value saved to config.cfg and persist across sessions
Definition cmd.h:53
#define CF_PRIVATE
cvar should not be $ expanded or sent to the server under any circumstances (rcon_password,...
Definition cmd.h:59
const char * cvar_dummy_description
Definition cvar.c:25
void VM_cvar_type(prvm_prog_t *prog)
Definition prvm_cmds.c:722
return ret

References CF_ALLOCATED, CF_ARCHIVE, CF_PRIVATE, CF_READONLY, prvm_prog_t::console_cmd, cvar(), cvar_dummy_description, Cvar_FindVar(), OFS_RETURN, PRVM_G_FLOAT, ret, VM_CheckEmptyString(), VM_cvar_type(), VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_cvar_type().

◆ VM_digest_hex()

void VM_digest_hex ( prvm_prog_t * prog)

Definition at line 5175 of file prvm_cmds.c.

5176{
5177 const char *digest;
5178
5179 char out[32];
5180 char outhex[65];
5181 int outlen;
5182
5183 char s[VM_TEMPSTRING_MAXSIZE];
5184 size_t len;
5185
5187 digest = PRVM_G_STRING(OFS_PARM0);
5188 if(!digest)
5189 digest = "";
5190 len = VM_VarString(prog, 1, s, sizeof(s));
5191
5192 outlen = 0;
5193
5194 if(!strcmp(digest, "MD4"))
5195 {
5196 outlen = 16;
5197 mdfour((unsigned char *) out, (unsigned char *) s, len);
5198 }
5199 else if(!strcmp(digest, "SHA256") && Crypto_Available())
5200 {
5201 outlen = 32;
5202 sha256((unsigned char *) out, (unsigned char *) s, len);
5203 }
5204 // no warning needed on mismatch - we return string_null to QC
5205
5206 if(outlen)
5207 {
5208 int i;
5209 static const char *hexmap = "0123456789abcdef";
5210 for(i = 0; i < outlen; ++i)
5211 {
5212 outhex[2*i] = hexmap[(out[i] >> 4) & 15];
5213 outhex[2*i+1] = hexmap[(out[i] >> 0) & 15];
5214 }
5215 outhex[2*i] = '\0';
5216 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, outhex, 2*i);
5217 }
5218 else
5220}
void sha256(unsigned char *out, const unsigned char *in, int n)
Definition crypto.c:383
qbool Crypto_Available(void)
Definition crypto.c:1097
void mdfour(unsigned char *out, const unsigned char *in, int n)
Definition mdfour.c:182
void VM_digest_hex(prvm_prog_t *prog)
Definition prvm_cmds.c:5175

References Crypto_Available(), i, mdfour(), OFS_PARM0, OFS_RETURN, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), sha256(), VM_digest_hex(), VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_digest_hex().

◆ VM_dprint()

void VM_dprint ( prvm_prog_t * prog)

Definition at line 854 of file prvm_cmds.c.

855{
856 char string[VM_TEMPSTRING_MAXSIZE];
858 VM_VarString(prog, 0, string, sizeof(string));
859#if 1
860 Con_DPrintf("%s", string);
861#else
862 Con_DPrintf("%s: %s", prog->name, string);
863#endif
864}
void Con_DPrintf(const char *fmt,...)
A Con_Printf that only shows up if the "developer" cvar is set.
Definition console.c:1544
void VM_dprint(prvm_prog_t *prog)
Definition prvm_cmds.c:854

References Con_DPrintf(), prvm_prog_t::name, VM_dprint(), VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_dprint().

◆ VM_drawcharacter()

void VM_drawcharacter ( prvm_prog_t * prog)

Definition at line 1378 of file clvm_cmds.c.

1379{
1380 prvm_vec_t *pos,*scale,*rgb;
1381 char character;
1382 int flag;
1383 float sx, sy;
1385
1386 // polygonbegin without draw2d arg has to guess
1387 prog->polygonbegin_guess2d = true;
1388
1389 character = (char) PRVM_G_FLOAT(OFS_PARM1);
1390 if(character == 0)
1391 {
1393 VM_Warning(prog, "VM_drawcharacter: null character passed!\n");
1394 return;
1395 }
1396
1397 pos = PRVM_G_VECTOR(OFS_PARM0);
1400 flag = (int)PRVM_G_FLOAT(OFS_PARM5);
1401
1402 if(flag < DRAWFLAG_NORMAL || flag >=DRAWFLAG_NUMFLAGS)
1403 {
1405 VM_Warning(prog, "VM_drawcharacter: wrong DRAWFLAG %i !\n", flag);
1406 return;
1407 }
1408
1409 if(pos[2] || scale[2])
1410 VM_Warning(prog, "VM_drawcharacter: z value%c from %s discarded\n",(pos[2] && scale[2]) ? 's' : 0,((pos[2] && scale[2]) ? "pos and scale" : (pos[2] ? "pos" : "scale")));
1411
1412 if(!scale[0] || !scale[1])
1413 {
1415 VM_Warning(prog, "VM_drawcharacter: scale %s is null !\n", (scale[0] == 0) ? ((scale[1] == 0) ? "x and y" : "x") : "y");
1416 return;
1417 }
1418
1419 getdrawfontscale(prog, &sx, &sy);
1420 DrawQ_String_Scale(pos[0], pos[1], &character, 1, scale[0], scale[1], sx, sy, rgb[0], rgb[1], rgb[2], PRVM_G_FLOAT(OFS_PARM4), flag, NULL, true, getdrawfont(prog));
1422}
static dp_font_t * getdrawfont(prvm_prog_t *prog)
Definition clvm_cmds.c:1363
static void getdrawfontscale(prvm_prog_t *prog, float *sx, float *sy)
Definition clvm_cmds.c:1351
void VM_drawcharacter(prvm_prog_t *prog)
Definition clvm_cmds.c:1378
float scale
float DrawQ_String_Scale(float x, float y, const char *text, size_t maxlen, float sizex, float sizey, float scalex, float scaley, float basered, float basegreen, float baseblue, float basealpha, int flags, int *outcolor, qbool ignorecolorcodes, const dp_font_t *fnt)
Definition gl_draw.c:1085
@ DRAWFLAG_NUMFLAGS
Definition draw.h:79
#define OFS_PARM5
Definition pr_comp.h:39
void VM_Warning(prvm_prog_t *prog, const char *fmt,...) DP_FUNC_PRINTF(2)
Definition prvm_cmds.c:25
#define PRVM_G_VECTOR(o)
Definition progsvm.h:886
dp_FragColor rgb
qbool polygonbegin_guess2d
indicates if polygonbegin should be interpreted as 2d (clearscene sets this to false,...
Definition progsvm.h:661

References DRAWFLAG_NUMFLAGS, DrawQ_String_Scale(), getdrawfont(), getdrawfontscale(), int(), NULL, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_PARM5, OFS_RETURN, prvm_prog_t::polygonbegin_guess2d, PRVM_G_FLOAT, PRVM_G_VECTOR, rgb, scale, VM_drawcharacter(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_drawcharacter().

◆ VM_drawcolorcodedstring()

void VM_drawcolorcodedstring ( prvm_prog_t * prog)

Definition at line 1481 of file clvm_cmds.c.

1482{
1483 prvm_vec_t *pos, *scale;
1484 const char *string;
1485 int flag;
1486 vec3_t rgb;
1487 float sx, sy, alpha;
1488
1490
1491 // polygonbegin without draw2d arg has to guess
1492 prog->polygonbegin_guess2d = true;
1493
1494 if (prog->argc == 6) // full 6 parms, like normal drawstring
1495 {
1496 pos = PRVM_G_VECTOR(OFS_PARM0);
1497 string = PRVM_G_STRING(OFS_PARM1);
1501 flag = (int)PRVM_G_FLOAT(OFS_PARM5);
1502 }
1503 else
1504 {
1505 pos = PRVM_G_VECTOR(OFS_PARM0);
1506 string = PRVM_G_STRING(OFS_PARM1);
1508 rgb[0] = 1.0;
1509 rgb[1] = 1.0;
1510 rgb[2] = 1.0;
1512 flag = (int)PRVM_G_FLOAT(OFS_PARM4);
1513 }
1514
1515 if(flag < DRAWFLAG_NORMAL || flag >= DRAWFLAG_NUMFLAGS)
1516 {
1518 VM_Warning(prog, "VM_drawcolorcodedstring: wrong DRAWFLAG %i !\n", flag);
1519 return;
1520 }
1521
1522 if(!scale[0] || !scale[1])
1523 {
1525 VM_Warning(prog, "VM_drawcolorcodedstring: scale %s is null !\n", (scale[0] == 0) ? ((scale[1] == 0) ? "x and y" : "x") : "y");
1526 return;
1527 }
1528
1529 if(pos[2] || scale[2])
1530 VM_Warning(prog, "VM_drawcolorcodedstring: z value%s from %s discarded\n",(pos[2] && scale[2]) ? "s" : " ",((pos[2] && scale[2]) ? "pos and scale" : (pos[2] ? "pos" : "scale")));
1531
1532 getdrawfontscale(prog, &sx, &sy);
1533 DrawQ_String_Scale(pos[0], pos[1], string, 0, scale[0], scale[1], sx, sy, rgb[0], rgb[1], rgb[2], alpha, flag, NULL, false, getdrawfont(prog));
1534 if (prog->argc == 6) // also return vector of last color
1536 else
1538}
void VM_drawcolorcodedstring(prvm_prog_t *prog)
Definition clvm_cmds.c:1481
float alpha
float DrawQ_Color[4]
Definition gl_draw.c:1084
#define VectorCopy(in, out)
Definition mathlib.h:101
vec_t vec3_t[3]
Definition qtypes.h:71

References alpha, prvm_prog_t::argc, DRAWFLAG_NUMFLAGS, DrawQ_Color, DrawQ_String_Scale(), getdrawfont(), getdrawfontscale(), int(), NULL, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_PARM5, OFS_RETURN, prvm_prog_t::polygonbegin_guess2d, PRVM_G_FLOAT, PRVM_G_STRING, PRVM_G_VECTOR, rgb, scale, string, VectorCopy, VM_drawcolorcodedstring(), VM_SAFEPARMCOUNTRANGE, and VM_Warning().

Referenced by VM_drawcolorcodedstring().

◆ VM_drawfill()

void VM_drawfill ( prvm_prog_t * prog)

Definition at line 1925 of file clvm_cmds.c.

1926{
1927 prvm_vec_t *size, *pos, *rgb;
1928 int flag;
1929
1931
1932 // polygonbegin without draw2d arg has to guess
1933 prog->polygonbegin_guess2d = true;
1934
1935 pos = PRVM_G_VECTOR(OFS_PARM0);
1938 flag = (int) PRVM_G_FLOAT(OFS_PARM4);
1939
1940 if(flag < DRAWFLAG_NORMAL || flag >=DRAWFLAG_NUMFLAGS)
1941 {
1943 VM_Warning(prog, "VM_drawfill: wrong DRAWFLAG %i !\n", flag);
1944 return;
1945 }
1946
1947 if(pos[2] || size[2])
1948 VM_Warning(prog, "VM_drawfill: z value%s from %s discarded\n",(pos[2] && size[2]) ? "s" : " ",((pos[2] && size[2]) ? "pos and size" : (pos[2] ? "pos" : "size")));
1949
1950 DrawQ_Fill(pos[0], pos[1], size[0], size[1], rgb[0], rgb[1], rgb[2], PRVM_G_FLOAT(OFS_PARM3), flag);
1952}
void VM_drawfill(prvm_prog_t *prog)
Definition clvm_cmds.c:1925
void DrawQ_Fill(float x, float y, float width, float height, float red, float green, float blue, float alpha, int flags)
Definition gl_draw.c:847

References DRAWFLAG_NUMFLAGS, DrawQ_Fill(), int(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_RETURN, prvm_prog_t::polygonbegin_guess2d, PRVM_G_FLOAT, PRVM_G_VECTOR, rgb, size, VM_drawfill(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_drawfill().

◆ VM_drawline()

void VM_drawline ( prvm_prog_t * prog)

Definition at line 1260 of file clvm_cmds.c.

1261{
1262 prvm_vec_t *c1, *c2, *rgb;
1263 float alpha, width;
1264 unsigned char flags;
1265
1267
1268 // polygonbegin without draw2d arg has to guess
1269 prog->polygonbegin_guess2d = true;
1270
1277 DrawQ_Line(width, c1[0], c1[1], c2[0], c2[1], rgb[0], rgb[1], rgb[2], alpha, flags);
1278}
void VM_drawline(prvm_prog_t *prog)
Definition clvm_cmds.c:1260
void DrawQ_Line(float width, float x1, float y1, float x2, float y2, float r, float g, float b, float alpha, int flags)
Definition gl_draw.c:1402
GLenum GLsizei width
Definition glquake.h:622

References alpha, DrawQ_Line(), flags, int(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_PARM5, prvm_prog_t::polygonbegin_guess2d, PRVM_G_FLOAT, PRVM_G_VECTOR, rgb, VM_drawline(), VM_SAFEPARMCOUNT, and width.

Referenced by VM_drawline().

◆ VM_drawpic()

void VM_drawpic ( prvm_prog_t * prog)

Definition at line 1771 of file clvm_cmds.c.

1772{
1773 const char *picname;
1774 prvm_vec_t *size, *pos, *rgb;
1775 int flag = 0;
1776
1778
1779 // polygonbegin without draw2d arg has to guess
1780 prog->polygonbegin_guess2d = true;
1781
1782 picname = PRVM_G_STRING(OFS_PARM1);
1783 VM_CheckEmptyString(prog, picname);
1784
1785 // is pic cached ? no function yet for that
1786 if(!1)
1787 {
1789 VM_Warning(prog, "VM_drawpic: %s not cached !\n", picname);
1790 return;
1791 }
1792
1793 pos = PRVM_G_VECTOR(OFS_PARM0);
1796 if (prog->argc >= 6)
1797 flag = (int) PRVM_G_FLOAT(OFS_PARM5);
1798
1799 if(flag < DRAWFLAG_NORMAL || flag >=DRAWFLAG_NUMFLAGS)
1800 {
1802 VM_Warning(prog, "VM_drawpic: wrong DRAWFLAG %i !\n", flag);
1803 return;
1804 }
1805
1806 if(pos[2] || size[2])
1807 VM_Warning(prog, "VM_drawpic: z value%s from %s discarded\n",(pos[2] && size[2]) ? "s" : " ",((pos[2] && size[2]) ? "pos and size" : (pos[2] ? "pos" : "size")));
1808
1809 DrawQ_Pic(pos[0], pos[1], Draw_CachePic_Flags (picname, CACHEPICFLAG_NOTPERSISTENT), size[0], size[1], rgb[0], rgb[1], rgb[2], PRVM_G_FLOAT(OFS_PARM4), flag);
1811}
void VM_drawpic(prvm_prog_t *prog)
Definition clvm_cmds.c:1771
@ CACHEPICFLAG_NOTPERSISTENT
Definition draw.h:36
void DrawQ_Pic(float x, float y, cachepic_t *pic, float width, float height, float red, float green, float blue, float alpha, int flags)
Definition gl_draw.c:797
cachepic_t * Draw_CachePic_Flags(const char *path, unsigned int cachepicflags)
Definition gl_draw.c:86

References prvm_prog_t::argc, CACHEPICFLAG_NOTPERSISTENT, Draw_CachePic_Flags(), DRAWFLAG_NUMFLAGS, DrawQ_Pic(), int(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_PARM5, OFS_RETURN, prvm_prog_t::polygonbegin_guess2d, PRVM_G_FLOAT, PRVM_G_STRING, PRVM_G_VECTOR, rgb, size, VM_CheckEmptyString(), VM_drawpic(), VM_SAFEPARMCOUNTRANGE, and VM_Warning().

Referenced by VM_drawpic().

◆ VM_drawresetcliparea()

void VM_drawresetcliparea ( prvm_prog_t * prog)

Definition at line 1984 of file clvm_cmds.c.

1985{
1987
1988 // polygonbegin without draw2d arg has to guess
1989 prog->polygonbegin_guess2d = true;
1990
1992}
void VM_drawresetcliparea(prvm_prog_t *prog)
Definition clvm_cmds.c:1984
void DrawQ_ResetClipArea(void)
Definition gl_draw.c:1450

References DrawQ_ResetClipArea(), prvm_prog_t::polygonbegin_guess2d, VM_drawresetcliparea(), and VM_SAFEPARMCOUNT.

Referenced by VM_drawresetcliparea().

◆ VM_drawrotpic()

void VM_drawrotpic ( prvm_prog_t * prog)

Definition at line 1819 of file clvm_cmds.c.

1820{
1821 const char *picname;
1822 prvm_vec_t *size, *pos, *org, *rgb;
1823 int flag;
1824
1826
1827 // polygonbegin without draw2d arg has to guess
1828 prog->polygonbegin_guess2d = true;
1829
1830 picname = PRVM_G_STRING(OFS_PARM1);
1831 VM_CheckEmptyString(prog, picname);
1832
1833 // is pic cached ? no function yet for that
1834 if(!1)
1835 {
1837 VM_Warning(prog, "VM_drawrotpic: %s not cached !\n", picname);
1838 return;
1839 }
1840
1841 pos = PRVM_G_VECTOR(OFS_PARM0);
1843 org = PRVM_G_VECTOR(OFS_PARM3);
1845 flag = (int) PRVM_G_FLOAT(OFS_PARM7);
1846
1847 if(flag < DRAWFLAG_NORMAL || flag >=DRAWFLAG_NUMFLAGS)
1848 {
1850 VM_Warning(prog, "VM_drawrotpic: wrong DRAWFLAG %i !\n", flag);
1851 return;
1852 }
1853
1854 if(pos[2] || size[2] || org[2])
1855 VM_Warning(prog, "VM_drawrotpic: z value from pos/size/org discarded\n");
1856
1857 DrawQ_RotPic(pos[0], pos[1], Draw_CachePic_Flags(picname, CACHEPICFLAG_NOTPERSISTENT), size[0], size[1], org[0], org[1], PRVM_G_FLOAT(OFS_PARM4), rgb[0], rgb[1], rgb[2], PRVM_G_FLOAT(OFS_PARM6), flag);
1859}
void VM_drawrotpic(prvm_prog_t *prog)
Definition clvm_cmds.c:1819
void DrawQ_RotPic(float x, float y, cachepic_t *pic, float width, float height, float org_x, float org_y, float angle, float red, float green, float blue, float alpha, int flags)
Definition gl_draw.c:819
#define OFS_PARM6
Definition pr_comp.h:40
#define OFS_PARM7
Definition pr_comp.h:41

References CACHEPICFLAG_NOTPERSISTENT, Draw_CachePic_Flags(), DRAWFLAG_NUMFLAGS, DrawQ_RotPic(), int(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_PARM5, OFS_PARM6, OFS_PARM7, OFS_RETURN, prvm_prog_t::polygonbegin_guess2d, PRVM_G_FLOAT, PRVM_G_STRING, PRVM_G_VECTOR, rgb, size, VM_CheckEmptyString(), VM_drawrotpic(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_drawrotpic().

◆ VM_drawsetcliparea()

void VM_drawsetcliparea ( prvm_prog_t * prog)

Definition at line 1961 of file clvm_cmds.c.

1962{
1963 float x,y,w,h;
1965
1966 // polygonbegin without draw2d arg has to guess
1967 prog->polygonbegin_guess2d = true;
1968
1973
1974 DrawQ_SetClipArea(x, y, w, h);
1975}
cvar_t vid_conheight
Definition cl_screen.c:57
cvar_t vid_conwidth
Definition cl_screen.c:56
void VM_drawsetcliparea(prvm_prog_t *prog)
Definition clvm_cmds.c:1961
void DrawQ_SetClipArea(float x, float y, float width, float height)
Definition gl_draw.c:1428
GLubyte GLubyte GLubyte GLubyte w
Definition glquake.h:782
GLint GLenum GLint GLint y
Definition glquake.h:651
GLint GLenum GLint x
Definition glquake.h:651

References bound, DrawQ_SetClipArea(), cvar_t::integer, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, prvm_prog_t::polygonbegin_guess2d, PRVM_G_FLOAT, vid_conheight, vid_conwidth, VM_drawsetcliparea(), VM_SAFEPARMCOUNT, w, x, and y.

Referenced by VM_drawsetcliparea().

◆ VM_drawstring()

void VM_drawstring ( prvm_prog_t * prog)

Definition at line 1431 of file clvm_cmds.c.

1432{
1433 prvm_vec_t *pos,*scale,*rgb;
1434 const char *string;
1435 int flag = 0;
1436 float sx, sy;
1438
1439 // polygonbegin without draw2d arg has to guess
1440 prog->polygonbegin_guess2d = true;
1441
1442 string = PRVM_G_STRING(OFS_PARM1);
1443 pos = PRVM_G_VECTOR(OFS_PARM0);
1446 if (prog->argc >= 6)
1447 flag = (int)PRVM_G_FLOAT(OFS_PARM5);
1448
1449 if(flag < DRAWFLAG_NORMAL || flag >=DRAWFLAG_NUMFLAGS)
1450 {
1452 VM_Warning(prog, "VM_drawstring: wrong DRAWFLAG %i !\n", flag);
1453 return;
1454 }
1455
1456 if(!scale[0] || !scale[1])
1457 {
1459 VM_Warning(prog, "VM_drawstring: scale %s is null !\n", (scale[0] == 0) ? ((scale[1] == 0) ? "x and y" : "x") : "y");
1460 return;
1461 }
1462
1463 if(pos[2] || scale[2])
1464 VM_Warning(prog, "VM_drawstring: z value%s from %s discarded\n",(pos[2] && scale[2]) ? "s" : " ",((pos[2] && scale[2]) ? "pos and scale" : (pos[2] ? "pos" : "scale")));
1465
1466 getdrawfontscale(prog, &sx, &sy);
1467 DrawQ_String_Scale(pos[0], pos[1], string, 0, scale[0], scale[1], sx, sy, rgb[0], rgb[1], rgb[2], PRVM_G_FLOAT(OFS_PARM4), flag, NULL, true, getdrawfont(prog));
1468 //Font_DrawString(pos[0], pos[1], string, 0, scale[0], scale[1], rgb[0], rgb[1], rgb[2], PRVM_G_FLOAT(OFS_PARM4), flag, NULL, true);
1470}
void VM_drawstring(prvm_prog_t *prog)
Definition clvm_cmds.c:1431

References prvm_prog_t::argc, DRAWFLAG_NUMFLAGS, DrawQ_String_Scale(), getdrawfont(), getdrawfontscale(), int(), NULL, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_PARM5, OFS_RETURN, prvm_prog_t::polygonbegin_guess2d, PRVM_G_FLOAT, PRVM_G_STRING, PRVM_G_VECTOR, rgb, scale, string, VM_drawstring(), VM_SAFEPARMCOUNTRANGE, and VM_Warning().

Referenced by VM_drawstring().

◆ VM_drawsubpic()

void VM_drawsubpic ( prvm_prog_t * prog)

Definition at line 1868 of file clvm_cmds.c.

1869{
1870 const char *picname;
1871 prvm_vec_t *size, *pos, *rgb, *srcPos, *srcSize, alpha;
1872 int flag;
1873
1875
1876 // polygonbegin without draw2d arg has to guess
1877 prog->polygonbegin_guess2d = true;
1878
1879 picname = PRVM_G_STRING(OFS_PARM2);
1880 VM_CheckEmptyString(prog, picname);
1881
1882 // is pic cached ? no function yet for that
1883 if(!1)
1884 {
1886 VM_Warning(prog, "VM_drawsubpic: %s not cached !\n", picname);
1887 return;
1888 }
1889
1890 pos = PRVM_G_VECTOR(OFS_PARM0);
1892 srcPos = PRVM_G_VECTOR(OFS_PARM3);
1893 srcSize = PRVM_G_VECTOR(OFS_PARM4);
1896 flag = (int) PRVM_G_FLOAT(OFS_PARM7);
1897
1898 if(flag < DRAWFLAG_NORMAL || flag >=DRAWFLAG_NUMFLAGS)
1899 {
1901 VM_Warning(prog, "VM_drawsubpic: wrong DRAWFLAG %i !\n", flag);
1902 return;
1903 }
1904
1905 if(pos[2] || size[2])
1906 VM_Warning(prog, "VM_drawsubpic: z value%s from %s discarded\n",(pos[2] && size[2]) ? "s" : " ",((pos[2] && size[2]) ? "pos and size" : (pos[2] ? "pos" : "size")));
1907
1909 size[0], size[1],
1910 srcPos[0], srcPos[1], rgb[0], rgb[1], rgb[2], alpha,
1911 srcPos[0] + srcSize[0], srcPos[1], rgb[0], rgb[1], rgb[2], alpha,
1912 srcPos[0], srcPos[1] + srcSize[1], rgb[0], rgb[1], rgb[2], alpha,
1913 srcPos[0] + srcSize[0], srcPos[1] + srcSize[1], rgb[0], rgb[1], rgb[2], alpha,
1914 flag);
1916}
void VM_drawsubpic(prvm_prog_t *prog)
Definition clvm_cmds.c:1868
void DrawQ_SuperPic(float x, float y, cachepic_t *pic, float width, float height, float s1, float t1, float r1, float g1, float b1, float a1, float s2, float t2, float r2, float g2, float b2, float a2, float s3, float t3, float r3, float g3, float b3, float a3, float s4, float t4, float r4, float g4, float b4, float a4, int flags)
Definition gl_draw.c:1380

References alpha, CACHEPICFLAG_NOTPERSISTENT, Draw_CachePic_Flags(), DRAWFLAG_NUMFLAGS, DrawQ_SuperPic(), int(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_PARM5, OFS_PARM6, OFS_PARM7, OFS_RETURN, prvm_prog_t::polygonbegin_guess2d, PRVM_G_FLOAT, PRVM_G_STRING, PRVM_G_VECTOR, rgb, size, VM_CheckEmptyString(), VM_drawsubpic(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_drawsubpic().

◆ VM_entityfieldname()

void VM_entityfieldname ( prvm_prog_t * prog)

Definition at line 2129 of file prvm_cmds.c.

2130{
2131 mdef_t *d;
2132 int i = (int)PRVM_G_FLOAT(OFS_PARM0);
2133
2134 if (i < 0 || i >= prog->numfielddefs)
2135 {
2136 VM_Warning(prog, "VM_entityfieldname: field index out of bounds!\n");
2138 return;
2139 }
2140
2141 d = &prog->fielddefs[i];
2142 PRVM_G_INT(OFS_RETURN) = d->s_name; // presuming that s_name points to a string already
2143}
int32_t s_name
Definition pr_comp.h:417
int numfielddefs
Definition progsvm.h:565
mdef_t * fielddefs
Definition progsvm.h:545

References prvm_prog_t::fielddefs, i, int(), prvm_prog_t::numfielddefs, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_SetTempString(), mdef_t::s_name, and VM_Warning().

◆ VM_entityfieldtype()

void VM_entityfieldtype ( prvm_prog_t * prog)

Definition at line 2153 of file prvm_cmds.c.

2154{
2155 mdef_t *d;
2156 int i = (int)PRVM_G_FLOAT(OFS_PARM0);
2157
2158 if (i < 0 || i >= prog->numfielddefs)
2159 {
2160 VM_Warning(prog, "VM_entityfieldtype: field index out of bounds!\n");
2161 PRVM_G_FLOAT(OFS_RETURN) = -1.0;
2162 return;
2163 }
2164
2165 d = &prog->fielddefs[i];
2167}
uint32_t type
Definition pr_comp.h:414

References prvm_prog_t::fielddefs, i, int(), prvm_prog_t::numfielddefs, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, mdef_t::type, and VM_Warning().

◆ VM_eprint()

void VM_eprint ( prvm_prog_t * prog)

Definition at line 1494 of file prvm_cmds.c.

1495{
1497
1499}
void PRVM_ED_PrintNum(prvm_prog_t *prog, int ent, const char *wildcard_fieldname)
Definition prvm_edict.c:788
#define PRVM_G_EDICTNUM(o)
Definition progsvm.h:885
void VM_eprint(prvm_prog_t *prog)
Definition prvm_cmds.c:1494

References NULL, OFS_PARM0, PRVM_ED_PrintNum(), PRVM_G_EDICTNUM, VM_eprint(), and VM_SAFEPARMCOUNT.

Referenced by VM_eprint().

◆ VM_error()

void VM_error ( prvm_prog_t * prog)

Definition at line 380 of file prvm_cmds.c.

381{
382 prvm_edict_t *ed;
383 char string[VM_TEMPSTRING_MAXSIZE];
384
385 VM_VarString(prog, 0, string, sizeof(string));
386 Con_Printf(CON_ERROR "======%s ERROR in %s:\n%s\n", prog->name, PRVM_GetString(prog, prog->xfunction->s_name), string);
388 PRVM_ED_Print(prog, ed, NULL);
389
390 prog->error_cmd("%s: Program error in function %s:\n%s\nTip: read above for entity information\n", prog->name, PRVM_GetString(prog, prog->xfunction->s_name), string);
391}
void Con_Printf(const char *fmt,...)
Prints to all appropriate console targets.
Definition console.c:1514
#define CON_ERROR
Definition console.h:102
const char * PRVM_GetString(prvm_prog_t *prog, int num)
#define PRVM_allglobaledict(fieldname)
Definition progsvm.h:144
void PRVM_ED_Print(prvm_prog_t *prog, prvm_edict_t *ed, const char *wildcard_fieldname)
Definition prvm_edict.c:657
int32_t s_name
Definition pr_comp.h:460

References CON_ERROR, Con_Printf(), prvm_prog_t::error_cmd, prvm_prog_t::name, NULL, PRVM_allglobaledict, PRVM_ED_Print(), PRVM_GetString(), PRVM_PROG_TO_EDICT, mfunction_t::s_name, self, VM_TEMPSTRING_MAXSIZE, VM_VarString(), and prvm_prog_t::xfunction.

◆ VM_etof()

void VM_etof ( prvm_prog_t * prog)

Definition at line 1001 of file prvm_cmds.c.

1002{
1005}
void VM_etof(prvm_prog_t *prog)
Definition prvm_cmds.c:1001

References OFS_PARM0, OFS_RETURN, PRVM_G_EDICTNUM, PRVM_G_FLOAT, VM_etof(), and VM_SAFEPARMCOUNT.

Referenced by VM_etof().

◆ VM_etos()

void VM_etos ( prvm_prog_t * prog)

Definition at line 936 of file prvm_cmds.c.

937{
938 char s[128];
939 size_t slen;
940
942
943 slen = dpsnprintf(s, sizeof(s), "entity %i", PRVM_G_EDICTNUM(OFS_PARM0));
944 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, s, slen);
945}
int dpsnprintf(char *buffer, size_t buffersize, const char *format,...)
Returns the number of printed characters, excluding the final '\0' or returns -1 if the buffer isn't ...
Definition common.c:997
void VM_etos(prvm_prog_t *prog)
Definition prvm_cmds.c:936

References dpsnprintf(), OFS_PARM0, OFS_RETURN, PRVM_G_EDICTNUM, PRVM_G_INT, PRVM_SetTempString(), VM_etos(), and VM_SAFEPARMCOUNT.

Referenced by VM_etos().

◆ VM_fabs()

void VM_fabs ( prvm_prog_t * prog)

Definition at line 899 of file prvm_cmds.c.

900{
902
904
907}
const GLdouble * v
Definition glquake.h:762
void VM_fabs(prvm_prog_t *prog)
Definition prvm_cmds.c:899

References fabs(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, v, VM_fabs(), and VM_SAFEPARMCOUNT.

Referenced by VM_fabs().

◆ VM_fclose()

void VM_fclose ( prvm_prog_t * prog)

Definition at line 1963 of file prvm_cmds.c.

1964{
1965 int filenum;
1966
1968
1969 filenum = (int)PRVM_G_FLOAT(OFS_PARM0);
1970 if (filenum < 0 || filenum >= PRVM_MAX_OPENFILES)
1971 {
1972 VM_Warning(prog, "VM_fclose: invalid file handle %i\n", filenum);
1973 return;
1974 }
1975 if (prog->openfiles[filenum] == NULL)
1976 {
1977 VM_Warning(prog, "VM_fclose: no such file handle %i (or file has been closed)\n", filenum);
1978 return;
1979 }
1980 FS_Close(prog->openfiles[filenum]);
1981 prog->openfiles[filenum] = NULL;
1982 if(prog->openfiles_origin[filenum])
1983 PRVM_Free((char *)prog->openfiles_origin[filenum]);
1985 Con_DPrintf("VM_fclose: %s: #%i closed\n", prog->name, filenum);
1986}
void VM_fclose(prvm_prog_t *prog)
Definition prvm_cmds.c:1963
const char * openfiles_origin[PRVM_MAX_OPENFILES]
Definition progsvm.h:637

References Con_DPrintf(), developer_extra, FS_Close(), int(), cvar_t::integer, prvm_prog_t::name, NULL, OFS_PARM0, prvm_prog_t::openfiles, prvm_prog_t::openfiles_origin, PRVM_Free, PRVM_G_FLOAT, PRVM_MAX_OPENFILES, VM_fclose(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_fclose().

◆ VM_fgets()

void VM_fgets ( prvm_prog_t * prog)

Definition at line 1996 of file prvm_cmds.c.

1997{
1998 int c, end;
1999 char string[VM_TEMPSTRING_MAXSIZE];
2000 int filenum;
2001
2003
2004 // set the return value regardless of any possible errors
2006
2007 filenum = (int)PRVM_G_FLOAT(OFS_PARM0);
2008 if (filenum < 0 || filenum >= PRVM_MAX_OPENFILES)
2009 {
2010 VM_Warning(prog, "VM_fgets: invalid file handle %i\n", filenum);
2011 return;
2012 }
2013 if (prog->openfiles[filenum] == NULL)
2014 {
2015 VM_Warning(prog, "VM_fgets: no such file handle %i (or file has been closed)\n", filenum);
2016 return;
2017 }
2018 end = 0;
2019 for (;;)
2020 {
2021 c = FS_Getc(prog->openfiles[filenum]);
2022 if (c == '\r' || c == '\n' || c < 0)
2023 break;
2024 if (end < VM_TEMPSTRING_MAXSIZE - 1)
2025 string[end++] = c;
2026 }
2027 string[end] = '\0';
2028 // remove \n following \r
2029 if (c == '\r')
2030 {
2031 c = FS_Getc(prog->openfiles[filenum]);
2032 if (c != '\n')
2033 FS_UnGetc(prog->openfiles[filenum], (unsigned char)c);
2034 }
2036 Con_DPrintf("fgets: %s: %s\n", prog->name, string);
2037 if (c >= 0 || end)
2038 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, string, end);
2039}
void VM_fgets(prvm_prog_t *prog)
Definition prvm_cmds.c:1996

References Con_DPrintf(), developer_extra, FS_Getc(), FS_UnGetc(), int(), cvar_t::integer, prvm_prog_t::name, NULL, OFS_NULL, OFS_PARM0, OFS_RETURN, prvm_prog_t::openfiles, PRVM_G_FLOAT, PRVM_G_INT, PRVM_MAX_OPENFILES, PRVM_SetTempString(), VM_fgets(), VM_SAFEPARMCOUNT, VM_TEMPSTRING_MAXSIZE, and VM_Warning().

Referenced by VM_fgets().

◆ VM_Files_CloseAll()

void VM_Files_CloseAll ( prvm_prog_t * prog)

Definition at line 1863 of file prvm_cmds.c.

1864{
1865 int i;
1866 for (i = 0;i < PRVM_MAX_OPENFILES;i++)
1867 {
1868 if (prog->openfiles[i])
1869 FS_Close(prog->openfiles[i]);
1870 prog->openfiles[i] = NULL;
1871 }
1872}

References FS_Close(), i, NULL, prvm_prog_t::openfiles, and PRVM_MAX_OPENFILES.

Referenced by VM_Cmd_Reset().

◆ VM_Files_Init()

void VM_Files_Init ( prvm_prog_t * prog)

Definition at line 1856 of file prvm_cmds.c.

1857{
1858 int i;
1859 for (i = 0;i < PRVM_MAX_OPENFILES;i++)
1860 prog->openfiles[i] = NULL;
1861}

References i, NULL, prvm_prog_t::openfiles, and PRVM_MAX_OPENFILES.

Referenced by VM_Cmd_Init().

◆ VM_find()

void VM_find ( prvm_prog_t * prog)

Definition at line 1110 of file prvm_cmds.c.

1111{
1112 int e;
1113 int f;
1114 const char *s, *t;
1115 prvm_edict_t *ed;
1116
1118
1122
1123 // LadyHavoc: apparently BloodMage does a find(world, weaponmodel, "") and
1124 // expects it to find all the monsters, so we must be careful to support
1125 // searching for ""
1126
1127 for (e++ ; e < prog->num_edicts ; e++)
1128 {
1129 prog->xfunction->builtinsprofile++;
1130 ed = PRVM_EDICT_NUM(e);
1131 if (ed->free)
1132 continue;
1133 t = PRVM_E_STRING(ed,f);
1134 if (!t)
1135 t = "";
1136 if (!strcmp(t,s))
1137 {
1138 VM_RETURN_EDICT(ed);
1139 return;
1140 }
1141 }
1142
1143 VM_RETURN_EDICT(prog->edicts);
1144}
#define PRVM_EDICT_NUM(n)
Definition progsvm.h:867
#define PRVM_E_STRING(e, o)
Definition progsvm.h:894
void VM_find(prvm_prog_t *prog)
Definition prvm_cmds.c:1110
#define VM_RETURN_EDICT(e)
Definition prvm_cmds.h:213
int num_edicts
copies of some vars that were former read from sv
Definition progsvm.h:671

References mfunction_t::builtinsprofile, prvm_prog_t::edicts, f, prvm_edict_t::free, prvm_prog_t::num_edicts, OFS_PARM0, OFS_PARM1, OFS_PARM2, PRVM_E_STRING, PRVM_EDICT_NUM, PRVM_G_EDICTNUM, PRVM_G_INT, PRVM_G_STRING, VM_find(), VM_RETURN_EDICT, VM_SAFEPARMCOUNT, and prvm_prog_t::xfunction.

Referenced by VM_find().

◆ VM_findchain()

void VM_findchain ( prvm_prog_t * prog)

Definition at line 1193 of file prvm_cmds.c.

1194{
1195 int i;
1196 int f;
1197 const char *s, *t;
1198 prvm_edict_t *ent, *chain;
1199 int chainfield;
1200
1202
1203 if(prog->argc == 3)
1204 chainfield = PRVM_G_INT(OFS_PARM2);
1205 else
1206 chainfield = prog->fieldoffsets.chain;
1207 if (chainfield < 0)
1208 prog->error_cmd("VM_findchain: %s doesnt have the specified chain field !", prog->name);
1209
1210 chain = prog->edicts;
1211
1214
1215 // LadyHavoc: apparently BloodMage does a find(world, weaponmodel, "") and
1216 // expects it to find all the monsters, so we must be careful to support
1217 // searching for ""
1218
1219 ent = PRVM_NEXT_EDICT(prog->edicts);
1220 for (i = 1;i < prog->num_edicts;i++, ent = PRVM_NEXT_EDICT(ent))
1221 {
1222 prog->xfunction->builtinsprofile++;
1223 if (ent->free)
1224 continue;
1225 t = PRVM_E_STRING(ent,f);
1226 if (!t)
1227 t = "";
1228 if (strcmp(t,s))
1229 continue;
1230
1232 chain = ent;
1233 }
1234
1236}
entity chain
#define PRVM_NEXT_EDICT(e)
Definition progsvm.h:873
#define PRVM_EDICTFIELDEDICT(ed, fieldoffset)
Definition progsvm.h:213
#define PRVM_NUM_FOR_EDICT(e)
Definition progsvm.h:870
void VM_findchain(prvm_prog_t *prog)
Definition prvm_cmds.c:1193
prvm_prog_fieldoffsets_t fieldoffsets
Definition progsvm.h:691

References prvm_prog_t::argc, mfunction_t::builtinsprofile, chain, prvm_prog_t::edicts, prvm_prog_t::error_cmd, f, prvm_prog_t::fieldoffsets, prvm_edict_t::free, i, prvm_prog_t::name, prvm_prog_t::num_edicts, OFS_PARM0, OFS_PARM1, OFS_PARM2, PRVM_E_STRING, PRVM_EDICTFIELDEDICT, PRVM_G_INT, PRVM_G_STRING, PRVM_NEXT_EDICT, PRVM_NUM_FOR_EDICT, VM_findchain(), VM_RETURN_EDICT, VM_SAFEPARMCOUNTRANGE, and prvm_prog_t::xfunction.

Referenced by VM_findchain().

◆ VM_findchainflags()

void VM_findchainflags ( prvm_prog_t * prog)

Definition at line 1334 of file prvm_cmds.c.

1335{
1336 prvm_int_t i;
1337 prvm_int_t f;
1338 prvm_int_t s;
1339 prvm_edict_t *ent, *chain;
1340 int chainfield;
1341
1343
1344 if(prog->argc == 3)
1345 chainfield = PRVM_G_INT(OFS_PARM2);
1346 else
1347 chainfield = prog->fieldoffsets.chain;
1348 if (chainfield < 0)
1349 prog->error_cmd("VM_findchainflags: %s doesnt have the specified chain field !", prog->name);
1350
1351 chain = (prvm_edict_t *)prog->edicts;
1352
1355
1356 ent = PRVM_NEXT_EDICT(prog->edicts);
1357 for (i = 1;i < prog->num_edicts;i++, ent = PRVM_NEXT_EDICT(ent))
1358 {
1359 prog->xfunction->builtinsprofile++;
1360 if (ent->free)
1361 continue;
1362 if (!PRVM_E_FLOAT(ent,f))
1363 continue;
1364 if (!((prvm_int_t)PRVM_E_FLOAT(ent,f) & s))
1365 continue;
1366
1368 chain = ent;
1369 }
1370
1372}
#define PRVM_E_FLOAT(e, o)
Definition progsvm.h:891
void VM_findchainflags(prvm_prog_t *prog)
Definition prvm_cmds.c:1334

References prvm_prog_t::argc, mfunction_t::builtinsprofile, chain, prvm_prog_t::edicts, prvm_prog_t::error_cmd, f, prvm_prog_t::fieldoffsets, prvm_edict_t::free, i, prvm_prog_t::name, prvm_prog_t::num_edicts, OFS_PARM0, OFS_PARM1, OFS_PARM2, PRVM_E_FLOAT, PRVM_EDICT_TO_PROG, PRVM_EDICTFIELDEDICT, PRVM_G_FLOAT, PRVM_G_INT, PRVM_NEXT_EDICT, VM_findchainflags(), VM_RETURN_EDICT, VM_SAFEPARMCOUNTRANGE, and prvm_prog_t::xfunction.

Referenced by VM_findchainflags().

◆ VM_findchainfloat()

void VM_findchainfloat ( prvm_prog_t * prog)

Definition at line 1248 of file prvm_cmds.c.

1249{
1250 int i;
1251 int f;
1252 prvm_vec_t s;
1253 prvm_edict_t *ent, *chain;
1254 int chainfield;
1255
1257
1258 if(prog->argc == 3)
1259 chainfield = PRVM_G_INT(OFS_PARM2);
1260 else
1261 chainfield = prog->fieldoffsets.chain;
1262 if (chainfield < 0)
1263 prog->error_cmd("VM_findchainfloat: %s doesnt have the specified chain field !", prog->name);
1264
1265 chain = (prvm_edict_t *)prog->edicts;
1266
1269
1270 ent = PRVM_NEXT_EDICT(prog->edicts);
1271 for (i = 1;i < prog->num_edicts;i++, ent = PRVM_NEXT_EDICT(ent))
1272 {
1273 prog->xfunction->builtinsprofile++;
1274 if (ent->free)
1275 continue;
1276 if (PRVM_E_FLOAT(ent,f) != s)
1277 continue;
1278
1280 chain = ent;
1281 }
1282
1284}
void VM_findchainfloat(prvm_prog_t *prog)
Definition prvm_cmds.c:1248

References prvm_prog_t::argc, mfunction_t::builtinsprofile, chain, prvm_prog_t::edicts, prvm_prog_t::error_cmd, f, prvm_prog_t::fieldoffsets, prvm_edict_t::free, i, prvm_prog_t::name, prvm_prog_t::num_edicts, OFS_PARM0, OFS_PARM1, OFS_PARM2, PRVM_E_FLOAT, PRVM_EDICT_TO_PROG, PRVM_EDICTFIELDEDICT, PRVM_G_FLOAT, PRVM_G_INT, PRVM_NEXT_EDICT, VM_findchainfloat(), VM_RETURN_EDICT, VM_SAFEPARMCOUNTRANGE, and prvm_prog_t::xfunction.

Referenced by VM_findchainfloat().

◆ VM_findflags()

void VM_findflags ( prvm_prog_t * prog)

Definition at line 1294 of file prvm_cmds.c.

1295{
1296 prvm_int_t e;
1297 prvm_int_t f;
1298 prvm_int_t s;
1299 prvm_edict_t *ed;
1300
1302
1303
1307
1308 for (e++ ; e < prog->num_edicts ; e++)
1309 {
1310 prog->xfunction->builtinsprofile++;
1311 ed = PRVM_EDICT_NUM(e);
1312 if (ed->free)
1313 continue;
1314 if (!PRVM_E_FLOAT(ed,f))
1315 continue;
1316 if ((prvm_int_t)PRVM_E_FLOAT(ed,f) & s)
1317 {
1318 VM_RETURN_EDICT(ed);
1319 return;
1320 }
1321 }
1322
1323 VM_RETURN_EDICT(prog->edicts);
1324}
void VM_findflags(prvm_prog_t *prog)
Definition prvm_cmds.c:1294

References mfunction_t::builtinsprofile, prvm_prog_t::edicts, f, prvm_edict_t::free, prvm_prog_t::num_edicts, OFS_PARM0, OFS_PARM1, OFS_PARM2, PRVM_E_FLOAT, PRVM_EDICT_NUM, PRVM_G_EDICTNUM, PRVM_G_FLOAT, PRVM_G_INT, VM_findflags(), VM_RETURN_EDICT, VM_SAFEPARMCOUNT, and prvm_prog_t::xfunction.

Referenced by VM_findflags().

◆ VM_findfloat()

void VM_findfloat ( prvm_prog_t * prog)

Definition at line 1155 of file prvm_cmds.c.

1156{
1157 int e;
1158 int f;
1159 prvm_vec_t s;
1160 prvm_edict_t *ed;
1161
1163
1167
1168 for (e++ ; e < prog->num_edicts ; e++)
1169 {
1170 prog->xfunction->builtinsprofile++;
1171 ed = PRVM_EDICT_NUM(e);
1172 if (ed->free)
1173 continue;
1174 if (PRVM_E_FLOAT(ed,f) == s)
1175 {
1176 VM_RETURN_EDICT(ed);
1177 return;
1178 }
1179 }
1180
1181 VM_RETURN_EDICT(prog->edicts);
1182}
void VM_findfloat(prvm_prog_t *prog)
Definition prvm_cmds.c:1155

References mfunction_t::builtinsprofile, prvm_prog_t::edicts, f, prvm_edict_t::free, prvm_prog_t::num_edicts, OFS_PARM0, OFS_PARM1, OFS_PARM2, PRVM_E_FLOAT, PRVM_EDICT_NUM, PRVM_G_EDICTNUM, PRVM_G_FLOAT, PRVM_G_INT, VM_findfloat(), VM_RETURN_EDICT, VM_SAFEPARMCOUNT, and prvm_prog_t::xfunction.

Referenced by VM_findfloat().

◆ VM_findfont()

void VM_findfont ( prvm_prog_t * prog)

Definition at line 1616 of file clvm_cmds.c.

1617{
1620}
static float getdrawfontnum(const char *fontname)
Definition clvm_cmds.c:1606
void VM_findfont(prvm_prog_t *prog)
Definition clvm_cmds.c:1616

References getdrawfontnum(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, VM_findfont(), and VM_SAFEPARMCOUNT.

Referenced by VM_findfont().

◆ VM_findkeysforcommand()

void VM_findkeysforcommand ( prvm_prog_t * prog)

Definition at line 3352 of file prvm_cmds.c.

3353{
3354 const char *cmd;
3356 size_t ret_len;
3357 int keys[FKFC_NUMKEYS];
3358 int i;
3359 int bindmap;
3360 char vabuf[1024];
3361
3363
3365 if(prog->argc == 2)
3366 bindmap = bound(-1, PRVM_G_FLOAT(OFS_PARM1), MAX_BINDMAPS-1);
3367 else
3368 bindmap = 0; // consistent to "bind"
3369
3370 VM_CheckEmptyString(prog, cmd);
3371
3372 Key_FindKeysForCommand(cmd, keys, FKFC_NUMKEYS, bindmap);
3373
3374 ret[0] = 0;
3375 for(i = 0; i < FKFC_NUMKEYS; i++)
3376 ret_len = dp_strlcat(ret, va(vabuf, sizeof(vabuf), " \'%i\'", keys[i]), sizeof(ret));
3377
3378 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, ret, ret_len);
3379}
void Key_FindKeysForCommand(const char *command, int *keys, int numkeys, int bindmap)
Definition keys.c:1760
void cmd(string command,...)
void VM_findkeysforcommand(prvm_prog_t *prog)
Definition prvm_cmds.c:3352
#define FKFC_NUMKEYS
Definition prvm_cmds.c:3350
#define MAX_BINDMAPS
Definition qdefs.h:152

References prvm_prog_t::argc, bound, cmd(), dp_strlcat, FKFC_NUMKEYS, i, Key_FindKeysForCommand(), MAX_BINDMAPS, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), ret, va(), VM_CheckEmptyString(), VM_findkeysforcommand(), VM_SAFEPARMCOUNTRANGE, and VM_TEMPSTRING_MAXSIZE.

Referenced by VM_findkeysforcommand().

◆ VM_floor()

void VM_floor ( prvm_prog_t * prog)

Definition at line 1527 of file prvm_cmds.c.

1528{
1530
1532}
float floor(float f)
void VM_floor(prvm_prog_t *prog)
Definition prvm_cmds.c:1527

References floor(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, VM_floor(), and VM_SAFEPARMCOUNT.

Referenced by VM_floor().

◆ VM_fopen()

void VM_fopen ( prvm_prog_t * prog)

Definition at line 1899 of file prvm_cmds.c.

1900{
1901 int filenum, mode;
1902 const char *modestring, *filename;
1903 char vabuf[1024];
1904
1906
1907 for (filenum = 0;filenum < PRVM_MAX_OPENFILES;filenum++)
1908 if (prog->openfiles[filenum] == NULL)
1909 break;
1910 if (filenum >= PRVM_MAX_OPENFILES)
1911 {
1913 VM_Warning(prog, "VM_fopen: ran out of file handles (max %i)\n", PRVM_MAX_OPENFILES);
1914 return;
1915 }
1916 filename = PRVM_G_STRING(OFS_PARM0);
1918 switch(mode)
1919 {
1920 case 0: // FILE_READ
1921 modestring = "rb";
1922 prog->openfiles[filenum] = FS_OpenVirtualFile(va(vabuf, sizeof(vabuf), "data/%s", filename), false);
1923 if (prog->openfiles[filenum] == NULL)
1924 prog->openfiles[filenum] = FS_OpenVirtualFile(va(vabuf, sizeof(vabuf), "%s", filename), false);
1925 break;
1926 case 1: // FILE_APPEND
1927 modestring = "a";
1928 prog->openfiles[filenum] = FS_OpenRealFile(va(vabuf, sizeof(vabuf), "data/%s", filename), modestring, false);
1929 break;
1930 case 2: // FILE_WRITE
1931 modestring = "w";
1932 prog->openfiles[filenum] = FS_OpenRealFile(va(vabuf, sizeof(vabuf), "data/%s", filename), modestring, false);
1933 break;
1934 default:
1936 VM_Warning(prog, "VM_fopen: no such mode %i (valid: 0 = read, 1 = append, 2 = write)\n", mode);
1937 return;
1938 }
1939
1940 if (prog->openfiles[filenum] == NULL)
1941 {
1944 VM_Warning(prog, "VM_fopen: %s mode %s failed\n", filename, modestring);
1945 }
1946 else
1947 {
1948 PRVM_G_FLOAT(OFS_RETURN) = filenum;
1950 Con_DPrintf("VM_fopen: %s: %s mode %s opened as #%i\n", prog->name, filename, modestring, filenum);
1951 prog->openfiles_origin[filenum] = PRVM_AllocationOrigin(prog);
1952 }
1953}
qfile_t * FS_OpenRealFile(const char *filepath, const char *mode, qbool quiet)
Definition fs.c:2901
GLenum mode
Definition glquake.h:718
void VM_fopen(prvm_prog_t *prog)
Definition prvm_cmds.c:1899

References Con_DPrintf(), developer_extra, FS_OpenRealFile(), FS_OpenVirtualFile(), int(), cvar_t::integer, mode, prvm_prog_t::name, NULL, OFS_PARM0, OFS_PARM1, OFS_RETURN, prvm_prog_t::openfiles, prvm_prog_t::openfiles_origin, PRVM_AllocationOrigin(), PRVM_G_FLOAT, PRVM_G_STRING, PRVM_MAX_OPENFILES, va(), VM_fopen(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_fopen().

◆ VM_fputs()

void VM_fputs ( prvm_prog_t * prog)

Definition at line 2049 of file prvm_cmds.c.

2050{
2051 size_t stringlength;
2052 char string[VM_TEMPSTRING_MAXSIZE];
2053 int filenum;
2054
2056
2057 filenum = (int)PRVM_G_FLOAT(OFS_PARM0);
2058 if (filenum < 0 || filenum >= PRVM_MAX_OPENFILES)
2059 {
2060 VM_Warning(prog, "VM_fputs: invalid file handle %i\n", filenum);
2061 return;
2062 }
2063 if (prog->openfiles[filenum] == NULL)
2064 {
2065 VM_Warning(prog, "VM_fputs: no such file handle %i (or file has been closed)\n", filenum);
2066 return;
2067 }
2068 stringlength = VM_VarString(prog, 1, string, sizeof(string));
2069 if (stringlength)
2070 FS_Write(prog->openfiles[filenum], string, stringlength);
2072 Con_DPrintf("fputs: %s: %s\n", prog->name, string);
2073}
void VM_fputs(prvm_prog_t *prog)
Definition prvm_cmds.c:2049

References Con_DPrintf(), developer_extra, FS_Write(), int(), cvar_t::integer, prvm_prog_t::name, NULL, OFS_PARM0, prvm_prog_t::openfiles, PRVM_G_FLOAT, PRVM_MAX_OPENFILES, VM_fputs(), VM_SAFEPARMCOUNT, VM_TEMPSTRING_MAXSIZE, VM_VarString(), and VM_Warning().

Referenced by VM_fputs().

◆ VM_freepic()

void VM_freepic ( prvm_prog_t * prog)

Definition at line 1339 of file clvm_cmds.c.

1340{
1341 const char *s;
1342
1344
1346 VM_CheckEmptyString(prog, s);
1347
1348 Draw_FreePic(s);
1349}
void VM_freepic(prvm_prog_t *prog)
Definition clvm_cmds.c:1339
void Draw_FreePic(const char *picname)
Definition gl_draw.c:309

References Draw_FreePic(), OFS_PARM0, PRVM_G_STRING, VM_CheckEmptyString(), VM_freepic(), and VM_SAFEPARMCOUNT.

Referenced by VM_freepic().

◆ VM_ftoe()

void VM_ftoe ( prvm_prog_t * prog)

Definition at line 982 of file prvm_cmds.c.

983{
984 prvm_int_t ent;
986
988 if (ent < 0 || ent >= prog->max_edicts || PRVM_PROG_TO_EDICT(ent)->free)
989 ent = 0; // return world instead of a free or invalid entity
990
991 PRVM_G_INT(OFS_RETURN) = ent;
992}
void VM_ftoe(prvm_prog_t *prog)
Definition prvm_cmds.c:982
int max_edicts
number of edicts for which space has been (should be) allocated
Definition progsvm.h:673

References prvm_prog_t::max_edicts, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_PROG_TO_EDICT, VM_ftoe(), and VM_SAFEPARMCOUNT.

Referenced by VM_ftoe().

◆ VM_ftos()

void VM_ftos ( prvm_prog_t * prog)

Definition at line 874 of file prvm_cmds.c.

875{
877 char s[128];
878 size_t slen;
879
881
883
884 if ((prvm_vec_t)((prvm_int_t)v) == v)
885 slen = dpsnprintf(s, sizeof(s), "%.0f", v);
886 else
887 slen = dpsnprintf(s, sizeof(s), "%f", v);
888 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, s, slen);
889}
void VM_ftos(prvm_prog_t *prog)
Definition prvm_cmds.c:874

References dpsnprintf(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_SetTempString(), v, VM_ftos(), and VM_SAFEPARMCOUNT.

Referenced by VM_ftos().

◆ VM_gecko_create()

void VM_gecko_create ( prvm_prog_t * prog)

Definition at line 3477 of file prvm_cmds.c.

3477 {
3478 // REMOVED
3479 PRVM_G_FLOAT( OFS_RETURN ) = 0;
3480}

References OFS_RETURN, and PRVM_G_FLOAT.

◆ VM_gecko_destroy()

void VM_gecko_destroy ( prvm_prog_t * prog)

Definition at line 3489 of file prvm_cmds.c.

3489 {
3490 // REMOVED
3491}

◆ VM_gecko_get_texture_extent()

void VM_gecko_get_texture_extent ( prvm_prog_t * prog)

Definition at line 3547 of file prvm_cmds.c.

3547 {
3548 // REMOVED
3549 PRVM_G_VECTOR(OFS_RETURN)[0] = 0;
3550 PRVM_G_VECTOR(OFS_RETURN)[1] = 0;
3551}

References OFS_RETURN, and PRVM_G_VECTOR.

◆ VM_gecko_keyevent()

void VM_gecko_keyevent ( prvm_prog_t * prog)

Definition at line 3511 of file prvm_cmds.c.

3511 {
3512 // REMOVED
3513 PRVM_G_FLOAT( OFS_RETURN ) = 0;
3514}

References OFS_RETURN, and PRVM_G_FLOAT.

◆ VM_gecko_movemouse()

void VM_gecko_movemouse ( prvm_prog_t * prog)

Definition at line 3523 of file prvm_cmds.c.

3523 {
3524 // REMOVED
3525}

◆ VM_gecko_navigate()

void VM_gecko_navigate ( prvm_prog_t * prog)

Definition at line 3500 of file prvm_cmds.c.

3500 {
3501 // REMOVED
3502}

◆ VM_gecko_resize()

void VM_gecko_resize ( prvm_prog_t * prog)

Definition at line 3535 of file prvm_cmds.c.

3535 {
3536 // REMOVED
3537}

◆ VM_getbindmaps()

void VM_getbindmaps ( prvm_prog_t * prog)

Definition at line 3444 of file prvm_cmds.c.

3445{
3446 int fg, bg;
3448 Key_GetBindMap(&fg, &bg);
3449 PRVM_G_VECTOR(OFS_RETURN)[0] = fg;
3450 PRVM_G_VECTOR(OFS_RETURN)[1] = bg;
3451 PRVM_G_VECTOR(OFS_RETURN)[2] = 0;
3452}
void Key_GetBindMap(int *fg, int *bg)
Definition keys.c:1435
void VM_getbindmaps(prvm_prog_t *prog)
Definition prvm_cmds.c:3444

References Key_GetBindMap(), OFS_RETURN, PRVM_G_VECTOR, VM_getbindmaps(), and VM_SAFEPARMCOUNT.

Referenced by VM_getbindmaps().

◆ VM_getentityfieldstring()

void VM_getentityfieldstring ( prvm_prog_t * prog)

Definition at line 2177 of file prvm_cmds.c.

2178{
2179 // put the data into a string
2180 mdef_t *d;
2181 int type, j;
2182 prvm_eval_t *val;
2183 prvm_edict_t * ent;
2184 int i = (int)PRVM_G_FLOAT(OFS_PARM0);
2185 char valuebuf[MAX_INPUTLINE];
2186
2187 if (i < 0 || i >= prog->numfielddefs)
2188 {
2189 VM_Warning(prog, "VM_entityfielddata: field index out of bounds!\n");
2191 return;
2192 }
2193
2194 d = &prog->fielddefs[i];
2195
2196 // get the entity
2197 ent = PRVM_G_EDICT(OFS_PARM1);
2198 if(ent->free)
2199 {
2201 VM_Warning(prog, "VM_entityfielddata: entity %i is free!\n", PRVM_NUM_FOR_EDICT(ent));
2202 return;
2203 }
2204 val = (prvm_eval_t *)(ent->fields.fp + d->ofs);
2205
2206 // if it's 0 or blank, return an empty string
2207 type = d->type & ~DEF_SAVEGLOBAL;
2208 for (j=0 ; j<prvm_type_size[type] ; j++)
2209 if (val->ivector[j])
2210 break;
2211 if (j == prvm_type_size[type])
2212 {
2214 return;
2215 }
2216
2217 PRVM_UglyValueString(prog, (etype_t)d->type, val, valuebuf, sizeof(valuebuf));
2218 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, valuebuf, strlen(valuebuf));
2219}
GLenum type
Definition glquake.h:656
etype_t
Definition pr_comp.h:29
char * PRVM_UglyValueString(prvm_prog_t *prog, etype_t type, prvm_eval_t *val, char *line, size_t linelength)
Definition prvm_edict.c:513
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...
Definition prvm_edict.c:29
#define MAX_INPUTLINE
maximum size of console commandline, QuakeC strings, and many other text processing buffers
Definition qdefs.h:94
uint32_t ofs
Definition pr_comp.h:416
prvm_vec_t * fp
Definition progsvm.h:102
union prvm_edict_t::@30 fields
prvm_int_t ivector[3]
Definition progsvm.h:66

References prvm_prog_t::fielddefs, prvm_edict_t::fields, prvm_edict_t::fp, prvm_edict_t::free, i, int(), prvm_eval_t::ivector, MAX_INPUTLINE, prvm_prog_t::numfielddefs, mdef_t::ofs, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_INT, PRVM_NUM_FOR_EDICT, PRVM_SetTempString(), prvm_type_size, PRVM_UglyValueString(), strlen(), mdef_t::type, type, and VM_Warning().

◆ VM_getimagesize()

void VM_getimagesize ( prvm_prog_t * prog)

Definition at line 2001 of file clvm_cmds.c.

2002{
2003 const char *p;
2004 cachepic_t *pic;
2005
2007
2009 VM_CheckEmptyString(prog, p);
2010
2012 if (!Draw_IsPicLoaded(pic))
2013 {
2014 PRVM_G_VECTOR(OFS_RETURN)[0] = 0;
2015 PRVM_G_VECTOR(OFS_RETURN)[1] = 0;
2016 }
2017 else
2018 {
2021 }
2022 PRVM_G_VECTOR(OFS_RETURN)[2] = 0;
2023}
void VM_getimagesize(prvm_prog_t *prog)
Definition clvm_cmds.c:2001
@ CACHEPICFLAG_QUIET
Definition draw.h:37
int Draw_GetPicWidth(cachepic_t *pic)
Definition gl_draw.c:197
int Draw_GetPicHeight(cachepic_t *pic)
Definition gl_draw.c:204
qbool Draw_IsPicLoaded(cachepic_t *pic)
Definition gl_draw.c:211

References CACHEPICFLAG_NOTPERSISTENT, CACHEPICFLAG_QUIET, Draw_CachePic_Flags(), Draw_GetPicHeight(), Draw_GetPicWidth(), Draw_IsPicLoaded(), OFS_PARM0, OFS_RETURN, PRVM_G_STRING, PRVM_G_VECTOR, VM_CheckEmptyString(), VM_getimagesize(), and VM_SAFEPARMCOUNT.

Referenced by VM_getimagesize().

◆ VM_getkeybind()

void VM_getkeybind ( prvm_prog_t * prog)

Definition at line 3402 of file prvm_cmds.c.

3403{
3404 int bindmap;
3405 const char *bind;
3406
3408 if(prog->argc == 2)
3409 bindmap = bound(-1, PRVM_G_FLOAT(OFS_PARM1), MAX_BINDMAPS-1);
3410 else
3411 bindmap = 0; // consistent to "bind"
3412 bind = Key_GetBind((int)PRVM_G_FLOAT(OFS_PARM0), bindmap);
3413 PRVM_G_INT(OFS_RETURN) = bind ? PRVM_SetTempString(prog, bind, strlen(bind)) : 0;
3414}
const char * Key_GetBind(int key, int bindmap)
Definition keys.c:1740
void VM_getkeybind(prvm_prog_t *prog)
Definition prvm_cmds.c:3402

References prvm_prog_t::argc, bound, Key_GetBind(), MAX_BINDMAPS, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_SetTempString(), strlen(), VM_getkeybind(), and VM_SAFEPARMCOUNTRANGE.

Referenced by VM_getkeybind().

◆ VM_getmousepos()

void VM_getmousepos ( prvm_prog_t * prog)

◆ VM_getostype()

void VM_getostype ( prvm_prog_t * prog)

Definition at line 2921 of file prvm_cmds.c.

2922{
2924
2925 /*
2926 OS_WINDOWS
2927 OS_LINUX
2928 OS_MAC - not supported
2929 */
2930
2931#ifdef WIN32
2933#elif defined(MACOSX)
2935#else
2937#endif
2938}
void VM_getostype(prvm_prog_t *prog)
Definition prvm_cmds.c:2921

References OFS_RETURN, PRVM_G_FLOAT, VM_getostype(), and VM_SAFEPARMCOUNT.

Referenced by VM_getostype().

◆ VM_getsoundtime()

void VM_getsoundtime ( prvm_prog_t * prog)

Definition at line 2994 of file prvm_cmds.c.

2995{
2996 int entnum, entchannel;
2998
2999 if (prog == SVVM_prog)
3001 else if (prog == CLVM_prog)
3003 else
3004 {
3005 VM_Warning(prog, "VM_getsoundtime: not supported on this progs\n");
3007 return;
3008 }
3009 entchannel = (int)PRVM_G_FLOAT(OFS_PARM1);
3010 entchannel = CHAN_USER2ENGINE(entchannel);
3011 if (!IS_CHAN(entchannel))
3012 VM_Warning(prog, "VM_getsoundtime: bad channel %i\n", entchannel);
3014}
float entnum
#define CLVM_prog
Definition progsvm.h:767
#define SVVM_prog
Definition progsvm.h:766
void VM_getsoundtime(prvm_prog_t *prog)
Definition prvm_cmds.c:2994
#define MAX_EDICTS
max number of objects in game world at once (32768 protocol limit)
Definition qdefs.h:105
float S_GetEntChannelPosition(int entnum, int entchannel)
Definition snd_main.c:1790
#define CHAN_USER2ENGINE(c)
Definition sound.h:90
#define IS_CHAN(n)
Definition sound.h:82

References CHAN_USER2ENGINE, CLVM_prog, entnum, int(), IS_CHAN, MAX_EDICTS, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_NUM_FOR_EDICT, S_GetEntChannelPosition(), SVVM_prog, VM_getsoundtime(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_getsoundtime().

◆ VM_getsurfaceclippedpoint()

void VM_getsurfaceclippedpoint ( prvm_prog_t * prog)

Definition at line 6478 of file prvm_cmds.c.

6479{
6480 prvm_edict_t *ed;
6481 model_t *model;
6482 msurface_t *surface;
6483 vec3_t p, out, inp;
6486 ed = PRVM_G_EDICT(OFS_PARM0);
6487 if (!(model = getmodel(prog, ed)) || !(surface = getsurface(model, (int)PRVM_G_FLOAT(OFS_PARM1))))
6488 return;
6489 animatemodel(prog, model, ed);
6491 applytransform_inverted(prog, inp, ed, p);
6492 clippointtosurface(prog, ed, model, surface, p, out);
6494}
vector origin
string model
#define VectorAdd(a, b, out)
Definition mathlib.h:100
#define PRVM_serveredictvector(ed, fieldname)
Definition progsvm.h:173
static void clippointtosurface(prvm_prog_t *prog, prvm_edict_t *ed, model_t *model, msurface_t *surface, vec3_t p, vec3_t out)
Definition prvm_cmds.c:6236
static void applytransform_inverted(prvm_prog_t *prog, const vec3_t in, prvm_edict_t *ed, vec3_t out)
Definition prvm_cmds.c:6219
static void animatemodel(prvm_prog_t *prog, model_t *model, prvm_edict_t *ed)
Definition prvm_cmds.c:6138
static model_t * getmodel(prvm_prog_t *prog, prvm_edict_t *ed)
Definition prvm_cmds.c:6100
void VM_getsurfaceclippedpoint(prvm_prog_t *prog)
Definition prvm_cmds.c:6478
static msurface_t * getsurface(model_t *model, int surfacenum)
Definition prvm_cmds.c:6273
describes the textures to use on a range of triangles in the model, and mins/maxs (AABB) for culling.

References animatemodel(), applytransform_inverted(), clippointtosurface(), getmodel(), getsurface(), model, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, origin, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_VECTOR, PRVM_serveredictvector, VectorAdd, VectorClear, VectorCopy, VM_getsurfaceclippedpoint(), and VM_SAFEPARMCOUNT.

Referenced by VM_getsurfaceclippedpoint().

◆ VM_getsurfacenearpoint()

void VM_getsurfacenearpoint ( prvm_prog_t * prog)

Definition at line 6428 of file prvm_cmds.c.

6429{
6430 int surfacenum, best;
6431 vec3_t clipped, p;
6432 vec_t dist, bestdist;
6433 prvm_edict_t *ed;
6434 model_t *model;
6435 msurface_t *surface;
6436 vec3_t point;
6439 ed = PRVM_G_EDICT(OFS_PARM0);
6441
6442 if (!ed || ed->free)
6443 return;
6444 model = getmodel(prog, ed);
6445 if (!model || !model->num_surfaces)
6446 return;
6447
6448 animatemodel(prog, model, ed);
6449
6450 applytransform_inverted(prog, point, ed, p);
6451 best = -1;
6452 bestdist = 1000000000;
6453 for (surfacenum = model->submodelsurfaces_start;surfacenum < model->submodelsurfaces_end;surfacenum++)
6454 {
6455 surface = model->data_surfaces + surfacenum;
6456 // first see if the nearest point on the surface's box is closer than the previous match
6457 clipped[0] = bound(surface->mins[0], p[0], surface->maxs[0]) - p[0];
6458 clipped[1] = bound(surface->mins[1], p[1], surface->maxs[1]) - p[1];
6459 clipped[2] = bound(surface->mins[2], p[2], surface->maxs[2]) - p[2];
6460 dist = VectorLength2(clipped);
6461 if (dist < bestdist)
6462 {
6463 // it is, check the nearest point on the actual geometry
6464 clippointtosurface(prog, ed, model, surface, p, clipped);
6465 VectorSubtract(clipped, p, clipped);
6466 dist += VectorLength2(clipped);
6467 if (dist < bestdist)
6468 {
6469 // that's closer too, store it as the best match
6470 best = surfacenum - model->submodelsurfaces_start;
6471 bestdist = dist;
6472 }
6473 }
6474 }
6475 PRVM_G_FLOAT(OFS_RETURN) = best;
6476}
#define VectorLength2(a)
Definition mathlib.h:110
#define VectorSubtract(a, b, out)
Definition mathlib.h:99
void VM_getsurfacenearpoint(prvm_prog_t *prog)
Definition prvm_cmds.c:6428
float vec_t
Definition qtypes.h:68
vec3_t mins
bounding box for onscreen checks

References animatemodel(), applytransform_inverted(), bound, clippointtosurface(), prvm_edict_t::free, getmodel(), msurface_t::maxs, msurface_t::mins, model, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_VECTOR, VectorCopy, VectorLength2, VectorSubtract, VM_getsurfacenearpoint(), and VM_SAFEPARMCOUNT.

Referenced by VM_getsurfacenearpoint().

◆ VM_getsurfacenormal()

void VM_getsurfacenormal ( prvm_prog_t * prog)

Definition at line 6397 of file prvm_cmds.c.

6398{
6399 model_t *model;
6400 msurface_t *surface;
6401 vec3_t normal;
6402 vec3_t result;
6405 if (!(model = getmodel(prog, PRVM_G_EDICT(OFS_PARM0))) || !(surface = getsurface(model, (int)PRVM_G_FLOAT(OFS_PARM1))))
6406 return;
6407 // note: this only returns the first triangle, so it doesn't work very
6408 // well for curved surfaces or arbitrary meshes
6412 VectorNormalize(result);
6414}
#define VectorNormalize(v)
Definition mathlib.h:104
#define TriangleNormal(a, b, c, n)
Definition mathlib.h:126
static void applytransform_forward_normal(prvm_prog_t *prog, const vec3_t in, prvm_edict_t *ed, vec3_t out)
Definition prvm_cmds.c:6227
void VM_getsurfacenormal(prvm_prog_t *prog)
Definition prvm_cmds.c:6397
vec3 normal
int num_firstvertex
struct animatemodel_cache * animatemodel_cache
Definition progsvm.h:719

References animatemodel(), prvm_prog_t::animatemodel_cache, applytransform_forward_normal(), animatemodel_cache::data_vertex3f, getmodel(), getsurface(), model, normal, msurface_t::num_firstvertex, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_VECTOR, TriangleNormal, VectorClear, VectorCopy, VectorNormalize, VM_getsurfacenormal(), and VM_SAFEPARMCOUNT.

Referenced by VM_getsurfacenormal().

◆ VM_getsurfacenumpoints()

void VM_getsurfacenumpoints ( prvm_prog_t * prog)

Definition at line 6282 of file prvm_cmds.c.

6283{
6284 model_t *model;
6285 msurface_t *surface;
6287 // return 0 if no such surface
6288 if (!(model = getmodel(prog, PRVM_G_EDICT(OFS_PARM0))) || !(surface = getsurface(model, (int)PRVM_G_FLOAT(OFS_PARM1))))
6289 {
6291 return;
6292 }
6293
6294 // note: this (incorrectly) assumes it is a simple polygon
6296}
void VM_getsurfacenumpoints(prvm_prog_t *prog)
Definition prvm_cmds.c:6282

References getmodel(), getsurface(), model, msurface_t::num_vertices, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, VM_getsurfacenumpoints(), and VM_SAFEPARMCOUNT.

Referenced by VM_getsurfacenumpoints().

◆ VM_getsurfacenumtriangles()

void VM_getsurfacenumtriangles ( prvm_prog_t * prog)

Definition at line 6497 of file prvm_cmds.c.

6498{
6499 model_t *model;
6500 msurface_t *surface;
6502 // return 0 if no such surface
6503 if (!(model = getmodel(prog, PRVM_G_EDICT(OFS_PARM0))) || !(surface = getsurface(model, (int)PRVM_G_FLOAT(OFS_PARM1))))
6504 {
6506 return;
6507 }
6508
6510}
void VM_getsurfacenumtriangles(prvm_prog_t *prog)
Definition prvm_cmds.c:6497
int num_triangles
range of triangles and vertices in model->surfmesh

References getmodel(), getsurface(), model, msurface_t::num_triangles, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, VM_getsurfacenumtriangles(), and VM_SAFEPARMCOUNT.

Referenced by VM_getsurfacenumtriangles().

◆ VM_getsurfacepoint()

void VM_getsurfacepoint ( prvm_prog_t * prog)

Definition at line 6298 of file prvm_cmds.c.

6299{
6300 prvm_edict_t *ed;
6301 model_t *model;
6302 msurface_t *surface;
6303 int pointnum;
6304 vec3_t result;
6307 ed = PRVM_G_EDICT(OFS_PARM0);
6308 if (!(model = getmodel(prog, ed)) || !(surface = getsurface(model, (int)PRVM_G_FLOAT(OFS_PARM1))))
6309 return;
6310 // note: this (incorrectly) assumes it is a simple polygon
6311 pointnum = (int)PRVM_G_FLOAT(OFS_PARM2);
6312 if (pointnum < 0 || pointnum >= surface->num_vertices)
6313 return;
6314 animatemodel(prog, model, ed);
6315 applytransform_forward(prog, &(prog->animatemodel_cache->data_vertex3f + 3 * surface->num_firstvertex)[pointnum * 3], ed, result);
6317}
void VM_getsurfacepoint(prvm_prog_t *prog)
Definition prvm_cmds.c:6298
static void applytransform_forward(prvm_prog_t *prog, const vec3_t in, prvm_edict_t *ed, vec3_t out)
Definition prvm_cmds.c:6205

References animatemodel(), prvm_prog_t::animatemodel_cache, applytransform_forward(), animatemodel_cache::data_vertex3f, getmodel(), getsurface(), int(), model, msurface_t::num_firstvertex, msurface_t::num_vertices, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_VECTOR, VectorClear, VectorCopy, VM_getsurfacepoint(), and VM_SAFEPARMCOUNT.

Referenced by VM_getsurfacepoint().

◆ VM_getsurfacepointattribute()

void VM_getsurfacepointattribute ( prvm_prog_t * prog)

Definition at line 6326 of file prvm_cmds.c.

6327{
6328 prvm_edict_t *ed;
6329 model_t *model;
6330 msurface_t *surface;
6331 int pointnum;
6332 int attributetype;
6333 vec3_t result;
6334
6337 ed = PRVM_G_EDICT(OFS_PARM0);
6338 if (!(model = getmodel(prog, ed)) || !(surface = getsurface(model, (int)PRVM_G_FLOAT(OFS_PARM1))))
6339 return;
6340 pointnum = (int)PRVM_G_FLOAT(OFS_PARM2);
6341 if (pointnum < 0 || pointnum >= surface->num_vertices)
6342 return;
6343 attributetype = (int) PRVM_G_FLOAT(OFS_PARM3);
6344
6345 animatemodel(prog, model, ed);
6346
6347 switch( attributetype ) {
6348 // float SPA_POSITION = 0;
6349 case 0:
6350 applytransform_forward(prog, &(prog->animatemodel_cache->data_vertex3f + 3 * surface->num_firstvertex)[pointnum * 3], ed, result);
6352 break;
6353 // float SPA_S_AXIS = 1;
6354 case 1:
6355 applytransform_forward_direction(prog, &(prog->animatemodel_cache->data_svector3f + 3 * surface->num_firstvertex)[pointnum * 3], ed, result);
6357 break;
6358 // float SPA_T_AXIS = 2;
6359 case 2:
6360 applytransform_forward_direction(prog, &(prog->animatemodel_cache->data_tvector3f + 3 * surface->num_firstvertex)[pointnum * 3], ed, result);
6362 break;
6363 // float SPA_R_AXIS = 3; // same as SPA_NORMAL
6364 case 3:
6365 applytransform_forward_direction(prog, &(prog->animatemodel_cache->data_normal3f + 3 * surface->num_firstvertex)[pointnum * 3], ed, result);
6367 break;
6368 // float SPA_TEXCOORDS0 = 4;
6369 case 4: {
6370 float *texcoord = &(model->surfmesh.data_texcoordtexture2f + 2 * surface->num_firstvertex)[pointnum * 2];
6371 result[0] = texcoord[0];
6372 result[1] = texcoord[1];
6373 result[2] = 0.0f;
6375 break;
6376 }
6377 // float SPA_LIGHTMAP0_TEXCOORDS = 5;
6378 case 5: {
6379 float *texcoord = &(model->surfmesh.data_texcoordlightmap2f + 2 * surface->num_firstvertex)[pointnum * 2];
6380 result[0] = texcoord[0];
6381 result[1] = texcoord[1];
6382 result[2] = 0.0f;
6384 break;
6385 }
6386 // float SPA_LIGHTMAP0_COLOR = 6;
6387 case 6:
6388 // ignore alpha for now..
6389 VectorCopy( &(model->surfmesh.data_lightmapcolor4f + 4 * surface->num_firstvertex)[pointnum * 4], PRVM_G_VECTOR(OFS_RETURN));
6390 break;
6391 default:
6392 VectorSet( PRVM_G_VECTOR(OFS_RETURN), 0.0f, 0.0f, 0.0f );
6393 break;
6394 }
6395}
#define VectorSet(vec, x, y, z)
Definition mathlib.h:96
void VM_getsurfacepointattribute(prvm_prog_t *prog)
Definition prvm_cmds.c:6326
static void applytransform_forward_direction(prvm_prog_t *prog, const vec3_t in, prvm_edict_t *ed, vec3_t out)
Definition prvm_cmds.c:6212

References animatemodel(), prvm_prog_t::animatemodel_cache, applytransform_forward(), applytransform_forward_direction(), animatemodel_cache::data_normal3f, animatemodel_cache::data_svector3f, animatemodel_cache::data_tvector3f, animatemodel_cache::data_vertex3f, getmodel(), getsurface(), int(), model, msurface_t::num_firstvertex, msurface_t::num_vertices, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_VECTOR, VectorClear, VectorCopy, VectorSet, VM_getsurfacepointattribute(), and VM_SAFEPARMCOUNT.

Referenced by VM_getsurfacepointattribute().

◆ VM_getsurfacetexture()

void VM_getsurfacetexture ( prvm_prog_t * prog)

Definition at line 6416 of file prvm_cmds.c.

6417{
6418 model_t *model;
6419 msurface_t *surface;
6420
6423 if (!(model = getmodel(prog, PRVM_G_EDICT(OFS_PARM0))) || !(surface = getsurface(model, (int)PRVM_G_FLOAT(OFS_PARM1))))
6424 return;
6425 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, surface->texture->name, strlen(surface->texture->name));
6426}
void VM_getsurfacetexture(prvm_prog_t *prog)
Definition prvm_cmds.c:6416
texture_t * texture
the texture to use on the surface
char name[64]

References getmodel(), getsurface(), model, texture_t::name, OFS_NULL, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_INT, PRVM_SetTempString(), strlen(), msurface_t::texture, VM_getsurfacetexture(), and VM_SAFEPARMCOUNT.

Referenced by VM_getsurfacetexture().

◆ VM_getsurfacetriangle()

void VM_getsurfacetriangle ( prvm_prog_t * prog)

Definition at line 6512 of file prvm_cmds.c.

6513{
6514 const vec3_t d = {-1, -1, -1};
6515 prvm_edict_t *ed;
6516 model_t *model;
6517 msurface_t *surface;
6518 int trinum;
6521 ed = PRVM_G_EDICT(OFS_PARM0);
6522 if (!(model = getmodel(prog, ed)) || !(surface = getsurface(model, (int)PRVM_G_FLOAT(OFS_PARM1))))
6523 return;
6524 trinum = (int)PRVM_G_FLOAT(OFS_PARM2);
6525 if (trinum < 0 || trinum >= surface->num_triangles)
6526 return;
6527 // FIXME: implement rotation/scaling
6528 VectorMA(&(model->surfmesh.data_element3i + 3 * surface->num_firsttriangle)[trinum * 3], surface->num_firstvertex, d, PRVM_G_VECTOR(OFS_RETURN));
6529}
#define VectorMA(a, scale, b, out)
Definition mathlib.h:114
void VM_getsurfacetriangle(prvm_prog_t *prog)
Definition prvm_cmds.c:6512
int num_firsttriangle

References getmodel(), getsurface(), int(), model, msurface_t::num_firsttriangle, msurface_t::num_firstvertex, msurface_t::num_triangles, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_VECTOR, VectorClear, VectorMA, VM_getsurfacetriangle(), and VM_SAFEPARMCOUNT.

Referenced by VM_getsurfacetriangle().

◆ VM_gettime()

void VM_gettime ( prvm_prog_t * prog)

Definition at line 2948 of file prvm_cmds.c.

2949{
2950 int timer_index;
2951
2953
2954 if(prog->argc == 0)
2955 {
2957 }
2958 else
2959 {
2960 timer_index = (int) PRVM_G_FLOAT(OFS_PARM0);
2961 switch(timer_index)
2962 {
2963 case 0: // GETTIME_FRAMESTART
2965 break;
2966 case 1: // GETTIME_REALTIME
2968 break;
2969 case 2: // GETTIME_HIRES
2971 break;
2972 case 3: // GETTIME_UPTIME
2974 break;
2975 case 4: // GETTIME_CDTRACK
2977 break;
2978 default:
2979 VM_Warning(prog, "VM_gettime: unsupported timer specified, returning realtime\n");
2981 break;
2982 }
2983 }
2984}
host_static_t host
Definition host.c:41
void VM_gettime(prvm_prog_t *prog)
Definition prvm_cmds.c:2948
float CDAudio_GetPosition(void)
Definition cd_shared.c:220
double dirtytime
the main loop wall time for this frame, equal to Sys_DirtyTime() at the start of this host frame
Definition host.h:47
double realtime
the accumulated mainloop time since application started (with filtering), without any slowmo or clamp...
Definition host.h:46
double starttime
system time when PRVM_Prog_Load was called
Definition progsvm.h:538
double Sys_DirtyTime(void)
Definition sys_shared.c:417

References prvm_prog_t::argc, CDAudio_GetPosition(), host_static_t::dirtytime, host, int(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, host_static_t::realtime, prvm_prog_t::starttime, Sys_DirtyTime(), VM_gettime(), VM_SAFEPARMCOUNTRANGE, and VM_Warning().

Referenced by VM_gettime().

◆ VM_infoadd()

void VM_infoadd ( prvm_prog_t * prog)

Definition at line 5090 of file prvm_cmds.c.

5091{
5092 const char *info, *key;
5094 char temp[VM_TEMPSTRING_MAXSIZE];
5095
5097 info = PRVM_G_STRING(OFS_PARM0);
5098 key = PRVM_G_STRING(OFS_PARM1);
5099 VM_VarString(prog, 2, value, sizeof(value));
5100
5101 dp_strlcpy(temp, info, VM_TEMPSTRING_MAXSIZE);
5102
5104
5105 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, temp, strlen(temp));
5106}
void InfoString_SetValue(char *buffer, size_t bufferlength, const char *key, const char *value)
void VM_infoadd(prvm_prog_t *prog)
Definition prvm_cmds.c:5090

References dp_strlcpy, InfoString_SetValue(), OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), strlen(), value, VM_infoadd(), VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_infoadd().

◆ VM_infoget()

void VM_infoget ( prvm_prog_t * prog)

Definition at line 5110 of file prvm_cmds.c.

5111{
5112 const char *info;
5113 const char *key;
5115
5117 info = PRVM_G_STRING(OFS_PARM0);
5118 key = PRVM_G_STRING(OFS_PARM1);
5119
5121
5123}
size_t InfoString_GetValue(const char *buffer, const char *key, char *value, size_t valuesize)
Returns the number of bytes written to *value excluding the \0 terminator.
void VM_infoget(prvm_prog_t *prog)
Definition prvm_cmds.c:5110

References InfoString_GetValue(), OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), strlen(), value, VM_infoget(), VM_SAFEPARMCOUNT, and VM_TEMPSTRING_MAXSIZE.

Referenced by VM_infoget().

◆ VM_iscachedpic()

void VM_iscachedpic ( prvm_prog_t * prog)

Definition at line 1287 of file clvm_cmds.c.

1288{
1290
1291 // drawq hasnt such a function, thus always return true
1292 PRVM_G_FLOAT(OFS_RETURN) = false;
1293}
void VM_iscachedpic(prvm_prog_t *prog)
Definition clvm_cmds.c:1287

References OFS_RETURN, PRVM_G_FLOAT, VM_iscachedpic(), and VM_SAFEPARMCOUNT.

Referenced by VM_iscachedpic().

◆ VM_isfunction()

void VM_isfunction ( prvm_prog_t * prog)

Definition at line 5745 of file prvm_cmds.c.

5746{
5747 mfunction_t *func;
5748 const char *s;
5749
5751
5753
5754 VM_CheckEmptyString(prog, s);
5755
5756 func = PRVM_ED_FindFunction(prog, s);
5757
5758 if(!func)
5759 PRVM_G_FLOAT(OFS_RETURN) = false;
5760 else
5761 PRVM_G_FLOAT(OFS_RETURN) = true;
5762}
void VM_isfunction(prvm_prog_t *prog)
Definition prvm_cmds.c:5745

References OFS_PARM0, OFS_RETURN, PRVM_ED_FindFunction(), PRVM_G_FLOAT, PRVM_G_STRING, VM_CheckEmptyString(), VM_isfunction(), and VM_SAFEPARMCOUNT.

Referenced by VM_isfunction().

◆ VM_isserver()

void VM_isserver ( prvm_prog_t * prog)

Definition at line 2864 of file prvm_cmds.c.

2865{
2867
2869}
void VM_isserver(prvm_prog_t *prog)
Definition prvm_cmds.c:2864

References server_t::active, OFS_RETURN, PRVM_G_FLOAT, sv, VM_isserver(), and VM_SAFEPARMCOUNT.

Referenced by VM_isserver().

◆ VM_itof()

void VM_itof ( prvm_prog_t * prog)

Definition at line 969 of file prvm_cmds.c.

970{
973}
void VM_itof(prvm_prog_t *prog)
Definition prvm_cmds.c:969

References OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, VM_itof(), and VM_SAFEPARMCOUNT.

Referenced by VM_itof().

◆ VM_keynumtostring()

void VM_keynumtostring ( prvm_prog_t * prog)

Definition at line 3331 of file prvm_cmds.c.

3332{
3333 char tinystr[TINYSTR_LEN];
3334 const char *str; // Key_KeynumToString doesn't always return tinystr
3335
3337 str = Key_KeynumToString((int)PRVM_G_FLOAT(OFS_PARM0), tinystr, sizeof(tinystr));
3338 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, str, strlen(str));
3339}
const char * Key_KeynumToString(int keynum, char *tinystr, size_t tinystrlength)
Definition keys.c:1383
#define TINYSTR_LEN
Definition keys.h:46
void VM_keynumtostring(prvm_prog_t *prog)
Definition prvm_cmds.c:3331

References Key_KeynumToString(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_SetTempString(), strlen(), TINYSTR_LEN, VM_keynumtostring(), and VM_SAFEPARMCOUNT.

Referenced by VM_keynumtostring().

◆ VM_loadfont()

void VM_loadfont ( prvm_prog_t * prog)

Definition at line 1630 of file clvm_cmds.c.

1631{
1632 const char *fontname, *filelist, *sizes, *c, *cm;
1633 char mainfont[MAX_QPATH];
1634 int i, numsizes;
1635 float sz, scale, voffset;
1636 dp_font_t *f;
1637
1639
1640 fontname = PRVM_G_STRING(OFS_PARM0);
1641 if (!fontname[0])
1642 fontname = "default";
1643
1644 filelist = PRVM_G_STRING(OFS_PARM1);
1645 if (!filelist[0])
1646 filelist = "gfx/conchars";
1647
1648 sizes = PRVM_G_STRING(OFS_PARM2);
1649 if (!sizes[0])
1650 sizes = "10";
1651
1652 // find a font
1653 f = NULL;
1654 if (prog->argc >= 4)
1655 {
1657 if (i >= 0 && i < dp_fonts.maxsize)
1658 {
1659 f = &dp_fonts.f[i];
1660 dp_strlcpy(f->title, fontname, sizeof(f->title)); // replace name
1661 }
1662 }
1663 if (!f)
1664 f = FindFont(fontname, true);
1665 if (!f)
1666 {
1668 return; // something go wrong
1669 }
1670
1671 memset(f->fallbacks, 0, sizeof(f->fallbacks));
1672 memset(f->fallback_faces, 0, sizeof(f->fallback_faces));
1673
1674 // first font is handled "normally"
1675 c = strchr(filelist, ':');
1676 cm = strchr(filelist, ',');
1677 if(c && (!cm || c < cm))
1678 f->req_face = atoi(c+1);
1679 else
1680 {
1681 f->req_face = 0;
1682 c = cm;
1683 }
1684 if(!c || (c - filelist) >= MAX_QPATH)
1685 dp_strlcpy(mainfont, filelist, sizeof(mainfont));
1686 else
1687 {
1688 memcpy(mainfont, filelist, c - filelist);
1689 mainfont[c - filelist] = 0;
1690 }
1691
1692 // handle fallbacks
1693 for(i = 0; i < MAX_FONT_FALLBACKS; ++i)
1694 {
1695 c = strchr(filelist, ',');
1696 if(!c)
1697 break;
1698 filelist = c + 1;
1699 if(!*filelist)
1700 break;
1701 c = strchr(filelist, ':');
1702 cm = strchr(filelist, ',');
1703 if(c && (!cm || c < cm))
1704 f->fallback_faces[i] = atoi(c+1);
1705 else
1706 {
1707 f->fallback_faces[i] = 0; // f->req_face; could make it stick to the default-font's face index
1708 c = cm;
1709 }
1710 if(!c || (c-filelist) >= MAX_QPATH)
1711 {
1712 dp_strlcpy(f->fallbacks[i], filelist, sizeof(mainfont));
1713 }
1714 else
1715 {
1716 memcpy(f->fallbacks[i], filelist, c - filelist);
1717 f->fallbacks[i][c - filelist] = 0;
1718 }
1719 }
1720
1721 // handle sizes
1722 for(i = 0; i < MAX_FONT_SIZES; ++i)
1723 f->req_sizes[i] = -1;
1724 for (numsizes = 0,c = sizes;;)
1725 {
1726 if (!COM_ParseToken_VM_Tokenize(&c, 0))
1727 break;
1728 sz = atof(com_token);
1729 // detect crap size
1730 if (sz < 0.001f || sz > 1000.0f)
1731 {
1732 VM_Warning(prog, "VM_loadfont: crap size %s", com_token);
1733 continue;
1734 }
1735 // check overflow
1736 if (numsizes == MAX_FONT_SIZES)
1737 {
1738 VM_Warning(prog, "VM_loadfont: MAX_FONT_SIZES = %i exceeded", MAX_FONT_SIZES);
1739 break;
1740 }
1741 f->req_sizes[numsizes] = sz;
1742 numsizes++;
1743 }
1744
1745 // additional scale/hoffset parms
1746 scale = 1;
1747 voffset = 0;
1748 if (prog->argc >= 5)
1749 {
1751 if (scale <= 0)
1752 scale = 1;
1753 }
1754 if (prog->argc >= 6)
1755 voffset = PRVM_G_FLOAT(OFS_PARM5);
1756
1757 // load
1758 LoadFont(true, mainfont, f, scale, voffset);
1759
1760 // return index of loaded font
1762}
void VM_loadfont(prvm_prog_t *prog)
Definition clvm_cmds.c:1630
char com_token[MAX_INPUTLINE]
Definition common.c:39
qbool COM_ParseToken_VM_Tokenize(const char **datapointer, qbool returnnewline)
Definition common.c:700
dp_fonts_t dp_fonts
Definition gl_draw.c:50
#define MAX_FONT_FALLBACKS
Definition draw.h:95
#define MAX_FONT_SIZES
Definition draw.h:94
void LoadFont(qbool override, const char *name, dp_font_t *fnt, float scale, float voffset)
Definition gl_draw.c:330
dp_font_t * FindFont(const char *title, qbool allocate_new)
Definition gl_draw.c:481
#define MAX_QPATH
max length of a quake game pathname
Definition qdefs.h:169
int maxsize
Definition draw.h:121
dp_font_t * f
Definition draw.h:120

References prvm_prog_t::argc, COM_ParseToken_VM_Tokenize(), com_token, dp_fonts, dp_strlcpy, dp_fonts_t::f, f, FindFont(), i, LoadFont(), MAX_FONT_FALLBACKS, MAX_FONT_SIZES, MAX_QPATH, dp_fonts_t::maxsize, NULL, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_PARM5, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, scale, VM_loadfont(), VM_SAFEPARMCOUNTRANGE, and VM_Warning().

Referenced by VM_loadfont().

◆ VM_loadfromdata()

void VM_loadfromdata ( prvm_prog_t * prog)

Definition at line 3040 of file prvm_cmds.c.

3041{
3043
3045}
void PRVM_ED_LoadFromFile(prvm_prog_t *prog, const char *data)
void VM_loadfromdata(prvm_prog_t *prog)
Definition prvm_cmds.c:3040

References OFS_PARM0, PRVM_ED_LoadFromFile(), PRVM_G_STRING, VM_loadfromdata(), and VM_SAFEPARMCOUNT.

Referenced by VM_loadfromdata().

◆ VM_loadfromfile()

void VM_loadfromfile ( prvm_prog_t * prog)

Definition at line 3082 of file prvm_cmds.c.

3083{
3084 const char *filename;
3085 char *data;
3086
3088
3089 filename = PRVM_G_STRING(OFS_PARM0);
3090 if (FS_CheckNastyPath(filename, false))
3091 {
3093 VM_Warning(prog, "VM_loadfromfile: dangerous or non-portable filename \"%s\" not allowed. (contains : or \\ or begins with .. or /)\n", filename);
3094 return;
3095 }
3096
3097 // not conform with VM_fopen
3098 data = (char *)FS_LoadFile(filename, tempmempool, false, NULL);
3099 if (data == NULL)
3101
3103
3104 if(data)
3105 Mem_Free(data);
3106}
unsigned char * FS_LoadFile(const char *path, mempool_t *pool, qbool quiet, fs_offset_t *filesizepointer)
Definition fs.c:3540
int FS_CheckNastyPath(const char *path, qbool isgamedir)
Definition fs.c:2618
GLsizeiptr const GLvoid * data
Definition glquake.h:639
void VM_loadfromfile(prvm_prog_t *prog)
Definition prvm_cmds.c:3082
mempool_t * tempmempool
Definition zone.c:794

References data, FS_CheckNastyPath(), FS_LoadFile(), Mem_Free, NULL, OFS_PARM0, OFS_RETURN, PRVM_ED_LoadFromFile(), PRVM_G_FLOAT, PRVM_G_STRING, tempmempool, VM_loadfromfile(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_loadfromfile().

◆ VM_localcmd()

void VM_localcmd ( prvm_prog_t * prog)

Definition at line 678 of file prvm_cmds.c.

679{
680 char string[VM_TEMPSTRING_MAXSIZE];
682 VM_VarString(prog, 0, string, sizeof(string));
683 Cbuf_AddText(cmd_local, string);
684}
void VM_localcmd(prvm_prog_t *prog)
Definition prvm_cmds.c:678

References Cbuf_AddText(), cmd_local, VM_localcmd(), VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_localcmd().

◆ VM_localsound()

void VM_localsound ( prvm_prog_t * prog)

Definition at line 625 of file prvm_cmds.c.

626{
627 const char *s;
628 float chan, vol;
629
631
633 if(prog->argc == 3)
634 {
635 chan = PRVM_G_FLOAT(OFS_PARM1);
636 vol = PRVM_G_FLOAT(OFS_PARM2) == 0 ? 1 : PRVM_G_FLOAT(OFS_PARM2);
637 if(!S_LocalSoundEx(s, chan, vol))
638 {
640 VM_Warning(prog, "VM_localsound: Failed to play %s !\n", s);
641 return;
642 }
643 }
644 else if(!S_LocalSound (s))
645 {
647 VM_Warning(prog, "VM_localsound: Failed to play %s !\n", s);
648 return;
649 }
650
652}
void VM_localsound(prvm_prog_t *prog)
Definition prvm_cmds.c:625
qbool S_LocalSound(const char *sound)
Definition snd_main.c:2246
qbool S_LocalSoundEx(const char *sound, int chan, float fvol)
Definition snd_main.c:2217

References prvm_prog_t::argc, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, S_LocalSound(), S_LocalSoundEx(), VM_localsound(), VM_SAFEPARMCOUNTRANGE, and VM_Warning().

Referenced by VM_localsound().

◆ VM_log()

void VM_log ( prvm_prog_t * prog)

Definition at line 1850 of file prvm_cmds.c.

1851{
1854}
float log(float f)
void VM_log(prvm_prog_t *prog)
Definition prvm_cmds.c:1850

References log(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, VM_log(), and VM_SAFEPARMCOUNT.

Referenced by VM_log().

◆ VM_makevectors()

void VM_makevectors ( prvm_prog_t * prog)

Definition at line 3563 of file prvm_cmds.c.

3564{
3572}
vector v_up
vector v_right
vector v_forward
void AngleVectors(const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
Definition mathlib.c:444
void VM_makevectors(prvm_prog_t *prog)
Definition prvm_cmds.c:3563
static vec3_t forward
Definition sv_user.c:305
static vec3_t right
Definition sv_user.c:305
static vec3_t up
Definition sv_user.c:305

References angles, AngleVectors(), forward, OFS_PARM0, PRVM_G_VECTOR, PRVM_gameglobalvector, right, up, v_forward, v_right, v_up, VectorCopy, VM_makevectors(), and VM_SAFEPARMCOUNT.

Referenced by VM_makevectors().

◆ VM_matchpattern()

void VM_matchpattern ( prvm_prog_t * prog)

Definition at line 4619 of file prvm_cmds.c.

4620{
4621 const char *s, *match;
4622 char string[VM_TEMPSTRING_MAXSIZE];
4623 int matchrule, l;
4624
4626
4628
4629 // get pattern/rule
4630 matchrule = (int)PRVM_G_FLOAT(OFS_PARM2);
4631 if (matchrule < 0 || matchrule > 5)
4632 {
4633 VM_Warning(prog, "VM_matchpattern: invalid match rule %i\n", matchrule);
4634 return;
4635 }
4636 if (matchrule)
4637 match = PRVM_G_STRING(OFS_PARM1);
4638 else
4639 {
4640 dp_strlcpy(string, PRVM_G_STRING(OFS_PARM1), sizeof(string));
4641 match = detect_match_rule(string, &matchrule);
4642 }
4643
4644 // offset
4645 l = (int)strlen(match);
4646 if (prog->argc > 3)
4647 s += max(0, min((unsigned int)PRVM_G_FLOAT(OFS_PARM3), strlen(s)-1));
4648
4649 // match
4650 PRVM_G_FLOAT(OFS_RETURN) = match_rule(s, VM_TEMPSTRING_MAXSIZE, match, l, matchrule);
4651}
#define min(A, B)
Definition mathlib.h:37
void VM_matchpattern(prvm_prog_t *prog)
Definition prvm_cmds.c:4619

References prvm_prog_t::argc, detect_match_rule(), dp_strlcpy, int(), match_rule(), max, min, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, strlen(), VM_matchpattern(), VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, and VM_Warning().

Referenced by VM_matchpattern().

◆ VM_max()

void VM_max ( prvm_prog_t * prog)

Definition at line 1803 of file prvm_cmds.c.

1804{
1806 // LadyHavoc: 3+ argument enhancement suggested by FrikaC
1807 if (prog->argc >= 3)
1808 {
1809 int i;
1810 float f = PRVM_G_FLOAT(OFS_PARM0);
1811 for (i = 1;i < prog->argc;i++)
1812 if (f < PRVM_G_FLOAT((OFS_PARM0+i*3)))
1813 f = PRVM_G_FLOAT((OFS_PARM0+i*3));
1815 }
1816 else
1818}
void VM_max(prvm_prog_t *prog)
Definition prvm_cmds.c:1803

References prvm_prog_t::argc, f, i, max, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, VM_max(), and VM_SAFEPARMCOUNTRANGE.

Referenced by VM_max().

◆ VM_min()

void VM_min ( prvm_prog_t * prog)

Definition at line 1777 of file prvm_cmds.c.

1778{
1780 // LadyHavoc: 3+ argument enhancement suggested by FrikaC
1781 if (prog->argc >= 3)
1782 {
1783 int i;
1784 float f = PRVM_G_FLOAT(OFS_PARM0);
1785 for (i = 1;i < prog->argc;i++)
1786 if (f > PRVM_G_FLOAT((OFS_PARM0+i*3)))
1787 f = PRVM_G_FLOAT((OFS_PARM0+i*3));
1789 }
1790 else
1792}
void VM_min(prvm_prog_t *prog)
Definition prvm_cmds.c:1777

References prvm_prog_t::argc, f, i, min, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, VM_min(), and VM_SAFEPARMCOUNTRANGE.

Referenced by VM_min().

◆ VM_modulo()

void VM_modulo ( prvm_prog_t * prog)

Definition at line 3116 of file prvm_cmds.c.

3117{
3118 vec_t val, m;
3119
3121
3122 val = PRVM_G_FLOAT(OFS_PARM0);
3124
3125 // matches how gmqcc implements % when mod() builtin isn't defined, and FTEQW mod()
3126 if (m)
3127 PRVM_G_FLOAT(OFS_RETURN) = val - m * (prvm_int_t)(val / m);
3128 else
3129 {
3130 VM_Warning(prog, "Attempted modulo of %f by zero\n", val);
3132 }
3133}
void VM_modulo(prvm_prog_t *prog)
Definition prvm_cmds.c:3116

References OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, VM_modulo(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_modulo().

◆ VM_netaddress_resolve()

void VM_netaddress_resolve ( prvm_prog_t * prog)

Definition at line 5590 of file prvm_cmds.c.

5591{
5592 const char *ip;
5593 char normalized[128];
5594 size_t normalized_len;
5595 int port;
5597
5599
5601 port = 0;
5602 if(prog->argc > 1)
5603 port = (int) PRVM_G_FLOAT(OFS_PARM1);
5604
5605 if(LHNETADDRESS_FromString(&addr, ip, port) && (normalized_len = LHNETADDRESS_ToString(&addr, normalized, sizeof(normalized), prog->argc > 1)))
5606 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, normalized, normalized_len);
5607 else
5609}
GLint GLenum GLboolean normalized
Definition glquake.h:797
int LHNETADDRESS_ToString(const lhnetaddress_t *vaddress, char *string, int stringbuffersize, int includeport)
Returns the number of bytes written to *string excluding the \0 terminator.
Definition lhnet.c:540
int LHNETADDRESS_FromString(lhnetaddress_t *vaddress, const char *string, int defaultport)
Definition lhnet.c:204
void VM_netaddress_resolve(prvm_prog_t *prog)
Definition prvm_cmds.c:5590
prvm_uint_t addr

References addr, prvm_prog_t::argc, int(), LHNETADDRESS_FromString(), LHNETADDRESS_ToString(), normalized, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), VM_netaddress_resolve(), and VM_SAFEPARMCOUNTRANGE.

Referenced by VM_netaddress_resolve().

◆ VM_nextent()

void VM_nextent ( prvm_prog_t * prog)

Definition at line 1556 of file prvm_cmds.c.

1557{
1558 int i;
1559 prvm_edict_t *ent;
1560
1562
1564 while (1)
1565 {
1566 prog->xfunction->builtinsprofile++;
1567 i++;
1568 if (i == prog->num_edicts)
1569 {
1570 VM_RETURN_EDICT(prog->edicts);
1571 return;
1572 }
1573 ent = PRVM_EDICT_NUM(i);
1574 if (!ent->free)
1575 {
1576 VM_RETURN_EDICT(ent);
1577 return;
1578 }
1579 }
1580}
void VM_nextent(prvm_prog_t *prog)
Definition prvm_cmds.c:1556

References mfunction_t::builtinsprofile, prvm_prog_t::edicts, prvm_edict_t::free, i, prvm_prog_t::num_edicts, OFS_PARM0, PRVM_EDICT_NUM, PRVM_G_EDICTNUM, VM_nextent(), VM_RETURN_EDICT, VM_SAFEPARMCOUNT, and prvm_prog_t::xfunction.

Referenced by VM_nextent().

◆ VM_normalize()

void VM_normalize ( prvm_prog_t * prog)

Definition at line 515 of file prvm_cmds.c.

516{
517 prvm_vec_t *value1;
518 vec3_t newvalue;
519 double f;
520
522
523 value1 = PRVM_G_VECTOR(OFS_PARM0);
524
525 f = VectorLength2(value1);
526 if (f)
527 {
528 f = 1.0 / sqrt(f);
529 VectorScale(value1, f, newvalue);
530 }
531 else
532 VectorClear(newvalue);
533
535}
#define VectorScale(in, scale, out)
Definition mathlib.h:111
float sqrt(float f)
void VM_normalize(prvm_prog_t *prog)
Definition prvm_cmds.c:515

References f, OFS_PARM0, OFS_RETURN, PRVM_G_VECTOR, sqrt(), VectorClear, VectorCopy, VectorLength2, VectorScale, VM_normalize(), and VM_SAFEPARMCOUNT.

Referenced by VM_normalize().

◆ VM_nudgeoutofsolid()

void VM_nudgeoutofsolid ( prvm_prog_t * prog)

Definition at line 5644 of file prvm_cmds.c.

5645{
5646 prvm_edict_t *ent;
5647
5649
5650 ent = PRVM_G_EDICT(OFS_PARM0);
5651 if (ent == prog->edicts)
5652 {
5653 VM_Warning(prog, "nudgeoutofsolid: can not modify world entity\n");
5655 return;
5656 }
5657 if (ent->free)
5658 {
5659 VM_Warning(prog, "nudgeoutofsolid: can not modify free entity\n");
5661 return;
5662 }
5663
5665
5666 if (PRVM_G_FLOAT(OFS_RETURN) > 0)
5667 {
5668 if (prog == SVVM_prog)
5669 SV_LinkEdict(ent);
5670 else if (prog == CLVM_prog)
5671 CL_LinkEdict(ent);
5672 else
5673 Sys_Error("PHYS_NudgeOutOfSolid: cannot be called from %s VM\n", prog->name);
5674 }
5675}
void CL_LinkEdict(prvm_edict_t *ent)
unstickresult_t PHYS_NudgeOutOfSolid(prvm_prog_t *prog, prvm_edict_t *ent)
Definition phys.c:136
void VM_nudgeoutofsolid(prvm_prog_t *prog)
Definition prvm_cmds.c:5644
void SV_LinkEdict(prvm_edict_t *ent)
Definition sv_phys.c:804
void Sys_Error(const char *error,...) DP_FUNC_PRINTF(1) DP_FUNC_NORETURN
Causes the entire program to exit ASAP.
Definition sys_shared.c:724

References CL_LinkEdict(), CLVM_prog, prvm_prog_t::edicts, prvm_edict_t::free, prvm_prog_t::name, OFS_PARM0, OFS_RETURN, PHYS_NudgeOutOfSolid(), PRVM_G_EDICT, PRVM_G_FLOAT, SV_LinkEdict(), SVVM_prog, Sys_Error(), VM_nudgeoutofsolid(), VM_SAFEPARMCOUNTRANGE, and VM_Warning().

Referenced by VM_nudgeoutofsolid().

◆ VM_numentityfields()

void VM_numentityfields ( prvm_prog_t * prog)

Definition at line 2115 of file prvm_cmds.c.

2116{
2118}

References prvm_prog_t::numfielddefs, OFS_RETURN, and PRVM_G_FLOAT.

◆ VM_objerror()

void VM_objerror ( prvm_prog_t * prog)

Definition at line 403 of file prvm_cmds.c.

404{
405 prvm_edict_t *ed;
406 char string[VM_TEMPSTRING_MAXSIZE];
407
408 VM_VarString(prog, 0, string, sizeof(string));
409 Con_Printf(CON_ERROR "======OBJECT ERROR======\n"); // , prog->name, PRVM_GetString(prog->xfunction->s_name), string); // or include them? FIXME
411 PRVM_ED_Print(prog, ed, NULL);
412 PRVM_ED_Free (prog, ed);
413 Con_Printf(CON_ERROR "%s OBJECT ERROR in %s:\n%s\nTip: read above for entity information\n", prog->name, PRVM_GetString(prog, prog->xfunction->s_name), string);
414}
void PRVM_ED_Free(prvm_prog_t *prog, prvm_edict_t *ed)
Definition prvm_edict.c:314

References CON_ERROR, Con_Printf(), prvm_prog_t::name, NULL, PRVM_allglobaledict, PRVM_ED_Free(), PRVM_ED_Print(), PRVM_GetString(), PRVM_PROG_TO_EDICT, mfunction_t::s_name, self, VM_TEMPSTRING_MAXSIZE, VM_VarString(), and prvm_prog_t::xfunction.

◆ VM_parseentitydata()

void VM_parseentitydata ( prvm_prog_t * prog)

Definition at line 3054 of file prvm_cmds.c.

3055{
3056 prvm_edict_t *ent;
3057 const char *data;
3058
3060
3061 // get edict and test it
3062 ent = PRVM_G_EDICT(OFS_PARM0);
3063 if (ent->free)
3064 prog->error_cmd("VM_parseentitydata: %s: Can only set already spawned entities (entity %i is free)!", prog->name, PRVM_NUM_FOR_EDICT(ent));
3065
3067
3068 // parse the opening brace
3069 if (!COM_ParseToken_Simple(&data, false, false, true) || com_token[0] != '{' )
3070 prog->error_cmd("VM_parseentitydata: %s: Couldn't parse entity data:\n%s", prog->name, data );
3071
3072 PRVM_ED_ParseEdict(prog, data, ent, true);
3073}
qbool COM_ParseToken_Simple(const char **datapointer, qbool returnnewline, qbool parsebackslash, qbool parsecomments)
Definition common.c:463
const char * PRVM_ED_ParseEdict(prvm_prog_t *prog, const char *data, prvm_edict_t *ent, qbool saveload)
void VM_parseentitydata(prvm_prog_t *prog)
Definition prvm_cmds.c:3054

References COM_ParseToken_Simple(), com_token, data, prvm_prog_t::error_cmd, prvm_edict_t::free, prvm_prog_t::name, OFS_PARM0, OFS_PARM1, PRVM_ED_ParseEdict(), PRVM_G_EDICT, PRVM_G_STRING, PRVM_NUM_FOR_EDICT, VM_parseentitydata(), and VM_SAFEPARMCOUNT.

Referenced by VM_parseentitydata().

◆ VM_physics_addforce()

void VM_physics_addforce ( prvm_prog_t * prog)

Definition at line 6584 of file prvm_cmds.c.

6585{
6586#ifdef USEODE
6587 prvm_edict_t *ed;
6588 edict_odefunc_t f;
6589#endif
6591#ifdef USEODE
6592 ed = PRVM_G_EDICT(OFS_PARM0);
6593 if (!ed)
6594 {
6595 if (developer.integer > 0)
6596 VM_Warning(prog, "VM_physics_addforce: null entity!\n");
6597 return;
6598 }
6599 // entity should have MOVETYPE_PHYSICS already set, this can damage memory (making leaked allocation) so warn about this even if non-developer
6601 {
6602 VM_Warning(prog, "VM_physics_addforce: entity is not MOVETYPE_PHYSICS!\n");
6603 return;
6604 }
6605 f.type = ODEFUNC_FORCE;
6608 VM_physics_ApplyCmd(ed, &f);
6609#endif
6610}
float movetype
cvar_t developer
Definition host.c:48
#define PRVM_serveredictfloat(ed, fieldname)
Definition progsvm.h:172
void VM_physics_addforce(prvm_prog_t *prog)
Definition prvm_cmds.c:6584
#define MOVETYPE_PHYSICS
indicates this object is physics controlled
Definition server.h:326

References developer, f, cvar_t::integer, movetype, MOVETYPE_PHYSICS, OFS_PARM0, OFS_PARM1, OFS_PARM2, PRVM_G_EDICT, PRVM_G_VECTOR, PRVM_serveredictfloat, VectorCopy, VM_physics_addforce(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_physics_addforce().

◆ VM_physics_addtorque()

void VM_physics_addtorque ( prvm_prog_t * prog)

Definition at line 6613 of file prvm_cmds.c.

6614{
6615#ifdef USEODE
6616 prvm_edict_t *ed;
6617 edict_odefunc_t f;
6618#endif
6620#ifdef USEODE
6621 ed = PRVM_G_EDICT(OFS_PARM0);
6622 if (!ed)
6623 {
6624 if (developer.integer > 0)
6625 VM_Warning(prog, "VM_physics_addtorque: null entity!\n");
6626 return;
6627 }
6628 // entity should have MOVETYPE_PHYSICS already set, this can damage memory (making leaked allocation) so warn about this even if non-developer
6630 {
6631 VM_Warning(prog, "VM_physics_addtorque: entity is not MOVETYPE_PHYSICS!\n");
6632 return;
6633 }
6634 f.type = ODEFUNC_TORQUE;
6636 VM_physics_ApplyCmd(ed, &f);
6637#endif
6638}
void VM_physics_addtorque(prvm_prog_t *prog)
Definition prvm_cmds.c:6613

References developer, f, cvar_t::integer, movetype, MOVETYPE_PHYSICS, OFS_PARM0, OFS_PARM1, PRVM_G_EDICT, PRVM_G_VECTOR, PRVM_serveredictfloat, VectorCopy, VM_physics_addtorque(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_physics_addtorque().

◆ VM_physics_enable()

void VM_physics_enable ( prvm_prog_t * prog)

Definition at line 6557 of file prvm_cmds.c.

6558{
6559#ifdef USEODE
6560 prvm_edict_t *ed;
6561 edict_odefunc_t f;
6562#endif
6564#ifdef USEODE
6565 ed = PRVM_G_EDICT(OFS_PARM0);
6566 if (!ed)
6567 {
6568 if (developer.integer > 0)
6569 VM_Warning(prog, "VM_physics_enable: null entity!\n");
6570 return;
6571 }
6572 // entity should have MOVETYPE_PHYSICS already set, this can damage memory (making leaked allocation) so warn about this even if non-developer
6574 {
6575 VM_Warning(prog, "VM_physics_enable: entity is not MOVETYPE_PHYSICS!\n");
6576 return;
6577 }
6578 f.type = PRVM_G_FLOAT(OFS_PARM1) == 0 ? ODEFUNC_DISABLE : ODEFUNC_ENABLE;
6579 VM_physics_ApplyCmd(ed, &f);
6580#endif
6581}
void VM_physics_enable(prvm_prog_t *prog)
Definition prvm_cmds.c:6557

References developer, f, cvar_t::integer, movetype, MOVETYPE_PHYSICS, OFS_PARM0, OFS_PARM1, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_serveredictfloat, VM_physics_enable(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_physics_enable().

◆ VM_pow()

void VM_pow ( prvm_prog_t * prog)

Definition at line 1844 of file prvm_cmds.c.

1845{
1848}
float pow(float a, float b)
void VM_pow(prvm_prog_t *prog)
Definition prvm_cmds.c:1844

References OFS_PARM0, OFS_PARM1, OFS_RETURN, pow(), PRVM_G_FLOAT, VM_pow(), and VM_SAFEPARMCOUNT.

Referenced by VM_pow().

◆ VM_precache_file()

void VM_precache_file ( prvm_prog_t * prog)

Definition at line 1407 of file prvm_cmds.c.

1408{
1410 // precache_file is only used to copy files with qcc, it does nothing
1412}
void VM_precache_file(prvm_prog_t *prog)
Definition prvm_cmds.c:1407

References OFS_PARM0, OFS_RETURN, PRVM_G_INT, VM_precache_file(), and VM_SAFEPARMCOUNT.

Referenced by VM_precache_file().

◆ VM_precache_pic()

void VM_precache_pic ( prvm_prog_t * prog)

Definition at line 1306 of file clvm_cmds.c.

1307{
1308 const char *s;
1310
1312
1315 VM_CheckEmptyString(prog, s);
1316
1317 if(prog->argc >= 2)
1318 {
1319 int f = PRVM_G_FLOAT(OFS_PARM1);
1322 //if(f & PRECACHE_PIC_NOCLAMP)
1323 // flags |= CACHEPICFLAG_NOCLAMP;
1326 }
1327
1330}
void VM_precache_pic(prvm_prog_t *prog)
Definition clvm_cmds.c:1306
#define PRECACHE_PIC_NOTPERSISTENT
Definition clvm_cmds.c:1303
#define PRECACHE_PIC_MIPMAP
Definition clvm_cmds.c:1305
@ CACHEPICFLAG_FAILONMISSING
Definition draw.h:44
@ CACHEPICFLAG_MIPMAP
Definition draw.h:41

References prvm_prog_t::argc, CACHEPICFLAG_FAILONMISSING, CACHEPICFLAG_MIPMAP, CACHEPICFLAG_NOTPERSISTENT, CACHEPICFLAG_QUIET, Draw_CachePic_Flags(), Draw_IsPicLoaded(), f, flags, OFS_NULL, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRECACHE_PIC_MIPMAP, PRECACHE_PIC_NOTPERSISTENT, PRVM_G_FLOAT, PRVM_G_INT, PRVM_G_STRING, VM_CheckEmptyString(), VM_precache_pic(), and VM_SAFEPARMCOUNTRANGE.

Referenced by VM_precache_pic().

◆ VM_precache_sound()

void VM_precache_sound ( prvm_prog_t * prog)

Definition at line 1381 of file prvm_cmds.c.

1382{
1383 const char *s;
1384
1386
1389 //VM_CheckEmptyString(prog, s);
1390
1391 if(snd_initialized.integer && !S_PrecacheSound(s, true, true))
1392 {
1393 VM_Warning(prog, "VM_precache_sound: Failed to load %s !\n", s);
1394 return;
1395 }
1396}
void VM_precache_sound(prvm_prog_t *prog)
Definition prvm_cmds.c:1381
cvar_t snd_initialized
Definition snd_main.c:167
sfx_t * S_PrecacheSound(const char *name, qbool complain, qbool levelsound)
Definition snd_main.c:1048

References cvar_t::integer, OFS_PARM0, OFS_RETURN, PRVM_G_INT, PRVM_G_STRING, S_PrecacheSound(), snd_initialized, VM_precache_sound(), VM_SAFEPARMCOUNT, and VM_Warning().

Referenced by VM_precache_sound().

◆ VM_print()

void VM_print ( prvm_prog_t * prog)

Definition at line 425 of file prvm_cmds.c.

426{
427 char string[VM_TEMPSTRING_MAXSIZE];
428
429 VM_VarString(prog, 0, string, sizeof(string));
430 Con_Print(string);
431}
void Con_Print(const char *msg)
Prints to all appropriate console targets, and adds timestamps.
Definition console.c:1504

References Con_Print(), VM_TEMPSTRING_MAXSIZE, and VM_VarString().

◆ VM_putentityfieldstring()

void VM_putentityfieldstring ( prvm_prog_t * prog)

Definition at line 2229 of file prvm_cmds.c.

2230{
2231 mdef_t *d;
2232 prvm_edict_t * ent;
2233 int i = (int)PRVM_G_FLOAT(OFS_PARM0);
2234
2235 if (i < 0 || i >= prog->numfielddefs)
2236 {
2237 VM_Warning(prog, "VM_entityfielddata: field index out of bounds!\n");
2238 PRVM_G_FLOAT(OFS_RETURN) = 0.0f;
2239 return;
2240 }
2241
2242 d = &prog->fielddefs[i];
2243
2244 // get the entity
2245 ent = PRVM_G_EDICT(OFS_PARM1);
2246 if(ent->free)
2247 {
2248 VM_Warning(prog, "VM_entityfielddata: entity %i is free!\n", PRVM_NUM_FOR_EDICT(ent));
2249 PRVM_G_FLOAT(OFS_RETURN) = 0.0f;
2250 return;
2251 }
2252
2253 // parse the string into the value
2254 PRVM_G_FLOAT(OFS_RETURN) = ( PRVM_ED_ParseEpair(prog, ent, d, PRVM_G_STRING(OFS_PARM2), false) ) ? 1.0f : 0.0f;
2255}
qbool PRVM_ED_ParseEpair(prvm_prog_t *prog, prvm_edict_t *ent, mdef_t *key, const char *s, qbool parsebackslash)
Definition prvm_edict.c:991

References prvm_prog_t::fielddefs, prvm_edict_t::free, i, int(), prvm_prog_t::numfielddefs, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_ED_ParseEpair(), PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_STRING, PRVM_NUM_FOR_EDICT, and VM_Warning().

◆ VM_random()

void VM_random ( prvm_prog_t * prog)

Definition at line 611 of file prvm_cmds.c.

612{
614
616}
#define lhrandom(MIN, MAX)
LadyHavoc: this function never returns exactly MIN or exactly MAX, because of a QuakeC bug in id1 whe...
Definition mathlib.h:48
void VM_random(prvm_prog_t *prog)
Definition prvm_cmds.c:611

References lhrandom, OFS_RETURN, PRVM_G_FLOAT, VM_random(), and VM_SAFEPARMCOUNT.

Referenced by VM_random().

◆ VM_randomvec()

void VM_randomvec ( prvm_prog_t * prog)

Definition at line 1719 of file prvm_cmds.c.

1720{
1721 vec3_t temp;
1723 VectorRandom(temp);
1725}
#define VectorRandom(v)
Definition mathlib.h:119
void VM_randomvec(prvm_prog_t *prog)
Definition prvm_cmds.c:1719

References OFS_RETURN, PRVM_G_VECTOR, VectorCopy, VectorRandom, VM_randomvec(), and VM_SAFEPARMCOUNT.

Referenced by VM_randomvec().

◆ VM_registercvar()

void VM_registercvar ( prvm_prog_t * prog)

Definition at line 1736 of file prvm_cmds.c.

1737{
1738 const char *name, *value;
1739 unsigned flags;
1740
1742
1745 flags = prog->argc >= 3 ? (int)PRVM_G_FLOAT(OFS_PARM2) : 0;
1747
1748 if(flags > CF_MAXFLAGSVAL)
1749 return;
1750
1751// first check to see if it has already been defined
1752 if (Cvar_FindVar (prog->console_cmd->cvars, name, prog->console_cmd->cvars_flagsmask))
1753 return;
1754
1755// check for overlap with a command
1757 {
1758 VM_Warning(prog, "VM_registercvar: %s is a command\n", name);
1759 return;
1760 }
1761
1762 Cvar_Get(prog->console_cmd->cvars, name, value, prog->console_cmd->cvars_flagsmask | flags, NULL);
1763
1764 PRVM_G_FLOAT(OFS_RETURN) = 1; // success
1765}
qbool Cmd_Exists(cmd_state_t *cmd, const char *cmd_name)
used by the cvar code to check for cvar / command name overlap
Definition cmd.c:1762
#define CF_MAXFLAGSVAL
used to determine if flags is valid
Definition cmd.h:60
cvar_t * Cvar_Get(cvar_state_t *cvars, const char *name, const char *value, unsigned flags, const char *newdescription)
allocates a cvar by name and returns its address, or merely sets its value if it already exists.
Definition cvar.c:695
void VM_registercvar(prvm_prog_t *prog)
Definition prvm_cmds.c:1736

References prvm_prog_t::argc, CF_MAXFLAGSVAL, Cmd_Exists(), cmd_local, prvm_prog_t::console_cmd, Cvar_FindVar(), Cvar_Get(), flags, int(), name, NULL, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, value, VM_registercvar(), VM_SAFEPARMCOUNTRANGE, and VM_Warning().

Referenced by VM_registercvar().

◆ VM_remove()

void VM_remove ( prvm_prog_t * prog)

Definition at line 1080 of file prvm_cmds.c.

1081{
1082 prvm_edict_t *ed;
1083 prog->xfunction->builtinsprofile += 20;
1084
1086
1087 ed = PRVM_G_EDICT(OFS_PARM0);
1088 if( PRVM_NUM_FOR_EDICT(ed) <= prog->reserved_edicts )
1089 {
1090 if (developer.integer > 0)
1091 VM_Warning(prog, "VM_remove: tried to remove the null entity or a reserved entity!\n" );
1092 }
1093 else if( ed->free )
1094 {
1095 if (developer.integer > 0)
1096 VM_Warning(prog, "VM_remove: tried to remove an already freed entity!\n" );
1097 }
1098 else
1099 PRVM_ED_Free (prog, ed);
1100}
void VM_remove(prvm_prog_t *prog)
Definition prvm_cmds.c:1080
int reserved_edicts
number of reserved edicts (allocated from 1)
Definition progsvm.h:678

References mfunction_t::builtinsprofile, developer, prvm_edict_t::free, cvar_t::integer, OFS_PARM0, PRVM_ED_Free(), PRVM_G_EDICT, PRVM_NUM_FOR_EDICT, prvm_prog_t::reserved_edicts, VM_remove(), VM_SAFEPARMCOUNT, VM_Warning(), and prvm_prog_t::xfunction.

Referenced by VM_remove().

◆ VM_rint()

void VM_rint ( prvm_prog_t * prog)

Definition at line 1508 of file prvm_cmds.c.

1509{
1510 prvm_vec_t f;
1512
1514 if (f > 0)
1515 PRVM_G_FLOAT(OFS_RETURN) = floor(f + 0.5);
1516 else
1517 PRVM_G_FLOAT(OFS_RETURN) = ceil(f - 0.5);
1518}
void VM_rint(prvm_prog_t *prog)
Definition prvm_cmds.c:1508

References ceil(), f, floor(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, VM_rint(), and VM_SAFEPARMCOUNT.

Referenced by VM_rint().

◆ VM_search_begin()

void VM_search_begin ( prvm_prog_t * prog)

Definition at line 3161 of file prvm_cmds.c.

3162{
3163 int handle;
3164 const char *packfile = NULL, *pattern;
3165 int caseinsens, quiet;
3166
3168
3169 pattern = PRVM_G_STRING(OFS_PARM0);
3170
3171 VM_CheckEmptyString(prog, pattern);
3172
3173 caseinsens = (int)PRVM_G_FLOAT(OFS_PARM1);
3174 quiet = (int)PRVM_G_FLOAT(OFS_PARM2);
3175
3176 // optional packfile parameter (DP_QC_FS_SEARCH_PACKFILE)
3177 if(prog->argc >= 4)
3178 packfile = PRVM_G_STRING(OFS_PARM3);
3179
3180 for(handle = 0; handle < PRVM_MAX_OPENSEARCHES; handle++)
3181 if(!prog->opensearches[handle])
3182 break;
3183
3184 if(handle >= PRVM_MAX_OPENSEARCHES)
3185 {
3187 VM_Warning(prog, "VM_search_begin: ran out of search handles (max %i)\n", PRVM_MAX_OPENSEARCHES);
3188 return;
3189 }
3190
3191 if(!(prog->opensearches[handle] = FS_Search(pattern,caseinsens, quiet, packfile)))
3193 else
3194 {
3195 prog->opensearches_origin[handle] = PRVM_AllocationOrigin(prog);
3196 PRVM_G_FLOAT(OFS_RETURN) = handle;
3197 }
3198}
fssearch_t * FS_Search(const char *pattern, int caseinsensitive, int quiet, const char *packfile)
Definition fs.c:3756
#define PRVM_MAX_OPENSEARCHES
Definition progsvm.h:252
void VM_search_begin(prvm_prog_t *prog)
Definition prvm_cmds.c:3161
const char * opensearches_origin[PRVM_MAX_OPENSEARCHES]
Definition progsvm.h:639
struct fssearch_s * opensearches[PRVM_MAX_OPENSEARCHES]
Definition progsvm.h:638

References prvm_prog_t::argc, FS_Search(), int(), NULL, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_RETURN, prvm_prog_t::opensearches, prvm_prog_t::opensearches_origin, PRVM_AllocationOrigin(), PRVM_G_FLOAT, PRVM_G_STRING, PRVM_MAX_OPENSEARCHES, VM_CheckEmptyString(), VM_SAFEPARMCOUNTRANGE, VM_search_begin(), and VM_Warning().

Referenced by VM_search_begin().

◆ VM_search_end()

void VM_search_end ( prvm_prog_t * prog)

Definition at line 3207 of file prvm_cmds.c.

3208{
3209 int handle;
3211
3212 handle = (int)PRVM_G_FLOAT(OFS_PARM0);
3213
3214 if(handle < 0 || handle >= PRVM_MAX_OPENSEARCHES)
3215 {
3216 VM_Warning(prog, "VM_search_end: invalid handle %i\n", handle);
3217 return;
3218 }
3219 if(prog->opensearches[handle] == NULL)
3220 {
3221 VM_Warning(prog, "VM_search_end: no such handle %i\n", handle);
3222 return;
3223 }
3224
3225 FS_FreeSearch(prog->opensearches[handle]);
3226 prog->opensearches[handle] = NULL;
3227 if(prog->opensearches_origin[handle])
3228 PRVM_Free((char *)prog->opensearches_origin[handle]);
3229}
void FS_FreeSearch(fssearch_t *search)
Definition fs.c:3963
void VM_search_end(prvm_prog_t *prog)
Definition prvm_cmds.c:3207

References FS_FreeSearch(), int(), NULL, OFS_PARM0, prvm_prog_t::opensearches, prvm_prog_t::opensearches_origin, PRVM_Free, PRVM_G_FLOAT, PRVM_MAX_OPENSEARCHES, VM_SAFEPARMCOUNT, VM_search_end(), and VM_Warning().

Referenced by VM_search_end().

◆ VM_search_getfilename()

void VM_search_getfilename ( prvm_prog_t * prog)

Definition at line 3266 of file prvm_cmds.c.

3267{
3268 int handle, filenum;
3269
3271
3272 handle = (int)PRVM_G_FLOAT(OFS_PARM0);
3273 filenum = (int)PRVM_G_FLOAT(OFS_PARM1);
3274
3275 if(handle < 0 || handle >= PRVM_MAX_OPENSEARCHES)
3276 {
3277 VM_Warning(prog, "VM_search_getfilename: invalid handle %i\n", handle);
3278 return;
3279 }
3280 if(prog->opensearches[handle] == NULL)
3281 {
3282 VM_Warning(prog, "VM_search_getfilename: no such handle %i\n", handle);
3283 return;
3284 }
3285 if(filenum < 0 || filenum >= prog->opensearches[handle]->numfilenames)
3286 {
3287 VM_Warning(prog, "VM_search_getfilename: invalid filenum %i\n", filenum);
3288 return;
3289 }
3290
3292 prog->opensearches[handle]->filenames[filenum],
3293 strlen(prog->opensearches[handle]->filenames[filenum]));
3294}
void VM_search_getfilename(prvm_prog_t *prog)
Definition prvm_cmds.c:3266

References int(), NULL, OFS_PARM0, OFS_PARM1, OFS_RETURN, prvm_prog_t::opensearches, PRVM_G_FLOAT, PRVM_G_INT, PRVM_MAX_OPENSEARCHES, PRVM_SetTempString(), strlen(), VM_SAFEPARMCOUNT, VM_search_getfilename(), and VM_Warning().

Referenced by VM_search_getfilename().

◆ VM_search_getsize()

void VM_search_getsize ( prvm_prog_t * prog)

Definition at line 3238 of file prvm_cmds.c.

3239{
3240 int handle;
3242
3243 handle = (int)PRVM_G_FLOAT(OFS_PARM0);
3244
3245 if(handle < 0 || handle >= PRVM_MAX_OPENSEARCHES)
3246 {
3247 VM_Warning(prog, "VM_search_getsize: invalid handle %i\n", handle);
3248 return;
3249 }
3250 if(prog->opensearches[handle] == NULL)
3251 {
3252 VM_Warning(prog, "VM_search_getsize: no such handle %i\n", handle);
3253 return;
3254 }
3255
3256 PRVM_G_FLOAT(OFS_RETURN) = prog->opensearches[handle]->numfilenames;
3257}
void VM_search_getsize(prvm_prog_t *prog)
Definition prvm_cmds.c:3238

References int(), NULL, OFS_PARM0, OFS_RETURN, prvm_prog_t::opensearches, PRVM_G_FLOAT, PRVM_MAX_OPENSEARCHES, VM_SAFEPARMCOUNT, VM_search_getsize(), and VM_Warning().

Referenced by VM_search_getsize().

◆ VM_setbindmaps()

void VM_setbindmaps ( prvm_prog_t * prog)

Definition at line 3461 of file prvm_cmds.c.

3462{
3465 if(PRVM_G_VECTOR(OFS_PARM0)[2] == 0)
3468}
qbool Key_SetBindMap(int fg, int bg)
Definition keys.c:1443
void VM_setbindmaps(prvm_prog_t *prog)
Definition prvm_cmds.c:3461

References Key_SetBindMap(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_VECTOR, VM_SAFEPARMCOUNT, and VM_setbindmaps().

Referenced by VM_setbindmaps().

◆ VM_setkeybind()

void VM_setkeybind ( prvm_prog_t * prog)

Definition at line 3423 of file prvm_cmds.c.

3424{
3425 int bindmap;
3427 if(prog->argc == 3)
3428 bindmap = bound(-1, PRVM_G_FLOAT(OFS_PARM2), MAX_BINDMAPS-1);
3429 else
3430 bindmap = 0; // consistent to "bind"
3431
3435}
qbool Key_SetBinding(int keynum, int bindmap, const char *binding)
Definition keys.c:1409
void VM_setkeybind(prvm_prog_t *prog)
Definition prvm_cmds.c:3423

References prvm_prog_t::argc, bound, Key_SetBinding(), MAX_BINDMAPS, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, VM_SAFEPARMCOUNTRANGE, and VM_setkeybind().

Referenced by VM_setkeybind().

◆ VM_SetTraceGlobals()

void VM_SetTraceGlobals ( prvm_prog_t * prog,
const trace_t * trace )

Definition at line 5228 of file prvm_cmds.c.

5229{
5238 PRVM_gameglobaledict(trace_ent) = PRVM_EDICT_TO_PROG(trace->ent ? trace->ent : prog->edicts);
5243}
void * ent
Definition collision.h:47
const struct texture_s * hittexture
Definition collision.h:62
double fraction
Definition collision.h:40
int hitq3surfaceflags
Definition collision.h:60
double endpos[3]
Definition collision.h:42
qbool inopen
Definition collision.h:33
int startsupercontents
Definition collision.h:56
qbool allsolid
Definition collision.h:24
plane_t plane
Definition collision.h:44
qbool startsolid
Definition collision.h:26
int hitsupercontents
Definition collision.h:58
qbool inwater
Definition collision.h:36
vec_t dist
Definition collision.h:14
vec3_t normal
Definition collision.h:13

References trace_t::allsolid, plane_t::dist, prvm_prog_t::edicts, trace_t::endpos, trace_t::ent, trace_t::fraction, trace_t::hitq3surfaceflags, trace_t::hitsupercontents, trace_t::hittexture, trace_t::inopen, trace_t::inwater, plane_t::normal, trace_t::plane, PRVM_EDICT_TO_PROG, PRVM_gameglobaledict, PRVM_gameglobalfloat, PRVM_gameglobalstring, PRVM_gameglobalvector, PRVM_SetTempString(), trace_t::startsolid, trace_t::startsupercontents, strlen(), trace_allsolid, trace_dphitcontents, trace_dphitq3surfaceflags, trace_dphittexturename, trace_dpstartcontents, trace_endpos, trace_ent, trace_fraction, trace_inopen, trace_inwater, trace_plane_dist, trace_plane_normal, trace_startsolid, and VectorCopy.

Referenced by CL_VM_SetTraceGlobals(), SV_Impact(), VM_SV_tracebox(), VM_SV_traceline(), and VM_SV_tracetoss().

◆ VM_sin()

void VM_sin ( prvm_prog_t * prog)

Definition at line 1618 of file prvm_cmds.c.

1619{
1622}
float sin(float f)
void VM_sin(prvm_prog_t *prog)
Definition prvm_cmds.c:1618

References OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, sin(), VM_SAFEPARMCOUNT, and VM_sin().

Referenced by VM_sin().

◆ VM_soundlength()

void VM_soundlength ( prvm_prog_t * prog)

Definition at line 3023 of file prvm_cmds.c.

3024{
3025 const char *s;
3026
3028
3031}
void VM_soundlength(prvm_prog_t *prog)
Definition prvm_cmds.c:3023
float S_SoundLength(const char *name)
Definition snd_main.c:1085

References OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, S_SoundLength(), VM_SAFEPARMCOUNT, and VM_soundlength().

Referenced by VM_soundlength().

◆ VM_spawn()

void VM_spawn ( prvm_prog_t * prog)

Definition at line 1063 of file prvm_cmds.c.

1064{
1065 prvm_edict_t *ed;
1067 prog->xfunction->builtinsprofile += 20;
1068 ed = PRVM_ED_Alloc(prog);
1069 VM_RETURN_EDICT(ed);
1070}
prvm_edict_t * PRVM_ED_Alloc(prvm_prog_t *prog)
Definition prvm_edict.c:269
void VM_spawn(prvm_prog_t *prog)
Definition prvm_cmds.c:1063

References mfunction_t::builtinsprofile, PRVM_ED_Alloc(), VM_RETURN_EDICT, VM_SAFEPARMCOUNT, VM_spawn(), and prvm_prog_t::xfunction.

Referenced by VM_spawn().

◆ VM_sprint()

void VM_sprint ( prvm_prog_t * prog)

Definition at line 465 of file prvm_cmds.c.

466{
467 client_t *client;
468 int clientnum;
469 char string[VM_TEMPSTRING_MAXSIZE];
470
472
473 //find client for this entity
474 clientnum = (int)PRVM_G_FLOAT(OFS_PARM0);
475 if (!sv.active || clientnum < 0 || clientnum >= svs.maxclients || !svs.clients[clientnum].active)
476 {
477 VM_Warning(prog, "VM_sprint: invalid client or server is not active!\n");
478 return;
479 }
480
481 client = svs.clients + clientnum;
482 if (!client->netconnection)
483 return;
484
485 VM_VarString(prog, 1, string, sizeof(string));
487 MSG_WriteString(&client->netconnection->message, string);
488}
void MSG_WriteString(sizebuf_t *sb, const char *s)
Definition com_msg.c:173
void MSG_WriteChar(sizebuf_t *sb, int c)
Definition com_msg.c:122
#define svc_print
Definition protocol.h:222
void VM_sprint(prvm_prog_t *prog)
Definition prvm_cmds.c:465
netconn_t * netconnection
communications handle
Definition server.h:210
sizebuf_t message
writing buffer to send to peer as the next reliable message can be added to at any time,...
Definition netconn.h:161
struct client_s * clients
client slots
Definition server.h:30

References server_t::active, server_static_t::clients, int(), server_static_t::maxclients, netconn_t::message, MSG_WriteChar(), MSG_WriteString(), client_t::netconnection, OFS_PARM0, PRVM_G_FLOAT, sv, svc_print, svs, VM_SAFEPARMCOUNTRANGE, VM_sprint(), VM_TEMPSTRING_MAXSIZE, VM_VarString(), and VM_Warning().

Referenced by VM_sprint().

◆ VM_sprintf()

void VM_sprintf ( prvm_prog_t * prog)

Definition at line 5772 of file prvm_cmds.c.

5773{
5774 const char *s, *s0;
5775 char outbuf[MAX_INPUTLINE];
5776 char *o = outbuf, *end = outbuf + sizeof(outbuf), *err;
5777 const char *p;
5778 int argpos = 1;
5779 int width, precision, thisarg, flags;
5780 char formatbuf[16];
5781 char *f;
5782 int isfloat;
5783 static prvm_int_t dummyivec[3] = {0, 0, 0};
5784 static prvm_vec_t dummyvec[3] = {0, 0, 0};
5785 char vabuf[1024];
5786
5787#define PRINTF_ALTERNATE 1
5788#define PRINTF_ZEROPAD 2
5789#define PRINTF_LEFT 4
5790#define PRINTF_SPACEPOSITIVE 8
5791#define PRINTF_SIGNPOSITIVE 16
5792
5793 formatbuf[0] = '%';
5794
5796
5797#define GETARG_FLOAT(a) (((a)>=1 && (a)<prog->argc) ? (PRVM_G_FLOAT(OFS_PARM0 + 3 * (a))) : 0)
5798#define GETARG_VECTOR(a) (((a)>=1 && (a)<prog->argc) ? (PRVM_G_VECTOR(OFS_PARM0 + 3 * (a))) : dummyvec)
5799#define GETARG_INT(a) (((a)>=1 && (a)<prog->argc) ? (PRVM_G_INT(OFS_PARM0 + 3 * (a))) : 0)
5800#define GETARG_INTVECTOR(a) (((a)>=1 && (a)<prog->argc) ? ((prvm_int_t*) PRVM_G_VECTOR(OFS_PARM0 + 3 * (a))) : dummyivec)
5801#define GETARG_STRING(a) (((a)>=1 && (a)<prog->argc) ? (PRVM_G_STRING(OFS_PARM0 + 3 * (a))) : "")
5802
5803 for(;;)
5804 {
5805 s0 = s;
5806 switch(*s)
5807 {
5808 case 0:
5809 goto finished;
5810 case '%':
5811 ++s;
5812
5813 if(*s == '%')
5814 goto verbatim;
5815
5816 // complete directive format:
5817 // %3$*1$.*2$ld
5818
5819 width = -1;
5820 precision = -1;
5821 thisarg = -1;
5822 flags = 0;
5823 isfloat = -1;
5824
5825 // is number following?
5826 if(*s >= '0' && *s <= '9')
5827 {
5828 width = strtol(s, &err, 10);
5829 if(!err)
5830 {
5831 VM_Warning(prog, "VM_sprintf: invalid directive: %s\n", s0);
5832 goto finished;
5833 }
5834 if(*err == '$')
5835 {
5836 thisarg = width;
5837 width = -1;
5838 s = err + 1;
5839 }
5840 else
5841 {
5842 if(*s == '0')
5843 {
5845 if(width == 0)
5846 width = -1; // it was just a flag
5847 }
5848 s = err;
5849 }
5850 }
5851
5852 if(width < 0)
5853 {
5854 for(;;)
5855 {
5856 switch(*s)
5857 {
5858 case '#': flags |= PRINTF_ALTERNATE; break;
5859 case '0': flags |= PRINTF_ZEROPAD; break;
5860 case '-': flags |= PRINTF_LEFT; break;
5861 case ' ': flags |= PRINTF_SPACEPOSITIVE; break;
5862 case '+': flags |= PRINTF_SIGNPOSITIVE; break;
5863 default:
5864 goto noflags;
5865 }
5866 ++s;
5867 }
5868noflags:
5869 if(*s == '*')
5870 {
5871 ++s;
5872 if(*s >= '0' && *s <= '9')
5873 {
5874 width = strtol(s, &err, 10);
5875 if(!err || *err != '$')
5876 {
5877 VM_Warning(prog, "VM_sprintf: invalid directive: %s\n", s0);
5878 goto finished;
5879 }
5880 s = err + 1;
5881 }
5882 else
5883 width = argpos++;
5885 if(width < 0)
5886 {
5887 flags |= PRINTF_LEFT;
5888 width = -width;
5889 }
5890 }
5891 else if(*s >= '0' && *s <= '9')
5892 {
5893 width = strtol(s, &err, 10);
5894 if(!err)
5895 {
5896 VM_Warning(prog, "VM_sprintf: invalid directive: %s\n", s0);
5897 goto finished;
5898 }
5899 s = err;
5900 if(width < 0)
5901 {
5902 flags |= PRINTF_LEFT;
5903 width = -width;
5904 }
5905 }
5906 // otherwise width stays -1
5907 }
5908
5909 if(*s == '.')
5910 {
5911 ++s;
5912 if(*s == '*')
5913 {
5914 ++s;
5915 if(*s >= '0' && *s <= '9')
5916 {
5917 precision = strtol(s, &err, 10);
5918 if(!err || *err != '$')
5919 {
5920 VM_Warning(prog, "VM_sprintf: invalid directive: %s\n", s0);
5921 goto finished;
5922 }
5923 s = err + 1;
5924 }
5925 else
5926 precision = argpos++;
5927 precision = GETARG_FLOAT(precision);
5928 }
5929 else if(*s >= '0' && *s <= '9')
5930 {
5931 precision = strtol(s, &err, 10);
5932 if(!err)
5933 {
5934 VM_Warning(prog, "VM_sprintf: invalid directive: %s\n", s0);
5935 goto finished;
5936 }
5937 s = err;
5938 }
5939 else
5940 {
5941 VM_Warning(prog, "VM_sprintf: invalid directive: %s\n", s0);
5942 goto finished;
5943 }
5944 }
5945
5946 for(;;)
5947 {
5948 switch(*s)
5949 {
5950 case 'h': isfloat = 1; break;
5951 case 'l': isfloat = 0; break;
5952 case 'L': isfloat = 0; break;
5953 case 'j': break;
5954 case 'z': break;
5955 case 't': break;
5956 default:
5957 goto nolength;
5958 }
5959 ++s;
5960 }
5961nolength:
5962
5963 // now s points to the final directive char and is no longer changed
5964 if(isfloat < 0)
5965 {
5966 if(*s == 'i')
5967 isfloat = 0;
5968 else
5969 isfloat = 1;
5970 }
5971
5972 if(thisarg < 0)
5973 thisarg = argpos++;
5974
5975 if(o < end - 1)
5976 {
5977 f = &formatbuf[1];
5978 if(*s != 's' && *s != 'c')
5979 if(flags & PRINTF_ALTERNATE) *f++ = '#';
5980 if(flags & PRINTF_ZEROPAD) *f++ = '0';
5981 if(flags & PRINTF_LEFT) *f++ = '-';
5982 if(flags & PRINTF_SPACEPOSITIVE) *f++ = ' ';
5983 if(flags & PRINTF_SIGNPOSITIVE) *f++ = '+';
5984 *f++ = '*';
5985 if(precision >= 0)
5986 {
5987 *f++ = '.';
5988 *f++ = '*';
5989 }
5990 if(*s == 'd' || *s == 'i' || *s == 'o' || *s == 'u' || *s == 'x' || *s == 'X')
5991 {
5992 // make it use a good integer type
5993 for(p = INT_LOSSLESS_FORMAT_SIZE; *p; )
5994 *f++ = *p++;
5995 }
5996 *f++ = *s;
5997 *f++ = 0;
5998
5999 if(width < 0) // not set
6000 width = 0;
6001
6002 switch(*s)
6003 {
6004 case 'd': case 'i':
6005 if(precision < 0) // not set
6006 o += dpsnprintf(o, end - o, formatbuf, width, (isfloat ? INT_LOSSLESS_FORMAT_CONVERT_S(GETARG_FLOAT(thisarg)) : INT_LOSSLESS_FORMAT_CONVERT_S(GETARG_INT(thisarg))));
6007 else
6008 o += dpsnprintf(o, end - o, formatbuf, width, precision, (isfloat ? INT_LOSSLESS_FORMAT_CONVERT_S(GETARG_FLOAT(thisarg)) : INT_LOSSLESS_FORMAT_CONVERT_S(GETARG_INT(thisarg))));
6009 break;
6010 case 'o': case 'u': case 'x': case 'X':
6011 if(precision < 0) // not set
6012 o += dpsnprintf(o, end - o, formatbuf, width, (isfloat ? INT_LOSSLESS_FORMAT_CONVERT_U(GETARG_FLOAT(thisarg)) : INT_LOSSLESS_FORMAT_CONVERT_U(GETARG_INT(thisarg))));
6013 else
6014 o += dpsnprintf(o, end - o, formatbuf, width, precision, (isfloat ? INT_LOSSLESS_FORMAT_CONVERT_U(GETARG_FLOAT(thisarg)) : INT_LOSSLESS_FORMAT_CONVERT_U(GETARG_INT(thisarg))));
6015 break;
6016 case 'e': case 'E': case 'f': case 'F': case 'g': case 'G':
6017 if(precision < 0) // not set
6018 o += dpsnprintf(o, end - o, formatbuf, width, (isfloat ? (double) GETARG_FLOAT(thisarg) : (double) GETARG_INT(thisarg)));
6019 else
6020 o += dpsnprintf(o, end - o, formatbuf, width, precision, (isfloat ? (double) GETARG_FLOAT(thisarg) : (double) GETARG_INT(thisarg)));
6021 break;
6022 case 'v': case 'V':
6023 f[-2] += 'g' - 'v';
6024 if(precision < 0) // not set
6025 o += dpsnprintf(o, end - o, va(vabuf, sizeof(vabuf), "%s %s %s", /* NESTED SPRINTF IS NESTED */ formatbuf, formatbuf, formatbuf),
6026 width, (isfloat ? (double) GETARG_VECTOR(thisarg)[0] : (double) GETARG_INTVECTOR(thisarg)[0]),
6027 width, (isfloat ? (double) GETARG_VECTOR(thisarg)[1] : (double) GETARG_INTVECTOR(thisarg)[1]),
6028 width, (isfloat ? (double) GETARG_VECTOR(thisarg)[2] : (double) GETARG_INTVECTOR(thisarg)[2])
6029 );
6030 else
6031 o += dpsnprintf(o, end - o, va(vabuf, sizeof(vabuf), "%s %s %s", /* NESTED SPRINTF IS NESTED */ formatbuf, formatbuf, formatbuf),
6032 width, precision, (isfloat ? (double) GETARG_VECTOR(thisarg)[0] : (double) GETARG_INTVECTOR(thisarg)[0]),
6033 width, precision, (isfloat ? (double) GETARG_VECTOR(thisarg)[1] : (double) GETARG_INTVECTOR(thisarg)[1]),
6034 width, precision, (isfloat ? (double) GETARG_VECTOR(thisarg)[2] : (double) GETARG_INTVECTOR(thisarg)[2])
6035 );
6036 break;
6037 case 'c':
6039 {
6040 if(precision < 0) // not set
6041 o += dpsnprintf(o, end - o, formatbuf, width, (isfloat ? (unsigned int) GETARG_FLOAT(thisarg) : (unsigned int) GETARG_INT(thisarg)));
6042 else
6043 o += dpsnprintf(o, end - o, formatbuf, width, precision, (isfloat ? (unsigned int) GETARG_FLOAT(thisarg) : (unsigned int) GETARG_INT(thisarg)));
6044 }
6045 else
6046 {
6047 unsigned int c = (isfloat ? (unsigned int) GETARG_FLOAT(thisarg) : (unsigned int) GETARG_INT(thisarg));
6048 char charbuf16[16];
6049 const char *buf = u8_encodech(c, NULL, charbuf16);
6050 if(!buf)
6051 buf = "";
6052 if(precision < 0) // not set
6053 precision = end - o - 1;
6054 o += u8_strpad(o, end - o, buf, (flags & PRINTF_LEFT) != 0, width, precision);
6055 }
6056 break;
6057 //spike FIXME -- 'S' for quoted tokenize-safe-or-print escaping of strings so stuff can safely survive console commands.
6058 case 's':
6060 {
6061 if(precision < 0) // not set
6062 o += dpsnprintf(o, end - o, formatbuf, width, GETARG_STRING(thisarg));
6063 else
6064 o += dpsnprintf(o, end - o, formatbuf, width, precision, GETARG_STRING(thisarg));
6065 }
6066 else
6067 {
6068 if(precision < 0) // not set
6069 precision = end - o - 1;
6071 o += u8_strpad(o, end - o, GETARG_STRING(thisarg), (flags & PRINTF_LEFT) != 0, width, precision);
6072 else
6073 o += u8_strpad_colorcodes(o, end - o, GETARG_STRING(thisarg), (flags & PRINTF_LEFT) != 0, width, precision);
6074 }
6075 break;
6076 default:
6077 VM_Warning(prog, "VM_sprintf: invalid directive: %s\n", s0);
6078 goto finished;
6079 }
6080 }
6081 ++s;
6082 break;
6083 default:
6084verbatim:
6085 if(o < end - 1)
6086 *o++ = *s;
6087 ++s;
6088 break;
6089 }
6090 }
6091
6092finished:
6093 *o = '\0';
6094 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, outbuf, o - outbuf);
6095}
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition glquake.h:657
#define GETARG_INT(a)
#define PRINTF_SPACEPOSITIVE
#define PRINTF_ALTERNATE
#define PRINTF_ZEROPAD
#define PRINTF_SIGNPOSITIVE
#define GETARG_VECTOR(a)
#define GETARG_FLOAT(a)
#define PRINTF_LEFT
#define GETARG_INTVECTOR(a)
#define GETARG_STRING(a)
#define INT_LOSSLESS_FORMAT_CONVERT_U(x)
Definition qdefs.h:206
#define INT_LOSSLESS_FORMAT_CONVERT_S(x)
Definition qdefs.h:205
#define INT_LOSSLESS_FORMAT_SIZE
Definition qdefs.h:204
char * u8_encodech(Uchar ch, size_t *l, char *buf16)
uses u8_fromchar on a static buffer
Definition utf8lib.c:697
size_t u8_strpad(char *out, size_t outsize, const char *in, qbool leftalign, size_t minwidth, size_t maxwidth)
Pads a utf-8 string.
Definition utf8lib.c:881
size_t u8_strpad_colorcodes(char *out, size_t outsize, const char *in, qbool leftalign, size_t minwidth, size_t maxwidth)
Definition utf8lib.c:899

References buf, dpsnprintf(), f, flags, GETARG_FLOAT, GETARG_INT, GETARG_INTVECTOR, GETARG_STRING, GETARG_VECTOR, int(), INT_LOSSLESS_FORMAT_CONVERT_S, INT_LOSSLESS_FORMAT_CONVERT_U, INT_LOSSLESS_FORMAT_SIZE, MAX_INPUTLINE, NULL, OFS_PARM0, OFS_RETURN, PRINTF_ALTERNATE, PRINTF_LEFT, PRINTF_SIGNPOSITIVE, PRINTF_SPACEPOSITIVE, PRINTF_ZEROPAD, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), u8_encodech(), u8_strpad(), u8_strpad_colorcodes(), va(), VM_Warning(), and width.

◆ VM_sqrt()

void VM_sqrt ( prvm_prog_t * prog)

Definition at line 1643 of file prvm_cmds.c.

1644{
1647}
void VM_sqrt(prvm_prog_t *prog)
Definition prvm_cmds.c:1643

References OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, sqrt(), VM_SAFEPARMCOUNT, and VM_sqrt().

Referenced by VM_sqrt().

◆ VM_stackdump()

void VM_stackdump ( prvm_prog_t * prog)

Definition at line 1437 of file prvm_cmds.c.

1438{
1440
1441 PRVM_StackTrace(prog);
1442}
void PRVM_StackTrace(prvm_prog_t *prog)
Definition prvm_exec.c:436
void VM_stackdump(prvm_prog_t *prog)
Definition prvm_cmds.c:1437

References PRVM_StackTrace(), VM_SAFEPARMCOUNT, and VM_stackdump().

Referenced by VM_stackdump().

◆ VM_stof()

void VM_stof ( prvm_prog_t * prog)

Definition at line 954 of file prvm_cmds.c.

955{
956 char string[VM_TEMPSTRING_MAXSIZE];
958 VM_VarString(prog, 0, string, sizeof(string));
959 PRVM_G_FLOAT(OFS_RETURN) = atof(string);
960}
void VM_stof(prvm_prog_t *prog)
Definition prvm_cmds.c:954

References OFS_RETURN, PRVM_G_FLOAT, VM_SAFEPARMCOUNTRANGE, VM_stof(), VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_stof().

◆ VM_stov()

void VM_stov ( prvm_prog_t * prog)

Definition at line 2603 of file prvm_cmds.c.

2604{
2605 char string[VM_TEMPSTRING_MAXSIZE];
2606
2608
2609 VM_VarString(prog, 0, string, sizeof(string));
2611}
int Math_atov(const char *s, prvm_vec3_t out)
Definition mathlib.c:856
void VM_stov(prvm_prog_t *prog)
Definition prvm_cmds.c:2603

References Math_atov(), OFS_RETURN, PRVM_G_VECTOR, VM_SAFEPARMCOUNT, VM_stov(), VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_stov().

◆ VM_str2chr()

void VM_str2chr ( prvm_prog_t * prog)

Definition at line 4896 of file prvm_cmds.c.

4897{
4898 const char *s;
4899 Uchar ch;
4900 int index;
4904
4905 if((unsigned)index < strlen(s))
4906 {
4907 if (utf8_enable.integer)
4908 ch = u8_getchar_noendptr(s + index);
4909 else
4910 ch = (unsigned char)s[index];
4912 }
4913 else
4915}
GLuint index
Definition glquake.h:629
void VM_str2chr(prvm_prog_t *prog)
Definition prvm_cmds.c:4896
size_t u8_bytelen(const char *_s, size_t n)
Get the number of bytes used in a string to represent an amount of characters.
Definition utf8lib.c:340
cvar_t utf8_enable
Definition utf8lib.c:11
#define u8_getchar_noendptr(c)
Definition utf8lib.h:72

References index, int(), cvar_t::integer, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, strlen(), u8_bytelen(), u8_getchar_noendptr, utf8_enable, VM_SAFEPARMCOUNT, and VM_str2chr().

Referenced by VM_str2chr().

◆ VM_strcat()

void VM_strcat ( prvm_prog_t * prog)

Definition at line 2377 of file prvm_cmds.c.

2378{
2379 char s[VM_TEMPSTRING_MAXSIZE];
2380 size_t slen;
2381
2383
2384 slen = VM_VarString(prog, 0, s, sizeof(s));
2385 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, s, slen);
2386}
void VM_strcat(prvm_prog_t *prog)
Definition prvm_cmds.c:2377

References OFS_RETURN, PRVM_G_INT, PRVM_SetTempString(), VM_SAFEPARMCOUNTRANGE, VM_strcat(), VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_strcat().

◆ VM_strconv()

void VM_strconv ( prvm_prog_t * prog)

Definition at line 5022 of file prvm_cmds.c.

5023{
5024 int ccase, redalpha, rednum;
5025 unsigned i;
5026 size_t resbuf_len;
5027 unsigned char resbuf[VM_TEMPSTRING_MAXSIZE];
5028 unsigned char *result = resbuf;
5029
5031
5032 ccase = (int) PRVM_G_FLOAT(OFS_PARM0); //0 same, 1 lower, 2 upper
5033 redalpha = (int) PRVM_G_FLOAT(OFS_PARM1); //0 same, 1 white, 2 red, 5 alternate, 6 alternate-alternate
5034 rednum = (int) PRVM_G_FLOAT(OFS_PARM2); //0 same, 1 white, 2 red, 3 redspecial, 4 whitespecial, 5 alternate, 6 alternate-alternate
5035 resbuf_len = VM_VarString(prog, 3, (char *) resbuf, sizeof(resbuf));
5036
5037 for (i = 0; i < resbuf_len; i++, result++) //should this be done backwards?
5038 {
5039 if (*result >= '0' && *result <= '9') //normal numbers...
5040 *result = chrconv_number(*result, '0', rednum);
5041 else if (*result >= '0'+128 && *result <= '9'+128)
5042 *result = chrconv_number(*result, '0'+128, rednum);
5043 else if (*result >= '0'+128-30 && *result <= '9'+128-30)
5044 *result = chrconv_number(*result, '0'+128-30, rednum);
5045 else if (*result >= '0'-30 && *result <= '9'-30)
5046 *result = chrconv_number(*result, '0'-30, rednum);
5047
5048 else if (*result >= 'a' && *result <= 'z') //normal numbers...
5049 *result = chrchar_alpha(*result, 'a', 0, ccase, redalpha, i);
5050 else if (*result >= 'A' && *result <= 'Z') //normal numbers...
5051 *result = chrchar_alpha(*result, 'A', 0, ccase, redalpha, i);
5052 else if (*result >= 'a'+128 && *result <= 'z'+128) //normal numbers...
5053 *result = chrchar_alpha(*result, 'a', 128, ccase, redalpha, i);
5054 else if (*result >= 'A'+128 && *result <= 'Z'+128) //normal numbers...
5055 *result = chrchar_alpha(*result, 'A', 128, ccase, redalpha, i);
5056
5057 else if ((*result & 127) < 16 || !redalpha) //special chars..
5058 *result = *result;
5059 else if (*result < 128)
5060 *result = chrconv_punct(*result, 0, redalpha);
5061 else
5062 *result = chrconv_punct(*result, 128, redalpha);
5063 }
5064 *result = '\0';
5065
5066 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, (char *)resbuf, result - resbuf);
5067}
static int chrconv_number(int i, int base, int conv)
Definition prvm_cmds.c:4940
static int chrchar_alpha(int i, int basec, int baset, int convc, int convt, int charnum)
Definition prvm_cmds.c:4983
void VM_strconv(prvm_prog_t *prog)
Definition prvm_cmds.c:5022
static int chrconv_punct(int i, int base, int conv)
Definition prvm_cmds.c:4965

References chrchar_alpha(), chrconv_number(), chrconv_punct(), i, int(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_SetTempString(), VM_SAFEPARMCOUNTRANGE, VM_strconv(), VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_strconv().

◆ VM_strdecolorize()

void VM_strdecolorize ( prvm_prog_t * prog)

Definition at line 2282 of file prvm_cmds.c.

2283{
2284 char szNewString[VM_TEMPSTRING_MAXSIZE];
2285 size_t szNewString_len;
2286 const char *szString;
2287
2288 // Prepare Strings
2290 szString = PRVM_G_STRING(OFS_PARM0);
2291 szNewString_len = COM_StringDecolorize(szString, 0, szNewString, sizeof(szNewString), true);
2292 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, szNewString, szNewString_len);
2293}
size_t COM_StringDecolorize(const char *in, size_t size_in, char *out, size_t size_out, qbool escape_carets)
Definition common.c:1286
void VM_strdecolorize(prvm_prog_t *prog)
Definition prvm_cmds.c:2282

References COM_StringDecolorize(), OFS_PARM0, OFS_RETURN, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), VM_SAFEPARMCOUNT, VM_strdecolorize(), and VM_TEMPSTRING_MAXSIZE.

Referenced by VM_strdecolorize().

◆ VM_strftime()

void VM_strftime ( prvm_prog_t * prog)

Definition at line 1014 of file prvm_cmds.c.

1015{
1016 time_t t;
1017#if _MSC_VER >= 1400
1018 struct tm tm;
1019 int tmresult;
1020#else
1021 struct tm *tm;
1022#endif
1023 char fmt[VM_TEMPSTRING_MAXSIZE];
1024 char result[VM_TEMPSTRING_MAXSIZE];
1025 size_t result_len;
1026
1028 VM_VarString(prog, 1, fmt, sizeof(fmt));
1029 t = time(NULL);
1030#if _MSC_VER >= 1400
1032 tmresult = localtime_s(&tm, &t);
1033 else
1034 tmresult = gmtime_s(&tm, &t);
1035 if (!tmresult)
1036#else
1038 tm = localtime(&t);
1039 else
1040 tm = gmtime(&t);
1041 if (!tm)
1042#endif
1043 {
1045 return;
1046 }
1047#if _MSC_VER >= 1400
1048 result_len = strftime(result, sizeof(result), fmt, &tm);
1049#else
1050 result_len = strftime(result, sizeof(result), fmt, tm);
1051#endif
1052 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, result, result_len);
1053}
void VM_strftime(prvm_prog_t *prog)
Definition prvm_cmds.c:1014

References NULL, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_SetTempString(), time, VM_SAFEPARMCOUNTRANGE, VM_strftime(), VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_strftime().

◆ VM_stringtokeynum()

void VM_stringtokeynum ( prvm_prog_t * prog)

Definition at line 3388 of file prvm_cmds.c.

3389{
3391
3393}
int Key_StringToKeynum(const char *str)
Definition keys.c:1354
void VM_stringtokeynum(prvm_prog_t *prog)
Definition prvm_cmds.c:3388

References Key_StringToKeynum(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, VM_SAFEPARMCOUNT, and VM_stringtokeynum().

Referenced by VM_stringtokeynum().

◆ VM_stringwidth()

void VM_stringwidth ( prvm_prog_t * prog)

Definition at line 1546 of file clvm_cmds.c.

1547{
1548 const char *string;
1549 vec2_t szv;
1550 float mult; // sz is intended font size so we can later add freetype support, mult is font size multiplier in pixels per character cell
1551 int colors;
1552 float sx, sy;
1553 size_t maxlen = 0;
1555
1556 getdrawfontscale(prog, &sx, &sy);
1557 if(prog->argc == 3)
1558 {
1560 mult = 1;
1561 }
1562 else
1563 {
1564 // we want the width for 8x8 font size, divided by 8
1565 Vector2Set(szv, 8, 8);
1566 mult = 0.125;
1567 // to make sure snapping is turned off, ALWAYS use a nontrivial scale in this case
1568 if(sx >= 0.9 && sx <= 1.1)
1569 {
1570 mult *= 2;
1571 sx /= 2;
1572 sy /= 2;
1573 }
1574 }
1575
1576 string = PRVM_G_STRING(OFS_PARM0);
1577 colors = (int)PRVM_G_FLOAT(OFS_PARM1);
1578
1579 PRVM_G_FLOAT(OFS_RETURN) = DrawQ_TextWidth_UntilWidth_TrackColors_Scale(string, &maxlen, szv[0], szv[1], sx, sy, NULL, !colors, getdrawfont(prog), 1000000000) * mult;
1580/*
1581 if(prog->argc == 3)
1582 {
1583 mult = sz = PRVM_G_FLOAT(OFS_PARM2);
1584 }
1585 else
1586 {
1587 sz = 8;
1588 mult = 1;
1589 }
1590
1591 string = PRVM_G_STRING(OFS_PARM0);
1592 colors = (int)PRVM_G_FLOAT(OFS_PARM1);
1593
1594 PRVM_G_FLOAT(OFS_RETURN) = DrawQ_TextWidth(string, 0, !colors, getdrawfont()) * mult; // 1x1 characters, don't actually draw
1595*/
1596}
void VM_stringwidth(prvm_prog_t *prog)
Definition clvm_cmds.c:1546
float DrawQ_TextWidth_UntilWidth_TrackColors_Scale(const char *text, size_t *maxlen, float w, float h, float sw, float sh, int *outcolor, qbool ignorecolorcodes, const dp_font_t *fnt, float maxwidth)
Definition gl_draw.c:928
#define Vector2Copy(in, out)
Definition mathlib.h:74
#define Vector2Set(vec, x, y)
Definition mathlib.h:76
vec_t vec2_t[2]
Definition qtypes.h:70

References prvm_prog_t::argc, DrawQ_TextWidth_UntilWidth_TrackColors_Scale(), getdrawfont(), getdrawfontscale(), int(), NULL, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, PRVM_G_VECTOR, string, Vector2Copy, Vector2Set, VM_SAFEPARMCOUNTRANGE, and VM_stringwidth().

Referenced by VM_stringwidth().

◆ VM_strireplace()

void VM_strireplace ( prvm_prog_t * prog)

Definition at line 2536 of file prvm_cmds.c.

2537{
2538 int i, j, si;
2539 const char *search, *replace, *subject;
2540 char string[VM_TEMPSTRING_MAXSIZE];
2541 int search_len, replace_len, subject_len;
2542
2544
2545 search = PRVM_G_STRING(OFS_PARM0);
2546 replace = PRVM_G_STRING(OFS_PARM1);
2547 subject = PRVM_G_STRING(OFS_PARM2);
2548
2549 search_len = (int)strlen(search);
2550 replace_len = (int)strlen(replace);
2551 subject_len = (int)strlen(subject);
2552
2553 si = 0;
2554 for (i = 0; i <= subject_len - search_len; i++)
2555 {
2556 for (j = 0; j < search_len; j++) // thus, i+j < subject_len
2557 if (tolower(subject[i+j]) != tolower(search[j]))
2558 break;
2559 if (j == search_len)
2560 {
2561 // NOTE: if search_len == 0, we always hit THIS case, and never the other
2562 // found it at offset 'i'
2563 for (j = 0; j < replace_len && si < (int)sizeof(string) - 1; j++)
2564 string[si++] = replace[j];
2565 if(search_len > 0)
2566 {
2567 i += search_len - 1;
2568 }
2569 else
2570 {
2571 // the above would subtract 1 from i... so we
2572 // don't do that, but instead output the next
2573 // char
2574 if (si < (int)sizeof(string) - 1)
2575 string[si++] = subject[i];
2576 }
2577 }
2578 else
2579 {
2580 // in THIS case, we know search_len > 0, thus i < subject_len
2581 // not found
2582 if (si < (int)sizeof(string) - 1)
2583 string[si++] = subject[i];
2584 }
2585 }
2586 // remaining chars (these cannot match)
2587 for (; i < subject_len; i++)
2588 if (si < (int)sizeof(string) - 1)
2589 string[si++] = subject[i];
2590 string[si] = '\0';
2591
2592 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, string, si);
2593}
void VM_strireplace(prvm_prog_t *prog)
Definition prvm_cmds.c:2536

References i, int(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), string, strlen(), VM_SAFEPARMCOUNT, VM_strireplace(), and VM_TEMPSTRING_MAXSIZE.

Referenced by VM_strireplace().

◆ VM_strlen()

void VM_strlen ( prvm_prog_t * prog)

Definition at line 2265 of file prvm_cmds.c.

2266{
2268
2269 //PRVM_G_FLOAT(OFS_RETURN) = strlen(PRVM_G_STRING(OFS_PARM0));
2271}
void VM_strlen(prvm_prog_t *prog)
Definition prvm_cmds.c:2265
size_t u8_strlen(const char *_s)
Get the number of characters in an UTF-8 string.
Definition utf8lib.c:195

References OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, u8_strlen(), VM_SAFEPARMCOUNT, and VM_strlen().

Referenced by VM_strlen().

◆ VM_strlennocol()

void VM_strlennocol ( prvm_prog_t * prog)

Definition at line 2305 of file prvm_cmds.c.

2306{
2307 const char *szString;
2308 int nCnt;
2309
2311
2312 szString = PRVM_G_STRING(OFS_PARM0);
2313
2314 //nCnt = (int)COM_StringLengthNoColors(szString, 0, NULL);
2315 nCnt = (int)u8_COM_StringLengthNoColors(szString, 0, NULL);
2316
2317 PRVM_G_FLOAT(OFS_RETURN) = nCnt;
2318}
void VM_strlennocol(prvm_prog_t *prog)
Definition prvm_cmds.c:2305
size_t u8_COM_StringLengthNoColors(const char *_s, size_t size_s, qbool *valid)
Definition utf8lib.c:777

References int(), NULL, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, u8_COM_StringLengthNoColors(), VM_SAFEPARMCOUNT, and VM_strlennocol().

Referenced by VM_strlennocol().

◆ VM_strncasecmp()

void VM_strncasecmp ( prvm_prog_t * prog)

Definition at line 5145 of file prvm_cmds.c.

5146{
5147 const char *s1, *s2;
5151 if (prog->argc > 2)
5152 {
5153 PRVM_G_FLOAT(OFS_RETURN) = strncasecmp(s1, s2, (size_t)PRVM_G_FLOAT(OFS_PARM2));
5154 }
5155 else
5156 {
5157 PRVM_G_FLOAT(OFS_RETURN) = strcasecmp(s1, s2);
5158 }
5159}
void VM_strncasecmp(prvm_prog_t *prog)
Definition prvm_cmds.c:5145

References prvm_prog_t::argc, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, VM_SAFEPARMCOUNTRANGE, and VM_strncasecmp().

Referenced by VM_strncasecmp().

◆ VM_strncmp()

void VM_strncmp ( prvm_prog_t * prog)

Definition at line 5127 of file prvm_cmds.c.

5128{
5129 const char *s1, *s2;
5133 if (prog->argc > 2)
5134 {
5135 PRVM_G_FLOAT(OFS_RETURN) = strncmp(s1, s2, (size_t)PRVM_G_FLOAT(OFS_PARM2));
5136 }
5137 else
5138 {
5139 PRVM_G_FLOAT(OFS_RETURN) = strcmp(s1, s2);
5140 }
5141}
void VM_strncmp(prvm_prog_t *prog)
Definition prvm_cmds.c:5127

References prvm_prog_t::argc, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, VM_SAFEPARMCOUNTRANGE, and VM_strncmp().

Referenced by VM_strncmp().

◆ VM_strpad()

void VM_strpad ( prvm_prog_t * prog)

Definition at line 5070 of file prvm_cmds.c.

5071{
5073 char destbuf[VM_TEMPSTRING_MAXSIZE];
5074 size_t destbuf_len;
5075 int pad;
5076
5078 pad = (int) PRVM_G_FLOAT(OFS_PARM0);
5079 VM_VarString(prog, 1, src, sizeof(src));
5080
5081 // note: < 0 = left padding, > 0 = right padding,
5082 // this is reverse logic of printf!
5083 destbuf_len = dpsnprintf(destbuf, sizeof(destbuf), "%*s", -pad, src);
5084
5085 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, destbuf, destbuf_len);
5086}
void VM_strpad(prvm_prog_t *prog)
Definition prvm_cmds.c:5070
prvm_eval_t * src

References dpsnprintf(), int(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_SetTempString(), src, VM_SAFEPARMCOUNTRANGE, VM_strpad(), VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_strpad().

◆ VM_strreplace()

void VM_strreplace ( prvm_prog_t * prog)

Definition at line 2469 of file prvm_cmds.c.

2470{
2471 int i, j, si;
2472 const char *search, *replace, *subject;
2473 char string[VM_TEMPSTRING_MAXSIZE];
2474 int search_len, replace_len, subject_len;
2475
2477
2478 search = PRVM_G_STRING(OFS_PARM0);
2479 replace = PRVM_G_STRING(OFS_PARM1);
2480 subject = PRVM_G_STRING(OFS_PARM2);
2481
2482 search_len = (int)strlen(search);
2483 replace_len = (int)strlen(replace);
2484 subject_len = (int)strlen(subject);
2485
2486 si = 0;
2487 for (i = 0; i <= subject_len - search_len; i++)
2488 {
2489 for (j = 0; j < search_len; j++) // thus, i+j < subject_len
2490 if (subject[i+j] != search[j])
2491 break;
2492 if (j == search_len)
2493 {
2494 // NOTE: if search_len == 0, we always hit THIS case, and never the other
2495 // found it at offset 'i'
2496 for (j = 0; j < replace_len && si < (int)sizeof(string) - 1; j++)
2497 string[si++] = replace[j];
2498 if(search_len > 0)
2499 {
2500 i += search_len - 1;
2501 }
2502 else
2503 {
2504 // the above would subtract 1 from i... so we
2505 // don't do that, but instead output the next
2506 // char
2507 if (si < (int)sizeof(string) - 1)
2508 string[si++] = subject[i];
2509 }
2510 }
2511 else
2512 {
2513 // in THIS case, we know search_len > 0, thus i < subject_len
2514 // not found
2515 if (si < (int)sizeof(string) - 1)
2516 string[si++] = subject[i];
2517 }
2518 }
2519 // remaining chars (these cannot match)
2520 for (; i < subject_len; i++)
2521 if (si < (int)sizeof(string) - 1)
2522 string[si++] = subject[i];
2523 string[si] = '\0';
2524
2525 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, string, si);
2526}
void VM_strreplace(prvm_prog_t *prog)
Definition prvm_cmds.c:2469

References i, int(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), string, strlen(), VM_SAFEPARMCOUNT, VM_strreplace(), and VM_TEMPSTRING_MAXSIZE.

Referenced by VM_strreplace().

◆ VM_strstrofs()

void VM_strstrofs ( prvm_prog_t * prog)

Definition at line 4872 of file prvm_cmds.c.

4873{
4874 const char *instr, *match;
4875 int firstofs;
4877 instr = PRVM_G_STRING(OFS_PARM0);
4878 match = PRVM_G_STRING(OFS_PARM1);
4879 firstofs = (prog->argc > 2)?(int)PRVM_G_FLOAT(OFS_PARM2):0;
4880 firstofs = (int)u8_bytelen(instr, firstofs);
4881
4882 if (firstofs && (firstofs < 0 || firstofs > (int)strlen(instr)))
4883 {
4885 return;
4886 }
4887
4888 match = strstr(instr+firstofs, match);
4889 if (!match)
4891 else
4892 PRVM_G_FLOAT(OFS_RETURN) = u8_strnlen(instr, match-instr);
4893}
void VM_strstrofs(prvm_prog_t *prog)
Definition prvm_cmds.c:4872
size_t u8_strnlen(const char *_s, size_t n)
Get the number of characters in a part of an UTF-8 string.
Definition utf8lib.c:249

References prvm_prog_t::argc, int(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, strlen(), u8_bytelen(), u8_strnlen(), VM_SAFEPARMCOUNTRANGE, and VM_strstrofs().

Referenced by VM_strstrofs().

◆ VM_strtolower()

void VM_strtolower ( prvm_prog_t * prog)

Definition at line 2329 of file prvm_cmds.c.

2330{
2331 char szNewString[VM_TEMPSTRING_MAXSIZE];
2332 size_t szNewString_len;
2333 const char *szString;
2334
2335 // Prepare Strings
2337 szString = PRVM_G_STRING(OFS_PARM0);
2338
2339 szNewString_len = COM_ToLowerString(szString, szNewString, sizeof(szNewString) );
2340
2341 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, szNewString, szNewString_len);
2342}
size_t COM_ToLowerString(const char *in, char *out, size_t size_out)
Returns the number of bytes written to *out excluding the \0 terminator.
Definition common.c:1051
void VM_strtolower(prvm_prog_t *prog)
Definition prvm_cmds.c:2329

References COM_ToLowerString(), OFS_PARM0, OFS_RETURN, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), VM_SAFEPARMCOUNT, VM_strtolower(), and VM_TEMPSTRING_MAXSIZE.

Referenced by VM_strtolower().

◆ VM_strtoupper()

void VM_strtoupper ( prvm_prog_t * prog)

Definition at line 2352 of file prvm_cmds.c.

2353{
2354 char szNewString[VM_TEMPSTRING_MAXSIZE];
2355 size_t szNewString_len;
2356 const char *szString;
2357
2358 // Prepare Strings
2360 szString = PRVM_G_STRING(OFS_PARM0);
2361
2362 szNewString_len = COM_ToUpperString(szString, szNewString, sizeof(szNewString) );
2363
2364 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, szNewString, szNewString_len);
2365}
size_t COM_ToUpperString(const char *in, char *out, size_t size_out)
Returns the number of bytes written to *out excluding the \0 terminator.
Definition common.c:1087
void VM_strtoupper(prvm_prog_t *prog)
Definition prvm_cmds.c:2352

References COM_ToUpperString(), OFS_PARM0, OFS_RETURN, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), VM_SAFEPARMCOUNT, VM_strtoupper(), and VM_TEMPSTRING_MAXSIZE.

Referenced by VM_strtoupper().

◆ VM_strunzone()

void VM_strunzone ( prvm_prog_t * prog)

Definition at line 2642 of file prvm_cmds.c.

2643{
2646}
void PRVM_FreeString(prvm_prog_t *prog, int num)
void VM_strunzone(prvm_prog_t *prog)
Definition prvm_cmds.c:2642

References OFS_PARM0, PRVM_FreeString(), PRVM_G_INT, VM_SAFEPARMCOUNT, and VM_strunzone().

Referenced by VM_strunzone().

◆ VM_strzone()

void VM_strzone ( prvm_prog_t * prog)

Definition at line 2621 of file prvm_cmds.c.

2622{
2623 char *out;
2624 char string[VM_TEMPSTRING_MAXSIZE];
2625 size_t alloclen;
2626
2628
2629 alloclen = VM_VarString(prog, 0, string, sizeof(string)) + 1;
2630 PRVM_G_INT(OFS_RETURN) = PRVM_AllocString(prog, alloclen, &out);
2631 memcpy(out, string, alloclen);
2632}
int PRVM_AllocString(prvm_prog_t *prog, size_t bufferlength, char **pointer)
void VM_strzone(prvm_prog_t *prog)
Definition prvm_cmds.c:2621

References OFS_RETURN, PRVM_AllocString(), PRVM_G_INT, VM_SAFEPARMCOUNT, VM_strzone(), VM_TEMPSTRING_MAXSIZE, and VM_VarString().

Referenced by VM_strzone().

◆ VM_substring()

void VM_substring ( prvm_prog_t * prog)

Definition at line 2397 of file prvm_cmds.c.

2398{
2399 int start, length;
2400 int u_slength = 0, u_start;
2401 size_t u_length;
2402 const char *s;
2403 char string[VM_TEMPSTRING_MAXSIZE];
2404
2406
2407 /*
2408 s = PRVM_G_STRING(OFS_PARM0);
2409 start = (int)PRVM_G_FLOAT(OFS_PARM1);
2410 length = (int)PRVM_G_FLOAT(OFS_PARM2);
2411 slength = strlen(s);
2412
2413 if (start < 0) // FTE_STRINGS feature
2414 start += slength;
2415 start = bound(0, start, slength);
2416
2417 if (length < 0) // FTE_STRINGS feature
2418 length += slength - start + 1;
2419 maxlen = min((int)sizeof(string) - 1, slength - start);
2420 length = bound(0, length, maxlen);
2421
2422 memcpy(string, s + start, length);
2423 string[length] = 0;
2424 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, string);
2425 */
2426
2428 start = (int)PRVM_G_FLOAT(OFS_PARM1);
2430
2431 if (start < 0) // FTE_STRINGS feature
2432 {
2433 u_slength = (int)u8_strlen(s);
2434 start += u_slength;
2435 start = bound(0, start, u_slength);
2436 }
2437
2438 if (length < 0) // FTE_STRINGS feature
2439 {
2440 if (!u_slength) // it's not calculated when it's not needed above
2441 u_slength = (int)u8_strlen(s);
2442 length += u_slength - start + 1;
2443 }
2444
2445 // positive start, positive length
2446 u_start = u8_byteofs(s, start, NULL);
2447 if (u_start < 0)
2448 {
2450 return;
2451 }
2452 u_length = u8_bytelen(s + u_start, length);
2453 if (u_length >= sizeof(string)-1)
2454 u_length = sizeof(string)-1;
2455
2456 memcpy(string, s + u_start, u_length);
2457 string[u_length] = '\0';
2458 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, string, u_length);
2459}
GLenum GLuint GLenum GLsizei length
Definition glquake.h:657
void VM_substring(prvm_prog_t *prog)
Definition prvm_cmds.c:2397
int u8_byteofs(const char *_s, size_t i, size_t *len)
Get the byte-index for a character-index.
Definition utf8lib.c:425

References bound, int(), length, NULL, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), string, u8_bytelen(), u8_byteofs(), u8_strlen(), VM_SAFEPARMCOUNT, VM_substring(), and VM_TEMPSTRING_MAXSIZE.

Referenced by VM_substring().

◆ VM_SV_getextresponse()

void VM_SV_getextresponse ( prvm_prog_t * prog)

◆ VM_tan()

void VM_tan ( prvm_prog_t * prog)

Definition at line 1704 of file prvm_cmds.c.

1705{
1708}
void VM_tan(prvm_prog_t *prog)
Definition prvm_cmds.c:1704

References OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, VM_SAFEPARMCOUNT, and VM_tan().

Referenced by VM_tan().

◆ VM_tokenize()

void VM_tokenize ( prvm_prog_t * prog)

Definition at line 2663 of file prvm_cmds.c.

2664{
2665 const char *p;
2666
2668
2670 p = tokenize_string;
2671
2672 num_tokens = 0;
2673 for(;;)
2674 {
2675 if (num_tokens >= (int)(sizeof(tokens)/sizeof(tokens[0])))
2676 break;
2677
2678 // skip whitespace here to find token start pos
2679 while(*p && ISWHITESPACE(*p))
2680 ++p;
2681
2683 if(!COM_ParseToken_VM_Tokenize(&p, false))
2684 break;
2687 ++num_tokens;
2688 }
2689
2691}
unsigned com_token_len
Definition common.c:40
void VM_tokenize(prvm_prog_t *prog)
Definition prvm_cmds.c:2663
static char tokenize_string[VM_TEMPSTRING_MAXSIZE]
Definition prvm_cmds.c:2662

References COM_ParseToken_VM_Tokenize(), com_token, com_token_len, dp_strlcpy, ISWHITESPACE, num_tokens, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, PRVM_SetTempString(), tokenize_string, tokens, tokens_endpos, tokens_startpos, VM_SAFEPARMCOUNT, and VM_tokenize().

Referenced by VM_tokenize().

◆ VM_tokenize_console()

void VM_tokenize_console ( prvm_prog_t * prog)

Definition at line 2694 of file prvm_cmds.c.

2695{
2696 const char *p;
2697
2699
2701 p = tokenize_string;
2702
2703 num_tokens = 0;
2704 for(;;)
2705 {
2706 if (num_tokens >= (int)(sizeof(tokens)/sizeof(tokens[0])))
2707 break;
2708
2709 // skip whitespace here to find token start pos
2710 while(*p && ISWHITESPACE(*p))
2711 ++p;
2712
2714 if(!COM_ParseToken_Console(&p))
2715 break;
2718 ++num_tokens;
2719 }
2720
2722}
qbool COM_ParseToken_Console(const char **datapointer)
Definition common.c:819
void VM_tokenize_console(prvm_prog_t *prog)
Definition prvm_cmds.c:2694

References COM_ParseToken_Console(), com_token, com_token_len, dp_strlcpy, ISWHITESPACE, num_tokens, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, PRVM_SetTempString(), tokenize_string, tokens, tokens_endpos, tokens_startpos, VM_SAFEPARMCOUNT, and VM_tokenize_console().

Referenced by VM_tokenize_console().

◆ VM_tokenizebyseparator()

void VM_tokenizebyseparator ( prvm_prog_t * prog)

Definition at line 2738 of file prvm_cmds.c.

2739{
2740 int j, k;
2741 int numseparators;
2742 int separatorlen[7];
2743 const char *separators[7];
2744 const char *p, *p0;
2745 const char *token;
2746 char tokentext[MAX_INPUTLINE];
2747
2749
2751 p = tokenize_string;
2752
2753 numseparators = 0;
2754 for (j = 1;j < prog->argc;j++)
2755 {
2756 // skip any blank separator strings
2757 const char *s = PRVM_G_STRING(OFS_PARM0+j*3);
2758 if (!s[0])
2759 continue;
2760 separators[numseparators] = s;
2761 separatorlen[numseparators] = (int)strlen(s);
2762 numseparators++;
2763 }
2764
2765 num_tokens = 0;
2766 j = 0;
2767
2768 while (num_tokens < (int)(sizeof(tokens)/sizeof(tokens[0])))
2769 {
2770 token = tokentext + j;
2772 p0 = p;
2773 while (*p)
2774 {
2775 for (k = 0;k < numseparators;k++)
2776 {
2777 if (!strncmp(p, separators[k], separatorlen[k]))
2778 {
2779 p += separatorlen[k];
2780 break;
2781 }
2782 }
2783 if (k < numseparators)
2784 break;
2785 if (j < (int)sizeof(tokentext)-1)
2786 tokentext[j++] = *p;
2787 p++;
2788 p0 = p;
2789 }
2791 if (j >= (int)sizeof(tokentext))
2792 break;
2793 tokentext[j] = '\0';
2794 tokens[num_tokens++] = PRVM_SetTempString(prog, token, j++ - (token - tokentext));
2795 if (!*p)
2796 break;
2797 }
2798
2800}
void VM_tokenizebyseparator(prvm_prog_t *prog)
Definition prvm_cmds.c:2738

References prvm_prog_t::argc, dp_strlcpy, int(), MAX_INPUTLINE, num_tokens, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, PRVM_SetTempString(), strlen(), tokenize_string, tokens, tokens_endpos, tokens_startpos, VM_SAFEPARMCOUNTRANGE, and VM_tokenizebyseparator().

Referenced by VM_tokenizebyseparator().

◆ VM_traceoff()

void VM_traceoff ( prvm_prog_t * prog)

Definition at line 1480 of file prvm_cmds.c.

1481{
1483
1484 prog->trace = false;
1485}
void VM_traceoff(prvm_prog_t *prog)
Definition prvm_cmds.c:1480

References prvm_prog_t::trace, VM_SAFEPARMCOUNT, and VM_traceoff().

Referenced by VM_traceoff().

◆ VM_traceon()

void VM_traceon ( prvm_prog_t * prog)

Definition at line 1466 of file prvm_cmds.c.

1467{
1469
1470 prog->trace = true;
1471}
void VM_traceon(prvm_prog_t *prog)
Definition prvm_cmds.c:1466

References prvm_prog_t::trace, VM_SAFEPARMCOUNT, and VM_traceon().

Referenced by VM_traceon().

◆ VM_uncolorstring()

void VM_uncolorstring ( prvm_prog_t * prog)

Definition at line 4857 of file prvm_cmds.c.

4858{
4859 char szNewString[VM_TEMPSTRING_MAXSIZE];
4860 size_t szNewString_len;
4861 const char *szString;
4862
4863 // Prepare Strings
4865 szString = PRVM_G_STRING(OFS_PARM0);
4866 szNewString_len = COM_StringDecolorize(szString, 0, szNewString, sizeof(szNewString), true);
4867 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, szNewString, szNewString_len);
4868}
void VM_uncolorstring(prvm_prog_t *prog)
Definition prvm_cmds.c:4857

References COM_StringDecolorize(), OFS_PARM0, OFS_RETURN, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), VM_SAFEPARMCOUNT, VM_TEMPSTRING_MAXSIZE, and VM_uncolorstring().

Referenced by VM_uncolorstring().

◆ VM_uri_escape()

void VM_uri_escape ( prvm_prog_t * prog)

Definition at line 5284 of file prvm_cmds.c.

5285{
5287 char dest[VM_TEMPSTRING_MAXSIZE];
5288 char *p, *q;
5289 static const char *hex = "0123456789ABCDEF";
5290
5292 VM_VarString(prog, 0, src, sizeof(src));
5293
5294 for(p = src, q = dest; *p && q < dest + sizeof(dest) - 3; ++p)
5295 {
5296 if((*p >= 'A' && *p <= 'Z')
5297 || (*p >= 'a' && *p <= 'z')
5298 || (*p >= '0' && *p <= '9')
5299 || (*p == '-') || (*p == '_') || (*p == '.')
5300 || (*p == '!') || (*p == '~')
5301 || (*p == '\'') || (*p == '(') || (*p == ')'))
5302 *q++ = *p;
5303 else
5304 {
5305 *q++ = '%';
5306 *q++ = hex[(*(unsigned char *)p >> 4) & 0xF];
5307 *q++ = hex[ *(unsigned char *)p & 0xF];
5308 }
5309 }
5310 *q = '\0';
5311
5312 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, dest, q - dest);
5313}
void VM_uri_escape(prvm_prog_t *prog)
Definition prvm_cmds.c:5284

References OFS_RETURN, PRVM_G_INT, PRVM_SetTempString(), src, VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, VM_uri_escape(), and VM_VarString().

Referenced by VM_uri_escape().

◆ VM_uri_get()

void VM_uri_get ( prvm_prog_t * prog)

Definition at line 5427 of file prvm_cmds.c.

5428{
5429 const char *url;
5430 float id;
5431 qbool ret;
5432 uri_to_prog_t *handle;
5433 const char *posttype = NULL;
5434 const char *postseparator = NULL;
5435 int poststringbuffer = -1;
5436 int postkeyid = -1;
5437 const char *query_string = NULL;
5438 size_t lq;
5439
5440 if(!PRVM_allfunction(URI_Get_Callback))
5441 prog->error_cmd("uri_get called by %s without URI_Get_Callback defined", prog->name);
5442
5444
5445 url = PRVM_G_STRING(OFS_PARM0);
5446 id = PRVM_G_FLOAT(OFS_PARM1);
5447 if(prog->argc >= 3)
5448 posttype = PRVM_G_STRING(OFS_PARM2);
5449 if(prog->argc >= 4)
5450 postseparator = PRVM_G_STRING(OFS_PARM3);
5451 if(prog->argc >= 5)
5452 poststringbuffer = PRVM_G_FLOAT(OFS_PARM4);
5453 if(prog->argc >= 6)
5454 postkeyid = PRVM_G_FLOAT(OFS_PARM5);
5455 handle = (uri_to_prog_t *) Z_Malloc(sizeof(*handle)); // this can't be the prog's mem pool, as curl may call the callback later!
5456
5457 query_string = strchr(url, '?');
5458 if(query_string)
5459 ++query_string;
5460 lq = query_string ? strlen(query_string) : 0;
5461
5462 handle->prog = prog;
5463 handle->starttime = prog->starttime;
5464 handle->id = id;
5465 if(postseparator && posttype && *posttype)
5466 {
5467 size_t l = strlen(postseparator);
5468 if(poststringbuffer >= 0)
5469 {
5470 size_t ltotal;
5471 int i;
5472 // "implode"
5473 prvm_stringbuffer_t *stringbuffer;
5474 stringbuffer = (prvm_stringbuffer_t *)Mem_ExpandableArray_RecordAtIndex(&prog->stringbuffersarray, poststringbuffer);
5475 if(!stringbuffer)
5476 {
5477 VM_Warning(prog, "uri_get: invalid buffer %i\n", (int)PRVM_G_FLOAT(OFS_PARM0));
5478 return;
5479 }
5480 ltotal = 0;
5481 for(i = 0;i < stringbuffer->num_strings;i++)
5482 {
5483 if(i > 0)
5484 ltotal += l;
5485 if(stringbuffer->strings[i])
5486 ltotal += strlen(stringbuffer->strings[i]);
5487 }
5488 handle->postdata = (unsigned char *)Z_Malloc(ltotal + 1 + lq);
5489 handle->postlen = ltotal;
5490 ltotal = 0;
5491 for(i = 0;i < stringbuffer->num_strings;i++)
5492 {
5493 if(i > 0)
5494 {
5495 memcpy(handle->postdata + ltotal, postseparator, l);
5496 ltotal += l;
5497 }
5498 if(stringbuffer->strings[i])
5499 {
5500 memcpy(handle->postdata + ltotal, stringbuffer->strings[i], strlen(stringbuffer->strings[i]));
5501 ltotal += strlen(stringbuffer->strings[i]);
5502 }
5503 }
5504 if(ltotal != handle->postlen)
5505 prog->error_cmd("%s: string buffer content size mismatch, possible overrun", prog->name);
5506 }
5507 else
5508 {
5509 handle->postdata = (unsigned char *)Z_Malloc(l + 1 + lq);
5510 handle->postlen = l;
5511 memcpy(handle->postdata, postseparator, l);
5512 }
5513 handle->postdata[handle->postlen] = 0;
5514 if(query_string)
5515 memcpy(handle->postdata + handle->postlen + 1, query_string, lq);
5516 if(postkeyid >= 0)
5517 {
5518 // POST: we sign postdata \0 query string
5519 size_t ll;
5520 handle->sigdata = (char *)Z_Malloc(8192);
5521 dp_strlcpy(handle->sigdata, "X-D0-Blind-ID-Detached-Signature: ", 8192);
5522 l = strlen(handle->sigdata);
5523 handle->siglen = Crypto_SignDataDetached(handle->postdata, handle->postlen + 1 + lq, postkeyid, handle->sigdata + l, 8192 - l);
5524 if(!handle->siglen)
5525 {
5526 Z_Free(handle->sigdata);
5527 handle->sigdata = NULL;
5528 goto out1;
5529 }
5530 ll = base64_encode((unsigned char *) (handle->sigdata + l), handle->siglen, 8192 - l - 1);
5531 if(!ll)
5532 {
5533 Z_Free(handle->sigdata);
5534 handle->sigdata = NULL;
5535 goto out1;
5536 }
5537 handle->siglen = l + ll;
5538 handle->sigdata[handle->siglen] = 0;
5539 }
5540out1:
5541 dp_strlcpy(handle->posttype, posttype, sizeof(handle->posttype));
5542 ret = Curl_Begin_ToMemory_POST(url, handle->sigdata, 0, handle->posttype, handle->postdata, handle->postlen, (unsigned char *) handle->buffer, sizeof(handle->buffer), uri_to_string_callback, handle);
5543 }
5544 else
5545 {
5546 if(postkeyid >= 0 && query_string)
5547 {
5548 // GET: we sign JUST the query string
5549 size_t l, ll;
5550 handle->sigdata = (char *)Z_Malloc(8192);
5551 dp_strlcpy(handle->sigdata, "X-D0-Blind-ID-Detached-Signature: ", 8192);
5552 l = strlen(handle->sigdata);
5553 handle->siglen = Crypto_SignDataDetached(query_string, lq, postkeyid, handle->sigdata + l, 8192 - l);
5554 if(!handle->siglen)
5555 {
5556 Z_Free(handle->sigdata);
5557 handle->sigdata = NULL;
5558 goto out2;
5559 }
5560 ll = base64_encode((unsigned char *) (handle->sigdata + l), handle->siglen, 8192 - l - 1);
5561 if(!ll)
5562 {
5563 Z_Free(handle->sigdata);
5564 handle->sigdata = NULL;
5565 goto out2;
5566 }
5567 handle->siglen = l + ll;
5568 handle->sigdata[handle->siglen] = 0;
5569 }
5570out2:
5571 handle->postdata = NULL;
5572 handle->postlen = 0;
5573 ret = Curl_Begin_ToMemory_POST(url, handle->sigdata, 0, NULL, NULL, 0, (unsigned char *) handle->buffer, sizeof(handle->buffer), uri_to_string_callback, handle);
5574 }
5575 if(ret)
5576 {
5578 }
5579 else
5580 {
5581 if(handle->postdata)
5582 Z_Free(handle->postdata);
5583 if(handle->sigdata)
5584 Z_Free(handle->sigdata);
5585 Z_Free(handle);
5587 }
5588}
size_t base64_encode(unsigned char *buf, size_t buflen, size_t outbuflen)
Definition common.c:1502
size_t Crypto_SignDataDetached(const void *data, size_t datasize, int keyid, void *signed_data, size_t signed_size)
Definition crypto.c:2645
GLenum GLuint id
Definition glquake.h:657
qbool Curl_Begin_ToMemory_POST(const char *URL, const char *extraheaders, double maxspeed, const char *post_content_type, const unsigned char *postbuf, size_t postbufsize, unsigned char *buf, size_t bufsize, curl_callback_t callback, void *cbdata)
Definition libcurl.c:1121
#define PRVM_allfunction(funcname)
Definition progsvm.h:146
void VM_uri_get(prvm_prog_t *prog)
Definition prvm_cmds.c:5427
static void uri_to_string_callback(int status, size_t length_received, unsigned char *buffer, void *cbdata)
Definition prvm_cmds.c:5389
unsigned char * postdata
Definition prvm_cmds.c:5382
char buffer[MAX_INPUTLINE]
Definition prvm_cmds.c:5380
char posttype[128]
Definition prvm_cmds.c:5381
double starttime
Definition prvm_cmds.c:5378
prvm_prog_t * prog
Definition prvm_cmds.c:5377
#define Z_Malloc(size)
Definition zone.h:161
#define Z_Free(data)
Definition zone.h:164

References prvm_prog_t::argc, base64_encode(), uri_to_prog_t::buffer, Crypto_SignDataDetached(), Curl_Begin_ToMemory_POST(), dp_strlcpy, prvm_prog_t::error_cmd, i, id, uri_to_prog_t::id, Mem_ExpandableArray_RecordAtIndex(), prvm_prog_t::name, NULL, prvm_stringbuffer_t::num_strings, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_PARM5, OFS_RETURN, uri_to_prog_t::postdata, uri_to_prog_t::postlen, uri_to_prog_t::posttype, uri_to_prog_t::prog, PRVM_allfunction, PRVM_G_FLOAT, PRVM_G_INT, PRVM_G_STRING, ret, uri_to_prog_t::sigdata, uri_to_prog_t::siglen, prvm_prog_t::starttime, uri_to_prog_t::starttime, prvm_prog_t::stringbuffersarray, prvm_stringbuffer_t::strings, strlen(), uri_to_string_callback(), VM_SAFEPARMCOUNTRANGE, VM_uri_get(), VM_Warning(), Z_Free, and Z_Malloc.

Referenced by VM_uri_get().

◆ VM_uri_unescape()

void VM_uri_unescape ( prvm_prog_t * prog)

Definition at line 5317 of file prvm_cmds.c.

5318{
5320 char dest[VM_TEMPSTRING_MAXSIZE];
5321 char *p, *q;
5322 int hi, lo;
5323
5325 VM_VarString(prog, 0, src, sizeof(src));
5326
5327 for(p = src, q = dest; *p; ) // no need to check size, because unescape can't expand
5328 {
5329 if(*p == '%')
5330 {
5331 if(p[1] >= '0' && p[1] <= '9')
5332 hi = p[1] - '0';
5333 else if(p[1] >= 'a' && p[1] <= 'f')
5334 hi = p[1] - 'a' + 10;
5335 else if(p[1] >= 'A' && p[1] <= 'F')
5336 hi = p[1] - 'A' + 10;
5337 else
5338 goto nohex;
5339 if(p[2] >= '0' && p[2] <= '9')
5340 lo = p[2] - '0';
5341 else if(p[2] >= 'a' && p[2] <= 'f')
5342 lo = p[2] - 'a' + 10;
5343 else if(p[2] >= 'A' && p[2] <= 'F')
5344 lo = p[2] - 'A' + 10;
5345 else
5346 goto nohex;
5347 if(hi != 0 || lo != 0) // don't unescape NUL bytes
5348 *q++ = (char) (hi * 0x10 + lo);
5349 p += 3;
5350 continue;
5351 }
5352
5353nohex:
5354 // otherwise:
5355 *q++ = *p++;
5356 }
5357 *q = '\0';
5358
5359 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, dest, q - dest);
5360}
void VM_uri_unescape(prvm_prog_t *prog)
Definition prvm_cmds.c:5317

References OFS_RETURN, PRVM_G_INT, PRVM_SetTempString(), src, VM_SAFEPARMCOUNTRANGE, VM_TEMPSTRING_MAXSIZE, VM_uri_unescape(), and VM_VarString().

Referenced by VM_uri_unescape().

◆ VM_VarString()

size_t VM_VarString ( prvm_prog_t * prog,
int first,
char * out,
size_t outsize )

Returns the length of the *out string excluding the \0 terminator.

Definition at line 280 of file prvm_cmds.c.

281{
282 int i;
283 const char *s;
284 char *p;
285 char *outend = out + outsize - 1;
286
287 // bones_was_here: && out < outend improves perf significantly in some tests that don't trigger the warning,
288 // which seems odd, surely it would only help when the warning is printed?
289 for (i = first;i < prog->argc && out < outend;i++)
290 {
291 s = PRVM_G_STRING((OFS_PARM0+i*3));
292 if (*s)
293 {
294 // like dp_stpecpy but with a VM_Warning for use with `prvm_backtraceforwarnings 1`
295 p = (char *)memccpy(out, s, '\0', (outend + 1) - out);
296 if (p)
297 out = p - 1;
298 else
299 {
300 VM_Warning(prog, "%lu of %lu bytes available, will truncate %lu byte string \"%s\"\n", (unsigned long)(outend - out), (unsigned long)outsize - 1, (unsigned long)strlen(s), s);
301 out = outend;
302 *out = '\0';
303 }
304 }
305 else
306 *out = '\0';
307 }
308
309 return outsize - ((outend + 1) - out);
310}

References prvm_prog_t::argc, first, i, OFS_PARM0, PRVM_G_STRING, strlen(), and VM_Warning().

Referenced by VM_bprint(), VM_centerprint(), VM_crc16(), VM_cvar(), VM_cvar_defstring(), VM_cvar_description(), VM_cvar_set(), VM_cvar_string(), VM_cvar_type(), VM_digest_hex(), VM_dprint(), VM_error(), VM_fputs(), VM_infoadd(), VM_localcmd(), VM_objerror(), VM_print(), VM_sprint(), VM_stof(), VM_stov(), VM_strcat(), VM_strconv(), VM_strftime(), VM_strpad(), VM_strzone(), VM_SV_centerprint(), VM_SV_sprint(), VM_SV_stuffcmd(), VM_uri_escape(), and VM_uri_unescape().

◆ VM_vectoangles()

void VM_vectoangles ( prvm_prog_t * prog)

Definition at line 586 of file prvm_cmds.c.

587{
588 vec3_t result, forward, up;
590
592 if (prog->argc >= 2)
593 {
595 AnglesFromVectors(result, forward, up, true);
596 }
597 else
598 AnglesFromVectors(result, forward, NULL, true);
600}
void AnglesFromVectors(vec3_t angles, const vec3_t forward, const vec3_t up, qbool flippitch)
LadyHavoc: calculates pitch/yaw/roll angles from forward and up vectors.
Definition mathlib.c:650
void VM_vectoangles(prvm_prog_t *prog)
Definition prvm_cmds.c:586

References AnglesFromVectors(), prvm_prog_t::argc, forward, NULL, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_VECTOR, up, VectorCopy, VM_SAFEPARMCOUNTRANGE, and VM_vectoangles().

Referenced by VM_vectoangles().

◆ VM_vectorvectors()

void VM_vectorvectors ( prvm_prog_t * prog)

Definition at line 3582 of file prvm_cmds.c.

3583{
3591}
void VectorVectors(const vec3_t forward, vec3_t right, vec3_t up)
LadyHavoc: like AngleVectors, but taking a forward vector instead of angles, useful!
Definition mathlib.c:199
#define VectorNormalize2(v, dest)
Definition mathlib.h:105
void VM_vectorvectors(prvm_prog_t *prog)
Definition prvm_cmds.c:3582

References forward, OFS_PARM0, PRVM_G_VECTOR, PRVM_gameglobalvector, right, up, v_forward, v_right, v_up, VectorCopy, VectorNormalize2, VectorVectors(), VM_SAFEPARMCOUNT, and VM_vectorvectors().

Referenced by VM_vectorvectors().

◆ VM_vectoyaw()

void VM_vectoyaw ( prvm_prog_t * prog)

Definition at line 557 of file prvm_cmds.c.

558{
559 prvm_vec_t *value1;
560 prvm_vec_t yaw;
561
563
564 value1 = PRVM_G_VECTOR(OFS_PARM0);
565
566 if (value1[1] == 0 && value1[0] == 0)
567 yaw = 0;
568 else
569 {
570 yaw = (int) (atan2(value1[1], value1[0]) * 180 / M_PI);
571 if (yaw < 0)
572 yaw += 360;
573 }
574
576}
#define M_PI
Definition mathlib.h:28
void VM_vectoyaw(prvm_prog_t *prog)
Definition prvm_cmds.c:557

References int(), M_PI, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_VECTOR, VM_SAFEPARMCOUNT, and VM_vectoyaw().

Referenced by VM_vectoyaw().

◆ VM_vlen()

void VM_vlen ( prvm_prog_t * prog)

Definition at line 544 of file prvm_cmds.c.

545{
548}
#define VectorLength(a)
Definition mathlib.h:109
void VM_vlen(prvm_prog_t *prog)
Definition prvm_cmds.c:544

References OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_VECTOR, VectorLength, VM_SAFEPARMCOUNT, and VM_vlen().

Referenced by VM_vlen().

◆ VM_vtos()

void VM_vtos ( prvm_prog_t * prog)

Definition at line 917 of file prvm_cmds.c.

918{
919 char s[512];
920 size_t slen;
921
923
924 slen = dpsnprintf(s, sizeof(s), "'%5.1f %5.1f %5.1f'", PRVM_G_VECTOR(OFS_PARM0)[0], PRVM_G_VECTOR(OFS_PARM0)[1], PRVM_G_VECTOR(OFS_PARM0)[2]);
925 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, s, slen);
926}
void VM_vtos(prvm_prog_t *prog)
Definition prvm_cmds.c:917

References dpsnprintf(), OFS_PARM0, OFS_RETURN, PRVM_G_INT, PRVM_G_VECTOR, PRVM_SetTempString(), VM_SAFEPARMCOUNT, and VM_vtos().

Referenced by VM_vtos().

◆ VM_wasfreed()

void VM_wasfreed ( prvm_prog_t * prog)

Definition at line 5222 of file prvm_cmds.c.

5223{
5226}
void VM_wasfreed(prvm_prog_t *prog)
Definition prvm_cmds.c:5222

References OFS_PARM0, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, VM_SAFEPARMCOUNT, and VM_wasfreed().

Referenced by VM_wasfreed().

◆ VM_whichpack()

void VM_whichpack ( prvm_prog_t * prog)

Definition at line 5364 of file prvm_cmds.c.

5365{
5366 const char *fn, *pack;
5367
5370 pack = FS_WhichPack(fn);
5371
5372 PRVM_G_INT(OFS_RETURN) = pack ? PRVM_SetTempString(prog, pack, strlen(pack)) : 0;
5373}
const char * FS_WhichPack(const char *filename)
Definition fs.c:4091
void VM_whichpack(prvm_prog_t *prog)
Definition prvm_cmds.c:5364

References FS_WhichPack(), OFS_PARM0, OFS_RETURN, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), strlen(), VM_SAFEPARMCOUNT, and VM_whichpack().

Referenced by VM_whichpack().

◆ VM_writetofile()

void VM_writetofile ( prvm_prog_t * prog)

Definition at line 2082 of file prvm_cmds.c.

2083{
2084 prvm_edict_t * ent;
2085 qfile_t *file;
2086
2088
2089 file = VM_GetFileHandle(prog, (int)PRVM_G_FLOAT(OFS_PARM0));
2090 if( !file )
2091 {
2092 VM_Warning(prog, "VM_writetofile: invalid or closed file handle\n");
2093 return;
2094 }
2095
2096 ent = PRVM_G_EDICT(OFS_PARM1);
2097 if(ent->free)
2098 {
2099 VM_Warning(prog, "VM_writetofile: entity %i is free!\n", PRVM_NUM_FOR_EDICT(ent));
2100 return;
2101 }
2102
2103 PRVM_ED_Write (prog, file, ent);
2104}
void PRVM_ED_Write(prvm_prog_t *prog, struct qfile_s *f, prvm_edict_t *ed)
void VM_writetofile(prvm_prog_t *prog)
Definition prvm_cmds.c:2082
static qfile_t * VM_GetFileHandle(prvm_prog_t *prog, int index)
Definition prvm_cmds.c:1874

References prvm_edict_t::free, OFS_PARM0, OFS_PARM1, PRVM_ED_Write(), PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_NUM_FOR_EDICT, VM_GetFileHandle(), VM_SAFEPARMCOUNT, VM_Warning(), and VM_writetofile().

Referenced by VM_writetofile().