* config/sparc/tm-sp64.h (CALL_DUMMY): Store and retrieve
[deliverable/binutils-gdb.git] / gdb / top.c
CommitLineData
172559ec 1/* Top level stuff for GDB, the GNU debugger.
bf9084c0 2 Copyright 1986, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 1998
172559ec
JK
3 Free Software Foundation, Inc.
4
5This file is part of GDB.
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program; if not, write to the Free Software
6c9638b4 19Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
172559ec
JK
20
21#include "defs.h"
22#include "gdbcmd.h"
23#include "call-cmds.h"
24#include "symtab.h"
25#include "inferior.h"
26#include "signals.h"
27#include "target.h"
28#include "breakpoint.h"
29#include "gdbtypes.h"
30#include "expression.h"
e52bfe0c 31#include "value.h"
172559ec
JK
32#include "language.h"
33#include "terminal.h" /* For job_control. */
34#include "annotate.h"
35#include <setjmp.h>
36#include "top.h"
37
38/* readline include files */
39#include "readline.h"
40#include "history.h"
41
42/* readline defines this. */
43#undef savestring
44
45#include <sys/types.h>
1a494973 46#ifdef HAVE_UNISTD_H
172559ec
JK
47#include <unistd.h>
48#endif
49
2b576293 50#include "gdb_string.h"
2b576293 51#include "gdb_stat.h"
172559ec
JK
52#include <ctype.h>
53
e3be225e
SS
54extern void initialize_utils PARAMS ((void));
55
172559ec
JK
56/* Prototypes for local functions */
57
b607efe7
FF
58static void dont_repeat_command PARAMS ((char *, int));
59
60static void source_cleanup_lines PARAMS ((PTR));
61
62static void user_defined_command PARAMS ((char *, int));
63
64static void init_signals PARAMS ((void));
65
66#ifdef STOP_SIGNAL
67static void stop_sig PARAMS ((int));
68#endif
69
9ed8604f
PS
70static char * line_completion_function PARAMS ((char *, int, char *, int));
71
72static char * readline_line_completion_function PARAMS ((char *, int));
172559ec 73
e52bfe0c 74static void command_loop_marker PARAMS ((int));
172559ec 75
e52bfe0c 76static void while_command PARAMS ((char *, int));
172559ec 77
e52bfe0c 78static void if_command PARAMS ((char *, int));
172559ec 79
e52bfe0c
JL
80static struct command_line *
81build_command_line PARAMS ((enum command_control_type, char *));
172559ec 82
e52bfe0c
JL
83static struct command_line *
84get_command_line PARAMS ((enum command_control_type, char *));
172559ec 85
e52bfe0c 86static void realloc_body_list PARAMS ((struct command_line *, int));
172559ec 87
e52bfe0c 88static enum misc_command_type read_next_line PARAMS ((struct command_line **));
172559ec 89
e52bfe0c
JL
90static enum command_control_type
91recurse_read_control_structure PARAMS ((struct command_line *));
172559ec 92
0f8cdd9b
JL
93static struct cleanup * setup_user_args PARAMS ((char *));
94
95static char * locate_arg PARAMS ((char *));
96
97static char * insert_args PARAMS ((char *));
98
99static void arg_cleanup PARAMS ((void));
100
e52bfe0c 101static void init_main PARAMS ((void));
172559ec 102
e52bfe0c 103static void init_cmd_lists PARAMS ((void));
172559ec 104
e52bfe0c 105static void float_handler PARAMS ((int));
172559ec 106
e52bfe0c 107static void init_signals PARAMS ((void));
172559ec 108
e52bfe0c 109static void set_verbose PARAMS ((char *, int, struct cmd_list_element *));
172559ec 110
b8176214
ILT
111static void set_endian PARAMS ((char *, int));
112
113static void set_endian_big PARAMS ((char *, int));
114
115static void set_endian_little PARAMS ((char *, int));
116
b83ed019
ILT
117static void set_endian_auto PARAMS ((char *, int));
118
b8176214
ILT
119static void show_endian PARAMS ((char *, int));
120
ee36741e 121static void set_architecture PARAMS ((char *, int));
d0aba53f
AC
122
123static void show_architecture PARAMS ((char *, int));
124
125static void info_architecture PARAMS ((char *, int));
126
e52bfe0c 127static void show_history PARAMS ((char *, int));
172559ec 128
e52bfe0c 129static void set_history PARAMS ((char *, int));
172559ec 130
e52bfe0c
JL
131static void set_history_size_command PARAMS ((char *, int,
132 struct cmd_list_element *));
172559ec 133
e52bfe0c 134static void show_commands PARAMS ((char *, int));
172559ec 135
e52bfe0c 136static void echo_command PARAMS ((char *, int));
172559ec 137
e52bfe0c 138static void pwd_command PARAMS ((char *, int));
172559ec 139
e52bfe0c 140static void show_version PARAMS ((char *, int));
172559ec 141
e52bfe0c 142static void document_command PARAMS ((char *, int));
172559ec 143
e52bfe0c 144static void define_command PARAMS ((char *, int));
172559ec 145
e52bfe0c
JL
146static void validate_comname PARAMS ((char *));
147
148static void help_command PARAMS ((char *, int));
149
150static void show_command PARAMS ((char *, int));
151
152static void info_command PARAMS ((char *, int));
153
154static void complete_command PARAMS ((char *, int));
155
156static void do_nothing PARAMS ((int));
157
4ce7ba51 158#ifdef SIGHUP
e52bfe0c
JL
159static int quit_cover PARAMS ((char *));
160
161static void disconnect PARAMS ((int));
4ce7ba51 162#endif
e52bfe0c
JL
163
164static void source_cleanup PARAMS ((FILE *));
172559ec
JK
165
166/* If this definition isn't overridden by the header files, assume
167 that isatty and fileno exist on this system. */
168#ifndef ISATTY
169#define ISATTY(FP) (isatty (fileno (FP)))
170#endif
171
172/* Initialization file name for gdb. This is overridden in some configs. */
173
174#ifndef GDBINIT_FILENAME
175#define GDBINIT_FILENAME ".gdbinit"
176#endif
177char gdbinit[] = GDBINIT_FILENAME;
f22661ee 178
172559ec
JK
179int inhibit_gdbinit = 0;
180
f22661ee
SS
181/* If nonzero, and GDB has been configured to be able to use windows,
182 attempt to open them upon startup. */
754e5da2 183
f22661ee 184int use_windows = 1;
754e5da2 185
172559ec
JK
186/* Version number of GDB, as a string. */
187
188extern char *version;
189
190/* Canonical host name as a string. */
191
192extern char *host_name;
193
194/* Canonical target name as a string. */
195
196extern char *target_name;
197
198extern char lang_frame_mismatch_warn[]; /* language.c */
199
200/* Flag for whether we want all the "from_tty" gubbish printed. */
201
202int caution = 1; /* Default is yes, sigh. */
203
f22661ee 204/* Define all cmd_list_elements. */
172559ec
JK
205
206/* Chain containing all defined commands. */
207
208struct cmd_list_element *cmdlist;
209
210/* Chain containing all defined info subcommands. */
211
212struct cmd_list_element *infolist;
213
214/* Chain containing all defined enable subcommands. */
215
216struct cmd_list_element *enablelist;
217
218/* Chain containing all defined disable subcommands. */
219
220struct cmd_list_element *disablelist;
221
222/* Chain containing all defined delete subcommands. */
223
224struct cmd_list_element *deletelist;
225
226/* Chain containing all defined "enable breakpoint" subcommands. */
227
228struct cmd_list_element *enablebreaklist;
229
230/* Chain containing all defined set subcommands */
231
232struct cmd_list_element *setlist;
233
234/* Chain containing all defined unset subcommands */
235
236struct cmd_list_element *unsetlist;
237
238/* Chain containing all defined show subcommands. */
239
240struct cmd_list_element *showlist;
241
b8176214
ILT
242/* Chain containing the \"set endian\" commands. */
243
244struct cmd_list_element *endianlist;
b8176214 245
172559ec
JK
246/* Chain containing all defined \"set history\". */
247
248struct cmd_list_element *sethistlist;
249
250/* Chain containing all defined \"show history\". */
251
252struct cmd_list_element *showhistlist;
253
254/* Chain containing all defined \"unset history\". */
255
256struct cmd_list_element *unsethistlist;
257
258/* Chain containing all defined maintenance subcommands. */
259
260#if MAINTENANCE_CMDS
261struct cmd_list_element *maintenancelist;
262#endif
263
264/* Chain containing all defined "maintenance info" subcommands. */
265
266#if MAINTENANCE_CMDS
267struct cmd_list_element *maintenanceinfolist;
268#endif
269
270/* Chain containing all defined "maintenance print" subcommands. */
271
272#if MAINTENANCE_CMDS
273struct cmd_list_element *maintenanceprintlist;
274#endif
275
276struct cmd_list_element *setprintlist;
277
278struct cmd_list_element *showprintlist;
279
280struct cmd_list_element *setchecklist;
281
282struct cmd_list_element *showchecklist;
283
284/* stdio stream that command input is being read from. Set to stdin normally.
285 Set by source_command to the file we are sourcing. Set to NULL if we are
41756e56 286 executing a user-defined command or interacting via a GUI. */
172559ec
JK
287
288FILE *instream;
289
290/* Current working directory. */
291
292char *current_directory;
293
294/* The directory name is actually stored here (usually). */
b7ec5b8d 295char gdb_dirbuf[1024];
172559ec
JK
296
297/* Function to call before reading a command, if nonzero.
298 The function receives two args: an input stream,
299 and a prompt string. */
300
301void (*window_hook) PARAMS ((FILE *, char *));
302
303int epoch_interface;
304int xgdb_verbose;
305
306/* gdb prints this when reading a command interactively */
307static char *prompt;
308
309/* Buffer used for reading command lines, and the size
310 allocated for it so far. */
311
312char *line;
313int linesize = 100;
314
315/* Nonzero if the current command is modified by "server ". This
316 affects things like recording into the command history, comamnds
317 repeating on RETURN, etc. This is so a user interface (emacs, GUI,
318 whatever) can issue its own commands and also send along commands
319 from the user, and have the user not notice that the user interface
320 is issuing commands too. */
321int server_command;
322
323/* Baud rate specified for talking to serial target systems. Default
324 is left as -1, so targets can choose their own defaults. */
325/* FIXME: This means that "show remotebaud" and gr_files_info can print -1
326 or (unsigned int)-1. This is a Bad User Interface. */
327
328int baud_rate = -1;
329
cb1709ae
DP
330/* Timeout limit for response from target. */
331
332int remote_timeout = 20; /* Set default to 20 */
333
172559ec
JK
334/* Non-zero tells remote* modules to output debugging info. */
335
336int remote_debug = 0;
337
e52bfe0c
JL
338/* Level of control structure. */
339static int control_level;
340
0f8cdd9b
JL
341/* Structure for arguments to user defined functions. */
342#define MAXUSERARGS 10
343struct user_args
344{
345 struct user_args *next;
346 struct
347 {
348 char *arg;
349 int len;
350 } a[MAXUSERARGS];
351 int count;
352} *user_args;
353
172559ec
JK
354/* Signal to catch ^Z typed while reading a command: SIGTSTP or SIGCONT. */
355
356#ifndef STOP_SIGNAL
357#ifdef SIGTSTP
358#define STOP_SIGNAL SIGTSTP
359static void stop_sig PARAMS ((int));
360#endif
361#endif
362
363/* Some System V have job control but not sigsetmask(). */
364#if !defined (HAVE_SIGSETMASK)
365#if !defined (USG)
366#define HAVE_SIGSETMASK 1
367#else
368#define HAVE_SIGSETMASK 0
369#endif
370#endif
371
372#if 0 == (HAVE_SIGSETMASK)
373#define sigsetmask(n)
374#endif
8164ec2e
SG
375
376/* Hooks for alternate command interfaces. */
377
378/* Called after most modules have been initialized, but before taking users
379 command file. */
380
2476848a 381void (*init_ui_hook) PARAMS ((char *argv0));
8164ec2e
SG
382
383/* Called instead of command_loop at top level. Can be invoked via
384 return_to_top_level. */
385
386void (*command_loop_hook) PARAMS ((void));
387
764efb58 388
8164ec2e
SG
389/* Called instead of fputs for all output. */
390
86db943c 391void (*fputs_unfiltered_hook) PARAMS ((const char *linebuffer, FILE *stream));
8164ec2e 392
764efb58
SC
393/* Called when the target says something to the host, which may
394 want to appear in a different window. */
395
327332d8 396void (*target_output_hook) PARAMS ((char *));
764efb58 397
8164ec2e
SG
398/* Called from print_frame_info to list the line we stopped in. */
399
400void (*print_frame_info_listing_hook) PARAMS ((struct symtab *s, int line,
401 int stopline, int noerror));
402/* Replaces most of query. */
403
b607efe7 404int (*query_hook) PARAMS ((const char *, va_list));
8164ec2e 405
e6e9507d
EZ
406/* Replaces most of warning. */
407
408void (*warning_hook) PARAMS ((const char *, va_list));
409
8164ec2e
SG
410/* Called from gdb_flush to flush output. */
411
412void (*flush_hook) PARAMS ((FILE *stream));
413
41756e56
FF
414/* These three functions support getting lines of text from the user. They
415 are used in sequence. First readline_begin_hook is called with a text
416 string that might be (for example) a message for the user to type in a
417 sequence of commands to be executed at a breakpoint. If this function
418 calls back to a GUI, it might take this opportunity to pop up a text
419 interaction window with this message. Next, readline_hook is called
420 with a prompt that is emitted prior to collecting the user input.
421 It can be called multiple times. Finally, readline_end_hook is called
422 to notify the GUI that we are done with the interaction window and it
423 can close it. */
424
425void (*readline_begin_hook) PARAMS ((char *, ...));
426char * (*readline_hook) PARAMS ((char *));
427void (*readline_end_hook) PARAMS ((void));
428
8164ec2e
SG
429/* Called as appropriate to notify the interface of the specified breakpoint
430 conditions. */
431
637b1661 432void (*create_breakpoint_hook) PARAMS ((struct breakpoint *bpt));
8164ec2e 433void (*delete_breakpoint_hook) PARAMS ((struct breakpoint *bpt));
6131622e 434void (*modify_breakpoint_hook) PARAMS ((struct breakpoint *bpt));
637b1661
SG
435
436/* Called during long calculations to allow GUI to repair window damage, and to
437 check for stop buttons, etc... */
438
439void (*interactive_hook) PARAMS ((void));
440
16041d53
SC
441/* Called when the registers have changed, as a hint to a GUI
442 to minimize window update. */
443
444void (*registers_changed_hook) PARAMS ((void));
445
929db6e5
EZ
446/* tell the GUI someone changed the PC */
447void (*pc_changed_hook) PARAMS ((void));
448
479f0f18
SG
449/* Called when going to wait for the target. Usually allows the GUI to run
450 while waiting for target events. */
451
452int (*target_wait_hook) PARAMS ((int pid, struct target_waitstatus *status));
453
454/* Used by UI as a wrapper around command execution. May do various things
455 like enabling/disabling buttons, etc... */
456
457void (*call_command_hook) PARAMS ((struct cmd_list_element *c, char *cmd,
458 int from_tty));
45993f61
SC
459
460
461/* Takes control from error (). Typically used to prevent longjmps out of the
462 middle of the GUI. Usually used in conjunction with a catch routine. */
463
b607efe7 464NORETURN void (*error_hook) PARAMS ((void)) ATTR_NORETURN;
45993f61 465
172559ec
JK
466\f
467/* Where to go for return_to_top_level (RETURN_ERROR). */
4b65fd38 468SIGJMP_BUF error_return;
172559ec 469/* Where to go for return_to_top_level (RETURN_QUIT). */
4b65fd38 470SIGJMP_BUF quit_return;
172559ec
JK
471
472/* Return for reason REASON. This generally gets back to the command
473 loop, but can be caught via catch_errors. */
474
475NORETURN void
476return_to_top_level (reason)
477 enum return_reason reason;
478{
479 quit_flag = 0;
480 immediate_quit = 0;
481
482 /* Perhaps it would be cleaner to do this via the cleanup chain (not sure
483 I can think of a reason why that is vital, though). */
484 bpstat_clear_actions(stop_bpstat); /* Clear queued breakpoint commands */
485
486 disable_current_display ();
487 do_cleanups (ALL_CLEANUPS);
488
489 if (annotation_level > 1)
490 switch (reason)
491 {
492 case RETURN_QUIT:
493 annotate_quit ();
494 break;
495 case RETURN_ERROR:
496 annotate_error ();
497 break;
498 }
499
4b65fd38 500 (NORETURN void) SIGLONGJMP
172559ec
JK
501 (reason == RETURN_ERROR ? error_return : quit_return, 1);
502}
503
504/* Call FUNC with arg ARGS, catching any errors. If there is no
505 error, return the value returned by FUNC. If there is an error,
506 print ERRSTRING, print the specific error message, then return
507 zero.
508
509 Must not be called with immediate_quit in effect (bad things might
510 happen, say we got a signal in the middle of a memcpy to quit_return).
511 This is an OK restriction; with very few exceptions immediate_quit can
512 be replaced by judicious use of QUIT.
513
514 MASK specifies what to catch; it is normally set to
515 RETURN_MASK_ALL, if for no other reason than that the code which
516 calls catch_errors might not be set up to deal with a quit which
517 isn't caught. But if the code can deal with it, it generally
518 should be RETURN_MASK_ERROR, unless for some reason it is more
519 useful to abort only the portion of the operation inside the
520 catch_errors. Note that quit should return to the command line
521 fairly quickly, even if some further processing is being done. */
522
523int
524catch_errors (func, args, errstring, mask)
525 int (*func) PARAMS ((char *));
526 PTR args;
527 char *errstring;
528 return_mask mask;
529{
4b65fd38
DT
530 SIGJMP_BUF saved_error;
531 SIGJMP_BUF saved_quit;
532 SIGJMP_BUF tmp_jmp;
172559ec
JK
533 int val;
534 struct cleanup *saved_cleanup_chain;
535 char *saved_error_pre_print;
dee80384 536 char *saved_quit_pre_print;
172559ec
JK
537
538 saved_cleanup_chain = save_cleanups ();
539 saved_error_pre_print = error_pre_print;
dee80384 540 saved_quit_pre_print = quit_pre_print;
172559ec
JK
541
542 if (mask & RETURN_MASK_ERROR)
dee80384 543 {
4b65fd38 544 memcpy ((char *)saved_error, (char *)error_return, sizeof (SIGJMP_BUF));
dee80384
JK
545 error_pre_print = errstring;
546 }
172559ec 547 if (mask & RETURN_MASK_QUIT)
dee80384 548 {
4b65fd38 549 memcpy (saved_quit, quit_return, sizeof (SIGJMP_BUF));
dee80384
JK
550 quit_pre_print = errstring;
551 }
172559ec 552
4b65fd38 553 if (SIGSETJMP (tmp_jmp) == 0)
172559ec
JK
554 {
555 if (mask & RETURN_MASK_ERROR)
4b65fd38 556 memcpy (error_return, tmp_jmp, sizeof (SIGJMP_BUF));
172559ec 557 if (mask & RETURN_MASK_QUIT)
4b65fd38 558 memcpy (quit_return, tmp_jmp, sizeof (SIGJMP_BUF));
172559ec
JK
559 val = (*func) (args);
560 }
561 else
562 val = 0;
563
564 restore_cleanups (saved_cleanup_chain);
565
172559ec 566 if (mask & RETURN_MASK_ERROR)
dee80384 567 {
4b65fd38 568 memcpy (error_return, saved_error, sizeof (SIGJMP_BUF));
dee80384
JK
569 error_pre_print = saved_error_pre_print;
570 }
172559ec 571 if (mask & RETURN_MASK_QUIT)
dee80384 572 {
4b65fd38 573 memcpy (quit_return, saved_quit, sizeof (SIGJMP_BUF));
dee80384
JK
574 quit_pre_print = saved_quit_pre_print;
575 }
172559ec
JK
576 return val;
577}
578
579/* Handler for SIGHUP. */
580
4ce7ba51 581#ifdef SIGHUP
172559ec
JK
582static void
583disconnect (signo)
584int signo;
585{
586 catch_errors (quit_cover, NULL,
587 "Could not kill the program being debugged", RETURN_MASK_ALL);
588 signal (SIGHUP, SIG_DFL);
589 kill (getpid (), SIGHUP);
590}
591
592/* Just a little helper function for disconnect(). */
593
594static int
595quit_cover (s)
596char *s;
597{
598 caution = 0; /* Throw caution to the wind -- we're exiting.
599 This prevents asking the user dumb questions. */
600 quit_command((char *)0, 0);
601 return 0;
602}
4ce7ba51 603#endif /* defined SIGHUP */
172559ec
JK
604\f
605/* Line number we are currently in in a file which is being sourced. */
606static int source_line_number;
607
608/* Name of the file we are sourcing. */
609static char *source_file_name;
610
611/* Buffer containing the error_pre_print used by the source stuff.
612 Malloc'd. */
613static char *source_error;
614static int source_error_allocated;
615
616/* Something to glom on to the start of error_pre_print if source_file_name
617 is set. */
618static char *source_pre_error;
619
620/* Clean up on error during a "source" command (or execution of a
621 user-defined command). */
622
623static void
624source_cleanup (stream)
625 FILE *stream;
626{
627 /* Restore the previous input stream. */
628 instream = stream;
629}
630
631/* Read commands from STREAM. */
632void
633read_command_file (stream)
634 FILE *stream;
635{
636 struct cleanup *cleanups;
637
638 cleanups = make_cleanup (source_cleanup, instream);
639 instream = stream;
640 command_loop ();
641 do_cleanups (cleanups);
642}
643\f
b607efe7 644extern void init_proc PARAMS ((void));
172559ec 645
43ab4ba5
SS
646void (*pre_init_ui_hook) PARAMS ((void));
647
172559ec 648void
2476848a
MH
649gdb_init (argv0)
650 char *argv0;
172559ec 651{
43ab4ba5
SS
652 if (pre_init_ui_hook)
653 pre_init_ui_hook ();
654
172559ec
JK
655 /* Run the init function of each source file */
656
b7ec5b8d
FF
657 getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
658 current_directory = gdb_dirbuf;
f36b58b1 659
172559ec 660 init_cmd_lists (); /* This needs to be done first */
754e5da2
SG
661 initialize_targets (); /* Setup target_terminal macros for utils.c */
662 initialize_utils (); /* Make errors and warnings possible */
172559ec
JK
663 initialize_all_files ();
664 init_main (); /* But that omits this file! Do it now */
665 init_signals ();
666
667 init_proc ();
668
669 /* We need a default language for parsing expressions, so simple things like
670 "set width 0" won't fail if no language is explicitly set in a config file
671 or implicitly set by reading an executable during startup. */
672 set_language (language_c);
673 expected_language = current_language; /* don't warn about the change. */
754e5da2
SG
674
675 if (init_ui_hook)
2476848a 676 init_ui_hook (argv0);
172559ec
JK
677}
678
e52bfe0c
JL
679/* Allocate, initialize a new command line structure for one of the
680 control commands (if/while). */
681
682static struct command_line *
683build_command_line (type, args)
684 enum command_control_type type;
685 char *args;
686{
687 struct command_line *cmd;
688
a25ffb08
JL
689 if (args == NULL)
690 error ("if/while commands require arguments.\n");
691
e52bfe0c
JL
692 cmd = (struct command_line *)xmalloc (sizeof (struct command_line));
693 cmd->next = NULL;
694 cmd->control_type = type;
695
696 cmd->body_count = 1;
697 cmd->body_list
698 = (struct command_line **)xmalloc (sizeof (struct command_line *)
699 * cmd->body_count);
700 memset (cmd->body_list, 0, sizeof (struct command_line *) * cmd->body_count);
701 cmd->line = savestring (args, strlen (args));
702 return cmd;
703}
704
705/* Build and return a new command structure for the control commands
706 such as "if" and "while". */
707
708static struct command_line *
709get_command_line (type, arg)
710 enum command_control_type type;
711 char *arg;
712{
713 struct command_line *cmd;
714 struct cleanup *old_chain = NULL;
715
716 /* Allocate and build a new command line structure. */
717 cmd = build_command_line (type, arg);
718
719 old_chain = make_cleanup (free_command_lines, &cmd);
720
721 /* Read in the body of this command. */
722 if (recurse_read_control_structure (cmd) == invalid_control)
723 {
724 warning ("error reading in control structure\n");
725 do_cleanups (old_chain);
726 return NULL;
727 }
728
729 discard_cleanups (old_chain);
730 return cmd;
731}
732
0f8cdd9b
JL
733/* Recursively print a command (including full control structures). */
734void
735print_command_line (cmd, depth)
736 struct command_line *cmd;
737 unsigned int depth;
738{
739 unsigned int i;
740
741 if (depth)
742 {
743 for (i = 0; i < depth; i++)
744 fputs_filtered (" ", gdb_stdout);
745 }
746
747 /* A simple command, print it and return. */
748 if (cmd->control_type == simple_control)
749 {
750 fputs_filtered (cmd->line, gdb_stdout);
751 fputs_filtered ("\n", gdb_stdout);
752 return;
753 }
754
755 /* loop_continue to jump to the start of a while loop, print it
756 and return. */
757 if (cmd->control_type == continue_control)
758 {
759 fputs_filtered ("loop_continue\n", gdb_stdout);
760 return;
761 }
762
763 /* loop_break to break out of a while loop, print it and return. */
764 if (cmd->control_type == break_control)
765 {
766 fputs_filtered ("loop_break\n", gdb_stdout);
767 return;
768 }
769
770 /* A while command. Recursively print its subcommands before returning. */
771 if (cmd->control_type == while_control)
772 {
773 struct command_line *list;
774 fputs_filtered ("while ", gdb_stdout);
775 fputs_filtered (cmd->line, gdb_stdout);
776 fputs_filtered ("\n", gdb_stdout);
777 list = *cmd->body_list;
778 while (list)
779 {
780 print_command_line (list, depth + 1);
781 list = list->next;
782 }
783 }
784
785 /* An if command. Recursively print both arms before returning. */
786 if (cmd->control_type == if_control)
787 {
788 fputs_filtered ("if ", gdb_stdout);
789 fputs_filtered (cmd->line, gdb_stdout);
790 fputs_filtered ("\n", gdb_stdout);
791 /* The true arm. */
792 print_command_line (cmd->body_list[0], depth + 1);
793
794 /* Show the false arm if it exists. */
795 if (cmd->body_count == 2)
796 {
797 if (depth)
798 {
799 for (i = 0; i < depth; i++)
800 fputs_filtered (" ", gdb_stdout);
801 }
802 fputs_filtered ("else\n", gdb_stdout);
803 print_command_line (cmd->body_list[1], depth + 1);
804 }
805 if (depth)
806 {
807 for (i = 0; i < depth; i++)
808 fputs_filtered (" ", gdb_stdout);
809 }
810 fputs_filtered ("end\n", gdb_stdout);
811 }
812}
813
e52bfe0c
JL
814/* Execute the command in CMD. */
815
0f8cdd9b 816enum command_control_type
e52bfe0c
JL
817execute_control_command (cmd)
818 struct command_line *cmd;
819{
820 struct expression *expr;
821 struct command_line *current;
822 struct cleanup *old_chain = 0;
e52bfe0c 823 value_ptr val;
e20c36ba 824 value_ptr val_mark;
e52bfe0c
JL
825 int loop;
826 enum command_control_type ret;
0f8cdd9b 827 char *new_line;
e52bfe0c
JL
828
829 switch (cmd->control_type)
830 {
831 case simple_control:
832 /* A simple command, execute it and return. */
0f8cdd9b
JL
833 new_line = insert_args (cmd->line);
834 if (!new_line)
835 return invalid_control;
836 old_chain = make_cleanup (free_current_contents, &new_line);
837 execute_command (new_line, 0);
838 ret = cmd->control_type;
839 break;
e52bfe0c
JL
840
841 case continue_control:
842 case break_control:
843 /* Return for "continue", and "break" so we can either
844 continue the loop at the top, or break out. */
0f8cdd9b
JL
845 ret = cmd->control_type;
846 break;
e52bfe0c
JL
847
848 case while_control:
849 {
850 /* Parse the loop control expression for the while statement. */
0f8cdd9b
JL
851 new_line = insert_args (cmd->line);
852 if (!new_line)
853 return invalid_control;
854 old_chain = make_cleanup (free_current_contents, &new_line);
855 expr = parse_expression (new_line);
856 make_cleanup (free_current_contents, &expr);
857
e52bfe0c 858 ret = simple_control;
b5776522 859 loop = 1;
e52bfe0c
JL
860
861 /* Keep iterating so long as the expression is true. */
b5776522 862 while (loop == 1)
e52bfe0c 863 {
e20c36ba
JL
864 int cond_result;
865
24ecc17a
JL
866 QUIT;
867
e52bfe0c 868 /* Evaluate the expression. */
e20c36ba 869 val_mark = value_mark ();
e52bfe0c 870 val = evaluate_expression (expr);
e20c36ba
JL
871 cond_result = value_true (val);
872 value_free_to_mark (val_mark);
e52bfe0c
JL
873
874 /* If the value is false, then break out of the loop. */
e20c36ba 875 if (!cond_result)
e52bfe0c
JL
876 break;
877
878 /* Execute the body of the while statement. */
879 current = *cmd->body_list;
880 while (current)
881 {
882 ret = execute_control_command (current);
883
884 /* If we got an error, or a "break" command, then stop
885 looping. */
886 if (ret == invalid_control || ret == break_control)
887 {
b5776522 888 loop = 0;
e52bfe0c
JL
889 break;
890 }
891
892 /* If we got a "continue" command, then restart the loop
893 at this point. */
894 if (ret == continue_control)
895 break;
896
897 /* Get the next statement. */
898 current = current->next;
899 }
900 }
901
902 /* Reset RET so that we don't recurse the break all the way down. */
903 if (ret == break_control)
904 ret = simple_control;
905
906 break;
907 }
908
909 case if_control:
910 {
0f8cdd9b
JL
911 new_line = insert_args (cmd->line);
912 if (!new_line)
913 return invalid_control;
914 old_chain = make_cleanup (free_current_contents, &new_line);
e52bfe0c 915 /* Parse the conditional for the if statement. */
0f8cdd9b
JL
916 expr = parse_expression (new_line);
917 make_cleanup (free_current_contents, &expr);
e52bfe0c
JL
918
919 current = NULL;
920 ret = simple_control;
921
922 /* Evaluate the conditional. */
e20c36ba 923 val_mark = value_mark ();
e52bfe0c
JL
924 val = evaluate_expression (expr);
925
926 /* Choose which arm to take commands from based on the value of the
927 conditional expression. */
928 if (value_true (val))
929 current = *cmd->body_list;
930 else if (cmd->body_count == 2)
931 current = *(cmd->body_list + 1);
e20c36ba 932 value_free_to_mark (val_mark);
e52bfe0c
JL
933
934 /* Execute commands in the given arm. */
935 while (current)
936 {
937 ret = execute_control_command (current);
938
939 /* If we got an error, get out. */
940 if (ret != simple_control)
941 break;
942
943 /* Get the next statement in the body. */
944 current = current->next;
945 }
0f8cdd9b 946
e52bfe0c
JL
947 break;
948 }
949
950 default:
951 warning ("Invalid control type in command structure.");
952 return invalid_control;
953 }
954
955 if (old_chain)
956 do_cleanups (old_chain);
957
958 return ret;
959}
960
961/* "while" command support. Executes a body of statements while the
962 loop condition is nonzero. */
963
964static void
965while_command (arg, from_tty)
966 char *arg;
967 int from_tty;
968{
969 struct command_line *command = NULL;
970
971 control_level = 1;
972 command = get_command_line (while_control, arg);
973
974 if (command == NULL)
975 return;
976
977 execute_control_command (command);
978 free_command_lines (&command);
979}
980
981/* "if" command support. Execute either the true or false arm depending
982 on the value of the if conditional. */
983
984static void
985if_command (arg, from_tty)
986 char *arg;
987 int from_tty;
988{
989 struct command_line *command = NULL;
990
991 control_level = 1;
992 command = get_command_line (if_control, arg);
993
994 if (command == NULL)
995 return;
996
997 execute_control_command (command);
998 free_command_lines (&command);
999}
1000
0f8cdd9b
JL
1001/* Cleanup */
1002static void
1003arg_cleanup ()
1004{
1005 struct user_args *oargs = user_args;
1006 if (!user_args)
1007 fatal ("Internal error, arg_cleanup called with no user args.\n");
1008
1009 user_args = user_args->next;
1010 free (oargs);
1011}
1012
1013/* Bind the incomming arguments for a user defined command to
1014 $arg0, $arg1 ... $argMAXUSERARGS. */
1015
1016static struct cleanup *
1017setup_user_args (p)
1018 char *p;
1019{
1020 struct user_args *args;
1021 struct cleanup *old_chain;
1022 unsigned int arg_count = 0;
1023
1024 args = (struct user_args *)xmalloc (sizeof (struct user_args));
1025 memset (args, 0, sizeof (struct user_args));
1026
1027 args->next = user_args;
1028 user_args = args;
1029
1030 old_chain = make_cleanup (arg_cleanup, 0);
1031
1032 if (p == NULL)
1033 return old_chain;
1034
1035 while (*p)
1036 {
1037 char *start_arg;
ac7a8760
PS
1038 int squote = 0;
1039 int dquote = 0;
1040 int bsquote = 0;
0f8cdd9b
JL
1041
1042 if (arg_count >= MAXUSERARGS)
1043 {
1044 error ("user defined function may only have %d arguments.\n",
1045 MAXUSERARGS);
1046 return old_chain;
1047 }
1048
1049 /* Strip whitespace. */
1050 while (*p == ' ' || *p == '\t')
1051 p++;
1052
1053 /* P now points to an argument. */
1054 start_arg = p;
1055 user_args->a[arg_count].arg = p;
1056
1057 /* Get to the end of this argument. */
ac7a8760
PS
1058 while (*p)
1059 {
1060 if (((*p == ' ' || *p == '\t')) && !squote && !dquote && !bsquote)
1061 break;
1062 else
1063 {
1064 if (bsquote)
1065 bsquote = 0;
1066 else if (*p == '\\')
1067 bsquote = 1;
1068 else if (squote)
1069 {
1070 if (*p == '\'')
1071 squote = 0;
1072 }
1073 else if (dquote)
1074 {
1075 if (*p == '"')
1076 dquote = 0;
1077 }
1078 else
1079 {
1080 if (*p == '\'')
1081 squote = 1;
1082 else if (*p == '"')
1083 dquote = 1;
1084 }
1085 p++;
1086 }
1087 }
0f8cdd9b
JL
1088
1089 user_args->a[arg_count].len = p - start_arg;
1090 arg_count++;
1091 user_args->count++;
1092 }
1093 return old_chain;
1094}
1095
1096/* Given character string P, return a point to the first argument ($arg),
1097 or NULL if P contains no arguments. */
1098
1099static char *
1100locate_arg (p)
1101 char *p;
1102{
e3be225e 1103 while ((p = strchr (p, '$')))
0f8cdd9b
JL
1104 {
1105 if (strncmp (p, "$arg", 4) == 0 && isdigit (p[4]))
1106 return p;
1107 p++;
1108 }
1109 return NULL;
1110}
1111
1112/* Insert the user defined arguments stored in user_arg into the $arg
1113 arguments found in line, with the updated copy being placed into nline. */
1114
1115static char *
1116insert_args (line)
1117 char *line;
1118{
1119 char *p, *save_line, *new_line;
1120 unsigned len, i;
1121
1122 /* First we need to know how much memory to allocate for the new line. */
1123 save_line = line;
1124 len = 0;
e3be225e 1125 while ((p = locate_arg (line)))
0f8cdd9b
JL
1126 {
1127 len += p - line;
1128 i = p[4] - '0';
1129
1130 if (i >= user_args->count)
1131 {
1132 error ("Missing argument %d in user function.\n", i);
1133 return NULL;
1134 }
1135 len += user_args->a[i].len;
1136 line = p + 5;
1137 }
1138
1139 /* Don't forget the tail. */
1140 len += strlen (line);
1141
1142 /* Allocate space for the new line and fill it in. */
1143 new_line = (char *)xmalloc (len + 1);
1144 if (new_line == NULL)
1145 return NULL;
1146
1147 /* Restore pointer to beginning of old line. */
1148 line = save_line;
1149
1150 /* Save pointer to beginning of new line. */
1151 save_line = new_line;
1152
e3be225e 1153 while ((p = locate_arg (line)))
0f8cdd9b
JL
1154 {
1155 int i, len;
1156
1157 memcpy (new_line, line, p - line);
1158 new_line += p - line;
1159 i = p[4] - '0';
1160
e3be225e
SS
1161 len = user_args->a[i].len;
1162 if (len)
0f8cdd9b
JL
1163 {
1164 memcpy (new_line, user_args->a[i].arg, len);
1165 new_line += len;
1166 }
1167 line = p + 5;
1168 }
1169 /* Don't forget the tail. */
1170 strcpy (new_line, line);
1171
1172 /* Return a pointer to the beginning of the new line. */
1173 return save_line;
1174}
1175
172559ec
JK
1176void
1177execute_user_command (c, args)
1178 struct cmd_list_element *c;
1179 char *args;
1180{
1181 register struct command_line *cmdlines;
1182 struct cleanup *old_chain;
e52bfe0c
JL
1183 enum command_control_type ret;
1184
0f8cdd9b 1185 old_chain = setup_user_args (args);
172559ec
JK
1186
1187 cmdlines = c->user_commands;
1188 if (cmdlines == 0)
1189 /* Null command */
1190 return;
1191
1192 /* Set the instream to 0, indicating execution of a
1193 user-defined function. */
1194 old_chain = make_cleanup (source_cleanup, instream);
1195 instream = (FILE *) 0;
1196 while (cmdlines)
1197 {
e52bfe0c
JL
1198 ret = execute_control_command (cmdlines);
1199 if (ret != simple_control && ret != break_control)
1200 {
1201 warning ("Error in control structure.\n");
1202 break;
1203 }
172559ec
JK
1204 cmdlines = cmdlines->next;
1205 }
1206 do_cleanups (old_chain);
1207}
1208
1209/* Execute the line P as a command.
1210 Pass FROM_TTY as second argument to the defining function. */
1211
1212void
1213execute_command (p, from_tty)
1214 char *p;
1215 int from_tty;
1216{
1217 register struct cmd_list_element *c;
1218 register enum language flang;
1219 static int warned = 0;
b607efe7 1220 /* FIXME: These should really be in an appropriate header file */
b607efe7 1221 extern void serial_log_command PARAMS ((const char *));
172559ec
JK
1222
1223 free_all_values ();
1224
5959df8e
JL
1225 /* Force cleanup of any alloca areas if using C alloca instead of
1226 a builtin alloca. */
1227 alloca (0);
1228
172559ec
JK
1229 /* This can happen when command_line_input hits end of file. */
1230 if (p == NULL)
1231 return;
e52bfe0c 1232
d9951af4 1233 serial_log_command (p);
e8f1ad9a 1234
172559ec
JK
1235 while (*p == ' ' || *p == '\t') p++;
1236 if (*p)
1237 {
1238 char *arg;
e52bfe0c 1239
172559ec
JK
1240 c = lookup_cmd (&p, cmdlist, "", 0, 1);
1241 /* Pass null arg rather than an empty one. */
1242 arg = *p ? p : 0;
1243
080868b4
PS
1244 /* Clear off trailing whitespace, except for set and complete command. */
1245 if (arg && c->type != set_cmd && c->function.cfunc != complete_command)
1246 {
1247 p = arg + strlen (arg) - 1;
1248 while (p >= arg && (*p == ' ' || *p == '\t'))
1249 p--;
1250 *(p + 1) = '\0';
1251 }
1252
172559ec
JK
1253 /* If this command has been hooked, run the hook first. */
1254 if (c->hook)
1255 execute_user_command (c->hook, (char *)0);
1256
1257 if (c->class == class_user)
1258 execute_user_command (c, arg);
1259 else if (c->type == set_cmd || c->type == show_cmd)
1260 do_setshow_command (arg, from_tty & caution, c);
1261 else if (c->function.cfunc == NO_FUNCTION)
1262 error ("That is not a command, just a help topic.");
479f0f18
SG
1263 else if (call_command_hook)
1264 call_command_hook (c, arg, from_tty & caution);
172559ec
JK
1265 else
1266 (*c->function.cfunc) (arg, from_tty & caution);
1267 }
1268
1269 /* Tell the user if the language has changed (except first time). */
1270 if (current_language != expected_language)
1271 {
1272 if (language_mode == language_mode_auto) {
1273 language_info (1); /* Print what changed. */
1274 }
1275 warned = 0;
1276 }
1277
1278 /* Warn the user if the working language does not match the
1279 language of the current frame. Only warn the user if we are
1280 actually running the program, i.e. there is a stack. */
1281 /* FIXME: This should be cacheing the frame and only running when
1282 the frame changes. */
43ab4ba5 1283
172559ec 1284 if (target_has_stack)
172559ec 1285 {
43ab4ba5
SS
1286 flang = get_frame_language ();
1287 if (!warned
1288 && flang != language_unknown
1289 && flang != current_language->la_language)
1290 {
1291 printf_filtered ("%s\n", lang_frame_mismatch_warn);
1292 warned = 1;
1293 }
172559ec 1294 }
172559ec
JK
1295}
1296
1297/* ARGSUSED */
1298static void
1299command_loop_marker (foo)
1300 int foo;
1301{
1302}
1303
1304/* Read commands from `instream' and execute them
1305 until end of file or error reading instream. */
43ab4ba5 1306
172559ec
JK
1307void
1308command_loop ()
1309{
1310 struct cleanup *old_chain;
1311 char *command;
1312 int stdin_is_tty = ISATTY (stdin);
43ab4ba5 1313 long time_at_cmd_start;
38d715a4 1314#ifdef HAVE_SBRK
83ebf439 1315 long space_at_cmd_start;
38d715a4 1316#endif
43ab4ba5
SS
1317 extern int display_time;
1318 extern int display_space;
172559ec 1319
41756e56 1320 while (instream && !feof (instream))
172559ec
JK
1321 {
1322 if (window_hook && instream == stdin)
1323 (*window_hook) (instream, prompt);
1324
1325 quit_flag = 0;
1326 if (instream == stdin && stdin_is_tty)
1327 reinitialize_more_filter ();
1328 old_chain = make_cleanup (command_loop_marker, 0);
1329 command = command_line_input (instream == stdin ? prompt : (char *) NULL,
1330 instream == stdin, "prompt");
1331 if (command == 0)
1332 return;
43ab4ba5
SS
1333
1334 time_at_cmd_start = get_run_time ();
1335
83ebf439
SS
1336 if (display_space)
1337 {
38d715a4 1338#ifdef HAVE_SBRK
83ebf439
SS
1339 extern char **environ;
1340 char *lim = (char *) sbrk (0);
1341
1342 space_at_cmd_start = (long) (lim - (char *) &environ);
38d715a4 1343#endif
83ebf439
SS
1344 }
1345
172559ec
JK
1346 execute_command (command, instream == stdin);
1347 /* Do any commands attached to breakpoint we stopped at. */
1348 bpstat_do_actions (&stop_bpstat);
1349 do_cleanups (old_chain);
43ab4ba5
SS
1350
1351 if (display_time)
1352 {
1353 long cmd_time = get_run_time () - time_at_cmd_start;
1354
1355 printf_unfiltered ("Command execution time: %ld.%06ld\n",
1356 cmd_time / 1000000, cmd_time % 1000000);
1357 }
1358
1359 if (display_space)
1360 {
38d715a4 1361#ifdef HAVE_SBRK
43ab4ba5
SS
1362 extern char **environ;
1363 char *lim = (char *) sbrk (0);
83ebf439
SS
1364 long space_now = lim - (char *) &environ;
1365 long space_diff = space_now - space_at_cmd_start;
43ab4ba5 1366
83ebf439
SS
1367 printf_unfiltered ("Space used: %ld (%c%ld for this command)\n",
1368 space_now,
1369 (space_diff >= 0 ? '+' : '-'),
1370 space_diff);
38d715a4 1371#endif
43ab4ba5 1372 }
172559ec
JK
1373 }
1374}
1375\f
1376/* Commands call this if they do not want to be repeated by null lines. */
1377
1378void
1379dont_repeat ()
1380{
1381 if (server_command)
1382 return;
1383
1384 /* If we aren't reading from standard input, we are saving the last
1385 thing read from stdin in line and don't want to delete it. Null lines
1386 won't repeat here in any case. */
1387 if (instream == stdin)
1388 *line = 0;
1389}
1390\f
1391/* Read a line from the stream "instream" without command line editing.
1392
1393 It prints PRROMPT once at the start.
e52bfe0c 1394 Action is compatible with "readline", e.g. space for the result is
172559ec
JK
1395 malloc'd and should be freed by the caller.
1396
1397 A NULL return means end of file. */
1398char *
1399gdb_readline (prrompt)
1400 char *prrompt;
1401{
1402 int c;
1403 char *result;
1404 int input_index = 0;
1405 int result_size = 80;
1406
1407 if (prrompt)
1408 {
1409 /* Don't use a _filtered function here. It causes the assumed
1410 character position to be off, since the newline we read from
1411 the user is not accounted for. */
1412 fputs_unfiltered (prrompt, gdb_stdout);
172559ec
JK
1413#ifdef MPW
1414 /* Move to a new line so the entered line doesn't have a prompt
1415 on the front of it. */
1416 fputs_unfiltered ("\n", gdb_stdout);
1417#endif /* MPW */
172559ec
JK
1418 gdb_flush (gdb_stdout);
1419 }
e52bfe0c 1420
172559ec
JK
1421 result = (char *) xmalloc (result_size);
1422
1423 while (1)
1424 {
1425 /* Read from stdin if we are executing a user defined command.
1426 This is the right thing for prompt_for_continue, at least. */
1427 c = fgetc (instream ? instream : stdin);
1428
1429 if (c == EOF)
1430 {
1431 if (input_index > 0)
1432 /* The last line does not end with a newline. Return it, and
1433 if we are called again fgetc will still return EOF and
1434 we'll return NULL then. */
1435 break;
1436 free (result);
1437 return NULL;
1438 }
1439
1440 if (c == '\n')
1441 break;
1442
1443 result[input_index++] = c;
1444 while (input_index >= result_size)
1445 {
1446 result_size *= 2;
1447 result = (char *) xrealloc (result, result_size);
1448 }
1449 }
1450
1451 result[input_index++] = '\0';
1452 return result;
1453}
1454
1455/* Variables which control command line editing and history
1456 substitution. These variables are given default values at the end
1457 of this file. */
1458static int command_editing_p;
1459static int history_expansion_p;
1460static int write_history_p;
1461static int history_size;
1462static char *history_filename;
1463
1464/* readline uses the word breaks for two things:
1465 (1) In figuring out where to point the TEXT parameter to the
1466 rl_completion_entry_function. Since we don't use TEXT for much,
1467 it doesn't matter a lot what the word breaks are for this purpose, but
1468 it does affect how much stuff M-? lists.
1469 (2) If one of the matches contains a word break character, readline
1470 will quote it. That's why we switch between
1471 gdb_completer_word_break_characters and
1472 gdb_completer_command_word_break_characters. I'm not sure when
1473 we need this behavior (perhaps for funky characters in C++ symbols?). */
1474
1475/* Variables which are necessary for fancy command line editing. */
1476char *gdb_completer_word_break_characters =
1477 " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,-";
1478
1479/* When completing on command names, we remove '-' from the list of
1480 word break characters, since we use it in command names. If the
1481 readline library sees one in any of the current completion strings,
1482 it thinks that the string needs to be quoted and automatically supplies
1483 a leading quote. */
1484char *gdb_completer_command_word_break_characters =
1485 " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,";
1486
1487/* Characters that can be used to quote completion strings. Note that we
1488 can't include '"' because the gdb C parser treats such quoted sequences
1489 as strings. */
1490char *gdb_completer_quote_characters =
1491 "'";
1492
1493/* Functions that are used as part of the fancy command line editing. */
1494
1495/* This can be used for functions which don't want to complete on symbols
1496 but don't want to complete on anything else either. */
1497/* ARGSUSED */
1498char **
1499noop_completer (text, prefix)
1500 char *text;
1501 char *prefix;
1502{
1503 return NULL;
1504}
1505
1506/* Complete on filenames. */
1507char **
1508filename_completer (text, word)
1509 char *text;
1510 char *word;
1511{
1512 /* From readline. */
3f550b59 1513 extern char *filename_completion_function PARAMS ((char *, int));
172559ec
JK
1514 int subsequent_name;
1515 char **return_val;
1516 int return_val_used;
1517 int return_val_alloced;
1518
1519 return_val_used = 0;
1520 /* Small for testing. */
1521 return_val_alloced = 1;
1522 return_val = (char **) xmalloc (return_val_alloced * sizeof (char *));
1523
1524 subsequent_name = 0;
1525 while (1)
1526 {
1527 char *p;
1528 p = filename_completion_function (text, subsequent_name);
1529 if (return_val_used >= return_val_alloced)
1530 {
1531 return_val_alloced *= 2;
1532 return_val =
1533 (char **) xrealloc (return_val,
1534 return_val_alloced * sizeof (char *));
1535 }
1536 if (p == NULL)
1537 {
1538 return_val[return_val_used++] = p;
1539 break;
1540 }
1541 /* Like emacs, don't complete on old versions. Especially useful
1542 in the "source" command. */
1543 if (p[strlen (p) - 1] == '~')
1544 continue;
1545
1546 {
1547 char *q;
1548 if (word == text)
1549 /* Return exactly p. */
1550 return_val[return_val_used++] = p;
1551 else if (word > text)
1552 {
1553 /* Return some portion of p. */
1554 q = xmalloc (strlen (p) + 5);
1555 strcpy (q, p + (word - text));
1556 return_val[return_val_used++] = q;
1557 free (p);
1558 }
1559 else
1560 {
1561 /* Return some of TEXT plus p. */
1562 q = xmalloc (strlen (p) + (text - word) + 5);
1563 strncpy (q, word, text - word);
1564 q[text - word] = '\0';
1565 strcat (q, p);
1566 return_val[return_val_used++] = q;
1567 free (p);
1568 }
1569 }
1570 subsequent_name = 1;
1571 }
1572#if 0
1573 /* There is no way to do this just long enough to affect quote inserting
1574 without also affecting the next completion. This should be fixed in
1575 readline. FIXME. */
1576 /* Insure that readline does the right thing
1577 with respect to inserting quotes. */
1578 rl_completer_word_break_characters = "";
1579#endif
1580 return return_val;
1581}
1582
1583/* Here are some useful test cases for completion. FIXME: These should
1584 be put in the test suite. They should be tested with both M-? and TAB.
1585
1586 "show output-" "radix"
1587 "show output" "-radix"
1588 "p" ambiguous (commands starting with p--path, print, printf, etc.)
1589 "p " ambiguous (all symbols)
1590 "info t foo" no completions
1591 "info t " no completions
1592 "info t" ambiguous ("info target", "info terminal", etc.)
1593 "info ajksdlfk" no completions
1594 "info ajksdlfk " no completions
1595 "info" " "
1596 "info " ambiguous (all info commands)
1597 "p \"a" no completions (string constant)
1598 "p 'a" ambiguous (all symbols starting with a)
1599 "p b-a" ambiguous (all symbols starting with a)
1600 "p b-" ambiguous (all symbols)
1601 "file Make" "file" (word break hard to screw up here)
1602 "file ../gdb.stabs/we" "ird" (needs to not break word at slash)
1603 */
1604
1605/* Generate completions one by one for the completer. Each time we are
9ed8604f
PS
1606 called return another potential completion to the caller.
1607 line_completion just completes on commands or passes the buck to the
1608 command's completer function, the stuff specific to symbol completion
172559ec
JK
1609 is in make_symbol_completion_list.
1610
9ed8604f 1611 TEXT is the caller's idea of the "word" we are looking at.
172559ec
JK
1612
1613 MATCHES is the number of matches that have currently been collected from
1614 calling this completion function. When zero, then we need to initialize,
1615 otherwise the initialization has already taken place and we can just
1616 return the next potential completion string.
1617
9ed8604f
PS
1618 LINE_BUFFER is available to be looked at; it contains the entire text
1619 of the line. POINT is the offset in that line of the cursor. You
1620 should pretend that the line ends at POINT.
172559ec 1621
9ed8604f
PS
1622 Returns NULL if there are no more completions, else a pointer to a string
1623 which is a possible completion, it is the caller's responsibility to
1624 free the string. */
172559ec
JK
1625
1626static char *
9ed8604f 1627line_completion_function (text, matches, line_buffer, point)
172559ec
JK
1628 char *text;
1629 int matches;
9ed8604f
PS
1630 char *line_buffer;
1631 int point;
172559ec
JK
1632{
1633 static char **list = (char **)NULL; /* Cache of completions */
1634 static int index; /* Next cached completion */
1635 char *output = NULL;
1636 char *tmp_command, *p;
1637 /* Pointer within tmp_command which corresponds to text. */
1638 char *word;
1639 struct cmd_list_element *c, *result_list;
1640
1641 if (matches == 0)
1642 {
1643 /* The caller is beginning to accumulate a new set of completions, so
1644 we need to find all of them now, and cache them for returning one at
1645 a time on future calls. */
1646
1647 if (list)
1648 {
1649 /* Free the storage used by LIST, but not by the strings inside.
1650 This is because rl_complete_internal () frees the strings. */
1651 free ((PTR)list);
1652 }
1653 list = 0;
1654 index = 0;
1655
1656 /* Choose the default set of word break characters to break completions.
1657 If we later find out that we are doing completions on command strings
1658 (as opposed to strings supplied by the individual command completer
1659 functions, which can be any string) then we will switch to the
1660 special word break set for command strings, which leaves out the
1661 '-' character used in some commands. */
1662
1663 rl_completer_word_break_characters =
1664 gdb_completer_word_break_characters;
1665
1666 /* Decide whether to complete on a list of gdb commands or on symbols. */
9ed8604f 1667 tmp_command = (char *) alloca (point + 1);
172559ec
JK
1668 p = tmp_command;
1669
9ed8604f
PS
1670 strncpy (tmp_command, line_buffer, point);
1671 tmp_command[point] = '\0';
172559ec 1672 /* Since text always contains some number of characters leading up
9ed8604f 1673 to point, we can find the equivalent position in tmp_command
172559ec 1674 by subtracting that many characters from the end of tmp_command. */
9ed8604f 1675 word = tmp_command + point - strlen (text);
172559ec 1676
9ed8604f 1677 if (point == 0)
172559ec
JK
1678 {
1679 /* An empty line we want to consider ambiguous; that is, it
1680 could be any command. */
1681 c = (struct cmd_list_element *) -1;
1682 result_list = 0;
1683 }
1684 else
1685 {
1686 c = lookup_cmd_1 (&p, cmdlist, &result_list, 1);
1687 }
1688
1689 /* Move p up to the next interesting thing. */
1690 while (*p == ' ' || *p == '\t')
1691 {
1692 p++;
1693 }
1694
1695 if (!c)
1696 {
1697 /* It is an unrecognized command. So there are no
1698 possible completions. */
1699 list = NULL;
1700 }
1701 else if (c == (struct cmd_list_element *) -1)
1702 {
1703 char *q;
1704
1705 /* lookup_cmd_1 advances p up to the first ambiguous thing, but
1706 doesn't advance over that thing itself. Do so now. */
1707 q = p;
1708 while (*q && (isalnum (*q) || *q == '-' || *q == '_'))
1709 ++q;
9ed8604f 1710 if (q != tmp_command + point)
172559ec
JK
1711 {
1712 /* There is something beyond the ambiguous
1713 command, so there are no possible completions. For
1714 example, "info t " or "info t foo" does not complete
1715 to anything, because "info t" can be "info target" or
1716 "info terminal". */
1717 list = NULL;
1718 }
1719 else
1720 {
1721 /* We're trying to complete on the command which was ambiguous.
1722 This we can deal with. */
1723 if (result_list)
1724 {
1725 list = complete_on_cmdlist (*result_list->prefixlist, p,
1726 word);
1727 }
1728 else
1729 {
1730 list = complete_on_cmdlist (cmdlist, p, word);
1731 }
1732 /* Insure that readline does the right thing with respect to
1733 inserting quotes. */
1734 rl_completer_word_break_characters =
1735 gdb_completer_command_word_break_characters;
1736 }
1737 }
1738 else
1739 {
1740 /* We've recognized a full command. */
1741
9ed8604f 1742 if (p == tmp_command + point)
172559ec
JK
1743 {
1744 /* There is no non-whitespace in the line beyond the command. */
1745
1746 if (p[-1] == ' ' || p[-1] == '\t')
1747 {
1748 /* The command is followed by whitespace; we need to complete
1749 on whatever comes after command. */
1750 if (c->prefixlist)
1751 {
1752 /* It is a prefix command; what comes after it is
1753 a subcommand (e.g. "info "). */
1754 list = complete_on_cmdlist (*c->prefixlist, p, word);
1755
1756 /* Insure that readline does the right thing
1757 with respect to inserting quotes. */
1758 rl_completer_word_break_characters =
1759 gdb_completer_command_word_break_characters;
1760 }
09374c98
SG
1761 else if (c->enums)
1762 {
1763 list = complete_on_enum (c->enums, p, word);
1764 rl_completer_word_break_characters =
1765 gdb_completer_command_word_break_characters;
1766 }
172559ec
JK
1767 else
1768 {
1769 /* It is a normal command; what comes after it is
1770 completed by the command's completer function. */
1771 list = (*c->completer) (p, word);
1772 }
1773 }
1774 else
1775 {
1776 /* The command is not followed by whitespace; we need to
1777 complete on the command itself. e.g. "p" which is a
1778 command itself but also can complete to "print", "ptype"
1779 etc. */
1780 char *q;
1781
1782 /* Find the command we are completing on. */
1783 q = p;
1784 while (q > tmp_command)
1785 {
1786 if (isalnum (q[-1]) || q[-1] == '-' || q[-1] == '_')
1787 --q;
1788 else
1789 break;
1790 }
1791
1792 list = complete_on_cmdlist (result_list, q, word);
1793
1794 /* Insure that readline does the right thing
1795 with respect to inserting quotes. */
1796 rl_completer_word_break_characters =
1797 gdb_completer_command_word_break_characters;
1798 }
1799 }
1800 else
1801 {
1802 /* There is non-whitespace beyond the command. */
1803
1804 if (c->prefixlist && !c->allow_unknown)
1805 {
1806 /* It is an unrecognized subcommand of a prefix command,
1807 e.g. "info adsfkdj". */
1808 list = NULL;
1809 }
09374c98
SG
1810 else if (c->enums)
1811 {
1812 list = complete_on_enum (c->enums, p, word);
1813 }
172559ec
JK
1814 else
1815 {
1816 /* It is a normal command. */
1817 list = (*c->completer) (p, word);
1818 }
1819 }
1820 }
1821 }
1822
1823 /* If we found a list of potential completions during initialization then
1824 dole them out one at a time. The vector of completions is NULL
1825 terminated, so after returning the last one, return NULL (and continue
1826 to do so) each time we are called after that, until a new list is
1827 available. */
1828
1829 if (list)
1830 {
1831 output = list[index];
1832 if (output)
1833 {
1834 index++;
1835 }
1836 }
1837
1838#if 0
1839 /* Can't do this because readline hasn't yet checked the word breaks
1840 for figuring out whether to insert a quote. */
1841 if (output == NULL)
1842 /* Make sure the word break characters are set back to normal for the
1843 next time that readline tries to complete something. */
1844 rl_completer_word_break_characters =
1845 gdb_completer_word_break_characters;
1846#endif
1847
1848 return (output);
1849}
1850
9ed8604f
PS
1851/* Line completion interface function for readline. */
1852
1853static char *
1854readline_line_completion_function (text, matches)
1855 char *text;
1856 int matches;
1857{
1858 return line_completion_function (text, matches, rl_line_buffer, rl_point);
1859}
1860
172559ec
JK
1861/* Skip over a possibly quoted word (as defined by the quote characters
1862 and word break characters the completer uses). Returns pointer to the
1863 location after the "word". */
1864
1865char *
1866skip_quoted (str)
1867 char *str;
1868{
1869 char quote_char = '\0';
1870 char *scan;
1871
1872 for (scan = str; *scan != '\0'; scan++)
1873 {
1874 if (quote_char != '\0')
1875 {
1876 /* Ignore everything until the matching close quote char */
1877 if (*scan == quote_char)
1878 {
1879 /* Found matching close quote. */
1880 scan++;
1881 break;
1882 }
1883 }
1884 else if (strchr (gdb_completer_quote_characters, *scan))
1885 {
1886 /* Found start of a quoted string. */
1887 quote_char = *scan;
1888 }
1889 else if (strchr (gdb_completer_word_break_characters, *scan))
1890 {
1891 break;
1892 }
1893 }
1894 return (scan);
1895}
1896
1897\f
1898#ifdef STOP_SIGNAL
1899static void
1900stop_sig (signo)
1901int signo;
1902{
1903#if STOP_SIGNAL == SIGTSTP
1904 signal (SIGTSTP, SIG_DFL);
1905 sigsetmask (0);
1906 kill (getpid (), SIGTSTP);
1907 signal (SIGTSTP, stop_sig);
1908#else
1909 signal (STOP_SIGNAL, stop_sig);
1910#endif
1911 printf_unfiltered ("%s", prompt);
1912 gdb_flush (gdb_stdout);
1913
1914 /* Forget about any previous command -- null line now will do nothing. */
1915 dont_repeat ();
1916}
1917#endif /* STOP_SIGNAL */
1918
1919/* Initialize signal handlers. */
1920static void
1921do_nothing (signo)
1922int signo;
1923{
8d743926
JM
1924 /* Under System V the default disposition of a signal is reinstated after
1925 the signal is caught and delivered to an application process. On such
1926 systems one must restore the replacement signal handler if one wishes
1927 to continue handling the signal in one's program. On BSD systems this
1928 is not needed but it is harmless, and it simplifies the code to just do
1929 it unconditionally. */
1930 signal (signo, do_nothing);
172559ec
JK
1931}
1932
1933static void
1934init_signals ()
1935{
1936 signal (SIGINT, request_quit);
1937
255181a9
PS
1938 /* If SIGTRAP was set to SIG_IGN, then the SIG_IGN will get passed
1939 to the inferior and breakpoints will be ignored. */
1940#ifdef SIGTRAP
1941 signal (SIGTRAP, SIG_DFL);
1942#endif
1943
172559ec
JK
1944 /* If we initialize SIGQUIT to SIG_IGN, then the SIG_IGN will get
1945 passed to the inferior, which we don't want. It would be
1946 possible to do a "signal (SIGQUIT, SIG_DFL)" after we fork, but
1947 on BSD4.3 systems using vfork, that can affect the
1948 GDB process as well as the inferior (the signal handling tables
1949 might be in memory, shared between the two). Since we establish
1950 a handler for SIGQUIT, when we call exec it will set the signal
1951 to SIG_DFL for us. */
1952 signal (SIGQUIT, do_nothing);
4ce7ba51 1953#ifdef SIGHUP
172559ec
JK
1954 if (signal (SIGHUP, do_nothing) != SIG_IGN)
1955 signal (SIGHUP, disconnect);
4ce7ba51 1956#endif
172559ec
JK
1957 signal (SIGFPE, float_handler);
1958
1959#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
1960 signal (SIGWINCH, SIGWINCH_HANDLER);
1961#endif
1962}
1963\f
1964/* Read one line from the command input stream `instream'
1965 into the local static buffer `linebuffer' (whose current length
1966 is `linelength').
1967 The buffer is made bigger as necessary.
1968 Returns the address of the start of the line.
1969
1970 NULL is returned for end of file.
1971
1972 *If* the instream == stdin & stdin is a terminal, the line read
1973 is copied into the file line saver (global var char *line,
1974 length linesize) so that it can be duplicated.
1975
1976 This routine either uses fancy command line editing or
1977 simple input as the user has requested. */
1978
1979char *
1980command_line_input (prrompt, repeat, annotation_suffix)
1981 char *prrompt;
1982 int repeat;
1983 char *annotation_suffix;
1984{
1985 static char *linebuffer = 0;
1986 static unsigned linelength = 0;
1987 register char *p;
1988 char *p1;
1989 char *rl;
1990 char *local_prompt = prrompt;
172559ec
JK
1991 char *nline;
1992 char got_eof = 0;
1993
dfb14bc8
SS
1994 /* The annotation suffix must be non-NULL. */
1995 if (annotation_suffix == NULL)
1996 annotation_suffix = "";
1997
172559ec
JK
1998 if (annotation_level > 1 && instream == stdin)
1999 {
2000 local_prompt = alloca ((prrompt == NULL ? 0 : strlen (prrompt))
2001 + strlen (annotation_suffix) + 40);
2002 if (prrompt == NULL)
2003 local_prompt[0] = '\0';
2004 else
2005 strcpy (local_prompt, prrompt);
2006 strcat (local_prompt, "\n\032\032");
2007 strcat (local_prompt, annotation_suffix);
2008 strcat (local_prompt, "\n");
2009 }
2010
2011 if (linebuffer == 0)
2012 {
2013 linelength = 80;
2014 linebuffer = (char *) xmalloc (linelength);
2015 }
2016
2017 p = linebuffer;
2018
2019 /* Control-C quits instantly if typed while in this loop
2020 since it should not wait until the user types a newline. */
2021 immediate_quit++;
2022#ifdef STOP_SIGNAL
2023 if (job_control)
2024 signal (STOP_SIGNAL, stop_sig);
2025#endif
2026
2027 while (1)
2028 {
2029 /* Make sure that all output has been output. Some machines may let
2030 you get away with leaving out some of the gdb_flush, but not all. */
2031 wrap_here ("");
2032 gdb_flush (gdb_stdout);
2033 gdb_flush (gdb_stderr);
2034
2035 if (source_file_name != NULL)
2036 {
2037 ++source_line_number;
2038 sprintf (source_error,
2039 "%s%s:%d: Error in sourced command file:\n",
2040 source_pre_error,
2041 source_file_name,
2042 source_line_number);
2043 error_pre_print = source_error;
2044 }
2045
2046 if (annotation_level > 1 && instream == stdin)
2047 {
2048 printf_unfiltered ("\n\032\032pre-");
2049 printf_unfiltered (annotation_suffix);
2050 printf_unfiltered ("\n");
2051 }
2052
2053 /* Don't use fancy stuff if not talking to stdin. */
41756e56
FF
2054 if (readline_hook && instream == NULL)
2055 {
2056 rl = (*readline_hook) (local_prompt);
2057 }
2058 else if (command_editing_p && instream == stdin && ISATTY (instream))
2059 {
2060 rl = readline (local_prompt);
2061 }
172559ec 2062 else
41756e56
FF
2063 {
2064 rl = gdb_readline (local_prompt);
2065 }
172559ec
JK
2066
2067 if (annotation_level > 1 && instream == stdin)
2068 {
2069 printf_unfiltered ("\n\032\032post-");
2070 printf_unfiltered (annotation_suffix);
2071 printf_unfiltered ("\n");
2072 }
2073
2074 if (!rl || rl == (char *) EOF)
2075 {
2076 got_eof = 1;
2077 break;
2078 }
2079 if (strlen(rl) + 1 + (p - linebuffer) > linelength)
2080 {
2081 linelength = strlen(rl) + 1 + (p - linebuffer);
2082 nline = (char *) xrealloc (linebuffer, linelength);
2083 p += nline - linebuffer;
2084 linebuffer = nline;
2085 }
2086 p1 = rl;
2087 /* Copy line. Don't copy null at end. (Leaves line alone
2088 if this was just a newline) */
2089 while (*p1)
2090 *p++ = *p1++;
2091
2092 free (rl); /* Allocated in readline. */
2093
2094 if (p == linebuffer || *(p - 1) != '\\')
2095 break;
2096
2097 p--; /* Put on top of '\'. */
2098 local_prompt = (char *) 0;
2099 }
2100
2101#ifdef STOP_SIGNAL
2102 if (job_control)
2103 signal (STOP_SIGNAL, SIG_DFL);
2104#endif
2105 immediate_quit--;
2106
2107 if (got_eof)
2108 return NULL;
2109
2110#define SERVER_COMMAND_LENGTH 7
2111 server_command =
2112 (p - linebuffer > SERVER_COMMAND_LENGTH)
2113 && STREQN (linebuffer, "server ", SERVER_COMMAND_LENGTH);
2114 if (server_command)
2115 {
2116 /* Note that we don't set `line'. Between this and the check in
2117 dont_repeat, this insures that repeating will still do the
2118 right thing. */
2119 *p = '\0';
2120 return linebuffer + SERVER_COMMAND_LENGTH;
2121 }
2122
2123 /* Do history expansion if that is wished. */
2124 if (history_expansion_p && instream == stdin
2125 && ISATTY (instream))
2126 {
2127 char *history_value;
2128 int expanded;
2129
2130 *p = '\0'; /* Insert null now. */
2131 expanded = history_expand (linebuffer, &history_value);
2132 if (expanded)
2133 {
2134 /* Print the changes. */
2135 printf_unfiltered ("%s\n", history_value);
2136
2137 /* If there was an error, call this function again. */
2138 if (expanded < 0)
2139 {
2140 free (history_value);
2141 return command_line_input (prrompt, repeat, annotation_suffix);
2142 }
2143 if (strlen (history_value) > linelength)
2144 {
2145 linelength = strlen (history_value) + 1;
2146 linebuffer = (char *) xrealloc (linebuffer, linelength);
2147 }
2148 strcpy (linebuffer, history_value);
2149 p = linebuffer + strlen(linebuffer);
2150 free (history_value);
2151 }
2152 }
2153
2154 /* If we just got an empty line, and that is supposed
2155 to repeat the previous command, return the value in the
2156 global buffer. */
f2ed3a80
PB
2157 if (repeat && p == linebuffer)
2158 return line;
2159 for (p1 = linebuffer; *p1 == ' ' || *p1 == '\t'; p1++) ;
2160 if (repeat && !*p1)
2161 return line;
172559ec
JK
2162
2163 *p = 0;
2164
2165 /* Add line to history if appropriate. */
2166 if (instream == stdin
2167 && ISATTY (stdin) && *linebuffer)
2168 add_history (linebuffer);
2169
2170 /* Note: lines consisting solely of comments are added to the command
2171 history. This is useful when you type a command, and then
2172 realize you don't want to execute it quite yet. You can comment
2173 out the command and then later fetch it from the value history
2174 and remove the '#'. The kill ring is probably better, but some
2175 people are in the habit of commenting things out. */
f2ed3a80
PB
2176 if (*p1 == '#')
2177 *p1 = '\0'; /* Found a comment. */
172559ec
JK
2178
2179 /* Save into global buffer if appropriate. */
2180 if (repeat)
2181 {
2182 if (linelength > linesize)
2183 {
2184 line = xrealloc (line, linelength);
2185 linesize = linelength;
2186 }
2187 strcpy (line, linebuffer);
2188 return line;
2189 }
2190
2191 return linebuffer;
2192}
2193\f
e52bfe0c
JL
2194
2195/* Expand the body_list of COMMAND so that it can hold NEW_LENGTH
2196 code bodies. This is typically used when we encounter an "else"
2197 clause for an "if" command. */
2198
2199static void
2200realloc_body_list (command, new_length)
2201 struct command_line *command;
2202 int new_length;
2203{
2204 int n;
2205 struct command_line **body_list;
2206
2207 n = command->body_count;
2208
2209 /* Nothing to do? */
2210 if (new_length <= n)
2211 return;
2212
2213 body_list = (struct command_line **)
2214 xmalloc (sizeof (struct command_line *) * new_length);
2215
2216 memcpy (body_list, command->body_list, sizeof (struct command_line *) * n);
2217
2218 free (command->body_list);
2219 command->body_list = body_list;
2220 command->body_count = new_length;
2221}
2222
2223/* Read one line from the input stream. If the command is an "else" or
2224 "end", return such an indication to the caller. */
2225
2226static enum misc_command_type
2227read_next_line (command)
2228 struct command_line **command;
2229{
2230 char *p, *p1, *prompt_ptr, control_prompt[256];
2231 int i = 0;
2232
2233 if (control_level >= 254)
2234 error ("Control nesting too deep!\n");
2235
2236 /* Set a prompt based on the nesting of the control commands. */
41756e56 2237 if (instream == stdin || (instream == 0 && readline_hook != NULL))
e52bfe0c
JL
2238 {
2239 for (i = 0; i < control_level; i++)
2240 control_prompt[i] = ' ';
2241 control_prompt[i] = '>';
2242 control_prompt[i+1] = '\0';
2243 prompt_ptr = (char *)&control_prompt[0];
2244 }
2245 else
2246 prompt_ptr = NULL;
2247
e04f8901 2248 p = command_line_input (prompt_ptr, instream == stdin, "commands");
e52bfe0c
JL
2249
2250 /* Not sure what to do here. */
2251 if (p == NULL)
2252 return end_command;
2253
2254 /* Strip leading and trailing whitespace. */
2255 while (*p == ' ' || *p == '\t')
2256 p++;
2257
2258 p1 = p + strlen (p);
2259 while (p1 != p && (p1[-1] == ' ' || p1[-1] == '\t'))
2260 p1--;
2261
2262 /* Blanks and comments don't really do anything, but we need to
2263 distinguish them from else, end and other commands which can be
2264 executed. */
2265 if (p1 == p || p[0] == '#')
2266 return nop_command;
2267
2268 /* Is this the end of a simple, while, or if control structure? */
2269 if (p1 - p == 3 && !strncmp (p, "end", 3))
2270 return end_command;
2271
2272 /* Is the else clause of an if control structure? */
2273 if (p1 - p == 4 && !strncmp (p, "else", 4))
2274 return else_command;
2275
2276 /* Check for while, if, break, continue, etc and build a new command
2277 line structure for them. */
2278 if (p1 - p > 5 && !strncmp (p, "while", 5))
2279 *command = build_command_line (while_control, p + 6);
2280 else if (p1 - p > 2 && !strncmp (p, "if", 2))
2281 *command = build_command_line (if_control, p + 3);
ecebd693 2282 else if (p1 - p == 10 && !strncmp (p, "loop_break", 10))
e52bfe0c
JL
2283 {
2284 *command = (struct command_line *)
2285 xmalloc (sizeof (struct command_line));
2286 (*command)->next = NULL;
2287 (*command)->line = NULL;
2288 (*command)->control_type = break_control;
2289 (*command)->body_count = 0;
2290 (*command)->body_list = NULL;
2291 }
ecebd693 2292 else if (p1 - p == 13 && !strncmp (p, "loop_continue", 13))
e52bfe0c
JL
2293 {
2294 *command = (struct command_line *)
2295 xmalloc (sizeof (struct command_line));
2296 (*command)->next = NULL;
2297 (*command)->line = NULL;
2298 (*command)->control_type = continue_control;
2299 (*command)->body_count = 0;
2300 (*command)->body_list = NULL;
2301 }
2302 else
2303 {
2304 /* A normal command. */
2305 *command = (struct command_line *)
2306 xmalloc (sizeof (struct command_line));
2307 (*command)->next = NULL;
2308 (*command)->line = savestring (p, p1 - p);
2309 (*command)->control_type = simple_control;
2310 (*command)->body_count = 0;
2311 (*command)->body_list = NULL;
2312 }
2313
2314 /* Nothing special. */
2315 return ok_command;
2316}
2317
2318/* Recursively read in the control structures and create a command_line
41756e56 2319 structure from them.
e52bfe0c
JL
2320
2321 The parent_control parameter is the control structure in which the
2322 following commands are nested. */
2323
2324static enum command_control_type
2325recurse_read_control_structure (current_cmd)
2326 struct command_line *current_cmd;
2327{
2328 int current_body, i;
2329 enum misc_command_type val;
2330 enum command_control_type ret;
2331 struct command_line **body_ptr, *child_tail, *next;
e52bfe0c 2332
e52bfe0c
JL
2333 child_tail = NULL;
2334 current_body = 1;
2335
2336 /* Sanity checks. */
2337 if (current_cmd->control_type == simple_control)
2338 {
2339 error ("Recursed on a simple control type\n");
2340 return invalid_control;
2341 }
2342
2343 if (current_body > current_cmd->body_count)
2344 {
2345 error ("Allocated body is smaller than this command type needs\n");
2346 return invalid_control;
2347 }
2348
2349 /* Read lines from the input stream and build control structures. */
2350 while (1)
2351 {
2352 dont_repeat ();
2353
2354 next = NULL;
2355 val = read_next_line (&next);
2356
2357 /* Just skip blanks and comments. */
2358 if (val == nop_command)
2359 continue;
2360
2361 if (val == end_command)
2362 {
2363 if (current_cmd->control_type == while_control
2364 || current_cmd->control_type == if_control)
2365 {
2366 /* Success reading an entire control structure. */
2367 ret = simple_control;
2368 break;
2369 }
2370 else
2371 {
2372 ret = invalid_control;
2373 break;
2374 }
2375 }
2376
2377 /* Not the end of a control structure. */
2378 if (val == else_command)
2379 {
2380 if (current_cmd->control_type == if_control
2381 && current_body == 1)
2382 {
2383 realloc_body_list (current_cmd, 2);
2384 current_body = 2;
2385 child_tail = NULL;
2386 continue;
2387 }
2388 else
2389 {
2390 ret = invalid_control;
2391 break;
2392 }
2393 }
2394
2395 if (child_tail)
2396 {
2397 child_tail->next = next;
2398 }
2399 else
2400 {
e52bfe0c
JL
2401 body_ptr = current_cmd->body_list;
2402 for (i = 1; i < current_body; i++)
2403 body_ptr++;
2404
2405 *body_ptr = next;
2406
e52bfe0c
JL
2407 }
2408
2409 child_tail = next;
2410
2411 /* If the latest line is another control structure, then recurse
2412 on it. */
2413 if (next->control_type == while_control
2414 || next->control_type == if_control)
2415 {
2416 control_level++;
2417 ret = recurse_read_control_structure (next);
2418 control_level--;
2419
2420 if (ret != simple_control)
2421 break;
2422 }
2423 }
2424
2425 dont_repeat ();
e52bfe0c
JL
2426
2427 return ret;
2428}
2429
41756e56
FF
2430/* Read lines from the input stream and accumulate them in a chain of
2431 struct command_line's, which is then returned. For input from a
2432 terminal, the special command "end" is used to mark the end of the
2433 input, and is not included in the returned chain of commands. */
e52bfe0c 2434
41756e56 2435#define END_MESSAGE "End with a line saying just \"end\"."
172559ec
JK
2436
2437struct command_line *
41756e56
FF
2438read_command_lines (prompt, from_tty)
2439char *prompt;
2440int from_tty;
172559ec 2441{
e52bfe0c
JL
2442 struct command_line *head, *tail, *next;
2443 struct cleanup *old_chain;
2444 enum command_control_type ret;
2445 enum misc_command_type val;
2446
41756e56
FF
2447 if (readline_begin_hook)
2448 {
2449 /* Note - intentional to merge messages with no newline */
2450 (*readline_begin_hook) ("%s %s\n", prompt, END_MESSAGE);
2451 }
2452 else if (from_tty && input_from_terminal_p ())
2453 {
2454 printf_unfiltered ("%s\n%s\n", prompt, END_MESSAGE);
2455 gdb_flush (gdb_stdout);
2456 }
2457
e52bfe0c
JL
2458 head = tail = NULL;
2459 old_chain = NULL;
172559ec
JK
2460
2461 while (1)
2462 {
e52bfe0c 2463 val = read_next_line (&next);
172559ec 2464
e52bfe0c
JL
2465 /* Ignore blank lines or comments. */
2466 if (val == nop_command)
2467 continue;
2468
2469 if (val == end_command)
2470 {
2471 ret = simple_control;
2472 break;
2473 }
2474
2475 if (val != ok_command)
2476 {
2477 ret = invalid_control;
2478 break;
2479 }
2480
2481 if (next->control_type == while_control
2482 || next->control_type == if_control)
2483 {
2484 control_level++;
2485 ret = recurse_read_control_structure (next);
2486 control_level--;
172559ec 2487
e52bfe0c
JL
2488 if (ret == invalid_control)
2489 break;
2490 }
2491
172559ec
JK
2492 if (tail)
2493 {
2494 tail->next = next;
2495 }
2496 else
2497 {
e52bfe0c
JL
2498 head = next;
2499 old_chain = make_cleanup (free_command_lines, &head);
172559ec
JK
2500 }
2501 tail = next;
2502 }
2503
2504 dont_repeat ();
2505
e52bfe0c
JL
2506 if (head)
2507 {
2508 if (ret != invalid_control)
2509 {
2510 discard_cleanups (old_chain);
e52bfe0c
JL
2511 }
2512 else
2513 do_cleanups (old_chain);
2514 }
2515
41756e56
FF
2516 if (readline_end_hook)
2517 {
2518 (*readline_end_hook) ();
2519 }
2520 return (head);
172559ec
JK
2521}
2522
2523/* Free a chain of struct command_line's. */
2524
2525void
2526free_command_lines (lptr)
2527 struct command_line **lptr;
2528{
2529 register struct command_line *l = *lptr;
2530 register struct command_line *next;
e52bfe0c
JL
2531 struct command_line **blist;
2532 int i;
172559ec
JK
2533
2534 while (l)
2535 {
e52bfe0c
JL
2536 if (l->body_count > 0)
2537 {
2538 blist = l->body_list;
2539 for (i = 0; i < l->body_count; i++, blist++)
2540 free_command_lines (blist);
2541 }
172559ec
JK
2542 next = l->next;
2543 free (l->line);
2544 free ((PTR)l);
2545 l = next;
2546 }
2547}
2548\f
2549/* Add an element to the list of info subcommands. */
2550
2551void
2552add_info (name, fun, doc)
2553 char *name;
2554 void (*fun) PARAMS ((char *, int));
2555 char *doc;
2556{
2557 add_cmd (name, no_class, fun, doc, &infolist);
2558}
2559
2560/* Add an alias to the list of info subcommands. */
2561
2562void
2563add_info_alias (name, oldname, abbrev_flag)
2564 char *name;
2565 char *oldname;
2566 int abbrev_flag;
2567{
2568 add_alias_cmd (name, oldname, 0, abbrev_flag, &infolist);
2569}
2570
2571/* The "info" command is defined as a prefix, with allow_unknown = 0.
2572 Therefore, its own definition is called only for "info" with no args. */
2573
2574/* ARGSUSED */
2575static void
2576info_command (arg, from_tty)
2577 char *arg;
2578 int from_tty;
2579{
2580 printf_unfiltered ("\"info\" must be followed by the name of an info command.\n");
2581 help_list (infolist, "info ", -1, gdb_stdout);
2582}
2583
2584/* The "complete" command is used by Emacs to implement completion. */
2585
2586/* ARGSUSED */
2587static void
2588complete_command (arg, from_tty)
2589 char *arg;
2590 int from_tty;
2591{
2592 int i;
9ed8604f 2593 int argpoint;
172559ec
JK
2594 char *completion;
2595
2596 dont_repeat ();
2597
2598 if (arg == NULL)
9ed8604f
PS
2599 arg = "";
2600 argpoint = strlen (arg);
172559ec 2601
9ed8604f 2602 for (completion = line_completion_function (arg, i = 0, arg, argpoint);
172559ec 2603 completion;
9ed8604f
PS
2604 completion = line_completion_function (arg, ++i, arg, argpoint))
2605 {
2606 printf_unfiltered ("%s\n", completion);
2607 free (completion);
2608 }
172559ec
JK
2609}
2610
2611/* The "show" command with no arguments shows all the settings. */
2612
2613/* ARGSUSED */
2614static void
2615show_command (arg, from_tty)
2616 char *arg;
2617 int from_tty;
2618{
2619 cmd_show_list (showlist, from_tty, "");
2620}
2621\f
2622/* Add an element to the list of commands. */
2623
2624void
2625add_com (name, class, fun, doc)
2626 char *name;
2627 enum command_class class;
2628 void (*fun) PARAMS ((char *, int));
2629 char *doc;
2630{
2631 add_cmd (name, class, fun, doc, &cmdlist);
2632}
2633
2634/* Add an alias or abbreviation command to the list of commands. */
2635
2636void
2637add_com_alias (name, oldname, class, abbrev_flag)
2638 char *name;
2639 char *oldname;
2640 enum command_class class;
2641 int abbrev_flag;
2642{
2643 add_alias_cmd (name, oldname, class, abbrev_flag, &cmdlist);
2644}
2645
2646void
2647error_no_arg (why)
2648 char *why;
2649{
2650 error ("Argument required (%s).", why);
2651}
2652
2653/* ARGSUSED */
2654static void
2655help_command (command, from_tty)
2656 char *command;
2657 int from_tty; /* Ignored */
2658{
2659 help_cmd (command, gdb_stdout);
2660}
2661\f
2662static void
2663validate_comname (comname)
2664 char *comname;
2665{
2666 register char *p;
2667
2668 if (comname == 0)
2669 error_no_arg ("name of command to define");
2670
2671 p = comname;
2672 while (*p)
2673 {
080868b4 2674 if (!isalnum(*p) && *p != '-' && *p != '_')
172559ec
JK
2675 error ("Junk in argument list: \"%s\"", p);
2676 p++;
2677 }
2678}
2679
2680/* This is just a placeholder in the command data structures. */
2681static void
2682user_defined_command (ignore, from_tty)
2683 char *ignore;
2684 int from_tty;
2685{
2686}
2687
2688static void
2689define_command (comname, from_tty)
2690 char *comname;
2691 int from_tty;
2692{
2693 register struct command_line *cmds;
2694 register struct cmd_list_element *c, *newc, *hookc = 0;
2695 char *tem = comname;
41756e56 2696 char tmpbuf[128];
172559ec
JK
2697#define HOOK_STRING "hook-"
2698#define HOOK_LEN 5
2699
2700 validate_comname (comname);
2701
2702 /* Look it up, and verify that we got an exact match. */
2703 c = lookup_cmd (&tem, cmdlist, "", -1, 1);
2704 if (c && !STREQ (comname, c->name))
2705 c = 0;
e52bfe0c 2706
172559ec
JK
2707 if (c)
2708 {
2709 if (c->class == class_user || c->class == class_alias)
2710 tem = "Redefine command \"%s\"? ";
2711 else
2712 tem = "Really redefine built-in command \"%s\"? ";
2713 if (!query (tem, c->name))
2714 error ("Command \"%s\" not redefined.", c->name);
2715 }
2716
2717 /* If this new command is a hook, then mark the command which it
2718 is hooking. Note that we allow hooking `help' commands, so that
2719 we can hook the `stop' pseudo-command. */
2720
2721 if (!strncmp (comname, HOOK_STRING, HOOK_LEN))
2722 {
2723 /* Look up cmd it hooks, and verify that we got an exact match. */
2724 tem = comname+HOOK_LEN;
2725 hookc = lookup_cmd (&tem, cmdlist, "", -1, 0);
2726 if (hookc && !STREQ (comname+HOOK_LEN, hookc->name))
2727 hookc = 0;
2728 if (!hookc)
2729 {
2730 warning ("Your new `%s' command does not hook any existing command.",
2731 comname);
e3033bb0 2732 if (!query ("Proceed? "))
172559ec
JK
2733 error ("Not confirmed.");
2734 }
2735 }
2736
2737 comname = savestring (comname, strlen (comname));
2738
e52bfe0c 2739 /* If the rest of the commands will be case insensitive, this one
172559ec
JK
2740 should behave in the same manner. */
2741 for (tem = comname; *tem; tem++)
2742 if (isupper(*tem)) *tem = tolower(*tem);
2743
e52bfe0c 2744 control_level = 0;
41756e56
FF
2745 sprintf (tmpbuf, "Type commands for definition of \"%s\".", comname);
2746 cmds = read_command_lines (tmpbuf, from_tty);
172559ec
JK
2747
2748 if (c && c->class == class_user)
2749 free_command_lines (&c->user_commands);
2750
2751 newc = add_cmd (comname, class_user, user_defined_command,
2752 (c && c->class == class_user)
2753 ? c->doc : savestring ("User-defined.", 13), &cmdlist);
2754 newc->user_commands = cmds;
2755
2756 /* If this new command is a hook, then mark both commands as being
2757 tied. */
2758 if (hookc)
2759 {
2760 hookc->hook = newc; /* Target gets hooked. */
2761 newc->hookee = hookc; /* We are marked as hooking target cmd. */
2762 }
2763}
2764
2765static void
2766document_command (comname, from_tty)
2767 char *comname;
2768 int from_tty;
2769{
2770 struct command_line *doclines;
2771 register struct cmd_list_element *c;
2772 char *tem = comname;
41756e56 2773 char tmpbuf[128];
172559ec
JK
2774
2775 validate_comname (comname);
2776
2777 c = lookup_cmd (&tem, cmdlist, "", 0, 1);
2778
2779 if (c->class != class_user)
2780 error ("Command \"%s\" is built-in.", comname);
2781
41756e56
FF
2782 sprintf (tmpbuf, "Type documentation for \"%s\".", comname);
2783 doclines = read_command_lines (tmpbuf, from_tty);
172559ec
JK
2784
2785 if (c->doc) free (c->doc);
2786
2787 {
2788 register struct command_line *cl1;
2789 register int len = 0;
2790
2791 for (cl1 = doclines; cl1; cl1 = cl1->next)
2792 len += strlen (cl1->line) + 1;
2793
2794 c->doc = (char *) xmalloc (len + 1);
2795 *c->doc = 0;
2796
2797 for (cl1 = doclines; cl1; cl1 = cl1->next)
2798 {
2799 strcat (c->doc, cl1->line);
2800 if (cl1->next)
2801 strcat (c->doc, "\n");
2802 }
2803 }
2804
2805 free_command_lines (&doclines);
2806}
2807\f
172559ec
JK
2808void
2809print_gdb_version (stream)
2810 GDB_FILE *stream;
2811{
50140ab2
FF
2812 /* From GNU coding standards, first line is meant to be easy for a
2813 program to parse, and is just canonical program name and version
2814 number, which starts after last space. */
2815
2816 fprintf_filtered (stream, "GNU gdb %s\n", version);
2817
2818 /* Second line is a copyright notice. */
2819
bf9084c0 2820 fprintf_filtered (stream, "Copyright 1998 Free Software Foundation, Inc.\n");
50140ab2
FF
2821
2822 /* Following the copyright is a brief statement that the program is
2823 free software, that users are free to copy and change it on
2824 certain conditions, that it is covered by the GNU GPL, and that
2825 there is no warranty. */
2826
172559ec 2827 fprintf_filtered (stream, "\
50140ab2
FF
2828GDB is free software, covered by the GNU General Public License, and you are\n\
2829welcome to change it and/or distribute copies of it under certain conditions.\n\
59ae1b0f
SS
2830Type \"show copying\" to see the conditions.\n\
2831There is absolutely no warranty for GDB. Type \"show warranty\" for details.\n");
172559ec 2832
50140ab2 2833 /* After the required info we print the configuration information. */
172559ec 2834
50140ab2
FF
2835 fprintf_filtered (stream, "This GDB was configured as \"");
2836 if (!STREQ (host_name, target_name))
2837 {
2838 fprintf_filtered (stream, "--host=%s --target=%s", host_name, target_name);
2839 }
2840 else
2841 {
2842 fprintf_filtered (stream, "%s", host_name);
2843 }
2844 fprintf_filtered (stream, "\".");
172559ec
JK
2845}
2846
2847/* ARGSUSED */
2848static void
2849show_version (args, from_tty)
2850 char *args;
2851 int from_tty;
2852{
2853 immediate_quit++;
172559ec
JK
2854 print_gdb_version (gdb_stdout);
2855 printf_filtered ("\n");
2856 immediate_quit--;
2857}
2858\f
2859/* xgdb calls this to reprint the usual GDB prompt. Obsolete now that xgdb
2860 is obsolete. */
2861
2862void
2863print_prompt ()
2864{
2865 printf_unfiltered ("%s", prompt);
2866 gdb_flush (gdb_stdout);
2867}
018d76dd
KS
2868
2869/* This replaces the above for the frontends: it returns a pointer
2870 to the prompt. */
2871char *
2872get_prompt ()
2873{
2874 return prompt;
2875}
172559ec 2876\f
018d76dd
KS
2877/* If necessary, make the user confirm that we should quit. Return
2878 non-zero if we should quit, zero if we shouldn't. */
2879
2880int
2881quit_confirm ()
2882{
2883 if (inferior_pid != 0 && target_has_execution)
2884 {
2885 char *s;
2886
929db6e5
EZ
2887 /* This is something of a hack. But there's no reliable way to
2888 see if a GUI is running. The `use_windows' variable doesn't
2889 cut it. */
2890 if (init_ui_hook)
2891 s = "A debugging session is active.\nDo you still want to close the debugger?";
2892 else if (attach_flag)
018d76dd
KS
2893 s = "The program is running. Quit anyway (and detach it)? ";
2894 else
2895 s = "The program is running. Exit anyway? ";
2896
2897 if (! query (s))
2898 return 0;
2899 }
2900
2901 return 1;
2902}
2903
2904/* Quit without asking for confirmation. */
2905
172559ec 2906void
018d76dd 2907quit_force (args, from_tty)
172559ec
JK
2908 char *args;
2909 int from_tty;
2910{
641c7fdf
SS
2911 int exit_code = 0;
2912
2913 /* An optional expression may be used to cause gdb to terminate with the
2914 value of that expression. */
2915 if (args)
2916 {
2917 value_ptr val = parse_and_eval (args);
2918
2919 exit_code = (int) value_as_long (val);
2920 }
2921
172559ec
JK
2922 if (inferior_pid != 0 && target_has_execution)
2923 {
2924 if (attach_flag)
018d76dd 2925 target_detach (args, from_tty);
172559ec 2926 else
018d76dd 2927 target_kill ();
172559ec 2928 }
018d76dd 2929
172559ec
JK
2930 /* UDI wants this, to kill the TIP. */
2931 target_close (1);
2932
2933 /* Save the history information if it is appropriate to do so. */
2934 if (write_history_p && history_filename)
2935 write_history (history_filename);
2936
16a43bf4
DP
2937 do_final_cleanups(ALL_CLEANUPS); /* Do any final cleanups before exiting */
2938
641c7fdf 2939 exit (exit_code);
172559ec
JK
2940}
2941
018d76dd
KS
2942/* Handle the quit command. */
2943
2944void
2945quit_command (args, from_tty)
2946 char *args;
2947 int from_tty;
2948{
2949 if (! quit_confirm ())
2950 error ("Not confirmed.");
2951 quit_force (args, from_tty);
2952}
2953
172559ec
JK
2954/* Returns whether GDB is running on a terminal and whether the user
2955 desires that questions be asked of them on that terminal. */
2956
2957int
2958input_from_terminal_p ()
2959{
2960 return gdb_has_a_terminal () && (instream == stdin) & caution;
2961}
2962\f
2963/* ARGSUSED */
2964static void
2965pwd_command (args, from_tty)
2966 char *args;
2967 int from_tty;
2968{
2969 if (args) error ("The \"pwd\" command does not take an argument: %s", args);
b7ec5b8d 2970 getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
172559ec 2971
b7ec5b8d 2972 if (!STREQ (gdb_dirbuf, current_directory))
172559ec 2973 printf_unfiltered ("Working directory %s\n (canonically %s).\n",
b7ec5b8d 2974 current_directory, gdb_dirbuf);
172559ec
JK
2975 else
2976 printf_unfiltered ("Working directory %s.\n", current_directory);
2977}
2978
2979void
2980cd_command (dir, from_tty)
2981 char *dir;
2982 int from_tty;
2983{
2984 int len;
2985 /* Found something other than leading repetitions of "/..". */
2986 int found_real_path;
2987 char *p;
2988
2989 /* If the new directory is absolute, repeat is a no-op; if relative,
2990 repeat might be useful but is more likely to be a mistake. */
2991 dont_repeat ();
2992
2993 if (dir == 0)
2994 error_no_arg ("new working directory");
2995
2996 dir = tilde_expand (dir);
2997 make_cleanup (free, dir);
2998
2999 if (chdir (dir) < 0)
3000 perror_with_name (dir);
3001
3002 len = strlen (dir);
2e1cc801
SS
3003 dir = savestring (dir, len - (len > 1 && SLASH_P(dir[len-1])));
3004 if (ROOTED_P(dir))
172559ec
JK
3005 current_directory = dir;
3006 else
3007 {
2e1cc801 3008 if (SLASH_P (current_directory[0]) && current_directory[1] == '\0')
172559ec
JK
3009 current_directory = concat (current_directory, dir, NULL);
3010 else
2e1cc801 3011 current_directory = concat (current_directory, SLASH_STRING, dir, NULL);
172559ec
JK
3012 free (dir);
3013 }
3014
3015 /* Now simplify any occurrences of `.' and `..' in the pathname. */
3016
3017 found_real_path = 0;
3018 for (p = current_directory; *p;)
3019 {
2e1cc801 3020 if (SLASH_P (p[0]) && p[1] == '.' && (p[2] == 0 || SLASH_P (p[2])))
172559ec 3021 strcpy (p, p + 2);
2e1cc801
SS
3022 else if (SLASH_P (p[0]) && p[1] == '.' && p[2] == '.'
3023 && (p[3] == 0 || SLASH_P (p[3])))
172559ec
JK
3024 {
3025 if (found_real_path)
3026 {
3027 /* Search backwards for the directory just before the "/.."
3028 and obliterate it and the "/..". */
3029 char *q = p;
2e1cc801 3030 while (q != current_directory && ! SLASH_P (q[-1]))
172559ec
JK
3031 --q;
3032
3033 if (q == current_directory)
3034 /* current_directory is
3035 a relative pathname ("can't happen"--leave it alone). */
3036 ++p;
3037 else
3038 {
3039 strcpy (q - 1, p + 3);
3040 p = q - 1;
3041 }
3042 }
3043 else
3044 /* We are dealing with leading repetitions of "/..", for example
3045 "/../..", which is the Mach super-root. */
3046 p += 3;
3047 }
3048 else
3049 {
3050 found_real_path = 1;
3051 ++p;
3052 }
3053 }
3054
3055 forget_cached_source_info ();
3056
3057 if (from_tty)
3058 pwd_command ((char *) 0, 1);
3059}
3060\f
3061struct source_cleanup_lines_args {
3062 int old_line;
3063 char *old_file;
3064 char *old_pre_error;
3065 char *old_error_pre_print;
3066};
3067
3068static void
3069source_cleanup_lines (args)
3070 PTR args;
3071{
3072 struct source_cleanup_lines_args *p =
3073 (struct source_cleanup_lines_args *)args;
3074 source_line_number = p->old_line;
3075 source_file_name = p->old_file;
3076 source_pre_error = p->old_pre_error;
3077 error_pre_print = p->old_error_pre_print;
3078}
3079
3080/* ARGSUSED */
3081void
3082source_command (args, from_tty)
3083 char *args;
3084 int from_tty;
3085{
3086 FILE *stream;
3087 struct cleanup *old_cleanups;
3088 char *file = args;
3089 struct source_cleanup_lines_args old_lines;
3090 int needed_length;
3091
3092 if (file == NULL)
3093 {
3094 error ("source command requires pathname of file to source.");
3095 }
3096
3097 file = tilde_expand (file);
3098 old_cleanups = make_cleanup (free, file);
3099
3100 stream = fopen (file, FOPEN_RT);
9e77e83d
SG
3101 if (!stream)
3102 if (from_tty)
3103 perror_with_name (file);
3104 else
3105 return;
172559ec
JK
3106
3107 make_cleanup (fclose, stream);
3108
3109 old_lines.old_line = source_line_number;
3110 old_lines.old_file = source_file_name;
3111 old_lines.old_pre_error = source_pre_error;
3112 old_lines.old_error_pre_print = error_pre_print;
3113 make_cleanup (source_cleanup_lines, &old_lines);
3114 source_line_number = 0;
3115 source_file_name = file;
3116 source_pre_error = error_pre_print == NULL ? "" : error_pre_print;
3117 source_pre_error = savestring (source_pre_error, strlen (source_pre_error));
3118 make_cleanup (free, source_pre_error);
3119 /* This will get set every time we read a line. So it won't stay "" for
3120 long. */
3121 error_pre_print = "";
3122
3123 needed_length = strlen (source_file_name) + strlen (source_pre_error) + 80;
3124 if (source_error_allocated < needed_length)
3125 {
3126 source_error_allocated *= 2;
3127 if (source_error_allocated < needed_length)
3128 source_error_allocated = needed_length;
3129 if (source_error == NULL)
3130 source_error = xmalloc (source_error_allocated);
3131 else
3132 source_error = xrealloc (source_error, source_error_allocated);
3133 }
3134
3135 read_command_file (stream);
3136
3137 do_cleanups (old_cleanups);
3138}
3139
3140/* ARGSUSED */
3141static void
3142echo_command (text, from_tty)
3143 char *text;
3144 int from_tty;
3145{
3146 char *p = text;
3147 register int c;
3148
3149 if (text)
3150 while ((c = *p++) != '\0')
3151 {
3152 if (c == '\\')
3153 {
3154 /* \ at end of argument is used after spaces
3155 so they won't be lost. */
3156 if (*p == 0)
3157 return;
3158
3159 c = parse_escape (&p);
3160 if (c >= 0)
3161 printf_filtered ("%c", c);
3162 }
3163 else
3164 printf_filtered ("%c", c);
3165 }
3166
3167 /* Force this output to appear now. */
3168 wrap_here ("");
3169 gdb_flush (gdb_stdout);
3170}
3171
cd10c7e3
SG
3172/* ARGSUSED */
3173static void
3174dont_repeat_command (ignored, from_tty)
3175 char *ignored;
3176 int from_tty;
3177{
3178 *line = 0; /* Can't call dont_repeat here because we're not
3179 necessarily reading from stdin. */
3180}
b8176214 3181\f
b8176214
ILT
3182/* Functions to manipulate the endianness of the target. */
3183
95edd7c1 3184#ifdef TARGET_BYTE_ORDER_SELECTABLE
b8176214
ILT
3185#ifndef TARGET_BYTE_ORDER_DEFAULT
3186#define TARGET_BYTE_ORDER_DEFAULT BIG_ENDIAN
3187#endif
b8176214 3188int target_byte_order = TARGET_BYTE_ORDER_DEFAULT;
750b7942 3189int target_byte_order_auto = 1;
95edd7c1
AC
3190#else
3191static int target_byte_order_auto = 0;
3192#endif
b83ed019 3193
b8176214
ILT
3194/* Called if the user enters ``set endian'' without an argument. */
3195static void
3196set_endian (args, from_tty)
3197 char *args;
3198 int from_tty;
3199{
b83ed019 3200 printf_unfiltered ("\"set endian\" must be followed by \"auto\", \"big\" or \"little\".\n");
b8176214
ILT
3201 show_endian (args, from_tty);
3202}
3203
3204/* Called by ``set endian big''. */
3205static void
3206set_endian_big (args, from_tty)
3207 char *args;
3208 int from_tty;
3209{
95edd7c1 3210#ifdef TARGET_BYTE_ORDER_SELECTABLE
b8176214 3211 target_byte_order = BIG_ENDIAN;
b83ed019 3212 target_byte_order_auto = 0;
95edd7c1
AC
3213#else
3214 printf_unfiltered ("Byte order is not selectable.");
3215 show_endian (args, from_tty);
3216#endif
b8176214
ILT
3217}
3218
3219/* Called by ``set endian little''. */
3220static void
3221set_endian_little (args, from_tty)
3222 char *args;
3223 int from_tty;
3224{
95edd7c1 3225#ifdef TARGET_BYTE_ORDER_SELECTABLE
b8176214 3226 target_byte_order = LITTLE_ENDIAN;
b83ed019 3227 target_byte_order_auto = 0;
95edd7c1
AC
3228#else
3229 printf_unfiltered ("Byte order is not selectable.");
3230 show_endian (args, from_tty);
3231#endif
b83ed019
ILT
3232}
3233
3234/* Called by ``set endian auto''. */
3235static void
3236set_endian_auto (args, from_tty)
3237 char *args;
3238 int from_tty;
3239{
95edd7c1 3240#ifdef TARGET_BYTE_ORDER_SELECTABLE
b83ed019 3241 target_byte_order_auto = 1;
95edd7c1
AC
3242#else
3243 printf_unfiltered ("Byte order is not selectable.");
3244 show_endian (args, from_tty);
3245#endif
b8176214
ILT
3246}
3247
3248/* Called by ``show endian''. */
3249static void
3250show_endian (args, from_tty)
3251 char *args;
3252 int from_tty;
3253{
b83ed019
ILT
3254 const char *msg =
3255 (target_byte_order_auto
3256 ? "The target endianness is set automatically (currently %s endian)\n"
3257 : "The target is assumed to be %s endian\n");
032f80d8 3258 printf_unfiltered ((char *) msg, TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
b8176214
ILT
3259}
3260
b83ed019
ILT
3261/* Set the endianness from a BFD. */
3262void
3263set_endian_from_file (abfd)
3264 bfd *abfd;
3265{
3266#ifdef TARGET_BYTE_ORDER_SELECTABLE
3267 int want;
3268
3ecd62ca 3269 if (bfd_big_endian (abfd))
b83ed019
ILT
3270 want = BIG_ENDIAN;
3271 else
3272 want = LITTLE_ENDIAN;
3273 if (target_byte_order_auto)
3274 target_byte_order = want;
3275 else if (target_byte_order != want)
3276 warning ("%s endian file does not match %s endian target.",
3277 want == BIG_ENDIAN ? "big" : "little",
3278 TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
3279
3280#else /* ! defined (TARGET_BYTE_ORDER_SELECTABLE) */
3281
3ecd62ca 3282 if (bfd_big_endian (abfd)
b83ed019
ILT
3283 ? TARGET_BYTE_ORDER != BIG_ENDIAN
3284 : TARGET_BYTE_ORDER == BIG_ENDIAN)
3285 warning ("%s endian file does not match %s endian target.",
3ecd62ca 3286 bfd_big_endian (abfd) ? "big" : "little",
b83ed019
ILT
3287 TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
3288
3289#endif /* ! defined (TARGET_BYTE_ORDER_SELECTABLE) */
3290}
172559ec 3291\f
d0aba53f
AC
3292/* Functions to manipulate the architecture of the target */
3293
3294int target_architecture_auto = 1;
3295extern const bfd_arch_info_type bfd_default_arch_struct;
3296const bfd_arch_info_type *target_architecture = &bfd_default_arch_struct;
3297int (*target_architecture_hook) PARAMS ((const bfd_arch_info_type *ap));
3298
ee36741e
AC
3299static void
3300set_arch (arch)
3301 const bfd_arch_info_type *arch;
3302{
3303 /* FIXME: Is it compatible with gdb? */
3304 /* Check with the target on the setting */
3305 if (target_architecture_hook != NULL
3306 && !target_architecture_hook (arch))
3307 printf_unfiltered ("Target does not support `%s' architecture.\n",
3308 arch->printable_name);
3309 else
3310 {
3311 target_architecture_auto = 0;
3312 target_architecture = arch;
3313 }
3314}
3315
3316
3317/* Called if the user enters ``set architecture'' with or without an
3318 argument. */
3319static void
d0aba53f
AC
3320set_architecture (args, from_tty)
3321 char *args;
3322 int from_tty;
3323{
3324 if (args == NULL)
3325 {
3326 printf_unfiltered ("\"set architecture\" must be followed by \"auto\" or an architecture name.\n");
3327 }
3328 else if (strcmp (args, "auto") == 0)
3329 {
3330 target_architecture_auto = 1;
3331 }
3332 else
3333 {
3334 const bfd_arch_info_type *arch = bfd_scan_arch (args);
3335 if (arch != NULL)
ee36741e 3336 set_arch (arch);
d0aba53f 3337 else
ee36741e 3338 printf_unfiltered ("Architecture `%s' not reconized.\n", args);
d0aba53f
AC
3339 }
3340}
3341
3342/* Called if the user enters ``show architecture'' without an argument. */
3343static void
3344show_architecture (args, from_tty)
3345 char *args;
3346 int from_tty;
3347{
3348 const char *arch;
3349 arch = target_architecture->printable_name;
3350 if (target_architecture_auto)
3351 printf_filtered ("The target architecture is set automatically (currently %s)\n", arch);
3352 else
3353 printf_filtered ("The target architecture is assumed to be %s\n", arch);
3354}
3355
3356/* Called if the user enters ``info architecture'' without an argument. */
3357static void
3358info_architecture (args, from_tty)
3359 char *args;
3360 int from_tty;
3361{
3362 enum bfd_architecture a;
3363 printf_filtered ("Available architectures are:\n");
3364 for (a = bfd_arch_obscure + 1; a < bfd_arch_last; a++)
3365 {
3366 const bfd_arch_info_type *ap = bfd_lookup_arch (a, 0);
3367 if (ap != NULL)
3368 {
3369 do
3370 {
3371 printf_filtered (" %s", ap->printable_name);
3372 ap = ap->next;
3373 }
3374 while (ap != NULL);
3375 printf_filtered ("\n");
3376 }
3377 }
3378}
3379
ee36741e
AC
3380/* Set the architecture from arch/machine */
3381void
3382set_architecture_from_arch_mach (arch, mach)
3383 enum bfd_architecture arch;
3384 unsigned long mach;
3385{
3386 const bfd_arch_info_type *wanted = bfd_lookup_arch (arch, mach);
3387 if (wanted != NULL)
3388 set_arch (wanted);
3389 else
3390 fatal ("hardwired architecture/machine not reconized");
3391}
3392
3393
d0aba53f
AC
3394/* Set the architecture from a BFD */
3395void
3396set_architecture_from_file (abfd)
3397 bfd *abfd;
3398{
3399 const bfd_arch_info_type *wanted = bfd_get_arch_info (abfd);
3400 if (target_architecture_auto)
3401 {
3402 if (target_architecture_hook != NULL
3403 && !target_architecture_hook (wanted))
3404 warning ("Target may not support %s architecture",
3405 wanted->printable_name);
3406 target_architecture = wanted;
3407 }
3408 else if (wanted != target_architecture)
3409 {
3410 warning ("%s architecture file may be incompatible with %s target.",
3411 wanted->printable_name,
3412 target_architecture->printable_name);
3413 }
3414}
3415\f
172559ec
JK
3416/* Functions to manipulate command line editing control variables. */
3417
3418/* Number of commands to print in each call to show_commands. */
3419#define Hist_print 10
3420static void
3421show_commands (args, from_tty)
3422 char *args;
3423 int from_tty;
3424{
3425 /* Index for history commands. Relative to history_base. */
3426 int offset;
3427
3428 /* Number of the history entry which we are planning to display next.
3429 Relative to history_base. */
3430 static int num = 0;
3431
3432 /* The first command in the history which doesn't exist (i.e. one more
3433 than the number of the last command). Relative to history_base. */
3434 int hist_len;
3435
3436 extern HIST_ENTRY *history_get PARAMS ((int));
3437
3438 /* Print out some of the commands from the command history. */
3439 /* First determine the length of the history list. */
3440 hist_len = history_size;
3441 for (offset = 0; offset < history_size; offset++)
3442 {
3443 if (!history_get (history_base + offset))
3444 {
3445 hist_len = offset;
3446 break;
3447 }
3448 }
3449
3450 if (args)
3451 {
3452 if (args[0] == '+' && args[1] == '\0')
3453 /* "info editing +" should print from the stored position. */
3454 ;
3455 else
3456 /* "info editing <exp>" should print around command number <exp>. */
3457 num = (parse_and_eval_address (args) - history_base) - Hist_print / 2;
3458 }
3459 /* "show commands" means print the last Hist_print commands. */
3460 else
3461 {
3462 num = hist_len - Hist_print;
3463 }
3464
3465 if (num < 0)
3466 num = 0;
3467
3468 /* If there are at least Hist_print commands, we want to display the last
3469 Hist_print rather than, say, the last 6. */
3470 if (hist_len - num < Hist_print)
3471 {
3472 num = hist_len - Hist_print;
3473 if (num < 0)
3474 num = 0;
3475 }
3476
3477 for (offset = num; offset < num + Hist_print && offset < hist_len; offset++)
3478 {
3479 printf_filtered ("%5d %s\n", history_base + offset,
3480 (history_get (history_base + offset))->line);
3481 }
3482
3483 /* The next command we want to display is the next one that we haven't
3484 displayed yet. */
3485 num += Hist_print;
e52bfe0c 3486
172559ec
JK
3487 /* If the user repeats this command with return, it should do what
3488 "show commands +" does. This is unnecessary if arg is null,
3489 because "show commands +" is not useful after "show commands". */
3490 if (from_tty && args)
3491 {
3492 args[0] = '+';
3493 args[1] = '\0';
3494 }
3495}
3496
3497/* Called by do_setshow_command. */
3498/* ARGSUSED */
3499static void
3500set_history_size_command (args, from_tty, c)
3501 char *args;
3502 int from_tty;
3503 struct cmd_list_element *c;
3504{
3505 if (history_size == INT_MAX)
3506 unstifle_history ();
3507 else if (history_size >= 0)
3508 stifle_history (history_size);
3509 else
3510 {
3511 history_size = INT_MAX;
3512 error ("History size must be non-negative");
3513 }
3514}
3515
3516/* ARGSUSED */
3517static void
3518set_history (args, from_tty)
3519 char *args;
3520 int from_tty;
3521{
3522 printf_unfiltered ("\"set history\" must be followed by the name of a history subcommand.\n");
3523 help_list (sethistlist, "set history ", -1, gdb_stdout);
3524}
3525
3526/* ARGSUSED */
3527static void
3528show_history (args, from_tty)
3529 char *args;
3530 int from_tty;
3531{
3532 cmd_show_list (showhistlist, from_tty, "");
3533}
3534
3535int info_verbose = 0; /* Default verbose msgs off */
3536
3537/* Called by do_setshow_command. An elaborate joke. */
3538/* ARGSUSED */
e52bfe0c 3539static void
172559ec
JK
3540set_verbose (args, from_tty, c)
3541 char *args;
3542 int from_tty;
3543 struct cmd_list_element *c;
3544{
3545 char *cmdname = "verbose";
3546 struct cmd_list_element *showcmd;
e52bfe0c 3547
172559ec
JK
3548 showcmd = lookup_cmd_1 (&cmdname, showlist, NULL, 1);
3549
3550 if (info_verbose)
3551 {
3552 c->doc = "Set verbose printing of informational messages.";
3553 showcmd->doc = "Show verbose printing of informational messages.";
3554 }
3555 else
3556 {
3557 c->doc = "Set verbosity.";
3558 showcmd->doc = "Show verbosity.";
3559 }
3560}
3561
3562static void
3563float_handler (signo)
3564int signo;
3565{
3566 /* This message is based on ANSI C, section 4.7. Note that integer
3567 divide by zero causes this, so "float" is a misnomer. */
3568 signal (SIGFPE, float_handler);
3569 error ("Erroneous arithmetic operation.");
3570}
3571
172559ec
JK
3572\f
3573static void
3574init_cmd_lists ()
3575{
3576 cmdlist = NULL;
3577 infolist = NULL;
3578 enablelist = NULL;
3579 disablelist = NULL;
3580 deletelist = NULL;
3581 enablebreaklist = NULL;
3582 setlist = NULL;
3583 unsetlist = NULL;
3584 showlist = NULL;
b8176214 3585 endianlist = NULL;
172559ec
JK
3586 sethistlist = NULL;
3587 showhistlist = NULL;
3588 unsethistlist = NULL;
3589#if MAINTENANCE_CMDS
3590 maintenancelist = NULL;
3591 maintenanceinfolist = NULL;
3592 maintenanceprintlist = NULL;
3593#endif
3594 setprintlist = NULL;
3595 showprintlist = NULL;
3596 setchecklist = NULL;
3597 showchecklist = NULL;
3598}
3599
3600/* Init the history buffer. Note that we are called after the init file(s)
3601 * have been read so that the user can change the history file via his
3602 * .gdbinit file (for instance). The GDBHISTFILE environment variable
3603 * overrides all of this.
3604 */
3605
3606void
3607init_history()
3608{
3609 char *tmpenv;
3610
3611 tmpenv = getenv ("HISTSIZE");
3612 if (tmpenv)
3613 history_size = atoi (tmpenv);
3614 else if (!history_size)
3615 history_size = 256;
3616
3617 stifle_history (history_size);
3618
3619 tmpenv = getenv ("GDBHISTFILE");
3620 if (tmpenv)
3621 history_filename = savestring (tmpenv, strlen(tmpenv));
3622 else if (!history_filename) {
3623 /* We include the current directory so that if the user changes
3624 directories the file written will be the same as the one
3625 that was read. */
3626 history_filename = concat (current_directory, "/.gdb_history", NULL);
3627 }
3628 read_history (history_filename);
3629}
3630
3631static void
3632init_main ()
3633{
3634 struct cmd_list_element *c;
e52bfe0c 3635
b8176214
ILT
3636 add_prefix_cmd ("endian", class_support, set_endian,
3637 "Set endianness of target.",
3638 &endianlist, "set endian ", 0, &setlist);
3639 add_cmd ("big", class_support, set_endian_big,
3640 "Set target as being big endian.", &endianlist);
3641 add_cmd ("little", class_support, set_endian_little,
3642 "Set target as being little endian.", &endianlist);
b83ed019
ILT
3643 add_cmd ("auto", class_support, set_endian_auto,
3644 "Select target endianness automatically.", &endianlist);
b8176214
ILT
3645 add_cmd ("endian", class_support, show_endian,
3646 "Show endianness of target.", &showlist);
3647
d0aba53f
AC
3648 add_cmd ("architecture", class_support, set_architecture,
3649 "Set architecture of target.", &setlist);
cd2c720a 3650 add_alias_cmd ("processor", "architecture", class_support, 1, &setlist);
d0aba53f
AC
3651 add_cmd ("architecture", class_support, show_architecture,
3652 "Show architecture of target.", &showlist);
3653 add_cmd ("architecture", class_support, info_architecture,
3654 "List supported target architectures", &infolist);
3655
3656
172559ec
JK
3657#ifdef DEFAULT_PROMPT
3658 prompt = savestring (DEFAULT_PROMPT, strlen(DEFAULT_PROMPT));
3659#else
3660 prompt = savestring ("(gdb) ", 6);
3661#endif
3662
3663 /* Set the important stuff up for command editing. */
3664 command_editing_p = 1;
3665 history_expansion_p = 0;
3666 write_history_p = 0;
e52bfe0c 3667
172559ec 3668 /* Setup important stuff for command line editing. */
9ed8604f 3669 rl_completion_entry_function = (int (*)()) readline_line_completion_function;
172559ec
JK
3670 rl_completer_word_break_characters = gdb_completer_word_break_characters;
3671 rl_completer_quote_characters = gdb_completer_quote_characters;
3672 rl_readline_name = "gdb";
3673
3674 /* Define the classes of commands.
3675 They will appear in the help list in the reverse of this order. */
3676
3677 add_cmd ("internals", class_maintenance, NO_FUNCTION,
3678 "Maintenance commands.\n\
3679Some gdb commands are provided just for use by gdb maintainers.\n\
3680These commands are subject to frequent change, and may not be as\n\
3681well documented as user commands.",
3682 &cmdlist);
3683 add_cmd ("obscure", class_obscure, NO_FUNCTION, "Obscure features.", &cmdlist);
3684 add_cmd ("aliases", class_alias, NO_FUNCTION, "Aliases of other commands.", &cmdlist);
3685 add_cmd ("user-defined", class_user, NO_FUNCTION, "User-defined commands.\n\
3686The commands in this class are those defined by the user.\n\
3687Use the \"define\" command to define a command.", &cmdlist);
3688 add_cmd ("support", class_support, NO_FUNCTION, "Support facilities.", &cmdlist);
3689 add_cmd ("status", class_info, NO_FUNCTION, "Status inquiries.", &cmdlist);
3690 add_cmd ("files", class_files, NO_FUNCTION, "Specifying and examining files.", &cmdlist);
3691 add_cmd ("breakpoints", class_breakpoint, NO_FUNCTION, "Making program stop at certain points.", &cmdlist);
3692 add_cmd ("data", class_vars, NO_FUNCTION, "Examining data.", &cmdlist);
3693 add_cmd ("stack", class_stack, NO_FUNCTION, "Examining the stack.\n\
3694The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\
3695counting from zero for the innermost (currently executing) frame.\n\n\
3696At any time gdb identifies one frame as the \"selected\" frame.\n\
3697Variable lookups are done with respect to the selected frame.\n\
3698When the program being debugged stops, gdb selects the innermost frame.\n\
3699The commands below can be used to select other frames by number or address.",
3700 &cmdlist);
3701 add_cmd ("running", class_run, NO_FUNCTION, "Running the program.", &cmdlist);
3702
3703 add_com ("pwd", class_files, pwd_command,
3704 "Print working directory. This is used for your program as well.");
3705 c = add_cmd ("cd", class_files, cd_command,
3706 "Set working directory to DIR for debugger and program being debugged.\n\
3707The change does not take effect for the program being debugged\n\
3708until the next time it is started.", &cmdlist);
3709 c->completer = filename_completer;
3710
3711 add_show_from_set
3712 (add_set_cmd ("prompt", class_support, var_string, (char *)&prompt,
3713 "Set gdb's prompt",
3714 &setlist),
3715 &showlist);
e52bfe0c 3716
172559ec
JK
3717 add_com ("echo", class_support, echo_command,
3718 "Print a constant string. Give string as argument.\n\
3719C escape sequences may be used in the argument.\n\
3720No newline is added at the end of the argument;\n\
3721use \"\\n\" if you want a newline to be printed.\n\
3722Since leading and trailing whitespace are ignored in command arguments,\n\
3723if you want to print some you must use \"\\\" before leading whitespace\n\
3724to be printed or after trailing whitespace.");
3725 add_com ("document", class_support, document_command,
3726 "Document a user-defined command.\n\
3727Give command name as argument. Give documentation on following lines.\n\
3728End with a line of just \"end\".");
3729 add_com ("define", class_support, define_command,
3730 "Define a new command name. Command name is argument.\n\
3731Definition appears on following lines, one command per line.\n\
3732End with a line of just \"end\".\n\
3733Use the \"document\" command to give documentation for the new command.\n\
59528079 3734Commands defined in this way may have up to ten arguments.");
172559ec
JK
3735
3736#ifdef __STDC__
3737 c = add_cmd ("source", class_support, source_command,
3738 "Read commands from a file named FILE.\n\
3739Note that the file \"" GDBINIT_FILENAME "\" is read automatically in this way\n\
3740when gdb is started.", &cmdlist);
3741#else
3742 /* Punt file name, we can't help it easily. */
3743 c = add_cmd ("source", class_support, source_command,
3744 "Read commands from a file named FILE.\n\
3745Note that the file \".gdbinit\" is read automatically in this way\n\
3746when gdb is started.", &cmdlist);
3747#endif
3748 c->completer = filename_completer;
3749
3750 add_com ("quit", class_support, quit_command, "Exit gdb.");
3751 add_com ("help", class_support, help_command, "Print list of commands.");
3752 add_com_alias ("q", "quit", class_support, 1);
3753 add_com_alias ("h", "help", class_support, 1);
3754
cd10c7e3
SG
3755 add_com ("dont-repeat", class_support, dont_repeat_command, "Don't repeat this command.\n\
3756Primarily used inside of user-defined commands that should not be repeated when\n\
3757hitting return.");
172559ec
JK
3758
3759 c = add_set_cmd ("verbose", class_support, var_boolean, (char *)&info_verbose,
3760 "Set ",
3761 &setlist),
3762 add_show_from_set (c, &showlist);
3763 c->function.sfunc = set_verbose;
3764 set_verbose (NULL, 0, c);
e52bfe0c 3765
172559ec
JK
3766 add_show_from_set
3767 (add_set_cmd ("editing", class_support, var_boolean, (char *)&command_editing_p,
3768 "Set editing of command lines as they are typed.\n\
6a85a617 3769Use \"on\" to enable the editing, and \"off\" to disable it.\n\
172559ec
JK
3770Without an argument, command line editing is enabled. To edit, use\n\
3771EMACS-like or VI-like commands like control-P or ESC.", &setlist),
3772 &showlist);
3773
3774 add_prefix_cmd ("history", class_support, set_history,
3775 "Generic command for setting command history parameters.",
3776 &sethistlist, "set history ", 0, &setlist);
3777 add_prefix_cmd ("history", class_support, show_history,
3778 "Generic command for showing command history parameters.",
3779 &showhistlist, "show history ", 0, &showlist);
3780
3781 add_show_from_set
3782 (add_set_cmd ("expansion", no_class, var_boolean, (char *)&history_expansion_p,
3783 "Set history expansion on command input.\n\
3784Without an argument, history expansion is enabled.", &sethistlist),
3785 &showhistlist);
3786
3787 add_show_from_set
3788 (add_set_cmd ("save", no_class, var_boolean, (char *)&write_history_p,
3789 "Set saving of the history record on exit.\n\
6a85a617 3790Use \"on\" to enable the saving, and \"off\" to disable it.\n\
172559ec
JK
3791Without an argument, saving is enabled.", &sethistlist),
3792 &showhistlist);
3793
3794 c = add_set_cmd ("size", no_class, var_integer, (char *)&history_size,
3795 "Set the size of the command history, \n\
3796ie. the number of previous commands to keep a record of.", &sethistlist);
3797 add_show_from_set (c, &showhistlist);
3798 c->function.sfunc = set_history_size_command;
3799
3800 add_show_from_set
3801 (add_set_cmd ("filename", no_class, var_filename, (char *)&history_filename,
3802 "Set the filename in which to record the command history\n\
3803 (the list of previous commands of which a record is kept).", &sethistlist),
3804 &showhistlist);
3805
3806 add_show_from_set
3807 (add_set_cmd ("confirm", class_support, var_boolean,
3808 (char *)&caution,
3809 "Set whether to confirm potentially dangerous operations.",
3810 &setlist),
3811 &showlist);
3812
3813 add_prefix_cmd ("info", class_info, info_command,
3814 "Generic command for showing things about the program being debugged.",
3815 &infolist, "info ", 0, &cmdlist);
3816 add_com_alias ("i", "info", class_info, 1);
3817
3818 add_com ("complete", class_obscure, complete_command,
3819 "List the completions for the rest of the line as a command.");
3820
3821 add_prefix_cmd ("show", class_info, show_command,
3822 "Generic command for showing things about the debugger.",
3823 &showlist, "show ", 0, &cmdlist);
3824 /* Another way to get at the same thing. */
3825 add_info ("set", show_command, "Show all GDB settings.");
3826
3827 add_cmd ("commands", no_class, show_commands,
943b7032 3828 "Show the history of commands you typed.\n\
172559ec
JK
3829You can supply a command number to start with, or a `+' to start after\n\
3830the previous command number shown.",
3831 &showlist);
3832
3833 add_cmd ("version", no_class, show_version,
3834 "Show what version of GDB this is.", &showlist);
3835
e52bfe0c
JL
3836 add_com ("while", class_support, while_command,
3837"Execute nested commands WHILE the conditional expression is non zero.\n\
943b7032
PS
3838The conditional expression must follow the word `while' and must in turn be\n\
3839followed by a new line. The nested commands must be entered one per line,\n\
e52bfe0c
JL
3840and should be terminated by the word `end'.");
3841
3842 add_com ("if", class_support, if_command,
3843"Execute nested commands once IF the conditional expression is non zero.\n\
943b7032
PS
3844The conditional expression must follow the word `if' and must in turn be\n\
3845followed by a new line. The nested commands must be entered one per line,\n\
3846and should be terminated by the word 'else' or `end'. If an else clause\n\
e52bfe0c
JL
3847is used, the same rules apply to its nested commands as to the first ones.");
3848
172559ec
JK
3849 /* If target is open when baud changes, it doesn't take effect until the
3850 next open (I think, not sure). */
3851 add_show_from_set (add_set_cmd ("remotebaud", no_class,
3852 var_zinteger, (char *)&baud_rate,
3853 "Set baud rate for remote serial I/O.\n\
3854This value is used to set the speed of the serial port when debugging\n\
3855using remote targets.", &setlist),
3856 &showlist);
3857
3858 add_show_from_set (
3859 add_set_cmd ("remotedebug", no_class, var_zinteger, (char *)&remote_debug,
3860 "Set debugging of remote protocol.\n\
3861When enabled, each packet sent or received with the remote target\n\
3862is displayed.", &setlist),
3863 &showlist);
cb1709ae
DP
3864
3865 add_show_from_set (
3866 add_set_cmd ("remotetimeout", no_class, var_integer, (char *)&remote_timeout,
3867 "Set timeout limit to wait for target to respond.\n\
3868This value is used to set the time limit for gdb to wait for a response\n\
3869from he target.", &setlist),
3870 &showlist);
62dd860e
MS
3871
3872 c = add_set_cmd ("annotate", class_obscure, var_zinteger,
3873 (char *)&annotation_level, "Set annotation_level.\n\
38740 == normal; 1 == fullname (for use when running under emacs)\n\
38752 == output annotated suitably for use by programs that control GDB.",
3876 &setlist);
3877 c = add_show_from_set (c, &showlist);
172559ec 3878}
This page took 0.475487 seconds and 4 git commands to generate.