perl5.004 hints file (maint and dev paths)
[p5sagit/p5-mst-13.2.git] / win32 / win32.h
CommitLineData
68dc0745 1/* WIN32.H
2 *
3 * (c) 1995 Microsoft Corporation. All rights reserved.
4 * Developed by hip communications inc., http://info.hip.com/info/
5 *
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
8 */
0a753a76 9#ifndef _INC_WIN32_PERL5
10#define _INC_WIN32_PERL5
11
9d8a25dc 12#ifdef PERL_OBJECT
ab39fa9d 13# define WIN32IO_IS_STDIO /* don't pull in custom stdio layer */
14# ifdef PERL_GLOBAL_STRUCT
15# error PERL_GLOBAL_STRUCT cannot be defined with PERL_OBJECT
16# endif
e5a95ffb 17# define win32_get_privlib PerlEnv_lib_path
ab39fa9d 18# define win32_get_sitelib PerlEnv_sitelib_path
9d8a25dc 19#endif
20
a835ef8a 21#ifdef __GNUC__
a835ef8a 22typedef long long __int64;
23#define Win32_Winsock
ac4c12e7 24# ifdef __cplusplus
25#undef __attribute__ /* seems broken in 2.8.0 */
26#define __attribute__(p)
27# endif
22239a37 28/* GCC does not do __declspec() - render it a nop
29 * and turn on options to avoid importing data
30 */
31#define __declspec(x)
32#define PERL_GLOBAL_STRUCT
33#define MULTIPLICITY
d56e6723 34#ifndef TLS_OUT_OF_INDEXES
35#define TLS_OUT_OF_INDEXES (DWORD)0xFFFFFFFF
36#endif
a835ef8a 37#endif
38
22239a37 39/* Define DllExport akin to perl's EXT,
40 * If we are in the DLL or mimicing the DLL for Win95 work round
41 * then Export the symbol,
42 * otherwise import it.
43 */
44
c69f6586 45#if defined(PERL_OBJECT)
46#define DllExport
47#else
22239a37 48#if defined(PERLDLL) || defined(WIN95FIX)
852c2e52 49#define DllExport
50/*#define DllExport __declspec(dllexport)*/ /* noises with VC5+sp3 */
22239a37 51#else
52#define DllExport __declspec(dllimport)
53#endif
c69f6586 54#endif
c69f112c 55
0a753a76 56#define WIN32_LEAN_AND_MEAN
57#include <windows.h>
58
68dc0745 59#ifdef WIN32_LEAN_AND_MEAN /* C file is NOT a Perl5 original. */
60#define CONTEXT PERL_CONTEXT /* Avoid conflict of CONTEXT defs. */
68dc0745 61#endif /*WIN32_LEAN_AND_MEAN */
0a753a76 62
63#include <dirent.h>
64#include <io.h>
65#include <process.h>
66#include <stdio.h>
67#include <direct.h>
390b85e7 68#include <stdlib.h>
69#ifndef EXT
70#include "EXTERN.h"
71#endif
72
c69f112c 73struct tms {
74 long tms_utime;
75 long tms_stime;
76 long tms_cutime;
77 long tms_cstime;
78};
79
390b85e7 80#ifndef START_EXTERN_C
81#ifdef __cplusplus
82# define START_EXTERN_C extern "C" {
83# define END_EXTERN_C }
84# define EXTERN_C extern "C"
85#else
86# define START_EXTERN_C
87# define END_EXTERN_C
88# define EXTERN_C
89#endif
90#endif
91
92#define STANDARD_C 1
93#define DOSISH 1 /* no escaping our roots */
94#define OP_BINARY O_BINARY /* mistake in in pp_sys.c? */
0a753a76 95
f3986ebb 96/* Define USE_SOCKETS_AS_HANDLES to enable emulation of windows sockets as
97 * real filehandles. XXX Should always be defined (the other version is untested) */
98#define USE_SOCKETS_AS_HANDLES
99
100/* if USE_WIN32_RTL_ENV is not defined, Perl uses direct Win32 calls
101 * to read the environment, bypassing the runtime's (usually broken)
102 * facilities for accessing the same. See note in util.c/my_setenv(). */
103/*#define USE_WIN32_RTL_ENV */
0a753a76 104
f3986ebb 105/* Define USE_FIXED_OSFHANDLE to fix VC's _open_osfhandle() on W95.
106 * Can only enable it if not using the DLL CRT (it doesn't expose internals) */
107#if defined(_MSC_VER) && !defined(_DLL) && defined(_M_IX86)
108#define USE_FIXED_OSFHANDLE
109#endif
110
902173a3 111#define ENV_IS_CASELESS
112
f3986ebb 113#ifndef VER_PLATFORM_WIN32_WINDOWS /* VC-2.0 headers dont have this */
114#define VER_PLATFORM_WIN32_WINDOWS 1
115#endif
116
117/* Compiler-specific stuff. */
118
910dfcc8 119#ifdef __BORLANDC__ /* Borland C++ */
3e3baf6d 120
121#define _access access
122#define _chdir chdir
123#include <sys/types.h>
124
84902520 125#ifndef DllMain
126#define DllMain DllEntryPoint
127#endif
128
189b2af5 129#pragma warn -ccc /* "condition is always true/false" */
130#pragma warn -rch /* "unreachable code" */
131#pragma warn -sig /* "conversion may lose significant digits" */
132#pragma warn -pia /* "possibly incorrect assignment" */
133#pragma warn -par /* "parameter 'foo' is never used" */
134#pragma warn -aus /* "'foo' is assigned a value that is never used" */
135#pragma warn -use /* "'foo' is declared but never used" */
136#pragma warn -csu /* "comparing signed and unsigned values" */
137#pragma warn -pro /* "call to function with no prototype" */
3e3baf6d 138
4b556e6c 139#define USE_RTL_WAIT /* Borland has a working wait() */
140
ac4c12e7 141/* Borland is picky about a bare member function name used as its ptr */
142#ifdef PERL_OBJECT
143#define FUNC_NAME_TO_PTR(name) &(name)
144#endif
145
910dfcc8 146#endif
3e3baf6d 147
f3986ebb 148#ifdef _MSC_VER /* Microsoft Visual C++ */
149
0a753a76 150typedef long uid_t;
151typedef long gid_t;
f3986ebb 152#pragma warning(disable: 4018 4035 4101 4102 4244 4245 4761)
153
154#endif /* _MSC_VER */
155
910dfcc8 156#ifdef __MINGW32__ /* Minimal Gnu-Win32 */
157
158typedef long uid_t;
159typedef long gid_t;
3730b96e 160#define _environ environ
161#define flushall _flushall
162#define fcloseall _fcloseall
910dfcc8 163
ac4c12e7 164#ifndef _O_NOINHERIT
165# define _O_NOINHERIT 0x0080
166# ifndef _NO_OLDNAMES
167# define O_NOINHERIT _O_NOINHERIT
168# endif
169#endif
170
ba3eb2af 171#ifndef _O_NOINHERIT
172# define _O_NOINHERIT 0x0080
173# ifndef _NO_OLDNAMES
174# define O_NOINHERIT _O_NOINHERIT
175# endif
176#endif
177
910dfcc8 178#endif /* __MINGW32__ */
179
f3986ebb 180/* compatibility stuff for other compilers goes here */
0a753a76 181
0a753a76 182
390b85e7 183START_EXTERN_C
f3986ebb 184
185/* For UNIX compatibility. */
186
0a753a76 187extern uid_t getuid(void);
188extern gid_t getgid(void);
189extern uid_t geteuid(void);
190extern gid_t getegid(void);
0a753a76 191extern int setuid(uid_t uid);
192extern int setgid(gid_t gid);
193extern int kill(int pid, int sig);
161b471a 194extern void *sbrk(int need);
e34ffe5a 195extern char * getlogin(void);
b990f8c8 196extern int chown(const char *p, uid_t o, gid_t g);
d55594ae 197
f3986ebb 198#undef Stat
199#define Stat win32_stat
3e3baf6d 200
f3986ebb 201#undef init_os_extras
202#define init_os_extras Perl_init_os_extras
390b85e7 203
22239a37 204DllExport void Perl_win32_init(int *argcp, char ***argvp);
205DllExport void Perl_init_os_extras(void);
3730b96e 206DllExport void win32_str_os_error(void *sv, DWORD err);
0551aaa8 207
f3986ebb 208#ifndef USE_SOCKETS_AS_HANDLES
209extern FILE * my_fdopen(int, char *);
d55594ae 210#endif
f3986ebb 211extern int my_fclose(FILE *);
2d7a9237 212extern int do_aspawn(void *really, void **mark, void **sp);
f3986ebb 213extern int do_spawn(char *cmd);
2d7a9237 214extern int do_spawn_nowait(char *cmd);
f3986ebb 215extern char do_exec(char *cmd);
e5a95ffb 216extern char * win32_get_privlib(char *pl);
00dc2f4f 217extern char * win32_get_sitelib(char *pl);
f3986ebb 218extern int IsWin95(void);
219extern int IsWinNT(void);
d55594ae 220
f3986ebb 221extern char * staticlinkmodules[];
390b85e7 222
223END_EXTERN_C
d55594ae 224
68dc0745 225typedef char * caddr_t; /* In malloc.c (core address). */
0a753a76 226
68dc0745 227/*
68dc0745 228 * handle socket stuff, assuming socket is always available
229 */
0a753a76 230#include <sys/socket.h>
231#include <netdb.h>
232
bbc8f9de 233#ifdef MYMALLOC
234#define EMBEDMYMALLOC /**/
235/* #define USE_PERL_SBRK /**/
236/* #define PERL_SBRK_VIA_MALLOC /**/
237#endif
238
c31fac66 239#if defined(PERLDLL) && !defined(PERL_CORE)
bbc8f9de 240#define PERL_CORE
241#endif
242
a868473f 243#ifdef USE_BINMODE_SCRIPTS
244#define PERL_SCRIPT_MODE "rb"
245EXT void win32_strip_return(struct sv *sv);
246#else
247#define PERL_SCRIPT_MODE "r"
248#define win32_strip_return(sv) NOOP
249#endif
250
4b556e6c 251#define HAVE_INTERP_INTERN
252struct interp_intern {
253 char * w32_perlshell_tokens;
254 char ** w32_perlshell_vec;
255 long w32_perlshell_items;
256 struct av * w32_fdpid;
257#ifndef USE_RTL_WAIT
258 long w32_num_children;
259 HANDLE w32_child_pids[MAXIMUM_WAIT_OBJECTS];
260#endif
261};
262
9f699bd9 263#define w32_perlshell_tokens (sys_intern.w32_perlshell_tokens)
264#define w32_perlshell_vec (sys_intern.w32_perlshell_vec)
265#define w32_perlshell_items (sys_intern.w32_perlshell_items)
266#define w32_fdpid (sys_intern.w32_fdpid)
4b556e6c 267
268#ifndef USE_RTL_WAIT
9f699bd9 269# define w32_num_children (sys_intern.w32_num_children)
270# define w32_child_pids (sys_intern.w32_child_pids)
4b556e6c 271#endif
272
c53bd28a 273/*
274 * Now Win32 specific per-thread data stuff
275 */
276
277#ifdef USE_THREADS
e34ffe5a 278# ifndef USE_DECLSPEC_THREAD
279# define HAVE_THREAD_INTERN
280
281struct thread_intern {
282 /* XXX can probably use one buffer instead of several */
283 char Wstrerror_buffer[512];
284 struct servent Wservent;
285 char Wgetlogin_buffer[128];
4b556e6c 286 char Ww32_perllib_root[MAX_PATH+1];
401ef382 287# ifdef USE_SOCKETS_AS_HANDLES
288 int Winit_socktype;
289# endif
e34ffe5a 290# ifdef HAVE_DES_FCRYPT
291 char Wcrypt_buffer[30];
292# endif
2d7a9237 293# ifdef USE_RTL_THREAD_API
294 void * retv; /* slot for thread return value */
295# endif
c53bd28a 296};
e34ffe5a 297# endif /* !USE_DECLSPEC_THREAD */
298#endif /* USE_THREADS */
c53bd28a 299
68dc0745 300#endif /* _INC_WIN32_PERL5 */