X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=includes%2Flocale.h;fp=includes%2Flocale.h;h=e16b075efeba252f7ea0d3dd9d828c271c32bf9e;hb=1e221deb9ee725a14b3656f94e2763f8faeb18dc;hp=0000000000000000000000000000000000000000;hpb=9712362f98b90c1a2aeec9fd877b0b872b6378c7;p=pdclib diff --git a/includes/locale.h b/includes/locale.h new file mode 100644 index 0000000..e16b075 --- /dev/null +++ b/includes/locale.h @@ -0,0 +1,85 @@ +// ---------------------------------------------------------------------------- +// $Id$ +// ---------------------------------------------------------------------------- +// Public Domain C Library - http://pdclib.sourceforge.net +// This code is Public Domain. Use, modify, and redistribute at will. +// ---------------------------------------------------------------------------- +// Provides information on locale specifics as well as a function to change the +// active locale to something else but the startup default "C". +// ---------------------------------------------------------------------------- + +#ifndef __LOCALE_H +#define __LOCALE_H __LOCALE_H + +// ---------------------------------------------------------------------------- +// DEFINES + +#define NULL 0 + +// Locale categories +#define LC_COLLATE 1 // affects strcoll() and strxfrm() +#define LC_CTYPE 2 // affects ctype.h +#define LC_MONETARY 4 // affects monetary aspect of localeconv() +#define LC_NUMERIC 8 // affects numeric aspect of localeconv() +#define LC_TIME 16 // affects strftime() +#define LC_ALL 31 // affects all of the above + +// ---------------------------------------------------------------------------- +// TYPEDEFS + +// TODO: Detailed documentation of grouping formats and field values + +struct lconv +{ + // LC_NUMERIC + char * decimal_point; // decimal point + char * grouping; // grouping + char * thousands_sep; // grouping string + + // LC_MONETARY + char * mon_decimal_point; // decimal point + char * mon_grouping; // grouping + char * mon_thousands_sep; // grouping string + char * negative_sign; // negative sign + char * positive_sign; // positive sign + char * currency_symbol; // currency symbol + char frac_digits; // after-point digits + // negative values + char n_cs_precedes; // currency symbol preceding value? + char n_sep_by_space; // currency symbol seperated by space? + char n_sign_posn; // sign position + // positive values + char p_cs_precedes; // currency symbol preceding value? + char p_sep_by_space; // currency symbol seperated by space? + char p_sign_posn; // sign position? + + // for international monetary values + char * int_curr_symbol; // international currency symbol (ISO 4217) + char int_frac_digits; // after-point digits + // negative values + char int_n_cs_precedes; // currency symbol preceding value? + char int_n_sep_by_space; // currency symbol seperated by space? + char int_n_sign_posn; // sign position? + // positive values + char int_p_cs_precedes; // currency symbol preceding value? + char int_p_sep_by_space; // currency symbol seperated by space? + char int_p_sign_posn; // sign position? +}; + +// ---------------------------------------------------------------------------- +// FUNCTIONS + +// Returns a (pointer to a) lconv structure holding the values for the current +// locale. The structure must not be changed; values might become outdated with +// later calls to setlocale() changing LC_NUMERIC, LC_MONETARY or LC_ALL. +struct lconv * localeconv( void ); + +// Categories are selected by OR'ing the LC_* defines from this header. The +// function sets the current locale to that defined by locale_name, and returns +// the name of the new locale (if it was set successfully) or a null pointer +// (if unsuccessful). At startup, the current locale is "C" by default. A null +// pointer as locale_name leaves the locale unchanged, an empty string sets it +// to the "native" locale. +char * setlocale( int categories, const char * locale_name ); + +#endif // __LOCALE_H