C++程序  |  126行  |  2.57 KB

/*  $NetBSD: nl_langinfo.c,v 1.11 2005/11/29 03:11:59 christos Exp $  */

/*
 * Written by J.T. Conklin <jtc@NetBSD.org>.
 * Public domain.
 */
#include  <LibConfig.h>
#include  <sys/EfiCdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
__RCSID("$NetBSD: nl_langinfo.c,v 1.11 2005/11/29 03:11:59 christos Exp $");
#endif /* LIBC_SCCS and not lint */

#include <sys/localedef.h>
#include <locale.h>
#include <nl_types.h>
#include <langinfo.h>
#include "rune.h"
#include "runetype.h"

char *
nl_langinfo(nl_item item)
{
  const char *s;

  switch (item) {
  case D_T_FMT:
    s = _CurrentTimeLocale->d_t_fmt;
    break;
  case D_FMT:
    s = _CurrentTimeLocale->d_fmt;
    break;
  case T_FMT:
    s = _CurrentTimeLocale->t_fmt;
    break;
  case T_FMT_AMPM:
    s = _CurrentTimeLocale->t_fmt_ampm;
    break;
  case AM_STR:
  case PM_STR:
    s = _CurrentTimeLocale->am_pm[(size_t)(item - AM_STR)];
    break;
  case DAY_1:
  case DAY_2:
  case DAY_3:
  case DAY_4:
  case DAY_5:
  case DAY_6:
  case DAY_7:
    s = _CurrentTimeLocale->day[(size_t)(item - DAY_1)];
    break;
  case ABDAY_1:
  case ABDAY_2:
  case ABDAY_3:
  case ABDAY_4:
  case ABDAY_5:
  case ABDAY_6:
  case ABDAY_7:
    s = _CurrentTimeLocale->abday[(size_t)(item - ABDAY_1)];
    break;
  case MON_1:
  case MON_2:
  case MON_3:
  case MON_4:
  case MON_5:
  case MON_6:
  case MON_7:
  case MON_8:
  case MON_9:
  case MON_10:
  case MON_11:
  case MON_12:
    s = _CurrentTimeLocale->mon[(size_t)(item - MON_1)];
    break;
  case ABMON_1:
  case ABMON_2:
  case ABMON_3:
  case ABMON_4:
  case ABMON_5:
  case ABMON_6:
  case ABMON_7:
  case ABMON_8:
  case ABMON_9:
  case ABMON_10:
  case ABMON_11:
  case ABMON_12:
    s = _CurrentTimeLocale->abmon[(size_t)(item - ABMON_1)];
    break;
  case RADIXCHAR:
    s = _CurrentNumericLocale->decimal_point;
    break;
  case THOUSEP:
    s = _CurrentNumericLocale->thousands_sep;
    break;
  case YESSTR:
    s = _CurrentMessagesLocale->yesstr;
    break;
  case YESEXPR:
    s = _CurrentMessagesLocale->yesexpr;
    break;
  case NOSTR:
    s = _CurrentMessagesLocale->nostr;
    break;
  case NOEXPR:
    s = _CurrentMessagesLocale->noexpr;
    break;
  case CRNCYSTR:        /* XXX */
    s = "";
    break;
  case CODESET:
#ifdef WITH_RUNE
    s = _CurrentRuneLocale->rl_codeset;
#else
    s = NULL;
#endif
    if (!s)
      s = "";
    break;
  default:
    s = "";
    break;
  }

  /* The return value should be really const, but the interface says OW */
  return __UNCONST(s);
}