mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-01-19 07:51:19 +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"));
|
||||
recursion = 0;
|
||||
return;
|
||||
}
|
||||
recursion++;
|
||||
COM_BufInsertText(a->value);
|
||||
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++;
|
||||
COM_BufInsertText(buf);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -563,8 +594,6 @@ static void COM_ExecuteString(char *ptext)
|
|||
static void COM_Alias_f(void)
|
||||
{
|
||||
cmdalias_t *a;
|
||||
char cmd[1024];
|
||||
size_t i, c;
|
||||
|
||||
if (COM_Argc() < 3)
|
||||
{
|
||||
|
@ -577,19 +606,9 @@ static void COM_Alias_f(void)
|
|||
com_alias = a;
|
||||
|
||||
a->name = Z_StrDup(COM_Argv(1));
|
||||
|
||||
// copy the rest of the command line
|
||||
cmd[0] = 0; // start out with a null string
|
||||
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);
|
||||
// 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).
|
||||
// Otherwise pull the whole string and seek to the end of the alias name. The strctr is in case the alias is quoted.
|
||||
a->value = Z_StrDup(COM_Argc() == 3 ? COM_Argv(2) : (strchr(COM_Args() + strlen(a->name), ' ') + 1));
|
||||
}
|
||||
|
||||
/** Prints a line of text to the console.
|
||||
|
|
Loading…
Reference in a new issue