Archived
1
0

Added help command and function'ized the arugmentIsolator.

This commit is contained in:
Jacob Alexander 2014-01-22 01:58:34 -08:00
parent 30c45e948f
commit 267b99dedb
2 changed files with 44 additions and 15 deletions

View File

@ -34,7 +34,7 @@
// Basic command dictionary // Basic command dictionary
CLIDictItem basicCLIDict[] = { 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 }, { "version", "Version information about this firmware.", cliFunc_version },
{ 0, 0, 0 } // Null entry for dictionary end { 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 // Mark out the first argument
// This is done by finding the first space after a list of non-spaces and setting it NULL // 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 while ( *++cmdPtr == ' ' ); // Skips leading spaces, and points to first character of cmd
// Locates first space delimiter // 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 // Point to the first character of args or a NULL (no args) and set the space delimiter as a NULL
(++argPtr)[-1] = '\0'; (++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 // Scan array of dictionaries for a valid command match
for ( uint8_t dict = 0; dict < CLIDictionariesUsed; dict++ ) for ( uint8_t dict = 0; dict < CLIDictionariesUsed; dict++ )
{ {
@ -214,10 +231,10 @@ void commandLookup_cli()
// No match for the command... // No match for the command...
print( NL ); 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 // Make sure this max limit of dictionaries hasn't been reached
if ( CLIDictionariesUsed >= CLIMaxDictionaries ) if ( CLIDictionariesUsed >= CLIMaxDictionaries )
@ -236,9 +253,20 @@ void registerDictionary_cli( CLIDictItem *cmdDict )
void cliFunc_help( char* args ) void cliFunc_help( char* 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 ); print( NL );
print("Help!");
dPrint( args ); // 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 ) void cliFunc_version( char* args )

View File

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