1/*
2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3%                                                                             %
4%                                                                             %
5%                                                                             %
6%                  SSSSS  TTTTT   AAA   TTTTT  IIIII   CCCC                   %
7%                  SS       T    A   A    T      I    C                       %
8%                   SSS     T    AAAAA    T      I    C                       %
9%                     SS    T    A   A    T      I    C                       %
10%                  SSSSS    T    A   A    T    IIIII   CCCC                   %
11%                                                                             %
12%                                                                             %
13%                          MagickCore Static Methods                          %
14%                                                                             %
15%                              Software Design                                %
16%                                   Cristy                                    %
17%                                 March 2000                                  %
18%                                                                             %
19%                                                                             %
20%  Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization      %
21%  dedicated to making software imaging solutions freely available.           %
22%                                                                             %
23%  You may not use this file except in compliance with the License.  You may  %
24%  obtain a copy of the License at                                            %
25%                                                                             %
26%    http://www.imagemagick.org/script/license.php                            %
27%                                                                             %
28%  Unless required by applicable law or agreed to in writing, software        %
29%  distributed under the License is distributed on an "AS IS" BASIS,          %
30%  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
31%  See the License for the specific language governing permissions and        %
32%  limitations under the License.                                             %
33%                                                                             %
34%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35%
36%
37%
38*/
39
40/*
41  Include declarations.
42*/
43#include "MagickCore/studio.h"
44#include "MagickCore/exception-private.h"
45#include "MagickCore/image.h"
46#include "MagickCore/module.h"
47#include "MagickCore/policy.h"
48#include "MagickCore/static.h"
49#include "MagickCore/string_.h"
50
51/*
52%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
53%                                                                             %
54%                                                                             %
55%                                                                             %
56%   I n v o k e S t a t i c I m a g e F i l t e r                             %
57%                                                                             %
58%                                                                             %
59%                                                                             %
60%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
61%
62%  InvokeStaticImageFilter() invokes a static image filter.
63%
64%  The format of the InvokeStaticImageFilter method is:
65%
66%      MagickBooleanType InvokeStaticImageFilter(const char *tag,Image **image,
67%        const int argc,const char **argv)
68%
69%  A description of each parameter follows:
70%
71%    o tag: the module tag.
72%
73%    o image: the image.
74%
75%    o argc: the number of elements in the argument vector.
76%
77%    o argv: A text array containing the command line arguments.
78%
79%    o argv: A text array containing the command line arguments.
80%
81%    o exception: return any errors or warnings in this structure.
82%
83*/
84#if defined(MAGICKCORE_MODULES_SUPPORT)
85MagickExport MagickBooleanType InvokeStaticImageFilter(const char *tag,
86  Image **image,const int argc,const char **argv,ExceptionInfo *exception)
87{
88  PolicyRights
89    rights;
90
91  assert(image != (Image **) NULL);
92  assert((*image)->signature == MagickCoreSignature);
93  if ((*image)->debug != MagickFalse)
94    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",(*image)->filename);
95  rights=ReadPolicyRights;
96  if (IsRightsAuthorized(FilterPolicyDomain,rights,tag) == MagickFalse)
97    {
98      errno=EPERM;
99      (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
100        "NotAuthorized","`%s'",tag);
101      return(MagickFalse);
102    }
103#if defined(MAGICKCORE_BUILD_MODULES)
104  (void) tag;
105  (void) argc;
106  (void) argv;
107  (void) exception;
108#else
109  {
110    extern size_t
111      analyzeImage(Image **,const int,char **,ExceptionInfo *);
112
113    ImageFilterHandler
114      *image_filter;
115
116    image_filter=(ImageFilterHandler *) NULL;
117    if (LocaleCompare("analyze",tag) == 0)
118      image_filter=(ImageFilterHandler *) analyzeImage;
119    if (image_filter == (ImageFilterHandler *) NULL)
120      (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
121        "UnableToLoadModule","`%s'",tag);
122    else
123      {
124        size_t
125          signature;
126
127        if ((*image)->debug != MagickFalse)
128          (void) LogMagickEvent(CoderEvent,GetMagickModule(),
129            "Invoking \"%s\" static image filter",tag);
130        signature=image_filter(image,argc,argv,exception);
131        if ((*image)->debug != MagickFalse)
132          (void) LogMagickEvent(CoderEvent,GetMagickModule(),"\"%s\" completes",
133            tag);
134        if (signature != MagickImageFilterSignature)
135          {
136            (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
137              "ImageFilterSignatureMismatch","'%s': %8lx != %8lx",tag,
138              (unsigned long) signature,(unsigned long)
139              MagickImageFilterSignature);
140            return(MagickFalse);
141          }
142      }
143  }
144#endif
145  return(MagickTrue);
146}
147#endif
148
149/*
150%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
151%                                                                             %
152%                                                                             %
153%                                                                             %
154%   R e g i s t e r S t a t i c M o d u l e s                                 %
155%                                                                             %
156%                                                                             %
157%                                                                             %
158%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
159%
160%  (void) RegisterStaticModules() statically registers all the available module
161%  handlers.
162%
163%  The format of the RegisterStaticModules method is:
164%
165%      (void) RegisterStaticModules(void)
166%
167*/
168MagickExport void RegisterStaticModules(void)
169{
170#if !defined(MAGICKCORE_BUILD_MODULES)
171  (void) RegisterAAIImage();
172  (void) RegisterARTImage();
173  (void) RegisterAVSImage();
174  (void) RegisterBGRImage();
175  (void) RegisterBMPImage();
176  (void) RegisterBRAILLEImage();
177  (void) RegisterCALSImage();
178  (void) RegisterCAPTIONImage();
179  (void) RegisterCINImage();
180  (void) RegisterCIPImage();
181  (void) RegisterCLIPImage();
182#if defined(MAGICKCORE_WINGDI32_DELEGATE)
183  (void) RegisterCLIPBOARDImage();
184#endif
185  (void) RegisterCMYKImage();
186  (void) RegisterCUTImage();
187  (void) RegisterDCMImage();
188  (void) RegisterDDSImage();
189  (void) RegisterDEBUGImage();
190  (void) RegisterDIBImage();
191#if defined(MAGICKCORE_DJVU_DELEGATE)
192  (void) RegisterDJVUImage();
193#endif
194  (void) RegisterDNGImage();
195#if defined(MAGICKCORE_DPS_DELEGATE)
196  (void) RegisterDPSImage();
197#endif
198  (void) RegisterDPXImage();
199#if defined(MAGICKCORE_WINGDI32_DELEGATE)
200  (void) RegisterEMFImage();
201#endif
202#if defined(MAGICKCORE_TIFF_DELEGATE)
203  (void) RegisterEPTImage();
204#endif
205#if defined(MAGICKCORE_OPENEXR_DELEGATE)
206  (void) RegisterEXRImage();
207#endif
208  (void) RegisterFAXImage();
209  (void) RegisterFDImage();
210  (void) RegisterFITSImage();
211#if defined(MAGICKCORE_FLIF_DELEGATE)
212  (void) RegisterFLIFImage();
213#endif
214#if defined(MAGICKCORE_FPX_DELEGATE)
215  (void) RegisterFPXImage();
216#endif
217  (void) RegisterGIFImage();
218  (void) RegisterGRAYImage();
219  (void) RegisterGRADIENTImage();
220  (void) RegisterHALDImage();
221  (void) RegisterHDRImage();
222  (void) RegisterHISTOGRAMImage();
223  (void) RegisterHRZImage();
224  (void) RegisterHTMLImage();
225  (void) RegisterICONImage();
226  (void) RegisterINFOImage();
227  (void) RegisterINLINEImage();
228  (void) RegisterIPLImage();
229#if defined(MAGICKCORE_JBIG_DELEGATE)
230  (void) RegisterJBIGImage();
231#endif
232  (void) RegisterJNXImage();
233#if defined(MAGICKCORE_JPEG_DELEGATE)
234  (void) RegisterJPEGImage();
235#endif
236#if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
237  (void) RegisterJP2Image();
238#endif
239  (void) RegisterJSONImage();
240  (void) RegisterLABELImage();
241  (void) RegisterMACImage();
242  (void) RegisterMAGICKImage();
243  (void) RegisterMAPImage();
244  (void) RegisterMATImage();
245  (void) RegisterMATTEImage();
246  (void) RegisterMASKImage();
247  (void) RegisterMETAImage();
248  (void) RegisterMIFFImage();
249  (void) RegisterMONOImage();
250  (void) RegisterMPCImage();
251  (void) RegisterMPEGImage();
252  (void) RegisterMPRImage();
253  (void) RegisterMSLImage();
254  (void) RegisterMTVImage();
255  (void) RegisterMVGImage();
256  (void) RegisterNULLImage();
257  (void) RegisterOTBImage();
258  (void) RegisterPALMImage();
259  (void) RegisterPANGOImage();
260  (void) RegisterPATTERNImage();
261  (void) RegisterPCDImage();
262  (void) RegisterPCLImage();
263  (void) RegisterPCXImage();
264  (void) RegisterPDBImage();
265  (void) RegisterPDFImage();
266  (void) RegisterPESImage();
267  (void) RegisterPICTImage();
268  (void) RegisterPIXImage();
269  (void) RegisterPLASMAImage();
270#if defined(MAGICKCORE_PNG_DELEGATE)
271  (void) RegisterPNGImage();
272#endif
273  (void) RegisterPNMImage();
274  (void) RegisterPSImage();
275  (void) RegisterPS2Image();
276  (void) RegisterPS3Image();
277  (void) RegisterPSDImage();
278  (void) RegisterPWPImage();
279  (void) RegisterRAWImage();
280  (void) RegisterRGBImage();
281  (void) RegisterRGFImage();
282  (void) RegisterRLAImage();
283  (void) RegisterRLEImage();
284  (void) RegisterSCRImage();
285  (void) RegisterSCREENSHOTImage();
286  (void) RegisterSCTImage();
287  (void) RegisterSFWImage();
288  (void) RegisterSGIImage();
289  (void) RegisterSIXELImage();
290  (void) RegisterSTEGANOImage();
291  (void) RegisterSUNImage();
292  (void) RegisterSVGImage();
293  (void) RegisterTGAImage();
294  (void) RegisterTHUMBNAILImage();
295#if defined(MAGICKCORE_TIFF_DELEGATE)
296  (void) RegisterTIFFImage();
297#endif
298  (void) RegisterTILEImage();
299  (void) RegisterTIMImage();
300  (void) RegisterTTFImage();
301  (void) RegisterTXTImage();
302  (void) RegisterUILImage();
303  (void) RegisterURLImage();
304  (void) RegisterUYVYImage();
305  (void) RegisterVICARImage();
306  (void) RegisterVIDImage();
307  (void) RegisterVIFFImage();
308  (void) RegisterVIPSImage();
309  (void) RegisterWBMPImage();
310#if defined(MAGICKCORE_WEBP_DELEGATE)
311  (void) RegisterWEBPImage();
312#endif
313#if defined(MAGICKCORE_WMF_DELEGATE) || defined(MAGICKCORE_WMFLITE_DELEGATE)
314  (void) RegisterWMFImage();
315#endif
316  (void) RegisterWPGImage();
317#if defined(MAGICKCORE_X11_DELEGATE)
318  (void) RegisterXImage();
319#endif
320  (void) RegisterXBMImage();
321  (void) RegisterXCImage();
322  (void) RegisterXCFImage();
323  (void) RegisterXPMImage();
324  (void) RegisterXPSImage();
325#if defined(MAGICKCORE_WINDOWS_SUPPORT)
326  (void) RegisterXTRNImage();
327#endif
328#if defined(MAGICKCORE_X11_DELEGATE)
329  (void) RegisterXWDImage();
330#endif
331  (void) RegisterYCBCRImage();
332  (void) RegisterYUVImage();
333#endif
334}
335
336/*
337%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
338%                                                                             %
339%                                                                             %
340%                                                                             %
341%   U n r e g i s t e r S t a t i c M o d u l e s                             %
342%                                                                             %
343%                                                                             %
344%                                                                             %
345%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
346%
347%  UnregisterStaticModules() statically unregisters all the available module
348%  handlers.
349%
350%  The format of the UnregisterStaticModules method is:
351%
352%      UnregisterStaticModules(void)
353%
354*/
355MagickExport void UnregisterStaticModules(void)
356{
357#if !defined(MAGICKCORE_BUILD_MODULES)
358  UnregisterAAIImage();
359  UnregisterARTImage();
360  UnregisterAVSImage();
361  UnregisterBGRImage();
362  UnregisterBMPImage();
363  UnregisterBRAILLEImage();
364  UnregisterCALSImage();
365  UnregisterCAPTIONImage();
366  UnregisterCINImage();
367  UnregisterCIPImage();
368  UnregisterCLIPImage();
369#if defined(MAGICKCORE_WINGDI32_DELEGATE)
370  UnregisterCLIPBOARDImage();
371#endif
372  UnregisterCMYKImage();
373  UnregisterCUTImage();
374  UnregisterDCMImage();
375  UnregisterDDSImage();
376  UnregisterDEBUGImage();
377  UnregisterDIBImage();
378#if defined(MAGICKCORE_DJVU_DELEGATE)
379  UnregisterDJVUImage();
380#endif
381  UnregisterDNGImage();
382#if defined(MAGICKCORE_DPS_DELEGATE)
383  UnregisterDPSImage();
384#endif
385  UnregisterDPXImage();
386#if defined(MAGICKCORE_WINGDI32_DELEGATE)
387  UnregisterEMFImage();
388#endif
389#if defined(MAGICKCORE_TIFF_DELEGATE)
390  UnregisterEPTImage();
391#endif
392#if defined(MAGICKCORE_OPENEXR_DELEGATE)
393  UnregisterEXRImage();
394#endif
395  UnregisterFAXImage();
396  UnregisterFDImage();
397  UnregisterFITSImage();
398#if defined(MAGICKCORE_FLIF_DELEGATE)
399  UnregisterFLIFImage();
400#endif
401#if defined(MAGICKCORE_FPX_DELEGATE)
402  UnregisterFPXImage();
403#endif
404  UnregisterGIFImage();
405  UnregisterGRAYImage();
406  UnregisterGRADIENTImage();
407  UnregisterHALDImage();
408  UnregisterHDRImage();
409  UnregisterHISTOGRAMImage();
410  UnregisterHRZImage();
411  UnregisterHTMLImage();
412  UnregisterICONImage();
413  UnregisterINFOImage();
414  UnregisterINLINEImage();
415  UnregisterIPLImage();
416#if defined(MAGICKCORE_JBIG_DELEGATE)
417  UnregisterJBIGImage();
418#endif
419  UnregisterJNXImage();
420#if defined(MAGICKCORE_JPEG_DELEGATE)
421  UnregisterJPEGImage();
422#endif
423#if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
424  UnregisterJP2Image();
425#endif
426  UnregisterJSONImage();
427  UnregisterLABELImage();
428  UnregisterMACImage();
429  UnregisterMAGICKImage();
430  UnregisterMAPImage();
431  UnregisterMASKImage();
432  UnregisterMATImage();
433  UnregisterMATTEImage();
434  UnregisterMETAImage();
435  UnregisterMIFFImage();
436  UnregisterMONOImage();
437  UnregisterMPCImage();
438  UnregisterMPEGImage();
439  UnregisterMPRImage();
440  UnregisterMSLImage();
441  UnregisterMTVImage();
442  UnregisterMVGImage();
443  UnregisterNULLImage();
444  UnregisterOTBImage();
445  UnregisterPALMImage();
446  UnregisterPANGOImage();
447  UnregisterPATTERNImage();
448  UnregisterPCDImage();
449  UnregisterPCLImage();
450  UnregisterPCXImage();
451  UnregisterPDBImage();
452  UnregisterPDFImage();
453  UnregisterPESImage();
454  UnregisterPICTImage();
455  UnregisterPIXImage();
456  UnregisterPLASMAImage();
457#if defined(MAGICKCORE_PNG_DELEGATE)
458  UnregisterPNGImage();
459#endif
460  UnregisterPNMImage();
461  UnregisterPSImage();
462  UnregisterPS2Image();
463  UnregisterPS3Image();
464  UnregisterPSDImage();
465  UnregisterPWPImage();
466  UnregisterRAWImage();
467  UnregisterRGBImage();
468  UnregisterRGFImage();
469  UnregisterRLAImage();
470  UnregisterRLEImage();
471  UnregisterSCRImage();
472  UnregisterSCREENSHOTImage();
473  UnregisterSCTImage();
474  UnregisterSFWImage();
475  UnregisterSGIImage();
476  UnregisterSIXELImage();
477  UnregisterSTEGANOImage();
478  UnregisterSUNImage();
479  UnregisterSVGImage();
480  UnregisterTGAImage();
481  UnregisterTHUMBNAILImage();
482#if defined(MAGICKCORE_TIFF_DELEGATE)
483  UnregisterTIFFImage();
484#endif
485  UnregisterTILEImage();
486  UnregisterTIMImage();
487  UnregisterTTFImage();
488  UnregisterTXTImage();
489  UnregisterUILImage();
490  UnregisterURLImage();
491  UnregisterUYVYImage();
492  UnregisterVICARImage();
493  UnregisterVIDImage();
494  UnregisterVIFFImage();
495  UnregisterVIPSImage();
496  UnregisterWBMPImage();
497#if defined(MAGICKCORE_WEBP_DELEGATE)
498  UnregisterWEBPImage();
499#endif
500#if defined(MAGICKCORE_WMF_DELEGATE) || defined(MAGICKCORE_WMFLITE_DELEGATE)
501  UnregisterWMFImage();
502#endif
503  UnregisterWPGImage();
504#if defined(MAGICKCORE_X11_DELEGATE)
505  UnregisterXImage();
506#endif
507  UnregisterXBMImage();
508  UnregisterXCImage();
509  UnregisterXCFImage();
510  UnregisterXPMImage();
511  UnregisterXPSImage();
512#if defined(MAGICKCORE_WINDOWS_SUPPORT)
513  UnregisterXTRNImage();
514#endif
515#if defined(MAGICKCORE_X11_DELEGATE)
516  UnregisterXWDImage();
517#endif
518  UnregisterYCBCRImage();
519  UnregisterYUVImage();
520#endif
521}
522