Browse Source

Added help command and function'ized the arugmentIsolator.

simple
Jacob Alexander 10 years ago
parent
commit
267b99dedb
2 changed files with 44 additions and 15 deletions
  1. 43
    15
      Debug/cli/cli.c
  2. 1
    0
      Debug/cli/cli.h

+ 43
- 15
Debug/cli/cli.c View File

@@ -34,7 +34,7 @@

// Basic command dictionary
CLIDictItem basicCLIDict[] = {
{ "help", "This command :P", cliFunc_help },
{ "help", "You're looking at it :P", cliFunc_help },
{ "version", "Version information about this firmware.", cliFunc_version },
{ 0, 0, 0 } // Null entry for dictionary end
};
@@ -172,18 +172,15 @@ void process_cli()
}
}

void commandLookup_cli()
// Takes a string, returns two pointers
// One to the first non-space character
// The second to the next argument (first NULL if there isn't an argument). delimited by a space
// Places a NULL at the first space after the first argument
inline void argumentIsolation_cli( char* string, char** first, char** second )
{
// Ignore command if buffer is 0 length
if ( CLILineBufferCurrent == 0 )
return;

// Set the last+1 character of the buffer to NULL for string processing
CLILineBuffer[CLILineBufferCurrent] = '\0';

// Mark out the first argument
// This is done by finding the first space after a list of non-spaces and setting it NULL
char* cmdPtr = CLILineBuffer - 1;
char* cmdPtr = string - 1;
while ( *++cmdPtr == ' ' ); // Skips leading spaces, and points to first character of cmd

// Locates first space delimiter
@@ -194,6 +191,26 @@ void commandLookup_cli()
// Point to the first character of args or a NULL (no args) and set the space delimiter as a NULL
(++argPtr)[-1] = '\0';

// Set return variables
*first = cmdPtr;
*second = argPtr;
}

void commandLookup_cli()
{
// Ignore command if buffer is 0 length
if ( CLILineBufferCurrent == 0 )
return;

// Set the last+1 character of the buffer to NULL for string processing
CLILineBuffer[CLILineBufferCurrent] = '\0';

// Retrieve pointers to command and beginning of arguments
// Places a NULL at the first space after the command
char* cmdPtr;
char* argPtr;
argumentIsolation_cli( CLILineBuffer, &cmdPtr, &argPtr );

// Scan array of dictionaries for a valid command match
for ( uint8_t dict = 0; dict < CLIDictionariesUsed; dict++ )
{
@@ -214,10 +231,10 @@ void commandLookup_cli()

// No match for the command...
print( NL );
erro_dPrint("\"", CLILineBuffer, "\" is not a valid command...try help");
erro_dPrint("\"", CLILineBuffer, "\" is not a valid command...type \033[35mhelp\033[0m");
}

void registerDictionary_cli( CLIDictItem *cmdDict )
inline void registerDictionary_cli( CLIDictItem *cmdDict )
{
// Make sure this max limit of dictionaries hasn't been reached
if ( CLIDictionariesUsed >= CLIMaxDictionaries )
@@ -236,9 +253,20 @@ void registerDictionary_cli( CLIDictItem *cmdDict )

void cliFunc_help( char* args )
{
print( NL );
print("Help!");
dPrint( args );
// Scan array of dictionaries and print every description
// (no alphabetical here, too much processing/memory to sort...)
for ( uint8_t dict = 0; dict < CLIDictionariesUsed; dict++ )
{
print( NL "\033[1;32mCOMMAND SET\033[0m " );
printInt8( dict + 1 );
print( NL );

// Parse each cmd/description until a null command entry is found
for ( uint8_t cmd = 0; CLIDict[dict][cmd].name != 0; cmd++ )
{
dPrintStrs( " \033[35m", CLIDict[dict][cmd].name, NL, "\033[0m ", CLIDict[dict][cmd].description, NL );
}
}
}

void cliFunc_version( char* args )

+ 1
- 0
Debug/cli/cli.h View File

@@ -69,6 +69,7 @@ uint8_t CLIDictionariesUsed;
void init_cli();
void process_cli();
void registerDictionary_cli( CLIDictItem *cmdDict );
void argumentIsolation_cli( char* string, char** first, char** second );

void commandLookup_cli();