Add definitions for new categories.
[kopensolaris-gnu/glibc.git] / locale / locale.h
1 /* Copyright (C) 1991, 92, 95, 96, 97, 98 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Library General Public License as
6    published by the Free Software Foundation; either version 2 of the
7    License, or (at your option) any later version.
8
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Library General Public License for more details.
13
14    You should have received a copy of the GNU Library General Public
15    License along with the GNU C Library; see the file COPYING.LIB.  If not,
16    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17    Boston, MA 02111-1307, USA.  */
18
19 /*
20  *      ISO C Standard: 4.4 LOCALIZATION        <locale.h>
21  */
22
23 #ifndef _LOCALE_H
24 #define _LOCALE_H       1
25
26 #include <features.h>
27
28 #define __need_NULL
29 #include <stddef.h>
30
31 __BEGIN_DECLS
32
33 /* These are the possibilities for the first argument to setlocale.
34    The code assumes that LC_ALL is the highest value, and zero the lowest.  */
35 #define LC_CTYPE          0
36 #define LC_NUMERIC        1
37 #define LC_TIME           2
38 #define LC_COLLATE        3
39 #define LC_MONETARY       4
40 #define LC_MESSAGES       5
41 #define LC_ALL            6
42 #define LC_PAPER          7
43 #define LC_NAME           8
44 #define LC_ADDRESS        9
45 #define LC_TELEPHONE      10
46 #define LC_MEASUREMENT    11
47 #define LC_IDENTIFICATION 12
48
49
50 /* Structure giving information about numeric and monetary notation.  */
51 struct lconv
52 {
53   /* Numeric (non-monetary) information.  */
54
55   char *decimal_point;          /* Decimal point character.  */
56   char *thousands_sep;          /* Thousands separator.  */
57   /* Each element is the number of digits in each group;
58      elements with higher indices are farther left.
59      An element with value CHAR_MAX means that no further grouping is done.
60      An element with value 0 means that the previous element is used
61      for all groups farther left.  */
62   char *grouping;
63
64   /* Monetary information.  */
65
66   /* First three chars are a currency symbol from ISO 4217.
67      Fourth char is the separator.  Fifth char is '\0'.  */
68   char *int_curr_symbol;
69   char *currency_symbol;        /* Local currency symbol.  */
70   char *mon_decimal_point;      /* Decimal point character.  */
71   char *mon_thousands_sep;      /* Thousands separator.  */
72   char *mon_grouping;           /* Like `grouping' element (above).  */
73   char *positive_sign;          /* Sign for positive values.  */
74   char *negative_sign;          /* Sign for negative values.  */
75   char int_frac_digits;         /* Int'l fractional digits.  */
76   char frac_digits;             /* Local fractional digits.  */
77   /* 1 if currency_symbol precedes a positive value, 0 if succeeds.  */
78   char p_cs_precedes;
79   /* 1 iff a space separates currency_symbol from a positive value.  */
80   char p_sep_by_space;
81   /* 1 if currency_symbol precedes a negative value, 0 if succeeds.  */
82   char n_cs_precedes;
83   /* 1 iff a space separates currency_symbol from a negative value.  */
84   char n_sep_by_space;
85   /* Positive and negative sign positions:
86      0 Parentheses surround the quantity and currency_symbol.
87      1 The sign string precedes the quantity and currency_symbol.
88      2 The sign string follows the quantity and currency_symbol.
89      3 The sign string immediately precedes the currency_symbol.
90      4 The sign string immediately follows the currency_symbol.  */
91   char p_sign_posn;
92   char n_sign_posn;
93 };
94
95
96 /* Set and/or return the current locale.  */
97 extern char *setlocale __P ((int __category, __const char *__locale));
98
99 /* Return the numeric/monetary information for the current locale.  */
100 extern struct lconv *localeconv __P ((void));
101
102 #ifdef  __USE_GNU
103 /* The concept of one static locale per category is not very well
104    thought out.  Many applications will need to process its data using
105    information from several different locales.  Another application is
106    the implementation of the internationalization handling in the
107    upcoming ISO C++ standard library.  To support this another set of
108    the functions using locale data exist which have an additional
109    argument.
110
111    Attention: all these functions are *not* standardized in any form.
112    This is a proof-of-concept implementation.  */
113
114 /* Get locale datatype definition.  */
115 # include <xlocale.h>
116
117 /* Return a reference to a data structure representing a set of locale
118    datasets.  Unlike for the CATEGORY parameter for `setlocale' the
119    CATEGORY_MASK parameter here uses a single bit for each category.
120    I.e., 1 << LC_CTYPE means to load data for this category.  If
121    BASE is non-null the appropriate category information in the BASE
122    record is replaced.  */
123 extern __locale_t __newlocale __P ((int __category_mask,
124                                     __const char *__locale,
125                                     __locale_t __base));
126
127 /* Return a duplicate of the set of locale in DATASET.  All usage
128    counters are increased if necessary.  */
129 extern __locale_t __duplocale __P ((__locale_t __dataset));
130
131 /* Free the data associated with a locale dataset previously returned
132    by a call to `setlocale_r'.  */
133 extern void __freelocale __P ((__locale_t __dataset));
134 #endif
135
136 __END_DECLS
137
138 #endif /* locale.h  */