#include <TCLProcessor.h>
...
class CTCLProcessor : public CTCLInterpreterObject
{
public:
  CTCLProcessor(const std::string sCommand, CTCLInterpreter* pInterp);
  CTCLProcessor(const char*       pCommand, CTCLInterpreter* pInterp);
  virtual ~CTCLProcessor();
  std::string getCommandName() const;
  virtual int operator()(CTCLInterpreter& rInterpreter,
                         CTCLResult&      rResult,
                         int argc, char** argv) = 0;
  virtual void OnDelete();
  void Register();
  void Unregister();
  static  std::string ConcatenateParameters (int nArguments,
                                              char* pArguments[])  ;
  int ParseInt (const char* pString, int* pInteger)  ;
  int ParseInt (const std::string& rString, int* pInteger)
  int ParseDouble (const char* pString, double* pDouble)  ;
  int ParseDouble (const std::string& rString, double* pDouble)
  int ParseBoolean (const char* pString, Bool_t* pBoolean)  ;
  int ParseBoolean (const std::string& rString, Bool_t* pBoolean)
  static int MatchKeyword(std::vector<std::string>& MatchTable,
                          const std::string& rValue,
                          int NoMatch = -1);
};
    
            Do not use this for new commands
        
            The CTCLProcessor provides a compatibility
            interface to the old Tcl style argc,
            argv style of command extension.
            New commands should be written using the
            CTCLObjectProcessor class instead.
        
            To extend the interpreter using this mechanism, you must
            derive a class from CTCLProcessor and
            minimally override and implement its
            operator() pure virtual function.  You may optionally
            overrid its OnDelete member as well.
            Having written the class, you must create an object of that class and
            register it on an interpreter.  Once the class is registered,
            invocations of the command under which it was registered will
            invoke your operator().
        
            If the interpreter is destroyed or the object destroyed, or unregistered,
            the OnDelete member will be called.
            CTCLProcessor defines and implements this function
            with an empty body, so it is only necessary for you to override and implement
            this if you have some cleanup actions that must be done when the command is
            deleted.
        
            This class is now implemented in terms of a CTCLObjectProcessor
            derived class called a CTCLCompatibilityProcessor. It is
            less efficient to use this class than to use a class derived directly from a
            CTCLObjectProcessor.  This class is therefore not
            recommended for use with new extensions, but is only provided for
            compatibility with existing extensions written before
            CTCLObjectProcessor was developed.
        
CTCLProcessor(const std::string sCommand, CTCLInterpreter*pInterp);CTCLProcessor(const char*pCommand, CTCLInterpreter*pInterp);
            Constructs a CTCLProcessor.  sCommand
            or pCommand are the initial name of the command.
            Note that the Tcl interpreter supports command renaming at the script level,
            so there is no gaurentee that this will always be the name of the command.
            pInterp is the interpreter on which the command
            will be registered when the Register function is called.
        
std::string getCommandName() const;
        
        
            Returns the initial name of the command.  Unlike
            CTCLObjectCommand::getName()
            this function does not track changes in the command name.
        
virtual intoperator()(CTCLInterpreter&rInterpreter, CTCLResult&rResult, intargc, char**argv) = 0; virtual voidOnDelete();
            operator() is a pure virtual function and therefore must
            be overidden and implemented in concrete command implementations.
            rInterpreter is a reference to the interpreter that is
            executing this command. rResult is a reference to
            a CTCLResult object that represents the result of the
            interpreter.  Any text stored into this object will be made available to the
            interpreter as the result of the command. argc
            and argv are the number of words on the command line and
            a pointer to an array of pointers to the command words respectively.
        
            operator() should be written to return
            TCL_OK
            if it is successful and
            TCL_ERROR
            if it encounters an error.   Other return values are possible and meaningful
            for commands that implement flow of control structures, but documenting these
            is beyond the scope of this manpage.   See the return(3tcl) manpage for
            more information about these.
        
            OnDelete is called whenever the interpreter
            or the object is being
            destroyed, or the object's Unregister function has been
            called.  CTCLProcessor provides a default implementation
            for OnDelete which does nothing.  It is only necessary
            to override and implement this function if you require specific action when
            the command is being unregistered.
        
voidRegister(); voidUnregister();
These functions register and unregister the command with the intepreter respectively.
static std::stringConcatenateParameters(intnArguments, char*pArguments[]) ;
            Concatenates all of the nArguments
            words in the pArguments array into a std::string
            and returns it.  The words are space separated.
        
intParseInt(const char*pString, int*pInteger) ; intParseInt(const std::string&rString, int*pInteger)
            Parses the character string pString or rString
            as a 32 bit signed integer into pInteger.  Returns
            TCL_OK
            if successful, or
            TCL_ERROR
            if the string coult no be parsed.  In that case, the result string
            of the interpreter will report why the string could not be parsed.
        
intParseDouble(const char*pString, double*pDouble) ; intParseDouble(const std::string&rString, double*pDouble)
            Parses the input string, either pString or
            rString
            as a double precision floating point value, storing the result in the
            double pointed to by pDouble.
            On success,
            TCL_OK
            is returned.  On failure,
            TCL_ERROR and the interpreter result is
            a textual reason for the failure.
        
intParseBoolean(const char*pString, Bool_t*pBoolean) ; intParseBoolean(const std::string&rString, Bool_t*pBoolean)
            Parses either pString
            or rString as a boolean value.  The result
            is stored in boolean pointed to by pBoolean.
            TCL_OK
            is returned on success,
            TCL_ERROR
            on error.  If TCL_ERROR was returned, the interpreter
            result is the textual reason for the failure.
        
static intMatchKeyword(std::vector<std::string>&MatchTable, const std::string&rValue, intNoMatch= -1);
            Searches for the string rValue in the vector of strings
            MatchTable, and returns the index in the vector at which
            the match occured.  If no match could be found, the value
            NoMatch is returned.
        
Within SpecTcl, this is often used to match command switches.