1
0
mirror of https://github.com/NevermindZZT/letter-shell.git synced 2025-01-21 10:02:54 +08:00

83 lines
1.9 KiB
C
Raw Permalink Normal View History

2020-10-18 16:00:55 +08:00
/**
* @file shell_cmd_group.c
* @author Letter(nevermindzzt@gmail.com)
* @brief shell command group support
* @version 0.1
* @date 2020-10-18
*
* @copyright (c) 2020 Letter
*
*/
#include "shell_cmd_group.h"
#include "string.h"
#include "stdio.h"
unsigned int shellRunCommand(Shell *shell, ShellCommand *command);
static void shellCmdGroupHelp(Shell *shell, char *name, ShellCommand *group);
/**
* @brief shell命令组运行
*
* @param group
* @param argc
* @param argv
*
2021-11-04 10:01:48 +08:00
* @return int
2020-10-18 16:00:55 +08:00
*/
2021-11-04 10:01:48 +08:00
int shellCmdGroupRun(ShellCommand *group, int argc, char *argv[])
2020-10-18 16:00:55 +08:00
{
ShellCommand *item = group;
Shell *shell = shellGetCurrent();
SHELL_ASSERT(shell, return -1);
if (argc == 1 || strcmp("-h", argv[1]) == 0)
2020-10-18 16:00:55 +08:00
{
shellCmdGroupHelp(shell, argv[0], group);
return 0;
}
while (item->data.cmd.name)
{
if (strcmp(item->data.cmd.name, argv[1]) == 0)
{
for (short i = 0; i < argc - 1; i++)
{
argv[i] = argv[i + 1];
}
shell->parser.paramCount--;
return shellRunCommand(shell, item);
}
item++;
}
shellWriteString(shell, "sub command not found\r\n");
return -1;
}
/**
* @brief shell
*
* @param shell shell对象
* @param name
* @param group
*/
static void shellCmdGroupHelp(Shell *shell, char *name, ShellCommand *group)
{
ShellCommand *item = group;
shellWriteString(shell, "command group help of ");
shellWriteString(shell, name);
shellWriteString(shell, "\r\n");
while (item->data.cmd.name)
{
shellWriteString(shell, item->data.cmd.name);
shellWriteString(shell, ": ");
if (item->data.cmd.desc) {
shellWriteString(shell, item->data.cmd.desc);
}
2024-06-13 22:40:10 +08:00
shellWriteString(shell, "\r\n\r\n");
2020-10-18 16:00:55 +08:00
item++;
}
}