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