246fcc9fbb24d841462151859da190311c2618f1
[external/binutils.git] / gdb / cli / cli-script.c
1 /* GDB CLI command scripting.
2
3    Copyright (C) 1986-2014 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 3 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, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "value.h"
22 #include "language.h"           /* For value_true */
23 #include <ctype.h>
24
25 #include "ui-out.h"
26 #include <string.h>
27 #include "exceptions.h"
28 #include "top.h"
29 #include "breakpoint.h"
30 #include "cli/cli-cmds.h"
31 #include "cli/cli-decode.h"
32 #include "cli/cli-script.h"
33 #include "gdb_assert.h"
34
35 #include "extension.h"
36 #include "interps.h"
37
38 /* Prototypes for local functions.  */
39
40 static enum command_control_type
41 recurse_read_control_structure (char * (*read_next_line_func) (void),
42                                 struct command_line *current_cmd,
43                                 void (*validator)(char *, void *),
44                                 void *closure);
45
46 static char *insert_args (char *line);
47
48 static struct cleanup * setup_user_args (char *p);
49
50 static char *read_next_line (void);
51
52 /* Level of control structure when reading.  */
53 static int control_level;
54
55 /* Level of control structure when executing.  */
56 static int command_nest_depth = 1;
57
58 /* This is to prevent certain commands being printed twice.  */
59 static int suppress_next_print_command_trace = 0;
60
61 /* Structure for arguments to user defined functions.  */
62 #define MAXUSERARGS 10
63 struct user_args
64   {
65     struct user_args *next;
66     /* It is necessary to store a malloced copy of the command line to
67        ensure that the arguments are not overwritten before they are
68        used.  */
69     char *command;
70     struct
71       {
72         char *arg;
73         int len;
74       }
75     a[MAXUSERARGS];
76     int count;
77   }
78  *user_args;
79
80 \f
81 /* Return non-zero if TYPE is a multi-line command (i.e., is terminated
82    by "end").  */
83
84 static int
85 multi_line_command_p (enum command_control_type type)
86 {
87   switch (type)
88     {
89     case if_control:
90     case while_control:
91     case while_stepping_control:
92     case commands_control:
93     case python_control:
94     case guile_control:
95       return 1;
96     default:
97       return 0;
98     }
99 }
100
101 /* Allocate, initialize a new command line structure for one of the
102    control commands (if/while).  */
103
104 static struct command_line *
105 build_command_line (enum command_control_type type, char *args)
106 {
107   struct command_line *cmd;
108
109   if (args == NULL && (type == if_control || type == while_control))
110     error (_("if/while commands require arguments."));
111   gdb_assert (args != NULL);
112
113   cmd = (struct command_line *) xmalloc (sizeof (struct command_line));
114   cmd->next = NULL;
115   cmd->control_type = type;
116
117   cmd->body_count = 1;
118   cmd->body_list
119     = (struct command_line **) xmalloc (sizeof (struct command_line *)
120                                         * cmd->body_count);
121   memset (cmd->body_list, 0, sizeof (struct command_line *) * cmd->body_count);
122   cmd->line = xstrdup (args);
123
124   return cmd;
125 }
126
127 /* Build and return a new command structure for the control commands
128    such as "if" and "while".  */
129
130 struct command_line *
131 get_command_line (enum command_control_type type, char *arg)
132 {
133   struct command_line *cmd;
134   struct cleanup *old_chain = NULL;
135
136   /* Allocate and build a new command line structure.  */
137   cmd = build_command_line (type, arg);
138
139   old_chain = make_cleanup_free_command_lines (&cmd);
140
141   /* Read in the body of this command.  */
142   if (recurse_read_control_structure (read_next_line, cmd, 0, 0)
143       == invalid_control)
144     {
145       warning (_("Error reading in canned sequence of commands."));
146       do_cleanups (old_chain);
147       return NULL;
148     }
149
150   discard_cleanups (old_chain);
151   return cmd;
152 }
153
154 /* Recursively print a command (including full control structures).  */
155
156 void
157 print_command_lines (struct ui_out *uiout, struct command_line *cmd,
158                      unsigned int depth)
159 {
160   struct command_line *list;
161
162   list = cmd;
163   while (list)
164     {
165       if (depth)
166         ui_out_spaces (uiout, 2 * depth);
167
168       /* A simple command, print it and continue.  */
169       if (list->control_type == simple_control)
170         {
171           ui_out_field_string (uiout, NULL, list->line);
172           ui_out_text (uiout, "\n");
173           list = list->next;
174           continue;
175         }
176
177       /* loop_continue to jump to the start of a while loop, print it
178          and continue. */
179       if (list->control_type == continue_control)
180         {
181           ui_out_field_string (uiout, NULL, "loop_continue");
182           ui_out_text (uiout, "\n");
183           list = list->next;
184           continue;
185         }
186
187       /* loop_break to break out of a while loop, print it and
188          continue.  */
189       if (list->control_type == break_control)
190         {
191           ui_out_field_string (uiout, NULL, "loop_break");
192           ui_out_text (uiout, "\n");
193           list = list->next;
194           continue;
195         }
196
197       /* A while command.  Recursively print its subcommands and
198          continue.  */
199       if (list->control_type == while_control
200           || list->control_type == while_stepping_control)
201         {
202           /* For while-stepping, the line includes the 'while-stepping'
203              token.  See comment in process_next_line for explanation.
204              Here, take care not print 'while-stepping' twice.  */
205           if (list->control_type == while_control)
206             ui_out_field_fmt (uiout, NULL, "while %s", list->line);
207           else
208             ui_out_field_string (uiout, NULL, list->line);
209           ui_out_text (uiout, "\n");
210           print_command_lines (uiout, *list->body_list, depth + 1);
211           if (depth)
212             ui_out_spaces (uiout, 2 * depth);
213           ui_out_field_string (uiout, NULL, "end");
214           ui_out_text (uiout, "\n");
215           list = list->next;
216           continue;
217         }
218
219       /* An if command.  Recursively print both arms before
220          continueing.  */
221       if (list->control_type == if_control)
222         {
223           ui_out_field_fmt (uiout, NULL, "if %s", list->line);
224           ui_out_text (uiout, "\n");
225           /* The true arm.  */
226           print_command_lines (uiout, list->body_list[0], depth + 1);
227
228           /* Show the false arm if it exists.  */
229           if (list->body_count == 2)
230             {
231               if (depth)
232                 ui_out_spaces (uiout, 2 * depth);
233               ui_out_field_string (uiout, NULL, "else");
234               ui_out_text (uiout, "\n");
235               print_command_lines (uiout, list->body_list[1], depth + 1);
236             }
237
238           if (depth)
239             ui_out_spaces (uiout, 2 * depth);
240           ui_out_field_string (uiout, NULL, "end");
241           ui_out_text (uiout, "\n");
242           list = list->next;
243           continue;
244         }
245
246       /* A commands command.  Print the breakpoint commands and
247          continue.  */
248       if (list->control_type == commands_control)
249         {
250           if (*(list->line))
251             ui_out_field_fmt (uiout, NULL, "commands %s", list->line);
252           else
253             ui_out_field_string (uiout, NULL, "commands");
254           ui_out_text (uiout, "\n");
255           print_command_lines (uiout, *list->body_list, depth + 1);
256           if (depth)
257             ui_out_spaces (uiout, 2 * depth);
258           ui_out_field_string (uiout, NULL, "end");
259           ui_out_text (uiout, "\n");
260           list = list->next;
261           continue;
262         }
263
264       if (list->control_type == python_control)
265         {
266           ui_out_field_string (uiout, NULL, "python");
267           ui_out_text (uiout, "\n");
268           /* Don't indent python code at all.  */
269           print_command_lines (uiout, *list->body_list, 0);
270           if (depth)
271             ui_out_spaces (uiout, 2 * depth);
272           ui_out_field_string (uiout, NULL, "end");
273           ui_out_text (uiout, "\n");
274           list = list->next;
275           continue;
276         }
277
278       if (list->control_type == guile_control)
279         {
280           ui_out_field_string (uiout, NULL, "guile");
281           ui_out_text (uiout, "\n");
282           print_command_lines (uiout, *list->body_list, depth + 1);
283           if (depth)
284             ui_out_spaces (uiout, 2 * depth);
285           ui_out_field_string (uiout, NULL, "end");
286           ui_out_text (uiout, "\n");
287           list = list->next;
288           continue;
289         }
290
291       /* Ignore illegal command type and try next.  */
292       list = list->next;
293     }                           /* while (list) */
294 }
295
296 /* Handle pre-post hooks.  */
297
298 static void
299 clear_hook_in_cleanup (void *data)
300 {
301   struct cmd_list_element *c = data;
302
303   c->hook_in = 0; /* Allow hook to work again once it is complete.  */
304 }
305
306 void
307 execute_cmd_pre_hook (struct cmd_list_element *c)
308 {
309   if ((c->hook_pre) && (!c->hook_in))
310     {
311       struct cleanup *cleanups = make_cleanup (clear_hook_in_cleanup, c);
312       c->hook_in = 1; /* Prevent recursive hooking.  */
313       execute_user_command (c->hook_pre, (char *) 0);
314       do_cleanups (cleanups);
315     }
316 }
317
318 void
319 execute_cmd_post_hook (struct cmd_list_element *c)
320 {
321   if ((c->hook_post) && (!c->hook_in))
322     {
323       struct cleanup *cleanups = make_cleanup (clear_hook_in_cleanup, c);
324
325       c->hook_in = 1; /* Prevent recursive hooking.  */
326       execute_user_command (c->hook_post, (char *) 0);
327       do_cleanups (cleanups);
328     }
329 }
330
331 /* Execute the command in CMD.  */
332 static void
333 do_restore_user_call_depth (void * call_depth)
334 {       
335   int *depth = call_depth;
336
337   (*depth)--;
338   if ((*depth) == 0)
339     in_user_command = 0;
340 }
341
342
343 void
344 execute_user_command (struct cmd_list_element *c, char *args)
345 {
346   struct command_line *cmdlines;
347   struct cleanup *old_chain;
348   enum command_control_type ret;
349   static int user_call_depth = 0;
350   extern unsigned int max_user_call_depth;
351
352   cmdlines = c->user_commands;
353   if (cmdlines == 0)
354     /* Null command */
355     return;
356
357   old_chain = setup_user_args (args);
358
359   if (++user_call_depth > max_user_call_depth)
360     error (_("Max user call depth exceeded -- command aborted."));
361
362   make_cleanup (do_restore_user_call_depth, &user_call_depth);
363
364   /* Set the instream to 0, indicating execution of a
365      user-defined function.  */
366   make_cleanup (do_restore_instream_cleanup, instream);
367   instream = (FILE *) 0;
368
369   /* Also set the global in_user_command, so that NULL instream is
370      not confused with Insight.  */
371   in_user_command = 1;
372
373   make_cleanup_restore_integer (&interpreter_async);
374   interpreter_async = 0;
375
376   command_nest_depth++;
377   while (cmdlines)
378     {
379       ret = execute_control_command (cmdlines);
380       if (ret != simple_control && ret != break_control)
381         {
382           warning (_("Error executing canned sequence of commands."));
383           break;
384         }
385       cmdlines = cmdlines->next;
386     }
387   command_nest_depth--;
388   do_cleanups (old_chain);
389 }
390
391 /* This function is called every time GDB prints a prompt.  It ensures
392    that errors and the like do not confuse the command tracing.  */
393
394 void
395 reset_command_nest_depth (void)
396 {
397   command_nest_depth = 1;
398
399   /* Just in case.  */
400   suppress_next_print_command_trace = 0;
401 }
402
403 /* Print the command, prefixed with '+' to represent the call depth.
404    This is slightly complicated because this function may be called
405    from execute_command and execute_control_command.  Unfortunately
406    execute_command also prints the top level control commands.
407    In these cases execute_command will call execute_control_command
408    via while_command or if_command.  Inner levels of 'if' and 'while'
409    are dealt with directly.  Therefore we can use these functions
410    to determine whether the command has been printed already or not.  */
411 void
412 print_command_trace (const char *cmd)
413 {
414   int i;
415
416   if (suppress_next_print_command_trace)
417     {
418       suppress_next_print_command_trace = 0;
419       return;
420     }
421
422   if (!source_verbose && !trace_commands)
423     return;
424
425   for (i=0; i < command_nest_depth; i++)
426     printf_filtered ("+");
427
428   printf_filtered ("%s\n", cmd);
429 }
430
431 enum command_control_type
432 execute_control_command (struct command_line *cmd)
433 {
434   struct expression *expr;
435   struct command_line *current;
436   struct cleanup *old_chain = make_cleanup (null_cleanup, 0);
437   struct value *val;
438   struct value *val_mark;
439   int loop;
440   enum command_control_type ret;
441   char *new_line;
442
443   /* Start by assuming failure, if a problem is detected, the code
444      below will simply "break" out of the switch.  */
445   ret = invalid_control;
446
447   switch (cmd->control_type)
448     {
449     case simple_control:
450       /* A simple command, execute it and return.  */
451       new_line = insert_args (cmd->line);
452       if (!new_line)
453         break;
454       make_cleanup (free_current_contents, &new_line);
455       execute_command (new_line, 0);
456       ret = cmd->control_type;
457       break;
458
459     case continue_control:
460       print_command_trace ("loop_continue");
461
462       /* Return for "continue", and "break" so we can either
463          continue the loop at the top, or break out.  */
464       ret = cmd->control_type;
465       break;
466
467     case break_control:
468       print_command_trace ("loop_break");
469
470       /* Return for "continue", and "break" so we can either
471          continue the loop at the top, or break out.  */
472       ret = cmd->control_type;
473       break;
474
475     case while_control:
476       {
477         int len = strlen (cmd->line) + 7;
478         char *buffer = alloca (len);
479
480         xsnprintf (buffer, len, "while %s", cmd->line);
481         print_command_trace (buffer);
482
483         /* Parse the loop control expression for the while statement.  */
484         new_line = insert_args (cmd->line);
485         if (!new_line)
486           break;
487         make_cleanup (free_current_contents, &new_line);
488         expr = parse_expression (new_line);
489         make_cleanup (free_current_contents, &expr);
490
491         ret = simple_control;
492         loop = 1;
493
494         /* Keep iterating so long as the expression is true.  */
495         while (loop == 1)
496           {
497             int cond_result;
498
499             QUIT;
500
501             /* Evaluate the expression.  */
502             val_mark = value_mark ();
503             val = evaluate_expression (expr);
504             cond_result = value_true (val);
505             value_free_to_mark (val_mark);
506
507             /* If the value is false, then break out of the loop.  */
508             if (!cond_result)
509               break;
510
511             /* Execute the body of the while statement.  */
512             current = *cmd->body_list;
513             while (current)
514               {
515                 command_nest_depth++;
516                 ret = execute_control_command (current);
517                 command_nest_depth--;
518
519                 /* If we got an error, or a "break" command, then stop
520                    looping.  */
521                 if (ret == invalid_control || ret == break_control)
522                   {
523                     loop = 0;
524                     break;
525                   }
526
527                 /* If we got a "continue" command, then restart the loop
528                    at this point.  */
529                 if (ret == continue_control)
530                   break;
531
532                 /* Get the next statement.  */
533                 current = current->next;
534               }
535           }
536
537         /* Reset RET so that we don't recurse the break all the way down.  */
538         if (ret == break_control)
539           ret = simple_control;
540
541         break;
542       }
543
544     case if_control:
545       {
546         int len = strlen (cmd->line) + 4;
547         char *buffer = alloca (len);
548
549         xsnprintf (buffer, len, "if %s", cmd->line);
550         print_command_trace (buffer);
551
552         new_line = insert_args (cmd->line);
553         if (!new_line)
554           break;
555         make_cleanup (free_current_contents, &new_line);
556         /* Parse the conditional for the if statement.  */
557         expr = parse_expression (new_line);
558         make_cleanup (free_current_contents, &expr);
559
560         current = NULL;
561         ret = simple_control;
562
563         /* Evaluate the conditional.  */
564         val_mark = value_mark ();
565         val = evaluate_expression (expr);
566
567         /* Choose which arm to take commands from based on the value
568            of the conditional expression.  */
569         if (value_true (val))
570           current = *cmd->body_list;
571         else if (cmd->body_count == 2)
572           current = *(cmd->body_list + 1);
573         value_free_to_mark (val_mark);
574
575         /* Execute commands in the given arm.  */
576         while (current)
577           {
578             command_nest_depth++;
579             ret = execute_control_command (current);
580             command_nest_depth--;
581
582             /* If we got an error, get out.  */
583             if (ret != simple_control)
584               break;
585
586             /* Get the next statement in the body.  */
587             current = current->next;
588           }
589
590         break;
591       }
592
593     case commands_control:
594       {
595         /* Breakpoint commands list, record the commands in the
596            breakpoint's command list and return.  */
597         new_line = insert_args (cmd->line);
598         if (!new_line)
599           break;
600         make_cleanup (free_current_contents, &new_line);
601         ret = commands_from_control_command (new_line, cmd);
602         break;
603       }
604
605     case python_control:
606     case guile_control:
607       {
608         eval_ext_lang_from_control_command (cmd);
609         ret = simple_control;
610         break;
611       }
612
613     default:
614       warning (_("Invalid control type in canned commands structure."));
615       break;
616     }
617
618   do_cleanups (old_chain);
619
620   return ret;
621 }
622
623 /* Like execute_control_command, but first set
624    suppress_next_print_command_trace.  */
625
626 enum command_control_type
627 execute_control_command_untraced (struct command_line *cmd)
628 {
629   suppress_next_print_command_trace = 1;
630   return execute_control_command (cmd);
631 }
632
633
634 /* "while" command support.  Executes a body of statements while the
635    loop condition is nonzero.  */
636
637 static void
638 while_command (char *arg, int from_tty)
639 {
640   struct command_line *command = NULL;
641   struct cleanup *old_chain;
642
643   control_level = 1;
644   command = get_command_line (while_control, arg);
645
646   if (command == NULL)
647     return;
648
649   old_chain = make_cleanup_restore_integer (&interpreter_async);
650   interpreter_async = 0;
651
652   execute_control_command_untraced (command);
653   free_command_lines (&command);
654
655   do_cleanups (old_chain);
656 }
657
658 /* "if" command support.  Execute either the true or false arm depending
659    on the value of the if conditional.  */
660
661 static void
662 if_command (char *arg, int from_tty)
663 {
664   struct command_line *command = NULL;
665   struct cleanup *old_chain;
666
667   control_level = 1;
668   command = get_command_line (if_control, arg);
669
670   if (command == NULL)
671     return;
672
673   old_chain = make_cleanup_restore_integer (&interpreter_async);
674   interpreter_async = 0;
675
676   execute_control_command_untraced (command);
677   free_command_lines (&command);
678
679   do_cleanups (old_chain);
680 }
681
682 /* Cleanup */
683 static void
684 arg_cleanup (void *ignore)
685 {
686   struct user_args *oargs = user_args;
687
688   if (!user_args)
689     internal_error (__FILE__, __LINE__,
690                     _("arg_cleanup called with no user args.\n"));
691
692   user_args = user_args->next;
693   xfree (oargs->command);
694   xfree (oargs);
695 }
696
697 /* Bind the incomming arguments for a user defined command to
698    $arg0, $arg1 ... $argMAXUSERARGS.  */
699
700 static struct cleanup *
701 setup_user_args (char *p)
702 {
703   struct user_args *args;
704   struct cleanup *old_chain;
705   unsigned int arg_count = 0;
706
707   args = (struct user_args *) xmalloc (sizeof (struct user_args));
708   memset (args, 0, sizeof (struct user_args));
709
710   args->next = user_args;
711   user_args = args;
712
713   old_chain = make_cleanup (arg_cleanup, 0/*ignored*/);
714
715   if (p == NULL)
716     return old_chain;
717
718   user_args->command = p = xstrdup (p);
719
720   while (*p)
721     {
722       char *start_arg;
723       int squote = 0;
724       int dquote = 0;
725       int bsquote = 0;
726
727       if (arg_count >= MAXUSERARGS)
728         error (_("user defined function may only have %d arguments."),
729                MAXUSERARGS);
730
731       /* Strip whitespace.  */
732       while (*p == ' ' || *p == '\t')
733         p++;
734
735       /* P now points to an argument.  */
736       start_arg = p;
737       user_args->a[arg_count].arg = p;
738
739       /* Get to the end of this argument.  */
740       while (*p)
741         {
742           if (((*p == ' ' || *p == '\t')) && !squote && !dquote && !bsquote)
743             break;
744           else
745             {
746               if (bsquote)
747                 bsquote = 0;
748               else if (*p == '\\')
749                 bsquote = 1;
750               else if (squote)
751                 {
752                   if (*p == '\'')
753                     squote = 0;
754                 }
755               else if (dquote)
756                 {
757                   if (*p == '"')
758                     dquote = 0;
759                 }
760               else
761                 {
762                   if (*p == '\'')
763                     squote = 1;
764                   else if (*p == '"')
765                     dquote = 1;
766                 }
767               p++;
768             }
769         }
770
771       user_args->a[arg_count].len = p - start_arg;
772       arg_count++;
773       user_args->count++;
774     }
775   return old_chain;
776 }
777
778 /* Given character string P, return a point to the first argument
779    ($arg), or NULL if P contains no arguments.  */
780
781 static char *
782 locate_arg (char *p)
783 {
784   while ((p = strchr (p, '$')))
785     {
786       if (strncmp (p, "$arg", 4) == 0
787           && (isdigit (p[4]) || p[4] == 'c'))
788         return p;
789       p++;
790     }
791   return NULL;
792 }
793
794 /* Insert the user defined arguments stored in user_arg into the $arg
795    arguments found in line, with the updated copy being placed into
796    nline.  */
797
798 static char *
799 insert_args (char *line)
800 {
801   char *p, *save_line, *new_line;
802   unsigned len, i;
803
804   /* If we are not in a user-defined function, treat $argc, $arg0, et
805      cetera as normal convenience variables.  */
806   if (user_args == NULL)
807     return xstrdup (line);
808
809   /* First we need to know how much memory to allocate for the new
810      line.  */
811   save_line = line;
812   len = 0;
813   while ((p = locate_arg (line)))
814     {
815       len += p - line;
816       i = p[4] - '0';
817
818       if (p[4] == 'c')
819         {
820           /* $argc.  Number will be <=10.  */
821           len += user_args->count == 10 ? 2 : 1;
822         }
823       else if (i >= user_args->count)
824         {
825           error (_("Missing argument %d in user function."), i);
826           return NULL;
827         }
828       else
829         {
830           len += user_args->a[i].len;
831         }
832       line = p + 5;
833     }
834
835   /* Don't forget the tail.  */
836   len += strlen (line);
837
838   /* Allocate space for the new line and fill it in.  */
839   new_line = (char *) xmalloc (len + 1);
840   if (new_line == NULL)
841     return NULL;
842
843   /* Restore pointer to beginning of old line.  */
844   line = save_line;
845
846   /* Save pointer to beginning of new line.  */
847   save_line = new_line;
848
849   while ((p = locate_arg (line)))
850     {
851       int i, len;
852
853       memcpy (new_line, line, p - line);
854       new_line += p - line;
855
856       if (p[4] == 'c')
857         {
858           gdb_assert (user_args->count >= 0 && user_args->count <= 10);
859           if (user_args->count == 10)
860             {
861               *(new_line++) = '1';
862               *(new_line++) = '0';
863             }
864           else
865             *(new_line++) = user_args->count + '0';
866         }
867       else
868         {
869           i = p[4] - '0';
870           len = user_args->a[i].len;
871           if (len)
872             {
873               memcpy (new_line, user_args->a[i].arg, len);
874               new_line += len;
875             }
876         }
877       line = p + 5;
878     }
879   /* Don't forget the tail.  */
880   strcpy (new_line, line);
881
882   /* Return a pointer to the beginning of the new line.  */
883   return save_line;
884 }
885
886 \f
887 /* Expand the body_list of COMMAND so that it can hold NEW_LENGTH
888    code bodies.  This is typically used when we encounter an "else"
889    clause for an "if" command.  */
890
891 static void
892 realloc_body_list (struct command_line *command, int new_length)
893 {
894   int n;
895   struct command_line **body_list;
896
897   n = command->body_count;
898
899   /* Nothing to do?  */
900   if (new_length <= n)
901     return;
902
903   body_list = (struct command_line **)
904     xmalloc (sizeof (struct command_line *) * new_length);
905
906   memcpy (body_list, command->body_list, sizeof (struct command_line *) * n);
907   memset (body_list + n, 0, sizeof (struct command_line *) * (new_length - n));
908
909   xfree (command->body_list);
910   command->body_list = body_list;
911   command->body_count = new_length;
912 }
913
914 /* Read next line from stdout.  Passed to read_command_line_1 and
915    recurse_read_control_structure whenever we need to read commands
916    from stdout.  */
917
918 static char *
919 read_next_line (void)
920 {
921   char *prompt_ptr, control_prompt[256];
922   int i = 0;
923
924   if (control_level >= 254)
925     error (_("Control nesting too deep!"));
926
927   /* Set a prompt based on the nesting of the control commands.  */
928   if (instream == stdin || (instream == 0 && deprecated_readline_hook != NULL))
929     {
930       for (i = 0; i < control_level; i++)
931         control_prompt[i] = ' ';
932       control_prompt[i] = '>';
933       control_prompt[i + 1] = '\0';
934       prompt_ptr = (char *) &control_prompt[0];
935     }
936   else
937     prompt_ptr = NULL;
938
939   return command_line_input (prompt_ptr, instream == stdin, "commands");
940 }
941
942 /* Process one input line.  If the command is an "end", return such an
943    indication to the caller.  If PARSE_COMMANDS is true, strip leading
944    whitespace (trailing whitespace is always stripped) in the line,
945    attempt to recognize GDB control commands, and also return an
946    indication if the command is an "else" or a nop.
947
948    Otherwise, only "end" is recognized.  */
949
950 static enum misc_command_type
951 process_next_line (char *p, struct command_line **command, int parse_commands,
952                    void (*validator)(char *, void *), void *closure)
953 {
954   char *p_end;
955   char *p_start;
956   int not_handled = 0;
957
958   /* Not sure what to do here.  */
959   if (p == NULL)
960     return end_command;
961
962   /* Strip trailing whitespace.  */
963   p_end = p + strlen (p);
964   while (p_end > p && (p_end[-1] == ' ' || p_end[-1] == '\t'))
965     p_end--;
966
967   p_start = p;
968   /* Strip leading whitespace.  */
969   while (p_start < p_end && (*p_start == ' ' || *p_start == '\t'))
970     p_start++;
971
972   /* 'end' is always recognized, regardless of parse_commands value.
973      We also permit whitespace before end and after.  */
974   if (p_end - p_start == 3 && !strncmp (p_start, "end", 3))
975     return end_command;
976   
977   if (parse_commands)
978     {
979       /* If commands are parsed, we skip initial spaces.  Otherwise,
980          which is the case for Python commands and documentation
981          (see the 'document' command), spaces are preserved.  */
982       p = p_start;
983
984       /* Blanks and comments don't really do anything, but we need to
985          distinguish them from else, end and other commands which can
986          be executed.  */
987       if (p_end == p || p[0] == '#')
988         return nop_command;
989
990       /* Is the else clause of an if control structure?  */
991       if (p_end - p == 4 && !strncmp (p, "else", 4))
992         return else_command;
993
994       /* Check for while, if, break, continue, etc and build a new
995          command line structure for them.  */
996       if ((p_end - p >= 14 && !strncmp (p, "while-stepping", 14))
997           || (p_end - p >= 8 && !strncmp (p, "stepping", 8))
998           || (p_end - p >= 2 && !strncmp (p, "ws", 2)))
999         {
1000           /* Because validate_actionline and encode_action lookup
1001              command's line as command, we need the line to
1002              include 'while-stepping'.
1003
1004              For 'ws' alias, the command will have 'ws', not expanded
1005              to 'while-stepping'.  This is intentional -- we don't
1006              really want frontend to send a command list with 'ws',
1007              and next break-info returning command line with
1008              'while-stepping'.  This should work, but might cause the
1009              breakpoint to be marked as changed while it's actually
1010              not.  */
1011           *command = build_command_line (while_stepping_control, p);
1012         }
1013       else if (p_end - p > 5 && !strncmp (p, "while", 5))
1014         {
1015           char *first_arg;
1016
1017           first_arg = p + 5;
1018           while (first_arg < p_end && isspace (*first_arg))
1019             first_arg++;
1020           *command = build_command_line (while_control, first_arg);
1021         }
1022       else if (p_end - p > 2 && !strncmp (p, "if", 2))
1023         {
1024           char *first_arg;
1025
1026           first_arg = p + 2;
1027           while (first_arg < p_end && isspace (*first_arg))
1028             first_arg++;
1029           *command = build_command_line (if_control, first_arg);
1030         }
1031       else if (p_end - p >= 8 && !strncmp (p, "commands", 8))
1032         {
1033           char *first_arg;
1034
1035           first_arg = p + 8;
1036           while (first_arg < p_end && isspace (*first_arg))
1037             first_arg++;
1038           *command = build_command_line (commands_control, first_arg);
1039         }
1040       else if (p_end - p == 6 && !strncmp (p, "python", 6))
1041         {
1042           /* Note that we ignore the inline "python command" form
1043              here.  */
1044           *command = build_command_line (python_control, "");
1045         }
1046       else if (p_end - p == 5 && !strncmp (p, "guile", 5))
1047         {
1048           /* Note that we ignore the inline "guile command" form here.  */
1049           *command = build_command_line (guile_control, "");
1050         }
1051       else if (p_end - p == 10 && !strncmp (p, "loop_break", 10))
1052         {
1053           *command = (struct command_line *)
1054             xmalloc (sizeof (struct command_line));
1055           (*command)->next = NULL;
1056           (*command)->line = NULL;
1057           (*command)->control_type = break_control;
1058           (*command)->body_count = 0;
1059           (*command)->body_list = NULL;
1060         }
1061       else if (p_end - p == 13 && !strncmp (p, "loop_continue", 13))
1062         {
1063           *command = (struct command_line *)
1064             xmalloc (sizeof (struct command_line));
1065           (*command)->next = NULL;
1066           (*command)->line = NULL;
1067           (*command)->control_type = continue_control;
1068           (*command)->body_count = 0;
1069           (*command)->body_list = NULL;
1070         }
1071       else
1072         not_handled = 1;
1073     }
1074
1075   if (!parse_commands || not_handled)
1076     {
1077       /* A normal command.  */
1078       *command = (struct command_line *)
1079         xmalloc (sizeof (struct command_line));
1080       (*command)->next = NULL;
1081       (*command)->line = savestring (p, p_end - p);
1082       (*command)->control_type = simple_control;
1083       (*command)->body_count = 0;
1084       (*command)->body_list = NULL;
1085     }
1086
1087   if (validator)
1088     {
1089       volatile struct gdb_exception ex;
1090
1091       TRY_CATCH (ex, RETURN_MASK_ALL)
1092         {
1093           validator ((*command)->line, closure);
1094         }
1095       if (ex.reason < 0)
1096         {
1097           xfree (*command);
1098           throw_exception (ex);
1099         }
1100     }
1101
1102   /* Nothing special.  */
1103   return ok_command;
1104 }
1105
1106 /* Recursively read in the control structures and create a
1107    command_line structure from them.  Use read_next_line_func to
1108    obtain lines of the command.  */
1109
1110 static enum command_control_type
1111 recurse_read_control_structure (char * (*read_next_line_func) (void),
1112                                 struct command_line *current_cmd,
1113                                 void (*validator)(char *, void *),
1114                                 void *closure)
1115 {
1116   int current_body, i;
1117   enum misc_command_type val;
1118   enum command_control_type ret;
1119   struct command_line **body_ptr, *child_tail, *next;
1120
1121   child_tail = NULL;
1122   current_body = 1;
1123
1124   /* Sanity checks.  */
1125   if (current_cmd->control_type == simple_control)
1126     error (_("Recursed on a simple control type."));
1127
1128   if (current_body > current_cmd->body_count)
1129     error (_("Allocated body is smaller than this command type needs."));
1130
1131   /* Read lines from the input stream and build control structures.  */
1132   while (1)
1133     {
1134       dont_repeat ();
1135
1136       next = NULL;
1137       val = process_next_line (read_next_line_func (), &next, 
1138                                current_cmd->control_type != python_control
1139                                && current_cmd->control_type != guile_control,
1140                                validator, closure);
1141
1142       /* Just skip blanks and comments.  */
1143       if (val == nop_command)
1144         continue;
1145
1146       if (val == end_command)
1147         {
1148           if (multi_line_command_p (current_cmd->control_type))
1149             {
1150               /* Success reading an entire canned sequence of commands.  */
1151               ret = simple_control;
1152               break;
1153             }
1154           else
1155             {
1156               ret = invalid_control;
1157               break;
1158             }
1159         }
1160
1161       /* Not the end of a control structure.  */
1162       if (val == else_command)
1163         {
1164           if (current_cmd->control_type == if_control
1165               && current_body == 1)
1166             {
1167               realloc_body_list (current_cmd, 2);
1168               current_body = 2;
1169               child_tail = NULL;
1170               continue;
1171             }
1172           else
1173             {
1174               ret = invalid_control;
1175               break;
1176             }
1177         }
1178
1179       if (child_tail)
1180         {
1181           child_tail->next = next;
1182         }
1183       else
1184         {
1185           body_ptr = current_cmd->body_list;
1186           for (i = 1; i < current_body; i++)
1187             body_ptr++;
1188
1189           *body_ptr = next;
1190
1191         }
1192
1193       child_tail = next;
1194
1195       /* If the latest line is another control structure, then recurse
1196          on it.  */
1197       if (multi_line_command_p (next->control_type))
1198         {
1199           control_level++;
1200           ret = recurse_read_control_structure (read_next_line_func, next,
1201                                                 validator, closure);
1202           control_level--;
1203
1204           if (ret != simple_control)
1205             break;
1206         }
1207     }
1208
1209   dont_repeat ();
1210
1211   return ret;
1212 }
1213
1214 static void
1215 restore_interp (void *arg)
1216 {
1217   interp_set_temp (interp_name ((struct interp *)arg));
1218 }
1219
1220 /* Read lines from the input stream and accumulate them in a chain of
1221    struct command_line's, which is then returned.  For input from a
1222    terminal, the special command "end" is used to mark the end of the
1223    input, and is not included in the returned chain of commands.
1224
1225    If PARSE_COMMANDS is true, strip leading whitespace (trailing whitespace
1226    is always stripped) in the line and attempt to recognize GDB control
1227    commands.  Otherwise, only "end" is recognized.  */
1228
1229 #define END_MESSAGE "End with a line saying just \"end\"."
1230
1231 struct command_line *
1232 read_command_lines (char *prompt_arg, int from_tty, int parse_commands,
1233                     void (*validator)(char *, void *), void *closure)
1234 {
1235   struct command_line *head;
1236
1237   if (from_tty && input_from_terminal_p ())
1238     {
1239       if (deprecated_readline_begin_hook)
1240         {
1241           /* Note - intentional to merge messages with no newline.  */
1242           (*deprecated_readline_begin_hook) ("%s  %s\n", prompt_arg,
1243                                              END_MESSAGE);
1244         }
1245       else
1246         {
1247           printf_unfiltered ("%s\n%s\n", prompt_arg, END_MESSAGE);
1248           gdb_flush (gdb_stdout);
1249         }
1250     }
1251
1252
1253   /* Reading commands assumes the CLI behavior, so temporarily
1254      override the current interpreter with CLI.  */
1255   if (current_interp_named_p (INTERP_CONSOLE))
1256     head = read_command_lines_1 (read_next_line, parse_commands,
1257                                  validator, closure);
1258   else
1259     {
1260       struct interp *old_interp = interp_set_temp (INTERP_CONSOLE);
1261       struct cleanup *old_chain = make_cleanup (restore_interp, old_interp);
1262
1263       head = read_command_lines_1 (read_next_line, parse_commands,
1264                                    validator, closure);
1265       do_cleanups (old_chain);
1266     }
1267
1268   if (deprecated_readline_end_hook && from_tty && input_from_terminal_p ())
1269     {
1270       (*deprecated_readline_end_hook) ();
1271     }
1272   return (head);
1273 }
1274
1275 /* Act the same way as read_command_lines, except that each new line is
1276    obtained using READ_NEXT_LINE_FUNC.  */
1277
1278 struct command_line *
1279 read_command_lines_1 (char * (*read_next_line_func) (void), int parse_commands,
1280                       void (*validator)(char *, void *), void *closure)
1281 {
1282   struct command_line *head, *tail, *next;
1283   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
1284   enum command_control_type ret;
1285   enum misc_command_type val;
1286
1287   control_level = 0;
1288   head = tail = NULL;
1289
1290   while (1)
1291     {
1292       dont_repeat ();
1293       val = process_next_line (read_next_line_func (), &next, parse_commands,
1294                                validator, closure);
1295
1296       /* Ignore blank lines or comments.  */
1297       if (val == nop_command)
1298         continue;
1299
1300       if (val == end_command)
1301         {
1302           ret = simple_control;
1303           break;
1304         }
1305
1306       if (val != ok_command)
1307         {
1308           ret = invalid_control;
1309           break;
1310         }
1311
1312       if (multi_line_command_p (next->control_type))
1313         {
1314           control_level++;
1315           ret = recurse_read_control_structure (read_next_line_func, next,
1316                                                 validator, closure);
1317           control_level--;
1318
1319           if (ret == invalid_control)
1320             break;
1321         }
1322
1323       if (tail)
1324         {
1325           tail->next = next;
1326         }
1327       else
1328         {
1329           head = next;
1330           make_cleanup_free_command_lines (&head);
1331         }
1332       tail = next;
1333     }
1334
1335   dont_repeat ();
1336
1337   if (ret != invalid_control)
1338     discard_cleanups (old_chain);
1339   else
1340     do_cleanups (old_chain);
1341
1342   return head;
1343 }
1344
1345 /* Free a chain of struct command_line's.  */
1346
1347 void
1348 free_command_lines (struct command_line **lptr)
1349 {
1350   struct command_line *l = *lptr;
1351   struct command_line *next;
1352   struct command_line **blist;
1353   int i;
1354
1355   while (l)
1356     {
1357       if (l->body_count > 0)
1358         {
1359           blist = l->body_list;
1360           for (i = 0; i < l->body_count; i++, blist++)
1361             free_command_lines (blist);
1362         }
1363       next = l->next;
1364       xfree (l->line);
1365       xfree (l);
1366       l = next;
1367     }
1368   *lptr = NULL;
1369 }
1370
1371 static void
1372 do_free_command_lines_cleanup (void *arg)
1373 {
1374   free_command_lines (arg);
1375 }
1376
1377 struct cleanup *
1378 make_cleanup_free_command_lines (struct command_line **arg)
1379 {
1380   return make_cleanup (do_free_command_lines_cleanup, arg);
1381 }
1382
1383 struct command_line *
1384 copy_command_lines (struct command_line *cmds)
1385 {
1386   struct command_line *result = NULL;
1387
1388   if (cmds)
1389     {
1390       result = (struct command_line *) xmalloc (sizeof (struct command_line));
1391
1392       result->next = copy_command_lines (cmds->next);
1393       result->line = xstrdup (cmds->line);
1394       result->control_type = cmds->control_type;
1395       result->body_count = cmds->body_count;
1396       if (cmds->body_count > 0)
1397         {
1398           int i;
1399
1400           result->body_list = (struct command_line **)
1401             xmalloc (sizeof (struct command_line *) * cmds->body_count);
1402
1403           for (i = 0; i < cmds->body_count; i++)
1404             result->body_list[i] = copy_command_lines (cmds->body_list[i]);
1405         }
1406       else
1407         result->body_list = NULL;
1408     }
1409
1410   return result;
1411 }
1412 \f
1413 /* Validate that *COMNAME is a valid name for a command.  Return the
1414    containing command list, in case it starts with a prefix command.
1415    The prefix must already exist.  *COMNAME is advanced to point after
1416    any prefix, and a NUL character overwrites the space after the
1417    prefix.  */
1418
1419 static struct cmd_list_element **
1420 validate_comname (char **comname)
1421 {
1422   struct cmd_list_element **list = &cmdlist;
1423   char *p, *last_word;
1424
1425   if (*comname == 0)
1426     error_no_arg (_("name of command to define"));
1427
1428   /* Find the last word of the argument.  */
1429   p = *comname + strlen (*comname);
1430   while (p > *comname && isspace (p[-1]))
1431     p--;
1432   while (p > *comname && !isspace (p[-1]))
1433     p--;
1434   last_word = p;
1435
1436   /* Find the corresponding command list.  */
1437   if (last_word != *comname)
1438     {
1439       struct cmd_list_element *c;
1440       char saved_char;
1441       const char *tem = *comname;
1442
1443       /* Separate the prefix and the command.  */
1444       saved_char = last_word[-1];
1445       last_word[-1] = '\0';
1446
1447       c = lookup_cmd (&tem, cmdlist, "", 0, 1);
1448       if (c->prefixlist == NULL)
1449         error (_("\"%s\" is not a prefix command."), *comname);
1450
1451       list = c->prefixlist;
1452       last_word[-1] = saved_char;
1453       *comname = last_word;
1454     }
1455
1456   p = *comname;
1457   while (*p)
1458     {
1459       if (!isalnum (*p) && *p != '-' && *p != '_')
1460         error (_("Junk in argument list: \"%s\""), p);
1461       p++;
1462     }
1463
1464   return list;
1465 }
1466
1467 /* This is just a placeholder in the command data structures.  */
1468 static void
1469 user_defined_command (char *ignore, int from_tty)
1470 {
1471 }
1472
1473 static void
1474 define_command (char *comname, int from_tty)
1475 {
1476 #define MAX_TMPBUF 128   
1477   enum cmd_hook_type
1478     {
1479       CMD_NO_HOOK = 0,
1480       CMD_PRE_HOOK,
1481       CMD_POST_HOOK
1482     };
1483   struct command_line *cmds;
1484   struct cmd_list_element *c, *newc, *hookc = 0, **list;
1485   char *tem, *comfull;
1486   const char *tem_c;
1487   char tmpbuf[MAX_TMPBUF];
1488   int  hook_type      = CMD_NO_HOOK;
1489   int  hook_name_size = 0;
1490    
1491 #define HOOK_STRING     "hook-"
1492 #define HOOK_LEN 5
1493 #define HOOK_POST_STRING "hookpost-"
1494 #define HOOK_POST_LEN    9
1495
1496   comfull = comname;
1497   list = validate_comname (&comname);
1498
1499   /* Look it up, and verify that we got an exact match.  */
1500   tem_c = comname;
1501   c = lookup_cmd (&tem_c, *list, "", -1, 1);
1502   if (c && strcmp (comname, c->name) != 0)
1503     c = 0;
1504
1505   if (c)
1506     {
1507       int q;
1508
1509       if (c->class == class_user || c->class == class_alias)
1510         q = query (_("Redefine command \"%s\"? "), c->name);
1511       else
1512         q = query (_("Really redefine built-in command \"%s\"? "), c->name);
1513       if (!q)
1514         error (_("Command \"%s\" not redefined."), c->name);
1515     }
1516
1517   /* If this new command is a hook, then mark the command which it
1518      is hooking.  Note that we allow hooking `help' commands, so that
1519      we can hook the `stop' pseudo-command.  */
1520
1521   if (!strncmp (comname, HOOK_STRING, HOOK_LEN))
1522     {
1523        hook_type      = CMD_PRE_HOOK;
1524        hook_name_size = HOOK_LEN;
1525     }
1526   else if (!strncmp (comname, HOOK_POST_STRING, HOOK_POST_LEN))
1527     {
1528       hook_type      = CMD_POST_HOOK;
1529       hook_name_size = HOOK_POST_LEN;
1530     }
1531    
1532   if (hook_type != CMD_NO_HOOK)
1533     {
1534       /* Look up cmd it hooks, and verify that we got an exact match.  */
1535       tem_c = comname + hook_name_size;
1536       hookc = lookup_cmd (&tem_c, *list, "", -1, 0);
1537       if (hookc && strcmp (comname + hook_name_size, hookc->name) != 0)
1538         hookc = 0;
1539       if (!hookc)
1540         {
1541           warning (_("Your new `%s' command does not "
1542                      "hook any existing command."),
1543                    comfull);
1544           if (!query (_("Proceed? ")))
1545             error (_("Not confirmed."));
1546         }
1547     }
1548
1549   comname = xstrdup (comname);
1550
1551   /* If the rest of the commands will be case insensitive, this one
1552      should behave in the same manner.  */
1553   for (tem = comname; *tem; tem++)
1554     if (isupper (*tem))
1555       *tem = tolower (*tem);
1556
1557   xsnprintf (tmpbuf, sizeof (tmpbuf),
1558              "Type commands for definition of \"%s\".", comfull);
1559   cmds = read_command_lines (tmpbuf, from_tty, 1, 0, 0);
1560
1561   if (c && c->class == class_user)
1562     free_command_lines (&c->user_commands);
1563
1564   newc = add_cmd (comname, class_user, user_defined_command,
1565                   (c && c->class == class_user)
1566                   ? c->doc : xstrdup ("User-defined."), list);
1567   newc->user_commands = cmds;
1568
1569   /* If this new command is a hook, then mark both commands as being
1570      tied.  */
1571   if (hookc)
1572     {
1573       switch (hook_type)
1574         {
1575         case CMD_PRE_HOOK:
1576           hookc->hook_pre  = newc;  /* Target gets hooked.  */
1577           newc->hookee_pre = hookc; /* We are marked as hooking target cmd.  */
1578           break;
1579         case CMD_POST_HOOK:
1580           hookc->hook_post  = newc;  /* Target gets hooked.  */
1581           newc->hookee_post = hookc; /* We are marked as hooking
1582                                         target cmd.  */
1583           break;
1584         default:
1585           /* Should never come here as hookc would be 0.  */
1586           internal_error (__FILE__, __LINE__, _("bad switch"));
1587         }
1588     }
1589 }
1590
1591 static void
1592 document_command (char *comname, int from_tty)
1593 {
1594   struct command_line *doclines;
1595   struct cmd_list_element *c, **list;
1596   const char *tem;
1597   char *comfull;
1598   char tmpbuf[128];
1599
1600   comfull = comname;
1601   list = validate_comname (&comname);
1602
1603   tem = comname;
1604   c = lookup_cmd (&tem, *list, "", 0, 1);
1605
1606   if (c->class != class_user)
1607     error (_("Command \"%s\" is built-in."), comfull);
1608
1609   xsnprintf (tmpbuf, sizeof (tmpbuf), "Type documentation for \"%s\".",
1610              comfull);
1611   doclines = read_command_lines (tmpbuf, from_tty, 0, 0, 0);
1612
1613   if (c->doc)
1614     xfree (c->doc);
1615
1616   {
1617     struct command_line *cl1;
1618     int len = 0;
1619
1620     for (cl1 = doclines; cl1; cl1 = cl1->next)
1621       len += strlen (cl1->line) + 1;
1622
1623     c->doc = (char *) xmalloc (len + 1);
1624     *c->doc = 0;
1625
1626     for (cl1 = doclines; cl1; cl1 = cl1->next)
1627       {
1628         strcat (c->doc, cl1->line);
1629         if (cl1->next)
1630           strcat (c->doc, "\n");
1631       }
1632   }
1633
1634   free_command_lines (&doclines);
1635 }
1636 \f
1637 struct source_cleanup_lines_args
1638 {
1639   int old_line;
1640   const char *old_file;
1641 };
1642
1643 static void
1644 source_cleanup_lines (void *args)
1645 {
1646   struct source_cleanup_lines_args *p =
1647     (struct source_cleanup_lines_args *) args;
1648
1649   source_line_number = p->old_line;
1650   source_file_name = p->old_file;
1651 }
1652
1653 /* Used to implement source_command.  */
1654
1655 void
1656 script_from_file (FILE *stream, const char *file)
1657 {
1658   struct cleanup *old_cleanups;
1659   struct source_cleanup_lines_args old_lines;
1660
1661   if (stream == NULL)
1662     internal_error (__FILE__, __LINE__, _("called with NULL file pointer!"));
1663
1664   old_lines.old_line = source_line_number;
1665   old_lines.old_file = source_file_name;
1666   old_cleanups = make_cleanup (source_cleanup_lines, &old_lines);
1667   source_line_number = 0;
1668   source_file_name = file;
1669
1670   {
1671     volatile struct gdb_exception e;
1672
1673     TRY_CATCH (e, RETURN_MASK_ERROR)
1674       {
1675         read_command_file (stream);
1676       }
1677     switch (e.reason)
1678       {
1679       case 0:
1680         break;
1681       case RETURN_ERROR:
1682         /* Re-throw the error, but with the file name information
1683            prepended.  */
1684         throw_error (e.error,
1685                      _("%s:%d: Error in sourced command file:\n%s"),
1686                      source_file_name, source_line_number, e.message);
1687       default:
1688         internal_error (__FILE__, __LINE__, _("bad reason"));
1689       }
1690   }
1691
1692   do_cleanups (old_cleanups);
1693 }
1694
1695 /* Print the definition of user command C to STREAM.  Or, if C is a
1696    prefix command, show the definitions of all user commands under C
1697    (recursively).  PREFIX and NAME combined are the name of the
1698    current command.  */
1699 void
1700 show_user_1 (struct cmd_list_element *c, const char *prefix, const char *name,
1701              struct ui_file *stream)
1702 {
1703   struct command_line *cmdlines;
1704
1705   if (c->prefixlist != NULL)
1706     {
1707       char *prefixname = c->prefixname;
1708
1709       for (c = *c->prefixlist; c != NULL; c = c->next)
1710         if (c->class == class_user || c->prefixlist != NULL)
1711           show_user_1 (c, prefixname, c->name, gdb_stdout);
1712       return;
1713     }
1714
1715   cmdlines = c->user_commands;
1716   if (!cmdlines)
1717     return;
1718   fprintf_filtered (stream, "User command \"%s%s\":\n", prefix, name);
1719
1720   print_command_lines (current_uiout, cmdlines, 1);
1721   fputs_filtered ("\n", stream);
1722 }
1723
1724 \f
1725
1726 initialize_file_ftype _initialize_cli_script;
1727
1728 void
1729 _initialize_cli_script (void)
1730 {
1731   add_com ("document", class_support, document_command, _("\
1732 Document a user-defined command.\n\
1733 Give command name as argument.  Give documentation on following lines.\n\
1734 End with a line of just \"end\"."));
1735   add_com ("define", class_support, define_command, _("\
1736 Define a new command name.  Command name is argument.\n\
1737 Definition appears on following lines, one command per line.\n\
1738 End with a line of just \"end\".\n\
1739 Use the \"document\" command to give documentation for the new command.\n\
1740 Commands defined in this way may have up to ten arguments."));
1741
1742   add_com ("while", class_support, while_command, _("\
1743 Execute nested commands WHILE the conditional expression is non zero.\n\
1744 The conditional expression must follow the word `while' and must in turn be\n\
1745 followed by a new line.  The nested commands must be entered one per line,\n\
1746 and should be terminated by the word `end'."));
1747
1748   add_com ("if", class_support, if_command, _("\
1749 Execute nested commands once IF the conditional expression is non zero.\n\
1750 The conditional expression must follow the word `if' and must in turn be\n\
1751 followed by a new line.  The nested commands must be entered one per line,\n\
1752 and should be terminated by the word 'else' or `end'.  If an else clause\n\
1753 is used, the same rules apply to its nested commands as to the first ones."));
1754 }