CommandObjectGUI.cpp revision 360784
1//===-- CommandObjectGUI.cpp ------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "CommandObjectGUI.h"
10
11#include "lldb/Core/IOHandlerCursesGUI.h"
12#include "lldb/Host/Config.h"
13#include "lldb/Interpreter/CommandInterpreter.h"
14#include "lldb/Interpreter/CommandReturnObject.h"
15
16using namespace lldb;
17using namespace lldb_private;
18
19// CommandObjectGUI
20
21CommandObjectGUI::CommandObjectGUI(CommandInterpreter &interpreter)
22    : CommandObjectParsed(interpreter, "gui",
23                          "Switch into the curses based GUI mode.", "gui") {}
24
25CommandObjectGUI::~CommandObjectGUI() {}
26
27bool CommandObjectGUI::DoExecute(Args &args, CommandReturnObject &result) {
28#if LLDB_ENABLE_CURSES
29  if (args.GetArgumentCount() == 0) {
30    Debugger &debugger = GetDebugger();
31
32    File &input = debugger.GetInputFile();
33    File &output = debugger.GetOutputFile();
34    if (input.GetStream() && output.GetStream() && input.GetIsRealTerminal() &&
35        input.GetIsInteractive()) {
36      IOHandlerSP io_handler_sp(new IOHandlerCursesGUI(debugger));
37      if (io_handler_sp)
38        debugger.PushIOHandler(io_handler_sp);
39      result.SetStatus(eReturnStatusSuccessFinishResult);
40    } else {
41      result.AppendError("the gui command requires an interactive terminal.");
42      result.SetStatus(eReturnStatusFailed);
43    }
44  } else {
45    result.AppendError("the gui command takes no arguments.");
46    result.SetStatus(eReturnStatusFailed);
47  }
48  return true;
49#else
50  result.AppendError("lldb was not build with gui support");
51  return false;
52#endif
53}
54