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