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