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