OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-6.8/] [readline/] [util.c] - Diff between revs 827 and 840

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 827 Rev 840
/* util.c -- readline utility functions */
/* util.c -- readline utility functions */
 
 
/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
 
   This file is part of the GNU Readline Library, a library for
   This file is part of the GNU Readline Library, a library for
   reading lines of text with interactive input and history editing.
   reading lines of text with interactive input and history editing.
 
 
   The GNU Readline Library is free software; you can redistribute it
   The GNU Readline Library is free software; you can redistribute it
   and/or modify it under the terms of the GNU General Public License
   and/or modify it under the terms of the GNU General Public License
   as published by the Free Software Foundation; either version 2, or
   as published by the Free Software Foundation; either version 2, or
   (at your option) any later version.
   (at your option) any later version.
 
 
   The GNU Readline Library is distributed in the hope that it will be
   The GNU Readline Library is distributed in the hope that it will be
   useful, but WITHOUT ANY WARRANTY; without even the implied warranty
   useful, but WITHOUT ANY WARRANTY; without even the implied warranty
   of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   The GNU General Public License is often shipped with GNU software, and
   The GNU General Public License is often shipped with GNU software, and
   is generally kept in a file called COPYING or LICENSE.  If you do not
   is generally kept in a file called COPYING or LICENSE.  If you do not
   have a copy of the license, write to the Free Software Foundation,
   have a copy of the license, write to the Free Software Foundation,
   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
#define READLINE_LIBRARY
 
 
#if defined (HAVE_CONFIG_H)
#if defined (HAVE_CONFIG_H)
#  include <config.h>
#  include <config.h>
#endif
#endif
 
 
#include <sys/types.h>
#include <sys/types.h>
#include <fcntl.h>
#include <fcntl.h>
#include "posixjmp.h"
#include "posixjmp.h"
 
 
#if defined (HAVE_UNISTD_H)
#if defined (HAVE_UNISTD_H)
#  include <unistd.h>           /* for _POSIX_VERSION */
#  include <unistd.h>           /* for _POSIX_VERSION */
#endif /* HAVE_UNISTD_H */
#endif /* HAVE_UNISTD_H */
 
 
#if defined (HAVE_STDLIB_H)
#if defined (HAVE_STDLIB_H)
#  include <stdlib.h>
#  include <stdlib.h>
#else
#else
#  include "ansi_stdlib.h"
#  include "ansi_stdlib.h"
#endif /* HAVE_STDLIB_H */
#endif /* HAVE_STDLIB_H */
 
 
#include <stdio.h>
#include <stdio.h>
#include <ctype.h>
#include <ctype.h>
 
 
/* System-specific feature definitions and include files. */
/* System-specific feature definitions and include files. */
#include "rldefs.h"
#include "rldefs.h"
#include "rlmbutil.h"
#include "rlmbutil.h"
 
 
#if defined (TIOCSTAT_IN_SYS_IOCTL)
#if defined (TIOCSTAT_IN_SYS_IOCTL)
#  include <sys/ioctl.h>
#  include <sys/ioctl.h>
#endif /* TIOCSTAT_IN_SYS_IOCTL */
#endif /* TIOCSTAT_IN_SYS_IOCTL */
 
 
/* Some standard library routines. */
/* Some standard library routines. */
#include "readline.h"
#include "readline.h"
 
 
#include "rlprivate.h"
#include "rlprivate.h"
#include "xmalloc.h"
#include "xmalloc.h"
 
 
/* **************************************************************** */
/* **************************************************************** */
/*                                                                  */
/*                                                                  */
/*                      Utility Functions                           */
/*                      Utility Functions                           */
/*                                                                  */
/*                                                                  */
/* **************************************************************** */
/* **************************************************************** */
 
 
/* Return 0 if C is not a member of the class of characters that belong
/* Return 0 if C is not a member of the class of characters that belong
   in words, or 1 if it is. */
   in words, or 1 if it is. */
 
 
int _rl_allow_pathname_alphabetic_chars = 0;
int _rl_allow_pathname_alphabetic_chars = 0;
static const char *pathname_alphabetic_chars = "/-_=~.#$";
static const char *pathname_alphabetic_chars = "/-_=~.#$";
 
 
int
int
rl_alphabetic (c)
rl_alphabetic (c)
     int c;
     int c;
{
{
  if (ALPHABETIC (c))
  if (ALPHABETIC (c))
    return (1);
    return (1);
 
 
  return (_rl_allow_pathname_alphabetic_chars &&
  return (_rl_allow_pathname_alphabetic_chars &&
            strchr (pathname_alphabetic_chars, c) != NULL);
            strchr (pathname_alphabetic_chars, c) != NULL);
}
}
 
 
#if defined (HANDLE_MULTIBYTE)
#if defined (HANDLE_MULTIBYTE)
int
int
_rl_walphabetic (wc)
_rl_walphabetic (wc)
     wchar_t wc;
     wchar_t wc;
{
{
  int c;
  int c;
 
 
  if (iswalnum (wc))
  if (iswalnum (wc))
    return (1);
    return (1);
 
 
  c = wc & 0177;
  c = wc & 0177;
  return (_rl_allow_pathname_alphabetic_chars &&
  return (_rl_allow_pathname_alphabetic_chars &&
            strchr (pathname_alphabetic_chars, c) != NULL);
            strchr (pathname_alphabetic_chars, c) != NULL);
}
}
#endif
#endif
 
 
/* How to abort things. */
/* How to abort things. */
int
int
_rl_abort_internal ()
_rl_abort_internal ()
{
{
  rl_ding ();
  rl_ding ();
  rl_clear_message ();
  rl_clear_message ();
  _rl_reset_argument ();
  _rl_reset_argument ();
  rl_clear_pending_input ();
  rl_clear_pending_input ();
 
 
  RL_UNSETSTATE (RL_STATE_MACRODEF);
  RL_UNSETSTATE (RL_STATE_MACRODEF);
  while (rl_executing_macro)
  while (rl_executing_macro)
    _rl_pop_executing_macro ();
    _rl_pop_executing_macro ();
 
 
  rl_last_func = (rl_command_func_t *)NULL;
  rl_last_func = (rl_command_func_t *)NULL;
  longjmp (readline_top_level, 1);
  longjmp (readline_top_level, 1);
  return (0);
  return (0);
}
}
 
 
int
int
rl_abort (count, key)
rl_abort (count, key)
     int count, key;
     int count, key;
{
{
  return (_rl_abort_internal ());
  return (_rl_abort_internal ());
}
}
 
 
int
int
rl_tty_status (count, key)
rl_tty_status (count, key)
     int count, key;
     int count, key;
{
{
#if defined (TIOCSTAT)
#if defined (TIOCSTAT)
  ioctl (1, TIOCSTAT, (char *)0);
  ioctl (1, TIOCSTAT, (char *)0);
  rl_refresh_line (count, key);
  rl_refresh_line (count, key);
#else
#else
  rl_ding ();
  rl_ding ();
#endif
#endif
  return 0;
  return 0;
}
}
 
 
/* Return a copy of the string between FROM and TO.
/* Return a copy of the string between FROM and TO.
   FROM is inclusive, TO is not. */
   FROM is inclusive, TO is not. */
char *
char *
rl_copy_text (from, to)
rl_copy_text (from, to)
     int from, to;
     int from, to;
{
{
  register int length;
  register int length;
  char *copy;
  char *copy;
 
 
  /* Fix it if the caller is confused. */
  /* Fix it if the caller is confused. */
  if (from > to)
  if (from > to)
    SWAP (from, to);
    SWAP (from, to);
 
 
  length = to - from;
  length = to - from;
  copy = (char *)xmalloc (1 + length);
  copy = (char *)xmalloc (1 + length);
  strncpy (copy, rl_line_buffer + from, length);
  strncpy (copy, rl_line_buffer + from, length);
  copy[length] = '\0';
  copy[length] = '\0';
  return (copy);
  return (copy);
}
}
 
 
/* Increase the size of RL_LINE_BUFFER until it has enough space to hold
/* Increase the size of RL_LINE_BUFFER until it has enough space to hold
   LEN characters. */
   LEN characters. */
void
void
rl_extend_line_buffer (len)
rl_extend_line_buffer (len)
     int len;
     int len;
{
{
  while (len >= rl_line_buffer_len)
  while (len >= rl_line_buffer_len)
    {
    {
      rl_line_buffer_len += DEFAULT_BUFFER_SIZE;
      rl_line_buffer_len += DEFAULT_BUFFER_SIZE;
      rl_line_buffer = (char *)xrealloc (rl_line_buffer, rl_line_buffer_len);
      rl_line_buffer = (char *)xrealloc (rl_line_buffer, rl_line_buffer_len);
    }
    }
 
 
  _rl_set_the_line ();
  _rl_set_the_line ();
}
}
 
 
 
 
/* A function for simple tilde expansion. */
/* A function for simple tilde expansion. */
int
int
rl_tilde_expand (ignore, key)
rl_tilde_expand (ignore, key)
     int ignore, key;
     int ignore, key;
{
{
  register int start, end;
  register int start, end;
  char *homedir, *temp;
  char *homedir, *temp;
  int len;
  int len;
 
 
  end = rl_point;
  end = rl_point;
  start = end - 1;
  start = end - 1;
 
 
  if (rl_point == rl_end && rl_line_buffer[rl_point] == '~')
  if (rl_point == rl_end && rl_line_buffer[rl_point] == '~')
    {
    {
      homedir = tilde_expand ("~");
      homedir = tilde_expand ("~");
      _rl_replace_text (homedir, start, end);
      _rl_replace_text (homedir, start, end);
      return (0);
      return (0);
    }
    }
  else if (rl_line_buffer[start] != '~')
  else if (rl_line_buffer[start] != '~')
    {
    {
      for (; !whitespace (rl_line_buffer[start]) && start >= 0; start--)
      for (; !whitespace (rl_line_buffer[start]) && start >= 0; start--)
        ;
        ;
      start++;
      start++;
    }
    }
 
 
  end = start;
  end = start;
  do
  do
    end++;
    end++;
  while (whitespace (rl_line_buffer[end]) == 0 && end < rl_end);
  while (whitespace (rl_line_buffer[end]) == 0 && end < rl_end);
 
 
  if (whitespace (rl_line_buffer[end]) || end >= rl_end)
  if (whitespace (rl_line_buffer[end]) || end >= rl_end)
    end--;
    end--;
 
 
  /* If the first character of the current word is a tilde, perform
  /* If the first character of the current word is a tilde, perform
     tilde expansion and insert the result.  If not a tilde, do
     tilde expansion and insert the result.  If not a tilde, do
     nothing. */
     nothing. */
  if (rl_line_buffer[start] == '~')
  if (rl_line_buffer[start] == '~')
    {
    {
      len = end - start + 1;
      len = end - start + 1;
      temp = (char *)xmalloc (len + 1);
      temp = (char *)xmalloc (len + 1);
      strncpy (temp, rl_line_buffer + start, len);
      strncpy (temp, rl_line_buffer + start, len);
      temp[len] = '\0';
      temp[len] = '\0';
      homedir = tilde_expand (temp);
      homedir = tilde_expand (temp);
      free (temp);
      free (temp);
 
 
      _rl_replace_text (homedir, start, end);
      _rl_replace_text (homedir, start, end);
    }
    }
 
 
  return (0);
  return (0);
}
}
 
 
/* **************************************************************** */
/* **************************************************************** */
/*                                                                  */
/*                                                                  */
/*                      String Utility Functions                    */
/*                      String Utility Functions                    */
/*                                                                  */
/*                                                                  */
/* **************************************************************** */
/* **************************************************************** */
 
 
/* Determine if s2 occurs in s1.  If so, return a pointer to the
/* Determine if s2 occurs in s1.  If so, return a pointer to the
   match in s1.  The compare is case insensitive. */
   match in s1.  The compare is case insensitive. */
char *
char *
_rl_strindex (s1, s2)
_rl_strindex (s1, s2)
     register const char *s1, *s2;
     register const char *s1, *s2;
{
{
  register int i, l, len;
  register int i, l, len;
 
 
  for (i = 0, l = strlen (s2), len = strlen (s1); (len - i) >= l; i++)
  for (i = 0, l = strlen (s2), len = strlen (s1); (len - i) >= l; i++)
    if (_rl_strnicmp (s1 + i, s2, l) == 0)
    if (_rl_strnicmp (s1 + i, s2, l) == 0)
      return ((char *) (s1 + i));
      return ((char *) (s1 + i));
  return ((char *)NULL);
  return ((char *)NULL);
}
}
 
 
#ifndef HAVE_STRPBRK
#ifndef HAVE_STRPBRK
/* Find the first occurrence in STRING1 of any character from STRING2.
/* Find the first occurrence in STRING1 of any character from STRING2.
   Return a pointer to the character in STRING1. */
   Return a pointer to the character in STRING1. */
char *
char *
_rl_strpbrk (string1, string2)
_rl_strpbrk (string1, string2)
     const char *string1, *string2;
     const char *string1, *string2;
{
{
  register const char *scan;
  register const char *scan;
#if defined (HANDLE_MULTIBYTE)
#if defined (HANDLE_MULTIBYTE)
  mbstate_t ps;
  mbstate_t ps;
  register int i, v;
  register int i, v;
 
 
  memset (&ps, 0, sizeof (mbstate_t));
  memset (&ps, 0, sizeof (mbstate_t));
#endif
#endif
 
 
  for (; *string1; string1++)
  for (; *string1; string1++)
    {
    {
      for (scan = string2; *scan; scan++)
      for (scan = string2; *scan; scan++)
        {
        {
          if (*string1 == *scan)
          if (*string1 == *scan)
            return ((char *)string1);
            return ((char *)string1);
        }
        }
#if defined (HANDLE_MULTIBYTE)
#if defined (HANDLE_MULTIBYTE)
      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
        {
        {
          v = _rl_get_char_len (string1, &ps);
          v = _rl_get_char_len (string1, &ps);
          if (v > 1)
          if (v > 1)
            string1 += v - 1;   /* -1 to account for auto-increment in loop */
            string1 += v - 1;   /* -1 to account for auto-increment in loop */
        }
        }
#endif
#endif
    }
    }
  return ((char *)NULL);
  return ((char *)NULL);
}
}
#endif
#endif
 
 
#if !defined (HAVE_STRCASECMP)
#if !defined (HAVE_STRCASECMP)
/* Compare at most COUNT characters from string1 to string2.  Case
/* Compare at most COUNT characters from string1 to string2.  Case
   doesn't matter. */
   doesn't matter. */
int
int
_rl_strnicmp (string1, string2, count)
_rl_strnicmp (string1, string2, count)
     char *string1, *string2;
     char *string1, *string2;
     int count;
     int count;
{
{
  register char ch1, ch2;
  register char ch1, ch2;
 
 
  while (count)
  while (count)
    {
    {
      ch1 = *string1++;
      ch1 = *string1++;
      ch2 = *string2++;
      ch2 = *string2++;
      if (_rl_to_upper(ch1) == _rl_to_upper(ch2))
      if (_rl_to_upper(ch1) == _rl_to_upper(ch2))
        count--;
        count--;
      else
      else
        break;
        break;
    }
    }
  return (count);
  return (count);
}
}
 
 
/* strcmp (), but caseless. */
/* strcmp (), but caseless. */
int
int
_rl_stricmp (string1, string2)
_rl_stricmp (string1, string2)
     char *string1, *string2;
     char *string1, *string2;
{
{
  register char ch1, ch2;
  register char ch1, ch2;
 
 
  while (*string1 && *string2)
  while (*string1 && *string2)
    {
    {
      ch1 = *string1++;
      ch1 = *string1++;
      ch2 = *string2++;
      ch2 = *string2++;
      if (_rl_to_upper(ch1) != _rl_to_upper(ch2))
      if (_rl_to_upper(ch1) != _rl_to_upper(ch2))
        return (1);
        return (1);
    }
    }
  return (*string1 - *string2);
  return (*string1 - *string2);
}
}
#endif /* !HAVE_STRCASECMP */
#endif /* !HAVE_STRCASECMP */
 
 
/* Stupid comparison routine for qsort () ing strings. */
/* Stupid comparison routine for qsort () ing strings. */
int
int
_rl_qsort_string_compare (s1, s2)
_rl_qsort_string_compare (s1, s2)
  char **s1, **s2;
  char **s1, **s2;
{
{
#if defined (HAVE_STRCOLL)
#if defined (HAVE_STRCOLL)
  return (strcoll (*s1, *s2));
  return (strcoll (*s1, *s2));
#else
#else
  int result;
  int result;
 
 
  result = **s1 - **s2;
  result = **s1 - **s2;
  if (result == 0)
  if (result == 0)
    result = strcmp (*s1, *s2);
    result = strcmp (*s1, *s2);
 
 
  return result;
  return result;
#endif
#endif
}
}
 
 
/* Function equivalents for the macros defined in chardefs.h. */
/* Function equivalents for the macros defined in chardefs.h. */
#define FUNCTION_FOR_MACRO(f)   int (f) (c) int c; { return f (c); }
#define FUNCTION_FOR_MACRO(f)   int (f) (c) int c; { return f (c); }
 
 
FUNCTION_FOR_MACRO (_rl_digit_p)
FUNCTION_FOR_MACRO (_rl_digit_p)
FUNCTION_FOR_MACRO (_rl_digit_value)
FUNCTION_FOR_MACRO (_rl_digit_value)
FUNCTION_FOR_MACRO (_rl_lowercase_p)
FUNCTION_FOR_MACRO (_rl_lowercase_p)
FUNCTION_FOR_MACRO (_rl_pure_alphabetic)
FUNCTION_FOR_MACRO (_rl_pure_alphabetic)
FUNCTION_FOR_MACRO (_rl_to_lower)
FUNCTION_FOR_MACRO (_rl_to_lower)
FUNCTION_FOR_MACRO (_rl_to_upper)
FUNCTION_FOR_MACRO (_rl_to_upper)
FUNCTION_FOR_MACRO (_rl_uppercase_p)
FUNCTION_FOR_MACRO (_rl_uppercase_p)
 
 
/* Backwards compatibility, now that savestring has been removed from
/* Backwards compatibility, now that savestring has been removed from
   all `public' readline header files. */
   all `public' readline header files. */
#undef _rl_savestring
#undef _rl_savestring
char *
char *
_rl_savestring (s)
_rl_savestring (s)
     const char *s;
     const char *s;
{
{
  return (strcpy ((char *)xmalloc (1 + (int)strlen (s)), (s)));
  return (strcpy ((char *)xmalloc (1 + (int)strlen (s)), (s)));
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.