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