blob: 5d6d5b4761ea2a80825cf524f72217a257874c51 [file] [log] [blame]
/* Copyright (C) 2002, 2003 Manuel Novoa III
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with the GNU C Library; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
* 02111-1307 USA.
*/
/* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION!
*
* Besides uClibc, I'm using this code in my libc for elks, which is
* a 16-bit environment with a fairly limited compiler. It would make
* things much easier for me if this file isn't modified unnecessarily.
* In particular, please put any new or replacement functions somewhere
* else, and modify the makefile to use your version instead.
* Thanks. Manuel
*
* ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION! */
#ifndef _UCLIBC_LOCALE_H
#define _UCLIBC_LOCALE_H
/**********************************************************************/
/* uClibc compatibilty stuff */
#ifdef __UCLIBC_HAS_LOCALE__
# undef __LOCALE_C_ONLY
#else
# define __LOCALE_C_ONLY
#endif
/**********************************************************************/
#define __NL_ITEM_CATEGORY_SHIFT 8
#define __NL_ITEM_INDEX_MASK 0xff
/* TODO: Make sure these agree with the locale mmap file gererator! */
#define __LC_CTYPE 0
#define __LC_NUMERIC 1
#define __LC_MONETARY 2
#define __LC_TIME 3
#define __LC_COLLATE 4
#define __LC_MESSAGES 5
#define __LC_ALL 6
/**********************************************************************/
#ifndef __LOCALE_C_ONLY
enum {
__ctype_encoding_7_bit, /* C/POSIX */
__ctype_encoding_utf8, /* UTF-8 */
__ctype_encoding_8_bit /* for 8-bit codeset locales */
};
#define LOCALE_STRING_SIZE (2 * __LC_ALL + 2)
/*
* '#' + 2_per_category + '\0'
* {locale row # : 0 = C|POSIX} + 0x8001
* encoded in two chars as (((N+1) >> 8) | 0x80) and ((N+1) & 0xff)
* so decode is ((((uint16_t)(*s & 0x7f)) << 8) + s[1]) - 1
*
* Note: 0s are not used as they are nul-terminators for strings.
* Note: 0xff, 0xff is the encoding for a non-selected locale.
* (see setlocale() below).
* In particular, C/POSIX locale is '#' + "\x80\x01"}*LC_ALL + nul.
*/
struct __uclibc_locale_struct;
typedef struct __uclibc_locale_struct *__locale_t;
#endif /* !defined(__LOCALE_C_ONLY) */
#endif /* _UCLIBC_LOCALE_H */