1 /* GDB CLI command scripting.
3 Copyright (c) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
4 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008
5 Free Software Foundation, Inc.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
24 #include "language.h" /* For value_true */
28 #include "gdb_string.h"
29 #include "exceptions.h"
31 #include "breakpoint.h"
32 #include "cli/cli-cmds.h"
33 #include "cli/cli-decode.h"
34 #include "cli/cli-script.h"
35 #include "gdb_assert.h"
37 #include "python/python.h"
39 /* Prototypes for local functions */
41 static enum command_control_type
42 recurse_read_control_structure (struct command_line *current_cmd);
44 static char *insert_args (char *line);
46 static struct cleanup * setup_user_args (char *p);
48 static void validate_comname (char *);
50 /* Level of control structure when reading. */
51 static int control_level;
53 /* Level of control structure when executing. */
54 static int command_nest_depth = 1;
56 /* This is to prevent certain commands being printed twice. */
57 static int suppress_next_print_command_trace = 0;
59 /* Structure for arguments to user defined functions. */
60 #define MAXUSERARGS 10
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 used. */
78 /* Allocate, initialize a new command line structure for one of the
79 control commands (if/while). */
81 static struct command_line *
82 build_command_line (enum command_control_type type, char *args)
84 struct command_line *cmd;
86 if (args == NULL && (type == if_control || type == while_control))
87 error (_("if/while commands require arguments."));
88 gdb_assert (args != NULL);
90 cmd = (struct command_line *) xmalloc (sizeof (struct command_line));
92 cmd->control_type = type;
96 = (struct command_line **) xmalloc (sizeof (struct command_line *)
98 memset (cmd->body_list, 0, sizeof (struct command_line *) * cmd->body_count);
99 cmd->line = savestring (args, strlen (args));
104 /* Build and return a new command structure for the control commands
105 such as "if" and "while". */
107 struct command_line *
108 get_command_line (enum command_control_type type, char *arg)
110 struct command_line *cmd;
111 struct cleanup *old_chain = NULL;
113 /* Allocate and build a new command line structure. */
114 cmd = build_command_line (type, arg);
116 old_chain = make_cleanup_free_command_lines (&cmd);
118 /* Read in the body of this command. */
119 if (recurse_read_control_structure (cmd) == invalid_control)
121 warning (_("Error reading in canned sequence of commands."));
122 do_cleanups (old_chain);
126 discard_cleanups (old_chain);
130 /* Recursively print a command (including full control structures). */
133 print_command_lines (struct ui_out *uiout, struct command_line *cmd,
136 struct command_line *list;
143 ui_out_spaces (uiout, 2 * depth);
145 /* A simple command, print it and continue. */
146 if (list->control_type == simple_control)
148 ui_out_field_string (uiout, NULL, list->line);
149 ui_out_text (uiout, "\n");
154 /* loop_continue to jump to the start of a while loop, print it
156 if (list->control_type == continue_control)
158 ui_out_field_string (uiout, NULL, "loop_continue");
159 ui_out_text (uiout, "\n");
164 /* loop_break to break out of a while loop, print it and continue. */
165 if (list->control_type == break_control)
167 ui_out_field_string (uiout, NULL, "loop_break");
168 ui_out_text (uiout, "\n");
173 /* A while command. Recursively print its subcommands and continue. */
174 if (list->control_type == while_control)
176 ui_out_field_fmt (uiout, NULL, "while %s", list->line);
177 ui_out_text (uiout, "\n");
178 print_command_lines (uiout, *list->body_list, depth + 1);
180 ui_out_spaces (uiout, 2 * depth);
181 ui_out_field_string (uiout, NULL, "end");
182 ui_out_text (uiout, "\n");
187 /* An if command. Recursively print both arms before continueing. */
188 if (list->control_type == if_control)
190 ui_out_field_fmt (uiout, NULL, "if %s", list->line);
191 ui_out_text (uiout, "\n");
193 print_command_lines (uiout, list->body_list[0], depth + 1);
195 /* Show the false arm if it exists. */
196 if (list->body_count == 2)
199 ui_out_spaces (uiout, 2 * depth);
200 ui_out_field_string (uiout, NULL, "else");
201 ui_out_text (uiout, "\n");
202 print_command_lines (uiout, list->body_list[1], depth + 1);
206 ui_out_spaces (uiout, 2 * depth);
207 ui_out_field_string (uiout, NULL, "end");
208 ui_out_text (uiout, "\n");
213 /* A commands command. Print the breakpoint commands and continue. */
214 if (list->control_type == commands_control)
217 ui_out_field_fmt (uiout, NULL, "commands %s", list->line);
219 ui_out_field_string (uiout, NULL, "commands");
220 ui_out_text (uiout, "\n");
221 print_command_lines (uiout, *list->body_list, depth + 1);
223 ui_out_spaces (uiout, 2 * depth);
224 ui_out_field_string (uiout, NULL, "end");
225 ui_out_text (uiout, "\n");
230 if (list->control_type == python_control)
232 ui_out_field_string (uiout, NULL, "python");
233 ui_out_text (uiout, "\n");
234 /* Don't indent python code at all. */
235 print_command_lines (uiout, *list->body_list, 0);
237 ui_out_spaces (uiout, 2 * depth);
238 ui_out_field_string (uiout, NULL, "end");
239 ui_out_text (uiout, "\n");
244 /* ignore illegal command type and try next */
249 /* Handle pre-post hooks. */
252 clear_hook_in_cleanup (void *data)
254 struct cmd_list_element *c = data;
255 c->hook_in = 0; /* Allow hook to work again once it is complete */
259 execute_cmd_pre_hook (struct cmd_list_element *c)
261 if ((c->hook_pre) && (!c->hook_in))
263 struct cleanup *cleanups = make_cleanup (clear_hook_in_cleanup, c);
264 c->hook_in = 1; /* Prevent recursive hooking */
265 execute_user_command (c->hook_pre, (char *) 0);
266 do_cleanups (cleanups);
271 execute_cmd_post_hook (struct cmd_list_element *c)
273 if ((c->hook_post) && (!c->hook_in))
275 struct cleanup *cleanups = make_cleanup (clear_hook_in_cleanup, c);
276 c->hook_in = 1; /* Prevent recursive hooking */
277 execute_user_command (c->hook_post, (char *) 0);
278 do_cleanups (cleanups);
282 /* Execute the command in CMD. */
284 do_restore_user_call_depth (void * call_depth)
286 int * depth = call_depth;
294 execute_user_command (struct cmd_list_element *c, char *args)
296 struct command_line *cmdlines;
297 struct cleanup *old_chain;
298 enum command_control_type ret;
299 static int user_call_depth = 0;
300 extern int max_user_call_depth;
302 old_chain = setup_user_args (args);
304 cmdlines = c->user_commands;
309 if (++user_call_depth > max_user_call_depth)
310 error (_("Max user call depth exceeded -- command aborted."));
312 make_cleanup (do_restore_user_call_depth, &user_call_depth);
314 /* Set the instream to 0, indicating execution of a
315 user-defined function. */
316 make_cleanup (do_restore_instream_cleanup, instream);
317 instream = (FILE *) 0;
319 /* Also set the global in_user_command, so that NULL instream is
320 not confused with Insight. */
323 command_nest_depth++;
326 ret = execute_control_command (cmdlines);
327 if (ret != simple_control && ret != break_control)
329 warning (_("Error executing canned sequence of commands."));
332 cmdlines = cmdlines->next;
334 command_nest_depth--;
335 do_cleanups (old_chain);
338 /* This function is called every time GDB prints a prompt.
339 It ensures that errors and the like to not confuse the command tracing. */
342 reset_command_nest_depth (void)
344 command_nest_depth = 1;
347 suppress_next_print_command_trace = 0;
350 /* Print the command, prefixed with '+' to represent the call depth.
351 This is slightly complicated because this function may be called
352 from execute_command and execute_control_command. Unfortunately
353 execute_command also prints the top level control commands.
354 In these cases execute_command will call execute_control_command
355 via while_command or if_command. Inner levels of 'if' and 'while'
356 are dealt with directly. Therefore we can use these functions
357 to determine whether the command has been printed already or not. */
359 print_command_trace (const char *cmd)
363 if (suppress_next_print_command_trace)
365 suppress_next_print_command_trace = 0;
369 if (!source_verbose && !trace_commands)
372 for (i=0; i < command_nest_depth; i++)
373 printf_filtered ("+");
375 printf_filtered ("%s\n", cmd);
378 enum command_control_type
379 execute_control_command (struct command_line *cmd)
381 struct expression *expr;
382 struct command_line *current;
383 struct cleanup *old_chain = make_cleanup (null_cleanup, 0);
385 struct value *val_mark;
387 enum command_control_type ret;
390 /* Start by assuming failure, if a problem is detected, the code
391 below will simply "break" out of the switch. */
392 ret = invalid_control;
394 switch (cmd->control_type)
397 /* A simple command, execute it and return. */
398 new_line = insert_args (cmd->line);
401 make_cleanup (free_current_contents, &new_line);
402 execute_command (new_line, 0);
403 ret = cmd->control_type;
406 case continue_control:
407 print_command_trace ("loop_continue");
409 /* Return for "continue", and "break" so we can either
410 continue the loop at the top, or break out. */
411 ret = cmd->control_type;
415 print_command_trace ("loop_break");
417 /* Return for "continue", and "break" so we can either
418 continue the loop at the top, or break out. */
419 ret = cmd->control_type;
424 char *buffer = alloca (strlen (cmd->line) + 7);
425 sprintf (buffer, "while %s", cmd->line);
426 print_command_trace (buffer);
428 /* Parse the loop control expression for the while statement. */
429 new_line = insert_args (cmd->line);
432 make_cleanup (free_current_contents, &new_line);
433 expr = parse_expression (new_line);
434 make_cleanup (free_current_contents, &expr);
436 ret = simple_control;
439 /* Keep iterating so long as the expression is true. */
446 /* Evaluate the expression. */
447 val_mark = value_mark ();
448 val = evaluate_expression (expr);
449 cond_result = value_true (val);
450 value_free_to_mark (val_mark);
452 /* If the value is false, then break out of the loop. */
456 /* Execute the body of the while statement. */
457 current = *cmd->body_list;
460 command_nest_depth++;
461 ret = execute_control_command (current);
462 command_nest_depth--;
464 /* If we got an error, or a "break" command, then stop
466 if (ret == invalid_control || ret == break_control)
472 /* If we got a "continue" command, then restart the loop
474 if (ret == continue_control)
477 /* Get the next statement. */
478 current = current->next;
482 /* Reset RET so that we don't recurse the break all the way down. */
483 if (ret == break_control)
484 ret = simple_control;
491 char *buffer = alloca (strlen (cmd->line) + 4);
492 sprintf (buffer, "if %s", cmd->line);
493 print_command_trace (buffer);
495 new_line = insert_args (cmd->line);
498 make_cleanup (free_current_contents, &new_line);
499 /* Parse the conditional for the if statement. */
500 expr = parse_expression (new_line);
501 make_cleanup (free_current_contents, &expr);
504 ret = simple_control;
506 /* Evaluate the conditional. */
507 val_mark = value_mark ();
508 val = evaluate_expression (expr);
510 /* Choose which arm to take commands from based on the value of the
511 conditional expression. */
512 if (value_true (val))
513 current = *cmd->body_list;
514 else if (cmd->body_count == 2)
515 current = *(cmd->body_list + 1);
516 value_free_to_mark (val_mark);
518 /* Execute commands in the given arm. */
521 command_nest_depth++;
522 ret = execute_control_command (current);
523 command_nest_depth--;
525 /* If we got an error, get out. */
526 if (ret != simple_control)
529 /* Get the next statement in the body. */
530 current = current->next;
535 case commands_control:
537 /* Breakpoint commands list, record the commands in the breakpoint's
538 command list and return. */
539 new_line = insert_args (cmd->line);
542 make_cleanup (free_current_contents, &new_line);
543 ret = commands_from_control_command (new_line, cmd);
548 eval_python_from_control_command (cmd);
549 ret = simple_control;
554 warning (_("Invalid control type in canned commands structure."));
558 do_cleanups (old_chain);
563 /* Like execute_control_command, but first set
564 suppress_next_print_command_trace. */
566 enum command_control_type
567 execute_control_command_untraced (struct command_line *cmd)
569 suppress_next_print_command_trace = 1;
570 return execute_control_command (cmd);
574 /* "while" command support. Executes a body of statements while the
575 loop condition is nonzero. */
578 while_command (char *arg, int from_tty)
580 struct command_line *command = NULL;
583 command = get_command_line (while_control, arg);
588 execute_control_command_untraced (command);
589 free_command_lines (&command);
592 /* "if" command support. Execute either the true or false arm depending
593 on the value of the if conditional. */
596 if_command (char *arg, int from_tty)
598 struct command_line *command = NULL;
601 command = get_command_line (if_control, arg);
606 execute_control_command_untraced (command);
607 free_command_lines (&command);
612 arg_cleanup (void *ignore)
614 struct user_args *oargs = user_args;
616 internal_error (__FILE__, __LINE__,
617 _("arg_cleanup called with no user args.\n"));
619 user_args = user_args->next;
620 xfree (oargs->command);
624 /* Bind the incomming arguments for a user defined command to
625 $arg0, $arg1 ... $argMAXUSERARGS. */
627 static struct cleanup *
628 setup_user_args (char *p)
630 struct user_args *args;
631 struct cleanup *old_chain;
632 unsigned int arg_count = 0;
634 args = (struct user_args *) xmalloc (sizeof (struct user_args));
635 memset (args, 0, sizeof (struct user_args));
637 args->next = user_args;
640 old_chain = make_cleanup (arg_cleanup, 0/*ignored*/);
645 user_args->command = p = xstrdup (p);
654 if (arg_count >= MAXUSERARGS)
656 error (_("user defined function may only have %d arguments."),
661 /* Strip whitespace. */
662 while (*p == ' ' || *p == '\t')
665 /* P now points to an argument. */
667 user_args->a[arg_count].arg = p;
669 /* Get to the end of this argument. */
672 if (((*p == ' ' || *p == '\t')) && !squote && !dquote && !bsquote)
701 user_args->a[arg_count].len = p - start_arg;
708 /* Given character string P, return a point to the first argument ($arg),
709 or NULL if P contains no arguments. */
714 while ((p = strchr (p, '$')))
716 if (strncmp (p, "$arg", 4) == 0
717 && (isdigit (p[4]) || p[4] == 'c'))
724 /* Insert the user defined arguments stored in user_arg into the $arg
725 arguments found in line, with the updated copy being placed into nline. */
728 insert_args (char *line)
730 char *p, *save_line, *new_line;
733 /* If we are not in a user-defined function, treat $argc, $arg0, et
734 cetera as normal convenience variables. */
735 if (user_args == NULL)
736 return xstrdup (line);
738 /* First we need to know how much memory to allocate for the new line. */
741 while ((p = locate_arg (line)))
748 /* $argc. Number will be <=10. */
749 len += user_args->count == 10 ? 2 : 1;
751 else if (i >= user_args->count)
753 error (_("Missing argument %d in user function."), i);
758 len += user_args->a[i].len;
763 /* Don't forget the tail. */
764 len += strlen (line);
766 /* Allocate space for the new line and fill it in. */
767 new_line = (char *) xmalloc (len + 1);
768 if (new_line == NULL)
771 /* Restore pointer to beginning of old line. */
774 /* Save pointer to beginning of new line. */
775 save_line = new_line;
777 while ((p = locate_arg (line)))
781 memcpy (new_line, line, p - line);
782 new_line += p - line;
786 gdb_assert (user_args->count >= 0 && user_args->count <= 10);
787 if (user_args->count == 10)
793 *(new_line++) = user_args->count + '0';
798 len = user_args->a[i].len;
801 memcpy (new_line, user_args->a[i].arg, len);
807 /* Don't forget the tail. */
808 strcpy (new_line, line);
810 /* Return a pointer to the beginning of the new line. */
815 /* Expand the body_list of COMMAND so that it can hold NEW_LENGTH
816 code bodies. This is typically used when we encounter an "else"
817 clause for an "if" command. */
820 realloc_body_list (struct command_line *command, int new_length)
823 struct command_line **body_list;
825 n = command->body_count;
831 body_list = (struct command_line **)
832 xmalloc (sizeof (struct command_line *) * new_length);
834 memcpy (body_list, command->body_list, sizeof (struct command_line *) * n);
835 memset (body_list + n, 0, sizeof (struct command_line *) * (new_length - n));
837 xfree (command->body_list);
838 command->body_list = body_list;
839 command->body_count = new_length;
842 /* Read one line from the input stream. If the command is an "end",
843 return such an indication to the caller. If PARSE_COMMANDS is true,
844 strip leading whitespace (trailing whitespace is always stripped)
845 in the line, attempt to recognize GDB control commands, and also
846 return an indication if the command is an "else" or a nop.
847 Otherwise, only "end" is recognized. */
849 static enum misc_command_type
850 read_next_line (struct command_line **command, int parse_commands)
852 char *p, *p1, *prompt_ptr, control_prompt[256];
856 if (control_level >= 254)
857 error (_("Control nesting too deep!"));
859 /* Set a prompt based on the nesting of the control commands. */
860 if (instream == stdin || (instream == 0 && deprecated_readline_hook != NULL))
862 for (i = 0; i < control_level; i++)
863 control_prompt[i] = ' ';
864 control_prompt[i] = '>';
865 control_prompt[i + 1] = '\0';
866 prompt_ptr = (char *) &control_prompt[0];
871 p = command_line_input (prompt_ptr, instream == stdin, "commands");
873 /* Not sure what to do here. */
879 /* Strip leading whitespace. */
880 while (*p == ' ' || *p == '\t')
884 /* Strip trailing whitespace. */
886 while (p1 != p && (p1[-1] == ' ' || p1[-1] == '\t'))
889 /* Is this the end of a simple, while, or if control structure? */
890 if (p1 - p == 3 && !strncmp (p, "end", 3))
895 /* Blanks and comments don't really do anything, but we need to
896 distinguish them from else, end and other commands which can be
898 if (p1 == p || p[0] == '#')
901 /* Is the else clause of an if control structure? */
902 if (p1 - p == 4 && !strncmp (p, "else", 4))
905 /* Check for while, if, break, continue, etc and build a new command
906 line structure for them. */
907 if (p1 - p > 5 && !strncmp (p, "while", 5))
911 while (first_arg < p1 && isspace (*first_arg))
913 *command = build_command_line (while_control, first_arg);
915 else if (p1 - p > 2 && !strncmp (p, "if", 2))
919 while (first_arg < p1 && isspace (*first_arg))
921 *command = build_command_line (if_control, first_arg);
923 else if (p1 - p >= 8 && !strncmp (p, "commands", 8))
927 while (first_arg < p1 && isspace (*first_arg))
929 *command = build_command_line (commands_control, first_arg);
931 else if (p1 - p == 6 && !strncmp (p, "python", 6))
933 /* Note that we ignore the inline "python command" form
935 *command = build_command_line (python_control, "");
937 else if (p1 - p == 10 && !strncmp (p, "loop_break", 10))
939 *command = (struct command_line *)
940 xmalloc (sizeof (struct command_line));
941 (*command)->next = NULL;
942 (*command)->line = NULL;
943 (*command)->control_type = break_control;
944 (*command)->body_count = 0;
945 (*command)->body_list = NULL;
947 else if (p1 - p == 13 && !strncmp (p, "loop_continue", 13))
949 *command = (struct command_line *)
950 xmalloc (sizeof (struct command_line));
951 (*command)->next = NULL;
952 (*command)->line = NULL;
953 (*command)->control_type = continue_control;
954 (*command)->body_count = 0;
955 (*command)->body_list = NULL;
961 if (!parse_commands || not_handled)
963 /* A normal command. */
964 *command = (struct command_line *)
965 xmalloc (sizeof (struct command_line));
966 (*command)->next = NULL;
967 (*command)->line = savestring (p, p1 - p);
968 (*command)->control_type = simple_control;
969 (*command)->body_count = 0;
970 (*command)->body_list = NULL;
973 /* Nothing special. */
977 /* Recursively read in the control structures and create a command_line
980 The parent_control parameter is the control structure in which the
981 following commands are nested. */
983 static enum command_control_type
984 recurse_read_control_structure (struct command_line *current_cmd)
987 enum misc_command_type val;
988 enum command_control_type ret;
989 struct command_line **body_ptr, *child_tail, *next;
995 if (current_cmd->control_type == simple_control)
996 error (_("Recursed on a simple control type."));
998 if (current_body > current_cmd->body_count)
999 error (_("Allocated body is smaller than this command type needs."));
1001 /* Read lines from the input stream and build control structures. */
1007 val = read_next_line (&next, current_cmd->control_type != python_control);
1009 /* Just skip blanks and comments. */
1010 if (val == nop_command)
1013 if (val == end_command)
1015 if (current_cmd->control_type == while_control
1016 || current_cmd->control_type == if_control
1017 || current_cmd->control_type == python_control
1018 || current_cmd->control_type == commands_control)
1020 /* Success reading an entire canned sequence of commands. */
1021 ret = simple_control;
1026 ret = invalid_control;
1031 /* Not the end of a control structure. */
1032 if (val == else_command)
1034 if (current_cmd->control_type == if_control
1035 && current_body == 1)
1037 realloc_body_list (current_cmd, 2);
1044 ret = invalid_control;
1051 child_tail->next = next;
1055 body_ptr = current_cmd->body_list;
1056 for (i = 1; i < current_body; i++)
1065 /* If the latest line is another control structure, then recurse
1067 if (next->control_type == while_control
1068 || next->control_type == if_control
1069 || next->control_type == python_control
1070 || next->control_type == commands_control)
1073 ret = recurse_read_control_structure (next);
1076 if (ret != simple_control)
1086 /* Read lines from the input stream and accumulate them in a chain of
1087 struct command_line's, which is then returned. For input from a
1088 terminal, the special command "end" is used to mark the end of the
1089 input, and is not included in the returned chain of commands.
1091 If PARSE_COMMANDS is true, strip leading whitespace (trailing whitespace
1092 is always stripped) in the line and attempt to recognize GDB control
1093 commands. Otherwise, only "end" is recognized. */
1095 #define END_MESSAGE "End with a line saying just \"end\"."
1097 struct command_line *
1098 read_command_lines (char *prompt_arg, int from_tty, int parse_commands)
1100 struct command_line *head, *tail, *next;
1101 struct cleanup *old_chain;
1102 enum command_control_type ret;
1103 enum misc_command_type val;
1107 if (from_tty && input_from_terminal_p ())
1109 if (deprecated_readline_begin_hook)
1111 /* Note - intentional to merge messages with no newline */
1112 (*deprecated_readline_begin_hook) ("%s %s\n", prompt_arg, END_MESSAGE);
1116 printf_unfiltered ("%s\n%s\n", prompt_arg, END_MESSAGE);
1117 gdb_flush (gdb_stdout);
1127 val = read_next_line (&next, parse_commands);
1129 /* Ignore blank lines or comments. */
1130 if (val == nop_command)
1133 if (val == end_command)
1135 ret = simple_control;
1139 if (val != ok_command)
1141 ret = invalid_control;
1145 if (next->control_type == while_control
1146 || next->control_type == if_control
1147 || next->control_type == python_control
1148 || next->control_type == commands_control)
1151 ret = recurse_read_control_structure (next);
1154 if (ret == invalid_control)
1165 old_chain = make_cleanup_free_command_lines (&head);
1174 if (ret != invalid_control)
1176 discard_cleanups (old_chain);
1179 do_cleanups (old_chain);
1182 if (deprecated_readline_end_hook && from_tty && input_from_terminal_p ())
1184 (*deprecated_readline_end_hook) ();
1189 /* Free a chain of struct command_line's. */
1192 free_command_lines (struct command_line **lptr)
1194 struct command_line *l = *lptr;
1195 struct command_line *next;
1196 struct command_line **blist;
1201 if (l->body_count > 0)
1203 blist = l->body_list;
1204 for (i = 0; i < l->body_count; i++, blist++)
1205 free_command_lines (blist);
1216 do_free_command_lines_cleanup (void *arg)
1218 free_command_lines (arg);
1222 make_cleanup_free_command_lines (struct command_line **arg)
1224 return make_cleanup (do_free_command_lines_cleanup, arg);
1227 struct command_line *
1228 copy_command_lines (struct command_line *cmds)
1230 struct command_line *result = NULL;
1234 result = (struct command_line *) xmalloc (sizeof (struct command_line));
1236 result->next = copy_command_lines (cmds->next);
1237 result->line = xstrdup (cmds->line);
1238 result->control_type = cmds->control_type;
1239 result->body_count = cmds->body_count;
1240 if (cmds->body_count > 0)
1244 result->body_list = (struct command_line **)
1245 xmalloc (sizeof (struct command_line *) * cmds->body_count);
1247 for (i = 0; i < cmds->body_count; i++)
1248 result->body_list[i] = copy_command_lines (cmds->body_list[i]);
1251 result->body_list = NULL;
1258 validate_comname (char *comname)
1263 error_no_arg (_("name of command to define"));
1268 if (!isalnum (*p) && *p != '-' && *p != '_')
1269 error (_("Junk in argument list: \"%s\""), p);
1274 /* This is just a placeholder in the command data structures. */
1276 user_defined_command (char *ignore, int from_tty)
1281 define_command (char *comname, int from_tty)
1283 #define MAX_TMPBUF 128
1290 struct command_line *cmds;
1291 struct cmd_list_element *c, *newc, *oldc, *hookc = 0;
1292 char *tem = comname;
1294 char tmpbuf[MAX_TMPBUF];
1295 int hook_type = CMD_NO_HOOK;
1296 int hook_name_size = 0;
1298 #define HOOK_STRING "hook-"
1300 #define HOOK_POST_STRING "hookpost-"
1301 #define HOOK_POST_LEN 9
1303 validate_comname (comname);
1305 /* Look it up, and verify that we got an exact match. */
1306 c = lookup_cmd (&tem, cmdlist, "", -1, 1);
1307 if (c && strcmp (comname, c->name) != 0)
1313 if (c->class == class_user || c->class == class_alias)
1314 q = query (_("Redefine command \"%s\"? "), c->name);
1316 q = query (_("Really redefine built-in command \"%s\"? "), c->name);
1318 error (_("Command \"%s\" not redefined."), c->name);
1321 /* If this new command is a hook, then mark the command which it
1322 is hooking. Note that we allow hooking `help' commands, so that
1323 we can hook the `stop' pseudo-command. */
1325 if (!strncmp (comname, HOOK_STRING, HOOK_LEN))
1327 hook_type = CMD_PRE_HOOK;
1328 hook_name_size = HOOK_LEN;
1330 else if (!strncmp (comname, HOOK_POST_STRING, HOOK_POST_LEN))
1332 hook_type = CMD_POST_HOOK;
1333 hook_name_size = HOOK_POST_LEN;
1336 if (hook_type != CMD_NO_HOOK)
1338 /* Look up cmd it hooks, and verify that we got an exact match. */
1339 tem = comname + hook_name_size;
1340 hookc = lookup_cmd (&tem, cmdlist, "", -1, 0);
1341 if (hookc && strcmp (comname + hook_name_size, hookc->name) != 0)
1345 warning (_("Your new `%s' command does not hook any existing command."),
1347 if (!query ("Proceed? "))
1348 error (_("Not confirmed."));
1352 comname = savestring (comname, strlen (comname));
1354 /* If the rest of the commands will be case insensitive, this one
1355 should behave in the same manner. */
1356 for (tem = comname; *tem; tem++)
1358 *tem = tolower (*tem);
1360 sprintf (tmpbuf, "Type commands for definition of \"%s\".", comname);
1361 cmds = read_command_lines (tmpbuf, from_tty, 1);
1363 if (c && c->class == class_user)
1364 free_command_lines (&c->user_commands);
1366 newc = add_cmd (comname, class_user, user_defined_command,
1367 (c && c->class == class_user)
1368 ? c->doc : savestring ("User-defined.", 13), &cmdlist);
1369 newc->user_commands = cmds;
1371 /* If this new command is a hook, then mark both commands as being
1378 hookc->hook_pre = newc; /* Target gets hooked. */
1379 newc->hookee_pre = hookc; /* We are marked as hooking target cmd. */
1382 hookc->hook_post = newc; /* Target gets hooked. */
1383 newc->hookee_post = hookc; /* We are marked as hooking target cmd. */
1386 /* Should never come here as hookc would be 0. */
1387 internal_error (__FILE__, __LINE__, _("bad switch"));
1393 document_command (char *comname, int from_tty)
1395 struct command_line *doclines;
1396 struct cmd_list_element *c;
1397 char *tem = comname;
1400 validate_comname (comname);
1402 c = lookup_cmd (&tem, cmdlist, "", 0, 1);
1404 if (c->class != class_user)
1405 error (_("Command \"%s\" is built-in."), comname);
1407 sprintf (tmpbuf, "Type documentation for \"%s\".", comname);
1408 doclines = read_command_lines (tmpbuf, from_tty, 0);
1414 struct command_line *cl1;
1417 for (cl1 = doclines; cl1; cl1 = cl1->next)
1418 len += strlen (cl1->line) + 1;
1420 c->doc = (char *) xmalloc (len + 1);
1423 for (cl1 = doclines; cl1; cl1 = cl1->next)
1425 strcat (c->doc, cl1->line);
1427 strcat (c->doc, "\n");
1431 free_command_lines (&doclines);
1434 struct source_cleanup_lines_args
1441 source_cleanup_lines (void *args)
1443 struct source_cleanup_lines_args *p =
1444 (struct source_cleanup_lines_args *) args;
1445 source_line_number = p->old_line;
1446 source_file_name = p->old_file;
1449 struct wrapped_read_command_file_args
1455 wrapped_read_command_file (struct ui_out *uiout, void *data)
1457 struct wrapped_read_command_file_args *args = data;
1458 read_command_file (args->stream);
1461 /* Used to implement source_command */
1464 script_from_file (FILE *stream, char *file)
1466 struct cleanup *old_cleanups;
1467 struct source_cleanup_lines_args old_lines;
1471 internal_error (__FILE__, __LINE__, _("called with NULL file pointer!"));
1473 old_cleanups = make_cleanup_fclose (stream);
1475 old_lines.old_line = source_line_number;
1476 old_lines.old_file = source_file_name;
1477 make_cleanup (source_cleanup_lines, &old_lines);
1478 source_line_number = 0;
1479 source_file_name = file;
1480 /* This will get set every time we read a line. So it won't stay "" for
1482 error_pre_print = "";
1485 struct gdb_exception e;
1486 struct wrapped_read_command_file_args args;
1487 args.stream = stream;
1488 e = catch_exception (uiout, wrapped_read_command_file, &args,
1495 /* Re-throw the error, but with the file name information
1497 throw_error (e.error,
1498 _("%s:%d: Error in sourced command file:\n%s"),
1499 source_file_name, source_line_number, e.message);
1501 internal_error (__FILE__, __LINE__, _("bad reason"));
1505 do_cleanups (old_cleanups);
1509 show_user_1 (struct cmd_list_element *c, struct ui_file *stream)
1511 struct command_line *cmdlines;
1513 cmdlines = c->user_commands;
1516 fputs_filtered ("User command ", stream);
1517 fputs_filtered (c->name, stream);
1518 fputs_filtered (":\n", stream);
1520 print_command_lines (uiout, cmdlines, 1);
1521 fputs_filtered ("\n", stream);