/* Top level stuff for GDB, the GNU debugger.
Copyright (C) 1986-2024 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see . */
#ifndef TOP_H
#define TOP_H
#include "gdbsupport/event-loop.h"
#include "gdbsupport/next-iterator.h"
#include "value.h"
/* From top.c. */
extern bool confirm;
extern int inhibit_gdbinit;
extern auto_boolean interactive_mode;
/* Print the GDB version banner to STREAM. If INTERACTIVE is false,
then information referring to commands (e.g., "show configuration")
is omitted; this mode is used for the --version command line
option. If INTERACTIVE is true, then interactive commands are
mentioned. */
extern void print_gdb_version (struct ui_file *stream, bool interactive);
extern void print_gdb_configuration (struct ui_file *);
extern void read_command_file (FILE *);
extern void init_history (void);
extern void command_loop (void);
extern int quit_confirm (void);
[[noreturn]] extern void quit_force (int *, int);
extern void quit_command (const char *, int);
extern void quit_cover (void);
extern void execute_command (const char *, int);
/* Run FN. Capture its output into the returned string, do not display it
to the screen. The global BATCH_FLAG will temporarily be set to true.
When TERM_OUT is true the output is collected with terminal behaviour
(e.g. with styling). When TERM_OUT is false raw output will be collected
(e.g. no styling). */
extern void execute_fn_to_string (std::string &res,
std::function fn, bool term_out);
/* As execute_fn_to_ui_file, but run execute_command for P and FROM_TTY. */
extern void execute_command_to_ui_file (struct ui_file *file,
const char *p, int from_tty);
/* As execute_fn_to_string, but run execute_command for P and FROM_TTY. */
extern void execute_command_to_string (std::string &res, const char *p,
int from_tty, bool term_out);
/* Same as the above, but ignore resulting string. */
extern void execute_command_to_string (const char *p,
int from_tty, bool term_out);
/* If the interpreter is in sync mode (we're running a user command's
list, running command hooks or similars), and we just ran a
synchronous command that started the target, wait for that command
to end. WAS_SYNC indicates whether sync_execution was set before
the command was run. */
extern void maybe_wait_sync_command_done (int was_sync);
/* Wait for a synchronous execution command to end. */
extern void wait_sync_command_done (void);
extern void check_frame_language_change (void);
/* Prepare for execution of a command.
Call this before every command, CLI or MI.
Returns a cleanup to be run after the command is completed. */
extern scoped_value_mark prepare_execute_command (void);
/* This function returns a pointer to the string that is used
by gdb for its command prompt. */
extern const std::string &get_prompt ();
/* This function returns a pointer to the string that is used
by gdb for its command prompt. */
extern void set_prompt (const char *s);
/* Return 1 if UI's current input handler is a secondary prompt, 0
otherwise. */
extern int gdb_in_secondary_prompt_p (struct ui *ui);
/* Perform _initialize initialization. */
extern void gdb_init ();
/* For use by event-top.c. */
/* Variables from top.c. */
extern int source_line_number;
extern std::string source_file_name;
extern bool history_expansion_p;
extern bool server_command;
extern char *lim_at_start;
extern void gdb_add_history (const char *);
extern void show_commands (const char *args, int from_tty);
extern void set_verbose (const char *, int, struct cmd_list_element *);
extern const char *handle_line_of_input (std::string &cmd_line_buffer,
const char *rl, int repeat,
const char *annotation_suffix);
/* Call at startup to see if the user has requested that gdb start up
quietly. */
extern bool check_quiet_mode ();
/* Unbuffer STREAM. This is a wrapper around setbuf(STREAM, nullptr)
which applies some special rules for MS-Windows hosts. */
extern void unbuffer_stream (FILE *stream);
#endif