diff --git a/include/QF/progs.h b/include/QF/progs.h index 85b720bbf..0fd8efdfc 100644 --- a/include/QF/progs.h +++ b/include/QF/progs.h @@ -1843,7 +1843,7 @@ extern struct cvar_s *pr_faultchecks; */ ///@{ -char *PF_VarString (progs_t *pr, int first); +char *PF_VarString (progs_t *pr, int first, int count); void PR_Cmds_Init (progs_t *pr); extern const char *pr_gametype; diff --git a/libs/ruamoko/pr_cmds.c b/libs/ruamoko/pr_cmds.c index 93cec016e..1b03f1bad 100644 --- a/libs/ruamoko/pr_cmds.c +++ b/libs/ruamoko/pr_cmds.c @@ -54,27 +54,13 @@ VISIBLE const char *pr_gametype = ""; /* BUILT-IN FUNCTIONS */ VISIBLE char * -PF_VarString (progs_t *pr, int first) +PF_VarString (progs_t *pr, int first, int argc) { char *out, *dst; const char *src; int len, i; - int argc = pr->pr_argc; pr_type_t **argv = pr->pr_params; - if (pr->progs->version == PROG_VERSION) { - __auto_type va_list = &P_PACKED (pr, pr_va_list_t, 0); - argc = va_list->count; - if (argc) { - argv = alloca (argc * sizeof (pr_type_t *)); - for (int i = 0; i < argc; i++) { - argv[i] = &pr->pr_globals[va_list->list + i * 4]; - } - } else { - argv = 0; - } - } - for (len = 0, i = first; i < argc; i++) len += strlen (PR_GetString (pr, argv[i]->string_var)); dst = out = Hunk_TempAlloc (0, len + 1); @@ -367,7 +353,7 @@ PF_eprint (progs_t *pr) static void PF_dprint (progs_t *pr) { - Sys_Printf ("%s", PF_VarString (pr, 0)); + Sys_Printf ("%s", PF_VarString (pr, 0, 1)); } /* diff --git a/nq/source/sv_pr_cmds.c b/nq/source/sv_pr_cmds.c index 38755c8f9..40bd9e72a 100644 --- a/nq/source/sv_pr_cmds.c +++ b/nq/source/sv_pr_cmds.c @@ -71,7 +71,7 @@ PF_error (progs_t *pr) const char *s; edict_t *ed; - s = PF_VarString (pr, 0); + s = PF_VarString (pr, 0, 1); Sys_Printf ("======SERVER ERROR in %s:\n%s\n", PR_GetString (pr, pr->pr_xfunction->descriptor->name), s); ed = PROG_TO_EDICT (pr, *sv_globals.self); @@ -95,7 +95,7 @@ PF_objerror (progs_t *pr) const char *s; edict_t *ed; - s = PF_VarString (pr, 0); + s = PF_VarString (pr, 0, 1); Sys_Printf ("======OBJECT ERROR in %s:\n%s\n", PR_GetString (pr, pr->pr_xfunction->descriptor->name), s); ed = PROG_TO_EDICT (pr, *sv_globals.self); @@ -287,7 +287,7 @@ PF_bprint (progs_t *pr) { const char *s; - s = PF_VarString (pr, 0); + s = PF_VarString (pr, 0, 1); SV_BroadcastPrintf ("%s", s); } @@ -307,7 +307,7 @@ PF_sprint (progs_t *pr) unsigned entnum; entnum = P_EDICTNUM (pr, 0); - s = PF_VarString (pr, 1); + s = PF_VarString (pr, 1, 2); if (entnum < 1 || entnum > svs.maxclients) { Sys_Printf ("tried to sprint to a non-client\n"); @@ -336,7 +336,7 @@ PF_centerprint (progs_t *pr) unsigned entnum; entnum = P_EDICTNUM (pr, 0); - s = PF_VarString (pr, 1); + s = PF_VarString (pr, 1, 2); if (entnum < 1 || entnum > svs.maxclients) { Sys_Printf ("tried to sprint to a non-client\n"); diff --git a/qw/source/sv_pr_cmds.c b/qw/source/sv_pr_cmds.c index e01448de6..f05d3a4cf 100644 --- a/qw/source/sv_pr_cmds.c +++ b/qw/source/sv_pr_cmds.c @@ -73,7 +73,7 @@ PF_error (progs_t *pr) const char *s; edict_t *ed; - s = PF_VarString (pr, 0); + s = PF_VarString (pr, 0, 1); Sys_Printf ("======SERVER ERROR in %s:\n%s\n", PR_GetString (pr, pr->pr_xfunction->descriptor->name), s); ed = PROG_TO_EDICT (pr, *sv_globals.self); @@ -97,7 +97,7 @@ PF_objerror (progs_t *pr) const char *s; edict_t *ed; - s = PF_VarString (pr, 0); + s = PF_VarString (pr, 0, 1); Sys_Printf ("======OBJECT ERROR in %s:\n%s\n", PR_GetString (pr, pr->pr_xfunction->descriptor->name), s); ed = PROG_TO_EDICT (pr, *sv_globals.self); @@ -222,7 +222,7 @@ PF_bprint (progs_t *pr) level = P_FLOAT (pr, 0); - s = PF_VarString (pr, 1); + s = PF_VarString (pr, 1, 2); SV_BroadcastPrintf (level, "%s", s); } @@ -254,7 +254,7 @@ PF_sprint (progs_t *pr) if (client->state == cs_server) //FIXME record to mvd? return; - s = PF_VarString (pr, 2); + s = PF_VarString (pr, 2, 3); SV_ClientPrintf (1, client, level, "%s", s); } @@ -286,7 +286,7 @@ PF_centerprint (progs_t *pr) if (cl->state == cs_server) //FIXME record to mvd? return; - s = PF_VarString (pr, 1); + s = PF_VarString (pr, 1, 2); MSG_ReliableWrite_Begin (&cl->backbuf, svc_centerprint, 2 + strlen (s)); MSG_ReliableWrite_String (&cl->backbuf, s); diff --git a/qw/source/sv_pr_qwe.c b/qw/source/sv_pr_qwe.c index c67f695fc..eb7322800 100644 --- a/qw/source/sv_pr_qwe.c +++ b/qw/source/sv_pr_qwe.c @@ -190,7 +190,7 @@ PF_substr (progs_t *pr) static void PF_strcat (progs_t *pr) { - RETURN_STRING (pr, PF_VarString (pr, 0)); + RETURN_STRING (pr, PF_VarString (pr, 0, pr->pr_argc)); } /* @@ -454,7 +454,7 @@ PF_log (progs_t *pr) name = va (0, "%s/%s.log", qfs_gamedir->dir.def, P_GSTRING (pr, 0)); file = QFS_Open (name, "a"); - text = PF_VarString (pr, 2); + text = PF_VarString (pr, 2, pr->pr_argc); clean_text (text); if (P_FLOAT (pr, 1)) @@ -475,7 +475,7 @@ PF_log (progs_t *pr) static void PF_conprint (progs_t *pr) { - Sys_Printf ("%s", PF_VarString (pr, 0)); + Sys_Printf ("%s", PF_VarString (pr, 0, pr->pr_argc)); } #define QWE (PR_RANGE_QWE << PR_RANGE_SHIFT) |