1805a2d48e7e2ed7d699871183ed706699119281canthony/*
2805a2d48e7e2ed7d699871183ed706699119281canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
4805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
5805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
68b10b467b5c281df759ba33f9a4a9228509adc4danthony%          OOO   PPPP   EEEE  RRRR    AA   TTTTT  III   OOO   N   N           %
78b10b467b5c281df759ba33f9a4a9228509adc4danthony%         O   O  P   P  E     R   R  A  A    T     I   O   O  NN  N           %
88b10b467b5c281df759ba33f9a4a9228509adc4danthony%         O   O  PPPP   EEE   RRRR   AAAA    T     I   O   O  N N N           %
98b10b467b5c281df759ba33f9a4a9228509adc4danthony%         O   O  P      E     R R    A  A    T     I   O   O  N  NN           %
108b10b467b5c281df759ba33f9a4a9228509adc4danthony%          OOO   P      EEEE  R  RR  A  A    T    III   OOO   N   N           %
11805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
12805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
138b10b467b5c281df759ba33f9a4a9228509adc4danthony%                         CLI Magick Option Methods                           %
14805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
158b10b467b5c281df759ba33f9a4a9228509adc4danthony%                              Dragon Computing                               %
169e58efd1ec91478e573f00be873ed1e140d70914cristy%                              Anthony Thyssen                                %
170a0ca4f50dc7ea975793a2e041e3cd64c3a5eea2cristy%                               September 2011                                %
18805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
19805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
207ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy%  Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization      %
21805a2d48e7e2ed7d699871183ed706699119281canthony%  dedicated to making software imaging solutions freely available.           %
22805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
23805a2d48e7e2ed7d699871183ed706699119281canthony%  You may not use this file except in compliance with the License.  You may  %
24805a2d48e7e2ed7d699871183ed706699119281canthony%  obtain a copy of the License at                                            %
25805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
26805a2d48e7e2ed7d699871183ed706699119281canthony%    http://www.imagemagick.org/script/license.php                            %
27805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
28805a2d48e7e2ed7d699871183ed706699119281canthony%  Unless required by applicable law or agreed to in writing, software        %
29805a2d48e7e2ed7d699871183ed706699119281canthony%  distributed under the License is distributed on an "AS IS" BASIS,          %
30805a2d48e7e2ed7d699871183ed706699119281canthony%  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
31805a2d48e7e2ed7d699871183ed706699119281canthony%  See the License for the specific language governing permissions and        %
32805a2d48e7e2ed7d699871183ed706699119281canthony%  limitations under the License.                                             %
33805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
34805a2d48e7e2ed7d699871183ed706699119281canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35805a2d48e7e2ed7d699871183ed706699119281canthony%
36805a2d48e7e2ed7d699871183ed706699119281canthony% Apply the given options (settings, and simple, or sequence operations) to
378b10b467b5c281df759ba33f9a4a9228509adc4danthony% the given image(s) according to the current "image_info", "draw_info", and
388b10b467b5c281df759ba33f9a4a9228509adc4danthony% "quantize_info" settings, stored in a special CLI Image Wand.
39805a2d48e7e2ed7d699871183ed706699119281canthony%
40805a2d48e7e2ed7d699871183ed706699119281canthony% The final goal is to allow the execution in a strict one option at a time
41805a2d48e7e2ed7d699871183ed706699119281canthony% manner that is needed for 'pipelining and file scripting' of options in
42805a2d48e7e2ed7d699871183ed706699119281canthony% IMv7.
43805a2d48e7e2ed7d699871183ed706699119281canthony%
448b10b467b5c281df759ba33f9a4a9228509adc4danthony% Anthony Thyssen, September 2011
45805a2d48e7e2ed7d699871183ed706699119281canthony*/
46805a2d48e7e2ed7d699871183ed706699119281canthony
47805a2d48e7e2ed7d699871183ed706699119281canthony/*
48805a2d48e7e2ed7d699871183ed706699119281canthony  Include declarations.
49805a2d48e7e2ed7d699871183ed706699119281canthony*/
50805a2d48e7e2ed7d699871183ed706699119281canthony#include "MagickWand/studio.h"
51805a2d48e7e2ed7d699871183ed706699119281canthony#include "MagickWand/MagickWand.h"
5272feaa664126c198b9ccd072b6ef181338a76c6canthony#include "MagickWand/magick-wand-private.h"
53d7df81dd631251802a3d70c5a929c81680c6a407cristy#include "MagickWand/mogrify.h"
5406f590165f0505d42005264893fe14a9e8a79986dirk#include "MagickWand/operation.h"
5543f425dd7d5b33887726982b28ebfa06f5560636anthony#include "MagickWand/wand.h"
56756cd0d228823ea405498ec6b2e9b8843beaca96anthony#include "MagickWand/wandcli.h"
57756cd0d228823ea405498ec6b2e9b8843beaca96anthony#include "MagickWand/wandcli-private.h"
58e66172d4abecdc0ecaf994a8f9e79ab4cd1ee97bcristy#include "MagickCore/image-private.h"
59805a2d48e7e2ed7d699871183ed706699119281canthony#include "MagickCore/monitor-private.h"
607a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony#include "MagickCore/pixel-private.h"
6106f590165f0505d42005264893fe14a9e8a79986dirk#include "MagickCore/string-private.h"
6206f590165f0505d42005264893fe14a9e8a79986dirk#include "MagickCore/thread-private.h"
63805a2d48e7e2ed7d699871183ed706699119281canthony
64805a2d48e7e2ed7d699871183ed706699119281canthony/*
65d7df81dd631251802a3d70c5a929c81680c6a407cristy  Constant declaration.
66d7df81dd631251802a3d70c5a929c81680c6a407cristy*/
67d7df81dd631251802a3d70c5a929c81680c6a407cristystatic const char
68b797b2c96f796f4920c9ee807dc5f47e6f160418dirk  MogrifyAlphaColor[] = "#bdbdbd",  /* slightly darker gray */
69d7df81dd631251802a3d70c5a929c81680c6a407cristy  MogrifyBackgroundColor[] = "#fff",  /* white */
70b797b2c96f796f4920c9ee807dc5f47e6f160418dirk  MogrifyBorderColor[] = "#dfdfdf";  /* sRGB gray */
71d7df81dd631251802a3d70c5a929c81680c6a407cristy
72d7df81dd631251802a3d70c5a929c81680c6a407cristy/*
73805a2d48e7e2ed7d699871183ed706699119281canthony  Define declarations.
74805a2d48e7e2ed7d699871183ed706699119281canthony*/
75c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony#define USE_WAND_METHODS  1
76afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#define MAX_STACK_DEPTH  32
77afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#define UNDEFINED_COMPRESSION_QUALITY  0UL
78afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony
79b1d483a6a6a5678173db9d60bec52dd5a37826beanthony/* FUTURE: why is this default so specific? */
80b1d483a6a6a5678173db9d60bec52dd5a37826beanthony#define DEFAULT_DISSIMILARITY_THRESHOLD "0.31830988618379067154"
81b1d483a6a6a5678173db9d60bec52dd5a37826beanthony
8222de2722b682eb405b60ec6022a7546df994674eanthony/* For Debugging Geometry Input */
8322de2722b682eb405b60ec6022a7546df994674eanthony#define ReportGeometry(flags,info) \
8422de2722b682eb405b60ec6022a7546df994674eanthony  (void) FormatLocaleFile(stderr, "Geometry = 0x%04X : %lg x %lg %+lg %+lg\n", \
8522de2722b682eb405b60ec6022a7546df994674eanthony       flags, info.rho, info.sigma, info.xi, info.psi )
86805a2d48e7e2ed7d699871183ed706699119281canthony
87805a2d48e7e2ed7d699871183ed706699119281canthony/*
88805a2d48e7e2ed7d699871183ed706699119281canthony** Function to report on the progress of image operations
89805a2d48e7e2ed7d699871183ed706699119281canthony*/
90805a2d48e7e2ed7d699871183ed706699119281canthonystatic MagickBooleanType MonitorProgress(const char *text,
91805a2d48e7e2ed7d699871183ed706699119281canthony  const MagickOffsetType offset,const MagickSizeType extent,
92751a6671c9b7480f3672a7ef6aa6e392f064b46ddirk  void *wand_unused(client_data))
93805a2d48e7e2ed7d699871183ed706699119281canthony{
94805a2d48e7e2ed7d699871183ed706699119281canthony  char
95151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy    message[MagickPathExtent],
96151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy    tag[MagickPathExtent];
97805a2d48e7e2ed7d699871183ed706699119281canthony
98805a2d48e7e2ed7d699871183ed706699119281canthony  const char
99805a2d48e7e2ed7d699871183ed706699119281canthony    *locale_message;
100805a2d48e7e2ed7d699871183ed706699119281canthony
101805a2d48e7e2ed7d699871183ed706699119281canthony  register char
102805a2d48e7e2ed7d699871183ed706699119281canthony    *p;
103805a2d48e7e2ed7d699871183ed706699119281canthony
104751a6671c9b7480f3672a7ef6aa6e392f064b46ddirk  magick_unreferenced(client_data);
105751a6671c9b7480f3672a7ef6aa6e392f064b46ddirk
1065da2007c76eadcfef018a30848f826c9137c21ceCristy  if ((extent <= 1) || (offset < 0) || (offset >= (MagickOffsetType) extent))
1075da2007c76eadcfef018a30848f826c9137c21ceCristy    return(MagickTrue);
1085da2007c76eadcfef018a30848f826c9137c21ceCristy  if ((offset != (MagickOffsetType) (extent-1)) && ((offset % 50) != 0))
109805a2d48e7e2ed7d699871183ed706699119281canthony    return(MagickTrue);
110bcaf9c53d9084f934212a67ca1ebf5abd2f17bbcCristy  (void) CopyMagickString(tag,text,MagickPathExtent);
111805a2d48e7e2ed7d699871183ed706699119281canthony  p=strrchr(tag,'/');
112805a2d48e7e2ed7d699871183ed706699119281canthony  if (p != (char *) NULL)
113805a2d48e7e2ed7d699871183ed706699119281canthony    *p='\0';
114151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy  (void) FormatLocaleString(message,MagickPathExtent,"Monitor/%s",tag);
115805a2d48e7e2ed7d699871183ed706699119281canthony  locale_message=GetLocaleMessage(message);
116805a2d48e7e2ed7d699871183ed706699119281canthony  if (locale_message == message)
117805a2d48e7e2ed7d699871183ed706699119281canthony    locale_message=tag;
118805a2d48e7e2ed7d699871183ed706699119281canthony  if (p == (char *) NULL)
119805a2d48e7e2ed7d699871183ed706699119281canthony    (void) FormatLocaleFile(stderr,"%s: %ld of %lu, %02ld%% complete\r",
120805a2d48e7e2ed7d699871183ed706699119281canthony      locale_message,(long) offset,(unsigned long) extent,(long)
121805a2d48e7e2ed7d699871183ed706699119281canthony      (100L*offset/(extent-1)));
122805a2d48e7e2ed7d699871183ed706699119281canthony  else
123805a2d48e7e2ed7d699871183ed706699119281canthony    (void) FormatLocaleFile(stderr,"%s[%s]: %ld of %lu, %02ld%% complete\r",
124805a2d48e7e2ed7d699871183ed706699119281canthony      locale_message,p+1,(long) offset,(unsigned long) extent,(long)
125805a2d48e7e2ed7d699871183ed706699119281canthony      (100L*offset/(extent-1)));
126805a2d48e7e2ed7d699871183ed706699119281canthony  if (offset == (MagickOffsetType) (extent-1))
127805a2d48e7e2ed7d699871183ed706699119281canthony    (void) FormatLocaleFile(stderr,"\n");
128805a2d48e7e2ed7d699871183ed706699119281canthony  (void) fflush(stderr);
129805a2d48e7e2ed7d699871183ed706699119281canthony  return(MagickTrue);
130805a2d48e7e2ed7d699871183ed706699119281canthony}
131805a2d48e7e2ed7d699871183ed706699119281canthony
132805a2d48e7e2ed7d699871183ed706699119281canthony/*
133805a2d48e7e2ed7d699871183ed706699119281canthony** GetImageCache() will read an image into a image cache if not already
134805a2d48e7e2ed7d699871183ed706699119281canthony** present then return the image that is in the cache under that filename.
135805a2d48e7e2ed7d699871183ed706699119281canthony*/
136805a2d48e7e2ed7d699871183ed706699119281canthonystatic inline Image *GetImageCache(const ImageInfo *image_info,const char *path,
137805a2d48e7e2ed7d699871183ed706699119281canthony  ExceptionInfo *exception)
138805a2d48e7e2ed7d699871183ed706699119281canthony{
139805a2d48e7e2ed7d699871183ed706699119281canthony  char
140151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy    key[MagickPathExtent];
141805a2d48e7e2ed7d699871183ed706699119281canthony
142805a2d48e7e2ed7d699871183ed706699119281canthony  ExceptionInfo
143805a2d48e7e2ed7d699871183ed706699119281canthony    *sans_exception;
144805a2d48e7e2ed7d699871183ed706699119281canthony
145805a2d48e7e2ed7d699871183ed706699119281canthony  Image
146805a2d48e7e2ed7d699871183ed706699119281canthony    *image;
147805a2d48e7e2ed7d699871183ed706699119281canthony
148805a2d48e7e2ed7d699871183ed706699119281canthony  ImageInfo
149805a2d48e7e2ed7d699871183ed706699119281canthony    *read_info;
150805a2d48e7e2ed7d699871183ed706699119281canthony
151151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy  (void) FormatLocaleString(key,MagickPathExtent,"cache:%s",path);
152805a2d48e7e2ed7d699871183ed706699119281canthony  sans_exception=AcquireExceptionInfo();
153805a2d48e7e2ed7d699871183ed706699119281canthony  image=(Image *) GetImageRegistry(ImageRegistryType,key,sans_exception);
154805a2d48e7e2ed7d699871183ed706699119281canthony  sans_exception=DestroyExceptionInfo(sans_exception);
155805a2d48e7e2ed7d699871183ed706699119281canthony  if (image != (Image *) NULL)
156805a2d48e7e2ed7d699871183ed706699119281canthony    return(image);
157805a2d48e7e2ed7d699871183ed706699119281canthony  read_info=CloneImageInfo(image_info);
1584d246fc57cf90dc0ac7addcd8192d5c013fce640cristy  if (path != (const char *) NULL)
159151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy    (void) CopyMagickString(read_info->filename,path,MagickPathExtent);
160805a2d48e7e2ed7d699871183ed706699119281canthony  image=ReadImage(read_info,exception);
161805a2d48e7e2ed7d699871183ed706699119281canthony  read_info=DestroyImageInfo(read_info);
162805a2d48e7e2ed7d699871183ed706699119281canthony  if (image != (Image *) NULL)
163805a2d48e7e2ed7d699871183ed706699119281canthony    (void) SetImageRegistry(ImageRegistryType,key,image,exception);
164805a2d48e7e2ed7d699871183ed706699119281canthony  return(image);
165805a2d48e7e2ed7d699871183ed706699119281canthony}
166805a2d48e7e2ed7d699871183ed706699119281canthony
167756cd0d228823ea405498ec6b2e9b8843beaca96anthony/*
168a89dd1754cb0d91d27735def18faff913a369be4anthony  SparseColorOption() parse the complex -sparse-color argument into an
169a89dd1754cb0d91d27735def18faff913a369be4anthony  an array of floating point values than call SparseColorImage().
170a89dd1754cb0d91d27735def18faff913a369be4anthony  Argument is a complex mix of floating-point pixel coodinates, and color
171a89dd1754cb0d91d27735def18faff913a369be4anthony  specifications (or direct floating point numbers).  The number of floats
1724023b26911e4aaaee0e84cdda641b020efd88795anthony  needed to represent a color varies depending on the current channel
173a89dd1754cb0d91d27735def18faff913a369be4anthony  setting.
17443f425dd7d5b33887726982b28ebfa06f5560636anthony
17543f425dd7d5b33887726982b28ebfa06f5560636anthony  This really should be in MagickCore, so that other API's can make use of it.
176805a2d48e7e2ed7d699871183ed706699119281canthony*/
177805a2d48e7e2ed7d699871183ed706699119281canthonystatic Image *SparseColorOption(const Image *image,
178ab9435990dd6a881f2055aee7562d3de4dabc01dcristy  const SparseColorMethod method,const char *arguments,ExceptionInfo *exception)
179805a2d48e7e2ed7d699871183ed706699119281canthony{
180805a2d48e7e2ed7d699871183ed706699119281canthony  char
181151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy    token[MagickPathExtent];
182805a2d48e7e2ed7d699871183ed706699119281canthony
183805a2d48e7e2ed7d699871183ed706699119281canthony  const char
184805a2d48e7e2ed7d699871183ed706699119281canthony    *p;
185805a2d48e7e2ed7d699871183ed706699119281canthony
186805a2d48e7e2ed7d699871183ed706699119281canthony  double
187805a2d48e7e2ed7d699871183ed706699119281canthony    *sparse_arguments;
188805a2d48e7e2ed7d699871183ed706699119281canthony
189805a2d48e7e2ed7d699871183ed706699119281canthony  Image
190805a2d48e7e2ed7d699871183ed706699119281canthony    *sparse_image;
191805a2d48e7e2ed7d699871183ed706699119281canthony
192805a2d48e7e2ed7d699871183ed706699119281canthony  PixelInfo
193805a2d48e7e2ed7d699871183ed706699119281canthony    color;
194805a2d48e7e2ed7d699871183ed706699119281canthony
195805a2d48e7e2ed7d699871183ed706699119281canthony  MagickBooleanType
196805a2d48e7e2ed7d699871183ed706699119281canthony    error;
197805a2d48e7e2ed7d699871183ed706699119281canthony
198805a2d48e7e2ed7d699871183ed706699119281canthony  register size_t
199805a2d48e7e2ed7d699871183ed706699119281canthony    x;
200805a2d48e7e2ed7d699871183ed706699119281canthony
201805a2d48e7e2ed7d699871183ed706699119281canthony  size_t
202805a2d48e7e2ed7d699871183ed706699119281canthony    number_arguments,
203805a2d48e7e2ed7d699871183ed706699119281canthony    number_colors;
204805a2d48e7e2ed7d699871183ed706699119281canthony
205805a2d48e7e2ed7d699871183ed706699119281canthony  assert(image != (Image *) NULL);
206e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(image->signature == MagickCoreSignature);
207360b9862931889fd536b16ce88018c2e58c8619fdirk  if (image->debug != MagickFalse)
208805a2d48e7e2ed7d699871183ed706699119281canthony    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
209805a2d48e7e2ed7d699871183ed706699119281canthony  assert(exception != (ExceptionInfo *) NULL);
210e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(exception->signature == MagickCoreSignature);
211805a2d48e7e2ed7d699871183ed706699119281canthony  /*
212b1d483a6a6a5678173db9d60bec52dd5a37826beanthony    Limit channels according to image
213b1d483a6a6a5678173db9d60bec52dd5a37826beanthony    add up number of values needed per color.
214805a2d48e7e2ed7d699871183ed706699119281canthony  */
215805a2d48e7e2ed7d699871183ed706699119281canthony  number_colors=0;
216805a2d48e7e2ed7d699871183ed706699119281canthony  if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0)
217805a2d48e7e2ed7d699871183ed706699119281canthony    number_colors++;
218805a2d48e7e2ed7d699871183ed706699119281canthony  if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0)
219805a2d48e7e2ed7d699871183ed706699119281canthony    number_colors++;
220805a2d48e7e2ed7d699871183ed706699119281canthony  if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0)
221805a2d48e7e2ed7d699871183ed706699119281canthony    number_colors++;
222805a2d48e7e2ed7d699871183ed706699119281canthony  if (((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) &&
223805a2d48e7e2ed7d699871183ed706699119281canthony      (image->colorspace == CMYKColorspace))
224805a2d48e7e2ed7d699871183ed706699119281canthony    number_colors++;
225805a2d48e7e2ed7d699871183ed706699119281canthony  if (((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0) &&
2267d6d3d842e19316bdf35c69a032cd77a40f476aacristy      image->alpha_trait != UndefinedPixelTrait)
227805a2d48e7e2ed7d699871183ed706699119281canthony    number_colors++;
228805a2d48e7e2ed7d699871183ed706699119281canthony
229805a2d48e7e2ed7d699871183ed706699119281canthony  /*
230805a2d48e7e2ed7d699871183ed706699119281canthony    Read string, to determine number of arguments needed,
231805a2d48e7e2ed7d699871183ed706699119281canthony  */
232805a2d48e7e2ed7d699871183ed706699119281canthony  p=arguments;
233805a2d48e7e2ed7d699871183ed706699119281canthony  x=0;
234805a2d48e7e2ed7d699871183ed706699119281canthony  while( *p != '\0' )
235805a2d48e7e2ed7d699871183ed706699119281canthony  {
2368bedb4edca01599dfd0612cb0daa35b09c67d736Cristy    GetNextToken(p,&p,MagickPathExtent,token);
237805a2d48e7e2ed7d699871183ed706699119281canthony    if ( token[0] == ',' ) continue;
23831f1bf7bb6ee2698a2afab42ee0329b11663636canthony    if ( isalpha((int) token[0]) || token[0] == '#' )
23931f1bf7bb6ee2698a2afab42ee0329b11663636canthony      x += number_colors;  /* color argument found */
240ce8dcb373b5775027f54bfea92a0cd5a47b192bcanthony    else
241805a2d48e7e2ed7d699871183ed706699119281canthony      x++;   /* floating point argument */
242805a2d48e7e2ed7d699871183ed706699119281canthony  }
24331f1bf7bb6ee2698a2afab42ee0329b11663636canthony  /* control points and color values */
244b9dbc296c59e91df014757130b4e584c7fb6c74ddirk  if ((x % (2+number_colors)) != 0)
245b9dbc296c59e91df014757130b4e584c7fb6c74ddirk    {
246b9dbc296c59e91df014757130b4e584c7fb6c74ddirk      (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
247b9dbc296c59e91df014757130b4e584c7fb6c74ddirk        "InvalidArgument","'%s': %s", "sparse-color",
248b9dbc296c59e91df014757130b4e584c7fb6c74ddirk        "Invalid number of Arguments");
249b9dbc296c59e91df014757130b4e584c7fb6c74ddirk      return( (Image *) NULL);
250b9dbc296c59e91df014757130b4e584c7fb6c74ddirk    }
251b9dbc296c59e91df014757130b4e584c7fb6c74ddirk  error=MagickFalse;
25231f1bf7bb6ee2698a2afab42ee0329b11663636canthony  number_arguments=x;
253805a2d48e7e2ed7d699871183ed706699119281canthony
254805a2d48e7e2ed7d699871183ed706699119281canthony  /* Allocate and fill in the floating point arguments */
255805a2d48e7e2ed7d699871183ed706699119281canthony  sparse_arguments=(double *) AcquireQuantumMemory(number_arguments,
256805a2d48e7e2ed7d699871183ed706699119281canthony    sizeof(*sparse_arguments));
257805a2d48e7e2ed7d699871183ed706699119281canthony  if (sparse_arguments == (double *) NULL) {
258805a2d48e7e2ed7d699871183ed706699119281canthony    (void) ThrowMagickException(exception,GetMagickModule(),ResourceLimitError,
259805a2d48e7e2ed7d699871183ed706699119281canthony      "MemoryAllocationFailed","%s","SparseColorOption");
260f432c635c526259b858c9aad3d409c5c44545686cristy    return( (Image *) NULL);
261805a2d48e7e2ed7d699871183ed706699119281canthony  }
262805a2d48e7e2ed7d699871183ed706699119281canthony  (void) ResetMagickMemory(sparse_arguments,0,number_arguments*
263805a2d48e7e2ed7d699871183ed706699119281canthony    sizeof(*sparse_arguments));
264805a2d48e7e2ed7d699871183ed706699119281canthony  p=arguments;
265805a2d48e7e2ed7d699871183ed706699119281canthony  x=0;
266805a2d48e7e2ed7d699871183ed706699119281canthony  while( *p != '\0' && x < number_arguments ) {
267805a2d48e7e2ed7d699871183ed706699119281canthony    /* X coordinate */
2688bedb4edca01599dfd0612cb0daa35b09c67d736Cristy    token[0]=','; while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token);
269805a2d48e7e2ed7d699871183ed706699119281canthony    if ( token[0] == '\0' ) break;
270805a2d48e7e2ed7d699871183ed706699119281canthony    if ( isalpha((int) token[0]) || token[0] == '#' ) {
271805a2d48e7e2ed7d699871183ed706699119281canthony      (void) ThrowMagickException(exception,GetMagickModule(),
27243f425dd7d5b33887726982b28ebfa06f5560636anthony            OptionError, "InvalidArgument", "'%s': %s", "sparse-color",
273805a2d48e7e2ed7d699871183ed706699119281canthony            "Color found, instead of X-coord");
274b9dbc296c59e91df014757130b4e584c7fb6c74ddirk      error=MagickTrue;
275805a2d48e7e2ed7d699871183ed706699119281canthony      break;
276805a2d48e7e2ed7d699871183ed706699119281canthony    }
277dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy    sparse_arguments[x++]=StringToDouble(token,(char **) NULL);
278805a2d48e7e2ed7d699871183ed706699119281canthony    /* Y coordinate */
2798bedb4edca01599dfd0612cb0daa35b09c67d736Cristy    token[0]=','; while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token);
280805a2d48e7e2ed7d699871183ed706699119281canthony    if ( token[0] == '\0' ) break;
281805a2d48e7e2ed7d699871183ed706699119281canthony    if ( isalpha((int) token[0]) || token[0] == '#' ) {
282805a2d48e7e2ed7d699871183ed706699119281canthony      (void) ThrowMagickException(exception,GetMagickModule(),
28343f425dd7d5b33887726982b28ebfa06f5560636anthony            OptionError, "InvalidArgument", "'%s': %s", "sparse-color",
284805a2d48e7e2ed7d699871183ed706699119281canthony            "Color found, instead of Y-coord");
285b9dbc296c59e91df014757130b4e584c7fb6c74ddirk      error=MagickTrue;
286805a2d48e7e2ed7d699871183ed706699119281canthony      break;
287805a2d48e7e2ed7d699871183ed706699119281canthony    }
288dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy    sparse_arguments[x++]=StringToDouble(token,(char **) NULL);
28931f1bf7bb6ee2698a2afab42ee0329b11663636canthony    /* color name or function given in string argument */
2908bedb4edca01599dfd0612cb0daa35b09c67d736Cristy    token[0]=','; while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token);
29131f1bf7bb6ee2698a2afab42ee0329b11663636canthony    if ( token[0] == '\0' ) break;
29231f1bf7bb6ee2698a2afab42ee0329b11663636canthony    if ( isalpha((int) token[0]) || token[0] == '#' ) {
29331f1bf7bb6ee2698a2afab42ee0329b11663636canthony      /* Color string given */
29431f1bf7bb6ee2698a2afab42ee0329b11663636canthony      (void) QueryColorCompliance(token,AllCompliance,&color,
29531f1bf7bb6ee2698a2afab42ee0329b11663636canthony                exception);
29631f1bf7bb6ee2698a2afab42ee0329b11663636canthony      if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0)
29731f1bf7bb6ee2698a2afab42ee0329b11663636canthony        sparse_arguments[x++] = QuantumScale*color.red;
29831f1bf7bb6ee2698a2afab42ee0329b11663636canthony      if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0)
29931f1bf7bb6ee2698a2afab42ee0329b11663636canthony        sparse_arguments[x++] = QuantumScale*color.green;
30031f1bf7bb6ee2698a2afab42ee0329b11663636canthony      if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0)
30131f1bf7bb6ee2698a2afab42ee0329b11663636canthony        sparse_arguments[x++] = QuantumScale*color.blue;
30231f1bf7bb6ee2698a2afab42ee0329b11663636canthony      if (((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) &&
30331f1bf7bb6ee2698a2afab42ee0329b11663636canthony          (image->colorspace == CMYKColorspace))
30431f1bf7bb6ee2698a2afab42ee0329b11663636canthony        sparse_arguments[x++] = QuantumScale*color.black;
30531f1bf7bb6ee2698a2afab42ee0329b11663636canthony      if (((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0) &&
3067d6d3d842e19316bdf35c69a032cd77a40f476aacristy          image->alpha_trait != UndefinedPixelTrait)
30731f1bf7bb6ee2698a2afab42ee0329b11663636canthony        sparse_arguments[x++] = QuantumScale*color.alpha;
308805a2d48e7e2ed7d699871183ed706699119281canthony    }
30931f1bf7bb6ee2698a2afab42ee0329b11663636canthony    else {
31031f1bf7bb6ee2698a2afab42ee0329b11663636canthony      /* Colors given as a set of floating point values - experimental */
31131f1bf7bb6ee2698a2afab42ee0329b11663636canthony      /* NB: token contains the first floating point value to use! */
31231f1bf7bb6ee2698a2afab42ee0329b11663636canthony      if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0)
31331f1bf7bb6ee2698a2afab42ee0329b11663636canthony        {
3148bedb4edca01599dfd0612cb0daa35b09c67d736Cristy        while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token);
31531f1bf7bb6ee2698a2afab42ee0329b11663636canthony        if ( token[0] == '\0' || isalpha((int)token[0]) || token[0] == '#' )
31631f1bf7bb6ee2698a2afab42ee0329b11663636canthony          break;
31731f1bf7bb6ee2698a2afab42ee0329b11663636canthony        sparse_arguments[x++]=StringToDouble(token,(char **) NULL);
31831f1bf7bb6ee2698a2afab42ee0329b11663636canthony        token[0] = ','; /* used this token - get another */
319805a2d48e7e2ed7d699871183ed706699119281canthony      }
32031f1bf7bb6ee2698a2afab42ee0329b11663636canthony      if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0)
32131f1bf7bb6ee2698a2afab42ee0329b11663636canthony        {
3228bedb4edca01599dfd0612cb0daa35b09c67d736Cristy        while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token);
32331f1bf7bb6ee2698a2afab42ee0329b11663636canthony        if ( token[0] == '\0' || isalpha((int)token[0]) || token[0] == '#' )
32431f1bf7bb6ee2698a2afab42ee0329b11663636canthony          break;
32531f1bf7bb6ee2698a2afab42ee0329b11663636canthony        sparse_arguments[x++]=StringToDouble(token,(char **) NULL);
32631f1bf7bb6ee2698a2afab42ee0329b11663636canthony        token[0] = ','; /* used this token - get another */
32731f1bf7bb6ee2698a2afab42ee0329b11663636canthony      }
32831f1bf7bb6ee2698a2afab42ee0329b11663636canthony      if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0)
32931f1bf7bb6ee2698a2afab42ee0329b11663636canthony        {
3308bedb4edca01599dfd0612cb0daa35b09c67d736Cristy        while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token);
33131f1bf7bb6ee2698a2afab42ee0329b11663636canthony        if ( token[0] == '\0' || isalpha((int)token[0]) || token[0] == '#' )
33231f1bf7bb6ee2698a2afab42ee0329b11663636canthony          break;
33331f1bf7bb6ee2698a2afab42ee0329b11663636canthony        sparse_arguments[x++]=StringToDouble(token,(char **) NULL);
33431f1bf7bb6ee2698a2afab42ee0329b11663636canthony        token[0] = ','; /* used this token - get another */
33531f1bf7bb6ee2698a2afab42ee0329b11663636canthony      }
33631f1bf7bb6ee2698a2afab42ee0329b11663636canthony      if (((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) &&
33731f1bf7bb6ee2698a2afab42ee0329b11663636canthony          (image->colorspace == CMYKColorspace))
33831f1bf7bb6ee2698a2afab42ee0329b11663636canthony        {
3398bedb4edca01599dfd0612cb0daa35b09c67d736Cristy        while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token);
34031f1bf7bb6ee2698a2afab42ee0329b11663636canthony        if ( token[0] == '\0' || isalpha((int)token[0]) || token[0] == '#' )
34131f1bf7bb6ee2698a2afab42ee0329b11663636canthony          break;
34231f1bf7bb6ee2698a2afab42ee0329b11663636canthony        sparse_arguments[x++]=StringToDouble(token,(char **) NULL);
34331f1bf7bb6ee2698a2afab42ee0329b11663636canthony        token[0] = ','; /* used this token - get another */
34431f1bf7bb6ee2698a2afab42ee0329b11663636canthony      }
34531f1bf7bb6ee2698a2afab42ee0329b11663636canthony      if (((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0) &&
3467d6d3d842e19316bdf35c69a032cd77a40f476aacristy          image->alpha_trait != UndefinedPixelTrait)
34731f1bf7bb6ee2698a2afab42ee0329b11663636canthony        {
3488bedb4edca01599dfd0612cb0daa35b09c67d736Cristy        while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token);
34931f1bf7bb6ee2698a2afab42ee0329b11663636canthony        if ( token[0] == '\0' || isalpha((int)token[0]) || token[0] == '#' )
35031f1bf7bb6ee2698a2afab42ee0329b11663636canthony          break;
35131f1bf7bb6ee2698a2afab42ee0329b11663636canthony        sparse_arguments[x++]=StringToDouble(token,(char **) NULL);
35231f1bf7bb6ee2698a2afab42ee0329b11663636canthony        token[0] = ','; /* used this token - get another */
353805a2d48e7e2ed7d699871183ed706699119281canthony      }
354805a2d48e7e2ed7d699871183ed706699119281canthony    }
355805a2d48e7e2ed7d699871183ed706699119281canthony  }
356b9dbc296c59e91df014757130b4e584c7fb6c74ddirk  if (error != MagickFalse)
357b9dbc296c59e91df014757130b4e584c7fb6c74ddirk    {
358b9dbc296c59e91df014757130b4e584c7fb6c74ddirk      sparse_arguments=(double *) RelinquishMagickMemory(sparse_arguments);
359b9dbc296c59e91df014757130b4e584c7fb6c74ddirk      return((Image *) NULL);
360b9dbc296c59e91df014757130b4e584c7fb6c74ddirk    }
361b9dbc296c59e91df014757130b4e584c7fb6c74ddirk  if (number_arguments != x)
362b9dbc296c59e91df014757130b4e584c7fb6c74ddirk    {
363b9dbc296c59e91df014757130b4e584c7fb6c74ddirk      sparse_arguments=(double *) RelinquishMagickMemory(sparse_arguments);
364b9dbc296c59e91df014757130b4e584c7fb6c74ddirk      (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
365b9dbc296c59e91df014757130b4e584c7fb6c74ddirk        "InvalidArgument","'%s': %s","sparse-color","Argument Parsing Error");
366b9dbc296c59e91df014757130b4e584c7fb6c74ddirk      return((Image *) NULL);
367b9dbc296c59e91df014757130b4e584c7fb6c74ddirk    }
36831f1bf7bb6ee2698a2afab42ee0329b11663636canthony  /* Call the Sparse Color Interpolation function with the parsed arguments */
369805a2d48e7e2ed7d699871183ed706699119281canthony  sparse_image=SparseColorImage(image,method,number_arguments,sparse_arguments,
370805a2d48e7e2ed7d699871183ed706699119281canthony    exception);
371805a2d48e7e2ed7d699871183ed706699119281canthony  sparse_arguments=(double *) RelinquishMagickMemory(sparse_arguments);
372805a2d48e7e2ed7d699871183ed706699119281canthony  return( sparse_image );
373805a2d48e7e2ed7d699871183ed706699119281canthony}
374805a2d48e7e2ed7d699871183ed706699119281canthony
375805a2d48e7e2ed7d699871183ed706699119281canthony/*
376805a2d48e7e2ed7d699871183ed706699119281canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
377805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
378805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
379805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
380464f1c476517436723780b8a8bb371464584453canthony%   C L I S e t t i n g O p t i o n I n f o                                   %
38143f425dd7d5b33887726982b28ebfa06f5560636anthony%                                                                             %
38243f425dd7d5b33887726982b28ebfa06f5560636anthony%                                                                             %
38343f425dd7d5b33887726982b28ebfa06f5560636anthony%                                                                             %
38443f425dd7d5b33887726982b28ebfa06f5560636anthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38543f425dd7d5b33887726982b28ebfa06f5560636anthony%
38643f425dd7d5b33887726982b28ebfa06f5560636anthony%  CLISettingOptionInfo() applies a single settings option into a CLI wand
387dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony%  holding the image_info, draw_info, quantize_info structures that will be
38843f425dd7d5b33887726982b28ebfa06f5560636anthony%  used when processing the images.
3891afdc7ad27c38cee6623faefd0a64a0e0c185febanthony%
39043f425dd7d5b33887726982b28ebfa06f5560636anthony%  These options do no require images to be present in the CLI wand for them
39143f425dd7d5b33887726982b28ebfa06f5560636anthony%  to be able to be set, in which case they will generally be applied to image
39243f425dd7d5b33887726982b28ebfa06f5560636anthony%  that are read in later
39380c3775de081817d58849ae9ded5325d397fb1acanthony%
39480c3775de081817d58849ae9ded5325d397fb1acanthony%  Options handled by this function are listed in CommandOptions[] of
395fd706f930f397221c6ba26f112e96e262fb0ba2eanthony%  "option.c" that is one of "SettingOptionFlags" option flags.
396805a2d48e7e2ed7d699871183ed706699119281canthony%
3972052d27d92125fd91005c0a737a1a950d8163047anthony%  The format of the CLISettingOptionInfo method is:
398805a2d48e7e2ed7d699871183ed706699119281canthony%
399afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony%    void CLISettingOptionInfo(MagickCLI *cli_wand,
400e5fcd3620310f12690ba2d00b4f5fa62f1bd1a6aanthony%               const char *option, const char *arg1, const char *arg2)
401805a2d48e7e2ed7d699871183ed706699119281canthony%
402805a2d48e7e2ed7d699871183ed706699119281canthony%  A description of each parameter follows:
403805a2d48e7e2ed7d699871183ed706699119281canthony%
40443f425dd7d5b33887726982b28ebfa06f5560636anthony%    o cli_wand: structure holding settings to be applied
405805a2d48e7e2ed7d699871183ed706699119281canthony%
406dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony%    o option: The option string to be set
407805a2d48e7e2ed7d699871183ed706699119281canthony%
408e5fcd3620310f12690ba2d00b4f5fa62f1bd1a6aanthony%    o arg1, arg2: optional argument strings to the operation
409e5fcd3620310f12690ba2d00b4f5fa62f1bd1a6aanthony%        arg2 is currently only used by "-limit"
410dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony%
411805a2d48e7e2ed7d699871183ed706699119281canthony*/
412fe83185ff915c87796df33a8d90a1e0937b3d76fcristyWandPrivate void CLISettingOptionInfo(MagickCLI *cli_wand,
413a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony     const char *option,const char *arg1n, const char *arg2n)
414805a2d48e7e2ed7d699871183ed706699119281canthony{
41530b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony  ssize_t
41630b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony    parse;     /* option argument parsing (string to value table lookup) */
41730b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony
418a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony  const char    /* percent escaped versions of the args */
419a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony    *arg1,
420a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony    *arg2;
42143f425dd7d5b33887726982b28ebfa06f5560636anthony
4222e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _image_info       (cli_wand->wand.image_info)
423a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _image            (cli_wand->wand.images)
4242e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _exception        (cli_wand->wand.exception)
4252e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _draw_info        (cli_wand->draw_info)
4262e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _quantize_info    (cli_wand->quantize_info)
42724aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony#define IfSetOption       (*option=='-')
428b9dbc296c59e91df014757130b4e584c7fb6c74ddirk#define ArgBoolean        IfSetOption ? MagickTrue : MagickFalse
429b9dbc296c59e91df014757130b4e584c7fb6c74ddirk#define ArgBooleanNot     IfSetOption ? MagickFalse : MagickTrue
43024aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony#define ArgBooleanString  (IfSetOption?"true":"false")
43124aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony#define ArgOption(def)    (IfSetOption?arg1:(const char *)(def))
43274b1cfc16264081b41a57f6287d72283c8881f0aanthony
433a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony  assert(cli_wand != (MagickCLI *) NULL);
434e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(cli_wand->signature == MagickWandSignature);
435e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(cli_wand->wand.signature == MagickWandSignature);
436a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony
437d0792939dc18eff319129903f2627bd882a574aadirk  if (cli_wand->wand.debug != MagickFalse)
438a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony    (void) CLILogEvent(cli_wand,CommandEvent,GetMagickModule(),
439a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony         "- Setting Option: %s \"%s\" \"%s\"", option,arg1n,arg2n);
440a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony
441a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony  arg1 = arg1n,
442a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony  arg2 = arg2n;
4434837ac2f5e9dbb766129a91aa11cf7c547477119anthony
444a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#if 1
4454837ac2f5e9dbb766129a91aa11cf7c547477119anthony#define _process_flags    (cli_wand->process_flags)
4464837ac2f5e9dbb766129a91aa11cf7c547477119anthony#define _option_type      ((CommandOptionFlags) cli_wand->command->flags)
4474837ac2f5e9dbb766129a91aa11cf7c547477119anthony  /* Interpret Percent Escapes in Arguments - using first image */
4484837ac2f5e9dbb766129a91aa11cf7c547477119anthony  if ( (((_process_flags & ProcessInterpretProperities) != 0 )
4494837ac2f5e9dbb766129a91aa11cf7c547477119anthony        || ((_option_type & AlwaysInterpretArgsFlag) != 0)
4504837ac2f5e9dbb766129a91aa11cf7c547477119anthony       )  && ((_option_type & NeverInterpretArgsFlag) == 0) ) {
4514837ac2f5e9dbb766129a91aa11cf7c547477119anthony    /* Interpret Percent escapes in argument 1 */
4524837ac2f5e9dbb766129a91aa11cf7c547477119anthony    if (arg1n != (char *) NULL) {
4534837ac2f5e9dbb766129a91aa11cf7c547477119anthony      arg1=InterpretImageProperties(_image_info,_image,arg1n,_exception);
4544837ac2f5e9dbb766129a91aa11cf7c547477119anthony      if (arg1 == (char *) NULL) {
4554837ac2f5e9dbb766129a91aa11cf7c547477119anthony        CLIWandException(OptionWarning,"InterpretPropertyFailure",option);
4564837ac2f5e9dbb766129a91aa11cf7c547477119anthony        arg1=arg1n;  /* use the given argument as is */
4574837ac2f5e9dbb766129a91aa11cf7c547477119anthony      }
4584837ac2f5e9dbb766129a91aa11cf7c547477119anthony    }
4594837ac2f5e9dbb766129a91aa11cf7c547477119anthony    if (arg2n != (char *) NULL) {
4604837ac2f5e9dbb766129a91aa11cf7c547477119anthony      arg2=InterpretImageProperties(_image_info,_image,arg2n,_exception);
4614837ac2f5e9dbb766129a91aa11cf7c547477119anthony      if (arg2 == (char *) NULL) {
4624837ac2f5e9dbb766129a91aa11cf7c547477119anthony        CLIWandException(OptionWarning,"InterpretPropertyFailure",option);
4634837ac2f5e9dbb766129a91aa11cf7c547477119anthony        arg2=arg2n;  /* use the given argument as is */
4644837ac2f5e9dbb766129a91aa11cf7c547477119anthony      }
4654837ac2f5e9dbb766129a91aa11cf7c547477119anthony    }
4664837ac2f5e9dbb766129a91aa11cf7c547477119anthony  }
4674837ac2f5e9dbb766129a91aa11cf7c547477119anthony#undef _process_flags
4684837ac2f5e9dbb766129a91aa11cf7c547477119anthony#undef _option_type
4694837ac2f5e9dbb766129a91aa11cf7c547477119anthony#endif
4704837ac2f5e9dbb766129a91aa11cf7c547477119anthony
471afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony  switch (*(option+1))
472805a2d48e7e2ed7d699871183ed706699119281canthony  {
473805a2d48e7e2ed7d699871183ed706699119281canthony    case 'a':
474805a2d48e7e2ed7d699871183ed706699119281canthony    {
475afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("adjoin",option+1) == 0)
476805a2d48e7e2ed7d699871183ed706699119281canthony        {
47792c93bd35e207736d340f1b32000006a5bf6208eanthony          _image_info->adjoin = ArgBoolean;
478805a2d48e7e2ed7d699871183ed706699119281canthony          break;
479805a2d48e7e2ed7d699871183ed706699119281canthony        }
480afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("affine",option+1) == 0)
4811afdc7ad27c38cee6623faefd0a64a0e0c185febanthony        {
482464f1c476517436723780b8a8bb371464584453canthony          CLIWandWarnReplaced("-draw 'affine ...'");
48374b1cfc16264081b41a57f6287d72283c8881f0aanthony          if (IfSetOption)
48492c93bd35e207736d340f1b32000006a5bf6208eanthony            (void) ParseAffineGeometry(arg1,&_draw_info->affine,_exception);
48574b1cfc16264081b41a57f6287d72283c8881f0aanthony          else
48692c93bd35e207736d340f1b32000006a5bf6208eanthony            GetAffineMatrix(&_draw_info->affine);
4871afdc7ad27c38cee6623faefd0a64a0e0c185febanthony          break;
4881afdc7ad27c38cee6623faefd0a64a0e0c185febanthony        }
489b797b2c96f796f4920c9ee807dc5f47e6f160418dirk      if (LocaleCompare("alpha-color",option+1) == 0)
490b797b2c96f796f4920c9ee807dc5f47e6f160418dirk        {
491b797b2c96f796f4920c9ee807dc5f47e6f160418dirk          /* SyncImageSettings() used to set per-image attribute. */
492b797b2c96f796f4920c9ee807dc5f47e6f160418dirk          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
493b797b2c96f796f4920c9ee807dc5f47e6f160418dirk          (void) QueryColorCompliance(ArgOption(MogrifyAlphaColor),AllCompliance,
494b797b2c96f796f4920c9ee807dc5f47e6f160418dirk             &_image_info->alpha_color,_exception);
495b797b2c96f796f4920c9ee807dc5f47e6f160418dirk          break;
496b797b2c96f796f4920c9ee807dc5f47e6f160418dirk        }
497afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("antialias",option+1) == 0)
498805a2d48e7e2ed7d699871183ed706699119281canthony        {
49992c93bd35e207736d340f1b32000006a5bf6208eanthony          _image_info->antialias =
50092c93bd35e207736d340f1b32000006a5bf6208eanthony            _draw_info->stroke_antialias =
50192c93bd35e207736d340f1b32000006a5bf6208eanthony              _draw_info->text_antialias = ArgBoolean;
502805a2d48e7e2ed7d699871183ed706699119281canthony          break;
503805a2d48e7e2ed7d699871183ed706699119281canthony        }
50431f1bf7bb6ee2698a2afab42ee0329b11663636canthony      if (LocaleCompare("attenuate",option+1) == 0)
50531f1bf7bb6ee2698a2afab42ee0329b11663636canthony        {
5065d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IfSetOption && (IsGeometry(arg1) == MagickFalse))
50792c93bd35e207736d340f1b32000006a5bf6208eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
50892c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption("1.0"));
50931f1bf7bb6ee2698a2afab42ee0329b11663636canthony          break;
51031f1bf7bb6ee2698a2afab42ee0329b11663636canthony        }
511afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("authenticate",option+1) == 0)
512dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony        {
51392c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
514805a2d48e7e2ed7d699871183ed706699119281canthony          break;
515805a2d48e7e2ed7d699871183ed706699119281canthony        }
516ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
517805a2d48e7e2ed7d699871183ed706699119281canthony    }
518805a2d48e7e2ed7d699871183ed706699119281canthony    case 'b':
519805a2d48e7e2ed7d699871183ed706699119281canthony    {
520afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("background",option+1) == 0)
521805a2d48e7e2ed7d699871183ed706699119281canthony        {
52292c93bd35e207736d340f1b32000006a5bf6208eanthony          /* FUTURE: both _image_info attribute & ImageOption in use!
52392c93bd35e207736d340f1b32000006a5bf6208eanthony             _image_info only used directly for generating new images.
52472feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
52572feaa664126c198b9ccd072b6ef181338a76c6canthony
52692c93bd35e207736d340f1b32000006a5bf6208eanthony             FUTURE: if _image_info->background_color is not set then
52730b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony             we should fall back to per-image background_color
52830b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony
52930b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony             At this time -background will 'wipe out' the per-image
53030b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony             background color!
53130b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony
53230b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony             Better error handling of QueryColorCompliance() needed.
53374b1cfc16264081b41a57f6287d72283c8881f0aanthony          */
53492c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
535d7df81dd631251802a3d70c5a929c81680c6a407cristy          (void) QueryColorCompliance(ArgOption(MogrifyBackgroundColor),AllCompliance,
53692c93bd35e207736d340f1b32000006a5bf6208eanthony             &_image_info->background_color,_exception);
537805a2d48e7e2ed7d699871183ed706699119281canthony          break;
538805a2d48e7e2ed7d699871183ed706699119281canthony        }
539afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("bias",option+1) == 0)
540805a2d48e7e2ed7d699871183ed706699119281canthony        {
54152bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          /* FUTURE: bias OBSOLETED, replaced by Artifact "convolve:bias"
54231f1bf7bb6ee2698a2afab42ee0329b11663636canthony             as it is actually rarely used except in direct convolve operations
54331f1bf7bb6ee2698a2afab42ee0329b11663636canthony             Usage outside a direct convolve operation is actally non-sensible!
54472feaa664126c198b9ccd072b6ef181338a76c6canthony
54572feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
54674b1cfc16264081b41a57f6287d72283c8881f0aanthony          */
5475d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IfSetOption && (IsGeometry(arg1) == MagickFalse))
5485330ae0b1ea1824ec58522aebfd27228592ad0a4anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
549f46d42620631d2581e0b6a56456e203e17c427c8anthony          (void) SetImageOption(_image_info,"convolve:bias",ArgOption(NULL));
550805a2d48e7e2ed7d699871183ed706699119281canthony          break;
551805a2d48e7e2ed7d699871183ed706699119281canthony        }
552afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("black-point-compensation",option+1) == 0)
553805a2d48e7e2ed7d699871183ed706699119281canthony        {
55472feaa664126c198b9ccd072b6ef181338a76c6canthony          /* Used as a image chromaticity setting
55572feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
55672feaa664126c198b9ccd072b6ef181338a76c6canthony          */
55792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgBooleanString);
558805a2d48e7e2ed7d699871183ed706699119281canthony          break;
559805a2d48e7e2ed7d699871183ed706699119281canthony        }
560afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("blue-primary",option+1) == 0)
561805a2d48e7e2ed7d699871183ed706699119281canthony        {
562afbaed757145095f09d6d614653ed3b58068cb3banthony          /* Image chromaticity X,Y  NB: Y=X if Y not defined
563afbaed757145095f09d6d614653ed3b58068cb3banthony             Used by many coders including PNG
56472feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
565afbaed757145095f09d6d614653ed3b58068cb3banthony          */
566f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          arg1=ArgOption("0.0");
5675d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
5685330ae0b1ea1824ec58522aebfd27228592ad0a4anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
569f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          (void) SetImageOption(_image_info,option+1,arg1);
570805a2d48e7e2ed7d699871183ed706699119281canthony          break;
571805a2d48e7e2ed7d699871183ed706699119281canthony        }
572afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("bordercolor",option+1) == 0)
573805a2d48e7e2ed7d699871183ed706699119281canthony        {
57492c93bd35e207736d340f1b32000006a5bf6208eanthony          /* FUTURE: both _image_info attribute & ImageOption in use!
57572feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
57630b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony             Better error checking of QueryColorCompliance().
57772feaa664126c198b9ccd072b6ef181338a76c6canthony          */
57874b1cfc16264081b41a57f6287d72283c8881f0aanthony          if (IfSetOption)
579805a2d48e7e2ed7d699871183ed706699119281canthony            {
58092c93bd35e207736d340f1b32000006a5bf6208eanthony              (void) SetImageOption(_image_info,option+1,arg1);
58124aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony              (void) QueryColorCompliance(arg1,AllCompliance,
58292c93bd35e207736d340f1b32000006a5bf6208eanthony                  &_image_info->border_color,_exception);
58324aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony              (void) QueryColorCompliance(arg1,AllCompliance,
58492c93bd35e207736d340f1b32000006a5bf6208eanthony                  &_draw_info->border_color,_exception);
585805a2d48e7e2ed7d699871183ed706699119281canthony              break;
586805a2d48e7e2ed7d699871183ed706699119281canthony            }
58792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) DeleteImageOption(_image_info,option+1);
588d7df81dd631251802a3d70c5a929c81680c6a407cristy          (void) QueryColorCompliance(MogrifyBorderColor,AllCompliance,
58992c93bd35e207736d340f1b32000006a5bf6208eanthony            &_image_info->border_color,_exception);
590d7df81dd631251802a3d70c5a929c81680c6a407cristy          (void) QueryColorCompliance(MogrifyBorderColor,AllCompliance,
59192c93bd35e207736d340f1b32000006a5bf6208eanthony            &_draw_info->border_color,_exception);
592805a2d48e7e2ed7d699871183ed706699119281canthony          break;
593805a2d48e7e2ed7d699871183ed706699119281canthony        }
594afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("box",option+1) == 0)
595805a2d48e7e2ed7d699871183ed706699119281canthony        {
596464f1c476517436723780b8a8bb371464584453canthony          CLIWandWarnReplaced("-undercolor");
597975a8d7aba7678845112e4d2c5a155011f35a3abanthony          CLISettingOptionInfo(cli_wand,"-undercolor",arg1, arg2);
598fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          break;
599805a2d48e7e2ed7d699871183ed706699119281canthony        }
600ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
601805a2d48e7e2ed7d699871183ed706699119281canthony    }
602805a2d48e7e2ed7d699871183ed706699119281canthony    case 'c':
603805a2d48e7e2ed7d699871183ed706699119281canthony    {
604afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("cache",option+1) == 0)
605805a2d48e7e2ed7d699871183ed706699119281canthony        {
606805a2d48e7e2ed7d699871183ed706699119281canthony          MagickSizeType
607805a2d48e7e2ed7d699871183ed706699119281canthony            limit;
608805a2d48e7e2ed7d699871183ed706699119281canthony
6095d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IfSetOption && (IsGeometry(arg1) == MagickFalse))
6105330ae0b1ea1824ec58522aebfd27228592ad0a4anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
611805a2d48e7e2ed7d699871183ed706699119281canthony          limit=MagickResourceInfinity;
61224aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony          if (LocaleCompare("unlimited",arg1) != 0)
61324aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony            limit=(MagickSizeType) SiPrefixToDoubleInterval(arg1,100.0);
614805a2d48e7e2ed7d699871183ed706699119281canthony          (void) SetMagickResourceLimit(MemoryResource,limit);
615805a2d48e7e2ed7d699871183ed706699119281canthony          (void) SetMagickResourceLimit(MapResource,2*limit);
616805a2d48e7e2ed7d699871183ed706699119281canthony          break;
617805a2d48e7e2ed7d699871183ed706699119281canthony        }
618afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("caption",option+1) == 0)
619805a2d48e7e2ed7d699871183ed706699119281canthony        {
62092c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
621805a2d48e7e2ed7d699871183ed706699119281canthony          break;
622805a2d48e7e2ed7d699871183ed706699119281canthony        }
623afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("colorspace",option+1) == 0)
624805a2d48e7e2ed7d699871183ed706699119281canthony        {
625afbaed757145095f09d6d614653ed3b58068cb3banthony          /* Setting used for new images via AquireImage()
626afbaed757145095f09d6d614653ed3b58068cb3banthony             But also used as a SimpleImageOperator
627afbaed757145095f09d6d614653ed3b58068cb3banthony             Undefined colorspace means don't modify images on
628afbaed757145095f09d6d614653ed3b58068cb3banthony             read or as a operation */
62917ada024a8d39285affcac96ff344f3142c41aadcristy          parse=ParseCommandOption(MagickColorspaceOptions,MagickFalse,
63017ada024a8d39285affcac96ff344f3142c41aadcristy             ArgOption("undefined"));
63130b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony          if (parse < 0)
63217ada024a8d39285affcac96ff344f3142c41aadcristy            CLIWandExceptArgBreak(OptionError,"UnrecognizedColorspace",option,
63317ada024a8d39285affcac96ff344f3142c41aadcristy              arg1);
63430b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony          _image_info->colorspace=(ColorspaceType) parse;
635805a2d48e7e2ed7d699871183ed706699119281canthony          break;
636805a2d48e7e2ed7d699871183ed706699119281canthony        }
637afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("comment",option+1) == 0)
638805a2d48e7e2ed7d699871183ed706699119281canthony        {
63992c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
640805a2d48e7e2ed7d699871183ed706699119281canthony          break;
641805a2d48e7e2ed7d699871183ed706699119281canthony        }
642afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("compose",option+1) == 0)
643805a2d48e7e2ed7d699871183ed706699119281canthony        {
64492c93bd35e207736d340f1b32000006a5bf6208eanthony          /* FUTURE: _image_info should be used,
64572feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute. - REMOVE
64672feaa664126c198b9ccd072b6ef181338a76c6canthony
647afbaed757145095f09d6d614653ed3b58068cb3banthony             This setting should NOT be used to set image 'compose'
64892c93bd35e207736d340f1b32000006a5bf6208eanthony             "-layer" operators shoud use _image_info if defined otherwise
64972feaa664126c198b9ccd072b6ef181338a76c6canthony             they should use a per-image compose setting.
650965524bd6cfe551433e9590f557a31f85a2b4c05anthony          */
651ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          parse = ParseCommandOption(MagickComposeOptions,MagickFalse,
652ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony                          ArgOption("undefined"));
653ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          if (parse < 0)
654ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedComposeOperator",
655ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony                                      option,arg1);
656ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          _image_info->compose=(CompositeOperator) parse;
65792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
658805a2d48e7e2ed7d699871183ed706699119281canthony          break;
659805a2d48e7e2ed7d699871183ed706699119281canthony        }
660afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("compress",option+1) == 0)
661805a2d48e7e2ed7d699871183ed706699119281canthony        {
66292c93bd35e207736d340f1b32000006a5bf6208eanthony          /* FUTURE: What should be used?  _image_info  or ImageOption ???
6635f867ae6899e46eb35c30b38e9479312880608cfanthony             The former is more efficent, but Crisy prefers the latter!
66472feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
6655f867ae6899e46eb35c30b38e9479312880608cfanthony
66692c93bd35e207736d340f1b32000006a5bf6208eanthony             The coders appears to use _image_info, not Image_Option
6675f867ae6899e46eb35c30b38e9479312880608cfanthony             however the image attribute (for save) is set from the
6685f867ae6899e46eb35c30b38e9479312880608cfanthony             ImageOption!
66972feaa664126c198b9ccd072b6ef181338a76c6canthony
67072feaa664126c198b9ccd072b6ef181338a76c6canthony             Note that "undefined" is a different setting to "none".
6715f867ae6899e46eb35c30b38e9479312880608cfanthony          */
672ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          parse = ParseCommandOption(MagickCompressOptions,MagickFalse,
673ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony                     ArgOption("undefined"));
674ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          if (parse < 0)
675ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedImageCompression",
676ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony                                      option,arg1);
677ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          _image_info->compression=(CompressionType) parse;
67892c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
679805a2d48e7e2ed7d699871183ed706699119281canthony          break;
680805a2d48e7e2ed7d699871183ed706699119281canthony        }
681ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
682805a2d48e7e2ed7d699871183ed706699119281canthony    }
683805a2d48e7e2ed7d699871183ed706699119281canthony    case 'd':
684805a2d48e7e2ed7d699871183ed706699119281canthony    {
685afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("debug",option+1) == 0)
686805a2d48e7e2ed7d699871183ed706699119281canthony        {
68772feaa664126c198b9ccd072b6ef181338a76c6canthony          /* SyncImageSettings() used to set per-image attribute. */
688ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          arg1=ArgOption("none");
689ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          parse = ParseCommandOption(MagickLogEventOptions,MagickFalse,arg1);
690ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          if (parse < 0)
691ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedEventType",
692ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony                                      option,arg1);
693ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          (void) SetLogEventMask(arg1);
694ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          _image_info->debug=IsEventLogging();   /* extract logging*/
69543f425dd7d5b33887726982b28ebfa06f5560636anthony          cli_wand->wand.debug=IsEventLogging();
696805a2d48e7e2ed7d699871183ed706699119281canthony          break;
697805a2d48e7e2ed7d699871183ed706699119281canthony        }
698afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("define",option+1) == 0)
699805a2d48e7e2ed7d699871183ed706699119281canthony        {
70024aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony          if (LocaleNCompare(arg1,"registry:",9) == 0)
701805a2d48e7e2ed7d699871183ed706699119281canthony            {
7025f867ae6899e46eb35c30b38e9479312880608cfanthony              if (IfSetOption)
70392c93bd35e207736d340f1b32000006a5bf6208eanthony                (void) DefineImageRegistry(StringRegistryType,arg1+9,_exception);
7045f867ae6899e46eb35c30b38e9479312880608cfanthony              else
70524aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony                (void) DeleteImageRegistry(arg1+9);
706805a2d48e7e2ed7d699871183ed706699119281canthony              break;
707805a2d48e7e2ed7d699871183ed706699119281canthony            }
70824aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony          /* DefineImageOption() equals SetImageOption() but with '=' */
7095f867ae6899e46eb35c30b38e9479312880608cfanthony          if (IfSetOption)
71092c93bd35e207736d340f1b32000006a5bf6208eanthony            (void) DefineImageOption(_image_info,arg1);
711b9dbc296c59e91df014757130b4e584c7fb6c74ddirk          else if (DeleteImageOption(_image_info,arg1) == MagickFalse)
712ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony            CLIWandExceptArgBreak(OptionError,"NoSuchOption",option,arg1);
713805a2d48e7e2ed7d699871183ed706699119281canthony          break;
714805a2d48e7e2ed7d699871183ed706699119281canthony        }
715afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("delay",option+1) == 0)
716805a2d48e7e2ed7d699871183ed706699119281canthony        {
717afbaed757145095f09d6d614653ed3b58068cb3banthony          /* Only used for new images via AcquireImage()
718afbaed757145095f09d6d614653ed3b58068cb3banthony             FUTURE: Option should also be used for "-morph" (color morphing)
7195f867ae6899e46eb35c30b38e9479312880608cfanthony          */
720ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          arg1=ArgOption("0");
7215d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
722ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
723ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          (void) SetImageOption(_image_info,option+1,arg1);
724805a2d48e7e2ed7d699871183ed706699119281canthony          break;
725805a2d48e7e2ed7d699871183ed706699119281canthony        }
726afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("density",option+1) == 0)
727805a2d48e7e2ed7d699871183ed706699119281canthony        {
72892c93bd35e207736d340f1b32000006a5bf6208eanthony          /* FUTURE: strings used in _image_info attr and _draw_info!
72972feaa664126c198b9ccd072b6ef181338a76c6canthony             Basically as density can be in a XxY form!
73072feaa664126c198b9ccd072b6ef181338a76c6canthony
73172feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
73272feaa664126c198b9ccd072b6ef181338a76c6canthony          */
7335d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IfSetOption && (IsGeometry(arg1) == MagickFalse))
734ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
73592c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
73692c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_image_info->density,ArgOption(NULL));
73792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_draw_info->density,_image_info->density);
738805a2d48e7e2ed7d699871183ed706699119281canthony          break;
739805a2d48e7e2ed7d699871183ed706699119281canthony        }
740afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("depth",option+1) == 0)
741805a2d48e7e2ed7d699871183ed706699119281canthony        {
74272feaa664126c198b9ccd072b6ef181338a76c6canthony          /* This is also a SimpleImageOperator! for 8->16 vaule trunc !!!!
74372feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
74472feaa664126c198b9ccd072b6ef181338a76c6canthony          */
7455d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IfSetOption && (IsGeometry(arg1) == MagickFalse))
746ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
74792c93bd35e207736d340f1b32000006a5bf6208eanthony          _image_info->depth=IfSetOption?StringToUnsignedLong(arg1)
7485f867ae6899e46eb35c30b38e9479312880608cfanthony                                       :MAGICKCORE_QUANTUM_DEPTH;
749805a2d48e7e2ed7d699871183ed706699119281canthony          break;
750805a2d48e7e2ed7d699871183ed706699119281canthony        }
751afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("direction",option+1) == 0)
752805a2d48e7e2ed7d699871183ed706699119281canthony        {
75392c93bd35e207736d340f1b32000006a5bf6208eanthony          /* Image Option is only used to set _draw_info */
754ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          arg1=ArgOption("undefined");
755ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          parse = ParseCommandOption(MagickDirectionOptions,MagickFalse,arg1);
756ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          if (parse < 0)
757ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedDirectionType",
758ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony                                      option,arg1);
759ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          _draw_info->direction=(DirectionType) parse;
760ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          (void) SetImageOption(_image_info,option+1,arg1);
761805a2d48e7e2ed7d699871183ed706699119281canthony          break;
762805a2d48e7e2ed7d699871183ed706699119281canthony        }
763afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("display",option+1) == 0)
764805a2d48e7e2ed7d699871183ed706699119281canthony        {
76592c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_image_info->server_name,ArgOption(NULL));
76692c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_draw_info->server_name,_image_info->server_name);
767805a2d48e7e2ed7d699871183ed706699119281canthony          break;
768805a2d48e7e2ed7d699871183ed706699119281canthony        }
769afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("dispose",option+1) == 0)
770805a2d48e7e2ed7d699871183ed706699119281canthony        {
77172feaa664126c198b9ccd072b6ef181338a76c6canthony          /* only used in setting new images */
772ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          arg1=ArgOption("undefined");
773ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          parse = ParseCommandOption(MagickDisposeOptions,MagickFalse,arg1);
774ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          if (parse < 0)
775ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedDisposeMethod",
776ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony                                      option,arg1);
77792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption("undefined"));
778805a2d48e7e2ed7d699871183ed706699119281canthony          break;
779805a2d48e7e2ed7d699871183ed706699119281canthony        }
780b1d483a6a6a5678173db9d60bec52dd5a37826beanthony      if (LocaleCompare("dissimilarity-threshold",option+1) == 0)
781b1d483a6a6a5678173db9d60bec52dd5a37826beanthony        {
782b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          /* FUTURE: this is only used by CompareImages() which is used
783b1d483a6a6a5678173db9d60bec52dd5a37826beanthony             only by the "compare" CLI program at this time.  */
784b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          arg1=ArgOption(DEFAULT_DISSIMILARITY_THRESHOLD);
7855d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
786b1d483a6a6a5678173db9d60bec52dd5a37826beanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
787b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          (void) SetImageOption(_image_info,option+1,arg1);
788b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          break;
789b1d483a6a6a5678173db9d60bec52dd5a37826beanthony        }
790afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("dither",option+1) == 0)
791805a2d48e7e2ed7d699871183ed706699119281canthony        {
79292c93bd35e207736d340f1b32000006a5bf6208eanthony          /* _image_info attr (on/off), _quantize_info attr (on/off)
79392c93bd35e207736d340f1b32000006a5bf6208eanthony             but also ImageInfo and _quantize_info method!
79472feaa664126c198b9ccd072b6ef181338a76c6canthony             FUTURE: merge the duality of the dithering options
79572feaa664126c198b9ccd072b6ef181338a76c6canthony          */
796cbda611068350bf4459f2dda1951f8823702e129cristy          _image_info->dither = ArgBoolean;
79792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption("none"));
79892c93bd35e207736d340f1b32000006a5bf6208eanthony          _quantize_info->dither_method=(DitherMethod) ParseCommandOption(
799cbda611068350bf4459f2dda1951f8823702e129cristy             MagickDitherOptions,MagickFalse,ArgOption("none"));
80092c93bd35e207736d340f1b32000006a5bf6208eanthony          if (_quantize_info->dither_method == NoDitherMethod)
801cbda611068350bf4459f2dda1951f8823702e129cristy            _image_info->dither = MagickFalse;
802805a2d48e7e2ed7d699871183ed706699119281canthony          break;
803805a2d48e7e2ed7d699871183ed706699119281canthony        }
804ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
805805a2d48e7e2ed7d699871183ed706699119281canthony    }
806805a2d48e7e2ed7d699871183ed706699119281canthony    case 'e':
807805a2d48e7e2ed7d699871183ed706699119281canthony    {
808afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("encoding",option+1) == 0)
809805a2d48e7e2ed7d699871183ed706699119281canthony        {
81092c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_draw_info->encoding,ArgOption("undefined"));
81192c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,_draw_info->encoding);
812805a2d48e7e2ed7d699871183ed706699119281canthony          break;
813805a2d48e7e2ed7d699871183ed706699119281canthony        }
814afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("endian",option+1) == 0)
815805a2d48e7e2ed7d699871183ed706699119281canthony        {
81692c93bd35e207736d340f1b32000006a5bf6208eanthony          /* Both _image_info attr and ImageInfo */
8172a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          arg1 = ArgOption("undefined");
8182a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          parse = ParseCommandOption(MagickEndianOptions,MagickFalse,arg1);
8192a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          if (parse < 0)
8202a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedEndianType",
8212a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony                                      option,arg1);
822f46d42620631d2581e0b6a56456e203e17c427c8anthony          /* FUTURE: check alloc/free of endian string!  - remove? */
823aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy          _image_info->endian=(EndianType) (*arg1);
8242a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          (void) SetImageOption(_image_info,option+1,arg1);
825805a2d48e7e2ed7d699871183ed706699119281canthony          break;
826805a2d48e7e2ed7d699871183ed706699119281canthony        }
827afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("extract",option+1) == 0)
828805a2d48e7e2ed7d699871183ed706699119281canthony        {
82992c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_image_info->extract,ArgOption(NULL));
830805a2d48e7e2ed7d699871183ed706699119281canthony          break;
831805a2d48e7e2ed7d699871183ed706699119281canthony        }
832ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
833805a2d48e7e2ed7d699871183ed706699119281canthony    }
834805a2d48e7e2ed7d699871183ed706699119281canthony    case 'f':
835805a2d48e7e2ed7d699871183ed706699119281canthony    {
836afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("family",option+1) == 0)
8376dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony        {
83892c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_draw_info->family,ArgOption(NULL));
8396dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony          break;
8406dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony        }
841a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony      if (LocaleCompare("features",option+1) == 0)
842a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony        {
843a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          (void) SetImageOption(_image_info,"identify:features",
844f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy            ArgBooleanString);
845a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          if (IfSetOption)
846a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            (void) SetImageArtifact(_image,"verbose","true");
847a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          break;
848a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony        }
849afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("fill",option+1) == 0)
850805a2d48e7e2ed7d699871183ed706699119281canthony        {
85192c93bd35e207736d340f1b32000006a5bf6208eanthony          /* Set "fill" OR "fill-pattern" in _draw_info
852fd706f930f397221c6ba26f112e96e262fb0ba2eanthony             The original fill color is preserved if a fill-pattern is given.
853fd706f930f397221c6ba26f112e96e262fb0ba2eanthony             That way it does not effect other operations that directly using
854fd706f930f397221c6ba26f112e96e262fb0ba2eanthony             the fill color and, can be retored using "+tile".
855afbaed757145095f09d6d614653ed3b58068cb3banthony          */
85672feaa664126c198b9ccd072b6ef181338a76c6canthony          MagickBooleanType
85772feaa664126c198b9ccd072b6ef181338a76c6canthony            status;
8586dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony
8596dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony          ExceptionInfo
8606dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony            *sans;
8616dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony
862fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          PixelInfo
863fd706f930f397221c6ba26f112e96e262fb0ba2eanthony            color;
864fd706f930f397221c6ba26f112e96e262fb0ba2eanthony
8652a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          arg1 = ArgOption("none");  /* +fill turns it off! */
8662a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          (void) SetImageOption(_image_info,option+1,arg1);
86792c93bd35e207736d340f1b32000006a5bf6208eanthony          if (_draw_info->fill_pattern != (Image *) NULL)
86892c93bd35e207736d340f1b32000006a5bf6208eanthony            _draw_info->fill_pattern=DestroyImage(_draw_info->fill_pattern);
8696dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony
87072feaa664126c198b9ccd072b6ef181338a76c6canthony          /* is it a color or a image? -- ignore exceptions */
8716dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony          sans=AcquireExceptionInfo();
8722a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          status=QueryColorCompliance(arg1,AllCompliance,&color,sans);
8736dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony          sans=DestroyExceptionInfo(sans);
874fd706f930f397221c6ba26f112e96e262fb0ba2eanthony
8755d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (status == MagickFalse)
8762a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony            _draw_info->fill_pattern=GetImageCache(_image_info,arg1,_exception);
877fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          else
87892c93bd35e207736d340f1b32000006a5bf6208eanthony            _draw_info->fill=color;
879805a2d48e7e2ed7d699871183ed706699119281canthony          break;
880805a2d48e7e2ed7d699871183ed706699119281canthony        }
881afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("filter",option+1) == 0)
882805a2d48e7e2ed7d699871183ed706699119281canthony        {
88372feaa664126c198b9ccd072b6ef181338a76c6canthony          /* SyncImageSettings() used to set per-image attribute. */
8842a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          arg1 = ArgOption("undefined");
8852a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          parse = ParseCommandOption(MagickFilterOptions,MagickFalse,arg1);
8862a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          if (parse < 0)
8872a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedImageFilter",
8882a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony                                      option,arg1);
8892a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          (void) SetImageOption(_image_info,option+1,arg1);
890805a2d48e7e2ed7d699871183ed706699119281canthony          break;
891805a2d48e7e2ed7d699871183ed706699119281canthony        }
892afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("font",option+1) == 0)
893805a2d48e7e2ed7d699871183ed706699119281canthony        {
89492c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_draw_info->font,ArgOption(NULL));
89592c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_image_info->font,_draw_info->font);
896805a2d48e7e2ed7d699871183ed706699119281canthony          break;
897805a2d48e7e2ed7d699871183ed706699119281canthony        }
898afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("format",option+1) == 0)
899805a2d48e7e2ed7d699871183ed706699119281canthony        {
900dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony          /* FUTURE: why the ping test, you could set ping after this! */
901dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony          /*
902805a2d48e7e2ed7d699871183ed706699119281canthony          register const char
903805a2d48e7e2ed7d699871183ed706699119281canthony            *q;
904805a2d48e7e2ed7d699871183ed706699119281canthony
90524aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony          for (q=strchr(arg1,'%'); q != (char *) NULL; q=strchr(q+1,'%'))
906805a2d48e7e2ed7d699871183ed706699119281canthony            if (strchr("Agkrz@[#",*(q+1)) != (char *) NULL)
90792c93bd35e207736d340f1b32000006a5bf6208eanthony              _image_info->ping=MagickFalse;
908dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony          */
90992c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
910805a2d48e7e2ed7d699871183ed706699119281canthony          break;
911805a2d48e7e2ed7d699871183ed706699119281canthony        }
912afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("fuzz",option+1) == 0)
913805a2d48e7e2ed7d699871183ed706699119281canthony        {
91472feaa664126c198b9ccd072b6ef181338a76c6canthony          /* Option used to set image fuzz! unless blank canvas (from color)
915dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony             Image attribute used for color compare operations
91672feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
91772feaa664126c198b9ccd072b6ef181338a76c6canthony
9182a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony             FUTURE: Can't find anything else using _image_info->fuzz directly!
919a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                     convert structure attribute to 'option' string
9206613bf3ff41a27822bb38c9842cc5c11f4ccb3feanthony          */
9212a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          arg1=ArgOption("0");
9225d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
9232a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
9242a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          _image_info->fuzz=StringToDoubleInterval(arg1,(double)
92580c3775de081817d58849ae9ded5325d397fb1acanthony                QuantumRange+1.0);
9262a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          (void) SetImageOption(_image_info,option+1,arg1);
927805a2d48e7e2ed7d699871183ed706699119281canthony          break;
928805a2d48e7e2ed7d699871183ed706699119281canthony        }
929ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
930805a2d48e7e2ed7d699871183ed706699119281canthony    }
931805a2d48e7e2ed7d699871183ed706699119281canthony    case 'g':
932805a2d48e7e2ed7d699871183ed706699119281canthony    {
933afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("gravity",option+1) == 0)
934805a2d48e7e2ed7d699871183ed706699119281canthony        {
93572feaa664126c198b9ccd072b6ef181338a76c6canthony          /* SyncImageSettings() used to set per-image attribute. */
936fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          arg1 = ArgOption("none");
937fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          parse = ParseCommandOption(MagickGravityOptions,MagickFalse,arg1);
938fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          if (parse < 0)
939fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedGravityType",
940fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony                                      option,arg1);
941fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          _draw_info->gravity=(GravityType) parse;
942e8490973fe48ef47d778e711b28a7b5b11b9e8dfanthony          (void) SetImageOption(_image_info,option+1,arg1);
943805a2d48e7e2ed7d699871183ed706699119281canthony          break;
944805a2d48e7e2ed7d699871183ed706699119281canthony        }
945afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("green-primary",option+1) == 0)
946805a2d48e7e2ed7d699871183ed706699119281canthony        {
947dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony          /* Image chromaticity X,Y  NB: Y=X if Y not defined
94872feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
94972feaa664126c198b9ccd072b6ef181338a76c6canthony             Used directly by many coders
950dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony          */
951f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          arg1=ArgOption("0.0");
9525d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
953fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
954f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          (void) SetImageOption(_image_info,option+1,arg1);
955805a2d48e7e2ed7d699871183ed706699119281canthony          break;
956805a2d48e7e2ed7d699871183ed706699119281canthony        }
957ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
958805a2d48e7e2ed7d699871183ed706699119281canthony    }
959b1d483a6a6a5678173db9d60bec52dd5a37826beanthony    case 'h':
960b1d483a6a6a5678173db9d60bec52dd5a37826beanthony    {
961b1d483a6a6a5678173db9d60bec52dd5a37826beanthony      if (LocaleCompare("highlight-color",option+1) == 0)
962b1d483a6a6a5678173db9d60bec52dd5a37826beanthony        {
963b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          /* FUTURE: this is only used by CompareImages() which is used
964b1d483a6a6a5678173db9d60bec52dd5a37826beanthony             only by the "compare" CLI program at this time.  */
965b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
966b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          break;
967b1d483a6a6a5678173db9d60bec52dd5a37826beanthony        }
968b1d483a6a6a5678173db9d60bec52dd5a37826beanthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
969b1d483a6a6a5678173db9d60bec52dd5a37826beanthony    }
970805a2d48e7e2ed7d699871183ed706699119281canthony    case 'i':
971805a2d48e7e2ed7d699871183ed706699119281canthony    {
97270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy      if (LocaleCompare("intensity",option+1) == 0)
97370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy        {
97470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy          arg1 = ArgOption("undefined");
9758f84fdd76c69a6cab0dd0dddaa7daadf1bdd26eecristy          parse = ParseCommandOption(MagickPixelIntensityOptions,MagickFalse,
9768f84fdd76c69a6cab0dd0dddaa7daadf1bdd26eecristy            arg1);
97770e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy          if (parse < 0)
9788f84fdd76c69a6cab0dd0dddaa7daadf1bdd26eecristy            CLIWandExceptArgBreak(OptionError,"UnrecognizedIntensityType",
9798f84fdd76c69a6cab0dd0dddaa7daadf1bdd26eecristy              option,arg1);
98070e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy          (void) SetImageOption(_image_info,option+1,arg1);
98170e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy          break;
98270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy        }
983afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("intent",option+1) == 0)
984805a2d48e7e2ed7d699871183ed706699119281canthony        {
98572feaa664126c198b9ccd072b6ef181338a76c6canthony          /* Only used by coders: MIFF, MPC, BMP, PNG
986dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony             and for image profile call to AcquireTransformThreadSet()
98772feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
988dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony          */
98970e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy          arg1 = ArgOption("undefined");
990fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          parse = ParseCommandOption(MagickIntentOptions,MagickFalse,arg1);
991fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          if (parse < 0)
992fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedIntentType",
993fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony                                      option,arg1);
994fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          (void) SetImageOption(_image_info,option+1,arg1);
995805a2d48e7e2ed7d699871183ed706699119281canthony          break;
996805a2d48e7e2ed7d699871183ed706699119281canthony        }
997afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("interlace",option+1) == 0)
998805a2d48e7e2ed7d699871183ed706699119281canthony        {
99992c93bd35e207736d340f1b32000006a5bf6208eanthony          /* _image_info is directly used by coders (so why an image setting?)
100072feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
1001dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony          */
1002fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          arg1 = ArgOption("undefined");
1003fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          parse = ParseCommandOption(MagickInterlaceOptions,MagickFalse,arg1);
1004fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          if (parse < 0)
1005fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedInterlaceType",
1006fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony                                      option,arg1);
1007fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          _image_info->interlace=(InterlaceType) parse;
1008fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          (void) SetImageOption(_image_info,option+1,arg1);
1009805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1010805a2d48e7e2ed7d699871183ed706699119281canthony        }
1011afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("interline-spacing",option+1) == 0)
1012805a2d48e7e2ed7d699871183ed706699119281canthony        {
10135d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IfSetOption && (IsGeometry(arg1) == MagickFalse))
1014fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
101592c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1, ArgOption(NULL));
101692c93bd35e207736d340f1b32000006a5bf6208eanthony          _draw_info->interline_spacing=StringToDouble(ArgOption("0"),
101772feaa664126c198b9ccd072b6ef181338a76c6canthony               (char **) NULL);
1018805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1019805a2d48e7e2ed7d699871183ed706699119281canthony        }
1020afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("interpolate",option+1) == 0)
1021805a2d48e7e2ed7d699871183ed706699119281canthony        {
1022fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          /* SyncImageSettings() used to set per-image attribute. */
1023fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          arg1 = ArgOption("undefined");
1024fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          parse = ParseCommandOption(MagickInterpolateOptions,MagickFalse,arg1);
1025fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          if (parse < 0)
1026fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedInterpolateMethod",
1027fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony                                      option,arg1);
1028fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          (void) SetImageOption(_image_info,option+1,arg1);
1029805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1030805a2d48e7e2ed7d699871183ed706699119281canthony        }
1031afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("interword-spacing",option+1) == 0)
1032805a2d48e7e2ed7d699871183ed706699119281canthony        {
10335d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IfSetOption && (IsGeometry(arg1) == MagickFalse))
1034fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
103592c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1, ArgOption(NULL));
103692c93bd35e207736d340f1b32000006a5bf6208eanthony          _draw_info->interword_spacing=StringToDouble(ArgOption("0"),(char **) NULL);
1037805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1038805a2d48e7e2ed7d699871183ed706699119281canthony        }
1039ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1040805a2d48e7e2ed7d699871183ed706699119281canthony    }
1041805a2d48e7e2ed7d699871183ed706699119281canthony    case 'k':
1042805a2d48e7e2ed7d699871183ed706699119281canthony    {
1043afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("kerning",option+1) == 0)
1044805a2d48e7e2ed7d699871183ed706699119281canthony        {
10455d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IfSetOption && (IsGeometry(arg1) == MagickFalse))
1046fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
104792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
104892c93bd35e207736d340f1b32000006a5bf6208eanthony          _draw_info->kerning=StringToDouble(ArgOption("0"),(char **) NULL);
1049805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1050805a2d48e7e2ed7d699871183ed706699119281canthony        }
1051ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1052805a2d48e7e2ed7d699871183ed706699119281canthony    }
1053805a2d48e7e2ed7d699871183ed706699119281canthony    case 'l':
1054805a2d48e7e2ed7d699871183ed706699119281canthony    {
1055afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("label",option+1) == 0)
1056805a2d48e7e2ed7d699871183ed706699119281canthony        {
105772feaa664126c198b9ccd072b6ef181338a76c6canthony          /* only used for new images - not in SyncImageOptions() */
105892c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
1059805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1060805a2d48e7e2ed7d699871183ed706699119281canthony        }
1061756cd0d228823ea405498ec6b2e9b8843beaca96anthony      if (LocaleCompare("limit",option+1) == 0)
1062756cd0d228823ea405498ec6b2e9b8843beaca96anthony        {
1063756cd0d228823ea405498ec6b2e9b8843beaca96anthony          MagickSizeType
1064756cd0d228823ea405498ec6b2e9b8843beaca96anthony            limit;
1065756cd0d228823ea405498ec6b2e9b8843beaca96anthony
1066756cd0d228823ea405498ec6b2e9b8843beaca96anthony          limit=MagickResourceInfinity;
1067756cd0d228823ea405498ec6b2e9b8843beaca96anthony          parse= ParseCommandOption(MagickResourceOptions,MagickFalse,arg1);
1068756cd0d228823ea405498ec6b2e9b8843beaca96anthony          if ( parse < 0 )
1069756cd0d228823ea405498ec6b2e9b8843beaca96anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedResourceType",
1070756cd0d228823ea405498ec6b2e9b8843beaca96anthony                option,arg1);
1071756cd0d228823ea405498ec6b2e9b8843beaca96anthony          if (LocaleCompare("unlimited",arg2) != 0)
1072756cd0d228823ea405498ec6b2e9b8843beaca96anthony            limit=(MagickSizeType) SiPrefixToDoubleInterval(arg2,100.0);
1073756cd0d228823ea405498ec6b2e9b8843beaca96anthony          (void) SetMagickResourceLimit((ResourceType)parse,limit);
1074756cd0d228823ea405498ec6b2e9b8843beaca96anthony          break;
1075756cd0d228823ea405498ec6b2e9b8843beaca96anthony        }
1076afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("log",option+1) == 0)
1077805a2d48e7e2ed7d699871183ed706699119281canthony        {
1078fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          if (IfSetOption) {
1079fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            if ((strchr(arg1,'%') == (char *) NULL))
1080fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony              CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
108124aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony            (void) SetLogFormat(arg1);
1082fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          }
1083805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1084805a2d48e7e2ed7d699871183ed706699119281canthony        }
1085975a8d7aba7678845112e4d2c5a155011f35a3abanthony      if (LocaleCompare("lowlight-color",option+1) == 0)
1086975a8d7aba7678845112e4d2c5a155011f35a3abanthony        {
1087b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          /* FUTURE: this is only used by CompareImages() which is used
1088b1d483a6a6a5678173db9d60bec52dd5a37826beanthony             only by the "compare" CLI program at this time.  */
1089975a8d7aba7678845112e4d2c5a155011f35a3abanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
1090975a8d7aba7678845112e4d2c5a155011f35a3abanthony          break;
1091975a8d7aba7678845112e4d2c5a155011f35a3abanthony        }
1092afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("loop",option+1) == 0)
1093805a2d48e7e2ed7d699871183ed706699119281canthony        {
109472feaa664126c198b9ccd072b6ef181338a76c6canthony          /* SyncImageSettings() used to set per-image attribute. */
1095fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          arg1=ArgOption("0");
10965d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
1097fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
1098fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          (void) SetImageOption(_image_info,option+1,arg1);
1099805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1100805a2d48e7e2ed7d699871183ed706699119281canthony        }
1101ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1102805a2d48e7e2ed7d699871183ed706699119281canthony    }
1103805a2d48e7e2ed7d699871183ed706699119281canthony    case 'm':
1104805a2d48e7e2ed7d699871183ed706699119281canthony    {
1105b1d483a6a6a5678173db9d60bec52dd5a37826beanthony      if (LocaleCompare("metric",option+1) == 0)
1106b1d483a6a6a5678173db9d60bec52dd5a37826beanthony        {
1107b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          /* FUTURE: this is only used by CompareImages() which is used
1108b1d483a6a6a5678173db9d60bec52dd5a37826beanthony             only by the "compare" CLI program at this time.  */
1109b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          parse=ParseCommandOption(MagickMetricOptions,MagickFalse,arg1);
1110b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          if ( parse < 0 )
1111b1d483a6a6a5678173db9d60bec52dd5a37826beanthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedMetricType",
1112b1d483a6a6a5678173db9d60bec52dd5a37826beanthony                option,arg1);
1113b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
1114cd358fcc24e0be863b1d6e1917e799fc04add92aanthony          break;
1115805a2d48e7e2ed7d699871183ed706699119281canthony        }
1116bd4a3c228c0e785517b8ab630b2cc6095373f710cristy      if (LocaleCompare("moments",option+1) == 0)
1117bd4a3c228c0e785517b8ab630b2cc6095373f710cristy        {
1118bd4a3c228c0e785517b8ab630b2cc6095373f710cristy          (void) SetImageOption(_image_info,"identify:moments",
1119bd4a3c228c0e785517b8ab630b2cc6095373f710cristy            ArgBooleanString);
1120bd4a3c228c0e785517b8ab630b2cc6095373f710cristy          if (IfSetOption)
1121bd4a3c228c0e785517b8ab630b2cc6095373f710cristy            (void) SetImageArtifact(_image,"verbose","true");
1122bd4a3c228c0e785517b8ab630b2cc6095373f710cristy          break;
1123bd4a3c228c0e785517b8ab630b2cc6095373f710cristy        }
1124afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("monitor",option+1) == 0)
1125805a2d48e7e2ed7d699871183ed706699119281canthony        {
112692c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageInfoProgressMonitor(_image_info, IfSetOption?
112731f1bf7bb6ee2698a2afab42ee0329b11663636canthony                MonitorProgress: (MagickProgressMonitor) NULL, (void *) NULL);
1128805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1129805a2d48e7e2ed7d699871183ed706699119281canthony        }
1130afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("monochrome",option+1) == 0)
1131805a2d48e7e2ed7d699871183ed706699119281canthony        {
113224aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony          /* Setting (used by some input coders!) -- why?
113324aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony             Warning: This is also Special '-type' SimpleOperator
113472feaa664126c198b9ccd072b6ef181338a76c6canthony          */
113592c93bd35e207736d340f1b32000006a5bf6208eanthony          _image_info->monochrome= ArgBoolean;
1136805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1137805a2d48e7e2ed7d699871183ed706699119281canthony        }
1138ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1139805a2d48e7e2ed7d699871183ed706699119281canthony    }
1140805a2d48e7e2ed7d699871183ed706699119281canthony    case 'o':
1141805a2d48e7e2ed7d699871183ed706699119281canthony    {
1142afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("orient",option+1) == 0)
1143805a2d48e7e2ed7d699871183ed706699119281canthony        {
114472feaa664126c198b9ccd072b6ef181338a76c6canthony          /* Is not used when defining for new images.
1145dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony             This makes it more of a 'operation' than a setting
114672feaa664126c198b9ccd072b6ef181338a76c6canthony             FUTURE: make set meta-data operator instead.
114772feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
1148dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony          */
11497bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          parse=ParseCommandOption(MagickOrientationOptions,MagickFalse,
11507bc87995f5fcb67d01e8cad3e80b0024b42e942danthony               ArgOption("undefined"));
11517bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          if (parse < 0)
11527bc87995f5fcb67d01e8cad3e80b0024b42e942danthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedImageOrientation",
11537bc87995f5fcb67d01e8cad3e80b0024b42e942danthony                                      option,arg1);
11547bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          _image_info->orientation=(OrientationType)parse;
115592c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1, ArgOption(NULL));
1156805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1157805a2d48e7e2ed7d699871183ed706699119281canthony        }
1158ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1159805a2d48e7e2ed7d699871183ed706699119281canthony    }
1160805a2d48e7e2ed7d699871183ed706699119281canthony    case 'p':
1161805a2d48e7e2ed7d699871183ed706699119281canthony    {
1162afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("page",option+1) == 0)
1163805a2d48e7e2ed7d699871183ed706699119281canthony        {
11647bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          /* Only used for new images and image generators.
116572feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute. ?????
116672feaa664126c198b9ccd072b6ef181338a76c6canthony             That last is WRONG!!!!
11677bc87995f5fcb67d01e8cad3e80b0024b42e942danthony             FUTURE: adjust named 'page' sizes according density
116872feaa664126c198b9ccd072b6ef181338a76c6canthony          */
1169805a2d48e7e2ed7d699871183ed706699119281canthony          char
1170805a2d48e7e2ed7d699871183ed706699119281canthony            *canonical_page,
1171151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy            page[MagickPathExtent];
1172805a2d48e7e2ed7d699871183ed706699119281canthony
1173805a2d48e7e2ed7d699871183ed706699119281canthony          const char
1174805a2d48e7e2ed7d699871183ed706699119281canthony            *image_option;
1175805a2d48e7e2ed7d699871183ed706699119281canthony
1176805a2d48e7e2ed7d699871183ed706699119281canthony          MagickStatusType
1177805a2d48e7e2ed7d699871183ed706699119281canthony            flags;
1178805a2d48e7e2ed7d699871183ed706699119281canthony
1179805a2d48e7e2ed7d699871183ed706699119281canthony          RectangleInfo
1180805a2d48e7e2ed7d699871183ed706699119281canthony            geometry;
1181805a2d48e7e2ed7d699871183ed706699119281canthony
1182dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony          if (!IfSetOption)
1183805a2d48e7e2ed7d699871183ed706699119281canthony            {
118492c93bd35e207736d340f1b32000006a5bf6208eanthony              (void) DeleteImageOption(_image_info,option+1);
118592c93bd35e207736d340f1b32000006a5bf6208eanthony              (void) CloneString(&_image_info->page,(char *) NULL);
1186805a2d48e7e2ed7d699871183ed706699119281canthony              break;
1187805a2d48e7e2ed7d699871183ed706699119281canthony            }
1188805a2d48e7e2ed7d699871183ed706699119281canthony          (void) ResetMagickMemory(&geometry,0,sizeof(geometry));
118992c93bd35e207736d340f1b32000006a5bf6208eanthony          image_option=GetImageOption(_image_info,"page");
1190805a2d48e7e2ed7d699871183ed706699119281canthony          if (image_option != (const char *) NULL)
1191805a2d48e7e2ed7d699871183ed706699119281canthony            flags=ParseAbsoluteGeometry(image_option,&geometry);
119224aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony          canonical_page=GetPageGeometry(arg1);
1193805a2d48e7e2ed7d699871183ed706699119281canthony          flags=ParseAbsoluteGeometry(canonical_page,&geometry);
1194805a2d48e7e2ed7d699871183ed706699119281canthony          canonical_page=DestroyString(canonical_page);
1195151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy          (void) FormatLocaleString(page,MagickPathExtent,"%lux%lu",
1196805a2d48e7e2ed7d699871183ed706699119281canthony            (unsigned long) geometry.width,(unsigned long) geometry.height);
1197805a2d48e7e2ed7d699871183ed706699119281canthony          if (((flags & XValue) != 0) || ((flags & YValue) != 0))
1198151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy            (void) FormatLocaleString(page,MagickPathExtent,"%lux%lu%+ld%+ld",
1199805a2d48e7e2ed7d699871183ed706699119281canthony              (unsigned long) geometry.width,(unsigned long) geometry.height,
1200805a2d48e7e2ed7d699871183ed706699119281canthony              (long) geometry.x,(long) geometry.y);
120192c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,page);
120292c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_image_info->page,page);
1203805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1204805a2d48e7e2ed7d699871183ed706699119281canthony        }
1205afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("ping",option+1) == 0)
1206805a2d48e7e2ed7d699871183ed706699119281canthony        {
120792c93bd35e207736d340f1b32000006a5bf6208eanthony          _image_info->ping = ArgBoolean;
1208805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1209805a2d48e7e2ed7d699871183ed706699119281canthony        }
1210afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("pointsize",option+1) == 0)
1211805a2d48e7e2ed7d699871183ed706699119281canthony        {
1212f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          if (IfSetOption) {
12135d0a441fe7d90e3449f2103ed88c32cec28595e6dirk            if (IsGeometry(arg1) == MagickFalse)
1214f42014dc55e8d21355ea3d17372e2d9c14b07641anthony              CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
1215f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            _image_info->pointsize =
1216f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            _draw_info->pointsize =
1217f42014dc55e8d21355ea3d17372e2d9c14b07641anthony              StringToDouble(arg1,(char **) NULL);
1218f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          }
1219f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          else {
1220f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            _image_info->pointsize=0.0; /* unset pointsize */
1221f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            _draw_info->pointsize=12.0;
1222f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          }
1223805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1224805a2d48e7e2ed7d699871183ed706699119281canthony        }
1225afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("precision",option+1) == 0)
1226805a2d48e7e2ed7d699871183ed706699119281canthony        {
1227f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          arg1=ArgOption("-1");
12285d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
1229f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
1230f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          (void) SetMagickPrecision(StringToInteger(arg1));
1231805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1232805a2d48e7e2ed7d699871183ed706699119281canthony        }
1233ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1234805a2d48e7e2ed7d699871183ed706699119281canthony    }
1235805a2d48e7e2ed7d699871183ed706699119281canthony    case 'q':
1236805a2d48e7e2ed7d699871183ed706699119281canthony    {
1237afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("quality",option+1) == 0)
1238805a2d48e7e2ed7d699871183ed706699119281canthony        {
12395d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
12407bc87995f5fcb67d01e8cad3e80b0024b42e942danthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
1241f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          _image_info->quality= IfSetOption ? StringToUnsignedLong(arg1)
1242f42014dc55e8d21355ea3d17372e2d9c14b07641anthony                                            : UNDEFINED_COMPRESSION_QUALITY;
124392c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
1244805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1245805a2d48e7e2ed7d699871183ed706699119281canthony        }
1246afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("quantize",option+1) == 0)
1247afbaed757145095f09d6d614653ed3b58068cb3banthony        {
124892c93bd35e207736d340f1b32000006a5bf6208eanthony          /* Just a set direct in _quantize_info */
12497bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          arg1=ArgOption("undefined");
12507bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          parse=ParseCommandOption(MagickColorspaceOptions,MagickFalse,arg1);
12517bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          if (parse < 0)
12527bc87995f5fcb67d01e8cad3e80b0024b42e942danthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedColorspace",
12537bc87995f5fcb67d01e8cad3e80b0024b42e942danthony                 option,arg1);
12547bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          _quantize_info->colorspace=(ColorspaceType)parse;
1255afbaed757145095f09d6d614653ed3b58068cb3banthony          break;
1256afbaed757145095f09d6d614653ed3b58068cb3banthony        }
1257afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("quiet",option+1) == 0)
1258805a2d48e7e2ed7d699871183ed706699119281canthony        {
1259f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          /* FUTURE: if two -quiet is performed you can not do +quiet!
1260f42014dc55e8d21355ea3d17372e2d9c14b07641anthony             This needs to be checked over thoughly.
1261f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          */
1262805a2d48e7e2ed7d699871183ed706699119281canthony          static WarningHandler
1263805a2d48e7e2ed7d699871183ed706699119281canthony            warning_handler = (WarningHandler) NULL;
126472feaa664126c198b9ccd072b6ef181338a76c6canthony
1265afbaed757145095f09d6d614653ed3b58068cb3banthony          WarningHandler
1266afbaed757145095f09d6d614653ed3b58068cb3banthony            tmp = SetWarningHandler((WarningHandler) NULL);
1267805a2d48e7e2ed7d699871183ed706699119281canthony
1268afbaed757145095f09d6d614653ed3b58068cb3banthony          if ( tmp != (WarningHandler) NULL)
1269afbaed757145095f09d6d614653ed3b58068cb3banthony            warning_handler = tmp; /* remember the old handler */
1270afbaed757145095f09d6d614653ed3b58068cb3banthony          if (!IfSetOption)        /* set the old handler */
1271afbaed757145095f09d6d614653ed3b58068cb3banthony            warning_handler=SetWarningHandler(warning_handler);
1272805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1273805a2d48e7e2ed7d699871183ed706699119281canthony        }
1274ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1275805a2d48e7e2ed7d699871183ed706699119281canthony    }
1276805a2d48e7e2ed7d699871183ed706699119281canthony    case 'r':
1277805a2d48e7e2ed7d699871183ed706699119281canthony    {
1278afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("red-primary",option+1) == 0)
1279805a2d48e7e2ed7d699871183ed706699119281canthony        {
1280dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony          /* Image chromaticity X,Y  NB: Y=X if Y not defined
1281dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony             Used by many coders
128272feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
1283dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony          */
1284f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          arg1=ArgOption("0.0");
12855d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
1286fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
1287f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          (void) SetImageOption(_image_info,option+1,arg1);
1288805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1289805a2d48e7e2ed7d699871183ed706699119281canthony        }
1290b0f7a18e64b0ff9ab853f2006c39d62e32905f65cristy      if (LocaleCompare("regard-warnings",option+1) == 0)
1291e5fcd3620310f12690ba2d00b4f5fa62f1bd1a6aanthony        /* FUTURE: to be replaced by a 'fatal-level' type setting */
1292b0f7a18e64b0ff9ab853f2006c39d62e32905f65cristy        break;
1293afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("render",option+1) == 0)
1294afbaed757145095f09d6d614653ed3b58068cb3banthony        {
129592c93bd35e207736d340f1b32000006a5bf6208eanthony          /* _draw_info only setting */
129692c93bd35e207736d340f1b32000006a5bf6208eanthony          _draw_info->render= ArgBooleanNot;
1297afbaed757145095f09d6d614653ed3b58068cb3banthony          break;
1298afbaed757145095f09d6d614653ed3b58068cb3banthony        }
1299756cd0d228823ea405498ec6b2e9b8843beaca96anthony      if (LocaleCompare("respect-parenthesis",option+1) == 0)
1300756cd0d228823ea405498ec6b2e9b8843beaca96anthony        {
1301756cd0d228823ea405498ec6b2e9b8843beaca96anthony          /* link image and setting stacks - option is itself saved on stack! */
1302756cd0d228823ea405498ec6b2e9b8843beaca96anthony          (void) SetImageOption(_image_info,option+1,ArgBooleanString);
1303756cd0d228823ea405498ec6b2e9b8843beaca96anthony          break;
1304756cd0d228823ea405498ec6b2e9b8843beaca96anthony        }
1305ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1306805a2d48e7e2ed7d699871183ed706699119281canthony    }
1307805a2d48e7e2ed7d699871183ed706699119281canthony    case 's':
1308805a2d48e7e2ed7d699871183ed706699119281canthony    {
1309afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("sampling-factor",option+1) == 0)
1310805a2d48e7e2ed7d699871183ed706699119281canthony        {
1311afbaed757145095f09d6d614653ed3b58068cb3banthony          /* FUTURE: should be converted to jpeg:sampling_factor */
13125d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IfSetOption && (IsGeometry(arg1) == MagickFalse))
1313f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
131492c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_image_info->sampling_factor,ArgOption(NULL));
1315805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1316805a2d48e7e2ed7d699871183ed706699119281canthony        }
1317afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("scene",option+1) == 0)
1318805a2d48e7e2ed7d699871183ed706699119281canthony        {
1319f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          /* SyncImageSettings() used to set this as a per-image attribute.
132072feaa664126c198b9ccd072b6ef181338a76c6canthony             What ??? Why ????
132172feaa664126c198b9ccd072b6ef181338a76c6canthony          */
13225d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IfSetOption && (IsGeometry(arg1) == MagickFalse))
1323f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
132492c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
132592c93bd35e207736d340f1b32000006a5bf6208eanthony          _image_info->scene=StringToUnsignedLong(ArgOption("0"));
1326805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1327805a2d48e7e2ed7d699871183ed706699119281canthony        }
1328afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("seed",option+1) == 0)
1329805a2d48e7e2ed7d699871183ed706699119281canthony        {
13305d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
1331f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
1332d7761bbc118576cf4141d0e33f3c53157da63243cristy          SetRandomSecretKey(
1333a30f8e619f24abab21448ee8019794e47e0baed9cristy               IfSetOption ? (unsigned long) StringToUnsignedLong(arg1)
1334a30f8e619f24abab21448ee8019794e47e0baed9cristy                           : (unsigned long) time((time_t *) NULL) );
1335805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1336805a2d48e7e2ed7d699871183ed706699119281canthony        }
1337afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("size",option+1) == 0)
1338805a2d48e7e2ed7d699871183ed706699119281canthony        {
133992c93bd35e207736d340f1b32000006a5bf6208eanthony          /* FUTURE: string in _image_info -- convert to Option ???
1340afbaed757145095f09d6d614653ed3b58068cb3banthony             Look at the special handling for "size" in SetImageOption()
134174b1cfc16264081b41a57f6287d72283c8881f0aanthony           */
134292c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_image_info->size,ArgOption(NULL));
1343afbaed757145095f09d6d614653ed3b58068cb3banthony          break;
1344afbaed757145095f09d6d614653ed3b58068cb3banthony        }
1345afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("stretch",option+1) == 0)
1346afbaed757145095f09d6d614653ed3b58068cb3banthony        {
1347f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          arg1=ArgOption("undefined");
1348f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          parse = ParseCommandOption(MagickStretchOptions,MagickFalse,arg1);
1349f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          if (parse < 0)
1350f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedStretchType",
1351f42014dc55e8d21355ea3d17372e2d9c14b07641anthony                 option,arg1);
1352f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          _draw_info->stretch=(StretchType) parse;
1353805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1354805a2d48e7e2ed7d699871183ed706699119281canthony        }
1355afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("stroke",option+1) == 0)
1356805a2d48e7e2ed7d699871183ed706699119281canthony        {
1357afbaed757145095f09d6d614653ed3b58068cb3banthony          /* set stroke color OR stroke-pattern
1358fd706f930f397221c6ba26f112e96e262fb0ba2eanthony             UPDATE: ensure stroke color is not destroyed is a pattern
1359fd706f930f397221c6ba26f112e96e262fb0ba2eanthony             is given. Just in case the color is also used for other purposes.
1360afbaed757145095f09d6d614653ed3b58068cb3banthony           */
136172feaa664126c198b9ccd072b6ef181338a76c6canthony          MagickBooleanType
136272feaa664126c198b9ccd072b6ef181338a76c6canthony            status;
1363afbaed757145095f09d6d614653ed3b58068cb3banthony
1364afbaed757145095f09d6d614653ed3b58068cb3banthony          ExceptionInfo
1365afbaed757145095f09d6d614653ed3b58068cb3banthony            *sans;
1366afbaed757145095f09d6d614653ed3b58068cb3banthony
1367fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          PixelInfo
1368fd706f930f397221c6ba26f112e96e262fb0ba2eanthony            color;
1369fd706f930f397221c6ba26f112e96e262fb0ba2eanthony
13702a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          arg1 = ArgOption("none");  /* +fill turns it off! */
13712a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          (void) SetImageOption(_image_info,option+1,arg1);
137292c93bd35e207736d340f1b32000006a5bf6208eanthony          if (_draw_info->stroke_pattern != (Image *) NULL)
137392c93bd35e207736d340f1b32000006a5bf6208eanthony            _draw_info->stroke_pattern=DestroyImage(_draw_info->stroke_pattern);
137472feaa664126c198b9ccd072b6ef181338a76c6canthony
137572feaa664126c198b9ccd072b6ef181338a76c6canthony          /* is it a color or a image? -- ignore exceptions */
1376afbaed757145095f09d6d614653ed3b58068cb3banthony          sans=AcquireExceptionInfo();
13772a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          status=QueryColorCompliance(arg1,AllCompliance,&color,sans);
1378afbaed757145095f09d6d614653ed3b58068cb3banthony          sans=DestroyExceptionInfo(sans);
1379fd706f930f397221c6ba26f112e96e262fb0ba2eanthony
13805d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (status == MagickFalse)
13812a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony            _draw_info->stroke_pattern=GetImageCache(_image_info,arg1,_exception);
1382fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          else
138392c93bd35e207736d340f1b32000006a5bf6208eanthony            _draw_info->stroke=color;
1384805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1385805a2d48e7e2ed7d699871183ed706699119281canthony        }
1386afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("strokewidth",option+1) == 0)
1387805a2d48e7e2ed7d699871183ed706699119281canthony        {
13885d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IfSetOption && (IsGeometry(arg1) == MagickFalse))
1389f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
139092c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
139192c93bd35e207736d340f1b32000006a5bf6208eanthony          _draw_info->stroke_width=StringToDouble(ArgOption("1.0"),
139272feaa664126c198b9ccd072b6ef181338a76c6canthony               (char **) NULL);
1393afbaed757145095f09d6d614653ed3b58068cb3banthony          break;
1394afbaed757145095f09d6d614653ed3b58068cb3banthony        }
1395afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("style",option+1) == 0)
1396afbaed757145095f09d6d614653ed3b58068cb3banthony        {
1397f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          arg1=ArgOption("undefined");
1398f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          parse = ParseCommandOption(MagickStyleOptions,MagickFalse,arg1);
1399f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          if (parse < 0)
1400f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedStyleType",
1401f42014dc55e8d21355ea3d17372e2d9c14b07641anthony                 option,arg1);
1402f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          _draw_info->style=(StyleType) parse;
1403805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1404805a2d48e7e2ed7d699871183ed706699119281canthony        }
1405cd358fcc24e0be863b1d6e1917e799fc04add92aanthony#if 0
1406b1d483a6a6a5678173db9d60bec52dd5a37826beanthony      if (LocaleCompare("subimage-search",option+1) == 0)
1407b1d483a6a6a5678173db9d60bec52dd5a37826beanthony        {
1408b1d483a6a6a5678173db9d60bec52dd5a37826beanthony        /* FUTURE: this is only used by CompareImages() which is used
1409b1d483a6a6a5678173db9d60bec52dd5a37826beanthony            only by the "compare" CLI program at this time.  */
1410b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          (void) SetImageOption(_image_info,option+1,ArgBooleanString);
1411b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          break;
1412b1d483a6a6a5678173db9d60bec52dd5a37826beanthony        }
1413cd358fcc24e0be863b1d6e1917e799fc04add92aanthony#endif
1414afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("synchronize",option+1) == 0)
1415805a2d48e7e2ed7d699871183ed706699119281canthony        {
1416f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          /* FUTURE: syncronize to storage - but what does that mean? */
141792c93bd35e207736d340f1b32000006a5bf6208eanthony          _image_info->synchronize = ArgBoolean;
1418805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1419805a2d48e7e2ed7d699871183ed706699119281canthony        }
1420ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1421805a2d48e7e2ed7d699871183ed706699119281canthony    }
1422805a2d48e7e2ed7d699871183ed706699119281canthony    case 't':
1423805a2d48e7e2ed7d699871183ed706699119281canthony    {
1424afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("taint",option+1) == 0)
1425805a2d48e7e2ed7d699871183ed706699119281canthony        {
142672feaa664126c198b9ccd072b6ef181338a76c6canthony          /* SyncImageSettings() used to set per-image attribute. */
142792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgBooleanString);
1428805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1429805a2d48e7e2ed7d699871183ed706699119281canthony        }
1430afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("texture",option+1) == 0)
1431805a2d48e7e2ed7d699871183ed706699119281canthony        {
14324837ac2f5e9dbb766129a91aa11cf7c547477119anthony          /* Note: arguments do not have percent escapes expanded */
143352bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          /* FUTURE: move _image_info string to option splay-tree
143452bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony             Other than "montage" what uses "texture" ????
143552bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          */
143692c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_image_info->texture,ArgOption(NULL));
1437afbaed757145095f09d6d614653ed3b58068cb3banthony          break;
1438afbaed757145095f09d6d614653ed3b58068cb3banthony        }
1439afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("tile",option+1) == 0)
1440afbaed757145095f09d6d614653ed3b58068cb3banthony        {
14414837ac2f5e9dbb766129a91aa11cf7c547477119anthony          /* Note: arguments do not have percent escapes expanded */
144292c93bd35e207736d340f1b32000006a5bf6208eanthony          _draw_info->fill_pattern=IfSetOption
144392c93bd35e207736d340f1b32000006a5bf6208eanthony                                 ?GetImageCache(_image_info,arg1,_exception)
144492c93bd35e207736d340f1b32000006a5bf6208eanthony                                 :DestroyImage(_draw_info->fill_pattern);
1445805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1446805a2d48e7e2ed7d699871183ed706699119281canthony        }
1447afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("tile-offset",option+1) == 0)
1448805a2d48e7e2ed7d699871183ed706699119281canthony        {
144972feaa664126c198b9ccd072b6ef181338a76c6canthony          /* SyncImageSettings() used to set per-image attribute. ??? */
145052bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          arg1=ArgOption("0");
14515d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
145252bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
145352bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          (void) SetImageOption(_image_info,option+1,arg1);
1454805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1455805a2d48e7e2ed7d699871183ed706699119281canthony        }
1456afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("transparent-color",option+1) == 0)
1457805a2d48e7e2ed7d699871183ed706699119281canthony        {
145892c93bd35e207736d340f1b32000006a5bf6208eanthony          /* FUTURE: both _image_info attribute & ImageOption in use!
145992c93bd35e207736d340f1b32000006a5bf6208eanthony             _image_info only used for generating new images.
146072feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
146172feaa664126c198b9ccd072b6ef181338a76c6canthony
1462afbaed757145095f09d6d614653ed3b58068cb3banthony             Note that +transparent-color, means fall-back to image
1463afbaed757145095f09d6d614653ed3b58068cb3banthony             attribute so ImageOption is deleted, not set to a default.
1464afbaed757145095f09d6d614653ed3b58068cb3banthony          */
14655d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IfSetOption && (IsGeometry(arg1) == MagickFalse))
146652bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
146792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
146872feaa664126c198b9ccd072b6ef181338a76c6canthony          (void) QueryColorCompliance(ArgOption("none"),AllCompliance,
146992c93bd35e207736d340f1b32000006a5bf6208eanthony              &_image_info->transparent_color,_exception);
1470805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1471805a2d48e7e2ed7d699871183ed706699119281canthony        }
1472afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("treedepth",option+1) == 0)
147331f1bf7bb6ee2698a2afab42ee0329b11663636canthony        {
147492c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
147592c93bd35e207736d340f1b32000006a5bf6208eanthony          _quantize_info->tree_depth=StringToUnsignedLong(ArgOption("0"));
147631f1bf7bb6ee2698a2afab42ee0329b11663636canthony          break;
147731f1bf7bb6ee2698a2afab42ee0329b11663636canthony        }
1478afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("type",option+1) == 0)
1479805a2d48e7e2ed7d699871183ed706699119281canthony        {
148072feaa664126c198b9ccd072b6ef181338a76c6canthony          /* SyncImageSettings() used to set per-image attribute. */
148152bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          parse=ParseCommandOption(MagickTypeOptions,MagickFalse,
148252bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony               ArgOption("undefined"));
148352bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          if (parse < 0)
148452bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedImageType",
148552bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony                 option,arg1);
148652bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          _image_info->type=(ImageType) parse;
148792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
1488805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1489805a2d48e7e2ed7d699871183ed706699119281canthony        }
1490ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1491805a2d48e7e2ed7d699871183ed706699119281canthony    }
1492805a2d48e7e2ed7d699871183ed706699119281canthony    case 'u':
1493805a2d48e7e2ed7d699871183ed706699119281canthony    {
1494afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("undercolor",option+1) == 0)
1495805a2d48e7e2ed7d699871183ed706699119281canthony        {
149692c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
149772feaa664126c198b9ccd072b6ef181338a76c6canthony          (void) QueryColorCompliance(ArgOption("none"),AllCompliance,
149892c93bd35e207736d340f1b32000006a5bf6208eanthony               &_draw_info->undercolor,_exception);
1499805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1500805a2d48e7e2ed7d699871183ed706699119281canthony        }
1501afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("units",option+1) == 0)
1502805a2d48e7e2ed7d699871183ed706699119281canthony        {
150372feaa664126c198b9ccd072b6ef181338a76c6canthony          /* SyncImageSettings() used to set per-image attribute.
150492c93bd35e207736d340f1b32000006a5bf6208eanthony             Should this effect _draw_info X and Y resolution?
150572feaa664126c198b9ccd072b6ef181338a76c6canthony             FUTURE: this probably should be part of the density setting
150672feaa664126c198b9ccd072b6ef181338a76c6canthony          */
150752bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          parse=ParseCommandOption(MagickResolutionOptions,MagickFalse,
150852bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony               ArgOption("undefined"));
150952bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          if (parse < 0)
151052bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedUnitsType",
151152bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony                 option,arg1);
151252bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          _image_info->units=(ResolutionType) parse;
151392c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
1514805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1515805a2d48e7e2ed7d699871183ed706699119281canthony        }
1516ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1517805a2d48e7e2ed7d699871183ed706699119281canthony    }
1518805a2d48e7e2ed7d699871183ed706699119281canthony    case 'v':
1519805a2d48e7e2ed7d699871183ed706699119281canthony    {
1520afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("verbose",option+1) == 0)
1521805a2d48e7e2ed7d699871183ed706699119281canthony        {
152224aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony          /* FUTURE: Remember all options become image artifacts
152392c93bd35e207736d340f1b32000006a5bf6208eanthony             _image_info->verbose is only used by coders.
1524ab3a50c7dc582b00dfb64bc51b67da87cf51deafanthony          */
152592c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgBooleanString);
152692c93bd35e207736d340f1b32000006a5bf6208eanthony          _image_info->verbose= ArgBoolean;
152792c93bd35e207736d340f1b32000006a5bf6208eanthony          _image_info->ping=MagickFalse; /* verbose can't be a ping */
1528805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1529805a2d48e7e2ed7d699871183ed706699119281canthony        }
1530afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("virtual-pixel",option+1) == 0)
1531805a2d48e7e2ed7d699871183ed706699119281canthony        {
1532fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          /* SyncImageSettings() used to set per-image attribute.
1533fd706f930f397221c6ba26f112e96e262fb0ba2eanthony             This is VERY deep in the image caching structure.
1534fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          */
153552bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          parse=ParseCommandOption(MagickVirtualPixelOptions,MagickFalse,
153652bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony               ArgOption("undefined"));
153752bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          if (parse < 0)
153852bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedVirtualPixelMethod",
153952bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony                 option,arg1);
154092c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageOption(_image_info,option+1,ArgOption(NULL));
1541805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1542805a2d48e7e2ed7d699871183ed706699119281canthony        }
1543ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1544805a2d48e7e2ed7d699871183ed706699119281canthony    }
1545805a2d48e7e2ed7d699871183ed706699119281canthony    case 'w':
1546805a2d48e7e2ed7d699871183ed706699119281canthony    {
1547afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("weight",option+1) == 0)
1548ab3a50c7dc582b00dfb64bc51b67da87cf51deafanthony        {
15495acf702fa2aa906dc44bd26edc57023344e8b77adirk          ssize_t
15505acf702fa2aa906dc44bd26edc57023344e8b77adirk            weight;
15515acf702fa2aa906dc44bd26edc57023344e8b77adirk
15525acf702fa2aa906dc44bd26edc57023344e8b77adirk          weight=ParseCommandOption(MagickWeightOptions,MagickFalse,arg1);
15535acf702fa2aa906dc44bd26edc57023344e8b77adirk          if (weight == -1)
155423446631cb3aebb2403aaef5337136ce5f0d24deCristy            weight=(ssize_t) StringToUnsignedLong(arg1);
15555acf702fa2aa906dc44bd26edc57023344e8b77adirk          _draw_info->weight=(size_t) weight;
1556ab3a50c7dc582b00dfb64bc51b67da87cf51deafanthony          break;
1557ab3a50c7dc582b00dfb64bc51b67da87cf51deafanthony        }
1558afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("white-point",option+1) == 0)
1559805a2d48e7e2ed7d699871183ed706699119281canthony        {
156072feaa664126c198b9ccd072b6ef181338a76c6canthony          /* Used as a image chromaticity setting
156172feaa664126c198b9ccd072b6ef181338a76c6canthony             SyncImageSettings() used to set per-image attribute.
156272feaa664126c198b9ccd072b6ef181338a76c6canthony          */
156352bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          arg1=ArgOption("0.0");
15645d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
156552bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
156652bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          (void) SetImageOption(_image_info,option+1,arg1);
1567805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1568805a2d48e7e2ed7d699871183ed706699119281canthony        }
1569ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1570805a2d48e7e2ed7d699871183ed706699119281canthony    }
1571805a2d48e7e2ed7d699871183ed706699119281canthony    default:
1572ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1573805a2d48e7e2ed7d699871183ed706699119281canthony  }
157424aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony
15754837ac2f5e9dbb766129a91aa11cf7c547477119anthony  /* clean up percent escape interpreted strings */
1576862fc616586b318a46843a1e3bf514a2f40c48aecristy  if ((arg1 && arg1n) && (arg1 != arg1n ))
1577862fc616586b318a46843a1e3bf514a2f40c48aecristy    arg1=DestroyString((char *) arg1);
1578862fc616586b318a46843a1e3bf514a2f40c48aecristy  if ((arg2 && arg2n) && (arg2 != arg2n ))
1579862fc616586b318a46843a1e3bf514a2f40c48aecristy    arg2=DestroyString((char *) arg2);
15804837ac2f5e9dbb766129a91aa11cf7c547477119anthony
158192c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _image_info
158292c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _exception
158392c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _draw_info
158492c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _quantize_info
1585fd706f930f397221c6ba26f112e96e262fb0ba2eanthony#undef IfSetOption
1586fd706f930f397221c6ba26f112e96e262fb0ba2eanthony#undef ArgBoolean
158724aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony#undef ArgBooleanNot
158824aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony#undef ArgBooleanString
158924aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony#undef ArgOption
1590fd706f930f397221c6ba26f112e96e262fb0ba2eanthony
159131f1bf7bb6ee2698a2afab42ee0329b11663636canthony  return;
1592805a2d48e7e2ed7d699871183ed706699119281canthony}
1593805a2d48e7e2ed7d699871183ed706699119281canthony
1594805a2d48e7e2ed7d699871183ed706699119281canthony/*
1595805a2d48e7e2ed7d699871183ed706699119281canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1596805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
1597805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
1598805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
159943f425dd7d5b33887726982b28ebfa06f5560636anthony+     C L I S i m p l e O p e r a t o r I m a g e s                           %
1600805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
1601805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
1602805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
1603805a2d48e7e2ed7d699871183ed706699119281canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1604805a2d48e7e2ed7d699871183ed706699119281canthony%
1605c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony%  CLISimpleOperatorImages() applys one simple image operation given to all
1606c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony%  the images in the CLI wand, using any per-image or global settings that was
1607c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony%  previously saved in the CLI wand.
1608dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony%
1609c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony%  It is assumed that any such settings are up-to-date.
1610805a2d48e7e2ed7d699871183ed706699119281canthony%
16117a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony%  The format of the WandSimpleOperatorImages method is:
1612805a2d48e7e2ed7d699871183ed706699119281canthony%
161352b632a875d61ac705bca7ad2b0919f90112eef9cristy%    MagickBooleanType CLISimpleOperatorImages(MagickCLI *cli_wand,const char *option,
16142c57b74e160f9b605d74dec24081309f28b83899cristy%      const char *arg1, const char *arg2,ExceptionInfo *exception)
1615805a2d48e7e2ed7d699871183ed706699119281canthony%
1616805a2d48e7e2ed7d699871183ed706699119281canthony%  A description of each parameter follows:
1617805a2d48e7e2ed7d699871183ed706699119281canthony%
161843f425dd7d5b33887726982b28ebfa06f5560636anthony%    o cli_wand: structure holding settings and images to be operated on
1619dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony%
1620fd706f930f397221c6ba26f112e96e262fb0ba2eanthony%    o option:  The option string for the operation
1621805a2d48e7e2ed7d699871183ed706699119281canthony%
1622fd706f930f397221c6ba26f112e96e262fb0ba2eanthony%    o arg1, arg2: optional argument strings to the operation
1623805a2d48e7e2ed7d699871183ed706699119281canthony%
1624805a2d48e7e2ed7d699871183ed706699119281canthony*/
162531f1bf7bb6ee2698a2afab42ee0329b11663636canthony
162631f1bf7bb6ee2698a2afab42ee0329b11663636canthony/*
1627c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony  CLISimpleOperatorImage() is an Internal subrountine to apply one simple
1628c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony  image operation to the current image pointed to by the CLI wand.
162931f1bf7bb6ee2698a2afab42ee0329b11663636canthony
163031f1bf7bb6ee2698a2afab42ee0329b11663636canthony  The image in the list may be modified in three different ways...
163131f1bf7bb6ee2698a2afab42ee0329b11663636canthony    * directly modified (EG: -negate, -gamma, -level, -annotate, -draw),
163231f1bf7bb6ee2698a2afab42ee0329b11663636canthony    * replaced by a new image (EG: -spread, -resize, -rotate, -morphology)
163331f1bf7bb6ee2698a2afab42ee0329b11663636canthony    * one image replace by a list of images (-separate and -crop only!)
163431f1bf7bb6ee2698a2afab42ee0329b11663636canthony
1635afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony  In each case the result replaces the single original image in the list, as
1636afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony  well as the pointer to the modified image (last image added if replaced by a
1637afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony  list of images) is returned.
163831f1bf7bb6ee2698a2afab42ee0329b11663636canthony
163931f1bf7bb6ee2698a2afab42ee0329b11663636canthony  As the image pointed to may be replaced, the first image in the list may
164031f1bf7bb6ee2698a2afab42ee0329b11663636canthony  also change.  GetFirstImageInList() should be used by caller if they wish
164131f1bf7bb6ee2698a2afab42ee0329b11663636canthony  return the Image pointer to the first image in list.
164231f1bf7bb6ee2698a2afab42ee0329b11663636canthony*/
1643fe83185ff915c87796df33a8d90a1e0937b3d76fcristystatic MagickBooleanType CLISimpleOperatorImage(MagickCLI *cli_wand,
16442c57b74e160f9b605d74dec24081309f28b83899cristy  const char *option, const char *arg1n, const char *arg2n,
16452c57b74e160f9b605d74dec24081309f28b83899cristy  ExceptionInfo *exception)
1646805a2d48e7e2ed7d699871183ed706699119281canthony{
1647805a2d48e7e2ed7d699871183ed706699119281canthony  Image *
1648805a2d48e7e2ed7d699871183ed706699119281canthony    new_image;
1649805a2d48e7e2ed7d699871183ed706699119281canthony
1650805a2d48e7e2ed7d699871183ed706699119281canthony  GeometryInfo
1651805a2d48e7e2ed7d699871183ed706699119281canthony    geometry_info;
1652805a2d48e7e2ed7d699871183ed706699119281canthony
1653805a2d48e7e2ed7d699871183ed706699119281canthony  RectangleInfo
1654805a2d48e7e2ed7d699871183ed706699119281canthony    geometry;
1655805a2d48e7e2ed7d699871183ed706699119281canthony
1656805a2d48e7e2ed7d699871183ed706699119281canthony  MagickStatusType
1657805a2d48e7e2ed7d699871183ed706699119281canthony    flags;
1658805a2d48e7e2ed7d699871183ed706699119281canthony
165992c93bd35e207736d340f1b32000006a5bf6208eanthony  ssize_t
16602a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony    parse;
166192c93bd35e207736d340f1b32000006a5bf6208eanthony
1662a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony  const char    /* percent escaped versions of the args */
1663964d28ed4391c639c60c392807c9dfb09f933ba8anthony    *arg1,
1664964d28ed4391c639c60c392807c9dfb09f933ba8anthony    *arg2;
1665964d28ed4391c639c60c392807c9dfb09f933ba8anthony
1666a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _image_info       (cli_wand->wand.image_info)
1667a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _image            (cli_wand->wand.images)
1668a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _exception        (cli_wand->wand.exception)
1669a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _draw_info        (cli_wand->draw_info)
1670a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _quantize_info    (cli_wand->quantize_info)
1671a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _process_flags    (cli_wand->process_flags)
1672a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _option_type      ((CommandOptionFlags) cli_wand->command->flags)
1673a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define IfNormalOp        (*option=='-')
1674a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define IfPlusOp          (*option!='-')
1675b9dbc296c59e91df014757130b4e584c7fb6c74ddirk#define IsNormalOp        IfNormalOp ? MagickTrue : MagickFalse
1676b9dbc296c59e91df014757130b4e584c7fb6c74ddirk#define IsPlusOp          IfNormalOp ? MagickFalse : MagickTrue
1677fd706f930f397221c6ba26f112e96e262fb0ba2eanthony
167843f425dd7d5b33887726982b28ebfa06f5560636anthony  assert(cli_wand != (MagickCLI *) NULL);
1679e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(cli_wand->signature == MagickWandSignature);
1680e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(cli_wand->wand.signature == MagickWandSignature);
16815330ae0b1ea1824ec58522aebfd27228592ad0a4anthony  assert(_image != (Image *) NULL);             /* an image must be present */
1682d0792939dc18eff319129903f2627bd882a574aadirk  if (cli_wand->wand.debug != MagickFalse)
168343f425dd7d5b33887726982b28ebfa06f5560636anthony    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",cli_wand->wand.name);
1684dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony
1685964d28ed4391c639c60c392807c9dfb09f933ba8anthony  arg1 = arg1n,
1686964d28ed4391c639c60c392807c9dfb09f933ba8anthony  arg2 = arg2n;
1687a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony
1688a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony  /* Interpret Percent Escapes in Arguments - using first image */
1689964d28ed4391c639c60c392807c9dfb09f933ba8anthony  if ( (((_process_flags & ProcessInterpretProperities) != 0 )
1690964d28ed4391c639c60c392807c9dfb09f933ba8anthony        || ((_option_type & AlwaysInterpretArgsFlag) != 0)
1691964d28ed4391c639c60c392807c9dfb09f933ba8anthony       )  && ((_option_type & NeverInterpretArgsFlag) == 0) ) {
1692964d28ed4391c639c60c392807c9dfb09f933ba8anthony    /* Interpret Percent escapes in argument 1 */
1693964d28ed4391c639c60c392807c9dfb09f933ba8anthony    if (arg1n != (char *) NULL) {
1694964d28ed4391c639c60c392807c9dfb09f933ba8anthony      arg1=InterpretImageProperties(_image_info,_image,arg1n,_exception);
1695964d28ed4391c639c60c392807c9dfb09f933ba8anthony      if (arg1 == (char *) NULL) {
1696964d28ed4391c639c60c392807c9dfb09f933ba8anthony        CLIWandException(OptionWarning,"InterpretPropertyFailure",option);
1697964d28ed4391c639c60c392807c9dfb09f933ba8anthony        arg1=arg1n;  /* use the given argument as is */
1698964d28ed4391c639c60c392807c9dfb09f933ba8anthony      }
1699964d28ed4391c639c60c392807c9dfb09f933ba8anthony    }
1700964d28ed4391c639c60c392807c9dfb09f933ba8anthony    if (arg2n != (char *) NULL) {
1701964d28ed4391c639c60c392807c9dfb09f933ba8anthony      arg2=InterpretImageProperties(_image_info,_image,arg2n,_exception);
1702964d28ed4391c639c60c392807c9dfb09f933ba8anthony      if (arg2 == (char *) NULL) {
1703964d28ed4391c639c60c392807c9dfb09f933ba8anthony        CLIWandException(OptionWarning,"InterpretPropertyFailure",option);
1704964d28ed4391c639c60c392807c9dfb09f933ba8anthony        arg2=arg2n;  /* use the given argument as is */
1705964d28ed4391c639c60c392807c9dfb09f933ba8anthony      }
1706964d28ed4391c639c60c392807c9dfb09f933ba8anthony    }
1707964d28ed4391c639c60c392807c9dfb09f933ba8anthony  }
17084837ac2f5e9dbb766129a91aa11cf7c547477119anthony#undef _process_flags
1709964d28ed4391c639c60c392807c9dfb09f933ba8anthony#undef _option_type
1710964d28ed4391c639c60c392807c9dfb09f933ba8anthony
1711964d28ed4391c639c60c392807c9dfb09f933ba8anthony#if 0
1712964d28ed4391c639c60c392807c9dfb09f933ba8anthony  (void) FormatLocaleFile(stderr,
1713964d28ed4391c639c60c392807c9dfb09f933ba8anthony    "CLISimpleOperatorImage: \"%s\" \"%s\" \"%s\"\n",option,arg1,arg2);
1714964d28ed4391c639c60c392807c9dfb09f933ba8anthony#endif
1715805a2d48e7e2ed7d699871183ed706699119281canthony
1716f432c635c526259b858c9aad3d409c5c44545686cristy  new_image = (Image *) NULL; /* the replacement image, if not null at end */
1717964d28ed4391c639c60c392807c9dfb09f933ba8anthony  SetGeometryInfo(&geometry_info);
1718dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony
1719afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony  switch (*(option+1))
1720805a2d48e7e2ed7d699871183ed706699119281canthony  {
1721805a2d48e7e2ed7d699871183ed706699119281canthony    case 'a':
1722805a2d48e7e2ed7d699871183ed706699119281canthony    {
1723afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("adaptive-blur",option+1) == 0)
1724805a2d48e7e2ed7d699871183ed706699119281canthony        {
1725fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
172622de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
172722de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
1728805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
1729805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=1.0;
173092c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=AdaptiveBlurImage(_image,geometry_info.rho,
1731aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy            geometry_info.sigma,_exception);
1732805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1733805a2d48e7e2ed7d699871183ed706699119281canthony        }
1734afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("adaptive-resize",option+1) == 0)
1735805a2d48e7e2ed7d699871183ed706699119281canthony        {
1736fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          /* FUTURE: Roll into a resize special operator */
17375d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
173892c93bd35e207736d340f1b32000006a5bf6208eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
173992c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) ParseRegionGeometry(_image,arg1,&geometry,_exception);
174092c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=AdaptiveResizeImage(_image,geometry.width,geometry.height,
1741aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy            _exception);
1742805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1743805a2d48e7e2ed7d699871183ed706699119281canthony        }
1744afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("adaptive-sharpen",option+1) == 0)
1745805a2d48e7e2ed7d699871183ed706699119281canthony        {
1746fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
174722de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
174822de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
1749805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
1750805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=1.0;
175192c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=AdaptiveSharpenImage(_image,geometry_info.rho,
1752aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy            geometry_info.sigma,_exception);
1753805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1754805a2d48e7e2ed7d699871183ed706699119281canthony        }
1755afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("alpha",option+1) == 0)
1756805a2d48e7e2ed7d699871183ed706699119281canthony        {
1757288a3536ebe731f83c57b0856e64216b98e19362cristy          parse=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,arg1);
17582a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          if (parse < 0)
1759b15b06c9f7ba2bf0e0ebcd88d0175536a5392c93cristy            CLIWandExceptArgBreak(OptionError,"UnrecognizedAlphaChannelOption",
17604366cb8362807701d417c990eaf5bfe5dcec2282cristy              option,arg1);
17614366cb8362807701d417c990eaf5bfe5dcec2282cristy          (void) SetImageAlphaChannel(_image,(AlphaChannelOption) parse,
176261d844eb252f4eca2241e151c46b3b718af2182dcristy            _exception);
1763805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1764805a2d48e7e2ed7d699871183ed706699119281canthony        }
1765afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("annotate",option+1) == 0)
1766805a2d48e7e2ed7d699871183ed706699119281canthony        {
1767805a2d48e7e2ed7d699871183ed706699119281canthony          char
1768151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy            geometry[MagickPathExtent];
1769805a2d48e7e2ed7d699871183ed706699119281canthony
1770805a2d48e7e2ed7d699871183ed706699119281canthony          SetGeometryInfo(&geometry_info);
1771fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
17728592b059b2b4f03c0280b0e1146b225207e624f8cristy          if (flags == 0)
177322de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
1774805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
1775805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=geometry_info.rho;
1776964d28ed4391c639c60c392807c9dfb09f933ba8anthony          (void) CloneString(&_draw_info->text,arg2);
1777151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy          (void) FormatLocaleString(geometry,MagickPathExtent,"%+f%+f",
1778805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.xi,geometry_info.psi);
177992c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_draw_info->geometry,geometry);
178092c93bd35e207736d340f1b32000006a5bf6208eanthony          _draw_info->affine.sx=cos(DegreesToRadians(
1781805a2d48e7e2ed7d699871183ed706699119281canthony            fmod(geometry_info.rho,360.0)));
178292c93bd35e207736d340f1b32000006a5bf6208eanthony          _draw_info->affine.rx=sin(DegreesToRadians(
1783805a2d48e7e2ed7d699871183ed706699119281canthony            fmod(geometry_info.rho,360.0)));
178492c93bd35e207736d340f1b32000006a5bf6208eanthony          _draw_info->affine.ry=(-sin(DegreesToRadians(
1785805a2d48e7e2ed7d699871183ed706699119281canthony            fmod(geometry_info.sigma,360.0))));
178692c93bd35e207736d340f1b32000006a5bf6208eanthony          _draw_info->affine.sy=cos(DegreesToRadians(
1787805a2d48e7e2ed7d699871183ed706699119281canthony            fmod(geometry_info.sigma,360.0)));
178892c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) AnnotateImage(_image,_draw_info,_exception);
178992c93bd35e207736d340f1b32000006a5bf6208eanthony          GetAffineMatrix(&_draw_info->affine);
1790805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1791805a2d48e7e2ed7d699871183ed706699119281canthony        }
1792afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("auto-gamma",option+1) == 0)
1793805a2d48e7e2ed7d699871183ed706699119281canthony        {
179492c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) AutoGammaImage(_image,_exception);
1795805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1796805a2d48e7e2ed7d699871183ed706699119281canthony        }
1797afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("auto-level",option+1) == 0)
1798805a2d48e7e2ed7d699871183ed706699119281canthony        {
179992c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) AutoLevelImage(_image,_exception);
1800805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1801805a2d48e7e2ed7d699871183ed706699119281canthony        }
1802afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("auto-orient",option+1) == 0)
1803805a2d48e7e2ed7d699871183ed706699119281canthony        {
1804fa5f6c7d8951fffaccad70fa706701129f0a82bfcristy          new_image=AutoOrientImage(_image,_image->orientation,_exception);
1805805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1806805a2d48e7e2ed7d699871183ed706699119281canthony        }
1807ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1808805a2d48e7e2ed7d699871183ed706699119281canthony    }
1809805a2d48e7e2ed7d699871183ed706699119281canthony    case 'b':
1810805a2d48e7e2ed7d699871183ed706699119281canthony    {
1811afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("black-threshold",option+1) == 0)
1812805a2d48e7e2ed7d699871183ed706699119281canthony        {
18135d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
18145330ae0b1ea1824ec58522aebfd27228592ad0a4anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
181592c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) BlackThresholdImage(_image,arg1,_exception);
1816805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1817805a2d48e7e2ed7d699871183ed706699119281canthony        }
1818afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("blue-shift",option+1) == 0)
1819805a2d48e7e2ed7d699871183ed706699119281canthony        {
1820805a2d48e7e2ed7d699871183ed706699119281canthony          geometry_info.rho=1.5;
18215330ae0b1ea1824ec58522aebfd27228592ad0a4anthony          if (IfNormalOp) {
1822fd706f930f397221c6ba26f112e96e262fb0ba2eanthony            flags=ParseGeometry(arg1,&geometry_info);
182322de2722b682eb405b60ec6022a7546df994674eanthony            if ((flags & RhoValue) == 0)
182422de2722b682eb405b60ec6022a7546df994674eanthony              CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
18255330ae0b1ea1824ec58522aebfd27228592ad0a4anthony          }
182692c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=BlueShiftImage(_image,geometry_info.rho,_exception);
1827805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1828805a2d48e7e2ed7d699871183ed706699119281canthony        }
1829afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("blur",option+1) == 0)
1830805a2d48e7e2ed7d699871183ed706699119281canthony        {
1831fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
183222de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
183322de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
1834805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
1835805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=1.0;
1836aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy          new_image=BlurImage(_image,geometry_info.rho,geometry_info.sigma,
1837aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy           _exception);
1838805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1839805a2d48e7e2ed7d699871183ed706699119281canthony        }
1840afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("border",option+1) == 0)
1841805a2d48e7e2ed7d699871183ed706699119281canthony        {
184231f1bf7bb6ee2698a2afab42ee0329b11663636canthony          CompositeOperator
18435f867ae6899e46eb35c30b38e9479312880608cfanthony            compose;
18445f867ae6899e46eb35c30b38e9479312880608cfanthony
18455f867ae6899e46eb35c30b38e9479312880608cfanthony          const char*
18465f867ae6899e46eb35c30b38e9479312880608cfanthony            value;
18475f867ae6899e46eb35c30b38e9479312880608cfanthony
184822de2722b682eb405b60ec6022a7546df994674eanthony          flags=ParsePageGeometry(_image,arg1,&geometry,_exception);
184964ad8f928c50680fcbd1aa3b433deae984348f89cristy          if ((flags & (WidthValue | HeightValue)) == 0)
18505330ae0b1ea1824ec58522aebfd27228592ad0a4anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
185164ad8f928c50680fcbd1aa3b433deae984348f89cristy          compose=OverCompositeOp;
185292c93bd35e207736d340f1b32000006a5bf6208eanthony          value=GetImageOption(_image_info,"compose");
18535f867ae6899e46eb35c30b38e9479312880608cfanthony          if (value != (const char *) NULL)
185464ad8f928c50680fcbd1aa3b433deae984348f89cristy            compose=(CompositeOperator) ParseCommandOption(MagickComposeOptions,
185564ad8f928c50680fcbd1aa3b433deae984348f89cristy              MagickFalse,value);
185692c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=BorderImage(_image,&geometry,compose,_exception);
1857805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1858805a2d48e7e2ed7d699871183ed706699119281canthony        }
1859afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("brightness-contrast",option+1) == 0)
1860805a2d48e7e2ed7d699871183ed706699119281canthony        {
1861805a2d48e7e2ed7d699871183ed706699119281canthony          double
1862805a2d48e7e2ed7d699871183ed706699119281canthony            brightness,
1863805a2d48e7e2ed7d699871183ed706699119281canthony            contrast;
1864805a2d48e7e2ed7d699871183ed706699119281canthony
1865805a2d48e7e2ed7d699871183ed706699119281canthony          GeometryInfo
1866805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info;
1867805a2d48e7e2ed7d699871183ed706699119281canthony
1868805a2d48e7e2ed7d699871183ed706699119281canthony          MagickStatusType
1869805a2d48e7e2ed7d699871183ed706699119281canthony            flags;
1870805a2d48e7e2ed7d699871183ed706699119281canthony
1871fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
187222de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & RhoValue) == 0)
187322de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
1874805a2d48e7e2ed7d699871183ed706699119281canthony          brightness=geometry_info.rho;
1875805a2d48e7e2ed7d699871183ed706699119281canthony          contrast=0.0;
1876805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) != 0)
1877805a2d48e7e2ed7d699871183ed706699119281canthony            contrast=geometry_info.sigma;
187892c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) BrightnessContrastImage(_image,brightness,contrast,
187992c93bd35e207736d340f1b32000006a5bf6208eanthony            _exception);
1880805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1881805a2d48e7e2ed7d699871183ed706699119281canthony        }
1882ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
1883805a2d48e7e2ed7d699871183ed706699119281canthony    }
1884805a2d48e7e2ed7d699871183ed706699119281canthony    case 'c':
1885805a2d48e7e2ed7d699871183ed706699119281canthony    {
18864ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy      if (LocaleCompare("canny",option+1) == 0)
18874ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy        {
18884ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy          flags=ParseGeometry(arg1,&geometry_info);
18894ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy          if ((flags & (RhoValue|SigmaValue)) == 0)
18904ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
18914ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy          if ((flags & SigmaValue) == 0)
18924ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy            geometry_info.sigma=1.0;
18934ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy          if ((flags & XiValue) == 0)
18942fc10e5aedab9144531a4668dc7526e3caf514e1cristy            geometry_info.xi=10;
18954ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy          if ((flags & PsiValue) == 0)
18962fc10e5aedab9144531a4668dc7526e3caf514e1cristy            geometry_info.psi=30;
18972b72f797824e3f3650c2499c113e86a4dce5a0e1cristy          if ((flags & PercentValue) != 0)
18982b72f797824e3f3650c2499c113e86a4dce5a0e1cristy            {
189941814f2acd4293e7c139946773ef710527041581cristy              geometry_info.xi/=100.0;
190041814f2acd4293e7c139946773ef710527041581cristy              geometry_info.psi/=100.0;
19012b72f797824e3f3650c2499c113e86a4dce5a0e1cristy            }
190241814f2acd4293e7c139946773ef710527041581cristy          new_image=CannyEdgeImage(_image,geometry_info.rho,geometry_info.sigma,
190341814f2acd4293e7c139946773ef710527041581cristy            geometry_info.xi,geometry_info.psi,_exception);
19044ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy          break;
19054ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy        }
1906afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("cdl",option+1) == 0)
1907805a2d48e7e2ed7d699871183ed706699119281canthony        {
19084837ac2f5e9dbb766129a91aa11cf7c547477119anthony          /* Note: arguments do not have percent escapes expanded */
1909805a2d48e7e2ed7d699871183ed706699119281canthony          char
1910805a2d48e7e2ed7d699871183ed706699119281canthony            *color_correction_collection;
1911805a2d48e7e2ed7d699871183ed706699119281canthony
1912805a2d48e7e2ed7d699871183ed706699119281canthony          /*
1913805a2d48e7e2ed7d699871183ed706699119281canthony            Color correct with a color decision list.
1914805a2d48e7e2ed7d699871183ed706699119281canthony          */
19153a5987c75c361dde2b38579f05ca961927d842fecristy          color_correction_collection=FileToString(arg1,~0UL,_exception);
1916805a2d48e7e2ed7d699871183ed706699119281canthony          if (color_correction_collection == (char *) NULL)
1917805a2d48e7e2ed7d699871183ed706699119281canthony            break;
191892c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) ColorDecisionListImage(_image,color_correction_collection,
191992c93bd35e207736d340f1b32000006a5bf6208eanthony            _exception);
1920805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1921805a2d48e7e2ed7d699871183ed706699119281canthony        }
192217ada024a8d39285affcac96ff344f3142c41aadcristy      if (LocaleCompare("channel",option+1) == 0)
192317ada024a8d39285affcac96ff344f3142c41aadcristy        {
192417ada024a8d39285affcac96ff344f3142c41aadcristy          if (IfPlusOp)
192517ada024a8d39285affcac96ff344f3142c41aadcristy            {
1926bcd59345f8bbe67289229b663d9bb487cc620e13cristy              (void) SetPixelChannelMask(_image,DefaultChannels);
192717ada024a8d39285affcac96ff344f3142c41aadcristy              break;
192817ada024a8d39285affcac96ff344f3142c41aadcristy            }
192917ada024a8d39285affcac96ff344f3142c41aadcristy          parse=ParseChannelOption(arg1);
193017ada024a8d39285affcac96ff344f3142c41aadcristy          if (parse < 0)
193117ada024a8d39285affcac96ff344f3142c41aadcristy            CLIWandExceptArgBreak(OptionError,"UnrecognizedIntensityMethod",
193217ada024a8d39285affcac96ff344f3142c41aadcristy              option,arg1);
1933bcd59345f8bbe67289229b663d9bb487cc620e13cristy          (void) SetPixelChannelMask(_image,(ChannelType) parse);
193417ada024a8d39285affcac96ff344f3142c41aadcristy          break;
193517ada024a8d39285affcac96ff344f3142c41aadcristy        }
1936afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("charcoal",option+1) == 0)
1937805a2d48e7e2ed7d699871183ed706699119281canthony        {
1938fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
193922de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
194022de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
1941805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
1942805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=1.0;
1943805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & XiValue) == 0)
1944805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.xi=1.0;
1945ee3f752fa83a8a26f8db98d8cb1af21fa1e93393cristy          new_image=CharcoalImage(_image,geometry_info.rho,geometry_info.sigma,
1946ee3f752fa83a8a26f8db98d8cb1af21fa1e93393cristy            _exception);
1947805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1948805a2d48e7e2ed7d699871183ed706699119281canthony        }
1949afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("chop",option+1) == 0)
1950805a2d48e7e2ed7d699871183ed706699119281canthony        {
19515d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
19525330ae0b1ea1824ec58522aebfd27228592ad0a4anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
195392c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) ParseGravityGeometry(_image,arg1,&geometry,_exception);
195492c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=ChopImage(_image,&geometry,_exception);
1955805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1956805a2d48e7e2ed7d699871183ed706699119281canthony        }
1957afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("clamp",option+1) == 0)
1958805a2d48e7e2ed7d699871183ed706699119281canthony        {
195992c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) ClampImage(_image,_exception);
1960805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1961805a2d48e7e2ed7d699871183ed706699119281canthony        }
1962afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("clip",option+1) == 0)
1963805a2d48e7e2ed7d699871183ed706699119281canthony        {
1964afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          if (IfNormalOp)
196592c93bd35e207736d340f1b32000006a5bf6208eanthony            (void) ClipImage(_image,_exception);
196643f425dd7d5b33887726982b28ebfa06f5560636anthony          else /* "+mask" remove the write mask */
1967acd0d4c147f40e88de332ff28d428a395628a9f4cristy            (void) SetImageMask(_image,ReadPixelMask,(Image *) NULL,_exception);
1968805a2d48e7e2ed7d699871183ed706699119281canthony          break;
1969805a2d48e7e2ed7d699871183ed706699119281canthony        }
1970afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("clip-mask",option+1) == 0)
1971805a2d48e7e2ed7d699871183ed706699119281canthony        {
19724837ac2f5e9dbb766129a91aa11cf7c547477119anthony          /* Note: arguments do not have percent escapes expanded */
1973805a2d48e7e2ed7d699871183ed706699119281canthony          CacheView
1974805a2d48e7e2ed7d699871183ed706699119281canthony            *mask_view;
1975805a2d48e7e2ed7d699871183ed706699119281canthony
1976805a2d48e7e2ed7d699871183ed706699119281canthony          Image
1977805a2d48e7e2ed7d699871183ed706699119281canthony            *mask_image;
1978805a2d48e7e2ed7d699871183ed706699119281canthony
1979805a2d48e7e2ed7d699871183ed706699119281canthony          register Quantum
198005d2ff7ebf21f659f5b11e45afb294e152f4330cdirk            *magick_restrict q;
1981805a2d48e7e2ed7d699871183ed706699119281canthony
1982805a2d48e7e2ed7d699871183ed706699119281canthony          register ssize_t
1983805a2d48e7e2ed7d699871183ed706699119281canthony            x;
1984805a2d48e7e2ed7d699871183ed706699119281canthony
1985805a2d48e7e2ed7d699871183ed706699119281canthony          ssize_t
1986805a2d48e7e2ed7d699871183ed706699119281canthony            y;
1987805a2d48e7e2ed7d699871183ed706699119281canthony
1988afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          if (IfPlusOp) {
19894837ac2f5e9dbb766129a91aa11cf7c547477119anthony            /* use "+clip-mask" Remove the write mask for -clip-path */
1990acd0d4c147f40e88de332ff28d428a395628a9f4cristy            (void) SetImageMask(_image,ReadPixelMask,(Image *) NULL,_exception);
1991afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony            break;
1992afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          }
199392c93bd35e207736d340f1b32000006a5bf6208eanthony          mask_image=GetImageCache(_image_info,arg1,_exception);
1994805a2d48e7e2ed7d699871183ed706699119281canthony          if (mask_image == (Image *) NULL)
1995805a2d48e7e2ed7d699871183ed706699119281canthony            break;
19965d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (SetImageStorageClass(mask_image,DirectClass,_exception) == MagickFalse)
199731f1bf7bb6ee2698a2afab42ee0329b11663636canthony            break;
19985330ae0b1ea1824ec58522aebfd27228592ad0a4anthony          /* Create a write mask from cli_wand mask image */
1999fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          /* FUTURE: use Alpha operations instead and create a Grey Image */
200046ff2676b1044ea4101ac7a59b83289cd8f6cfdacristy          mask_view=AcquireAuthenticCacheView(mask_image,_exception);
2001805a2d48e7e2ed7d699871183ed706699119281canthony          for (y=0; y < (ssize_t) mask_image->rows; y++)
2002805a2d48e7e2ed7d699871183ed706699119281canthony          {
2003805a2d48e7e2ed7d699871183ed706699119281canthony            q=GetCacheViewAuthenticPixels(mask_view,0,y,mask_image->columns,1,
200492c93bd35e207736d340f1b32000006a5bf6208eanthony              _exception);
2005805a2d48e7e2ed7d699871183ed706699119281canthony            if (q == (Quantum *) NULL)
2006805a2d48e7e2ed7d699871183ed706699119281canthony              break;
2007805a2d48e7e2ed7d699871183ed706699119281canthony            for (x=0; x < (ssize_t) mask_image->columns; x++)
2008805a2d48e7e2ed7d699871183ed706699119281canthony            {
20097d6d3d842e19316bdf35c69a032cd77a40f476aacristy              if (mask_image->alpha_trait == UndefinedPixelTrait)
201052b632a875d61ac705bca7ad2b0919f90112eef9cristy                SetPixelAlpha(mask_image,(Quantum)
201152b632a875d61ac705bca7ad2b0919f90112eef9cristy                  GetPixelIntensity(mask_image,q),q);
201281ac79758a008f1ac5bfb5c543ba914e4d617304cristy              SetPixelGray(mask_image,GetPixelAlpha(mask_image,q),q);
2013805a2d48e7e2ed7d699871183ed706699119281canthony              q+=GetPixelChannels(mask_image);
2014805a2d48e7e2ed7d699871183ed706699119281canthony            }
20155d0a441fe7d90e3449f2103ed88c32cec28595e6dirk            if (SyncCacheViewAuthenticPixels(mask_view,_exception) == MagickFalse)
2016805a2d48e7e2ed7d699871183ed706699119281canthony              break;
2017805a2d48e7e2ed7d699871183ed706699119281canthony          }
2018fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          /* clean up and set the write mask */
2019805a2d48e7e2ed7d699871183ed706699119281canthony          mask_view=DestroyCacheView(mask_view);
20208a46d827a124555f0c48fb2368ec1bba8e079ab6cristy          mask_image->alpha_trait=BlendPixelTrait;
202181ac79758a008f1ac5bfb5c543ba914e4d617304cristy          (void) SetImageColorspace(_image,GRAYColorspace,_exception);
2022acd0d4c147f40e88de332ff28d428a395628a9f4cristy          (void) SetImageMask(_image,ReadPixelMask,mask_image,_exception);
2023805a2d48e7e2ed7d699871183ed706699119281canthony          mask_image=DestroyImage(mask_image);
2024805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2025805a2d48e7e2ed7d699871183ed706699119281canthony        }
2026afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("clip-path",option+1) == 0)
2027805a2d48e7e2ed7d699871183ed706699119281canthony        {
2028a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          (void) ClipImagePath(_image,arg1,IsNormalOp,_exception);
20294837ac2f5e9dbb766129a91aa11cf7c547477119anthony          /* Note: Use "+clip-mask" remove the write mask added */
2030805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2031805a2d48e7e2ed7d699871183ed706699119281canthony        }
2032afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("colorize",option+1) == 0)
2033805a2d48e7e2ed7d699871183ed706699119281canthony        {
20345d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
20355330ae0b1ea1824ec58522aebfd27228592ad0a4anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
203692c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=ColorizeImage(_image,arg1,&_draw_info->fill,_exception);
2037805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2038805a2d48e7e2ed7d699871183ed706699119281canthony        }
2039afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("color-matrix",option+1) == 0)
2040805a2d48e7e2ed7d699871183ed706699119281canthony        {
2041805a2d48e7e2ed7d699871183ed706699119281canthony          KernelInfo
2042805a2d48e7e2ed7d699871183ed706699119281canthony            *kernel;
2043805a2d48e7e2ed7d699871183ed706699119281canthony
20442c57b74e160f9b605d74dec24081309f28b83899cristy          kernel=AcquireKernelInfo(arg1,exception);
2045805a2d48e7e2ed7d699871183ed706699119281canthony          if (kernel == (KernelInfo *) NULL)
20465330ae0b1ea1824ec58522aebfd27228592ad0a4anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
204792c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=ColorMatrixImage(_image,kernel,_exception);
2048805a2d48e7e2ed7d699871183ed706699119281canthony          kernel=DestroyKernelInfo(kernel);
2049805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2050805a2d48e7e2ed7d699871183ed706699119281canthony        }
2051afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("colors",option+1) == 0)
2052805a2d48e7e2ed7d699871183ed706699119281canthony        {
20535330ae0b1ea1824ec58522aebfd27228592ad0a4anthony          /* Reduce the number of colors in the image.
20545330ae0b1ea1824ec58522aebfd27228592ad0a4anthony             FUTURE: also provide 'plus version with image 'color counts'
2055fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          */
205692c93bd35e207736d340f1b32000006a5bf6208eanthony          _quantize_info->number_colors=StringToUnsignedLong(arg1);
205792c93bd35e207736d340f1b32000006a5bf6208eanthony          if (_quantize_info->number_colors == 0)
20585330ae0b1ea1824ec58522aebfd27228592ad0a4anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
205992c93bd35e207736d340f1b32000006a5bf6208eanthony          if ((_image->storage_class == DirectClass) ||
206092c93bd35e207736d340f1b32000006a5bf6208eanthony              _image->colors > _quantize_info->number_colors)
206192c93bd35e207736d340f1b32000006a5bf6208eanthony            (void) QuantizeImage(_quantize_info,_image,_exception);
2062805a2d48e7e2ed7d699871183ed706699119281canthony          else
206392c93bd35e207736d340f1b32000006a5bf6208eanthony            (void) CompressImageColormap(_image,_exception);
2064805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2065805a2d48e7e2ed7d699871183ed706699119281canthony        }
2066afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("colorspace",option+1) == 0)
2067805a2d48e7e2ed7d699871183ed706699119281canthony        {
20685330ae0b1ea1824ec58522aebfd27228592ad0a4anthony          /* WARNING: this is both a image_info setting (already done)
20695330ae0b1ea1824ec58522aebfd27228592ad0a4anthony                      and a operator to change image colorspace.
207031f1bf7bb6ee2698a2afab42ee0329b11663636canthony
207131f1bf7bb6ee2698a2afab42ee0329b11663636canthony             FUTURE: default colorspace should be sRGB!
2072d2cdc860e4860173edebd04bf4a33437724edeceanthony             Unless some type of 'linear colorspace' mode is set.
207331f1bf7bb6ee2698a2afab42ee0329b11663636canthony
2074d2cdc860e4860173edebd04bf4a33437724edeceanthony             Note that +colorspace sets "undefined" or no effect on
2075d2cdc860e4860173edebd04bf4a33437724edeceanthony             new images, but forces images already in memory back to RGB!
207631f1bf7bb6ee2698a2afab42ee0329b11663636canthony             That seems to be a little strange!
2077d2cdc860e4860173edebd04bf4a33437724edeceanthony          */
207892c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) TransformImageColorspace(_image,
2079e0b9b8f4be5f9c30ee9638b35dc5db8181e4f13ecristy                    IfNormalOp ? _image_info->colorspace : sRGBColorspace,
208092c93bd35e207736d340f1b32000006a5bf6208eanthony                    _exception);
20816e0b3bcf62017e48472ee5721a7bcc4b10546b12cristy          break;
20826e0b3bcf62017e48472ee5721a7bcc4b10546b12cristy        }
20836e0b3bcf62017e48472ee5721a7bcc4b10546b12cristy      if (LocaleCompare("connected-components",option+1) == 0)
20846e0b3bcf62017e48472ee5721a7bcc4b10546b12cristy        {
20855d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
20866e0b3bcf62017e48472ee5721a7bcc4b10546b12cristy            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
208762e1398b95af43bd1990b6dece2e0e9fb527dd4dCristy          new_image=ConnectedComponentsImage(_image,(size_t)
20882ca0e9a086cf4f4d9240132badd01860cb2b5824Cristy            StringToInteger(arg1),(CCObjectInfo **) NULL,_exception);
2089805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2090805a2d48e7e2ed7d699871183ed706699119281canthony        }
2091afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("contrast",option+1) == 0)
2092805a2d48e7e2ed7d699871183ed706699119281canthony        {
2093a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          CLIWandWarnReplaced(IfNormalOp?"-level":"+level");
2094a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          (void) ContrastImage(_image,IsNormalOp,_exception);
2095805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2096805a2d48e7e2ed7d699871183ed706699119281canthony        }
2097afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("contrast-stretch",option+1) == 0)
2098805a2d48e7e2ed7d699871183ed706699119281canthony        {
2099805a2d48e7e2ed7d699871183ed706699119281canthony          double
2100805a2d48e7e2ed7d699871183ed706699119281canthony            black_point,
2101805a2d48e7e2ed7d699871183ed706699119281canthony            white_point;
2102805a2d48e7e2ed7d699871183ed706699119281canthony
2103805a2d48e7e2ed7d699871183ed706699119281canthony          MagickStatusType
2104805a2d48e7e2ed7d699871183ed706699119281canthony            flags;
2105805a2d48e7e2ed7d699871183ed706699119281canthony
2106fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
210722de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & RhoValue) == 0)
210822de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
2109805a2d48e7e2ed7d699871183ed706699119281canthony          black_point=geometry_info.rho;
2110805a2d48e7e2ed7d699871183ed706699119281canthony          white_point=(flags & SigmaValue) != 0 ? geometry_info.sigma :
2111805a2d48e7e2ed7d699871183ed706699119281canthony            black_point;
2112ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          if ((flags & PercentValue) != 0) {
211392c93bd35e207736d340f1b32000006a5bf6208eanthony              black_point*=(double) _image->columns*_image->rows/100.0;
211492c93bd35e207736d340f1b32000006a5bf6208eanthony              white_point*=(double) _image->columns*_image->rows/100.0;
2115805a2d48e7e2ed7d699871183ed706699119281canthony            }
2116496225b3cfefffeefeb82950155012a1e1aa1994cristy          white_point=(double) _image->columns*_image->rows-white_point;
211792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) ContrastStretchImage(_image,black_point,white_point,
211892c93bd35e207736d340f1b32000006a5bf6208eanthony            _exception);
2119805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2120805a2d48e7e2ed7d699871183ed706699119281canthony        }
2121afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("convolve",option+1) == 0)
2122805a2d48e7e2ed7d699871183ed706699119281canthony        {
21237792326b1a1fb3357377d8880cc90b275b654246cristy          double
21247792326b1a1fb3357377d8880cc90b275b654246cristy            gamma;
21257792326b1a1fb3357377d8880cc90b275b654246cristy
2126805a2d48e7e2ed7d699871183ed706699119281canthony          KernelInfo
2127805a2d48e7e2ed7d699871183ed706699119281canthony            *kernel_info;
21287792326b1a1fb3357377d8880cc90b275b654246cristy
21297792326b1a1fb3357377d8880cc90b275b654246cristy          register ssize_t
21307792326b1a1fb3357377d8880cc90b275b654246cristy            j;
2131805a2d48e7e2ed7d699871183ed706699119281canthony
21322c57b74e160f9b605d74dec24081309f28b83899cristy          kernel_info=AcquireKernelInfo(arg1,exception);
2133805a2d48e7e2ed7d699871183ed706699119281canthony          if (kernel_info == (KernelInfo *) NULL)
2134ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
21357792326b1a1fb3357377d8880cc90b275b654246cristy          gamma=0.0;
21367792326b1a1fb3357377d8880cc90b275b654246cristy          for (j=0; j < (ssize_t) (kernel_info->width*kernel_info->height); j++)
21377792326b1a1fb3357377d8880cc90b275b654246cristy            gamma+=kernel_info->values[j];
21387792326b1a1fb3357377d8880cc90b275b654246cristy          gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
21397792326b1a1fb3357377d8880cc90b275b654246cristy          for (j=0; j < (ssize_t) (kernel_info->width*kernel_info->height); j++)
21407792326b1a1fb3357377d8880cc90b275b654246cristy            kernel_info->values[j]*=gamma;
2141a12d8ba3a815842797e8f9d92f52b83c3d1f07a0cristy          new_image=MorphologyImage(_image,CorrelateMorphology,1,kernel_info,
2142a12d8ba3a815842797e8f9d92f52b83c3d1f07a0cristy            _exception);
2143805a2d48e7e2ed7d699871183ed706699119281canthony          kernel_info=DestroyKernelInfo(kernel_info);
2144805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2145805a2d48e7e2ed7d699871183ed706699119281canthony        }
2146afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("crop",option+1) == 0)
2147805a2d48e7e2ed7d699871183ed706699119281canthony        {
214831f1bf7bb6ee2698a2afab42ee0329b11663636canthony          /* WARNING: This can generate multiple images! */
21495d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
2150ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
215192c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=CropImageToTiles(_image,arg1,_exception);
2152805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2153805a2d48e7e2ed7d699871183ed706699119281canthony        }
2154afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("cycle",option+1) == 0)
2155805a2d48e7e2ed7d699871183ed706699119281canthony        {
21565d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
2157ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
215892c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CycleColormapImage(_image,(ssize_t) StringToLong(arg1),
215992c93bd35e207736d340f1b32000006a5bf6208eanthony            _exception);
2160805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2161805a2d48e7e2ed7d699871183ed706699119281canthony        }
2162ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
2163805a2d48e7e2ed7d699871183ed706699119281canthony    }
2164805a2d48e7e2ed7d699871183ed706699119281canthony    case 'd':
2165805a2d48e7e2ed7d699871183ed706699119281canthony    {
2166afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("decipher",option+1) == 0)
2167805a2d48e7e2ed7d699871183ed706699119281canthony        {
21684837ac2f5e9dbb766129a91aa11cf7c547477119anthony          /* Note: arguments do not have percent escapes expanded */
2169805a2d48e7e2ed7d699871183ed706699119281canthony          StringInfo
2170805a2d48e7e2ed7d699871183ed706699119281canthony            *passkey;
2171805a2d48e7e2ed7d699871183ed706699119281canthony
21723a5987c75c361dde2b38579f05ca961927d842fecristy          passkey=FileToStringInfo(arg1,~0UL,_exception);
2173ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          if (passkey == (StringInfo *) NULL)
2174ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
2175ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony
2176ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          (void) PasskeyDecipherImage(_image,passkey,_exception);
2177ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          passkey=DestroyStringInfo(passkey);
2178805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2179805a2d48e7e2ed7d699871183ed706699119281canthony        }
2180afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("depth",option+1) == 0)
2181805a2d48e7e2ed7d699871183ed706699119281canthony        {
218292c93bd35e207736d340f1b32000006a5bf6208eanthony          /* The _image_info->depth setting has already been set
2183dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony             We just need to apply it to all images in current sequence
218431f1bf7bb6ee2698a2afab42ee0329b11663636canthony
2185dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony             WARNING: Depth from 8 to 16 causes 'quantum rounding to images!
2186dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony             That is it really is an operation, not a setting! Arrgghhh
218731f1bf7bb6ee2698a2afab42ee0329b11663636canthony
2188fd706f930f397221c6ba26f112e96e262fb0ba2eanthony             FUTURE: this should not be an operator!!!
2189dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony          */
219092c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageDepth(_image,_image_info->depth,_exception);
2191805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2192805a2d48e7e2ed7d699871183ed706699119281canthony        }
2193afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("deskew",option+1) == 0)
2194805a2d48e7e2ed7d699871183ed706699119281canthony        {
2195805a2d48e7e2ed7d699871183ed706699119281canthony          double
2196805a2d48e7e2ed7d699871183ed706699119281canthony            threshold;
2197805a2d48e7e2ed7d699871183ed706699119281canthony
2198ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          if (IfNormalOp) {
21995d0a441fe7d90e3449f2103ed88c32cec28595e6dirk            if (IsGeometry(arg1) == MagickFalse)
2200ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony              CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
2201fd706f930f397221c6ba26f112e96e262fb0ba2eanthony            threshold=StringToDoubleInterval(arg1,(double) QuantumRange+1.0);
2202ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony          }
2203afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          else
2204afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony            threshold=40.0*QuantumRange/100.0;
220592c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=DeskewImage(_image,threshold,_exception);
2206805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2207805a2d48e7e2ed7d699871183ed706699119281canthony        }
2208afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("despeckle",option+1) == 0)
2209805a2d48e7e2ed7d699871183ed706699119281canthony        {
221092c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=DespeckleImage(_image,_exception);
2211805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2212805a2d48e7e2ed7d699871183ed706699119281canthony        }
2213afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("distort",option+1) == 0)
2214805a2d48e7e2ed7d699871183ed706699119281canthony        {
2215805a2d48e7e2ed7d699871183ed706699119281canthony          double
2216b1d483a6a6a5678173db9d60bec52dd5a37826beanthony            *args;
2217805a2d48e7e2ed7d699871183ed706699119281canthony
2218b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          ssize_t
2219b1d483a6a6a5678173db9d60bec52dd5a37826beanthony            count;
2220805a2d48e7e2ed7d699871183ed706699119281canthony
22212a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          parse = ParseCommandOption(MagickDistortOptions,MagickFalse,arg1);
22222a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          if ( parse < 0 )
2223ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony             CLIWandExceptArgBreak(OptionError,"UnrecognizedDistortMethod",
2224ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony                                      option,arg1);
2225827944d54938c1f8a74ff53cd35c11801060d995dirk          if ((DistortMethod) parse == ResizeDistortion)
2226805a2d48e7e2ed7d699871183ed706699119281canthony            {
222780c3775de081817d58849ae9ded5325d397fb1acanthony               double
222880c3775de081817d58849ae9ded5325d397fb1acanthony                 resize_args[2];
2229805a2d48e7e2ed7d699871183ed706699119281canthony               /* Special Case - Argument is actually a resize geometry!
2230805a2d48e7e2ed7d699871183ed706699119281canthony               ** Convert that to an appropriate distortion argument array.
2231fd706f930f397221c6ba26f112e96e262fb0ba2eanthony               ** FUTURE: make a separate special resize operator
2232fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony                    Roll into a resize special operator */
22335d0a441fe7d90e3449f2103ed88c32cec28595e6dirk               if (IsGeometry(arg2) == MagickFalse)
2234ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony                 CLIWandExceptArgBreak(OptionError,"InvalidGeometry",
2235ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony                                           option,arg2);
2236ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony               (void) ParseRegionGeometry(_image,arg2,&geometry,_exception);
223780c3775de081817d58849ae9ded5325d397fb1acanthony               resize_args[0]=(double) geometry.width;
223880c3775de081817d58849ae9ded5325d397fb1acanthony               resize_args[1]=(double) geometry.height;
2239827944d54938c1f8a74ff53cd35c11801060d995dirk               new_image=DistortImage(_image,(DistortMethod) parse,
22402a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony                    (size_t)2,resize_args,MagickTrue,_exception);
2241805a2d48e7e2ed7d699871183ed706699119281canthony               break;
2242805a2d48e7e2ed7d699871183ed706699119281canthony            }
2243b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          /* convert argument string into an array of doubles */
2244964d28ed4391c639c60c392807c9dfb09f933ba8anthony          args = StringToArrayOfDoubles(arg2,&count,_exception);
2245f432c635c526259b858c9aad3d409c5c44545686cristy          if (args == (double *) NULL )
2246b1d483a6a6a5678173db9d60bec52dd5a37826beanthony            CLIWandExceptArgBreak(OptionError,"InvalidNumberList",option,arg2);
2247b1d483a6a6a5678173db9d60bec52dd5a37826beanthony
2248827944d54938c1f8a74ff53cd35c11801060d995dirk          new_image=DistortImage(_image,(DistortMethod) parse,(size_t)
224952b632a875d61ac705bca7ad2b0919f90112eef9cristy             count,args,IsPlusOp,_exception);
2250b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          args=(double *) RelinquishMagickMemory(args);
2251805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2252805a2d48e7e2ed7d699871183ed706699119281canthony        }
2253afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("draw",option+1) == 0)
2254805a2d48e7e2ed7d699871183ed706699119281canthony        {
225592c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) CloneString(&_draw_info->primitive,arg1);
225692c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) DrawImage(_image,_draw_info,_exception);
2257f432c635c526259b858c9aad3d409c5c44545686cristy          (void) CloneString(&_draw_info->primitive,(char *) NULL);
2258805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2259805a2d48e7e2ed7d699871183ed706699119281canthony        }
2260ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
2261805a2d48e7e2ed7d699871183ed706699119281canthony    }
2262805a2d48e7e2ed7d699871183ed706699119281canthony    case 'e':
2263805a2d48e7e2ed7d699871183ed706699119281canthony    {
2264afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("edge",option+1) == 0)
2265805a2d48e7e2ed7d699871183ed706699119281canthony        {
2266fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
226722de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
226822de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
22699dc4c51125c7242f63ea032e209ea65fe855f82fcristy          new_image=EdgeImage(_image,geometry_info.rho,_exception);
2270805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2271805a2d48e7e2ed7d699871183ed706699119281canthony        }
2272afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("emboss",option+1) == 0)
2273805a2d48e7e2ed7d699871183ed706699119281canthony        {
2274fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
2275b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony          if ((flags & (RhoValue|SigmaValue)) == 0)
2276b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
2277805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
2278805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=1.0;
227992c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=EmbossImage(_image,geometry_info.rho,
228092c93bd35e207736d340f1b32000006a5bf6208eanthony            geometry_info.sigma,_exception);
2281805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2282805a2d48e7e2ed7d699871183ed706699119281canthony        }
2283afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("encipher",option+1) == 0)
2284805a2d48e7e2ed7d699871183ed706699119281canthony        {
22854837ac2f5e9dbb766129a91aa11cf7c547477119anthony          /* Note: arguments do not have percent escapes expanded */
2286805a2d48e7e2ed7d699871183ed706699119281canthony          StringInfo
2287805a2d48e7e2ed7d699871183ed706699119281canthony            *passkey;
2288805a2d48e7e2ed7d699871183ed706699119281canthony
22893a5987c75c361dde2b38579f05ca961927d842fecristy          passkey=FileToStringInfo(arg1,~0UL,_exception);
2290805a2d48e7e2ed7d699871183ed706699119281canthony          if (passkey != (StringInfo *) NULL)
2291805a2d48e7e2ed7d699871183ed706699119281canthony            {
229292c93bd35e207736d340f1b32000006a5bf6208eanthony              (void) PasskeyEncipherImage(_image,passkey,_exception);
2293805a2d48e7e2ed7d699871183ed706699119281canthony              passkey=DestroyStringInfo(passkey);
2294805a2d48e7e2ed7d699871183ed706699119281canthony            }
2295805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2296805a2d48e7e2ed7d699871183ed706699119281canthony        }
2297afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("enhance",option+1) == 0)
2298805a2d48e7e2ed7d699871183ed706699119281canthony        {
229992c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=EnhanceImage(_image,_exception);
2300805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2301805a2d48e7e2ed7d699871183ed706699119281canthony        }
2302afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("equalize",option+1) == 0)
2303805a2d48e7e2ed7d699871183ed706699119281canthony        {
230492c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) EqualizeImage(_image,_exception);
2305805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2306805a2d48e7e2ed7d699871183ed706699119281canthony        }
2307afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("evaluate",option+1) == 0)
2308805a2d48e7e2ed7d699871183ed706699119281canthony        {
2309805a2d48e7e2ed7d699871183ed706699119281canthony          double
2310805a2d48e7e2ed7d699871183ed706699119281canthony            constant;
2311805a2d48e7e2ed7d699871183ed706699119281canthony
23122a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          parse = ParseCommandOption(MagickEvaluateOptions,MagickFalse,arg1);
23132a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          if ( parse < 0 )
23142a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedEvaluateOperator",
23152a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony                 option,arg1);
23165d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg2) == MagickFalse)
23172a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg2);
2318fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          constant=StringToDoubleInterval(arg2,(double) QuantumRange+1.0);
23192a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          (void) EvaluateImage(_image,(MagickEvaluateOperator)parse,constant,
23202a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony               _exception);
2321805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2322805a2d48e7e2ed7d699871183ed706699119281canthony        }
2323afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("extent",option+1) == 0)
2324805a2d48e7e2ed7d699871183ed706699119281canthony        {
23255d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
23262a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
232792c93bd35e207736d340f1b32000006a5bf6208eanthony          flags=ParseGravityGeometry(_image,arg1,&geometry,_exception);
2328805a2d48e7e2ed7d699871183ed706699119281canthony          if (geometry.width == 0)
232992c93bd35e207736d340f1b32000006a5bf6208eanthony            geometry.width=_image->columns;
2330805a2d48e7e2ed7d699871183ed706699119281canthony          if (geometry.height == 0)
233192c93bd35e207736d340f1b32000006a5bf6208eanthony            geometry.height=_image->rows;
233292c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=ExtentImage(_image,&geometry,_exception);
2333805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2334805a2d48e7e2ed7d699871183ed706699119281canthony        }
2335ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
2336805a2d48e7e2ed7d699871183ed706699119281canthony    }
2337805a2d48e7e2ed7d699871183ed706699119281canthony    case 'f':
2338805a2d48e7e2ed7d699871183ed706699119281canthony    {
2339afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("flip",option+1) == 0)
2340805a2d48e7e2ed7d699871183ed706699119281canthony        {
234192c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=FlipImage(_image,_exception);
2342805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2343805a2d48e7e2ed7d699871183ed706699119281canthony        }
2344afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("flop",option+1) == 0)
2345805a2d48e7e2ed7d699871183ed706699119281canthony        {
234692c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=FlopImage(_image,_exception);
2347805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2348805a2d48e7e2ed7d699871183ed706699119281canthony        }
2349afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("floodfill",option+1) == 0)
2350805a2d48e7e2ed7d699871183ed706699119281canthony        {
2351805a2d48e7e2ed7d699871183ed706699119281canthony          PixelInfo
2352805a2d48e7e2ed7d699871183ed706699119281canthony            target;
2353805a2d48e7e2ed7d699871183ed706699119281canthony
23545d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
23552a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
235692c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) ParsePageGeometry(_image,arg1,&geometry,_exception);
235792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) QueryColorCompliance(arg2,AllCompliance,&target,_exception);
235892c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) FloodfillPaintImage(_image,_draw_info,&target,geometry.x,
2359a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            geometry.y,IsPlusOp,_exception);
2360947cb4c68bebf79b15b6f3e824bc973491a77709cristy          break;
2361947cb4c68bebf79b15b6f3e824bc973491a77709cristy        }
2362afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("frame",option+1) == 0)
2363805a2d48e7e2ed7d699871183ed706699119281canthony        {
2364805a2d48e7e2ed7d699871183ed706699119281canthony          FrameInfo
2365805a2d48e7e2ed7d699871183ed706699119281canthony            frame_info;
2366805a2d48e7e2ed7d699871183ed706699119281canthony
236731f1bf7bb6ee2698a2afab42ee0329b11663636canthony          CompositeOperator
2368fd706f930f397221c6ba26f112e96e262fb0ba2eanthony            compose;
2369fd706f930f397221c6ba26f112e96e262fb0ba2eanthony
2370fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          const char*
2371fd706f930f397221c6ba26f112e96e262fb0ba2eanthony            value;
2372fd706f930f397221c6ba26f112e96e262fb0ba2eanthony
237392c93bd35e207736d340f1b32000006a5bf6208eanthony          value=GetImageOption(_image_info,"compose");
237492c93bd35e207736d340f1b32000006a5bf6208eanthony            compose=OverCompositeOp;  /* use Over not _image->compose */
23754b8926134c1e07e0d0ef4562af3c9fc130e432d1cristy          if (value != (const char *) NULL)
23764b8926134c1e07e0d0ef4562af3c9fc130e432d1cristy            compose=(CompositeOperator) ParseCommandOption(MagickComposeOptions,
23774b8926134c1e07e0d0ef4562af3c9fc130e432d1cristy              MagickFalse,value);
23785d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
23792a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
238092c93bd35e207736d340f1b32000006a5bf6208eanthony          flags=ParsePageGeometry(_image,arg1,&geometry,_exception);
2381805a2d48e7e2ed7d699871183ed706699119281canthony          frame_info.width=geometry.width;
2382805a2d48e7e2ed7d699871183ed706699119281canthony          frame_info.height=geometry.height;
2383805a2d48e7e2ed7d699871183ed706699119281canthony          frame_info.outer_bevel=geometry.x;
2384805a2d48e7e2ed7d699871183ed706699119281canthony          frame_info.inner_bevel=geometry.y;
2385805a2d48e7e2ed7d699871183ed706699119281canthony          frame_info.x=(ssize_t) frame_info.width;
2386805a2d48e7e2ed7d699871183ed706699119281canthony          frame_info.y=(ssize_t) frame_info.height;
238792c93bd35e207736d340f1b32000006a5bf6208eanthony          frame_info.width=_image->columns+2*frame_info.width;
238892c93bd35e207736d340f1b32000006a5bf6208eanthony          frame_info.height=_image->rows+2*frame_info.height;
238992c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=FrameImage(_image,&frame_info,compose,_exception);
2390805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2391805a2d48e7e2ed7d699871183ed706699119281canthony        }
2392afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("function",option+1) == 0)
2393805a2d48e7e2ed7d699871183ed706699119281canthony        {
2394805a2d48e7e2ed7d699871183ed706699119281canthony          double
2395b1d483a6a6a5678173db9d60bec52dd5a37826beanthony            *args;
2396805a2d48e7e2ed7d699871183ed706699119281canthony
2397b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          ssize_t
2398b1d483a6a6a5678173db9d60bec52dd5a37826beanthony            count;
2399805a2d48e7e2ed7d699871183ed706699119281canthony
24002a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          parse=ParseCommandOption(MagickFunctionOptions,MagickFalse,arg1);
24012a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          if ( parse < 0 )
24022a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedFunction",
24032a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony                 option,arg1);
2404b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          /* convert argument string into an array of doubles */
2405964d28ed4391c639c60c392807c9dfb09f933ba8anthony          args = StringToArrayOfDoubles(arg2,&count,_exception);
2406f432c635c526259b858c9aad3d409c5c44545686cristy          if (args == (double *) NULL )
2407b1d483a6a6a5678173db9d60bec52dd5a37826beanthony            CLIWandExceptArgBreak(OptionError,"InvalidNumberList",option,arg2);
2408b1d483a6a6a5678173db9d60bec52dd5a37826beanthony
240952b632a875d61ac705bca7ad2b0919f90112eef9cristy          (void) FunctionImage(_image,(MagickFunction)parse,(size_t) count,args,
2410b1d483a6a6a5678173db9d60bec52dd5a37826beanthony               _exception);
2411b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          args=(double *) RelinquishMagickMemory(args);
2412805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2413805a2d48e7e2ed7d699871183ed706699119281canthony        }
2414ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
2415805a2d48e7e2ed7d699871183ed706699119281canthony    }
2416805a2d48e7e2ed7d699871183ed706699119281canthony    case 'g':
2417805a2d48e7e2ed7d699871183ed706699119281canthony    {
2418afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("gamma",option+1) == 0)
2419805a2d48e7e2ed7d699871183ed706699119281canthony        {
24207a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony          double
24217a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony            constant;
24227a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony
24235d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
2424fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
24257a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony          constant=StringToDouble(arg1,(char **) NULL);
24267a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony#if 0
24277a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony          /* Using Gamma, via a cache */
24287a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony          if (IfPlusOp)
24293e3ec3afbb0782697f201cbe30a56794c10dc7efcristy            constant=PerceptibleReciprocal(constant);
24307a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony          (void) GammaImage(_image,constant,_exception);
24317a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony#else
24327a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony          /* Using Evaluate POW, direct update of values - more accurite */
2433afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          if (IfNormalOp)
24343e3ec3afbb0782697f201cbe30a56794c10dc7efcristy            constant=PerceptibleReciprocal(constant);
24357a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony          (void) EvaluateImage(_image,PowEvaluateOperator,constant,_exception);
2436a494388aa6c22bbecf620418c78f9e6d90d353d4cristy          _image->gamma*=StringToDouble(arg1,(char **) NULL);
24377a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony#endif
24387a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony          /* Set gamma setting -- Old meaning of "+gamma"
24397a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony           * _image->gamma=StringToDouble(arg1,(char **) NULL);
24407a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony           */
2441805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2442805a2d48e7e2ed7d699871183ed706699119281canthony        }
2443975a8d7aba7678845112e4d2c5a155011f35a3abanthony      if (LocaleCompare("gaussian-blur",option+1) == 0)
2444805a2d48e7e2ed7d699871183ed706699119281canthony        {
2445fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
2446b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony          if ((flags & (RhoValue|SigmaValue)) == 0)
2447b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
2448805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
2449805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=1.0;
245092c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=GaussianBlurImage(_image,geometry_info.rho,
245192c93bd35e207736d340f1b32000006a5bf6208eanthony            geometry_info.sigma,_exception);
2452805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2453805a2d48e7e2ed7d699871183ed706699119281canthony        }
2454975a8d7aba7678845112e4d2c5a155011f35a3abanthony      if (LocaleCompare("gaussian",option+1) == 0)
2455975a8d7aba7678845112e4d2c5a155011f35a3abanthony        {
2456464f1c476517436723780b8a8bb371464584453canthony          CLIWandWarnReplaced("-gaussian-blur");
245752b632a875d61ac705bca7ad2b0919f90112eef9cristy          (void) CLISimpleOperatorImage(cli_wand,"-gaussian-blur",arg1,NULL,exception);
2458975a8d7aba7678845112e4d2c5a155011f35a3abanthony        }
2459afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("geometry",option+1) == 0)
2460805a2d48e7e2ed7d699871183ed706699119281canthony        {
2461fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          /*
246231f1bf7bb6ee2698a2afab42ee0329b11663636canthony            Record Image offset for composition. (A Setting)
2463fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            Resize last _image. (ListOperator)  -- DEPRECIATE
246431f1bf7bb6ee2698a2afab42ee0329b11663636canthony            FUTURE: Why if no 'offset' does this resize ALL images?
246531f1bf7bb6ee2698a2afab42ee0329b11663636canthony            Also why is the setting recorded in the IMAGE non-sense!
2466fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          */
2467afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          if (IfPlusOp)
2468fd706f930f397221c6ba26f112e96e262fb0ba2eanthony            { /* remove the previous composition geometry offset! */
246992c93bd35e207736d340f1b32000006a5bf6208eanthony              if (_image->geometry != (char *) NULL)
247092c93bd35e207736d340f1b32000006a5bf6208eanthony                _image->geometry=DestroyString(_image->geometry);
2471805a2d48e7e2ed7d699871183ed706699119281canthony              break;
2472805a2d48e7e2ed7d699871183ed706699119281canthony            }
24735d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
2474fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
247592c93bd35e207736d340f1b32000006a5bf6208eanthony          flags=ParseRegionGeometry(_image,arg1,&geometry,_exception);
2476805a2d48e7e2ed7d699871183ed706699119281canthony          if (((flags & XValue) != 0) || ((flags & YValue) != 0))
247792c93bd35e207736d340f1b32000006a5bf6208eanthony            (void) CloneString(&_image->geometry,arg1);
2478805a2d48e7e2ed7d699871183ed706699119281canthony          else
247992c93bd35e207736d340f1b32000006a5bf6208eanthony            new_image=ResizeImage(_image,geometry.width,geometry.height,
2480aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy              _image->filter,_exception);
2481805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2482805a2d48e7e2ed7d699871183ed706699119281canthony        }
2483ab9435990dd6a881f2055aee7562d3de4dabc01dcristy      if (LocaleCompare("grayscale",option+1) == 0)
2484e0b9b8f4be5f9c30ee9638b35dc5db8181e4f13ecristy        {
2485ab9435990dd6a881f2055aee7562d3de4dabc01dcristy          parse=ParseCommandOption(MagickPixelIntensityOptions,
2486e0b9b8f4be5f9c30ee9638b35dc5db8181e4f13ecristy            MagickFalse,arg1);
2487ab9435990dd6a881f2055aee7562d3de4dabc01dcristy          if (parse < 0)
2488ab9435990dd6a881f2055aee7562d3de4dabc01dcristy            CLIWandExceptArgBreak(OptionError,"UnrecognizedIntensityMethod",
2489ab9435990dd6a881f2055aee7562d3de4dabc01dcristy              option,arg1);
2490ab9435990dd6a881f2055aee7562d3de4dabc01dcristy          (void) GrayscaleImage(_image,(PixelIntensityMethod) parse,_exception);
2491e0b9b8f4be5f9c30ee9638b35dc5db8181e4f13ecristy          break;
2492e0b9b8f4be5f9c30ee9638b35dc5db8181e4f13ecristy        }
2493ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
2494805a2d48e7e2ed7d699871183ed706699119281canthony    }
24952fc10e5aedab9144531a4668dc7526e3caf514e1cristy    case 'h':
24962fc10e5aedab9144531a4668dc7526e3caf514e1cristy    {
24972fc10e5aedab9144531a4668dc7526e3caf514e1cristy      if (LocaleCompare("hough-lines",option+1) == 0)
24982fc10e5aedab9144531a4668dc7526e3caf514e1cristy        {
24992fc10e5aedab9144531a4668dc7526e3caf514e1cristy          flags=ParseGeometry(arg1,&geometry_info);
25002fc10e5aedab9144531a4668dc7526e3caf514e1cristy          if ((flags & (RhoValue|SigmaValue)) == 0)
25012fc10e5aedab9144531a4668dc7526e3caf514e1cristy            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
25022fc10e5aedab9144531a4668dc7526e3caf514e1cristy          if ((flags & SigmaValue) == 0)
2503d5b8d2a469c520ee65fac429fca4451cd2aa77fbcristy            geometry_info.sigma=geometry_info.rho;
25042fc10e5aedab9144531a4668dc7526e3caf514e1cristy          if ((flags & XiValue) == 0)
250520f90428960e75e335cd31e9a92ed31ff610117dcristy            geometry_info.xi=40;
250620f90428960e75e335cd31e9a92ed31ff610117dcristy          new_image=HoughLineImage(_image,(size_t) geometry_info.rho,
250720f90428960e75e335cd31e9a92ed31ff610117dcristy            (size_t) geometry_info.sigma,(size_t) geometry_info.xi,_exception);
25082fc10e5aedab9144531a4668dc7526e3caf514e1cristy          break;
25092fc10e5aedab9144531a4668dc7526e3caf514e1cristy        }
25102fc10e5aedab9144531a4668dc7526e3caf514e1cristy      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
25112fc10e5aedab9144531a4668dc7526e3caf514e1cristy    }
2512805a2d48e7e2ed7d699871183ed706699119281canthony    case 'i':
2513805a2d48e7e2ed7d699871183ed706699119281canthony    {
2514afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("identify",option+1) == 0)
2515805a2d48e7e2ed7d699871183ed706699119281canthony        {
251631f1bf7bb6ee2698a2afab42ee0329b11663636canthony          const char
251731f1bf7bb6ee2698a2afab42ee0329b11663636canthony            *format,
2518805a2d48e7e2ed7d699871183ed706699119281canthony            *text;
2519805a2d48e7e2ed7d699871183ed706699119281canthony
252092c93bd35e207736d340f1b32000006a5bf6208eanthony          format=GetImageOption(_image_info,"format");
2521f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy          if (format == (char *) NULL)
2522f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy            {
2523f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy              (void) IdentifyImage(_image,stdout,_image_info->verbose,
2524f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy                _exception);
2525f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy              break;
2526f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy            }
252792c93bd35e207736d340f1b32000006a5bf6208eanthony          text=InterpretImageProperties(_image_info,_image,format,_exception);
2528805a2d48e7e2ed7d699871183ed706699119281canthony          if (text == (char *) NULL)
2529964d28ed4391c639c60c392807c9dfb09f933ba8anthony            CLIWandExceptionBreak(OptionWarning,"InterpretPropertyFailure",
2530f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy              option);
2531805a2d48e7e2ed7d699871183ed706699119281canthony          (void) fputs(text,stdout);
253231f1bf7bb6ee2698a2afab42ee0329b11663636canthony          text=DestroyString((char *)text);
2533805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2534805a2d48e7e2ed7d699871183ed706699119281canthony        }
2535afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("implode",option+1) == 0)
2536805a2d48e7e2ed7d699871183ed706699119281canthony        {
2537b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony          flags=ParseGeometry(arg1,&geometry_info);
2538b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony          if ((flags & RhoValue) == 0)
2539fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
2540b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony          new_image=ImplodeImage(_image,geometry_info.rho,_image->interpolate,
2541b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony               _exception);
2542805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2543805a2d48e7e2ed7d699871183ed706699119281canthony        }
2544afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("interpolative-resize",option+1) == 0)
2545947cb4c68bebf79b15b6f3e824bc973491a77709cristy        {
2546fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          /* FUTURE: New to IMv7
2547fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony               Roll into a resize special operator */
25485d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
2549fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
255092c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) ParseRegionGeometry(_image,arg1,&geometry,_exception);
255192c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=InterpolativeResizeImage(_image,geometry.width,
255292c93bd35e207736d340f1b32000006a5bf6208eanthony               geometry.height,_image->interpolate,_exception);
2553947cb4c68bebf79b15b6f3e824bc973491a77709cristy          break;
2554947cb4c68bebf79b15b6f3e824bc973491a77709cristy        }
2555ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
2556805a2d48e7e2ed7d699871183ed706699119281canthony    }
25573b207f84e063df4bcd421a6cf49a2d74c5190705cristy    case 'k':
25583b207f84e063df4bcd421a6cf49a2d74c5190705cristy    {
25593b207f84e063df4bcd421a6cf49a2d74c5190705cristy      if (LocaleCompare("kuwahara",option+1) == 0)
25603b207f84e063df4bcd421a6cf49a2d74c5190705cristy        {
25613b207f84e063df4bcd421a6cf49a2d74c5190705cristy          /*
25623b207f84e063df4bcd421a6cf49a2d74c5190705cristy            Edge preserving blur.
25633b207f84e063df4bcd421a6cf49a2d74c5190705cristy          */
25643b207f84e063df4bcd421a6cf49a2d74c5190705cristy          flags=ParseGeometry(arg1,&geometry_info);
25653b207f84e063df4bcd421a6cf49a2d74c5190705cristy          if ((flags & (RhoValue|SigmaValue)) == 0)
25663b207f84e063df4bcd421a6cf49a2d74c5190705cristy            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
25673b207f84e063df4bcd421a6cf49a2d74c5190705cristy          if ((flags & SigmaValue) == 0)
256825ea936e4addac40d298332d87bf22654f026fb6cristy            geometry_info.sigma=geometry_info.rho-0.5;
25693b207f84e063df4bcd421a6cf49a2d74c5190705cristy          new_image=KuwaharaImage(_image,geometry_info.rho,geometry_info.sigma,
25703b207f84e063df4bcd421a6cf49a2d74c5190705cristy           _exception);
25713b207f84e063df4bcd421a6cf49a2d74c5190705cristy          break;
25723b207f84e063df4bcd421a6cf49a2d74c5190705cristy        }
25733b207f84e063df4bcd421a6cf49a2d74c5190705cristy      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
25743b207f84e063df4bcd421a6cf49a2d74c5190705cristy    }
2575805a2d48e7e2ed7d699871183ed706699119281canthony    case 'l':
2576805a2d48e7e2ed7d699871183ed706699119281canthony    {
2577afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("lat",option+1) == 0)
2578805a2d48e7e2ed7d699871183ed706699119281canthony        {
2579fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
258022de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
258122de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
2582b5c691ec2b4b726cde507498a7c288ae4d894246cristy          if ((flags & SigmaValue) == 0)
2583b5c691ec2b4b726cde507498a7c288ae4d894246cristy            geometry_info.sigma=1.0;
2584805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & PercentValue) != 0)
2585805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.xi=(double) QuantumRange*geometry_info.xi/100.0;
258692c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=AdaptiveThresholdImage(_image,(size_t) geometry_info.rho,
258731f1bf7bb6ee2698a2afab42ee0329b11663636canthony               (size_t) geometry_info.sigma,(double) geometry_info.xi,
258892c93bd35e207736d340f1b32000006a5bf6208eanthony               _exception);
2589805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2590805a2d48e7e2ed7d699871183ed706699119281canthony        }
2591afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("level",option+1) == 0)
2592805a2d48e7e2ed7d699871183ed706699119281canthony        {
2593a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy          double
2594805a2d48e7e2ed7d699871183ed706699119281canthony            black_point,
2595805a2d48e7e2ed7d699871183ed706699119281canthony            gamma,
2596805a2d48e7e2ed7d699871183ed706699119281canthony            white_point;
2597805a2d48e7e2ed7d699871183ed706699119281canthony
2598805a2d48e7e2ed7d699871183ed706699119281canthony          MagickStatusType
2599805a2d48e7e2ed7d699871183ed706699119281canthony            flags;
2600805a2d48e7e2ed7d699871183ed706699119281canthony
2601fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
260222de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & RhoValue) == 0)
260322de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
2604805a2d48e7e2ed7d699871183ed706699119281canthony          black_point=geometry_info.rho;
2605a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy          white_point=(double) QuantumRange;
2606805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) != 0)
2607805a2d48e7e2ed7d699871183ed706699119281canthony            white_point=geometry_info.sigma;
2608805a2d48e7e2ed7d699871183ed706699119281canthony          gamma=1.0;
2609805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & XiValue) != 0)
2610805a2d48e7e2ed7d699871183ed706699119281canthony            gamma=geometry_info.xi;
2611805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & PercentValue) != 0)
2612805a2d48e7e2ed7d699871183ed706699119281canthony            {
2613a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy              black_point*=(double) (QuantumRange/100.0);
2614a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy              white_point*=(double) (QuantumRange/100.0);
2615805a2d48e7e2ed7d699871183ed706699119281canthony            }
2616805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
2617a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy            white_point=(double) QuantumRange-black_point;
2618afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          if (IfPlusOp || ((flags & AspectValue) != 0))
261992c93bd35e207736d340f1b32000006a5bf6208eanthony            (void) LevelizeImage(_image,black_point,white_point,gamma,_exception);
2620805a2d48e7e2ed7d699871183ed706699119281canthony          else
262192c93bd35e207736d340f1b32000006a5bf6208eanthony            (void) LevelImage(_image,black_point,white_point,gamma,_exception);
2622805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2623805a2d48e7e2ed7d699871183ed706699119281canthony        }
2624afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("level-colors",option+1) == 0)
2625805a2d48e7e2ed7d699871183ed706699119281canthony        {
2626805a2d48e7e2ed7d699871183ed706699119281canthony          char
2627151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy            token[MagickPathExtent];
2628805a2d48e7e2ed7d699871183ed706699119281canthony
2629805a2d48e7e2ed7d699871183ed706699119281canthony          const char
2630805a2d48e7e2ed7d699871183ed706699119281canthony            *p;
2631805a2d48e7e2ed7d699871183ed706699119281canthony
2632805a2d48e7e2ed7d699871183ed706699119281canthony          PixelInfo
2633805a2d48e7e2ed7d699871183ed706699119281canthony            black_point,
2634805a2d48e7e2ed7d699871183ed706699119281canthony            white_point;
2635805a2d48e7e2ed7d699871183ed706699119281canthony
2636fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          p=(const char *) arg1;
26378bedb4edca01599dfd0612cb0daa35b09c67d736Cristy          GetNextToken(p,&p,MagickPathExtent,token);  /* get black point color */
2638805a2d48e7e2ed7d699871183ed706699119281canthony          if ((isalpha((int) *token) != 0) || ((*token == '#') != 0))
2639269c9413034627692b2a7d0a352f9dee4e8eada8cristy            (void) QueryColorCompliance(token,AllCompliance,
264092c93bd35e207736d340f1b32000006a5bf6208eanthony                      &black_point,_exception);
2641805a2d48e7e2ed7d699871183ed706699119281canthony          else
2642269c9413034627692b2a7d0a352f9dee4e8eada8cristy            (void) QueryColorCompliance("#000000",AllCompliance,
264392c93bd35e207736d340f1b32000006a5bf6208eanthony                      &black_point,_exception);
2644805a2d48e7e2ed7d699871183ed706699119281canthony          if (isalpha((int) token[0]) || (token[0] == '#'))
26458bedb4edca01599dfd0612cb0daa35b09c67d736Cristy            GetNextToken(p,&p,MagickPathExtent,token);
2646805a2d48e7e2ed7d699871183ed706699119281canthony          if (*token == '\0')
2647805a2d48e7e2ed7d699871183ed706699119281canthony            white_point=black_point; /* set everything to that color */
2648805a2d48e7e2ed7d699871183ed706699119281canthony          else
2649805a2d48e7e2ed7d699871183ed706699119281canthony            {
2650805a2d48e7e2ed7d699871183ed706699119281canthony              if ((isalpha((int) *token) == 0) && ((*token == '#') == 0))
26518bedb4edca01599dfd0612cb0daa35b09c67d736Cristy                GetNextToken(p,&p,MagickPathExtent,token); /* Get white point color. */
2652805a2d48e7e2ed7d699871183ed706699119281canthony              if ((isalpha((int) *token) != 0) || ((*token == '#') != 0))
2653269c9413034627692b2a7d0a352f9dee4e8eada8cristy                (void) QueryColorCompliance(token,AllCompliance,
265492c93bd35e207736d340f1b32000006a5bf6208eanthony                           &white_point,_exception);
2655805a2d48e7e2ed7d699871183ed706699119281canthony              else
2656269c9413034627692b2a7d0a352f9dee4e8eada8cristy                (void) QueryColorCompliance("#ffffff",AllCompliance,
265792c93bd35e207736d340f1b32000006a5bf6208eanthony                           &white_point,_exception);
2658805a2d48e7e2ed7d699871183ed706699119281canthony            }
265992c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) LevelImageColors(_image,&black_point,&white_point,
2660a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                     IsPlusOp,_exception);
2661805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2662805a2d48e7e2ed7d699871183ed706699119281canthony        }
2663afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("linear-stretch",option+1) == 0)
2664805a2d48e7e2ed7d699871183ed706699119281canthony        {
2665805a2d48e7e2ed7d699871183ed706699119281canthony          double
2666805a2d48e7e2ed7d699871183ed706699119281canthony            black_point,
2667805a2d48e7e2ed7d699871183ed706699119281canthony            white_point;
2668805a2d48e7e2ed7d699871183ed706699119281canthony
2669805a2d48e7e2ed7d699871183ed706699119281canthony          MagickStatusType
2670805a2d48e7e2ed7d699871183ed706699119281canthony            flags;
2671805a2d48e7e2ed7d699871183ed706699119281canthony
2672fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
267322de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & RhoValue) == 0)
267422de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
2675805a2d48e7e2ed7d699871183ed706699119281canthony          black_point=geometry_info.rho;
2676a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy          white_point=(double) _image->columns*_image->rows;
2677805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) != 0)
2678805a2d48e7e2ed7d699871183ed706699119281canthony            white_point=geometry_info.sigma;
2679805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & PercentValue) != 0)
2680805a2d48e7e2ed7d699871183ed706699119281canthony            {
268192c93bd35e207736d340f1b32000006a5bf6208eanthony              black_point*=(double) _image->columns*_image->rows/100.0;
268292c93bd35e207736d340f1b32000006a5bf6208eanthony              white_point*=(double) _image->columns*_image->rows/100.0;
2683805a2d48e7e2ed7d699871183ed706699119281canthony            }
2684805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
2685a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy            white_point=(double) _image->columns*_image->rows-
2686805a2d48e7e2ed7d699871183ed706699119281canthony              black_point;
268792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) LinearStretchImage(_image,black_point,white_point,_exception);
2688805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2689805a2d48e7e2ed7d699871183ed706699119281canthony        }
2690afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("liquid-rescale",option+1) == 0)
2691805a2d48e7e2ed7d699871183ed706699119281canthony        {
2692fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          /* FUTURE: Roll into a resize special operator */
26935d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
2694fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
269592c93bd35e207736d340f1b32000006a5bf6208eanthony          flags=ParseRegionGeometry(_image,arg1,&geometry,_exception);
2696805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & XValue) == 0)
2697805a2d48e7e2ed7d699871183ed706699119281canthony            geometry.x=1;
2698805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & YValue) == 0)
2699805a2d48e7e2ed7d699871183ed706699119281canthony            geometry.y=0;
270092c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=LiquidRescaleImage(_image,geometry.width,
270192c93bd35e207736d340f1b32000006a5bf6208eanthony            geometry.height,1.0*geometry.x,1.0*geometry.y,_exception);
2702805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2703805a2d48e7e2ed7d699871183ed706699119281canthony        }
27043505d87b01f101f16d8b7b6fad595339cf94f290dirk      if (LocaleCompare("local-contrast",option+1) == 0)
27053505d87b01f101f16d8b7b6fad595339cf94f290dirk        {
27063505d87b01f101f16d8b7b6fad595339cf94f290dirk          MagickStatusType
27073505d87b01f101f16d8b7b6fad595339cf94f290dirk            flags;
27083505d87b01f101f16d8b7b6fad595339cf94f290dirk
27093505d87b01f101f16d8b7b6fad595339cf94f290dirk          flags=ParseGeometry(arg1,&geometry_info);
27103505d87b01f101f16d8b7b6fad595339cf94f290dirk          if ((flags & RhoValue) == 0)
2711394f211e475ce19fdfbebb0760280013fdd1bd80dirk            geometry_info.rho=10;
27123505d87b01f101f16d8b7b6fad595339cf94f290dirk          if ((flags & SigmaValue) == 0)
2713394f211e475ce19fdfbebb0760280013fdd1bd80dirk            geometry_info.sigma=12.5;
27143505d87b01f101f16d8b7b6fad595339cf94f290dirk          new_image=LocalContrastImage(_image,geometry_info.rho,
27153505d87b01f101f16d8b7b6fad595339cf94f290dirk            geometry_info.sigma,exception);
27163505d87b01f101f16d8b7b6fad595339cf94f290dirk          break;
27173505d87b01f101f16d8b7b6fad595339cf94f290dirk        }
2718ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
2719805a2d48e7e2ed7d699871183ed706699119281canthony    }
2720805a2d48e7e2ed7d699871183ed706699119281canthony    case 'm':
2721805a2d48e7e2ed7d699871183ed706699119281canthony    {
27227220ee4e3f325d35e1a0f4cd00f497e2812fe5f1cristy      if (LocaleCompare("magnify",option+1) == 0)
27237220ee4e3f325d35e1a0f4cd00f497e2812fe5f1cristy        {
27247220ee4e3f325d35e1a0f4cd00f497e2812fe5f1cristy          new_image=MagnifyImage(_image,_exception);
27257220ee4e3f325d35e1a0f4cd00f497e2812fe5f1cristy          break;
27267220ee4e3f325d35e1a0f4cd00f497e2812fe5f1cristy        }
2727afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("map",option+1) == 0)
2728805a2d48e7e2ed7d699871183ed706699119281canthony        {
2729464f1c476517436723780b8a8bb371464584453canthony          CLIWandWarnReplaced("-remap");
273052b632a875d61ac705bca7ad2b0919f90112eef9cristy          (void) CLISimpleOperatorImage(cli_wand,"-remap",NULL,NULL,exception);
2731805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2732805a2d48e7e2ed7d699871183ed706699119281canthony        }
2733afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("mask",option+1) == 0)
2734805a2d48e7e2ed7d699871183ed706699119281canthony        {
2735327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          CLIWandWarnReplaced("-read-mask");
2736327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          (void) CLISimpleOperatorImage(cli_wand,"-read-mask",NULL,NULL,
2737327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy            exception);
2738805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2739805a2d48e7e2ed7d699871183ed706699119281canthony        }
274052ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy      if (LocaleCompare("matte",option+1) == 0)
274152ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy        {
274252ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy          CLIWandWarnReplaced(IfNormalOp?"-alpha Set":"-alpha Off");
274352ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy          (void) SetImageAlphaChannel(_image,IfNormalOp ? SetAlphaChannel :
27441309fc31647973212b7aa8bf54554363e175a952cristy            DeactivateAlphaChannel, _exception);
274552ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy          break;
274652ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy        }
27472fc10e5aedab9144531a4668dc7526e3caf514e1cristy      if (LocaleCompare("mean-shift",option+1) == 0)
27482fc10e5aedab9144531a4668dc7526e3caf514e1cristy        {
27492fc10e5aedab9144531a4668dc7526e3caf514e1cristy          flags=ParseGeometry(arg1,&geometry_info);
27502fc10e5aedab9144531a4668dc7526e3caf514e1cristy          if ((flags & (RhoValue|SigmaValue)) == 0)
27512fc10e5aedab9144531a4668dc7526e3caf514e1cristy            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
27522fc10e5aedab9144531a4668dc7526e3caf514e1cristy          if ((flags & SigmaValue) == 0)
27532fc10e5aedab9144531a4668dc7526e3caf514e1cristy            geometry_info.sigma=1.0;
27542fc10e5aedab9144531a4668dc7526e3caf514e1cristy          if ((flags & XiValue) == 0)
27551309fc31647973212b7aa8bf54554363e175a952cristy            geometry_info.xi=0.10*QuantumRange;
27561309fc31647973212b7aa8bf54554363e175a952cristy          if ((flags & PercentValue) != 0)
27571309fc31647973212b7aa8bf54554363e175a952cristy            geometry_info.xi=(double) QuantumRange*geometry_info.xi/100.0;
27581309fc31647973212b7aa8bf54554363e175a952cristy          new_image=MeanShiftImage(_image,(size_t) geometry_info.rho,
27591309fc31647973212b7aa8bf54554363e175a952cristy            (size_t) geometry_info.sigma,geometry_info.xi,_exception);
27602fc10e5aedab9144531a4668dc7526e3caf514e1cristy          break;
27612fc10e5aedab9144531a4668dc7526e3caf514e1cristy        }
276252ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy      if (LocaleCompare("median",option+1) == 0)
276352ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy        {
276452ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy          CLIWandWarnReplaced("-statistic Median");
276552b632a875d61ac705bca7ad2b0919f90112eef9cristy          (void) CLISimpleOperatorImage(cli_wand,"-statistic","Median",arg1,exception);
276652ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy          break;
276752ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy        }
276852ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy      if (LocaleCompare("mode",option+1) == 0)
276952ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy        {
277052ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy          /* FUTURE: note this is also a special "montage" option */
277152ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy          CLIWandWarnReplaced("-statistic Mode");
277252b632a875d61ac705bca7ad2b0919f90112eef9cristy          (void) CLISimpleOperatorImage(cli_wand,"-statistic","Mode",arg1,exception);
277352ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy          break;
277452ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy        }
2775afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("modulate",option+1) == 0)
2776805a2d48e7e2ed7d699871183ed706699119281canthony        {
27775d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
27787bc87995f5fcb67d01e8cad3e80b0024b42e942danthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
277992c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) ModulateImage(_image,arg1,_exception);
2780805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2781805a2d48e7e2ed7d699871183ed706699119281canthony        }
2782afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("monitor",option+1) == 0)
2783805a2d48e7e2ed7d699871183ed706699119281canthony        {
278492c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageProgressMonitor(_image, IfNormalOp ? MonitorProgress :
2785afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony                (MagickProgressMonitor) NULL,(void *) NULL);
2786805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2787805a2d48e7e2ed7d699871183ed706699119281canthony        }
2788afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("monochrome",option+1) == 0)
2789805a2d48e7e2ed7d699871183ed706699119281canthony        {
279092c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageType(_image,BilevelType,_exception);
2791805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2792805a2d48e7e2ed7d699871183ed706699119281canthony        }
2793afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("morphology",option+1) == 0)
2794805a2d48e7e2ed7d699871183ed706699119281canthony        {
2795805a2d48e7e2ed7d699871183ed706699119281canthony          char
2796151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy            token[MagickPathExtent];
2797805a2d48e7e2ed7d699871183ed706699119281canthony
2798805a2d48e7e2ed7d699871183ed706699119281canthony          const char
2799805a2d48e7e2ed7d699871183ed706699119281canthony            *p;
2800805a2d48e7e2ed7d699871183ed706699119281canthony
2801805a2d48e7e2ed7d699871183ed706699119281canthony          KernelInfo
2802805a2d48e7e2ed7d699871183ed706699119281canthony            *kernel;
2803805a2d48e7e2ed7d699871183ed706699119281canthony
2804805a2d48e7e2ed7d699871183ed706699119281canthony          ssize_t
2805805a2d48e7e2ed7d699871183ed706699119281canthony            iterations;
2806805a2d48e7e2ed7d699871183ed706699119281canthony
2807fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          p=arg1;
28088bedb4edca01599dfd0612cb0daa35b09c67d736Cristy          GetNextToken(p,&p,MagickPathExtent,token);
28097bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          parse=ParseCommandOption(MagickMorphologyOptions,MagickFalse,token);
28107bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          if ( parse < 0 )
28112c57b74e160f9b605d74dec24081309f28b83899cristy            CLIWandExceptArgBreak(OptionError,"UnrecognizedFunction",option,
28122c57b74e160f9b605d74dec24081309f28b83899cristy              arg1);
2813805a2d48e7e2ed7d699871183ed706699119281canthony          iterations=1L;
28148bedb4edca01599dfd0612cb0daa35b09c67d736Cristy          GetNextToken(p,&p,MagickPathExtent,token);
2815805a2d48e7e2ed7d699871183ed706699119281canthony          if ((*p == ':') || (*p == ','))
28168bedb4edca01599dfd0612cb0daa35b09c67d736Cristy            GetNextToken(p,&p,MagickPathExtent,token);
2817805a2d48e7e2ed7d699871183ed706699119281canthony          if ((*p != '\0'))
2818805a2d48e7e2ed7d699871183ed706699119281canthony            iterations=(ssize_t) StringToLong(p);
28192c57b74e160f9b605d74dec24081309f28b83899cristy          kernel=AcquireKernelInfo(arg2,exception);
2820805a2d48e7e2ed7d699871183ed706699119281canthony          if (kernel == (KernelInfo *) NULL)
28212c57b74e160f9b605d74dec24081309f28b83899cristy            CLIWandExceptArgBreak(OptionError,"UnabletoParseKernel",option,arg2);
28222c57b74e160f9b605d74dec24081309f28b83899cristy          new_image=MorphologyImage(_image,(MorphologyMethod)parse,iterations,
28232c57b74e160f9b605d74dec24081309f28b83899cristy            kernel,_exception);
2824805a2d48e7e2ed7d699871183ed706699119281canthony          kernel=DestroyKernelInfo(kernel);
2825805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2826805a2d48e7e2ed7d699871183ed706699119281canthony        }
2827afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("motion-blur",option+1) == 0)
2828805a2d48e7e2ed7d699871183ed706699119281canthony        {
2829fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
283022de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
283122de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
2832805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
2833805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=1.0;
28342c57b74e160f9b605d74dec24081309f28b83899cristy          new_image=MotionBlurImage(_image,geometry_info.rho,geometry_info.sigma,
28352c57b74e160f9b605d74dec24081309f28b83899cristy            geometry_info.xi,_exception);
2836805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2837805a2d48e7e2ed7d699871183ed706699119281canthony        }
2838ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
2839805a2d48e7e2ed7d699871183ed706699119281canthony    }
2840805a2d48e7e2ed7d699871183ed706699119281canthony    case 'n':
2841805a2d48e7e2ed7d699871183ed706699119281canthony    {
2842afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("negate",option+1) == 0)
2843805a2d48e7e2ed7d699871183ed706699119281canthony        {
2844a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          (void) NegateImage(_image, IsPlusOp, _exception);
2845805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2846805a2d48e7e2ed7d699871183ed706699119281canthony        }
2847afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("noise",option+1) == 0)
2848805a2d48e7e2ed7d699871183ed706699119281canthony        {
2849975a8d7aba7678845112e4d2c5a155011f35a3abanthony          double
2850975a8d7aba7678845112e4d2c5a155011f35a3abanthony            attenuate;
285131f1bf7bb6ee2698a2afab42ee0329b11663636canthony
2852975a8d7aba7678845112e4d2c5a155011f35a3abanthony          const char*
2853975a8d7aba7678845112e4d2c5a155011f35a3abanthony            value;
285431f1bf7bb6ee2698a2afab42ee0329b11663636canthony
2855975a8d7aba7678845112e4d2c5a155011f35a3abanthony          if (IfNormalOp)
2856975a8d7aba7678845112e4d2c5a155011f35a3abanthony            {
2857464f1c476517436723780b8a8bb371464584453canthony              CLIWandWarnReplaced("-statistic NonPeak");
285852b632a875d61ac705bca7ad2b0919f90112eef9cristy              (void) CLISimpleOperatorImage(cli_wand,"-statistic","NonPeak",arg1,exception);
2859975a8d7aba7678845112e4d2c5a155011f35a3abanthony              break;
2860805a2d48e7e2ed7d699871183ed706699119281canthony            }
2861975a8d7aba7678845112e4d2c5a155011f35a3abanthony          parse=ParseCommandOption(MagickNoiseOptions,MagickFalse,arg1);
2862975a8d7aba7678845112e4d2c5a155011f35a3abanthony          if ( parse < 0 )
2863975a8d7aba7678845112e4d2c5a155011f35a3abanthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedNoiseType",
2864975a8d7aba7678845112e4d2c5a155011f35a3abanthony                option,arg1);
2865975a8d7aba7678845112e4d2c5a155011f35a3abanthony          attenuate=1.0;
2866975a8d7aba7678845112e4d2c5a155011f35a3abanthony          value=GetImageOption(_image_info,"attenuate");
2867975a8d7aba7678845112e4d2c5a155011f35a3abanthony          if  (value != (const char *) NULL)
2868975a8d7aba7678845112e4d2c5a155011f35a3abanthony            attenuate=StringToDouble(value,(char **) NULL);
2869975a8d7aba7678845112e4d2c5a155011f35a3abanthony          new_image=AddNoiseImage(_image,(NoiseType)parse,attenuate,
2870975a8d7aba7678845112e4d2c5a155011f35a3abanthony               _exception);
2871805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2872805a2d48e7e2ed7d699871183ed706699119281canthony        }
2873afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("normalize",option+1) == 0)
2874805a2d48e7e2ed7d699871183ed706699119281canthony        {
287592c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) NormalizeImage(_image,_exception);
2876805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2877805a2d48e7e2ed7d699871183ed706699119281canthony        }
2878ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
2879805a2d48e7e2ed7d699871183ed706699119281canthony    }
2880805a2d48e7e2ed7d699871183ed706699119281canthony    case 'o':
2881805a2d48e7e2ed7d699871183ed706699119281canthony    {
2882afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("opaque",option+1) == 0)
2883805a2d48e7e2ed7d699871183ed706699119281canthony        {
2884805a2d48e7e2ed7d699871183ed706699119281canthony          PixelInfo
2885805a2d48e7e2ed7d699871183ed706699119281canthony            target;
2886805a2d48e7e2ed7d699871183ed706699119281canthony
288792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) QueryColorCompliance(arg1,AllCompliance,&target,_exception);
2888a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          (void) OpaquePaintImage(_image,&target,&_draw_info->fill,IsPlusOp,
288992c93bd35e207736d340f1b32000006a5bf6208eanthony               _exception);
2890805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2891805a2d48e7e2ed7d699871183ed706699119281canthony        }
2892afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("ordered-dither",option+1) == 0)
2893805a2d48e7e2ed7d699871183ed706699119281canthony        {
2894cd69a2d4e422d02a1ca70c45f59861752717871edirk          (void) OrderedDitherImage(_image,arg1,_exception);
2895805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2896805a2d48e7e2ed7d699871183ed706699119281canthony        }
2897ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
2898805a2d48e7e2ed7d699871183ed706699119281canthony    }
2899805a2d48e7e2ed7d699871183ed706699119281canthony    case 'p':
2900805a2d48e7e2ed7d699871183ed706699119281canthony    {
2901afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("paint",option+1) == 0)
2902805a2d48e7e2ed7d699871183ed706699119281canthony        {
290322de2722b682eb405b60ec6022a7546df994674eanthony          flags=ParseGeometry(arg1,&geometry_info);
290422de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
290522de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
290692c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=OilPaintImage(_image,geometry_info.rho,geometry_info.sigma,
290792c93bd35e207736d340f1b32000006a5bf6208eanthony               _exception);
2908805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2909805a2d48e7e2ed7d699871183ed706699119281canthony        }
29107884a9380b6826befb2773117db32d3877b40ac6cristy      if (LocaleCompare("perceptible",option+1) == 0)
29117884a9380b6826befb2773117db32d3877b40ac6cristy        {
29127884a9380b6826befb2773117db32d3877b40ac6cristy          (void) PerceptibleImage(_image,StringToDouble(arg1,(char **) NULL),
29137884a9380b6826befb2773117db32d3877b40ac6cristy            _exception);
29147884a9380b6826befb2773117db32d3877b40ac6cristy          break;
29157884a9380b6826befb2773117db32d3877b40ac6cristy        }
2916afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("polaroid",option+1) == 0)
2917805a2d48e7e2ed7d699871183ed706699119281canthony        {
2918e9e3d389ed5873131a570d26375abeb93e688740cristy          const char
2919e9e3d389ed5873131a570d26375abeb93e688740cristy            *caption;
2920e9e3d389ed5873131a570d26375abeb93e688740cristy
2921805a2d48e7e2ed7d699871183ed706699119281canthony          double
2922805a2d48e7e2ed7d699871183ed706699119281canthony            angle;
2923805a2d48e7e2ed7d699871183ed706699119281canthony
29247bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          if (IfPlusOp) {
2925f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            RandomInfo
29262c57b74e160f9b605d74dec24081309f28b83899cristy              *random_info;
2927805a2d48e7e2ed7d699871183ed706699119281canthony
2928f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            random_info=AcquireRandomInfo();
2929f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            angle=22.5*(GetPseudoRandomValue(random_info)-0.5);
2930f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            random_info=DestroyRandomInfo(random_info);
2931f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          }
29327bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          else {
2933f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            flags=ParseGeometry(arg1,&geometry_info);
293422de2722b682eb405b60ec6022a7546df994674eanthony            if ((flags & RhoValue) == 0)
293522de2722b682eb405b60ec6022a7546df994674eanthony              CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
2936f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            angle=geometry_info.rho;
2937f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          }
293892c93bd35e207736d340f1b32000006a5bf6208eanthony          caption=GetImageProperty(_image,"caption",_exception);
293992c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=PolaroidImage(_image,_draw_info,caption,angle,
294092c93bd35e207736d340f1b32000006a5bf6208eanthony            _image->interpolate,_exception);
2941805a2d48e7e2ed7d699871183ed706699119281canthony          break;
29428cdfb34521517f1062d21941afcb28ca7b61b97ccristy        }
2943afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("posterize",option+1) == 0)
2944805a2d48e7e2ed7d699871183ed706699119281canthony        {
294522de2722b682eb405b60ec6022a7546df994674eanthony          flags=ParseGeometry(arg1,&geometry_info);
294622de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & RhoValue) == 0)
29477bc87995f5fcb67d01e8cad3e80b0024b42e942danthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
294892c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) PosterizeImage(_image,(size_t) geometry_info.rho,
2949cbda611068350bf4459f2dda1951f8823702e129cristy            _quantize_info->dither_method,_exception);
2950805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2951805a2d48e7e2ed7d699871183ed706699119281canthony        }
2952afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("preview",option+1) == 0)
2953805a2d48e7e2ed7d699871183ed706699119281canthony        {
295431f1bf7bb6ee2698a2afab42ee0329b11663636canthony          /* FUTURE: should be a 'Genesis' option?
295531f1bf7bb6ee2698a2afab42ee0329b11663636canthony             Option however is also in WandSettingOptionInfo()
29567bc87995f5fcb67d01e8cad3e80b0024b42e942danthony             Why???
2957947cb4c68bebf79b15b6f3e824bc973491a77709cristy          */
29587bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          parse=ParseCommandOption(MagickPreviewOptions, MagickFalse,arg1);
29597bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          if ( parse < 0 )
29607bc87995f5fcb67d01e8cad3e80b0024b42e942danthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedPreviewType",
29617bc87995f5fcb67d01e8cad3e80b0024b42e942danthony                option,arg1);
29627bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          new_image=PreviewImage(_image,(PreviewType)parse,_exception);
2963805a2d48e7e2ed7d699871183ed706699119281canthony          break;
2964805a2d48e7e2ed7d699871183ed706699119281canthony        }
2965afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("profile",option+1) == 0)
2966805a2d48e7e2ed7d699871183ed706699119281canthony        {
29674837ac2f5e9dbb766129a91aa11cf7c547477119anthony          /* Note: arguments do not have percent escapes expanded */
2968805a2d48e7e2ed7d699871183ed706699119281canthony          const char
2969805a2d48e7e2ed7d699871183ed706699119281canthony            *name;
2970805a2d48e7e2ed7d699871183ed706699119281canthony
2971805a2d48e7e2ed7d699871183ed706699119281canthony          const StringInfo
2972805a2d48e7e2ed7d699871183ed706699119281canthony            *profile;
2973805a2d48e7e2ed7d699871183ed706699119281canthony
2974805a2d48e7e2ed7d699871183ed706699119281canthony          Image
2975805a2d48e7e2ed7d699871183ed706699119281canthony            *profile_image;
2976805a2d48e7e2ed7d699871183ed706699119281canthony
2977805a2d48e7e2ed7d699871183ed706699119281canthony          ImageInfo
2978805a2d48e7e2ed7d699871183ed706699119281canthony            *profile_info;
2979805a2d48e7e2ed7d699871183ed706699119281canthony
2980afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          if (IfPlusOp)
298192c93bd35e207736d340f1b32000006a5bf6208eanthony            { /* Remove a profile from the _image.  */
298292c93bd35e207736d340f1b32000006a5bf6208eanthony              (void) ProfileImage(_image,arg1,(const unsigned char *)
298392c93bd35e207736d340f1b32000006a5bf6208eanthony                NULL,0,_exception);
2984805a2d48e7e2ed7d699871183ed706699119281canthony              break;
2985805a2d48e7e2ed7d699871183ed706699119281canthony            }
298692c93bd35e207736d340f1b32000006a5bf6208eanthony          /* Associate a profile with the _image.  */
298792c93bd35e207736d340f1b32000006a5bf6208eanthony          profile_info=CloneImageInfo(_image_info);
298892c93bd35e207736d340f1b32000006a5bf6208eanthony          profile=GetImageProfile(_image,"iptc");
2989805a2d48e7e2ed7d699871183ed706699119281canthony          if (profile != (StringInfo *) NULL)
2990805a2d48e7e2ed7d699871183ed706699119281canthony            profile_info->profile=(void *) CloneStringInfo(profile);
299192c93bd35e207736d340f1b32000006a5bf6208eanthony          profile_image=GetImageCache(profile_info,arg1,_exception);
2992805a2d48e7e2ed7d699871183ed706699119281canthony          profile_info=DestroyImageInfo(profile_info);
2993805a2d48e7e2ed7d699871183ed706699119281canthony          if (profile_image == (Image *) NULL)
2994805a2d48e7e2ed7d699871183ed706699119281canthony            {
2995805a2d48e7e2ed7d699871183ed706699119281canthony              StringInfo
2996805a2d48e7e2ed7d699871183ed706699119281canthony                *profile;
2997805a2d48e7e2ed7d699871183ed706699119281canthony
299892c93bd35e207736d340f1b32000006a5bf6208eanthony              profile_info=CloneImageInfo(_image_info);
2999fd706f930f397221c6ba26f112e96e262fb0ba2eanthony              (void) CopyMagickString(profile_info->filename,arg1,
3000151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy                MagickPathExtent);
300192c93bd35e207736d340f1b32000006a5bf6208eanthony              profile=FileToStringInfo(profile_info->filename,~0UL,_exception);
3002805a2d48e7e2ed7d699871183ed706699119281canthony              if (profile != (StringInfo *) NULL)
3003805a2d48e7e2ed7d699871183ed706699119281canthony                {
300492c93bd35e207736d340f1b32000006a5bf6208eanthony                  (void) ProfileImage(_image,profile_info->magick,
3005805a2d48e7e2ed7d699871183ed706699119281canthony                    GetStringInfoDatum(profile),(size_t)
300692c93bd35e207736d340f1b32000006a5bf6208eanthony                    GetStringInfoLength(profile),_exception);
3007805a2d48e7e2ed7d699871183ed706699119281canthony                  profile=DestroyStringInfo(profile);
3008805a2d48e7e2ed7d699871183ed706699119281canthony                }
3009805a2d48e7e2ed7d699871183ed706699119281canthony              profile_info=DestroyImageInfo(profile_info);
3010805a2d48e7e2ed7d699871183ed706699119281canthony              break;
3011805a2d48e7e2ed7d699871183ed706699119281canthony            }
3012805a2d48e7e2ed7d699871183ed706699119281canthony          ResetImageProfileIterator(profile_image);
3013805a2d48e7e2ed7d699871183ed706699119281canthony          name=GetNextImageProfile(profile_image);
3014805a2d48e7e2ed7d699871183ed706699119281canthony          while (name != (const char *) NULL)
3015805a2d48e7e2ed7d699871183ed706699119281canthony          {
3016805a2d48e7e2ed7d699871183ed706699119281canthony            profile=GetImageProfile(profile_image,name);
3017805a2d48e7e2ed7d699871183ed706699119281canthony            if (profile != (StringInfo *) NULL)
301892c93bd35e207736d340f1b32000006a5bf6208eanthony              (void) ProfileImage(_image,name,GetStringInfoDatum(profile),
301992c93bd35e207736d340f1b32000006a5bf6208eanthony                (size_t) GetStringInfoLength(profile),_exception);
3020805a2d48e7e2ed7d699871183ed706699119281canthony            name=GetNextImageProfile(profile_image);
3021805a2d48e7e2ed7d699871183ed706699119281canthony          }
3022805a2d48e7e2ed7d699871183ed706699119281canthony          profile_image=DestroyImage(profile_image);
3023805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3024805a2d48e7e2ed7d699871183ed706699119281canthony        }
3025ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
3026805a2d48e7e2ed7d699871183ed706699119281canthony    }
3027805a2d48e7e2ed7d699871183ed706699119281canthony    case 'r':
3028805a2d48e7e2ed7d699871183ed706699119281canthony    {
30296d612cf866ac2d4bae9e21f95b035f8bf50c6f28dirk      if (LocaleCompare("rotational-blur",option+1) == 0)
3030805a2d48e7e2ed7d699871183ed706699119281canthony        {
3031fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
303222de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & RhoValue) == 0)
303322de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
30346d612cf866ac2d4bae9e21f95b035f8bf50c6f28dirk          new_image=RotationalBlurImage(_image,geometry_info.rho,_exception);
3035805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3036805a2d48e7e2ed7d699871183ed706699119281canthony        }
3037afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("raise",option+1) == 0)
3038805a2d48e7e2ed7d699871183ed706699119281canthony        {
30395d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
3040f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
304192c93bd35e207736d340f1b32000006a5bf6208eanthony          flags=ParsePageGeometry(_image,arg1,&geometry,_exception);
3042a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          (void) RaiseImage(_image,&geometry,IsNormalOp,_exception);
3043805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3044805a2d48e7e2ed7d699871183ed706699119281canthony        }
3045afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("random-threshold",option+1) == 0)
3046805a2d48e7e2ed7d699871183ed706699119281canthony        {
30478352b50e85321562d27f6a90aa7d461afa0c1df0dirk          double
30488352b50e85321562d27f6a90aa7d461afa0c1df0dirk            min_threshold,
30498352b50e85321562d27f6a90aa7d461afa0c1df0dirk            max_threshold;
30508352b50e85321562d27f6a90aa7d461afa0c1df0dirk
30515d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
3052f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
30538352b50e85321562d27f6a90aa7d461afa0c1df0dirk          min_threshold=0.0;
30548352b50e85321562d27f6a90aa7d461afa0c1df0dirk          max_threshold=(double) QuantumRange;
30558352b50e85321562d27f6a90aa7d461afa0c1df0dirk          flags=ParseGeometry(arg1,&geometry_info);
30568352b50e85321562d27f6a90aa7d461afa0c1df0dirk          min_threshold=geometry_info.rho;
30578352b50e85321562d27f6a90aa7d461afa0c1df0dirk          max_threshold=geometry_info.sigma;
30588352b50e85321562d27f6a90aa7d461afa0c1df0dirk          if ((flags & SigmaValue) == 0)
30598352b50e85321562d27f6a90aa7d461afa0c1df0dirk            max_threshold=min_threshold;
30608352b50e85321562d27f6a90aa7d461afa0c1df0dirk          if (strchr(arg1,'%') != (char *) NULL)
30618352b50e85321562d27f6a90aa7d461afa0c1df0dirk            {
30628352b50e85321562d27f6a90aa7d461afa0c1df0dirk              max_threshold*=(double) (0.01*QuantumRange);
30638352b50e85321562d27f6a90aa7d461afa0c1df0dirk              min_threshold*=(double) (0.01*QuantumRange);
30648352b50e85321562d27f6a90aa7d461afa0c1df0dirk            }
30658352b50e85321562d27f6a90aa7d461afa0c1df0dirk          (void) RandomThresholdImage(_image,min_threshold,max_threshold,
30668352b50e85321562d27f6a90aa7d461afa0c1df0dirk            _exception);
3067805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3068805a2d48e7e2ed7d699871183ed706699119281canthony        }
3069327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy      if (LocaleCompare("read-mask",option+1) == 0)
3070327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy        {
3071327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          /* Note: arguments do not have percent escapes expanded */
3072327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          Image
3073327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy            *mask;
3074327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy
3075327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          if (IfPlusOp)
3076327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy            { /* Remove a mask. */
3077327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy              (void) SetImageMask(_image,ReadPixelMask,(Image *) NULL,
3078327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy                _exception);
3079327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy              break;
3080327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy            }
3081327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          /* Set the image mask. */
3082327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          mask=GetImageCache(_image_info,arg1,_exception);
3083327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          if (mask == (Image *) NULL)
3084327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy            break;
3085327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          (void) SetImageMask(_image,ReadPixelMask,mask,_exception);
3086327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          mask=DestroyImage(mask);
3087327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          break;
3088327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy        }
3089975a8d7aba7678845112e4d2c5a155011f35a3abanthony      if (LocaleCompare("recolor",option+1) == 0)
3090975a8d7aba7678845112e4d2c5a155011f35a3abanthony        {
3091464f1c476517436723780b8a8bb371464584453canthony          CLIWandWarnReplaced("-color-matrix");
309252b632a875d61ac705bca7ad2b0919f90112eef9cristy          (void) CLISimpleOperatorImage(cli_wand,"-color-matrix",arg1,NULL,exception);
3093975a8d7aba7678845112e4d2c5a155011f35a3abanthony        }
3094afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("remap",option+1) == 0)
3095805a2d48e7e2ed7d699871183ed706699119281canthony        {
30964837ac2f5e9dbb766129a91aa11cf7c547477119anthony          /* Note: arguments do not have percent escapes expanded */
3097805a2d48e7e2ed7d699871183ed706699119281canthony          Image
3098805a2d48e7e2ed7d699871183ed706699119281canthony            *remap_image;
3099805a2d48e7e2ed7d699871183ed706699119281canthony
310092c93bd35e207736d340f1b32000006a5bf6208eanthony          remap_image=GetImageCache(_image_info,arg1,_exception);
3101805a2d48e7e2ed7d699871183ed706699119281canthony          if (remap_image == (Image *) NULL)
3102805a2d48e7e2ed7d699871183ed706699119281canthony            break;
310392c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) RemapImage(_quantize_info,_image,remap_image,_exception);
3104805a2d48e7e2ed7d699871183ed706699119281canthony          remap_image=DestroyImage(remap_image);
3105805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3106805a2d48e7e2ed7d699871183ed706699119281canthony        }
3107afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("repage",option+1) == 0)
3108805a2d48e7e2ed7d699871183ed706699119281canthony        {
3109afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          if (IfNormalOp)
31100d0de74f1eb7f2e4a52a75c10aa52b358e428634cristy            {
31115d0a441fe7d90e3449f2103ed88c32cec28595e6dirk              if (IsGeometry(arg1) == MagickFalse)
31120d0de74f1eb7f2e4a52a75c10aa52b358e428634cristy                CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,
31130d0de74f1eb7f2e4a52a75c10aa52b358e428634cristy                  arg1);
31140d0de74f1eb7f2e4a52a75c10aa52b358e428634cristy              (void) ResetImagePage(_image,arg1);
31150d0de74f1eb7f2e4a52a75c10aa52b358e428634cristy            }
311631f1bf7bb6ee2698a2afab42ee0329b11663636canthony          else
311792c93bd35e207736d340f1b32000006a5bf6208eanthony            (void) ParseAbsoluteGeometry("0x0+0+0",&_image->page);
3118805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3119805a2d48e7e2ed7d699871183ed706699119281canthony        }
3120afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("resample",option+1) == 0)
3121805a2d48e7e2ed7d699871183ed706699119281canthony        {
3122f46d42620631d2581e0b6a56456e203e17c427c8anthony          /* FUTURE: Roll into a resize special operation */
3123fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
312422de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
312522de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3126805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
3127805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=geometry_info.rho;
312892c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=ResampleImage(_image,geometry_info.rho,
3129aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy            geometry_info.sigma,_image->filter,_exception);
3130805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3131805a2d48e7e2ed7d699871183ed706699119281canthony        }
3132afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("resize",option+1) == 0)
3133805a2d48e7e2ed7d699871183ed706699119281canthony        {
31345d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
3135f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
313692c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) ParseRegionGeometry(_image,arg1,&geometry,_exception);
313792c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=ResizeImage(_image,geometry.width,geometry.height,
3138aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy            _image->filter,_exception);
3139805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3140805a2d48e7e2ed7d699871183ed706699119281canthony        }
3141afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("roll",option+1) == 0)
3142805a2d48e7e2ed7d699871183ed706699119281canthony        {
31435d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
3144f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
314592c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) ParsePageGeometry(_image,arg1,&geometry,_exception);
314692c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=RollImage(_image,geometry.x,geometry.y,_exception);
3147805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3148805a2d48e7e2ed7d699871183ed706699119281canthony        }
3149afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("rotate",option+1) == 0)
3150805a2d48e7e2ed7d699871183ed706699119281canthony        {
315122de2722b682eb405b60ec6022a7546df994674eanthony          flags=ParseGeometry(arg1,&geometry_info);
315222de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & RhoValue) == 0)
3153f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3154ad255a09dd7c6b6a3422c24082f755013ade2ce6anthony          if ((flags & GreaterValue) != 0 && (_image->columns <= _image->rows))
315522de2722b682eb405b60ec6022a7546df994674eanthony            break;
315622de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & LessValue) != 0 && (_image->columns >= _image->rows))
315722de2722b682eb405b60ec6022a7546df994674eanthony            break;
315892c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=RotateImage(_image,geometry_info.rho,_exception);
3159805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3160805a2d48e7e2ed7d699871183ed706699119281canthony        }
3161ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
3162805a2d48e7e2ed7d699871183ed706699119281canthony    }
3163805a2d48e7e2ed7d699871183ed706699119281canthony    case 's':
3164805a2d48e7e2ed7d699871183ed706699119281canthony    {
3165afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("sample",option+1) == 0)
3166805a2d48e7e2ed7d699871183ed706699119281canthony        {
3167fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          /* FUTURE: Roll into a resize special operator */
31685d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
3169f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
317092c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) ParseRegionGeometry(_image,arg1,&geometry,_exception);
317192c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=SampleImage(_image,geometry.width,geometry.height,
317292c93bd35e207736d340f1b32000006a5bf6208eanthony            _exception);
3173805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3174805a2d48e7e2ed7d699871183ed706699119281canthony        }
3175afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("scale",option+1) == 0)
3176805a2d48e7e2ed7d699871183ed706699119281canthony        {
3177fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          /* FUTURE: Roll into a resize special operator */
31785d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
3179f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
318092c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) ParseRegionGeometry(_image,arg1,&geometry,_exception);
318192c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=ScaleImage(_image,geometry.width,geometry.height,
318292c93bd35e207736d340f1b32000006a5bf6208eanthony            _exception);
3183805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3184805a2d48e7e2ed7d699871183ed706699119281canthony        }
3185f42014dc55e8d21355ea3d17372e2d9c14b07641anthony      if (LocaleCompare("segment",option+1) == 0)
3186f42014dc55e8d21355ea3d17372e2d9c14b07641anthony        {
3187f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          flags=ParseGeometry(arg1,&geometry_info);
318822de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
318922de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3190f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          if ((flags & SigmaValue) == 0)
3191f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            geometry_info.sigma=1.0;
3192f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          (void) SegmentImage(_image,_image->colorspace,
3193f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            _image_info->verbose,geometry_info.rho,geometry_info.sigma,
3194f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            _exception);
3195f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          break;
3196f42014dc55e8d21355ea3d17372e2d9c14b07641anthony        }
3197afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("selective-blur",option+1) == 0)
3198805a2d48e7e2ed7d699871183ed706699119281canthony        {
3199fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
320022de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
320122de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
320222de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & SigmaValue) == 0)
320322de2722b682eb405b60ec6022a7546df994674eanthony            geometry_info.sigma=1.0;
3204805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & PercentValue) != 0)
3205805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.xi=(double) QuantumRange*geometry_info.xi/100.0;
320692c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=SelectiveBlurImage(_image,geometry_info.rho,
3207aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy            geometry_info.sigma,geometry_info.xi,_exception);
3208805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3209805a2d48e7e2ed7d699871183ed706699119281canthony        }
3210afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("separate",option+1) == 0)
3211805a2d48e7e2ed7d699871183ed706699119281canthony        {
321231f1bf7bb6ee2698a2afab42ee0329b11663636canthony          /* WARNING: This can generate multiple images! */
321343f425dd7d5b33887726982b28ebfa06f5560636anthony          /* FUTURE - this may be replaced by a "-channel" method */
3214dfdb19ea2c08296b31fef860352c0a6efe8e9cc6cristy          new_image=SeparateImages(_image,_exception);
3215805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3216805a2d48e7e2ed7d699871183ed706699119281canthony        }
3217afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("sepia-tone",option+1) == 0)
3218805a2d48e7e2ed7d699871183ed706699119281canthony        {
32195d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
3220f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3221f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          new_image=SepiaToneImage(_image,StringToDoubleInterval(arg1,
3222f42014dc55e8d21355ea3d17372e2d9c14b07641anthony                 (double) QuantumRange+1.0),_exception);
3223805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3224805a2d48e7e2ed7d699871183ed706699119281canthony        }
3225afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("shade",option+1) == 0)
3226805a2d48e7e2ed7d699871183ed706699119281canthony        {
3227fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
322822de2722b682eb405b60ec6022a7546df994674eanthony          if (((flags & RhoValue) == 0) || ((flags & SigmaValue) == 0))
322922de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3230a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          new_image=ShadeImage(_image,IsNormalOp,geometry_info.rho,
323192c93bd35e207736d340f1b32000006a5bf6208eanthony               geometry_info.sigma,_exception);
3232805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3233805a2d48e7e2ed7d699871183ed706699119281canthony        }
3234afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("shadow",option+1) == 0)
3235805a2d48e7e2ed7d699871183ed706699119281canthony        {
3236fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
323722de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
323822de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3239805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
3240805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=1.0;
3241805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & XiValue) == 0)
3242805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.xi=4.0;
3243805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & PsiValue) == 0)
3244805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.psi=4.0;
3245aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy          new_image=ShadowImage(_image,geometry_info.rho,geometry_info.sigma,
3246aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy            (ssize_t) ceil(geometry_info.xi-0.5),(ssize_t)
3247aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy            ceil(geometry_info.psi-0.5),_exception);
3248805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3249805a2d48e7e2ed7d699871183ed706699119281canthony        }
3250afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("sharpen",option+1) == 0)
3251805a2d48e7e2ed7d699871183ed706699119281canthony        {
3252fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
325322de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
325422de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3255805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
3256805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=1.0;
3257805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & XiValue) == 0)
3258805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.xi=0.0;
3259aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy          new_image=SharpenImage(_image,geometry_info.rho,geometry_info.sigma,
3260aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy           _exception);
3261805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3262805a2d48e7e2ed7d699871183ed706699119281canthony        }
3263afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("shave",option+1) == 0)
3264805a2d48e7e2ed7d699871183ed706699119281canthony        {
32655d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
3266f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
326792c93bd35e207736d340f1b32000006a5bf6208eanthony          flags=ParsePageGeometry(_image,arg1,&geometry,_exception);
326892c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=ShaveImage(_image,&geometry,_exception);
3269805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3270805a2d48e7e2ed7d699871183ed706699119281canthony        }
3271afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("shear",option+1) == 0)
3272805a2d48e7e2ed7d699871183ed706699119281canthony        {
3273fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
327422de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & RhoValue) == 0)
327522de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3276805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
3277805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=geometry_info.rho;
32784b8926134c1e07e0d0ef4562af3c9fc130e432d1cristy          new_image=ShearImage(_image,geometry_info.rho,geometry_info.sigma,
32794b8926134c1e07e0d0ef4562af3c9fc130e432d1cristy            _exception);
3280805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3281805a2d48e7e2ed7d699871183ed706699119281canthony        }
3282afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("sigmoidal-contrast",option+1) == 0)
3283805a2d48e7e2ed7d699871183ed706699119281canthony        {
3284fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
328522de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & RhoValue) == 0)
328622de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3287805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
3288805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=(double) QuantumRange/2.0;
3289805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & PercentValue) != 0)
3290805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=(double) QuantumRange*geometry_info.sigma/
3291805a2d48e7e2ed7d699871183ed706699119281canthony              100.0;
3292a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          (void) SigmoidalContrastImage(_image,IsNormalOp,geometry_info.rho,
3293b1d483a6a6a5678173db9d60bec52dd5a37826beanthony               geometry_info.sigma,_exception);
3294805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3295805a2d48e7e2ed7d699871183ed706699119281canthony        }
3296afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("sketch",option+1) == 0)
3297805a2d48e7e2ed7d699871183ed706699119281canthony        {
3298fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
329922de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
330022de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3301805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
3302805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=1.0;
330392c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=SketchImage(_image,geometry_info.rho,
3304aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy            geometry_info.sigma,geometry_info.xi,_exception);
3305805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3306805a2d48e7e2ed7d699871183ed706699119281canthony        }
3307afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("solarize",option+1) == 0)
3308805a2d48e7e2ed7d699871183ed706699119281canthony        {
33095d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
3310f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
331192c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SolarizeImage(_image,StringToDoubleInterval(arg1,(double)
331292c93bd35e207736d340f1b32000006a5bf6208eanthony                 QuantumRange+1.0),_exception);
3313805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3314805a2d48e7e2ed7d699871183ed706699119281canthony        }
3315afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("sparse-color",option+1) == 0)
3316805a2d48e7e2ed7d699871183ed706699119281canthony        {
3317f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          parse= ParseCommandOption(MagickSparseColorOptions,MagickFalse,arg1);
3318f42014dc55e8d21355ea3d17372e2d9c14b07641anthony          if ( parse < 0 )
3319f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedSparseColorMethod",
3320f42014dc55e8d21355ea3d17372e2d9c14b07641anthony                option,arg1);
3321964d28ed4391c639c60c392807c9dfb09f933ba8anthony          new_image=SparseColorOption(_image,(SparseColorMethod)parse,arg2,
3322964d28ed4391c639c60c392807c9dfb09f933ba8anthony               _exception);
3323805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3324805a2d48e7e2ed7d699871183ed706699119281canthony        }
3325afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("splice",option+1) == 0)
3326805a2d48e7e2ed7d699871183ed706699119281canthony        {
33275d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
3328f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3329b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony          flags=ParseGravityGeometry(_image,arg1,&geometry,_exception);
333092c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=SpliceImage(_image,&geometry,_exception);
3331805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3332805a2d48e7e2ed7d699871183ed706699119281canthony        }
3333afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("spread",option+1) == 0)
3334805a2d48e7e2ed7d699871183ed706699119281canthony        {
3335b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony          flags=ParseGeometry(arg1,&geometry_info);
3336b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony          if ((flags & RhoValue) == 0)
3337b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg2);
3338e3319c152ba05d1d0c198b61289f4926cfa3e904Cristy          new_image=SpreadImage(_image,_image->interpolate,geometry_info.rho,
3339e3319c152ba05d1d0c198b61289f4926cfa3e904Cristy           _exception);
3340805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3341805a2d48e7e2ed7d699871183ed706699119281canthony        }
3342afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("statistic",option+1) == 0)
3343805a2d48e7e2ed7d699871183ed706699119281canthony        {
33447bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          parse=ParseCommandOption(MagickStatisticOptions,MagickFalse,arg1);
33457bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          if ( parse < 0 )
3346f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedStatisticType",
33477bc87995f5fcb67d01e8cad3e80b0024b42e942danthony                 option,arg1);
3348975a8d7aba7678845112e4d2c5a155011f35a3abanthony          flags=ParseGeometry(arg2,&geometry_info);
334922de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & RhoValue) == 0)
335022de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg2);
3351975a8d7aba7678845112e4d2c5a155011f35a3abanthony          if ((flags & SigmaValue) == 0)
3352975a8d7aba7678845112e4d2c5a155011f35a3abanthony            geometry_info.sigma=geometry_info.rho;
33537bc87995f5fcb67d01e8cad3e80b0024b42e942danthony          new_image=StatisticImage(_image,(StatisticType)parse,
33547bc87995f5fcb67d01e8cad3e80b0024b42e942danthony               (size_t) geometry_info.rho,(size_t) geometry_info.sigma,
33557bc87995f5fcb67d01e8cad3e80b0024b42e942danthony               _exception);
3356805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3357805a2d48e7e2ed7d699871183ed706699119281canthony        }
3358afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("strip",option+1) == 0)
3359805a2d48e7e2ed7d699871183ed706699119281canthony        {
336092c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) StripImage(_image,_exception);
3361805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3362805a2d48e7e2ed7d699871183ed706699119281canthony        }
3363afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("swirl",option+1) == 0)
3364805a2d48e7e2ed7d699871183ed706699119281canthony        {
3365898c604656e1879fb0fed956d6f1969d785b4985cristy          flags=ParseGeometry(arg1,&geometry_info);
3366b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony          if ((flags & RhoValue) == 0)
3367898c604656e1879fb0fed956d6f1969d785b4985cristy            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
336892c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=SwirlImage(_image,geometry_info.rho,
336992c93bd35e207736d340f1b32000006a5bf6208eanthony            _image->interpolate,_exception);
3370805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3371805a2d48e7e2ed7d699871183ed706699119281canthony        }
3372ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
3373805a2d48e7e2ed7d699871183ed706699119281canthony    }
3374805a2d48e7e2ed7d699871183ed706699119281canthony    case 't':
3375805a2d48e7e2ed7d699871183ed706699119281canthony    {
3376afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("threshold",option+1) == 0)
3377805a2d48e7e2ed7d699871183ed706699119281canthony        {
3378805a2d48e7e2ed7d699871183ed706699119281canthony          double
3379805a2d48e7e2ed7d699871183ed706699119281canthony            threshold;
3380805a2d48e7e2ed7d699871183ed706699119281canthony
338152bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          threshold=(double) QuantumRange/2;
3382a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          if (IfNormalOp) {
33835d0a441fe7d90e3449f2103ed88c32cec28595e6dirk            if (IsGeometry(arg1) == MagickFalse)
338452bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony              CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3385fd706f930f397221c6ba26f112e96e262fb0ba2eanthony            threshold=StringToDoubleInterval(arg1,(double) QuantumRange+1.0);
338652bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          }
338792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) BilevelImage(_image,threshold,_exception);
3388805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3389805a2d48e7e2ed7d699871183ed706699119281canthony        }
3390afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("thumbnail",option+1) == 0)
3391805a2d48e7e2ed7d699871183ed706699119281canthony        {
33925d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
339352bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
339492c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) ParseRegionGeometry(_image,arg1,&geometry,_exception);
339592c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=ThumbnailImage(_image,geometry.width,geometry.height,
339692c93bd35e207736d340f1b32000006a5bf6208eanthony            _exception);
3397805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3398805a2d48e7e2ed7d699871183ed706699119281canthony        }
3399afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("tint",option+1) == 0)
3400805a2d48e7e2ed7d699871183ed706699119281canthony        {
34015d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
340252bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
340392c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=TintImage(_image,arg1,&_draw_info->fill,_exception);
3404805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3405805a2d48e7e2ed7d699871183ed706699119281canthony        }
3406afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("transform",option+1) == 0)
3407805a2d48e7e2ed7d699871183ed706699119281canthony        {
3408464f1c476517436723780b8a8bb371464584453canthony          CLIWandWarnReplaced("+distort AffineProjection");
340952bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          new_image=AffineTransformImage(_image,&_draw_info->affine,_exception);
3410805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3411805a2d48e7e2ed7d699871183ed706699119281canthony        }
3412afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("transparent",option+1) == 0)
3413805a2d48e7e2ed7d699871183ed706699119281canthony        {
3414805a2d48e7e2ed7d699871183ed706699119281canthony          PixelInfo
3415805a2d48e7e2ed7d699871183ed706699119281canthony            target;
3416805a2d48e7e2ed7d699871183ed706699119281canthony
341792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) QueryColorCompliance(arg1,AllCompliance,&target,_exception);
341892c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) TransparentPaintImage(_image,&target,(Quantum)
3419a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            TransparentAlpha,IsPlusOp,_exception);
3420805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3421805a2d48e7e2ed7d699871183ed706699119281canthony        }
3422afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("transpose",option+1) == 0)
3423805a2d48e7e2ed7d699871183ed706699119281canthony        {
342492c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=TransposeImage(_image,_exception);
3425805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3426805a2d48e7e2ed7d699871183ed706699119281canthony        }
3427afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("transverse",option+1) == 0)
3428805a2d48e7e2ed7d699871183ed706699119281canthony        {
342992c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=TransverseImage(_image,_exception);
3430805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3431805a2d48e7e2ed7d699871183ed706699119281canthony        }
3432afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("trim",option+1) == 0)
3433805a2d48e7e2ed7d699871183ed706699119281canthony        {
343492c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=TrimImage(_image,_exception);
3435805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3436805a2d48e7e2ed7d699871183ed706699119281canthony        }
3437afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("type",option+1) == 0)
3438805a2d48e7e2ed7d699871183ed706699119281canthony        {
3439ab3a50c7dc582b00dfb64bc51b67da87cf51deafanthony          /* Note that "type" setting should have already been defined */
344092c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageType(_image,_image_info->type,_exception);
3441805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3442805a2d48e7e2ed7d699871183ed706699119281canthony        }
3443ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
3444805a2d48e7e2ed7d699871183ed706699119281canthony    }
3445805a2d48e7e2ed7d699871183ed706699119281canthony    case 'u':
3446805a2d48e7e2ed7d699871183ed706699119281canthony    {
3447afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("unique",option+1) == 0)
3448805a2d48e7e2ed7d699871183ed706699119281canthony        {
344952bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          /* FUTURE: move to SyncImageSettings() and AcqireImage()???
345052bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony             Option is not documented, bt appears to be for "identify".
345152bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony             We may need a identify specific verbose!
345252bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony          */
3453a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          if (IsPlusOp) {
345492c93bd35e207736d340f1b32000006a5bf6208eanthony              (void) DeleteImageArtifact(_image,"identify:unique-colors");
3455805a2d48e7e2ed7d699871183ed706699119281canthony              break;
3456805a2d48e7e2ed7d699871183ed706699119281canthony            }
345792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageArtifact(_image,"identify:unique-colors","true");
345892c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageArtifact(_image,"verbose","true");
3459805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3460805a2d48e7e2ed7d699871183ed706699119281canthony        }
3461afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("unique-colors",option+1) == 0)
3462805a2d48e7e2ed7d699871183ed706699119281canthony        {
346392c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=UniqueImageColors(_image,_exception);
3464805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3465805a2d48e7e2ed7d699871183ed706699119281canthony        }
3466afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("unsharp",option+1) == 0)
3467805a2d48e7e2ed7d699871183ed706699119281canthony        {
3468fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
346922de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
347022de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3471805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
3472805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=1.0;
3473805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & XiValue) == 0)
3474805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.xi=1.0;
3475805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & PsiValue) == 0)
3476805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.psi=0.05;
347792c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=UnsharpMaskImage(_image,geometry_info.rho,
34783afd4014cd833bc3c170cb54e37c925ceacd17decristy            geometry_info.sigma,geometry_info.xi,geometry_info.psi,_exception);
3479805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3480805a2d48e7e2ed7d699871183ed706699119281canthony        }
3481ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
3482805a2d48e7e2ed7d699871183ed706699119281canthony    }
3483805a2d48e7e2ed7d699871183ed706699119281canthony    case 'v':
3484805a2d48e7e2ed7d699871183ed706699119281canthony    {
3485afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("verbose",option+1) == 0)
3486805a2d48e7e2ed7d699871183ed706699119281canthony        {
3487afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          /* FUTURE: move to SyncImageSettings() and AcquireImage()???
348892c93bd35e207736d340f1b32000006a5bf6208eanthony             three places!   ImageArtifact   ImageOption  _image_info->verbose
34895330ae0b1ea1824ec58522aebfd27228592ad0a4anthony             Some how new images also get this artifact!
349031f1bf7bb6ee2698a2afab42ee0329b11663636canthony          */
349192c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) SetImageArtifact(_image,option+1,
3492afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony                           IfNormalOp ? "true" : "false" );
3493805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3494805a2d48e7e2ed7d699871183ed706699119281canthony        }
3495afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("vignette",option+1) == 0)
3496805a2d48e7e2ed7d699871183ed706699119281canthony        {
3497fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
349822de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
349922de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3500805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
3501805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=1.0;
3502805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & XiValue) == 0)
350392c93bd35e207736d340f1b32000006a5bf6208eanthony            geometry_info.xi=0.1*_image->columns;
3504805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & PsiValue) == 0)
350592c93bd35e207736d340f1b32000006a5bf6208eanthony            geometry_info.psi=0.1*_image->rows;
35068e2392e316bec6019460d46c03a8f45b0619d72acristy          if ((flags & PercentValue) != 0)
35078e2392e316bec6019460d46c03a8f45b0619d72acristy            {
3508720d756a646312c8ab3af810acd1db8fa5801d15cristy              geometry_info.xi*=(double) _image->columns/100.0;
3509720d756a646312c8ab3af810acd1db8fa5801d15cristy              geometry_info.psi*=(double) _image->rows/100.0;
35108e2392e316bec6019460d46c03a8f45b0619d72acristy            }
351192c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=VignetteImage(_image,geometry_info.rho,geometry_info.sigma,
3512aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy            (ssize_t) ceil(geometry_info.xi-0.5),(ssize_t)
3513aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy            ceil(geometry_info.psi-0.5),_exception);
3514805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3515805a2d48e7e2ed7d699871183ed706699119281canthony        }
3516ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
3517805a2d48e7e2ed7d699871183ed706699119281canthony    }
3518805a2d48e7e2ed7d699871183ed706699119281canthony    case 'w':
3519805a2d48e7e2ed7d699871183ed706699119281canthony    {
3520afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("wave",option+1) == 0)
3521805a2d48e7e2ed7d699871183ed706699119281canthony        {
3522fd706f930f397221c6ba26f112e96e262fb0ba2eanthony          flags=ParseGeometry(arg1,&geometry_info);
352322de2722b682eb405b60ec6022a7546df994674eanthony          if ((flags & (RhoValue|SigmaValue)) == 0)
352422de2722b682eb405b60ec6022a7546df994674eanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3525805a2d48e7e2ed7d699871183ed706699119281canthony          if ((flags & SigmaValue) == 0)
3526805a2d48e7e2ed7d699871183ed706699119281canthony            geometry_info.sigma=1.0;
352792c93bd35e207736d340f1b32000006a5bf6208eanthony          new_image=WaveImage(_image,geometry_info.rho,geometry_info.sigma,
352823446631cb3aebb2403aaef5337136ce5f0d24deCristy            _image->interpolate,_exception);
35296e3a82c240f2aea88544e19d12a64f3c410e58e9dirk          break;
35306e3a82c240f2aea88544e19d12a64f3c410e58e9dirk        }
35316e3a82c240f2aea88544e19d12a64f3c410e58e9dirk      if (LocaleCompare("wavelet-denoise",option+1) == 0)
35326e3a82c240f2aea88544e19d12a64f3c410e58e9dirk        {
35336e3a82c240f2aea88544e19d12a64f3c410e58e9dirk          flags=ParseGeometry(arg1,&geometry_info);
35346e3a82c240f2aea88544e19d12a64f3c410e58e9dirk          if ((flags & RhoValue) == 0)
35356e3a82c240f2aea88544e19d12a64f3c410e58e9dirk            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
3536ee21f7fb36205cfc893005142a1d208e247f81cfCristy          if ((flags & PercentValue) != 0)
353723446631cb3aebb2403aaef5337136ce5f0d24deCristy            {
353823446631cb3aebb2403aaef5337136ce5f0d24deCristy              geometry_info.rho=QuantumRange*geometry_info.rho/100.0;
353923446631cb3aebb2403aaef5337136ce5f0d24deCristy              geometry_info.sigma=QuantumRange*geometry_info.sigma/100.0;
354023446631cb3aebb2403aaef5337136ce5f0d24deCristy            }
3541ee21f7fb36205cfc893005142a1d208e247f81cfCristy          if ((flags & SigmaValue) == 0)
3542ee21f7fb36205cfc893005142a1d208e247f81cfCristy            geometry_info.sigma=0.0;
3543c175941c171b5985ee33a4a9c988b2a4e8767b16Cristy          new_image=WaveletDenoiseImage(_image,geometry_info.rho,
3544c175941c171b5985ee33a4a9c988b2a4e8767b16Cristy            geometry_info.sigma,_exception);
3545805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3546805a2d48e7e2ed7d699871183ed706699119281canthony        }
3547afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("white-threshold",option+1) == 0)
3548805a2d48e7e2ed7d699871183ed706699119281canthony        {
35495d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
355052bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
355192c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) WhiteThresholdImage(_image,arg1,_exception);
3552805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3553805a2d48e7e2ed7d699871183ed706699119281canthony        }
3554327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy      if (LocaleCompare("write-mask",option+1) == 0)
3555327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy        {
3556327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          /* Note: arguments do not have percent escapes expanded */
3557327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          Image
3558327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy            *mask;
3559327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy
3560327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          if (IfPlusOp)
3561327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy            { /* Remove a mask. */
3562327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy              (void) SetImageMask(_image,WritePixelMask,(Image *) NULL,
3563327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy                _exception);
3564327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy              break;
3565327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy            }
3566327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          /* Set the image mask. */
3567327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          mask=GetImageCache(_image_info,arg1,_exception);
3568327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          if (mask == (Image *) NULL)
3569327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy            break;
3570327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          (void) SetImageMask(_image,WritePixelMask,mask,_exception);
3571327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          mask=DestroyImage(mask);
3572327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy          break;
3573327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy        }
3574ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
3575805a2d48e7e2ed7d699871183ed706699119281canthony    }
3576805a2d48e7e2ed7d699871183ed706699119281canthony    default:
3577ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
3578805a2d48e7e2ed7d699871183ed706699119281canthony  }
3579964d28ed4391c639c60c392807c9dfb09f933ba8anthony  /* clean up percent escape interpreted strings */
3580964d28ed4391c639c60c392807c9dfb09f933ba8anthony  if (arg1 != arg1n )
3581964d28ed4391c639c60c392807c9dfb09f933ba8anthony    arg1=DestroyString((char *)arg1);
3582964d28ed4391c639c60c392807c9dfb09f933ba8anthony  if (arg2 != arg2n )
3583964d28ed4391c639c60c392807c9dfb09f933ba8anthony    arg2=DestroyString((char *)arg2);
3584964d28ed4391c639c60c392807c9dfb09f933ba8anthony
3585964d28ed4391c639c60c392807c9dfb09f933ba8anthony  /* Replace current image with any image that was generated
3586964d28ed4391c639c60c392807c9dfb09f933ba8anthony     and set image point to last image (so image->next is correct) */
3587805a2d48e7e2ed7d699871183ed706699119281canthony  if (new_image != (Image *) NULL)
358892c93bd35e207736d340f1b32000006a5bf6208eanthony    ReplaceImageInListReturnLast(&_image,new_image);
3589fd706f930f397221c6ba26f112e96e262fb0ba2eanthony
3590fe83185ff915c87796df33a8d90a1e0937b3d76fcristy  return(MagickTrue);
359192c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _image_info
359292c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _draw_info
359392c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _quantize_info
359492c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _image
359592c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _exception
3596afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#undef IfNormalOp
3597afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#undef IfPlusOp
3598a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#undef IsNormalOp
3599a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#undef IsPlusOp
360031f1bf7bb6ee2698a2afab42ee0329b11663636canthony}
360131f1bf7bb6ee2698a2afab42ee0329b11663636canthony
3602fe83185ff915c87796df33a8d90a1e0937b3d76fcristyWandPrivate MagickBooleanType CLISimpleOperatorImages(MagickCLI *cli_wand,
36032c57b74e160f9b605d74dec24081309f28b83899cristy  const char *option,const char *arg1,const char *arg2,ExceptionInfo *exception)
360431f1bf7bb6ee2698a2afab42ee0329b11663636canthony{
3605c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony#if !USE_WAND_METHODS
360631f1bf7bb6ee2698a2afab42ee0329b11663636canthony  size_t
360743f425dd7d5b33887726982b28ebfa06f5560636anthony    n,
360831f1bf7bb6ee2698a2afab42ee0329b11663636canthony    i;
3609c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony#endif
3610fd706f930f397221c6ba26f112e96e262fb0ba2eanthony
361143f425dd7d5b33887726982b28ebfa06f5560636anthony  assert(cli_wand != (MagickCLI *) NULL);
3612e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(cli_wand->signature == MagickWandSignature);
3613e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(cli_wand->wand.signature == MagickWandSignature);
361443f425dd7d5b33887726982b28ebfa06f5560636anthony  assert(cli_wand->wand.images != (Image *) NULL); /* images must be present */
3615a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony
3616d0792939dc18eff319129903f2627bd882a574aadirk  if (cli_wand->wand.debug != MagickFalse)
3617a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony    (void) CLILogEvent(cli_wand,CommandEvent,GetMagickModule(),
3618a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony         "- Simple Operator: %s \"%s\" \"%s\"", option,arg1,arg2);
361931f1bf7bb6ee2698a2afab42ee0329b11663636canthony
3620afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#if !USE_WAND_METHODS
3621afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony  /* FUTURE add appropriate tracing */
362231f1bf7bb6ee2698a2afab42ee0329b11663636canthony  i=0;
362343f425dd7d5b33887726982b28ebfa06f5560636anthony  n=GetImageListLength(cli_wand->wand.images);
362443f425dd7d5b33887726982b28ebfa06f5560636anthony  cli_wand->wand.images=GetFirstImageInList(cli_wand->wand.images);
3625afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony  while (1) {
362631f1bf7bb6ee2698a2afab42ee0329b11663636canthony    i++;
36272c57b74e160f9b605d74dec24081309f28b83899cristy    CLISimpleOperatorImage(cli_wand, option, arg1, arg2,exception);
362843f425dd7d5b33887726982b28ebfa06f5560636anthony    if ( cli_wand->wand.images->next == (Image *) NULL )
362943f425dd7d5b33887726982b28ebfa06f5560636anthony      break;
363043f425dd7d5b33887726982b28ebfa06f5560636anthony    cli_wand->wand.images=cli_wand->wand.images->next;
363131f1bf7bb6ee2698a2afab42ee0329b11663636canthony  }
363243f425dd7d5b33887726982b28ebfa06f5560636anthony  assert( i == n );
363343f425dd7d5b33887726982b28ebfa06f5560636anthony  cli_wand->wand.images=GetFirstImageInList(cli_wand->wand.images);
3634afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#else
3635afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony  MagickResetIterator(&cli_wand->wand);
3636d0792939dc18eff319129903f2627bd882a574aadirk  while (MagickNextImage(&cli_wand->wand) != MagickFalse)
363752b632a875d61ac705bca7ad2b0919f90112eef9cristy    (void) CLISimpleOperatorImage(cli_wand, option, arg1, arg2,exception);
3638afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony  MagickResetIterator(&cli_wand->wand);
3639afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#endif
3640fe83185ff915c87796df33a8d90a1e0937b3d76fcristy  return(MagickTrue);
3641805a2d48e7e2ed7d699871183ed706699119281canthony}
3642805a2d48e7e2ed7d699871183ed706699119281canthony
3643805a2d48e7e2ed7d699871183ed706699119281canthony/*
3644805a2d48e7e2ed7d699871183ed706699119281canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3645805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
3646805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
3647805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
364843f425dd7d5b33887726982b28ebfa06f5560636anthony+     C L I L i s t O p e r a t o r I m a g e s                               %
3649805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
3650805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
3651805a2d48e7e2ed7d699871183ed706699119281canthony%                                                                             %
3652805a2d48e7e2ed7d699871183ed706699119281canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3653805a2d48e7e2ed7d699871183ed706699119281canthony%
365443f425dd7d5b33887726982b28ebfa06f5560636anthony%  CLIListOperatorImages() applies a single operation that is apply to the
365531f1bf7bb6ee2698a2afab42ee0329b11663636canthony%  entire image list as a whole. The result is often a complete replacment
3656c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony%  of the image list with a completely new list, or with just a single image
3657c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony%  result.
3658805a2d48e7e2ed7d699871183ed706699119281canthony%
3659805a2d48e7e2ed7d699871183ed706699119281canthony%  The format of the MogrifyImage method is:
3660805a2d48e7e2ed7d699871183ed706699119281canthony%
3661fe83185ff915c87796df33a8d90a1e0937b3d76fcristy%    MagickBooleanType CLIListOperatorImages(MagickCLI *cli_wand,
3662fe83185ff915c87796df33a8d90a1e0937b3d76fcristy%      const char *option,const char *arg1,const char *arg2)
3663805a2d48e7e2ed7d699871183ed706699119281canthony%
3664805a2d48e7e2ed7d699871183ed706699119281canthony%  A description of each parameter follows:
3665805a2d48e7e2ed7d699871183ed706699119281canthony%
366643f425dd7d5b33887726982b28ebfa06f5560636anthony%    o cli_wand: structure holding settings to be applied
3667805a2d48e7e2ed7d699871183ed706699119281canthony%
366836a8c2cce82aeb1cb61a77fb15c4cf030348bd61anthony%    o option:  The option string for the operation
366936a8c2cce82aeb1cb61a77fb15c4cf030348bd61anthony%
367031f1bf7bb6ee2698a2afab42ee0329b11663636canthony%    o arg1, arg2: optional argument strings to the operation
3671e5fcd3620310f12690ba2d00b4f5fa62f1bd1a6aanthony%        arg2 is currently not used
36728b10b467b5c281df759ba33f9a4a9228509adc4danthony%
3673805a2d48e7e2ed7d699871183ed706699119281canthony*/
3674fe83185ff915c87796df33a8d90a1e0937b3d76fcristyWandPrivate MagickBooleanType CLIListOperatorImages(MagickCLI *cli_wand,
3675fe83185ff915c87796df33a8d90a1e0937b3d76fcristy  const char *option,const char *arg1n,const char *arg2n)
3676805a2d48e7e2ed7d699871183ed706699119281canthony{
3677a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony  const char    /* percent escaped versions of the args */
3678a30f8e619f24abab21448ee8019794e47e0baed9cristy    *arg1,
3679a30f8e619f24abab21448ee8019794e47e0baed9cristy    *arg2;
36802a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony
368131f1bf7bb6ee2698a2afab42ee0329b11663636canthony  Image
368231f1bf7bb6ee2698a2afab42ee0329b11663636canthony    *new_images;
3683805a2d48e7e2ed7d699871183ed706699119281canthony
3684a30f8e619f24abab21448ee8019794e47e0baed9cristy  MagickStatusType
3685a30f8e619f24abab21448ee8019794e47e0baed9cristy    status;
3686a30f8e619f24abab21448ee8019794e47e0baed9cristy
3687a30f8e619f24abab21448ee8019794e47e0baed9cristy  ssize_t
3688a30f8e619f24abab21448ee8019794e47e0baed9cristy    parse;
3689964d28ed4391c639c60c392807c9dfb09f933ba8anthony
36902e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _image_info     (cli_wand->wand.image_info)
36912e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _images         (cli_wand->wand.images)
36922e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _exception      (cli_wand->wand.exception)
36932e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _draw_info      (cli_wand->draw_info)
36942e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _quantize_info  (cli_wand->quantize_info)
3695964d28ed4391c639c60c392807c9dfb09f933ba8anthony#define _process_flags  (cli_wand->process_flags)
3696964d28ed4391c639c60c392807c9dfb09f933ba8anthony#define _option_type    ((CommandOptionFlags) cli_wand->command->flags)
3697afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#define IfNormalOp      (*option=='-')
3698afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#define IfPlusOp        (*option!='-')
3699b9dbc296c59e91df014757130b4e584c7fb6c74ddirk#define IsNormalOp      IfNormalOp ? MagickTrue : MagickFalse
3700805a2d48e7e2ed7d699871183ed706699119281canthony
370143f425dd7d5b33887726982b28ebfa06f5560636anthony  assert(cli_wand != (MagickCLI *) NULL);
3702e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(cli_wand->signature == MagickWandSignature);
3703e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(cli_wand->wand.signature == MagickWandSignature);
370492c93bd35e207736d340f1b32000006a5bf6208eanthony  assert(_images != (Image *) NULL);             /* _images must be present */
3705a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony
3706d0792939dc18eff319129903f2627bd882a574aadirk  if (cli_wand->wand.debug != MagickFalse)
3707a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony    (void) CLILogEvent(cli_wand,CommandEvent,GetMagickModule(),
3708606b923f678eaa2cdfe8f7b2e2390b75c6d9ce4dcristy       "- List Operator: %s \"%s\" \"%s\"", option,
3709606b923f678eaa2cdfe8f7b2e2390b75c6d9ce4dcristy       arg1n == (const char *) NULL ? "null" : arg1n,
3710606b923f678eaa2cdfe8f7b2e2390b75c6d9ce4dcristy       arg2n == (const char *) NULL ? "null" : arg2n);
371131f1bf7bb6ee2698a2afab42ee0329b11663636canthony
3712964d28ed4391c639c60c392807c9dfb09f933ba8anthony  arg1 = arg1n;
3713964d28ed4391c639c60c392807c9dfb09f933ba8anthony  arg2 = arg2n;
3714a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony
3715a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony  /* Interpret Percent Escapes in Arguments - using first image */
3716964d28ed4391c639c60c392807c9dfb09f933ba8anthony  if ( (((_process_flags & ProcessInterpretProperities) != 0 )
3717964d28ed4391c639c60c392807c9dfb09f933ba8anthony        || ((_option_type & AlwaysInterpretArgsFlag) != 0)
3718964d28ed4391c639c60c392807c9dfb09f933ba8anthony       )  && ((_option_type & NeverInterpretArgsFlag) == 0) ) {
3719964d28ed4391c639c60c392807c9dfb09f933ba8anthony    /* Interpret Percent escapes in argument 1 */
3720964d28ed4391c639c60c392807c9dfb09f933ba8anthony    if (arg1n != (char *) NULL) {
3721964d28ed4391c639c60c392807c9dfb09f933ba8anthony      arg1=InterpretImageProperties(_image_info,_images,arg1n,_exception);
3722964d28ed4391c639c60c392807c9dfb09f933ba8anthony      if (arg1 == (char *) NULL) {
3723964d28ed4391c639c60c392807c9dfb09f933ba8anthony        CLIWandException(OptionWarning,"InterpretPropertyFailure",option);
3724964d28ed4391c639c60c392807c9dfb09f933ba8anthony        arg1=arg1n;  /* use the given argument as is */
3725964d28ed4391c639c60c392807c9dfb09f933ba8anthony      }
3726964d28ed4391c639c60c392807c9dfb09f933ba8anthony    }
3727964d28ed4391c639c60c392807c9dfb09f933ba8anthony    if (arg2n != (char *) NULL) {
3728964d28ed4391c639c60c392807c9dfb09f933ba8anthony      arg2=InterpretImageProperties(_image_info,_images,arg2n,_exception);
3729964d28ed4391c639c60c392807c9dfb09f933ba8anthony      if (arg2 == (char *) NULL) {
3730964d28ed4391c639c60c392807c9dfb09f933ba8anthony        CLIWandException(OptionWarning,"InterpretPropertyFailure",option);
3731964d28ed4391c639c60c392807c9dfb09f933ba8anthony        arg2=arg2n;  /* use the given argument as is */
3732964d28ed4391c639c60c392807c9dfb09f933ba8anthony      }
3733964d28ed4391c639c60c392807c9dfb09f933ba8anthony    }
3734964d28ed4391c639c60c392807c9dfb09f933ba8anthony  }
37354837ac2f5e9dbb766129a91aa11cf7c547477119anthony#undef _process_flags
3736964d28ed4391c639c60c392807c9dfb09f933ba8anthony#undef _option_type
3737964d28ed4391c639c60c392807c9dfb09f933ba8anthony
3738fe83185ff915c87796df33a8d90a1e0937b3d76fcristy  status=MagickTrue;
373931f1bf7bb6ee2698a2afab42ee0329b11663636canthony  new_images=NewImageList();
374031f1bf7bb6ee2698a2afab42ee0329b11663636canthony
3741afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony  switch (*(option+1))
3742805a2d48e7e2ed7d699871183ed706699119281canthony  {
3743805a2d48e7e2ed7d699871183ed706699119281canthony    case 'a':
3744805a2d48e7e2ed7d699871183ed706699119281canthony    {
3745afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("append",option+1) == 0)
3746805a2d48e7e2ed7d699871183ed706699119281canthony        {
3747a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          new_images=AppendImages(_images,IsNormalOp,_exception);
3748805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3749805a2d48e7e2ed7d699871183ed706699119281canthony        }
375052ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy      if (LocaleCompare("average",option+1) == 0)
375152ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy        {
375252ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy          CLIWandWarnReplaced("-evaluate-sequence Mean");
375352b632a875d61ac705bca7ad2b0919f90112eef9cristy          (void) CLIListOperatorImages(cli_wand,"-evaluate-sequence","Mean",NULL);
375452ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy          break;
375552ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy        }
3756ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
3757805a2d48e7e2ed7d699871183ed706699119281canthony    }
3758805a2d48e7e2ed7d699871183ed706699119281canthony    case 'c':
3759805a2d48e7e2ed7d699871183ed706699119281canthony    {
37605f257b2f02bdd982d9bbfe612f5bb1711608590ccristy      if (LocaleCompare("channel-fx",option+1) == 0)
376187c02f455d992b02a5e4727bc75552d7d097c4fbcristy        {
376292c93bd35e207736d340f1b32000006a5bf6208eanthony          new_images=ChannelFxImage(_images,arg1,_exception);
376387c02f455d992b02a5e4727bc75552d7d097c4fbcristy          break;
376487c02f455d992b02a5e4727bc75552d7d097c4fbcristy        }
3765afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("clut",option+1) == 0)
3766805a2d48e7e2ed7d699871183ed706699119281canthony        {
3767805a2d48e7e2ed7d699871183ed706699119281canthony          Image
376831f1bf7bb6ee2698a2afab42ee0329b11663636canthony            *clut_image;
3769805a2d48e7e2ed7d699871183ed706699119281canthony
3770afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          /* FUTURE - make this a compose option, and thus can be used
3771afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony             with layers compose or even compose last image over all other
377292c93bd35e207736d340f1b32000006a5bf6208eanthony             _images.
377387c02f455d992b02a5e4727bc75552d7d097c4fbcristy          */
377492c93bd35e207736d340f1b32000006a5bf6208eanthony          new_images=RemoveFirstImageFromList(&_images);
377592c93bd35e207736d340f1b32000006a5bf6208eanthony          clut_image=RemoveLastImageFromList(&_images);
3776e8f56490b69cb12652819c7015e16bb03c1dab98anthony          /* FUTURE - produce Exception, rather than silent fail */
3777805a2d48e7e2ed7d699871183ed706699119281canthony          if (clut_image == (Image *) NULL)
377887c02f455d992b02a5e4727bc75552d7d097c4fbcristy            break;
3779f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy          (void) ClutImage(new_images,clut_image,new_images->interpolate,
3780f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy            _exception);
3781805a2d48e7e2ed7d699871183ed706699119281canthony          clut_image=DestroyImage(clut_image);
3782805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3783805a2d48e7e2ed7d699871183ed706699119281canthony        }
3784afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("coalesce",option+1) == 0)
3785805a2d48e7e2ed7d699871183ed706699119281canthony        {
378692c93bd35e207736d340f1b32000006a5bf6208eanthony          new_images=CoalesceImages(_images,_exception);
3787805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3788805a2d48e7e2ed7d699871183ed706699119281canthony        }
3789afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("combine",option+1) == 0)
3790805a2d48e7e2ed7d699871183ed706699119281canthony        {
37919a0e8ef1662a4df65cec07f507b74290b08d262fcristy          parse=(ssize_t) _images->colorspace;
37925a4ff37398c7bc97588bd66d840cda9c653cec5eanthony          if ( IfPlusOp )
3793f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy            parse=ParseCommandOption(MagickColorspaceOptions,MagickFalse,arg1);
37948448a0dd99a8d313d445bbbe714af4ba7c8eab69cristy          if (parse < 0)
37958448a0dd99a8d313d445bbbe714af4ba7c8eab69cristy            CLIWandExceptArgBreak(OptionError,"UnrecognizedColorspace",option,
37968448a0dd99a8d313d445bbbe714af4ba7c8eab69cristy              arg1);
379746f354c5b98873dc772eea3fbbf149abbf737690cristy          new_images=CombineImages(_images,(ColorspaceType) parse,_exception);
3798805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3799805a2d48e7e2ed7d699871183ed706699119281canthony        }
3800e863c054d49031af35b73066f5394af223de7df5cristy      if (LocaleCompare("compare",option+1) == 0)
3801e863c054d49031af35b73066f5394af223de7df5cristy        {
3802e863c054d49031af35b73066f5394af223de7df5cristy          double
3803e863c054d49031af35b73066f5394af223de7df5cristy            distortion;
3804e863c054d49031af35b73066f5394af223de7df5cristy
3805e863c054d49031af35b73066f5394af223de7df5cristy          Image
3806e863c054d49031af35b73066f5394af223de7df5cristy            *image,
3807e863c054d49031af35b73066f5394af223de7df5cristy            *reconstruct_image;
3808e863c054d49031af35b73066f5394af223de7df5cristy
3809e863c054d49031af35b73066f5394af223de7df5cristy          MetricType
3810e863c054d49031af35b73066f5394af223de7df5cristy            metric;
3811e863c054d49031af35b73066f5394af223de7df5cristy
3812e863c054d49031af35b73066f5394af223de7df5cristy          /*
3813e863c054d49031af35b73066f5394af223de7df5cristy            Mathematically and visually annotate the difference between an
3814e863c054d49031af35b73066f5394af223de7df5cristy            image and its reconstruction.
3815e863c054d49031af35b73066f5394af223de7df5cristy          */
3816e863c054d49031af35b73066f5394af223de7df5cristy          image=RemoveFirstImageFromList(&_images);
3817e863c054d49031af35b73066f5394af223de7df5cristy          reconstruct_image=RemoveFirstImageFromList(&_images);
3818e863c054d49031af35b73066f5394af223de7df5cristy          /* FUTURE - produce Exception, rather than silent fail */
3819e863c054d49031af35b73066f5394af223de7df5cristy          if (reconstruct_image == (Image *) NULL)
3820e863c054d49031af35b73066f5394af223de7df5cristy            break;
3821e863c054d49031af35b73066f5394af223de7df5cristy          metric=UndefinedErrorMetric;
3822e863c054d49031af35b73066f5394af223de7df5cristy          option=GetImageOption(_image_info,"metric");
3823e863c054d49031af35b73066f5394af223de7df5cristy          if (option != (const char *) NULL)
3824e863c054d49031af35b73066f5394af223de7df5cristy            metric=(MetricType) ParseCommandOption(MagickMetricOptions,
3825e863c054d49031af35b73066f5394af223de7df5cristy              MagickFalse,option);
3826e863c054d49031af35b73066f5394af223de7df5cristy          new_images=CompareImages(image,reconstruct_image,metric,&distortion,
3827e863c054d49031af35b73066f5394af223de7df5cristy            _exception);
3828e863c054d49031af35b73066f5394af223de7df5cristy          (void) distortion;
3829e863c054d49031af35b73066f5394af223de7df5cristy          reconstruct_image=DestroyImage(reconstruct_image);
3830e863c054d49031af35b73066f5394af223de7df5cristy          image=DestroyImage(image);
3831e863c054d49031af35b73066f5394af223de7df5cristy          break;
3832e863c054d49031af35b73066f5394af223de7df5cristy        }
3833790190d9d1e6f011220d0003ce5b51063f0ab417cristy      if (LocaleCompare("complex",option+1) == 0)
3834790190d9d1e6f011220d0003ce5b51063f0ab417cristy        {
3835790190d9d1e6f011220d0003ce5b51063f0ab417cristy          parse=ParseCommandOption(MagickComplexOptions,MagickFalse,arg1);
3836790190d9d1e6f011220d0003ce5b51063f0ab417cristy          if (parse < 0)
3837790190d9d1e6f011220d0003ce5b51063f0ab417cristy            CLIWandExceptArgBreak(OptionError,"UnrecognizedEvaluateOperator",
3838790190d9d1e6f011220d0003ce5b51063f0ab417cristy              option,arg1);
3839b8f66bb8eff1466dddbd26a31d588a6cd355d0f4cristy          new_images=ComplexImages(_images,(ComplexOperator) parse,_exception);
3840790190d9d1e6f011220d0003ce5b51063f0ab417cristy          break;
3841790190d9d1e6f011220d0003ce5b51063f0ab417cristy        }
3842afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("composite",option+1) == 0)
3843805a2d48e7e2ed7d699871183ed706699119281canthony        {
3844feb3e9695150978a5d2372d3fe2f60466a7c8066cristy          CompositeOperator
3845feb3e9695150978a5d2372d3fe2f60466a7c8066cristy            compose;
3846feb3e9695150978a5d2372d3fe2f60466a7c8066cristy
3847feb3e9695150978a5d2372d3fe2f60466a7c8066cristy          const char*
3848feb3e9695150978a5d2372d3fe2f60466a7c8066cristy            value;
3849feb3e9695150978a5d2372d3fe2f60466a7c8066cristy
3850feb3e9695150978a5d2372d3fe2f60466a7c8066cristy          MagickBooleanType
3851feb3e9695150978a5d2372d3fe2f60466a7c8066cristy            clip_to_self;
3852feb3e9695150978a5d2372d3fe2f60466a7c8066cristy
3853805a2d48e7e2ed7d699871183ed706699119281canthony          Image
3854805a2d48e7e2ed7d699871183ed706699119281canthony            *mask_image,
385531f1bf7bb6ee2698a2afab42ee0329b11663636canthony            *source_image;
3856805a2d48e7e2ed7d699871183ed706699119281canthony
3857805a2d48e7e2ed7d699871183ed706699119281canthony          RectangleInfo
3858805a2d48e7e2ed7d699871183ed706699119281canthony            geometry;
3859805a2d48e7e2ed7d699871183ed706699119281canthony
38607bcfe7f0f9a0028eb9efdb79c842eb50e909dc45anthony          /* Compose value from "-compose" option only */
386192c93bd35e207736d340f1b32000006a5bf6208eanthony          value=GetImageOption(_image_info,"compose");
3862542a95bf123eda9ec6613f2ebb80627c0853a4bdcristy          if (value == (const char *) NULL)
386331f1bf7bb6ee2698a2afab42ee0329b11663636canthony            compose=OverCompositeOp;  /* use Over not source_image->compose */
3864542a95bf123eda9ec6613f2ebb80627c0853a4bdcristy          else
3865542a95bf123eda9ec6613f2ebb80627c0853a4bdcristy            compose=(CompositeOperator) ParseCommandOption(MagickComposeOptions,
3866542a95bf123eda9ec6613f2ebb80627c0853a4bdcristy              MagickFalse,value);
38675f867ae6899e46eb35c30b38e9479312880608cfanthony
38687bcfe7f0f9a0028eb9efdb79c842eb50e909dc45anthony          /* Get "clip-to-self" expert setting (false is normal) */
3869ca0e82c7d9d6994cd677d9848d9ad2dff1afb031cristy          value=GetImageOption(_image_info,"compose:clip-to-self");
3870ca0e82c7d9d6994cd677d9848d9ad2dff1afb031cristy          if (value == (const char *) NULL)
3871ca0e82c7d9d6994cd677d9848d9ad2dff1afb031cristy            clip_to_self=MagickTrue;
3872ca0e82c7d9d6994cd677d9848d9ad2dff1afb031cristy          else
3873ca0e82c7d9d6994cd677d9848d9ad2dff1afb031cristy            clip_to_self=IsStringTrue(GetImageOption(_image_info,
3874ca0e82c7d9d6994cd677d9848d9ad2dff1afb031cristy              "compose:clip-to-self")); /* if this is true */
38752e4501b56bdc589397786ecc59f8c2d206547a36anthony          value=GetImageOption(_image_info,"compose:outside-overlay");
38767bcfe7f0f9a0028eb9efdb79c842eb50e909dc45anthony          if (value != (const char *) NULL) {   /* or this false */
38772e4501b56bdc589397786ecc59f8c2d206547a36anthony            /* FUTURE: depreciate warning for "compose:outside-overlay"*/
38789a846de2088aabf3d58a275d2157b40c53d8597ddirk            clip_to_self=IsStringFalse(value);
38792e4501b56bdc589397786ecc59f8c2d206547a36anthony          }
38802e4501b56bdc589397786ecc59f8c2d206547a36anthony
388192c93bd35e207736d340f1b32000006a5bf6208eanthony          new_images=RemoveFirstImageFromList(&_images);
388292c93bd35e207736d340f1b32000006a5bf6208eanthony          source_image=RemoveFirstImageFromList(&_images);
388331f1bf7bb6ee2698a2afab42ee0329b11663636canthony          if (source_image == (Image *) NULL)
38847bcfe7f0f9a0028eb9efdb79c842eb50e909dc45anthony            break; /* FUTURE - produce Exception, rather than silent fail */
3885e8f56490b69cb12652819c7015e16bb03c1dab98anthony
388631f1bf7bb6ee2698a2afab42ee0329b11663636canthony          /* FUTURE - this should not be here! - should be part of -geometry */
388706f590165f0505d42005264893fe14a9e8a79986dirk          if (source_image->geometry != (char *) NULL)
388806f590165f0505d42005264893fe14a9e8a79986dirk            {
388906f590165f0505d42005264893fe14a9e8a79986dirk              RectangleInfo
389006f590165f0505d42005264893fe14a9e8a79986dirk                resize_geometry;
389106f590165f0505d42005264893fe14a9e8a79986dirk
389206f590165f0505d42005264893fe14a9e8a79986dirk              (void) ParseRegionGeometry(source_image,source_image->geometry,
389306f590165f0505d42005264893fe14a9e8a79986dirk                &resize_geometry,_exception);
389406f590165f0505d42005264893fe14a9e8a79986dirk              if ((source_image->columns != resize_geometry.width) ||
389506f590165f0505d42005264893fe14a9e8a79986dirk                  (source_image->rows != resize_geometry.height))
389606f590165f0505d42005264893fe14a9e8a79986dirk                {
389706f590165f0505d42005264893fe14a9e8a79986dirk                  Image
389806f590165f0505d42005264893fe14a9e8a79986dirk                    *resize_image;
389906f590165f0505d42005264893fe14a9e8a79986dirk
390006f590165f0505d42005264893fe14a9e8a79986dirk                  resize_image=ResizeImage(source_image,resize_geometry.width,
390106f590165f0505d42005264893fe14a9e8a79986dirk                    resize_geometry.height,source_image->filter,_exception);
390206f590165f0505d42005264893fe14a9e8a79986dirk                  if (resize_image != (Image *) NULL)
390306f590165f0505d42005264893fe14a9e8a79986dirk                    {
390406f590165f0505d42005264893fe14a9e8a79986dirk                      source_image=DestroyImage(source_image);
390506f590165f0505d42005264893fe14a9e8a79986dirk                      source_image=resize_image;
390606f590165f0505d42005264893fe14a9e8a79986dirk                    }
390706f590165f0505d42005264893fe14a9e8a79986dirk                }
390806f590165f0505d42005264893fe14a9e8a79986dirk            }
390931f1bf7bb6ee2698a2afab42ee0329b11663636canthony          SetGeometry(source_image,&geometry);
391031f1bf7bb6ee2698a2afab42ee0329b11663636canthony          (void) ParseAbsoluteGeometry(source_image->geometry,&geometry);
391131f1bf7bb6ee2698a2afab42ee0329b11663636canthony          GravityAdjustGeometry(new_images->columns,new_images->rows,
3912fe83185ff915c87796df33a8d90a1e0937b3d76fcristy            new_images->gravity, &geometry);
391392c93bd35e207736d340f1b32000006a5bf6208eanthony          mask_image=RemoveFirstImageFromList(&_images);
3914052d1f731e137ec086ffcef53d586dbd3f100ecacristy          if (mask_image == (Image *) NULL)
3915052d1f731e137ec086ffcef53d586dbd3f100ecacristy            status&=CompositeImage(new_images,source_image,compose,clip_to_self,
3916052d1f731e137ec086ffcef53d586dbd3f100ecacristy              geometry.x,geometry.y,_exception);
3917052d1f731e137ec086ffcef53d586dbd3f100ecacristy          else
3918fe83185ff915c87796df33a8d90a1e0937b3d76fcristy            {
3919052d1f731e137ec086ffcef53d586dbd3f100ecacristy              if ((compose == DisplaceCompositeOp) ||
3920052d1f731e137ec086ffcef53d586dbd3f100ecacristy                  (compose == DistortCompositeOp))
3921052d1f731e137ec086ffcef53d586dbd3f100ecacristy                {
3922052d1f731e137ec086ffcef53d586dbd3f100ecacristy                  status&=CompositeImage(source_image,mask_image,
3923052d1f731e137ec086ffcef53d586dbd3f100ecacristy                    CopyGreenCompositeOp,MagickTrue,0,0,_exception);
3924052d1f731e137ec086ffcef53d586dbd3f100ecacristy                  status&=CompositeImage(new_images,source_image,compose,
3925052d1f731e137ec086ffcef53d586dbd3f100ecacristy                    clip_to_self,geometry.x,geometry.y,_exception);
3926052d1f731e137ec086ffcef53d586dbd3f100ecacristy                }
3927fae52a29ca85d21c229f1e4e44a0dcfc4d322284cristy              else
3928052d1f731e137ec086ffcef53d586dbd3f100ecacristy                {
3929052d1f731e137ec086ffcef53d586dbd3f100ecacristy                  Image
3930052d1f731e137ec086ffcef53d586dbd3f100ecacristy                    *clone_image;
3931052d1f731e137ec086ffcef53d586dbd3f100ecacristy
3932052d1f731e137ec086ffcef53d586dbd3f100ecacristy                  clone_image=CloneImage(new_images,0,0,MagickTrue,_exception);
3933052d1f731e137ec086ffcef53d586dbd3f100ecacristy                  if (clone_image == (Image *) NULL)
3934052d1f731e137ec086ffcef53d586dbd3f100ecacristy                    break;
3935052d1f731e137ec086ffcef53d586dbd3f100ecacristy                  status&=CompositeImage(new_images,source_image,compose,
3936052d1f731e137ec086ffcef53d586dbd3f100ecacristy                    clip_to_self,geometry.x,geometry.y,_exception);
3937052d1f731e137ec086ffcef53d586dbd3f100ecacristy                  status&=CompositeImage(new_images,mask_image,
3938052d1f731e137ec086ffcef53d586dbd3f100ecacristy                    CopyAlphaCompositeOp,MagickTrue,0,0,_exception);
3939052d1f731e137ec086ffcef53d586dbd3f100ecacristy                  status&=CompositeImage(clone_image,new_images,OverCompositeOp,
3940087a059e56eec2efedefdceb6b52a093e4589ddeCristy                    clip_to_self,0,0,_exception);
3941052d1f731e137ec086ffcef53d586dbd3f100ecacristy                  new_images=DestroyImage(new_images);
3942052d1f731e137ec086ffcef53d586dbd3f100ecacristy                  new_images=clone_image;
3943052d1f731e137ec086ffcef53d586dbd3f100ecacristy                }
3944fe83185ff915c87796df33a8d90a1e0937b3d76fcristy              mask_image=DestroyImage(mask_image);
3945805a2d48e7e2ed7d699871183ed706699119281canthony            }
394631f1bf7bb6ee2698a2afab42ee0329b11663636canthony          source_image=DestroyImage(source_image);
3947805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3948805a2d48e7e2ed7d699871183ed706699119281canthony        }
39498c4c1c490787a76080c895d8d500b3159b8714e3cristy        if (LocaleCompare("copy",option+1) == 0)
39508c4c1c490787a76080c895d8d500b3159b8714e3cristy          {
39518c4c1c490787a76080c895d8d500b3159b8714e3cristy            Image
39528c4c1c490787a76080c895d8d500b3159b8714e3cristy              *source_image;
39538c4c1c490787a76080c895d8d500b3159b8714e3cristy
39548c4c1c490787a76080c895d8d500b3159b8714e3cristy            OffsetInfo
39558c4c1c490787a76080c895d8d500b3159b8714e3cristy              offset;
39568c4c1c490787a76080c895d8d500b3159b8714e3cristy
39578c4c1c490787a76080c895d8d500b3159b8714e3cristy            RectangleInfo
39588c4c1c490787a76080c895d8d500b3159b8714e3cristy              geometry;
39598c4c1c490787a76080c895d8d500b3159b8714e3cristy
39608c4c1c490787a76080c895d8d500b3159b8714e3cristy            /*
39618c4c1c490787a76080c895d8d500b3159b8714e3cristy              Copy image pixels.
39628c4c1c490787a76080c895d8d500b3159b8714e3cristy            */
39635d0a441fe7d90e3449f2103ed88c32cec28595e6dirk            if (IsGeometry(arg1) == MagickFalse)
39648c4c1c490787a76080c895d8d500b3159b8714e3cristy              CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
39655d0a441fe7d90e3449f2103ed88c32cec28595e6dirk            if (IsGeometry(arg2) == MagickFalse)
39668c4c1c490787a76080c895d8d500b3159b8714e3cristy              CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
39678c4c1c490787a76080c895d8d500b3159b8714e3cristy            (void) ParsePageGeometry(_images,arg2,&geometry,_exception);
39688c4c1c490787a76080c895d8d500b3159b8714e3cristy            offset.x=geometry.x;
39698c4c1c490787a76080c895d8d500b3159b8714e3cristy            offset.y=geometry.y;
39708c4c1c490787a76080c895d8d500b3159b8714e3cristy            source_image=_images;
39718c4c1c490787a76080c895d8d500b3159b8714e3cristy            if (source_image->next != (Image *) NULL)
39728c4c1c490787a76080c895d8d500b3159b8714e3cristy              source_image=source_image->next;
3973923019bfcb8dccda226cbbccbab58a8f33f3f0b1cristy            (void) ParsePageGeometry(source_image,arg1,&geometry,_exception);
39748c4c1c490787a76080c895d8d500b3159b8714e3cristy            (void) CopyImagePixels(_images,source_image,&geometry,&offset,
39758c4c1c490787a76080c895d8d500b3159b8714e3cristy              _exception);
39768c4c1c490787a76080c895d8d500b3159b8714e3cristy            break;
39778c4c1c490787a76080c895d8d500b3159b8714e3cristy          }
3978ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
3979805a2d48e7e2ed7d699871183ed706699119281canthony    }
3980805a2d48e7e2ed7d699871183ed706699119281canthony    case 'd':
3981805a2d48e7e2ed7d699871183ed706699119281canthony    {
3982afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("deconstruct",option+1) == 0)
3983805a2d48e7e2ed7d699871183ed706699119281canthony        {
3984464f1c476517436723780b8a8bb371464584453canthony          CLIWandWarnReplaced("-layer CompareAny");
398552b632a875d61ac705bca7ad2b0919f90112eef9cristy          (void) CLIListOperatorImages(cli_wand,"-layer","CompareAny",NULL);
3986805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3987805a2d48e7e2ed7d699871183ed706699119281canthony        }
3988afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("delete",option+1) == 0)
3989805a2d48e7e2ed7d699871183ed706699119281canthony        {
3990afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          if (IfNormalOp)
399192c93bd35e207736d340f1b32000006a5bf6208eanthony            DeleteImages(&_images,arg1,_exception);
3992afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          else
399392c93bd35e207736d340f1b32000006a5bf6208eanthony            DeleteImages(&_images,"-1",_exception);
3994805a2d48e7e2ed7d699871183ed706699119281canthony          break;
3995805a2d48e7e2ed7d699871183ed706699119281canthony        }
3996afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("duplicate",option+1) == 0)
3997805a2d48e7e2ed7d699871183ed706699119281canthony        {
3998afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          if (IfNormalOp)
3999805a2d48e7e2ed7d699871183ed706699119281canthony            {
4000805a2d48e7e2ed7d699871183ed706699119281canthony              const char
4001805a2d48e7e2ed7d699871183ed706699119281canthony                *p;
4002805a2d48e7e2ed7d699871183ed706699119281canthony
4003805a2d48e7e2ed7d699871183ed706699119281canthony              size_t
4004805a2d48e7e2ed7d699871183ed706699119281canthony                number_duplicates;
4005805a2d48e7e2ed7d699871183ed706699119281canthony
40065d0a441fe7d90e3449f2103ed88c32cec28595e6dirk              if (IsGeometry(arg1) == MagickFalse)
4007ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony                CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,
4008ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony                      arg1);
400931f1bf7bb6ee2698a2afab42ee0329b11663636canthony              number_duplicates=(size_t) StringToLong(arg1);
401031f1bf7bb6ee2698a2afab42ee0329b11663636canthony              p=strchr(arg1,',');
4011805a2d48e7e2ed7d699871183ed706699119281canthony              if (p == (const char *) NULL)
4012ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony                new_images=DuplicateImages(_images,number_duplicates,"-1",
4013ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony                  _exception);
4014805a2d48e7e2ed7d699871183ed706699119281canthony              else
401592c93bd35e207736d340f1b32000006a5bf6208eanthony                new_images=DuplicateImages(_images,number_duplicates,p,
401692c93bd35e207736d340f1b32000006a5bf6208eanthony                  _exception);
4017805a2d48e7e2ed7d699871183ed706699119281canthony            }
4018afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          else
401992c93bd35e207736d340f1b32000006a5bf6208eanthony            new_images=DuplicateImages(_images,1,"-1",_exception);
402092c93bd35e207736d340f1b32000006a5bf6208eanthony          AppendImageToList(&_images, new_images);
4021f432c635c526259b858c9aad3d409c5c44545686cristy          new_images=(Image *) NULL;
4022805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4023805a2d48e7e2ed7d699871183ed706699119281canthony        }
4024ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
4025805a2d48e7e2ed7d699871183ed706699119281canthony    }
4026805a2d48e7e2ed7d699871183ed706699119281canthony    case 'e':
4027805a2d48e7e2ed7d699871183ed706699119281canthony    {
4028afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("evaluate-sequence",option+1) == 0)
4029805a2d48e7e2ed7d699871183ed706699119281canthony        {
4030790190d9d1e6f011220d0003ce5b51063f0ab417cristy          parse=ParseCommandOption(MagickEvaluateOptions,MagickFalse,arg1);
4031790190d9d1e6f011220d0003ce5b51063f0ab417cristy          if (parse < 0)
40322a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedEvaluateOperator",
4033790190d9d1e6f011220d0003ce5b51063f0ab417cristy              option,arg1);
40342a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony          new_images=EvaluateImages(_images,(MagickEvaluateOperator)parse,
4035790190d9d1e6f011220d0003ce5b51063f0ab417cristy            _exception);
4036805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4037805a2d48e7e2ed7d699871183ed706699119281canthony        }
4038ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
4039805a2d48e7e2ed7d699871183ed706699119281canthony    }
4040805a2d48e7e2ed7d699871183ed706699119281canthony    case 'f':
4041805a2d48e7e2ed7d699871183ed706699119281canthony    {
4042afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("fft",option+1) == 0)
4043805a2d48e7e2ed7d699871183ed706699119281canthony        {
4044f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy          new_images=ForwardFourierTransformImage(_images,IsNormalOp,
4045f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy           _exception);
4046805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4047805a2d48e7e2ed7d699871183ed706699119281canthony        }
4048afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("flatten",option+1) == 0)
4049805a2d48e7e2ed7d699871183ed706699119281canthony        {
4050319dac6e2a04826b9cc8d2784549c08fd34f8879anthony          /* REDIRECTED to use -layers flatten instead */
405152b632a875d61ac705bca7ad2b0919f90112eef9cristy          (void) CLIListOperatorImages(cli_wand,"-layers",option+1,NULL);
4052805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4053805a2d48e7e2ed7d699871183ed706699119281canthony        }
4054afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("fx",option+1) == 0)
4055805a2d48e7e2ed7d699871183ed706699119281canthony        {
405692c93bd35e207736d340f1b32000006a5bf6208eanthony          new_images=FxImage(_images,arg1,_exception);
4057805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4058805a2d48e7e2ed7d699871183ed706699119281canthony        }
4059ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
4060805a2d48e7e2ed7d699871183ed706699119281canthony    }
4061805a2d48e7e2ed7d699871183ed706699119281canthony    case 'h':
4062805a2d48e7e2ed7d699871183ed706699119281canthony    {
4063afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("hald-clut",option+1) == 0)
4064805a2d48e7e2ed7d699871183ed706699119281canthony        {
406531f1bf7bb6ee2698a2afab42ee0329b11663636canthony          /* FUTURE - make this a compose option (and thus layers compose )
406692c93bd35e207736d340f1b32000006a5bf6208eanthony             or perhaps compose last image over all other _images.
406731f1bf7bb6ee2698a2afab42ee0329b11663636canthony          */
4068805a2d48e7e2ed7d699871183ed706699119281canthony          Image
406931f1bf7bb6ee2698a2afab42ee0329b11663636canthony            *hald_image;
4070805a2d48e7e2ed7d699871183ed706699119281canthony
407192c93bd35e207736d340f1b32000006a5bf6208eanthony          new_images=RemoveFirstImageFromList(&_images);
407292c93bd35e207736d340f1b32000006a5bf6208eanthony          hald_image=RemoveLastImageFromList(&_images);
4073805a2d48e7e2ed7d699871183ed706699119281canthony          if (hald_image == (Image *) NULL)
407431f1bf7bb6ee2698a2afab42ee0329b11663636canthony            break;
407592c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) HaldClutImage(new_images,hald_image,_exception);
4076805a2d48e7e2ed7d699871183ed706699119281canthony          hald_image=DestroyImage(hald_image);
4077805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4078805a2d48e7e2ed7d699871183ed706699119281canthony        }
4079ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
4080805a2d48e7e2ed7d699871183ed706699119281canthony    }
4081805a2d48e7e2ed7d699871183ed706699119281canthony    case 'i':
4082805a2d48e7e2ed7d699871183ed706699119281canthony    {
4083afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("ift",option+1) == 0)
4084805a2d48e7e2ed7d699871183ed706699119281canthony        {
4085805a2d48e7e2ed7d699871183ed706699119281canthony          Image
4086805a2d48e7e2ed7d699871183ed706699119281canthony            *magnitude_image,
4087805a2d48e7e2ed7d699871183ed706699119281canthony            *phase_image;
4088805a2d48e7e2ed7d699871183ed706699119281canthony
408992c93bd35e207736d340f1b32000006a5bf6208eanthony           magnitude_image=RemoveFirstImageFromList(&_images);
409092c93bd35e207736d340f1b32000006a5bf6208eanthony           phase_image=RemoveFirstImageFromList(&_images);
4091e8f56490b69cb12652819c7015e16bb03c1dab98anthony          /* FUTURE - produce Exception, rather than silent fail */
409231f1bf7bb6ee2698a2afab42ee0329b11663636canthony           if (phase_image == (Image *) NULL)
409331f1bf7bb6ee2698a2afab42ee0329b11663636canthony             break;
409431f1bf7bb6ee2698a2afab42ee0329b11663636canthony           new_images=InverseFourierTransformImage(magnitude_image,phase_image,
4095f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy             IsNormalOp,_exception);
409631f1bf7bb6ee2698a2afab42ee0329b11663636canthony           magnitude_image=DestroyImage(magnitude_image);
409731f1bf7bb6ee2698a2afab42ee0329b11663636canthony           phase_image=DestroyImage(phase_image);
4098805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4099805a2d48e7e2ed7d699871183ed706699119281canthony        }
4100afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("insert",option+1) == 0)
4101805a2d48e7e2ed7d699871183ed706699119281canthony        {
4102805a2d48e7e2ed7d699871183ed706699119281canthony          Image
410331f1bf7bb6ee2698a2afab42ee0329b11663636canthony            *insert_image,
410431f1bf7bb6ee2698a2afab42ee0329b11663636canthony            *index_image;
410531f1bf7bb6ee2698a2afab42ee0329b11663636canthony
410631f1bf7bb6ee2698a2afab42ee0329b11663636canthony          ssize_t
410731f1bf7bb6ee2698a2afab42ee0329b11663636canthony            index;
4108805a2d48e7e2ed7d699871183ed706699119281canthony
41095d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IfNormalOp && (IsGeometry(arg1) == MagickFalse))
4110fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
4111805a2d48e7e2ed7d699871183ed706699119281canthony          index=0;
411292c93bd35e207736d340f1b32000006a5bf6208eanthony          insert_image=RemoveLastImageFromList(&_images);
4113afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony          if (IfNormalOp)
411431f1bf7bb6ee2698a2afab42ee0329b11663636canthony            index=(ssize_t) StringToLong(arg1);
411543f425dd7d5b33887726982b28ebfa06f5560636anthony          index_image=insert_image;
4116805a2d48e7e2ed7d699871183ed706699119281canthony          if (index == 0)
411792c93bd35e207736d340f1b32000006a5bf6208eanthony            PrependImageToList(&_images,insert_image);
411892c93bd35e207736d340f1b32000006a5bf6208eanthony          else if (index == (ssize_t) GetImageListLength(_images))
411992c93bd35e207736d340f1b32000006a5bf6208eanthony            AppendImageToList(&_images,insert_image);
4120805a2d48e7e2ed7d699871183ed706699119281canthony          else
412143f425dd7d5b33887726982b28ebfa06f5560636anthony            {
412292c93bd35e207736d340f1b32000006a5bf6208eanthony               index_image=GetImageFromList(_images,index-1);
412343f425dd7d5b33887726982b28ebfa06f5560636anthony               if (index_image == (Image *) NULL)
4124fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony                 CLIWandExceptArgBreak(OptionError,"NoSuchImage",option,arg1);
412543f425dd7d5b33887726982b28ebfa06f5560636anthony              InsertImageInList(&index_image,insert_image);
412643f425dd7d5b33887726982b28ebfa06f5560636anthony            }
412792c93bd35e207736d340f1b32000006a5bf6208eanthony          _images=GetFirstImageInList(index_image);
4128805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4129805a2d48e7e2ed7d699871183ed706699119281canthony        }
4130ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
4131805a2d48e7e2ed7d699871183ed706699119281canthony    }
4132805a2d48e7e2ed7d699871183ed706699119281canthony    case 'l':
4133805a2d48e7e2ed7d699871183ed706699119281canthony    {
4134afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("layers",option+1) == 0)
4135805a2d48e7e2ed7d699871183ed706699119281canthony        {
4136fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          parse=ParseCommandOption(MagickLayerOptions,MagickFalse,arg1);
4137fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony          if ( parse < 0 )
4138fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony            CLIWandExceptArgBreak(OptionError,"UnrecognizedLayerMethod",
4139fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony                 option,arg1);
4140a041706d555a780038f97211101cf8acb7f297d2cristy          switch ((LayerMethod) parse)
4141805a2d48e7e2ed7d699871183ed706699119281canthony          {
4142805a2d48e7e2ed7d699871183ed706699119281canthony            case CoalesceLayer:
4143805a2d48e7e2ed7d699871183ed706699119281canthony            {
414492c93bd35e207736d340f1b32000006a5bf6208eanthony              new_images=CoalesceImages(_images,_exception);
4145805a2d48e7e2ed7d699871183ed706699119281canthony              break;
4146805a2d48e7e2ed7d699871183ed706699119281canthony            }
4147805a2d48e7e2ed7d699871183ed706699119281canthony            case CompareAnyLayer:
4148805a2d48e7e2ed7d699871183ed706699119281canthony            case CompareClearLayer:
4149805a2d48e7e2ed7d699871183ed706699119281canthony            case CompareOverlayLayer:
4150805a2d48e7e2ed7d699871183ed706699119281canthony            default:
4151805a2d48e7e2ed7d699871183ed706699119281canthony            {
4152a041706d555a780038f97211101cf8acb7f297d2cristy              new_images=CompareImagesLayers(_images,(LayerMethod) parse,
4153fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony                   _exception);
4154805a2d48e7e2ed7d699871183ed706699119281canthony              break;
4155805a2d48e7e2ed7d699871183ed706699119281canthony            }
4156805a2d48e7e2ed7d699871183ed706699119281canthony            case MergeLayer:
4157805a2d48e7e2ed7d699871183ed706699119281canthony            case FlattenLayer:
4158805a2d48e7e2ed7d699871183ed706699119281canthony            case MosaicLayer:
4159805a2d48e7e2ed7d699871183ed706699119281canthony            case TrimBoundsLayer:
4160805a2d48e7e2ed7d699871183ed706699119281canthony            {
4161a041706d555a780038f97211101cf8acb7f297d2cristy              new_images=MergeImageLayers(_images,(LayerMethod) parse,
4162f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy                _exception);
4163805a2d48e7e2ed7d699871183ed706699119281canthony              break;
4164805a2d48e7e2ed7d699871183ed706699119281canthony            }
4165805a2d48e7e2ed7d699871183ed706699119281canthony            case DisposeLayer:
4166805a2d48e7e2ed7d699871183ed706699119281canthony            {
416792c93bd35e207736d340f1b32000006a5bf6208eanthony              new_images=DisposeImages(_images,_exception);
4168805a2d48e7e2ed7d699871183ed706699119281canthony              break;
4169805a2d48e7e2ed7d699871183ed706699119281canthony            }
4170805a2d48e7e2ed7d699871183ed706699119281canthony            case OptimizeImageLayer:
4171805a2d48e7e2ed7d699871183ed706699119281canthony            {
417292c93bd35e207736d340f1b32000006a5bf6208eanthony              new_images=OptimizeImageLayers(_images,_exception);
4173805a2d48e7e2ed7d699871183ed706699119281canthony              break;
4174805a2d48e7e2ed7d699871183ed706699119281canthony            }
4175805a2d48e7e2ed7d699871183ed706699119281canthony            case OptimizePlusLayer:
4176805a2d48e7e2ed7d699871183ed706699119281canthony            {
417792c93bd35e207736d340f1b32000006a5bf6208eanthony              new_images=OptimizePlusImageLayers(_images,_exception);
4178805a2d48e7e2ed7d699871183ed706699119281canthony              break;
4179805a2d48e7e2ed7d699871183ed706699119281canthony            }
4180805a2d48e7e2ed7d699871183ed706699119281canthony            case OptimizeTransLayer:
4181805a2d48e7e2ed7d699871183ed706699119281canthony            {
418292c93bd35e207736d340f1b32000006a5bf6208eanthony              OptimizeImageTransparency(_images,_exception);
4183805a2d48e7e2ed7d699871183ed706699119281canthony              break;
4184805a2d48e7e2ed7d699871183ed706699119281canthony            }
4185805a2d48e7e2ed7d699871183ed706699119281canthony            case RemoveDupsLayer:
4186805a2d48e7e2ed7d699871183ed706699119281canthony            {
418792c93bd35e207736d340f1b32000006a5bf6208eanthony              RemoveDuplicateLayers(&_images,_exception);
4188805a2d48e7e2ed7d699871183ed706699119281canthony              break;
4189805a2d48e7e2ed7d699871183ed706699119281canthony            }
4190805a2d48e7e2ed7d699871183ed706699119281canthony            case RemoveZeroLayer:
4191805a2d48e7e2ed7d699871183ed706699119281canthony            {
419292c93bd35e207736d340f1b32000006a5bf6208eanthony              RemoveZeroDelayLayers(&_images,_exception);
4193805a2d48e7e2ed7d699871183ed706699119281canthony              break;
4194805a2d48e7e2ed7d699871183ed706699119281canthony            }
4195805a2d48e7e2ed7d699871183ed706699119281canthony            case OptimizeLayer:
419631f1bf7bb6ee2698a2afab42ee0329b11663636canthony            { /* General Purpose, GIF Animation Optimizer.  */
419792c93bd35e207736d340f1b32000006a5bf6208eanthony              new_images=CoalesceImages(_images,_exception);
419831f1bf7bb6ee2698a2afab42ee0329b11663636canthony              if (new_images == (Image *) NULL)
419931f1bf7bb6ee2698a2afab42ee0329b11663636canthony                break;
420092c93bd35e207736d340f1b32000006a5bf6208eanthony              _images=DestroyImageList(_images);
420192c93bd35e207736d340f1b32000006a5bf6208eanthony              _images=OptimizeImageLayers(new_images,_exception);
420292c93bd35e207736d340f1b32000006a5bf6208eanthony              if (_images == (Image *) NULL)
420331f1bf7bb6ee2698a2afab42ee0329b11663636canthony                break;
420431f1bf7bb6ee2698a2afab42ee0329b11663636canthony              new_images=DestroyImageList(new_images);
420592c93bd35e207736d340f1b32000006a5bf6208eanthony              OptimizeImageTransparency(_images,_exception);
420692c93bd35e207736d340f1b32000006a5bf6208eanthony              (void) RemapImages(_quantize_info,_images,(Image *) NULL,
420792c93bd35e207736d340f1b32000006a5bf6208eanthony                _exception);
4208805a2d48e7e2ed7d699871183ed706699119281canthony              break;
4209805a2d48e7e2ed7d699871183ed706699119281canthony            }
4210805a2d48e7e2ed7d699871183ed706699119281canthony            case CompositeLayer:
4211805a2d48e7e2ed7d699871183ed706699119281canthony            {
4212805a2d48e7e2ed7d699871183ed706699119281canthony              Image
4213805a2d48e7e2ed7d699871183ed706699119281canthony                *source;
4214805a2d48e7e2ed7d699871183ed706699119281canthony
4215805a2d48e7e2ed7d699871183ed706699119281canthony              RectangleInfo
4216805a2d48e7e2ed7d699871183ed706699119281canthony                geometry;
4217805a2d48e7e2ed7d699871183ed706699119281canthony
421831f1bf7bb6ee2698a2afab42ee0329b11663636canthony              CompositeOperator
42195f867ae6899e46eb35c30b38e9479312880608cfanthony                compose;
42205f867ae6899e46eb35c30b38e9479312880608cfanthony
42215f867ae6899e46eb35c30b38e9479312880608cfanthony              const char*
42225f867ae6899e46eb35c30b38e9479312880608cfanthony                value;
42235f867ae6899e46eb35c30b38e9479312880608cfanthony
422492c93bd35e207736d340f1b32000006a5bf6208eanthony              value=GetImageOption(_image_info,"compose");
422531f1bf7bb6ee2698a2afab42ee0329b11663636canthony              compose=OverCompositeOp;  /* Default to Over */
42265f867ae6899e46eb35c30b38e9479312880608cfanthony              if (value != (const char *) NULL)
42275f867ae6899e46eb35c30b38e9479312880608cfanthony                compose=(CompositeOperator) ParseCommandOption(
42285f867ae6899e46eb35c30b38e9479312880608cfanthony                      MagickComposeOptions,MagickFalse,value);
42295f867ae6899e46eb35c30b38e9479312880608cfanthony
423031f1bf7bb6ee2698a2afab42ee0329b11663636canthony              /* Split image sequence at the first 'NULL:' image. */
423192c93bd35e207736d340f1b32000006a5bf6208eanthony              source=_images;
4232805a2d48e7e2ed7d699871183ed706699119281canthony              while (source != (Image *) NULL)
4233805a2d48e7e2ed7d699871183ed706699119281canthony              {
4234805a2d48e7e2ed7d699871183ed706699119281canthony                source=GetNextImageInList(source);
4235805a2d48e7e2ed7d699871183ed706699119281canthony                if ((source != (Image *) NULL) &&
4236805a2d48e7e2ed7d699871183ed706699119281canthony                    (LocaleCompare(source->magick,"NULL") == 0))
4237805a2d48e7e2ed7d699871183ed706699119281canthony                  break;
4238805a2d48e7e2ed7d699871183ed706699119281canthony              }
4239805a2d48e7e2ed7d699871183ed706699119281canthony              if (source != (Image *) NULL)
4240805a2d48e7e2ed7d699871183ed706699119281canthony                {
4241805a2d48e7e2ed7d699871183ed706699119281canthony                  if ((GetPreviousImageInList(source) == (Image *) NULL) ||
4242805a2d48e7e2ed7d699871183ed706699119281canthony                      (GetNextImageInList(source) == (Image *) NULL))
4243805a2d48e7e2ed7d699871183ed706699119281canthony                    source=(Image *) NULL;
4244805a2d48e7e2ed7d699871183ed706699119281canthony                  else
424531f1bf7bb6ee2698a2afab42ee0329b11663636canthony                    { /* Separate the two lists, junk the null: image.  */
4246805a2d48e7e2ed7d699871183ed706699119281canthony                      source=SplitImageList(source->previous);
4247805a2d48e7e2ed7d699871183ed706699119281canthony                      DeleteImageFromList(&source);
4248805a2d48e7e2ed7d699871183ed706699119281canthony                    }
4249805a2d48e7e2ed7d699871183ed706699119281canthony                }
4250805a2d48e7e2ed7d699871183ed706699119281canthony              if (source == (Image *) NULL)
4251805a2d48e7e2ed7d699871183ed706699119281canthony                {
425292c93bd35e207736d340f1b32000006a5bf6208eanthony                  (void) ThrowMagickException(_exception,GetMagickModule(),
4253805a2d48e7e2ed7d699871183ed706699119281canthony                    OptionError,"MissingNullSeparator","layers Composite");
4254805a2d48e7e2ed7d699871183ed706699119281canthony                  break;
4255805a2d48e7e2ed7d699871183ed706699119281canthony                }
425631f1bf7bb6ee2698a2afab42ee0329b11663636canthony              /* Adjust offset with gravity and virtual canvas.  */
425792c93bd35e207736d340f1b32000006a5bf6208eanthony              SetGeometry(_images,&geometry);
425892c93bd35e207736d340f1b32000006a5bf6208eanthony              (void) ParseAbsoluteGeometry(_images->geometry,&geometry);
4259805a2d48e7e2ed7d699871183ed706699119281canthony              geometry.width=source->page.width != 0 ?
4260805a2d48e7e2ed7d699871183ed706699119281canthony                source->page.width : source->columns;
4261805a2d48e7e2ed7d699871183ed706699119281canthony              geometry.height=source->page.height != 0 ?
4262805a2d48e7e2ed7d699871183ed706699119281canthony               source->page.height : source->rows;
426392c93bd35e207736d340f1b32000006a5bf6208eanthony              GravityAdjustGeometry(_images->page.width != 0 ?
426492c93bd35e207736d340f1b32000006a5bf6208eanthony                _images->page.width : _images->columns,
426592c93bd35e207736d340f1b32000006a5bf6208eanthony                _images->page.height != 0 ? _images->page.height :
426692c93bd35e207736d340f1b32000006a5bf6208eanthony                _images->rows,_images->gravity,&geometry);
42675f867ae6899e46eb35c30b38e9479312880608cfanthony
426831f1bf7bb6ee2698a2afab42ee0329b11663636canthony              /* Compose the two image sequences together */
426992c93bd35e207736d340f1b32000006a5bf6208eanthony              CompositeLayers(_images,compose,source,geometry.x,geometry.y,
427092c93bd35e207736d340f1b32000006a5bf6208eanthony                _exception);
4271805a2d48e7e2ed7d699871183ed706699119281canthony              source=DestroyImageList(source);
4272805a2d48e7e2ed7d699871183ed706699119281canthony              break;
4273805a2d48e7e2ed7d699871183ed706699119281canthony            }
4274805a2d48e7e2ed7d699871183ed706699119281canthony          }
4275805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4276805a2d48e7e2ed7d699871183ed706699119281canthony        }
4277ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
4278805a2d48e7e2ed7d699871183ed706699119281canthony    }
4279805a2d48e7e2ed7d699871183ed706699119281canthony    case 'm':
4280805a2d48e7e2ed7d699871183ed706699119281canthony    {
4281afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("map",option+1) == 0)
4282805a2d48e7e2ed7d699871183ed706699119281canthony        {
4283464f1c476517436723780b8a8bb371464584453canthony          CLIWandWarnReplaced("+remap");
428492c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) RemapImages(_quantize_info,_images,(Image *) NULL,_exception);
4285805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4286805a2d48e7e2ed7d699871183ed706699119281canthony        }
4287e863c054d49031af35b73066f5394af223de7df5cristy      if (LocaleCompare("metric",option+1) == 0)
4288e863c054d49031af35b73066f5394af223de7df5cristy        break;
4289afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("morph",option+1) == 0)
4290805a2d48e7e2ed7d699871183ed706699119281canthony        {
4291805a2d48e7e2ed7d699871183ed706699119281canthony          Image
4292805a2d48e7e2ed7d699871183ed706699119281canthony            *morph_image;
4293805a2d48e7e2ed7d699871183ed706699119281canthony
42945d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
42957bc87995f5fcb67d01e8cad3e80b0024b42e942danthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
429692c93bd35e207736d340f1b32000006a5bf6208eanthony          morph_image=MorphImages(_images,StringToUnsignedLong(arg1),
429792c93bd35e207736d340f1b32000006a5bf6208eanthony            _exception);
4298805a2d48e7e2ed7d699871183ed706699119281canthony          if (morph_image == (Image *) NULL)
429931f1bf7bb6ee2698a2afab42ee0329b11663636canthony            break;
430092c93bd35e207736d340f1b32000006a5bf6208eanthony          _images=DestroyImageList(_images);
430192c93bd35e207736d340f1b32000006a5bf6208eanthony          _images=morph_image;
4302805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4303805a2d48e7e2ed7d699871183ed706699119281canthony        }
4304afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("mosaic",option+1) == 0)
4305805a2d48e7e2ed7d699871183ed706699119281canthony        {
4306319dac6e2a04826b9cc8d2784549c08fd34f8879anthony          /* REDIRECTED to use -layers mosaic instead */
430752b632a875d61ac705bca7ad2b0919f90112eef9cristy          (void) CLIListOperatorImages(cli_wand,"-layers",option+1,NULL);
4308805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4309805a2d48e7e2ed7d699871183ed706699119281canthony        }
4310ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
4311805a2d48e7e2ed7d699871183ed706699119281canthony    }
4312805a2d48e7e2ed7d699871183ed706699119281canthony    case 'p':
4313805a2d48e7e2ed7d699871183ed706699119281canthony    {
431402016cff038d0ddb255d4c84bf31a78f5c8714f0cristy      if (LocaleCompare("poly",option+1) == 0)
431502016cff038d0ddb255d4c84bf31a78f5c8714f0cristy        {
431602016cff038d0ddb255d4c84bf31a78f5c8714f0cristy          double
431702016cff038d0ddb255d4c84bf31a78f5c8714f0cristy            *args;
431802016cff038d0ddb255d4c84bf31a78f5c8714f0cristy
431902016cff038d0ddb255d4c84bf31a78f5c8714f0cristy          ssize_t
432002016cff038d0ddb255d4c84bf31a78f5c8714f0cristy            count;
432102016cff038d0ddb255d4c84bf31a78f5c8714f0cristy
432202016cff038d0ddb255d4c84bf31a78f5c8714f0cristy          /* convert argument string into an array of doubles */
4323ace09c64ece039e3fe5e952ca36a00ed07ee09d0cristy          args = StringToArrayOfDoubles(arg1,&count,_exception);
4324f432c635c526259b858c9aad3d409c5c44545686cristy          if (args == (double *) NULL )
4325ace09c64ece039e3fe5e952ca36a00ed07ee09d0cristy            CLIWandExceptArgBreak(OptionError,"InvalidNumberList",option,arg1);
4326f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy          new_images=PolynomialImage(_images,(size_t) (count >> 1),args,
4327f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy           _exception);
432802016cff038d0ddb255d4c84bf31a78f5c8714f0cristy          args=(double *) RelinquishMagickMemory(args);
432902016cff038d0ddb255d4c84bf31a78f5c8714f0cristy          break;
433002016cff038d0ddb255d4c84bf31a78f5c8714f0cristy        }
4331afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("process",option+1) == 0)
4332805a2d48e7e2ed7d699871183ed706699119281canthony        {
4333b1d483a6a6a5678173db9d60bec52dd5a37826beanthony          /* FUTURE: better parsing using ScriptToken() from string ??? */
4334805a2d48e7e2ed7d699871183ed706699119281canthony          char
4335805a2d48e7e2ed7d699871183ed706699119281canthony            **arguments;
4336805a2d48e7e2ed7d699871183ed706699119281canthony
4337805a2d48e7e2ed7d699871183ed706699119281canthony          int
4338805a2d48e7e2ed7d699871183ed706699119281canthony            j,
4339805a2d48e7e2ed7d699871183ed706699119281canthony            number_arguments;
4340805a2d48e7e2ed7d699871183ed706699119281canthony
434131f1bf7bb6ee2698a2afab42ee0329b11663636canthony          arguments=StringToArgv(arg1,&number_arguments);
4342805a2d48e7e2ed7d699871183ed706699119281canthony          if (arguments == (char **) NULL)
4343805a2d48e7e2ed7d699871183ed706699119281canthony            break;
434431f1bf7bb6ee2698a2afab42ee0329b11663636canthony          if (strchr(arguments[1],'=') != (char *) NULL)
4345805a2d48e7e2ed7d699871183ed706699119281canthony            {
4346805a2d48e7e2ed7d699871183ed706699119281canthony              char
4347805a2d48e7e2ed7d699871183ed706699119281canthony                breaker,
4348805a2d48e7e2ed7d699871183ed706699119281canthony                quote,
4349805a2d48e7e2ed7d699871183ed706699119281canthony                *token;
4350805a2d48e7e2ed7d699871183ed706699119281canthony
4351805a2d48e7e2ed7d699871183ed706699119281canthony              const char
4352805a2d48e7e2ed7d699871183ed706699119281canthony                *arguments;
4353805a2d48e7e2ed7d699871183ed706699119281canthony
4354805a2d48e7e2ed7d699871183ed706699119281canthony              int
4355805a2d48e7e2ed7d699871183ed706699119281canthony                next,
4356805a2d48e7e2ed7d699871183ed706699119281canthony                status;
4357805a2d48e7e2ed7d699871183ed706699119281canthony
4358805a2d48e7e2ed7d699871183ed706699119281canthony              size_t
4359805a2d48e7e2ed7d699871183ed706699119281canthony                length;
4360805a2d48e7e2ed7d699871183ed706699119281canthony
4361805a2d48e7e2ed7d699871183ed706699119281canthony              TokenInfo
4362805a2d48e7e2ed7d699871183ed706699119281canthony                *token_info;
4363805a2d48e7e2ed7d699871183ed706699119281canthony
4364805a2d48e7e2ed7d699871183ed706699119281canthony              /*
436524aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony                Support old style syntax, filter="-option arg1".
4366805a2d48e7e2ed7d699871183ed706699119281canthony              */
43674bc3dac42df4f402771274acb9796693b846eb8ecristy              assert(arg1 != (const char *) NULL);
436831f1bf7bb6ee2698a2afab42ee0329b11663636canthony              length=strlen(arg1);
4369805a2d48e7e2ed7d699871183ed706699119281canthony              token=(char *) NULL;
4370151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy              if (~length >= (MagickPathExtent-1))
4371151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy                token=(char *) AcquireQuantumMemory(length+MagickPathExtent,
4372805a2d48e7e2ed7d699871183ed706699119281canthony                  sizeof(*token));
4373805a2d48e7e2ed7d699871183ed706699119281canthony              if (token == (char *) NULL)
4374805a2d48e7e2ed7d699871183ed706699119281canthony                break;
4375805a2d48e7e2ed7d699871183ed706699119281canthony              next=0;
437631f1bf7bb6ee2698a2afab42ee0329b11663636canthony              arguments=arg1;
4377805a2d48e7e2ed7d699871183ed706699119281canthony              token_info=AcquireTokenInfo();
4378805a2d48e7e2ed7d699871183ed706699119281canthony              status=Tokenizer(token_info,0,token,length,arguments,"","=",
4379805a2d48e7e2ed7d699871183ed706699119281canthony                "\"",'\0',&breaker,&next,&quote);
4380805a2d48e7e2ed7d699871183ed706699119281canthony              token_info=DestroyTokenInfo(token_info);
4381805a2d48e7e2ed7d699871183ed706699119281canthony              if (status == 0)
4382805a2d48e7e2ed7d699871183ed706699119281canthony                {
4383805a2d48e7e2ed7d699871183ed706699119281canthony                  const char
4384805a2d48e7e2ed7d699871183ed706699119281canthony                    *argv;
4385805a2d48e7e2ed7d699871183ed706699119281canthony
4386805a2d48e7e2ed7d699871183ed706699119281canthony                  argv=(&(arguments[next]));
438792c93bd35e207736d340f1b32000006a5bf6208eanthony                  (void) InvokeDynamicImageFilter(token,&_images,1,&argv,
438892c93bd35e207736d340f1b32000006a5bf6208eanthony                    _exception);
4389805a2d48e7e2ed7d699871183ed706699119281canthony                }
4390805a2d48e7e2ed7d699871183ed706699119281canthony              token=DestroyString(token);
4391805a2d48e7e2ed7d699871183ed706699119281canthony              break;
4392805a2d48e7e2ed7d699871183ed706699119281canthony            }
4393805a2d48e7e2ed7d699871183ed706699119281canthony          (void) SubstituteString(&arguments[1],"-","");
439492c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) InvokeDynamicImageFilter(arguments[1],&_images,
439592c93bd35e207736d340f1b32000006a5bf6208eanthony            number_arguments-2,(const char **) arguments+2,_exception);
4396805a2d48e7e2ed7d699871183ed706699119281canthony          for (j=0; j < number_arguments; j++)
4397805a2d48e7e2ed7d699871183ed706699119281canthony            arguments[j]=DestroyString(arguments[j]);
4398805a2d48e7e2ed7d699871183ed706699119281canthony          arguments=(char **) RelinquishMagickMemory(arguments);
4399805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4400805a2d48e7e2ed7d699871183ed706699119281canthony        }
4401ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
4402805a2d48e7e2ed7d699871183ed706699119281canthony    }
4403805a2d48e7e2ed7d699871183ed706699119281canthony    case 'r':
4404805a2d48e7e2ed7d699871183ed706699119281canthony    {
4405afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("remap",option+1) == 0)
440631f1bf7bb6ee2698a2afab42ee0329b11663636canthony        {
440792c93bd35e207736d340f1b32000006a5bf6208eanthony          (void) RemapImages(_quantize_info,_images,(Image *) NULL,_exception);
440831f1bf7bb6ee2698a2afab42ee0329b11663636canthony          break;
440931f1bf7bb6ee2698a2afab42ee0329b11663636canthony        }
4410afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("reverse",option+1) == 0)
4411805a2d48e7e2ed7d699871183ed706699119281canthony        {
441292c93bd35e207736d340f1b32000006a5bf6208eanthony          ReverseImageList(&_images);
4413805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4414805a2d48e7e2ed7d699871183ed706699119281canthony        }
4415ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
4416805a2d48e7e2ed7d699871183ed706699119281canthony    }
4417805a2d48e7e2ed7d699871183ed706699119281canthony    case 's':
4418805a2d48e7e2ed7d699871183ed706699119281canthony    {
4419afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony      if (LocaleCompare("smush",option+1) == 0)
4420805a2d48e7e2ed7d699871183ed706699119281canthony        {
4421cd358fcc24e0be863b1d6e1917e799fc04add92aanthony          /* FUTURE: this option needs more work to make better */
4422805a2d48e7e2ed7d699871183ed706699119281canthony          ssize_t
4423805a2d48e7e2ed7d699871183ed706699119281canthony            offset;
4424805a2d48e7e2ed7d699871183ed706699119281canthony
44255d0a441fe7d90e3449f2103ed88c32cec28595e6dirk          if (IsGeometry(arg1) == MagickFalse)
4426f42014dc55e8d21355ea3d17372e2d9c14b07641anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
442731f1bf7bb6ee2698a2afab42ee0329b11663636canthony          offset=(ssize_t) StringToLong(arg1);
4428a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          new_images=SmushImages(_images,IsNormalOp,offset,_exception);
4429cd358fcc24e0be863b1d6e1917e799fc04add92aanthony          break;
4430cd358fcc24e0be863b1d6e1917e799fc04add92aanthony        }
4431cd358fcc24e0be863b1d6e1917e799fc04add92aanthony      if (LocaleCompare("subimage",option+1) == 0)
4432cd358fcc24e0be863b1d6e1917e799fc04add92aanthony        {
4433cd358fcc24e0be863b1d6e1917e799fc04add92aanthony          Image
4434cd358fcc24e0be863b1d6e1917e799fc04add92aanthony            *base_image,
4435cd358fcc24e0be863b1d6e1917e799fc04add92aanthony            *compare_image;
4436cd358fcc24e0be863b1d6e1917e799fc04add92aanthony
4437f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy          const char
4438f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy            *value;
4439cd358fcc24e0be863b1d6e1917e799fc04add92aanthony
4440cd358fcc24e0be863b1d6e1917e799fc04add92aanthony          MetricType
4441cd358fcc24e0be863b1d6e1917e799fc04add92aanthony            metric;
4442cd358fcc24e0be863b1d6e1917e799fc04add92aanthony
4443cd358fcc24e0be863b1d6e1917e799fc04add92aanthony          double
4444cd358fcc24e0be863b1d6e1917e799fc04add92aanthony            similarity;
4445cd358fcc24e0be863b1d6e1917e799fc04add92aanthony
4446cd358fcc24e0be863b1d6e1917e799fc04add92aanthony          RectangleInfo
4447cd358fcc24e0be863b1d6e1917e799fc04add92aanthony            offset;
4448cd358fcc24e0be863b1d6e1917e799fc04add92aanthony
4449cd358fcc24e0be863b1d6e1917e799fc04add92aanthony          base_image=GetImageFromList(_images,0);
4450cd358fcc24e0be863b1d6e1917e799fc04add92aanthony          compare_image=GetImageFromList(_images,1);
4451cd358fcc24e0be863b1d6e1917e799fc04add92aanthony
4452cd358fcc24e0be863b1d6e1917e799fc04add92aanthony          /* Comparision Metric */
44530816329f81f807d0a99a4d3301d3ddaa842308d3cristy          metric=UndefinedErrorMetric;
4454cd358fcc24e0be863b1d6e1917e799fc04add92aanthony          value=GetImageOption(_image_info,"metric");
4455cd358fcc24e0be863b1d6e1917e799fc04add92aanthony          if (value != (const char *) NULL)
4456cd358fcc24e0be863b1d6e1917e799fc04add92aanthony            metric=(MetricType) ParseCommandOption(MagickMetricOptions,
4457cd358fcc24e0be863b1d6e1917e799fc04add92aanthony              MagickFalse,value);
4458cd358fcc24e0be863b1d6e1917e799fc04add92aanthony
445999fcec42b1b4c5b95bdeaa3fd38810cc05e62d56cristy          new_images=SimilarityImage(base_image,compare_image,metric,0.0,
4460f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy            &offset,&similarity,_exception);
4461cd358fcc24e0be863b1d6e1917e799fc04add92aanthony
4462e024637ce65f11ae6e83bfc913b601c26ba6b350cristy          if (new_images != (Image *) NULL)
4463e024637ce65f11ae6e83bfc913b601c26ba6b350cristy            {
4464e024637ce65f11ae6e83bfc913b601c26ba6b350cristy              char
4465e024637ce65f11ae6e83bfc913b601c26ba6b350cristy                result[MagickPathExtent];
4466e024637ce65f11ae6e83bfc913b601c26ba6b350cristy
4467e024637ce65f11ae6e83bfc913b601c26ba6b350cristy              (void) FormatLocaleString(result,MagickPathExtent,"%lf",
4468e024637ce65f11ae6e83bfc913b601c26ba6b350cristy                similarity);
4469e024637ce65f11ae6e83bfc913b601c26ba6b350cristy              (void) SetImageProperty(new_images,"subimage:similarity",result,
4470e024637ce65f11ae6e83bfc913b601c26ba6b350cristy                _exception);
4471e024637ce65f11ae6e83bfc913b601c26ba6b350cristy              (void) FormatLocaleString(result,MagickPathExtent,"%+ld",(long)
4472e024637ce65f11ae6e83bfc913b601c26ba6b350cristy                offset.x);
4473e024637ce65f11ae6e83bfc913b601c26ba6b350cristy              (void) SetImageProperty(new_images,"subimage:x",result,
4474e024637ce65f11ae6e83bfc913b601c26ba6b350cristy                _exception);
4475e024637ce65f11ae6e83bfc913b601c26ba6b350cristy              (void) FormatLocaleString(result,MagickPathExtent,"%+ld",(long)
4476e024637ce65f11ae6e83bfc913b601c26ba6b350cristy                offset.y);
4477e024637ce65f11ae6e83bfc913b601c26ba6b350cristy              (void) SetImageProperty(new_images,"subimage:y",result,
4478e024637ce65f11ae6e83bfc913b601c26ba6b350cristy                _exception);
4479e024637ce65f11ae6e83bfc913b601c26ba6b350cristy              (void) FormatLocaleString(result,MagickPathExtent,
4480e024637ce65f11ae6e83bfc913b601c26ba6b350cristy                "%lux%lu%+ld%+ld",(unsigned long) offset.width,(unsigned long)
4481e024637ce65f11ae6e83bfc913b601c26ba6b350cristy                offset.height,(long) offset.x,(long) offset.y);
4482e024637ce65f11ae6e83bfc913b601c26ba6b350cristy              (void) SetImageProperty(new_images,"subimage:offset",result,
4483e024637ce65f11ae6e83bfc913b601c26ba6b350cristy                _exception);
4484e024637ce65f11ae6e83bfc913b601c26ba6b350cristy            }
4485805a2d48e7e2ed7d699871183ed706699119281canthony          break;
4486805a2d48e7e2ed7d699871183ed706699119281canthony        }
4487f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy      if (LocaleCompare("swap",option+1) == 0)
4488f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy        {
44890ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony        Image
44900ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony          *p,
44910ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony          *q,
44920ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony          *swap;
44930ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony
44940ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony        ssize_t
44950ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony          index,
44960ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony          swap_index;
44970ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony
44986b36c94b6d683f492e222de0349ff3ab0aa858c0cristy        index=(-1);
44996b36c94b6d683f492e222de0349ff3ab0aa858c0cristy        swap_index=(-2);
45000ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony        if (IfNormalOp) {
45010ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony          GeometryInfo
45020ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony            geometry_info;
4503805a2d48e7e2ed7d699871183ed706699119281canthony
45040ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony          MagickStatusType
45050ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony            flags;
4506805a2d48e7e2ed7d699871183ed706699119281canthony
45070ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony          swap_index=(-1);
45080ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony          flags=ParseGeometry(arg1,&geometry_info);
450990fbd1c3be638e851691dd9789d70b8a0acaf0d9cristy          if ((flags & RhoValue) == 0)
4510b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony            CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
45110ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony          index=(ssize_t) geometry_info.rho;
45120ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony          if ((flags & SigmaValue) != 0)
45130ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony            swap_index=(ssize_t) geometry_info.sigma;
45140ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony        }
45150ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony        p=GetImageFromList(_images,index);
45160ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony        q=GetImageFromList(_images,swap_index);
45178226e729aec80913941e8aa6b197e3efd03dfb43anthony        if ((p == (Image *) NULL) || (q == (Image *) NULL)) {
45188226e729aec80913941e8aa6b197e3efd03dfb43anthony          if (IfNormalOp)
45198226e729aec80913941e8aa6b197e3efd03dfb43anthony            CLIWandExceptArgBreak(OptionError,"InvalidImageIndex",option,arg1)
45208226e729aec80913941e8aa6b197e3efd03dfb43anthony          else
45218226e729aec80913941e8aa6b197e3efd03dfb43anthony            CLIWandExceptionBreak(OptionError,"TwoOrMoreImagesRequired",option);
45228226e729aec80913941e8aa6b197e3efd03dfb43anthony        }
45230ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony        if (p == q)
45248226e729aec80913941e8aa6b197e3efd03dfb43anthony          CLIWandExceptArgBreak(OptionError,"InvalidImageIndex",option,arg1);
45250ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony        swap=CloneImage(p,0,0,MagickTrue,_exception);
45260ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony        ReplaceImageInList(&p,CloneImage(q,0,0,MagickTrue,_exception));
45270ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony        ReplaceImageInList(&q,swap);
45280ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony        _images=GetFirstImageInList(q);
45290ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony        break;
45300ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony      }
4531ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
4532805a2d48e7e2ed7d699871183ed706699119281canthony    }
4533805a2d48e7e2ed7d699871183ed706699119281canthony    default:
4534ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony      CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option);
4535805a2d48e7e2ed7d699871183ed706699119281canthony  }
4536964d28ed4391c639c60c392807c9dfb09f933ba8anthony
4537964d28ed4391c639c60c392807c9dfb09f933ba8anthony  /* clean up percent escape interpreted strings */
4538964d28ed4391c639c60c392807c9dfb09f933ba8anthony  if (arg1 != arg1n )
4539964d28ed4391c639c60c392807c9dfb09f933ba8anthony    arg1=DestroyString((char *)arg1);
4540964d28ed4391c639c60c392807c9dfb09f933ba8anthony  if (arg2 != arg2n )
4541964d28ed4391c639c60c392807c9dfb09f933ba8anthony    arg2=DestroyString((char *)arg2);
4542964d28ed4391c639c60c392807c9dfb09f933ba8anthony
4543964d28ed4391c639c60c392807c9dfb09f933ba8anthony  /* if new image list generated, replace existing image list */
454431f1bf7bb6ee2698a2afab42ee0329b11663636canthony  if (new_images == (Image *) NULL)
45456398ec777e91813b64767e25358b7062a7de56cbcristy    return(status == 0 ? MagickFalse : MagickTrue);
4546964d28ed4391c639c60c392807c9dfb09f933ba8anthony  _images=DestroyImageList(_images);
454792c93bd35e207736d340f1b32000006a5bf6208eanthony  _images=GetFirstImageInList(new_images);
45486398ec777e91813b64767e25358b7062a7de56cbcristy  return(status == 0 ? MagickFalse : MagickTrue);
4549805a2d48e7e2ed7d699871183ed706699119281canthony
455092c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _image_info
455192c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _images
455292c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _exception
455392c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _draw_info
455492c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _quantize_info
4555afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#undef IfNormalOp
4556afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#undef IfPlusOp
4557a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#undef IsNormalOp
455843f425dd7d5b33887726982b28ebfa06f5560636anthony}
455943f425dd7d5b33887726982b28ebfa06f5560636anthony
456043f425dd7d5b33887726982b28ebfa06f5560636anthony/*
456143f425dd7d5b33887726982b28ebfa06f5560636anthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
456243f425dd7d5b33887726982b28ebfa06f5560636anthony%                                                                             %
456343f425dd7d5b33887726982b28ebfa06f5560636anthony%                                                                             %
456443f425dd7d5b33887726982b28ebfa06f5560636anthony%                                                                             %
4565964d28ed4391c639c60c392807c9dfb09f933ba8anthony+   C L I N o I m a g e O p e r a t i o n s                                   %
456643f425dd7d5b33887726982b28ebfa06f5560636anthony%                                                                             %
456743f425dd7d5b33887726982b28ebfa06f5560636anthony%                                                                             %
456843f425dd7d5b33887726982b28ebfa06f5560636anthony%                                                                             %
456943f425dd7d5b33887726982b28ebfa06f5560636anthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
457043f425dd7d5b33887726982b28ebfa06f5560636anthony%
4571464f1c476517436723780b8a8bb371464584453canthony%  CLINoImageOperator() Applies operations that may not actually need images
4572964d28ed4391c639c60c392807c9dfb09f933ba8anthony%  in an image list.
457343f425dd7d5b33887726982b28ebfa06f5560636anthony%
45744837ac2f5e9dbb766129a91aa11cf7c547477119anthony%  The classic operators of this type is "-read", which actually creates
45754837ac2f5e9dbb766129a91aa11cf7c547477119anthony%  images even when no images are present.  Or image stack operators, which
45764837ac2f5e9dbb766129a91aa11cf7c547477119anthony%  can be applied (push or pop) to an empty image list.
4577afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony%
45784837ac2f5e9dbb766129a91aa11cf7c547477119anthony%  Note that these operators may involve other special 'option' prefix
45794837ac2f5e9dbb766129a91aa11cf7c547477119anthony%  characters other  than '-' or '+', namely parenthesis and braces.
458043f425dd7d5b33887726982b28ebfa06f5560636anthony%
4581464f1c476517436723780b8a8bb371464584453canthony%  The format of the CLINoImageOption method is:
458243f425dd7d5b33887726982b28ebfa06f5560636anthony%
4583464f1c476517436723780b8a8bb371464584453canthony%      void CLINoImageOption(MagickCLI *cli_wand,const char *option,
4584464f1c476517436723780b8a8bb371464584453canthony%           const char *arg1, const char *arg2)
458543f425dd7d5b33887726982b28ebfa06f5560636anthony%
458643f425dd7d5b33887726982b28ebfa06f5560636anthony%  A description of each parameter follows:
458743f425dd7d5b33887726982b28ebfa06f5560636anthony%
4588c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony%    o cli_wand: the main CLI Wand to use. (sometimes not required)
458943f425dd7d5b33887726982b28ebfa06f5560636anthony%
459043f425dd7d5b33887726982b28ebfa06f5560636anthony%    o option: The special option (with any switch char) to process
459143f425dd7d5b33887726982b28ebfa06f5560636anthony%
4592464f1c476517436723780b8a8bb371464584453canthony%    o arg1 & arg2: Argument for option, if required
4593464f1c476517436723780b8a8bb371464584453canthony%                   Currently arg2 is not used.
459443f425dd7d5b33887726982b28ebfa06f5560636anthony%
459543f425dd7d5b33887726982b28ebfa06f5560636anthony*/
4596fe83185ff915c87796df33a8d90a1e0937b3d76fcristyWandPrivate void CLINoImageOperator(MagickCLI *cli_wand,
4597a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony  const char *option,const char *arg1n,const char *arg2n)
459843f425dd7d5b33887726982b28ebfa06f5560636anthony{
4599a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony  const char    /* percent escaped versions of the args */
46004837ac2f5e9dbb766129a91aa11cf7c547477119anthony    *arg1,
46014837ac2f5e9dbb766129a91aa11cf7c547477119anthony    *arg2;
46024837ac2f5e9dbb766129a91aa11cf7c547477119anthony
46038226e729aec80913941e8aa6b197e3efd03dfb43anthony#define _image_info     (cli_wand->wand.image_info)
46048226e729aec80913941e8aa6b197e3efd03dfb43anthony#define _images         (cli_wand->wand.images)
46058226e729aec80913941e8aa6b197e3efd03dfb43anthony#define _exception      (cli_wand->wand.exception)
4606a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _process_flags  (cli_wand->process_flags)
4607a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _option_type    ((CommandOptionFlags) cli_wand->command->flags)
46088226e729aec80913941e8aa6b197e3efd03dfb43anthony#define IfNormalOp      (*option=='-')
46098226e729aec80913941e8aa6b197e3efd03dfb43anthony#define IfPlusOp        (*option!='-')
461043f425dd7d5b33887726982b28ebfa06f5560636anthony
461143f425dd7d5b33887726982b28ebfa06f5560636anthony  assert(cli_wand != (MagickCLI *) NULL);
4612e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(cli_wand->signature == MagickWandSignature);
4613e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(cli_wand->wand.signature == MagickWandSignature);
461443f425dd7d5b33887726982b28ebfa06f5560636anthony
4615d0792939dc18eff319129903f2627bd882a574aadirk  if (cli_wand->wand.debug != MagickFalse)
4616a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony    (void) CLILogEvent(cli_wand,CommandEvent,GetMagickModule(),
4617e1f6cfe697c9cc3cee3e2d982bcb1ee63b662e1fcristy      "- NoImage Operator: %s \"%s\" \"%s\"", option,
4618e1f6cfe697c9cc3cee3e2d982bcb1ee63b662e1fcristy      arg1n != (char *) NULL ? arg1n : "",
4619e1f6cfe697c9cc3cee3e2d982bcb1ee63b662e1fcristy      arg2n != (char *) NULL ? arg2n : "");
46200ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony
46214837ac2f5e9dbb766129a91aa11cf7c547477119anthony  arg1 = arg1n;
46224837ac2f5e9dbb766129a91aa11cf7c547477119anthony  arg2 = arg2n;
4623a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony
4624a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony  /* Interpret Percent Escapes in Arguments - using first image */
46254837ac2f5e9dbb766129a91aa11cf7c547477119anthony  if ( (((_process_flags & ProcessInterpretProperities) != 0 )
46264837ac2f5e9dbb766129a91aa11cf7c547477119anthony        || ((_option_type & AlwaysInterpretArgsFlag) != 0)
46274837ac2f5e9dbb766129a91aa11cf7c547477119anthony       )  && ((_option_type & NeverInterpretArgsFlag) == 0) ) {
46284837ac2f5e9dbb766129a91aa11cf7c547477119anthony    /* Interpret Percent escapes in argument 1 */
46294837ac2f5e9dbb766129a91aa11cf7c547477119anthony    if (arg1n != (char *) NULL) {
46304837ac2f5e9dbb766129a91aa11cf7c547477119anthony      arg1=InterpretImageProperties(_image_info,_images,arg1n,_exception);
46314837ac2f5e9dbb766129a91aa11cf7c547477119anthony      if (arg1 == (char *) NULL) {
46324837ac2f5e9dbb766129a91aa11cf7c547477119anthony        CLIWandException(OptionWarning,"InterpretPropertyFailure",option);
46334837ac2f5e9dbb766129a91aa11cf7c547477119anthony        arg1=arg1n;  /* use the given argument as is */
46344837ac2f5e9dbb766129a91aa11cf7c547477119anthony      }
463552bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony    }
46364837ac2f5e9dbb766129a91aa11cf7c547477119anthony    if (arg2n != (char *) NULL) {
46374837ac2f5e9dbb766129a91aa11cf7c547477119anthony      arg2=InterpretImageProperties(_image_info,_images,arg2n,_exception);
46384837ac2f5e9dbb766129a91aa11cf7c547477119anthony      if (arg2 == (char *) NULL) {
46394837ac2f5e9dbb766129a91aa11cf7c547477119anthony        CLIWandException(OptionWarning,"InterpretPropertyFailure",option);
46404837ac2f5e9dbb766129a91aa11cf7c547477119anthony        arg2=arg2n;  /* use the given argument as is */
46414837ac2f5e9dbb766129a91aa11cf7c547477119anthony      }
46428226e729aec80913941e8aa6b197e3efd03dfb43anthony    }
46438226e729aec80913941e8aa6b197e3efd03dfb43anthony  }
46444837ac2f5e9dbb766129a91aa11cf7c547477119anthony#undef _process_flags
46454837ac2f5e9dbb766129a91aa11cf7c547477119anthony#undef _option_type
464643f425dd7d5b33887726982b28ebfa06f5560636anthony
46474837ac2f5e9dbb766129a91aa11cf7c547477119anthony  do {  /* break to exit code */
46484837ac2f5e9dbb766129a91aa11cf7c547477119anthony    /*
46494837ac2f5e9dbb766129a91aa11cf7c547477119anthony      No-op options  (ignore these)
46504837ac2f5e9dbb766129a91aa11cf7c547477119anthony    */
4651c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony    if (LocaleCompare("noop",option+1) == 0)   /* zero argument */
46524837ac2f5e9dbb766129a91aa11cf7c547477119anthony      break;
46534837ac2f5e9dbb766129a91aa11cf7c547477119anthony    if (LocaleCompare("sans",option+1) == 0)   /* one argument */
46544837ac2f5e9dbb766129a91aa11cf7c547477119anthony      break;
4655c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony    if (LocaleCompare("sans0",option+1) == 0)  /* zero argument */
4656c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony      break;
4657c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony    if (LocaleCompare("sans1",option+1) == 0)  /* one argument */
46584837ac2f5e9dbb766129a91aa11cf7c547477119anthony      break;
46594837ac2f5e9dbb766129a91aa11cf7c547477119anthony    if (LocaleCompare("sans2",option+1) == 0)  /* two arguments */
46604837ac2f5e9dbb766129a91aa11cf7c547477119anthony      break;
46614837ac2f5e9dbb766129a91aa11cf7c547477119anthony    /*
46624837ac2f5e9dbb766129a91aa11cf7c547477119anthony      Image Reading
46634837ac2f5e9dbb766129a91aa11cf7c547477119anthony    */
46644837ac2f5e9dbb766129a91aa11cf7c547477119anthony    if ( ( LocaleCompare("read",option+1) == 0 ) ||
46654837ac2f5e9dbb766129a91aa11cf7c547477119anthony      ( LocaleCompare("--",option) == 0 ) ) {
46664837ac2f5e9dbb766129a91aa11cf7c547477119anthony      /* Do Glob filename Expansion for 'arg1' then read all images.
46674837ac2f5e9dbb766129a91aa11cf7c547477119anthony      *
46684837ac2f5e9dbb766129a91aa11cf7c547477119anthony      * Expansion handles '@', '~', '*', and '?' meta-characters while ignoring
46694837ac2f5e9dbb766129a91aa11cf7c547477119anthony      * (but attaching to the filenames in the generated argument list) any
46704837ac2f5e9dbb766129a91aa11cf7c547477119anthony      * [...] read modifiers that may be present.
46714837ac2f5e9dbb766129a91aa11cf7c547477119anthony      *
46724837ac2f5e9dbb766129a91aa11cf7c547477119anthony      * For example: It will expand '*.gif[20x20]' into a list such as
46734837ac2f5e9dbb766129a91aa11cf7c547477119anthony      * 'abc.gif[20x20]',  'foobar.gif[20x20]',  'xyzzy.gif[20x20]'
46744837ac2f5e9dbb766129a91aa11cf7c547477119anthony      *
46754837ac2f5e9dbb766129a91aa11cf7c547477119anthony      * NOTE: In IMv6 this was done globally across all images. This
46764837ac2f5e9dbb766129a91aa11cf7c547477119anthony      * meant you could include IM options in '@filename' lists, but you
46774837ac2f5e9dbb766129a91aa11cf7c547477119anthony      * could not include comments.   Doing it only for image read makes
46784837ac2f5e9dbb766129a91aa11cf7c547477119anthony      * it far more secure.
46794837ac2f5e9dbb766129a91aa11cf7c547477119anthony      *
46804837ac2f5e9dbb766129a91aa11cf7c547477119anthony      * Note: arguments do not have percent escapes expanded for security
46814837ac2f5e9dbb766129a91aa11cf7c547477119anthony      * reasons.
46824837ac2f5e9dbb766129a91aa11cf7c547477119anthony      */
46834837ac2f5e9dbb766129a91aa11cf7c547477119anthony      int      argc;
46844837ac2f5e9dbb766129a91aa11cf7c547477119anthony      char     **argv;
46854837ac2f5e9dbb766129a91aa11cf7c547477119anthony      ssize_t  i;
468643f425dd7d5b33887726982b28ebfa06f5560636anthony
46874837ac2f5e9dbb766129a91aa11cf7c547477119anthony      argc = 1;
46884837ac2f5e9dbb766129a91aa11cf7c547477119anthony      argv = (char **) &arg1;
46894837ac2f5e9dbb766129a91aa11cf7c547477119anthony
46904837ac2f5e9dbb766129a91aa11cf7c547477119anthony      /* Expand 'glob' expressions in the given filename.
46914837ac2f5e9dbb766129a91aa11cf7c547477119anthony        Expansion handles any 'coder:' prefix, or read modifiers attached
46924837ac2f5e9dbb766129a91aa11cf7c547477119anthony        to the filename, including them in the resulting expanded list.
46934837ac2f5e9dbb766129a91aa11cf7c547477119anthony      */
46945d0a441fe7d90e3449f2103ed88c32cec28595e6dirk      if (ExpandFilenames(&argc,&argv) == MagickFalse)
46954837ac2f5e9dbb766129a91aa11cf7c547477119anthony        CLIWandExceptArgBreak(ResourceLimitError,"MemoryAllocationFailed",
46964837ac2f5e9dbb766129a91aa11cf7c547477119anthony            option,GetExceptionMessage(errno));
46974837ac2f5e9dbb766129a91aa11cf7c547477119anthony
46984837ac2f5e9dbb766129a91aa11cf7c547477119anthony      /* loop over expanded filename list, and read then all in */
469952b632a875d61ac705bca7ad2b0919f90112eef9cristy      for (i=0; i < (ssize_t) argc; i++) {
47004837ac2f5e9dbb766129a91aa11cf7c547477119anthony        Image *
47014837ac2f5e9dbb766129a91aa11cf7c547477119anthony          new_images;
4702d0792939dc18eff319129903f2627bd882a574aadirk        if (_image_info->ping != MagickFalse)
47034837ac2f5e9dbb766129a91aa11cf7c547477119anthony          new_images=PingImages(_image_info,argv[i],_exception);
47048226e729aec80913941e8aa6b197e3efd03dfb43anthony        else
47054837ac2f5e9dbb766129a91aa11cf7c547477119anthony          new_images=ReadImages(_image_info,argv[i],_exception);
47064837ac2f5e9dbb766129a91aa11cf7c547477119anthony        AppendImageToList(&_images, new_images);
47078226e729aec80913941e8aa6b197e3efd03dfb43anthony      }
47084837ac2f5e9dbb766129a91aa11cf7c547477119anthony      argv=DestroyStringList(argv);  /* Destroy the Expanded Filename list */
47094837ac2f5e9dbb766129a91aa11cf7c547477119anthony      break;
47104837ac2f5e9dbb766129a91aa11cf7c547477119anthony    }
47114837ac2f5e9dbb766129a91aa11cf7c547477119anthony    /*
47124837ac2f5e9dbb766129a91aa11cf7c547477119anthony      Image Writing
47134837ac2f5e9dbb766129a91aa11cf7c547477119anthony      Note: Writing a empty image list is valid in specific cases
47144837ac2f5e9dbb766129a91aa11cf7c547477119anthony    */
47154837ac2f5e9dbb766129a91aa11cf7c547477119anthony    if (LocaleCompare("write",option+1) == 0) {
47164837ac2f5e9dbb766129a91aa11cf7c547477119anthony      /* Note: arguments do not have percent escapes expanded */
47174837ac2f5e9dbb766129a91aa11cf7c547477119anthony      char
4718151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy        key[MagickPathExtent];
471943f425dd7d5b33887726982b28ebfa06f5560636anthony
47204837ac2f5e9dbb766129a91aa11cf7c547477119anthony      Image
47214837ac2f5e9dbb766129a91aa11cf7c547477119anthony        *write_images;
472243f425dd7d5b33887726982b28ebfa06f5560636anthony
47234837ac2f5e9dbb766129a91aa11cf7c547477119anthony      ImageInfo
47244837ac2f5e9dbb766129a91aa11cf7c547477119anthony        *write_info;
472543f425dd7d5b33887726982b28ebfa06f5560636anthony
47264837ac2f5e9dbb766129a91aa11cf7c547477119anthony      /* Need images, unless a "null:" output coder is used */
4727a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony      if ( _images == (Image *) NULL ) {
47284837ac2f5e9dbb766129a91aa11cf7c547477119anthony        if ( LocaleCompare(arg1,"null:") == 0 )
47294837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
47304837ac2f5e9dbb766129a91aa11cf7c547477119anthony        CLIWandExceptArgBreak(OptionError,"NoImagesForWrite",option,arg1);
47314837ac2f5e9dbb766129a91aa11cf7c547477119anthony      }
473243f425dd7d5b33887726982b28ebfa06f5560636anthony
4733151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy      (void) FormatLocaleString(key,MagickPathExtent,"cache:%s",arg1);
47344837ac2f5e9dbb766129a91aa11cf7c547477119anthony      (void) DeleteImageRegistry(key);
47354837ac2f5e9dbb766129a91aa11cf7c547477119anthony      write_images=_images;
47364837ac2f5e9dbb766129a91aa11cf7c547477119anthony      if (IfPlusOp)
47374837ac2f5e9dbb766129a91aa11cf7c547477119anthony        write_images=CloneImageList(_images,_exception);
47384837ac2f5e9dbb766129a91aa11cf7c547477119anthony      write_info=CloneImageInfo(_image_info);
47394837ac2f5e9dbb766129a91aa11cf7c547477119anthony      (void) WriteImages(write_info,write_images,arg1,_exception);
47404837ac2f5e9dbb766129a91aa11cf7c547477119anthony      write_info=DestroyImageInfo(write_info);
47414837ac2f5e9dbb766129a91aa11cf7c547477119anthony      if (IfPlusOp)
47424837ac2f5e9dbb766129a91aa11cf7c547477119anthony        write_images=DestroyImageList(write_images);
47434837ac2f5e9dbb766129a91aa11cf7c547477119anthony      break;
474443f425dd7d5b33887726982b28ebfa06f5560636anthony    }
47454837ac2f5e9dbb766129a91aa11cf7c547477119anthony    /*
47464837ac2f5e9dbb766129a91aa11cf7c547477119anthony      Parenthesis and Brace operations
47474837ac2f5e9dbb766129a91aa11cf7c547477119anthony    */
47484837ac2f5e9dbb766129a91aa11cf7c547477119anthony    if (LocaleCompare("(",option) == 0) {
47494837ac2f5e9dbb766129a91aa11cf7c547477119anthony      /* stack 'push' images */
47504837ac2f5e9dbb766129a91aa11cf7c547477119anthony      Stack
47514837ac2f5e9dbb766129a91aa11cf7c547477119anthony        *node;
47524837ac2f5e9dbb766129a91aa11cf7c547477119anthony
47534837ac2f5e9dbb766129a91aa11cf7c547477119anthony      size_t
47544837ac2f5e9dbb766129a91aa11cf7c547477119anthony        size;
47554837ac2f5e9dbb766129a91aa11cf7c547477119anthony
47564837ac2f5e9dbb766129a91aa11cf7c547477119anthony      size=0;
47574837ac2f5e9dbb766129a91aa11cf7c547477119anthony      node=cli_wand->image_list_stack;
4758f432c635c526259b858c9aad3d409c5c44545686cristy      for ( ; node != (Stack *) NULL; node=node->next)
47594837ac2f5e9dbb766129a91aa11cf7c547477119anthony        size++;
47604837ac2f5e9dbb766129a91aa11cf7c547477119anthony      if ( size >= MAX_STACK_DEPTH )
47614837ac2f5e9dbb766129a91aa11cf7c547477119anthony        CLIWandExceptionBreak(OptionError,"ParenthesisNestedTooDeeply",option);
47624837ac2f5e9dbb766129a91aa11cf7c547477119anthony      node=(Stack *) AcquireMagickMemory(sizeof(*node));
47634837ac2f5e9dbb766129a91aa11cf7c547477119anthony      if (node == (Stack *) NULL)
47644837ac2f5e9dbb766129a91aa11cf7c547477119anthony        CLIWandExceptionBreak(ResourceLimitFatalError,
47654837ac2f5e9dbb766129a91aa11cf7c547477119anthony            "MemoryAllocationFailed",option);
47664837ac2f5e9dbb766129a91aa11cf7c547477119anthony      node->data = (void *)cli_wand->wand.images;
47674837ac2f5e9dbb766129a91aa11cf7c547477119anthony      node->next = cli_wand->image_list_stack;
47684837ac2f5e9dbb766129a91aa11cf7c547477119anthony      cli_wand->image_list_stack = node;
4769a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony      cli_wand->wand.images = NewImageList();
47704837ac2f5e9dbb766129a91aa11cf7c547477119anthony
47714837ac2f5e9dbb766129a91aa11cf7c547477119anthony      /* handle respect-parenthesis */
4772d0792939dc18eff319129903f2627bd882a574aadirk      if (IsStringTrue(GetImageOption(cli_wand->wand.image_info,
4773d0792939dc18eff319129903f2627bd882a574aadirk                    "respect-parenthesis")) != MagickFalse)
47744837ac2f5e9dbb766129a91aa11cf7c547477119anthony        option="{"; /* fall-thru so as to push image settings too */
47754837ac2f5e9dbb766129a91aa11cf7c547477119anthony      else
47764837ac2f5e9dbb766129a91aa11cf7c547477119anthony        break;
4777a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony      /* fall thru to operation */
477843f425dd7d5b33887726982b28ebfa06f5560636anthony    }
47794837ac2f5e9dbb766129a91aa11cf7c547477119anthony    if (LocaleCompare("{",option) == 0) {
47804837ac2f5e9dbb766129a91aa11cf7c547477119anthony      /* stack 'push' of image_info settings */
47814837ac2f5e9dbb766129a91aa11cf7c547477119anthony      Stack
47824837ac2f5e9dbb766129a91aa11cf7c547477119anthony        *node;
47834837ac2f5e9dbb766129a91aa11cf7c547477119anthony
47844837ac2f5e9dbb766129a91aa11cf7c547477119anthony      size_t
47854837ac2f5e9dbb766129a91aa11cf7c547477119anthony        size;
47864837ac2f5e9dbb766129a91aa11cf7c547477119anthony
47874837ac2f5e9dbb766129a91aa11cf7c547477119anthony      size=0;
47884837ac2f5e9dbb766129a91aa11cf7c547477119anthony      node=cli_wand->image_info_stack;
4789f432c635c526259b858c9aad3d409c5c44545686cristy      for ( ; node != (Stack *) NULL; node=node->next)
47904837ac2f5e9dbb766129a91aa11cf7c547477119anthony        size++;
47914837ac2f5e9dbb766129a91aa11cf7c547477119anthony      if ( size >= MAX_STACK_DEPTH )
47924837ac2f5e9dbb766129a91aa11cf7c547477119anthony        CLIWandExceptionBreak(OptionError,"CurlyBracesNestedTooDeeply",option);
47934837ac2f5e9dbb766129a91aa11cf7c547477119anthony      node=(Stack *) AcquireMagickMemory(sizeof(*node));
47944837ac2f5e9dbb766129a91aa11cf7c547477119anthony      if (node == (Stack *) NULL)
47954837ac2f5e9dbb766129a91aa11cf7c547477119anthony        CLIWandExceptionBreak(ResourceLimitFatalError,
47964837ac2f5e9dbb766129a91aa11cf7c547477119anthony            "MemoryAllocationFailed",option);
47974837ac2f5e9dbb766129a91aa11cf7c547477119anthony
47984837ac2f5e9dbb766129a91aa11cf7c547477119anthony      node->data = (void *)cli_wand->wand.image_info;
4799a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony      node->next = cli_wand->image_info_stack;
4800a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony
4801a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony      cli_wand->image_info_stack = node;
48024837ac2f5e9dbb766129a91aa11cf7c547477119anthony      cli_wand->wand.image_info = CloneImageInfo(cli_wand->wand.image_info);
4803f432c635c526259b858c9aad3d409c5c44545686cristy      if (cli_wand->wand.image_info == (ImageInfo *) NULL) {
48044837ac2f5e9dbb766129a91aa11cf7c547477119anthony        CLIWandException(ResourceLimitFatalError,"MemoryAllocationFailed",
48054837ac2f5e9dbb766129a91aa11cf7c547477119anthony            option);
48064837ac2f5e9dbb766129a91aa11cf7c547477119anthony        cli_wand->wand.image_info = (ImageInfo *)node->data;
48074837ac2f5e9dbb766129a91aa11cf7c547477119anthony        node = (Stack *)RelinquishMagickMemory(node);
48088226e729aec80913941e8aa6b197e3efd03dfb43anthony        break;
4809fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony      }
48104837ac2f5e9dbb766129a91aa11cf7c547477119anthony
48114837ac2f5e9dbb766129a91aa11cf7c547477119anthony      break;
48124837ac2f5e9dbb766129a91aa11cf7c547477119anthony    }
48134837ac2f5e9dbb766129a91aa11cf7c547477119anthony    if (LocaleCompare(")",option) == 0) {
48144837ac2f5e9dbb766129a91aa11cf7c547477119anthony      /* pop images from stack */
48154837ac2f5e9dbb766129a91aa11cf7c547477119anthony      Stack
48164837ac2f5e9dbb766129a91aa11cf7c547477119anthony        *node;
48174837ac2f5e9dbb766129a91aa11cf7c547477119anthony
48184837ac2f5e9dbb766129a91aa11cf7c547477119anthony      node = (Stack *)cli_wand->image_list_stack;
4819f432c635c526259b858c9aad3d409c5c44545686cristy      if ( node == (Stack *) NULL)
48204837ac2f5e9dbb766129a91aa11cf7c547477119anthony        CLIWandExceptionBreak(OptionError,"UnbalancedParenthesis",option);
48214837ac2f5e9dbb766129a91aa11cf7c547477119anthony      cli_wand->image_list_stack = node->next;
48224837ac2f5e9dbb766129a91aa11cf7c547477119anthony
48234837ac2f5e9dbb766129a91aa11cf7c547477119anthony      AppendImageToList((Image **)&node->data,cli_wand->wand.images);
48244837ac2f5e9dbb766129a91aa11cf7c547477119anthony      cli_wand->wand.images= (Image *)node->data;
48254837ac2f5e9dbb766129a91aa11cf7c547477119anthony      node = (Stack *)RelinquishMagickMemory(node);
48264837ac2f5e9dbb766129a91aa11cf7c547477119anthony
48274837ac2f5e9dbb766129a91aa11cf7c547477119anthony      /* handle respect-parenthesis - of the previous 'pushed' settings */
48284837ac2f5e9dbb766129a91aa11cf7c547477119anthony      node = cli_wand->image_info_stack;
4829f432c635c526259b858c9aad3d409c5c44545686cristy      if ( node != (Stack *) NULL)
48304837ac2f5e9dbb766129a91aa11cf7c547477119anthony        {
4831d0792939dc18eff319129903f2627bd882a574aadirk          if (IsStringTrue(GetImageOption(
4832d0792939dc18eff319129903f2627bd882a574aadirk                cli_wand->wand.image_info,"respect-parenthesis")) != MagickFalse)
48334837ac2f5e9dbb766129a91aa11cf7c547477119anthony            option="}"; /* fall-thru so as to pop image settings too */
48344837ac2f5e9dbb766129a91aa11cf7c547477119anthony          else
48354837ac2f5e9dbb766129a91aa11cf7c547477119anthony            break;
48364837ac2f5e9dbb766129a91aa11cf7c547477119anthony        }
48374837ac2f5e9dbb766129a91aa11cf7c547477119anthony      else
48388226e729aec80913941e8aa6b197e3efd03dfb43anthony        break;
48394837ac2f5e9dbb766129a91aa11cf7c547477119anthony      /* fall thru to next if */
48404837ac2f5e9dbb766129a91aa11cf7c547477119anthony    }
48414837ac2f5e9dbb766129a91aa11cf7c547477119anthony    if (LocaleCompare("}",option) == 0) {
48424837ac2f5e9dbb766129a91aa11cf7c547477119anthony      /* pop image_info settings from stack */
48434837ac2f5e9dbb766129a91aa11cf7c547477119anthony      Stack
48444837ac2f5e9dbb766129a91aa11cf7c547477119anthony        *node;
48454837ac2f5e9dbb766129a91aa11cf7c547477119anthony
48464837ac2f5e9dbb766129a91aa11cf7c547477119anthony      node = (Stack *)cli_wand->image_info_stack;
4847f432c635c526259b858c9aad3d409c5c44545686cristy      if ( node == (Stack *) NULL)
48484837ac2f5e9dbb766129a91aa11cf7c547477119anthony        CLIWandExceptionBreak(OptionError,"UnbalancedCurlyBraces",option);
48494837ac2f5e9dbb766129a91aa11cf7c547477119anthony      cli_wand->image_info_stack = node->next;
48504837ac2f5e9dbb766129a91aa11cf7c547477119anthony
48514837ac2f5e9dbb766129a91aa11cf7c547477119anthony      (void) DestroyImageInfo(cli_wand->wand.image_info);
48524837ac2f5e9dbb766129a91aa11cf7c547477119anthony      cli_wand->wand.image_info = (ImageInfo *)node->data;
48534837ac2f5e9dbb766129a91aa11cf7c547477119anthony      node = (Stack *)RelinquishMagickMemory(node);
48544837ac2f5e9dbb766129a91aa11cf7c547477119anthony
48554837ac2f5e9dbb766129a91aa11cf7c547477119anthony      GetDrawInfo(cli_wand->wand.image_info, cli_wand->draw_info);
48564837ac2f5e9dbb766129a91aa11cf7c547477119anthony      cli_wand->quantize_info=DestroyQuantizeInfo(cli_wand->quantize_info);
48574837ac2f5e9dbb766129a91aa11cf7c547477119anthony      cli_wand->quantize_info=AcquireQuantizeInfo(cli_wand->wand.image_info);
48584837ac2f5e9dbb766129a91aa11cf7c547477119anthony
48594837ac2f5e9dbb766129a91aa11cf7c547477119anthony      break;
48604837ac2f5e9dbb766129a91aa11cf7c547477119anthony    }
4861a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony      if (LocaleCompare("print",option+1) == 0)
4862a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony        {
4863a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          (void) FormatLocaleFile(stdout,"%s",arg1);
4864a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          break;
4865a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony        }
4866c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony    if (LocaleCompare("set",option+1) == 0)
4867c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony      {
4868a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony        /* Settings are applied to each image in memory in turn (if any).
4869a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony           While a option: only need to be applied once globally.
4870a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony
4871a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony           NOTE: rguments have not been automatically percent expaneded
4872c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony        */
4873a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony
4874a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony        /* escape the 'key' once only, using first image. */
4875a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony        arg1=InterpretImageProperties(_image_info,_images,arg1n,_exception);
4876a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony        if (arg1 == (char *) NULL)
4877a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          CLIWandExceptionBreak(OptionWarning,"InterpretPropertyFailure",
4878a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                option);
4879c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony
4880c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony        if (LocaleNCompare(arg1,"registry:",9) == 0)
4881c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony          {
4882c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony            if (IfPlusOp)
4883c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony              {
4884c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony                (void) DeleteImageRegistry(arg1+9);
4885a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                arg1=DestroyString((char *)arg1);
4886c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony                break;
4887c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony              }
4888a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            arg2=InterpretImageProperties(_image_info,_images,arg2n,_exception);
4889a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            if (arg2 == (char *) NULL) {
4890a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony              arg1=DestroyString((char *)arg1);
4891c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony              CLIWandExceptionBreak(OptionWarning,"InterpretPropertyFailure",
4892c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony                    option);
4893a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            }
4894a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            (void) SetImageRegistry(StringRegistryType,arg1+9,arg2,_exception);
4895a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            arg1=DestroyString((char *)arg1);
4896a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            arg2=DestroyString((char *)arg2);
4897c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony            break;
4898c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony          }
4899c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony        if (LocaleNCompare(arg1,"option:",7) == 0)
4900c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony          {
4901c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony            /* delete equivelent artifact from all images (if any) */
4902f432c635c526259b858c9aad3d409c5c44545686cristy            if (_images != (Image *) NULL)
4903a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony              {
4904a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                MagickResetIterator(&cli_wand->wand);
4905d0792939dc18eff319129903f2627bd882a574aadirk                while (MagickNextImage(&cli_wand->wand) != MagickFalse)
4906a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                  (void) DeleteImageArtifact(_images,arg1+7);
4907a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                MagickResetIterator(&cli_wand->wand);
4908a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony              }
4909c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony            /* now set/delete the global option as needed */
4910a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            /* FUTURE: make escapes in a global 'option:' delayed */
4911f432c635c526259b858c9aad3d409c5c44545686cristy            arg2=(char *) NULL;
4912a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            if (IfNormalOp)
4913a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony              {
4914a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                arg2=InterpretImageProperties(_image_info,_images,arg2n,_exception);
4915a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                if (arg2 == (char *) NULL)
4916a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                  CLIWandExceptionBreak(OptionWarning,
4917a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                       "InterpretPropertyFailure",option);
4918a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony              }
4919a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            (void) SetImageOption(_image_info,arg1+7,arg2);
4920a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            arg1=DestroyString((char *)arg1);
4921a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            arg2=DestroyString((char *)arg2);
4922c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony            break;
4923c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony          }
4924a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony        /* Set Artifacts/Properties/Attributes all images (required) */
4925a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony        if ( _images == (Image *) NULL )
4926a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony          CLIWandExceptArgBreak(OptionWarning,"NoImageForProperty",option,arg1);
4927a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony
4928c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony        MagickResetIterator(&cli_wand->wand);
4929d0792939dc18eff319129903f2627bd882a574aadirk        while (MagickNextImage(&cli_wand->wand) != MagickFalse)
4930c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony          {
4931f432c635c526259b858c9aad3d409c5c44545686cristy            arg2=(char *) NULL;
4932a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            if (IfNormalOp)
4933a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony              {
4934a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                arg2=InterpretImageProperties(_image_info,_images,arg2n,_exception);
4935a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                if (arg2 == (char *) NULL)
4936a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                  CLIWandExceptionBreak(OptionWarning,
4937a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony                       "InterpretPropertyFailure",option);
4938a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony              }
4939a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            if (LocaleNCompare(arg1,"artifact:",9) == 0)
4940a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony              (void) SetImageArtifact(_images,arg1+9,arg2);
4941a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            else if (LocaleNCompare(arg1,"property:",9) == 0)
4942a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony              (void) SetImageProperty(_images,arg1+9,arg2,_exception);
4943a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            else
4944a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony              (void) SetImageProperty(_images,arg1,arg2,_exception);
4945a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony            arg2=DestroyString((char *)arg2);
4946c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony          }
4947c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony        MagickResetIterator(&cli_wand->wand);
4948a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony        arg1=DestroyString((char *)arg1);
4949c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony        break;
4950c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony     }
49514837ac2f5e9dbb766129a91aa11cf7c547477119anthony    if (LocaleCompare("clone",option+1) == 0) {
49524837ac2f5e9dbb766129a91aa11cf7c547477119anthony        Image
49534837ac2f5e9dbb766129a91aa11cf7c547477119anthony          *new_images;
49544837ac2f5e9dbb766129a91aa11cf7c547477119anthony
49554837ac2f5e9dbb766129a91aa11cf7c547477119anthony        if (*option == '+')
49563677cc7465ef786d7bf9412177aea8c17149274bcristy          arg1=AcquireString("-1");
49575d0a441fe7d90e3449f2103ed88c32cec28595e6dirk        if (IsSceneGeometry(arg1,MagickFalse) == MagickFalse)
49584837ac2f5e9dbb766129a91aa11cf7c547477119anthony          CLIWandExceptionBreak(OptionError,"InvalidArgument",option);
4959f432c635c526259b858c9aad3d409c5c44545686cristy        if ( cli_wand->image_list_stack == (Stack *) NULL)
49604837ac2f5e9dbb766129a91aa11cf7c547477119anthony          CLIWandExceptionBreak(OptionError,"UnableToCloneImage",option);
49614837ac2f5e9dbb766129a91aa11cf7c547477119anthony        new_images = (Image *)cli_wand->image_list_stack->data;
49624837ac2f5e9dbb766129a91aa11cf7c547477119anthony        if (new_images == (Image *) NULL)
49634837ac2f5e9dbb766129a91aa11cf7c547477119anthony          CLIWandExceptionBreak(OptionError,"UnableToCloneImage",option);
49644837ac2f5e9dbb766129a91aa11cf7c547477119anthony        new_images=CloneImages(new_images,arg1,_exception);
49654837ac2f5e9dbb766129a91aa11cf7c547477119anthony        if (new_images == (Image *) NULL)
49664837ac2f5e9dbb766129a91aa11cf7c547477119anthony          CLIWandExceptionBreak(OptionError,"NoSuchImage",option);
49674837ac2f5e9dbb766129a91aa11cf7c547477119anthony        AppendImageToList(&_images,new_images);
49688226e729aec80913941e8aa6b197e3efd03dfb43anthony        break;
49698226e729aec80913941e8aa6b197e3efd03dfb43anthony      }
49704837ac2f5e9dbb766129a91aa11cf7c547477119anthony    /*
4971422d550dfecdb591d85b6fb7dbf968116656cc4ccristy       Informational Operations.
49724837ac2f5e9dbb766129a91aa11cf7c547477119anthony
4973c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony       Note that these do not require either a cli-wand or images!
4974c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony       Though currently a cli-wand much be provided regardless.
49754837ac2f5e9dbb766129a91aa11cf7c547477119anthony    */
4976422d550dfecdb591d85b6fb7dbf968116656cc4ccristy    if (LocaleCompare("version",option+1) == 0)
4977422d550dfecdb591d85b6fb7dbf968116656cc4ccristy      {
49784f7a61361f38ef4d3eaae0c74b9964a57aee813acristy        ListMagickVersion(stdout);
4979422d550dfecdb591d85b6fb7dbf968116656cc4ccristy        break;
4980422d550dfecdb591d85b6fb7dbf968116656cc4ccristy      }
49814837ac2f5e9dbb766129a91aa11cf7c547477119anthony    if (LocaleCompare("list",option+1) == 0) {
49824837ac2f5e9dbb766129a91aa11cf7c547477119anthony      /*
4983c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony         FUTURE: This 'switch' should really be part of MagickCore
49844837ac2f5e9dbb766129a91aa11cf7c547477119anthony      */
49854837ac2f5e9dbb766129a91aa11cf7c547477119anthony      ssize_t
49864837ac2f5e9dbb766129a91aa11cf7c547477119anthony        list;
49874837ac2f5e9dbb766129a91aa11cf7c547477119anthony
49884837ac2f5e9dbb766129a91aa11cf7c547477119anthony      list=ParseCommandOption(MagickListOptions,MagickFalse,arg1);
49894837ac2f5e9dbb766129a91aa11cf7c547477119anthony      if ( list < 0 ) {
49904837ac2f5e9dbb766129a91aa11cf7c547477119anthony        CLIWandExceptionArg(OptionError,"UnrecognizedListType",option,arg1);
49918226e729aec80913941e8aa6b197e3efd03dfb43anthony        break;
49928226e729aec80913941e8aa6b197e3efd03dfb43anthony      }
49934837ac2f5e9dbb766129a91aa11cf7c547477119anthony      switch (list)
49948226e729aec80913941e8aa6b197e3efd03dfb43anthony      {
49954837ac2f5e9dbb766129a91aa11cf7c547477119anthony        case MagickCoderOptions:
49964837ac2f5e9dbb766129a91aa11cf7c547477119anthony        {
49974837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListCoderInfo((FILE *) NULL,_exception);
49984837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
49994837ac2f5e9dbb766129a91aa11cf7c547477119anthony        }
50004837ac2f5e9dbb766129a91aa11cf7c547477119anthony        case MagickColorOptions:
50014837ac2f5e9dbb766129a91aa11cf7c547477119anthony        {
50024837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListColorInfo((FILE *) NULL,_exception);
50034837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
50044837ac2f5e9dbb766129a91aa11cf7c547477119anthony        }
50054837ac2f5e9dbb766129a91aa11cf7c547477119anthony        case MagickConfigureOptions:
50064837ac2f5e9dbb766129a91aa11cf7c547477119anthony        {
50074837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListConfigureInfo((FILE *) NULL,_exception);
50084837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
50094837ac2f5e9dbb766129a91aa11cf7c547477119anthony        }
50104837ac2f5e9dbb766129a91aa11cf7c547477119anthony        case MagickDelegateOptions:
50114837ac2f5e9dbb766129a91aa11cf7c547477119anthony        {
50124837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListDelegateInfo((FILE *) NULL,_exception);
50134837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
50144837ac2f5e9dbb766129a91aa11cf7c547477119anthony        }
50154837ac2f5e9dbb766129a91aa11cf7c547477119anthony        case MagickFontOptions:
50164837ac2f5e9dbb766129a91aa11cf7c547477119anthony        {
50174837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListTypeInfo((FILE *) NULL,_exception);
50184837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
50194837ac2f5e9dbb766129a91aa11cf7c547477119anthony        }
50204837ac2f5e9dbb766129a91aa11cf7c547477119anthony        case MagickFormatOptions:
50214837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListMagickInfo((FILE *) NULL,_exception);
50224837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
50234837ac2f5e9dbb766129a91aa11cf7c547477119anthony        case MagickLocaleOptions:
50244837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListLocaleInfo((FILE *) NULL,_exception);
50254837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
50264837ac2f5e9dbb766129a91aa11cf7c547477119anthony        case MagickLogOptions:
50274837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListLogInfo((FILE *) NULL,_exception);
50284837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
50294837ac2f5e9dbb766129a91aa11cf7c547477119anthony        case MagickMagicOptions:
50304837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListMagicInfo((FILE *) NULL,_exception);
50314837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
50324837ac2f5e9dbb766129a91aa11cf7c547477119anthony        case MagickMimeOptions:
50334837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListMimeInfo((FILE *) NULL,_exception);
50344837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
50354837ac2f5e9dbb766129a91aa11cf7c547477119anthony        case MagickModuleOptions:
50364837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListModuleInfo((FILE *) NULL,_exception);
50374837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
50384837ac2f5e9dbb766129a91aa11cf7c547477119anthony        case MagickPolicyOptions:
50394837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListPolicyInfo((FILE *) NULL,_exception);
50404837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
50414837ac2f5e9dbb766129a91aa11cf7c547477119anthony        case MagickResourceOptions:
50424837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListMagickResourceInfo((FILE *) NULL,_exception);
50434837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
50444837ac2f5e9dbb766129a91aa11cf7c547477119anthony        case MagickThresholdOptions:
50454837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListThresholdMaps((FILE *) NULL,_exception);
50464837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
50474837ac2f5e9dbb766129a91aa11cf7c547477119anthony        default:
50484837ac2f5e9dbb766129a91aa11cf7c547477119anthony          (void) ListCommandOptions((FILE *) NULL,(CommandOption) list,
50494837ac2f5e9dbb766129a91aa11cf7c547477119anthony            _exception);
50504837ac2f5e9dbb766129a91aa11cf7c547477119anthony          break;
50518226e729aec80913941e8aa6b197e3efd03dfb43anthony      }
50524837ac2f5e9dbb766129a91aa11cf7c547477119anthony      break;
505343f425dd7d5b33887726982b28ebfa06f5560636anthony    }
50544837ac2f5e9dbb766129a91aa11cf7c547477119anthony
50554837ac2f5e9dbb766129a91aa11cf7c547477119anthony    CLIWandException(OptionError,"UnrecognizedOption",option);
50564837ac2f5e9dbb766129a91aa11cf7c547477119anthony
505793b02b797c4127ce2b06dbd3b2d75ecc33fca759dirkDisableMSCWarning(4127)
50584837ac2f5e9dbb766129a91aa11cf7c547477119anthony  } while (0);  /* break to exit code. */
505993b02b797c4127ce2b06dbd3b2d75ecc33fca759dirkRestoreMSCWarning
506043f425dd7d5b33887726982b28ebfa06f5560636anthony
50614837ac2f5e9dbb766129a91aa11cf7c547477119anthony  /* clean up percent escape interpreted strings */
50624837ac2f5e9dbb766129a91aa11cf7c547477119anthony  if (arg1 != arg1n )
50634837ac2f5e9dbb766129a91aa11cf7c547477119anthony    arg1=DestroyString((char *)arg1);
50644837ac2f5e9dbb766129a91aa11cf7c547477119anthony  if (arg2 != arg2n )
50654837ac2f5e9dbb766129a91aa11cf7c547477119anthony    arg2=DestroyString((char *)arg2);
506643f425dd7d5b33887726982b28ebfa06f5560636anthony
50678226e729aec80913941e8aa6b197e3efd03dfb43anthony#undef _image_info
50688226e729aec80913941e8aa6b197e3efd03dfb43anthony#undef _images
506992c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _exception
50708226e729aec80913941e8aa6b197e3efd03dfb43anthony#undef IfNormalOp
50718226e729aec80913941e8aa6b197e3efd03dfb43anthony#undef IfPlusOp
5072805a2d48e7e2ed7d699871183ed706699119281canthony}
5073464f1c476517436723780b8a8bb371464584453canthony
5074464f1c476517436723780b8a8bb371464584453canthony/*
5075464f1c476517436723780b8a8bb371464584453canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5076464f1c476517436723780b8a8bb371464584453canthony%                                                                             %
5077464f1c476517436723780b8a8bb371464584453canthony%                                                                             %
5078464f1c476517436723780b8a8bb371464584453canthony%                                                                             %
5079964d28ed4391c639c60c392807c9dfb09f933ba8anthony+   C L I O p t i o n                                                         %
5080464f1c476517436723780b8a8bb371464584453canthony%                                                                             %
5081464f1c476517436723780b8a8bb371464584453canthony%                                                                             %
5082464f1c476517436723780b8a8bb371464584453canthony%                                                                             %
5083464f1c476517436723780b8a8bb371464584453canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5084464f1c476517436723780b8a8bb371464584453canthony%
5085464f1c476517436723780b8a8bb371464584453canthony%  CLIOption() Processes the given option using the given CLI Magick Wand.
5086964d28ed4391c639c60c392807c9dfb09f933ba8anthony%  The option arguments can be variable in number, though at this time no more
5087964d28ed4391c639c60c392807c9dfb09f933ba8anthony%  that two is actually used by any option (this may change). Excess options
5088964d28ed4391c639c60c392807c9dfb09f933ba8anthony%  are simply ignored.
5089464f1c476517436723780b8a8bb371464584453canthony%
5090464f1c476517436723780b8a8bb371464584453canthony%  If the cli_wand->command pointer is non-null, then it is assumed that the
5091464f1c476517436723780b8a8bb371464584453canthony%  option has already been search for up from the CommandOptions[] table in
5092964d28ed4391c639c60c392807c9dfb09f933ba8anthony%  "MagickCore/options.c" using  GetCommandOptionInfo().  If not set this
5093964d28ed4391c639c60c392807c9dfb09f933ba8anthony%  routine will do the lookup instead. The pointer is reset afterward.
5094964d28ed4391c639c60c392807c9dfb09f933ba8anthony%
5095964d28ed4391c639c60c392807c9dfb09f933ba8anthony%  This action allows the caller to lookup and pre-handle any 'special'
5096964d28ed4391c639c60c392807c9dfb09f933ba8anthony%  options, (such as implicit reads) before calling this general option
5097964d28ed4391c639c60c392807c9dfb09f933ba8anthony%  handler to deal with 'standard' command line options.
5098464f1c476517436723780b8a8bb371464584453canthony%
5099464f1c476517436723780b8a8bb371464584453canthony%  The format of the CLIOption method is:
5100464f1c476517436723780b8a8bb371464584453canthony%
5101464f1c476517436723780b8a8bb371464584453canthony%       void CLIOption(MagickCLI *cli_wand,const char *option, ...)
5102464f1c476517436723780b8a8bb371464584453canthony%
5103464f1c476517436723780b8a8bb371464584453canthony%  A description of each parameter follows:
5104464f1c476517436723780b8a8bb371464584453canthony%
5105464f1c476517436723780b8a8bb371464584453canthony%     o cli_wand: the main CLI Wand to use.
5106464f1c476517436723780b8a8bb371464584453canthony%
5107464f1c476517436723780b8a8bb371464584453canthony%     o option: The special option (with any switch char) to process
5108464f1c476517436723780b8a8bb371464584453canthony%
5109964d28ed4391c639c60c392807c9dfb09f933ba8anthony%     o args: any required arguments for an option (variable number)
5110464f1c476517436723780b8a8bb371464584453canthony%
5111464f1c476517436723780b8a8bb371464584453canthony%  Example Usage...
5112464f1c476517436723780b8a8bb371464584453canthony%
5113464f1c476517436723780b8a8bb371464584453canthony%    CLIoption(cli_wand,"-read","rose:");
5114464f1c476517436723780b8a8bb371464584453canthony%    CLIoption(cli_wand,"-virtual-pixel","transparent");
5115464f1c476517436723780b8a8bb371464584453canthony%    CLIoption(cli_wand,"-distort","SRT:","30");
5116464f1c476517436723780b8a8bb371464584453canthony%    CLIoption(cli_wand,"-write","rotated_rose.png");
5117464f1c476517436723780b8a8bb371464584453canthony%
5118464f1c476517436723780b8a8bb371464584453canthony*/
5119464f1c476517436723780b8a8bb371464584453canthonyWandExport void CLIOption(MagickCLI *cli_wand,const char *option,...)
5120464f1c476517436723780b8a8bb371464584453canthony{
5121a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony  const char    /* extracted option args from args */
5122464f1c476517436723780b8a8bb371464584453canthony    *arg1,
5123464f1c476517436723780b8a8bb371464584453canthony    *arg2;
5124464f1c476517436723780b8a8bb371464584453canthony
5125464f1c476517436723780b8a8bb371464584453canthony  CommandOptionFlags
5126464f1c476517436723780b8a8bb371464584453canthony    option_type;
5127464f1c476517436723780b8a8bb371464584453canthony
5128464f1c476517436723780b8a8bb371464584453canthony  assert(cli_wand != (MagickCLI *) NULL);
5129e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(cli_wand->signature == MagickWandSignature);
5130e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(cli_wand->wand.signature == MagickWandSignature);
5131464f1c476517436723780b8a8bb371464584453canthony
5132964d28ed4391c639c60c392807c9dfb09f933ba8anthony  do { /* Break Code Block for error handling */
5133964d28ed4391c639c60c392807c9dfb09f933ba8anthony
5134964d28ed4391c639c60c392807c9dfb09f933ba8anthony    /* get information about option */
5135964d28ed4391c639c60c392807c9dfb09f933ba8anthony    if ( cli_wand->command == (const OptionInfo *) NULL )
5136964d28ed4391c639c60c392807c9dfb09f933ba8anthony      cli_wand->command = GetCommandOptionInfo(option);
5137464f1c476517436723780b8a8bb371464584453canthony#if 0
5138964d28ed4391c639c60c392807c9dfb09f933ba8anthony      (void) FormatLocaleFile(stderr, "CLIOption \"%s\" matched \"%s\"\n",
5139964d28ed4391c639c60c392807c9dfb09f933ba8anthony            option, cli_wand->command->mnemonic );
5140464f1c476517436723780b8a8bb371464584453canthony#endif
5141964d28ed4391c639c60c392807c9dfb09f933ba8anthony    option_type=(CommandOptionFlags) cli_wand->command->flags;
5142464f1c476517436723780b8a8bb371464584453canthony
5143964d28ed4391c639c60c392807c9dfb09f933ba8anthony    if ( option_type == UndefinedOptionFlag )
5144964d28ed4391c639c60c392807c9dfb09f933ba8anthony      CLIWandExceptionReturn(OptionFatalError,"UnrecognizedOption",option);
5145464f1c476517436723780b8a8bb371464584453canthony
5146964d28ed4391c639c60c392807c9dfb09f933ba8anthony    assert( LocaleCompare(cli_wand->command->mnemonic,option) == 0 );
5147464f1c476517436723780b8a8bb371464584453canthony
5148ab5c745683c880339688d939bb58d49c2583265adirk    /* deprecated options */
5149964d28ed4391c639c60c392807c9dfb09f933ba8anthony    if ( (option_type & DeprecateOptionFlag) != 0 )
5150964d28ed4391c639c60c392807c9dfb09f933ba8anthony      CLIWandExceptionBreak(OptionError,"DeprecatedOptionNoCode",option);
5151464f1c476517436723780b8a8bb371464584453canthony
5152964d28ed4391c639c60c392807c9dfb09f933ba8anthony    /* options that this module does not handle */
5153964d28ed4391c639c60c392807c9dfb09f933ba8anthony    if ((option_type & (SpecialOptionFlag|GenesisOptionFlag)) != 0 )
5154964d28ed4391c639c60c392807c9dfb09f933ba8anthony      CLIWandExceptionBreak(OptionFatalError,"InvalidUseOfOption",option);
5155464f1c476517436723780b8a8bb371464584453canthony
5156964d28ed4391c639c60c392807c9dfb09f933ba8anthony    /* Get argument strings from VarArgs
5157a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony      How can you determine if enough arguments was supplied?
5158a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony      What happens if not enough arguments were supplied?
5159a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony    */
5160964d28ed4391c639c60c392807c9dfb09f933ba8anthony    { size_t
516152b632a875d61ac705bca7ad2b0919f90112eef9cristy        count = (size_t) cli_wand->command->type;
5162464f1c476517436723780b8a8bb371464584453canthony
5163964d28ed4391c639c60c392807c9dfb09f933ba8anthony      va_list
5164964d28ed4391c639c60c392807c9dfb09f933ba8anthony        operands;
5165464f1c476517436723780b8a8bb371464584453canthony
5166964d28ed4391c639c60c392807c9dfb09f933ba8anthony      va_start(operands,option);
5167464f1c476517436723780b8a8bb371464584453canthony
5168964d28ed4391c639c60c392807c9dfb09f933ba8anthony      arg1=arg2=NULL;
5169964d28ed4391c639c60c392807c9dfb09f933ba8anthony      if ( count >= 1 )
5170964d28ed4391c639c60c392807c9dfb09f933ba8anthony        arg1=(const char *) va_arg(operands, const char *);
5171964d28ed4391c639c60c392807c9dfb09f933ba8anthony      if ( count >= 2 )
5172964d28ed4391c639c60c392807c9dfb09f933ba8anthony        arg2=(const char *) va_arg(operands, const char *);
5173464f1c476517436723780b8a8bb371464584453canthony
5174964d28ed4391c639c60c392807c9dfb09f933ba8anthony      va_end(operands);
517552cb3df0e123253562ab36093650a5339a6a2e87anthony#if 0
5176964d28ed4391c639c60c392807c9dfb09f933ba8anthony      (void) FormatLocaleFile(stderr,
5177964d28ed4391c639c60c392807c9dfb09f933ba8anthony        "CLIOption: \"%s\"  Count: %ld  Flags: %04x  Args: \"%s\" \"%s\"\n",
5178964d28ed4391c639c60c392807c9dfb09f933ba8anthony            option,(long) count,option_type,arg1,arg2);
5179464f1c476517436723780b8a8bb371464584453canthony#endif
5180964d28ed4391c639c60c392807c9dfb09f933ba8anthony    }
5181464f1c476517436723780b8a8bb371464584453canthony
5182964d28ed4391c639c60c392807c9dfb09f933ba8anthony    /*
5183964d28ed4391c639c60c392807c9dfb09f933ba8anthony      Call the appropriate option handler
5184964d28ed4391c639c60c392807c9dfb09f933ba8anthony    */
5185464f1c476517436723780b8a8bb371464584453canthony
5186964d28ed4391c639c60c392807c9dfb09f933ba8anthony    /* FUTURE: this is temporary - get 'settings' to handle distribution of
5187964d28ed4391c639c60c392807c9dfb09f933ba8anthony      settings to images attributes,proprieties,artifacts */
5188f432c635c526259b858c9aad3d409c5c44545686cristy    if ( cli_wand->wand.images != (Image *) NULL )
518952b632a875d61ac705bca7ad2b0919f90112eef9cristy      (void) SyncImagesSettings(cli_wand->wand.image_info,cli_wand->wand.images,
519052b632a875d61ac705bca7ad2b0919f90112eef9cristy        cli_wand->wand.exception);
5191464f1c476517436723780b8a8bb371464584453canthony
5192964d28ed4391c639c60c392807c9dfb09f933ba8anthony    if ( (option_type & SettingOptionFlags) != 0 ) {
5193964d28ed4391c639c60c392807c9dfb09f933ba8anthony      CLISettingOptionInfo(cli_wand, option, arg1, arg2);
5194964d28ed4391c639c60c392807c9dfb09f933ba8anthony      // FUTURE: Sync Specific Settings into Image Properities (not global)
5195964d28ed4391c639c60c392807c9dfb09f933ba8anthony    }
5196464f1c476517436723780b8a8bb371464584453canthony
5197964d28ed4391c639c60c392807c9dfb09f933ba8anthony    /* Operators that do not need images - read, write, stack, clone */
5198e1f6cfe697c9cc3cee3e2d982bcb1ee63b662e1fcristy    if ((option_type & NoImageOperatorFlag) != 0)
5199964d28ed4391c639c60c392807c9dfb09f933ba8anthony      CLINoImageOperator(cli_wand, option, arg1, arg2);
5200464f1c476517436723780b8a8bb371464584453canthony
5201964d28ed4391c639c60c392807c9dfb09f933ba8anthony    /* FUTURE: The not a setting part below is a temporary hack due to
5202964d28ed4391c639c60c392807c9dfb09f933ba8anthony    * some options being both a Setting and a Simple operator.
5203964d28ed4391c639c60c392807c9dfb09f933ba8anthony    * Specifically -monitor, -depth, and  -colorspace */
5204f432c635c526259b858c9aad3d409c5c44545686cristy    if ( cli_wand->wand.images == (Image *) NULL )
5205964d28ed4391c639c60c392807c9dfb09f933ba8anthony      if ( ((option_type & (SimpleOperatorFlag|ListOperatorFlag)) != 0 ) &&
5206964d28ed4391c639c60c392807c9dfb09f933ba8anthony          ((option_type & SettingOptionFlags) == 0 ))  /* temp hack */
5207964d28ed4391c639c60c392807c9dfb09f933ba8anthony        CLIWandExceptionBreak(OptionError,"NoImagesFound",option);
5208464f1c476517436723780b8a8bb371464584453canthony
5209a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony    /* Operators which loop of individual images, simply */
5210a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony    if ( (option_type & SimpleOperatorFlag) != 0 &&
5211f432c635c526259b858c9aad3d409c5c44545686cristy         cli_wand->wand.images != (Image *) NULL) /* temp hack */
52122c57b74e160f9b605d74dec24081309f28b83899cristy      {
52132c57b74e160f9b605d74dec24081309f28b83899cristy        ExceptionInfo *exception=AcquireExceptionInfo();
521452b632a875d61ac705bca7ad2b0919f90112eef9cristy        (void) CLISimpleOperatorImages(cli_wand, option, arg1, arg2,exception);
52152c57b74e160f9b605d74dec24081309f28b83899cristy        exception=DestroyExceptionInfo(exception);
52162c57b74e160f9b605d74dec24081309f28b83899cristy      }
5217464f1c476517436723780b8a8bb371464584453canthony
5218964d28ed4391c639c60c392807c9dfb09f933ba8anthony    /* Operators that work on the image list as a whole */
5219964d28ed4391c639c60c392807c9dfb09f933ba8anthony    if ( (option_type & ListOperatorFlag) != 0 )
522052b632a875d61ac705bca7ad2b0919f90112eef9cristy      (void) CLIListOperatorImages(cli_wand, option, arg1, arg2);
5221464f1c476517436723780b8a8bb371464584453canthony
522293b02b797c4127ce2b06dbd3b2d75ecc33fca759dirkDisableMSCWarning(4127)
5223964d28ed4391c639c60c392807c9dfb09f933ba8anthony  } while (0);  /* end Break code block */
522493b02b797c4127ce2b06dbd3b2d75ecc33fca759dirkRestoreMSCWarning
5225464f1c476517436723780b8a8bb371464584453canthony
5226964d28ed4391c639c60c392807c9dfb09f933ba8anthony  cli_wand->command = (const OptionInfo *) NULL; /* prevent re-use later */
5227464f1c476517436723780b8a8bb371464584453canthony}
5228