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