1 /*
2   Copyright 1999-2021 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.  You may
6   obtain a copy of the License at
7 
8     https://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 magick methods.
17 */
18 #ifndef MAGICKCORE_MAGICK_H
19 #define MAGICKCORE_MAGICK_H
20 
21 #if defined(__cplusplus) || defined(c_plusplus)
22 extern "C" {
23 #endif
24 
25 #include <stdarg.h>
26 #include "MagickCore/semaphore.h"
27 
28 #if defined(__cplusplus) || defined(c_plusplus)
29 # define magick_module  _module   /* reserved word in C++(20) */
30 #else
31 # define magick_module  module
32 #endif
33 
34 typedef enum
35 {
36   UndefinedFormatType,
37   ImplicitFormatType,
38   ExplicitFormatType
39 } MagickFormatType;
40 
41 typedef enum
42 {
43   CoderNoFlag = 0x0000,
44   CoderAdjoinFlag = 0x0001,
45   CoderBlobSupportFlag = 0x0002,
46   CoderDecoderThreadSupportFlag = 0x0004,
47   CoderEncoderThreadSupportFlag = 0x0008,
48   CoderEndianSupportFlag = 0x0010,
49   CoderRawSupportFlag = 0x0020,
50   CoderSeekableStreamFlag = 0x0040, /* deprecated */
51   CoderStealthFlag = 0x0080,
52   CoderUseExtensionFlag = 0x0100,
53   CoderDecoderSeekableStreamFlag = 0x0200,
54   CoderEncoderSeekableStreamFlag = 0x0400,
55 
56 } MagickInfoFlag;
57 
58 typedef Image
59   *DecodeImageHandler(const ImageInfo *,ExceptionInfo *);
60 
61 typedef MagickBooleanType
62   EncodeImageHandler(const ImageInfo *,Image *,ExceptionInfo *);
63 
64 typedef MagickBooleanType
65   IsImageFormatHandler(const unsigned char *,const size_t);
66 
67 typedef struct _MagickInfo
68 {
69   char
70     *name,
71     *description,
72     *version,
73     *mime_type,
74     *note,
75     *magick_module;
76 
77   DecodeImageHandler
78     *decoder;
79 
80   EncodeImageHandler
81     *encoder;
82 
83   ImageInfo
84     *image_info;
85 
86   IsImageFormatHandler
87     *magick;
88 
89   MagickFormatType
90     format_type;
91 
92   MagickStatusType
93     flags;
94 
95   SemaphoreInfo
96     *semaphore;
97 
98   size_t
99     signature;
100 
101   void
102     *client_data;
103 } MagickInfo;
104 
105 extern MagickExport char
106   **GetMagickList(const char *,size_t *,ExceptionInfo *);
107 
108 extern MagickExport const char
109   *GetMagickDescription(const MagickInfo *),
110   *GetMagickMimeType(const MagickInfo *),
111   *GetMagickModuleName(const MagickInfo *),
112   *GetMagickName(const MagickInfo *);
113 
114 extern MagickExport DecodeImageHandler
115   *GetImageDecoder(const MagickInfo *) magick_attribute((__pure__));
116 
117 extern MagickExport EncodeImageHandler
118   *GetImageEncoder(const MagickInfo *) magick_attribute((__pure__));
119 
120 extern MagickExport int
121   GetMagickPrecision(void),
122   SetMagickPrecision(const int);
123 
124 extern MagickExport MagickBooleanType
125   GetImageMagick(const unsigned char *,const size_t,char *),
126   GetMagickAdjoin(const MagickInfo *) magick_attribute((__pure__)),
127   GetMagickBlobSupport(const MagickInfo *) magick_attribute((__pure__)),
128   GetMagickDecoderSeekableStream(const MagickInfo *)
129     magick_attribute((__pure__)),
130   GetMagickDecoderThreadSupport(const MagickInfo *)
131     magick_attribute((__pure__)),
132   GetMagickEncoderSeekableStream(const MagickInfo *)
133      magick_attribute((__pure__)),
134   GetMagickEncoderThreadSupport(const MagickInfo *)
135     magick_attribute((__pure__)),
136   GetMagickEndianSupport(const MagickInfo *) magick_attribute((__pure__)),
137   GetMagickRawSupport(const MagickInfo *) magick_attribute((__pure__)),
138   GetMagickStealth(const MagickInfo *) magick_attribute((__pure__)),
139   GetMagickUseExtension(const MagickInfo *) magick_attribute((__pure__)),
140   IsMagickCoreInstantiated(void) magick_attribute((__pure__)),
141   RegisterMagickInfo(MagickInfo *),
142   UnregisterMagickInfo(const char *);
143 
144 extern const MagickExport MagickInfo
145   *GetMagickInfo(const char *,ExceptionInfo *),
146   **GetMagickInfoList(const char *,size_t *,ExceptionInfo *);
147 
148 extern MagickExport MagickInfo
149   *AcquireMagickInfo(const char *, const char *, const char *);
150 
151 extern MagickExport void
152   MagickCoreGenesis(const char *,const MagickBooleanType),
153   MagickCoreTerminus(void);
154 
155 #if defined(__cplusplus) || defined(c_plusplus)
156 }
157 #endif
158 
159 #endif
160