blob: 3c3c86551eb824610e5b4b1115df322604f8dd58 [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001/*
cristy1454be72011-12-19 01:52:48 +00002 Copyright 1999-2012 ImageMagick Studio LLC, a non-profit organization
cristy3ed852e2009-09-05 21:47:34 +00003 dedicated to making software imaging solutions freely available.
cristyd2fe6cb2009-11-19 19:00:50 +00004
cristy3ed852e2009-09-05 21:47:34 +00005 You may not use this file except in compliance with the License.
6 obtain a copy of the License at
cristyd2fe6cb2009-11-19 19:00:50 +00007
cristy3ed852e2009-09-05 21:47:34 +00008 http://www.imagemagick.org/script/license.php
cristyd2fe6cb2009-11-19 19:00:50 +00009
cristy3ed852e2009-09-05 21:47:34 +000010 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 private application programming interface declarations.
17*/
18#ifndef _MAGICKCORE_STUDIO_H
19#define _MAGICKCORE_STUDIO_H
20
21#if defined(__cplusplus) || defined(c_plusplus)
22extern "C" {
23#endif
24
cristy0157aea2010-04-24 21:12:18 +000025#if defined(WIN32) || defined(WIN64)
26# define MAGICKCORE_WINDOWS_SUPPORT
27#else
28# define MAGICKCORE_POSIX_SUPPORT
cristy3ed852e2009-09-05 21:47:34 +000029#endif
30
31#define MAGICKCORE_IMPLEMENTATION 1
32
33#if !defined(_MAGICKCORE_CONFIG_H)
34# define _MAGICKCORE_CONFIG_H
35# if !defined(vms) && !defined(macintosh)
cristy4c08aed2011-07-01 19:47:50 +000036# include "MagickCore/magick-config.h"
cristy3ed852e2009-09-05 21:47:34 +000037# else
38# include "magick-config.h"
39# endif
40#if defined(MAGICKCORE__FILE_OFFSET_BITS) && !defined(_FILE_OFFSET_BITS)
41# define _FILE_OFFSET_BITS MAGICKCORE__FILE_OFFSET_BITS
42#endif
43#if defined(_magickcore_const) && !defined(const)
cristyc47d1f82009-11-26 01:44:43 +000044# define const _magickcore_const
cristy3ed852e2009-09-05 21:47:34 +000045#endif
46#if defined(_magickcore_inline) && !defined(inline)
cristyc47d1f82009-11-26 01:44:43 +000047# define inline _magickcore_inline
cristy3ed852e2009-09-05 21:47:34 +000048#endif
cristyc47d1f82009-11-26 01:44:43 +000049#if defined(_magickcore_restrict) && !defined(restrict)
50# define restrict _magickcore_restrict
cristy3ed852e2009-09-05 21:47:34 +000051#endif
cristyba56db52011-05-20 02:08:11 +000052# if defined(__cplusplus) || defined(c_plusplus)
53# undef inline
54# endif
cristy3ed852e2009-09-05 21:47:34 +000055#endif
56
57#if defined(MAGICKCORE_NAMESPACE_PREFIX)
cristy4c08aed2011-07-01 19:47:50 +000058# include "MagickCore/methods.h"
cristy3ed852e2009-09-05 21:47:34 +000059#endif
60
61#if !defined(const)
62# define STDC
63#endif
64
cristy3ed852e2009-09-05 21:47:34 +000065#include <stdarg.h>
66#include <stdio.h>
cristya0b81c32010-01-22 02:54:33 +000067#if defined(MAGICKCORE_HAVE_SYS_STAT_H)
68# include <sys/stat.h>
69#endif
70#if defined(MAGICKCORE_STDC_HEADERS)
71# include <stdlib.h>
72# include <stddef.h>
73#else
74# if defined(MAGICKCORE_HAVE_STDLIB_H)
75# include <stdlib.h>
76# endif
77#endif
78#if defined(MAGICKCORE_HAVE_STRING_H)
79# if !defined(STDC_HEADERS) && defined(MAGICKCORE_HAVE_MEMORY_H)
80# include <memory.h>
81# endif
82# include <string.h>
83#endif
84#if defined(MAGICKCORE_HAVE_STRINGS_H)
85# include <strings.h>
86#endif
87#if defined(MAGICKCORE_HAVE_INTTYPES_H)
88# include <inttypes.h>
89#endif
90#if defined(MAGICKCORE_HAVE_STDINT_H)
91# include <stdint.h>
92#endif
93#if defined(MAGICKCORE_HAVE_UNISTD_H)
94# include <unistd.h>
95#endif
cristy0157aea2010-04-24 21:12:18 +000096#if defined(MAGICKCORE_WINDOWS_SUPPORT) && defined(_DEBUG)
cristy3ed852e2009-09-05 21:47:34 +000097#define _CRTDBG_MAP_ALLOC
98#endif
cristy0157aea2010-04-24 21:12:18 +000099#if defined(MAGICKCORE_WINDOWS_SUPPORT)
cristy3ed852e2009-09-05 21:47:34 +0000100# include <direct.h>
101# if !defined(MAGICKCORE_HAVE_STRERROR)
102# define HAVE_STRERROR
103# endif
104#endif
105
cristy3ed852e2009-09-05 21:47:34 +0000106#include <ctype.h>
107#include <locale.h>
108#include <errno.h>
109#include <fcntl.h>
110#include <math.h>
111#include <time.h>
112#include <limits.h>
113#include <signal.h>
114#include <assert.h>
115
cristy38d73d62011-05-19 01:55:37 +0000116#if defined(MAGICKCORE_HAVE_XLOCALE_H)
117# include <xlocale.h>
118#endif
cristy55bf91c2010-09-24 00:29:41 +0000119#if defined(MAGICKCORE_THREAD_SUPPORT)
cristy3ed852e2009-09-05 21:47:34 +0000120# include <pthread.h>
cristy0157aea2010-04-24 21:12:18 +0000121#elif defined(MAGICKCORE_WINDOWS_SUPPORT)
cristyfe092d82009-10-11 04:00:45 +0000122# define MAGICKCORE_HAVE_WINTHREADS 1
cristy3ed852e2009-09-05 21:47:34 +0000123#include <windows.h>
124#endif
125#if defined(MAGICKCORE_HAVE_SYS_SYSLIMITS_H)
126# include <sys/syslimits.h>
127#endif
128#if defined(MAGICKCORE_HAVE_ARM_LIMITS_H)
129# include <arm/limits.h>
130#endif
131
cristy1579d812010-01-22 15:45:14 +0000132#if defined(MAGICKCORE__OPENCL)
cristyfe2e68f2010-01-09 19:16:03 +0000133#if defined(MAGICKCORE_HAVE_CL_CL_H)
cristy07425aa2009-09-20 22:59:24 +0000134# include <CL/cl.h>
cristy07425aa2009-09-20 22:59:24 +0000135#endif
cristyfe2e68f2010-01-09 19:16:03 +0000136#if defined(MAGICKCORE_HAVE_OPENCL_CL_H)
cristy07425aa2009-09-20 22:59:24 +0000137# include <OpenCL/cl.h>
cristy99cc3002010-01-21 14:50:11 +0000138#endif
cristy68cc9c72010-01-22 14:40:18 +0000139# define MAGICKCORE_OPENCL_SUPPORT 1
cristy07425aa2009-09-20 22:59:24 +0000140#endif
141
cristybffe7d32012-01-20 01:46:17 +0000142#if defined(_OPENMP) && ((_OPENMP >= 200203) || defined(__OPENCC__))
cristy3ed852e2009-09-05 21:47:34 +0000143# include <omp.h>
cristyb28d6472009-10-17 20:13:35 +0000144# define MAGICKCORE_OPENMP_SUPPORT 1
cristy3ed852e2009-09-05 21:47:34 +0000145#endif
146
147#if defined(MAGICKCORE_HAVE_PREAD) && defined(MAGICKCORE_HAVE_DECL_PREAD) && !MAGICKCORE_HAVE_DECL_PREAD
148ssize_t pread(int,void *,size_t,off_t);
149#endif
150
151#if defined(MAGICKCORE_HAVE_PWRITE) && defined(MAGICKCORE_HAVE_DECL_PWRITE) && !MAGICKCORE_HAVE_DECL_PWRITE
152ssize_t pwrite(int,const void *,size_t,off_t);
153#endif
154
155#if defined(MAGICKCORE_HAVE_STRLCPY) && defined(MAGICKCORE_HAVE_DECL_STRLCPY) && !MAGICKCORE_HAVE_DECL_STRLCPY
156extern size_t strlcpy(char *,const char *,size_t);
157#endif
158
159#if defined(MAGICKCORE_HAVE_VSNPRINTF) && defined(MAGICKCORE_HAVE_DECL_VSNPRINTF) && !MAGICKCORE_HAVE_DECL_VSNPRINTF
160extern int vsnprintf(char *,size_t,const char *,va_list);
161#endif
162
cristy0157aea2010-04-24 21:12:18 +0000163#if defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(MAGICKCORE_POSIX_SUPPORT)
cristy3ed852e2009-09-05 21:47:34 +0000164# include <sys/types.h>
165# include <sys/stat.h>
166# if defined(MAGICKCORE_HAVE_FTIME)
167# include <sys/timeb.h>
168# endif
169# if defined(MAGICKCORE_POSIX_SUPPORT)
170# if defined(MAGICKCORE_HAVE_SYS_NDIR_H) || defined(MAGICKCORE_HAVE_SYS_DIR_H) || defined(MAGICKCORE_HAVE_NDIR_H)
171# define dirent direct
172# define NAMLEN(dirent) (dirent)->d_namlen
173# if defined(MAGICKCORE_HAVE_SYS_NDIR_H)
174# include <sys/ndir.h>
175# endif
176# if defined(MAGICKCORE_HAVE_SYS_DIR_H)
177# include <sys/dir.h>
178# endif
179# if defined(MAGICKCORE_HAVE_NDIR_H)
180# include <ndir.h>
181# endif
182# else
183# include <dirent.h>
184# define NAMLEN(dirent) strlen((dirent)->d_name)
185# endif
186# include <sys/wait.h>
187# include <pwd.h>
188# endif
189# if !defined(S_ISDIR)
190# define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
191# endif
192# if !defined(S_ISREG)
193# define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
194# endif
cristy4c08aed2011-07-01 19:47:50 +0000195# include "MagickCore/magick-type.h"
cristy0157aea2010-04-24 21:12:18 +0000196# if !defined(MAGICKCORE_WINDOWS_SUPPORT)
cristy3ed852e2009-09-05 21:47:34 +0000197# include <sys/time.h>
198# if defined(MAGICKCORE_HAVE_SYS_TIMES_H)
199# include <sys/times.h>
200# endif
201# if defined(MAGICKCORE_HAVE_SYS_RESOURCE_H)
202# include <sys/resource.h>
203# endif
204#endif
205#else
206# include <types.h>
207# include <stat.h>
208# if defined(macintosh)
209# if !defined(DISABLE_SIOUX)
210# include <SIOUX.h>
211# include <console.h>
212# endif
213# include <unix.h>
214# endif
cristy4c08aed2011-07-01 19:47:50 +0000215# include "MagickCore/magick-type.h"
cristy3ed852e2009-09-05 21:47:34 +0000216#endif
217
218#if defined(S_IRUSR) && defined(S_IWUSR)
219# define S_MODE (S_IRUSR | S_IWUSR)
cristy0157aea2010-04-24 21:12:18 +0000220#elif defined (MAGICKCORE_WINDOWS_SUPPORT)
cristy3ed852e2009-09-05 21:47:34 +0000221# define S_MODE (_S_IREAD | _S_IWRITE)
222#else
223# define S_MODE 0600
224#endif
225
cristy0157aea2010-04-24 21:12:18 +0000226#if defined(MAGICKCORE_WINDOWS_SUPPORT)
cristy4c08aed2011-07-01 19:47:50 +0000227# include "MagickCore/nt-base.h"
cristy3ed852e2009-09-05 21:47:34 +0000228#endif
229#if defined(macintosh)
cristy4c08aed2011-07-01 19:47:50 +0000230# include "MagickCore/mac.h"
cristy3ed852e2009-09-05 21:47:34 +0000231#endif
232#if defined(vms)
cristy4c08aed2011-07-01 19:47:50 +0000233# include "MagickCore/vms.h"
cristy3ed852e2009-09-05 21:47:34 +0000234#endif
235
cristy181a2ed2012-02-18 22:55:00 +0000236#include "MagickCore/MagickCore.h"
237
cristy3ed852e2009-09-05 21:47:34 +0000238#undef HAVE_CONFIG_H
239#undef gamma
240#undef index
241#undef pipe
242#undef y1
243
244/*
245 Review these platform specific definitions.
246*/
247#if defined(MAGICKCORE_POSIX_SUPPORT) && !defined(__OS2__)
248# define DirectorySeparator "/"
249# define DirectoryListSeparator ':'
250# define EditorOptions " -title \"Edit Image Comment\" -e vi"
251# define Exit exit
252# define IsBasenameSeparator(c) ((c) == '/' ? MagickTrue : MagickFalse)
253# define X11_PREFERENCES_PATH "~/."
254# define ProcessPendingEvents(text)
255# define ReadCommandlLine(argc,argv)
256# define SetNotifyHandlers
257#else
258# if defined(vms)
259# define X11_APPLICATION_PATH "decw$system_defaults:"
260# define DirectorySeparator ""
261# define DirectoryListSeparator ';'
262# define EditorOptions ""
263# define Exit exit
264# define IsBasenameSeparator(c) \
265 (((c) == ']') || ((c) == ':') || ((c) == '/') ? MagickTrue : MagickFalse)
266# define MAGICKCORE_LIBRARY_PATH "sys$login:"
267# define MAGICKCORE_CODER_PATH "sys$login:"
268# define MAGICKCORE_FILTER_PATH "sys$login:"
269# define MAGICKCORE_SHARE_PATH "sys$login:"
270# define X11_PREFERENCES_PATH "decw$user_defaults:"
271# define ProcessPendingEvents(text)
272# define ReadCommandlLine(argc,argv)
273# define SetNotifyHandlers
274# endif
275# if defined(__OS2__)
276# define DirectorySeparator "\\"
277# define DirectoryListSeparator ';'
278# define EditorOptions " -title \"Edit Image Comment\" -e vi"
279# define Exit exit
280# define IsBasenameSeparator(c) \
281 (((c) == '/') || ((c) == '\\') ? MagickTrue : MagickFalse)
282# define PreferencesDefaults "~\."
283# define ProcessPendingEvents(text)
284# define ReadCommandlLine(argc,argv)
285# define SetNotifyHandlers
286#endif
287# if defined(macintosh)
288# define X11_APPLICATION_PATH "/usr/lib/X11/app-defaults/"
289# define DirectorySeparator ":"
290# define DirectoryListSeparator ';'
291# define EditorOptions ""
292# define IsBasenameSeparator(c) ((c) == ':' ? MagickTrue : MagickFalse)
293# define MAGICKCORE_LIBRARY_PATH ""
294# define MAGICKCORE_CODER_PATH ""
295# define MAGICKCORE_FILTER_PATH ""
296# define MAGICKCORE_SHARE_PATH ""
297# define X11_PREFERENCES_PATH "~/."
298# if defined(DISABLE_SIOUX)
299# define ReadCommandlLine(argc,argv)
300# define SetNotifyHandlers \
301 SetFatalErrorHandler(MacFatalErrorHandler); \
302 SetErrorHandler(MACErrorHandler); \
303 SetWarningHandler(MACWarningHandler)
304# else
305# define ReadCommandlLine(argc,argv) argc=ccommand(argv); puts(MagickVersion);
306# define SetNotifyHandlers \
307 SetErrorHandler(MACErrorHandler); \
308 SetWarningHandler(MACWarningHandler)
309# endif
310# endif
cristy0157aea2010-04-24 21:12:18 +0000311# if defined(MAGICKCORE_WINDOWS_SUPPORT)
cristy3ed852e2009-09-05 21:47:34 +0000312# define DirectorySeparator "\\"
313# define DirectoryListSeparator ';'
314# define EditorOptions ""
315# define IsBasenameSeparator(c) \
316 (((c) == '/') || ((c) == '\\') ? MagickTrue : MagickFalse)
317# define ProcessPendingEvents(text)
318# if !defined(X11_PREFERENCES_PATH)
319# define X11_PREFERENCES_PATH "~\\."
320# endif
321# define ReadCommandlLine(argc,argv)
322# define SetNotifyHandlers \
323 SetErrorHandler(NTErrorHandler); \
324 SetWarningHandler(NTWarningHandler)
325# undef sleep
326# define sleep(seconds) Sleep(seconds*1000)
327# if !defined(MAGICKCORE_HAVE_TIFFCONF_H)
328# define HAVE_TIFFCONF_H
329# endif
330# endif
331
332#endif
333
334/*
335 Define system symbols if not already defined.
336*/
337#if !defined(STDIN_FILENO)
338#define STDIN_FILENO 0x00
339#endif
340
341#if !defined(O_BINARY)
342#define O_BINARY 0x00
343#endif
344
cristy104cea82009-10-25 02:26:51 +0000345#if !defined(PATH_MAX)
346#define PATH_MAX 4096
347#endif
348
cristy0157aea2010-04-24 21:12:18 +0000349#if defined(MAGICKCORE_LTDL_DELEGATE) || (defined(MAGICKCORE_WINDOWS_SUPPORT) && defined(_DLL) && !defined(_LIB))
cristy3ed852e2009-09-05 21:47:34 +0000350# define MAGICKCORE_MODULES_SUPPORT
351#endif
352
353#if defined(_MAGICKMOD_)
354# undef MAGICKCORE_BUILD_MODULES
355# define MAGICKCORE_BUILD_MODULES
356#endif
357
358/*
cristy3ed852e2009-09-05 21:47:34 +0000359 Magick defines.
360*/
361#define Swap(x,y) ((x)^=(y), (y)^=(x), (x)^=(y))
362
363#if defined(__cplusplus) || defined(c_plusplus)
364}
365#endif
366
367#endif