#ifndef _INC_WIN32_PERL5
#define _INC_WIN32_PERL5
+#ifdef __GNUC__
+#define __declspec(x)
+typedef long long __int64;
+#define Win32_Winsock
+#endif
+
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <process.h>
#include <stdio.h>
#include <direct.h>
+#include <stdlib.h>
+#ifndef EXT
+#include "EXTERN.h"
+#endif
-/* For UNIX compatibility. */
+#ifndef START_EXTERN_C
+#ifdef __cplusplus
+# define START_EXTERN_C extern "C" {
+# define END_EXTERN_C }
+# define EXTERN_C extern "C"
+#else
+# define START_EXTERN_C
+# define END_EXTERN_C
+# define EXTERN_C
+#endif
+#endif
+
+#define STANDARD_C 1
+#define DOSISH 1 /* no escaping our roots */
+#define OP_BINARY O_BINARY /* mistake in in pp_sys.c? */
+#define DllExport __declspec(dllexport)
+#define DllImport __declspec(dllimport)
+
+/* Define USE_SOCKETS_AS_HANDLES to enable emulation of windows sockets as
+ * real filehandles. XXX Should always be defined (the other version is untested) */
+#define USE_SOCKETS_AS_HANDLES
+
+/* if USE_WIN32_RTL_ENV is not defined, Perl uses direct Win32 calls
+ * to read the environment, bypassing the runtime's (usually broken)
+ * facilities for accessing the same. See note in util.c/my_setenv(). */
+/*#define USE_WIN32_RTL_ENV */
+
+/* Define USE_FIXED_OSFHANDLE to fix VC's _open_osfhandle() on W95.
+ * Can only enable it if not using the DLL CRT (it doesn't expose internals) */
+#if defined(_MSC_VER) && !defined(_DLL) && defined(_M_IX86)
+#define USE_FIXED_OSFHANDLE
+#endif
+
+#ifndef VER_PLATFORM_WIN32_WINDOWS /* VC-2.0 headers dont have this */
+#define VER_PLATFORM_WIN32_WINDOWS 1
+#endif
+
+/* Compiler-specific stuff. */
+
+#ifdef __BORLANDC__ /* Microsoft Visual C++ */
+
+#define _access access
+#define _chdir chdir
+#include <sys/types.h>
+
+#ifndef DllMain
+#define DllMain DllEntryPoint
+#endif
+
+#pragma warn -ccc
+#pragma warn -rch
+#pragma warn -sig
+#pragma warn -pia
+#pragma warn -par
+#pragma warn -aus
+#pragma warn -use
+#pragma warn -csu
+#pragma warn -pro
+
+#else
+
+#ifdef _MSC_VER /* Microsoft Visual C++ */
typedef long uid_t;
typedef long gid_t;
+#pragma warning(disable: 4018 4035 4101 4102 4244 4245 4761)
+
+#endif /* _MSC_VER */
-extern char *staticlinkmodules[];
+/* compatibility stuff for other compilers goes here */
+
+#endif
+
+START_EXTERN_C
+
+/* For UNIX compatibility. */
extern uid_t getuid(void);
extern gid_t getgid(void);
extern uid_t geteuid(void);
extern gid_t getegid(void);
-
extern int setuid(uid_t uid);
extern int setgid(gid_t gid);
extern int kill(int pid, int sig);
+extern void *sbrk(int need);
-#define USE_SOCKETS_AS_HANDLES
-#ifndef USE_SOCKETS_AS_HANDLES
-extern FILE *myfdopen(int, char *);
-
-#undef fdopen
-#define fdopen myfdopen
-#endif /* USE_SOCKETS_AS_HANDLES */
-
-#define STANDARD_C 1 /* Perl5 likes standard C. */
-#define DOSISH 1 /* Take advantage of DOSish code in Perl5. */
-
-#define OP_BINARY _O_BINARY /* Mistake in in pp_sys.c. */
-
-#undef pipe
-#define pipe(fd) win32_pipe((fd), 512, _O_BINARY) /* the pipe call is a bit different */
-
-#undef pause
-#define pause() sleep((32767L << 16) + 32767)
+#undef Stat
+#define Stat win32_stat
+#undef init_os_extras
+#define init_os_extras Perl_init_os_extras
-#undef times
-#define times mytimes
+EXT void Perl_win32_init(int *argcp, char ***argvp);
+EXT void Perl_init_os_extras(void);
-#undef alarm
-#define alarm myalarm
+#ifndef USE_SOCKETS_AS_HANDLES
+extern FILE * my_fdopen(int, char *);
+#endif
+extern int my_fclose(FILE *);
+extern int do_aspawn(void* really, void ** mark, void ** arglast);
+extern int do_spawn(char *cmd);
+extern char do_exec(char *cmd);
+extern char * win32PerlLibPath(char *sfx,...);
+extern int IsWin95(void);
+extern int IsWinNT(void);
-#undef flock
-#define flock(fd,o) win32_flock(fd,o)
-#define LOCK_SH 1
-#define LOCK_EX 2
-#define LOCK_NB 4
-#define LOCK_UN 8
+extern char * staticlinkmodules[];
-struct tms {
- long tms_utime;
- long tms_stime;
- long tms_cutime;
- long tms_cstime;
-};
-
-unsigned int sleep(unsigned int);
-char *win32PerlLibPath();
-int mytimes(struct tms *timebuf);
-unsigned int myalarm(unsigned int sec);
-int do_aspawn(void* really, void** mark, void** arglast);
-int do_spawn(char *cmd);
+END_EXTERN_C
typedef char * caddr_t; /* In malloc.c (core address). */
/*
- * Extension Library, only good for VC
- */
-
-#define DllExport __declspec(dllexport)
-
-/*
* handle socket stuff, assuming socket is always available
*/
-
#include <sys/socket.h>
#include <netdb.h>
-#pragma warning(disable: 4018 4035 4101 4102 4244 4245 4761)
+#ifdef MYMALLOC
+#define EMBEDMYMALLOC /**/
+/* #define USE_PERL_SBRK /**/
+/* #define PERL_SBRK_VIA_MALLOC /**/
+#endif
-int IsWin95(void);
-int IsWinNT(void);
+#if defined(PERLDLL) && !defined(PERL_CORE)
+#define PERL_CORE
+#endif
-#ifndef VER_PLATFORM_WIN32_WINDOWS /* VC-2.0 headers dont have this */
-#define VER_PLATFORM_WIN32_WINDOWS 1
+#ifdef USE_BINMODE_SCRIPTS
+#define PERL_SCRIPT_MODE "rb"
+EXT void win32_strip_return(struct sv *sv);
+#else
+#define PERL_SCRIPT_MODE "r"
+#define win32_strip_return(sv) NOOP
#endif
#endif /* _INC_WIN32_PERL5 */