New function cli-utils.c:extract_arg_const
[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         error (_("user defined function may only have %d arguments."),
693                MAXUSERARGS);
694
695       /* Strip whitespace.  */
696       while (*p == ' ' || *p == '\t')
697         p++;
698
699       /* P now points to an argument.  */
700       start_arg = p;
701       user_args->a[arg_count].arg = p;
702
703       /* Get to the end of this argument.  */
704       while (*p)
705         {
706           if (((*p == ' ' || *p == '\t')) && !squote && !dquote && !bsquote)
707             break;
708           else
709             {
710               if (bsquote)
711                 bsquote = 0;
712               else if (*p == '\\')
713                 bsquote = 1;
714               else if (squote)
715                 {
716                   if (*p == '\'')
717                     squote = 0;
718                 }
719               else if (dquote)
720                 {
721                   if (*p == '"')
722                     dquote = 0;
723                 }
724               else
725                 {
726                   if (*p == '\'')
727                     squote = 1;
728                   else if (*p == '"')
729                     dquote = 1;
730                 }
731               p++;
732             }
733         }
734
735       user_args->a[arg_count].len = p - start_arg;
736       arg_count++;
737       user_args->count++;
738     }
739   return old_chain;
740 }
741
742 /* Given character string P, return a point to the first argument
743    ($arg), or NULL if P contains no arguments.  */
744
745 static char *
746 locate_arg (char *p)
747 {
748   while ((p = strchr (p, '$')))
749     {
750       if (strncmp (p, "$arg", 4) == 0
751           && (isdigit (p[4]) || p[4] == 'c'))
752         return p;
753       p++;
754     }
755   return NULL;
756 }
757
758 /* Insert the user defined arguments stored in user_arg into the $arg
759    arguments found in line, with the updated copy being placed into
760    nline.  */
761
762 static char *
763 insert_args (char *line)
764 {
765   char *p, *save_line, *new_line;
766   unsigned len, i;
767
768   /* If we are not in a user-defined function, treat $argc, $arg0, et
769      cetera as normal convenience variables.  */
770   if (user_args == NULL)
771     return xstrdup (line);
772
773   /* First we need to know how much memory to allocate for the new
774      line.  */
775   save_line = line;
776   len = 0;
777   while ((p = locate_arg (line)))
778     {
779       len += p - line;
780       i = p[4] - '0';
781
782       if (p[4] == 'c')
783         {
784           /* $argc.  Number will be <=10.  */
785           len += user_args->count == 10 ? 2 : 1;
786         }
787       else if (i >= user_args->count)
788         {
789           error (_("Missing argument %d in user function."), i);
790           return NULL;
791         }
792       else
793         {
794           len += user_args->a[i].len;
795         }
796       line = p + 5;
797     }
798
799   /* Don't forget the tail.  */
800   len += strlen (line);
801
802   /* Allocate space for the new line and fill it in.  */
803   new_line = (char *) xmalloc (len + 1);
804   if (new_line == NULL)
805     return NULL;
806
807   /* Restore pointer to beginning of old line.  */
808   line = save_line;
809
810   /* Save pointer to beginning of new line.  */
811   save_line = new_line;
812
813   while ((p = locate_arg (line)))
814     {
815       int i, len;
816
817       memcpy (new_line, line, p - line);
818       new_line += p - line;
819
820       if (p[4] == 'c')
821         {
822           gdb_assert (user_args->count >= 0 && user_args->count <= 10);
823           if (user_args->count == 10)
824             {
825               *(new_line++) = '1';
826               *(new_line++) = '0';
827             }
828           else
829             *(new_line++) = user_args->count + '0';
830         }
831       else
832         {
833           i = p[4] - '0';
834           len = user_args->a[i].len;
835           if (len)
836             {
837               memcpy (new_line, user_args->a[i].arg, len);
838               new_line += len;
839             }
840         }
841       line = p + 5;
842     }
843   /* Don't forget the tail.  */
844   strcpy (new_line, line);
845
846   /* Return a pointer to the beginning of the new line.  */
847   return save_line;
848 }
849
850 \f
851 /* Expand the body_list of COMMAND so that it can hold NEW_LENGTH
852    code bodies.  This is typically used when we encounter an "else"
853    clause for an "if" command.  */
854
855 static void
856 realloc_body_list (struct command_line *command, int new_length)
857 {
858   int n;
859   struct command_line **body_list;
860
861   n = command->body_count;
862
863   /* Nothing to do?  */
864   if (new_length <= n)
865     return;
866
867   body_list = (struct command_line **)
868     xmalloc (sizeof (struct command_line *) * new_length);
869
870   memcpy (body_list, command->body_list, sizeof (struct command_line *) * n);
871   memset (body_list + n, 0, sizeof (struct command_line *) * (new_length - n));
872
873   xfree (command->body_list);
874   command->body_list = body_list;
875   command->body_count = new_length;
876 }
877
878 /* Read next line from stdout.  Passed to read_command_line_1 and
879    recurse_read_control_structure whenever we need to read commands
880    from stdout.  */
881
882 static char *
883 read_next_line (void)
884 {
885   char *prompt_ptr, control_prompt[256];
886   int i = 0;
887
888   if (control_level >= 254)
889     error (_("Control nesting too deep!"));
890
891   /* Set a prompt based on the nesting of the control commands.  */
892   if (instream == stdin || (instream == 0 && deprecated_readline_hook != NULL))
893     {
894       for (i = 0; i < control_level; i++)
895         control_prompt[i] = ' ';
896       control_prompt[i] = '>';
897       control_prompt[i + 1] = '\0';
898       prompt_ptr = (char *) &control_prompt[0];
899     }
900   else
901     prompt_ptr = NULL;
902
903   return command_line_input (prompt_ptr, instream == stdin, "commands");
904 }
905
906 /* Process one input line.  If the command is an "end", return such an
907    indication to the caller.  If PARSE_COMMANDS is true, strip leading
908    whitespace (trailing whitespace is always stripped) in the line,
909    attempt to recognize GDB control commands, and also return an
910    indication if the command is an "else" or a nop.
911
912    Otherwise, only "end" is recognized.  */
913
914 static enum misc_command_type
915 process_next_line (char *p, struct command_line **command, int parse_commands,
916                    void (*validator)(char *, void *), void *closure)
917 {
918   char *p_end;
919   char *p_start;
920   int not_handled = 0;
921
922   /* Not sure what to do here.  */
923   if (p == NULL)
924     return end_command;
925
926   /* Strip trailing whitespace.  */
927   p_end = p + strlen (p);
928   while (p_end > p && (p_end[-1] == ' ' || p_end[-1] == '\t'))
929     p_end--;
930
931   p_start = p;
932   /* Strip leading whitespace.  */
933   while (p_start < p_end && (*p_start == ' ' || *p_start == '\t'))
934     p_start++;
935
936   /* 'end' is always recognized, regardless of parse_commands value.
937      We also permit whitespace before end and after.  */
938   if (p_end - p_start == 3 && !strncmp (p_start, "end", 3))
939     return end_command;
940   
941   if (parse_commands)
942     {
943       /* If commands are parsed, we skip initial spaces.  Otherwise,
944          which is the case for Python commands and documentation
945          (see the 'document' command), spaces are preserved.  */
946       p = p_start;
947
948       /* Blanks and comments don't really do anything, but we need to
949          distinguish them from else, end and other commands which can
950          be executed.  */
951       if (p_end == p || p[0] == '#')
952         return nop_command;
953
954       /* Is the else clause of an if control structure?  */
955       if (p_end - p == 4 && !strncmp (p, "else", 4))
956         return else_command;
957
958       /* Check for while, if, break, continue, etc and build a new
959          command line structure for them.  */
960       if ((p_end - p >= 14 && !strncmp (p, "while-stepping", 14))
961           || (p_end - p >= 8 && !strncmp (p, "stepping", 8))
962           || (p_end - p >= 2 && !strncmp (p, "ws", 2)))
963         {
964           /* Because validate_actionline and encode_action lookup
965              command's line as command, we need the line to
966              include 'while-stepping'.
967
968              For 'ws' alias, the command will have 'ws', not expanded
969              to 'while-stepping'.  This is intentional -- we don't
970              really want frontend to send a command list with 'ws',
971              and next break-info returning command line with
972              'while-stepping'.  This should work, but might cause the
973              breakpoint to be marked as changed while it's actually
974              not.  */
975           *command = build_command_line (while_stepping_control, p);
976         }
977       else if (p_end - p > 5 && !strncmp (p, "while", 5))
978         {
979           char *first_arg;
980
981           first_arg = p + 5;
982           while (first_arg < p_end && isspace (*first_arg))
983             first_arg++;
984           *command = build_command_line (while_control, first_arg);
985         }
986       else if (p_end - p > 2 && !strncmp (p, "if", 2))
987         {
988           char *first_arg;
989
990           first_arg = p + 2;
991           while (first_arg < p_end && isspace (*first_arg))
992             first_arg++;
993           *command = build_command_line (if_control, first_arg);
994         }
995       else if (p_end - p >= 8 && !strncmp (p, "commands", 8))
996         {
997           char *first_arg;
998
999           first_arg = p + 8;
1000           while (first_arg < p_end && isspace (*first_arg))
1001             first_arg++;
1002           *command = build_command_line (commands_control, first_arg);
1003         }
1004       else if (p_end - p == 6 && !strncmp (p, "python", 6))
1005         {
1006           /* Note that we ignore the inline "python command" form
1007              here.  */
1008           *command = build_command_line (python_control, "");
1009         }
1010       else if (p_end - p == 10 && !strncmp (p, "loop_break", 10))
1011         {
1012           *command = (struct command_line *)
1013             xmalloc (sizeof (struct command_line));
1014           (*command)->next = NULL;
1015           (*command)->line = NULL;
1016           (*command)->control_type = break_control;
1017           (*command)->body_count = 0;
1018           (*command)->body_list = NULL;
1019         }
1020       else if (p_end - p == 13 && !strncmp (p, "loop_continue", 13))
1021         {
1022           *command = (struct command_line *)
1023             xmalloc (sizeof (struct command_line));
1024           (*command)->next = NULL;
1025           (*command)->line = NULL;
1026           (*command)->control_type = continue_control;
1027           (*command)->body_count = 0;
1028           (*command)->body_list = NULL;
1029         }
1030       else
1031         not_handled = 1;
1032     }
1033
1034   if (!parse_commands || not_handled)
1035     {
1036       /* A normal command.  */
1037       *command = (struct command_line *)
1038         xmalloc (sizeof (struct command_line));
1039       (*command)->next = NULL;
1040       (*command)->line = savestring (p, p_end - p);
1041       (*command)->control_type = simple_control;
1042       (*command)->body_count = 0;
1043       (*command)->body_list = NULL;
1044     }
1045
1046   if (validator)
1047     {
1048       volatile struct gdb_exception ex;
1049
1050       TRY_CATCH (ex, RETURN_MASK_ALL)
1051         {
1052           validator ((*command)->line, closure);
1053         }
1054       if (ex.reason < 0)
1055         {
1056           xfree (*command);
1057           throw_exception (ex);
1058         }
1059     }
1060
1061   /* Nothing special.  */
1062   return ok_command;
1063 }
1064
1065 /* Recursively read in the control structures and create a
1066    command_line structure from them.  Use read_next_line_func to
1067    obtain lines of the command.  */
1068
1069 static enum command_control_type
1070 recurse_read_control_structure (char * (*read_next_line_func) (void),
1071                                 struct command_line *current_cmd,
1072                                 void (*validator)(char *, void *),
1073                                 void *closure)
1074 {
1075   int current_body, i;
1076   enum misc_command_type val;
1077   enum command_control_type ret;
1078   struct command_line **body_ptr, *child_tail, *next;
1079
1080   child_tail = NULL;
1081   current_body = 1;
1082
1083   /* Sanity checks.  */
1084   if (current_cmd->control_type == simple_control)
1085     error (_("Recursed on a simple control type."));
1086
1087   if (current_body > current_cmd->body_count)
1088     error (_("Allocated body is smaller than this command type needs."));
1089
1090   /* Read lines from the input stream and build control structures.  */
1091   while (1)
1092     {
1093       dont_repeat ();
1094
1095       next = NULL;
1096       val = process_next_line (read_next_line_func (), &next, 
1097                                current_cmd->control_type != python_control,
1098                                validator, closure);
1099
1100       /* Just skip blanks and comments.  */
1101       if (val == nop_command)
1102         continue;
1103
1104       if (val == end_command)
1105         {
1106           if (current_cmd->control_type == while_control
1107               || current_cmd->control_type == while_stepping_control
1108               || current_cmd->control_type == if_control
1109               || current_cmd->control_type == python_control
1110               || current_cmd->control_type == commands_control)
1111             {
1112               /* Success reading an entire canned sequence of commands.  */
1113               ret = simple_control;
1114               break;
1115             }
1116           else
1117             {
1118               ret = invalid_control;
1119               break;
1120             }
1121         }
1122
1123       /* Not the end of a control structure.  */
1124       if (val == else_command)
1125         {
1126           if (current_cmd->control_type == if_control
1127               && current_body == 1)
1128             {
1129               realloc_body_list (current_cmd, 2);
1130               current_body = 2;
1131               child_tail = NULL;
1132               continue;
1133             }
1134           else
1135             {
1136               ret = invalid_control;
1137               break;
1138             }
1139         }
1140
1141       if (child_tail)
1142         {
1143           child_tail->next = next;
1144         }
1145       else
1146         {
1147           body_ptr = current_cmd->body_list;
1148           for (i = 1; i < current_body; i++)
1149             body_ptr++;
1150
1151           *body_ptr = next;
1152
1153         }
1154
1155       child_tail = next;
1156
1157       /* If the latest line is another control structure, then recurse
1158          on it.  */
1159       if (next->control_type == while_control
1160           || next->control_type == while_stepping_control
1161           || next->control_type == if_control
1162           || next->control_type == python_control
1163           || next->control_type == commands_control)
1164         {
1165           control_level++;
1166           ret = recurse_read_control_structure (read_next_line_func, next,
1167                                                 validator, closure);
1168           control_level--;
1169
1170           if (ret != simple_control)
1171             break;
1172         }
1173     }
1174
1175   dont_repeat ();
1176
1177   return ret;
1178 }
1179
1180 static void
1181 restore_interp (void *arg)
1182 {
1183   interp_set_temp (interp_name ((struct interp *)arg));
1184 }
1185
1186 /* Read lines from the input stream and accumulate them in a chain of
1187    struct command_line's, which is then returned.  For input from a
1188    terminal, the special command "end" is used to mark the end of the
1189    input, and is not included in the returned chain of commands.
1190
1191    If PARSE_COMMANDS is true, strip leading whitespace (trailing whitespace
1192    is always stripped) in the line and attempt to recognize GDB control
1193    commands.  Otherwise, only "end" is recognized.  */
1194
1195 #define END_MESSAGE "End with a line saying just \"end\"."
1196
1197 struct command_line *
1198 read_command_lines (char *prompt_arg, int from_tty, int parse_commands,
1199                     void (*validator)(char *, void *), void *closure)
1200 {
1201   struct command_line *head;
1202
1203   if (from_tty && input_from_terminal_p ())
1204     {
1205       if (deprecated_readline_begin_hook)
1206         {
1207           /* Note - intentional to merge messages with no newline.  */
1208           (*deprecated_readline_begin_hook) ("%s  %s\n", prompt_arg,
1209                                              END_MESSAGE);
1210         }
1211       else
1212         {
1213           printf_unfiltered ("%s\n%s\n", prompt_arg, END_MESSAGE);
1214           gdb_flush (gdb_stdout);
1215         }
1216     }
1217
1218
1219   /* Reading commands assumes the CLI behavior, so temporarily
1220      override the current interpreter with CLI.  */
1221   if (current_interp_named_p (INTERP_CONSOLE))
1222     head = read_command_lines_1 (read_next_line, parse_commands,
1223                                  validator, closure);
1224   else
1225     {
1226       struct interp *old_interp = interp_set_temp (INTERP_CONSOLE);
1227       struct cleanup *old_chain = make_cleanup (restore_interp, old_interp);
1228
1229       head = read_command_lines_1 (read_next_line, parse_commands,
1230                                    validator, closure);
1231       do_cleanups (old_chain);
1232     }
1233
1234   if (deprecated_readline_end_hook && from_tty && input_from_terminal_p ())
1235     {
1236       (*deprecated_readline_end_hook) ();
1237     }
1238   return (head);
1239 }
1240
1241 /* Act the same way as read_command_lines, except that each new line is
1242    obtained using READ_NEXT_LINE_FUNC.  */
1243
1244 struct command_line *
1245 read_command_lines_1 (char * (*read_next_line_func) (void), int parse_commands,
1246                       void (*validator)(char *, void *), void *closure)
1247 {
1248   struct command_line *head, *tail, *next;
1249   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
1250   enum command_control_type ret;
1251   enum misc_command_type val;
1252
1253   control_level = 0;
1254   head = tail = NULL;
1255
1256   while (1)
1257     {
1258       dont_repeat ();
1259       val = process_next_line (read_next_line_func (), &next, parse_commands,
1260                                validator, closure);
1261
1262       /* Ignore blank lines or comments.  */
1263       if (val == nop_command)
1264         continue;
1265
1266       if (val == end_command)
1267         {
1268           ret = simple_control;
1269           break;
1270         }
1271
1272       if (val != ok_command)
1273         {
1274           ret = invalid_control;
1275           break;
1276         }
1277
1278       if (next->control_type == while_control
1279           || next->control_type == if_control
1280           || next->control_type == python_control
1281           || next->control_type == commands_control
1282           || next->control_type == while_stepping_control)
1283         {
1284           control_level++;
1285           ret = recurse_read_control_structure (read_next_line_func, next,
1286                                                 validator, closure);
1287           control_level--;
1288
1289           if (ret == invalid_control)
1290             break;
1291         }
1292
1293       if (tail)
1294         {
1295           tail->next = next;
1296         }
1297       else
1298         {
1299           head = next;
1300           make_cleanup_free_command_lines (&head);
1301         }
1302       tail = next;
1303     }
1304
1305   dont_repeat ();
1306
1307   if (ret != invalid_control)
1308     discard_cleanups (old_chain);
1309   else
1310     do_cleanups (old_chain);
1311
1312   return head;
1313 }
1314
1315 /* Free a chain of struct command_line's.  */
1316
1317 void
1318 free_command_lines (struct command_line **lptr)
1319 {
1320   struct command_line *l = *lptr;
1321   struct command_line *next;
1322   struct command_line **blist;
1323   int i;
1324
1325   while (l)
1326     {
1327       if (l->body_count > 0)
1328         {
1329           blist = l->body_list;
1330           for (i = 0; i < l->body_count; i++, blist++)
1331             free_command_lines (blist);
1332         }
1333       next = l->next;
1334       xfree (l->line);
1335       xfree (l);
1336       l = next;
1337     }
1338   *lptr = NULL;
1339 }
1340
1341 static void
1342 do_free_command_lines_cleanup (void *arg)
1343 {
1344   free_command_lines (arg);
1345 }
1346
1347 struct cleanup *
1348 make_cleanup_free_command_lines (struct command_line **arg)
1349 {
1350   return make_cleanup (do_free_command_lines_cleanup, arg);
1351 }
1352
1353 struct command_line *
1354 copy_command_lines (struct command_line *cmds)
1355 {
1356   struct command_line *result = NULL;
1357
1358   if (cmds)
1359     {
1360       result = (struct command_line *) xmalloc (sizeof (struct command_line));
1361
1362       result->next = copy_command_lines (cmds->next);
1363       result->line = xstrdup (cmds->line);
1364       result->control_type = cmds->control_type;
1365       result->body_count = cmds->body_count;
1366       if (cmds->body_count > 0)
1367         {
1368           int i;
1369
1370           result->body_list = (struct command_line **)
1371             xmalloc (sizeof (struct command_line *) * cmds->body_count);
1372
1373           for (i = 0; i < cmds->body_count; i++)
1374             result->body_list[i] = copy_command_lines (cmds->body_list[i]);
1375         }
1376       else
1377         result->body_list = NULL;
1378     }
1379
1380   return result;
1381 }
1382 \f
1383 /* Validate that *COMNAME is a valid name for a command.  Return the
1384    containing command list, in case it starts with a prefix command.
1385    The prefix must already exist.  *COMNAME is advanced to point after
1386    any prefix, and a NUL character overwrites the space after the
1387    prefix.  */
1388
1389 static struct cmd_list_element **
1390 validate_comname (char **comname)
1391 {
1392   struct cmd_list_element **list = &cmdlist;
1393   char *p, *last_word;
1394
1395   if (*comname == 0)
1396     error_no_arg (_("name of command to define"));
1397
1398   /* Find the last word of the argument.  */
1399   p = *comname + strlen (*comname);
1400   while (p > *comname && isspace (p[-1]))
1401     p--;
1402   while (p > *comname && !isspace (p[-1]))
1403     p--;
1404   last_word = p;
1405
1406   /* Find the corresponding command list.  */
1407   if (last_word != *comname)
1408     {
1409       struct cmd_list_element *c;
1410       char saved_char;
1411       const char *tem = *comname;
1412
1413       /* Separate the prefix and the command.  */
1414       saved_char = last_word[-1];
1415       last_word[-1] = '\0';
1416
1417       c = lookup_cmd (&tem, cmdlist, "", 0, 1);
1418       if (c->prefixlist == NULL)
1419         error (_("\"%s\" is not a prefix command."), *comname);
1420
1421       list = c->prefixlist;
1422       last_word[-1] = saved_char;
1423       *comname = last_word;
1424     }
1425
1426   p = *comname;
1427   while (*p)
1428     {
1429       if (!isalnum (*p) && *p != '-' && *p != '_')
1430         error (_("Junk in argument list: \"%s\""), p);
1431       p++;
1432     }
1433
1434   return list;
1435 }
1436
1437 /* This is just a placeholder in the command data structures.  */
1438 static void
1439 user_defined_command (char *ignore, int from_tty)
1440 {
1441 }
1442
1443 static void
1444 define_command (char *comname, int from_tty)
1445 {
1446 #define MAX_TMPBUF 128   
1447   enum cmd_hook_type
1448     {
1449       CMD_NO_HOOK = 0,
1450       CMD_PRE_HOOK,
1451       CMD_POST_HOOK
1452     };
1453   struct command_line *cmds;
1454   struct cmd_list_element *c, *newc, *hookc = 0, **list;
1455   char *tem, *comfull;
1456   const char *tem_c;
1457   char tmpbuf[MAX_TMPBUF];
1458   int  hook_type      = CMD_NO_HOOK;
1459   int  hook_name_size = 0;
1460    
1461 #define HOOK_STRING     "hook-"
1462 #define HOOK_LEN 5
1463 #define HOOK_POST_STRING "hookpost-"
1464 #define HOOK_POST_LEN    9
1465
1466   comfull = comname;
1467   list = validate_comname (&comname);
1468
1469   /* Look it up, and verify that we got an exact match.  */
1470   tem_c = comname;
1471   c = lookup_cmd (&tem_c, *list, "", -1, 1);
1472   if (c && strcmp (comname, c->name) != 0)
1473     c = 0;
1474
1475   if (c)
1476     {
1477       int q;
1478
1479       if (c->class == class_user || c->class == class_alias)
1480         q = query (_("Redefine command \"%s\"? "), c->name);
1481       else
1482         q = query (_("Really redefine built-in command \"%s\"? "), c->name);
1483       if (!q)
1484         error (_("Command \"%s\" not redefined."), c->name);
1485     }
1486
1487   /* If this new command is a hook, then mark the command which it
1488      is hooking.  Note that we allow hooking `help' commands, so that
1489      we can hook the `stop' pseudo-command.  */
1490
1491   if (!strncmp (comname, HOOK_STRING, HOOK_LEN))
1492     {
1493        hook_type      = CMD_PRE_HOOK;
1494        hook_name_size = HOOK_LEN;
1495     }
1496   else if (!strncmp (comname, HOOK_POST_STRING, HOOK_POST_LEN))
1497     {
1498       hook_type      = CMD_POST_HOOK;
1499       hook_name_size = HOOK_POST_LEN;
1500     }
1501    
1502   if (hook_type != CMD_NO_HOOK)
1503     {
1504       /* Look up cmd it hooks, and verify that we got an exact match.  */
1505       tem_c = comname + hook_name_size;
1506       hookc = lookup_cmd (&tem_c, *list, "", -1, 0);
1507       if (hookc && strcmp (comname + hook_name_size, hookc->name) != 0)
1508         hookc = 0;
1509       if (!hookc)
1510         {
1511           warning (_("Your new `%s' command does not "
1512                      "hook any existing command."),
1513                    comfull);
1514           if (!query (_("Proceed? ")))
1515             error (_("Not confirmed."));
1516         }
1517     }
1518
1519   comname = xstrdup (comname);
1520
1521   /* If the rest of the commands will be case insensitive, this one
1522      should behave in the same manner.  */
1523   for (tem = comname; *tem; tem++)
1524     if (isupper (*tem))
1525       *tem = tolower (*tem);
1526
1527   xsnprintf (tmpbuf, sizeof (tmpbuf),
1528              "Type commands for definition of \"%s\".", comfull);
1529   cmds = read_command_lines (tmpbuf, from_tty, 1, 0, 0);
1530
1531   if (c && c->class == class_user)
1532     free_command_lines (&c->user_commands);
1533
1534   newc = add_cmd (comname, class_user, user_defined_command,
1535                   (c && c->class == class_user)
1536                   ? c->doc : xstrdup ("User-defined."), list);
1537   newc->user_commands = cmds;
1538
1539   /* If this new command is a hook, then mark both commands as being
1540      tied.  */
1541   if (hookc)
1542     {
1543       switch (hook_type)
1544         {
1545         case CMD_PRE_HOOK:
1546           hookc->hook_pre  = newc;  /* Target gets hooked.  */
1547           newc->hookee_pre = hookc; /* We are marked as hooking target cmd.  */
1548           break;
1549         case CMD_POST_HOOK:
1550           hookc->hook_post  = newc;  /* Target gets hooked.  */
1551           newc->hookee_post = hookc; /* We are marked as hooking
1552                                         target cmd.  */
1553           break;
1554         default:
1555           /* Should never come here as hookc would be 0.  */
1556           internal_error (__FILE__, __LINE__, _("bad switch"));
1557         }
1558     }
1559 }
1560
1561 static void
1562 document_command (char *comname, int from_tty)
1563 {
1564   struct command_line *doclines;
1565   struct cmd_list_element *c, **list;
1566   const char *tem;
1567   char *comfull;
1568   char tmpbuf[128];
1569
1570   comfull = comname;
1571   list = validate_comname (&comname);
1572
1573   tem = comname;
1574   c = lookup_cmd (&tem, *list, "", 0, 1);
1575
1576   if (c->class != class_user)
1577     error (_("Command \"%s\" is built-in."), comfull);
1578
1579   xsnprintf (tmpbuf, sizeof (tmpbuf), "Type documentation for \"%s\".",
1580              comfull);
1581   doclines = read_command_lines (tmpbuf, from_tty, 0, 0, 0);
1582
1583   if (c->doc)
1584     xfree (c->doc);
1585
1586   {
1587     struct command_line *cl1;
1588     int len = 0;
1589
1590     for (cl1 = doclines; cl1; cl1 = cl1->next)
1591       len += strlen (cl1->line) + 1;
1592
1593     c->doc = (char *) xmalloc (len + 1);
1594     *c->doc = 0;
1595
1596     for (cl1 = doclines; cl1; cl1 = cl1->next)
1597       {
1598         strcat (c->doc, cl1->line);
1599         if (cl1->next)
1600           strcat (c->doc, "\n");
1601       }
1602   }
1603
1604   free_command_lines (&doclines);
1605 }
1606 \f
1607 struct source_cleanup_lines_args
1608 {
1609   int old_line;
1610   const char *old_file;
1611 };
1612
1613 static void
1614 source_cleanup_lines (void *args)
1615 {
1616   struct source_cleanup_lines_args *p =
1617     (struct source_cleanup_lines_args *) args;
1618
1619   source_line_number = p->old_line;
1620   source_file_name = p->old_file;
1621 }
1622
1623 /* Used to implement source_command.  */
1624
1625 void
1626 script_from_file (FILE *stream, const char *file)
1627 {
1628   struct cleanup *old_cleanups;
1629   struct source_cleanup_lines_args old_lines;
1630
1631   if (stream == NULL)
1632     internal_error (__FILE__, __LINE__, _("called with NULL file pointer!"));
1633
1634   old_lines.old_line = source_line_number;
1635   old_lines.old_file = source_file_name;
1636   old_cleanups = make_cleanup (source_cleanup_lines, &old_lines);
1637   source_line_number = 0;
1638   source_file_name = file;
1639
1640   {
1641     volatile struct gdb_exception e;
1642
1643     TRY_CATCH (e, RETURN_MASK_ERROR)
1644       {
1645         read_command_file (stream);
1646       }
1647     switch (e.reason)
1648       {
1649       case 0:
1650         break;
1651       case RETURN_ERROR:
1652         /* Re-throw the error, but with the file name information
1653            prepended.  */
1654         throw_error (e.error,
1655                      _("%s:%d: Error in sourced command file:\n%s"),
1656                      source_file_name, source_line_number, e.message);
1657       default:
1658         internal_error (__FILE__, __LINE__, _("bad reason"));
1659       }
1660   }
1661
1662   do_cleanups (old_cleanups);
1663 }
1664
1665 /* Print the definition of user command C to STREAM.  Or, if C is a
1666    prefix command, show the definitions of all user commands under C
1667    (recursively).  PREFIX and NAME combined are the name of the
1668    current command.  */
1669 void
1670 show_user_1 (struct cmd_list_element *c, const char *prefix, const char *name,
1671              struct ui_file *stream)
1672 {
1673   struct command_line *cmdlines;
1674
1675   if (c->prefixlist != NULL)
1676     {
1677       char *prefixname = c->prefixname;
1678
1679       for (c = *c->prefixlist; c != NULL; c = c->next)
1680         if (c->class == class_user || c->prefixlist != NULL)
1681           show_user_1 (c, prefixname, c->name, gdb_stdout);
1682       return;
1683     }
1684
1685   cmdlines = c->user_commands;
1686   if (!cmdlines)
1687     return;
1688   fprintf_filtered (stream, "User command \"%s%s\":\n", prefix, name);
1689
1690   print_command_lines (current_uiout, cmdlines, 1);
1691   fputs_filtered ("\n", stream);
1692 }
1693
1694 \f
1695
1696 initialize_file_ftype _initialize_cli_script;
1697
1698 void
1699 _initialize_cli_script (void)
1700 {
1701   add_com ("document", class_support, document_command, _("\
1702 Document a user-defined command.\n\
1703 Give command name as argument.  Give documentation on following lines.\n\
1704 End with a line of just \"end\"."));
1705   add_com ("define", class_support, define_command, _("\
1706 Define a new command name.  Command name is argument.\n\
1707 Definition appears on following lines, one command per line.\n\
1708 End with a line of just \"end\".\n\
1709 Use the \"document\" command to give documentation for the new command.\n\
1710 Commands defined in this way may have up to ten arguments."));
1711
1712   add_com ("while", class_support, while_command, _("\
1713 Execute nested commands WHILE the conditional expression is non zero.\n\
1714 The conditional expression must follow the word `while' and must in turn be\n\
1715 followed by a new line.  The nested commands must be entered one per line,\n\
1716 and should be terminated by the word `end'."));
1717
1718   add_com ("if", class_support, if_command, _("\
1719 Execute nested commands once IF the conditional expression is non zero.\n\
1720 The conditional expression must follow the word `if' and must in turn be\n\
1721 followed by a new line.  The nested commands must be entered one per line,\n\
1722 and should be terminated by the word 'else' or `end'.  If an else clause\n\
1723 is used, the same rules apply to its nested commands as to the first ones."));
1724 }