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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [intl/] [explodename.c] - Diff between revs 154 and 816

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

Rev 154 Rev 816
/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
 
   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.  */
 
 
#ifdef HAVE_CONFIG_H
#ifdef HAVE_CONFIG_H
# include <config.h>
# include <config.h>
#endif
#endif
 
 
#include <stdlib.h>
#include <stdlib.h>
#include <string.h>
#include <string.h>
#include <sys/types.h>
#include <sys/types.h>
 
 
#include "loadinfo.h"
#include "loadinfo.h"
 
 
/* On some strange systems still no definition of NULL is found.  Sigh!  */
/* On some strange systems still no definition of NULL is found.  Sigh!  */
#ifndef NULL
#ifndef NULL
# if defined __STDC__ && __STDC__
# if defined __STDC__ && __STDC__
#  define NULL ((void *) 0)
#  define NULL ((void *) 0)
# else
# else
#  define NULL 0
#  define NULL 0
# endif
# endif
#endif
#endif
 
 
/* @@ end of prolog @@ */
/* @@ end of prolog @@ */
 
 
char *
char *
_nl_find_language (name)
_nl_find_language (name)
     const char *name;
     const char *name;
{
{
  while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
  while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
         && name[0] != '+' && name[0] != ',')
         && name[0] != '+' && name[0] != ',')
    ++name;
    ++name;
 
 
  return (char *) name;
  return (char *) name;
}
}
 
 
 
 
int
int
_nl_explode_name (name, language, modifier, territory, codeset,
_nl_explode_name (name, language, modifier, territory, codeset,
                  normalized_codeset, special, sponsor, revision)
                  normalized_codeset, special, sponsor, revision)
     char *name;
     char *name;
     const char **language;
     const char **language;
     const char **modifier;
     const char **modifier;
     const char **territory;
     const char **territory;
     const char **codeset;
     const char **codeset;
     const char **normalized_codeset;
     const char **normalized_codeset;
     const char **special;
     const char **special;
     const char **sponsor;
     const char **sponsor;
     const char **revision;
     const char **revision;
{
{
  enum { undecided, xpg, cen } syntax;
  enum { undecided, xpg, cen } syntax;
  char *cp;
  char *cp;
  int mask;
  int mask;
 
 
  *modifier = NULL;
  *modifier = NULL;
  *territory = NULL;
  *territory = NULL;
  *codeset = NULL;
  *codeset = NULL;
  *normalized_codeset = NULL;
  *normalized_codeset = NULL;
  *special = NULL;
  *special = NULL;
  *sponsor = NULL;
  *sponsor = NULL;
  *revision = NULL;
  *revision = NULL;
 
 
  /* Now we determine the single parts of the locale name.  First
  /* Now we determine the single parts of the locale name.  First
     look for the language.  Termination symbols are `_' and `@' if
     look for the language.  Termination symbols are `_' and `@' if
     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
  mask = 0;
  mask = 0;
  syntax = undecided;
  syntax = undecided;
  *language = cp = name;
  *language = cp = name;
  cp = _nl_find_language (*language);
  cp = _nl_find_language (*language);
 
 
  if (*language == cp)
  if (*language == cp)
    /* This does not make sense: language has to be specified.  Use
    /* This does not make sense: language has to be specified.  Use
       this entry as it is without exploding.  Perhaps it is an alias.  */
       this entry as it is without exploding.  Perhaps it is an alias.  */
    cp = strchr (*language, '\0');
    cp = strchr (*language, '\0');
  else if (cp[0] == '_')
  else if (cp[0] == '_')
    {
    {
      /* Next is the territory.  */
      /* Next is the territory.  */
      cp[0] = '\0';
      cp[0] = '\0';
      *territory = ++cp;
      *territory = ++cp;
 
 
      while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@'
      while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@'
             && cp[0] != '+' && cp[0] != ',' && cp[0] != '_')
             && cp[0] != '+' && cp[0] != ',' && cp[0] != '_')
        ++cp;
        ++cp;
 
 
      mask |= TERRITORY;
      mask |= TERRITORY;
 
 
      if (cp[0] == '.')
      if (cp[0] == '.')
        {
        {
          /* Next is the codeset.  */
          /* Next is the codeset.  */
          syntax = xpg;
          syntax = xpg;
          cp[0] = '\0';
          cp[0] = '\0';
          *codeset = ++cp;
          *codeset = ++cp;
 
 
          while (cp[0] != '\0' && cp[0] != '@')
          while (cp[0] != '\0' && cp[0] != '@')
            ++cp;
            ++cp;
 
 
          mask |= XPG_CODESET;
          mask |= XPG_CODESET;
 
 
          if (*codeset != cp && (*codeset)[0] != '\0')
          if (*codeset != cp && (*codeset)[0] != '\0')
            {
            {
              *normalized_codeset = _nl_normalize_codeset (*codeset,
              *normalized_codeset = _nl_normalize_codeset (*codeset,
                                                           cp - *codeset);
                                                           cp - *codeset);
              if (strcmp (*codeset, *normalized_codeset) == 0)
              if (strcmp (*codeset, *normalized_codeset) == 0)
                free ((char *) *normalized_codeset);
                free ((char *) *normalized_codeset);
              else
              else
                mask |= XPG_NORM_CODESET;
                mask |= XPG_NORM_CODESET;
            }
            }
        }
        }
    }
    }
 
 
  if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
  if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
    {
    {
      /* Next is the modifier.  */
      /* Next is the modifier.  */
      syntax = cp[0] == '@' ? xpg : cen;
      syntax = cp[0] == '@' ? xpg : cen;
      cp[0] = '\0';
      cp[0] = '\0';
      *modifier = ++cp;
      *modifier = ++cp;
 
 
      while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
      while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
             && cp[0] != ',' && cp[0] != '_')
             && cp[0] != ',' && cp[0] != '_')
        ++cp;
        ++cp;
 
 
      mask |= XPG_MODIFIER | CEN_AUDIENCE;
      mask |= XPG_MODIFIER | CEN_AUDIENCE;
    }
    }
 
 
  if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
  if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
    {
    {
      syntax = cen;
      syntax = cen;
 
 
      if (cp[0] == '+')
      if (cp[0] == '+')
        {
        {
          /* Next is special application (CEN syntax).  */
          /* Next is special application (CEN syntax).  */
          cp[0] = '\0';
          cp[0] = '\0';
          *special = ++cp;
          *special = ++cp;
 
 
          while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
          while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
            ++cp;
            ++cp;
 
 
          mask |= CEN_SPECIAL;
          mask |= CEN_SPECIAL;
        }
        }
 
 
      if (cp[0] == ',')
      if (cp[0] == ',')
        {
        {
          /* Next is sponsor (CEN syntax).  */
          /* Next is sponsor (CEN syntax).  */
          cp[0] = '\0';
          cp[0] = '\0';
          *sponsor = ++cp;
          *sponsor = ++cp;
 
 
          while (cp[0] != '\0' && cp[0] != '_')
          while (cp[0] != '\0' && cp[0] != '_')
            ++cp;
            ++cp;
 
 
          mask |= CEN_SPONSOR;
          mask |= CEN_SPONSOR;
        }
        }
 
 
      if (cp[0] == '_')
      if (cp[0] == '_')
        {
        {
          /* Next is revision (CEN syntax).  */
          /* Next is revision (CEN syntax).  */
          cp[0] = '\0';
          cp[0] = '\0';
          *revision = ++cp;
          *revision = ++cp;
 
 
          mask |= CEN_REVISION;
          mask |= CEN_REVISION;
        }
        }
    }
    }
 
 
  /* For CEN syntax values it might be important to have the
  /* For CEN syntax values it might be important to have the
     separator character in the file name, not for XPG syntax.  */
     separator character in the file name, not for XPG syntax.  */
  if (syntax == xpg)
  if (syntax == xpg)
    {
    {
      if (*territory != NULL && (*territory)[0] == '\0')
      if (*territory != NULL && (*territory)[0] == '\0')
        mask &= ~TERRITORY;
        mask &= ~TERRITORY;
 
 
      if (*codeset != NULL && (*codeset)[0] == '\0')
      if (*codeset != NULL && (*codeset)[0] == '\0')
        mask &= ~XPG_CODESET;
        mask &= ~XPG_CODESET;
 
 
      if (*modifier != NULL && (*modifier)[0] == '\0')
      if (*modifier != NULL && (*modifier)[0] == '\0')
        mask &= ~XPG_MODIFIER;
        mask &= ~XPG_MODIFIER;
    }
    }
 
 
  return mask;
  return mask;
}
}
 
 

powered by: WebSVN 2.1.0

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