This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

FYI: cli-utils.c


I'm checking this in.

This came up in the thread about get_number_or_range.

I sometimes find myself rewriting little CLI argument-parsing helpers,
mostly recently ep_skip_leading_whitespace.  It seems simpler to
consolidate this kind of thing into a single place.

This patch does that by adding cli-utils.c and updating some code to use
the new helper functions.  I didn't try to do an exhaustive rewrite.

Built and regtested on x86-64 (compile farm).

Tom

2011-02-21  Tom Tromey  <tromey@redhat.com>

	* reverse.c: Include cli-utils.h.
	* printcmd.c: Include cli-utils.h.
	(string_printf): Use skip_spaces.
	* cli/cli-utils.h: New file.
	* cli/cli-utils.c: New file.
	* cli/cli-dump.h (skip_spaces): Move to cli-utils.h.
	* cli/cli-dump.c (skip_spaces): Move to cli-utils.c.
	* breakpoint.h (get_number, get_number_or_range): Move to
	cli-utils.h.
	* breakpoint.c: Include cli-utils.h.
	(get_number_trailer, get_number, get_number_or_range)
	(ep_skip_leading_whitespace): Move to cli-utils.c.
	(create_breakpoint_sal, find_condition_and_thread)
	(decode_static_tracepoint_spec, watch_command_1)
	(watch_maybe_just_location, ep_parse_optional_if_clause)
	(catch_fork_command_1, catch_exec_command_1)
	(catch_syscall_command_1): Use skip_spaces, skip_to_space.
	* Makefile.in (SUBDIR_CLI_OBS): Add cli-utils.o.
	(SUBDIR_CLI_SRCS): Add cli-utils.c.
	(HFILES_NO_SRCDIR): Add cli-utils.h.
	(cli-utils.o): New target.

Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.1156
diff -u -r1.1156 Makefile.in
--- Makefile.in	21 Feb 2011 08:38:09 -0000	1.1156
+++ Makefile.in	21 Feb 2011 18:09:27 -0000
@@ -193,12 +193,12 @@
 	cli-dump.o \
 	cli-decode.o cli-script.o cli-cmds.o cli-setshow.o \
 	cli-logging.o \
-	cli-interp.o
+	cli-interp.o cli-utils.o
 SUBDIR_CLI_SRCS = \
 	cli/cli-dump.c \
 	cli/cli-decode.c cli/cli-script.c cli/cli-cmds.c cli/cli-setshow.c \
 	cli/cli-logging.c \
-	cli/cli-interp.c
+	cli/cli-interp.c cli/cli-utils.c
 SUBDIR_CLI_DEPS =
 SUBDIR_CLI_LDFLAGS=
 SUBDIR_CLI_CFLAGS=
@@ -767,7 +767,7 @@
 i386bsd-nat.h xml-support.h xml-tdesc.h alphabsd-tdep.h gdb_obstack.h \
 ia64-tdep.h ada-lang.h varobj.h frv-tdep.h nto-tdep.h serial.h \
 c-lang.h d-lang.h frame.h event-loop.h block.h cli/cli-setshow.h	\
-cli/cli-decode.h cli/cli-cmds.h cli/cli-dump.h \
+cli/cli-decode.h cli/cli-cmds.h cli/cli-dump.h cli/cli-utils.h \
 cli/cli-script.h macrotab.h symtab.h version.h gnulib/wchar.in.h \
 gnulib/string.in.h gnulib/str-two-way.h \
 gnulib/stdint.in.h remote.h gdb.h sparc-nat.h gdbserver/win32-low.h \
@@ -1756,6 +1756,10 @@
 	$(COMPILE) $(srcdir)/cli/cli-setshow.c
 	$(POSTCOMPILE)
 
+cli-utils.o: $(srcdir)/cli/cli-utils.c
+	$(COMPILE) $(srcdir)/cli/cli-utils.c
+	$(POSTCOMPILE)
+
 
 #
 # GDBTK sub-directory
Index: breakpoint.c
===================================================================
RCS file: /cvs/src/src/gdb/breakpoint.c,v
retrieving revision 1.538
diff -u -r1.538 breakpoint.c
--- breakpoint.c	21 Feb 2011 14:59:34 -0000	1.538
+++ breakpoint.c	21 Feb 2011 18:09:28 -0000
@@ -62,6 +62,7 @@
 #include "jit.h"
 #include "xml-syscall.h"
 #include "parser-defs.h"
+#include "cli/cli-utils.h"
 
 /* readline include files */
 #include "readline/readline.h"
@@ -142,8 +143,6 @@
 
 static void condition_command (char *, int);
 
-static int get_number_trailer (char **, int);
-
 typedef enum
   {
     mark_inserted,
@@ -185,8 +184,6 @@
 
 static void tcatch_command (char *arg, int from_tty);
 
-static void ep_skip_leading_whitespace (char **s);
-
 static void detach_single_step_breakpoints (void);
 
 static int single_step_breakpoint_inserted_here_p (struct address_space *,
@@ -553,159 +550,6 @@
 struct program_space *default_breakpoint_pspace;
 
 
-/* *PP is a string denoting a breakpoint.  Get the number of the
-   breakpoint.  Advance *PP after the string and any trailing
-   whitespace.
-
-   Currently the string can either be a number or "$" followed by the
-   name of a convenience variable.  Making it an expression wouldn't
-   work well for map_breakpoint_numbers (e.g. "4 + 5 + 6").
-
-   TRAILER is a character which can be found after the number; most
-   commonly this is `-'.  If you don't want a trailer, use \0.  */
-
-static int
-get_number_trailer (char **pp, int trailer)
-{
-  int retval = 0;	/* default */
-  char *p = *pp;
-
-  if (*p == '$')
-    {
-      /* Make a copy of the name, so we can null-terminate it
-         to pass to lookup_internalvar().  */
-      char *varname;
-      char *start = ++p;
-      LONGEST val;
-
-      while (isalnum (*p) || *p == '_')
-	p++;
-      varname = (char *) alloca (p - start + 1);
-      strncpy (varname, start, p - start);
-      varname[p - start] = '\0';
-      if (get_internalvar_integer (lookup_internalvar (varname), &val))
-	retval = (int) val;
-      else
-	{
-	  printf_filtered (_("Convenience variable must "
-			     "have integer value.\n"));
-	  retval = 0;
-	}
-    }
-  else
-    {
-      if (*p == '-')
-	++p;
-      while (*p >= '0' && *p <= '9')
-	++p;
-      if (p == *pp)
-	/* There is no number here.  (e.g. "cond a == b").  */
-	{
-	  /* Skip non-numeric token.  */
-	  while (*p && !isspace((int) *p))
-	    ++p;
-	  /* Return zero, which caller must interpret as error.  */
-	  retval = 0;
-	}
-      else
-	retval = atoi (*pp);
-    }
-  if (!(isspace (*p) || *p == '\0' || *p == trailer))
-    {
-      /* Trailing junk: return 0 and let caller print error msg.  */
-      while (!(isspace (*p) || *p == '\0' || *p == trailer))
-	++p;
-      retval = 0;
-    }
-  while (isspace (*p))
-    p++;
-  *pp = p;
-  return retval;
-}
-
-
-/* Like get_number_trailer, but don't allow a trailer.  */
-int
-get_number (char **pp)
-{
-  return get_number_trailer (pp, '\0');
-}
-
-/* Parse a number or a range.
-   A number will be of the form handled by get_number.
-   A range will be of the form <number1> - <number2>, and 
-   will represent all the integers between number1 and number2,
-   inclusive.
-
-   While processing a range, this fuction is called iteratively;
-   At each call it will return the next value in the range.
-
-   At the beginning of parsing a range, the char pointer PP will
-   be advanced past <number1> and left pointing at the '-' token.
-   Subsequent calls will not advance the pointer until the range
-   is completed.  The call that completes the range will advance
-   pointer PP past <number2>.  */
-
-int
-get_number_or_range (char **pp)
-{
-  static int last_retval, end_value;
-  static char *end_ptr;
-  static int in_range = 0;
-
-  if (**pp != '-')
-    {
-      /* Default case: pp is pointing either to a solo number, 
-	 or to the first number of a range.  */
-      last_retval = get_number_trailer (pp, '-');
-      if (**pp == '-')
-	{
-	  char **temp;
-
-	  /* This is the start of a range (<number1> - <number2>).
-	     Skip the '-', parse and remember the second number,
-	     and also remember the end of the final token.  */
-
-	  temp = &end_ptr; 
-	  end_ptr = *pp + 1; 
-	  while (isspace ((int) *end_ptr))
-	    end_ptr++;	/* skip white space */
-	  end_value = get_number (temp);
-	  if (end_value < last_retval) 
-	    {
-	      error (_("inverted range"));
-	    }
-	  else if (end_value == last_retval)
-	    {
-	      /* Degenerate range (number1 == number2).  Advance the
-		 token pointer so that the range will be treated as a
-		 single number.  */ 
-	      *pp = end_ptr;
-	    }
-	  else
-	    in_range = 1;
-	}
-    }
-  else if (! in_range)
-    error (_("negative value"));
-  else
-    {
-      /* pp points to the '-' that betokens a range.  All
-	 number-parsing has already been done.  Return the next
-	 integer value (one greater than the saved previous value).
-	 Do not advance the token pointer 'pp' until the end of range
-	 is reached.  */
-
-      if (++last_retval == end_value)
-	{
-	  /* End of range reached; advance token pointer.  */
-	  *pp = end_ptr;
-	  in_range = 0;
-	}
-    }
-  return last_retval;
-}
-
 /* Return the breakpoint with the specified number, or NULL
    if the number does not refer to an existing breakpoint.  */
 
@@ -7383,12 +7227,9 @@
 		  char *marker_str;
 		  int i;
 
-		  while (*p == ' ' || *p == '\t')
-		    p++;
+		  p = skip_spaces (p);
 
-		  endp = p;
-		  while (*endp != ' ' && *endp != '\t' && *endp != '\0')
-		    endp++;
+		  endp = skip_to_space (p);
 
 		  marker_str = savestring (p, endp - p);
 		  b->static_trace_marker_id = marker_str;
@@ -7783,13 +7624,9 @@
       char *cond_start = NULL;
       char *cond_end = NULL;
 
-      while (*tok == ' ' || *tok == '\t')
-	tok++;
-      
-      end_tok = tok;
+      tok = skip_spaces (tok);
       
-      while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
-	end_tok++;
+      end_tok = skip_to_space (tok);
       
       toklen = end_tok - tok;
       
@@ -7848,12 +7685,9 @@
   char *marker_str;
   int i;
 
-  while (*p == ' ' || *p == '\t')
-    p++;
+  p = skip_spaces (p);
 
-  endp = p;
-  while (*endp != ' ' && *endp != '\t' && *endp != '\0')
-    endp++;
+  endp = skip_to_space (p);
 
   marker_str = savestring (p, endp - p);
   old_chain = make_cleanup (xfree, marker_str);
@@ -8618,13 +8452,8 @@
   else if (val != NULL)
     release_value (val);
 
-  tok = arg;
-  while (*tok == ' ' || *tok == '\t')
-    tok++;
-  end_tok = tok;
-
-  while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
-    end_tok++;
+  tok = skip_spaces (arg);
+  end_tok = skip_to_space (tok);
 
   toklen = end_tok - tok;
   if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
@@ -8908,7 +8737,7 @@
       && (check_for_argument (&arg, "-location", sizeof ("-location") - 1)
 	  || check_for_argument (&arg, "-l", sizeof ("-l") - 1)))
     {
-      ep_skip_leading_whitespace (&arg);
+      arg = skip_spaces (arg);
       just_location = 1;
     }
 
@@ -9065,15 +8894,6 @@
     do_cleanups (old_chain);
 }
 
-static void
-ep_skip_leading_whitespace (char **s)
-{
-  if ((s == NULL) || (*s == NULL))
-    return;
-  while (isspace (**s))
-    *s += 1;
-}
-
 /* This function attempts to parse an optional "if <cond>" clause
    from the arg string.  If one is not found, it returns NULL.
 
@@ -9095,7 +8915,7 @@
 
   /* Skip any extra leading whitespace, and record the start of the
      condition string.  */
-  ep_skip_leading_whitespace (arg);
+  *arg = skip_spaces (*arg);
   cond_string = *arg;
 
   /* Assume that the condition occupies the remainder of the arg
@@ -9130,7 +8950,7 @@
 
   if (!arg)
     arg = "";
-  ep_skip_leading_whitespace (&arg);
+  arg = skip_spaces (arg);
 
   /* The allowed syntax is:
      catch [v]fork
@@ -9174,7 +8994,7 @@
 
   if (!arg)
     arg = "";
-  ep_skip_leading_whitespace (&arg);
+  arg = skip_spaces (arg);
 
   /* The allowed syntax is:
      catch exec
@@ -9324,7 +9144,7 @@
 
   if (!arg)
     arg = "";
-  ep_skip_leading_whitespace (&arg);
+  arg = skip_spaces (arg);
 
   cond_string = ep_parse_optional_if_clause (&arg);
 
@@ -9514,7 +9334,7 @@
 
   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
 
-  ep_skip_leading_whitespace (&arg);
+  arg = skip_spaces (arg);
 
   /* We need to do this first "dummy" translation in order
      to get the syscall XML file loaded or, most important,
Index: breakpoint.h
===================================================================
RCS file: /cvs/src/src/gdb/breakpoint.h,v
retrieving revision 1.137
diff -u -r1.137 breakpoint.h
--- breakpoint.h	18 Feb 2011 16:43:53 -0000	1.137
+++ breakpoint.h	21 Feb 2011 18:09:29 -0000
@@ -1039,10 +1039,6 @@
 
 extern void clear_breakpoint_hit_counts (void);
 
-extern int get_number (char **);
-
-extern int get_number_or_range (char **);
-
 extern struct breakpoint *get_breakpoint (int num);
 
 /* The following are for displays, which aren't really breakpoints,
Index: printcmd.c
===================================================================
RCS file: /cvs/src/src/gdb/printcmd.c,v
retrieving revision 1.189
diff -u -r1.189 printcmd.c
--- printcmd.c	21 Feb 2011 08:38:10 -0000	1.189
+++ printcmd.c	21 Feb 2011 18:09:29 -0000
@@ -50,6 +50,7 @@
 #include "charset.h"
 #include "arch-utils.h"
 #include "printcmd.h"
+#include "cli/cli-utils.h"
 
 #ifdef TUI
 #include "tui/tui.h"		/* For tui_active et al.   */
@@ -1983,9 +1984,7 @@
   if (s == 0)
     error_no_arg (_("format-control string and values to print"));
 
-  /* Skip white space before format string.  */
-  while (*s == ' ' || *s == '\t')
-    s++;
+  s = skip_spaces (s);
 
   /* A format string should follow, enveloped in double quotes.  */
   if (*s++ != '"')
@@ -2049,16 +2048,14 @@
   /* Skip over " and following space and comma.  */
   s++;
   *f++ = '\0';
-  while (*s == ' ' || *s == '\t')
-    s++;
+  s = skip_spaces (s);
 
   if (*s != ',' && *s != 0)
     error (_("Invalid argument syntax"));
 
   if (*s == ',')
     s++;
-  while (*s == ' ' || *s == '\t')
-    s++;
+  s = skip_spaces (s);
 
   /* Need extra space for the '\0's.  Doubling the size is sufficient.  */
   substrings = alloca (strlen (string) * 2);
Index: reverse.c
===================================================================
RCS file: /cvs/src/src/gdb/reverse.c,v
retrieving revision 1.12
diff -u -r1.12 reverse.c
--- reverse.c	19 Feb 2011 19:10:48 -0000	1.12
+++ reverse.c	21 Feb 2011 18:09:29 -0000
@@ -24,6 +24,7 @@
 #include "top.h"
 #include "cli/cli-cmds.h"
 #include "cli/cli-decode.h"
+#include "cli/cli-utils.h"
 #include "inferior.h"
 #include "regcache.h"
 
Index: cli/cli-dump.c
===================================================================
RCS file: /cvs/src/src/gdb/cli/cli-dump.c,v
retrieving revision 1.40
diff -u -r1.40 cli-dump.c
--- cli/cli-dump.c	6 Jan 2011 00:57:02 -0000	1.40
+++ cli/cli-dump.c	21 Feb 2011 18:09:29 -0000
@@ -32,21 +32,12 @@
 #include "target.h"
 #include "readline/readline.h"
 #include "gdbcore.h"
+#include "cli/cli-utils.h"
 
 #define XMALLOC(TYPE) ((TYPE*) xmalloc (sizeof (TYPE)))
 
 
 char *
-skip_spaces (char *chp)
-{
-  if (chp == NULL)
-    return NULL;
-  while (isspace (*chp))
-    chp++;
-  return chp;
-}
-
-char *
 scan_expression_with_cleanup (char **cmd, const char *def)
 {
   if ((*cmd) == NULL || (**cmd) == '\0')
Index: cli/cli-dump.h
===================================================================
RCS file: /cvs/src/src/gdb/cli/cli-dump.h,v
retrieving revision 1.10
diff -u -r1.10 cli-dump.h
--- cli/cli-dump.h	1 Jan 2011 15:33:20 -0000	1.10
+++ cli/cli-dump.h	21 Feb 2011 18:09:29 -0000
@@ -32,6 +32,4 @@
 
 extern FILE *fopen_with_cleanup (const char *filename, const char *mode);
 
-extern char *skip_spaces (char *inp);
-
 #endif
Index: cli/cli-utils.c
===================================================================
RCS file: cli/cli-utils.c
diff -N cli/cli-utils.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cli/cli-utils.c	21 Feb 2011 18:09:30 -0000
@@ -0,0 +1,186 @@
+/* CLI utilities.
+
+   Copyright (c) 2011 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "cli/cli-utils.h"
+#include "gdb_string.h"
+#include "value.h"
+
+#include <ctype.h>
+
+/* *PP is a string denoting a number.  Get the number of the.  Advance
+   *PP after the string and any trailing whitespace.
+
+   Currently the string can either be a number or "$" followed by the
+   name of a convenience variable.
+
+   TRAILER is a character which can be found after the number; most
+   commonly this is `-'.  If you don't want a trailer, use \0.  */
+
+static int
+get_number_trailer (char **pp, int trailer)
+{
+  int retval = 0;	/* default */
+  char *p = *pp;
+
+  if (*p == '$')
+    {
+      /* Make a copy of the name, so we can null-terminate it
+         to pass to lookup_internalvar().  */
+      char *varname;
+      char *start = ++p;
+      LONGEST val;
+
+      while (isalnum (*p) || *p == '_')
+	p++;
+      varname = (char *) alloca (p - start + 1);
+      strncpy (varname, start, p - start);
+      varname[p - start] = '\0';
+      if (get_internalvar_integer (lookup_internalvar (varname), &val))
+	retval = (int) val;
+      else
+	{
+	  printf_filtered (_("Convenience variable must "
+			     "have integer value.\n"));
+	  retval = 0;
+	}
+    }
+  else
+    {
+      if (*p == '-')
+	++p;
+      while (*p >= '0' && *p <= '9')
+	++p;
+      if (p == *pp)
+	/* There is no number here.  (e.g. "cond a == b").  */
+	{
+	  /* Skip non-numeric token.  */
+	  while (*p && !isspace((int) *p))
+	    ++p;
+	  /* Return zero, which caller must interpret as error.  */
+	  retval = 0;
+	}
+      else
+	retval = atoi (*pp);
+    }
+  if (!(isspace (*p) || *p == '\0' || *p == trailer))
+    {
+      /* Trailing junk: return 0 and let caller print error msg.  */
+      while (!(isspace (*p) || *p == '\0' || *p == trailer))
+	++p;
+      retval = 0;
+    }
+  p = skip_spaces (p);
+  *pp = p;
+  return retval;
+}
+
+/* See documentation in cli-utils.h.  */
+
+int
+get_number (char **pp)
+{
+  return get_number_trailer (pp, '\0');
+}
+
+/* See documentation in cli-utils.h.  */
+
+int
+get_number_or_range (char **pp)
+{
+  static int last_retval, end_value;
+  static char *end_ptr;
+  static int in_range = 0;
+
+  if (**pp != '-')
+    {
+      /* Default case: pp is pointing either to a solo number, 
+	 or to the first number of a range.  */
+      last_retval = get_number_trailer (pp, '-');
+      if (**pp == '-')
+	{
+	  char **temp;
+
+	  /* This is the start of a range (<number1> - <number2>).
+	     Skip the '-', parse and remember the second number,
+	     and also remember the end of the final token.  */
+
+	  temp = &end_ptr; 
+	  end_ptr = *pp + 1; 
+	  while (isspace ((int) *end_ptr))
+	    end_ptr++;	/* skip white space */
+	  end_value = get_number (temp);
+	  if (end_value < last_retval) 
+	    {
+	      error (_("inverted range"));
+	    }
+	  else if (end_value == last_retval)
+	    {
+	      /* Degenerate range (number1 == number2).  Advance the
+		 token pointer so that the range will be treated as a
+		 single number.  */ 
+	      *pp = end_ptr;
+	    }
+	  else
+	    in_range = 1;
+	}
+    }
+  else if (! in_range)
+    error (_("negative value"));
+  else
+    {
+      /* pp points to the '-' that betokens a range.  All
+	 number-parsing has already been done.  Return the next
+	 integer value (one greater than the saved previous value).
+	 Do not advance the token pointer 'pp' until the end of range
+	 is reached.  */
+
+      if (++last_retval == end_value)
+	{
+	  /* End of range reached; advance token pointer.  */
+	  *pp = end_ptr;
+	  in_range = 0;
+	}
+    }
+  return last_retval;
+}
+
+/* See documentation in cli-utils.h.  */
+
+char *
+skip_spaces (char *chp)
+{
+  if (chp == NULL)
+    return NULL;
+  while (*chp && isspace (*chp))
+    chp++;
+  return chp;
+}
+
+/* See documentation in cli-utils.h.  */
+
+char *
+skip_to_space (char *chp)
+{
+  if (chp == NULL)
+    return NULL;
+  while (*chp && !isspace (*chp))
+    chp++;
+  return chp;
+}
Index: cli/cli-utils.h
===================================================================
RCS file: cli/cli-utils.h
diff -N cli/cli-utils.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cli/cli-utils.h	21 Feb 2011 18:09:30 -0000
@@ -0,0 +1,58 @@
+/* CLI utilities.
+
+   Copyright (c) 2011 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef CLI_UTILS_H
+#define CLI_UTILS_H
+
+/* *PP is a string denoting a number.  Get the number of the.  Advance
+   *PP after the string and any trailing whitespace.
+
+   Currently the string can either be a number or "$" followed by the
+   name of a convenience variable.  */
+
+extern int get_number (char **);
+
+/* Parse a number or a range.
+   A number will be of the form handled by get_number.
+   A range will be of the form <number1> - <number2>, and 
+   will represent all the integers between number1 and number2,
+   inclusive.
+
+   While processing a range, this fuction is called iteratively;
+   At each call it will return the next value in the range.
+
+   At the beginning of parsing a range, the char pointer PP will
+   be advanced past <number1> and left pointing at the '-' token.
+   Subsequent calls will not advance the pointer until the range
+   is completed.  The call that completes the range will advance
+   pointer PP past <number2>.  */
+
+extern int get_number_or_range (char **);
+
+/* Skip leading whitespace characters in INP, returning an updated
+   pointer.  If INP is NULL, return NULL.  */
+
+extern char *skip_spaces (char *inp);
+
+/* Skip leading non-whitespace characters in INP, returning an updated
+   pointer.  If INP is NULL, return NULL.  */
+
+extern char *skip_to_space (char *inp);
+
+#endif /* CLI_UTILS_H */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]