#include <stdio.h>
#include <bee2/core/err.h>
#include <bee2/core/str.h>
#include <bee2/core/util.h>
#include "bee2/cmd.h"
typedef struct
{
const char* name;
const char* descr;
cmd_main_i fn;
} cmd_entry_t;
static size_t _count = 0;
static cmd_entry_t _cmds[32];
err_t cmdReg(const char* name, const char* descr, cmd_main_i fn)
{
size_t pos;
if (!strIsValid(name) || 0 == strLen(name) || strLen(name) > 8 ||
!strIsValid(descr) || strLen(descr) > 60)
return ERR_BAD_FORMAT;
for (pos = 0; pos < _count; ++pos)
if (strEq(_cmds[pos].name, name))
return ERR_CMD_EXISTS;
if (pos == COUNT_OF(_cmds))
return ERR_OUTOFMEMORY;
_cmds[pos].name = name;
_cmds[pos].descr = descr;
_cmds[pos].fn = fn;
++_count;
return ERR_OK;
}
static int cmdUsage()
{
size_t pos;
printf(
"Usage:\n"
" bee2cmd {");
for (pos = 0; pos + 1 < _count; ++pos)
printf("%s|", _cmds[pos].name);
printf("%s} ...\n", _cmds[pos].name);
for (pos = 0; pos < _count; ++pos)
printf(" %s%*s%s\n",
_cmds[pos].name,
(int)(12 - strLen(_cmds[pos].name)), "",
_cmds[pos].descr);
return -1;
}
extern err_t verInit();
extern err_t bsumInit();
extern err_t pwdInit();
extern err_t kgInit();
extern err_t cvcInit();
extern err_t cvrInit();
extern err_t sigInit();
extern err_t csrInit();
extern err_t stampInit();
extern err_t esInit();
extern err_t stInit();
extern err_t affixInit();
static err_t cmdInit()
{
err_t code;
code = verInit();
ERR_CALL_CHECK(code);
code = bsumInit();
ERR_CALL_CHECK(code);
code = pwdInit();
ERR_CALL_CHECK(code);
code = kgInit();
ERR_CALL_CHECK(code);
code = cvcInit();
ERR_CALL_CHECK(code);
code = cvrInit();
ERR_CALL_CHECK(code);
code = sigInit();
ERR_CALL_CHECK(code);
code = csrInit();
ERR_CALL_CHECK(code);
code = stampInit();
ERR_CALL_CHECK(code);
code = esInit();
ERR_CALL_CHECK(code);
code = stInit();
ERR_CALL_CHECK(code);
code = affixInit();
ERR_CALL_CHECK(code);
return code;
}
int main(int argc, char* argv[])
{
err_t code;
size_t pos;
if ((argc < 2 || !strEq(argv[1], "stamp")) &&
(code = cmdStDo(CMD_ST_BASH | CMD_ST_STAMP)) != ERR_OK)
{
printf("bee2cmd: %s\n", errMsg(code));
return -1;
}
code = cmdInit();
if (code != ERR_OK)
{
printf("bee2cmd: %s\n", errMsg(code));
return -1;
}
if (argc < 2)
return cmdUsage();
for (pos = 0; pos < _count; ++pos)
if (strEq(argv[1], _cmds[pos].name))
return _cmds[pos].fn(argc - 1, argv + 1);
printf("bee2cmd: %s\n", errMsg(ERR_CMD_NOT_FOUND));
return -1;
}