/**
 * D header file for C99.
 *
 * $(C_HEADER_DESCRIPTION pubs.opengroup.org/onlinepubs/009695399/basedefs/_locale.h.html, _locale.h)
 *
 * Copyright: Copyright Sean Kelly 2005 - 2009.
 * License: Distributed under the
 *      $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0).
 *    (See accompanying file LICENSE)
 * Authors:   Sean Kelly
 * Source:    $(DRUNTIMESRC core/stdc/_locale.d)
 * Standards: ISO/IEC 9899:1999 (E)
 */

module core.stdc.locale;

version (OSX)
    version = Darwin;
else version (iOS)
    version = Darwin;
else version (TVOS)
    version = Darwin;
else version (WatchOS)
    version = Darwin;

extern (C):
@trusted: // Only setlocale operates on C strings.
nothrow:
@nogc:

///
struct lconv
{
    char* decimal_point;
    char* thousands_sep;
    char* grouping;
    char* int_curr_symbol;
    char* currency_symbol;
    char* mon_decimal_point;
    char* mon_thousands_sep;
    char* mon_grouping;
    char* positive_sign;
    char* negative_sign;
    byte  int_frac_digits;
    byte  frac_digits;
    byte  p_cs_precedes;
    byte  p_sep_by_space;
    byte  n_cs_precedes;
    byte  n_sep_by_space;
    byte  p_sign_posn;
    byte  n_sign_posn;
    byte  int_p_cs_precedes;
    byte  int_p_sep_by_space;
    byte  int_n_cs_precedes;
    byte  int_n_sep_by_space;
    byte  int_p_sign_posn;
    byte  int_n_sign_posn;
}

version (CRuntime_Glibc)
{
    ///
    enum LC_CTYPE          = 0;
    ///
    enum LC_NUMERIC        = 1;
    ///
    enum LC_TIME           = 2;
    ///
    enum LC_COLLATE        = 3;
    ///
    enum LC_MONETARY       = 4;
    ///
    enum LC_MESSAGES       = 5;
    ///
    enum LC_ALL            = 6;
    ///
    enum LC_PAPER          = 7;  // non-standard
    ///
    enum LC_NAME           = 8;  // non-standard
    ///
    enum LC_ADDRESS        = 9;  // non-standard
    ///
    enum LC_TELEPHONE      = 10; // non-standard
    ///
    enum LC_MEASUREMENT    = 11; // non-standard
    ///
    enum LC_IDENTIFICATION = 12; // non-standard
}
else version (Windows)
{
    ///
    enum LC_ALL            = 0;
    ///
    enum LC_COLLATE        = 1;
    ///
    enum LC_CTYPE          = 2;
    ///
    enum LC_MONETARY       = 3;
    ///
    enum LC_NUMERIC        = 4;
    ///
    enum LC_TIME           = 5;
}
else version (Darwin)
{
    ///
    enum LC_ALL            = 0;
    ///
    enum LC_COLLATE        = 1;
    ///
    enum LC_CTYPE          = 2;
    ///
    enum LC_MONETARY       = 3;
    ///
    enum LC_NUMERIC        = 4;
    ///
    enum LC_TIME           = 5;
    ///
    enum LC_MESSAGES       = 6;
}
else version (FreeBSD)
{
    ///
    enum LC_ALL            = 0;
    ///
    enum LC_COLLATE        = 1;
    ///
    enum LC_CTYPE          = 2;
    ///
    enum LC_MONETARY       = 3;
    ///
    enum LC_NUMERIC        = 4;
    ///
    enum LC_TIME           = 5;
    ///
    enum LC_MESSAGES       = 6;
}
else version (NetBSD)
{
    ///
    enum LC_ALL            = 0;
    ///
    enum LC_COLLATE        = 1;
    ///
    enum LC_CTYPE          = 2;
    ///
    enum LC_MONETARY       = 3;
    ///
    enum LC_NUMERIC        = 4;
    ///
    enum LC_TIME           = 5;
    ///
    enum LC_MESSAGES       = 6;
}
else version (OpenBSD)
{
    ///
    enum LC_ALL            = 0;
    ///
    enum LC_COLLATE        = 1;
    ///
    enum LC_CTYPE          = 2;
    ///
    enum LC_MONETARY       = 3;
    ///
    enum LC_NUMERIC        = 4;
    ///
    enum LC_TIME           = 5;
    ///
    enum LC_MESSAGES       = 6;
}
else version (DragonFlyBSD)
{
    ///
    enum LC_ALL            = 0;
    ///
    enum LC_COLLATE        = 1;
    ///
    enum LC_CTYPE          = 2;
    ///
    enum LC_MONETARY       = 3;
    ///
    enum LC_NUMERIC        = 4;
    ///
    enum LC_TIME           = 5;
    ///
    enum LC_MESSAGES       = 6;
}
else version (CRuntime_Bionic)
{
    enum
    {
        ///
        LC_CTYPE          = 0,
        ///
        LC_NUMERIC        = 1,
        ///
        LC_TIME           = 2,
        ///
        LC_COLLATE        = 3,
        ///
        LC_MONETARY       = 4,
        ///
        LC_MESSAGES       = 5,
        ///
        LC_ALL            = 6,
        ///
        LC_PAPER          = 7,
        ///
        LC_NAME           = 8,
        ///
        LC_ADDRESS        = 9,
        ///
        LC_TELEPHONE      = 10,
        ///
        LC_MEASUREMENT    = 11,
        ///
        LC_IDENTIFICATION = 12,
    }
}
else version (Solaris)
{
    ///
    enum LC_CTYPE       = 0;
    ///
    enum LC_NUMERIC     = 1;
    ///
    enum LC_TIME        = 2;
    ///
    enum LC_COLLATE     = 3;
    ///
    enum LC_MONETARY    = 4;
    ///
    enum LC_MESSAGES    = 5;
    ///
    enum LC_ALL         = 6;
}
else version (CRuntime_Musl)
{
    ///
    enum LC_CTYPE          = 0;
    ///
    enum LC_NUMERIC        = 1;
    ///
    enum LC_TIME           = 2;
    ///
    enum LC_COLLATE        = 3;
    ///
    enum LC_MONETARY       = 4;
    ///
    enum LC_MESSAGES       = 5;
    ///
    enum LC_ALL            = 6;
}
else version (CRuntime_UClibc)
{
    ///
    enum LC_CTYPE          = 0;
    ///
    enum LC_NUMERIC        = 1;
    ///
    enum LC_TIME           = 2;
    ///
    enum LC_COLLATE        = 3;
    ///
    enum LC_MONETARY       = 4;
    ///
    enum LC_MESSAGES       = 5;
    ///
    enum LC_ALL            = 6;
    ///
    enum LC_PAPER          = 7;
    ///
    enum LC_NAME           = 8;
    ///
    enum LC_ADDRESS        = 9;
    ///
    enum LC_TELEPHONE      = 10;
    ///
    enum LC_MEASUREMENT    = 11;
    ///
    enum LC_IDENTIFICATION = 12;
}
else
{
    static assert(false, "Unsupported platform");
}

///
@system char*  setlocale(int category, const scope char* locale);
///
lconv* localeconv();
