1/* Definitions used by event-top.c, for GDB, the GNU debugger.
2
3   Copyright 1999, 2001, 2003 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 2 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, write to the Free Software
21   Foundation, Inc., 59 Temple Place - Suite 330,
22   Boston, MA 02111-1307, USA.  */
23
24#ifndef EVENT_TOP_H
25#define EVENT_TOP_H
26
27struct cmd_list_element;
28
29/* Stack for prompts.  Each prompt is composed as a prefix, a prompt
30   and a suffix.  The prompt to be displayed at any given time is the
31   one on top of the stack.  A stack is necessary because of cases in
32   which the execution of a gdb command requires further input from
33   the user, like for instance 'commands' for breakpoints and
34   'actions' for tracepoints.  In these cases, the prompt is '>' and
35   gdb should process input using the asynchronous readline interface
36   and the event loop.  In order to achieve this, we need to save
37   somewhere the state of GDB, i.e. that it is processing user input
38   as part of a command and not as part of the top level command loop.
39   The prompt stack represents part of the saved state.  Another part
40   would be the function that readline would invoke after a whole line
41   of input has ben entered.  This second piece would be something
42   like, for instance, where to return within the code for the actions
43   commands after a line has been read.  This latter portion has not
44   beeen implemented yet.  The need for a 3-part prompt arises from
45   the annotation level.  When this is set to 2, the prompt is
46   actually composed of a prefix, the prompt itself and a suffix.  */
47
48/* At any particular time there will be always at least one prompt on
49   the stack, the one being currently displayed by gdb.  If gdb is
50   using annotation level equal 2, there will be 2 prompts on the
51   stack: the usual one, w/o prefix and suffix (at top - 1), and the
52   'composite' one with prefix and suffix added (at top).  At this
53   time, this is the only use of the prompt stack.  Resetting annotate
54   to 0 or 1, pops the top of the stack, resetting its size to one
55   element.  The MAXPROMPTS limit is safe, for now.  Once other cases
56   are dealt with (like the different prompts used for 'commands' or
57   'actions') this array implementation of the prompt stack may have
58   to change.  */
59
60#define MAXPROMPTS 10
61struct prompts
62  {
63    struct
64      {
65	char *prefix;
66	char *prompt;
67	char *suffix;
68      }
69    prompt_stack[MAXPROMPTS];
70    int top;
71  };
72
73#define PROMPT(X) the_prompts.prompt_stack[the_prompts.top + X].prompt
74#define PREFIX(X) the_prompts.prompt_stack[the_prompts.top + X].prefix
75#define SUFFIX(X) the_prompts.prompt_stack[the_prompts.top + X].suffix
76
77/* Exported functions from event-top.c.
78   FIXME: these should really go into top.h.  */
79
80extern void display_gdb_prompt (char *new_prompt);
81void gdb_setup_readline (void);
82void gdb_disable_readline (void);
83extern void async_init_signals (void);
84extern void set_async_editing_command (char *args, int from_tty,
85				       struct cmd_list_element *c);
86extern void set_async_annotation_level (char *args, int from_tty,
87					struct cmd_list_element *c);
88extern void set_async_prompt (char *args, int from_tty,
89			      struct cmd_list_element *c);
90
91/* Signal to catch ^Z typed while reading a command: SIGTSTP or SIGCONT.  */
92#ifndef STOP_SIGNAL
93#include <signal.h>
94#ifdef SIGTSTP
95#define STOP_SIGNAL SIGTSTP
96extern void handle_stop_sig (int sig);
97#endif
98#endif
99extern void handle_sigint (int sig);
100extern void pop_prompt (void);
101extern void push_prompt (char *prefix, char *prompt, char *suffix);
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);
106extern void async_disable_stdin (void);
107extern void async_enable_stdin (void *dummy);
108
109/* Exported variables from event-top.c.
110   FIXME: these should really go into top.h.  */
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;
117extern void (*call_readline) (void *);
118extern void (*input_handler) (char *);
119extern int input_fd;
120extern void (*after_char_processing_hook) (void);
121
122extern void cli_command_loop (void);
123
124#endif
125