- Add crt headers from trunk 30714, so that the branch could be built with RosBE...
authorAleksey Bragin <aleksey@reactos.org>
Sat, 24 Nov 2007 10:34:29 +0000 (10:34 +0000)
committerAleksey Bragin <aleksey@reactos.org>
Sat, 24 Nov 2007 10:34:29 +0000 (10:34 +0000)
svn path=/branches/olpc/; revision=30715

54 files changed:
include/crt/_mingw.h [new file with mode: 0644]
include/crt/assert.h [new file with mode: 0644]
include/crt/complex.h [new file with mode: 0644]
include/crt/conio.h [new file with mode: 0644]
include/crt/ctype.h [new file with mode: 0644]
include/crt/direct.h [new file with mode: 0644]
include/crt/dirent.h [new file with mode: 0644]
include/crt/dos.h [new file with mode: 0644]
include/crt/errno.h [new file with mode: 0644]
include/crt/excpt.h
include/crt/fcntl.h [new file with mode: 0644]
include/crt/fenv.h [new file with mode: 0644]
include/crt/float.h [new file with mode: 0644]
include/crt/getopt.h [new file with mode: 0644]
include/crt/inttypes.h [new file with mode: 0644]
include/crt/io.h [new file with mode: 0644]
include/crt/libgen.h [new file with mode: 0644]
include/crt/limits.h [new file with mode: 0644]
include/crt/locale.h [new file with mode: 0644]
include/crt/malloc.h [new file with mode: 0644]
include/crt/math.h [new file with mode: 0644]
include/crt/mbctype.h [new file with mode: 0644]
include/crt/mbstring.h [new file with mode: 0644]
include/crt/mem.h [new file with mode: 0644]
include/crt/memory.h [new file with mode: 0644]
include/crt/mingw32/float.h [new file with mode: 0644]
include/crt/mingw32/stdarg.h [new file with mode: 0644]
include/crt/mingw32/stdbool.h [new file with mode: 0644]
include/crt/mingw32/stddef.h [new file with mode: 0644]
include/crt/process.h [new file with mode: 0644]
include/crt/search.h [new file with mode: 0644]
include/crt/setjmp.h [new file with mode: 0644]
include/crt/share.h [new file with mode: 0644]
include/crt/signal.h [new file with mode: 0644]
include/crt/stdint.h [new file with mode: 0644]
include/crt/stdio.h [new file with mode: 0644]
include/crt/stdlib.h [new file with mode: 0644]
include/crt/string.h [new file with mode: 0644]
include/crt/strings.h [new file with mode: 0644]
include/crt/sys/fcntl.h [new file with mode: 0644]
include/crt/sys/file.h [new file with mode: 0644]
include/crt/sys/locking.h [new file with mode: 0644]
include/crt/sys/param.h [new file with mode: 0644]
include/crt/sys/stat.h [new file with mode: 0644]
include/crt/sys/time.h [new file with mode: 0644]
include/crt/sys/timeb.h [new file with mode: 0644]
include/crt/sys/types.h [new file with mode: 0644]
include/crt/sys/unistd.h [new file with mode: 0644]
include/crt/sys/utime.h [new file with mode: 0644]
include/crt/time.h [new file with mode: 0644]
include/crt/unistd.h [new file with mode: 0644]
include/crt/utime.h [new file with mode: 0644]
include/crt/wchar.h [new file with mode: 0644]
include/crt/wctype.h [new file with mode: 0644]

diff --git a/include/crt/_mingw.h b/include/crt/_mingw.h
new file mode 100644 (file)
index 0000000..9323d47
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+ * _mingw.h
+ *
+ * Mingw specific macros included by ALL include files.
+ *
+ * This file is part of the Mingw32 package.
+ *
+ * Contributors:
+ *  Created by Mumit Khan  <khan@xraylith.wisc.edu>
+ *
+ *  THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ *  This source code is offered for use in the public domain. You may
+ *  use, modify or distribute it freely.
+ *
+ *  This code is distributed in the hope that it will be useful but
+ *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ *  DISCLAIMED. This includes but is not limited to warranties of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __MINGW_H
+#define __MINGW_H
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+/* These are defined by the user (or the compiler)
+   to specify how identifiers are imported from a DLL.
+
+   __DECLSPEC_SUPPORTED    Defined if dllimport attribute is supported.
+   __MINGW_IMPORT          The attribute definition to specify imported
+                           variables/functions.
+   _CRTIMP                 As above.  For MS compatibility.
+   __MINGW32_VERSION       Runtime version.
+   __MINGW32_MAJOR_VERSION Runtime major version.
+   __MINGW32_MINOR_VERSION Runtime minor version.
+   __MINGW32_BUILD_DATE    Runtime build date.
+
+   Other macros:
+
+   __int64                 define to be long long. Using a typedef doesn't
+                           work for "unsigned __int64"
+
+   All headers should include this first, and then use __DECLSPEC_SUPPORTED
+   to choose between the old ``__imp__name'' style or __MINGW_IMPORT
+   style declarations.  */
+
+/* Try to avoid problems with outdated checks for GCC __attribute__ support.  */
+#undef __attribute__
+
+#ifndef __GNUC__
+# ifndef __MINGW_IMPORT
+#  define __MINGW_IMPORT  __declspec(dllimport)
+# endif
+# ifndef _CRTIMP
+#  define _CRTIMP  __declspec(dllimport)
+# endif
+# define __DECLSPEC_SUPPORTED
+# define __attribute__(x) /* nothing */
+#else /* __GNUC__ */
+# ifdef __declspec
+#  ifndef __MINGW_IMPORT
+   /* Note the extern. This is needed to work around GCC's
+      limitations in handling dllimport attribute.  */
+#   define __MINGW_IMPORT  extern __attribute__ ((__dllimport__))
+#  endif
+#  ifndef _CRTIMP
+#   ifdef __USE_CRTIMP
+#    define _CRTIMP  __attribute__ ((dllimport))
+#   else
+#    define _CRTIMP
+#   endif
+#  endif
+#  define __DECLSPEC_SUPPORTED
+# else /* __declspec */
+#  undef __DECLSPEC_SUPPORTED
+#  undef __MINGW_IMPORT
+#  ifndef _CRTIMP
+#   define _CRTIMP
+#  endif
+# endif /* __declspec */
+# ifndef __cdecl
+#  define __cdecl __attribute__ ((__cdecl__))
+# endif
+# ifndef __stdcall
+#  define __stdcall __attribute__ ((__stdcall__))
+# endif
+# ifndef __int64
+#  define __int64 long long
+# endif
+# ifndef __int32
+#  define __int32 long
+# endif
+# ifndef __int16
+#  define __int16 short
+# endif
+# ifndef __int8
+#  define __int8 char
+# endif
+# ifndef __small
+#  define __small char
+# endif
+# ifndef __hyper
+#  define __hyper long long
+# endif
+#endif /* __GNUC__ */
+
+#if defined (__GNUC__) && defined (__GNUC_MINOR__)
+#define __MINGW_GNUC_PREREQ(major, minor) \
+  (__GNUC__ > (major) \
+   || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))
+#else
+#define __MINGW_GNUC_PREREQ(major, minor)  0
+#endif
+
+#ifdef __cplusplus
+# define __CRT_INLINE inline
+#else
+# if __GNUC_STDC_INLINE__
+#  define __CRT_INLINE extern inline __attribute__((__gnu_inline__))
+# else
+#  define __CRT_INLINE extern __inline__
+# endif
+#endif
+
+#ifdef __cplusplus
+# define __UNUSED_PARAM(x)
+#else
+# ifdef __GNUC__
+#  define __UNUSED_PARAM(x) x __attribute__ ((__unused__))
+# else
+#  define __UNUSED_PARAM(x) x
+# endif
+#endif
+
+#ifdef __GNUC__
+#define __MINGW_ATTRIB_NORETURN __attribute__ ((__noreturn__))
+#define __MINGW_ATTRIB_CONST __attribute__ ((__const__))
+#else
+#define __MINGW_ATTRIB_NORETURN
+#define __MINGW_ATTRIB_CONST
+#endif
+
+#if __MINGW_GNUC_PREREQ (3, 0)
+#define __MINGW_ATTRIB_MALLOC __attribute__ ((__malloc__))
+#define __MINGW_ATTRIB_PURE __attribute__ ((__pure__))
+#else
+#define __MINGW_ATTRIB_MALLOC
+#define __MINGW_ATTRIB_PURE
+#endif
+
+/* Attribute `nonnull' was valid as of gcc 3.3.  We don't use GCC's
+   variadiac macro facility, because variadic macros cause syntax
+   errors with  --traditional-cpp.  */
+#if  __MINGW_GNUC_PREREQ (3, 3)
+#define __MINGW_ATTRIB_NONNULL(arg) __attribute__ ((__nonnull__ (arg)))
+#else
+#define __MINGW_ATTRIB_NONNULL(arg)
+#endif /* GNUC >= 3.3 */
+
+#if  __MINGW_GNUC_PREREQ (3, 1)
+#define __MINGW_ATTRIB_DEPRECATED __attribute__ ((__deprecated__))
+#else
+#define __MINGW_ATTRIB_DEPRECATED
+#endif /* GNUC >= 3.1 */
+#if  __MINGW_GNUC_PREREQ (3, 3)
+#define __MINGW_NOTHROW __attribute__ ((__nothrow__))
+#else
+#define __MINGW_NOTHROW
+#endif /* GNUC >= 3.3 */
+
+#ifndef __MSVCRT_VERSION__
+/*  High byte is the major version, low byte is the minor. */
+# define __MSVCRT_VERSION__ 0x0600
+#endif
+
+#define __MINGW32_VERSION 3.13
+#define __MINGW32_MAJOR_VERSION 3
+#define __MINGW32_MINOR_VERSION 13
+
+#endif /* __MINGW_H */
diff --git a/include/crt/assert.h b/include/crt/assert.h
new file mode 100644 (file)
index 0000000..1ff6690
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * assert.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Define the assert macro for debug output.
+ *
+ */
+
+/* We should be able to include this file multiple times to allow the assert
+   macro to be enabled/disabled for different parts of code.  So don't add a
+   header guard.  */
+
+#ifndef RC_INVOKED
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#undef assert
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef NDEBUG
+/*
+ * If not debugging, assert does nothing.
+ */
+#define assert(x)      ((void)0)
+
+#else /* debugging enabled */
+
+/*
+ * CRTDLL nicely supplies a function which does the actual output and
+ * call to abort.
+ */
+_CRTIMP void __cdecl __MINGW_NOTHROW _assert (const char*, const char*, int) __MINGW_ATTRIB_NORETURN;
+
+/*
+ * Definition of the assert macro.
+ */
+#define assert(e)       ((e) ? (void)0 : _assert(#e, __FILE__, __LINE__))
+
+#endif /* NDEBUG */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
diff --git a/include/crt/complex.h b/include/crt/complex.h
new file mode 100644 (file)
index 0000000..2fd73a1
--- /dev/null
@@ -0,0 +1,205 @@
+/*
+ * complex.h
+ *
+ * This file is part of the Mingw32 package.
+ *
+ * Contributors:
+ *  Created by Danny Smith <dannysmith@users.sourceforge.net>
+ *
+ *  THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ *  This source code is offered for use in the public domain. You may
+ *  use, modify or distribute it freely.
+ *
+ *  This code is distributed in the hope that it will be useful but
+ *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ *  DISCLAIMED. This includes but is not limited to warranties of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef _COMPLEX_H_
+#define _COMPLEX_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
+     || !defined __STRICT_ANSI__ 
+
+/* These macros are specified by C99 standard */
+
+#ifndef __cplusplus
+#define complex _Complex
+#endif
+
+#define _Complex_I  (0.0F +  1.0iF)
+
+/* GCC doesn't support _Imaginary type yet, so we don't
+   define _Imaginary_I */
+
+#define I _Complex_I
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+#ifndef RC_INVOKED
+
+double __MINGW_ATTRIB_CONST creal (double _Complex);
+double __MINGW_ATTRIB_CONST cimag (double _Complex);
+double __MINGW_ATTRIB_CONST carg (double _Complex);
+double __MINGW_ATTRIB_CONST cabs (double _Complex);
+double _Complex __MINGW_ATTRIB_CONST conj (double _Complex);
+double _Complex  cacos (double _Complex);
+double _Complex  casin (double _Complex);
+double _Complex  catan (double _Complex);
+double _Complex  ccos (double _Complex);
+double _Complex  csin (double _Complex);
+double _Complex  ctan (double _Complex);
+double _Complex  cacosh (double _Complex);
+double _Complex  casinh (double _Complex);
+double _Complex  catanh (double _Complex);
+double _Complex  ccosh (double _Complex);
+double _Complex  csinh (double _Complex);
+double _Complex  ctanh (double _Complex);
+double _Complex  cexp (double _Complex);
+double _Complex  clog (double _Complex);
+double _Complex  cpow (double _Complex, double _Complex);
+double _Complex  csqrt (double _Complex);
+double _Complex __MINGW_ATTRIB_CONST cproj (double _Complex);
+
+float __MINGW_ATTRIB_CONST crealf (float _Complex);
+float __MINGW_ATTRIB_CONST cimagf (float _Complex);
+float __MINGW_ATTRIB_CONST cargf (float _Complex);
+float __MINGW_ATTRIB_CONST cabsf (float _Complex);
+float _Complex __MINGW_ATTRIB_CONST conjf (float _Complex);
+float _Complex  cacosf (float _Complex);
+float _Complex  casinf (float _Complex);
+float _Complex  catanf (float _Complex);
+float _Complex  ccosf (float _Complex);
+float _Complex  csinf (float _Complex);
+float _Complex  ctanf (float _Complex);
+float _Complex  cacoshf (float _Complex);
+float _Complex  casinhf (float _Complex);
+float _Complex  catanhf (float _Complex);
+float _Complex  ccoshf (float _Complex);
+float _Complex  csinhf (float _Complex);
+float _Complex  ctanhf (float _Complex);
+float _Complex  cexpf (float _Complex);
+float _Complex  clogf (float _Complex);
+float _Complex  cpowf (float _Complex, float _Complex);
+float _Complex  csqrtf (float _Complex);
+float _Complex __MINGW_ATTRIB_CONST cprojf (float _Complex);
+
+long double __MINGW_ATTRIB_CONST creall (long double _Complex);
+long double __MINGW_ATTRIB_CONST cimagl (long double _Complex);
+long double __MINGW_ATTRIB_CONST cargl (long double _Complex);
+long double __MINGW_ATTRIB_CONST cabsl (long double _Complex);
+long double _Complex __MINGW_ATTRIB_CONST conjl (long double _Complex);
+long double _Complex  cacosl (long double _Complex);
+long double _Complex  casinl (long double _Complex);
+long double _Complex  catanl (long double _Complex);
+long double _Complex  ccosl (long double _Complex);
+long double _Complex  csinl (long double _Complex);
+long double _Complex  ctanl (long double _Complex);
+long double _Complex  cacoshl (long double _Complex);
+long double _Complex  casinhl (long double _Complex);
+long double _Complex  catanhl (long double _Complex);
+long double _Complex  ccoshl (long double _Complex);
+long double _Complex  csinhl (long double _Complex);
+long double _Complex  ctanhl (long double _Complex);
+long double _Complex  cexpl (long double _Complex);
+long double _Complex  clogl (long double _Complex);
+long double _Complex  cpowl (long double _Complex, long double _Complex);
+long double _Complex  csqrtl (long double _Complex);
+long double _Complex __MINGW_ATTRIB_CONST cprojl (long double _Complex);
+
+#ifdef __GNUC__
+
+/* double */
+__CRT_INLINE double __MINGW_ATTRIB_CONST creal (double _Complex _Z)
+{
+  return __real__ _Z;
+}
+
+__CRT_INLINE double __MINGW_ATTRIB_CONST cimag (double _Complex _Z)
+{
+  return __imag__ _Z;
+}
+
+__CRT_INLINE double _Complex __MINGW_ATTRIB_CONST conj (double _Complex _Z)
+{
+  return __extension__ ~_Z;
+}
+
+__CRT_INLINE  double __MINGW_ATTRIB_CONST carg (double _Complex _Z)
+{
+  double res;
+  __asm__  ("fpatan;"
+          : "=t" (res) : "0" (__real__ _Z), "u" (__imag__ _Z) : "st(1)");
+  return res;
+}
+
+
+/* float */
+__CRT_INLINE float __MINGW_ATTRIB_CONST crealf (float _Complex _Z)
+{
+  return __real__ _Z;
+}
+
+__CRT_INLINE float __MINGW_ATTRIB_CONST cimagf (float _Complex _Z)
+{
+  return __imag__ _Z;
+}
+
+__CRT_INLINE float _Complex __MINGW_ATTRIB_CONST conjf (float _Complex _Z)
+{
+  return __extension__ ~_Z;
+}
+
+__CRT_INLINE  float __MINGW_ATTRIB_CONST cargf (float _Complex _Z)
+{
+  float res;
+  __asm__  ("fpatan;"
+          : "=t" (res) : "0" (__real__ _Z), "u" (__imag__ _Z) : "st(1)");
+  return res;
+}
+
+/* long double */
+__CRT_INLINE long double __MINGW_ATTRIB_CONST creall (long double _Complex _Z)
+{
+  return __real__ _Z;
+}
+
+__CRT_INLINE long double __MINGW_ATTRIB_CONST cimagl (long double _Complex _Z)
+{
+  return __imag__ _Z;
+}
+
+__CRT_INLINE long double _Complex __MINGW_ATTRIB_CONST conjl (long double _Complex _Z)
+{
+  return __extension__ ~_Z;
+}
+
+__CRT_INLINE  long double __MINGW_ATTRIB_CONST cargl (long double _Complex _Z)
+{
+  long double res;
+  __asm__  ("fpatan;"
+          : "=t" (res) : "0" (__real__ _Z), "u" (__imag__ _Z) : "st(1)");
+  return res;
+}
+
+#endif /* __GNUC__ */
+
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif 
+
+#endif /* __STDC_VERSION__ >= 199901L */
+
+
+#endif /* _COMPLEX_H */
diff --git a/include/crt/conio.h b/include/crt/conio.h
new file mode 100644 (file)
index 0000000..8a821cb
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * conio.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Low level console I/O functions. Pretty please try to use the ANSI
+ * standard ones if you are writing new code.
+ *
+ */
+
+#ifndef        _CONIO_H_
+#define        _CONIO_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _cgets (char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _cprintf (const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _cputs (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _cscanf (char*, ...);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    _getch (void);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _getche (void);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _kbhit (void);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _putch (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _ungetch (int);
+
+
+#ifndef        _NO_OLDNAMES
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    getch (void);
+_CRTIMP int __cdecl __MINGW_NOTHROW    getche (void);
+_CRTIMP int __cdecl __MINGW_NOTHROW    kbhit (void);
+_CRTIMP int __cdecl __MINGW_NOTHROW    putch (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW    ungetch (int);
+
+#endif /* Not _NO_OLDNAMES */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _CONIO_H_ */
diff --git a/include/crt/ctype.h b/include/crt/ctype.h
new file mode 100644 (file)
index 0000000..a997504
--- /dev/null
@@ -0,0 +1,276 @@
+/* 
+ * ctype.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Functions for testing character types and converting characters.
+ *
+ */
+
+#ifndef _CTYPE_H_
+#define _CTYPE_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define        __need_wchar_t
+#define        __need_wint_t
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif /* Not RC_INVOKED */
+
+
+/*
+ * The following flags are used to tell iswctype and _isctype what character
+ * types you are looking for.
+ */
+#define        _UPPER          0x0001
+#define        _LOWER          0x0002
+#define        _DIGIT          0x0004
+#define        _SPACE          0x0008 /* HT  LF  VT  FF  CR  SP */
+#define        _PUNCT          0x0010
+#define        _CONTROL        0x0020
+/* _BLANK is set for SP and non-ASCII horizontal space chars (eg,
+   "no-break space", 0xA0, in CP1250) but not for HT.  */
+#define        _BLANK          0x0040 
+#define        _HEX            0x0080
+#define        _LEADBYTE       0x8000
+
+#define        _ALPHA          0x0103
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_CRTIMP int __cdecl __MINGW_NOTHROW isalnum(int);
+_CRTIMP int __cdecl __MINGW_NOTHROW isalpha(int);
+_CRTIMP int __cdecl __MINGW_NOTHROW iscntrl(int);
+_CRTIMP int __cdecl __MINGW_NOTHROW isdigit(int);
+_CRTIMP int __cdecl __MINGW_NOTHROW isgraph(int);
+_CRTIMP int __cdecl __MINGW_NOTHROW islower(int);
+_CRTIMP int __cdecl __MINGW_NOTHROW isprint(int);
+_CRTIMP int __cdecl __MINGW_NOTHROW ispunct(int);
+_CRTIMP int __cdecl __MINGW_NOTHROW isspace(int);
+_CRTIMP int __cdecl __MINGW_NOTHROW isupper(int);
+_CRTIMP int __cdecl __MINGW_NOTHROW isxdigit(int);
+
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
+     || !defined __STRICT_ANSI__
+int __cdecl __MINGW_NOTHROW isblank (int);
+#endif
+
+#ifndef __STRICT_ANSI__
+_CRTIMP int __cdecl __MINGW_NOTHROW _isctype (int, int);
+#endif
+
+/* These are the ANSI versions, with correct checking of argument */
+_CRTIMP int __cdecl __MINGW_NOTHROW tolower(int);
+_CRTIMP int __cdecl __MINGW_NOTHROW toupper(int);
+
+/*
+ * NOTE: The above are not old name type wrappers, but functions exported
+ * explicitly by MSVCRT/CRTDLL. However, underscored versions are also
+ * exported.
+ */
+#ifndef        __STRICT_ANSI__
+/*
+ *  These are the cheap non-std versions: The return values are undefined
+ *  if the argument is not ASCII char or is not of appropriate case
+ */ 
+_CRTIMP int __cdecl __MINGW_NOTHROW _tolower(int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _toupper(int);
+#endif
+
+/* Also defined in stdlib.h */
+#ifndef MB_CUR_MAX
+#ifdef __DECLSPEC_SUPPORTED
+# ifdef __MSVCRT__
+#  define MB_CUR_MAX __mb_cur_max
+   __MINGW_IMPORT int __mb_cur_max;
+# else /* not __MSVCRT */
+#  define MB_CUR_MAX __mb_cur_max_dll
+   __MINGW_IMPORT int __mb_cur_max_dll;
+# endif        /* not __MSVCRT */
+
+#else          /* ! __DECLSPEC_SUPPORTED */
+# ifdef __MSVCRT__
+   extern int* _imp____mbcur_max;
+#  define MB_CUR_MAX (*_imp____mb_cur_max)
+# else         /* not __MSVCRT */
+   extern int*  _imp____mbcur_max_dll;
+#  define MB_CUR_MAX (*_imp____mb_cur_max_dll)
+# endif        /* not __MSVCRT */
+#endif         /*  __DECLSPEC_SUPPORTED */
+#endif  /* MB_CUR_MAX */
+
+
+#ifdef __DECLSPEC_SUPPORTED
+# if __MSVCRT_VERSION__ <= 0x0700
+  __MINGW_IMPORT unsigned short _ctype[];
+# endif
+# ifdef __MSVCRT__
+  __MINGW_IMPORT unsigned short* _pctype;
+# else /* CRTDLL */
+  __MINGW_IMPORT unsigned short* _pctype_dll;
+# define  _pctype _pctype_dll
+# endif 
+
+#else          /*  __DECLSPEC_SUPPORTED */
+# if __MSVCRT_VERSION__ <= 0x0700
+  extern unsigned short** _imp___ctype;
+# define _ctype (*_imp___ctype)
+# endif
+# ifdef __MSVCRT__
+  extern unsigned short** _imp___pctype;
+# define _pctype (*_imp___pctype)
+# else /* CRTDLL */
+  extern unsigned short** _imp___pctype_dll;
+# define _pctype (*_imp___pctype_dll)
+# endif /* CRTDLL */
+#endif         /*  __DECLSPEC_SUPPORTED */
+
+/*
+ * Use inlines here rather than macros, because macros will upset 
+ * C++ usage (eg, ::isalnum), and so usually get undefined
+ *
+ * According to standard for SB chars, these function are defined only
+ * for input values representable by unsigned char or EOF.
+ * Thus, there is no range test.
+ * This reproduces behaviour of MSVCRT.dll lib implemention for SB chars.
+ *
+ * If no MB char support is needed, these can be simplified even
+ * more by command line define -DMB_CUR_MAX=1.  The compiler will then
+ * optimise away the constant condition.                       
+ */
+
+#if !(defined (__NO_INLINE__)  || defined (__NO_CTYPE_INLINES) \
+       || defined (__STRICT_ANSI__))
+
+/* use  simple lookup if SB locale, else  _isctype()  */
+#define __ISCTYPE(c, mask)  (MB_CUR_MAX == 1 ? (_pctype[c] & mask) : _isctype(c, mask))
+__CRT_INLINE int __cdecl __MINGW_NOTHROW isalnum(int c) {return __ISCTYPE(c, (_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW isalpha(int c) {return __ISCTYPE(c, _ALPHA);}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iscntrl(int c) {return __ISCTYPE(c, _CONTROL);}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW isdigit(int c) {return __ISCTYPE(c, _DIGIT);}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW isgraph(int c) {return __ISCTYPE(c, (_PUNCT|_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW islower(int c) {return __ISCTYPE(c, _LOWER);}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW isprint(int c) {return __ISCTYPE(c, (_BLANK|_PUNCT|_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW ispunct(int c) {return __ISCTYPE(c, _PUNCT);}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW isspace(int c) {return __ISCTYPE(c, _SPACE);}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW isupper(int c) {return __ISCTYPE(c, _UPPER);}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW isxdigit(int c) {return __ISCTYPE(c, _HEX);}
+
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
+     || !defined __STRICT_ANSI__
+__CRT_INLINE int __cdecl __MINGW_NOTHROW isblank (int c)
+  {return (__ISCTYPE(c, _BLANK) || c == '\t');}
+#endif
+
+/* these reproduce behaviour of lib underscored versions  */
+__CRT_INLINE int __cdecl __MINGW_NOTHROW _tolower(int c) {return ( c -'A'+'a');}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW _toupper(int c) {return ( c -'a'+'A');}
+
+/* TODO? Is it worth inlining ANSI tolower, toupper? Probably only
+   if we only want C-locale. */
+
+#endif /* _NO_CTYPE_INLINES */
+
+/* Wide character equivalents */
+
+#ifndef WEOF
+#define        WEOF    (wchar_t)(0xFFFF)
+#endif
+
+#ifndef _WCTYPE_T_DEFINED
+typedef wchar_t wctype_t;
+#define _WCTYPE_T_DEFINED
+#endif
+
+_CRTIMP int __cdecl __MINGW_NOTHROW iswalnum(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW iswalpha(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW iswascii(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW iswcntrl(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW iswctype(wint_t, wctype_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW is_wctype(wint_t, wctype_t);       /* Obsolete! */
+_CRTIMP int __cdecl __MINGW_NOTHROW iswdigit(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW iswgraph(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW iswlower(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW iswprint(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW iswpunct(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW iswspace(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW iswupper(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW iswxdigit(wint_t);
+
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
+     || !defined __STRICT_ANSI__ || defined __cplusplus
+int __cdecl __MINGW_NOTHROW iswblank (wint_t);
+#endif
+
+/* Older MS docs uses wchar_t for arg and return type, while newer
+   online MS docs say arg is wint_t and return is int.
+   ISO C uses wint_t for both.  */
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW towlower (wint_t);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW towupper (wint_t);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW isleadbyte (int);
+
+/* Also in wctype.h */
+#if ! (defined (__NO_INLINE__) || defined(__NO_CTYPE_INLINES) \
+       || defined(__WCTYPE_INLINES_DEFINED))
+#define __WCTYPE_INLINES_DEFINED
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswalnum(wint_t wc) {return (iswctype(wc,_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswalpha(wint_t wc) {return (iswctype(wc,_ALPHA));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswascii(wint_t wc) {return ((wc & ~0x7F) ==0);}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswcntrl(wint_t wc) {return (iswctype(wc,_CONTROL));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswdigit(wint_t wc) {return (iswctype(wc,_DIGIT));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswgraph(wint_t wc) {return (iswctype(wc,_PUNCT|_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswlower(wint_t wc) {return (iswctype(wc,_LOWER));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswprint(wint_t wc) {return (iswctype(wc,_BLANK|_PUNCT|_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswpunct(wint_t wc) {return (iswctype(wc,_PUNCT));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswspace(wint_t wc) {return (iswctype(wc,_SPACE));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswupper(wint_t wc) {return (iswctype(wc,_UPPER));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswxdigit(wint_t wc) {return (iswctype(wc,_HEX));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW isleadbyte(int c) {return (_pctype[(unsigned char)(c)] & _LEADBYTE);}
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
+     || !defined __STRICT_ANSI__ || defined __cplusplus
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswblank (wint_t wc)
+  {return (iswctype(wc,_BLANK) || wc == L'\t');}
+#endif
+
+#endif /* !(defined(__NO_CTYPE_INLINES) || defined(__WCTYPE_INLINES_DEFINED)) */
+
+#ifndef        __STRICT_ANSI__
+int __cdecl __MINGW_NOTHROW __isascii (int);
+int __cdecl __MINGW_NOTHROW __toascii (int);
+int __cdecl __MINGW_NOTHROW __iscsymf (int);           /* Valid first character in C symbol */
+int __cdecl __MINGW_NOTHROW __iscsym (int);            /* Valid character in C symbol (after first) */
+
+#if !(defined (__NO_INLINE__) || defined (__NO_CTYPE_INLINES))
+__CRT_INLINE int __cdecl __MINGW_NOTHROW __isascii(int c) {return ((c & ~0x7F) == 0);} 
+__CRT_INLINE int __cdecl __MINGW_NOTHROW __toascii(int c) {return (c & 0x7F);}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW __iscsymf(int c) {return (isalpha(c) || (c == '_'));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW __iscsym(int c)  {return  (isalnum(c) || (c == '_'));}
+#endif /* __NO_CTYPE_INLINES */
+
+#ifndef        _NO_OLDNAMES
+/* Not _CRTIMP */ 
+int __cdecl __MINGW_NOTHROW isascii (int);
+int __cdecl __MINGW_NOTHROW toascii (int);
+int __cdecl __MINGW_NOTHROW iscsymf (int);
+int __cdecl __MINGW_NOTHROW iscsym (int);
+#endif /* Not _NO_OLDNAMES */
+
+#endif /* Not __STRICT_ANSI__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _CTYPE_H_ */
+
+
diff --git a/include/crt/direct.h b/include/crt/direct.h
new file mode 100644 (file)
index 0000000..86cd042
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * direct.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Functions for manipulating paths and directories (included from io.h)
+ * plus functions for setting the current drive.
+ *
+ */
+#ifndef        _DIRECT_H_
+#define        _DIRECT_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define __need_wchar_t
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif /* Not RC_INVOKED */
+
+#include <io.h>
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _DISKFREE_T_DEFINED
+/* needed by _getdiskfree (also in dos.h) */
+struct _diskfree_t {
+       unsigned total_clusters;
+       unsigned avail_clusters;
+       unsigned sectors_per_cluster;
+       unsigned bytes_per_sector;
+};
+#define _DISKFREE_T_DEFINED
+#endif
+
+/*
+ * You really shouldn't be using these. Use the Win32 API functions instead.
+ * However, it does make it easier to port older code.
+ */
+_CRTIMP int __cdecl __MINGW_NOTHROW _getdrive (void);
+_CRTIMP unsigned long __cdecl __MINGW_NOTHROW _getdrives(void);
+_CRTIMP int __cdecl __MINGW_NOTHROW _chdrive (int);
+_CRTIMP char* __cdecl __MINGW_NOTHROW _getdcwd (int, char*, int);
+_CRTIMP unsigned __cdecl __MINGW_NOTHROW _getdiskfree (unsigned, struct _diskfree_t *);
+
+#ifndef        _NO_OLDNAMES
+# define diskfree_t _diskfree_t
+#endif
+
+#ifndef _WDIRECT_DEFINED
+/* wide character versions. Also in wchar.h */
+#ifdef __MSVCRT__
+_CRTIMP int __cdecl __MINGW_NOTHROW _wchdir(const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wgetcwd(wchar_t*, int);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wgetdcwd(int, wchar_t*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wmkdir(const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wrmdir(const wchar_t*);
+#endif /* __MSVCRT__ */
+#define _WDIRECT_DEFINED
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _DIRECT_H_ */
diff --git a/include/crt/dirent.h b/include/crt/dirent.h
new file mode 100644 (file)
index 0000000..e2a6689
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * DIRENT.H (formerly DIRLIB.H)
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ */
+#ifndef _DIRENT_H_
+#define _DIRENT_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#include <io.h>
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct dirent
+{
+       long            d_ino;          /* Always zero. */
+       unsigned short  d_reclen;       /* Always zero. */
+       unsigned short  d_namlen;       /* Length of name in d_name. */
+       char            d_name[FILENAME_MAX]; /* File name. */
+};
+
+/*
+ * This is an internal data structure. Good programmers will not use it
+ * except as an argument to one of the functions below.
+ * dd_stat field is now int (was short in older versions).
+ */
+typedef struct
+{
+       /* disk transfer area for this dir */
+       struct _finddata_t      dd_dta;
+
+       /* dirent struct to return from dir (NOTE: this makes this thread
+        * safe as long as only one thread uses a particular DIR struct at
+        * a time) */
+       struct dirent           dd_dir;
+
+       /* _findnext handle */
+       long                    dd_handle;
+
+       /*
+         * Status of search:
+        *   0 = not started yet (next entry to read is first entry)
+        *  -1 = off the end
+        *   positive = 0 based index of next entry
+        */
+       int                     dd_stat;
+
+       /* given path for dir with search pattern (struct is extended) */
+       char                    dd_name[1];
+} DIR;
+
+DIR* __cdecl __MINGW_NOTHROW opendir (const char*);
+struct dirent* __cdecl __MINGW_NOTHROW readdir (DIR*);
+int __cdecl __MINGW_NOTHROW closedir (DIR*);
+void __cdecl __MINGW_NOTHROW rewinddir (DIR*);
+long __cdecl __MINGW_NOTHROW telldir (DIR*);
+void __cdecl __MINGW_NOTHROW seekdir (DIR*, long);
+
+
+/* wide char versions */
+
+struct _wdirent
+{
+       long            d_ino;          /* Always zero. */
+       unsigned short  d_reclen;       /* Always zero. */
+       unsigned short  d_namlen;       /* Length of name in d_name. */
+       wchar_t         d_name[FILENAME_MAX]; /* File name. */
+};
+
+/*
+ * This is an internal data structure. Good programmers will not use it
+ * except as an argument to one of the functions below.
+ */
+typedef struct
+{
+       /* disk transfer area for this dir */
+       struct _wfinddata_t     dd_dta;
+
+       /* dirent struct to return from dir (NOTE: this makes this thread
+        * safe as long as only one thread uses a particular DIR struct at
+        * a time) */
+       struct _wdirent         dd_dir;
+
+       /* _findnext handle */
+       long                    dd_handle;
+
+       /*
+         * Status of search:
+        *   0 = not started yet (next entry to read is first entry)
+        *  -1 = off the end
+        *   positive = 0 based index of next entry
+        */
+       int                     dd_stat;
+
+       /* given path for dir with search pattern (struct is extended) */
+       wchar_t                 dd_name[1];
+} _WDIR;
+
+
+
+_WDIR* __cdecl __MINGW_NOTHROW _wopendir (const wchar_t*);
+struct _wdirent*  __cdecl __MINGW_NOTHROW _wreaddir (_WDIR*);
+int __cdecl __MINGW_NOTHROW _wclosedir (_WDIR*);
+void __cdecl __MINGW_NOTHROW _wrewinddir (_WDIR*);
+long __cdecl __MINGW_NOTHROW _wtelldir (_WDIR*);
+void __cdecl __MINGW_NOTHROW _wseekdir (_WDIR*, long);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _DIRENT_H_ */
diff --git a/include/crt/dos.h b/include/crt/dos.h
new file mode 100644 (file)
index 0000000..e6bf561
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * dos.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * DOS-specific functions and structures.
+ *
+ */
+
+#ifndef        _DOS_H_
+#define        _DOS_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define __need_wchar_t
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif /* Not RC_INVOKED */
+
+/* For DOS file attributes */
+#include <io.h>
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef __MSVCRT__ /* these are in CRTDLL, but not MSVCRT */
+#ifndef __DECLSPEC_SUPPORTED
+extern unsigned int *_imp___basemajor_dll;
+extern unsigned int *_imp___baseminor_dll;
+extern unsigned int *_imp___baseversion_dll;
+extern unsigned int *_imp___osmajor_dll;
+extern unsigned int *_imp___osminor_dll;
+extern unsigned int *_imp___osmode_dll;
+
+#define _basemajor (*_imp___basemajor_dll)
+#define _baseminor (*_imp___baseminor_dll)
+#define _baseversion (*_imp___baseversion_dll)
+#define _osmajor (*_imp___osmajor_dll)
+#define _osminor (*_imp___osminor_dll)
+#define _osmode (*_imp___osmode_dll)
+
+#else /* __DECLSPEC_SUPPORTED */
+
+__MINGW_IMPORT unsigned int _basemajor_dll;
+__MINGW_IMPORT unsigned int _baseminor_dll;
+__MINGW_IMPORT unsigned int _baseversion_dll;
+__MINGW_IMPORT unsigned int _osmajor_dll;
+__MINGW_IMPORT unsigned int _osminor_dll;
+__MINGW_IMPORT unsigned int _osmode_dll;
+
+#define _basemajor _basemajor_dll
+#define _baseminor _baseminor_dll
+#define _baseversion _baseversion_dll
+#define _osmajor _osmajor_dll
+#define _osminor _osminor_dll
+#define _osmode _osmode_dll
+
+#endif /* __DECLSPEC_SUPPORTED */
+#endif /* ! __MSVCRT__ */
+
+#ifndef _DISKFREE_T_DEFINED
+/* needed by _getdiskfree (also in direct.h) */
+struct _diskfree_t {
+       unsigned total_clusters;
+       unsigned avail_clusters;
+       unsigned sectors_per_cluster;
+       unsigned bytes_per_sector;
+};
+#define _DISKFREE_T_DEFINED
+#endif
+
+_CRTIMP unsigned __cdecl __MINGW_NOTHROW _getdiskfree (unsigned, struct _diskfree_t *);
+
+#ifndef        _NO_OLDNAMES
+# define diskfree_t _diskfree_t
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _DOS_H_ */
diff --git a/include/crt/errno.h b/include/crt/errno.h
new file mode 100644 (file)
index 0000000..e3690a7
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * errno.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Error numbers and access to error reporting.
+ *
+ */
+
+#ifndef _ERRNO_H_
+#define        _ERRNO_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+/*
+ * Error numbers.
+ * TODO: Can't be sure of some of these assignments, I guessed from the
+ * names given by strerror and the defines in the Cygnus errno.h. A lot
+ * of the names from the Cygnus errno.h are not represented, and a few
+ * of the descriptions returned by strerror do not obviously match
+ * their error naming.
+ */
+#define EPERM          1       /* Operation not permitted */
+#define        ENOFILE         2       /* No such file or directory */
+#define        ENOENT          2
+#define        ESRCH           3       /* No such process */
+#define        EINTR           4       /* Interrupted function call */
+#define        EIO             5       /* Input/output error */
+#define        ENXIO           6       /* No such device or address */
+#define        E2BIG           7       /* Arg list too long */
+#define        ENOEXEC         8       /* Exec format error */
+#define        EBADF           9       /* Bad file descriptor */
+#define        ECHILD          10      /* No child processes */
+#define        EAGAIN          11      /* Resource temporarily unavailable */
+#define        ENOMEM          12      /* Not enough space */
+#define        EACCES          13      /* Permission denied */
+#define        EFAULT          14      /* Bad address */
+/* 15 - Unknown Error */
+#define        EBUSY           16      /* strerror reports "Resource device" */
+#define        EEXIST          17      /* File exists */
+#define        EXDEV           18      /* Improper link (cross-device link?) */
+#define        ENODEV          19      /* No such device */
+#define        ENOTDIR         20      /* Not a directory */
+#define        EISDIR          21      /* Is a directory */
+#define        EINVAL          22      /* Invalid argument */
+#define        ENFILE          23      /* Too many open files in system */
+#define        EMFILE          24      /* Too many open files */
+#define        ENOTTY          25      /* Inappropriate I/O control operation */
+/* 26 - Unknown Error */
+#define        EFBIG           27      /* File too large */
+#define        ENOSPC          28      /* No space left on device */
+#define        ESPIPE          29      /* Invalid seek (seek on a pipe?) */
+#define        EROFS           30      /* Read-only file system */
+#define        EMLINK          31      /* Too many links */
+#define        EPIPE           32      /* Broken pipe */
+#define        EDOM            33      /* Domain error (math functions) */
+#define        ERANGE          34      /* Result too large (possibly too small) */
+/* 35 - Unknown Error */
+#define        EDEADLOCK       36      /* Resource deadlock avoided (non-Cyg) */
+#define        EDEADLK         36
+/* 37 - Unknown Error */
+#define        ENAMETOOLONG    38      /* Filename too long (91 in Cyg?) */
+#define        ENOLCK          39      /* No locks available (46 in Cyg?) */
+#define        ENOSYS          40      /* Function not implemented (88 in Cyg?) */
+#define        ENOTEMPTY       41      /* Directory not empty (90 in Cyg?) */
+#define        EILSEQ          42      /* Illegal byte sequence */
+
+/*
+ * NOTE: ENAMETOOLONG and ENOTEMPTY conflict with definitions in the
+ *       sockets.h header provided with windows32api-0.1.2.
+ *       You should go and put an #if 0 ... #endif around the whole block
+ *       of errors (look at the comment above them).
+ */
+
+#ifndef        RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Definitions of errno. For _doserrno, sys_nerr and * sys_errlist, see
+ * stdlib.h.
+ */
+#ifdef _UWIN
+#undef errno
+extern int errno;
+#else
+_CRTIMP int* __cdecl __MINGW_NOTHROW _errno(void);
+#define        errno           (*_errno())
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _ERRNO_H_ */
index 30ba114..6be9b85 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
  * excpt.h
  * This file has no copyright assigned and is placed in the Public Domain.
  * This file is a part of the mingw-runtime package.
@@ -54,13 +54,22 @@ extern "C" {
 
 /*
  * The type of function that is expected as an exception handler to be
- * installed with _try1.
+ * installed with __try1.
  */
 struct _CONTEXT;
 struct _EXCEPTION_RECORD;
 typedef EXCEPTION_DISPOSITION (*PEXCEPTION_HANDLER)
                (struct _EXCEPTION_RECORD*, void*, struct _CONTEXT*, void*);
 
+/*
+ * This is not entirely necessary, but it is the structure installed by
+ * the __try1 primitive below.
+ */
+typedef struct _EXCEPTION_REGISTRATION
+{
+       struct _EXCEPTION_REGISTRATION* prev;
+       PEXCEPTION_HANDLER              handler;
+} EXCEPTION_REGISTRATION, *PEXCEPTION_REGISTRATION;
 
 /*
  * A macro which installs the supplied exception handler.
@@ -81,7 +90,7 @@ typedef EXCEPTION_DISPOSITION (*PEXCEPTION_HANDLER)
  * then add 8 to the stack pointer to get rid of the space we
  * used when we pushed on our new reg. struct above. Notice that
  * the stack must be in the exact state at this point that it was
- * after we did _try1 or this will smash things.
+ * after we did __try1 or this will smash things.
  */
 #define        __except1       \
        __asm__ ("movl (%%esp),%%eax;movl %%eax,%%fs:0;addl $8,%%esp;" \
diff --git a/include/crt/fcntl.h b/include/crt/fcntl.h
new file mode 100644 (file)
index 0000000..9bff935
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * fcntl.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Access constants for _open. Note that the permissions constants are
+ * in sys/stat.h (ick).
+ *
+ */
+#ifndef _FCNTL_H_
+#define _FCNTL_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+/*
+ * It appears that fcntl.h should include io.h for compatibility...
+ */
+#include <io.h>
+
+/* Specifiy one of these flags to define the access mode. */
+#define        _O_RDONLY       0
+#define _O_WRONLY      1
+#define _O_RDWR                2
+
+/* Mask for access mode bits in the _open flags. */
+#define _O_ACCMODE     (_O_RDONLY|_O_WRONLY|_O_RDWR)
+
+#define        _O_APPEND       0x0008  /* Writes will add to the end of the file. */
+
+#define        _O_RANDOM       0x0010
+#define        _O_SEQUENTIAL   0x0020
+#define        _O_TEMPORARY    0x0040  /* Make the file dissappear after closing.
+                                * WARNING: Even if not created by _open! */
+#define        _O_NOINHERIT    0x0080
+
+#define        _O_CREAT        0x0100  /* Create the file if it does not exist. */
+#define        _O_TRUNC        0x0200  /* Truncate the file if it does exist. */
+#define        _O_EXCL         0x0400  /* Open only if the file does not exist. */
+
+#define _O_SHORT_LIVED  0x1000
+
+/* NOTE: Text is the default even if the given _O_TEXT bit is not on. */
+#define        _O_TEXT         0x4000  /* CR-LF in file becomes LF in memory. */
+#define        _O_BINARY       0x8000  /* Input and output is not translated. */
+#define        _O_RAW          _O_BINARY
+
+#if (__MSVCRT_VERSION__ >= 0x0800)
+#define _O_WTEXT       0x10000
+#define _O_U16TEXT     0x20000
+#define _O_U8TEXT      0x40000
+#endif
+
+#ifndef        _NO_OLDNAMES
+
+/* POSIX/Non-ANSI names for increased portability */
+#define        O_RDONLY        _O_RDONLY
+#define O_WRONLY       _O_WRONLY
+#define O_RDWR         _O_RDWR
+#define O_ACCMODE      _O_ACCMODE
+#define        O_APPEND        _O_APPEND
+#define        O_CREAT         _O_CREAT
+#define        O_TRUNC         _O_TRUNC
+#define        O_EXCL          _O_EXCL
+#define        O_TEXT          _O_TEXT
+#define        O_BINARY        _O_BINARY
+#define        O_TEMPORARY     _O_TEMPORARY
+#define O_NOINHERIT    _O_NOINHERIT
+#define O_SEQUENTIAL   _O_SEQUENTIAL
+#define        O_RANDOM        _O_RANDOM
+
+#endif /* Not _NO_OLDNAMES */
+
+#endif /* Not _FCNTL_H_ */
diff --git a/include/crt/fenv.h b/include/crt/fenv.h
new file mode 100644 (file)
index 0000000..ddae892
--- /dev/null
@@ -0,0 +1,107 @@
+#ifndef _FENV_H_
+#define _FENV_H_
+
+#include <_mingw.h>
+
+/* FPU status word exception flags */
+#define FE_INVALID     0x01
+#define FE_DENORMAL    0x02
+#define FE_DIVBYZERO   0x04
+#define FE_OVERFLOW    0x08
+#define FE_UNDERFLOW   0x10
+#define FE_INEXACT     0x20
+#define FE_ALL_EXCEPT (FE_INVALID | FE_DENORMAL | FE_DIVBYZERO \
+                      | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)
+
+/* FPU control word rounding flags */
+#define FE_TONEAREST   0x0000
+#define FE_DOWNWARD    0x0400
+#define FE_UPWARD      0x0800
+#define FE_TOWARDZERO  0x0c00
+
+/* The MXCSR exception flags are the same as the
+   FE flags. */
+#define __MXCSR_EXCEPT_FLAG_SHIFT 0
+
+/* How much to shift FE status word exception flags
+   to get the MXCSR exeptions masks,  */
+#define __MXCSR_EXCEPT_MASK_SHIFT 7
+
+/* How much to shift FE control word rounding flags
+   to get MXCSR rounding flags,  */
+#define __MXCSR_ROUND_FLAG_SHIFT 3
+
+#ifndef RC_INVOKED
+/*
+  For now, support only for the basic abstraction of flags that are
+  either set or clear. fexcept_t could be  structure that holds more
+  info about the fp environment.
+*/
+typedef unsigned short fexcept_t;
+
+/* This 32-byte struct represents the entire floating point
+   environment as stored by fnstenv or fstenv, augmented by
+   the  contents of the MXCSR register, as stored by stmxcsr
+   (if CPU supports it). */
+typedef struct
+{
+  unsigned short __control_word;
+  unsigned short __unused0;
+  unsigned short __status_word;
+  unsigned short __unused1;
+  unsigned short __tag_word;
+  unsigned short __unused2;  
+  unsigned int  __ip_offset;    /* instruction pointer offset */
+  unsigned short __ip_selector;  
+  unsigned short __opcode;
+  unsigned int  __data_offset;
+  unsigned short __data_selector;
+  unsigned short  __unused3;
+  unsigned int __mxcsr; /* contents of the MXCSR register  */
+} fenv_t;
+
+
+/*The C99 standard (7.6.9) allows us to define implementation-specific macros for
+  different fp environments */
+  
+/* The default Intel x87 floating point environment (64-bit mantissa) */
+#define FE_PC64_ENV ((const fenv_t *)-1)
+
+/* The floating point environment set by MSVCRT _fpreset (53-bit mantissa) */
+#define FE_PC53_ENV ((const fenv_t *)-2)
+
+/* The FE_DFL_ENV macro is required by standard.
+  fesetenv will use the environment set at app startup.*/
+#define FE_DFL_ENV ((const fenv_t *) 0)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*TODO: Some of these could be inlined */
+/* 7.6.2 Exception */
+
+extern int __cdecl __MINGW_NOTHROW feclearexcept (int);
+extern int __cdecl __MINGW_NOTHROW fegetexceptflag (fexcept_t * flagp, int excepts);
+extern int __cdecl __MINGW_NOTHROW feraiseexcept (int excepts );
+extern int __cdecl __MINGW_NOTHROW fesetexceptflag (const fexcept_t *, int);
+extern int __cdecl __MINGW_NOTHROW fetestexcept (int excepts);
+
+/* 7.6.3 Rounding */
+
+extern int __cdecl __MINGW_NOTHROW fegetround (void);
+extern int __cdecl __MINGW_NOTHROW fesetround (int mode);
+
+/* 7.6.4 Environment */
+
+extern int __cdecl __MINGW_NOTHROW fegetenv (fenv_t * envp);
+extern int __cdecl __MINGW_NOTHROW fesetenv (const fenv_t * );
+extern int __cdecl __MINGW_NOTHROW feupdateenv (const fenv_t *);
+extern int __cdecl __MINGW_NOTHROW feholdexcept (fenv_t *);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* Not RC_INVOKED */
+
+#endif /* ndef _FENV_H */
diff --git a/include/crt/float.h b/include/crt/float.h
new file mode 100644 (file)
index 0000000..3b1ca89
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * float.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Constants related to floating point arithmetic.
+ *
+ * Also included here are some non-ANSI bits for accessing the floating
+ * point controller.
+ *
+ * NOTE: GCC provides float.h, but it doesn't include the non-standard
+ *       stuff for accessing the fp controller. We include_next the
+ *       GCC-supplied header and just define the MS-specific extensions
+ *       here.
+ *
+ */
+
+#include_next<float.h>
+
+#ifndef _MINGW_FLOAT_H_
+#define _MINGW_FLOAT_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+/*
+ * Functions and definitions for controlling the FPU.
+ */
+#ifndef        __STRICT_ANSI__
+
+/* TODO: These constants are only valid for x86 machines */
+
+/* Control word masks for unMask */
+#define        _MCW_EM         0x0008001F      /* Error masks */
+#define        _MCW_IC         0x00040000      /* Infinity */
+#define        _MCW_RC         0x00000300      /* Rounding */
+#define        _MCW_PC         0x00030000      /* Precision */
+
+/* Control word values for unNew (use with related unMask above) */
+#define        _EM_INVALID     0x00000010
+#define        _EM_DENORMAL    0x00080000
+#define        _EM_ZERODIVIDE  0x00000008
+#define        _EM_OVERFLOW    0x00000004
+#define        _EM_UNDERFLOW   0x00000002
+#define        _EM_INEXACT     0x00000001
+#define        _IC_AFFINE      0x00040000
+#define        _IC_PROJECTIVE  0x00000000
+#define        _RC_CHOP        0x00000300
+#define        _RC_UP          0x00000200
+#define        _RC_DOWN        0x00000100
+#define        _RC_NEAR        0x00000000
+#define        _PC_24          0x00020000
+#define        _PC_53          0x00010000
+#define        _PC_64          0x00000000
+
+/* These are also defined in Mingw math.h, needed to work around
+   GCC build issues.  */
+/* Return values for fpclass. */
+#ifndef __MINGW_FPCLASS_DEFINED
+#define __MINGW_FPCLASS_DEFINED 1
+#define        _FPCLASS_SNAN   0x0001  /* Signaling "Not a Number" */
+#define        _FPCLASS_QNAN   0x0002  /* Quiet "Not a Number" */
+#define        _FPCLASS_NINF   0x0004  /* Negative Infinity */
+#define        _FPCLASS_NN     0x0008  /* Negative Normal */
+#define        _FPCLASS_ND     0x0010  /* Negative Denormal */
+#define        _FPCLASS_NZ     0x0020  /* Negative Zero */
+#define        _FPCLASS_PZ     0x0040  /* Positive Zero */
+#define        _FPCLASS_PD     0x0080  /* Positive Denormal */
+#define        _FPCLASS_PN     0x0100  /* Positive Normal */
+#define        _FPCLASS_PINF   0x0200  /* Positive Infinity */
+#endif /* __MINGW_FPCLASS_DEFINED */
+
+/* invalid subconditions (_SW_INVALID also set) */
+#define _SW_UNEMULATED         0x0040  /* unemulated instruction */
+#define _SW_SQRTNEG            0x0080  /* square root of a neg number */
+#define _SW_STACKOVERFLOW      0x0200  /* FP stack overflow */
+#define _SW_STACKUNDERFLOW     0x0400  /* FP stack underflow */
+
+/*  Floating point error signals and return codes */
+#define _FPE_INVALID           0x81
+#define _FPE_DENORMAL          0x82
+#define _FPE_ZERODIVIDE                0x83
+#define _FPE_OVERFLOW          0x84
+#define _FPE_UNDERFLOW         0x85
+#define _FPE_INEXACT           0x86
+#define _FPE_UNEMULATED                0x87
+#define _FPE_SQRTNEG           0x88
+#define _FPE_STACKOVERFLOW     0x8a
+#define _FPE_STACKUNDERFLOW    0x8b
+#define _FPE_EXPLICITGEN       0x8c    /* raise( SIGFPE ); */
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Set the FPU control word as cw = (cw & ~unMask) | (unNew & unMask),
+ * i.e. change the bits in unMask to have the values they have in unNew,
+ * leaving other bits unchanged. */
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _controlfp (unsigned int unNew, unsigned int unMask);
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _control87 (unsigned int unNew, unsigned int unMask);
+
+
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _clearfp (void);  /* Clear the FPU status word */
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _statusfp (void); /* Report the FPU status word */
+#define                _clear87        _clearfp
+#define                _status87       _statusfp
+
+
+/*
+   MSVCRT.dll _fpreset initializes the control register to 0x27f,
+   the status register to zero and the tag word to 0FFFFh.
+   This differs from asm instruction finit/fninit which set control
+   word to 0x37f (64 bit mantissa precison rather than 53 bit).
+   By default, the mingw version of _fpreset sets fp control as
+   per fninit. To use the MSVCRT.dll _fpreset, include CRT_fp8.o when
+   building your application.
+*/
+void __cdecl __MINGW_NOTHROW _fpreset (void);
+void __cdecl __MINGW_NOTHROW fpreset (void);
+
+/* Global 'variable' for the current floating point error code. */
+_CRTIMP int * __cdecl __MINGW_NOTHROW __fpecode(void);
+#define        _fpecode        (*(__fpecode()))
+
+/*
+ * IEEE recommended functions.  MS puts them in float.h
+ * but they really belong in math.h.
+ */
+
+_CRTIMP double __cdecl __MINGW_NOTHROW _chgsign        (double);
+_CRTIMP double __cdecl __MINGW_NOTHROW _copysign (double, double);
+_CRTIMP double __cdecl __MINGW_NOTHROW _logb (double);
+_CRTIMP double __cdecl __MINGW_NOTHROW _nextafter (double, double);
+_CRTIMP double __cdecl __MINGW_NOTHROW _scalb (double, long);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _finite (double);
+_CRTIMP int __cdecl __MINGW_NOTHROW _fpclass (double);
+_CRTIMP int __cdecl __MINGW_NOTHROW _isnan (double);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not __STRICT_ANSI__ */
+
+#endif /* _FLOAT_H_ */
+
+
diff --git a/include/crt/getopt.h b/include/crt/getopt.h
new file mode 100644 (file)
index 0000000..6b6f643
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 1987, 1993, 1994, 1996
+ *  The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *  This product includes software developed by the University of
+ *  California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef __GETOPT_H__
+#define __GETOPT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int   opterr;      /* if error message should be printed */
+extern int   optind;      /* index into parent argv vector */
+extern int   optopt;      /* character checked for validity */
+extern int   optreset;    /* reset getopt */
+extern char *optarg;      /* argument associated with option */
+
+int getopt (int, char * const *, const char *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __GETOPT_H__ */
+
+#ifndef __UNISTD_GETOPT__
+#ifndef __GETOPT_LONG_H__
+#define __GETOPT_LONG_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct option {
+       const char *name;
+       int  has_arg;
+       int *flag;
+       int val;
+};
+
+int getopt_long (int, char *const *, const char *, const struct option *, int *);
+#ifndef HAVE_DECL_GETOPT
+#define HAVE_DECL_GETOPT 1
+#endif
+
+#define no_argument             0
+#define required_argument       1
+#define optional_argument       2
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __GETOPT_LONG_H__ */
+#endif /* __UNISTD_GETOPT__ */
diff --git a/include/crt/inttypes.h b/include/crt/inttypes.h
new file mode 100644 (file)
index 0000000..0d42a07
--- /dev/null
@@ -0,0 +1,278 @@
+/* 7.8 Format conversion of integer types <inttypes.h> */
+
+#ifndef _INTTYPES_H_
+#define _INTTYPES_H_
+
+#include <_mingw.h>
+#include <stdint.h>
+#define __need_wchar_t
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C"     {
+#endif
+
+typedef struct {
+       intmax_t quot;
+       intmax_t rem;
+       } imaxdiv_t;
+
+#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
+
+/* 7.8.1 Macros for format specifiers
+ *
+ * MS runtime does not yet understand C9x standard "ll"
+ * length specifier. It appears to treat "ll" as "l".
+ * The non-standard I64 length specifier causes warning in GCC,
+ * but understood by MS runtime functions.
+ */
+
+/* fprintf macros for signed types */
+#define PRId8 "d"
+#define PRId16 "d"
+#define PRId32 "d"
+#define PRId64 "I64d"
+
+#define PRIdLEAST8 "d"
+#define PRIdLEAST16 "d"
+#define PRIdLEAST32 "d"
+#define PRIdLEAST64 "I64d"
+
+#define PRIdFAST8 "d"
+#define PRIdFAST16 "d"
+#define PRIdFAST32 "d"
+#define PRIdFAST64 "I64d"
+
+#define PRIdMAX "I64d"
+#define PRIdPTR "d"
+
+#define PRIi8 "i"
+#define PRIi16 "i"
+#define PRIi32 "i"
+#define PRIi64 "I64i"
+
+#define PRIiLEAST8 "i"
+#define PRIiLEAST16 "i"
+#define PRIiLEAST32 "i"
+#define PRIiLEAST64 "I64i"
+
+#define PRIiFAST8 "i"
+#define PRIiFAST16 "i"
+#define PRIiFAST32 "i"
+#define PRIiFAST64 "I64i"
+
+#define PRIiMAX "I64i"
+#define PRIiPTR "i"
+
+#define PRIo8 "o"
+#define PRIo16 "o"
+#define PRIo32 "o"
+#define PRIo64 "I64o"
+
+#define PRIoLEAST8 "o"
+#define PRIoLEAST16 "o"
+#define PRIoLEAST32 "o"
+#define PRIoLEAST64 "I64o"
+
+#define PRIoFAST8 "o"
+#define PRIoFAST16 "o"
+#define PRIoFAST32 "o"
+#define PRIoFAST64 "I64o"
+
+#define PRIoMAX "I64o"
+
+#define PRIoPTR "o"
+
+/* fprintf macros for unsigned types */
+#define PRIu8 "u"
+#define PRIu16 "u"
+#define PRIu32 "u"
+#define PRIu64 "I64u"
+
+
+#define PRIuLEAST8 "u"
+#define PRIuLEAST16 "u"
+#define PRIuLEAST32 "u"
+#define PRIuLEAST64 "I64u"
+
+#define PRIuFAST8 "u"
+#define PRIuFAST16 "u"
+#define PRIuFAST32 "u"
+#define PRIuFAST64 "I64u"
+
+#define PRIuMAX "I64u"
+#define PRIuPTR "u"
+
+#define PRIx8 "x"
+#define PRIx16 "x"
+#define PRIx32 "x"
+#define PRIx64 "I64x"
+
+#define PRIxLEAST8 "x"
+#define PRIxLEAST16 "x"
+#define PRIxLEAST32 "x"
+#define PRIxLEAST64 "I64x"
+
+#define PRIxFAST8 "x"
+#define PRIxFAST16 "x"
+#define PRIxFAST32 "x"
+#define PRIxFAST64 "I64x"
+
+#define PRIxMAX "I64x"
+#define PRIxPTR "x"
+
+#define PRIX8 "X"
+#define PRIX16 "X"
+#define PRIX32 "X"
+#define PRIX64 "I64X"
+
+#define PRIXLEAST8 "X"
+#define PRIXLEAST16 "X"
+#define PRIXLEAST32 "X"
+#define PRIXLEAST64 "I64X"
+
+#define PRIXFAST8 "X"
+#define PRIXFAST16 "X"
+#define PRIXFAST32 "X"
+#define PRIXFAST64 "I64X"
+
+#define PRIXMAX "I64X"
+#define PRIXPTR "X"
+
+/*
+ *   fscanf macros for signed int types
+ *   NOTE: if 32-bit int is used for int_fast8_t and int_fast16_t
+ *   (see stdint.h, 7.18.1.3), FAST8 and FAST16 should have
+ *   no length identifiers
+ */
+
+#define SCNd16 "hd"
+#define SCNd32 "d"
+#define SCNd64 "I64d"
+
+#define SCNdLEAST16 "hd"
+#define SCNdLEAST32 "d"
+#define SCNdLEAST64 "I64d"
+
+#define SCNdFAST16 "hd"
+#define SCNdFAST32 "d"
+#define SCNdFAST64 "I64d"
+
+#define SCNdMAX "I64d"
+#define SCNdPTR "d"
+
+#define SCNi16 "hi"
+#define SCNi32 "i"
+#define SCNi64 "I64i"
+
+#define SCNiLEAST16 "hi"
+#define SCNiLEAST32 "i"
+#define SCNiLEAST64 "I64i"
+
+#define SCNiFAST16 "hi"
+#define SCNiFAST32 "i"
+#define SCNiFAST64 "I64i"
+
+#define SCNiMAX "I64i"
+#define SCNiPTR "i"
+
+#define SCNo16 "ho"
+#define SCNo32 "o"
+#define SCNo64 "I64o"
+
+#define SCNoLEAST16 "ho"
+#define SCNoLEAST32 "o"
+#define SCNoLEAST64 "I64o"
+
+#define SCNoFAST16 "ho"
+#define SCNoFAST32 "o"
+#define SCNoFAST64 "I64o"
+
+#define SCNoMAX "I64o"
+#define SCNoPTR "o"
+
+#define SCNx16 "hx"
+#define SCNx32 "x"
+#define SCNx64 "I64x"
+
+#define SCNxLEAST16 "hx"
+#define SCNxLEAST32 "x"
+#define SCNxLEAST64 "I64x"
+
+#define SCNxFAST16 "hx"
+#define SCNxFAST32 "x"
+#define SCNxFAST64 "I64x"
+
+#define SCNxMAX "I64x"
+#define SCNxPTR "x"
+
+
+/* fscanf macros for unsigned int types */
+
+#define SCNu16 "hu"
+#define SCNu32 "u"
+#define SCNu64 "I64u"
+
+#define SCNuLEAST16 "hu"
+#define SCNuLEAST32 "u"
+#define SCNuLEAST64 "I64u"
+
+#define SCNuFAST16 "hu"
+#define SCNuFAST32 "u"
+#define SCNuFAST64 "I64u"
+
+#define SCNuMAX "I64u"
+#define SCNuPTR "u"
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+/*
+ * no length modifier for char types prior to C9x
+ * MS runtime  scanf appears to treat "hh" as "h"
+ */
+
+/* signed char */
+#define SCNd8 "hhd"
+#define SCNdLEAST8 "hhd"
+#define SCNdFAST8 "hhd"
+
+#define SCNi8 "hhi"
+#define SCNiLEAST8 "hhi"
+#define SCNiFAST8 "hhi"
+
+#define SCNo8 "hho"
+#define SCNoLEAST8 "hho"
+#define SCNoFAST8 "hho"
+
+#define SCNx8 "hhx"
+#define SCNxLEAST8 "hhx"
+#define SCNxFAST8 "hhx"
+
+/* unsigned char */
+#define SCNu8 "hhu"
+#define SCNuLEAST8 "hhu"
+#define SCNuFAST8 "hhu"
+#endif /* __STDC_VERSION__ >= 199901 */
+
+#endif /* !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) */
+
+__CRT_INLINE intmax_t __cdecl __MINGW_NOTHROW imaxabs (intmax_t j)
+       {return (j >= 0 ? j : -j);}
+imaxdiv_t __cdecl __MINGW_NOTHROW imaxdiv (intmax_t numer, intmax_t denom);
+
+/* 7.8.2 Conversion functions for greatest-width integer types */
+
+intmax_t __cdecl __MINGW_NOTHROW strtoimax (const char* __restrict__ nptr,
+                            char** __restrict__ endptr, int base);
+uintmax_t __cdecl __MINGW_NOTHROW strtoumax (const char* __restrict__ nptr,
+                            char** __restrict__ endptr, int base);
+
+intmax_t __cdecl __MINGW_NOTHROW wcstoimax (const wchar_t* __restrict__ nptr,
+                            wchar_t** __restrict__ endptr, int base);
+uintmax_t __cdecl __MINGW_NOTHROW wcstoumax (const wchar_t* __restrict__ nptr,
+                            wchar_t** __restrict__ endptr, int base);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ndef _INTTYPES_H */
diff --git a/include/crt/io.h b/include/crt/io.h
new file mode 100644 (file)
index 0000000..e49a6b7
--- /dev/null
@@ -0,0 +1,337 @@
+/* 
+ * io.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * System level I/O functions and types.
+ *
+ */
+#ifndef        _IO_H_
+#define        _IO_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+/* MSVC's io.h contains the stuff from dir.h, so I will too.
+ * NOTE: This also defines off_t, the file offset type, through
+ *       an inclusion of sys/types.h */
+
+#include <sys/types.h> /* To get time_t.  */
+
+/*
+ * Attributes of files as returned by _findfirst et al.
+ */
+#define        _A_NORMAL       0x00000000
+#define        _A_RDONLY       0x00000001
+#define        _A_HIDDEN       0x00000002
+#define        _A_SYSTEM       0x00000004
+#define        _A_VOLID        0x00000008
+#define        _A_SUBDIR       0x00000010
+#define        _A_ARCH         0x00000020
+
+
+#ifndef RC_INVOKED
+
+#ifndef _INTPTR_T_DEFINED
+#define _INTPTR_T_DEFINED
+#ifdef _WIN64
+  typedef __int64 intptr_t;
+#else
+  typedef int intptr_t;
+#endif
+#endif
+
+#ifndef        _FSIZE_T_DEFINED
+typedef        unsigned long   _fsize_t;
+#define _FSIZE_T_DEFINED
+#endif
+
+/*
+ * The maximum length of a file name. You should use GetVolumeInformation
+ * instead of this constant. But hey, this works.
+ * Also defined in stdio.h. 
+ */
+#ifndef FILENAME_MAX
+#define        FILENAME_MAX    (260)
+#endif
+
+/*
+ * The following structure is filled in by _findfirst or _findnext when
+ * they succeed in finding a match.
+ */
+struct _finddata_t
+{
+       unsigned        attrib;         /* Attributes, see constants above. */
+       time_t          time_create;
+       time_t          time_access;    /* always midnight local time */
+       time_t          time_write;
+       _fsize_t        size;
+       char            name[FILENAME_MAX];     /* may include spaces. */
+};
+
+struct _finddatai64_t {
+    unsigned    attrib;
+    time_t      time_create;
+    time_t      time_access;
+    time_t      time_write;
+    __int64     size;
+    char        name[FILENAME_MAX];
+};
+
+struct __finddata64_t {
+        unsigned    attrib;
+        __time64_t  time_create;    
+        __time64_t  time_access;    
+        __time64_t  time_write;
+        _fsize_t    size;
+         char       name[FILENAME_MAX];
+};
+
+#ifndef _WFINDDATA_T_DEFINED
+struct _wfinddata_t {
+       unsigned        attrib;
+       time_t          time_create;    /* -1 for FAT file systems */
+       time_t          time_access;    /* -1 for FAT file systems */
+       time_t          time_write;
+       _fsize_t        size;
+       wchar_t         name[FILENAME_MAX];     /* may include spaces. */
+};
+
+struct _wfinddatai64_t {
+    unsigned    attrib;
+    time_t      time_create;
+    time_t      time_access;
+    time_t      time_write;
+    __int64     size;
+    wchar_t     name[FILENAME_MAX];
+};
+
+struct __wfinddata64_t {
+        unsigned    attrib;
+        __time64_t  time_create;    
+        __time64_t  time_access;
+        __time64_t  time_write;
+        _fsize_t    size;
+        wchar_t     name[FILENAME_MAX];
+};
+
+#define _WFINDDATA_T_DEFINED
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Functions for searching for files. _findfirst returns -1 if no match
+ * is found. Otherwise it returns a handle to be used in _findnext and
+ * _findclose calls. _findnext also returns -1 if no match could be found,
+ * and 0 if a match was found. Call _findclose when you are finished.
+ */
+/*  FIXME: Should these all use intptr_t, as per recent MSDN docs?  */
+_CRTIMP long __cdecl __MINGW_NOTHROW _findfirst (const char*, struct _finddata_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _findnext (long, struct _finddata_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _findclose (long);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _chdir (const char*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW _getcwd (char*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _mkdir (const char*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW _mktemp (char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _rmdir (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _chmod (const char*, int);
+
+#ifdef __MSVCRT__
+_CRTIMP __int64 __cdecl __MINGW_NOTHROW _filelengthi64(int);
+_CRTIMP long __cdecl __MINGW_NOTHROW _findfirsti64(const char*, struct _finddatai64_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _findnexti64(long, struct _finddatai64_t*);
+_CRTIMP __int64 __cdecl __MINGW_NOTHROW _lseeki64(int, __int64, int);
+_CRTIMP __int64 __cdecl __MINGW_NOTHROW _telli64(int);
+/* These require newer versions of msvcrt.dll (6.1 or higher). */ 
+#if __MSVCRT_VERSION__ >= 0x0601
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _findfirst64(const char*, struct __finddata64_t*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _findnext64(intptr_t, struct __finddata64_t*); 
+#endif /* __MSVCRT_VERSION__ >= 0x0601 */
+
+#ifndef __NO_MINGW_LFS
+__CRT_INLINE off64_t lseek64 (int, off64_t, int);
+__CRT_INLINE off64_t lseek64 (int fd, off64_t offset, int whence) 
+{
+  return _lseeki64(fd, (__int64) offset, whence);
+}
+#endif
+
+#endif /* __MSVCRT__ */
+
+#ifndef _NO_OLDNAMES
+
+#ifndef _UWIN
+_CRTIMP int __cdecl __MINGW_NOTHROW chdir (const char*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW getcwd (char*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW mkdir (const char*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW mktemp (char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW rmdir (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW chmod (const char*, int);
+#endif /* _UWIN */
+
+#endif /* Not _NO_OLDNAMES */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+/* TODO: Maximum number of open handles has not been tested, I just set
+ * it the same as FOPEN_MAX. */
+#define        HANDLE_MAX      FOPEN_MAX
+
+/* Some defines for _access nAccessMode (MS doesn't define them, but
+ * it doesn't seem to hurt to add them). */
+#define        F_OK    0       /* Check for file existence */
+/* Well maybe it does hurt.  On newer versions of MSVCRT, an access mode
+   of 1 causes invalid parameter error. */   
+#define        X_OK    1       /* MS access() doesn't check for execute permission. */
+#define        W_OK    2       /* Check for write permission */
+#define        R_OK    4       /* Check for read permission */
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _access (const char*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _chsize (int, long);
+_CRTIMP int __cdecl __MINGW_NOTHROW _close (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _commit(int);
+
+/* NOTE: The only significant bit in unPermissions appears to be bit 7 (0x80),
+ *       the "owner write permission" bit (on FAT). */
+_CRTIMP int __cdecl __MINGW_NOTHROW _creat (const char*, int);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _dup (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _dup2 (int, int);
+_CRTIMP long __cdecl __MINGW_NOTHROW _filelength (int);
+_CRTIMP long __cdecl __MINGW_NOTHROW _get_osfhandle (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _isatty (int);
+
+/* In a very odd turn of events this function is excluded from those
+ * files which define _STREAM_COMPAT. This is required in order to
+ * build GNU libio because of a conflict with _eof in streambuf.h
+ * line 107. Actually I might just be able to change the name of
+ * the enum member in streambuf.h... we'll see. TODO */
+#ifndef        _STREAM_COMPAT
+_CRTIMP int __cdecl __MINGW_NOTHROW _eof (int);
+#endif
+
+/* LK_... locking commands defined in sys/locking.h. */
+_CRTIMP int __cdecl __MINGW_NOTHROW _locking (int, int, long);
+
+_CRTIMP long __cdecl __MINGW_NOTHROW _lseek (int, long, int);
+
+/* Optional third argument is unsigned unPermissions. */
+_CRTIMP int __cdecl __MINGW_NOTHROW _open (const char*, int, ...);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _open_osfhandle (long, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _pipe (int *, unsigned int, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _read (int, void*, unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _setmode (int, int);
+/* MS puts remove & rename (but not wide versions) in io.h as well
+   as in stdio.h. */
+_CRTIMP int __cdecl __MINGW_NOTHROW    remove (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    rename (const char*, const char*);
+
+/* SH_... flags for nShFlags defined in share.h
+ * Optional fourth argument is unsigned unPermissions */
+_CRTIMP int __cdecl __MINGW_NOTHROW _sopen (const char*, int, int, ...);
+
+_CRTIMP long __cdecl __MINGW_NOTHROW _tell (int);
+/* Should umask be in sys/stat.h and/or sys/types.h instead? */
+_CRTIMP int __cdecl __MINGW_NOTHROW _umask (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _unlink (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _write (int, const void*, unsigned int);
+
+/* Wide character versions. Also declared in wchar.h. */
+/* Not in crtdll.dll */
+#if !defined (_WIO_DEFINED)
+#if defined (__MSVCRT__)
+_CRTIMP int __cdecl __MINGW_NOTHROW _waccess(const wchar_t*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wchmod(const wchar_t*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wcreat(const wchar_t*, int);
+_CRTIMP long __cdecl __MINGW_NOTHROW _wfindfirst(const wchar_t*, struct _wfinddata_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wfindnext(long, struct _wfinddata_t *);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wunlink(const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wopen(const wchar_t*, int, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wsopen(const wchar_t*, int, int, ...);
+_CRTIMP wchar_t * __cdecl __MINGW_NOTHROW _wmktemp(wchar_t*);
+_CRTIMP long __cdecl __MINGW_NOTHROW _wfindfirsti64(const wchar_t*, struct _wfinddatai64_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wfindnexti64(long, struct _wfinddatai64_t*);
+#if __MSVCRT_VERSION__ >= 0x0601
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wfindfirst64(const wchar_t*, struct __wfinddata64_t*); 
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wfindnext64(intptr_t, struct __wfinddata64_t*);
+#endif
+#endif /* defined (__MSVCRT__) */
+#define _WIO_DEFINED
+#endif /* _WIO_DEFINED */
+
+#ifndef        _NO_OLDNAMES
+/*
+ * Non-underscored versions of non-ANSI functions to improve portability.
+ * These functions live in libmoldname.a.
+ */
+
+#ifndef _UWIN
+_CRTIMP int __cdecl __MINGW_NOTHROW access (const char*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW chsize (int, long );
+_CRTIMP int __cdecl __MINGW_NOTHROW close (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW creat (const char*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW dup (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW dup2 (int, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW eof (int);
+_CRTIMP long __cdecl __MINGW_NOTHROW filelength (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW isatty (int);
+_CRTIMP long __cdecl __MINGW_NOTHROW lseek (int, long, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW open (const char*, int, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW read (int, void*, unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW setmode (int, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW sopen (const char*, int, int, ...);
+_CRTIMP long __cdecl __MINGW_NOTHROW tell (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW umask (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW unlink (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW write (int, const void*, unsigned int);
+#endif /* _UWIN */
+
+#ifdef __USE_MINGW_ACCESS
+/*  Old versions of MSVCRT access() just ignored X_OK, while the version
+    shipped with Vista, returns an error code.  This will restore the
+    old behaviour  */
+static inline int __mingw_access (const char* __fname, int __mode)
+  { return  _access (__fname, __mode & ~X_OK); }
+#define access(__f,__m)  __mingw_access (__f, __m)
+#endif
+
+/* Wide character versions. Also declared in wchar.h. */
+/* Where do these live? Not in libmoldname.a nor in libmsvcrt.a */
+#if 0
+int            waccess(const wchar_t *, int);
+int            wchmod(const wchar_t *, int);
+int            wcreat(const wchar_t *, int);
+long           wfindfirst(wchar_t *, struct _wfinddata_t *);
+int            wfindnext(long, struct _wfinddata_t *);
+int            wunlink(const wchar_t *);
+int            wrename(const wchar_t *, const wchar_t *);
+int            wopen(const wchar_t *, int, ...);
+int            wsopen(const wchar_t *, int, int, ...);
+wchar_t *      wmktemp(wchar_t *);
+#endif
+
+#endif /* Not _NO_OLDNAMES */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* _IO_H_ not defined */
diff --git a/include/crt/libgen.h b/include/crt/libgen.h
new file mode 100644 (file)
index 0000000..db89e1e
--- /dev/null
@@ -0,0 +1,31 @@
+#ifndef _LIBGEN_H_
+/* 
+ * libgen.h
+ *
+ * $Id: libgen.h,v 1.2 2007/06/23 07:34:15 dannysmith Exp $
+ *
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Functions for splitting pathnames into dirname and basename components.
+ *
+ */
+#define _LIBGEN_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern __cdecl __MINGW_NOTHROW char *basename (char *);
+extern __cdecl __MINGW_NOTHROW char *dirname  (char *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBGEN_H_: end of file */
+
diff --git a/include/crt/limits.h b/include/crt/limits.h
new file mode 100644 (file)
index 0000000..ab80ae4
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * limits.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Functions for manipulating paths and directories (included from io.h)
+ * plus functions for setting the current drive.
+ *
+ * Defines constants for the sizes of integral types.
+ *
+ * NOTE: GCC should supply a version of this header and it should be safe to
+ *       use that version instead of this one (maybe safer).
+ *
+ */
+
+#ifndef _LIMITS_H_
+#define _LIMITS_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+/*
+ * File system limits
+ *
+ * TODO: NAME_MAX and OPEN_MAX are file system limits or not? Are they the
+ *       same as FILENAME_MAX and FOPEN_MAX from stdio.h?
+ * NOTE: Apparently the actual size of PATH_MAX is 260, but a space is
+ *       required for the NUL. TODO: Test?
+ */
+#define PATH_MAX       259
+
+/*
+ * Characteristics of the char data type.
+ *
+ * TODO: Is MB_LEN_MAX correct?
+ */
+#define CHAR_BIT       8
+#define MB_LEN_MAX     2
+
+#define SCHAR_MIN      (-128)
+#define SCHAR_MAX      127
+
+#define UCHAR_MAX      255
+
+/* TODO: Is this safe? I think it might just be testing the preprocessor,
+ *       not the compiler itself... */
+#if    ('\x80' < 0)
+#define CHAR_MIN       SCHAR_MIN
+#define CHAR_MAX       SCHAR_MAX
+#else
+#define CHAR_MIN       0
+#define CHAR_MAX       UCHAR_MAX
+#endif
+
+/*
+ * Maximum and minimum values for ints.
+ */
+#define INT_MAX                2147483647
+#define INT_MIN                (-INT_MAX-1)
+
+#define UINT_MAX       0xffffffff
+
+/*
+ * Maximum and minimum values for shorts.
+ */
+#define SHRT_MAX       32767
+#define SHRT_MIN       (-SHRT_MAX-1)
+
+#define USHRT_MAX      0xffff
+
+/*
+ * Maximum and minimum values for longs and unsigned longs.
+ *
+ * TODO: This is not correct for Alphas, which have 64 bit longs.
+ */
+#define LONG_MAX       2147483647L
+#define LONG_MIN       (-LONG_MAX-1)
+
+#define ULONG_MAX      0xffffffffUL
+
+#ifndef __STRICT_ANSI__
+/* POSIX wants this.  */
+#define SSIZE_MAX LONG_MAX
+#endif
+
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
+     || !defined(__STRICT_ANSI__)
+/* ISO C9x macro names */
+#define LLONG_MAX 9223372036854775807LL
+#define LLONG_MIN (-LLONG_MAX - 1)
+#define ULLONG_MAX (2ULL * LLONG_MAX + 1)
+#endif
+
+/*
+ * The GNU C compiler also allows 'long long int'
+ */
+#if !defined(__STRICT_ANSI__) && defined(__GNUC__)
+
+#define LONG_LONG_MAX  9223372036854775807LL
+#define LONG_LONG_MIN  (-LONG_LONG_MAX-1)
+#define ULONG_LONG_MAX (2ULL * LONG_LONG_MAX + 1)
+
+/* MSVC compatibility */
+#define _I64_MIN LONG_LONG_MIN
+#define _I64_MAX LONG_LONG_MAX
+#define _UI64_MAX ULONG_LONG_MAX
+
+#endif /* Not Strict ANSI and GNU C compiler */
+
+
+#endif /* not _LIMITS_H_ */
diff --git a/include/crt/locale.h b/include/crt/locale.h
new file mode 100644 (file)
index 0000000..f80ccf3
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * locale.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Functions and types for localization (ie. changing the appearance of
+ * output based on the standards of a certain country).
+ *
+ */
+
+#ifndef        _LOCALE_H_
+#define        _LOCALE_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+/*
+ * NOTE: I have tried to test this, but I am limited by my knowledge of
+ *       locale issues. The structure does not bomb if you look at the
+ *       values, and 'decimal_point' even seems to be correct. But the
+ *       rest of the values are, by default, not particularly useful
+ *       (read meaningless and not related to the international settings
+ *       of the system).
+ */
+
+#define        LC_ALL          0
+#define LC_COLLATE     1
+#define LC_CTYPE       2
+#define        LC_MONETARY     3
+#define        LC_NUMERIC      4
+#define        LC_TIME         5
+#define        LC_MIN          LC_ALL
+#define        LC_MAX          LC_TIME
+
+#ifndef RC_INVOKED
+
+/* According to C89 std, NULL is defined in locale.h too.  */
+#define __need_NULL
+#include <stddef.h>
+
+/*
+ * The structure returned by 'localeconv'.
+ */
+struct lconv
+{
+       char*   decimal_point;
+       char*   thousands_sep;
+       char*   grouping;
+       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;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_CRTIMP  char* __cdecl __MINGW_NOTHROW setlocale (int, const char*);
+_CRTIMP struct lconv* __cdecl __MINGW_NOTHROW localeconv (void);
+
+#ifndef _WLOCALE_DEFINED  /* also declared in wchar.h */
+# define __need_wchar_t
+# include <stddef.h>
+  _CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wsetlocale(int, const wchar_t*);
+# define _WLOCALE_DEFINED
+#endif /* ndef _WLOCALE_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _LOCALE_H_ */
+
+
diff --git a/include/crt/malloc.h b/include/crt/malloc.h
new file mode 100644 (file)
index 0000000..9d2c33f
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * malloc.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Support for programs which want to use malloc.h to get memory management
+ * functions. Unless you absolutely need some of these functions and they are
+ * not in the ANSI headers you should use the ANSI standard header files
+ * instead.
+ *
+ */
+
+#ifndef _MALLOC_H_
+#define _MALLOC_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#include <stdlib.h>
+
+#ifndef RC_INVOKED
+
+/*
+ * The structure used to walk through the heap with _heapwalk.
+ */
+typedef        struct _heapinfo
+{
+       int*    _pentry;
+       size_t  _size;
+       int     _useflag;
+} _HEAPINFO;
+
+/* Values for _heapinfo.useflag */
+#define _FREEENTRY 0
+#define _USEDENTRY 1
+
+/* Return codes for _heapwalk()  */
+#define _HEAPEMPTY     (-1)
+#define _HEAPOK                (-2)
+#define _HEAPBADBEGIN  (-3)
+#define _HEAPBADNODE   (-4)
+#define _HEAPEND       (-5)
+#define _HEAPBADPTR    (-6)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+   The _heap* memory allocation functions are supported on NT
+   but not W9x. On latter, they always set errno to ENOSYS.
+*/
+_CRTIMP int __cdecl __MINGW_NOTHROW _heapwalk (_HEAPINFO*);
+#ifdef __GNUC__
+#define _alloca(x) __builtin_alloca((x))
+#endif
+
+#ifndef        _NO_OLDNAMES
+_CRTIMP int __cdecl __MINGW_NOTHROW heapwalk (_HEAPINFO*);
+#ifdef __GNUC__
+#define alloca(x) __builtin_alloca((x))
+#endif
+#endif /* Not _NO_OLDNAMES */
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _heapchk (void);   /* Verify heap integrety. */
+_CRTIMP int __cdecl __MINGW_NOTHROW _heapmin (void);   /* Return unused heap to the OS. */
+_CRTIMP int __cdecl __MINGW_NOTHROW _heapset (unsigned int);
+
+_CRTIMP size_t __cdecl __MINGW_NOTHROW _msize (void*);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW _get_sbh_threshold (void); 
+_CRTIMP int __cdecl __MINGW_NOTHROW _set_sbh_threshold (size_t);
+_CRTIMP void* __cdecl __MINGW_NOTHROW _expand (void*, size_t); 
+
+/* These require msvcr70.dll or higher. */ 
+#if __MSVCRT_VERSION__ >= 0x0700
+_CRTIMP void * __cdecl __MINGW_NOTHROW _aligned_offset_malloc(size_t, size_t, size_t);
+_CRTIMP void * __cdecl __MINGW_NOTHROW _aligned_offset_realloc(void*, size_t, size_t, size_t);
+
+_CRTIMP void * __cdecl __MINGW_NOTHROW _aligned_malloc (size_t, size_t);
+_CRTIMP void * __cdecl __MINGW_NOTHROW _aligned_realloc (void*, size_t, size_t);
+_CRTIMP void __cdecl __MINGW_NOTHROW _aligned_free (void*);
+#endif /* __MSVCRT_VERSION__ >= 0x0700 */
+
+/* These require libmingwex.a. */ 
+void * __cdecl __MINGW_NOTHROW __mingw_aligned_offset_malloc (size_t, size_t, size_t);
+void * __cdecl __MINGW_NOTHROW __mingw_aligned_offset_realloc (void*, size_t, size_t, size_t);
+
+void * __cdecl __MINGW_NOTHROW __mingw_aligned_malloc (size_t, size_t);
+void * __cdecl __MINGW_NOTHROW __mingw_aligned_realloc (void*, size_t, size_t);
+void __cdecl __MINGW_NOTHROW __mingw_aligned_free (void*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* RC_INVOKED */
+
+#endif /* Not _MALLOC_H_ */
diff --git a/include/crt/math.h b/include/crt/math.h
new file mode 100644 (file)
index 0000000..0d60c6f
--- /dev/null
@@ -0,0 +1,848 @@
+/*
+ * math.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Mathematical functions.
+ *
+ */
+
+
+#ifndef _MATH_H_
+#define _MATH_H_
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+/*
+ * Types for the _exception structure.
+ */
+
+#define        _DOMAIN         1       /* domain error in argument */
+#define        _SING           2       /* singularity */
+#define        _OVERFLOW       3       /* range overflow */
+#define        _UNDERFLOW      4       /* range underflow */
+#define        _TLOSS          5       /* total loss of precision */
+#define        _PLOSS          6       /* partial loss of precision */
+
+/*
+ * Exception types with non-ANSI names for compatibility.
+ */
+
+#ifndef        __STRICT_ANSI__
+#ifndef        _NO_OLDNAMES
+
+#define        DOMAIN          _DOMAIN
+#define        SING            _SING
+#define        OVERFLOW        _OVERFLOW
+#define        UNDERFLOW       _UNDERFLOW
+#define        TLOSS           _TLOSS
+#define        PLOSS           _PLOSS
+
+#endif /* Not _NO_OLDNAMES */
+#endif /* Not __STRICT_ANSI__ */
+
+
+/* Traditional/XOPEN math constants (double precison) */
+#ifndef __STRICT_ANSI__
+#define M_E            2.7182818284590452354
+#define M_LOG2E                1.4426950408889634074
+#define M_LOG10E       0.43429448190325182765
+#define M_LN2          0.69314718055994530942
+#define M_LN10         2.30258509299404568402
+#define M_PI           3.14159265358979323846
+#define M_PI_2         1.57079632679489661923
+#define M_PI_4         0.78539816339744830962
+#define M_1_PI         0.31830988618379067154
+#define M_2_PI         0.63661977236758134308
+#define M_2_SQRTPI     1.12837916709551257390
+#define M_SQRT2                1.41421356237309504880
+#define M_SQRT1_2      0.70710678118654752440
+#endif
+
+/* These are also defined in Mingw float.h; needed here as well to work
+   around GCC build issues.  */
+#ifndef        __STRICT_ANSI__
+#ifndef __MINGW_FPCLASS_DEFINED
+#define __MINGW_FPCLASS_DEFINED 1
+/* IEEE 754 classication */
+#define        _FPCLASS_SNAN   0x0001  /* Signaling "Not a Number" */
+#define        _FPCLASS_QNAN   0x0002  /* Quiet "Not a Number" */
+#define        _FPCLASS_NINF   0x0004  /* Negative Infinity */
+#define        _FPCLASS_NN     0x0008  /* Negative Normal */
+#define        _FPCLASS_ND     0x0010  /* Negative Denormal */
+#define        _FPCLASS_NZ     0x0020  /* Negative Zero */
+#define        _FPCLASS_PZ     0x0040  /* Positive Zero */
+#define        _FPCLASS_PD     0x0080  /* Positive Denormal */
+#define        _FPCLASS_PN     0x0100  /* Positive Normal */
+#define        _FPCLASS_PINF   0x0200  /* Positive Infinity */
+#endif /* __MINGW_FPCLASS_DEFINED */
+#endif /* Not __STRICT_ANSI__ */
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * HUGE_VAL is returned by strtod when the value would overflow the
+ * representation of 'double'. There are other uses as well.
+ *
+ * __imp__HUGE is a pointer to the actual variable _HUGE in
+ * MSVCRT.DLL. If we used _HUGE directly we would get a pointer
+ * to a thunk function.
+ *
+ * NOTE: The CRTDLL version uses _HUGE_dll instead.
+ */
+
+#if __MINGW_GNUC_PREREQ(3, 3)
+#define        HUGE_VAL __builtin_huge_val()
+#else
+
+#ifndef __DECLSPEC_SUPPORTED
+
+#ifdef __MSVCRT__
+extern double* _imp___HUGE;
+#define        HUGE_VAL        (*_imp___HUGE)
+#else
+/* CRTDLL */
+extern double* _imp___HUGE_dll;
+#define        HUGE_VAL        (*_imp___HUGE_dll)
+#endif
+
+#else /* __DECLSPEC_SUPPORTED */
+
+#ifdef __MSVCRT__
+__MINGW_IMPORT double  _HUGE;
+#define        HUGE_VAL        _HUGE
+#else
+/* CRTDLL */
+__MINGW_IMPORT double  _HUGE_dll;
+#define        HUGE_VAL        _HUGE_dll
+#endif
+
+#endif /* __DECLSPEC_SUPPORTED */
+#endif /* __MINGW_GNUC_PREREQ(3, 3) */
+
+
+struct _exception
+{
+       int     type;
+       char    *name;
+       double  arg1;
+       double  arg2;
+       double  retval;
+};
+
+_CRTIMP double __cdecl sin (double);
+_CRTIMP double __cdecl cos (double);
+_CRTIMP double __cdecl tan (double);
+_CRTIMP double __cdecl sinh (double);
+_CRTIMP double __cdecl cosh (double);
+_CRTIMP double __cdecl tanh (double);
+_CRTIMP double __cdecl asin (double);
+_CRTIMP double __cdecl acos (double);
+_CRTIMP double __cdecl atan (double);
+_CRTIMP double __cdecl atan2 (double, double);
+_CRTIMP double __cdecl exp (double);
+_CRTIMP double __cdecl log (double);
+_CRTIMP double __cdecl log10 (double);
+_CRTIMP        double __cdecl pow (double, double);
+_CRTIMP double __cdecl sqrt (double);
+_CRTIMP double __cdecl ceil (double);
+_CRTIMP double __cdecl floor (double);
+_CRTIMP double __cdecl fabs (double);
+_CRTIMP double __cdecl ldexp (double, int);
+_CRTIMP double __cdecl frexp (double, int*);
+_CRTIMP double __cdecl modf (double, double*);
+_CRTIMP double __cdecl fmod (double, double);
+
+/* Excess precision when using a 64-bit mantissa for FPU math ops can
+   cause unexpected results with some of the MSVCRT math functions.  For
+   example, unless the function return value is stored (truncating to
+   53-bit mantissa), calls to pow with both x and y as integral values
+   sometimes produce a non-integral result.
+   One workaround is to reset the FPU env to 53-bit mantissa
+   by a call to fesetenv (FE_PC53_ENV).  Amother is to force storage
+   of the return value of individual math functions using wrappers.
+   NB, using these wrappers will disable builtin math functions and
+   hence disable the folding of function results at compile time when
+   arguments are constant.  */
+
+#if 0
+#define __DEFINE_FLOAT_STORE_MATHFN_D1(fn1)    \
+static __inline__ double                       \
+__float_store_ ## fn1 (double x)               \
+{                                              \
+   __volatile__ double res = (fn1) (x);                \
+  return res;                                  \
+}
+
+#define __DEFINE_FLOAT_STORE_MATHFN_D2(fn2)    \
+static __inline__ double                       \
+__float_store_ ## fn2 (double x, double y)     \
+{                                              \
+  __volatile__ double res = (fn2) (x, y);      \
+  return res;                                  \
+}
+#endif
+
+/* For example, here is how to force the result of the pow function
+   to be stored:   */
+#if 0
+#undef pow
+/* Define the ___float_store_pow function and use it instead of pow().  */
+__DEFINE_FLOAT_STORE_MATHFN_D2 (pow)
+#define pow __float_store_pow
+#endif
+
+#ifndef __STRICT_ANSI__
+
+/* Complex number (for _cabs). This is the MS version. The ISO
+   C99 counterpart _Complex is an intrinsic type in GCC and
+   'complex' is defined as a macro.  See complex.h  */
+struct _complex
+{
+       double  x;      /* Real part */
+       double  y;      /* Imaginary part */
+};
+
+_CRTIMP double __cdecl _cabs (struct _complex);
+
+_CRTIMP double __cdecl _hypot (double, double);
+_CRTIMP double __cdecl _j0 (double);
+_CRTIMP double __cdecl _j1 (double);
+_CRTIMP double __cdecl _jn (int, double);
+_CRTIMP double __cdecl _y0 (double);
+_CRTIMP double __cdecl _y1 (double);
+_CRTIMP double __cdecl _yn (int, double);
+_CRTIMP int __cdecl _matherr (struct _exception *);
+
+/* These are also declared in Mingw float.h; needed here as well to work
+   around GCC build issues.  */
+/* BEGIN FLOAT.H COPY */
+/*
+ * IEEE recommended functions
+ */
+
+_CRTIMP double __cdecl _chgsign (double);
+_CRTIMP double __cdecl _copysign (double, double);
+_CRTIMP double __cdecl _logb (double);
+_CRTIMP double __cdecl _nextafter (double, double);
+_CRTIMP double __cdecl _scalb (double, long);
+
+_CRTIMP int __cdecl _finite (double);
+_CRTIMP int __cdecl _fpclass (double);
+_CRTIMP int __cdecl _isnan (double);
+
+/* END FLOAT.H COPY */
+
+
+/*
+ * Non-underscored versions of non-ANSI functions.
+ * These reside in liboldnames.a.
+ */
+
+#if !defined (_NO_OLDNAMES)
+
+_CRTIMP double __cdecl j0 (double);
+_CRTIMP double __cdecl j1 (double);
+_CRTIMP double __cdecl jn (int, double);
+_CRTIMP double __cdecl y0 (double);
+_CRTIMP double __cdecl y1 (double);
+_CRTIMP double __cdecl yn (int, double);
+
+_CRTIMP double __cdecl chgsign (double);
+_CRTIMP double __cdecl scalb (double, long);
+_CRTIMP int __cdecl finite (double);
+_CRTIMP int __cdecl fpclass (double);
+
+#define FP_SNAN    _FPCLASS_SNAN
+#define FP_QNAN    _FPCLASS_QNAN
+#define FP_NINF    _FPCLASS_NINF
+#define FP_PINF    _FPCLASS_PINF
+#define FP_NDENORM _FPCLASS_ND
+#define FP_PDENORM _FPCLASS_PD
+#define FP_NZERO   _FPCLASS_NZ
+#define FP_PZERO   _FPCLASS_PZ
+#define FP_NNORM   _FPCLASS_NN
+#define FP_PNORM   _FPCLASS_PN
+
+#endif /* Not _NO_OLDNAMES */
+
+/* This require msvcr70.dll or higher. */
+#if __MSVCRT_VERSION__ >= 0x0700
+_CRTIMP int __cdecl _set_SSE2_enable (int);
+#endif /* __MSVCRT_VERSION__ >= 0x0700 */
+
+
+#endif /* __STRICT_ANSI__ */
+
+
+#ifndef __NO_ISOCEXT
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
+       || !defined __STRICT_ANSI__ || defined __cplusplus
+
+#if __MINGW_GNUC_PREREQ(3, 3)
+#define HUGE_VALF      __builtin_huge_valf()
+#define HUGE_VALL      __builtin_huge_vall()
+#define INFINITY       __builtin_inf()
+#define NAN            __builtin_nan("")
+#else
+extern const float __INFF;
+#define HUGE_VALF __INFF
+extern const long double  __INFL;
+#define HUGE_VALL __INFL
+#define INFINITY HUGE_VALF
+extern const double __QNAN;
+#define NAN __QNAN
+#endif /* __MINGW_GNUC_PREREQ(3, 3) */
+
+/* 7.12.3.1 */
+/*
+   Return values for fpclassify.
+   These are based on Intel x87 fpu condition codes
+   in the high byte of status word and differ from
+   the return values for MS IEEE 754 extension _fpclass()
+*/
+#define FP_NAN         0x0100
+#define FP_NORMAL      0x0400
+#define FP_INFINITE    (FP_NAN | FP_NORMAL)
+#define FP_ZERO                0x4000
+#define FP_SUBNORMAL   (FP_NORMAL | FP_ZERO)
+/* 0x0200 is signbit mask */
+
+
+/*
+  We can't inline float or double, because we want to ensure truncation
+  to semantic type before classification.
+  (A normal long double value might become subnormal when
+  converted to double, and zero when converted to float.)
+*/
+
+extern int __cdecl __fpclassifyf (float);
+extern int __cdecl __fpclassify (double);
+
+__CRT_INLINE int __cdecl __fpclassifyl (long double x){
+  unsigned short sw;
+  __asm__ ("fxam; fstsw %%ax;" : "=a" (sw): "t" (x));
+  return sw & (FP_NAN | FP_NORMAL | FP_ZERO );
+}
+
+#define fpclassify(x) (sizeof (x) == sizeof (float) ? __fpclassifyf (x)          \
+                      : sizeof (x) == sizeof (double) ? __fpclassify (x) \
+                      : __fpclassifyl (x))
+
+/* 7.12.3.2 */
+#define isfinite(x) ((fpclassify(x) & FP_NAN) == 0)
+
+/* 7.12.3.3 */
+#define isinf(x) (fpclassify(x) == FP_INFINITE)
+
+/* 7.12.3.4 */
+/* We don't need to worry about trucation here:
+   A NaN stays a NaN. */
+
+__CRT_INLINE int __cdecl __isnan (double _x)
+{
+  unsigned short sw;
+  __asm__ ("fxam;"
+          "fstsw %%ax": "=a" (sw) : "t" (_x));
+  return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
+    == FP_NAN;
+}
+
+__CRT_INLINE int __cdecl __isnanf (float _x)
+{
+  unsigned short sw;
+  __asm__ ("fxam;"
+           "fstsw %%ax": "=a" (sw) : "t" (_x));
+  return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
+    == FP_NAN;
+}
+
+__CRT_INLINE int __cdecl __isnanl (long double _x)
+{
+  unsigned short sw;
+  __asm__ ("fxam;"
+           "fstsw %%ax": "=a" (sw) : "t" (_x));
+  return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
+    == FP_NAN;
+}
+
+
+#define isnan(x) (sizeof (x) == sizeof (float) ? __isnanf (x)  \
+                 : sizeof (x) == sizeof (double) ? __isnan (x) \
+                 : __isnanl (x))
+
+/* 7.12.3.5 */
+#define isnormal(x) (fpclassify(x) == FP_NORMAL)
+
+/* 7.12.3.6 The signbit macro */
+__CRT_INLINE int __cdecl __signbit (double x) {
+  unsigned short stw;
+  __asm__ ( "fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
+  return (stw & 0x0200) != 0;
+}
+
+__CRT_INLINE int __cdecl __signbitf (float x) {
+  unsigned short stw;
+  __asm__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
+  return (stw & 0x0200) != 0;
+}
+
+__CRT_INLINE int __cdecl __signbitl (long double x) {
+  unsigned short stw;
+  __asm__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
+  return (stw & 0x0200) != 0;
+}
+
+#define signbit(x) (sizeof (x) == sizeof (float) ? __signbitf (x)      \
+                   : sizeof (x) == sizeof (double) ? __signbit (x)     \
+                   : __signbitl (x))
+
+/* 7.12.4 Trigonometric functions: Double in C89 */
+extern float __cdecl sinf (float);
+extern long double __cdecl sinl (long double);
+
+extern float __cdecl cosf (float);
+extern long double __cdecl cosl (long double);
+
+extern float __cdecl tanf (float);
+extern long double __cdecl tanl (long double);
+
+extern float __cdecl asinf (float);
+extern long double __cdecl asinl (long double);
+
+extern float __cdecl acosf (float);
+extern long double __cdecl acosl (long double);
+
+extern float __cdecl atanf (float);
+extern long double __cdecl atanl (long double);
+
+extern float __cdecl atan2f (float, float);
+extern long double __cdecl atan2l (long double, long double);
+
+/* 7.12.5 Hyperbolic functions: Double in C89  */
+__CRT_INLINE float __cdecl sinhf (float x)
+  {return (float) sinh (x);}
+extern long double __cdecl sinhl (long double);
+
+__CRT_INLINE float __cdecl coshf (float x)
+  {return (float) cosh (x);}
+extern long double __cdecl coshl (long double);
+
+__CRT_INLINE float __cdecl tanhf (float x)
+  {return (float) tanh (x);}
+extern long double __cdecl tanhl (long double);
+
+/* Inverse hyperbolic trig functions  */
+/* 7.12.5.1 */
+extern double __cdecl acosh (double);
+extern float __cdecl acoshf (float);
+extern long double __cdecl acoshl (long double);
+
+/* 7.12.5.2 */
+extern double __cdecl asinh (double);
+extern float __cdecl asinhf (float);
+extern long double __cdecl asinhl (long double);
+
+/* 7.12.5.3 */
+extern double __cdecl atanh (double);
+extern float __cdecl atanf  (float);
+extern long double __cdecl atanhl (long double);
+
+/* Exponentials and logarithms  */
+/* 7.12.6.1 Double in C89 */
+__CRT_INLINE float __cdecl expf (float x)
+  {return (float) exp (x);}
+extern long double __cdecl expl (long double);
+
+/* 7.12.6.2 */
+extern double __cdecl exp2(double);
+extern float __cdecl exp2f(float);
+extern long double __cdecl exp2l(long double);
+
+/* 7.12.6.3 The expm1 functions */
+/* TODO: These could be inlined */
+extern double __cdecl expm1(double);
+extern float __cdecl expm1f(float);
+extern long double __cdecl expm1l(long double);
+
+/* 7.12.6.4 Double in C89 */
+__CRT_INLINE float __cdecl frexpf (float x, int* expn)
+  {return (float) frexp (x, expn);}
+extern long double __cdecl frexpl (long double, int*);
+
+/* 7.12.6.5 */
+#define FP_ILOGB0 ((int)0x80000000)
+#define FP_ILOGBNAN ((int)0x80000000)
+extern int __cdecl ilogb (double);
+extern int __cdecl ilogbf (float);
+extern int __cdecl ilogbl (long double);
+
+/* 7.12.6.6  Double in C89 */
+__CRT_INLINE float __cdecl ldexpf (float x, int expn)
+  {return (float) ldexp (x, expn);}
+extern long double __cdecl ldexpl (long double, int);
+
+/* 7.12.6.7 Double in C89 */
+extern float __cdecl logf (float);
+extern long double __cdecl logl (long double);
+
+/* 7.12.6.8 Double in C89 */
+extern float __cdecl log10f (float);
+extern long double __cdecl log10l (long double);
+
+/* 7.12.6.9 */
+extern double __cdecl log1p(double);
+extern float __cdecl log1pf(float);
+extern long double __cdecl log1pl(long double);
+
+/* 7.12.6.10 */
+extern double __cdecl log2 (double);
+extern float __cdecl log2f (float);
+extern long double __cdecl log2l (long double);
+
+/* 7.12.6.11 */
+extern double __cdecl logb (double);
+extern float __cdecl logbf (float);
+extern long double __cdecl logbl (long double);
+
+/* Inline versions.  GCC-4.0+ can do a better fast-math optimization
+   with __builtins. */
+#if !(__MINGW_GNUC_PREREQ (4, 0) && defined __FAST_MATH__ )
+__CRT_INLINE double __cdecl logb (double x)
+{
+  double res;
+  __asm__ ("fxtract\n\t"
+       "fstp   %%st" : "=t" (res) : "0" (x));
+  return res;
+}
+
+__CRT_INLINE float __cdecl logbf (float x)
+{
+  float res;
+  __asm__ ("fxtract\n\t"
+       "fstp   %%st" : "=t" (res) : "0" (x));
+  return res;
+}
+
+__CRT_INLINE long double __cdecl logbl (long double x)
+{
+  long double res;
+  __asm__ ("fxtract\n\t"
+       "fstp   %%st" : "=t" (res) : "0" (x));
+  return res;
+}
+#endif /* !defined __FAST_MATH__ || !__MINGW_GNUC_PREREQ (4, 0) */
+
+/* 7.12.6.12  Double in C89 */
+extern float __cdecl modff (float, float*);
+extern long double __cdecl modfl (long double, long double*);
+
+/* 7.12.6.13 */
+extern double __cdecl scalbn (double, int);
+extern float __cdecl scalbnf (float, int);
+extern long double __cdecl scalbnl (long double, int);
+
+extern double __cdecl scalbln (double, long);
+extern float __cdecl scalblnf (float, long);
+extern long double __cdecl scalblnl (long double, long);
+
+/* 7.12.7.1 */
+/* Implementations adapted from Cephes versions */
+extern double __cdecl cbrt (double);
+extern float __cdecl cbrtf (float);
+extern long double __cdecl cbrtl (long double);
+
+/* 7.12.7.2 The fabs functions: Double in C89 */
+extern  float __cdecl fabsf (float x);
+extern long double __cdecl fabsl (long double x);
+
+/* 7.12.7.3  */
+extern double __cdecl hypot (double, double); /* in libmoldname.a */
+__CRT_INLINE float __cdecl hypotf (float x, float y)
+  { return (float) hypot (x, y);}
+extern long double __cdecl hypotl (long double, long double);
+
+/* 7.12.7.4 The pow functions. Double in C89 */
+__CRT_INLINE float __cdecl powf (float x, float y)
+  {return (float) pow (x, y);}
+extern long double __cdecl powl (long double, long double);
+
+/* 7.12.7.5 The sqrt functions. Double in C89. */
+extern float __cdecl sqrtf (float);
+extern long double __cdecl sqrtl (long double);
+
+/* 7.12.8.1 The erf functions  */
+extern double __cdecl erf (double);
+extern float __cdecl erff (float);
+extern long double __cdecl erfl (long double);
+
+/* 7.12.8.2 The erfc functions  */
+extern double __cdecl erfc (double);
+extern float __cdecl erfcf (float);
+extern long double __cdecl erfcl (long double);
+
+/* 7.12.8.3 The lgamma functions */
+extern double __cdecl lgamma (double);
+extern float __cdecl lgammaf (float);
+extern long double __cdecl lgammal (long double);
+
+/* 7.12.8.4 The tgamma functions */
+extern double __cdecl tgamma (double);
+extern float __cdecl tgammaf (float);
+extern long double __cdecl tgammal (long double);
+
+/* 7.12.9.1 Double in C89 */
+extern float __cdecl ceilf (float);
+extern long double __cdecl ceill (long double);
+
+/* 7.12.9.2 Double in C89 */
+extern float __cdecl floorf (float);
+extern long double __cdecl floorl (long double);
+
+/* 7.12.9.3 */
+extern double __cdecl nearbyint ( double);
+extern float __cdecl nearbyintf (float);
+extern long double __cdecl nearbyintl (long double);
+
+/* 7.12.9.4 */
+/* round, using fpu control word settings */
+extern double __cdecl rint (double);
+extern float __cdecl rintf (float);
+extern long double __cdecl rintl (long double);
+
+/* 7.12.9.5 */
+extern long __cdecl lrint (double);
+extern long __cdecl lrintf (float);
+extern long __cdecl lrintl (long double);
+
+extern long long __cdecl llrint (double);
+extern long long __cdecl llrintf (float);
+extern long long __cdecl llrintl (long double);
+
+/* Inline versions of above.
+   GCC 4.0+ can do a better fast-math job with __builtins. */
+#if !(__MINGW_GNUC_PREREQ (4, 0) && defined __FAST_MATH__ )
+__CRT_INLINE double __cdecl rint (double x)
+{
+  double retval;
+  __asm__ ("frndint;": "=t" (retval) : "0" (x));
+  return retval;
+}
+
+__CRT_INLINE float __cdecl rintf (float x)
+{
+  float retval;
+  __asm__ ("frndint;" : "=t" (retval) : "0" (x) );
+  return retval;
+}
+
+__CRT_INLINE long double __cdecl rintl (long double x)
+{
+  long double retval;
+  __asm__ ("frndint;" : "=t" (retval) : "0" (x) );
+  return retval;
+}
+
+__CRT_INLINE long __cdecl lrint (double x)
+{
+  long retval;
+  __asm__ __volatile__
+    ("fistpl %0"  : "=m" (retval) : "t" (x) : "st");
+  return retval;
+}
+
+__CRT_INLINE long __cdecl lrintf (float x)
+{
+  long retval;
+  __asm__ __volatile__
+    ("fistpl %0"  : "=m" (retval) : "t" (x) : "st");
+  return retval;
+}
+
+__CRT_INLINE long __cdecl lrintl (long double x)
+{
+  long retval;
+  __asm__ __volatile__
+    ("fistpl %0"  : "=m" (retval) : "t" (x) : "st");
+  return retval;
+}
+
+__CRT_INLINE long long __cdecl llrint (double x)
+{
+  long long retval;
+  __asm__ __volatile__
+    ("fistpll %0"  : "=m" (retval) : "t" (x) : "st");
+  return retval;
+}
+
+__CRT_INLINE long long __cdecl llrintf (float x)
+{
+  long long retval;
+  __asm__ __volatile__
+    ("fistpll %0"  : "=m" (retval) : "t" (x) : "st");
+  return retval;
+}
+
+__CRT_INLINE long long __cdecl llrintl (long double x)
+{
+  long long retval;
+  __asm__ __volatile__
+    ("fistpll %0"  : "=m" (retval) : "t" (x) : "st");
+  return retval;
+}
+#endif /* !__FAST_MATH__ || !__MINGW_GNUC_PREREQ (4,0)  */
+
+/* 7.12.9.6 */
+/* round away from zero, regardless of fpu control word settings */
+extern double __cdecl round (double);
+extern float __cdecl roundf (float);
+extern long double __cdecl roundl (long double);
+
+/* 7.12.9.7  */
+extern long __cdecl lround (double);
+extern long __cdecl lroundf (float);
+extern long __cdecl lroundl (long double);
+
+extern long long __cdecl llround (double);
+extern long long __cdecl llroundf (float);
+extern long long __cdecl llroundl (long double);
+
+/* 7.12.9.8 */
+/* round towards zero, regardless of fpu control word settings */
+extern double __cdecl trunc (double);
+extern float __cdecl truncf (float);
+extern long double __cdecl truncl (long double);
+
+/* 7.12.10.1 Double in C89 */
+extern float __cdecl fmodf (float, float);
+extern long double __cdecl fmodl (long double, long double);
+
+/* 7.12.10.2 */
+extern double __cdecl remainder (double, double);
+extern float __cdecl remainderf (float, float);
+extern long double __cdecl remainderl (long double, long double);
+
+/* 7.12.10.3 */
+extern double __cdecl remquo(double, double, int *);
+extern float __cdecl remquof(float, float, int *);
+extern long double __cdecl remquol(long double, long double, int *);
+
+/* 7.12.11.1 */
+extern double __cdecl copysign (double, double); /* in libmoldname.a */
+extern float __cdecl copysignf (float, float);
+extern long double __cdecl copysignl (long double, long double);
+
+/* 7.12.11.2 Return a NaN */
+extern double __cdecl nan(const char *tagp);
+extern float __cdecl nanf(const char *tagp);
+extern long double __cdecl nanl(const char *tagp);
+
+#ifndef __STRICT_ANSI__
+#define _nan() nan("")
+#define _nanf() nanf("")
+#define _nanl() nanl("")
+#endif
+
+/* 7.12.11.3 */
+extern double __cdecl nextafter (double, double); /* in libmoldname.a */
+extern float __cdecl nextafterf (float, float);
+extern long double __cdecl nextafterl (long double, long double);
+
+/* 7.12.11.4 The nexttoward functions */
+extern double __cdecl nexttoward (double,  long double);
+extern float __cdecl nexttowardf (float,  long double);
+extern long double __cdecl nexttowardl (long double, long double);
+
+/* 7.12.12.1 */
+/*  x > y ? (x - y) : 0.0  */
+extern double __cdecl fdim (double x, double y);
+extern float __cdecl fdimf (float x, float y);
+extern long double __cdecl fdiml (long double x, long double y);
+
+/* fmax and fmin.
+   NaN arguments are treated as missing data: if one argument is a NaN
+   and the other numeric, then these functions choose the numeric
+   value. */
+
+/* 7.12.12.2 */
+extern double __cdecl fmax  (double, double);
+extern float __cdecl fmaxf (float, float);
+extern long double __cdecl fmaxl (long double, long double);
+
+/* 7.12.12.3 */
+extern double __cdecl fmin (double, double);
+extern float __cdecl fminf (float, float);
+extern long double __cdecl fminl (long double, long double);
+
+/* 7.12.13.1 */
+/* return x * y + z as a ternary op */
+extern double __cdecl fma (double, double, double);
+extern float __cdecl fmaf (float, float, float);
+extern long double __cdecl fmal (long double, long double, long double);
+
+
+/* 7.12.14 */
+/*
+ *  With these functions, comparisons involving quiet NaNs set the FP
+ *  condition code to "unordered".  The IEEE floating-point spec
+ *  dictates that the result of floating-point comparisons should be
+ *  false whenever a NaN is involved, with the exception of the != op,
+ *  which always returns true: yes, (NaN != NaN) is true).
+ */
+
+#if __GNUC__ >= 3
+
+#define isgreater(x, y) __builtin_isgreater(x, y)
+#define isgreaterequal(x, y) __builtin_isgreaterequal(x, y)
+#define isless(x, y) __builtin_isless(x, y)
+#define islessequal(x, y) __builtin_islessequal(x, y)
+#define islessgreater(x, y) __builtin_islessgreater(x, y)
+#define isunordered(x, y) __builtin_isunordered(x, y)
+
+#else
+/*  helper  */
+__CRT_INLINE int  __cdecl
+__fp_unordered_compare (long double x, long double y){
+  unsigned short retval;
+  __asm__ ("fucom %%st(1);"
+          "fnstsw;": "=a" (retval) : "t" (x), "u" (y));
+  return retval;
+}
+
+#define isgreater(x, y) ((__fp_unordered_compare(x, y) \
+                          & 0x4500) == 0)
+#define isless(x, y) ((__fp_unordered_compare (y, x) \
+                       & 0x4500) == 0)
+#define isgreaterequal(x, y) ((__fp_unordered_compare (x, y) \
+                               & FP_INFINITE) == 0)
+#define islessequal(x, y) ((__fp_unordered_compare(y, x) \
+                           & FP_INFINITE) == 0)
+#define islessgreater(x, y) ((__fp_unordered_compare(x, y) \
+                             & FP_SUBNORMAL) == 0)
+#define isunordered(x, y) ((__fp_unordered_compare(x, y) \
+                           & 0x4500) == 0x4500)
+
+#endif
+
+
+#endif /* __STDC_VERSION__ >= 199901L */
+#endif /* __NO_ISOCEXT */
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* Not RC_INVOKED */
+
+
+#endif /* Not _MATH_H_ */
diff --git a/include/crt/mbctype.h b/include/crt/mbctype.h
new file mode 100644 (file)
index 0000000..ffc9a37
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * mbctype.h
+ *
+ * Functions for testing multibyte character types and converting characters.
+ *
+ * This file is part of the Mingw32 package.
+ *
+ *
+ *  THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ *  This source code is offered for use in the public domain. You may
+ *  use, modify or distribute it freely.
+ *
+ *  This code is distributed in the hope that it will be useful but
+ *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ *  DISCLAIMED. This includes but is not limited to warranties of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef _MBCTYPE_H_
+#define _MBCTYPE_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+/* return values for _mbsbtype  and  _mbbtype in mbstring.h */
+#define _MBC_SINGLE 0
+#define _MBC_LEAD 1
+#define _MBC_TRAIL 2
+#define _MBC_ILLEGAL (-1)
+
+/*  args for setmbcp (in lieu of actual codepage)  */
+#define _MB_CP_SBCS 0
+#define _MB_CP_OEM (-2)
+#define _MB_CP_ANSI (-3)
+#define _MB_CP_LOCALE (-4)
+
+#define _MS     0x01
+#define _MP     0x02
+#define _M1     0x04
+#define _M2     0x08
+
+#define _SBUP   0x10
+#define _SBLOW  0x20
+
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef        __STRICT_ANSI__
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _setmbcp (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _getmbcp (void);
+
+/* byte classification  */
+/* NB: Corresponding _ismbc* functions are in mbstring.h */
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbbalpha (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbbalnum (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbbgraph (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbbprint (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbbpunct (unsigned int);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbbkana (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbbkalnum (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbbkprint (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbbkpunct (unsigned int);
+
+
+/* these are also in mbstring.h */
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbblead (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbbtrail (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbslead (const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbstrail (const unsigned char*, const unsigned char*);
+
+#ifdef __DECLSPEC_SUPPORTED
+__MINGW_IMPORT unsigned char _mbctype[];
+__MINGW_IMPORT unsigned char _mbcasemap[];
+#endif
+
+/* TODO : _MBCS_ mappings go in tchar.h */
+
+#endif /* Not strict ANSI */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _MCTYPE_H_ */
+
+
diff --git a/include/crt/mbstring.h b/include/crt/mbstring.h
new file mode 100644 (file)
index 0000000..4428b60
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+ * mbstring.h
+ *
+ * Protototypes for string functions supporting multibyte characters.
+ *
+ * This file is part of the Mingw32 package.
+ *
+ *
+ *  THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ *  This source code is offered for use in the public domain. You may
+ *  use, modify or distribute it freely.
+ *
+ *  This code is distributed in the hope that it will be useful but
+ *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ *  DISCLAIMED. This includes but is not limited to warranties of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef _MBSTRING_H_
+#define _MBSTRING_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#ifndef RC_INVOKED
+
+#define __need_size_t
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef        __STRICT_ANSI__
+
+/* character classification */
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbcalnum (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbcalpha (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbcdigit (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbcgraph (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbcprint (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbcpunct (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbcspace (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbclower (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbcupper (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbclegal (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbcsymbol (unsigned int);
+
+
+/* also in mbctype.h */
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbblead (unsigned int );
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbbtrail (unsigned int );
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbslead ( const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbstrail ( const unsigned char*, const unsigned char*);
+
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _mbctolower (unsigned int);
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _mbctoupper (unsigned int);
+
+_CRTIMP void __cdecl __MINGW_NOTHROW _mbccpy (unsigned char*, const unsigned char*);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW _mbclen (const unsigned char*);
+
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _mbbtombc (unsigned int);
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _mbctombb (unsigned int);
+
+/* Return value constants for these are defined in mbctype.h.  */
+_CRTIMP int __cdecl __MINGW_NOTHROW _mbbtype (unsigned char, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _mbsbtype (const unsigned char*, size_t);
+
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbscpy (unsigned char*, const unsigned char*);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsncpy (unsigned char*, const unsigned char*, size_t);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsnbcpy (unsigned char*, const unsigned char*, size_t);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsset (unsigned char*, unsigned int);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsnset (unsigned char*, unsigned int, size_t);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsnbset (unsigned char*, unsigned int, size_t);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsdup (const unsigned char*);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsrev (unsigned char*);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbscat (unsigned char*, const unsigned char*);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsncat (unsigned char*, const unsigned char*, size_t);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsnbcat (unsigned char*, const unsigned char*, size_t);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW _mbslen (const unsigned char*);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW _mbsnbcnt (const unsigned char*, size_t);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW _mbsnccnt (const unsigned char*, size_t);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbschr (const unsigned char*, unsigned int);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsrchr (const unsigned char*, unsigned int);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW _mbsspn (const unsigned char*, const unsigned char*);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW _mbscspn (const unsigned char*, const unsigned char*);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsspnp (const unsigned char*, const unsigned char*);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbspbrk (const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _mbscmp (const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _mbsicmp (const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _mbsncmp (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW _mbsnicmp (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW _mbsnbcmp (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW _mbsnbicmp (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW _mbscoll (const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _mbsicoll (const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _mbsncoll (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW _mbsnicoll (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW _mbsnbcoll (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW _mbsnbicoll (const unsigned char*, const unsigned char*, size_t);
+
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsinc (const unsigned char*);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsninc (const unsigned char*, size_t);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsdec (const unsigned char*, const unsigned char*);
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _mbsnextc  (const unsigned char*);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbslwr (unsigned char*);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbsupr (unsigned char*);
+_CRTIMP unsigned char* __cdecl __MINGW_NOTHROW  _mbstok (unsigned char*, const unsigned char*);
+
+/* Kanji */
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbchira (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbckata (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbcl0 (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbcl1 (unsigned int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _ismbcl2 (unsigned int);
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _mbcjistojms (unsigned int);
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _mbcjmstojis (unsigned int);
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _mbctohira (unsigned int);
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _mbctokata (unsigned int);
+
+#endif /* Not strict ANSI */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+#endif /* Not _MBSTRING_H_ */
+
+
+
diff --git a/include/crt/mem.h b/include/crt/mem.h
new file mode 100644 (file)
index 0000000..451de0c
--- /dev/null
@@ -0,0 +1,6 @@
+/*
+ * This file is part of the Mingw32 package.
+ *
+ * mem.h maps to string.h
+ */
+#include <string.h>
diff --git a/include/crt/memory.h b/include/crt/memory.h
new file mode 100644 (file)
index 0000000..9ba65cf
--- /dev/null
@@ -0,0 +1,7 @@
+/*
+ * This file is part of the Mingw32 package.
+ *
+ * memory.h maps to the standard string.h header.
+ */
+
+#include       <string.h>
diff --git a/include/crt/mingw32/float.h b/include/crt/mingw32/float.h
new file mode 100644 (file)
index 0000000..3cdf7c8
--- /dev/null
@@ -0,0 +1,162 @@
+/* Copyright (C) 2002 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GCC 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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, if you include this header file into source
+   files compiled by GCC, this header file does not by itself cause
+   the resulting executable to be covered by the GNU General Public
+   License.  This exception does not however invalidate any other
+   reasons why the executable file might be covered by the GNU General
+   Public License.  */
+
+/*
+ * ISO C Standard:  5.2.4.2.2  Characteristics of floating types <float.h>
+ */
+
+#ifndef _FLOAT_H___
+#define _FLOAT_H___
+
+/* Radix of exponent representation, b. */
+#undef FLT_RADIX
+#define FLT_RADIX      __FLT_RADIX__
+
+/* Number of base-FLT_RADIX digits in the significand, p.  */
+#undef FLT_MANT_DIG
+#undef DBL_MANT_DIG
+#undef LDBL_MANT_DIG
+#define FLT_MANT_DIG   __FLT_MANT_DIG__
+#define DBL_MANT_DIG   __DBL_MANT_DIG__
+#define LDBL_MANT_DIG  __LDBL_MANT_DIG__
+
+/* Number of decimal digits, q, such that any floating-point number with q
+   decimal digits can be rounded into a floating-point number with p radix b
+   digits and back again without change to the q decimal digits,
+
+       p * log10(b)                    if b is a power of 10
+       floor((p - 1) * log10(b))       otherwise
+*/
+#undef FLT_DIG
+#undef DBL_DIG
+#undef LDBL_DIG
+#define FLT_DIG                __FLT_DIG__
+#define DBL_DIG                __DBL_DIG__
+#define LDBL_DIG       __LDBL_DIG__
+
+/* Minimum int x such that FLT_RADIX**(x-1) is a normalized float, emin */
+#undef FLT_MIN_EXP
+#undef DBL_MIN_EXP
+#undef LDBL_MIN_EXP
+#define FLT_MIN_EXP    __FLT_MIN_EXP__
+#define DBL_MIN_EXP    __DBL_MIN_EXP__
+#define LDBL_MIN_EXP   __LDBL_MIN_EXP__
+
+/* Minimum negative integer such that 10 raised to that power is in the
+   range of normalized floating-point numbers,
+
+       ceil(log10(b) * (emin - 1))
+*/
+#undef FLT_MIN_10_EXP
+#undef DBL_MIN_10_EXP
+#undef LDBL_MIN_10_EXP
+#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__
+#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__
+#define LDBL_MIN_10_EXP        __LDBL_MIN_10_EXP__
+
+/* Maximum int x such that FLT_RADIX**(x-1) is a representable float, emax.  */
+#undef FLT_MAX_EXP
+#undef DBL_MAX_EXP
+#undef LDBL_MAX_EXP
+#define FLT_MAX_EXP    __FLT_MAX_EXP__
+#define DBL_MAX_EXP    __DBL_MAX_EXP__
+#define LDBL_MAX_EXP   __LDBL_MAX_EXP__
+
+/* Maximum integer such that 10 raised to that power is in the range of
+   representable finite floating-point numbers,
+
+       floor(log10((1 - b**-p) * b**emax))
+*/
+#undef FLT_MAX_10_EXP
+#undef DBL_MAX_10_EXP
+#undef LDBL_MAX_10_EXP
+#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__
+#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__
+#define LDBL_MAX_10_EXP        __LDBL_MAX_10_EXP__
+
+/* Maximum representable finite floating-point number,
+
+       (1 - b**-p) * b**emax
+*/
+#undef FLT_MAX
+#undef DBL_MAX
+#undef LDBL_MAX
+#define FLT_MAX                __FLT_MAX__
+#define DBL_MAX                __DBL_MAX__
+#define LDBL_MAX       __LDBL_MAX__
+
+/* The difference between 1 and the least value greater than 1 that is
+   representable in the given floating point type, b**1-p.  */
+#undef FLT_EPSILON
+#undef DBL_EPSILON
+#undef LDBL_EPSILON
+#define FLT_EPSILON    __FLT_EPSILON__
+#define DBL_EPSILON    __DBL_EPSILON__
+#define LDBL_EPSILON   __LDBL_EPSILON__
+
+/* Minimum normalized positive floating-point number, b**(emin - 1).  */
+#undef FLT_MIN
+#undef DBL_MIN
+#undef LDBL_MIN
+#define FLT_MIN                __FLT_MIN__
+#define DBL_MIN                __DBL_MIN__
+#define LDBL_MIN       __LDBL_MIN__
+
+/* Addition rounds to 0: zero, 1: nearest, 2: +inf, 3: -inf, -1: unknown.  */
+/* ??? This is supposed to change with calls to fesetround in <fenv.h>.  */
+#undef FLT_ROUNDS
+#define FLT_ROUNDS 1
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+/* The floating-point expression evaluation method.
+        -1  indeterminate
+         0  evaluate all operations and constants just to the range and
+            precision of the type
+         1  evaluate operations and constants of type float and double
+            to the range and precision of the double type, evaluate
+            long double operations and constants to the range and
+            precision of the long double type
+         2  evaluate all operations and constants to the range and
+            precision of the long double type
+
+   ??? This ought to change with the setting of the fp control word;
+   the value provided by the compiler assumes the widest setting.  */
+#undef FLT_EVAL_METHOD
+#define FLT_EVAL_METHOD        __FLT_EVAL_METHOD__
+
+/* Number of decimal digits, n, such that any floating-point number in the
+   widest supported floating type with pmax radix b digits can be rounded
+   to a floating-point number with n decimal digits and back again without
+   change to the value,
+
+       pmax * log10(b)                 if b is a power of 10
+       ceil(1 + pmax * log10(b))       otherwise
+*/
+#undef DECIMAL_DIG
+#define DECIMAL_DIG    __DECIMAL_DIG__
+
+#endif /* C99 */
+#endif /* _FLOAT_H___ */
diff --git a/include/crt/mingw32/stdarg.h b/include/crt/mingw32/stdarg.h
new file mode 100644 (file)
index 0000000..5545055
--- /dev/null
@@ -0,0 +1,133 @@
+/* Copyright (C) 1989, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GCC 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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, if you include this header file into source
+   files compiled by GCC, this header file does not by itself cause
+   the resulting executable to be covered by the GNU General Public
+   License.  This exception does not however invalidate any other
+   reasons why the executable file might be covered by the GNU General
+   Public License.  */
+
+/*
+ * ISO C Standard:  7.15  Variable arguments  <stdarg.h>
+ */
+
+#ifndef _STDARG_H
+#ifndef _ANSI_STDARG_H_
+#ifndef __need___va_list
+#define _STDARG_H
+#define _ANSI_STDARG_H_
+#endif /* not __need___va_list */
+#undef __need___va_list
+
+/* Define __gnuc_va_list.  */
+
+#ifndef __GNUC_VA_LIST
+#define __GNUC_VA_LIST
+typedef __builtin_va_list __gnuc_va_list;
+#endif
+
+/* Define the standard macros for the user,
+   if this invocation was from the user program.  */
+#ifdef _STDARG_H
+
+#define va_start(v,l)  __builtin_va_start(v,l)
+#define va_end(v)      __builtin_va_end(v)
+#define va_arg(v,l)    __builtin_va_arg(v,l)
+#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L
+#define va_copy(d,s)   __builtin_va_copy(d,s)
+#endif
+#define __va_copy(d,s) __builtin_va_copy(d,s)
+
+/* Define va_list, if desired, from __gnuc_va_list. */
+/* We deliberately do not define va_list when called from
+   stdio.h, because ANSI C says that stdio.h is not supposed to define
+   va_list.  stdio.h needs to have access to that data type,
+   but must not use that name.  It should use the name __gnuc_va_list,
+   which is safe because it is reserved for the implementation.  */
+
+#ifdef _HIDDEN_VA_LIST  /* On OSF1, this means varargs.h is "half-loaded".  */
+#undef _VA_LIST
+#endif
+
+#ifdef _BSD_VA_LIST
+#undef _BSD_VA_LIST
+#endif
+
+#if defined(__svr4__) || (defined(_SCO_DS) && !defined(__VA_LIST))
+/* SVR4.2 uses _VA_LIST for an internal alias for va_list,
+   so we must avoid testing it and setting it here.
+   SVR4 uses _VA_LIST as a flag in stdarg.h, but we should
+   have no conflict with that.  */
+#ifndef _VA_LIST_
+#define _VA_LIST_
+#ifdef __i860__
+#ifndef _VA_LIST
+#define _VA_LIST va_list
+#endif
+#endif /* __i860__ */
+typedef __gnuc_va_list va_list;
+#ifdef _SCO_DS
+#define __VA_LIST
+#endif
+#endif /* _VA_LIST_ */
+#else /* not __svr4__ || _SCO_DS */
+
+/* The macro _VA_LIST_ is the same thing used by this file in Ultrix.
+   But on BSD NET2 we must not test or define or undef it.
+   (Note that the comments in NET 2's ansi.h
+   are incorrect for _VA_LIST_--see stdio.h!)  */
+#if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__) || defined(WINNT)
+/* The macro _VA_LIST_DEFINED is used in Windows NT 3.5  */
+#ifndef _VA_LIST_DEFINED
+/* The macro _VA_LIST is used in SCO Unix 3.2.  */
+#ifndef _VA_LIST
+/* The macro _VA_LIST_T_H is used in the Bull dpx2  */
+#ifndef _VA_LIST_T_H
+/* The macro __va_list__ is used by BeOS.  */
+#ifndef __va_list__
+typedef __gnuc_va_list va_list;
+#endif /* not __va_list__ */
+#endif /* not _VA_LIST_T_H */
+#endif /* not _VA_LIST */
+#endif /* not _VA_LIST_DEFINED */
+#if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__))
+#define _VA_LIST_
+#endif
+#ifndef _VA_LIST
+#define _VA_LIST
+#endif
+#ifndef _VA_LIST_DEFINED
+#define _VA_LIST_DEFINED
+#endif
+#ifndef _VA_LIST_T_H
+#define _VA_LIST_T_H
+#endif
+#ifndef __va_list__
+#define __va_list__
+#endif
+
+#endif /* not _VA_LIST_, except on certain systems */
+
+#endif /* not __svr4__ */
+
+#endif /* _STDARG_H */
+
+#endif /* not _ANSI_STDARG_H_ */
+#endif /* not _STDARG_H */
diff --git a/include/crt/mingw32/stdbool.h b/include/crt/mingw32/stdbool.h
new file mode 100644 (file)
index 0000000..b36e650
--- /dev/null
@@ -0,0 +1,53 @@
+/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GCC 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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, if you include this header file into source
+   files compiled by GCC, this header file does not by itself cause
+   the resulting executable to be covered by the GNU General Public
+   License.  This exception does not however invalidate any other
+   reasons why the executable file might be covered by the GNU General
+   Public License.  */
+
+/*
+ * ISO C Standard:  7.16  Boolean type and values  <stdbool.h>
+ */
+
+#ifndef _STDBOOL_H
+#define _STDBOOL_H
+
+#ifndef __cplusplus
+
+#define bool   _Bool
+#define true   1
+#define false  0
+
+#else /* __cplusplus */
+
+/* Supporting <stdbool.h> in C++ is a GCC extension.  */
+#define _Bool  bool
+#define bool   bool
+#define false  false
+#define true   true
+
+#endif /* __cplusplus */
+
+/* Signal that all the definitions are present.  */
+#define __bool_true_false_are_defined  1
+
+#endif /* stdbool.h */
diff --git a/include/crt/mingw32/stddef.h b/include/crt/mingw32/stddef.h
new file mode 100644 (file)
index 0000000..8102a5f
--- /dev/null
@@ -0,0 +1,419 @@
+/* Copyright (C) 1989, 1997, 1998, 1999, 2000, 2002, 2004
+   Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GCC 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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, if you include this header file into source
+   files compiled by GCC, this header file does not by itself cause
+   the resulting executable to be covered by the GNU General Public
+   License.  This exception does not however invalidate any other
+   reasons why the executable file might be covered by the GNU General
+   Public License.  */
+
+/*
+ * ISO C Standard:  7.17  Common definitions  <stddef.h>
+ */
+#if (!defined(_STDDEF_H) && !defined(_STDDEF_H_) && !defined(_ANSI_STDDEF_H) \
+     && !defined(__STDDEF_H__)) \
+    || defined(__need_wchar_t) || defined(__need_size_t) \
+    || defined(__need_ptrdiff_t) || defined(__need_NULL) \
+    || defined(__need_wint_t)
+
+/* Any one of these symbols __need_* means that GNU libc
+   wants us just to define one data type.  So don't define
+   the symbols that indicate this file's entire job has been done.  */
+#if (!defined(__need_wchar_t) && !defined(__need_size_t)       \
+     && !defined(__need_ptrdiff_t) && !defined(__need_NULL)    \
+     && !defined(__need_wint_t))
+#define _STDDEF_H
+#define _STDDEF_H_
+/* snaroff@next.com says the NeXT needs this.  */
+#define _ANSI_STDDEF_H
+/* Irix 5.1 needs this.  */
+#define __STDDEF_H__
+#endif
+
+#ifndef __sys_stdtypes_h
+/* This avoids lossage on SunOS but only if stdtypes.h comes first.
+   There's no way to win with the other order!  Sun lossage.  */
+
+/* On 4.3bsd-net2, make sure ansi.h is included, so we have
+   one less case to deal with in the following.  */
+#if defined (__BSD_NET2__) || defined (____386BSD____) || (defined (__FreeBSD__) && (__FreeBSD__ < 5)) || defined(__NetBSD__)
+#include <machine/ansi.h>
+#endif
+/* On FreeBSD 5, machine/ansi.h does not exist anymore... */
+#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
+#include <sys/_types.h>
+#endif
+
+/* In 4.3bsd-net2, machine/ansi.h defines these symbols, which are
+   defined if the corresponding type is *not* defined.
+   FreeBSD-2.1 defines _MACHINE_ANSI_H_ instead of _ANSI_H_ */
+#if defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_)
+#if !defined(_SIZE_T_) && !defined(_BSD_SIZE_T_)
+#define _SIZE_T
+#endif
+#if !defined(_PTRDIFF_T_) && !defined(_BSD_PTRDIFF_T_)
+#define _PTRDIFF_T
+#endif
+/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
+   instead of _WCHAR_T_. */
+#if !defined(_WCHAR_T_) && !defined(_BSD_WCHAR_T_)
+#ifndef _BSD_WCHAR_T_
+#define _WCHAR_T
+#endif
+#endif
+/* Undef _FOO_T_ if we are supposed to define foo_t.  */
+#if defined (__need_ptrdiff_t) || defined (_STDDEF_H_)
+#undef _PTRDIFF_T_
+#undef _BSD_PTRDIFF_T_
+#endif
+#if defined (__need_size_t) || defined (_STDDEF_H_)
+#undef _SIZE_T_
+#undef _BSD_SIZE_T_
+#endif
+#if defined (__need_wchar_t) || defined (_STDDEF_H_)
+#undef _WCHAR_T_
+#undef _BSD_WCHAR_T_
+#endif
+#endif /* defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) */
+
+/* Sequent's header files use _PTRDIFF_T_ in some conflicting way.
+   Just ignore it.  */
+#if defined (__sequent__) && defined (_PTRDIFF_T_)
+#undef _PTRDIFF_T_
+#endif
+
+/* On VxWorks, <type/vxTypesBase.h> may have defined macros like
+   _TYPE_size_t which will typedef size_t.  fixincludes patched the
+   vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is
+   not defined, and so that defining this macro defines _GCC_SIZE_T.
+   If we find that the macros are still defined at this point, we must
+   invoke them so that the type is defined as expected.  */
+#if defined (_TYPE_ptrdiff_t) && (defined (__need_ptrdiff_t) || defined (_STDDEF_H_))
+_TYPE_ptrdiff_t;
+#undef _TYPE_ptrdiff_t
+#endif
+#if defined (_TYPE_size_t) && (defined (__need_size_t) || defined (_STDDEF_H_))
+_TYPE_size_t;
+#undef _TYPE_size_t
+#endif
+#if defined (_TYPE_wchar_t) && (defined (__need_wchar_t) || defined (_STDDEF_H_))
+_TYPE_wchar_t;
+#undef _TYPE_wchar_t
+#endif
+
+/* In case nobody has defined these types, but we aren't running under
+   GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE_TYPE__, and
+   __WCHAR_TYPE__ have reasonable values.  This can happen if the
+   parts of GCC is compiled by an older compiler, that actually
+   include gstddef.h, such as collect2.  */
+
+/* Signed type of difference of two pointers.  */
+
+/* Define this type if we are doing the whole job,
+   or if we want this type in particular.  */
+#if defined (_STDDEF_H) || defined (__need_ptrdiff_t)
+#ifndef _PTRDIFF_T     /* in case <sys/types.h> has defined it. */
+#ifndef _T_PTRDIFF_
+#ifndef _T_PTRDIFF
+#ifndef __PTRDIFF_T
+#ifndef _PTRDIFF_T_
+#ifndef _BSD_PTRDIFF_T_
+#ifndef ___int_ptrdiff_t_h
+#ifndef _GCC_PTRDIFF_T
+#define _PTRDIFF_T
+#define _T_PTRDIFF_
+#define _T_PTRDIFF
+#define __PTRDIFF_T
+#define _PTRDIFF_T_
+#define _BSD_PTRDIFF_T_
+#define ___int_ptrdiff_t_h
+#define _GCC_PTRDIFF_T
+#ifndef __PTRDIFF_TYPE__
+#define __PTRDIFF_TYPE__ long int
+#endif
+typedef __PTRDIFF_TYPE__ ptrdiff_t;
+#endif /* _GCC_PTRDIFF_T */
+#endif /* ___int_ptrdiff_t_h */
+#endif /* _BSD_PTRDIFF_T_ */
+#endif /* _PTRDIFF_T_ */
+#endif /* __PTRDIFF_T */
+#endif /* _T_PTRDIFF */
+#endif /* _T_PTRDIFF_ */
+#endif /* _PTRDIFF_T */
+
+/* If this symbol has done its job, get rid of it.  */
+#undef __need_ptrdiff_t
+
+#endif /* _STDDEF_H or __need_ptrdiff_t.  */
+
+/* Unsigned type of `sizeof' something.  */
+
+/* Define this type if we are doing the whole job,
+   or if we want this type in particular.  */
+#if defined (_STDDEF_H) || defined (__need_size_t)
+#ifndef __size_t__     /* BeOS */
+#ifndef __SIZE_T__     /* Cray Unicos/Mk */
+#ifndef _SIZE_T        /* in case <sys/types.h> has defined it. */
+#ifndef _SYS_SIZE_T_H
+#ifndef _T_SIZE_
+#ifndef _T_SIZE
+#ifndef __SIZE_T
+#ifndef _SIZE_T_
+#ifndef _BSD_SIZE_T_
+#ifndef _SIZE_T_DEFINED_
+#ifndef _SIZE_T_DEFINED
+#ifndef _BSD_SIZE_T_DEFINED_   /* Darwin */
+#ifndef _SIZE_T_DECLARED       /* FreeBSD 5 */
+#ifndef ___int_size_t_h
+#ifndef _GCC_SIZE_T
+#ifndef _SIZET_
+#ifndef __size_t
+#define __size_t__     /* BeOS */
+#define __SIZE_T__     /* Cray Unicos/Mk */
+#define _SIZE_T
+#define _SYS_SIZE_T_H
+#define _T_SIZE_
+#define _T_SIZE
+#define __SIZE_T
+#define _SIZE_T_
+#define _BSD_SIZE_T_
+#define _SIZE_T_DEFINED_
+#define _SIZE_T_DEFINED
+#define _BSD_SIZE_T_DEFINED_   /* Darwin */
+#define _SIZE_T_DECLARED       /* FreeBSD 5 */
+#define ___int_size_t_h
+#define _GCC_SIZE_T
+#define _SIZET_
+#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
+/* __size_t is a typedef on FreeBSD 5!, must not trash it. */
+#else
+#define __size_t
+#endif
+#ifndef __SIZE_TYPE__
+#define __SIZE_TYPE__ long unsigned int
+#endif
+#if !(defined (__GNUG__) && defined (size_t))
+typedef __SIZE_TYPE__ size_t;
+#ifdef __BEOS__
+typedef long ssize_t;
+#endif /* __BEOS__ */
+#endif /* !(defined (__GNUG__) && defined (size_t)) */
+#endif /* __size_t */
+#endif /* _SIZET_ */
+#endif /* _GCC_SIZE_T */
+#endif /* ___int_size_t_h */
+#endif /* _SIZE_T_DECLARED */
+#endif /* _BSD_SIZE_T_DEFINED_ */
+#endif /* _SIZE_T_DEFINED */
+#endif /* _SIZE_T_DEFINED_ */
+#endif /* _BSD_SIZE_T_ */
+#endif /* _SIZE_T_ */
+#endif /* __SIZE_T */
+#endif /* _T_SIZE */
+#endif /* _T_SIZE_ */
+#endif /* _SYS_SIZE_T_H */
+#endif /* _SIZE_T */
+#endif /* __SIZE_T__ */
+#endif /* __size_t__ */
+#undef __need_size_t
+#endif /* _STDDEF_H or __need_size_t.  */
+
+
+/* Wide character type.
+   Locale-writers should change this as necessary to
+   be big enough to hold unique values not between 0 and 127,
+   and not (wchar_t) -1, for each defined multibyte character.  */
+
+/* Define this type if we are doing the whole job,
+   or if we want this type in particular.  */
+#if defined (_STDDEF_H) || defined (__need_wchar_t)
+#ifndef __wchar_t__    /* BeOS */
+#ifndef __WCHAR_T__    /* Cray Unicos/Mk */
+#ifndef _WCHAR_T
+#ifndef _T_WCHAR_
+#ifndef _T_WCHAR
+#ifndef __WCHAR_T
+#ifndef _WCHAR_T_
+#ifndef _BSD_WCHAR_T_
+#ifndef _BSD_WCHAR_T_DEFINED_    /* Darwin */
+#ifndef _BSD_RUNE_T_DEFINED_   /* Darwin */
+#ifndef _WCHAR_T_DECLARED /* FreeBSD 5 */
+#ifndef _WCHAR_T_DEFINED_
+#ifndef _WCHAR_T_DEFINED
+#ifndef _WCHAR_T_H
+#ifndef ___int_wchar_t_h
+#ifndef __INT_WCHAR_T_H
+#ifndef _GCC_WCHAR_T
+#define __wchar_t__    /* BeOS */
+#define __WCHAR_T__    /* Cray Unicos/Mk */
+#define _WCHAR_T
+#define _T_WCHAR_
+#define _T_WCHAR
+#define __WCHAR_T
+#define _WCHAR_T_
+#define _BSD_WCHAR_T_
+#define _WCHAR_T_DEFINED_
+#define _WCHAR_T_DEFINED
+#define _WCHAR_T_H
+#define ___int_wchar_t_h
+#define __INT_WCHAR_T_H
+#define _GCC_WCHAR_T
+#define _WCHAR_T_DECLARED
+
+/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
+   instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other
+   symbols in the _FOO_T_ family, stays defined even after its
+   corresponding type is defined).  If we define wchar_t, then we
+   must undef _WCHAR_T_; for BSD/386 1.1 (and perhaps others), if
+   we undef _WCHAR_T_, then we must also define rune_t, since
+   headers like runetype.h assume that if machine/ansi.h is included,
+   and _BSD_WCHAR_T_ is not defined, then rune_t is available.
+   machine/ansi.h says, "Note that _WCHAR_T_ and _RUNE_T_ must be of
+   the same type." */
+#ifdef _BSD_WCHAR_T_
+#undef _BSD_WCHAR_T_
+#ifdef _BSD_RUNE_T_
+#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
+typedef _BSD_RUNE_T_ rune_t;
+#define _BSD_WCHAR_T_DEFINED_
+#define _BSD_RUNE_T_DEFINED_   /* Darwin */
+#if defined (__FreeBSD__) && (__FreeBSD__ < 5)
+/* Why is this file so hard to maintain properly?  In contrast to
+   the comment above regarding BSD/386 1.1, on FreeBSD for as long
+   as the symbol has existed, _BSD_RUNE_T_ must not stay defined or
+   redundant typedefs will occur when stdlib.h is included after this file. */
+#undef _BSD_RUNE_T_
+#endif
+#endif
+#endif
+#endif
+/* FreeBSD 5 can't be handled well using "traditional" logic above
+   since it no longer defines _BSD_RUNE_T_ yet still desires to export
+   rune_t in some cases... */
+#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
+#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
+#if __BSD_VISIBLE
+#ifndef _RUNE_T_DECLARED
+typedef __rune_t        rune_t;
+#define _RUNE_T_DECLARED
+#endif
+#endif
+#endif
+#endif
+
+#ifndef __WCHAR_TYPE__
+#define __WCHAR_TYPE__ int
+#endif
+#ifndef __cplusplus
+typedef __WCHAR_TYPE__ wchar_t;
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif /* _WCHAR_T_DECLARED */
+#endif /* _BSD_RUNE_T_DEFINED_ */
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif /* __WCHAR_T__ */
+#endif /* __wchar_t__ */
+#undef __need_wchar_t
+#endif /* _STDDEF_H or __need_wchar_t.  */
+
+#if defined (__need_wint_t)
+#ifndef _WINT_T
+#define _WINT_T
+
+#ifndef __WINT_TYPE__
+#define __WINT_TYPE__ unsigned int
+#endif
+typedef __WINT_TYPE__ wint_t;
+#endif
+#undef __need_wint_t
+#endif
+
+/*  In 4.3bsd-net2, leave these undefined to indicate that size_t, etc.
+    are already defined.  */
+/*  BSD/OS 3.1 and FreeBSD [23].x require the MACHINE_ANSI_H check here.  */
+#if defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_)
+/*  The references to _GCC_PTRDIFF_T_, _GCC_SIZE_T_, and _GCC_WCHAR_T_
+    are probably typos and should be removed before 2.8 is released.  */
+#ifdef _GCC_PTRDIFF_T_
+#undef _PTRDIFF_T_
+#undef _BSD_PTRDIFF_T_
+#endif
+#ifdef _GCC_SIZE_T_
+#undef _SIZE_T_
+#undef _BSD_SIZE_T_
+#endif
+#ifdef _GCC_WCHAR_T_
+#undef _WCHAR_T_
+#undef _BSD_WCHAR_T_
+#endif
+/*  The following ones are the real ones.  */
+#ifdef _GCC_PTRDIFF_T
+#undef _PTRDIFF_T_
+#undef _BSD_PTRDIFF_T_
+#endif
+#ifdef _GCC_SIZE_T
+#undef _SIZE_T_
+#undef _BSD_SIZE_T_
+#endif
+#ifdef _GCC_WCHAR_T
+#undef _WCHAR_T_
+#undef _BSD_WCHAR_T_
+#endif
+#endif /* _ANSI_H_ || _MACHINE_ANSI_H_ */
+
+#endif /* __sys_stdtypes_h */
+
+/* A null pointer constant.  */
+
+#if defined (_STDDEF_H) || defined (__need_NULL)
+#undef NULL            /* in case <stdio.h> has defined it. */
+#ifdef __GNUG__
+#define NULL __null
+#else   /* G++ */
+#ifndef __cplusplus
+#define NULL ((void *)0)
+#else   /* C++ */
+#define NULL 0
+#endif  /* C++ */
+#endif  /* G++ */
+#endif /* NULL not defined and <stddef.h> or need NULL.  */
+#undef __need_NULL
+
+#ifdef _STDDEF_H
+
+/* Offset of member MEMBER in a struct of type TYPE. */
+#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
+
+#endif /* _STDDEF_H was defined this time */
+
+#endif /* !_STDDEF_H && !_STDDEF_H_ && !_ANSI_STDDEF_H && !__STDDEF_H__
+         || __need_XXX was not defined before */
diff --git a/include/crt/process.h b/include/crt/process.h
new file mode 100644 (file)
index 0000000..0e679b6
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+ * process.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Function calls for spawning child processes.
+ *
+ */
+
+#ifndef        _PROCESS_H_
+#define        _PROCESS_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+/* Includes a definition of _pid_t and pid_t */
+#include <sys/types.h>
+
+/*
+ * Constants for cwait actions.
+ * Obsolete for Win32.
+ */
+#define        _WAIT_CHILD             0
+#define        _WAIT_GRANDCHILD        1
+
+#ifndef        _NO_OLDNAMES
+#define        WAIT_CHILD              _WAIT_CHILD
+#define        WAIT_GRANDCHILD         _WAIT_GRANDCHILD
+#endif /* Not _NO_OLDNAMES */
+
+/*
+ * Mode constants for spawn functions.
+ */
+#define        _P_WAIT         0
+#define        _P_NOWAIT       1
+#define        _P_OVERLAY      2
+#define        _OLD_P_OVERLAY  _P_OVERLAY
+#define        _P_NOWAITO      3
+#define        _P_DETACH       4
+
+#ifndef        _NO_OLDNAMES
+#define        P_WAIT          _P_WAIT
+#define        P_NOWAIT        _P_NOWAIT
+#define        P_OVERLAY       _P_OVERLAY
+#define        OLD_P_OVERLAY   _OLD_P_OVERLAY
+#define        P_NOWAITO       _P_NOWAITO
+#define        P_DETACH        _P_DETACH
+#endif /* Not _NO_OLDNAMES */
+
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_CRTIMP void __cdecl __MINGW_NOTHROW _cexit(void);
+_CRTIMP void __cdecl __MINGW_NOTHROW _c_exit(void);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _cwait (int*, _pid_t, int);
+
+_CRTIMP _pid_t __cdecl __MINGW_NOTHROW _getpid(void);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _execl     (const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW _execle    (const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW _execlp    (const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW _execlpe   (const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW _execv     (const char*, const char* const*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _execve    (const char*, const char* const*, const char* const*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _execvp    (const char*, const char* const*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _execvpe   (const char*, const char* const*, const char* const*);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _spawnl    (int, const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW _spawnle   (int, const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW _spawnlp   (int, const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW _spawnlpe  (int, const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW _spawnv    (int, const char*, const char* const*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _spawnve   (int, const char*, const char* const*, const char* const*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _spawnvp   (int, const char*, const char* const*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _spawnvpe  (int, const char*, const char* const*, const char* const*);
+
+
+/*
+ * The functions _beginthreadex and _endthreadex are not provided by CRTDLL.
+ * They are provided by MSVCRT.
+ *
+ * NOTE: Apparently _endthread calls CloseHandle on the handle of the thread,
+ * making for race conditions if you are not careful. Basically you have to
+ * make sure that no-one is going to do *anything* with the thread handle
+ * after the thread calls _endthread or returns from the thread function.
+ *
+ * NOTE: No old names for these functions. Use the underscore.
+ */
+_CRTIMP unsigned long __cdecl __MINGW_NOTHROW
+       _beginthread    (void (*)(void *), unsigned, void*);
+_CRTIMP void __cdecl __MINGW_NOTHROW _endthread        (void);
+
+#ifdef __MSVCRT__
+_CRTIMP unsigned long __cdecl __MINGW_NOTHROW
+       _beginthreadex  (void *, unsigned, unsigned (__stdcall *) (void *),
+                        void*, unsigned, unsigned*);
+_CRTIMP void __cdecl __MINGW_NOTHROW _endthreadex (unsigned);
+#endif
+
+
+#ifndef        _NO_OLDNAMES
+/*
+ * Functions without the leading underscore, for portability. These functions
+ * live in liboldnames.a.
+ */
+_CRTIMP int  __cdecl __MINGW_NOTHROW cwait (int*, pid_t, int);
+_CRTIMP pid_t __cdecl __MINGW_NOTHROW getpid (void);
+_CRTIMP int __cdecl __MINGW_NOTHROW execl (const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW execle (const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW execlp (const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW execlpe (const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW execv (const char*, const char* const*);
+_CRTIMP int __cdecl __MINGW_NOTHROW execve (const char*, const char* const*, const char* const*);
+_CRTIMP int __cdecl __MINGW_NOTHROW execvp (const char*, const char* const*);
+_CRTIMP int __cdecl __MINGW_NOTHROW execvpe (const char*, const char* const*, const char* const*);
+_CRTIMP int __cdecl __MINGW_NOTHROW spawnl (int, const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW spawnle (int, const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW spawnlp (int, const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW spawnlpe (int, const char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW spawnv (int, const char*, const char* const*);
+_CRTIMP int __cdecl __MINGW_NOTHROW spawnve (int, const char*, const char* const*, const char* const*);
+_CRTIMP int __cdecl __MINGW_NOTHROW spawnvp (int, const char*, const char* const*);
+_CRTIMP int __cdecl __MINGW_NOTHROW spawnvpe (int, const char*, const char* const*, const char* const*);
+#endif /* Not _NO_OLDNAMES */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* _PROCESS_H_ not defined */
diff --git a/include/crt/search.h b/include/crt/search.h
new file mode 100644 (file)
index 0000000..fc6ffc3
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ * search.h
+ *
+ * Functions for searching and sorting.
+ *
+ * This file is part of the Mingw32 package.
+ *
+ * Contributors:
+ *  Created by Danny Smith  <dannysmith@users.sourceforge.net>
+ *
+ *  THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ *  This source code is offered for use in the public domain. You may
+ *  use, modify or distribute it freely.
+ *
+ *  This code is distributed in the hope that it will be useful but
+ *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ *  DISCLAIMED. This includes but is not limited to warranties of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef _SEARCH_H_
+#define _SEARCH_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _SIZE_T_DEFINED
+typedef unsigned int size_t;
+#define _SIZE_T_DEFINED
+#endif
+
+/* bsearch and qsort are also declared in stdlib.h */
+_CRTIMP void* __cdecl bsearch (const void*, const void*, size_t, size_t,
+                              int (*)(const void*, const void*));
+_CRTIMP void __cdecl qsort (void*, size_t, size_t,
+                           int (*)(const void*, const void*));
+
+_CRTIMP void* __cdecl _lfind (const void*, const void*, unsigned int*,
+                             unsigned int, int (*)(const void*, const void*));
+_CRTIMP void* __cdecl _lsearch (const void*, void*, unsigned int*, unsigned int,
+                               int (*)(const void*, const void*));
+/*
+Documentation for these POSIX definitions and prototypes can be found in 
+The Open Group Base Specifications Issue 6
+IEEE Std 1003.1, 2004 Edition.
+eg:  http://www.opengroup.org/onlinepubs/009695399/functions/twalk.html
+*/
+
+
+typedef struct entry {
+       char *key;
+       void *data;
+} ENTRY;
+
+typedef enum {
+       FIND,
+       ENTER
+} ACTION;
+
+typedef enum {
+       preorder,
+       postorder,
+       endorder,
+       leaf
+} VISIT;
+
+#ifdef _SEARCH_PRIVATE
+typedef struct node {
+       char         *key;
+       struct node  *llink, *rlink;
+} node_t;
+#endif
+
+void * __cdecl tdelete (const void * __restrict__, void ** __restrict__,
+                       int (*)(const void *, const void *))
+                       __MINGW_ATTRIB_NONNULL (1)  __MINGW_ATTRIB_NONNULL (3);
+void * __cdecl tfind (const void *, void * const *,
+                     int (*)(const void *, const void *))
+                     __MINGW_ATTRIB_NONNULL (1)  __MINGW_ATTRIB_NONNULL (3);
+void * __cdecl tsearch (const void *, void **, 
+                       int (*)(const void *, const void *))
+                       __MINGW_ATTRIB_NONNULL (1)  __MINGW_ATTRIB_NONNULL (3);
+void __cdecl twalk (const void *, void (*)(const void *, VISIT, int));
+
+#ifndef        _NO_OLDNAMES
+_CRTIMP void* __cdecl lfind (const void*, const void*, unsigned int*,
+                            unsigned int, int (*)(const void*, const void*));
+_CRTIMP void* __cdecl lsearch (const void*, void*, unsigned int*, unsigned int,
+                              int (*)(const void*, const void*));
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* RC_INVOKED */
+
+#endif /*  _SEARCH_H_ */
diff --git a/include/crt/setjmp.h b/include/crt/setjmp.h
new file mode 100644 (file)
index 0000000..f83e1c0
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * setjmp.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Declarations supporting setjmp and longjump, a method for avoiding
+ * the normal function call return sequence. (Bleah!)
+ *
+ */
+
+#ifndef _SETJMP_H_
+#define _SETJMP_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The buffer used by setjmp to store the information used by longjmp
+ * to perform it's evil goto-like work. The size of this buffer was
+ * determined through experimentation; it's contents are a mystery.
+ * NOTE: This was determined on an i386 (actually a Pentium). The
+ *       contents could be different on an Alpha or something else.
+ */
+#define _JBLEN 16
+#define _JBTYPE int
+typedef _JBTYPE jmp_buf[_JBLEN];
+
+/*
+ * The function provided by CRTDLL which appears to do the actual work
+ * of setjmp.
+ */
+_CRTIMP int __cdecl __MINGW_NOTHROW _setjmp (jmp_buf);
+
+#define        setjmp(x)       _setjmp(x)
+
+/*
+ * Return to the last setjmp call and act as if setjmp had returned
+ * nVal (which had better be non-zero!).
+ */
+_CRTIMP void __cdecl __MINGW_NOTHROW longjmp (jmp_buf, int) __MINGW_ATTRIB_NORETURN;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _SETJMP_H_ */
+
+
diff --git a/include/crt/share.h b/include/crt/share.h
new file mode 100644 (file)
index 0000000..09a54ad
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * share.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Constants for file sharing functions.
+ *
+ */
+
+#ifndef        _SHARE_H_
+#define        _SHARE_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define _SH_COMPAT     0x00    /* Compatibility */
+#define        _SH_DENYRW      0x10    /* Deny read/write */
+#define        _SH_DENYWR      0x20    /* Deny write */
+#define        _SH_DENYRD      0x30    /* Deny read */
+#define        _SH_DENYNO      0x40    /* Deny nothing */
+
+#ifndef _NO_OLDNAMES
+
+/* Non ANSI names */
+#define SH_DENYRW _SH_DENYRW
+#define SH_DENYWR _SH_DENYWR
+#define SH_DENYRD _SH_DENYRD
+#define SH_DENYNO _SH_DENYNO
+
+#endif /* Not _NO_OLDNAMES */
+
+#endif /* Not _SHARE_H_ */
diff --git a/include/crt/signal.h b/include/crt/signal.h
new file mode 100644 (file)
index 0000000..18a75e3
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * signal.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * A way to set handlers for exceptional conditions (also known as signals).
+ *
+ */
+
+#ifndef        _SIGNAL_H_
+#define        _SIGNAL_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+/*
+ * The actual signal values. Using other values with signal
+ * produces a SIG_ERR return value.
+ *
+ * NOTE: SIGINT is produced when the user presses Ctrl-C.
+ *       SIGILL has not been tested.
+ *       SIGFPE doesn't seem to work?
+ *       SIGSEGV does not catch writing to a NULL pointer (that shuts down
+ *               your app; can you say "segmentation violation core dump"?).
+ *       SIGTERM comes from what kind of termination request exactly?
+ *       SIGBREAK is indeed produced by pressing Ctrl-Break.
+ *       SIGABRT is produced by calling abort.
+ * TODO: The above results may be related to not installing an appropriate
+ *       structured exception handling frame. Results may be better if I ever
+ *       manage to get the SEH stuff down.
+ */
+#define        SIGINT          2       /* Interactive attention */
+#define        SIGILL          4       /* Illegal instruction */
+#define        SIGFPE          8       /* Floating point error */
+#define        SIGSEGV         11      /* Segmentation violation */
+#define        SIGTERM         15      /* Termination request */
+#define SIGBREAK       21      /* Control-break */
+#define        SIGABRT         22      /* Abnormal termination (abort) */
+
+#define NSIG 23     /* maximum signal number + 1 */
+
+#ifndef        RC_INVOKED
+
+#ifndef _SIG_ATOMIC_T_DEFINED
+typedef int sig_atomic_t;
+#define _SIG_ATOMIC_T_DEFINED
+#endif
+
+/*
+ * The prototypes (below) are the easy part. The hard part is figuring
+ * out what signals are available and what numbers they are assigned
+ * along with appropriate values of SIG_DFL and SIG_IGN.
+ */
+
+/*
+ * A pointer to a signal handler function. A signal handler takes a
+ * single int, which is the signal it handles.
+ */
+typedef        void (*__p_sig_fn_t)(int);
+
+/*
+ * These are special values of signal handler pointers which are
+ * used to send a signal to the default handler (SIG_DFL), ignore
+ * the signal (SIG_IGN), indicate an error return (SIG_ERR),
+ * get an error (SIG_SGE), or acknowledge (SIG_ACK).
+ */
+#define        SIG_DFL ((__p_sig_fn_t) 0)
+#define        SIG_IGN ((__p_sig_fn_t) 1)
+#define        SIG_ERR ((__p_sig_fn_t) -1)
+#define SIG_SGE ((__p_sig_fn_t) 3)
+#define SIG_ACK ((__p_sig_fn_t) 4)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Call signal to set the signal handler for signal sig to the
+ * function pointed to by handler. Returns a pointer to the
+ * previous handler, or SIG_ERR if an error occurs. Initially
+ * unhandled signals defined above will return SIG_DFL.
+ */
+_CRTIMP __p_sig_fn_t __cdecl __MINGW_NOTHROW   signal(int, __p_sig_fn_t);
+
+/*
+ * Raise the signal indicated by sig. Returns non-zero on success.
+ */
+_CRTIMP int __cdecl __MINGW_NOTHROW    raise (int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _SIGNAL_H_ */
+
+
diff --git a/include/crt/stdint.h b/include/crt/stdint.h
new file mode 100644 (file)
index 0000000..57db989
--- /dev/null
@@ -0,0 +1,206 @@
+/* ISO C9x  7.18  Integer types <stdint.h>
+ * Based on ISO/IEC SC22/WG14 9899 Committee draft (SC22 N2794)
+ *
+ *  THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ *  Contributor: Danny Smith <danny_r_smith_2001@yahoo.co.nz>
+ *
+ *  This source code is offered for use in the public domain. You may
+ *  use, modify or distribute it freely.
+ *
+ *  This code is distributed in the hope that it will be useful but
+ *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ *  DISCLAIMED. This includes but is not limited to warranties of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ *  Date: 2000-12-02
+ */
+
+
+#ifndef _STDINT_H
+#define _STDINT_H
+#define __need_wint_t
+#define __need_wchar_t
+#include <stddef.h>
+
+/* 7.18.1.1  Exact-width integer types */
+typedef signed char int8_t;
+typedef unsigned char   uint8_t;
+typedef short  int16_t;
+typedef unsigned short  uint16_t;
+typedef int  int32_t;
+typedef unsigned   uint32_t;
+typedef long long  int64_t;
+typedef unsigned long long   uint64_t;
+
+/* 7.18.1.2  Minimum-width integer types */
+typedef signed char int_least8_t;
+typedef unsigned char   uint_least8_t;
+typedef short  int_least16_t;
+typedef unsigned short  uint_least16_t;
+typedef int  int_least32_t;
+typedef unsigned   uint_least32_t;
+typedef long long  int_least64_t;
+typedef unsigned long long   uint_least64_t;
+
+/*  7.18.1.3  Fastest minimum-width integer types 
+ *  Not actually guaranteed to be fastest for all purposes
+ *  Here we use the exact-width types for 8 and 16-bit ints. 
+ */
+typedef char int_fast8_t;
+typedef unsigned char uint_fast8_t;
+typedef short  int_fast16_t;
+typedef unsigned short  uint_fast16_t;
+typedef int  int_fast32_t;
+typedef unsigned  int  uint_fast32_t;
+typedef long long  int_fast64_t;
+typedef unsigned long long   uint_fast64_t;
+
+/* 7.18.1.4  Integer types capable of holding object pointers */
+
+#ifndef _INTPTR_T_DEFINED
+#define _INTPTR_T_DEFINED
+#ifdef _WIN64
+  typedef __int64 intptr_t;
+#else
+  typedef int intptr_t;
+#endif
+#endif
+
+#ifndef _UINTPTR_T_DEFINED
+#define _UINTPTR_T_DEFINED
+#ifdef _WIN64
+  typedef unsigned __int64 uintptr_t;
+#else
+  typedef unsigned int uintptr_t;
+#endif
+#endif
+
+/* 7.18.1.5  Greatest-width integer types */
+typedef long long  intmax_t;
+typedef unsigned long long uintmax_t;
+
+/* 7.18.2  Limits of specified-width integer types */
+#if !defined ( __cplusplus) || defined (__STDC_LIMIT_MACROS)
+
+/* 7.18.2.1  Limits of exact-width integer types */
+#define INT8_MIN (-128) 
+#define INT16_MIN (-32768)
+#define INT32_MIN (-2147483647 - 1)
+#define INT64_MIN  (-9223372036854775807LL - 1)
+
+#define INT8_MAX 127
+#define INT16_MAX 32767
+#define INT32_MAX 2147483647
+#define INT64_MAX 9223372036854775807LL
+
+#define UINT8_MAX 0xff /* 255U */
+#define UINT16_MAX 0xffff /* 65535U */
+#define UINT32_MAX 0xffffffff  /* 4294967295U */
+#define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */
+
+/* 7.18.2.2  Limits of minimum-width integer types */
+#define INT_LEAST8_MIN INT8_MIN
+#define INT_LEAST16_MIN INT16_MIN
+#define INT_LEAST32_MIN INT32_MIN
+#define INT_LEAST64_MIN INT64_MIN
+
+#define INT_LEAST8_MAX INT8_MAX
+#define INT_LEAST16_MAX INT16_MAX
+#define INT_LEAST32_MAX INT32_MAX
+#define INT_LEAST64_MAX INT64_MAX
+
+#define UINT_LEAST8_MAX UINT8_MAX
+#define UINT_LEAST16_MAX UINT16_MAX
+#define UINT_LEAST32_MAX UINT32_MAX
+#define UINT_LEAST64_MAX UINT64_MAX
+
+/* 7.18.2.3  Limits of fastest minimum-width integer types */
+#define INT_FAST8_MIN INT8_MIN
+#define INT_FAST16_MIN INT16_MIN
+#define INT_FAST32_MIN INT32_MIN
+#define INT_FAST64_MIN INT64_MIN
+
+#define INT_FAST8_MAX INT8_MAX
+#define INT_FAST16_MAX INT16_MAX
+#define INT_FAST32_MAX INT32_MAX
+#define INT_FAST64_MAX INT64_MAX
+
+#define UINT_FAST8_MAX UINT8_MAX
+#define UINT_FAST16_MAX UINT16_MAX
+#define UINT_FAST32_MAX UINT32_MAX
+#define UINT_FAST64_MAX UINT64_MAX
+
+/* 7.18.2.4  Limits of integer types capable of holding
+    object pointers */
+#ifdef _WIN64
+#define INTPTR_MIN INT64_MIN
+#define INTPTR_MAX INT64_MAX
+#define UINTPTR_MAX UINT64_MAX
+#else
+#define INTPTR_MIN INT32_MIN
+#define INTPTR_MAX INT32_MAX
+#define UINTPTR_MAX UINT32_MAX
+#endif
+
+/* 7.18.2.5  Limits of greatest-width integer types */
+#define INTMAX_MIN INT64_MIN
+#define INTMAX_MAX INT64_MAX
+#define UINTMAX_MAX UINT64_MAX
+
+/* 7.18.3  Limits of other integer types */
+#define PTRDIFF_MIN INTPTR_MIN
+#define PTRDIFF_MAX INTPTR_MAX
+
+#define SIG_ATOMIC_MIN INTPTR_MIN
+#define SIG_ATOMIC_MAX INTPTR_MAX
+
+#define SIZE_MAX UINTPTR_MAX
+
+#ifndef WCHAR_MIN  /* also in wchar.h */ 
+#define WCHAR_MIN 0
+#define WCHAR_MAX 0xffff /* UINT16_MAX */
+#endif
+
+/*
+ * wint_t is unsigned short for compatibility with MS runtime
+ */
+#define WINT_MIN 0
+#define WINT_MAX 0xffff /* UINT16_MAX */
+
+#endif /* !defined ( __cplusplus) || defined __STDC_LIMIT_MACROS */
+
+
+/* 7.18.4  Macros for integer constants */
+#if !defined ( __cplusplus) || defined (__STDC_CONSTANT_MACROS)
+
+/* 7.18.4.1  Macros for minimum-width integer constants
+
+    Accoding to Douglas Gwyn <gwyn@arl.mil>:
+       "This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC
+       9899:1999 as initially published, the expansion was required
+       to be an integer constant of precisely matching type, which
+       is impossible to accomplish for the shorter types on most
+       platforms, because C99 provides no standard way to designate
+       an integer constant with width less than that of type int.
+       TC1 changed this to require just an integer constant
+       *expression* with *promoted* type."
+*/
+
+#define INT8_C(val) ((int8_t) + (val))
+#define UINT8_C(val) ((uint8_t) + (val##U))
+#define INT16_C(val) ((int16_t) + (val))
+#define UINT16_C(val) ((uint16_t) + (val##U))
+
+#define INT32_C(val) val##L
+#define UINT32_C(val) val##UL
+#define INT64_C(val) val##LL
+#define UINT64_C(val) val##ULL
+
+/* 7.18.4.2  Macros for greatest-width integer constants */
+#define INTMAX_C(val)  INT64_C(val)
+#define UINTMAX_C(val) UINT64_C(val)
+
+#endif  /* !defined ( __cplusplus) || defined __STDC_CONSTANT_MACROS */
+
+#endif
diff --git a/include/crt/stdio.h b/include/crt/stdio.h
new file mode 100644 (file)
index 0000000..90011fe
--- /dev/null
@@ -0,0 +1,516 @@
+/*
+ * stdio.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Definitions of types and prototypes of functions for standard input and
+ * output.
+ *
+ * NOTE: The file manipulation functions provided by Microsoft seem to
+ * work with either slash (/) or backslash (\) as the directory separator.
+ *
+ */
+
+#ifndef _STDIO_H_
+#define        _STDIO_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#ifndef RC_INVOKED
+#define __need_size_t
+#define __need_NULL
+#define __need_wchar_t
+#define        __need_wint_t
+#include <stddef.h>
+#define __need___va_list
+#include <stdarg.h>
+#endif /* Not RC_INVOKED */
+
+
+/* Flags for the iobuf structure  */
+#define        _IOREAD 1 /* currently reading */
+#define        _IOWRT  2 /* currently writing */
+#define        _IORW   0x0080 /* opened as "r+w" */
+
+
+/*
+ * The three standard file pointers provided by the run time library.
+ * NOTE: These will go to the bit-bucket silently in GUI applications!
+ */
+#define        STDIN_FILENO    0
+#define        STDOUT_FILENO   1
+#define        STDERR_FILENO   2
+
+/* Returned by various functions on end of file condition or error. */
+#define        EOF     (-1)
+
+/*
+ * The maximum length of a file name. You should use GetVolumeInformation
+ * instead of this constant. But hey, this works.
+ * Also defined in io.h.
+ */
+#ifndef FILENAME_MAX
+#define        FILENAME_MAX    (260)
+#endif
+
+/*
+ * The maximum number of files that may be open at once. I have set this to
+ * a conservative number. The actual value may be higher.
+ */
+#define FOPEN_MAX      (20)
+
+/* After creating this many names, tmpnam and tmpfile return NULL */
+#define TMP_MAX        32767
+/*
+ * Tmpnam, tmpfile and, sometimes, _tempnam try to create
+ * temp files in the root directory of the current drive
+ * (not in pwd, as suggested by some older MS doc's).
+ * Redefining these macros does not effect the CRT functions.
+ */
+#define _P_tmpdir   "\\"
+#ifndef __STRICT_ANSI__
+#define P_tmpdir _P_tmpdir
+#endif
+#define _wP_tmpdir  L"\\"
+
+/*
+ * The maximum size of name (including NUL) that will be put in the user
+ * supplied buffer caName for tmpnam.
+ * Inferred from the size of the static buffer returned by tmpnam
+ * when passed a NULL argument. May actually be smaller.
+ */
+#define L_tmpnam (16)
+
+#define _IOFBF    0x0000  /* full buffered */
+#define _IOLBF    0x0040  /* line buffered */
+#define _IONBF    0x0004  /* not buffered */
+
+#define _IOMYBUF  0x0008  /* stdio malloc()'d buffer */
+#define _IOEOF    0x0010  /* EOF reached on read */
+#define _IOERR    0x0020  /* I/O error from system */
+#define _IOSTRG   0x0040  /* Strange or no file descriptor */
+#ifdef _POSIX_SOURCE
+# define _IOAPPEND 0x0200
+#endif
+/*
+ * The buffer size as used by setbuf such that it is equivalent to
+ * (void) setvbuf(fileSetBuffer, caBuffer, _IOFBF, BUFSIZ).
+ */
+#define        BUFSIZ  512
+
+/* Constants for nOrigin indicating the position relative to which fseek
+ * sets the file position.  Defined unconditionally since ISO and POSIX
+ * say they are defined here.  */
+#define SEEK_SET 0
+#define SEEK_CUR 1
+#define SEEK_END 2
+
+#ifndef        RC_INVOKED
+
+#ifndef __VALIST
+#ifdef __GNUC__
+#define __VALIST __gnuc_va_list
+#else
+#define __VALIST char*
+#endif
+#endif /* defined __VALIST  */
+
+/*
+ * The structure underlying the FILE type.
+ *
+ * Some believe that nobody in their right mind should make use of the
+ * internals of this structure. Provided by Pedro A. Aranda Gutiirrez
+ * <paag@tid.es>.
+ */
+#ifndef _FILE_DEFINED
+#define        _FILE_DEFINED
+typedef struct _iobuf
+{
+       char*   _ptr;
+       int     _cnt;
+       char*   _base;
+       int     _flag;
+       int     _file;
+       int     _charbuf;
+       int     _bufsiz;
+       char*   _tmpfname;
+} FILE;
+#endif /* Not _FILE_DEFINED */
+
+
+/*
+ * The standard file handles
+ */
+#ifndef __DECLSPEC_SUPPORTED
+
+extern FILE (*_imp___iob)[];   /* A pointer to an array of FILE */
+
+#define _iob   (*_imp___iob)   /* An array of FILE */
+
+#else /* __DECLSPEC_SUPPORTED */
+
+__MINGW_IMPORT FILE _iob[];    /* An array of FILE imported from DLL. */
+
+#endif /* __DECLSPEC_SUPPORTED */
+
+#define stdin  (&_iob[STDIN_FILENO])
+#define stdout (&_iob[STDOUT_FILENO])
+#define stderr (&_iob[STDERR_FILENO])
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * File Operations
+ */
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW fopen (const char*, const char*);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  freopen (const char*, const char*, FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    fflush (FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    fclose (FILE*);
+/* MS puts remove & rename (but not wide versions) in io.h  also */
+_CRTIMP int __cdecl __MINGW_NOTHROW    remove (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    rename (const char*, const char*);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  tmpfile (void);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  tmpnam (char*);
+
+#ifndef __STRICT_ANSI__
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _tempnam (const char*, const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _rmtmp(void);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _unlink (const char*);
+
+#ifndef        NO_OLDNAMES
+_CRTIMP char* __cdecl __MINGW_NOTHROW  tempnam (const char*, const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    rmtmp(void);
+_CRTIMP int __cdecl __MINGW_NOTHROW    unlink (const char*);
+#endif
+#endif /* __STRICT_ANSI__ */
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    setvbuf (FILE*, char*, int, size_t);
+
+_CRTIMP void __cdecl __MINGW_NOTHROW   setbuf (FILE*, char*);
+
+/*
+ * Formatted Output
+ */
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    fprintf (FILE*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    printf (const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    sprintf (char*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _snprintf (char*, size_t, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    vfprintf (FILE*, const char*, __VALIST);
+_CRTIMP int __cdecl __MINGW_NOTHROW    vprintf (const char*, __VALIST);
+_CRTIMP int __cdecl __MINGW_NOTHROW    vsprintf (char*, const char*, __VALIST);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _vsnprintf (char*, size_t, const char*, __VALIST);
+
+#ifndef __NO_ISOCEXT  /* externs in libmingwex.a */
+int __cdecl __MINGW_NOTHROW snprintf(char *, size_t, const char *, ...);
+int __cdecl __MINGW_NOTHROW vsnprintf (char *, size_t, const char *, __VALIST);
+
+int __cdecl __MINGW_NOTHROW vscanf (const char * __restrict__, __VALIST);
+int __cdecl __MINGW_NOTHROW vfscanf (FILE * __restrict__, const char * __restrict__,
+                    __VALIST);
+int __cdecl __MINGW_NOTHROW vsscanf (const char * __restrict__,
+                    const char * __restrict__, __VALIST);
+#endif
+
+/*
+ * Formatted Input
+ */
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    fscanf (FILE*, const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    scanf (const char*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    sscanf (const char*, const char*, ...);
+/*
+ * Character Input and Output Functions
+ */
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    fgetc (FILE*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  fgets (char*, int, FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    fputc (int, FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    fputs (const char*, FILE*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  gets (char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    puts (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    ungetc (int, FILE*);
+
+/* Traditionally, getc and putc are defined as macros. but the
+   standard doesn't say that they must be macros.
+   We use inline functions here to allow the fast versions
+   to be used in C++ with namespace qualification, eg., ::getc.
+
+   _filbuf and _flsbuf  are not thread-safe. */
+_CRTIMP int __cdecl __MINGW_NOTHROW    _filbuf (FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _flsbuf (int, FILE*);
+
+#if !defined _MT
+
+__CRT_INLINE int __cdecl __MINGW_NOTHROW getc (FILE* __F)
+{
+  return (--__F->_cnt >= 0)
+    ?  (int) (unsigned char) *__F->_ptr++
+    : _filbuf (__F);
+}
+
+__CRT_INLINE int __cdecl __MINGW_NOTHROW putc (int __c, FILE* __F)
+{
+  return (--__F->_cnt >= 0)
+    ?  (int) (unsigned char) (*__F->_ptr++ = (char)__c)
+    :  _flsbuf (__c, __F);
+}
+
+__CRT_INLINE int __cdecl __MINGW_NOTHROW getchar (void)
+{
+  return (--stdin->_cnt >= 0)
+    ?  (int) (unsigned char) *stdin->_ptr++
+    : _filbuf (stdin);
+}
+
+__CRT_INLINE int __cdecl __MINGW_NOTHROW putchar(int __c)
+{
+  return (--stdout->_cnt >= 0)
+    ?  (int) (unsigned char) (*stdout->_ptr++ = (char)__c)
+    :  _flsbuf (__c, stdout);}
+
+#else  /* Use library functions.  */
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    getc (FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    putc (int, FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    getchar (void);
+_CRTIMP int __cdecl __MINGW_NOTHROW    putchar (int);
+
+#endif
+
+/*
+ * Direct Input and Output Functions
+ */
+
+_CRTIMP size_t __cdecl __MINGW_NOTHROW fread (void*, size_t, size_t, FILE*);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW fwrite (const void*, size_t, size_t, FILE*);
+
+/*
+ * File Positioning Functions
+ */
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    fseek (FILE*, long, int);
+_CRTIMP long __cdecl __MINGW_NOTHROW   ftell (FILE*);
+_CRTIMP void __cdecl __MINGW_NOTHROW   rewind (FILE*);
+
+#if __MSVCRT_VERSION__ >= 0x800
+_CRTIMP int __cdecl __MINGW_NOTHROW    _fseek_nolock (FILE*, long, int);
+_CRTIMP long __cdecl __MINGW_NOTHROW   _ftell_nolock (FILE*);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    _fseeki64 (FILE*, __int64, int);
+_CRTIMP __int64 __cdecl __MINGW_NOTHROW        _ftelli64 (FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _fseeki64_nolock (FILE*, __int64, int);
+_CRTIMP __int64 __cdecl __MINGW_NOTHROW        _ftelli64_nolock (FILE*);
+#endif
+
+#ifdef __USE_MINGW_FSEEK  /* These are in libmingwex.a */
+/*
+ * Workaround for limitations on win9x where a file contents are
+ * not zero'd out if you seek past the end and then write.
+ */
+
+int __cdecl __MINGW_NOTHROW __mingw_fseek (FILE *, long, int);
+size_t __cdecl __MINGW_NOTHROW __mingw_fwrite (const void*, size_t, size_t, FILE*);
+#define fseek(fp, offset, whence)  __mingw_fseek(fp, offset, whence)
+#define fwrite(buffer, size, count, fp)  __mingw_fwrite(buffer, size, count, fp)
+#endif /* __USE_MINGW_FSEEK */
+
+/*
+ * An opaque data type used for storing file positions... The contents of
+ * this type are unknown, but we (the compiler) need to know the size
+ * because the programmer using fgetpos and fsetpos will be setting aside
+ * storage for fpos_t structres. Actually I tested using a byte array and
+ * it is fairly evident that the fpos_t type is a long (in CRTDLL.DLL).
+ * Perhaps an unsigned long? TODO? It's definitely a 64-bit number in
+ * MSVCRT however, and for now `long long' will do.
+ */
+#ifdef __MSVCRT__
+typedef long long fpos_t;
+#else
+typedef long   fpos_t;
+#endif
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    fgetpos (FILE*, fpos_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    fsetpos (FILE*, const fpos_t*);
+
+/*
+ * Error Functions
+ */
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    feof (FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    ferror (FILE*);
+
+#ifdef __cplusplus
+inline int __cdecl __MINGW_NOTHROW feof (FILE* __F)
+  { return __F->_flag & _IOEOF; }
+inline int __cdecl __MINGW_NOTHROW ferror (FILE* __F)
+  { return __F->_flag & _IOERR; }
+#else
+#define feof(__F)     ((__F)->_flag & _IOEOF)
+#define ferror(__F)   ((__F)->_flag & _IOERR)
+#endif
+
+_CRTIMP void __cdecl __MINGW_NOTHROW   clearerr (FILE*);
+_CRTIMP void __cdecl __MINGW_NOTHROW   perror (const char*);
+
+
+#ifndef __STRICT_ANSI__
+/*
+ * Pipes
+ */
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  _popen (const char*, const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _pclose (FILE*);
+
+#ifndef NO_OLDNAMES
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  popen (const char*, const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    pclose (FILE*);
+#endif
+
+/*
+ * Other Non ANSI functions
+ */
+_CRTIMP int __cdecl __MINGW_NOTHROW    _flushall (void);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _fgetchar (void);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _fputchar (int);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  _fdopen (int, const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _fileno (FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _fcloseall(void);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  _fsopen(const char*, const char*, int);
+#ifdef __MSVCRT__
+_CRTIMP int __cdecl __MINGW_NOTHROW    _getmaxstdio(void);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _setmaxstdio(int);
+#endif
+
+#if __MSVCRT_VERSION__ >= 0x800
+_CRTIMP int __cdecl __MINGW_NOTHROW _set_printf_count_output(int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _get_printf_count_output(void);
+#endif
+
+#ifndef _NO_OLDNAMES
+_CRTIMP int __cdecl __MINGW_NOTHROW    fgetchar (void);
+_CRTIMP int __cdecl __MINGW_NOTHROW    fputchar (int);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  fdopen (int, const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    fileno (FILE*);
+#endif /* Not _NO_OLDNAMES */
+
+#define _fileno(__F) ((__F)->_file)
+#ifndef _NO_OLDNAMES
+#define fileno(__F) ((__F)->_file)
+#endif
+
+#if defined (__MSVCRT__) && !defined (__NO_MINGW_LFS)
+#include <sys/types.h>
+__CRT_INLINE FILE* __cdecl __MINGW_NOTHROW fopen64 (const char* filename, const char* mode)
+{
+  return fopen (filename, mode);
+}
+
+int __cdecl __MINGW_NOTHROW fseeko64 (FILE*, off64_t, int);
+
+#ifdef __USE_MINGW_FSEEK
+int __cdecl __MINGW_NOTHROW __mingw_fseeko64 (FILE *, off64_t, int);
+#define fseeko64(fp, offset, whence)  __mingw_fseeko64(fp, offset, whence)
+#endif
+
+__CRT_INLINE off64_t __cdecl __MINGW_NOTHROW ftello64 (FILE * stream)
+{
+  fpos_t pos;
+  if (fgetpos(stream, &pos))
+    return  -1LL;
+  else
+   return ((off64_t) pos);
+}
+#endif /* __NO_MINGW_LFS */
+
+#endif /* Not __STRICT_ANSI__ */
+
+/* Wide  versions */
+
+#ifndef _WSTDIO_DEFINED
+/*  also in wchar.h - keep in sync */
+_CRTIMP int __cdecl __MINGW_NOTHROW    fwprintf (FILE*, const wchar_t*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wprintf (const wchar_t*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    swprintf (wchar_t*, const wchar_t*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _snwprintf (wchar_t*, size_t, const wchar_t*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    vfwprintf (FILE*, const wchar_t*, __VALIST);
+_CRTIMP int __cdecl __MINGW_NOTHROW    vwprintf (const wchar_t*, __VALIST);
+_CRTIMP int __cdecl __MINGW_NOTHROW    vswprintf (wchar_t*, const wchar_t*, __VALIST);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _vsnwprintf (wchar_t*, size_t, const wchar_t*, __VALIST);
+_CRTIMP int __cdecl __MINGW_NOTHROW    fwscanf (FILE*, const wchar_t*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wscanf (const wchar_t*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    swscanf (const wchar_t*, const wchar_t*, ...);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW fgetwc (FILE*);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW fputwc (wchar_t, FILE*);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW ungetwc (wchar_t, FILE*);
+
+#ifdef __MSVCRT__
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW fgetws (wchar_t*, int, FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    fputws (const wchar_t*, FILE*);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW getwc (FILE*);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW getwchar (void);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _getws (wchar_t*);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW putwc (wint_t, FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _putws (const wchar_t*);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW putwchar (wint_t);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  _wfdopen(int, wchar_t *);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  _wfopen (const wchar_t*, const wchar_t*);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  _wfreopen (const wchar_t*, const wchar_t*, FILE*);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  _wfsopen (const wchar_t*, const wchar_t*, int);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wtmpnam (wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wtempnam (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wrename (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wremove (const wchar_t*);
+_CRTIMP void __cdecl __MINGW_NOTHROW   _wperror (const wchar_t*);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  _wpopen (const wchar_t*, const wchar_t*);
+#endif /* __MSVCRT__ */
+
+#ifndef __NO_ISOCEXT  /* externs in libmingwex.a */
+int __cdecl __MINGW_NOTHROW snwprintf (wchar_t* s, size_t n, const wchar_t*  format, ...);
+__CRT_INLINE int __cdecl __MINGW_NOTHROW
+vsnwprintf (wchar_t* s, size_t n, const wchar_t* format, __VALIST arg)
+  { return _vsnwprintf ( s, n, format, arg);}
+int __cdecl __MINGW_NOTHROW vwscanf (const wchar_t * __restrict__, __VALIST);
+int __cdecl __MINGW_NOTHROW vfwscanf (FILE * __restrict__,
+                      const wchar_t * __restrict__, __VALIST);
+int __cdecl __MINGW_NOTHROW vswscanf (const wchar_t * __restrict__,
+                      const wchar_t * __restrict__, __VALIST);
+#endif
+
+#define _WSTDIO_DEFINED
+#endif /* _WSTDIO_DEFINED */
+
+#ifndef __STRICT_ANSI__
+#ifdef __MSVCRT__
+#ifndef NO_OLDNAMES
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  wpopen (const wchar_t*, const wchar_t*);
+#endif /* not NO_OLDNAMES */
+#endif /* MSVCRT runtime */
+
+/*
+ * Other Non ANSI wide functions
+ */
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW _fgetwchar (void);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW _fputwchar (wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _getw (FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _putw (int, FILE*);
+
+#ifndef _NO_OLDNAMES
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW fgetwchar (void);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW fputwchar (wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    getw (FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    putw (int, FILE*);
+#endif /* Not _NO_OLDNAMES */
+
+#endif /* __STRICT_ANSI */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* _STDIO_H_ */
diff --git a/include/crt/stdlib.h b/include/crt/stdlib.h
new file mode 100644 (file)
index 0000000..df8a487
--- /dev/null
@@ -0,0 +1,543 @@
+/*
+ * stdlib.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Definitions for common types, variables, and functions.
+ *
+ */
+
+#ifndef _STDLIB_H_
+#define _STDLIB_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define __need_size_t
+#define __need_wchar_t
+#define __need_NULL
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif /* RC_INVOKED */
+
+/*
+ * RAND_MAX is the maximum value that may be returned by rand.
+ * The minimum is zero.
+ */
+#define        RAND_MAX        0x7FFF
+
+/*
+ * These values may be used as exit status codes.
+ */
+#define        EXIT_SUCCESS    0
+#define        EXIT_FAILURE    1
+
+/*
+ * Definitions for path name functions.
+ * NOTE: All of these values have simply been chosen to be conservatively high.
+ *       Remember that with long file names we can no longer depend on
+ *       extensions being short.
+ */
+#ifndef __STRICT_ANSI__
+
+#ifndef MAX_PATH
+#define        MAX_PATH        (260)
+#endif
+
+#define        _MAX_PATH       MAX_PATH
+#define        _MAX_DRIVE      (3)
+#define        _MAX_DIR        256
+#define        _MAX_FNAME      256
+#define        _MAX_EXT        256
+
+#endif /* Not __STRICT_ANSI__ */
+
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined (__STRICT_ANSI__)
+
+/*
+ * This seems like a convenient place to declare these variables, which
+ * give programs using WinMain (or main for that matter) access to main-ish
+ * argc and argv. environ is a pointer to a table of environment variables.
+ * NOTE: Strings in _argv and environ are ANSI strings.
+ */
+extern int     _argc;
+extern char**  _argv;
+
+/* imports from runtime dll of the above variables */
+#ifdef __MSVCRT__
+
+extern int*  __cdecl __MINGW_NOTHROW   __p___argc(void);
+extern char*** __cdecl __MINGW_NOTHROW  __p___argv(void);
+extern wchar_t***  __cdecl __MINGW_NOTHROW __p___wargv(void);
+
+#define __argc (*__p___argc())
+#define __argv (*__p___argv())
+#define __wargv (*__p___wargv())
+
+#else /* !MSVCRT */
+
+#ifndef __DECLSPEC_SUPPORTED
+
+extern int*    _imp____argc_dll;
+extern char***  _imp____argv_dll;
+#define __argc (*_imp____argc_dll)
+#define __argv (*_imp____argv_dll)
+
+#else /* __DECLSPEC_SUPPORTED */
+
+__MINGW_IMPORT int    __argc_dll;
+__MINGW_IMPORT char**  __argv_dll;
+#define __argc __argc_dll
+#define __argv __argv_dll
+
+#endif /* __DECLSPEC_SUPPORTED */
+
+#endif /* __MSVCRT */
+#endif /* __STRICT_ANSI__ */
+/*
+ * Also defined in ctype.h.
+ */
+#ifndef MB_CUR_MAX
+#ifdef __DECLSPEC_SUPPORTED
+# ifdef __MSVCRT__
+#  define MB_CUR_MAX __mb_cur_max
+   __MINGW_IMPORT int __mb_cur_max;
+# else         /* not __MSVCRT */
+#  define MB_CUR_MAX __mb_cur_max_dll
+   __MINGW_IMPORT int __mb_cur_max_dll;
+# endif                /* not __MSVCRT */
+
+#else          /* ! __DECLSPEC_SUPPORTED */
+# ifdef __MSVCRT__
+   extern int* _imp____mbcur_max;
+#  define MB_CUR_MAX (*_imp____mb_cur_max)
+# else         /* not __MSVCRT */
+   extern int*  _imp____mbcur_max_dll;
+#  define MB_CUR_MAX (*_imp____mb_cur_max_dll)
+# endif        /* not __MSVCRT */
+#endif         /*  __DECLSPEC_SUPPORTED */
+#endif  /* MB_CUR_MAX */
+
+/* 
+ * MS likes to declare errno in stdlib.h as well. 
+ */
+
+#ifdef _UWIN
+#undef errno
+extern int errno;
+#else
+ _CRTIMP int* __cdecl __MINGW_NOTHROW  _errno(void);
+#define        errno           (*_errno())
+#endif
+ _CRTIMP int* __cdecl __MINGW_NOTHROW  __doserrno(void);
+#define        _doserrno       (*__doserrno())
+
+#if !defined (__STRICT_ANSI__)
+/*
+ * Use environ from the DLL, not as a global. 
+ */
+
+#ifdef __MSVCRT__
+  extern _CRTIMP char *** __cdecl __MINGW_NOTHROW __p__environ(void);
+  extern _CRTIMP wchar_t *** __cdecl __MINGW_NOTHROW  __p__wenviron(void);
+# define _environ (*__p__environ())
+# define _wenviron (*__p__wenviron())
+#else /* ! __MSVCRT__ */
+# ifndef __DECLSPEC_SUPPORTED
+    extern char *** _imp___environ_dll;
+#   define _environ (*_imp___environ_dll)
+# else /* __DECLSPEC_SUPPORTED */
+    __MINGW_IMPORT char ** _environ_dll;
+#   define _environ _environ_dll
+# endif /* __DECLSPEC_SUPPORTED */
+#endif /* ! __MSVCRT__ */
+
+#define environ _environ
+
+#ifdef __MSVCRT__
+/* One of the MSVCRTxx libraries */
+
+#ifndef __DECLSPEC_SUPPORTED
+  extern int*  _imp___sys_nerr;
+# define       sys_nerr        (*_imp___sys_nerr)
+#else /* __DECLSPEC_SUPPORTED */
+  __MINGW_IMPORT int   _sys_nerr;
+# ifndef _UWIN
+#   define     sys_nerr        _sys_nerr
+# endif /* _UWIN */
+#endif /* __DECLSPEC_SUPPORTED */
+
+#else /* ! __MSVCRT__ */
+
+/* CRTDLL run time library */
+
+#ifndef __DECLSPEC_SUPPORTED
+  extern int*  _imp___sys_nerr_dll;
+# define sys_nerr      (*_imp___sys_nerr_dll)
+#else /* __DECLSPEC_SUPPORTED */
+  __MINGW_IMPORT int   _sys_nerr_dll;
+# define sys_nerr      _sys_nerr_dll
+#endif /* __DECLSPEC_SUPPORTED */
+
+#endif /* ! __MSVCRT__ */
+
+#ifndef __DECLSPEC_SUPPORTED
+extern char*** _imp__sys_errlist;
+#define        sys_errlist     (*_imp___sys_errlist)
+#else /* __DECLSPEC_SUPPORTED */
+__MINGW_IMPORT char*   _sys_errlist[];
+#ifndef _UWIN
+#define        sys_errlist     _sys_errlist
+#endif /* _UWIN */
+#endif /* __DECLSPEC_SUPPORTED */
+
+/*
+ * OS version and such constants.
+ */
+
+#ifdef __MSVCRT__
+/* msvcrtxx.dll */
+
+extern _CRTIMP unsigned __cdecl __MINGW_NOTHROW int*   __p__osver(void);
+extern _CRTIMP unsigned __cdecl __MINGW_NOTHROW int*   __p__winver(void);
+extern _CRTIMP unsigned __cdecl __MINGW_NOTHROW int*   __p__winmajor(void);
+extern _CRTIMP unsigned __cdecl __MINGW_NOTHROW int*   __p__winminor(void);
+
+#ifndef __DECLSPEC_SUPPORTED
+# define _osver                (*__p__osver())
+# define _winver       (*__p__winver())
+# define _winmajor     (*__p__winmajor())
+# define _winminor     (*__p__winminor())
+#else
+__MINGW_IMPORT unsigned int _osver;
+__MINGW_IMPORT unsigned int _winver;
+__MINGW_IMPORT unsigned int _winmajor;
+__MINGW_IMPORT unsigned int _winminor;
+#endif /* __DECLSPEC_SUPPORTED */
+
+#else
+/* Not msvcrtxx.dll, thus crtdll.dll */
+
+#ifndef __DECLSPEC_SUPPORTED
+
+extern unsigned int*   _imp___osver_dll;
+extern unsigned int*   _imp___winver_dll;
+extern unsigned int*   _imp___winmajor_dll;
+extern unsigned int*   _imp___winminor_dll;
+
+#define _osver         (*_imp___osver_dll)
+#define _winver                (*_imp___winver_dll)
+#define _winmajor      (*_imp___winmajor_dll)
+#define _winminor      (*_imp___winminor_dll)
+
+#else /* __DECLSPEC_SUPPORTED */
+
+__MINGW_IMPORT unsigned int    _osver_dll;
+__MINGW_IMPORT unsigned int    _winver_dll;
+__MINGW_IMPORT unsigned int    _winmajor_dll;
+__MINGW_IMPORT unsigned int    _winminor_dll;
+
+#define _osver         _osver_dll
+#define _winver                _winver_dll
+#define _winmajor      _winmajor_dll
+#define _winminor      _winminor_dll
+
+#endif /* __DECLSPEC_SUPPORTED */
+
+#endif
+
+#if defined  __MSVCRT__
+/* although the _pgmptr is exported as DATA,
+ * be safe and use the access function __p__pgmptr() to get it. */
+_CRTIMP char** __cdecl __MINGW_NOTHROW __p__pgmptr(void);
+#define _pgmptr     (*__p__pgmptr())
+_CRTIMP wchar_t** __cdecl __MINGW_NOTHROW __p__wpgmptr(void);
+#define _wpgmptr    (*__p__wpgmptr())
+#else /* ! __MSVCRT__ */
+# ifndef __DECLSPEC_SUPPORTED
+  extern char** __imp__pgmptr_dll;
+# define _pgmptr (*_imp___pgmptr_dll)
+# else /* __DECLSPEC_SUPPORTED */
+ __MINGW_IMPORT char* _pgmptr_dll;
+# define _pgmptr _pgmptr_dll
+# endif /* __DECLSPEC_SUPPORTED */
+/* no wide version in CRTDLL */
+#endif /* __MSVCRT__ */
+
+/*
+ * This variable determines the default file mode.
+ * TODO: Which flags work?
+ */
+#if !defined (__DECLSPEC_SUPPORTED) || defined (__IN_MINGW_RUNTIME)
+
+#ifdef __MSVCRT__
+extern int* _imp___fmode;
+#define        _fmode  (*_imp___fmode)
+#else
+/* CRTDLL */
+extern int* _imp___fmode_dll;
+#define        _fmode  (*_imp___fmode_dll)
+#endif
+
+#else /* __DECLSPEC_SUPPORTED */
+
+#ifdef __MSVCRT__
+__MINGW_IMPORT  int _fmode;
+#else /* ! __MSVCRT__ */
+__MINGW_IMPORT  int _fmode_dll;
+#define        _fmode  _fmode_dll
+#endif /* ! __MSVCRT__ */
+
+#endif /* __DECLSPEC_SUPPORTED */
+
+#endif /* Not __STRICT_ANSI__ */
+
+_CRTIMP double __cdecl __MINGW_NOTHROW atof    (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    atoi    (const char*);
+_CRTIMP long __cdecl __MINGW_NOTHROW   atol    (const char*);
+#if !defined (__STRICT_ANSI__)
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wtoi (const wchar_t *);
+_CRTIMP long __cdecl __MINGW_NOTHROW _wtol (const wchar_t *);
+#endif
+_CRTIMP double __cdecl __MINGW_NOTHROW strtod  (const char*, char**);
+#if !defined __NO_ISOCEXT  /*  in libmingwex.a */
+float __cdecl __MINGW_NOTHROW strtof (const char * __restrict__, char ** __restrict__);
+long double __cdecl __MINGW_NOTHROW strtold (const char * __restrict__, char ** __restrict__);
+#endif /* __NO_ISOCEXT */
+
+_CRTIMP long __cdecl __MINGW_NOTHROW   strtol  (const char*, char**, int);
+_CRTIMP unsigned long __cdecl __MINGW_NOTHROW  strtoul (const char*, char**, int);
+
+#ifndef _WSTDLIB_DEFINED
+/*  also declared in wchar.h */
+_CRTIMP long __cdecl __MINGW_NOTHROW   wcstol  (const wchar_t*, wchar_t**, int);
+_CRTIMP unsigned long __cdecl __MINGW_NOTHROW  wcstoul (const wchar_t*, wchar_t**, int);
+_CRTIMP double __cdecl __MINGW_NOTHROW wcstod  (const wchar_t*, wchar_t**);
+#if !defined __NO_ISOCEXT /*  in libmingwex.a */
+float __cdecl __MINGW_NOTHROW wcstof( const wchar_t * __restrict__, wchar_t ** __restrict__);
+long double __cdecl __MINGW_NOTHROW wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__);
+#endif /* __NO_ISOCEXT */
+#ifdef __MSVCRT__ 
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wgetenv(const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wputenv(const wchar_t*);
+_CRTIMP void __cdecl __MINGW_NOTHROW   _wsearchenv(const wchar_t*, const wchar_t*, wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wsystem(const wchar_t*);
+_CRTIMP void __cdecl __MINGW_NOTHROW    _wmakepath(wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*);
+_CRTIMP void __cdecl __MINGW_NOTHROW   _wsplitpath (const wchar_t*, wchar_t*, wchar_t*, wchar_t*, wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW   _wfullpath (wchar_t*, const wchar_t*, size_t);
+#endif
+#define _WSTDLIB_DEFINED
+#endif
+
+_CRTIMP size_t __cdecl __MINGW_NOTHROW wcstombs        (char*, const wchar_t*, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wctomb          (char*, wchar_t);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    mblen           (const char*, size_t);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW mbstowcs        (wchar_t*, const char*, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    mbtowc          (wchar_t*, const char*, size_t);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    rand    (void);
+_CRTIMP void __cdecl __MINGW_NOTHROW   srand   (unsigned int);
+
+_CRTIMP void* __cdecl __MINGW_NOTHROW  calloc  (size_t, size_t) __MINGW_ATTRIB_MALLOC;
+_CRTIMP void* __cdecl __MINGW_NOTHROW  malloc  (size_t) __MINGW_ATTRIB_MALLOC;
+_CRTIMP void* __cdecl __MINGW_NOTHROW  realloc (void*, size_t);
+_CRTIMP void __cdecl __MINGW_NOTHROW   free    (void*);
+_CRTIMP void __cdecl __MINGW_NOTHROW   abort   (void) __MINGW_ATTRIB_NORETURN;
+_CRTIMP void __cdecl __MINGW_NOTHROW   exit    (int) __MINGW_ATTRIB_NORETURN;
+
+/* Note: This is in startup code, not imported directly from dll */
+int __cdecl __MINGW_NOTHROW    atexit  (void (*)(void));
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    system  (const char*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  getenv  (const char*);
+
+/* bsearch and qsort are also in non-ANSI header search.h  */
+_CRTIMP void* __cdecl bsearch (const void*, const void*, size_t, size_t, 
+                              int (*)(const void*, const void*));
+_CRTIMP void __cdecl qsort(void*, size_t, size_t,
+                          int (*)(const void*, const void*));
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    abs     (int) __MINGW_ATTRIB_CONST;
+_CRTIMP long __cdecl __MINGW_NOTHROW   labs    (long) __MINGW_ATTRIB_CONST;
+
+/*
+ * div_t and ldiv_t are structures used to return the results of div and
+ * ldiv.
+ *
+ * NOTE: div and ldiv appear not to work correctly unless
+ *       -fno-pcc-struct-return is specified. This is included in the
+ *       mingw32 specs file.
+ */
+typedef struct { int quot, rem; } div_t;
+typedef struct { long quot, rem; } ldiv_t;
+
+_CRTIMP div_t __cdecl __MINGW_NOTHROW  div     (int, int) __MINGW_ATTRIB_CONST;
+_CRTIMP ldiv_t __cdecl __MINGW_NOTHROW ldiv    (long, long) __MINGW_ATTRIB_CONST;
+
+#if !defined (__STRICT_ANSI__)
+
+/*
+ * NOTE: Officially the three following functions are obsolete. The Win32 API
+ *       functions SetErrorMode, Beep and Sleep are their replacements.
+ */
+_CRTIMP void __cdecl __MINGW_NOTHROW   _beep (unsigned int, unsigned int) __MINGW_ATTRIB_DEPRECATED;
+/* Not to be confused with  _set_error_mode (int).  */
+_CRTIMP void __cdecl __MINGW_NOTHROW   _seterrormode (int) __MINGW_ATTRIB_DEPRECATED;
+_CRTIMP void __cdecl __MINGW_NOTHROW   _sleep (unsigned long) __MINGW_ATTRIB_DEPRECATED;
+
+_CRTIMP void __cdecl __MINGW_NOTHROW   _exit   (int) __MINGW_ATTRIB_NORETURN;
+
+/* _onexit is MS extension. Use atexit for portability.  */
+/* Note: This is in startup code, not imported directly from dll */
+typedef  int (* _onexit_t)(void);
+_onexit_t __cdecl __MINGW_NOTHROW _onexit( _onexit_t );
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    _putenv (const char*);
+_CRTIMP void __cdecl __MINGW_NOTHROW   _searchenv (const char*, const char*, char*);
+
+
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _ecvt (double, int, int*, int*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _fcvt (double, int, int*, int*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _gcvt (double, int, char*);
+
+_CRTIMP void __cdecl __MINGW_NOTHROW   _makepath (char*, const char*, const char*, const char*, const char*);
+_CRTIMP void __cdecl __MINGW_NOTHROW   _splitpath (const char*, char*, char*, char*, char*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _fullpath (char*, const char*, size_t);
+
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _itoa (int, char*, int);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _ltoa (long, char*, int);
+_CRTIMP char* __cdecl __MINGW_NOTHROW   _ultoa(unsigned long, char*, int);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW  _itow (int, wchar_t*, int);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW  _ltow (long, wchar_t*, int);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW  _ultow (unsigned long, wchar_t*, int);
+
+#ifdef __MSVCRT__
+_CRTIMP __int64 __cdecl __MINGW_NOTHROW        _atoi64(const char *);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _i64toa(__int64, char *, int);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _ui64toa(unsigned __int64, char *, int);
+_CRTIMP __int64 __cdecl __MINGW_NOTHROW        _wtoi64(const wchar_t *);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _i64tow(__int64, wchar_t *, int);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _ui64tow(unsigned __int64, wchar_t *, int);
+
+
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _rotl(unsigned int, int) __MINGW_ATTRIB_CONST;
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _rotr(unsigned int, int) __MINGW_ATTRIB_CONST;
+_CRTIMP unsigned long __cdecl __MINGW_NOTHROW _lrotl(unsigned long, int) __MINGW_ATTRIB_CONST;
+_CRTIMP unsigned long __cdecl __MINGW_NOTHROW _lrotr(unsigned long, int) __MINGW_ATTRIB_CONST;
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _set_error_mode (int);
+#define _OUT_TO_DEFAULT        0
+#define _OUT_TO_STDERR 1
+#define _OUT_TO_MSGBOX 2
+#define _REPORT_ERRMODE        3
+
+#if __MSVCRT_VERSION__ >= 0x800
+#ifndef _INTPTR_T_DEFINED
+#define _INTPTR_T_DEFINED
+#ifdef _WIN64
+  typedef __int64 intptr_t;
+#else
+  typedef int intptr_t;
+#endif
+#endif
+_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _set_abort_behavior (unsigned int, unsigned int);
+/* These masks work with msvcr80.dll version 8.0.50215.44 (a beta release).  */
+#define _WRITE_ABORT_MSG 1
+#define _CALL_REPORTFAULT 2
+
+typedef void (* _invalid_parameter_handler) (const wchar_t *,
+                                            const wchar_t *,
+                                            const wchar_t *,
+                                            unsigned int,
+                                            uintptr_t);
+_invalid_parameter_handler _set_invalid_parameter_handler (_invalid_parameter_handler);
+#endif /* __MSVCRT_VERSION__ >= 0x800 */
+#endif /* __MSVCRT__ */
+
+#ifndef        _NO_OLDNAMES
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    putenv (const char*);
+_CRTIMP void __cdecl __MINGW_NOTHROW   searchenv (const char*, const char*, char*);
+
+_CRTIMP char* __cdecl __MINGW_NOTHROW  itoa (int, char*, int);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  ltoa (long, char*, int);
+
+#ifndef _UWIN
+_CRTIMP char* __cdecl __MINGW_NOTHROW  ecvt (double, int, int*, int*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  fcvt (double, int, int*, int*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  gcvt (double, int, char*);
+#endif /* _UWIN */
+#endif /* Not _NO_OLDNAMES */
+
+#endif /* Not __STRICT_ANSI__ */
+
+/* C99 names */
+
+#if !defined __NO_ISOCEXT /* externs in static libmingwex.a */
+
+/* C99 name for _exit */
+void __cdecl __MINGW_NOTHROW _Exit(int) __MINGW_ATTRIB_NORETURN;
+#ifndef __STRICT_ANSI__   /* inline using non-ansi functions */
+__CRT_INLINE void __cdecl __MINGW_NOTHROW _Exit(int __status)
+       {  _exit (__status); }
+#endif 
+
+typedef struct { long long quot, rem; } lldiv_t;
+
+lldiv_t        __cdecl __MINGW_NOTHROW lldiv (long long, long long) __MINGW_ATTRIB_CONST;
+
+long long __cdecl __MINGW_NOTHROW llabs(long long);
+__CRT_INLINE long long __cdecl __MINGW_NOTHROW llabs(long long _j)
+  {return (_j >= 0 ? _j : -_j);}
+
+long long  __cdecl __MINGW_NOTHROW strtoll (const char* __restrict__, char** __restrict, int);
+unsigned long long  __cdecl __MINGW_NOTHROW strtoull (const char* __restrict__, char** __restrict__, int);
+
+#if defined (__MSVCRT__) /* these are stubs for MS _i64 versions */ 
+long long  __cdecl __MINGW_NOTHROW atoll (const char *);
+
+#if !defined (__STRICT_ANSI__)
+long long  __cdecl __MINGW_NOTHROW wtoll (const wchar_t *);
+char* __cdecl __MINGW_NOTHROW lltoa (long long, char *, int);
+char* __cdecl __MINGW_NOTHROW ulltoa (unsigned long long , char *, int);
+wchar_t* __cdecl __MINGW_NOTHROW lltow (long long, wchar_t *, int);
+wchar_t* __cdecl __MINGW_NOTHROW ulltow (unsigned long long, wchar_t *, int);
+
+  /* inline using non-ansi functions */
+__CRT_INLINE long long  __cdecl __MINGW_NOTHROW atoll (const char * _c)
+       { return _atoi64 (_c); }
+__CRT_INLINE char*  __cdecl __MINGW_NOTHROW lltoa (long long _n, char * _c, int _i)
+       { return _i64toa (_n, _c, _i); }
+__CRT_INLINE char*  __cdecl __MINGW_NOTHROW ulltoa (unsigned long long _n, char * _c, int _i)
+       { return _ui64toa (_n, _c, _i); }
+__CRT_INLINE long long  __cdecl __MINGW_NOTHROW wtoll (const wchar_t * _w)
+       { return _wtoi64 (_w); }
+__CRT_INLINE wchar_t*  __cdecl __MINGW_NOTHROW lltow (long long _n, wchar_t * _w, int _i)
+       { return _i64tow (_n, _w, _i); } 
+__CRT_INLINE wchar_t*  __cdecl __MINGW_NOTHROW ulltow (unsigned long long _n, wchar_t * _w, int _i)
+       { return _ui64tow (_n, _w, _i); } 
+#endif /* (__STRICT_ANSI__)  */
+
+#endif /* __MSVCRT__ */
+
+#endif /* !__NO_ISOCEXT */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _STDLIB_H_ */
+
+
diff --git a/include/crt/string.h b/include/crt/string.h
new file mode 100644 (file)
index 0000000..62bdb3f
--- /dev/null
@@ -0,0 +1,195 @@
+/*
+ * string.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Definitions for memory and string functions.
+ *
+ */
+
+#ifndef _STRING_H_
+#define        _STRING_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+/*
+ * Define size_t, wchar_t and NULL
+ */
+#define __need_size_t
+#define __need_wchar_t
+#define        __need_NULL
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif /* Not RC_INVOKED */
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Prototypes of the ANSI Standard C library string functions.
+ */
+_CRTIMP void* __cdecl __MINGW_NOTHROW  memchr (const void*, int, size_t) __MINGW_ATTRIB_PURE;
+_CRTIMP int __cdecl __MINGW_NOTHROW    memcmp (const void*, const void*, size_t) __MINGW_ATTRIB_PURE;
+_CRTIMP void* __cdecl __MINGW_NOTHROW  memcpy (void*, const void*, size_t);
+_CRTIMP void* __cdecl __MINGW_NOTHROW  memmove (void*, const void*, size_t);
+_CRTIMP void* __cdecl __MINGW_NOTHROW  memset (void*, int, size_t);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strcat (char*, const char*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strchr (const char*, int)  __MINGW_ATTRIB_PURE;
+_CRTIMP int __cdecl __MINGW_NOTHROW    strcmp (const char*, const char*)  __MINGW_ATTRIB_PURE;
+_CRTIMP int __cdecl __MINGW_NOTHROW    strcoll (const char*, const char*);     /* Compare using locale */
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strcpy (char*, const char*);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW strcspn (const char*, const char*)  __MINGW_ATTRIB_PURE;
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strerror (int); /* NOTE: NOT an old name wrapper. */
+
+_CRTIMP size_t __cdecl __MINGW_NOTHROW strlen (const char*)  __MINGW_ATTRIB_PURE;
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strncat (char*, const char*, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    strncmp (const char*, const char*, size_t)  __MINGW_ATTRIB_PURE;
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strncpy (char*, const char*, size_t);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strpbrk (const char*, const char*)  __MINGW_ATTRIB_PURE;
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strrchr (const char*, int)  __MINGW_ATTRIB_PURE;
+_CRTIMP size_t __cdecl __MINGW_NOTHROW strspn (const char*, const char*)  __MINGW_ATTRIB_PURE;
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strstr (const char*, const char*)  __MINGW_ATTRIB_PURE;
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strtok (char*, const char*);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW strxfrm (char*, const char*, size_t);
+
+#ifndef __STRICT_ANSI__
+/*
+ * Extra non-ANSI functions provided by the CRTDLL library
+ */
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _strerror (const char *);
+_CRTIMP void* __cdecl __MINGW_NOTHROW  _memccpy (void*, const void*, int, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _memicmp (const void*, const void*, size_t);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _strdup (const char*) __MINGW_ATTRIB_MALLOC;
+_CRTIMP int __cdecl __MINGW_NOTHROW    _strcmpi (const char*, const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _stricmp (const char*, const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _stricoll (const char*, const char*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _strlwr (char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _strnicmp (const char*, const char*, size_t);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _strnset (char*, int, size_t);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _strrev (char*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _strset (char*, int);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _strupr (char*);
+_CRTIMP void __cdecl __MINGW_NOTHROW   _swab (const char*, char*, size_t);
+
+#ifdef __MSVCRT__
+_CRTIMP int __cdecl __MINGW_NOTHROW  _strncoll(const char*, const char*, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW  _strnicoll(const char*, const char*, size_t);
+#endif
+
+#ifndef        _NO_OLDNAMES
+/*
+ * Non-underscored versions of non-ANSI functions. They live in liboldnames.a
+ * and provide a little extra portability. Also a few extra UNIX-isms like
+ * strcasecmp.
+ */
+_CRTIMP void* __cdecl __MINGW_NOTHROW  memccpy (void*, const void*, int, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    memicmp (const void*, const void*, size_t);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strdup (const char*) __MINGW_ATTRIB_MALLOC;
+_CRTIMP int __cdecl __MINGW_NOTHROW    strcmpi (const char*, const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    stricmp (const char*, const char*);
+__CRT_INLINE int __cdecl __MINGW_NOTHROW strcasecmp (const char*, const char *);
+__CRT_INLINE int __cdecl __MINGW_NOTHROW
+strcasecmp (const char * __sz1, const char * __sz2)
+  {return _stricmp (__sz1, __sz2);}
+_CRTIMP int __cdecl __MINGW_NOTHROW    stricoll (const char*, const char*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strlwr (char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    strnicmp (const char*, const char*, size_t);
+__CRT_INLINE int  __cdecl __MINGW_NOTHROW strncasecmp (const char *, const char *, size_t);
+__CRT_INLINE int __cdecl __MINGW_NOTHROW
+strncasecmp (const char * __sz1, const char * __sz2, size_t __sizeMaxCompare)
+  {return _strnicmp (__sz1, __sz2, __sizeMaxCompare);}
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strnset (char*, int, size_t);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strrev (char*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strset (char*, int);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  strupr (char*);
+#ifndef _UWIN
+_CRTIMP void __cdecl __MINGW_NOTHROW   swab (const char*, char*, size_t);
+#endif /* _UWIN */
+#endif /* _NO_OLDNAMES */
+
+#endif /* Not __STRICT_ANSI__ */
+
+#ifndef _WSTRING_DEFINED
+/*
+ * Unicode versions of the standard calls.
+ * Also in wchar.h, where they belong according to ISO standard.
+ */
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcscat (wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcschr (const wchar_t*, wchar_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wcscmp (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wcscoll (const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcscpy (wchar_t*, const wchar_t*);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW wcscspn (const wchar_t*, const wchar_t*);
+/* Note:  _wcserror requires __MSVCRT_VERSION__ >= 0x0700.  */
+_CRTIMP size_t __cdecl __MINGW_NOTHROW wcslen (const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsncat (wchar_t*, const wchar_t*, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wcsncmp(const wchar_t*, const wchar_t*, size_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsncpy(wchar_t*, const wchar_t*, size_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcspbrk(const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsrchr(const wchar_t*, wchar_t);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW wcsspn(const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsstr(const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcstok(wchar_t*, const wchar_t*);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW wcsxfrm(wchar_t*, const wchar_t*, size_t);
+
+#ifndef        __STRICT_ANSI__
+/*
+ * Unicode versions of non-ANSI string functions provided by CRTDLL.
+ */
+
+/* NOTE: _wcscmpi not provided by CRTDLL, this define is for portability */
+#define                _wcscmpi        _wcsicmp
+
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wcsdup (const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wcsicmp (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wcsicoll (const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wcslwr (wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wcsnicmp (const wchar_t*, const wchar_t*, size_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wcsnset (wchar_t*, wchar_t, size_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wcsrev (wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wcsset (wchar_t*, wchar_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wcsupr (wchar_t*);
+
+#ifdef __MSVCRT__
+_CRTIMP int __cdecl __MINGW_NOTHROW  _wcsncoll(const wchar_t*, const wchar_t*, size_t);
+_CRTIMP int   __cdecl __MINGW_NOTHROW _wcsnicoll(const wchar_t*, const wchar_t*, size_t);
+#if __MSVCRT_VERSION__ >= 0x0700
+_CRTIMP  wchar_t* __cdecl __MINGW_NOTHROW _wcserror(int);
+_CRTIMP  wchar_t* __cdecl __MINGW_NOTHROW __wcserror(const wchar_t*);
+#endif
+#endif
+
+#ifndef        _NO_OLDNAMES
+/* NOTE: There is no _wcscmpi, but this is for compatibility. */
+int __cdecl __MINGW_NOTHROW wcscmpi (const wchar_t * __ws1, const wchar_t * __ws2);
+__CRT_INLINE int __cdecl __MINGW_NOTHROW
+wcscmpi (const wchar_t * __ws1, const wchar_t * __ws2)
+  {return _wcsicmp (__ws1, __ws2);}
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsdup (const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wcsicmp (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wcsicoll (const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcslwr (wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wcsnicmp (const wchar_t*, const wchar_t*, size_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsnset (wchar_t*, wchar_t, size_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsrev (wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsset (wchar_t*, wchar_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsupr (wchar_t*);
+#endif /* Not _NO_OLDNAMES */
+
+#endif /* Not strict ANSI */
+
+#define _WSTRING_DEFINED
+#endif  /* _WSTRING_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _STRING_H_ */
diff --git a/include/crt/strings.h b/include/crt/strings.h
new file mode 100644 (file)
index 0000000..5342276
--- /dev/null
@@ -0,0 +1,12 @@
+/*
+    File: strings.h
+    Copyright: Public Domain
+
+    This file is provided because non ANSI fuctions are described in string.h
+    that belong in strings.h.  These functions are provided for in the OLDNAME
+    libraries.
+*/
+#if !defined(_STRINGS_H_)
+# define _STRINGS_H_ 1
+# include <string.h>
+#endif
diff --git a/include/crt/sys/fcntl.h b/include/crt/sys/fcntl.h
new file mode 100644 (file)
index 0000000..a2090bc
--- /dev/null
@@ -0,0 +1,7 @@
+/*
+ * This file is part of the Mingw32 package.
+ *
+ * This fcntl.h maps to the root fcntl.h
+ */
+
+#include <fcntl.h>
diff --git a/include/crt/sys/file.h b/include/crt/sys/file.h
new file mode 100644 (file)
index 0000000..e95654c
--- /dev/null
@@ -0,0 +1,7 @@
+/*
+ * This file is part of the Mingw32 package.
+ *
+ * This file.h maps to the root fcntl.h
+ * TODO?
+ */
+#include <fcntl.h>
diff --git a/include/crt/sys/locking.h b/include/crt/sys/locking.h
new file mode 100644 (file)
index 0000000..eee5e3c
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * locking.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Constants for the mode parameter of the locking function.
+ *
+ */
+
+#ifndef        _LOCKING_H_
+#define        _LOCKING_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define        _LK_UNLCK       0       /* Unlock */
+#define        _LK_LOCK        1       /* Lock */
+#define        _LK_NBLCK       2       /* Non-blocking lock */
+#define        _LK_RLCK        3       /* Lock for read only */
+#define        _LK_NBRLCK      4       /* Non-blocking lock for read only */
+
+#ifndef        NO_OLDNAMES
+#define        LK_UNLCK        _LK_UNLCK
+#define        LK_LOCK         _LK_LOCK
+#define        LK_NBLCK        _LK_NBLCK
+#define        LK_RLCK         _LK_RLCK
+#define        LK_NBRLCK       _LK_NBRLCK
+#endif /* Not NO_OLDNAMES */
+
+#endif /* Not _LOCKING_H_ */
diff --git a/include/crt/sys/param.h b/include/crt/sys/param.h
new file mode 100644 (file)
index 0000000..74966bd
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * param.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ */
+
+#ifndef _SYS_PARAM_H
+#define _SYS_PARAM_H
+
+#include <sys/types.h>
+#include <limits.h>
+
+/* These are useful for cross-compiling */ 
+#define BIG_ENDIAN     4321
+#define LITTLE_ENDIAN  1234
+#define BYTE_ORDER     LITTLE_ENDIAN
+
+#define MAXPATHLEN PATH_MAX
+
+#endif
diff --git a/include/crt/sys/stat.h b/include/crt/sys/stat.h
new file mode 100644 (file)
index 0000000..34019d0
--- /dev/null
@@ -0,0 +1,195 @@
+/*
+ * stat.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Symbolic constants for opening and creating files, also stat, fstat and
+ * chmod functions.
+ *
+ */
+
+#ifndef _STAT_H_
+#define _STAT_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define __need_size_t
+#define __need_wchar_t
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif /* Not RC_INVOKED */
+
+#include <sys/types.h>
+
+/*
+ * Constants for the stat st_mode member.
+ */
+#define        _S_IFIFO        0x1000  /* FIFO */
+#define        _S_IFCHR        0x2000  /* Character */
+#define        _S_IFBLK        0x3000  /* Block: Is this ever set under w32? */
+#define        _S_IFDIR        0x4000  /* Directory */
+#define        _S_IFREG        0x8000  /* Regular */
+
+#define        _S_IFMT         0xF000  /* File type mask */
+
+#define        _S_IEXEC        0x0040
+#define        _S_IWRITE       0x0080
+#define        _S_IREAD        0x0100
+
+#define        _S_IRWXU        (_S_IREAD | _S_IWRITE | _S_IEXEC)
+#define        _S_IXUSR        _S_IEXEC
+#define        _S_IWUSR        _S_IWRITE
+#define        _S_IRUSR        _S_IREAD
+
+#define        _S_ISDIR(m)     (((m) & _S_IFMT) == _S_IFDIR)
+#define        _S_ISFIFO(m)    (((m) & _S_IFMT) == _S_IFIFO)
+#define        _S_ISCHR(m)     (((m) & _S_IFMT) == _S_IFCHR)
+#define        _S_ISBLK(m)     (((m) & _S_IFMT) == _S_IFBLK)
+#define        _S_ISREG(m)     (((m) & _S_IFMT) == _S_IFREG)
+
+#ifndef _NO_OLDNAMES
+
+#define        S_IFIFO         _S_IFIFO
+#define        S_IFCHR         _S_IFCHR
+#define        S_IFBLK         _S_IFBLK
+#define        S_IFDIR         _S_IFDIR
+#define        S_IFREG         _S_IFREG
+#define        S_IFMT          _S_IFMT
+#define        S_IEXEC         _S_IEXEC
+#define        S_IWRITE        _S_IWRITE
+#define        S_IREAD         _S_IREAD
+#define        S_IRWXU         _S_IRWXU
+#define        S_IXUSR         _S_IXUSR
+#define        S_IWUSR         _S_IWUSR
+#define        S_IRUSR         _S_IRUSR
+
+#define        S_ISDIR(m)      (((m) & S_IFMT) == S_IFDIR)
+#define        S_ISFIFO(m)     (((m) & S_IFMT) == S_IFIFO)
+#define        S_ISCHR(m)      (((m) & S_IFMT) == S_IFCHR)
+#define        S_ISBLK(m)      (((m) & S_IFMT) == S_IFBLK)
+#define        S_ISREG(m)      (((m) & S_IFMT) == S_IFREG)
+
+#endif /* Not _NO_OLDNAMES */
+
+#ifndef RC_INVOKED
+
+#ifndef _STAT_DEFINED
+/*
+ * The structure manipulated and returned by stat and fstat.
+ *
+ * NOTE: If called on a directory the values in the time fields are not only
+ * invalid, they will cause localtime et. al. to return NULL. And calling
+ * asctime with a NULL pointer causes an Invalid Page Fault. So watch it!
+ */
+struct _stat
+{
+       _dev_t  st_dev;         /* Equivalent to drive number 0=A 1=B ... */
+       _ino_t  st_ino;         /* Always zero ? */
+       _mode_t st_mode;        /* See above constants */
+       short   st_nlink;       /* Number of links. */
+       short   st_uid;         /* User: Maybe significant on NT ? */
+       short   st_gid;         /* Group: Ditto */
+       _dev_t  st_rdev;        /* Seems useless (not even filled in) */
+       _off_t  st_size;        /* File size in bytes */
+       time_t  st_atime;       /* Accessed date (always 00:00 hrs local
+                                * on FAT) */
+       time_t  st_mtime;       /* Modified time */
+       time_t  st_ctime;       /* Creation time */
+};
+
+#ifndef        _NO_OLDNAMES
+/* NOTE: Must be the same as _stat above. */
+struct stat
+{
+       _dev_t  st_dev;         /* Equivalent to drive number 0=A 1=B ... */
+       _ino_t  st_ino;         /* Always zero ? */
+       _mode_t st_mode;        /* See above constants */
+       short   st_nlink;       /* Number of links. */
+       short   st_uid;         /* User: Maybe significant on NT ? */
+       short   st_gid;         /* Group: Ditto */
+       _dev_t  st_rdev;        /* Seems useless (not even filled in) */
+       _off_t  st_size;        /* File size in bytes */
+       time_t  st_atime;       /* Accessed date (always 00:00 hrs local
+                                * on FAT) */
+       time_t  st_mtime;       /* Modified time */
+       time_t  st_ctime;       /* Creation time */
+};
+#endif /* _NO_OLDNAMES */
+
+#if defined (__MSVCRT__)
+struct _stati64 {
+    _dev_t st_dev;
+    _ino_t st_ino;
+    unsigned short st_mode;
+    short st_nlink;
+    short st_uid;
+    short st_gid;
+    _dev_t st_rdev;
+    __int64 st_size;
+    time_t st_atime;
+    time_t st_mtime;
+    time_t st_ctime;
+};
+
+struct __stat64
+{
+    _dev_t st_dev;
+    _ino_t st_ino;
+    _mode_t st_mode;
+    short st_nlink;
+    short st_uid;
+    short st_gid;
+    _dev_t st_rdev;
+    __int64 st_size;
+    __time64_t st_atime;
+    __time64_t st_mtime;
+    __time64_t st_ctime;
+};
+#endif /* __MSVCRT__ */
+#define _STAT_DEFINED
+#endif /* _STAT_DEFINED */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    _fstat (int, struct _stat*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _chmod (const char*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _stat (const char*, struct _stat*);
+
+#ifndef        _NO_OLDNAMES
+
+/* These functions live in liboldnames.a. */
+_CRTIMP int __cdecl __MINGW_NOTHROW    fstat (int, struct stat*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    chmod (const char*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW    stat (const char*, struct stat*);
+
+#endif /* Not _NO_OLDNAMES */
+
+#if defined (__MSVCRT__)
+_CRTIMP int __cdecl __MINGW_NOTHROW  _fstati64(int, struct _stati64 *);
+_CRTIMP int __cdecl __MINGW_NOTHROW  _stati64(const char *, struct _stati64 *);
+/* These require newer versions of msvcrt.dll (6.10 or higher).  */
+#if __MSVCRT_VERSION__ >= 0x0601
+_CRTIMP int __cdecl __MINGW_NOTHROW _fstat64 (int, struct __stat64*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _stat64 (const char*, struct __stat64*);
+#endif /* __MSVCRT_VERSION__ >= 0x0601 */
+#if !defined ( _WSTAT_DEFINED) /* also declared in wchar.h */
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wstat(const wchar_t*, struct _stat*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wstati64 (const wchar_t*, struct _stati64*);
+#if __MSVCRT_VERSION__ >= 0x0601
+_CRTIMP int __cdecl __MINGW_NOTHROW _wstat64 (const wchar_t*, struct __stat64*);
+#endif /* __MSVCRT_VERSION__ >= 0x0601 */
+#define _WSTAT_DEFINED
+#endif /* _WSTAT_DEFIND */
+#endif /* __MSVCRT__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _STAT_H_ */
diff --git a/include/crt/sys/time.h b/include/crt/sys/time.h
new file mode 100644 (file)
index 0000000..e11a2ba
--- /dev/null
@@ -0,0 +1,47 @@
+#ifndef _SYS_TIME_H_
+#define _SYS_TIME_H_
+#include <time.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _TIMEVAL_DEFINED /* also in winsock[2].h */
+#define _TIMEVAL_DEFINED
+struct timeval {
+  long tv_sec;
+  long tv_usec;
+};
+#define timerisset(tvp)         ((tvp)->tv_sec || (tvp)->tv_usec)
+#define timercmp(tvp, uvp, cmp) \
+       (((tvp)->tv_sec != (uvp)->tv_sec) ? \
+       ((tvp)->tv_sec cmp (uvp)->tv_sec) : \
+       ((tvp)->tv_usec cmp (uvp)->tv_usec))
+#define timerclear(tvp)         (tvp)->tv_sec = (tvp)->tv_usec = 0
+#endif /* _TIMEVAL_DEFINED */
+
+/* Provided for compatibility with code that assumes that
+   the presence of gettimeofday function implies a definition
+   of struct timezone. */
+struct timezone
+{
+  int tz_minuteswest; /* of Greenwich */
+  int tz_dsttime;     /* type of dst correction to apply */
+};
+
+/*
+   Implementation as per:
+   The Open Group Base Specifications, Issue 6
+   IEEE Std 1003.1, 2004 Edition
+
+   The timezone pointer arg is ignored.  Errors are ignored.
+*/
+int __cdecl __MINGW_NOTHROW gettimeofday(struct timeval *__restrict__,
+                        void *__restrict__  /* tzp (unused) */);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _SYS_TIME_H_ */
diff --git a/include/crt/sys/timeb.h b/include/crt/sys/timeb.h
new file mode 100644 (file)
index 0000000..72e2fcf
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * timeb.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Support for the UNIX System V ftime system call.
+ *
+ */
+
+#ifndef        _TIMEB_H_
+#define        _TIMEB_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+#include <sys/types.h>
+
+#ifndef        RC_INVOKED
+
+/*
+ * TODO: Structure not tested.
+ */
+struct _timeb
+{
+       long    time;
+       short   millitm;
+       short   timezone;
+       short   dstflag;
+};
+
+#ifndef        _NO_OLDNAMES
+/*
+ * TODO: Structure not tested.
+ */
+struct timeb
+{
+       long    time;
+       short   millitm;
+       short   timezone;
+       short   dstflag;
+};
+#endif
+
+struct __timeb64
+{
+       __time64_t time;
+       short millitm;
+       short timezone;
+       short dstflag;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* TODO: Not tested. */
+_CRTIMP void __cdecl __MINGW_NOTHROW   _ftime (struct _timeb*);
+
+#ifndef        _NO_OLDNAMES
+_CRTIMP void __cdecl __MINGW_NOTHROW   ftime (struct timeb*);
+#endif /* Not _NO_OLDNAMES */
+
+/* This requires newer versions of msvcrt.dll (6.10 or higher).  */
+#if __MSVCRT_VERSION__ >= 0x0601
+_CRTIMP void __cdecl __MINGW_NOTHROW   _ftime64 (struct __timeb64*);
+#endif /* __MSVCRT_VERSION__ >= 0x0601 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _TIMEB_H_ */
diff --git a/include/crt/sys/types.h b/include/crt/sys/types.h
new file mode 100644 (file)
index 0000000..026471f
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * types.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * The definition of constants, data types and global variables.
+ *
+ */
+
+#ifndef        _TYPES_H_
+#define        _TYPES_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define __need_wchar_t
+#define __need_size_t
+#define __need_ptrdiff_t
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif /* Not RC_INVOKED */
+
+#ifndef RC_INVOKED
+
+#ifndef _TIME_T_DEFINED
+typedef        long    time_t;
+#define        _TIME_T_DEFINED
+#endif
+
+#ifndef _TIME64_T_DEFINED
+typedef __int64 __time64_t;
+#define _TIME64_T_DEFINED
+#endif
+
+#ifndef        _OFF_T_
+#define        _OFF_T_
+typedef long _off_t;
+
+#ifndef        _NO_OLDNAMES
+typedef _off_t off_t;
+#endif
+#endif /* Not _OFF_T_ */
+
+
+#ifndef _DEV_T_
+#define        _DEV_T_
+#ifdef __MSVCRT__
+typedef unsigned int _dev_t;
+#else
+typedef short _dev_t;
+#endif
+
+#ifndef        _NO_OLDNAMES
+typedef _dev_t dev_t;
+#endif
+#endif /* Not _DEV_T_ */
+
+
+#ifndef _INO_T_
+#define        _INO_T_
+typedef short _ino_t;
+
+#ifndef        _NO_OLDNAMES
+typedef _ino_t ino_t;
+#endif
+#endif /* Not _INO_T_ */
+
+
+#ifndef _PID_T_
+#define        _PID_T_
+typedef int    _pid_t;
+
+#ifndef        _NO_OLDNAMES
+typedef _pid_t pid_t;
+#endif
+#endif /* Not _PID_T_ */
+
+
+#ifndef _MODE_T_
+#define        _MODE_T_
+typedef unsigned short _mode_t;
+
+#ifndef        _NO_OLDNAMES
+typedef _mode_t        mode_t;
+#endif
+#endif /* Not _MODE_T_ */
+
+
+#ifndef _SIGSET_T_
+#define        _SIGSET_T_
+typedef int    _sigset_t;
+
+#ifndef        _NO_OLDNAMES
+typedef _sigset_t      sigset_t;
+#endif
+#endif /* Not _SIGSET_T_ */
+
+#ifndef _SSIZE_T_
+#define _SSIZE_T_
+typedef long _ssize_t;
+
+#ifndef        _NO_OLDNAMES
+typedef _ssize_t ssize_t;
+#endif
+#endif /* Not _SSIZE_T_ */
+
+#ifndef _FPOS64_T_
+#define _FPOS64_T_
+typedef long long fpos64_t;
+#endif
+
+#ifndef _OFF64_T_
+#define _OFF64_T_
+typedef long long off64_t;
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _TYPES_H_ */
diff --git a/include/crt/sys/unistd.h b/include/crt/sys/unistd.h
new file mode 100644 (file)
index 0000000..39eac4a
--- /dev/null
@@ -0,0 +1,6 @@
+/*
+ * This file is part of the Mingw32 package.
+ *
+ * unistd.h maps (roughly) to io.h
+ */
+#include <io.h>
diff --git a/include/crt/sys/utime.h b/include/crt/sys/utime.h
new file mode 100644 (file)
index 0000000..a6b1cd6
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * utime.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Support for the utime function.
+ *
+ */
+#ifndef        _UTIME_H_
+#define        _UTIME_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define __need_wchar_t
+#define __need_size_t
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif /* Not RC_INVOKED */
+#include <sys/types.h>
+
+#ifndef        RC_INVOKED
+
+/*
+ * Structure used by _utime function.
+ */
+struct _utimbuf
+{
+       time_t  actime;         /* Access time */
+       time_t  modtime;        /* Modification time */
+};
+
+
+#ifndef        _NO_OLDNAMES
+/* NOTE: Must be the same as _utimbuf above. */
+struct utimbuf
+{
+       time_t  actime;
+       time_t  modtime;
+};
+#endif /* Not _NO_OLDNAMES */
+
+struct __utimbuf64
+{
+       __time64_t actime;
+       __time64_t modtime;
+};
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    _utime (const char*, struct _utimbuf*);
+
+#ifndef        _NO_OLDNAMES
+_CRTIMP int __cdecl __MINGW_NOTHROW    utime (const char*, struct utimbuf*);
+#endif /* Not _NO_OLDNAMES */
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    _futime (int, struct _utimbuf*);
+
+/* The wide character version, only available for MSVCRT versions of the
+ * C runtime library. */
+#ifdef __MSVCRT__
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wutime (const wchar_t*, struct _utimbuf*);
+#endif /* MSVCRT runtime */
+
+/* These require newer versions of msvcrt.dll (6.10 or higher).  */
+#if __MSVCRT_VERSION__ >= 0x0601
+_CRTIMP int __cdecl __MINGW_NOTHROW    _utime64 (const char*, struct __utimbuf64*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wutime64 (const wchar_t*, struct __utimbuf64*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _futime64 (int, struct __utimbuf64*);
+#endif /* __MSVCRT_VERSION__ >= 0x0601 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _UTIME_H_ */
diff --git a/include/crt/time.h b/include/crt/time.h
new file mode 100644 (file)
index 0000000..9bcf452
--- /dev/null
@@ -0,0 +1,219 @@
+/*
+ * time.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Date and time functions and types.
+ *
+ */
+
+#ifndef        _TIME_H_
+#define        _TIME_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define __need_wchar_t
+#define __need_size_t
+#define __need_NULL
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif /* Not RC_INVOKED */
+
+/*
+ * Number of clock ticks per second. A clock tick is the unit by which
+ * processor time is measured and is returned by 'clock'.
+ */
+#define        CLOCKS_PER_SEC  ((clock_t)1000)
+#define        CLK_TCK         CLOCKS_PER_SEC
+
+
+#ifndef RC_INVOKED
+
+/*
+ * A type for storing the current time and date. This is the number of
+ * seconds since midnight Jan 1, 1970.
+ * NOTE: This is also defined in non-ISO sys/types.h.
+ */
+#ifndef _TIME_T_DEFINED
+typedef        long    time_t;
+#define _TIME_T_DEFINED
+#endif
+
+#ifndef __STRICT_ANSI__
+/* A 64-bit time_t to get to Y3K */
+#ifndef _TIME64_T_DEFINED
+typedef __int64 __time64_t;
+#define _TIME64_T_DEFINED
+#endif
+#endif
+/*
+ * A type for measuring processor time (in clock ticks).
+ */
+#ifndef _CLOCK_T_DEFINED
+typedef        long    clock_t;
+#define _CLOCK_T_DEFINED
+#endif
+
+#ifndef _TM_DEFINED
+/*
+ * A structure for storing all kinds of useful information about the
+ * current (or another) time.
+ */
+struct tm
+{
+       int     tm_sec;         /* Seconds: 0-59 (K&R says 0-61?) */
+       int     tm_min;         /* Minutes: 0-59 */
+       int     tm_hour;        /* Hours since midnight: 0-23 */
+       int     tm_mday;        /* Day of the month: 1-31 */
+       int     tm_mon;         /* Months *since* january: 0-11 */
+       int     tm_year;        /* Years since 1900 */
+       int     tm_wday;        /* Days since Sunday (0-6) */
+       int     tm_yday;        /* Days since Jan. 1: 0-365 */
+       int     tm_isdst;       /* +1 Daylight Savings Time, 0 No DST,
+                                * -1 don't know */
+};
+#define _TM_DEFINED
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_CRTIMP clock_t __cdecl __MINGW_NOTHROW        clock (void);
+_CRTIMP time_t __cdecl __MINGW_NOTHROW time (time_t*);
+_CRTIMP double __cdecl __MINGW_NOTHROW difftime (time_t, time_t);
+_CRTIMP time_t __cdecl __MINGW_NOTHROW mktime (struct tm*);
+
+/*
+ * These functions write to and return pointers to static buffers that may
+ * be overwritten by other function calls. Yikes!
+ *
+ * NOTE: localtime, and perhaps the others of the four functions grouped
+ * below may return NULL if their argument is not 'acceptable'. Also note
+ * that calling asctime with a NULL pointer will produce an Invalid Page
+ * Fault and crap out your program. Guess how I know. Hint: stat called on
+ * a directory gives 'invalid' times in st_atime etc...
+ */
+_CRTIMP char* __cdecl __MINGW_NOTHROW          asctime (const struct tm*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW          ctime (const time_t*);
+_CRTIMP struct tm*  __cdecl __MINGW_NOTHROW    gmtime (const time_t*);
+_CRTIMP struct tm*  __cdecl __MINGW_NOTHROW    localtime (const time_t*);
+
+_CRTIMP size_t __cdecl __MINGW_NOTHROW         strftime (char*, size_t, const char*, const struct tm*);
+
+#ifndef __STRICT_ANSI__
+
+extern _CRTIMP void __cdecl __MINGW_NOTHROW    _tzset (void);
+
+#ifndef _NO_OLDNAMES
+extern _CRTIMP void __cdecl __MINGW_NOTHROW    tzset (void);
+#endif
+
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _strdate(char*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW  _strtime(char*);
+
+/* These require newer versions of msvcrt.dll (6.10 or higher). */
+#if __MSVCRT_VERSION__ >= 0x0601
+_CRTIMP __time64_t __cdecl __MINGW_NOTHROW  _time64( __time64_t*);
+_CRTIMP __time64_t __cdecl __MINGW_NOTHROW  _mktime64 (struct tm*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW _ctime64 (const __time64_t*);
+_CRTIMP struct tm*  __cdecl __MINGW_NOTHROW _gmtime64 (const __time64_t*);
+_CRTIMP struct tm*  __cdecl __MINGW_NOTHROW _localtime64 (const __time64_t*);
+#endif /* __MSVCRT_VERSION__ >= 0x0601 */
+
+/*
+ * _daylight: non zero if daylight savings time is used.
+ * _timezone: difference in seconds between GMT and local time.
+ * _tzname: standard/daylight savings time zone names (an array with two
+ *          elements).
+ */
+#ifdef __MSVCRT__
+
+/* These are for compatibility with pre-VC 5.0 suppied MSVCRT. */
+extern _CRTIMP int* __cdecl __MINGW_NOTHROW    __p__daylight (void);
+extern _CRTIMP long* __cdecl __MINGW_NOTHROW   __p__timezone (void);
+extern _CRTIMP char** __cdecl __MINGW_NOTHROW  __p__tzname (void);
+
+__MINGW_IMPORT int     _daylight;
+__MINGW_IMPORT long    _timezone;
+__MINGW_IMPORT char    *_tzname[2];
+
+#else /* not __MSVCRT (ie. crtdll) */
+
+#ifndef __DECLSPEC_SUPPORTED
+
+extern int*    _imp___daylight_dll;
+extern long*   _imp___timezone_dll;
+extern char**  _imp___tzname;
+
+#define _daylight      (*_imp___daylight_dll)
+#define _timezone      (*_imp___timezone_dll)
+#define _tzname                (*_imp___tzname)
+
+#else /* __DECLSPEC_SUPPORTED */
+
+__MINGW_IMPORT int     _daylight_dll;
+__MINGW_IMPORT long    _timezone_dll;
+__MINGW_IMPORT char*   _tzname[2];
+
+#define _daylight      _daylight_dll
+#define _timezone      _timezone_dll
+
+#endif /* __DECLSPEC_SUPPORTED */
+
+#endif /* not __MSVCRT__ */
+
+#ifndef _NO_OLDNAMES
+
+#ifdef __MSVCRT__
+
+/* These go in the oldnames import library for MSVCRT. */
+__MINGW_IMPORT int     daylight;
+__MINGW_IMPORT long    timezone;
+__MINGW_IMPORT char    *tzname[2];
+
+#else /* not __MSVCRT__ */
+
+/* CRTDLL is royally messed up when it comes to these macros.
+   TODO: import and alias these via oldnames import library instead
+   of macros.  */
+
+#define daylight        _daylight
+/* NOTE: timezone not defined as macro because it would conflict with
+   struct timezone in sys/time.h.
+   Also, tzname used to a be macro, but now it's in moldname. */
+__MINGW_IMPORT char    *tzname[2];
+
+#endif /* not __MSVCRT__ */
+
+#endif /* Not _NO_OLDNAMES */
+#endif /* Not __STRICT_ANSI__ */
+
+#ifndef _WTIME_DEFINED
+/* wide function prototypes, also declared in wchar.h */
+#ifndef __STRICT_ANSI__
+#ifdef __MSVCRT__
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW       _wasctime(const struct tm*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW       _wctime(const time_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW       _wstrdate(wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW       _wstrtime(wchar_t*);
+#if __MSVCRT_VERSION__ >= 0x0601
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW       _wctime64 (const __time64_t*);
+#endif
+#endif /*  __MSVCRT__ */
+#endif /* __STRICT_ANSI__ */
+_CRTIMP size_t __cdecl __MINGW_NOTHROW         wcsftime (wchar_t*, size_t, const wchar_t*, const struct tm*);
+#define _WTIME_DEFINED
+#endif /* _WTIME_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _TIME_H_ */
+
+
diff --git a/include/crt/unistd.h b/include/crt/unistd.h
new file mode 100644 (file)
index 0000000..90934a0
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * This file is part of the Mingw32 package.
+ *
+ * unistd.h maps (roughly) to io.h
+ */
+
+#ifndef _UNISTD_H
+#define _UNISTD_H
+
+#include <io.h>
+#include <process.h>
+
+#define __UNISTD_GETOPT__
+#include <getopt.h>
+#undef __UNISTD_GETOPT__
+
+/* These are also defined in stdio.h. */
+#ifndef        SEEK_SET
+#define SEEK_SET 0
+#endif
+
+#ifndef        SEEK_CUR
+#define SEEK_CUR 1
+#endif
+
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* This is defined as a real library function to allow autoconf
+   to verify its existence. */
+int ftruncate(int, off_t);
+__CRT_INLINE int ftruncate(int __fd, off_t __length)
+{
+  return _chsize (__fd, __length);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UNISTD_H */
diff --git a/include/crt/utime.h b/include/crt/utime.h
new file mode 100644 (file)
index 0000000..8285f38
--- /dev/null
@@ -0,0 +1 @@
+#include <sys/utime.h>
diff --git a/include/crt/wchar.h b/include/crt/wchar.h
new file mode 100644 (file)
index 0000000..3c3ef35
--- /dev/null
@@ -0,0 +1,483 @@
+/*
+ * wchar.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Defines of all functions for supporting wide characters. Actually it
+ * just includes all those headers, which is not a good thing to do from a
+ * processing time point of view, but it does mean that everything will be
+ * in sync.
+ *
+ */
+
+#ifndef        _WCHAR_H_
+#define        _WCHAR_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#ifndef RC_INVOKED
+
+#define __need_size_t
+#define __need_wint_t
+#define __need_wchar_t
+#define __need_NULL
+#include <stddef.h>
+
+#ifndef __VALIST
+#if defined __GNUC__ && __GNUC__ >= 3
+#define __need___va_list
+#include <stdarg.h>
+#define __VALIST __builtin_va_list
+#else
+#define __VALIST char*
+#endif
+#endif
+
+#endif /* Not RC_INVOKED */
+
+/*
+ * MSDN says that isw* char classifications are in wchar.h and wctype.h.
+ * Although the wctype names are ANSI, their exposure in this header is
+ * not.
+ */
+#include <wctype.h>
+
+#ifndef        __STRICT_ANSI__
+/* This is necessary to support the the non-ANSI wchar declarations
+   here. */
+#include <sys/types.h>
+#endif /* __STRICT_ANSI__ */
+
+#define WCHAR_MIN      0
+#define WCHAR_MAX      0xffff
+
+#ifndef WEOF
+#define        WEOF    (wchar_t)(0xFFFF)
+#endif
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus 
+extern "C" {
+#endif
+
+#ifndef _FILE_DEFINED  /* Also in stdio.h */
+#define        _FILE_DEFINED
+typedef struct _iobuf
+{
+       char*   _ptr;
+       int     _cnt;
+       char*   _base;
+       int     _flag;
+       int     _file;
+       int     _charbuf;
+       int     _bufsiz;
+       char*   _tmpfname;
+} FILE;
+#endif /* Not _FILE_DEFINED */
+
+#ifndef _TIME_T_DEFINED  /* Also in time.h */
+typedef long time_t;
+#define _TIME_T_DEFINED
+#endif
+
+#ifndef _TM_DEFINED /* Also in time.h */
+struct tm {
+        int tm_sec;     /* seconds after the minute - [0,59] */
+        int tm_min;     /* minutes after the hour - [0,59] */
+        int tm_hour;    /* hours since midnight - [0,23] */
+        int tm_mday;    /* day of the month - [1,31] */
+        int tm_mon;     /* months since January - [0,11] */
+        int tm_year;    /* years since 1900 */
+        int tm_wday;    /* days since Sunday - [0,6] */
+        int tm_yday;    /* days since January 1 - [0,365] */
+        int tm_isdst;   /* daylight savings time flag */
+        };
+#define _TM_DEFINED
+#endif
+
+#ifndef _WSTDIO_DEFINED
+/*  Also in stdio.h - keep in sync */
+_CRTIMP int __cdecl __MINGW_NOTHROW    fwprintf (FILE*, const wchar_t*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wprintf (const wchar_t*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    swprintf (wchar_t*, const wchar_t*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _snwprintf (wchar_t*, size_t, const wchar_t*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    vfwprintf (FILE*, const wchar_t*, __VALIST);
+_CRTIMP int __cdecl __MINGW_NOTHROW    vwprintf (const wchar_t*, __VALIST);
+_CRTIMP int __cdecl __MINGW_NOTHROW    vswprintf (wchar_t*, const wchar_t*, __VALIST);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _vsnwprintf (wchar_t*, size_t, const wchar_t*, __VALIST);
+_CRTIMP int __cdecl __MINGW_NOTHROW    fwscanf (FILE*, const wchar_t*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wscanf (const wchar_t*, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    swscanf (const wchar_t*, const wchar_t*, ...);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW fgetwc (FILE*);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW fputwc (wchar_t, FILE*);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW ungetwc (wchar_t, FILE*);
+
+#ifdef __MSVCRT__ 
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW fgetws (wchar_t*, int, FILE*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    fputws (const wchar_t*, FILE*);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW getwc (FILE*);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW getwchar (void);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW putwc (wint_t, FILE*);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW putwchar (wint_t);
+#ifndef __STRICT_ANSI__
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _getws (wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _putws (const wchar_t*);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  _wfdopen(int, wchar_t *);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  _wfopen (const wchar_t*, const wchar_t*);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  _wfreopen (const wchar_t*, const wchar_t*, FILE*);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  _wfsopen (const wchar_t*, const wchar_t*, int);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wtmpnam (wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wtempnam (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wrename (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wremove (const wchar_t*);
+_CRTIMP void __cdecl __MINGW_NOTHROW   _wperror (const wchar_t*);
+_CRTIMP FILE* __cdecl __MINGW_NOTHROW  _wpopen (const wchar_t*, const wchar_t*);
+#endif  /* __STRICT_ANSI__ */
+#endif /* __MSVCRT__ */
+
+#ifndef __NO_ISOCEXT  /* externs in libmingwex.a */
+int __cdecl __MINGW_NOTHROW snwprintf (wchar_t* s, size_t n, const wchar_t*  format, ...);
+__CRT_INLINE int __cdecl __MINGW_NOTHROW
+vsnwprintf (wchar_t* s, size_t n, const wchar_t* format, __VALIST arg)
+  { return _vsnwprintf ( s, n, format, arg);}
+int __cdecl __MINGW_NOTHROW vwscanf (const wchar_t * __restrict__, __VALIST);
+int __cdecl __MINGW_NOTHROW vfwscanf (FILE * __restrict__,
+                      const wchar_t * __restrict__, __VALIST);
+int __cdecl __MINGW_NOTHROW vswscanf (const wchar_t * __restrict__,
+                      const wchar_t * __restrict__, __VALIST);
+#endif
+
+#define _WSTDIO_DEFINED
+#endif /* _WSTDIO_DEFINED */
+#ifndef _WSTDLIB_DEFINED /* also declared in stdlib.h */
+_CRTIMP long __cdecl __MINGW_NOTHROW   wcstol (const wchar_t*, wchar_t**, int);
+_CRTIMP unsigned long __cdecl __MINGW_NOTHROW wcstoul (const wchar_t*, wchar_t**, int);
+_CRTIMP double __cdecl __MINGW_NOTHROW wcstod (const wchar_t*, wchar_t**);
+#if !defined __NO_ISOCEXT /* in libmingwex.a */
+float __cdecl __MINGW_NOTHROW wcstof (const wchar_t * __restrict__, wchar_t ** __restrict__);
+long double __cdecl __MINGW_NOTHROW wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__);
+#endif /* __NO_ISOCEXT */
+#ifdef __MSVCRT__ 
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wgetenv(const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wputenv(const wchar_t*);
+_CRTIMP void __cdecl __MINGW_NOTHROW   _wsearchenv(const wchar_t*, const wchar_t*, wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wsystem(const wchar_t*);
+_CRTIMP void __cdecl __MINGW_NOTHROW   _wmakepath(wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*);
+_CRTIMP void __cdecl __MINGW_NOTHROW   _wsplitpath (const wchar_t*, wchar_t*, wchar_t*, wchar_t*, wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wfullpath (wchar_t*, const wchar_t*, size_t);
+#endif
+#define  _WSTDLIB_DEFINED
+#endif /* _WSTDLIB_DEFINED */
+
+#ifndef _WTIME_DEFINED
+#ifndef __STRICT_ANSI__
+#ifdef __MSVCRT__
+/* wide function prototypes, also declared in time.h */
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW       _wasctime (const struct tm*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW       _wctime (const time_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW       _wstrdate (wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW       _wstrtime (wchar_t*);
+#if __MSVCRT_VERSION__ >= 0x601
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW       _wctime64 (const __time64_t*);
+#endif
+#endif /* __MSVCRT__ */
+#endif /* __STRICT_ANSI__ */
+_CRTIMP size_t __cdecl __MINGW_NOTHROW wcsftime (wchar_t*, size_t, const wchar_t*, const struct tm*);
+#define _WTIME_DEFINED
+#endif /* _WTIME_DEFINED */ 
+
+
+#ifndef _WSTRING_DEFINED
+/*
+ * Unicode versions of the standard string calls.
+ * Also in string.h.
+ */
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcscat (wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcschr (const wchar_t*, wchar_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wcscmp (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wcscoll (const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcscpy (wchar_t*, const wchar_t*);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW wcscspn (const wchar_t*, const wchar_t*);
+/* Note:  _wcserror requires __MSVCRT_VERSION__ >= 0x0700.  */
+_CRTIMP size_t __cdecl __MINGW_NOTHROW wcslen (const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsncat (wchar_t*, const wchar_t*, size_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wcsncmp(const wchar_t*, const wchar_t*, size_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsncpy(wchar_t*, const wchar_t*, size_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcspbrk(const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsrchr(const wchar_t*, wchar_t);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW wcsspn(const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsstr(const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcstok(wchar_t*, const wchar_t*);
+_CRTIMP size_t __cdecl __MINGW_NOTHROW wcsxfrm(wchar_t*, const wchar_t*, size_t);
+
+#ifndef        __STRICT_ANSI__
+/*
+ * Unicode versions of non-ANSI functions provided by CRTDLL.
+ */
+
+/* NOTE: _wcscmpi not provided by CRTDLL, this define is for portability */
+#define                _wcscmpi        _wcsicmp
+
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wcsdup (const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wcsicmp (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wcsicoll (const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wcslwr (wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wcsnicmp (const wchar_t*, const wchar_t*, size_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wcsnset (wchar_t*, wchar_t, size_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wcsrev (wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wcsset (wchar_t*, wchar_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wcsupr (wchar_t*);
+
+#ifdef __MSVCRT__
+_CRTIMP int __cdecl __MINGW_NOTHROW  _wcsncoll(const wchar_t*, const wchar_t*, size_t);
+_CRTIMP int   __cdecl __MINGW_NOTHROW _wcsnicoll(const wchar_t*, const wchar_t*, size_t);
+#if __MSVCRT_VERSION__ >= 0x0700
+_CRTIMP  wchar_t* __cdecl __MINGW_NOTHROW _wcserror(int);
+_CRTIMP  wchar_t* __cdecl __MINGW_NOTHROW __wcserror(const wchar_t*);
+#endif
+#endif
+
+#ifndef        _NO_OLDNAMES
+/* NOTE: There is no _wcscmpi, but this is for compatibility. */
+__CRT_INLINE int __cdecl __MINGW_NOTHROW
+wcscmpi (const wchar_t * __ws1, const wchar_t * __ws2)
+  {return _wcsicmp (__ws1, __ws2);}
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsdup (const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wcsicmp (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wcsicoll (const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcslwr (wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    wcsnicmp (const wchar_t*, const wchar_t*, size_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsnset (wchar_t*, wchar_t, size_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsrev (wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsset (wchar_t*, wchar_t);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW wcsupr (wchar_t*);
+#endif /* Not _NO_OLDNAMES */
+
+#endif /* Not strict ANSI */
+
+#define _WSTRING_DEFINED
+#endif  /* _WSTRING_DEFINED */
+
+/* These are resolved by -lmingwex. Alternatively, they can be resolved by
+   adding -lmsvcp60 to your command line, which will give you the VC++
+   versions of these functions. If you want the latter and don't have
+   msvcp60.dll in your windows system directory, you can easily obtain
+   it with a search from your favorite search engine.  */
+#ifndef __STRICT_ANSI__
+typedef wchar_t _Wint_t;
+#endif
+
+typedef int mbstate_t;
+
+wint_t __cdecl __MINGW_NOTHROW btowc(int);
+size_t __cdecl __MINGW_NOTHROW mbrlen(const char * __restrict__, size_t,
+                     mbstate_t * __restrict__);
+size_t __cdecl __MINGW_NOTHROW mbrtowc(wchar_t * __restrict__, const char * __restrict__,
+                      size_t, mbstate_t * __restrict__);
+size_t __cdecl __MINGW_NOTHROW mbsrtowcs(wchar_t * __restrict__, const char ** __restrict__,
+                        size_t, mbstate_t * __restrict__);
+size_t __cdecl __MINGW_NOTHROW wcrtomb(char * __restrict__, wchar_t,
+                      mbstate_t * __restrict__);
+size_t __cdecl __MINGW_NOTHROW wcsrtombs(char * __restrict__, const wchar_t ** __restrict__,
+                        size_t, mbstate_t * __restrict__);
+int __cdecl __MINGW_NOTHROW wctob(wint_t);
+
+#ifndef __NO_ISOCEXT /* these need static lib libmingwex.a */
+__CRT_INLINE int __cdecl __MINGW_NOTHROW fwide(FILE* __UNUSED_PARAM(stream),
+                              int __UNUSED_PARAM(mode))
+  {return -1;} /* limited to byte orientation */ 
+__CRT_INLINE int __cdecl __MINGW_NOTHROW mbsinit(const mbstate_t* __UNUSED_PARAM(ps))
+  {return 1;}
+wchar_t* __cdecl __MINGW_NOTHROW wmemset(wchar_t *, wchar_t, size_t);
+wchar_t* __cdecl __MINGW_NOTHROW wmemchr(const wchar_t*, wchar_t, size_t);
+int wmemcmp(const wchar_t*, const wchar_t *, size_t);
+wchar_t* __cdecl __MINGW_NOTHROW wmemcpy(wchar_t* __restrict__,
+                        const wchar_t* __restrict__,
+                        size_t);
+wchar_t* __cdecl __MINGW_NOTHROW wmemmove(wchar_t* s1, const wchar_t *, size_t);
+long long __cdecl __MINGW_NOTHROW wcstoll(const wchar_t * __restrict__,
+                         wchar_t** __restrict__, int);
+unsigned long long __cdecl __MINGW_NOTHROW wcstoull(const wchar_t * __restrict__,
+                           wchar_t ** __restrict__, int);
+#endif /* __NO_ISOCEXT */
+
+#ifndef        __STRICT_ANSI__
+/* non-ANSI wide char functions from io.h, direct.h, sys/stat.h and locale.h.  */
+
+#ifndef        _FSIZE_T_DEFINED
+typedef        unsigned long   _fsize_t;
+#define _FSIZE_T_DEFINED
+#endif
+
+#ifndef _WFINDDATA_T_DEFINED
+struct _wfinddata_t {
+       unsigned        attrib;
+       time_t          time_create;    /* -1 for FAT file systems */
+       time_t          time_access;    /* -1 for FAT file systems */
+       time_t          time_write;
+       _fsize_t        size;
+       wchar_t         name[260];      /* may include spaces. */
+};
+struct _wfinddatai64_t {
+       unsigned    attrib;
+       time_t      time_create;
+       time_t      time_access;
+       time_t      time_write;
+       __int64     size;
+       wchar_t     name[260];
+};
+struct __wfinddata64_t {
+        unsigned    attrib;
+        __time64_t  time_create;    
+        __time64_t  time_access;
+        __time64_t  time_write;
+        _fsize_t    size;
+        wchar_t     name[260];
+};
+#define _WFINDDATA_T_DEFINED
+#endif
+
+/* Wide character versions. Also defined in io.h. */
+/* CHECK: I believe these only exist in MSVCRT, and not in CRTDLL. Also
+   applies to other wide character versions? */
+#if !defined (_WIO_DEFINED)
+#if defined (__MSVCRT__)
+#include <stdint.h>  /* For intptr_t.  */
+_CRTIMP int __cdecl __MINGW_NOTHROW    _waccess (const wchar_t*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wchmod (const wchar_t*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wcreat (const wchar_t*, int);
+_CRTIMP long __cdecl __MINGW_NOTHROW   _wfindfirst (const wchar_t*, struct _wfinddata_t *);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wfindnext (long, struct _wfinddata_t *);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wunlink (const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wopen (const wchar_t*, int, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wsopen (const wchar_t*, int, int, ...);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wmktemp (wchar_t*);
+_CRTIMP long __cdecl __MINGW_NOTHROW   _wfindfirsti64 (const wchar_t*, struct _wfinddatai64_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wfindnexti64 (long, struct _wfinddatai64_t*);
+#if __MSVCRT_VERSION__ >= 0x0601
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wfindfirst64(const wchar_t*, struct __wfinddata64_t*); 
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wfindnext64(intptr_t, struct __wfinddata64_t*);
+#endif /* __MSVCRT_VERSION__ >= 0x0601 */
+#endif /* defined (__MSVCRT__) */
+#define _WIO_DEFINED
+#endif /* _WIO_DEFINED */
+
+#ifndef _WDIRECT_DEFINED
+/* Also in direct.h */
+#ifdef __MSVCRT__ 
+_CRTIMP int __cdecl __MINGW_NOTHROW      _wchdir (const wchar_t*);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW  _wgetcwd (wchar_t*, int);
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW  _wgetdcwd (int, wchar_t*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW      _wmkdir (const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW      _wrmdir (const wchar_t*);
+#endif /* __MSVCRT__ */
+#define _WDIRECT_DEFINED
+#endif /* _WDIRECT_DEFINED */
+
+#ifndef _STAT_DEFINED
+/*
+ * The structure manipulated and returned by stat and fstat.
+ *
+ * NOTE: If called on a directory the values in the time fields are not only
+ * invalid, they will cause localtime et. al. to return NULL. And calling
+ * asctime with a NULL pointer causes an Invalid Page Fault. So watch it!
+ */
+struct _stat
+{
+       _dev_t  st_dev;         /* Equivalent to drive number 0=A 1=B ... */
+       _ino_t  st_ino;         /* Always zero ? */
+       _mode_t st_mode;        /* See above constants */
+       short   st_nlink;       /* Number of links. */
+       short   st_uid;         /* User: Maybe significant on NT ? */
+       short   st_gid;         /* Group: Ditto */
+       _dev_t  st_rdev;        /* Seems useless (not even filled in) */
+       _off_t  st_size;        /* File size in bytes */
+       time_t  st_atime;       /* Accessed date (always 00:00 hrs local
+                                * on FAT) */
+       time_t  st_mtime;       /* Modified time */
+       time_t  st_ctime;       /* Creation time */
+};
+
+#ifndef        _NO_OLDNAMES
+/* NOTE: Must be the same as _stat above. */
+struct stat
+{
+       _dev_t  st_dev;         /* Equivalent to drive number 0=A 1=B ... */
+       _ino_t  st_ino;         /* Always zero ? */
+       _mode_t st_mode;        /* See above constants */
+       short   st_nlink;       /* Number of links. */
+       short   st_uid;         /* User: Maybe significant on NT ? */
+       short   st_gid;         /* Group: Ditto */
+       _dev_t  st_rdev;        /* Seems useless (not even filled in) */
+       _off_t  st_size;        /* File size in bytes */
+       time_t  st_atime;       /* Accessed date (always 00:00 hrs local
+                                * on FAT) */
+       time_t  st_mtime;       /* Modified time */
+       time_t  st_ctime;       /* Creation time */
+};
+#endif /* _NO_OLDNAMES */
+
+#if defined (__MSVCRT__)
+struct _stati64 {
+    _dev_t st_dev;
+    _ino_t st_ino;
+    unsigned short st_mode;
+    short st_nlink;
+    short st_uid;
+    short st_gid;
+    _dev_t st_rdev;
+    __int64 st_size;
+    time_t st_atime;
+    time_t st_mtime;
+    time_t st_ctime;
+    };
+
+struct __stat64
+{
+    _dev_t st_dev;
+    _ino_t st_ino;
+    _mode_t st_mode;
+    short st_nlink;
+    short st_uid;
+    short st_gid;
+    _dev_t st_rdev;
+    __int64 st_size;
+    __time64_t st_atime;
+    __time64_t st_mtime;
+    __time64_t st_ctime;
+};
+#endif  /* __MSVCRT__ */
+#define _STAT_DEFINED
+#endif /* _STAT_DEFINED */
+
+#if !defined ( _WSTAT_DEFINED)
+/* also declared in sys/stat.h */
+#if defined __MSVCRT__
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wstat (const wchar_t*, struct _stat*);
+_CRTIMP int __cdecl __MINGW_NOTHROW    _wstati64 (const wchar_t*, struct _stati64*);
+#if __MSVCRT_VERSION__ >= 0x0601
+_CRTIMP int __cdecl __MINGW_NOTHROW _wstat64 (const wchar_t*, struct __stat64*);
+#endif /* __MSVCRT_VERSION__ >= 0x0601 */
+#endif  /* __MSVCRT__ */
+#define _WSTAT_DEFINED
+#endif /* ! _WSTAT_DEFIND  */
+
+#ifndef _WLOCALE_DEFINED  /* also declared in locale.h */
+_CRTIMP wchar_t* __cdecl __MINGW_NOTHROW _wsetlocale (int, const wchar_t*);
+#define _WLOCALE_DEFINED
+#endif
+
+#endif /* not __STRICT_ANSI__ */
+
+#ifdef __cplusplus
+}      /* end of extern "C" */
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* not _WCHAR_H_ */
+
+
diff --git a/include/crt/wctype.h b/include/crt/wctype.h
new file mode 100644 (file)
index 0000000..5e2dc88
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+ * wctype.h
+ *
+ * Functions for testing wide character types and converting characters.
+ *
+ * This file is part of the Mingw32 package.
+ *
+ * Contributors:
+ *  Created by Mumit Khan <khan@xraylith.wisc.edu>
+ *
+ *  THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ *  This source code is offered for use in the public domain. You may
+ *  use, modify or distribute it freely.
+ *
+ *  This code is distributed in the hope that it will be useful but
+ *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ *  DISCLAIMED. This includes but is not limited to warranties of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef _WCTYPE_H_
+#define _WCTYPE_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define        __need_wchar_t
+#define        __need_wint_t
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif /* Not RC_INVOKED */
+
+/*
+ * The following flags are used to tell iswctype and _isctype what character
+ * types you are looking for.
+ */
+#define        _UPPER          0x0001
+#define        _LOWER          0x0002
+#define        _DIGIT          0x0004
+#define        _SPACE          0x0008
+#define        _PUNCT          0x0010
+#define        _CONTROL        0x0020
+#define        _BLANK          0x0040
+#define        _HEX            0x0080
+#define        _LEADBYTE       0x8000
+
+#define        _ALPHA          0x0103
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WEOF
+#define        WEOF    (wchar_t)(0xFFFF)
+#endif
+
+#ifndef _WCTYPE_T_DEFINED
+typedef wchar_t wctype_t;
+#define _WCTYPE_T_DEFINED
+#endif
+
+/* Wide character equivalents - also in ctype.h */
+_CRTIMP int __cdecl __MINGW_NOTHROW    iswalnum(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    iswalpha(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    iswascii(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    iswcntrl(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    iswctype(wint_t, wctype_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    is_wctype(wint_t, wctype_t);    /* Obsolete! */
+_CRTIMP int __cdecl __MINGW_NOTHROW    iswdigit(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    iswgraph(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    iswlower(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    iswprint(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    iswpunct(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    iswspace(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    iswupper(wint_t);
+_CRTIMP int __cdecl __MINGW_NOTHROW    iswxdigit(wint_t);
+
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
+     || !defined __STRICT_ANSI__ || defined __cplusplus
+int __cdecl __MINGW_NOTHROW iswblank (wint_t);
+#endif
+
+/* Older MS docs uses wchar_t for arg and return type, while newer
+   online MS docs say arg is wint_t and return is int.
+   ISO C uses wint_t for both.  */
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW towlower (wint_t);
+_CRTIMP wint_t __cdecl __MINGW_NOTHROW towupper (wint_t);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW    isleadbyte (int);
+
+/* Also in ctype.h */
+
+#ifdef __DECLSPEC_SUPPORTED
+# if __MSVCRT_VERSION__ <= 0x0700
+  __MINGW_IMPORT unsigned short _ctype[];
+# endif 
+# ifdef __MSVCRT__
+  __MINGW_IMPORT unsigned short* _pctype;
+# else /* CRTDLL */
+  __MINGW_IMPORT unsigned short* _pctype_dll;
+# define  _pctype _pctype_dll
+# endif
+
+#else          /* ! __DECLSPEC_SUPPORTED */
+# if __MSVCRT_VERSION__ <= 0x0700
+  extern unsigned short** _imp___ctype;
+# define _ctype (*_imp___ctype)
+# endif
+# ifdef __MSVCRT__
+  extern unsigned short** _imp___pctype;
+# define _pctype (*_imp___pctype)
+# else /* CRTDLL */
+  extern unsigned short** _imp___pctype_dll;
+# define _pctype (*_imp___pctype_dll)
+# endif        /* CRTDLL */
+#endif         /*  __DECLSPEC_SUPPORTED */
+
+
+#if !(defined (__NO_INLINE__) || defined(__NO_CTYPE_INLINES) \
+      || defined(__WCTYPE_INLINES_DEFINED))
+#define __WCTYPE_INLINES_DEFINED
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswalnum(wint_t wc) {return (iswctype(wc,_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswalpha(wint_t wc) {return (iswctype(wc,_ALPHA));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswascii(wint_t wc) {return ((wc & ~0x7F) ==0);}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswcntrl(wint_t wc) {return (iswctype(wc,_CONTROL));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswdigit(wint_t wc) {return (iswctype(wc,_DIGIT));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswgraph(wint_t wc) {return (iswctype(wc,_PUNCT|_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswlower(wint_t wc) {return (iswctype(wc,_LOWER));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswprint(wint_t wc) {return (iswctype(wc,_BLANK|_PUNCT|_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswpunct(wint_t wc) {return (iswctype(wc,_PUNCT));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswspace(wint_t wc) {return (iswctype(wc,_SPACE));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswupper(wint_t wc) {return (iswctype(wc,_UPPER));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswxdigit(wint_t wc) {return (iswctype(wc,_HEX));}
+__CRT_INLINE int __cdecl __MINGW_NOTHROW isleadbyte(int c) {return (_pctype[(unsigned char)(c)] & _LEADBYTE);}
+
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
+     || !defined __STRICT_ANSI__ || defined __cplusplus
+__CRT_INLINE int __cdecl __MINGW_NOTHROW iswblank (wint_t wc)
+  {return (iswctype(wc, _BLANK) || wc == L'\t');}
+#endif
+
+#endif /* !(defined(__NO_CTYPE_INLINES) || defined(__WCTYPE_INLINES_DEFINED)) */
+
+typedef wchar_t wctrans_t;
+
+/* These are resolved by libmingwex.a.  Note, that they are also exported
+   by the MS C++ runtime lib (msvcp60.dll).  The msvcp60.dll implementations
+   of wctrans and towctrans are not C99 compliant in that wctrans("tolower")
+   returns 0, while std specifies that a non-zero value should be returned
+   for a valid string descriptor.  If you want the MS behaviour (and you have
+   msvcp60.dll in your path) add -lmsvcp60 to your command line.  */
+
+wint_t __cdecl __MINGW_NOTHROW         towctrans(wint_t, wctrans_t);
+wctrans_t __cdecl __MINGW_NOTHROW      wctrans(const char*);
+wctype_t __cdecl __MINGW_NOTHROW       wctype(const char*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _WCTYPE_H_ */
+
+