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