summaryrefslogtreecommitdiff
path: root/locale/localeinfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'locale/localeinfo.h')
-rw-r--r--locale/localeinfo.h63
1 files changed, 54 insertions, 9 deletions
diff --git a/locale/localeinfo.h b/locale/localeinfo.h
index 4199bf7a1b..a3049a51dd 100644
--- a/locale/localeinfo.h
+++ b/locale/localeinfo.h
@@ -1,5 +1,5 @@
/* localeinfo.h -- declarations for internal libc locale interfaces
-Copyright (C) 1995 Free Software Foundation, Inc.
+Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -25,17 +25,51 @@ Cambridge, MA 02139, USA. */
#include <sys/types.h>
/* Magic number at the beginning of a locale data file for CATEGORY. */
-#define LIMAGIC(category) (0x051472CA ^ (category))
+#define LIMAGIC(category) (0x960316de ^ (category))
+
+/* Two special weight constants for the collation data. */
+#define FORWARD_CHAR 0xfffffffd
+#define ELLIPSIS_CHAR 0xfffffffe
+#define IGNORE_CHAR 0xffffffff
/* Structure describing locale data in core for a category. */
struct locale_data
- {
- const char *filedata; /* Region mapping the file data. */
- off_t filesize; /* Size of the file (and the region). */
+{
+ const char *filedata; /* Region mapping the file data. */
+ off_t filesize; /* Size of the file (and the region). */
- unsigned int nstrings; /* Number of strings below. */
- const char *strings[0]; /* Items, usually pointers into `filedata'. */
- };
+ unsigned int nstrings; /* Number of strings below. */
+ union locale_data_value
+ {
+ const char *string;
+ unsigned int word;
+ }
+ values[0]; /* Items, usually pointers into `filedata'. */
+};
+
+/* We know three kinds of collation sorting rules. */
+enum coll_sort_rule
+{
+ illegal_0__,
+ sort_forward,
+ sort_backward,
+ illegal_3__,
+ sort_position,
+ sort_forward_position,
+ sort_backward_position,
+ sort_mask
+};
+
+/* We can map the types of the entries into four categories. */
+enum value_type
+{
+ none,
+ string,
+ stringarray,
+ byte,
+ bytearray,
+ word
+};
/* For each category declare the variable for the current locale data. */
@@ -49,7 +83,11 @@ extern const struct locale_data * *const _nl_current[LC_ALL];
/* Extract the current CATEGORY locale's string for ITEM. */
#define _NL_CURRENT(category, item) \
- (_nl_current_##category->strings[_NL_ITEM_INDEX (item)])
+ (_nl_current_##category->values[_NL_ITEM_INDEX (item)].string)
+
+/* Extract the current CATEGORY locale's word for ITEM. */
+#define _NL_CURRENT_WORD(category, item) \
+ (_nl_current_##category->values[_NL_ITEM_INDEX (item)].word)
/* This is used in lc-CATEGORY.c to define _nl_current_CATEGORY. */
#define _NL_CURRENT_DEFINE(category) \
@@ -65,4 +103,11 @@ extern struct locale_data *_nl_load_locale (int category, char **name);
extern void _nl_free_locale (struct locale_data *);
+/* XXX For now. */
+typedef unsigned int u32_t;
+
+/* Global variables for LC_COLLATE category data. */
+extern const u32_t *__collate_table;
+extern const u32_t *__collate_extra;
+
#endif /* localeinfo.h */