1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Copyright (C) 1996-1999, 2000-2003 Free Software Foundation, Inc.
2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   This file is part of the GNU C Library.
3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   This program is free software; you can redistribute it and/or modify it
6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   under the terms of the GNU Library General Public License as published
7727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   by the Free Software Foundation; either version 2, or (at your option)
8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   any later version.
9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   This program is distributed in the hope that it will be useful,
11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   but WITHOUT ANY WARRANTY; without even the implied warranty of
12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   Library General Public License for more details.
14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   You should have received a copy of the GNU Library General Public
16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   License along with this program; if not, write to the Free Software
17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   USA.  */
19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef _LOADINFO_H
21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define _LOADINFO_H	1
22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Declarations of locale dependent catalog lookup functions.
24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   Implemented in
25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project     localealias.c    Possibly replace a locale name by another.
27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project     explodename.c    Split a locale name into its various fields.
28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project     l10nflist.c      Generate a list of filenames of possible message catalogs.
29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project     finddomain.c     Find and open the relevant message catalogs.
30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   The main function _nl_find_domain() in finddomain.c is declared
32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   in gettextP.h.
33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */
34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef internal_function
36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# define internal_function
37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Tell the compiler when a conditional or integer expression is
40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   almost always true or almost always false.  */
41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef HAVE_BUILTIN_EXPECT
42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# define __builtin_expect(expr, val) (expr)
43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Separator in PATH like lists of pathnames.  */
46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* Win32, OS/2, DOS */
48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# define PATH_SEPARATOR ';'
49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* Unix */
51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# define PATH_SEPARATOR ':'
52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Encoding of locale name parts.  */
55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define CEN_REVISION		1
56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define CEN_SPONSOR		2
57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define CEN_SPECIAL		4
58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define XPG_NORM_CODESET	8
59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define XPG_CODESET		16
60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define TERRITORY		32
61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define CEN_AUDIENCE		64
62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define XPG_MODIFIER		128
63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define CEN_SPECIFIC	(CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define XPG_SPECIFIC	(XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectstruct loaded_l10nfile
69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project{
70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  const char *filename;
71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  int decided;
72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  const void *data;
74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  struct loaded_l10nfile *next;
76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  struct loaded_l10nfile *successor[1];
77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project};
78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Normalize codeset name.  There is no standard for the codeset
81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   names.  Normalization allows the user to use any of the common
82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   names.  The return value is dynamically allocated and has to be
83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   freed by the caller.  */
84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectextern const char *_nl_normalize_codeset (const char *codeset,
85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project					  size_t name_len);
86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Lookup a locale dependent file.
88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *L10NFILE_LIST denotes a pool of lookup results of locale dependent
89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   files of the same kind, sorted in decreasing order of ->filename.
90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   DIRLIST and DIRLIST_LEN are an argz list of directories in which to
91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   look, containing at least one directory (i.e. DIRLIST_LEN > 0).
92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER,
93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   SPECIAL, SPONSOR, REVISION are the pieces of the locale name, as
94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   produced by _nl_explode_name().  FILENAME is the filename suffix.
95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   The return value is the lookup result, either found in *L10NFILE_LIST,
96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL.
97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   If the return value is non-NULL, it is added to *L10NFILE_LIST, and
98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   its ->next field denotes the chaining inside *L10NFILE_LIST, and
99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   furthermore its ->successor[] field contains a list of other lookup
100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   results from which this lookup result inherits.  */
101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectextern struct loaded_l10nfile *
102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project		    const char *dirlist, size_t dirlist_len, int mask,
104ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease		    const char *language, const char *territory,
105ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease		    const char *codeset, const char *normalized_codeset,
106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project		    const char *modifier, const char *special,
107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project		    const char *sponsor, const char *revision,
108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project		    const char *filename, int do_allocate);
109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
110727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease/* Lookup the real locale name for a locale alias NAME, or NULL if
111727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   NAME is not a locale alias (but possibly a real locale name).
112727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   The return value is statically allocated and must not be freed.  */
113727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Leaseextern const char *_nl_expand_alias (const char *name);
114727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
115727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease/* Split a locale name NAME into its pieces: language, modifier,
116727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   territory, codeset, special, sponsor, revision.
117727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   NAME gets destructively modified: NUL bytes are inserted here and
118727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   there.  *LANGUAGE gets assigned NAME.  Each of *MODIFIER, *TERRITORY,
119727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   *CODESET, *SPECIAL, *SPONSOR, *REVISION gets assigned either a
120727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   pointer into the old NAME string, or NULL.  *NORMALIZED_CODESET
121727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   gets assigned the expanded *CODESET, if it is different from *CODESET;
122727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   this one is dynamically allocated and has to be freed by the caller.
123727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   The return value is a bitmask, where each bit corresponds to one
124727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   filled-in value:
125727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease     XPG_MODIFIER, CEN_AUDIENCE  for *MODIFIER,
126727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease     TERRITORY                   for *TERRITORY,
127727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease     XPG_CODESET                 for *CODESET,
128727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease     XPG_NORM_CODESET            for *NORMALIZED_CODESET,
129727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease     CEN_SPECIAL                 for *SPECIAL,
130727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease     CEN_SPONSOR                 for *SPONSOR,
131727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease     CEN_REVISION                for *REVISION.
132727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease */
133727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Leaseextern int _nl_explode_name (char *name, const char **language,
134727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease			     const char **modifier, const char **territory,
135727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease			     const char **codeset,
136727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease			     const char **normalized_codeset,
137727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease			     const char **special, const char **sponsor,
138727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease			     const char **revision);
139727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
140727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease/* Split a locale name NAME into a leading language part and all the
141727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   rest.  Return a pointer to the first character after the language,
142727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   i.e. to the first byte of the rest.  */
143727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Leaseextern char *_nl_find_language (const char *name);
144727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
145727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#endif	/* loadinfo.h */
146727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease