52 lines
1.5 KiB
C
52 lines
1.5 KiB
C
//
|
|
// Created by zemon on 15.11.22.
|
|
//
|
|
#include "CliRedirectTable.h"
|
|
|
|
|
|
bool CliRedirectionTable_RecAdd(tCliRedirectTable *baseTable, char *cmdStatic, uint8_t cmdLen, cliCall mtd, void *env) {
|
|
if (baseTable->count >= baseTable->itemsLimit) {
|
|
return false;
|
|
}
|
|
|
|
baseTable->items[baseTable->count].cmd.data = cmdStatic;
|
|
baseTable->items[baseTable->count].cmd.length = cmdLen;
|
|
baseTable->items[baseTable->count].method = mtd;
|
|
baseTable->items[baseTable->count].env = env;
|
|
|
|
++baseTable->count;
|
|
return true;
|
|
}
|
|
|
|
|
|
void CliRedirectionTable_Init(tCliRedirectTable *baseTable, tCliRedirectItem *mem, uint16_t itemsLimit) {
|
|
baseTable->count = 0;
|
|
baseTable->itemsLimit = itemsLimit;
|
|
baseTable->items = mem;
|
|
}
|
|
|
|
int32_t CliRedirectionTable_ProcessCmd(tCliRedirectTable *env, tCliCmd *cmd) {
|
|
for (uint16_t id = 0; id < env->count; ++id) {
|
|
tCliRedirectItem *item = env->items + id;
|
|
char *cmdName = CliCmd_RxStartsWith(cmd, item->cmd.data, item->cmd.length);
|
|
if (cmdName) {
|
|
CliCmd_RxSkip(cmd, item->cmd.length);
|
|
CliCmd_RxSkipSpace(cmd);
|
|
return item->method(item->env, cmd);
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
int32_t CliRedirectionTable_ListCmd(tCliRedirectTable *env, tCliCmd *cmd, char divider) {
|
|
for (uint16_t id = 0; id < env->count; ++id) {
|
|
tCliRedirectItem *item = env->items + id;
|
|
CliCmd_Print(cmd, item->cmd.data, item->cmd.length);
|
|
if (divider) {
|
|
CliCmd_Print(cmd, ÷r, 1);
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|