blob: e024148fa8adc6c9ef44cd8a423e20eaf5816bab [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001/*
cristy16af1cb2009-12-11 21:38:29 +00002 Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization
cristy3ed852e2009-09-05 21:47:34 +00003 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 utility methods.
17*/
18#ifndef _MAGICKCORE_NT_BASE_H
19#define _MAGICKCORE_NT_BASE_H
20
21#if defined(__cplusplus) || defined(c_plusplus)
22extern "C" {
23#endif
24
25#include "magick/delegate.h"
26#include "magick/delegate-private.h"
27#include "magick/exception.h"
28
29#define WIN32_LEAN_AND_MEAN
30#define VC_EXTRALEAN
31#define _CRT_SECURE_NO_DEPRECATE 1
32#include <windows.h>
33#include <wchar.h>
34#include <winuser.h>
35#include <wingdi.h>
36#include <io.h>
37#include <process.h>
38#include <errno.h>
39#if defined(_DEBUG) && !defined(__MINGW32__)
40#include <crtdbg.h>
41#endif
42
43#define PROT_READ 0x01
44#define PROT_WRITE 0x02
45#define MAP_SHARED 0x01
46#define MAP_PRIVATE 0x02
47#define MAP_ANONYMOUS 0x20
48#define F_OK 0
49#define R_OK 4
50#define W_OK 2
51#define RW_OK 6
52#define _SC_PAGESIZE 1
53#define _SC_PHYS_PAGES 2
54#define _SC_OPEN_MAX 3
55#if !defined(SSIZE_MAX)
56#define SSIZE_MAX 0x7fffffffL
57#endif
58
59/*
60 _MSC_VER values:
61 1100 MSVC 5.0
62 1200 MSVC 6.0
63 1300 MSVC 7.0 Visual C++ .NET 2002
64 1310 Visual c++ .NET 2003
65 1400 Visual C++ 2005
66 1500 Visual C++ 2008
67*/
68
69#if !defined(chsize)
70# if defined(__BORLANDC__)
71# define chsize(file,length) chsize(file,length)
72# else
73# define chsize(file,length) _chsize(file,length)
74# endif
75#endif
76
77#if !defined(access)
78# define access(path,mode) _access(path,mode)
79#endif
80#if !defined(chdir)
81# define chdir _chdir
82#endif
83#if !defined(close)
84# define close _close
85#endif
86#if !defined(closedir)
87# define closedir(directory) NTCloseDirectory(directory)
88#endif
89#if !defined(fdopen)
90# define fdopen _fdopen
91#endif
92#if !defined(fileno)
93# define fileno _fileno
94#endif
95#if !defined(fseek)
96# define fseeko _fseeki64
97#endif
98#if !defined(fstat) && !defined(__BORLANDC__)
cristy0157aea2010-04-24 21:12:18 +000099#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
cristy3ed852e2009-09-05 21:47:34 +0000100 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
101# define fstat _fstati64
102#else
103# define fstat _fstat
104#endif
105#endif
106#if !defined(fsync)
107# define fsync _commit
108#endif
109#if !defined(ftell)
110# define ftello _ftelli64
111#endif
112#if !defined(ftruncate)
113# define ftruncate(file,length) NTTruncateFile(file,length)
114#endif
115#if !defined(getcwd)
116# define getcwd _getcwd
117#endif
118#if !defined(getpid)
119# define getpid _getpid
120#endif
121#if !defined(hypot)
122# define hypot _hypot
123#endif
124#if !defined(inline)
125# define inline __inline
126#endif
127#if !defined(isatty)
128# define isatty _isatty
129#endif
130#if !defined(MAGICKCORE_LTDL_DELEGATE)
131#if !defined(lt_dlclose)
132# define lt_dlclose(handle) NTCloseLibrary(handle)
133#endif
134#if !defined(lt_dlerror)
135# define lt_dlerror() NTGetLibraryError()
136#endif
137#if !defined(lt_dlexit)
138# define lt_dlexit() NTExitLibrary()
139#endif
140#if !defined(lt_dlinit)
141# define lt_dlinit() NTInitializeLibrary()
142#endif
143#if !defined(lt_dlopen)
144# define lt_dlopen(filename) NTOpenLibrary(filename)
145#endif
146#if !defined(lt_dlsetsearchpath)
147# define lt_dlsetsearchpath(path) NTSetSearchPath(path)
148#endif
149#if !defined(lt_dlsym)
150# define lt_dlsym(handle,name) NTGetLibrarySymbol(handle,name)
151#endif
152#endif
153#if !defined(mkdir)
154# define mkdir _mkdir
155#endif
156#if !defined(mmap)
157# define mmap(address,length,protection,access,file,offset) \
158 NTMapMemory(address,length,protection,access,file,offset)
159#endif
160#if !defined(msync)
161# define msync(address,length,flags) NTSyncMemory(address,length,flags)
162#endif
163#if !defined(munmap)
164# define munmap(address,length) NTUnmapMemory(address,length)
165#endif
166#if !defined(opendir)
167# define opendir(directory) NTOpenDirectory(directory)
168#endif
169#if !defined(open)
170# define open _open
171#endif
172#if !defined(pclose)
173# define pclose _pclose
174#endif
175#if !defined(popen)
176# define popen _popen
177#endif
178#if !defined(read)
179# define read _read
180#endif
181#if !defined(readdir)
182# define readdir(directory) NTReadDirectory(directory)
183#endif
184#if !defined(seekdir)
185# define seekdir(directory,offset) NTSeekDirectory(directory,offset)
186#endif
187#if !defined(setmode)
188# define setmode _setmode
189#endif
cristy98e91bd2010-01-12 01:11:42 +0000190#if !defined(spawnvp)
191# define spawnvp _spawnvp
192#endif
cristy3ed852e2009-09-05 21:47:34 +0000193#if !defined(stat) && !defined(__BORLANDC__)
cristy0157aea2010-04-24 21:12:18 +0000194#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
cristy3ed852e2009-09-05 21:47:34 +0000195 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
196# define stat _stati64
197#else
198# define stat _stat
199#endif
200#endif
201#if !defined(strcasecmp)
202# define strcasecmp _strcmpi
203#endif
204#if !defined(strncasecmp)
205# define strncasecmp _strnicmp
206#endif
207#if !defined(sysconf)
208# define sysconf(name) NTSystemConfiguration(name)
209#endif
210#if !defined(telldir)
211# define telldir(directory) NTTellDirectory(directory)
212#endif
213#if !defined(tempnam)
214# define tempnam _tempnam
215#endif
216#if !defined(vsnprintf)
217#if !defined(_MSC_VER) || (defined(_MSC_VER) && (_MSC_VER < 1500))
218#define vsnprintf _vsnprintf
219#endif
220#endif
221#if !defined(write)
222# define write _write
223#endif
224#if !defined(wstat) && !defined(__BORLANDC__)
cristy0157aea2010-04-24 21:12:18 +0000225#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
cristy3ed852e2009-09-05 21:47:34 +0000226 !(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
227# define wstat _wstati64
228#else
229# define wstat _wstat
230#endif
231#endif
232
cristy0157aea2010-04-24 21:12:18 +0000233#if defined(_MT) && defined(MAGICKCORE_WINDOWS_SUPPORT)
cristy3ed852e2009-09-05 21:47:34 +0000234# define SAFE_GLOBAL __declspec(thread)
235#else
236# define SAFE_GLOBAL
237#endif
238
239#if defined(__BORLANDC__)
240#undef _O_RANDOM
241#define _O_RANDOM 0
242#undef _O_SEQUENTIAL
243#define _O_SEQUENTIAL 0
244#undef _O_SHORT_LIVED
245#define _O_SHORT_LIVED 0
246#undef _O_TEMPORARY
247#define _O_TEMPORARY 0
248#endif
249
250#if !defined(XS_VERSION)
251struct dirent
252{
253 char
254 d_name[2048];
255
256 int
257 d_namlen;
258};
259
260typedef struct _DIR
261{
262 HANDLE
263 hSearch;
264
265 WIN32_FIND_DATA
266 Win32FindData;
267
268 BOOL
269 firsttime;
270
271 struct dirent
272 file_info;
273} DIR;
274
275typedef struct _NTMEMORYSTATUSEX
276{
277 DWORD
278 dwLength,
279 dwMemoryLoad;
280
281 DWORDLONG
282 ullTotalPhys,
283 ullAvailPhys,
284 ullTotalPageFile,
285 ullAvailPageFile,
286 ullTotalVirtual,
287 ullAvailVirtual,
288 ullAvailExtendedVirtual;
289} NTMEMORYSTATUSEX;
290
cristy9acb8642010-04-24 17:12:04 +0000291#if !defined(__MINGW32__)
cristy6d71f8d2010-02-28 00:46:02 +0000292struct timezone
293{
294 int
295 tz_minuteswest,
296 tz_dsttime;
297};
cristy9acb8642010-04-24 17:12:04 +0000298#endif
cristy6d71f8d2010-02-28 00:46:02 +0000299
cristy3ed852e2009-09-05 21:47:34 +0000300typedef UINT
301 (CALLBACK *LPFNDLLFUNC1)(DWORD,UINT);
302
303typedef UINT
304 (CALLBACK *LPFNDLLFUNC2)(NTMEMORYSTATUSEX *);
305
306#endif
307
308#if !defined(ssize_t) && !defined(__MINGW32__)
309typedef long ssize_t;
310#endif
311
312#if defined(MAGICKCORE_BZLIB_DELEGATE)
313# if defined(_WIN32)
314# define BZ_IMPORT 1
315# endif
316#endif
317
318extern MagickExport char
319 *NTGetLastError(void);
320
cristydefb3f02009-09-10 02:18:35 +0000321extern MagickExport const GhostInfo
cristy3ed852e2009-09-05 21:47:34 +0000322 *NTGhostscriptDLLVectors(void);
323
324#if !defined(MAGICKCORE_LTDL_DELEGATE)
325extern MagickExport const char
326 *NTGetLibraryError(void);
327#endif
328
329#if !defined(XS_VERSION)
330extern MagickExport const char
331 *NTGetLibraryError(void);
332
333extern MagickExport DIR
334 *NTOpenDirectory(const char *);
335
336extern MagickExport double
337 NTElapsedTime(void),
338 NTUserTime(void);
339
340extern MagickExport int
341 Exit(int),
cristy807fd932010-04-24 03:38:46 +0000342#if !defined(__MINGW32__)
cristy6d71f8d2010-02-28 00:46:02 +0000343 gettimeofday(struct timeval *,struct timezone *),
cristy807fd932010-04-24 03:38:46 +0000344#endif
cristy3ed852e2009-09-05 21:47:34 +0000345 IsWindows95(),
346 NTCloseDirectory(DIR *),
347 NTCloseLibrary(void *),
348 NTControlHandler(void),
349 NTExitLibrary(void),
350 NTTruncateFile(int,off_t),
351 NTGhostscriptDLL(char *,int),
352 NTGhostscriptEXE(char *,int),
353 NTGhostscriptFonts(char *,int),
354 NTGhostscriptLoadDLL(void),
355 NTGhostscriptUnLoadDLL(void),
356 NTInitializeLibrary(void),
357 NTSetSearchPath(const char *),
358 NTSyncMemory(void *,size_t,int),
359 NTUnmapMemory(void *,size_t),
360 NTSystemCommand(const char *);
361
362extern MagickExport long
363 NTSystemConfiguration(int),
364 NTTellDirectory(DIR *);
365
366extern MagickExport MagickBooleanType
367 NTGatherRandomData(const size_t,unsigned char *),
368 NTGetExecutionPath(char *,const size_t),
369 NTGetModulePath(const char *,char *),
370 NTReportEvent(const char *,const MagickBooleanType),
371 NTReportException(const char *,const MagickBooleanType);
372
373extern MagickExport struct dirent
374 *NTReadDirectory(DIR *);
375
376extern MagickExport unsigned char
377 *NTRegistryKeyLookup(const char *),
378 *NTResourceToBlob(const char *);
379
380extern MagickExport void
381 NTErrorHandler(const ExceptionType,const char *,const char *),
382 *NTGetLibrarySymbol(void *,const char *),
383 *NTMapMemory(char *,size_t,int,int,int,MagickOffsetType),
384 *NTOpenLibrary(const char *),
385 NTSeekDirectory(DIR *,long),
386 NTWarningHandler(const ExceptionType,const char *,const char *);
387
388#endif /* !XS_VERSION */
389
390#if defined(__cplusplus) || defined(c_plusplus)
391}
392#endif /* !C++ */
393
394#endif /* !_MAGICKCORE_NT_BASE_H */