mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-26 06:20:48 +00:00
Late args parser now uses one string build instead of two
This commit is contained in:
parent
ec28387da4
commit
f6d9ffc45c
1 changed files with 49 additions and 35 deletions
|
@ -298,50 +298,64 @@ Cbuf_AddEarlyCommands(qboolean clear)
|
||||||
qboolean
|
qboolean
|
||||||
Cbuf_AddLateCommands(void)
|
Cbuf_AddLateCommands(void)
|
||||||
{
|
{
|
||||||
|
int i, j;
|
||||||
|
int s;
|
||||||
|
char *text, c;
|
||||||
|
int argc;
|
||||||
qboolean has_args = false;
|
qboolean has_args = false;
|
||||||
char *arg;
|
|
||||||
int i, argc = COM_Argc();
|
/* build the combined string to parse from */
|
||||||
|
s = 0;
|
||||||
|
argc = COM_Argc();
|
||||||
|
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
{
|
{
|
||||||
arg = COM_Argv(i);
|
s += strlen(COM_Argv(i)) + 1;
|
||||||
|
|
||||||
if (*arg != '+')
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!s)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
text = Z_Malloc(s + 1);
|
||||||
|
text[0] = 0;
|
||||||
|
|
||||||
|
for (i = 1; i < argc; i++)
|
||||||
|
{
|
||||||
|
strcat(text, COM_Argv(i));
|
||||||
|
|
||||||
|
if (i != argc - 1)
|
||||||
|
{
|
||||||
|
strcat(text, " ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* pull out the commands */
|
||||||
|
for (i = 0; i < s - 1; i++)
|
||||||
|
{
|
||||||
|
if (text[i] == '+')
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
|
||||||
|
for (j = i; (text[j] != '+') && !(text[j] == '-' && text[j-1] == ' ') && (text[j] != 0); j++)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
c = text[j];
|
||||||
|
text[j] = 0;
|
||||||
|
|
||||||
|
Cbuf_AddText(text + i);
|
||||||
|
Cbuf_AddText("\n");
|
||||||
|
|
||||||
has_args = true;
|
has_args = true;
|
||||||
i++;
|
text[j] = c;
|
||||||
|
i = j - 1;
|
||||||
Cbuf_AddText(arg + 1);
|
|
||||||
Cbuf_AddText(" ");
|
|
||||||
|
|
||||||
/* add the command parameters if any */
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
if (i >= argc)
|
|
||||||
{
|
|
||||||
Cbuf_AddText("\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
arg = COM_Argv(i);
|
|
||||||
|
|
||||||
if (*arg == '-' || *arg == '+')
|
|
||||||
{
|
|
||||||
Cbuf_AddText("\n");
|
|
||||||
i--; /* i gets incremented again by the outer loop */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
Cbuf_AddText(arg);
|
|
||||||
Cbuf_AddText(" ");
|
|
||||||
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Z_Free(text);
|
||||||
|
|
||||||
return has_args;
|
return has_args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue