180814287SRaphael Isemann //===-- CommandObjectGUI.cpp ----------------------------------------------===//
244d93782SGreg Clayton //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
644d93782SGreg Clayton //
744d93782SGreg Clayton //===----------------------------------------------------------------------===//
844d93782SGreg Clayton 
944d93782SGreg Clayton #include "CommandObjectGUI.h"
1044d93782SGreg Clayton 
117caa17caSRaphael Isemann #include "lldb/Core/IOHandlerCursesGUI.h"
1259998b7bSJonas Devlieghere #include "lldb/Host/Config.h"
1344d93782SGreg Clayton #include "lldb/Interpreter/CommandInterpreter.h"
1444d93782SGreg Clayton #include "lldb/Interpreter/CommandReturnObject.h"
1544d93782SGreg Clayton 
1644d93782SGreg Clayton using namespace lldb;
1744d93782SGreg Clayton using namespace lldb_private;
1844d93782SGreg Clayton 
1944d93782SGreg Clayton // CommandObjectGUI
2044d93782SGreg Clayton 
CommandObjectGUI(CommandInterpreter & interpreter)21b9c1b51eSKate Stone CommandObjectGUI::CommandObjectGUI(CommandInterpreter &interpreter)
22b9c1b51eSKate Stone     : CommandObjectParsed(interpreter, "gui",
23b9c1b51eSKate Stone                           "Switch into the curses based GUI mode.", "gui") {}
2444d93782SGreg Clayton 
25*fd2433e1SJonas Devlieghere CommandObjectGUI::~CommandObjectGUI() = default;
2644d93782SGreg Clayton 
DoExecute(Args & args,CommandReturnObject & result)27b9c1b51eSKate Stone bool CommandObjectGUI::DoExecute(Args &args, CommandReturnObject &result) {
28a4304f96SJonas Devlieghere #if LLDB_ENABLE_CURSES
2957179860SJonas Devlieghere   Debugger &debugger = GetDebugger();
30456f2712SGreg Clayton 
317ca15ba7SLawrence D'Anna   File &input = debugger.GetInputFile();
32609010d0SLawrence D'Anna   File &output = debugger.GetOutputFile();
33609010d0SLawrence D'Anna   if (input.GetStream() && output.GetStream() && input.GetIsRealTerminal() &&
34609010d0SLawrence D'Anna       input.GetIsInteractive()) {
3544d93782SGreg Clayton     IOHandlerSP io_handler_sp(new IOHandlerCursesGUI(debugger));
3644d93782SGreg Clayton     if (io_handler_sp)
377ce2de2cSJonas Devlieghere       debugger.RunIOHandlerAsync(io_handler_sp);
3844d93782SGreg Clayton     result.SetStatus(eReturnStatusSuccessFinishResult);
39b9c1b51eSKate Stone   } else {
40456f2712SGreg Clayton     result.AppendError("the gui command requires an interactive terminal.");
41456f2712SGreg Clayton   }
4244d93782SGreg Clayton   return true;
43914b8d98SDeepak Panickal #else
4420db891cSGabor Greif   result.AppendError("lldb was not built with gui support");
45914b8d98SDeepak Panickal   return false;
46914b8d98SDeepak Panickal #endif
4744d93782SGreg Clayton }
48