aboutsummaryrefslogtreecommitdiff
path: root/locale/localedef.h
diff options
context:
space:
mode:
Diffstat (limited to 'locale/localedef.h')
-rw-r--r--locale/localedef.h196
1 files changed, 196 insertions, 0 deletions
diff --git a/locale/localedef.h b/locale/localedef.h
new file mode 100644
index 0000000..5958a9c
--- /dev/null
+++ b/locale/localedef.h
@@ -0,0 +1,196 @@
+/* Copyright (C) 1995 Free Software Foundation, Inc.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 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
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA. */
+
+#ifndef _LOCALEDEF_H
+#define _LOCALEDEF_H 1
+
+#define __need_wchar_t
+#include <stddef.h>
+
+#include "config.h"
+
+#include "hash.h"
+
+
+/* Needed always. */
+#define MAX(a, b) ({typeof (a) _a = (a); typeof (b) _b = (b); \
+ _a > _b ? _a : _b; })
+#define MIN(a, b) ({typeof (a) _a = (a); typeof (b) _b = (b); \
+ _a < _b ? _a : _b; })
+
+/* Determine number of elements in ARR. */
+#define NELEMS(arr) ((sizeof (arr)) / (sizeof (arr[0])))
+
+/* I simply love these GCC features ... :) */
+#define NO_PAREN(arg, rest...) arg, ##rest
+
+
+/* The character set used in the locale is defined in a character map file.
+ The information of the file is stored in the following struct. */
+struct charmap
+ {
+ char *filename;
+ char *codeset_name;
+ int mb_cur_min;
+ int mb_cur_max;
+ char escape_char;
+ char comment_char;
+ hash_table table;
+ int hash_size;
+ int hash_layers;
+ };
+
+/* Data structure for representing charmap database. */
+extern struct charmap charmap_data;
+
+
+/* We can map the types of the entries into four categories. */
+enum value_type { none, string, stringarray, byte, bytearray, integer };
+
+/* Definition of the data structure which represents a category and its
+ items. */
+struct category
+{
+ int cat_id;
+ const char *name;
+ size_t number;
+ struct cat_item
+ {
+ int item_id;
+ const char *name;
+ enum { std, opt } status;
+ enum value_type value_type;
+ int min;
+ int max;
+ } *item_desc;
+ char **item_value;
+ void (*infct)(int);
+ void (*checkfct)(void);
+ int (*outfct)(void);
+ int filled;
+ char *copy_locale;
+};
+
+/* This a the structure which contains all information about all
+ categories. */
+extern struct category category[];
+
+
+/* The function used to load the contents of a charmap file into the
+ the global variable `charmap_data'. */
+void charmap_read (const char *filename);
+
+/* Find a character constant given by its name in the hash table. */
+static inline wchar_t find_char (const char *name, size_t len)
+{
+ wchar_t retval;
+ if (find_entry (&charmap_data.table, name, len, (void **) &retval) != 0)
+ return retval;
+ else
+ return -1;
+}
+
+/* Path to the directory the output files are written in. */
+extern char *output_path;
+
+/* If this is defined be POSIX conform. */
+extern int posix_conformance;
+
+/* If not zero give a lot more messages. */
+extern int verbose;
+
+/* This structure contains all informations about the status of of
+ reading the locale definition file. */
+struct locfile_data
+ {
+ const char *filename;
+ char escape_char;
+ char comment_char;
+ size_t bufsize;
+ char *buf;
+ char *strbuf;
+ size_t buf_ptr;
+ int continue_line;
+ size_t returned_tokens;
+ size_t line_no;
+ };
+
+/* The status variable. */
+extern struct locfile_data locfile_data;
+
+/* Open the locale definition file. */
+void locfile_open (const char *fname);
+
+/* Return the next token from the locale definition file. */
+int locfile_lex (char **token, int *token_len);
+/* Dito, but check for EOF. */
+int xlocfile_lex (char **token, int *token_len);
+
+/* Ignore the rest of the line. First TOKEN given if != 0. Warn about
+ anything other than end of line if WARN_FLAG nonzero. */
+void ignore_to_eol (int token, int warn_flag);
+
+/* Code a character with UTF-8 if the character map has multi-byte
+ characters. */
+int char_to_utf (char *buf, int char_val);
+
+
+/* Read the locale defintion file FNAME and fill the appropriate
+ data structures. */
+void locfile_read (const char *fname);
+
+/* Check categories for consistency. */
+void categories_check (void);
+
+/* Write out the binary representation of the category data. */
+void categories_write (void);
+
+
+/* Treat reading the LC_COLLATE definition. */
+void collate_input (int token);
+
+/* Treat reading the LC_CTYPE definition. */
+void ctype_input (int token);
+void ctype_check (void);
+int ctype_output (void);
+
+/* Treat reading the LC_MONETARY definition. */
+void monetary_check (void);
+
+/* Treat reading the LC_MESSAGES definition. */
+void messages_check (void);
+
+/* Treat reading the LC_NUMERIC definition. */
+void numeric_check (void);
+
+
+/* Print an error message, possibly with NLS. */
+void error (int status, int errnum, const char *format, ...)
+ __attribute__ ((format (printf, 3, 4)));
+
+/* Library functions. */
+void *xmalloc (size_t n);
+void *xcalloc (size_t n, size_t s);
+void *xrealloc (void *p, size_t n);
+
+/*
+ * Local Variables:
+ * mode:c
+ * c-basic-offset:2
+ * End:
+ */
+#endif /* _LOCALEDEF_H */