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

Subversion Repositories or1k

[/] [or1k/] [tags/] [start/] [gdb-5.0/] [readline/] [util.c] - Diff between revs 579 and 1765

Only display areas with differences | Details | Blame | View Log

Rev 579 Rev 1765
/* util.c -- readline utility functions */
/* util.c -- readline utility functions */
 
 
/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
/* Copyright (C) 1987, 1989, 1992 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 1, or
   as published by the Free Software Foundation; either version 1, 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,
   675 Mass Ave, Cambridge, MA 02139, USA. */
   675 Mass Ave, Cambridge, MA 02139, 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"
 
 
#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"
 
 
#define SWAP(s, e)  do { int t; t = s; s = e; e = t; } while (0)
#define SWAP(s, e)  do { int t; t = s; s = e; e = t; } while (0)
 
 
/* Pseudo-globals imported from readline.c */
/* Pseudo-globals imported from readline.c */
extern int readline_echoing_p;
extern int readline_echoing_p;
extern procenv_t readline_top_level;
extern procenv_t readline_top_level;
extern int rl_line_buffer_len;
extern int rl_line_buffer_len;
extern Function *rl_last_func;
extern Function *rl_last_func;
 
 
extern int _rl_defining_kbd_macro;
extern int _rl_defining_kbd_macro;
extern char *_rl_executing_macro;
extern char *_rl_executing_macro;
 
 
/* Pseudo-global functions imported from other library files. */
/* Pseudo-global functions imported from other library files. */
extern void _rl_replace_text ();
extern void _rl_replace_text ();
extern void _rl_pop_executing_macro ();
extern void _rl_pop_executing_macro ();
extern void _rl_set_the_line ();
extern void _rl_set_the_line ();
extern void _rl_init_argument ();
extern void _rl_init_argument ();
 
 
extern char *xmalloc (), *xrealloc ();
extern char *xmalloc (), *xrealloc ();
 
 
/* **************************************************************** */
/* **************************************************************** */
/*                                                                  */
/*                                                                  */
/*                      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 char *pathname_alphabetic_chars = "/-_=~.#$";
static char *pathname_alphabetic_chars = "/-_=~.#$";
 
 
int
int
alphabetic (c)
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);
}
}
 
 
/* How to abort things. */
/* How to abort things. */
int
int
_rl_abort_internal ()
_rl_abort_internal ()
{
{
  ding ();
  ding ();
  rl_clear_message ();
  rl_clear_message ();
  _rl_init_argument ();
  _rl_init_argument ();
  rl_pending_input = 0;
  rl_pending_input = 0;
 
 
  _rl_defining_kbd_macro = 0;
  _rl_defining_kbd_macro = 0;
  while (_rl_executing_macro)
  while (_rl_executing_macro)
    _rl_pop_executing_macro ();
    _rl_pop_executing_macro ();
 
 
  rl_last_func = (Function *)NULL;
  rl_last_func = (Function *)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
  ding ();
  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 = xmalloc (1 + length);
  copy = 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 = xrealloc (rl_line_buffer, rl_line_buffer_len);
      rl_line_buffer = 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 = xmalloc (len + 1);
      temp = 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 char *s1, *s2;
     register 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 (s1 + i);
      return (s1 + i);
  return ((char *)NULL);
  return ((char *)NULL);
}
}
 
 
#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 chartypes.h. */
/* Function equivalents for the macros defined in chartypes.h. */
#undef _rl_uppercase_p
#undef _rl_uppercase_p
int
int
_rl_uppercase_p (c)
_rl_uppercase_p (c)
     int c;
     int c;
{
{
  return (isupper (c));
  return (isupper (c));
}
}
 
 
#undef _rl_lowercase_p
#undef _rl_lowercase_p
int
int
_rl_lowercase_p (c)
_rl_lowercase_p (c)
     int c;
     int c;
{
{
  return (islower (c));
  return (islower (c));
}
}
 
 
#undef _rl_pure_alphabetic
#undef _rl_pure_alphabetic
int
int
_rl_pure_alphabetic (c)
_rl_pure_alphabetic (c)
     int c;
     int c;
{
{
  return (isupper (c) || islower (c));
  return (isupper (c) || islower (c));
}
}
 
 
#undef _rl_digit_p
#undef _rl_digit_p
int
int
_rl_digit_p (c)
_rl_digit_p (c)
     int c;
     int c;
{
{
  return (isdigit (c));
  return (isdigit (c));
}
}
 
 
#undef _rl_to_lower
#undef _rl_to_lower
int
int
_rl_to_lower (c)
_rl_to_lower (c)
     int c;
     int c;
{
{
  return (isupper (c) ? tolower (c) : c);
  return (isupper (c) ? tolower (c) : c);
}
}
 
 
#undef _rl_to_upper
#undef _rl_to_upper
int
int
_rl_to_upper (c)
_rl_to_upper (c)
     int c;
     int c;
{
{
  return (islower (c) ? toupper (c) : c);
  return (islower (c) ? toupper (c) : c);
}
}
 
 
#undef _rl_digit_value
#undef _rl_digit_value
int
int
_rl_digit_value (c)
_rl_digit_value (c)
     int c;
     int c;
{
{
  return (isdigit (c) ? c - '0' : c);
  return (isdigit (c) ? c - '0' : c);
}
}
 
 
/* 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)
     char *s;
     char *s;
{
{
  return ((char *)strcpy (xmalloc (1 + (int)strlen (s)), (s)));
  return ((char *)strcpy (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.