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