about summary refs log tree commit diff
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 0000000000..5958a9c5d2
--- /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 */