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 ¤t_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 ¤t_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