text: /**
   * SerialCommand - A Wiring/Arduino library to tokenize and parse commands
   * received over a serial port.
   *
   * Copyright (C) 2012 Stefan Rado
   * Copyright (C) 2011 Steven Cogswell <steven.cogswell@gmail.com>
   *                    http://husks.wordpress.com
   *
   * Version 20120522
   *
   * This library is free software: you can redistribute it and/or modify
   * it under the terms of the GNU Lesser General Public License as published by
   * the Free Software Foundation, either version 3 of the License, or
   * (at your option) any later version.
   *
   * This library is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU General Public License
   * along with this library.  If not, see <http://www.gnu.org/licenses/>.
   */
  #ifndef SerialCommand_h
  #define SerialCommand_h
  
  #if defined(WIRING) && WIRING >= 100
    #include <Wiring.h>
  #elif defined(ARDUINO) && ARDUINO >= 100
    #include <Arduino.h>
  #else
    #include <WProgram.h>
  #endif
  #include <string.h>
  
  // Size of the input buffer in bytes (maximum length of one command plus arguments)
  #define SERIALCOMMAND_BUFFER 100		// ORIGINAL: 32   MODIFIED BY DSH
  // Maximum length of a command excluding the terminating null
  #define SERIALCOMMAND_MAXCOMMANDLENGTH 20	// ORIGINAL: 8    MODIFIED BY DSH
  
  // Uncomment the next line to run the library in debug mode (verbose messages)
  //#define SERIALCOMMAND_DEBUG
  
  
  class SerialCommand {
    public:
      SerialCommand();      // Constructor
      void addCommand(const char *command, void(*function)());  // Add a command to the processing dictionary.
      void setDefaultHandler(void (*function)(const char *));   // A handler to call when no valid command received.
  
      void readSerial();    // Main entry point.
      void clearBuffer();   // Clears the input buffer.
      char *next();         // Returns pointer to next token found in command buffer (for getting arguments to commands).
  
    private:
      // Command/handler dictionary
      struct SerialCommandCallback {
        char command[SERIALCOMMAND_MAXCOMMANDLENGTH + 1];
        void (*function)();
      };                                    // Data structure to hold Command/Handler function key-value pairs
      SerialCommandCallback *commandList;   // Actual definition for command/handler array
      byte commandCount;
  
      // Pointer to the default handler function
      void (*defaultHandler)(const char *);
  
      char delim[2]; // null-terminated list of character to be used as delimeters for tokenizing (default " ")
      char term;     // Character that signals end of command (default '\n')
  
      char buffer[SERIALCOMMAND_BUFFER + 1]; // Buffer of stored characters while waiting for terminator character
      byte bufPos;                        // Current position in the buffer
      char *last;                         // State variable used by strtok_r during processing
  };
  
  #endif //SerialCommand_h
  