summaryrefslogtreecommitdiff
path: root/win32/win32.h
blob: 365fe5e22029cccd6ab1e0aca988e4b9a49dcf0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/* WIN32.H
 *
 * (c) 1995 Microsoft Corporation. All rights reserved. 
 * 		Developed by hip communications inc., http://info.hip.com/info/
 *
 *    You may distribute under the terms of either the GNU General Public
 *    License or the Artistic License, as specified in the README file.
 */
#ifndef  _INC_WIN32_PERL5
#define  _INC_WIN32_PERL5

#define  WIN32_LEAN_AND_MEAN
#include <windows.h>

#ifdef   WIN32_LEAN_AND_MEAN		/* C file is NOT a Perl5 original. */
#define  CONTEXT	PERL_CONTEXT	/* Avoid conflict of CONTEXT defs. */
#define  index		strchr		/* Why 'index'? */
#endif /*WIN32_LEAN_AND_MEAN */

#include <dirent.h>
#include <io.h>
#include <process.h>
#include <stdio.h>
#include <direct.h>
#include <stdlib.h>
#ifndef EXT
#include "EXTERN.h"
#endif

#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 USE_SOCKETS_AS_HANDLES		/* we wanna pretend sockets are FDs */
/*#define USE_WIN32_RTL_ENV */		/* see note below */

/* For UNIX compatibility. */

#ifdef __BORLANDC__

#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

typedef long		uid_t;
typedef long		gid_t;

#endif

START_EXTERN_C
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);
END_EXTERN_C

extern  char	*staticlinkmodules[];

START_EXTERN_C

/* 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().
 */

#ifndef USE_WIN32_RTL_ENV
EXT char *win32_getenv(const char *name);
#undef getenv
#define getenv win32_getenv
#endif

EXT void Perl_win32_init(int *argcp, char ***argvp);

#ifndef USE_SOCKETS_AS_HANDLES
extern FILE *my_fdopen(int, char *);
#undef fdopen
#define fdopen my_fdopen
#endif	/* USE_SOCKETS_AS_HANDLES */

#undef fclose
#define fclose my_fclose

#undef	 pipe		/* win32_pipe() itself calls _pipe() */
#define  pipe(fd)	win32_pipe((fd), 512, O_BINARY)

#undef	 pause
#define  pause()	sleep((32767L << 16) + 32767)

#undef	 times
#define  times	my_times

#undef	 alarm
#define  alarm	my_alarm

struct tms {
	long	tms_utime;
	long	tms_stime;
	long	tms_cutime;
	long	tms_cstime;
};

extern unsigned int sleep(unsigned int);
extern char *win32PerlLibPath(void);
extern char *win32SiteLibPath(void);
extern int my_times(struct tms *timebuf);
extern unsigned int my_alarm(unsigned int sec);
extern int my_flock(int fd, int oper);
extern int do_aspawn(void* really, void ** mark, void ** arglast);
extern int do_spawn(char *cmd);
extern char do_exec(char *cmd);
extern void init_os_extras(void);
extern int my_fclose(FILE *);
extern int IsWin95(void);
extern int IsWinNT(void);

END_EXTERN_C

typedef  char *		caddr_t;	/* In malloc.c (core address). */

/*
 * Extension Library, only good for VC
 */

#define DllExport	__declspec(dllexport)
#define DllImport	__declspec(dllimport)

/*
 * handle socket stuff, assuming socket is always available
 */

#include <sys/socket.h>
#include <netdb.h>

#ifdef _MSC_VER
#pragma  warning(disable: 4018 4035 4101 4102 4244 4245 4761)
#endif

#ifndef VER_PLATFORM_WIN32_WINDOWS	/* VC-2.0 headers dont have this */
#define VER_PLATFORM_WIN32_WINDOWS	1
#endif

#endif /* _INC_WIN32_PERL5 */