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