update CLI
This commit is contained in:
parent
b08f1afe7f
commit
e6d9bb1da6
52
CLI/CLI.c
52
CLI/CLI.c
@ -5,7 +5,7 @@
|
||||
|
||||
#include "../FIFOBuff/FIFOBuffChar.h"
|
||||
|
||||
void (*CLI_lineOut)(char* line);
|
||||
CLI_lineOutFn CLI_lineOut;
|
||||
CMDList_t* CMDList;
|
||||
FIFOBuffChar_t* FIFO;
|
||||
|
||||
@ -16,6 +16,14 @@ bool CLI_init(CLI_lineOutFn lineOut, CMDList_t* cmdList)
|
||||
CMDList = cmdList;
|
||||
|
||||
FIFO = FIFOBuffChar_create();
|
||||
|
||||
if (CLI_lineOut != NULL)
|
||||
{
|
||||
(*CLI_lineOut)(">");
|
||||
(*CLI_lineOut)(" ");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CLI_deinit()
|
||||
@ -24,6 +32,7 @@ bool CLI_deinit()
|
||||
CMDList = NULL;
|
||||
|
||||
FIFOBuffChar_delete(FIFO);
|
||||
return true;
|
||||
}
|
||||
|
||||
char* fifoToString(FIFOBuffChar_t* fifo)
|
||||
@ -50,11 +59,27 @@ int tryExecute(FIFOBuffChar_t* fifo)
|
||||
if (cmd != NULL)
|
||||
{
|
||||
(*(cmd->fn))(line);
|
||||
|
||||
if (CLI_lineOut != NULL)
|
||||
{
|
||||
(*CLI_lineOut)("\n");
|
||||
(*CLI_lineOut)(">");
|
||||
(*CLI_lineOut)(" ");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("command not found: %s\n", line);
|
||||
if (CLI_lineOut != NULL)
|
||||
{
|
||||
char err[100];
|
||||
sprintf(&err, "command not found: %s\n> ", line);
|
||||
for (int i=0; err[i] != 0; i++)
|
||||
{
|
||||
char c[2] = {err[i], 0};
|
||||
(*CLI_lineOut)(&c[0]);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -84,6 +109,7 @@ bool CLI_charIn(char c)
|
||||
}
|
||||
else
|
||||
{
|
||||
char str[100];
|
||||
switch (c)
|
||||
{
|
||||
case '\n':
|
||||
@ -97,9 +123,29 @@ bool CLI_charIn(char c)
|
||||
ok = tryExecute(fifo);
|
||||
FIFOBuffChar_delete(fifo);
|
||||
break;
|
||||
|
||||
case 127: // backspace
|
||||
(*CLI_lineOut)("\x1b");
|
||||
(*CLI_lineOut)("[");
|
||||
(*CLI_lineOut)("D");
|
||||
break;
|
||||
|
||||
case 27: // escape (start for arrow keys)
|
||||
sprintf(&str, "\ninvlid char: ESC - (%i)\n", c);
|
||||
for (int i=0; str[i] != 0; i++)
|
||||
{
|
||||
char ch[2] = {str[i], 0};
|
||||
(*CLI_lineOut)(&ch[0]);
|
||||
}
|
||||
break;
|
||||
|
||||
//TODO: add hire backspace and arrow detection
|
||||
default:
|
||||
sprintf(&str, "\ninvlid char: '%c' - (%i)\n", c, c);
|
||||
for (int i=0; str[i] != 0; i++)
|
||||
{
|
||||
char ch[2] = {str[i], 0};
|
||||
(*CLI_lineOut)(&ch[0]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user