This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[asperl] various changes to get asperl working under Borland
[perl5.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
DL
12#ifdef PERL_OBJECT
13#define ENV_HV_NAME "ENV_HV_NAME"
14#define DYNAMIC_ENV_FETCH
15#define prime_env_iter()
16#ifdef PERL_GLOBAL_STRUCT
17#error PERL_GLOBAL_STRUCT cannot be defined with PERL_OBJECT
18#endif
19#define win32_perllib_path PerlEnv_lib_path
20#endif
21
a835ef8a 22#ifdef __GNUC__
a835ef8a
NIS
23typedef long long __int64;
24#define Win32_Winsock
ac4c12e7
GS
25# ifdef __cplusplus
26#undef __attribute__ /* seems broken in 2.8.0 */
27#define __attribute__(p)
28# endif
22239a37
NIS
29/* GCC does not do __declspec() - render it a nop
30 * and turn on options to avoid importing data
31 */
32#define __declspec(x)
33#define PERL_GLOBAL_STRUCT
34#define MULTIPLICITY
d56e6723
GS
35#ifndef TLS_OUT_OF_INDEXES
36#define TLS_OUT_OF_INDEXES (DWORD)0xFFFFFFFF
37#endif
a835ef8a
NIS
38#endif
39
22239a37
NIS
40/* Define DllExport akin to perl's EXT,
41 * If we are in the DLL or mimicing the DLL for Win95 work round
42 * then Export the symbol,
43 * otherwise import it.
44 */
45
c69f6586
GS
46#if defined(PERL_OBJECT)
47#define DllExport
48#else
22239a37
NIS
49#if defined(PERLDLL) || defined(WIN95FIX)
50#define DllExport __declspec(dllexport)
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. */
61#define index strchr /* Why 'index'? */
62#endif /*WIN32_LEAN_AND_MEAN */
0a753a76 63
64#include <dirent.h>
65#include <io.h>
66#include <process.h>
67#include <stdio.h>
68#include <direct.h>
390b85e7
GS
69#include <stdlib.h>
70#ifndef EXT
71#include "EXTERN.h"
72#endif
73
c69f112c
NIS
74struct tms {
75 long tms_utime;
76 long tms_stime;
77 long tms_cutime;
78 long tms_cstime;
79};
80
390b85e7
GS
81#ifndef START_EXTERN_C
82#ifdef __cplusplus
83# define START_EXTERN_C extern "C" {
84# define END_EXTERN_C }
85# define EXTERN_C extern "C"
86#else
87# define START_EXTERN_C
88# define END_EXTERN_C
89# define EXTERN_C
90#endif
91#endif
92
93#define STANDARD_C 1
94#define DOSISH 1 /* no escaping our roots */
95#define OP_BINARY O_BINARY /* mistake in in pp_sys.c? */
0a753a76 96
f3986ebb
GS
97/* Define USE_SOCKETS_AS_HANDLES to enable emulation of windows sockets as
98 * real filehandles. XXX Should always be defined (the other version is untested) */
99#define USE_SOCKETS_AS_HANDLES
100
101/* if USE_WIN32_RTL_ENV is not defined, Perl uses direct Win32 calls
102 * to read the environment, bypassing the runtime's (usually broken)
103 * facilities for accessing the same. See note in util.c/my_setenv(). */
104/*#define USE_WIN32_RTL_ENV */
0a753a76 105
f3986ebb
GS
106/* Define USE_FIXED_OSFHANDLE to fix VC's _open_osfhandle() on W95.
107 * Can only enable it if not using the DLL CRT (it doesn't expose internals) */
108#if defined(_MSC_VER) && !defined(_DLL) && defined(_M_IX86)
109#define USE_FIXED_OSFHANDLE
110#endif
111
902173a3
GS
112#define ENV_IS_CASELESS
113
f3986ebb
GS
114#ifndef VER_PLATFORM_WIN32_WINDOWS /* VC-2.0 headers dont have this */
115#define VER_PLATFORM_WIN32_WINDOWS 1
116#endif
117
118/* Compiler-specific stuff. */
119
910dfcc8 120#ifdef __BORLANDC__ /* Borland C++ */
3e3baf6d
TB
121
122#define _access access
123#define _chdir chdir
124#include <sys/types.h>
125
84902520
TB
126#ifndef DllMain
127#define DllMain DllEntryPoint
128#endif
129
189b2af5
GS
130#pragma warn -ccc /* "condition is always true/false" */
131#pragma warn -rch /* "unreachable code" */
132#pragma warn -sig /* "conversion may lose significant digits" */
133#pragma warn -pia /* "possibly incorrect assignment" */
134#pragma warn -par /* "parameter 'foo' is never used" */
135#pragma warn -aus /* "'foo' is assigned a value that is never used" */
136#pragma warn -use /* "'foo' is declared but never used" */
137#pragma warn -csu /* "comparing signed and unsigned values" */
138#pragma warn -pro /* "call to function with no prototype" */
3e3baf6d 139
ac4c12e7
GS
140/* Borland is picky about a bare member function name used as its ptr */
141#ifdef PERL_OBJECT
142#define FUNC_NAME_TO_PTR(name) &(name)
143#endif
144
910dfcc8 145#endif
3e3baf6d 146
f3986ebb
GS
147#ifdef _MSC_VER /* Microsoft Visual C++ */
148
0a753a76 149typedef long uid_t;
150typedef long gid_t;
f3986ebb
GS
151#pragma warning(disable: 4018 4035 4101 4102 4244 4245 4761)
152
153#endif /* _MSC_VER */
154
910dfcc8
GS
155#ifdef __MINGW32__ /* Minimal Gnu-Win32 */
156
157typedef long uid_t;
158typedef long gid_t;
3730b96e
GS
159#define _environ environ
160#define flushall _flushall
161#define fcloseall _fcloseall
910dfcc8 162
ac4c12e7
GS
163#ifndef _O_NOINHERIT
164# define _O_NOINHERIT 0x0080
165# ifndef _NO_OLDNAMES
166# define O_NOINHERIT _O_NOINHERIT
167# endif
168#endif
169
910dfcc8
GS
170#endif /* __MINGW32__ */
171
f3986ebb 172/* compatibility stuff for other compilers goes here */
0a753a76 173
0a753a76 174
390b85e7 175START_EXTERN_C
f3986ebb
GS
176
177/* For UNIX compatibility. */
178
0a753a76 179extern uid_t getuid(void);
180extern gid_t getgid(void);
181extern uid_t geteuid(void);
182extern gid_t getegid(void);
0a753a76 183extern int setuid(uid_t uid);
184extern int setgid(gid_t gid);
185extern int kill(int pid, int sig);
161b471a 186extern void *sbrk(int need);
e34ffe5a 187extern char * getlogin(void);
b990f8c8 188extern int chown(const char *p, uid_t o, gid_t g);
d55594ae 189
f3986ebb
GS
190#undef Stat
191#define Stat win32_stat
3e3baf6d 192
f3986ebb
GS
193#undef init_os_extras
194#define init_os_extras Perl_init_os_extras
390b85e7 195
22239a37
NIS
196DllExport void Perl_win32_init(int *argcp, char ***argvp);
197DllExport void Perl_init_os_extras(void);
3730b96e 198DllExport void win32_str_os_error(void *sv, DWORD err);
0551aaa8 199
f3986ebb
GS
200#ifndef USE_SOCKETS_AS_HANDLES
201extern FILE * my_fdopen(int, char *);
d55594ae 202#endif
f3986ebb 203extern int my_fclose(FILE *);
2d7a9237 204extern int do_aspawn(void *really, void **mark, void **sp);
f3986ebb 205extern int do_spawn(char *cmd);
2d7a9237 206extern int do_spawn_nowait(char *cmd);
f3986ebb 207extern char do_exec(char *cmd);
2d7a9237 208extern char * win32_perllib_path(char *sfx,...);
f3986ebb
GS
209extern int IsWin95(void);
210extern int IsWinNT(void);
d55594ae 211
f3986ebb 212extern char * staticlinkmodules[];
390b85e7
GS
213
214END_EXTERN_C
d55594ae 215
68dc0745 216typedef char * caddr_t; /* In malloc.c (core address). */
0a753a76 217
68dc0745 218/*
68dc0745 219 * handle socket stuff, assuming socket is always available
220 */
0a753a76 221#include <sys/socket.h>
222#include <netdb.h>
223
bbc8f9de
NIS
224#ifdef MYMALLOC
225#define EMBEDMYMALLOC /**/
226/* #define USE_PERL_SBRK /**/
227/* #define PERL_SBRK_VIA_MALLOC /**/
228#endif
229
c31fac66 230#if defined(PERLDLL) && !defined(PERL_CORE)
bbc8f9de
NIS
231#define PERL_CORE
232#endif
233
a868473f
NIS
234#ifdef USE_BINMODE_SCRIPTS
235#define PERL_SCRIPT_MODE "rb"
236EXT void win32_strip_return(struct sv *sv);
237#else
238#define PERL_SCRIPT_MODE "r"
239#define win32_strip_return(sv) NOOP
240#endif
241
c53bd28a
NIS
242/*
243 * Now Win32 specific per-thread data stuff
244 */
245
246#ifdef USE_THREADS
e34ffe5a
GS
247# ifndef USE_DECLSPEC_THREAD
248# define HAVE_THREAD_INTERN
249
250struct thread_intern {
251 /* XXX can probably use one buffer instead of several */
252 char Wstrerror_buffer[512];
253 struct servent Wservent;
254 char Wgetlogin_buffer[128];
255# ifdef HAVE_DES_FCRYPT
256 char Wcrypt_buffer[30];
257# endif
2d7a9237
GS
258# ifdef USE_RTL_THREAD_API
259 void * retv; /* slot for thread return value */
260# endif
c53bd28a 261};
e34ffe5a
GS
262# endif /* !USE_DECLSPEC_THREAD */
263#endif /* USE_THREADS */
c53bd28a 264
68dc0745 265#endif /* _INC_WIN32_PERL5 */