新建项目
This commit is contained in:
1 parent
5e2e890cfc
commit
633d9b872b
1351 files changed
+730564
No files matched your search
@@ -0,0 +1,82 @@
|
||||
/**
|
||||
* @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 参数
|
||||
*
|
||||
* @return int 执行命令返回值
|
||||
*/
|
||||
int shellCmdGroupRun(ShellCommand *group, int argc, char *argv[])
|
||||
{
|
||||
ShellCommand *item = group;
|
||||
Shell *shell = shellGetCurrent();
|
||||
|
||||
SHELL_ASSERT(shell, return -1);
|
||||
|
||||
if (argc == 1 || strcmp("-h", argv[1]) == 0)
|
||||
{
|
||||
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);
|
||||
}
|
||||
shellWriteString(shell, "\r\n");
|
||||
item++;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user