add option to disable the echo

This commit is contained in:
Laila van Reenen 2024-08-10 14:07:55 +02:00
parent ae59563e7d
commit 8204cb0865
Signed by: LailaTheElf
GPG Key ID: 1F4E6EE3E6DDF769
2 changed files with 38 additions and 11 deletions

View File

@ -30,13 +30,14 @@ CLI_t CLI_init(CLI_charOutFn lineOut, CMDList_t* cmdList)
cli.CLI_charOut = lineOut;
cli.CMDList = cmdList;
cli.CLI_State = CLI_State_Default;
cli.echo = true;
cli.FIFO = FIFOBuffChar_create();
#ifdef HISTORY
cli.History = History_init();
#endif
if (cli.CLI_charOut != NULL)
if (cli.CLI_charOut != NULL && cli.echo)
{
CLI_stringOut(&cli, (char*)"> ");
}
@ -168,7 +169,10 @@ int tryExecute(CLI_t* cli, FIFOBuffChar_t* fifo)
if (*line == '\0')
{ // empty line
ret = 1;
CLI_stringOut(cli, (char*)"> ");
if (cli->echo)
{
CLI_stringOut(cli, (char*)"> ");
}
}
else
{
@ -182,7 +186,7 @@ int tryExecute(CLI_t* cli, FIFOBuffChar_t* fifo)
#endif
int ret = (*(cmd->fn))(line, cli);
if (ret != INT_MIN)
if (ret != INT_MIN && cli->echo)
{
CLI_stringOut(cli, (char*)"> ");
}
@ -191,8 +195,12 @@ int tryExecute(CLI_t* cli, FIFOBuffChar_t* fifo)
else if (ret == 0)
{
char err[100];
sprintf(&err[0], "command not found: %s\n> ", line);
sprintf(&err[0], "command not found: %s\n", line);
CLI_stringOut(cli, &err[0]);
if (cli->echo)
{
CLI_stringOut(cli, (char*)"> ");
}
ret = -1;
#ifdef HISTORY
@ -222,7 +230,10 @@ bool CLI_charIn(CLI_t* cli, char c)
if ((C >= ' ') && (C <= '~')) // see ascii table
{
FIFOBuffChar_put(cli->FIFO, C); // save char in buffer
CLI_charOut_save(cli, c);
if (cli->echo)
{
CLI_charOut_save(cli, c);
}
}
else
{
@ -231,7 +242,10 @@ bool CLI_charIn(CLI_t* cli, char c)
case '\n':
case '\r':
// echo to terminal
CLI_charOut_save(cli, c);
if (cli->echo)
{
CLI_charOut_save(cli, c);
}
// copy buffer and create new buffer
FIFOBuffChar_t* fifo = cli->FIFO;
cli->FIFO = FIFOBuffChar_create();
@ -245,7 +259,10 @@ bool CLI_charIn(CLI_t* cli, char c)
case 127: // delete (backspace)
if (FIFOBuffChar_pop(cli->FIFO))
{ // pop something of the buffer
CLI_stringOut(cli, (char*)"\x1b[D \x1b[D"); // "<left arrow><space><left arrow>"
if (cli->echo)
{
CLI_stringOut(cli, (char*)"\x1b[D \x1b[D"); // "<left arrow><space><left arrow>"
}
}
break;
@ -254,8 +271,11 @@ bool CLI_charIn(CLI_t* cli, char c)
break;
default:
sprintf(&str[0], "\ninvlid char: '%c' - (%i)\n", c, c);
CLI_stringOut(cli, &str[0]);
if (cli->echo)
{
sprintf(&str[0], "\ninvlid char: '%c' - (%i)\n", c, c);
CLI_stringOut(cli, &str[0]);
}
break;
}
}
@ -285,11 +305,17 @@ bool CLI_charIn(CLI_t* cli, char c)
historyNext(cli);
break;
case 'C': // arrow right
CLI_stringOut(cli, (char*)"(key: arrow right)");
if (cli->echo)
{
CLI_stringOut(cli, (char*)"(key: arrow right)");
}
cli->CLI_State = CLI_State_Default;
break;
case 'D': // arrow left
CLI_stringOut(cli, (char*)"(key: arrow left)");
if (cli->echo)
{
CLI_stringOut(cli, (char*)"(key: arrow left)");
}
cli->CLI_State = CLI_State_Default;
break;
#endif

View File

@ -26,6 +26,7 @@ typedef struct CLI {
History_t* History;
#endif
CLI_State_t CLI_State;
bool echo;
} CLI_t;
// initilize and register the lineout print function