blob: fef1dbe8c0297ad8a7d07663ea41d8887a537a62 [file] [log] [blame]
cristy72bdba32011-10-08 00:16:18 +00001/*
2 Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization
3 dedicated to making software imaging solutions freely available.
4
5 You may not use this file except in compliance with the License.
6 obtain a copy of the License at
7
8 http://www.imagemagick.org/script/license.php
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15
16 MagickCore Windows NT private methods.
17*/
18#ifndef _MAGICKCORE_NT_BASE_PRIVATE_H
19#define _MAGICKCORE_NT_BASE_PRIVATE_H
20
21#if defined(__cplusplus) || defined(c_plusplus)
22extern "C" {
23#endif
24
cristy3a745a22011-10-08 13:17:57 +000025#if defined(MAGICKCORE_WINDOWS_SUPPORT)
26
cristy72bdba32011-10-08 00:16:18 +000027#include "MagickCore/delegate.h"
28#include "MagickCore/delegate-private.h"
29#include "MagickCore/exception.h"
30
31#define WIN32_LEAN_AND_MEAN
32#define VC_EXTRALEAN
33#define _CRT_SECURE_NO_DEPRECATE 1
34#include <windows.h>
35#include <wchar.h>
36#include <winuser.h>
37#include <wingdi.h>
38#include <io.h>
39#include <process.h>
40#include <errno.h>
41#if defined(_DEBUG) && !defined(__MINGW32__)
42#include <crtdbg.h>
43#endif
44
45#define PROT_READ 0x01
46#define PROT_WRITE 0x02
47#define MAP_SHARED 0x01
48#define MAP_PRIVATE 0x02
49#define MAP_ANONYMOUS 0x20
50#define F_OK 0
51#define R_OK 4
52#define W_OK 2
53#define RW_OK 6
54#define _SC_PAGESIZE 1
55#define _SC_PHYS_PAGES 2
56#define _SC_OPEN_MAX 3
57#if !defined(SSIZE_MAX)
58#define SSIZE_MAX 0x7fffffffL
59#endif
60
61/*
62 _MSC_VER values:
63 1100 MSVC 5.0
64 1200 MSVC 6.0
65 1300 MSVC 7.0 Visual C++ .NET 2002
66 1310 Visual c++ .NET 2003
67 1400 Visual C++ 2005
68 1500 Visual C++ 2008
69*/
70
71#if !defined(chsize)
72# if defined(__BORLANDC__)
73# define chsize(file,length) chsize(file,length)
74# else
75# define chsize(file,length) _chsize(file,length)
76# endif
77#endif
78
79#if !defined(access)
80#if defined(_VISUALC_) && (_MSC_VER >= 1400)
81# define access(path,mode) _access_s(path,mode)
82#endif
83#endif
84#if !defined(chdir)
85# define chdir _chdir
86#endif
87#if !defined(close)
88# define close _close
89#endif
90#if !defined(closedir)
91# define closedir(directory) NTCloseDirectory(directory)
92#endif
93#if !defined(fdopen)
94# define fdopen _fdopen
95#endif
96#if !defined(fileno)
97# define fileno _fileno
98#endif
99#if !defined(fseek) && !defined(__MINGW32__)
100#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
101 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
102# define fseek _fseeki64
103#endif
104#endif
105#if !defined(fstat) && !defined(__BORLANDC__)
106#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
107 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
108# define fstat _fstati64
109#else
110# define fstat _fstat
111#endif
112#endif
113#if !defined(fsync)
114# define fsync _commit
115#endif
116#if !defined(ftell) && !defined(__MINGW32__)
117#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
118 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
119# define ftell _ftelli64
120#endif
121#endif
122#if !defined(ftruncate)
123# define ftruncate(file,length) NTTruncateFile(file,length)
124#endif
125#if !defined(getcwd)
126# define getcwd _getcwd
127#endif
128#if !defined(getpid)
129# define getpid _getpid
130#endif
131#if !defined(hypot)
132# define hypot _hypot
133#endif
134#if !defined(inline)
135# define inline __inline
136#endif
137#if !defined(isatty)
138# define isatty _isatty
139#endif
140#if !defined(locale_t)
141#define locale_t _locale_t
142#endif
143#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
144 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
145# define lseek _lseeki64
146#else
147# define lseek _lseek
148#endif
149#if !defined(MAGICKCORE_LTDL_DELEGATE)
150#if !defined(lt_dlclose)
151# define lt_dlclose(handle) NTCloseLibrary(handle)
152#endif
153#if !defined(lt_dlerror)
154# define lt_dlerror() NTGetLibraryError()
155#endif
156#if !defined(lt_dlexit)
157# define lt_dlexit() NTExitLibrary()
158#endif
159#if !defined(lt_dlinit)
160# define lt_dlinit() NTInitializeLibrary()
161#endif
162#if !defined(lt_dlopen)
163# define lt_dlopen(filename) NTOpenLibrary(filename)
164#endif
165#if !defined(lt_dlsetsearchpath)
166# define lt_dlsetsearchpath(path) NTSetSearchPath(path)
167#endif
168#if !defined(lt_dlsym)
169# define lt_dlsym(handle,name) NTGetLibrarySymbol(handle,name)
170#endif
171#endif
172#if !defined(mkdir)
173# define mkdir _mkdir
174#endif
175#if !defined(mmap)
176# define mmap(address,length,protection,access,file,offset) \
177 NTMapMemory(address,length,protection,access,file,offset)
178#endif
179#if !defined(msync)
180# define msync(address,length,flags) NTSyncMemory(address,length,flags)
181#endif
182#if !defined(munmap)
183# define munmap(address,length) NTUnmapMemory(address,length)
184#endif
185#if !defined(opendir)
186# define opendir(directory) NTOpenDirectory(directory)
187#endif
188#if !defined(open)
189# define open _open
190#endif
191#if !defined(pclose)
192# define pclose _pclose
193#endif
194#if !defined(popen)
195# define popen _popen
196#endif
197#if !defined(fprintf_l)
198#define fprintf_l _fprintf_s_l
199#endif
200#if !defined(read)
201# define read _read
202#endif
203#if !defined(readdir)
204# define readdir(directory) NTReadDirectory(directory)
205#endif
206#if !defined(seekdir)
207# define seekdir(directory,offset) NTSeekDirectory(directory,offset)
208#endif
209#if !defined(setmode)
210# define setmode _setmode
211#endif
212#if !defined(spawnvp)
213# define spawnvp _spawnvp
214#endif
215#if !defined(strtod_l)
216#define strtod_l _strtod_l
217#endif
218#if !defined(stat) && !defined(__BORLANDC__)
219#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
220 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
221# define stat _stati64
222#else
223# define stat _stat
224#endif
225#endif
226#if !defined(strcasecmp)
227# define strcasecmp _strcmpi
228#endif
229#if !defined(strncasecmp)
230# define strncasecmp _strnicmp
231#endif
232#if !defined(sysconf)
233# define sysconf(name) NTSystemConfiguration(name)
234#endif
235#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
236 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
237# define tell _telli64
238#else
239# define tell _tell
240#endif
241#if !defined(telldir)
242# define telldir(directory) NTTellDirectory(directory)
243#endif
244#if !defined(tempnam)
245# define tempnam _tempnam_s
246#endif
247#if !defined(vfprintf_l)
248#define vfprintf_l _vfprintf_l
249#endif
250#if !defined(vsnprintf)
251#if !defined(_MSC_VER) || (defined(_MSC_VER) && _MSC_VER < 1500)
252#define vsnprintf _vsnprintf
253#endif
254#endif
255#if !defined(vsnprintf_l)
256#define vsnprintf_l _vsnprintf_l
257#endif
258#if !defined(write)
259# define write _write
260#endif
261#if !defined(wstat) && !defined(__BORLANDC__)
262#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
263 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
264# define wstat _wstati64
265#else
266# define wstat _wstat
267#endif
268#endif
269
270#if defined(_MT) && defined(MAGICKCORE_WINDOWS_SUPPORT)
271# define SAFE_GLOBAL __declspec(thread)
272#else
273# define SAFE_GLOBAL
274#endif
275
276#if defined(__BORLANDC__)
277#undef _O_RANDOM
278#define _O_RANDOM 0
279#undef _O_SEQUENTIAL
280#define _O_SEQUENTIAL 0
281#undef _O_SHORT_LIVED
282#define _O_SHORT_LIVED 0
283#undef _O_TEMPORARY
284#define _O_TEMPORARY 0
285#endif
286
287#undef gettimeofday
288
289#if !defined(XS_VERSION)
290struct dirent
291{
292 char
293 d_name[2048];
294
295 int
296 d_namlen;
297};
298
299typedef struct _DIR
300{
301 HANDLE
302 hSearch;
303
304 WIN32_FIND_DATA
305 Win32FindData;
306
307 BOOL
308 firsttime;
309
310 struct dirent
311 file_info;
312} DIR;
313
314typedef struct _NTMEMORYSTATUSEX
315{
316 DWORD
317 dwLength,
318 dwMemoryLoad;
319
320 DWORDLONG
321 ullTotalPhys,
322 ullAvailPhys,
323 ullTotalPageFile,
324 ullAvailPageFile,
325 ullTotalVirtual,
326 ullAvailVirtual,
327 ullAvailExtendedVirtual;
328} NTMEMORYSTATUSEX;
329
330#if !defined(__MINGW32__)
331struct timezone
332{
333 int
334 tz_minuteswest,
335 tz_dsttime;
336};
337#endif
338
339typedef UINT
340 (CALLBACK *LPFNDLLFUNC1)(DWORD,UINT);
341
342typedef UINT
343 (CALLBACK *LPFNDLLFUNC2)(NTMEMORYSTATUSEX *);
344
345#endif
346
347#if defined(MAGICKCORE_BZLIB_DELEGATE)
348# if defined(_WIN32)
349# define BZ_IMPORT 1
350# endif
351#endif
352
353extern MagickPrivate char
354 *NTGetLastError(void),
355 **NTArgvToUTF8(const int argc,wchar_t **);
356
357extern MagickPrivate const GhostInfo
358 *NTGhostscriptDLLVectors(void);
359
360#if !defined(MAGICKCORE_LTDL_DELEGATE)
361extern MagickPrivate const char
362 *NTGetLibraryError(void);
363#endif
364
365#if !defined(XS_VERSION)
366extern MagickPrivate const char
367 *NTGetLibraryError(void);
368
369extern MagickPrivate DIR
370 *NTOpenDirectory(const char *);
371
372extern MagickPrivate double
373 NTElapsedTime(void),
374 NTUserTime(void);
375
376extern MagickPrivate int
377 Exit(int),
378#if !defined(__MINGW32__)
379 gettimeofday(struct timeval *,struct timezone *),
380#endif
381 IsWindows95(void),
382 NTCloseDirectory(DIR *),
383 NTCloseLibrary(void *),
384 NTControlHandler(void),
385 NTExitLibrary(void),
386 NTTruncateFile(int,off_t),
387 NTGhostscriptDLL(char *,int),
388 NTGhostscriptEXE(char *,int),
389 NTGhostscriptFonts(char *,int),
390 NTGhostscriptLoadDLL(void),
391 NTGhostscriptUnLoadDLL(void),
392 NTInitializeLibrary(void),
393 NTSetSearchPath(const char *),
394 NTSyncMemory(void *,size_t,int),
395 NTUnmapMemory(void *,size_t),
396 NTSystemCommand(const char *);
397
398extern MagickPrivate ssize_t
399 NTSystemConfiguration(int),
400 NTTellDirectory(DIR *);
401
402extern MagickPrivate MagickBooleanType
403 NTGatherRandomData(const size_t,unsigned char *),
404 NTGetExecutionPath(char *,const size_t),
405 NTGetModulePath(const char *,char *),
406 NTIsMagickConflict(const char *),
407 NTLoadTypeLists(SplayTreeInfo *,ExceptionInfo *),
408 NTReportEvent(const char *,const MagickBooleanType),
409 NTReportException(const char *,const MagickBooleanType);
410
411extern MagickPrivate struct dirent
412 *NTReadDirectory(DIR *);
413
414extern MagickPrivate unsigned char
415 *NTRegistryKeyLookup(const char *),
416 *NTResourceToBlob(const char *);
417
418extern MagickPrivate void
419 NTErrorHandler(const ExceptionType,const char *,const char *),
420 *NTGetLibrarySymbol(void *,const char *),
421 *NTMapMemory(char *,size_t,int,int,int,MagickOffsetType),
422 *NTOpenLibrary(const char *),
423 NTSeekDirectory(DIR *,ssize_t),
424 NTWarningHandler(const ExceptionType,const char *,const char *);
425
426#endif /* !XS_VERSION */
427
cristy3a745a22011-10-08 13:17:57 +0000428#endif /* MAGICKCORE_WINDOWS_SUPPORT */
429
cristy72bdba32011-10-08 00:16:18 +0000430#if defined(__cplusplus) || defined(c_plusplus)
431}
432#endif /* !C++ */
433
434#endif /* !_MAGICKCORE_NT_BASE_H */