124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- CommandObjectMultiword.cpp ------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "lldb/lldb-python.h"
11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandObjectMultiword.h"
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1763094e0bb161580564954dee512955c1c79d3476Greg Clayton#include "lldb/Core/Debugger.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandInterpreter.h"
1984cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Options.h"
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandReturnObject.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb;
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private;
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//-------------------------------------------------------------------------
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CommandObjectMultiword
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//-------------------------------------------------------------------------
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObjectMultiword::CommandObjectMultiword
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner(
31238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    CommandInterpreter &interpreter,
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *name,
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *help,
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *syntax,
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t flags
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) :
37004ccb3fcca8c8004cb6cdb1f383b02e792a0452Daniel Malea    CommandObject (interpreter, name, help, syntax, flags),
38004ccb3fcca8c8004cb6cdb1f383b02e792a0452Daniel Malea    m_can_be_removed(false)
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObjectMultiword::~CommandObjectMultiword ()
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObjectSP
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObjectMultiword::GetSubcommandSP (const char *sub_cmd, StringList *matches)
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CommandObjectSP return_cmd_sp;
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CommandObject::CommandMap::iterator pos;
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (!m_subcommand_dict.empty())
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        pos = m_subcommand_dict.find (sub_cmd);
55dc6c2634f6860b58c9ad52e173b5cae1d751ab7bJohnny Chen        if (pos != m_subcommand_dict.end()) {
56dc6c2634f6860b58c9ad52e173b5cae1d751ab7bJohnny Chen            // An exact match; append the sub_cmd to the 'matches' string list.
57dc6c2634f6860b58c9ad52e173b5cae1d751ab7bJohnny Chen            if (matches)
58dc6c2634f6860b58c9ad52e173b5cae1d751ab7bJohnny Chen                matches->AppendString(sub_cmd);
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            return_cmd_sp = pos->second;
60dc6c2634f6860b58c9ad52e173b5cae1d751ab7bJohnny Chen        }
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        else
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            StringList local_matches;
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            if (matches == NULL)
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                matches = &local_matches;
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            int num_matches = CommandObject::AddNamesMatchingPartialString (m_subcommand_dict, sub_cmd, *matches);
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            if (num_matches == 1)
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                // Cleaner, but slightly less efficient would be to call back into this function, since I now
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                // know I have an exact match...
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                sub_cmd = matches->GetStringAtIndex(0);
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                pos = m_subcommand_dict.find(sub_cmd);
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                if (pos != m_subcommand_dict.end())
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    return_cmd_sp = pos->second;
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return return_cmd_sp;
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObject *
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObjectMultiword::GetSubcommandObject (const char *sub_cmd, StringList *matches)
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return GetSubcommandSP(sub_cmd, matches).get();
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
9163094e0bb161580564954dee512955c1c79d3476Greg ClaytonCommandObjectMultiword::LoadSubCommand
9263094e0bb161580564954dee512955c1c79d3476Greg Clayton(
9363094e0bb161580564954dee512955c1c79d3476Greg Clayton    const char *name,
9463094e0bb161580564954dee512955c1c79d3476Greg Clayton    const CommandObjectSP& cmd_obj
9563094e0bb161580564954dee512955c1c79d3476Greg Clayton)
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CommandMap::iterator pos;
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool success = true;
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    pos = m_subcommand_dict.find(name);
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (pos == m_subcommand_dict.end())
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_subcommand_dict[name] = cmd_obj;
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        success = false;
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return success;
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
112da26bd203cbb104291b39891febf7481794f205fJim InghamCommandObjectMultiword::Execute(const char *args_string, CommandReturnObject &result)
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
114da26bd203cbb104291b39891febf7481794f205fJim Ingham    Args args (args_string);
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const size_t argc = args.GetArgumentCount();
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (argc == 0)
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
118035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata        this->CommandObject::GenerateHelpText (result);
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        const char *sub_command = args.GetArgumentAtIndex (0);
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (sub_command)
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            if (::strcasecmp (sub_command, "help") == 0)
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
128035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata                this->CommandObject::GenerateHelpText (result);
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            else if (!m_subcommand_dict.empty())
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                StringList matches;
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                CommandObject *sub_cmd_obj = GetSubcommandObject(sub_command, &matches);
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                if (sub_cmd_obj != NULL)
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                {
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    // Now call CommandObject::Execute to process and options in 'rest_of_line'.  From there
13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    // the command-specific version of Execute will be called, with the processed arguments.
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    args.Shift();
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
141da26bd203cbb104291b39891febf7481794f205fJim Ingham                    sub_cmd_obj->Execute (args_string, result);
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                }
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                else
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                {
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    std::string error_msg;
14636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton                    const size_t num_subcmd_matches = matches.GetSize();
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    if (num_subcmd_matches > 0)
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        error_msg.assign ("ambiguous command ");
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    else
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        error_msg.assign ("invalid command ");
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    error_msg.append ("'");
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    error_msg.append (GetCommandName());
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    error_msg.append (" ");
15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    error_msg.append (sub_command);
15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    error_msg.append ("'");
15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    if (num_subcmd_matches > 0)
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    {
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        error_msg.append (" Possible completions:");
16136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton                        for (size_t i = 0; i < num_subcmd_matches; i++)
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        {
16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            error_msg.append ("\n\t");
16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            error_msg.append (matches.GetStringAtIndex (i));
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        }
16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    }
16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    error_msg.append ("\n");
16836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton                    result.AppendRawError (error_msg.c_str());
16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    result.SetStatus (eReturnStatusFailed);
17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                }
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            else
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                result.AppendErrorWithFormat ("'%s' does not have any subcommands.\n", GetCommandName());
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                result.SetStatus (eReturnStatusFailed);
17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return result.Succeeded();
18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
184035ef3d0a0136f2b9028b4695a681e58ba899651Enrico GranataCommandObjectMultiword::GenerateHelpText (Stream &output_stream)
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // First time through here, generate the help text for the object and
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // push it to the return result object as well
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    output_stream.PutCString ("The following subcommands are supported:\n\n");
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CommandMap::iterator pos;
192238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    uint32_t max_len = m_interpreter.FindLongestCommandWord (m_subcommand_dict);
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19465124eac53b7a214906e8931be314e429bbbeb30Greg Clayton    if (max_len)
19565124eac53b7a214906e8931be314e429bbbeb30Greg Clayton        max_len += 4; // Indent the output by 4 spaces.
19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    for (pos = m_subcommand_dict.begin(); pos != m_subcommand_dict.end(); ++pos)
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        std::string indented_command ("    ");
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        indented_command.append (pos->first);
201fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice        if (pos->second->WantsRawCommandString ())
202fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice        {
203fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice            std::string help_text (pos->second->GetHelp());
204fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice            help_text.append ("  This command takes 'raw' input (no need to quote stuff).");
205035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata            m_interpreter.OutputFormattedHelpText (output_stream,
206fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice                                                   indented_command.c_str(),
207fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice                                                   "--",
208fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice                                                   help_text.c_str(),
209fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice                                                   max_len);
210fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice        }
211fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice        else
212035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata            m_interpreter.OutputFormattedHelpText (output_stream,
213fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice                                                   indented_command.c_str(),
214fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice                                                   "--",
215fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice                                                   pos->second->GetHelp(),
216fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice                                                   max_len);
21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    output_stream.PutCString ("\nFor more help on any particular subcommand, type 'help <command> <subcommand>'.\n");
22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerint
22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObjectMultiword::HandleCompletion
22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner(
22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Args &input,
22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int &cursor_index,
22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int &cursor_char_position,
22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int match_start_point,
22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int max_return_elements,
230802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham    bool &word_complete,
23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    StringList &matches
23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner)
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
234802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham    // Any of the command matches will provide a complete word, otherwise the individual
235802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham    // completers will override this.
236802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham    word_complete = true;
237802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham
23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (cursor_index == 0)
23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
24063094e0bb161580564954dee512955c1c79d3476Greg Clayton        CommandObject::AddNamesMatchingPartialString (m_subcommand_dict,
24163094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                      input.GetArgumentAtIndex(0),
24263094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                      matches);
24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (matches.GetSize() == 1
24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            && matches.GetStringAtIndex(0) != NULL
24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            && strcmp (input.GetArgumentAtIndex(0), matches.GetStringAtIndex(0)) == 0)
24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            StringList temp_matches;
24963094e0bb161580564954dee512955c1c79d3476Greg Clayton            CommandObject *cmd_obj = GetSubcommandObject (input.GetArgumentAtIndex(0),
25063094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                          &temp_matches);
25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            if (cmd_obj != NULL)
25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                matches.DeleteStringAtIndex (0);
25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                input.Shift();
25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                cursor_char_position = 0;
25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                input.AppendArgument ("");
257238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton                return cmd_obj->HandleCompletion (input,
258238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton                                                  cursor_index,
25963094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                  cursor_char_position,
26063094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                  match_start_point,
261802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham                                                  max_return_elements,
262802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham                                                  word_complete,
26363094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                  matches);
26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            else
26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                return matches.GetSize();
26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        else
26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            return matches.GetSize();
27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
27363094e0bb161580564954dee512955c1c79d3476Greg Clayton        CommandObject *sub_command_object = GetSubcommandObject (input.GetArgumentAtIndex(0),
27463094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                                 &matches);
27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (sub_command_object == NULL)
27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            return matches.GetSize();
27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        else
28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            // Remove the one match that we got from calling GetSubcommandObject.
28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            matches.DeleteStringAtIndex(0);
28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            input.Shift();
28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            cursor_index--;
285238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton            return sub_command_object->HandleCompletion (input,
28663094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                         cursor_index,
28763094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                         cursor_char_position,
28863094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                         match_start_point,
289802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham                                                         max_return_elements,
290802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham                                                         word_complete,
29163094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                         matches);
29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
297767af88aa617288e584afcfed055f7755e408542Jim Inghamconst char *
298767af88aa617288e584afcfed055f7755e408542Jim InghamCommandObjectMultiword::GetRepeatCommand (Args &current_command_args, uint32_t index)
299767af88aa617288e584afcfed055f7755e408542Jim Ingham{
300767af88aa617288e584afcfed055f7755e408542Jim Ingham    index++;
301578ddbbfa0272aa0fdd9f57719c87c34c648755fGreg Clayton    if (current_command_args.GetArgumentCount() <= index)
302578ddbbfa0272aa0fdd9f57719c87c34c648755fGreg Clayton        return NULL;
303767af88aa617288e584afcfed055f7755e408542Jim Ingham    CommandObject *sub_command_object = GetSubcommandObject (current_command_args.GetArgumentAtIndex(index));
304767af88aa617288e584afcfed055f7755e408542Jim Ingham    if (sub_command_object == NULL)
305767af88aa617288e584afcfed055f7755e408542Jim Ingham        return NULL;
306767af88aa617288e584afcfed055f7755e408542Jim Ingham    return sub_command_object->GetRepeatCommand(current_command_args, index);
307767af88aa617288e584afcfed055f7755e408542Jim Ingham}
308767af88aa617288e584afcfed055f7755e408542Jim Ingham
30913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
31013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonvoid
31113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectMultiword::AproposAllSubCommands (const char *prefix,
31213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                               const char *search_word,
31313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                               StringList &commands_found,
31413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                               StringList &commands_help)
31513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
31613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject::CommandMap::const_iterator pos;
31713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
31813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    for (pos = m_subcommand_dict.begin(); pos != m_subcommand_dict.end(); ++pos)
31913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    {
32013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        const char * command_name = pos->first.c_str();
32113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        CommandObject *sub_cmd_obj = pos->second.get();
32213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        StreamString complete_command_name;
32313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
32413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        complete_command_name.Printf ("%s %s", prefix, command_name);
32513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
32613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        if (sub_cmd_obj->HelpTextContainsWord (search_word))
32713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        {
32813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton            commands_found.AppendString (complete_command_name.GetData());
32913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton            commands_help.AppendString (sub_cmd_obj->GetHelp());
33013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        }
33113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
33213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        if (sub_cmd_obj->IsMultiwordObject())
33313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton            sub_cmd_obj->AproposAllSubCommands (complete_command_name.GetData(),
33413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                search_word,
33513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                commands_found,
33613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                commands_help);
33713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    }
33813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
33913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
34013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
34113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
34213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::CommandObjectProxy (CommandInterpreter &interpreter,
34313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                        const char *name,
34413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                        const char *help,
34513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                        const char *syntax,
34613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                        uint32_t flags) :
34713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject (interpreter, name, help, syntax, flags)
34813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
34913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
35013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
35113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::~CommandObjectProxy ()
35213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
35313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
35413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
35513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonconst char *
35613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::GetHelpLong ()
35713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
35813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject *proxy_command = GetProxyCommandObject();
35913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    if (proxy_command)
36013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        return proxy_command->GetHelpLong();
36113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    return NULL;
36213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
36313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
36413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonbool
36513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::IsRemovable() const
36613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
36713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    const CommandObject *proxy_command = const_cast<CommandObjectProxy *>(this)->GetProxyCommandObject();
36813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    if (proxy_command)
36913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        return proxy_command->IsRemovable();
37013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    return false;
37113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
37213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
37313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonbool
37413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::IsMultiwordObject ()
37513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
37613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject *proxy_command = GetProxyCommandObject();
37713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    if (proxy_command)
37813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        return proxy_command->IsMultiwordObject();
37913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    return false;
38013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
38113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
38213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonlldb::CommandObjectSP
38313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::GetSubcommandSP (const char *sub_cmd, StringList *matches)
38413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
38513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject *proxy_command = GetProxyCommandObject();
38613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    if (proxy_command)
38713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        return proxy_command->GetSubcommandSP(sub_cmd, matches);
38813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    return lldb::CommandObjectSP();
38913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
39013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
39113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObject *
39213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::GetSubcommandObject (const char *sub_cmd, StringList *matches)
39313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
39413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject *proxy_command = GetProxyCommandObject();
39513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    if (proxy_command)
39613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        return proxy_command->GetSubcommandObject(sub_cmd, matches);
39713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    return NULL;
39813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
39913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
40013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonvoid
40113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::AproposAllSubCommands (const char *prefix,
40213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                           const char *search_word,
40313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                           StringList &commands_found,
40413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                           StringList &commands_help)
40513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
40613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject *proxy_command = GetProxyCommandObject();
40713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    if (proxy_command)
40813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        return proxy_command->AproposAllSubCommands (prefix,
40913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                     search_word,
41013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                     commands_found,
41113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                     commands_help);
41213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
41313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
41413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonbool
41513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::LoadSubCommand (const char *cmd_name,
41613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                    const lldb::CommandObjectSP& command_sp)
41713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
41813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject *proxy_command = GetProxyCommandObject();
41913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    if (proxy_command)
42013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        return proxy_command->LoadSubCommand (cmd_name, command_sp);
42113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    return false;
42213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
42313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
42413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonbool
42513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::WantsRawCommandString()
42613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
42713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject *proxy_command = GetProxyCommandObject();
42813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    if (proxy_command)
42913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        return proxy_command->WantsRawCommandString();
43013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    return false;
43113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
43213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
43313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonbool
43413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::WantsCompletion()
43513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
43613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject *proxy_command = GetProxyCommandObject();
43713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    if (proxy_command)
43813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        return proxy_command->WantsCompletion();
43913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    return false;
44013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
44113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
44213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
44313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonOptions *
44413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::GetOptions ()
44513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
44613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject *proxy_command = GetProxyCommandObject();
44713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    if (proxy_command)
44813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        return proxy_command->GetOptions ();
44913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    return NULL;
45013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
45113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
45213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
45313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonint
45413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::HandleCompletion (Args &input,
45513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                      int &cursor_index,
45613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                      int &cursor_char_position,
45713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                      int match_start_point,
45813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                      int max_return_elements,
45913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                      bool &word_complete,
46013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                      StringList &matches)
46113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
46213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject *proxy_command = GetProxyCommandObject();
46313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    if (proxy_command)
46413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        return proxy_command->HandleCompletion (input,
46513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                cursor_index,
46613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                cursor_char_position,
46713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                match_start_point,
46813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                max_return_elements,
46913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                word_complete,
47013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                matches);
47113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    matches.Clear();
47213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    return 0;
47313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
47413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonint
47513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::HandleArgumentCompletion (Args &input,
47613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                              int &cursor_index,
47713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                              int &cursor_char_position,
47813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                              OptionElementVector &opt_element_vector,
47913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                              int match_start_point,
48013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                              int max_return_elements,
48113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                              bool &word_complete,
48213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                              StringList &matches)
48313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
48413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject *proxy_command = GetProxyCommandObject();
48513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    if (proxy_command)
48613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        return proxy_command->HandleArgumentCompletion (input,
48713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                        cursor_index,
48813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                        cursor_char_position,
48913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                        opt_element_vector,
49013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                        match_start_point,
49113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                        max_return_elements,
49213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                        word_complete,
49313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                                        matches);
49413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    matches.Clear();
49513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    return 0;
49613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
49713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
49813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonconst char *
49913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::GetRepeatCommand (Args &current_command_args,
50013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                                      uint32_t index)
50113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
50213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject *proxy_command = GetProxyCommandObject();
50313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    if (proxy_command)
50413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        return proxy_command->GetRepeatCommand (current_command_args, index);
50513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    return NULL;
50613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
50713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
50813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Claytonbool
50913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg ClaytonCommandObjectProxy::Execute (const char *args_string,
51013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton                             CommandReturnObject &result)
51113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton{
51213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    CommandObject *proxy_command = GetProxyCommandObject();
51313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    if (proxy_command)
51413193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton        return proxy_command->Execute (args_string, result);
51513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    result.AppendError ("command is not implemented");
51613193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    result.SetStatus (eReturnStatusFailed);
51713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton    return false;
51813193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton}
51913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
52013193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton
521