Simple embedded shell with runtime pluggable commands.

Dependents:   DataBus2018

Implements a simple unix-like shell for embedded systems with a pluggable command architecture.

SimpleShell.cpp

Committer:
shimniok
Date:
2018-12-01
Revision:
0:49820d5a38c9
Child:
1:998a7ed04f10

File content as of revision 0:49820d5a38c9:

#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);


}