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