if (cmd_text.cursize + l >= cmd_text.maxsize)
{
- Con_Printf ("Cbuf_AddText: overflow\n");
+ Con_Print("Cbuf_AddText: overflow\n");
return;
}
char *temp;
int templen;
-// copy off any commands still remaining in the exec buffer
+ // copy off any commands still remaining in the exec buffer
templen = cmd_text.cursize;
if (templen)
{
- temp = Z_Malloc (templen);
+ temp = Mem_Alloc (tempmempool, templen);
memcpy (temp, cmd_text.data, templen);
SZ_Clear (&cmd_text);
}
else
- temp = NULL; // shut up compiler
+ temp = NULL;
-// add the entire text of the file
+ // add the entire text of the file
Cbuf_AddText (text);
-// add the copied off data
- if (templen)
+ // add the copied off data
+ if (temp != NULL)
{
SZ_Write (&cmd_text, temp, templen);
- Z_Free (temp);
+ Mem_Free (temp);
}
}
quotes++;
if ( !(quotes&1) && text[i] == ';')
break; // don't break if inside a quoted string
- if (text[i] == '\n')
+ if (text[i] == '\r' || text[i] == '\n')
break;
}
{
i++;
cmd_text.cursize -= i;
- memcpy (text, text+i, cmd_text.cursize);
+ memcpy (cmd_text.data, text+i, cmd_text.cursize);
}
// execute the command line
if (Cmd_Argc () != 1)
{
- Con_Printf ("stuffcmds : execute command line parameters\n");
+ Con_Print("stuffcmds : execute command line parameters\n");
return;
}
if (!s)
return;
- text = Z_Malloc (s+1);
+ text = Mem_Alloc (tempmempool, s + 1);
text[0] = 0;
for (i=1 ; i<com_argc ; i++)
{
strcat (text, " ");
}
-// pull out the commands
- build = Z_Malloc (s+1);
+ // pull out the commands
+ build = Mem_Alloc (tempmempool, s + 1);
build[0] = 0;
for (i=0 ; i<s-1 ; i++)
if (build[0])
Cbuf_InsertText (build);
- Z_Free (text);
- Z_Free (build);
+ Mem_Free (text);
+ Mem_Free (build);
}
if (Cmd_Argc () != 2)
{
- Con_Printf ("exec <filename> : execute a script file\n");
+ Con_Print("exec <filename> : execute a script file\n");
return;
}
- f = (char *)FS_LoadFile (Cmd_Argv(1), false);
+ f = (char *)FS_LoadFile (Cmd_Argv(1), tempmempool, false);
if (!f)
{
- Con_Printf ("couldn't exec %s\n",Cmd_Argv(1));
+ Con_Printf("couldn't exec %s\n",Cmd_Argv(1));
return;
}
- Con_DPrintf ("execing %s\n",Cmd_Argv(1));
+ Con_DPrintf("execing %s\n",Cmd_Argv(1));
Cbuf_InsertText (f);
Mem_Free(f);
int i;
for (i=1 ; i<Cmd_Argc() ; i++)
- Con_Printf ("%s ",Cmd_Argv(i));
- Con_Printf ("\n");
+ Con_Printf("%s ",Cmd_Argv(i));
+ Con_Print("\n");
}
/*
Creates a new command that executes a command string (possibly ; seperated)
===============
*/
-static char *CopyString (char *in)
-{
- char *out;
-
- out = Z_Malloc (strlen(in)+1);
- strcpy (out, in);
- return out;
-}
-
static void Cmd_Alias_f (void)
{
cmdalias_t *a;
if (Cmd_Argc() == 1)
{
- Con_Printf ("Current alias commands:\n");
+ Con_Print("Current alias commands:\n");
for (a = cmd_alias ; a ; a=a->next)
- Con_Printf ("%s : %s\n", a->name, a->value);
+ Con_Printf("%s : %s\n", a->name, a->value);
return;
}
s = Cmd_Argv(1);
if (strlen(s) >= MAX_ALIAS_NAME)
{
- Con_Printf ("Alias name is too long\n");
+ Con_Print("Alias name is too long\n");
return;
}
a->next = cmd_alias;
cmd_alias = a;
}
- strcpy (a->name, s);
+ strlcpy (a->name, s, sizeof (a->name));
// copy the rest of the command line
cmd[0] = 0; // start out with a null string
c = Cmd_Argc();
for (i=2 ; i< c ; i++)
{
- strcat (cmd, Cmd_Argv(i));
+ strlcat (cmd, Cmd_Argv(i), sizeof (cmd));
if (i != c)
- strcat (cmd, " ");
+ strlcat (cmd, " ", sizeof (cmd));
}
- strcat (cmd, "\n");
+ strlcat (cmd, "\n", sizeof (cmd));
- a->value = CopyString (cmd);
+ a->value = Z_Malloc (strlen (cmd) + 1);
+ strcpy (a->value, cmd);
}
/*
{
if (partial && strncmp(partial, cmd->name, len))
continue;
- Con_Printf ("%s\n", cmd->name);
+ Con_Printf("%s\n", cmd->name);
count++;
}
- Con_Printf ("%i Command%s", count, (count > 1) ? "s" : "");
+ Con_Printf("%i Command%s", count, (count > 1) ? "s" : "");
if (partial)
Con_Printf(" beginning with \"%s\"", partial);
- Con_Printf ("\n\n");
+ Con_Print("\n\n");
}
/*
*/
void Cmd_Init (void)
{
- cmd_mempool = Mem_AllocPool("commands");
+ cmd_mempool = Mem_AllocPool("commands", 0, NULL);
//
// register our commands
if (cmd_argc == 1)
cmd_args = text;
- if (!COM_ParseToken (&text))
+ if (!COM_ParseTokenConsole(&text))
return;
if (cmd_argc < MAX_ARGS)
// fail if the command is a variable name
if (Cvar_VariableString(cmd_name)[0])
{
- Con_Printf ("Cmd_AddCommand: %s already defined as a var\n", cmd_name);
+ Con_Printf("Cmd_AddCommand: %s already defined as a var\n", cmd_name);
return;
}
{
if (!strcmp (cmd_name, cmd->name))
{
- Con_Printf ("Cmd_AddCommand: %s already defined\n", cmd_name);
+ Con_Printf("Cmd_AddCommand: %s already defined\n", cmd_name);
return;
}
}
return; // no tokens
}
-// check functions
- for (cmd=cmd_functions ; cmd ; cmd=cmd->next)
+// check functions (only after host_initialized)
+ if (host_initialized || !strcasecmp(cmd_argv[0], "exec"))
{
- if (!strcasecmp (cmd_argv[0],cmd->name))
+ for (cmd=cmd_functions ; cmd ; cmd=cmd->next)
{
- cmd->function ();
- cmd_tokenizebufferpos = oldpos;
- return;
+ if (!strcasecmp (cmd_argv[0],cmd->name))
+ {
+ cmd->function ();
+ cmd_tokenizebufferpos = oldpos;
+ return;
+ }
}
}
-// check alias
- for (a=cmd_alias ; a ; a=a->next)
+// check alias (only after host_initialized)
+ if (host_initialized)
{
- if (!strcasecmp (cmd_argv[0], a->name))
+ for (a=cmd_alias ; a ; a=a->next)
{
- Cbuf_InsertText (a->value);
- cmd_tokenizebufferpos = oldpos;
- return;
+ if (!strcasecmp (cmd_argv[0], a->name))
+ {
+ Cbuf_InsertText (a->value);
+ cmd_tokenizebufferpos = oldpos;
+ return;
+ }
}
}
-// check cvars
- if (!Cvar_Command ())
- Con_Printf ("Unknown command \"%s\"\n", Cmd_Argv(0));
+// check cvars (always)
+ if (!Cvar_Command () && host_initialized)
+ Con_Printf("Unknown command \"%s\"\n", Cmd_Argv(0));
cmd_tokenizebufferpos = oldpos;
}
*/
void Cmd_ForwardToServer (void)
{
+ const char *s;
if (cls.state != ca_connected)
{
- Con_Printf ("Can't \"%s\", not connected\n", Cmd_Argv(0));
+ Con_Printf("Can't \"%s\", not connected\n", Cmd_Argv(0));
return;
}
if (cls.demoplayback)
return; // not really connected
- MSG_WriteByte (&cls.message, clc_stringcmd);
+ // LordHavoc: thanks to Fuh for bringing the pure evil of SZ_Print to my
+ // attention, it has been eradicated from here, its only (former) use in
+ // all of darkplaces.
if (strcasecmp(Cmd_Argv(0), "cmd") != 0)
- {
- SZ_Print (&cls.message, Cmd_Argv(0));
- SZ_Print (&cls.message, " ");
- }
- if (Cmd_Argc() > 1)
- SZ_Print (&cls.message, Cmd_Args());
+ s = va("%s %s", Cmd_Argv(0), Cmd_Argc() > 1 ? Cmd_Args() : "\n");
else
- SZ_Print (&cls.message, "\n");
+ s = Cmd_Argc() > 1 ? Cmd_Args() : "\n";
+ MSG_WriteByte(&cls.message, clc_stringcmd);
+ SZ_Write(&cls.message, s, strlen(s) + 1);
}