aboutsummaryrefslogtreecommitdiff
path: root/locale
diff options
context:
space:
mode:
Diffstat (limited to 'locale')
-rw-r--r--locale/.cvsignore4
-rw-r--r--locale/C-collate.c7
-rw-r--r--locale/C-ctype.c14
-rw-r--r--locale/C-ctype_ct.c793
-rw-r--r--locale/C-ctype_mb.c9
-rw-r--r--locale/C-monetary.c22
-rw-r--r--locale/C-numeric.c12
-rw-r--r--locale/C-response.c12
-rw-r--r--locale/C-time.c25
-rw-r--r--locale/Makefile31
-rw-r--r--locale/locale.h97
-rw-r--r--locale/localeconv.c51
-rw-r--r--locale/localeinfo.h208
-rw-r--r--locale/setlocale.c45
14 files changed, 1330 insertions, 0 deletions
diff --git a/locale/.cvsignore b/locale/.cvsignore
new file mode 100644
index 0000000..1f69fd9
--- /dev/null
+++ b/locale/.cvsignore
@@ -0,0 +1,4 @@
+*.gz *.Z *.tar *.tgz
+=*
+TODO COPYING* AUTHORS copyr-* copying.*
+glibc-*
diff --git a/locale/C-collate.c b/locale/C-collate.c
new file mode 100644
index 0000000..eddcafa
--- /dev/null
+++ b/locale/C-collate.c
@@ -0,0 +1,7 @@
+#include <ansidecl.h>
+#include <localeinfo.h>
+#include <stddef.h>
+
+
+CONST struct collate_info __collate_C = { 0, NULL, NULL, NULL };
+CONST struct collate_info *_collate_info = &__collate_C;
diff --git a/locale/C-ctype.c b/locale/C-ctype.c
new file mode 100644
index 0000000..7131a6f
--- /dev/null
+++ b/locale/C-ctype.c
@@ -0,0 +1,14 @@
+#include <ansidecl.h>
+#include <localeinfo.h>
+#include <stddef.h>
+
+
+extern CONST struct ctype_ctype_info __ctype_ctype_C;
+extern CONST struct ctype_mbchar_info __ctype_mbchar_C;
+CONST struct ctype_info __ctype_C =
+ {
+ (struct ctype_ctype_info*)&__ctype_ctype_C,
+ (struct ctype_mbchar_info*) &__ctype_mbchar_C
+ };
+
+CONST struct ctype_info *_ctype_info = &__ctype_C;
diff --git a/locale/C-ctype_ct.c b/locale/C-ctype_ct.c
new file mode 100644
index 0000000..b77e809
--- /dev/null
+++ b/locale/C-ctype_ct.c
@@ -0,0 +1,793 @@
+#include <ansidecl.h>
+#include <localeinfo.h>
+#include <stddef.h>
+#include <ctype.h>
+
+CONST unsigned short int __ctype_b_C[] =
+ {
+ 0,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl|_ISspace|_ISblank,
+ _IScntrl|_ISspace,
+ _IScntrl|_ISspace,
+ _IScntrl|_ISspace,
+ _IScntrl|_ISspace,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _ISspace|_NOgraph|_ISblank,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISdigit|_IShex,
+ _ISdigit|_IShex,
+ _ISdigit|_IShex,
+ _ISdigit|_IShex,
+ _ISdigit|_IShex,
+ _ISdigit|_IShex,
+ _ISdigit|_IShex,
+ _ISdigit|_IShex,
+ _ISdigit|_IShex,
+ _ISdigit|_IShex,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISalpha|_ISupper|_IShex,
+ _ISalpha|_ISupper|_IShex,
+ _ISalpha|_ISupper|_IShex,
+ _ISalpha|_ISupper|_IShex,
+ _ISalpha|_ISupper|_IShex,
+ _ISalpha|_ISupper|_IShex,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISalpha|_ISupper,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISalpha|_ISlower|_IShex,
+ _ISalpha|_ISlower|_IShex,
+ _ISalpha|_ISlower|_IShex,
+ _ISalpha|_ISlower|_IShex,
+ _ISalpha|_ISlower|_IShex,
+ _ISalpha|_ISlower|_IShex,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISalpha|_ISlower,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _ISpunct,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ _IScntrl,
+ };
+CONST short int __ctype_tolower_C[] =
+ {
+ -1,
+ 0000,
+ 0001,
+ 0002,
+ 0003,
+ 0004,
+ 0005,
+ 0006,
+ 0007,
+ 0010,
+ 0011,
+ 0012,
+ 0013,
+ 0014,
+ 0015,
+ 0016,
+ 0017,
+ 0020,
+ 0021,
+ 0022,
+ 0023,
+ 0024,
+ 0025,
+ 0026,
+ 0027,
+ 0030,
+ 0031,
+ 0032,
+ 0033,
+ 0034,
+ 0035,
+ 0036,
+ 0037,
+ 0040,
+ '!',
+ '"',
+ '#',
+ '$',
+ '%',
+ '&',
+ '\'',
+ '(',
+ ')',
+ '*',
+ '+',
+ ',',
+ '-',
+ '.',
+ '/',
+ '0',
+ '1',
+ '2',
+ '3',
+ '4',
+ '5',
+ '6',
+ '7',
+ '8',
+ '9',
+ ':',
+ ';',
+ '<',
+ '=',
+ '>',
+ '?',
+ '@',
+ 'a',
+ 'b',
+ 'c',
+ 'd',
+ 'e',
+ 'f',
+ 'g',
+ 'h',
+ 'i',
+ 'j',
+ 'k',
+ 'l',
+ 'm',
+ 'n',
+ 'o',
+ 'p',
+ 'q',
+ 'r',
+ 's',
+ 't',
+ 'u',
+ 'v',
+ 'w',
+ 'x',
+ 'y',
+ 'z',
+ '[',
+ '\\',
+ ']',
+ '^',
+ '_',
+ '`',
+ 'a',
+ 'b',
+ 'c',
+ 'd',
+ 'e',
+ 'f',
+ 'g',
+ 'h',
+ 'i',
+ 'j',
+ 'k',
+ 'l',
+ 'm',
+ 'n',
+ 'o',
+ 'p',
+ 'q',
+ 'r',
+ 's',
+ 't',
+ 'u',
+ 'v',
+ 'w',
+ 'x',
+ 'y',
+ 'z',
+ '{',
+ '|',
+ '}',
+ '~',
+ 0177,
+ 0200,
+ 0201,
+ 0202,
+ 0203,
+ 0204,
+ 0205,
+ 0206,
+ 0207,
+ 0210,
+ 0211,
+ 0212,
+ 0213,
+ 0214,
+ 0215,
+ 0216,
+ 0217,
+ 0220,
+ 0221,
+ 0222,
+ 0223,
+ 0224,
+ 0225,
+ 0226,
+ 0227,
+ 0230,
+ 0231,
+ 0232,
+ 0233,
+ 0234,
+ 0235,
+ 0236,
+ 0237,
+ 0240,
+ 0241,
+ 0242,
+ 0243,
+ 0244,
+ 0245,
+ 0246,
+ 0247,
+ 0250,
+ 0251,
+ 0252,
+ 0253,
+ 0254,
+ 0255,
+ 0256,
+ 0257,
+ 0260,
+ 0261,
+ 0262,
+ 0263,
+ 0264,
+ 0265,
+ 0266,
+ 0267,
+ 0270,
+ 0271,
+ 0272,
+ 0273,
+ 0274,
+ 0275,
+ 0276,
+ 0277,
+ 0300,
+ 0301,
+ 0302,
+ 0303,
+ 0304,
+ 0305,
+ 0306,
+ 0307,
+ 0310,
+ 0311,
+ 0312,
+ 0313,
+ 0314,
+ 0315,
+ 0316,
+ 0317,
+ 0320,
+ 0321,
+ 0322,
+ 0323,
+ 0324,
+ 0325,
+ 0326,
+ 0327,
+ 0330,
+ 0331,
+ 0332,
+ 0333,
+ 0334,
+ 0335,
+ 0336,
+ 0337,
+ 0340,
+ 0341,
+ 0342,
+ 0343,
+ 0344,
+ 0345,
+ 0346,
+ 0347,
+ 0350,
+ 0351,
+ 0352,
+ 0353,
+ 0354,
+ 0355,
+ 0356,
+ 0357,
+ 0360,
+ 0361,
+ 0362,
+ 0363,
+ 0364,
+ 0365,
+ 0366,
+ 0367,
+ 0370,
+ 0371,
+ 0372,
+ 0373,
+ 0374,
+ 0375,
+ 0376,
+ 0377,
+ };
+CONST short int __ctype_toupper_C[] =
+ {
+ -1,
+ 0000,
+ 0001,
+ 0002,
+ 0003,
+ 0004,
+ 0005,
+ 0006,
+ 0007,
+ 0010,
+ 0011,
+ 0012,
+ 0013,
+ 0014,
+ 0015,
+ 0016,
+ 0017,
+ 0020,
+ 0021,
+ 0022,
+ 0023,
+ 0024,
+ 0025,
+ 0026,
+ 0027,
+ 0030,
+ 0031,
+ 0032,
+ 0033,
+ 0034,
+ 0035,
+ 0036,
+ 0037,
+ 0040,
+ '!',
+ '"',
+ '#',
+ '$',
+ '%',
+ '&',
+ '\'',
+ '(',
+ ')',
+ '*',
+ '+',
+ ',',
+ '-',
+ '.',
+ '/',
+ '0',
+ '1',
+ '2',
+ '3',
+ '4',
+ '5',
+ '6',
+ '7',
+ '8',
+ '9',
+ ':',
+ ';',
+ '<',
+ '=',
+ '>',
+ '?',
+ '@',
+ 'A',
+ 'B',
+ 'C',
+ 'D',
+ 'E',
+ 'F',
+ 'G',
+ 'H',
+ 'I',
+ 'J',
+ 'K',
+ 'L',
+ 'M',
+ 'N',
+ 'O',
+ 'P',
+ 'Q',
+ 'R',
+ 'S',
+ 'T',
+ 'U',
+ 'V',
+ 'W',
+ 'X',
+ 'Y',
+ 'Z',
+ '[',
+ '\\',
+ ']',
+ '^',
+ '_',
+ '`',
+ 'A',
+ 'B',
+ 'C',
+ 'D',
+ 'E',
+ 'F',
+ 'G',
+ 'H',
+ 'I',
+ 'J',
+ 'K',
+ 'L',
+ 'M',
+ 'N',
+ 'O',
+ 'P',
+ 'Q',
+ 'R',
+ 'S',
+ 'T',
+ 'U',
+ 'V',
+ 'W',
+ 'X',
+ 'Y',
+ 'Z',
+ '{',
+ '|',
+ '}',
+ '~',
+ 0177,
+ 0200,
+ 0201,
+ 0202,
+ 0203,
+ 0204,
+ 0205,
+ 0206,
+ 0207,
+ 0210,
+ 0211,
+ 0212,
+ 0213,
+ 0214,
+ 0215,
+ 0216,
+ 0217,
+ 0220,
+ 0221,
+ 0222,
+ 0223,
+ 0224,
+ 0225,
+ 0226,
+ 0227,
+ 0230,
+ 0231,
+ 0232,
+ 0233,
+ 0234,
+ 0235,
+ 0236,
+ 0237,
+ 0240,
+ 0241,
+ 0242,
+ 0243,
+ 0244,
+ 0245,
+ 0246,
+ 0247,
+ 0250,
+ 0251,
+ 0252,
+ 0253,
+ 0254,
+ 0255,
+ 0256,
+ 0257,
+ 0260,
+ 0261,
+ 0262,
+ 0263,
+ 0264,
+ 0265,
+ 0266,
+ 0267,
+ 0270,
+ 0271,
+ 0272,
+ 0273,
+ 0274,
+ 0275,
+ 0276,
+ 0277,
+ 0300,
+ 0301,
+ 0302,
+ 0303,
+ 0304,
+ 0305,
+ 0306,
+ 0307,
+ 0310,
+ 0311,
+ 0312,
+ 0313,
+ 0314,
+ 0315,
+ 0316,
+ 0317,
+ 0320,
+ 0321,
+ 0322,
+ 0323,
+ 0324,
+ 0325,
+ 0326,
+ 0327,
+ 0330,
+ 0331,
+ 0332,
+ 0333,
+ 0334,
+ 0335,
+ 0336,
+ 0337,
+ 0340,
+ 0341,
+ 0342,
+ 0343,
+ 0344,
+ 0345,
+ 0346,
+ 0347,
+ 0350,
+ 0351,
+ 0352,
+ 0353,
+ 0354,
+ 0355,
+ 0356,
+ 0357,
+ 0360,
+ 0361,
+ 0362,
+ 0363,
+ 0364,
+ 0365,
+ 0366,
+ 0367,
+ 0370,
+ 0371,
+ 0372,
+ 0373,
+ 0374,
+ 0375,
+ 0376,
+ 0377,
+ };
+
+
+CONST struct ctype_ctype_info __ctype_ctype_C =
+ {
+ (unsigned short int *) __ctype_b_C,
+ (short int *) __ctype_tolower_C,
+ (short int *) __ctype_toupper_C
+ };
diff --git a/locale/C-ctype_mb.c b/locale/C-ctype_mb.c
new file mode 100644
index 0000000..fb2309a
--- /dev/null
+++ b/locale/C-ctype_mb.c
@@ -0,0 +1,9 @@
+#include <ansidecl.h>
+#include <localeinfo.h>
+#include <stddef.h>
+
+
+CONST struct ctype_mbchar_info __ctype_mbchar_C =
+ {
+ 0, NULL
+ };
diff --git a/locale/C-monetary.c b/locale/C-monetary.c
new file mode 100644
index 0000000..1e5990f
--- /dev/null
+++ b/locale/C-monetary.c
@@ -0,0 +1,22 @@
+#include <ansidecl.h>
+#include <localeinfo.h>
+#include <stddef.h>
+
+
+CONST struct monetary_info __monetary_C =
+ {
+ (char *) "", (char *) "",
+ (char *) "", (char *) "",
+ (char *) "",
+ (char *) "", (char *) "",
+ CHAR_MAX,
+ CHAR_MAX,
+ CHAR_MAX,
+ CHAR_MAX,
+ CHAR_MAX,
+ CHAR_MAX,
+ CHAR_MAX,
+ CHAR_MAX
+ };
+
+CONST struct monetary_info *_monetary_info = &__monetary_C;
diff --git a/locale/C-numeric.c b/locale/C-numeric.c
new file mode 100644
index 0000000..890ab37
--- /dev/null
+++ b/locale/C-numeric.c
@@ -0,0 +1,12 @@
+#include <ansidecl.h>
+#include <localeinfo.h>
+#include <stddef.h>
+
+
+CONST struct numeric_info __numeric_C =
+ {
+ (char *) ".", (char *) "",
+ (char *) ""
+ };
+
+CONST struct numeric_info *_numeric_info = &__numeric_C;
diff --git a/locale/C-response.c b/locale/C-response.c
new file mode 100644
index 0000000..d823886
--- /dev/null
+++ b/locale/C-response.c
@@ -0,0 +1,12 @@
+#include <ansidecl.h>
+#include <localeinfo.h>
+#include <stddef.h>
+
+
+CONST struct response_info __response_C =
+ {
+ (char *) "[yY][[:alpha:]]",
+ (char *) "[nN][[:alpha:]]"
+ };
+
+CONST struct response_info *_response_info = &__response_C;
diff --git a/locale/C-time.c b/locale/C-time.c
new file mode 100644
index 0000000..4393061
--- /dev/null
+++ b/locale/C-time.c
@@ -0,0 +1,25 @@
+/* Built-in time information for `C' locale,
+ generated Thu Jan 1 00:00:00 1970 by li2c. */
+
+#include <ansidecl.h>
+#include <localeinfo.h>
+#include <stddef.h>
+
+
+CONST struct time_info __time_C =
+ {
+ {
+(char *) "Sun", (char *) "Mon", (char *) "Tue", (char *) "Wed", (char *) "Thu", (char *) "Fri", (char *) "Sat", },
+
+ {
+(char *) "Sunday", (char *) "Monday", (char *) "Tuesday", (char *) "Wednesday", (char *) "Thursday", (char *) "Friday", (char *) "Saturday", },
+ {
+(char *) "Jan", (char *) "Feb", (char *) "Mar", (char *) "Apr", (char *) "May", (char *) "Jun", (char *) "Jul", (char *) "Aug", (char *) "Sep", (char *) "Oct", (char *) "Nov", (char *) "Dec", },
+ {
+(char *) "January", (char *) "February", (char *) "March", (char *) "April", (char *) "May", (char *) "June", (char *) "July", (char *) "August", (char *) "September", (char *) "October", (char *) "November", (char *) "December", },
+ { (char *) "AM", (char *) "PM" },
+ (char *) "%a %b %d %H:%M:%S %Y", (char *) "%m/%d/%y", (char *) "%H:%M:%S",
+ (char *) "GMT", (char *) ""
+ };
+
+CONST struct time_info *_time_info = &__time_C;
diff --git a/locale/Makefile b/locale/Makefile
new file mode 100644
index 0000000..630b960
--- /dev/null
+++ b/locale/Makefile
@@ -0,0 +1,31 @@
+# Copyright (C) 1991, 1992 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
+# 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.
+
+#
+# Makefile for locales.
+#
+subdir := locale
+
+headers := locale.h localeinfo.h
+
+routines := setlocale localeconv
+aux := C-collate C-ctype C-ctype_ct C-ctype_mb \
+ C-monetary C-numeric C-response C-time
+
+
+include ../Rules
diff --git a/locale/locale.h b/locale/locale.h
new file mode 100644
index 0000000..80f9f90
--- /dev/null
+++ b/locale/locale.h
@@ -0,0 +1,97 @@
+/* Copyright (C) 1991, 1992 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
+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, 1992 Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA. */
+
+/*
+ * ANSI Standard: 4.4 LOCALIZATION <locale.h>
+ */
+
+#ifndef _LOCALE_H
+
+#define _LOCALE_H 1
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* These are the possibilities for the first argument to setlocale.
+ Note that although they are bit masks, they cannot be OR'd together
+ to form a new argument to pass. They must be used one at a time. */
+#define LC_COLLATE (1 << 0)
+#define LC_CTYPE (1 << 1)
+#define LC_MONETARY (1 << 2)
+#define LC_NUMERIC (1 << 3)
+#define LC_TIME (1 << 4)
+#define LC_RESPONSE (1 << 5)
+#define LC_ALL (LC_COLLATE|LC_CTYPE|LC_MONETARY|LC_NUMERIC|LC_TIME|\
+ LC_RESPONSE)
+
+
+/* Structure giving information about numeric and monetary notation. */
+struct lconv
+{
+ /* Numeric (non-monetary) information. */
+
+ char *decimal_point; /* Decimal point character. */
+ char *thousands_sep; /* Thousands separator. */
+ /* Each element is the number of digits in each group;
+ elements with higher indices are farther left.
+ An element with value CHAR_MAX means that no further grouping is done.
+ An element with value 0 means that the previous element is used
+ for all groups farther left. */
+ char *grouping;
+
+ /* Monetary information. */
+
+ /* First three chars are a currency symbol from ISO 4217.
+ Fourth char is the separator. Fifth char is '\0'. */
+ char *int_curr_symbol;
+ char *currency_symbol; /* Local currency symbol. */
+ char *mon_decimal_point; /* Decimal point character. */
+ char *mon_thousands_sep; /* Thousands separator. */
+ char *mon_grouping; /* Like `grouping' element (above). */
+ char *positive_sign; /* Sign for positive values. */
+ char *negative_sign; /* Sign for negative values. */
+ char int_frac_digits; /* Int'l fractional digits. */
+ char frac_digits; /* Local fractional digits. */
+ /* 1 if currency_symbol precedes a positive value, 0 if succeeds. */
+ char p_cs_precedes;
+ /* 1 iff a space separates currency_symbol from a positive value. */
+ char p_sep_by_space;
+ /* 1 if currency_symbol precedes a negative value, 0 if succeeds. */
+ char n_cs_precedes;
+ /* 1 iff a space separates currency_symbol from a negative value. */
+ char n_sep_by_space;
+ /* Positive and negative sign positions:
+ 0 Parentheses surround the quantity and currency_symbol.
+ 1 The sign string precedes the quantity and currency_symbol.
+ 2 The sign string succedes the quantity and currency_symbol.
+ 3 The sign string immediately precedes the currency_symbol.
+ 4 The sign string immediately succedes the currency_symbol. */
+ char p_sign_posn;
+ char n_sign_posn;
+};
+
+
+/* Set and/or return the current locale. */
+extern char *setlocale __P ((int __category, __const char *__locale));
+
+/* Return the numeric/monetary information for the current locale. */
+extern struct lconv *localeconv __P ((void));
+
+__END_DECLS
+
+#endif /* locale.h */
diff --git a/locale/localeconv.c b/locale/localeconv.c
new file mode 100644
index 0000000..1f15165
--- /dev/null
+++ b/locale/localeconv.c
@@ -0,0 +1,51 @@
+/* Copyright (C) 1991, 1992 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
+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. */
+
+#include <ansidecl.h>
+#include <localeinfo.h>
+#include <locale.h>
+
+
+/* Return monetary and numeric information about the current locale. */
+struct lconv *
+DEFUN_VOID(localeconv)
+{
+ static struct lconv result;
+
+ result.decimal_point = (char *) _numeric_info->decimal_point;
+ result.thousands_sep = (char *) _numeric_info->thousands_sep;
+ result.grouping = (char *) _numeric_info->grouping;
+
+ result.int_curr_symbol = (char *) _monetary_info->int_curr_symbol;
+ result.currency_symbol = (char *) _monetary_info->currency_symbol;
+ result.mon_decimal_point = (char *) _monetary_info->mon_decimal_point;
+ result.mon_thousands_sep = (char *) _monetary_info->mon_thousands_sep;
+ result.mon_grouping = (char *) _monetary_info->mon_grouping;
+ result.positive_sign = (char *) _monetary_info->positive_sign;
+ result.negative_sign = (char *) _monetary_info->negative_sign;
+ result.int_frac_digits = _monetary_info->int_frac_digits;
+ result.frac_digits = _monetary_info->frac_digits;
+ result.p_cs_precedes = _monetary_info->p_cs_precedes;
+ result.p_sep_by_space = _monetary_info->p_sep_by_space;
+ result.n_cs_precedes = _monetary_info->p_cs_precedes;
+ result.n_sep_by_space = _monetary_info->n_sep_by_space;
+ result.p_sign_posn = _monetary_info->p_sign_posn;
+ result.n_sign_posn = _monetary_info->n_sign_posn;
+
+ return &result;
+}
diff --git a/locale/localeinfo.h b/locale/localeinfo.h
new file mode 100644
index 0000000..5ba5fef
--- /dev/null
+++ b/locale/localeinfo.h
@@ -0,0 +1,208 @@
+/* Copyright (C) 1991, 1992 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
+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, 1992 Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA. */
+
+/* Locale-specific information. */
+
+#ifndef _LOCALEINFO_H
+
+#define _LOCALEINFO_H 1
+
+#define __need_size_t
+#define __need_wchar_t
+#include <stddef.h>
+#include <limits.h>
+
+
+/* Change these if the `wchar_t' type is changed. */
+#define WCHAR_MAX ((wchar_t) UCHAR_MAX)
+
+
+/* Used by multibyte char functions. */
+typedef struct
+{
+ char *string; /* Bytes. */
+ size_t len; /* # of bytes. */
+ long int shift; /* # of mb_char's to shift. */
+} mb_char;
+
+struct ctype_mbchar_info
+{
+ size_t mb_max; /* Max MB char length. */
+ mb_char *mb_chars; /* MB chars. */
+};
+
+struct ctype_ctype_info
+{
+ unsigned short int *ctype_b; /* Characteristics. */
+ short int *ctype_tolower; /* Case mappings. */
+ short int *ctype_toupper; /* Case mappings. */
+};
+
+struct ctype_info
+{
+ struct ctype_ctype_info *ctype;
+ struct ctype_mbchar_info *mbchar;
+};
+
+extern __const struct ctype_info *_ctype_info;
+
+/* These are necessary because they are used in a header file. */
+extern __const unsigned short int *__ctype_b;
+extern __const short int *__ctype_tolower;
+extern __const short int *__ctype_toupper;
+
+
+/* Used by strcoll and strxfrm. */
+typedef struct
+{
+ unsigned char *values;
+ size_t nvalues;
+} literal_value;
+
+typedef struct
+{
+ union
+ {
+ literal_value literal;
+ /* %%% This may become a regex_t in the future. */
+ char *regexp;
+ } replace, with;
+ unsigned int regexp:1;
+} subst;
+
+struct collate_info
+{
+ size_t nsubsts;
+ subst *substs;
+
+ unsigned char *values;
+ unsigned char *offsets;
+};
+
+extern __const struct collate_info *_collate_info;
+
+
+/* Used by strtod, atof. */
+struct numeric_info
+{
+ char *decimal_point;
+ char *thousands_sep;
+ char *grouping;
+};
+
+extern __const struct numeric_info *_numeric_info;
+
+
+/* Used in the return value of localeconv. */
+struct monetary_info
+{
+ char *int_curr_symbol;
+ char *currency_symbol;
+ char *mon_decimal_point;
+ char *mon_thousands_sep;
+ char *mon_grouping;
+ char *positive_sign;
+ char *negative_sign;
+ char int_frac_digits;
+ char frac_digits;
+ char p_cs_precedes;
+ char p_sep_by_space;
+ char n_cs_precedes;
+ char n_sep_by_space;
+ char p_sign_posn;
+ char n_sign_posn;
+};
+
+extern __const struct monetary_info *_monetary_info;
+
+
+/* Used by strftime, asctime. */
+struct time_info
+{
+ char *abbrev_wkday[7]; /* Short weekday names. */
+ char *full_wkday[7]; /* Full weekday names. */
+ char *abbrev_month[12]; /* Short month names. */
+ char *full_month[12]; /* Full month names. */
+ char *ampm[2]; /* "AM" and "PM" strings. */
+
+ char *date_time; /* Appropriate date and time format. */
+ char *date; /* Appropriate date format. */
+ char *time; /* Appropriate time format. */
+
+ char *ut0; /* Name for GMT. */
+ char *tz; /* Default TZ value. */
+};
+
+extern __const struct time_info *_time_info;
+
+struct response_info
+{
+ /* Regexp for affirmative answers. */
+ char *yesexpr;
+
+ /* Regexp for negative answers. */
+ char *noexpr;
+};
+
+extern __const struct response_info *_response_info;
+
+/* Locale structure. */
+typedef struct
+{
+ char *name;
+ int categories;
+
+ unsigned int allocated:1;
+
+ int subcategories;
+ size_t num_sublocales;
+ struct sub_locale *sublocales;
+
+ __ptr_t *info;
+} locale;
+
+typedef struct sub_locale
+{
+ unsigned int pointer:1;
+
+ int categories;
+ char *name;
+
+ locale *locale;
+} sublocale;
+
+
+/* This is the magic number that localeinfo object files begin with.
+ In case you're wondering why I chose the value 0x051472CA, it's
+ because I was born on 05-14-72 in Oakland, CA. */
+#define LIMAGIC 0x051472CA
+/* This is the magic number that precedes each category-specific section
+ of a localeinfo object file. It's the arbitrary magic number above,
+ but modified by the category so that it's different from the per-file
+ magic number and unique for each category. */
+#define CATEGORY_MAGIC(x) (LIMAGIC ^ (x))
+
+extern __const char *__lidir, *__lidefault;
+
+extern locale *__find_locale __P ((int categories, __const char *name));
+extern locale *__new_locale __P ((locale *));
+extern locale *__localefile __P ((__const char *file));
+extern void __free_locale __P ((locale *));
+
+
+#endif /* localeinfo.h */
diff --git a/locale/setlocale.c b/locale/setlocale.c
new file mode 100644
index 0000000..784ccb1
--- /dev/null
+++ b/locale/setlocale.c
@@ -0,0 +1,45 @@
+/* Copyright (C) 1991, 1992 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
+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. */
+
+#include <ansidecl.h>
+#include <localeinfo.h>
+#include <errno.h>
+#include <locale.h>
+#include <string.h>
+
+
+/* Switch to the locale called NAME in CATEGORY.
+ Return a string describing the locale. This string can
+ be used as the NAME argument in a later call.
+ If NAME is NULL, don't switch locales, but return the current one.
+ If NAME is "", switch to a locale based on the environment variables,
+ as per POSIX. Return NULL on error. */
+char *
+DEFUN(setlocale, (category, name), int category AND CONST char *name)
+{
+ /* Braindead implementation until I finish the fancy one. */
+
+ if (name == NULL || name[0] == '\0')
+ return (char *) "C";
+
+ if (!strcmp(name, "C") || !strcmp(name, "POSIX"))
+ return (char *) name;
+
+ errno = EINVAL;
+ return NULL;
+}