/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <langinfo.h>
#include <string.h>
/* Undefine following line in production version. */
/* #define NDEBUG 1 */
#include <assert.h>
#include <stdlib.h>
#include "locales.h"
#include "localeinfo.h"
#include "stringtrans.h"
#define SWAPU32(w) \
(((w) << 24) | (((w) & 0xff00) << 8) | (((w) >> 8) & 0xff00) | ((w) >> 24))
void *xmalloc (size_t __n);
void *xrealloc (void *__p, size_t __n);
/* Entry describing an entry of the era specification. */
struct era_data
{
int32_t direction;
int32_t offset;
int32_t start_date[3];
int32_t stop_date[3];
const char *name;
const char *format;
};
/* The real definition of the struct for the LC_TIME locale. */
struct locale_time_t
{
const char *abday[7];
size_t cur_num_abday;
const char *day[7];
size_t cur_num_day;
const char *abmon[12];
size_t cur_num_abmon;
const char *mon[12];
size_t cur_num_mon;
const char *am_pm[2];
size_t cur_num_am_pm;
const char *d_t_fmt;
const char *d_fmt;
const char *t_fmt;
const char *t_fmt_ampm;
const char **era;
u_int32_t cur_num_era;
const char *era_year;
const char *era_d_t_fmt;
const char *era_t_fmt;
const char *era_d_fmt;
const char *alt_digits[100];
u_int32_t cur_num_alt_digits;
struct era_data *era_entries;
struct era_data *era_entries_ob;
};
void
time_startup (struct linereader *lr, struct localedef_t *locale,
struct charset_t *charset)
{
struct locale_time_t *time;
/* It is important that we always use UCS1 encoding for strings now. */
encoding_method = ENC_UCS1;
locale->categories[LC_TIME].time = time =
(struct locale_time_t *) xmalloc (sizeof (struct locale_time_t));
memset (time, '\0', sizeof (struct locale_time_t));
}
void
time_finish