(LOCAL_FLAGS): Define HAVE_CONFIG_H.
[bpt/emacs.git] / src / s / ms-w32.h
CommitLineData
95ed0025 1/* System description file for Windows NT.
3360970a 2 Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
95ed0025
RS
3
4This file is part of GNU Emacs.
5
6GNU Emacs is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2, or (at your option)
9any later version.
10
11GNU Emacs is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GNU Emacs; see the file COPYING. If not, write to
3b7ad313
EN
18the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19Boston, MA 02111-1307, USA. */
95ed0025
RS
20
21/*
22 * Define symbols to identify the version of Unix this is.
23 * Define all the symbols that apply correctly.
24 */
25
26/* #define UNIPLUS */
27/* #define USG5 */
28/* #define USG */
29/* #define HPUX */
30/* #define UMAX */
31/* #define BSD4_1 */
32/* #define BSD4_2 */
33/* #define BSD4_3 */
8e4c450d 34/* #define BSD_SYSTEM */
95ed0025
RS
35/* #define VMS */
36#ifndef WINDOWSNT
37#define WINDOWSNT
38#endif
39#ifndef DOS_NT
40#define DOS_NT /* MSDOS or WINDOWSNT */
41#endif
42
3360970a
KH
43/* If you are compiling with a non-C calling convention but need to
44 declare vararg routines differently, put it here */
45#define _VARARGS_ __cdecl
46
47/* If you are providing a function to something that will call the
48 function back (like a signal handler and signal, or main) its calling
49 convention must be whatever standard the libraries expect */
50#define _CALLBACK_ __cdecl
51
95ed0025
RS
52/* SYSTEM_TYPE should indicate the kind of system you are using.
53 It sets the Lisp variable system-type. */
54
55#define SYSTEM_TYPE "windows-nt"
56#define SYMS_SYSTEM syms_of_ntterm ()
57
58#define NO_MATHERR
95ed0025
RS
59
60/* NOMULTIPLEJOBS should be defined if your system's shell
61 does not have "job control" (the ability to stop a program,
62 run some other program, then continue the first one). */
63
64/* #define NOMULTIPLEJOBS */
65
66/* Emacs can read input using SIGIO and buffering characters itself,
67 or using CBREAK mode and making C-g cause SIGINT.
68 The choice is controlled by the variable interrupt_input.
69
70 Define INTERRUPT_INPUT to make interrupt_input = 1 the default (use SIGIO)
71
72 Emacs uses the presence or absence of the SIGIO macro to indicate
73 whether or not signal-driven I/O is possible. It uses
74 INTERRUPT_INPUT to decide whether to use it by default.
75
76 SIGIO can be used only on systems that implement it (4.2 and 4.3).
77 CBREAK mode has two disadvantages
78 1) At least in 4.2, it is impossible to handle the Meta key properly.
79 I hear that in system V this problem does not exist.
80 2) Control-G causes output to be discarded.
81 I do not know whether this can be fixed in system V.
82
83 Another method of doing input is planned but not implemented.
84 It would have Emacs fork off a separate process
85 to read the input and send it to the true Emacs process
86 through a pipe. */
87
7f470eff 88/* #define INTERRUPT_INPUT */
95ed0025
RS
89
90/* Letter to use in finding device name of first pty,
91 if system supports pty's. 'a' means it is /dev/ptya0 */
92
93#define FIRST_PTY_LETTER 'a'
94
95/*
96 * Define HAVE_TERMIOS if the system provides POSIX-style
97 * functions and macros for terminal control.
98 *
99 * Define HAVE_TERMIO if the system provides sysV-style ioctls
100 * for terminal control.
101 *
102 * Do not define both. HAVE_TERMIOS is preferred, if it is
103 * supported on your system.
104 */
105
106/* #define HAVE_TERMIOS */
107/* #define HAVE_TERMIO */
108
109/*
110 * Define HAVE_TIMEVAL if the system supports the BSD style clock values.
111 * Look in <sys/time.h> for a timeval structure.
112 */
113
3360970a 114#define HAVE_TIMEVAL
95ed0025
RS
115
116/*
117 * Define HAVE_SELECT if the system supports the `select' system call.
118 */
119
120/* #define HAVE_SELECT */
121
122/*
123 * Define HAVE_PTYS if the system supports pty devices.
124 */
125
126/* #define HAVE_PTYS */
127
128/*
129 * Define NONSYSTEM_DIR_LIBRARY to make Emacs emulate
130 * The 4.2 opendir, etc., library functions.
131 */
132
133/* #define NONSYSTEM_DIR_LIBRARY */
134
4e36126c
GV
135/* NT supports Winsock which is close enough (with some hacks) */
136
137#define HAVE_SOCKETS
138
95ed0025
RS
139/* Define this symbol if your system has the functions bcopy, etc. */
140
141#define BSTRING
142#define bzero(b, l) memset(b, 0, l)
7f470eff 143#define bcopy(s, d, l) memmove(d, s, l)
95ed0025
RS
144#define bcmp(a, b, l) memcmp(a, b, l)
145
7f470eff
GV
146/* bcopy (aka memmove aka memcpy at least on x86) under MSVC is quite safe */
147#define GAP_USE_BCOPY
148#define BCOPY_UPWARD_SAFE 1
149#define BCOPY_DOWNWARD_SAFE 1
150
95ed0025
RS
151/* subprocesses should be defined if you want to
152 have code for asynchronous subprocesses
153 (as used in M-x compile and M-x shell).
154 This is generally OS dependent, and not supported
155 under most USG systems. */
156
157#define subprocesses
158
159/* If your system uses COFF (Common Object File Format) then define the
160 preprocessor symbol "COFF". */
161
162#define COFF
163
164/* define MAIL_USE_FLOCK if the mailer uses flock
165 to interlock access to /usr/spool/mail/$USER.
166 The alternative is that a lock file named
167 /usr/spool/mail/$USER.lock. */
168
169/* #define MAIL_USE_FLOCK */
4e36126c
GV
170#define MAIL_USE_POP
171#define MAIL_USE_SYSTEM_LOCK
95ed0025
RS
172
173/* Define CLASH_DETECTION if you want lock files to be written
174 so that Emacs can tell instantly when you try to modify
175 a file that someone else has modified in his Emacs. */
176
177/* #define CLASH_DETECTION */
178
179/* Define this if your operating system declares signal handlers to
180 have a type other than the usual. `The usual' is `void' for ANSI C
181 systems (i.e. when the __STDC__ macro is defined), and `int' for
182 pre-ANSI systems. If you're using GCC on an older system, __STDC__
183 will be defined, but the system's include files will still say that
184 signal returns int or whatever; in situations like that, define
185 this to be what the system's include files want. */
186/* #define SIGTYPE int */
187
188/* If the character used to separate elements of the executable path
189 is not ':', #define this to be the appropriate character constant. */
190#define SEPCHAR ';'
191
192/* ============================================================ */
193
194/* Here, add any special hacks needed
195 to make Emacs work on this system. For example,
196 you might define certain system call names that don't
197 exist on your system, or that do different things on
198 your system and must be used only through an encapsulation
199 (Which you should place, by convention, in sysdep.c). */
200
95ed0025 201/* Define this to be the separator between path elements */
4e36126c 202#define DIRECTORY_SEP XINT (Vdirectory_sep_char)
95ed0025
RS
203
204/* Define this to be the separator between devices and paths */
205#define DEVICE_SEP ':'
206
207/* We'll support either convention on NT. */
208#define IS_DIRECTORY_SEP(_c_) ((_c_) == '/' || (_c_) == '\\')
209#define IS_ANY_SEP(_c_) (IS_DIRECTORY_SEP (_c_) || IS_DEVICE_SEP (_c_))
210
211/* The null device on Windows NT. */
212#define NULL_DEVICE "NUL:"
4e36126c 213#define EXEC_SUFFIXES ".exe:.com:.bat:.cmd:"
95ed0025
RS
214
215#ifndef MAXPATHLEN
216#define MAXPATHLEN _MAX_PATH
217#endif
218
3360970a
KH
219#define LISP_FLOAT_TYPE
220
2a741506 221#undef HAVE_SYS_SELECT_H
4e36126c
GV
222#define HAVE_SYS_TIMEB_H
223#define HAVE_SYS_TIME_H
224#define HAVE_UNISTD_H
2a741506
GV
225#undef HAVE_UTIME_H
226#undef HAVE_LINUX_VERSION_H
227#undef HAVE_SYS_SYSTEMINFO_H
228#undef HAVE_TERMIOS_H
229#define HAVE_LIMITS_H 1
b2140d4b 230#define HAVE_STRING_H
2a741506 231#define STDC_HEADERS 1
4e36126c
GV
232#define TIME_WITH_SYS_TIME
233
234#define HAVE_GETTIMEOFDAY
235#define HAVE_GETHOSTNAME
2a741506 236#undef HAVE_GETDOMAINNAME
4e36126c
GV
237#define HAVE_DUP2
238#define HAVE_RENAME
239#define HAVE_CLOSEDIR
240
2a741506
GV
241#undef TM_IN_SYS_TIME
242#undef HAVE_TM_ZONE
243#define HAVE_TZNAME 1
4e36126c
GV
244
245#define HAVE_LONG_FILE_NAMES
246
247#define HAVE_MKDIR
248#define HAVE_RMDIR
249#define HAVE_RANDOM
2a741506
GV
250#undef HAVE_SYSINFO
251#undef HAVE_LRAND48
4e36126c
GV
252#define HAVE_BCOPY
253#define HAVE_BCMP
254#define HAVE_LOGB
255#define HAVE_FREXP
256#define HAVE_FMOD
2a741506
GV
257#undef HAVE_RINT
258#undef HAVE_CBRT
4e36126c 259#define HAVE_FTIME
2a741506
GV
260#undef HAVE_RES_INIT /* For -lresolv on Suns. */
261#undef HAVE_SETSID
262#undef HAVE_FPATHCONF
263#undef HAVE_SELECT
264#define HAVE_MKTIME 1
265#undef HAVE_EUIDACCESS
266#define HAVE_GETPAGESIZE
267#define HAVE_TZSET 1
268#define HAVE_SETLOCALE
269#undef HAVE_UTIMES
270#undef HAVE_SETRLIMIT
271#undef HAVE_SETPGID
272#undef HAVE_GETCWD
273#define HAVE_SHUTDOWN
b2140d4b 274#define HAVE_STRFTIME 1
2a741506
GV
275
276#undef LOCALTIME_CACHE
277#undef HAVE_INET_SOCKETS
278
279#undef HAVE_AIX_SMT_EXP
280
281/* Define if you have the ANSI `strerror' function.
282 Otherwise you must have the variable `char *sys_errlist[]'. */
283#define HAVE_STRERROR
284
285/* Define if `struct utimbuf' is declared by <utime.h>. */
286#undef HAVE_STRUCT_UTIMBUF
4e36126c
GV
287
288#define HAVE_MOUSE
289#define HAVE_H_ERRNO
1cd47f14 290
4a1ba222
GV
291#ifdef HAVE_NTGUI
292#define HAVE_WINDOW_SYSTEM
293#define HAVE_FACES
2a741506 294#define HAVE_MENUS
4a1ba222
GV
295#endif
296
1cd47f14 297#define MODE_LINE_BINARY_TEXT(_b_) (NILP ((_b_)->buffer_file_type) ? "T" : "B")
95ed0025 298
4e36126c
GV
299/* get some redefinitions in place */
300
301/* IO calls that are emulated or shadowed */
7f470eff 302#undef access
4e36126c 303#define access sys_access
7f470eff 304#undef chdir
4e36126c 305#define chdir sys_chdir
7f470eff 306#undef chmod
4e36126c 307#define chmod sys_chmod
7f470eff 308#undef close
4e36126c 309#define close sys_close
7f470eff 310#undef creat
4e36126c
GV
311#define creat sys_creat
312#define ctime sys_ctime
7f470eff 313#undef dup
4e36126c 314#define dup sys_dup
7f470eff 315#undef dup2
4e36126c
GV
316#define dup2 sys_dup2
317#define fopen sys_fopen
318#define link sys_link
319#define mkdir sys_mkdir
7f470eff 320#undef mktemp
4e36126c 321#define mktemp sys_mktemp
7f470eff 322#undef open
4e36126c
GV
323#define open sys_open
324#define pipe sys_pipe
7f470eff 325#undef read
4e36126c
GV
326#define read sys_read
327#define rename sys_rename
328#define rmdir sys_rmdir
329#define select sys_select
330#define sleep sys_sleep
7f470eff 331#undef unlink
4e36126c 332#define unlink sys_unlink
7f470eff 333#undef write
4e36126c
GV
334#define write sys_write
335
4e36126c
GV
336/* subprocess calls that are emulated */
337#define spawnve sys_spawnve
338#define wait sys_wait
339#define kill sys_kill
340#define signal sys_signal
341
342/* map to MSVC names */
343#define execlp _execlp
344#define execvp _execvp
345#define fcloseall _fcloseall
346#define fdopen _fdopen
347#define fgetchar _fgetchar
348#define fileno _fileno
349#define flushall _flushall
350#define fputchar _fputchar
7f470eff 351#define getcwd _getcwd
4e36126c
GV
352#define getw _getw
353#define getpid _getpid
354#define isatty _isatty
355#define logb _logb
356#define _longjmp longjmp
357#define lseek _lseek
358#define popen _popen
359#define pclose _pclose
360#define putw _putw
361#define umask _umask
362#define utime _utime
719072f5 363#define utimbuf _utimbuf
4e36126c
GV
364#define index strchr
365#define rindex strrchr
95ed0025 366
4a1ba222 367#ifdef HAVE_NTGUI
fbd6baed 368#define abort w32_abort
4a1ba222
GV
369#endif
370
7f470eff
GV
371/* this is hacky, but is necessary to avoid warnings about macro
372 redefinitions using the SDK compilers */
373#ifndef __STDC__
374#define __STDC__ 1
375#define MUST_UNDEF__STDC__
376#endif
377#include <direct.h>
378#include <io.h>
379#include <stdio.h>
380#ifdef MUST_UNDEF__STDC__
381#undef __STDC__
382#undef MUST_UNDEF__STDC__
383#endif
384
95ed0025
RS
385/* Defines that we need that aren't in the standard signal.h */
386#define SIGHUP 1 /* Hang up */
387#define SIGQUIT 3 /* Quit process */
388#define SIGTRAP 5 /* Trace trap */
389#define SIGKILL 9 /* Die, die die */
390#define SIGPIPE 13 /* Write on pipe with no readers */
391#define SIGALRM 14 /* Alarm */
392#define SIGCHLD 18 /* Death of child */
393
394/* For integration with MSDOS support. */
395#define getdisk() (_getdrive () - 1)
396#define getdefdir(_drv, _buf) _getdcwd (_drv, _buf, MAXPATHLEN)
397
3360970a
KH
398#define EMACS_CONFIGURATION get_emacs_configuration ()
399#define EMACS_CONFIG_OPTIONS "NT" /* Not very meaningful yet. */
400
4e36126c
GV
401/* Define this so that winsock.h definitions don't get included with
402 windows.h. For this to have proper effect, config.h must always be
403 included before windows.h. */
95ed0025
RS
404#define _WINSOCKAPI_ 1
405
1cd47f14
KH
406/* Defines size_t and alloca (). */
407#include <malloc.h>
408
3360970a 409#include <sys/stat.h>
3360970a
KH
410
411/* Define for those source files that do not include enough NT
412 system files. */
413#ifndef NULL
414#ifdef __cplusplus
415#define NULL 0
416#else
417#define NULL ((void *)0)
418#endif
419#endif
896c0d8b 420
4a1ba222
GV
421/* For proper declaration of environ. */
422#include <stdlib.h>
4e36126c 423#include <string.h>
4a1ba222
GV
424
425/* Emacs takes care of ensuring that these are defined. */
426#ifdef max
427#undef max
428#undef min
429#endif
430
e3be3bfd 431/* We need a little extra space, see ../../lisp/loadup.el */
b2140d4b 432#define SYSTEM_PURESIZE_EXTRA 75000
e3be3bfd 433
7f470eff
GV
434/* For unexec to work on Alpha systems, we need to put Emacs'
435 initialized data into a separate section from the CRT initialized
436 data (because the Alpha linker freely reorders data variables, even
437 across libraries, so our data and the CRT data get intermingled).
438
439 Starting with MSVC 5.0, we must also place the uninitialized data
440 into its own section. VC5 intermingles uninitialized data from the CRT
441 between Emacs' static uninitialized data and its public uninitialized
442 data. A separate .bss section for Emacs groups both static and
443 public uninitalized together.
444
445 Note that unexnt.c relies on this fact, and must be modified
446 accordingly if this section name is changed, or if this pragma is
447 removed. Also, obviously, all files that define initialized data
448 must include config.h to pick up this pragma. */
449
450/* Names must be < 8 bytes */
451#pragma data_seg("EMDATA")
452#pragma bss_seg("EMBSS")
453
454/* #define FULL_DEBUG */
455/* #define EMACSDEBUG */
456
457#ifdef EMACSDEBUG
458extern void _DebPrint (const char *fmt, ...);
459#define DebPrint(stuff) _DebPrint stuff
460#else
461#define DebPrint(stuff)
462#endif
463
464
3360970a 465/* ============================================================ */