}
-/* Look up the contents of LINE as a command in the command list 'cmdlist'.
+/* Look up the contents of TEXT as a command in the command list 'cmdlist'.
Return 1 on success, 0 on failure.
-
- If LINE refers to an alias, *alias will point to that alias.
-
- If LINE is a postfix command (i.e. one that is preceded by a prefix
- command) set *prefix_cmd.
-
- Set *cmd to point to the command LINE indicates.
-
- If any of *alias, *prefix_cmd, or *cmd cannot be determined or do not
+
+ If TEXT refers to an alias, *ALIAS will point to that alias.
+
+ If TEXT is a subcommand (i.e. one that is preceded by a prefix
+ command) set *PREFIX_CMD.
+
+ Set *CMD to point to the command TEXT indicates.
+
+ If any of *ALIAS, *PREFIX_CMD, or *CMD cannot be determined or do not
exist, they are NULL when we return.
-
+
*/
int
lookup_cmd_composition (const char *text,
- struct cmd_list_element **alias,
- struct cmd_list_element **prefix_cmd,
- struct cmd_list_element **cmd)
+ struct cmd_list_element **alias,
+ struct cmd_list_element **prefix_cmd,
+ struct cmd_list_element **cmd)
{
char *command;
int len, nfound;
*alias = NULL;
*prefix_cmd = NULL;
*cmd = NULL;
-
+
cur_list = cmdlist;
-
+
while (1)
- {
+ {
/* Go through as many command lists as we need to,
to find the command TEXT refers to. */
-
+
prev_cmd = *cmd;
-
+
while (*text == ' ' || *text == '\t')
(text)++;
-
+
/* Identify the name of the command. */
len = find_command_name_length (text);
-
+
/* If nothing but whitespace, return. */
if (len == 0)
return 0;
-
- /* Text is the start of the first command word to lookup (and
+
+ /* TEXT is the start of the first command word to lookup (and
it's length is len). We copy this into a local temporary. */
-
+
command = (char *) alloca (len + 1);
memcpy (command, text, len);
command[len] = '\0';
-
+
/* Look it up. */
*cmd = 0;
nfound = 0;
*cmd = find_cmd (command, len, cur_list, 1, &nfound);
-
+
if (*cmd == CMD_LIST_AMBIGUOUS)
{
return 0; /* ambiguous */
}
-
+
if (*cmd == NULL)
return 0; /* nothing found */
else
if ((*cmd)->cmd_pointer)
{
/* cmd was actually an alias, we note that an alias was
- used (by assigning *alais) and we set *cmd. */
+ used (by assigning *ALIAS) and we set *CMD. */
*alias = *cmd;
*cmd = (*cmd)->cmd_pointer;
}
cur_list = *(*cmd)->prefixlist;
else
return 1;
-
+
text += len;
}
}