]> code.delx.au - gnu-emacs/blobdiff - src/s/ms-w32.h
(Fplay_sound_internal): Dynamically allocate
[gnu-emacs] / src / s / ms-w32.h
index c586963b12ad17ab961a11700e38966635a74899..fa4ca5651710eb8d726a7a18cf548fe413c30cd1 100644 (file)
@@ -1,5 +1,6 @@
 /* System description file for Windows NT.
-   Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1994, 1995, 2002, 2003, 2004,
+                 2005, 2006 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -15,7 +16,8 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with GNU Emacs; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.  */
 
 /*
  *      Define symbols to identify the version of Unix this is.
@@ -30,7 +32,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 /* #define BSD4_1 */
 /* #define BSD4_2 */
 /* #define BSD4_3 */
-/* #define BSD */
+/* #define BSD_SYSTEM */
 /* #define VMS */
 #ifndef WINDOWSNT
 #define WINDOWSNT
@@ -39,21 +41,28 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define DOS_NT         /* MSDOS or WINDOWSNT */
 #endif
 
+/* If you are compiling with a non-C calling convention but need to
+   declare vararg routines differently, put it here */
+#define _VARARGS_ __cdecl
+
+/* If you are providing a function to something that will call the
+   function back (like a signal handler and signal, or main) its calling
+   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 SYMS_SYSTEM syms_of_ntterm ()
 
-#define NO_MATHERR
-#define HAVE_FREXP
-#define HAVE_FMOD
+#define NO_MATHERR 1
 
 /* NOMULTIPLEJOBS should be defined if your system's shell
  does not have "job control" (the ability to stop a program,
  run some other program, then continue the first one).  */
 
-/* #define NOMULTIPLEJOBS */
+/* #define NOMULTIPLEJOBS */
 
 /* Emacs can read input using SIGIO and buffering characters itself,
    or using CBREAK mode and making C-g cause SIGINT.
@@ -77,7 +86,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
    to read the input and send it to the true Emacs process
    through a pipe. */
 
-#define INTERRUPT_INPUT
+/* #define INTERRUPT_INPUT 1 */
 
 /* Letter to use in finding device name of first pty,
   if system supports pty's.  'a' means it is /dev/ptya0  */
@@ -95,27 +104,27 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  *      supported on your system.
  */
 
-/* #define HAVE_TERMIOS */
-/* #define HAVE_TERMIO */
+/* #define HAVE_TERMIOS */
+/* #define HAVE_TERMIO */
 
 /*
  *      Define HAVE_TIMEVAL if the system supports the BSD style clock values.
  *      Look in <sys/time.h> for a timeval structure.
  */
 
-/* #define HAVE_TIMEVAL */
+#define HAVE_TIMEVAL 1
 
 /*
  *      Define HAVE_SELECT if the system supports the `select' system call.
  */
 
-/* #define HAVE_SELECT */
+/* #define HAVE_SELECT */
 
 /*
  *      Define HAVE_PTYS if the system supports pty devices.
  */
 
-/* #define HAVE_PTYS */
+/* #define HAVE_PTYS */
 
 /*
  *      Define NONSYSTEM_DIR_LIBRARY to make Emacs emulate
@@ -124,25 +133,34 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 /* #define NONSYSTEM_DIR_LIBRARY */
 
+/* NT supports Winsock which is close enough (with some hacks) */
+
+#define HAVE_SOCKETS 1
+
 /* Define this symbol if your system has the functions bcopy, etc. */
 
 #define BSTRING
 #define bzero(b, l) memset(b, 0, l)
-#define bcopy(s, d, l) memcpy(d, s, l)
+#define bcopy(s, d, l) memmove(d, s, l)
 #define bcmp(a, b, l) memcmp(a, b, l)
 
+/* bcopy (aka memmove aka memcpy at least on x86) under MSVC is quite safe */
+#define GAP_USE_BCOPY 1
+#define BCOPY_UPWARD_SAFE 1
+#define BCOPY_DOWNWARD_SAFE 1
+
 /* subprocesses should be defined if you want to
    have code for asynchronous subprocesses
    (as used in M-x compile and M-x shell).
    This is generally OS dependent, and not supported
    under most USG systems. */
 
-#define subprocesses
+#define subprocesses 1
 
 /* If your system uses COFF (Common Object File Format) then define the
    preprocessor symbol "COFF". */
 
-#define COFF
+#define COFF 1
 
 /* define MAIL_USE_FLOCK if the mailer uses flock
    to interlock access to /usr/spool/mail/$USER.
@@ -150,12 +168,14 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
    /usr/spool/mail/$USER.lock.  */
 
 /* #define MAIL_USE_FLOCK */
+#define MAIL_USE_POP 1
+#define MAIL_USE_SYSTEM_LOCK 1
 
 /* Define CLASH_DETECTION if you want lock files to be written
    so that Emacs can tell instantly when you try to modify
    a file that someone else has modified in his Emacs.  */
 
-/* #define CLASH_DETECTION */
+/* #define CLASH_DETECTION */
 
 /* Define this if your operating system declares signal handlers to
    have a type other than the usual.  `The usual' is `void' for ANSI C
@@ -170,6 +190,8 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
    is not ':', #define this to be the appropriate character constant.  */
 #define SEPCHAR ';'
 
+#define ORDINARY_LINK 1
+
 /* ============================================================ */
 
 /* Here, add any special hacks needed
@@ -179,13 +201,8 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
    your system and must be used only through an encapsulation
    (Which you should place, by convention, in sysdep.c).  */
 
-/* Some compilers tend to put everything declared static
-   into the initialized data area, which becomes pure after dumping Emacs.
-   On these systems, you must #define static as nothing to foil this.
-   Note that emacs carefully avoids static vars inside functions.  */
-
 /* Define this to be the separator between path elements */
-#define DIRECTORY_SEP '\\'
+#define DIRECTORY_SEP XINT (Vdirectory_sep_char)
 
 /* Define this to be the separator between devices and paths */
 #define DEVICE_SEP ':'
@@ -196,55 +213,197 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 /* The null device on Windows NT. */
 #define NULL_DEVICE     "NUL:"
-#define EXEC_SUFFIXES   ".exe:.com:.bat:"
 
 #ifndef MAXPATHLEN
 #define MAXPATHLEN      _MAX_PATH
 #endif
 
-#define HAVE_DUP2       1
-#define HAVE_RENAME     1
-#define HAVE_RMDIR      1
-#define HAVE_MKDIR      1
-#define HAVE_GETHOSTNAME       1
-#define HAVE_MOUSE     1
+#define HAVE_SOUND  1
+#define LISP_FLOAT_TYPE 1
+
+#undef  HAVE_SYS_SELECT_H
+#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
+#undef  HAVE_TERMIOS_H
+#define HAVE_LIMITS_H 1
+#define HAVE_STRING_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_TZNAME 1
+
+#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_BCOPY 1
+#define HAVE_BCMP 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
+#define HAVE_MKTIME 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 HAVE_STRFTIME 1
+
+#define LOCALTIME_CACHE
+#undef  HAVE_INET_SOCKETS
+
+#undef  HAVE_AIX_SMT_EXP
+
+/* 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_FACES 1
+#define HAVE_MENUS 1
+#endif
 
 #define MODE_LINE_BINARY_TEXT(_b_) (NILP ((_b_)->buffer_file_type) ? "T" : "B")
 
-/* These have to be defined because our compilers treat __STDC__ as being
-   defined (most of them anyway). */
-
-#define access  _access
-#define chdir   _chdir
-#define chmod   _chmod
-#define close   _close
-#define creat   _creat
-#define dup     _dup
-#define dup2    _dup2
-#define execlp  _execlp
-#define execvp  _execvp
-#define getpid  _getpid
-#define index   strchr
-#define isatty  _isatty
-#define link    _link
-#define lseek   _lseek
-#define mkdir   _mkdir
-#define mktemp  _mktemp
-#define open    _open
-#define pipe    _pipe
-#define random  rand
-#define read    _read
-#define rmdir   _rmdir
-#define sleep   nt_sleep
-#define srandom srand
-#define unlink  _unlink
-#define umask  _umask
-#define write   _write
-#define _longjmp        longjmp
-#define spawnve win32_spawnve
-#define wait    win32_wait
-#define signal  win32_signal
-#define rindex  strrchr
+/* get some redefinitions in place */
+
+#ifdef emacs
+
+/* calls that are emulated or shadowed */
+#undef access
+#define access  sys_access
+#undef chdir
+#define chdir   sys_chdir
+#undef chmod
+#define chmod   sys_chmod
+#define chown   sys_chown
+#undef close
+#define close   sys_close
+#undef creat
+#define creat   sys_creat
+#define ctime  sys_ctime
+#undef dup
+#define dup     sys_dup
+#undef dup2
+#define dup2    sys_dup2
+#define fopen   sys_fopen
+#define link    sys_link
+#define mkdir   sys_mkdir
+#undef mktemp
+#define mktemp  sys_mktemp
+#undef open
+#define open    sys_open
+#define pipe    sys_pipe
+#undef read
+#define read    sys_read
+#define rename  sys_rename
+#define rmdir   sys_rmdir
+#define select  sys_select
+#define sleep   sys_sleep
+#define strerror sys_strerror
+#undef unlink
+#define unlink  sys_unlink
+#undef write
+#define write   sys_write
+
+/* subprocess calls that are emulated */
+#define spawnve sys_spawnve
+#define wait    sys_wait
+#define kill    sys_kill
+#define signal  sys_signal
+
+#endif /* emacs */
+
+/* map to MSVC names */
+#define execlp    _execlp
+#define execvp    _execvp
+#define fcloseall _fcloseall
+#define fdopen   _fdopen
+#define fgetchar  _fgetchar
+#ifndef fileno
+#define fileno   _fileno
+#endif
+#define flushall  _flushall
+#define fputchar  _fputchar
+#define fsync    _commit
+#define ftruncate _chsize
+#define getw     _getw
+#define getpid    _getpid
+#ifdef _MSC_VER
+typedef int pid_t;
+#endif
+#define isatty    _isatty
+#define logb      _logb
+#define _longjmp  longjmp
+#define lseek     _lseek
+#define popen     _popen
+#define pclose    _pclose
+#define putw     _putw
+#define umask    _umask
+#define utime    _utime
+#define utimbuf          _utimbuf
+#define index     strchr
+#define rindex    strrchr
+#define strdup    _strdup
+#define strupr    _strupr
+#define strnicmp  _strnicmp
+#define stricmp   _stricmp
+#define tzset     _tzset
+#define tzname    _tzname
+
+#ifdef HAVE_NTGUI
+#define abort  w32_abort
+#endif
+
+/* this is hacky, but is necessary to avoid warnings about macro
+   redefinitions using the SDK compilers */
+#ifndef __STDC__
+#define __STDC__ 1
+#define MUST_UNDEF__STDC__
+#endif
+#include <direct.h>
+#include <io.h>
+#include <stdio.h>
+#ifdef MUST_UNDEF__STDC__
+#undef __STDC__
+#undef MUST_UNDEF__STDC__
+#endif
 
 /* Defines that we need that aren't in the standard signal.h  */
 #define SIGHUP  1               /* Hang up */
@@ -255,20 +414,96 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define SIGALRM 14              /* Alarm */
 #define SIGCHLD 18              /* Death of child */
 
+#ifndef NSIG
+#define NSIG 23
+#endif
+
 /* For integration with MSDOS support.  */
 #define getdisk()               (_getdrive () - 1)
+#ifdef emacs
+#define getdefdir(_drv, _buf)   ((_buf[0] = (_drv + 'A' - 1), _buf[1] = ':', _buf[2] = '/', _buf[3] = 0), 1)
+#else
 #define getdefdir(_drv, _buf)   _getdcwd (_drv, _buf, MAXPATHLEN)
+#endif
+
+extern char *get_emacs_configuration (void);
+extern char *get_emacs_configuration_options (void);
+#define EMACS_CONFIGURATION    get_emacs_configuration ()
+#define EMACS_CONFIG_OPTIONS   get_emacs_configuration_options ()
 
-/* Define this so that winsock.h definitions don't get included when windows.h
-   is...  I don't know if they do the right thing for emacs.  For this to
-   have proper effect, config.h must always be included before windows.h.  */
+/* Define this so that winsock.h definitions don't get included with
+   windows.h.  For this to have proper effect, config.h must always be
+   included before windows.h.  */
 #define _WINSOCKAPI_    1
+#define _WINSOCK_H
 
 /* Defines size_t and alloca ().  */
+#ifdef USE_CRT_DLL
+#define malloc e_malloc
+#define free   e_free
+#define realloc e_realloc
+#define calloc e_calloc
+#endif
 #include <malloc.h>
 
-/* ============================================================ */
+#include <sys/stat.h>
 
-/* Give us extra pure storage.  */
+/* Define for those source files that do not include enough NT
+   system files.  */
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL   0
+#else
+#define NULL   ((void *)0)
+#endif
+#endif
+
+/* For proper declaration of environ.  */
+#include <stdlib.h>
+#ifndef sys_nerr
+#define sys_nerr _sys_nerr
+#endif
+#include <string.h>
+
+/* We need a little extra space, see ../../lisp/loadup.el.
+   The number below comes from 23923 bytes worth (as of 2006-04)
+   of w32-specific files loaded by loadup.el, plus 1K spare.  */
+#define SYSTEM_PURESIZE_EXTRA 25000
+
+/* 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
+   across libraries, so our data and the CRT data get intermingled).
+
+   Starting with MSVC 5.0, we must also place the uninitialized data
+   into its own section.  VC5 intermingles uninitialized data from the CRT
+   between Emacs' static uninitialized data and its public uninitialized
+   data.  A separate .bss section for Emacs groups both static and
+   public uninitalized together.
+
+   Note that unexnt.c relies on this fact, and must be modified
+   accordingly if this section name is changed, or if this pragma is
+   removed.  Also, obviously, all files that define initialized data
+   must include config.h to pick up this pragma.  */
+
+/* Names must be < 8 bytes */
+#ifdef _MSC_VER
+#pragma data_seg("EMDATA")
+#pragma bss_seg("EMBSS")
+#endif
+
+/* #define FULL_DEBUG */
+/* #define EMACSDEBUG */
+
+#ifdef EMACSDEBUG
+extern void _DebPrint (const char *fmt, ...);
+#define DebPrint(stuff) _DebPrint stuff
+#else
+#define DebPrint(stuff)
+#endif
+
+
+/* ============================================================ */
 
-#define SYSTEM_PURESIZE_EXTRA 52000
+/* arch-tag: 5d4a3a1c-40dc-4dea-9c7c-38fed9ae0eae
+   (do not change this comment) */