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