1/* Definitions used by event-top.c, for GDB, the GNU debugger. 2 3 Copyright (C) 1999, 2001, 2003, 2007 Free Software Foundation, Inc. 4 5 Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions. 6 7 This file is part of GDB. 8 9 This program is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 3 of the License, or 12 (at your option) any later version. 13 14 This program is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 21 22#ifndef EVENT_TOP_H 23#define EVENT_TOP_H 24 25struct cmd_list_element; 26 27/* Stack for prompts. Each prompt is composed as a prefix, a prompt 28 and a suffix. The prompt to be displayed at any given time is the 29 one on top of the stack. A stack is necessary because of cases in 30 which the execution of a gdb command requires further input from 31 the user, like for instance 'commands' for breakpoints and 32 'actions' for tracepoints. In these cases, the prompt is '>' and 33 gdb should process input using the asynchronous readline interface 34 and the event loop. In order to achieve this, we need to save 35 somewhere the state of GDB, i.e. that it is processing user input 36 as part of a command and not as part of the top level command loop. 37 The prompt stack represents part of the saved state. Another part 38 would be the function that readline would invoke after a whole line 39 of input has ben entered. This second piece would be something 40 like, for instance, where to return within the code for the actions 41 commands after a line has been read. This latter portion has not 42 beeen implemented yet. The need for a 3-part prompt arises from 43 the annotation level. When this is set to 2, the prompt is 44 actually composed of a prefix, the prompt itself and a suffix. */ 45 46/* At any particular time there will be always at least one prompt on 47 the stack, the one being currently displayed by gdb. If gdb is 48 using annotation level equal 2, there will be 2 prompts on the 49 stack: the usual one, w/o prefix and suffix (at top - 1), and the 50 'composite' one with prefix and suffix added (at top). At this 51 time, this is the only use of the prompt stack. Resetting annotate 52 to 0 or 1, pops the top of the stack, resetting its size to one 53 element. The MAXPROMPTS limit is safe, for now. Once other cases 54 are dealt with (like the different prompts used for 'commands' or 55 'actions') this array implementation of the prompt stack may have 56 to change. */ 57 58#define MAXPROMPTS 10 59struct prompts 60 { 61 struct 62 { 63 char *prefix; 64 char *prompt; 65 char *suffix; 66 } 67 prompt_stack[MAXPROMPTS]; 68 int top; 69 }; 70 71#define PROMPT(X) the_prompts.prompt_stack[the_prompts.top + X].prompt 72#define PREFIX(X) the_prompts.prompt_stack[the_prompts.top + X].prefix 73#define SUFFIX(X) the_prompts.prompt_stack[the_prompts.top + X].suffix 74 75/* Exported functions from event-top.c. 76 FIXME: these should really go into top.h. */ 77 78extern void display_gdb_prompt (char *new_prompt); 79void gdb_setup_readline (void); 80void gdb_disable_readline (void); 81extern void async_init_signals (void); 82extern void set_async_editing_command (char *args, int from_tty, 83 struct cmd_list_element *c); 84extern void set_async_annotation_level (char *args, int from_tty, 85 struct cmd_list_element *c); 86extern void set_async_prompt (char *args, int from_tty, 87 struct cmd_list_element *c); 88 89/* Signal to catch ^Z typed while reading a command: SIGTSTP or SIGCONT. */ 90#ifndef STOP_SIGNAL 91#include <signal.h> 92#ifdef SIGTSTP 93#define STOP_SIGNAL SIGTSTP 94extern void handle_stop_sig (int sig); 95#endif 96#endif 97extern void handle_sigint (int sig); 98extern void handle_sigterm (int sig); 99extern void pop_prompt (void); 100extern void push_prompt (char *prefix, char *prompt, char *suffix); 101extern void gdb_readline2 (void *client_data); 102extern void mark_async_signal_handler_wrapper (void *token); 103extern void async_request_quit (void *arg); 104extern void stdin_event_handler (int error, void *client_data); 105extern void async_disable_stdin (void); 106extern void async_enable_stdin (void *dummy); 107 108/* Exported variables from event-top.c. 109 FIXME: these should really go into top.h. */ 110 111extern int async_command_editing_p; 112extern int exec_done_display_p; 113extern char *async_annotation_suffix; 114extern char *new_async_prompt; 115extern struct prompts the_prompts; 116extern void (*call_readline) (void *); 117extern void (*input_handler) (char *); 118extern int input_fd; 119extern void (*after_char_processing_hook) (void); 120 121extern void cli_command_loop (void); 122 123#endif 124