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