* source.c: Make global variables current_source_symtab and
[external/binutils.git] / gdb / cli / cli-cmds.c
1 /* GDB CLI commands.
2
3    Copyright 2000, 2001, 2002 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,
20    Boston, MA 02111-1307, USA.  */
21
22 #include "defs.h"
23 #include "completer.h"
24 #include "target.h"      /* For baud_rate, remote_debug and remote_timeout */
25 #include "gdb_wait.h"           /* For shell escape implementation */
26 #include "gdb_regex.h"          /* Used by apropos_command */
27 #include "gdb_string.h"
28 #include "linespec.h"
29 #include "expression.h"
30 #include "language.h"
31 #include "filenames.h"          /* for DOSish file names */
32 #include "objfiles.h"
33 #include "source.h"
34
35 #include "ui-out.h"
36
37 #include "top.h"
38 #include "cli/cli-decode.h"
39 #include "cli/cli-script.h"
40 #include "cli/cli-setshow.h"
41 #include "cli/cli-cmds.h"
42
43 #ifndef GDBINIT_FILENAME
44 #define GDBINIT_FILENAME        ".gdbinit"
45 #endif
46
47 /* From gdb/top.c */
48
49 extern void dont_repeat (void);
50
51 extern void set_verbose (char *, int, struct cmd_list_element *);
52
53 extern void show_history (char *, int);
54
55 extern void set_history (char *, int);
56
57 extern void show_commands (char *, int);
58
59 /* Prototypes for local command functions */
60
61 static void complete_command (char *, int);
62
63 static void echo_command (char *, int);
64
65 static void pwd_command (char *, int);
66
67 static void show_version (char *, int);
68
69 static void validate_comname (char *);
70
71 static void help_command (char *, int);
72
73 static void show_command (char *, int);
74
75 static void info_command (char *, int);
76
77 static void show_debug (char *, int);
78
79 static void set_debug (char *, int);
80
81 static void show_user (char *, int);
82
83 static void make_command (char *, int);
84
85 static void shell_escape (char *, int);
86
87 static void edit_command (char *, int);
88
89 static void list_command (char *, int);
90
91 void apropos_command (char *, int);
92
93 /* Prototypes for local utility functions */
94
95 static void ambiguous_line_spec (struct symtabs_and_lines *);
96 \f
97 /* Limit the call depth of user-defined commands */
98 int max_user_call_depth;
99
100 /* Define all cmd_list_elements.  */
101
102 /* Chain containing all defined commands.  */
103
104 struct cmd_list_element *cmdlist;
105
106 /* Chain containing all defined info subcommands.  */
107
108 struct cmd_list_element *infolist;
109
110 /* Chain containing all defined enable subcommands. */
111
112 struct cmd_list_element *enablelist;
113
114 /* Chain containing all defined disable subcommands. */
115
116 struct cmd_list_element *disablelist;
117
118 /* Chain containing all defined toggle subcommands. */
119
120 struct cmd_list_element *togglelist;
121
122 /* Chain containing all defined stop subcommands. */
123
124 struct cmd_list_element *stoplist;
125
126 /* Chain containing all defined delete subcommands. */
127
128 struct cmd_list_element *deletelist;
129
130 /* Chain containing all defined "enable breakpoint" subcommands. */
131
132 struct cmd_list_element *enablebreaklist;
133
134 /* Chain containing all defined set subcommands */
135
136 struct cmd_list_element *setlist;
137
138 /* Chain containing all defined unset subcommands */
139
140 struct cmd_list_element *unsetlist;
141
142 /* Chain containing all defined show subcommands.  */
143
144 struct cmd_list_element *showlist;
145
146 /* Chain containing all defined \"set history\".  */
147
148 struct cmd_list_element *sethistlist;
149
150 /* Chain containing all defined \"show history\".  */
151
152 struct cmd_list_element *showhistlist;
153
154 /* Chain containing all defined \"unset history\".  */
155
156 struct cmd_list_element *unsethistlist;
157
158 /* Chain containing all defined maintenance subcommands. */
159
160 struct cmd_list_element *maintenancelist;
161
162 /* Chain containing all defined "maintenance info" subcommands. */
163
164 struct cmd_list_element *maintenanceinfolist;
165
166 /* Chain containing all defined "maintenance print" subcommands. */
167
168 struct cmd_list_element *maintenanceprintlist;
169
170 struct cmd_list_element *setprintlist;
171
172 struct cmd_list_element *showprintlist;
173
174 struct cmd_list_element *setdebuglist;
175
176 struct cmd_list_element *showdebuglist;
177
178 struct cmd_list_element *setchecklist;
179
180 struct cmd_list_element *showchecklist;
181 \f
182 /* Utility used everywhere when at least one argument is needed and
183    none is supplied. */
184
185 void
186 error_no_arg (char *why)
187 {
188   error ("Argument required (%s).", why);
189 }
190
191 /* The "info" command is defined as a prefix, with allow_unknown = 0.
192    Therefore, its own definition is called only for "info" with no args.  */
193
194 /* ARGSUSED */
195 static void
196 info_command (char *arg, int from_tty)
197 {
198   printf_unfiltered ("\"info\" must be followed by the name of an info command.\n");
199   help_list (infolist, "info ", -1, gdb_stdout);
200 }
201
202 /* The "show" command with no arguments shows all the settings.  */
203
204 /* ARGSUSED */
205 static void
206 show_command (char *arg, int from_tty)
207 {
208   cmd_show_list (showlist, from_tty, "");
209 }
210 \f
211 /* Provide documentation on command or list given by COMMAND.  FROM_TTY
212    is ignored.  */
213
214 /* ARGSUSED */
215 static void
216 help_command (char *command, int from_tty)
217 {
218   help_cmd (command, gdb_stdout);
219 }
220 \f
221 /* String compare function for qsort.  */
222 static int
223 compare_strings (const void *arg1, const void *arg2)
224 {
225   const char **s1 = (const char **) arg1;
226   const char **s2 = (const char **) arg2;
227   return strcmp (*s1, *s2);
228 }
229
230 /* The "complete" command is used by Emacs to implement completion.  */
231
232 /* ARGSUSED */
233 static void
234 complete_command (char *arg, int from_tty)
235 {
236   int i;
237   int argpoint;
238   char **completions;
239
240   dont_repeat ();
241
242   if (arg == NULL)
243     arg = "";
244   argpoint = strlen (arg);
245
246   completions = complete_line (arg, arg, argpoint);
247
248   if (completions)
249     {
250       int item, size;
251
252       for (size = 0; completions[size]; ++size)
253         ;
254       qsort (completions, size, sizeof (char *), compare_strings);
255
256       /* We do extra processing here since we only want to print each
257          unique item once.  */
258       item = 0;
259       while (item < size)
260         {
261           int next_item;
262           printf_unfiltered ("%s\n", completions[item]);
263           next_item = item + 1;
264           while (next_item < size
265                  && ! strcmp (completions[item], completions[next_item]))
266             {
267               xfree (completions[next_item]);
268               ++next_item;
269             }
270
271           xfree (completions[item]);
272           item = next_item;
273         }
274
275       xfree (completions);
276     }
277 }
278
279 int
280 is_complete_command (struct cmd_list_element *c)
281 {
282   return cmd_cfunc_eq (c, complete_command);
283 }
284
285 /* ARGSUSED */
286 static void
287 show_version (char *args, int from_tty)
288 {
289   immediate_quit++;
290   print_gdb_version (gdb_stdout);
291   printf_filtered ("\n");
292   immediate_quit--;
293 }
294
295 /* Handle the quit command.  */
296
297 void
298 quit_command (char *args, int from_tty)
299 {
300   if (!quit_confirm ())
301     error ("Not confirmed.");
302   quit_force (args, from_tty);
303 }
304
305 /* ARGSUSED */
306 static void
307 pwd_command (char *args, int from_tty)
308 {
309   if (args)
310     error ("The \"pwd\" command does not take an argument: %s", args);
311   getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
312
313   if (!STREQ (gdb_dirbuf, current_directory))
314     printf_unfiltered ("Working directory %s\n (canonically %s).\n",
315                        current_directory, gdb_dirbuf);
316   else
317     printf_unfiltered ("Working directory %s.\n", current_directory);
318 }
319
320 void
321 cd_command (char *dir, int from_tty)
322 {
323   int len;
324   /* Found something other than leading repetitions of "/..".  */
325   int found_real_path;
326   char *p;
327
328   /* If the new directory is absolute, repeat is a no-op; if relative,
329      repeat might be useful but is more likely to be a mistake.  */
330   dont_repeat ();
331
332   if (dir == 0)
333     error_no_arg ("new working directory");
334
335   dir = tilde_expand (dir);
336   make_cleanup (xfree, dir);
337
338   if (chdir (dir) < 0)
339     perror_with_name (dir);
340
341 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
342   /* There's too much mess with DOSish names like "d:", "d:.",
343      "d:./foo" etc.  Instead of having lots of special #ifdef'ed code,
344      simply get the canonicalized name of the current directory.  */
345   dir = getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
346 #endif
347
348   len = strlen (dir);
349   if (IS_DIR_SEPARATOR (dir[len - 1]))
350     {
351       /* Remove the trailing slash unless this is a root directory
352          (including a drive letter on non-Unix systems).  */
353       if (!(len == 1)           /* "/" */
354 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
355           && !(len == 3 && dir[1] == ':') /* "d:/" */
356 #endif
357           )
358         len--;
359     }
360
361   dir = savestring (dir, len);
362   if (IS_ABSOLUTE_PATH (dir))
363     current_directory = dir;
364   else
365     {
366       if (IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]))
367         current_directory = concat (current_directory, dir, NULL);
368       else
369         current_directory = concat (current_directory, SLASH_STRING, dir, NULL);
370       xfree (dir);
371     }
372
373   /* Now simplify any occurrences of `.' and `..' in the pathname.  */
374
375   found_real_path = 0;
376   for (p = current_directory; *p;)
377     {
378       if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.'
379           && (p[2] == 0 || IS_DIR_SEPARATOR (p[2])))
380         strcpy (p, p + 2);
381       else if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' && p[2] == '.'
382                && (p[3] == 0 || IS_DIR_SEPARATOR (p[3])))
383         {
384           if (found_real_path)
385             {
386               /* Search backwards for the directory just before the "/.."
387                  and obliterate it and the "/..".  */
388               char *q = p;
389               while (q != current_directory && !IS_DIR_SEPARATOR (q[-1]))
390                 --q;
391
392               if (q == current_directory)
393                 /* current_directory is
394                    a relative pathname ("can't happen"--leave it alone).  */
395                 ++p;
396               else
397                 {
398                   strcpy (q - 1, p + 3);
399                   p = q - 1;
400                 }
401             }
402           else
403             /* We are dealing with leading repetitions of "/..", for example
404                "/../..", which is the Mach super-root.  */
405             p += 3;
406         }
407       else
408         {
409           found_real_path = 1;
410           ++p;
411         }
412     }
413
414   forget_cached_source_info ();
415
416   if (from_tty)
417     pwd_command ((char *) 0, 1);
418 }
419 \f
420 void
421 source_command (char *args, int from_tty)
422 {
423   FILE *stream;
424   struct cleanup *old_cleanups;
425   char *file = args;
426
427   if (file == NULL)
428     {
429       error ("source command requires pathname of file to source.");
430     }
431
432   file = tilde_expand (file);
433   old_cleanups = make_cleanup (xfree, file);
434
435   stream = fopen (file, FOPEN_RT);
436   if (!stream)
437     {
438       if (from_tty)
439         perror_with_name (file);
440       else
441         return;
442     }
443
444   script_from_file (stream, file);
445
446   do_cleanups (old_cleanups);
447 }
448
449 /* ARGSUSED */
450 static void
451 echo_command (char *text, int from_tty)
452 {
453   char *p = text;
454   register int c;
455
456   if (text)
457     while ((c = *p++) != '\0')
458       {
459         if (c == '\\')
460           {
461             /* \ at end of argument is used after spaces
462                so they won't be lost.  */
463             if (*p == 0)
464               return;
465
466             c = parse_escape (&p);
467             if (c >= 0)
468               printf_filtered ("%c", c);
469           }
470         else
471           printf_filtered ("%c", c);
472       }
473
474   /* Force this output to appear now.  */
475   wrap_here ("");
476   gdb_flush (gdb_stdout);
477 }
478
479 /* ARGSUSED */
480 static void
481 shell_escape (char *arg, int from_tty)
482 {
483 #ifdef CANT_FORK
484   /* If ARG is NULL, they want an inferior shell, but `system' just
485      reports if the shell is available when passed a NULL arg.  */
486   int rc = system (arg ? arg : "");
487
488   if (!arg)
489     arg = "inferior shell";
490
491   if (rc == -1)
492     {
493       fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg,
494                           safe_strerror (errno));
495       gdb_flush (gdb_stderr);
496     }
497   else if (rc)
498     {
499       fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
500       gdb_flush (gdb_stderr);
501     }
502 #ifdef GLOBAL_CURDIR
503   /* Make sure to return to the directory GDB thinks it is, in case the
504      shell command we just ran changed it.  */
505   chdir (current_directory);
506 #endif
507 #else /* Can fork.  */
508   int rc, status, pid;
509   char *p, *user_shell;
510
511   if ((user_shell = (char *) getenv ("SHELL")) == NULL)
512     user_shell = "/bin/sh";
513
514   /* Get the name of the shell for arg0 */
515   if ((p = strrchr (user_shell, '/')) == NULL)
516     p = user_shell;
517   else
518     p++;                        /* Get past '/' */
519
520   if ((pid = fork ()) == 0)
521     {
522       if (!arg)
523         execl (user_shell, p, 0);
524       else
525         execl (user_shell, p, "-c", arg, 0);
526
527       fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
528                           safe_strerror (errno));
529       gdb_flush (gdb_stderr);
530       _exit (0177);
531     }
532
533   if (pid != -1)
534     while ((rc = wait (&status)) != pid && rc != -1)
535       ;
536   else
537     error ("Fork failed");
538 #endif /* Can fork.  */
539 }
540
541 static void
542 edit_command (char *arg, int from_tty)
543 {
544   struct symtabs_and_lines sals;
545   struct symtab_and_line sal;
546   struct symbol *sym;
547   char *arg1;
548   int cmdlen, log10;
549   unsigned m;
550   char *editor;
551   char *p;
552
553   /* Pull in the current default source line if necessary */
554   if (arg == 0)
555     sal = get_current_or_default_source_symtab_and_line ();
556
557   /* bare "edit" edits file with present line.  */
558
559   if (arg == 0)
560     {
561       if (sal.symtab == 0)
562         error ("No default source file yet.");
563       sal.line += get_lines_to_list () / 2;
564     }
565   else
566     {
567
568       /* Now should only be one argument -- decode it in SAL */
569
570       arg1 = arg;
571       sals = decode_line_1 (&arg1, 0, 0, 0, 0);
572
573       if (! sals.nelts) return;  /*  C++  */
574       if (sals.nelts > 1) {
575         ambiguous_line_spec (&sals);
576         xfree (sals.sals);
577         return;
578       }
579
580       sal = sals.sals[0];
581       xfree (sals.sals);
582
583       if (*arg1)
584         error ("Junk at end of line specification.");
585
586       /* if line was specified by address,
587          first print exactly which line, and which file.
588          In this case, sal.symtab == 0 means address is outside
589          of all known source files, not that user failed to give a filename.  */
590       if (*arg == '*')
591         {
592           if (sal.symtab == 0)
593             /* FIXME-32x64--assumes sal.pc fits in long.  */
594             error ("No source file for address %s.",
595                    local_hex_string((unsigned long) sal.pc));
596           sym = find_pc_function (sal.pc);
597           if (sym)
598             {
599               print_address_numeric (sal.pc, 1, gdb_stdout);
600               printf_filtered (" is in ");
601               fputs_filtered (SYMBOL_SOURCE_NAME (sym), gdb_stdout);
602               printf_filtered (" (%s:%d).\n", sal.symtab->filename, sal.line);
603             }
604           else
605             {
606               print_address_numeric (sal.pc, 1, gdb_stdout);
607               printf_filtered (" is at %s:%d.\n",
608                                sal.symtab->filename, sal.line);
609             }
610         }
611
612       /* If what was given does not imply a symtab, it must be an undebuggable
613          symbol which means no source code.  */
614
615       if (sal.symtab == 0)
616         error ("No line number known for %s.", arg);
617     }
618
619   if ((editor = (char *) getenv ("EDITOR")) == NULL)
620       editor = "/bin/ex";
621   
622   /* Approximate base-10 log of line to 1 unit for digit count */
623   for(log10=32, m=0x80000000; !(sal.line & m) && log10>0; log10--, m=m>>1);
624   log10 = 1 + (int)((log10 + (0 == ((m-1) & sal.line)))/3.32192809);
625
626   cmdlen = strlen(editor) + 1
627          + (NULL == sal.symtab->dirname ? 0 : strlen(sal.symtab->dirname) + 1)
628          + (NULL == sal.symtab->filename? 0 : strlen(sal.symtab->filename)+ 1)
629          + log10 + 2;
630   
631   p = xmalloc(cmdlen);
632   sprintf(p,"%s +%d %s%s",editor,sal.line,
633      (NULL == sal.symtab->dirname ? "./" :
634         (NULL != sal.symtab->filename && *(sal.symtab->filename) != '/') ?
635            sal.symtab->dirname : ""),
636      (NULL == sal.symtab->filename ? "unknown" : sal.symtab->filename)
637   );
638   shell_escape(p, from_tty);
639
640   xfree(p);
641 }
642
643 static void
644 list_command (char *arg, int from_tty)
645 {
646   struct symtabs_and_lines sals, sals_end;
647   struct symtab_and_line sal, sal_end, cursal;
648   struct symbol *sym;
649   char *arg1;
650   int no_end = 1;
651   int dummy_end = 0;
652   int dummy_beg = 0;
653   int linenum_beg = 0;
654   char *p;
655
656   /* Pull in the current default source line if necessary */
657   if (arg == 0 || arg[0] == '+' || arg[0] == '-')
658     cursal = get_current_or_default_source_symtab_and_line ();
659
660   /* "l" or "l +" lists next ten lines.  */
661
662   if (arg == 0 || STREQ (arg, "+"))
663     {
664       print_source_lines (cursal.symtab, cursal.line,
665                           cursal.line + get_lines_to_list (), 0);
666       return;
667     }
668
669   /* "l -" lists previous ten lines, the ones before the ten just listed.  */
670   if (STREQ (arg, "-"))
671     {
672       print_source_lines (cursal.symtab,
673                           max (get_first_line_listed () - get_lines_to_list (), 1),
674                           get_first_line_listed (), 0);
675       return;
676     }
677
678   /* Now if there is only one argument, decode it in SAL
679      and set NO_END.
680      If there are two arguments, decode them in SAL and SAL_END
681      and clear NO_END; however, if one of the arguments is blank,
682      set DUMMY_BEG or DUMMY_END to record that fact.  */
683
684   if (!have_full_symbols () && !have_partial_symbols ())
685     error ("No symbol table is loaded.  Use the \"file\" command.");
686
687   arg1 = arg;
688   if (*arg1 == ',')
689     dummy_beg = 1;
690   else
691     {
692       sals = decode_line_1 (&arg1, 0, 0, 0, 0);
693
694       if (!sals.nelts)
695         return;                 /*  C++  */
696       if (sals.nelts > 1)
697         {
698           ambiguous_line_spec (&sals);
699           xfree (sals.sals);
700           return;
701         }
702
703       sal = sals.sals[0];
704       xfree (sals.sals);
705     }
706
707   /* Record whether the BEG arg is all digits.  */
708
709   for (p = arg; p != arg1 && *p >= '0' && *p <= '9'; p++);
710   linenum_beg = (p == arg1);
711
712   while (*arg1 == ' ' || *arg1 == '\t')
713     arg1++;
714   if (*arg1 == ',')
715     {
716       no_end = 0;
717       arg1++;
718       while (*arg1 == ' ' || *arg1 == '\t')
719         arg1++;
720       if (*arg1 == 0)
721         dummy_end = 1;
722       else
723         {
724           if (dummy_beg)
725             sals_end = decode_line_1 (&arg1, 0, 0, 0, 0);
726           else
727             sals_end = decode_line_1 (&arg1, 0, sal.symtab, sal.line, 0);
728           if (sals_end.nelts == 0)
729             return;
730           if (sals_end.nelts > 1)
731             {
732               ambiguous_line_spec (&sals_end);
733               xfree (sals_end.sals);
734               return;
735             }
736           sal_end = sals_end.sals[0];
737           xfree (sals_end.sals);
738         }
739     }
740
741   if (*arg1)
742     error ("Junk at end of line specification.");
743
744   if (!no_end && !dummy_beg && !dummy_end
745       && sal.symtab != sal_end.symtab)
746     error ("Specified start and end are in different files.");
747   if (dummy_beg && dummy_end)
748     error ("Two empty args do not say what lines to list.");
749
750   /* if line was specified by address,
751      first print exactly which line, and which file.
752      In this case, sal.symtab == 0 means address is outside
753      of all known source files, not that user failed to give a filename.  */
754   if (*arg == '*')
755     {
756       if (sal.symtab == 0)
757         /* FIXME-32x64--assumes sal.pc fits in long.  */
758         error ("No source file for address %s.",
759                local_hex_string ((unsigned long) sal.pc));
760       sym = find_pc_function (sal.pc);
761       if (sym)
762         {
763           print_address_numeric (sal.pc, 1, gdb_stdout);
764           printf_filtered (" is in ");
765           fputs_filtered (SYMBOL_SOURCE_NAME (sym), gdb_stdout);
766           printf_filtered (" (%s:%d).\n", sal.symtab->filename, sal.line);
767         }
768       else
769         {
770           print_address_numeric (sal.pc, 1, gdb_stdout);
771           printf_filtered (" is at %s:%d.\n",
772                            sal.symtab->filename, sal.line);
773         }
774     }
775
776   /* If line was not specified by just a line number,
777      and it does not imply a symtab, it must be an undebuggable symbol
778      which means no source code.  */
779
780   if (!linenum_beg && sal.symtab == 0)
781     error ("No line number known for %s.", arg);
782
783   /* If this command is repeated with RET,
784      turn it into the no-arg variant.  */
785
786   if (from_tty)
787     *arg = 0;
788
789   if (dummy_beg && sal_end.symtab == 0)
790     error ("No default source file yet.  Do \"help list\".");
791   if (dummy_beg)
792     print_source_lines (sal_end.symtab,
793                         max (sal_end.line - (get_lines_to_list () - 1), 1),
794                         sal_end.line + 1, 0);
795   else if (sal.symtab == 0)
796     error ("No default source file yet.  Do \"help list\".");
797   else if (no_end)
798     {
799       int first_line = sal.line - get_lines_to_list () / 2;
800
801       if (first_line < 1) first_line = 1;
802
803       print_source_lines (sal.symtab,
804                           first_line,
805                           first_line + get_lines_to_list (),
806                           0);
807     }
808   else
809     print_source_lines (sal.symtab, sal.line,
810                         (dummy_end
811                          ? sal.line + get_lines_to_list ()
812                          : sal_end.line + 1),
813                         0);
814 }
815
816 static void
817 make_command (char *arg, int from_tty)
818 {
819   char *p;
820
821   if (arg == 0)
822     p = "make";
823   else
824     {
825       p = xmalloc (sizeof ("make ") + strlen (arg));
826       strcpy (p, "make ");
827       strcpy (p + sizeof ("make ") - 1, arg);
828     }
829
830   shell_escape (p, from_tty);
831 }
832
833 /* ARGSUSED */
834 static void
835 show_user (char *args, int from_tty)
836 {
837   struct cmd_list_element *c;
838   extern struct cmd_list_element *cmdlist;
839
840   if (args)
841     {
842       c = lookup_cmd (&args, cmdlist, "", 0, 1);
843       if (c->class != class_user)
844         error ("Not a user command.");
845       show_user_1 (c, gdb_stdout);
846     }
847   else
848     {
849       for (c = cmdlist; c; c = c->next)
850         {
851           if (c->class == class_user)
852             show_user_1 (c, gdb_stdout);
853         }
854     }
855 }
856
857 /* Search through names of commands and documentations for a certain
858    regular expression.
859 */
860 void 
861 apropos_command (char *searchstr, int from_tty)
862 {
863   extern struct cmd_list_element *cmdlist; /*This is the main command list*/
864   regex_t pattern;
865   char *pattern_fastmap;
866   char errorbuffer[512];
867   pattern_fastmap = xcalloc (256, sizeof (char));
868   if (searchstr == NULL)
869       error("REGEXP string is empty");
870
871   if (regcomp(&pattern,searchstr,REG_ICASE) == 0)
872     {
873       pattern.fastmap=pattern_fastmap;
874       re_compile_fastmap(&pattern);
875       apropos_cmd (gdb_stdout,cmdlist,&pattern,"");
876     }
877   else
878     {
879       regerror(regcomp(&pattern,searchstr,REG_ICASE),NULL,errorbuffer,512);
880       error("Error in regular expression:%s",errorbuffer);
881     }
882   xfree (pattern_fastmap);
883 }
884 \f
885 /* Print a list of files and line numbers which a user may choose from
886    in order to list a function which was specified ambiguously (as with
887    `list classname::overloadedfuncname', for example).  The vector in
888    SALS provides the filenames and line numbers.  */
889
890 static void
891 ambiguous_line_spec (struct symtabs_and_lines *sals)
892 {
893   int i;
894
895   for (i = 0; i < sals->nelts; ++i)
896     printf_filtered ("file: \"%s\", line number: %d\n",
897                      sals->sals[i].symtab->filename, sals->sals[i].line);
898 }
899
900 static void
901 set_debug (char *arg, int from_tty)
902 {
903   printf_unfiltered ("\"set debug\" must be followed by the name of a print subcommand.\n");
904   help_list (setdebuglist, "set debug ", -1, gdb_stdout);
905 }
906
907 static void
908 show_debug (char *args, int from_tty)
909 {
910   cmd_show_list (showdebuglist, from_tty, "");
911 }
912
913 void
914 init_cmd_lists (void)
915 {
916   max_user_call_depth = 1024;
917
918   cmdlist = NULL;
919   infolist = NULL;
920   enablelist = NULL;
921   disablelist = NULL;
922   togglelist = NULL;
923   stoplist = NULL;
924   deletelist = NULL;
925   enablebreaklist = NULL;
926   setlist = NULL;
927   unsetlist = NULL;
928   showlist = NULL;
929   sethistlist = NULL;
930   showhistlist = NULL;
931   unsethistlist = NULL;
932   maintenancelist = NULL;
933   maintenanceinfolist = NULL;
934   maintenanceprintlist = NULL;
935   setprintlist = NULL;
936   showprintlist = NULL;
937   setchecklist = NULL;
938   showchecklist = NULL;
939 }
940
941 \f
942 void
943 init_cli_cmds (void)
944 {
945   struct cmd_list_element *c;
946
947   /* Define the classes of commands.
948      They will appear in the help list in the reverse of this order.  */
949
950   add_cmd ("internals", class_maintenance, NULL,
951            "Maintenance commands.\n\
952 Some gdb commands are provided just for use by gdb maintainers.\n\
953 These commands are subject to frequent change, and may not be as\n\
954 well documented as user commands.",
955            &cmdlist);
956   add_cmd ("obscure", class_obscure, NULL, "Obscure features.", &cmdlist);
957   add_cmd ("aliases", class_alias, NULL, "Aliases of other commands.", &cmdlist);
958   add_cmd ("user-defined", class_user, NULL, "User-defined commands.\n\
959 The commands in this class are those defined by the user.\n\
960 Use the \"define\" command to define a command.", &cmdlist);
961   add_cmd ("support", class_support, NULL, "Support facilities.", &cmdlist);
962   if (!dbx_commands)
963     add_cmd ("status", class_info, NULL, "Status inquiries.", &cmdlist);
964   add_cmd ("files", class_files, NULL, "Specifying and examining files.", &cmdlist);
965   add_cmd ("breakpoints", class_breakpoint, NULL, "Making program stop at certain points.", &cmdlist);
966   add_cmd ("data", class_vars, NULL, "Examining data.", &cmdlist);
967   add_cmd ("stack", class_stack, NULL, "Examining the stack.\n\
968 The stack is made up of stack frames.  Gdb assigns numbers to stack frames\n\
969 counting from zero for the innermost (currently executing) frame.\n\n\
970 At any time gdb identifies one frame as the \"selected\" frame.\n\
971 Variable lookups are done with respect to the selected frame.\n\
972 When the program being debugged stops, gdb selects the innermost frame.\n\
973 The commands below can be used to select other frames by number or address.",
974            &cmdlist);
975   add_cmd ("running", class_run, NULL, "Running the program.", &cmdlist);
976
977   /* Define general commands. */
978
979   add_com ("pwd", class_files, pwd_command,
980         "Print working directory.  This is used for your program as well.");
981   c = add_cmd ("cd", class_files, cd_command,
982                "Set working directory to DIR for debugger and program being debugged.\n\
983 The change does not take effect for the program being debugged\n\
984 until the next time it is started.", &cmdlist);
985   set_cmd_completer (c, filename_completer);
986
987   add_com ("echo", class_support, echo_command,
988            "Print a constant string.  Give string as argument.\n\
989 C escape sequences may be used in the argument.\n\
990 No newline is added at the end of the argument;\n\
991 use \"\\n\" if you want a newline to be printed.\n\
992 Since leading and trailing whitespace are ignored in command arguments,\n\
993 if you want to print some you must use \"\\\" before leading whitespace\n\
994 to be printed or after trailing whitespace.");
995   add_com ("document", class_support, document_command,
996            "Document a user-defined command.\n\
997 Give command name as argument.  Give documentation on following lines.\n\
998 End with a line of just \"end\".");
999   add_com ("define", class_support, define_command,
1000            "Define a new command name.  Command name is argument.\n\
1001 Definition appears on following lines, one command per line.\n\
1002 End with a line of just \"end\".\n\
1003 Use the \"document\" command to give documentation for the new command.\n\
1004 Commands defined in this way may have up to ten arguments.");
1005
1006   c = add_cmd ("source", class_support, source_command,
1007                "Read commands from a file named FILE.\n\
1008 Note that the file \"" GDBINIT_FILENAME "\" is read automatically in this way\n\
1009 when gdb is started.", &cmdlist);
1010   set_cmd_completer (c, filename_completer);
1011
1012   add_com ("quit", class_support, quit_command, "Exit gdb.");
1013   c = add_com ("help", class_support, help_command, "Print list of commands.");
1014   set_cmd_completer (c, command_completer);
1015   add_com_alias ("q", "quit", class_support, 1);
1016   add_com_alias ("h", "help", class_support, 1);
1017
1018   c = add_set_cmd ("verbose", class_support, var_boolean, (char *) &info_verbose,
1019                    "Set ",
1020                    &setlist),
1021     add_show_from_set (c, &showlist);
1022   set_cmd_sfunc (c, set_verbose);
1023   set_verbose (NULL, 0, c);
1024
1025   add_prefix_cmd ("history", class_support, set_history,
1026                   "Generic command for setting command history parameters.",
1027                   &sethistlist, "set history ", 0, &setlist);
1028   add_prefix_cmd ("history", class_support, show_history,
1029                   "Generic command for showing command history parameters.",
1030                   &showhistlist, "show history ", 0, &showlist);
1031
1032   add_show_from_set
1033     (add_set_cmd ("expansion", no_class, var_boolean, (char *) &history_expansion_p,
1034                   "Set history expansion on command input.\n\
1035 Without an argument, history expansion is enabled.", &sethistlist),
1036      &showhistlist);
1037
1038   add_prefix_cmd ("info", class_info, info_command,
1039      "Generic command for showing things about the program being debugged.",
1040                   &infolist, "info ", 0, &cmdlist);
1041   add_com_alias ("i", "info", class_info, 1);
1042
1043   add_com ("complete", class_obscure, complete_command,
1044            "List the completions for the rest of the line as a command.");
1045
1046   add_prefix_cmd ("show", class_info, show_command,
1047                   "Generic command for showing things about the debugger.",
1048                   &showlist, "show ", 0, &cmdlist);
1049   /* Another way to get at the same thing.  */
1050   add_info ("set", show_command, "Show all GDB settings.");
1051
1052   add_cmd ("commands", no_class, show_commands,
1053            "Show the history of commands you typed.\n\
1054 You can supply a command number to start with, or a `+' to start after\n\
1055 the previous command number shown.",
1056            &showlist);
1057
1058   add_cmd ("version", no_class, show_version,
1059            "Show what version of GDB this is.", &showlist);
1060
1061   add_com ("while", class_support, while_command,
1062            "Execute nested commands WHILE the conditional expression is non zero.\n\
1063 The conditional expression must follow the word `while' and must in turn be\n\
1064 followed by a new line.  The nested commands must be entered one per line,\n\
1065 and should be terminated by the word `end'.");
1066
1067   add_com ("if", class_support, if_command,
1068            "Execute nested commands once IF the conditional expression is non zero.\n\
1069 The conditional expression must follow the word `if' and must in turn be\n\
1070 followed by a new line.  The nested commands must be entered one per line,\n\
1071 and should be terminated by the word 'else' or `end'.  If an else clause\n\
1072 is used, the same rules apply to its nested commands as to the first ones.");
1073
1074   /* If target is open when baud changes, it doesn't take effect until the
1075      next open (I think, not sure).  */
1076   add_show_from_set (add_set_cmd ("remotebaud", no_class,
1077                                   var_zinteger, (char *) &baud_rate,
1078                                   "Set baud rate for remote serial I/O.\n\
1079 This value is used to set the speed of the serial port when debugging\n\
1080 using remote targets.", &setlist),
1081                      &showlist);
1082
1083   c = add_set_cmd ("remotedebug", no_class, var_zinteger,
1084                    (char *) &remote_debug,
1085                    "Set debugging of remote protocol.\n\
1086 When enabled, each packet sent or received with the remote target\n\
1087 is displayed.", &setlist);
1088   deprecate_cmd (c, "set debug remote");
1089   deprecate_cmd (add_show_from_set (c, &showlist), "show debug remote");
1090
1091   add_show_from_set (add_set_cmd ("remote", no_class, var_zinteger,
1092                                   (char *) &remote_debug,
1093                                   "Set debugging of remote protocol.\n\
1094 When enabled, each packet sent or received with the remote target\n\
1095 is displayed.", &setdebuglist),
1096                      &showdebuglist);
1097
1098   add_show_from_set (
1099                       add_set_cmd ("remotetimeout", no_class, var_integer, (char *) &remote_timeout,
1100                                    "Set timeout limit to wait for target to respond.\n\
1101 This value is used to set the time limit for gdb to wait for a response\n\
1102 from the target.", &setlist),
1103                       &showlist);
1104
1105   add_prefix_cmd ("debug", no_class, set_debug,
1106                   "Generic command for setting gdb debugging flags",
1107                   &setdebuglist, "set debug ", 0, &setlist);
1108
1109   add_prefix_cmd ("debug", no_class, show_debug,
1110                   "Generic command for showing gdb debugging flags",
1111                   &showdebuglist, "show debug ", 0, &showlist);
1112
1113   c = add_com ("shell", class_support, shell_escape,
1114                "Execute the rest of the line as a shell command.\n\
1115 With no arguments, run an inferior shell.");
1116   set_cmd_completer (c, filename_completer);
1117
1118   c = add_com ("edit", class_files, edit_command,
1119            concat ("Edit specified file or function.\n\
1120 With no argument, edits file containing most recent line listed.\n\
1121 ", "\
1122 Editing targets can be specified in these ways:\n\
1123   FILE:LINENUM, to edit at that line in that file,\n\
1124   FUNCTION, to edit at the beginning of that function,\n\
1125   FILE:FUNCTION, to distinguish among like-named static functions.\n\
1126   *ADDRESS, to edit at the line containing that address.\n\
1127 Uses EDITOR environment variable contents as editor (or ex as default).",NULL));
1128
1129   c->completer = location_completer;
1130
1131   add_com ("list", class_files, list_command,
1132            concat ("List specified function or line.\n\
1133 With no argument, lists ten more lines after or around previous listing.\n\
1134 \"list -\" lists the ten lines before a previous ten-line listing.\n\
1135 One argument specifies a line, and ten lines are listed around that line.\n\
1136 Two arguments with comma between specify starting and ending lines to list.\n\
1137 ", "\
1138 Lines can be specified in these ways:\n\
1139   LINENUM, to list around that line in current file,\n\
1140   FILE:LINENUM, to list around that line in that file,\n\
1141   FUNCTION, to list around beginning of that function,\n\
1142   FILE:FUNCTION, to distinguish among like-named static functions.\n\
1143   *ADDRESS, to list around the line containing that address.\n\
1144 With two args if one is empty it stands for ten lines away from the other arg.", NULL));
1145
1146   if (!xdb_commands)
1147     add_com_alias ("l", "list", class_files, 1);
1148   else
1149     add_com_alias ("v", "list", class_files, 1);
1150
1151   if (dbx_commands)
1152     add_com_alias ("file", "list", class_files, 1);
1153
1154
1155   /* NOTE: cagney/2000-03-20: Being able to enter ``(gdb) !ls'' would
1156      be a really useful feature.  Unfortunately, the below wont do
1157      this.  Instead it adds support for the form ``(gdb) ! ls''
1158      (i.e. the space is required).  If the ``!'' command below is
1159      added the complains about no ``!'' command would be replaced by
1160      complains about how the ``!'' command is broken :-) */
1161   if (xdb_commands)
1162     add_com_alias ("!", "shell", class_support, 0);
1163
1164   c = add_com ("make", class_support, make_command,
1165           "Run the ``make'' program using the rest of the line as arguments.");
1166   set_cmd_completer (c, filename_completer);
1167   add_cmd ("user", no_class, show_user,
1168            "Show definitions of user defined commands.\n\
1169 Argument is the name of the user defined command.\n\
1170 With no argument, show definitions of all user defined commands.", &showlist);
1171   add_com ("apropos", class_support, apropos_command, "Search for commands matching a REGEXP");
1172
1173   add_show_from_set (
1174                       add_set_cmd ("max-user-call-depth", no_class, var_integer, 
1175                                    (char *) &max_user_call_depth,
1176                                    "Set the max call depth for user-defined commands.\n", 
1177                                    &setlist),
1178                       &showlist);
1179 }