xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/cli/cli-script.c (revision 200d779b75dbeafa7bc01fd0f60bc61185f6967b)
1 /* GDB CLI command scripting.
2 
3    Copyright (C) 1986-2014 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 #include "defs.h"
21 #include "value.h"
22 #include "language.h"		/* For value_true */
23 #include <ctype.h>
24 
25 #include "ui-out.h"
26 #include <string.h>
27 #include "exceptions.h"
28 #include "top.h"
29 #include "breakpoint.h"
30 #include "cli/cli-cmds.h"
31 #include "cli/cli-decode.h"
32 #include "cli/cli-script.h"
33 #include "gdb_assert.h"
34 
35 #include "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 
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 
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 
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 
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 
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 }
1734