Simple embedded shell with runtime pluggable commands.
Implements a simple unix-like shell for embedded systems with a pluggable command architecture.
Diff: SimpleShell.cpp
- Revision:
- 0:49820d5a38c9
- Child:
- 1:998a7ed04f10
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SimpleShell.cpp Sat Dec 01 23:18:03 2018 +0000 @@ -0,0 +1,60 @@ +#include "SimpleShell.h" + +SimpleShell::SimpleShell() +{ +} + +void SimpleShell::run() +{ + bool done=false; + strcpy(_cwd, "/log"); + + printf("Type help for assistance.\n"); + while (!done) { + printPrompt(); + readCommand(); + //this.doCommand(cmdline); + } + puts("exiting shell\n"); + + return; +} + + +void SimpleShell::printPrompt() +{ + fputc('(', stdout); + fputs(_cwd, stdout); + fputs(")# ", stdout); +} + + +void SimpleShell::readCommand() +{ + int i=0; + char c; + bool done = false; + + memset(cmd, 0, MAXBUF); + do { + cmd[i] = 0; + c = fgetc(stdin); + if (c == '\r') { // if return is hit, we're done, don't add \r to cmd + done = true; + } else if (i < MAXBUF-1) { + if (c == 0x7f || c == '\b') { // backspace or delete + if (i > 0) { // if we're at the beginning, do nothing + i--; + fputs("\b \b", stdout); + + } + } else { + fputc(c, stdout); + cmd[i++] = c; + } + } + } while (!done); + fputc('\n', stdout); + + +} \ No newline at end of file