• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 %                                                                             %
4 %                                                                             %
5 %                                                                             %
6 %               V   V  EEEEE  RRRR   SSSSS  IIIII   OOO   N   N               %
7 %               V   V  E      R   R  SS       I    O   O  NN  N               %
8 %               V   V  EEE    RRRR    SSS     I    O   O  N N N               %
9 %                V V   E      R R       SS    I    O   O  N  NN               %
10 %                 V    EEEEE  R  R   SSSSS  IIIII   OOO   N   N               %
11 %                                                                             %
12 %                                                                             %
13 %                   MagickCore Version and Copyright Methods                  %
14 %                                                                             %
15 %                              Software Design                                %
16 %                                   Cristy                                    %
17 %                               September 2002                                %
18 %                                                                             %
19 %                                                                             %
20 %  Copyright 1999-2019 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 %    https://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 #include "MagickCore/studio.h"
40 #include "MagickCore/configure.h"
41 #include "MagickCore/exception.h"
42 #include "MagickCore/exception-private.h"
43 #include "MagickCore/linked-list.h"
44 #include "MagickCore/locale_.h"
45 #include "MagickCore/option.h"
46 #include "MagickCore/string_.h"
47 #include "MagickCore/utility.h"
48 #include "MagickCore/utility-private.h"
49 #include "MagickCore/version.h"
50 #include "MagickCore/version-private.h"
51 
52 /*
53   Define declarations.
54 */
55 #define MagickURLFilename  "index.html"
56 
57 /*
58 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
59 %                                                                             %
60 %                                                                             %
61 %                                                                             %
62 %   G e t M a g i c k C o p y r i g h t                                       %
63 %                                                                             %
64 %                                                                             %
65 %                                                                             %
66 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
67 %
68 %  GetMagickCopyright() returns the ImageMagick API copyright as a string.
69 %
70 %  The format of the GetMagickCopyright method is:
71 %
72 %      const char *GetMagickCopyright(void)
73 %
74 */
GetMagickCopyright(void)75 MagickExport const char *GetMagickCopyright(void)
76 {
77   return(MagickCopyright);
78 }
79 
80 /*
81 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
82 %                                                                             %
83 %                                                                             %
84 %                                                                             %
85 %   G e t M a g i c k D e l e g a t e s                                       %
86 %                                                                             %
87 %                                                                             %
88 %                                                                             %
89 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
90 %
91 %  GetMagickDelegates() returns the ImageMagick delegate libraries.
92 %
93 %  The format of the GetMagickDelegates method is:
94 %
95 %      const char *GetMagickDelegates(void)
96 %
97 %  No parameters are required.
98 %
99 */
GetMagickDelegates(void)100 MagickExport const char *GetMagickDelegates(void)
101 {
102   return ""
103 #if defined(MAGICKCORE_AUTOTRACE_DELEGATE)
104   "autotrace "
105 #endif
106 #if defined(MAGICKCORE_BZLIB_DELEGATE)
107   "bzlib "
108 #endif
109 #if defined(MAGICKCORE_CAIRO_DELEGATE)
110   "cairo "
111 #endif
112 #if defined(MAGICKCORE_DJVU_DELEGATE)
113   "djvu "
114 #endif
115 #if defined(MAGICKCORE_DPS_DELEGATE)
116   "dps "
117 #endif
118 #if defined(MAGICKCORE_EMF_DELEGATE)
119   "emf "
120 #endif
121 #if defined(MAGICKCORE_FFTW_DELEGATE)
122   "fftw "
123 #endif
124 #if defined(MAGICKCORE_FLIF_DELEGATE)
125   "flif "
126 #endif
127 #if defined(MAGICKCORE_FONTCONFIG_DELEGATE)
128   "fontconfig "
129 #endif
130 #if defined(MAGICKCORE_FPX_DELEGATE)
131   "fpx "
132 #endif
133 #if defined(MAGICKCORE_FREETYPE_DELEGATE)
134   "freetype "
135 #endif
136 #if defined(MAGICKCORE_GS_DELEGATE) || defined(MAGICKCORE_WINDOWS_SUPPORT)
137   "gslib "
138 #endif
139 #if defined(MAGICKCORE_GVC_DELEGATE)
140   "gvc "
141 #endif
142 #if defined(MAGICKCORE_HEIC_DELEGATE)
143   "heic "
144 #endif
145 #if defined(MAGICKCORE_JBIG_DELEGATE)
146   "jbig "
147 #endif
148 #if defined(MAGICKCORE_JPEG_DELEGATE) && defined(MAGICKCORE_PNG_DELEGATE)
149   "jng "
150 #endif
151 #if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
152   "jp2 "
153 #endif
154 #if defined(MAGICKCORE_JPEG_DELEGATE)
155   "jpeg "
156 #endif
157 #if defined(MAGICKCORE_LCMS_DELEGATE)
158   "lcms "
159 #endif
160 #if defined(MAGICKCORE_LQR_DELEGATE)
161   "lqr "
162 #endif
163 #if defined(MAGICKCORE_LTDL_DELEGATE)
164   "ltdl "
165 #endif
166 #if defined(MAGICKCORE_LZMA_DELEGATE)
167   "lzma "
168 #endif
169 #if defined(MAGICKCORE_OPENEXR_DELEGATE)
170   "openexr "
171 #endif
172 #if defined(MAGICKCORE_PANGOCAIRO_DELEGATE)
173   "pangocairo "
174 #endif
175 #if defined(MAGICKCORE_PNG_DELEGATE)
176   "png "
177 #endif
178 #if defined(MAGICKCORE_DPS_DELEGATE) || defined(MAGICKCORE_GS_DELEGATE) || \
179     defined(MAGICKCORE_WINDOWS_SUPPORT)
180   "ps "
181 #endif
182 #if defined(MAGICKCORE_RAW_R_DELEGATE)
183   "raw "
184 #endif
185 #if defined(MAGICKCORE_RSVG_DELEGATE)
186   "rsvg "
187 #endif
188 #if defined(MAGICKCORE_TIFF_DELEGATE)
189   "tiff "
190 #endif
191 #if defined(MAGICKCORE_WEBP_DELEGATE)
192   "webp "
193 #endif
194 #if defined(MAGICKCORE_WMF_DELEGATE) || defined (MAGICKCORE_WMFLITE_DELEGATE)
195   "wmf "
196 #endif
197 #if defined(MAGICKCORE_X11_DELEGATE)
198   "x "
199 #endif
200 #if defined(MAGICKCORE_XML_DELEGATE)
201   "xml "
202 #endif
203 #if defined(MAGICKCORE_ZLIB_DELEGATE)
204   "zlib"
205 #endif
206   ;
207 }
208 
209 /*
210 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
211 %                                                                             %
212 %                                                                             %
213 %                                                                             %
214 %   G e t M a g i c k F e a t u r e s                                         %
215 %                                                                             %
216 %                                                                             %
217 %                                                                             %
218 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
219 %
220 %  GetMagickFeatures() returns the ImageMagick features.
221 %
222 %  The format of the GetMagickFeatures method is:
223 %
224 %      const char *GetMagickFeatures(void)
225 %
226 %  No parameters are required.
227 %
228 */
GetMagickFeatures(void)229 MagickExport const char *GetMagickFeatures(void)
230 {
231   return ""
232 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && defined(_DEBUG)
233   "Debug "
234 #endif
235 #if defined(MAGICKCORE_CIPHER_SUPPORT)
236   "Cipher "
237 #endif
238 #if defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(MAGICKCORE_HAVE_SOCKET) && defined(MAGICKCORE_THREAD_SUPPORT)
239   "DPC "
240 #endif
241 #if defined(MAGICKCORE_HDRI_SUPPORT)
242   "HDRI "
243 #endif
244 #if defined(MAGICKCORE_BUILD_MODULES) || defined(_DLL)
245   "Modules "
246 #endif
247 #if defined(MAGICKCORE_OPENCL_SUPPORT)
248   "OpenCL "
249 #endif
250 #if defined(MAGICKCORE_OPENMP_SUPPORT)
251   "OpenMP "
252 #endif
253 #if defined(ZERO_CONFIGURATION_SUPPORT)
254   "Zero-configuration "
255 #endif
256   ;
257 }
258 
259 /*
260 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
261 %                                                                             %
262 %                                                                             %
263 %                                                                             %
264 %   G e t M a g i c k H o m e U R L                                           %
265 %                                                                             %
266 %                                                                             %
267 %                                                                             %
268 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
269 %
270 %  GetMagickHomeURL() returns the ImageMagick home URL.
271 %
272 %  The format of the GetMagickHomeURL method is:
273 %
274 %      char *GetMagickHomeURL(void)
275 %
276 */
GetMagickHomeURL(void)277 MagickExport char *GetMagickHomeURL(void)
278 {
279   char
280     path[MagickPathExtent];
281 
282   const char
283     *element;
284 
285   ExceptionInfo
286     *exception;
287 
288   LinkedListInfo
289     *paths;
290 
291   exception=AcquireExceptionInfo();
292   paths=GetConfigurePaths(MagickURLFilename,exception);
293   exception=DestroyExceptionInfo(exception);
294   if (paths == (LinkedListInfo *) NULL)
295     return(ConstantString(MagickHomeURL));
296   element=(const char *) GetNextValueInLinkedList(paths);
297   while (element != (const char *) NULL)
298   {
299     (void) FormatLocaleString(path,MagickPathExtent,"%s%s%s",element,
300       DirectorySeparator,MagickURLFilename);
301     if (IsPathAccessible(path) != MagickFalse)
302       {
303         paths=DestroyLinkedList(paths,RelinquishMagickMemory);
304         return(ConstantString(path));
305       }
306     element=(const char *) GetNextValueInLinkedList(paths);
307   }
308   paths=DestroyLinkedList(paths,RelinquishMagickMemory);
309   return(ConstantString(MagickHomeURL));
310 }
311 
312 /*
313 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
314 %                                                                             %
315 %                                                                             %
316 %                                                                             %
317 %   G e t M a g i c k L i c e n s e                                           %
318 %                                                                             %
319 %                                                                             %
320 %                                                                             %
321 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
322 %
323 %  GetMagickLicense() returns the ImageMagick API license as a string.
324 %
325 %  The format of the GetMagickLicense method is:
326 %
327 %      const char *GetMagickLicense(void)
328 %
329 */
GetMagickLicense(void)330 MagickExport const char *GetMagickLicense(void)
331 {
332   return(MagickAuthoritativeLicense);
333 }
334 
335 /*
336 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
337 %                                                                             %
338 %                                                                             %
339 %                                                                             %
340 %   G e t M a g i c k P a c k a g e N a m e                                   %
341 %                                                                             %
342 %                                                                             %
343 %                                                                             %
344 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
345 %
346 %  GetMagickPackageName() returns the ImageMagick package name.
347 %
348 %  The format of the GetMagickName method is:
349 %
350 %      const char *GetMagickName(void)
351 %
352 %  No parameters are required.
353 %
354 */
GetMagickPackageName(void)355 MagickExport const char *GetMagickPackageName(void)
356 {
357   return(MagickPackageName);
358 }
359 
360 /*
361 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
362 %                                                                             %
363 %                                                                             %
364 %                                                                             %
365 %   G e t M a g i c k Q u a n t u m D e p t h                                 %
366 %                                                                             %
367 %                                                                             %
368 %                                                                             %
369 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
370 %
371 %  GetMagickQuantumDepth() returns the ImageMagick quantum depth.
372 %
373 %  The format of the GetMagickQuantumDepth method is:
374 %
375 %      const char *GetMagickQuantumDepth(size_t *depth)
376 %
377 %  A description of each parameter follows:
378 %
379 %    o depth: the quantum depth is returned as a number.
380 %
381 */
GetMagickQuantumDepth(size_t * depth)382 MagickExport const char *GetMagickQuantumDepth(size_t *depth)
383 {
384   if (depth != (size_t *) NULL)
385     *depth=(size_t) MAGICKCORE_QUANTUM_DEPTH;
386   return(MagickQuantumDepth);
387 }
388 
389 /*
390 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
391 %                                                                             %
392 %                                                                             %
393 %                                                                             %
394 %   G e t M a g i c k Q u a n t u m R a n g e                                 %
395 %                                                                             %
396 %                                                                             %
397 %                                                                             %
398 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
399 %
400 %  GetMagickQuantumRange() returns the ImageMagick quantum range.
401 %
402 %  The format of the GetMagickQuantumRange method is:
403 %
404 %      const char *GetMagickQuantumRange(size_t *range)
405 %
406 %  A description of each parameter follows:
407 %
408 %    o range: the quantum range is returned as a number.
409 %
410 */
GetMagickQuantumRange(size_t * range)411 MagickExport const char *GetMagickQuantumRange(size_t *range)
412 {
413   if (range != (size_t *) NULL)
414     *range=(size_t) QuantumRange;
415   return(MagickQuantumRange);
416 }
417 
418 /*
419 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
420 %                                                                             %
421 %                                                                             %
422 %                                                                             %
423 %   G e t M a g i c k R e l e a s e D a t e                                   %
424 %                                                                             %
425 %                                                                             %
426 %                                                                             %
427 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
428 %
429 %  GetMagickReleaseDate() returns the ImageMagick release date.
430 %
431 %  The format of the GetMagickReleaseDate method is:
432 %
433 %      const char *GetMagickReleaseDate(void)
434 %
435 %  No parameters are required.
436 %
437 */
GetMagickReleaseDate(void)438 MagickExport const char *GetMagickReleaseDate(void)
439 {
440   return(MagickReleaseDate);
441 }
442 
443 /*
444 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
445 %                                                                             %
446 %                                                                             %
447 %                                                                             %
448 %   G e t M a g i c k S i g n a t u r e                                       %
449 %                                                                             %
450 %                                                                             %
451 %                                                                             %
452 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
453 %
454 %  GetMagickSignature() returns a signature that uniquely encodes the
455 %  MagickCore libary version, quantum depth, HDRI status, OS word size, and
456 %  endianness.
457 %
458 %  The format of the GetMagickSignature method is:
459 %
460 %      unsigned int GetMagickSignature(const StringInfo *nonce)
461 %
462 %  A description of each parameter follows:
463 %
464 %    o nonce: arbitrary data.
465 %
466 */
467 
CRC32(const unsigned char * message,const size_t length)468 static unsigned int CRC32(const unsigned char *message,const size_t length)
469 {
470   register ssize_t
471     i;
472 
473   static MagickBooleanType
474     crc_initial = MagickFalse;
475 
476   static unsigned int
477     crc_xor[256];
478 
479   unsigned int
480     crc;
481 
482   /*
483     Generate a 32-bit cyclic redundancy check for the message.
484   */
485   if (crc_initial == MagickFalse)
486     {
487       register unsigned int
488         j;
489 
490       unsigned int
491         alpha;
492 
493       for (j=0; j < 256; j++)
494       {
495         register ssize_t
496           k;
497 
498         alpha=j;
499         for (k=0; k < 8; k++)
500           alpha=(alpha & 0x01) ? (0xEDB88320 ^ (alpha >> 1)) : (alpha >> 1);
501         crc_xor[j]=alpha;
502       }
503       crc_initial=MagickTrue;
504     }
505   crc=0xFFFFFFFF;
506   for (i=0; i < (ssize_t) length; i++)
507     crc=crc_xor[(crc ^ message[i]) & 0xff] ^ (crc >> 8);
508   return(crc ^ 0xFFFFFFFF);
509 }
510 
GetMagickSignature(const StringInfo * nonce)511 MagickExport unsigned int GetMagickSignature(const StringInfo *nonce)
512 {
513   register unsigned char
514     *p;
515 
516   StringInfo
517     *version;
518 
519   unsigned int
520     signature;
521 
522   version=AcquireStringInfo(MagickPathExtent);
523   p=GetStringInfoDatum(version);
524   signature=MAGICKCORE_QUANTUM_DEPTH;
525   (void) memcpy(p,&signature,sizeof(signature));
526   p+=sizeof(signature);
527   signature=MAGICKCORE_HDRI_ENABLE;
528   (void) memcpy(p,&signature,sizeof(signature));
529   p+=sizeof(signature);
530   signature=MagickLibInterface;
531   (void) memcpy(p,&signature,sizeof(signature));
532   p+=sizeof(signature);
533   signature=1;  /* endianess */
534   (void) memcpy(p,&signature,sizeof(signature));
535   p+=sizeof(signature);
536   SetStringInfoLength(version,p-GetStringInfoDatum(version));
537   if (nonce != (const StringInfo *) NULL)
538     ConcatenateStringInfo(version,nonce);
539   signature=CRC32(GetStringInfoDatum(version),GetStringInfoLength(version));
540   version=DestroyStringInfo(version);
541   return(signature);
542 }
543 
544 /*
545 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
546 %                                                                             %
547 %                                                                             %
548 %                                                                             %
549 %   G e t M a g i c k V e r s i o n                                           %
550 %                                                                             %
551 %                                                                             %
552 %                                                                             %
553 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
554 %
555 %  GetMagickVersion() returns the ImageMagick API version as a string and
556 %  as a number.
557 %
558 %  The format of the GetMagickVersion method is:
559 %
560 %      const char *GetMagickVersion(size_t *version)
561 %
562 %  A description of each parameter follows:
563 %
564 %    o version: the ImageMagick version is returned as a number.
565 %
566 */
GetMagickVersion(size_t * version)567 MagickExport const char *GetMagickVersion(size_t *version)
568 {
569   if (version != (size_t *) NULL)
570     *version=MagickLibVersion;
571   return(MagickVersion);
572 }
573 
574 /*
575 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
576 %                                                                             %
577 %                                                                             %
578 %                                                                             %
579 %   L i s t M a g i c k V e r s i o n                                         %
580 %                                                                             %
581 %                                                                             %
582 %                                                                             %
583 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
584 %
585 %  ListMagickVersion() identifies the ImageMagick version by printing its
586 %  attributes to the file.  Attributes include the copyright, features, and
587 %  delegates.
588 %
589 %  The format of the ListMagickVersion method is:
590 %
591 %      void ListMagickVersion(FILE *file)
592 %
593 %  A description of each parameter follows:
594 %
595 %    o file: the file, typically stdout.
596 %
597 */
ListMagickVersion(FILE * file)598 MagickExport void ListMagickVersion(FILE *file)
599 {
600   (void) FormatLocaleFile(file,"Version: %s\n",
601     GetMagickVersion((size_t *) NULL));;
602   (void) FormatLocaleFile(file,"Copyright: %s\n",GetMagickCopyright());
603   (void) FormatLocaleFile(file,"License: %s\n",GetMagickLicense());
604 #if defined(MAGICKCORE_WINDOWS_SUPPORT) && defined(_MSC_FULL_VER)
605   (void) FormatLocaleFile(file,"Visual C++: %d\n",_MSC_FULL_VER);
606 #endif
607   (void) FormatLocaleFile(file,"Features: %s\n",GetMagickFeatures());
608   (void) FormatLocaleFile(file,"Delegates (built-in): %s\n",
609     GetMagickDelegates());
610   if (IsEventLogging() != MagickFalse)
611     {
612       (void) FormatLocaleFile(file,"Wizard attributes: ");
613       (void) FormatLocaleFile(file,"QuantumRange=%g; ",(double) QuantumRange);
614       (void) FormatLocaleFile(file,"QuantumScale=%.*g; ",GetMagickPrecision(),
615         (double) QuantumScale);
616       (void) FormatLocaleFile(file,"MagickEpsilon=%.*g; ",GetMagickPrecision(),
617         (double) MagickEpsilon);
618       (void) FormatLocaleFile(file,"MaxMap=%g; ",(double) MaxMap);
619       (void) FormatLocaleFile(file,"MagickPathExtent=%g; ",
620         (double) MagickPathExtent);
621       (void) FormatLocaleFile(file,"sizeof(Quantum)=%g; ",(double)
622         sizeof(Quantum));
623       (void) FormatLocaleFile(file,"sizeof(MagickSizeType)=%g; ",(double)
624         sizeof(MagickSizeType));
625       (void) FormatLocaleFile(file,"sizeof(MagickOffsetType)=%g",(double)
626         sizeof(MagickOffsetType));
627     }
628 }
629