[gamecode] Make PF_VarString v6p-only

It's not enforced a this stage, and it would be easy enough to handle,
but it turns out all the standard quake and quakeworld progs never used
... for the print functions: the behavior of PF_VarString was
undocumented and so... tough :P.
This commit is contained in:
Bill Currie 2022-02-06 19:34:46 +09:00
parent 95c4cdd1b0
commit 7c6ef06dfb
5 changed files with 16 additions and 30 deletions

View file

@ -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;

View file

@ -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));
}
/*

View file

@ -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");

View file

@ -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);

View file

@ -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) |