]> granicus.if.org Git - imagemagick/blob - magick/nt-base.h
(no commit message)
[imagemagick] / magick / nt-base.h
1 /*
2   Copyright 1999-2010 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 utility methods.
17 */
18 #ifndef _MAGICKCORE_NT_BASE_H
19 #define _MAGICKCORE_NT_BASE_H
20
21 #if defined(__cplusplus) || defined(c_plusplus)
22 extern "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__)
99 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
100   !(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
190 #if !defined(spawnvp)
191 #  define spawnvp  _spawnvp
192 #endif
193 #if !defined(stat) && !defined(__BORLANDC__)
194 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
195   !(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__)
225 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
226   !(defined(_MSC_VER) && (_MSC_VER < 1400)) &&  (__MSVCRT_VERSION__ < 0x800)
227 #  define wstat  _wstati64
228 #else
229 #  define wstat  _wstat
230 #endif
231 #endif
232
233 #if defined(_MT) && defined(MAGICKCORE_WINDOWS_SUPPORT)
234 #  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)
251 struct dirent
252 {
253   char
254     d_name[2048];
255
256   int
257     d_namlen;
258 };
259
260 typedef 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
275 typedef 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
291 #if !defined(__MINGW32__)
292 struct timezone
293 {
294   int
295     tz_minuteswest,
296     tz_dsttime;
297 };
298 #endif
299
300 typedef UINT
301   (CALLBACK *LPFNDLLFUNC1)(DWORD,UINT);
302
303 typedef UINT
304   (CALLBACK *LPFNDLLFUNC2)(NTMEMORYSTATUSEX *);
305
306 #endif
307
308 #if defined(MAGICKCORE_BZLIB_DELEGATE)
309 #  if defined(_WIN32)
310 #    define BZ_IMPORT 1
311 #  endif
312 #endif
313
314 extern MagickExport char
315   *NTGetLastError(void);
316
317 extern MagickExport const GhostInfo
318   *NTGhostscriptDLLVectors(void);
319
320 #if !defined(MAGICKCORE_LTDL_DELEGATE)
321 extern MagickExport const char
322   *NTGetLibraryError(void);
323 #endif
324
325 #if !defined(XS_VERSION)
326 extern MagickExport const char
327   *NTGetLibraryError(void);
328
329 extern MagickExport DIR
330   *NTOpenDirectory(const char *);
331
332 extern MagickExport double
333   NTElapsedTime(void),
334   NTUserTime(void);
335
336 extern MagickExport int
337   Exit(int),
338 #if !defined(__MINGW32__)
339   gettimeofday(struct timeval *,struct timezone *),
340 #endif
341   IsWindows95(),
342   NTCloseDirectory(DIR *),
343   NTCloseLibrary(void *),
344   NTControlHandler(void),
345   NTExitLibrary(void),
346   NTTruncateFile(int,off_t),
347   NTGhostscriptDLL(char *,int),
348   NTGhostscriptEXE(char *,int),
349   NTGhostscriptFonts(char *,int),
350   NTGhostscriptLoadDLL(void),
351   NTGhostscriptUnLoadDLL(void),
352   NTInitializeLibrary(void),
353   NTSetSearchPath(const char *),
354   NTSyncMemory(void *,size_t,int),
355   NTUnmapMemory(void *,size_t),
356   NTSystemCommand(const char *);
357
358 extern MagickExport ssize_t
359   NTSystemConfiguration(int),
360   NTTellDirectory(DIR *);
361
362 extern MagickExport MagickBooleanType
363   NTGatherRandomData(const size_t,unsigned char *),
364   NTGetExecutionPath(char *,const size_t),
365   NTGetModulePath(const char *,char *),
366   NTReportEvent(const char *,const MagickBooleanType),
367   NTReportException(const char *,const MagickBooleanType);
368
369 extern MagickExport struct dirent
370   *NTReadDirectory(DIR *);
371
372 extern MagickExport unsigned char
373   *NTRegistryKeyLookup(const char *),
374   *NTResourceToBlob(const char *);
375
376 extern MagickExport void
377   NTErrorHandler(const ExceptionType,const char *,const char *),
378   *NTGetLibrarySymbol(void *,const char *),
379   *NTMapMemory(char *,size_t,int,int,int,MagickOffsetType),
380   *NTOpenLibrary(const char *),
381   NTSeekDirectory(DIR *,ssize_t),
382   NTWarningHandler(const ExceptionType,const char *,const char *);
383
384 #endif /* !XS_VERSION */
385
386 #if defined(__cplusplus) || defined(c_plusplus)
387 }
388 #endif /* !C++ */
389
390 #endif /* !_MAGICKCORE_NT_BASE_H */