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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [binutils-2.18.50/] [intl/] [plural-exp.h] - Diff between revs 156 and 816

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

Rev 156 Rev 816
/* Expression parsing and evaluation for plural form selection.
/* Expression parsing and evaluation for plural form selection.
   Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
   Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
   Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
   Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
 
 
   This program is free software; you can redistribute it and/or modify it
   This program is free software; you can redistribute it and/or modify it
   under the terms of the GNU Library General Public License as published
   under the terms of the GNU Library General Public License as published
   by the Free Software Foundation; either version 2, or (at your option)
   by the Free Software Foundation; either version 2, or (at your option)
   any later version.
   any later version.
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.
   Library General Public License for more details.
 
 
   You should have received a copy of the GNU Library General Public
   You should have received a copy of the GNU Library General Public
   License along with this program; if not, write to the Free Software
   License along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
   USA.  */
   USA.  */
 
 
#ifndef _PLURAL_EXP_H
#ifndef _PLURAL_EXP_H
#define _PLURAL_EXP_H
#define _PLURAL_EXP_H
 
 
#ifndef PARAMS
#ifndef PARAMS
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
#  define PARAMS(args) args
#  define PARAMS(args) args
# else
# else
#  define PARAMS(args) ()
#  define PARAMS(args) ()
# endif
# endif
#endif
#endif
 
 
#ifndef internal_function
#ifndef internal_function
# define internal_function
# define internal_function
#endif
#endif
 
 
#ifndef attribute_hidden
#ifndef attribute_hidden
# define attribute_hidden
# define attribute_hidden
#endif
#endif
 
 
 
 
/* This is the representation of the expressions to determine the
/* This is the representation of the expressions to determine the
   plural form.  */
   plural form.  */
struct expression
struct expression
{
{
  int nargs;                    /* Number of arguments.  */
  int nargs;                    /* Number of arguments.  */
  enum operator
  enum operator
  {
  {
    /* Without arguments:  */
    /* Without arguments:  */
    var,                        /* The variable "n".  */
    var,                        /* The variable "n".  */
    num,                        /* Decimal number.  */
    num,                        /* Decimal number.  */
    /* Unary operators:  */
    /* Unary operators:  */
    lnot,                       /* Logical NOT.  */
    lnot,                       /* Logical NOT.  */
    /* Binary operators:  */
    /* Binary operators:  */
    mult,                       /* Multiplication.  */
    mult,                       /* Multiplication.  */
    divide,                     /* Division.  */
    divide,                     /* Division.  */
    module,                     /* Modulo operation.  */
    module,                     /* Modulo operation.  */
    plus,                       /* Addition.  */
    plus,                       /* Addition.  */
    minus,                      /* Subtraction.  */
    minus,                      /* Subtraction.  */
    less_than,                  /* Comparison.  */
    less_than,                  /* Comparison.  */
    greater_than,               /* Comparison.  */
    greater_than,               /* Comparison.  */
    less_or_equal,              /* Comparison.  */
    less_or_equal,              /* Comparison.  */
    greater_or_equal,           /* Comparison.  */
    greater_or_equal,           /* Comparison.  */
    equal,                      /* Comparison for equality.  */
    equal,                      /* Comparison for equality.  */
    not_equal,                  /* Comparison for inequality.  */
    not_equal,                  /* Comparison for inequality.  */
    land,                       /* Logical AND.  */
    land,                       /* Logical AND.  */
    lor,                        /* Logical OR.  */
    lor,                        /* Logical OR.  */
    /* Ternary operators:  */
    /* Ternary operators:  */
    qmop                        /* Question mark operator.  */
    qmop                        /* Question mark operator.  */
  } operation;
  } operation;
  union
  union
  {
  {
    unsigned long int num;      /* Number value for `num'.  */
    unsigned long int num;      /* Number value for `num'.  */
    struct expression *args[3]; /* Up to three arguments.  */
    struct expression *args[3]; /* Up to three arguments.  */
  } val;
  } val;
};
};
 
 
/* This is the data structure to pass information to the parser and get
/* This is the data structure to pass information to the parser and get
   the result in a thread-safe way.  */
   the result in a thread-safe way.  */
struct parse_args
struct parse_args
{
{
  const char *cp;
  const char *cp;
  struct expression *res;
  struct expression *res;
};
};
 
 
 
 
/* Names for the libintl functions are a problem.  This source code is used
/* Names for the libintl functions are a problem.  This source code is used
   1. in the GNU C Library library,
   1. in the GNU C Library library,
   2. in the GNU libintl library,
   2. in the GNU libintl library,
   3. in the GNU gettext tools.
   3. in the GNU gettext tools.
   The function names in each situation must be different, to allow for
   The function names in each situation must be different, to allow for
   binary incompatible changes in 'struct expression'.  Furthermore,
   binary incompatible changes in 'struct expression'.  Furthermore,
   1. in the GNU C Library library, the names have a __ prefix,
   1. in the GNU C Library library, the names have a __ prefix,
   2.+3. in the GNU libintl library and in the GNU gettext tools, the names
   2.+3. in the GNU libintl library and in the GNU gettext tools, the names
         must follow ANSI C and not start with __.
         must follow ANSI C and not start with __.
   So we have to distinguish the three cases.  */
   So we have to distinguish the three cases.  */
#ifdef _LIBC
#ifdef _LIBC
# define FREE_EXPRESSION __gettext_free_exp
# define FREE_EXPRESSION __gettext_free_exp
# define PLURAL_PARSE __gettextparse
# define PLURAL_PARSE __gettextparse
# define GERMANIC_PLURAL __gettext_germanic_plural
# define GERMANIC_PLURAL __gettext_germanic_plural
# define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural
# define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural
#elif defined (IN_LIBINTL)
#elif defined (IN_LIBINTL)
# define FREE_EXPRESSION libintl_gettext_free_exp
# define FREE_EXPRESSION libintl_gettext_free_exp
# define PLURAL_PARSE libintl_gettextparse
# define PLURAL_PARSE libintl_gettextparse
# define GERMANIC_PLURAL libintl_gettext_germanic_plural
# define GERMANIC_PLURAL libintl_gettext_germanic_plural
# define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural
# define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural
#else
#else
# define FREE_EXPRESSION free_plural_expression
# define FREE_EXPRESSION free_plural_expression
# define PLURAL_PARSE parse_plural_expression
# define PLURAL_PARSE parse_plural_expression
# define GERMANIC_PLURAL germanic_plural
# define GERMANIC_PLURAL germanic_plural
# define EXTRACT_PLURAL_EXPRESSION extract_plural_expression
# define EXTRACT_PLURAL_EXPRESSION extract_plural_expression
#endif
#endif
 
 
extern void FREE_EXPRESSION PARAMS ((struct expression *exp))
extern void FREE_EXPRESSION PARAMS ((struct expression *exp))
     internal_function;
     internal_function;
extern int PLURAL_PARSE PARAMS ((void *arg));
extern int PLURAL_PARSE PARAMS ((void *arg));
extern struct expression GERMANIC_PLURAL attribute_hidden;
extern struct expression GERMANIC_PLURAL attribute_hidden;
extern void EXTRACT_PLURAL_EXPRESSION PARAMS ((const char *nullentry,
extern void EXTRACT_PLURAL_EXPRESSION PARAMS ((const char *nullentry,
                                               struct expression **pluralp,
                                               struct expression **pluralp,
                                               unsigned long int *npluralsp))
                                               unsigned long int *npluralsp))
     internal_function;
     internal_function;
 
 
#if !defined (_LIBC) && !defined (IN_LIBINTL)
#if !defined (_LIBC) && !defined (IN_LIBINTL)
extern unsigned long int plural_eval PARAMS ((struct expression *pexp,
extern unsigned long int plural_eval PARAMS ((struct expression *pexp,
                                              unsigned long int n));
                                              unsigned long int n));
#endif
#endif
 
 
#endif /* _PLURAL_EXP_H */
#endif /* _PLURAL_EXP_H */
 
 

powered by: WebSVN 2.1.0

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