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