summaryrefslogtreecommitdiff
path: root/win32/win32.h
blob: dc069ba366cf8b16916d10b0e4203c97aefe08f8 (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
/* 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>

/* 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

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  char	*staticlinkmodules[];

/* 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 */

#ifndef USE_WIN32_RTL_ENV
#include <stdlib.h>
#ifndef EXT
#include "EXTERN.h"
#endif
#undef getenv
#define getenv win32_getenv
EXT char *win32_getenv(const char *name);
#endif

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

#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	 times
#define  times	mytimes

#undef	 alarm
#define  alarm	myalarm

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

unsigned int sleep(unsigned int);
char *win32PerlLibPath(void);
char *win32SiteLibPath(void);
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);
char do_exec(char *cmd);
void init_os_extras(void);

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

int IsWin95(void);
int IsWinNT(void);

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

#endif /* _INC_WIN32_PERL5 */