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