/* System description file for Windows NT.
-Copyright (C) 1993-1995, 2001-2011 Free Software Foundation, Inc.
+Copyright (C) 1993-1995, 2001-2012 Free Software Foundation, Inc.
This file is part of GNU Emacs.
#define DOS_NT /* MSDOS or WINDOWSNT */
#endif
+/* #undef const */
+
/* If you are compiling with a non-C calling convention but need to
declare vararg routines differently, put it here. */
#define _VARARGS_ __cdecl
convention must be whatever standard the libraries expect. */
#define _CALLBACK_ __cdecl
-/* SYSTEM_TYPE should indicate the kind of system you are using.
- It sets the Lisp variable system-type. */
-#define SYSTEM_TYPE "windows-nt"
-
-#define NO_MATHERR 1
-
-/* Letter to use in finding device name of first pty,
- if system supports pty's. 'a' means it is /dev/ptya0 */
-#define FIRST_PTY_LETTER 'a'
-
/* Define HAVE_TIMEVAL if the system supports the BSD style clock values.
Look in <sys/time.h> for a timeval structure. */
#define HAVE_TIMEVAL 1
-/* NT supports Winsock which is close enough (with some hacks). */
-#define HAVE_SOCKETS 1
-
/* But our select implementation doesn't allow us to make non-blocking
connects. So until that is fixed, this is necessary: */
#define BROKEN_NON_BLOCKING_CONNECT 1
for received packets, so datagrams are broken too. */
#define BROKEN_DATAGRAM_SOCKETS 1
-#define MAIL_USE_POP 1
#define MAIL_USE_SYSTEM_LOCK 1
-/* If the character used to separate elements of the executable path
- is not ':', #define this to be the appropriate character constant. */
-#define SEPCHAR ';'
+/* Define to 1 if GCC-style __attribute__ ((__aligned__ (expr))) works. */
+#ifdef __GNUC__
+#define HAVE_ATTRIBUTE_ALIGNED 1
+#endif
+
+/* Define to 1 if strtold conforms to C99. */
+#ifdef __GNUC__
+#define HAVE_C99_STRTOLD 1
+#endif
-#define ORDINARY_LINK 1
+#if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8))
+#define HAVE___BUILTIN_UNWIND_INIT 1
+#endif
/* ============================================================ */
#define IS_DIRECTORY_SEP(_c_) ((_c_) == '/' || (_c_) == '\\')
#define IS_ANY_SEP(_c_) (IS_DIRECTORY_SEP (_c_) || IS_DEVICE_SEP (_c_))
+#ifdef __GNUC__
+#ifndef __cplusplus
+#undef inline
+#endif
+#else /* MSVC */
+#define inline __inline
+#endif
+
+#ifdef __GNUC__
+# define restrict __restrict__
+#else
+# define restrict
+#endif
+
+/* `mode_t' is not defined for MSVC. Define. */
+#ifdef _MSC_VER
+typedef unsigned short mode_t;
+#endif
+
+/* A va_copy replacement for MSVC. */
+#ifdef _MSC_VER
+# ifdef _WIN64
+# ifndef va_copy /* Need to be checked (?) */
+# define va_copy(d,s) ((d) = (s))
+# endif
+# else /* not _WIN64 */
+# define va_copy(d,s) ((d) = (s))
+# endif /* not _WIN64 */
+#endif /* _MSC_VER */
+
+#ifndef WINDOWSNT
+/* Some of the files of Emacs which are intended for use with other
+ programs assume that if you have a config.h file, you must declare
+ the type of getenv. */
+extern char *getenv ();
+#endif
+
+#ifdef HAVE_STRINGS_H
+#include "strings.h"
+#endif
#include <sys/types.h>
+
+#ifdef _MSC_VER
+typedef unsigned long sigset_t;
+typedef int ssize_t;
+#endif
+
struct sigaction {
int sa_flags;
void (*sa_handler)(int);
#define SIG_SETMASK 2
#define SIG_UNBLOCK 3
-/* The null device on Windows NT. */
-#define NULL_DEVICE "NUL:"
-
#ifndef MAXPATHLEN
#define MAXPATHLEN _MAX_PATH
#endif
-#define HAVE_SOUND 1
-#define LISP_FLOAT_TYPE 1
-
-#define HAVE_SYS_TIMEB_H 1
-#define HAVE_SYS_TIME_H 1
-#define HAVE_UNISTD_H 1
-#undef HAVE_UTIME_H
-#undef HAVE_LINUX_VERSION_H
-#undef HAVE_SYS_SYSTEMINFO_H
-#define HAVE_LIMITS_H 1
-#define HAVE_STRING_H 1
-#define HAVE_STDLIB_H 1
-#define HAVE_PWD_H 1
-#define STDC_HEADERS 1
-#define TIME_WITH_SYS_TIME 1
-
-#define HAVE_GETTIMEOFDAY 1
-#define HAVE_GETHOSTNAME 1
-#undef HAVE_GETDOMAINNAME
-#define HAVE_DUP2 1
-#define HAVE_RENAME 1
-#define HAVE_CLOSEDIR 1
-#define HAVE_FSYNC 1 /* fsync is called _commit in MSVC. */
-
-#undef TM_IN_SYS_TIME
-#undef HAVE_TM_ZONE
-
-#define HAVE_LONG_FILE_NAMES 1
-
-#define HAVE_MKDIR 1
-#define HAVE_RMDIR 1
-#define HAVE_RANDOM 1
-#undef HAVE_SYSINFO
-#undef HAVE_LRAND48
-#define HAVE_MEMCMP 1
-#define HAVE_MEMCPY 1
-#define HAVE_MEMMOVE 1
-#define HAVE_MEMSET 1
-#define HAVE_LOGB 1
-#define HAVE_FREXP 1
-#define HAVE_FMOD 1
-#undef HAVE_RINT
-#undef HAVE_CBRT
-#define HAVE_FTIME 1
-#undef HAVE_RES_INIT /* For -lresolv on Suns. */
-#undef HAVE_SETSID
-#undef HAVE_FPATHCONF
-#define HAVE_SELECT 1
-#undef HAVE_EUIDACCESS
-#define HAVE_GETPAGESIZE 1
-#define HAVE_TZSET 1
-#define HAVE_SETLOCALE 1
-#undef HAVE_UTIMES
-#undef HAVE_SETRLIMIT
-#undef HAVE_SETPGID
-#undef HAVE_GETCWD
-#define HAVE_SHUTDOWN 1
-
-#define LOCALTIME_CACHE
-#define HAVE_INET_SOCKETS 1
-
-#undef HAVE_AIX_SMT_EXP
-#define USE_TOOLKIT_SCROLL_BARS 1
-
-/* Define if you have the ANSI `strerror' function.
- Otherwise you must have the variable `char *sys_errlist[]'. */
-#define HAVE_STRERROR 1
-
-/* Define if `struct utimbuf' is declared by <utime.h>. */
-#undef HAVE_STRUCT_UTIMBUF
-
-#define HAVE_MOUSE 1
-#define HAVE_H_ERRNO 1
-
#ifdef HAVE_NTGUI
#define HAVE_WINDOW_SYSTEM 1
#define HAVE_MENUS 1
#ifdef emacs
+#ifdef _MSC_VER
+#include <sys/timeb.h>
+#include <sys/stat.h>
+#include <signal.h>
+
+/* MSVC gets link-time errors without these redirections. */
+#define fstat(a, b) sys_fstat(a, b)
+#define stat(a, b) sys_stat(a, b)
+#define utime sys_utime
+#endif
+
/* Calls that are emulated or shadowed. */
#undef access
#define access sys_access
#define dup2 sys_dup2
#define fopen sys_fopen
#define link sys_link
+#define localtime sys_localtime
#define mkdir sys_mkdir
#undef mktemp
#define mktemp sys_mktemp
#define rename sys_rename
#define rmdir sys_rmdir
#define select sys_select
+#define pselect sys_select
#define sleep sys_sleep
#define strerror sys_strerror
#undef unlink
#define getpid _getpid
#ifdef _MSC_VER
typedef int pid_t;
+#define snprintf _snprintf
+#define strtoll _strtoi64
#endif
#define isatty _isatty
#define logb _logb
#define popen _popen
#define pclose _pclose
#define umask _umask
+#ifndef _MSC_VER
#define utimbuf _utimbuf
+#endif
#define strdup _strdup
#define strupr _strupr
#define strnicmp _strnicmp
#define stricmp _stricmp
#define tzset _tzset
-#if !defined (_MSC_VER) || (_MSC_VER < 1400)
+/* Include time.h before redirecting tzname, since MSVC's time.h
+ defines _tzname to call a function, but also declares tzname a
+ 2-element array. Having the redirection before including the
+ header thus has the effect of declaring a function that returns an
+ array, and triggers an error message. */
+#include <time.h>
#define tzname _tzname
+#if !defined (_MSC_VER) || (_MSC_VER < 1400)
+#undef utime
#define utime _utime
#endif
+/* 'struct timespec' is used by time-related functions in lib/ and
+ elsewhere, but we don't use lib/time.h where the structure is
+ defined. */
+struct timespec
+{
+ time_t tv_sec; /* seconds */
+ long int tv_nsec; /* nanoseconds */
+};
+
/* This is hacky, but is necessary to avoid warnings about macro
redefinitions using the SDK compilers. */
#ifndef __STDC__
#define _WINSOCKAPI_ 1
#define _WINSOCK_H
+/* Prevent accidental use of features unavailable in
+ older Windows versions we still support. */
+#define _WIN32_WINNT 0x0400
+
+/* Make a leaner executable. */
+#define WIN32_LEAN_AND_MEAN 1
+
/* Defines size_t and alloca (). */
-#ifdef USE_CRT_DLL
+#ifdef emacs
#define malloc e_malloc
#define free e_free
#define realloc e_realloc
#define calloc e_calloc
#endif
+#ifdef _MSC_VER
+#define alloca _alloca
+#else
#include <malloc.h>
+#endif
+
+/* stdlib.h must be included after redefining malloc & friends, but
+ before redefining abort. Isn't library redefinition funny? */
+#include <stdlib.h>
+
+/* Redefine abort. */
+#ifdef HAVE_NTGUI
+#define abort w32_abort
+extern _Noreturn void w32_abort (void);
+#endif
#include <sys/stat.h>
#endif
/* For proper declaration of environ. */
-#include <stdlib.h>
#ifndef sys_nerr
#define sys_nerr _sys_nerr
#endif
-#include <string.h>
extern int getloadavg (double *, int);
+#if defined (__MINGW32__) || _MSC_VER >= 1400
+
+/* Define to 1 if the system has the type `long long int'. */
+# define HAVE_LONG_LONG_INT 1
+
+/* Define to 1 if the system has the type `unsigned long long int'. */
+# define HAVE_UNSIGNED_LONG_LONG_INT 1
+
+#elif _MSC_VER >= 1200
+
+/* Temporarily disable wider-than-pointer integers until they're tested more.
+ Build with CFLAGS='-DWIDE_EMACS_INT' to try them out. */
+
+# ifdef WIDE_EMACS_INT
+
+/* Use pre-C99-style 64-bit integers. */
+typedef __int64 EMACS_INT;
+typedef unsigned __int64 EMACS_UINT;
+# define EMACS_INT_MAX _I64_MAX
+# define pI "I64"
+
+# endif
+
+#endif
+
/* We need a little extra space, see ../../lisp/loadup.el. */
#define SYSTEM_PURESIZE_EXTRA 50000
+#define DATA_START get_data_start ()
+
/* For unexec to work on Alpha systems, we need to put Emacs'
initialized data into a separate section from the CRT initialized
data (because the Alpha linker freely reorders data variables, even
#define DebPrint(stuff)
#endif
-
/* ============================================================ */
-