mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-01-31 13:30:52 +00:00
Merge branch 'alias-argh' into 'master'
Allow argument substitution in aliases See merge request KartKrew/Kart-Public!124
This commit is contained in:
commit
0ee1cd6cbf
1 changed files with 37 additions and 18 deletions
|
@ -537,10 +537,41 @@ static void COM_ExecuteString(char *ptext)
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Alias recursion cycle detected!\n"));
|
CONS_Alert(CONS_WARNING, M_GetText("Alias recursion cycle detected!\n"));
|
||||||
recursion = 0;
|
recursion = 0;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char buf[1024];
|
||||||
|
char *write = buf, *read = a->value, *seek = read;
|
||||||
|
|
||||||
|
while ((seek = strchr(seek, '$')) != NULL)
|
||||||
|
{
|
||||||
|
memcpy(write, read, seek-read);
|
||||||
|
write += seek-read;
|
||||||
|
|
||||||
|
seek++;
|
||||||
|
|
||||||
|
if (*seek >= '1' && *seek <= '9')
|
||||||
|
{
|
||||||
|
if (com_argc > (size_t)(*seek - '0'))
|
||||||
|
{
|
||||||
|
memcpy(write, com_argv[*seek - '0'], strlen(com_argv[*seek - '0']));
|
||||||
|
write += strlen(com_argv[*seek - '0']);
|
||||||
|
}
|
||||||
|
seek++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*write = '$';
|
||||||
|
write++;
|
||||||
|
}
|
||||||
|
|
||||||
|
read = seek;
|
||||||
|
}
|
||||||
|
WRITESTRING(write, read);
|
||||||
|
|
||||||
recursion++;
|
recursion++;
|
||||||
COM_BufInsertText(a->value);
|
COM_BufInsertText(buf);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -563,8 +594,6 @@ static void COM_ExecuteString(char *ptext)
|
||||||
static void COM_Alias_f(void)
|
static void COM_Alias_f(void)
|
||||||
{
|
{
|
||||||
cmdalias_t *a;
|
cmdalias_t *a;
|
||||||
char cmd[1024];
|
|
||||||
size_t i, c;
|
|
||||||
|
|
||||||
if (COM_Argc() < 3)
|
if (COM_Argc() < 3)
|
||||||
{
|
{
|
||||||
|
@ -577,19 +606,9 @@ static void COM_Alias_f(void)
|
||||||
com_alias = a;
|
com_alias = a;
|
||||||
|
|
||||||
a->name = Z_StrDup(COM_Argv(1));
|
a->name = Z_StrDup(COM_Argv(1));
|
||||||
|
// Just use arg 2 if it's the only other argument, in case the alias is wrapped in quotes (backward compat, or multiple commands in one string).
|
||||||
// copy the rest of the command line
|
// Otherwise pull the whole string and seek to the end of the alias name. The strctr is in case the alias is quoted.
|
||||||
cmd[0] = 0; // start out with a null string
|
a->value = Z_StrDup(COM_Argc() == 3 ? COM_Argv(2) : (strchr(COM_Args() + strlen(a->name), ' ') + 1));
|
||||||
c = COM_Argc();
|
|
||||||
for (i = 2; i < c; i++)
|
|
||||||
{
|
|
||||||
strcat(cmd, COM_Argv(i));
|
|
||||||
if (i != c)
|
|
||||||
strcat(cmd, " ");
|
|
||||||
}
|
|
||||||
strcat(cmd, "\n");
|
|
||||||
|
|
||||||
a->value = Z_StrDup(cmd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Prints a line of text to the console.
|
/** Prints a line of text to the console.
|
||||||
|
|
Loading…
Reference in a new issue