blob: b36f0cd06f335f796513599dfbcafe661bf7618a [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001/*
2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3% %
4% %
5% %
6% CCCC OOO N N V V EEEEE RRRR TTTTT %
7% C O O NN N V V E R R T %
8% C O O N N N V V EEE RRRR T %
9% C O O N NN V V E R R T %
10% CCCC OOO N N V EEEEE R R T %
11% %
12% %
13% Convert an image from one format to another. %
14% %
15% Software Design %
16% John Cristy %
17% April 1992 %
18% %
19% %
cristy1454be72011-12-19 01:52:48 +000020% Copyright 1999-2012 ImageMagick Studio LLC, a non-profit organization %
cristy3ed852e2009-09-05 21:47:34 +000021% dedicated to making software imaging solutions freely available. %
22% %
23% You may not use this file except in compliance with the License. You may %
24% obtain a copy of the License at %
25% %
26% http://www.imagemagick.org/script/license.php %
27% %
28% Unless required by applicable law or agreed to in writing, software %
29% distributed under the License is distributed on an "AS IS" BASIS, %
30% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
31% See the License for the specific language governing permissions and %
32% limitations under the License. %
33% %
34%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35%
36% Use the convert program to convert between image formats as well as resize
37% an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample,
38% and much more.
39%
40*/
41
42/*
43 Include declarations.
44*/
cristy4c08aed2011-07-01 19:47:50 +000045#include "MagickWand/studio.h"
46#include "MagickWand/MagickWand.h"
47#include "MagickWand/mogrify-private.h"
48#include "MagickCore/string-private.h"
cristy18c6c272011-09-23 14:40:37 +000049#include "MagickCore/utility-private.h"
cristy3ed852e2009-09-05 21:47:34 +000050/*
51 Define declarations.
52*/
53#define ThrowFileException(exception,severity,tag,context) \
54{ \
cristy4c08aed2011-07-01 19:47:50 +000055 char \
56 *message; \
57 \
58 message=GetExceptionMessage(errno); \
cristy3ed852e2009-09-05 21:47:34 +000059 (void) ThrowMagickException(exception,GetMagickModule(),severity, \
anthonye5b39652012-04-21 05:37:29 +000060 tag == (const char *) NULL ? "unknown" : tag,"'%s': %s",context,message); \
cristy4c08aed2011-07-01 19:47:50 +000061 message=DestroyString(message); \
cristy3ed852e2009-09-05 21:47:34 +000062}
63
64/*
65%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
66% %
67% %
68% %
69+ C o n v e r t I m a g e C o m m a n d %
70% %
71% %
72% %
73%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
74%
75% ConvertImageCommand() reads one or more images, applies one or more image
76% processing operations, and writes out the image in the same or differing
77% format.
78%
79% The format of the ConvertImageCommand method is:
80%
81% MagickBooleanType ConvertImageCommand(ImageInfo *image_info,int argc,
82% char **argv,char **metadata,ExceptionInfo *exception)
83%
84% A description of each parameter follows:
85%
86% o image_info: the image info.
87%
88% o argc: the number of elements in the argument vector.
89%
90% o argv: A text array containing the command line arguments.
91%
92% o metadata: any metadata is returned here.
93%
94% o exception: return any errors or warnings in this structure.
95%
96*/
97
98static MagickBooleanType ConcatenateImages(int argc,char **argv,
99 ExceptionInfo *exception)
100{
101 FILE
102 *input,
103 *output;
104
105 int
106 c;
107
cristybb503372010-05-27 20:51:26 +0000108 register ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000109 i;
110
111 /*
112 Open output file.
113 */
cristy18c6c272011-09-23 14:40:37 +0000114 output=fopen_utf8(argv[argc-1],"wb");
cristy3ed852e2009-09-05 21:47:34 +0000115 if (output == (FILE *) NULL)
116 {
117 ThrowFileException(exception,FileOpenError,"UnableToOpenFile",
118 argv[argc-1]);
119 return(MagickFalse);
120 }
cristybb503372010-05-27 20:51:26 +0000121 for (i=2; i < (ssize_t) (argc-1); i++)
cristy3ed852e2009-09-05 21:47:34 +0000122 {
cristy18c6c272011-09-23 14:40:37 +0000123 input=fopen_utf8(argv[i],"rb");
cristy3ed852e2009-09-05 21:47:34 +0000124 if (input == (FILE *) NULL)
125 ThrowFileException(exception,FileOpenError,"UnableToOpenFile",argv[i]);
126 for (c=fgetc(input); c != EOF; c=fgetc(input))
127 (void) fputc((char) c,output);
128 (void) fclose(input);
cristy18c6c272011-09-23 14:40:37 +0000129 (void) remove_utf8(argv[i]);
cristy3ed852e2009-09-05 21:47:34 +0000130 }
131 (void) fclose(output);
132 return(MagickTrue);
133}
134
135static MagickBooleanType ConvertUsage(void)
136{
137 static const char
cristy87c02f42012-02-24 00:19:10 +0000138 *channel_operators[]=
139 {
cristy5f257b22012-03-07 00:27:29 +0000140 "-channel-fx expression",
cristyd04e7bf2012-03-03 19:19:12 +0000141 " exchange, extract, or transfer one or more image channels",
cristydfdb19e2012-03-21 22:22:24 +0000142 "-separate separate an image channel into a grayscale image",
cristy87c02f42012-02-24 00:19:10 +0000143 (char *) NULL
144 },
cristy3ed852e2009-09-05 21:47:34 +0000145 *miscellaneous[]=
146 {
147 "-debug events display copious debugging information",
148 "-help print program options",
149 "-list type print a list of supported option arguments",
150 "-log format format of debugging information",
151 "-version print version information",
152 (char *) NULL
153 },
154 *operators[]=
155 {
156 "-adaptive-blur geometry",
157 " adaptively blur pixels; decrease effect near edges",
158 "-adaptive-resize geometry",
159 " adaptively resize image using 'mesh' interpolation",
160 "-adaptive-sharpen geometry",
161 " adaptively sharpen pixels; increase effect near edges",
162 "-alpha option on, activate, off, deactivate, set, opaque, copy",
163 " transparent, extract, background, or shape",
164 "-annotate geometry text",
165 " annotate the image with text",
166 "-auto-gamma automagically adjust gamma level of image",
167 "-auto-level automagically adjust color levels of image",
168 "-auto-orient automagically orient (rotate) image",
169 "-bench iterations measure performance",
170 "-black-threshold value",
171 " force all pixels below the threshold into black",
172 "-blue-shift factor simulate a scene at nighttime in the moonlight",
173 "-blur geometry reduce image noise and reduce detail levels",
174 "-border geometry surround image with a border of color",
175 "-bordercolor color border color",
cristya28d6b82010-01-11 20:03:47 +0000176 "-brightness-contrast geometry",
177 " improve brightness / contrast of the image",
cristy3ed852e2009-09-05 21:47:34 +0000178 "-cdl filename color correct with a color decision list",
179 "-charcoal radius simulate a charcoal drawing",
180 "-chop geometry remove pixels from the image interior",
cristyecb0c6d2009-09-25 16:50:09 +0000181 "-clamp restrict pixel range from 0 to the quantum depth",
cristycee97112010-05-28 00:44:52 +0000182 "-clip clip along the first path from the 8BIM profile",
cristy3ed852e2009-09-05 21:47:34 +0000183 "-clip-mask filename associate a clip mask with the image",
cristycee97112010-05-28 00:44:52 +0000184 "-clip-path id clip along a named path from the 8BIM profile",
cristy3ed852e2009-09-05 21:47:34 +0000185 "-colorize value colorize the image with the fill color",
cristye6365592010-04-02 17:31:23 +0000186 "-color-matrix matrix apply color correction to the image",
cristy3ed852e2009-09-05 21:47:34 +0000187 "-contrast enhance or reduce the image contrast",
188 "-contrast-stretch geometry",
anthonye5b39652012-04-21 05:37:29 +0000189 " improve contrast by 'stretching' the intensity range",
cristy3ed852e2009-09-05 21:47:34 +0000190 "-convolve coefficients",
191 " apply a convolution kernel to the image",
192 "-cycle amount cycle the image colormap",
193 "-decipher filename convert cipher pixels to plain pixels",
194 "-deskew threshold straighten an image",
195 "-despeckle reduce the speckles within an image",
196 "-distort method args",
197 " distort images according to given method ad args",
198 "-draw string annotate the image with a graphic primitive",
199 "-edge radius apply a filter to detect edges in the image",
200 "-encipher filename convert plain pixels to cipher pixels",
201 "-emboss radius emboss an image",
202 "-enhance apply a digital filter to enhance a noisy image",
203 "-equalize perform histogram equalization to an image",
204 "-evaluate operator value",
cristyd18ae7c2010-03-07 17:39:52 +0000205 " evaluate an arithmetic, relational, or logical expression",
cristy3ed852e2009-09-05 21:47:34 +0000206 "-extent geometry set the image size",
207 "-extract geometry extract area from image",
208 "-fft implements the discrete Fourier transform (DFT)",
209 "-flip flip image vertically",
210 "-floodfill geometry color",
211 " floodfill the image with color",
212 "-flop flop image horizontally",
213 "-frame geometry surround image with an ornamental border",
cristyc2b730e2009-11-24 14:32:09 +0000214 "-function name parameters",
cristy3ed852e2009-09-05 21:47:34 +0000215 " apply function over image values",
216 "-gamma value level of gamma correction",
217 "-gaussian-blur geometry",
218 " reduce image noise and reduce detail levels",
cristy901f09d2009-10-16 22:56:10 +0000219 "-geometry geometry preferred size or location of the image",
cristy3ed852e2009-09-05 21:47:34 +0000220 "-identify identify the format and characteristics of the image",
221 "-ift implements the inverse discrete Fourier transform (DFT)",
222 "-implode amount implode image pixels about the center",
anthonyfd706f92012-01-19 04:22:02 +0000223 "-interpolative-resize geometry",
224 " resize image using interpolation",
cristy3ed852e2009-09-05 21:47:34 +0000225 "-lat geometry local adaptive thresholding",
226 "-layers method optimize, merge, or compare image layers",
227 "-level value adjust the level of image contrast",
228 "-level-colors color,color",
cristyee0f8d72009-09-19 00:58:29 +0000229 " level image with the given colors",
cristy3ed852e2009-09-05 21:47:34 +0000230 "-linear-stretch geometry",
anthonye5b39652012-04-21 05:37:29 +0000231 " improve contrast by 'stretching with saturation'",
cristy3ed852e2009-09-05 21:47:34 +0000232 "-liquid-rescale geometry",
233 " rescale image with seam-carving",
cristy3c741502011-04-01 23:21:16 +0000234 "-median geometry apply a median filter to the image",
glennrp30d2dc62011-06-25 03:17:16 +0000235 "-mode geometry make each pixel the 'predominant color' of the neighborhood",
cristy3ed852e2009-09-05 21:47:34 +0000236 "-modulate value vary the brightness, saturation, and hue",
237 "-monochrome transform image to black and white",
cristy7c1b9fd2010-02-02 14:36:00 +0000238 "-morphology method kernel",
anthony29188a82010-01-22 10:12:34 +0000239 " apply a morphology method to the image",
cristy3ed852e2009-09-05 21:47:34 +0000240 "-motion-blur geometry",
241 " simulate motion blur",
242 "-negate replace every pixel with its complementary color ",
cristy3c741502011-04-01 23:21:16 +0000243 "-noise geometry add or reduce noise in an image",
cristy3ed852e2009-09-05 21:47:34 +0000244 "-normalize transform image to span the full range of colors",
245 "-opaque color change this color to the fill color",
246 "-ordered-dither NxN",
247 " add a noise pattern to the image with specific",
248 " amplitudes",
249 "-paint radius simulate an oil painting",
250 "-polaroid angle simulate a Polaroid picture",
251 "-posterize levels reduce the image to a limited number of color levels",
cristy3ed852e2009-09-05 21:47:34 +0000252 "-profile filename add, delete, or apply an image profile",
253 "-quantize colorspace reduce colors in this colorspace",
254 "-radial-blur angle radial blur the image",
255 "-raise value lighten/darken image edges to create a 3-D effect",
256 "-random-threshold low,high",
257 " random threshold the image",
cristy3ed852e2009-09-05 21:47:34 +0000258 "-region geometry apply options to a portion of the image",
259 "-render render vector graphics",
260 "-repage geometry size and location of an image canvas",
261 "-resample geometry change the resolution of an image",
262 "-resize geometry resize the image",
263 "-roll geometry roll an image vertically or horizontally",
264 "-rotate degrees apply Paeth rotation to the image",
265 "-sample geometry scale image with pixel sampling",
266 "-scale geometry scale the image",
267 "-segment values segment an image",
268 "-selective-blur geometry",
269 " selectively blur pixels within a contrast threshold",
270 "-sepia-tone threshold",
271 " simulate a sepia-toned photo",
272 "-set property value set an image property",
273 "-shade degrees shade the image using a distant light source",
274 "-shadow geometry simulate an image shadow",
275 "-sharpen geometry sharpen the image",
276 "-shave geometry shave pixels from the image edges",
cristycee97112010-05-28 00:44:52 +0000277 "-shear geometry slide one edge of the image along the X or Y axis",
cristy3ed852e2009-09-05 21:47:34 +0000278 "-sigmoidal-contrast geometry",
279 " increase the contrast without saturating highlights or shadows",
280 "-sketch geometry simulate a pencil sketch",
281 "-solarize threshold negate all pixels above the threshold level",
282 "-sparse-color method args",
283 " fill in a image based on a few color points",
284 "-splice geometry splice the background color into the image",
285 "-spread radius displace image pixels by a random amount",
cristy95c38342011-03-18 22:39:51 +0000286 "-statistic type geometry",
cristy0834d642011-03-18 18:26:08 +0000287 " replace each pixel with corresponding statistic from the neighborhood",
cristy3ed852e2009-09-05 21:47:34 +0000288 "-strip strip image of all profiles and comments",
289 "-swirl degrees swirl image pixels about the center",
290 "-threshold value threshold the image",
291 "-thumbnail geometry create a thumbnail of the image",
292 "-tile filename tile image when filling a graphic primitive",
293 "-tint value tint the image with the fill color",
294 "-transform affine transform image",
295 "-transparent color make this color transparent within the image",
296 "-transpose flip image vertically and rotate 90 degrees",
297 "-transverse flop image horizontally and rotate 270 degrees",
298 "-trim trim image edges",
299 "-type type image type",
300 "-unique-colors discard all but one of any pixel color",
301 "-unsharp geometry sharpen the image",
302 "-vignette geometry soften the edges of the image in vignette style",
cristycee97112010-05-28 00:44:52 +0000303 "-wave geometry alter an image along a sine wave",
cristy3ed852e2009-09-05 21:47:34 +0000304 "-white-threshold value",
305 " force all pixels above the threshold into white",
306 (char *) NULL
307 },
308 *sequence_operators[]=
309 {
cristy4285d782011-02-09 20:12:28 +0000310 "-append append an image sequence",
cristy3ed852e2009-09-05 21:47:34 +0000311 "-clut apply a color lookup table to the image",
312 "-coalesce merge a sequence of images",
313 "-combine combine a sequence of images",
314 "-composite composite image",
315 "-crop geometry cut out a rectangular region of the image",
316 "-deconstruct break down an image sequence into constituent parts",
cristyd18ae7c2010-03-07 17:39:52 +0000317 "-evaluate-sequence operator",
318 " evaluate an arithmetic, relational, or logical expression",
cristy3ed852e2009-09-05 21:47:34 +0000319 "-flatten flatten a sequence of images",
320 "-fx expression apply mathematical expression to an image channel(s)",
321 "-hald-clut apply a Hald color lookup table to the image",
322 "-morph value morph an image sequence",
323 "-mosaic create a mosaic from an image sequence",
cristy36b94822010-05-20 12:48:16 +0000324 "-print string interpret string and print to console",
cristy3ed852e2009-09-05 21:47:34 +0000325 "-process arguments process the image with a custom image filter",
cristy4285d782011-02-09 20:12:28 +0000326 "-smush geometry smush an image sequence together",
cristy3ed852e2009-09-05 21:47:34 +0000327 "-write filename write images to this file",
328 (char *) NULL
329 },
330 *settings[]=
331 {
332 "-adjoin join images into a single multi-image file",
333 "-affine matrix affine transform matrix",
334 "-alpha option activate, deactivate, reset, or set the alpha channel",
335 "-antialias remove pixel-aliasing",
336 "-authenticate password",
337 " decipher image with this password",
338 "-attenuate value lessen (or intensify) when adding noise to an image",
339 "-background color background color",
340 "-bias value add bias when convolving an image",
341 "-black-point-compensation",
342 " use black point compensation",
343 "-blue-primary point chromaticity blue primary point",
344 "-bordercolor color border color",
345 "-caption string assign a caption to an image",
346 "-channel type apply option to select image channels",
347 "-colors value preferred number of colors in the image",
348 "-colorspace type alternate image colorspace",
349 "-comment string annotate image with comment",
350 "-compose operator set image composite operator",
351 "-compress type type of pixel compression when writing the image",
352 "-define format:option",
353 " define one or more image format options",
354 "-delay value display the next image after pausing",
355 "-density geometry horizontal and vertical density of the image",
356 "-depth value image depth",
cristyc9b12952010-03-28 01:12:28 +0000357 "-direction type render text right-to-left or left-to-right",
cristy3ed852e2009-09-05 21:47:34 +0000358 "-display server get image or font from this X server",
359 "-dispose method layer disposal method",
360 "-dither method apply error diffusion to image",
361 "-encoding type text encoding type",
362 "-endian type endianness (MSB or LSB) of the image",
363 "-family name render text with this font family",
cristy14154222012-06-15 23:21:49 +0000364 "-features distance analyze image features (e.g. contrast, correlation)",
cristy3ed852e2009-09-05 21:47:34 +0000365 "-fill color color to use when filling a graphic primitive",
366 "-filter type use this filter when resizing an image",
367 "-font name render text with this font",
368 "-format \"string\" output formatted image characteristics",
369 "-fuzz distance colors within this distance are considered equal",
370 "-gravity type horizontal and vertical text placement",
371 "-green-primary point chromaticity green primary point",
372 "-intent type type of rendering intent when managing the image color",
373 "-interlace type type of image interlacing scheme",
cristyb32b90a2009-09-07 21:45:48 +0000374 "-interline-spacing value",
375 " set the space between two text lines",
cristy3ed852e2009-09-05 21:47:34 +0000376 "-interpolate method pixel color interpolation method",
377 "-interword-spacing value",
378 " set the space between two words",
379 "-kerning value set the space between two letters",
380 "-label string assign a label to an image",
381 "-limit type value pixel cache resource limit",
382 "-loop iterations add Netscape loop extension to your GIF animation",
383 "-mask filename associate a mask with the image",
384 "-mattecolor color frame color",
385 "-monitor monitor progress",
386 "-orient type image orientation",
387 "-page geometry size and location of an image canvas (setting)",
388 "-ping efficiently determine image attributes",
389 "-pointsize value font point size",
cristy7c1b9fd2010-02-02 14:36:00 +0000390 "-precision value maximum number of significant digits to print",
cristy3ed852e2009-09-05 21:47:34 +0000391 "-preview type image preview type",
392 "-quality value JPEG/MIFF/PNG compression level",
393 "-quiet suppress all warning messages",
394 "-red-primary point chromaticity red primary point",
395 "-regard-warnings pay attention to warning messages",
396 "-remap filename transform image colors to match this set of colors",
397 "-respect-parentheses settings remain in effect until parenthesis boundary",
398 "-sampling-factor geometry",
399 " horizontal and vertical sampling factor",
400 "-scene value image scene number",
401 "-seed value seed a new sequence of pseudo-random numbers",
402 "-size geometry width and height of image",
403 "-stretch type render text with this font stretch",
404 "-stroke color graphic primitive stroke color",
405 "-strokewidth value graphic primitive stroke width",
406 "-style type render text with this font style",
cristyd9a29192010-10-16 16:49:53 +0000407 "-synchronize synchronize image to storage device",
408 "-taint declare the image as modified",
cristy3ed852e2009-09-05 21:47:34 +0000409 "-texture filename name of texture to tile onto the image background",
410 "-tile-offset geometry",
411 " tile offset",
412 "-treedepth value color tree depth",
413 "-transparent-color color",
414 " transparent color",
415 "-undercolor color annotation bounding box color",
416 "-units type the units of image resolution",
417 "-verbose print detailed information about the image",
418 "-view FlashPix viewing transforms",
419 "-virtual-pixel method",
420 " virtual pixel access method",
421 "-weight type render text with this font weight",
422 "-white-point point chromaticity white point",
423 (char *) NULL
424 },
425 *stack_operators[]=
426 {
anthonyb69c4b32011-03-23 04:37:44 +0000427 "-clone indexes clone an image",
428 "-delete indexes delete the image from the image sequence",
429 "-duplicate count,indexes",
cristy5d28d482011-03-20 21:59:40 +0000430 " duplicate an image one or more times",
cristy3ed852e2009-09-05 21:47:34 +0000431 "-insert index insert last image into the image sequence",
anthony9bd15492011-03-23 02:11:13 +0000432 "-reverse reverse image sequence",
cristy3ed852e2009-09-05 21:47:34 +0000433 "-swap indexes swap two images in the image sequence",
434 (char *) NULL
435 };
436
437 const char
438 **p;
439
cristybb503372010-05-27 20:51:26 +0000440 (void) printf("Version: %s\n",GetMagickVersion((size_t *) NULL));
cristy610b2e22009-10-22 14:59:43 +0000441 (void) printf("Copyright: %s\n",GetMagickCopyright());
442 (void) printf("Features: %s\n\n",GetMagickFeatures());
cristy3ed852e2009-09-05 21:47:34 +0000443 (void) printf("Usage: %s [options ...] file [ [options ...] "
444 "file ...] [options ...] file\n",GetClientName());
445 (void) printf("\nImage Settings:\n");
446 for (p=settings; *p != (char *) NULL; p++)
447 (void) printf(" %s\n",*p);
448 (void) printf("\nImage Operators:\n");
449 for (p=operators; *p != (char *) NULL; p++)
450 (void) printf(" %s\n",*p);
cristy87c02f42012-02-24 00:19:10 +0000451 (void) printf("\nImage Channel Operators:\n");
452 for (p=channel_operators; *p != (char *) NULL; p++)
453 (void) printf(" %s\n",*p);
cristy3ed852e2009-09-05 21:47:34 +0000454 (void) printf("\nImage Sequence Operators:\n");
455 for (p=sequence_operators; *p != (char *) NULL; p++)
456 (void) printf(" %s\n",*p);
457 (void) printf("\nImage Stack Operators:\n");
458 for (p=stack_operators; *p != (char *) NULL; p++)
459 (void) printf(" %s\n",*p);
460 (void) printf("\nMiscellaneous Options:\n");
461 for (p=miscellaneous; *p != (char *) NULL; p++)
462 (void) printf(" %s\n",*p);
463 (void) printf(
anthonye5b39652012-04-21 05:37:29 +0000464 "\nBy default, the image format of 'file' is determined by its magic\n");
cristy3ed852e2009-09-05 21:47:34 +0000465 (void) printf(
466 "number. To specify a particular image format, precede the filename\n");
467 (void) printf(
468 "with an image format name and a colon (i.e. ps:image) or specify the\n");
469 (void) printf(
470 "image type as the filename suffix (i.e. image.ps). Specify 'file' as\n");
471 (void) printf("'-' for standard input or output.\n");
472 return(MagickFalse);
473}
474
475WandExport MagickBooleanType ConvertImageCommand(ImageInfo *image_info,
476 int argc,char **argv,char **metadata,ExceptionInfo *exception)
477{
478#define NotInitialized (unsigned int) (~0)
479#define DestroyConvert() \
480{ \
481 DestroyImageStack(); \
cristybb503372010-05-27 20:51:26 +0000482 for (i=0; i < (ssize_t) argc; i++) \
cristy3ed852e2009-09-05 21:47:34 +0000483 argv[i]=DestroyString(argv[i]); \
484 argv=(char **) RelinquishMagickMemory(argv); \
485}
486#define ThrowConvertException(asperity,tag,option) \
487{ \
anthonye5b39652012-04-21 05:37:29 +0000488 (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"'%s'", \
cristy3ed852e2009-09-05 21:47:34 +0000489 option); \
490 DestroyConvert(); \
491 return(MagickFalse); \
492}
493#define ThrowConvertInvalidArgumentException(option,argument) \
494{ \
495 (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
anthonye5b39652012-04-21 05:37:29 +0000496 "InvalidArgument","'%s': %s",option,argument); \
cristy3ed852e2009-09-05 21:47:34 +0000497 DestroyConvert(); \
498 return(MagickFalse); \
499}
500
501 char
502 *filename,
503 *option;
504
505 const char
506 *format;
507
508 Image
509 *image;
510
511 ImageStack
512 image_stack[MaxImageStackDepth+1];
513
cristy3ed852e2009-09-05 21:47:34 +0000514 MagickBooleanType
515 fire,
cristyebbcfea2011-02-25 02:43:54 +0000516 pend,
517 respect_parenthesis;
cristy3ed852e2009-09-05 21:47:34 +0000518
519 MagickStatusType
520 status;
521
cristybb503372010-05-27 20:51:26 +0000522 register ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000523 i;
524
cristy9d314ff2011-03-09 01:30:28 +0000525 ssize_t
526 j,
527 k;
528
cristy3ed852e2009-09-05 21:47:34 +0000529 /*
530 Set defaults.
531 */
532 assert(image_info != (ImageInfo *) NULL);
533 assert(image_info->signature == MagickSignature);
534 if (image_info->debug != MagickFalse)
535 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
536 assert(exception != (ExceptionInfo *) NULL);
537 if (argc == 2)
538 {
539 option=argv[1];
540 if ((LocaleCompare("version",option+1) == 0) ||
541 (LocaleCompare("-version",option+1) == 0))
542 {
cristyb51dff52011-05-19 16:55:47 +0000543 (void) FormatLocaleFile(stdout,"Version: %s\n",
cristybb503372010-05-27 20:51:26 +0000544 GetMagickVersion((size_t *) NULL));
cristy1e604812011-05-19 18:07:50 +0000545 (void) FormatLocaleFile(stdout,"Copyright: %s\n",
546 GetMagickCopyright());
547 (void) FormatLocaleFile(stdout,"Features: %s\n\n",
548 GetMagickFeatures());
cristy3ed852e2009-09-05 21:47:34 +0000549 return(MagickFalse);
550 }
551 }
552 if (argc < 3)
cristy13e61a12010-02-04 20:19:00 +0000553 return(ConvertUsage());
cristy3ed852e2009-09-05 21:47:34 +0000554 filename=(char *) NULL;
555 format="%w,%h,%m";
556 j=1;
557 k=0;
558 NewImageStack();
559 option=(char *) NULL;
560 pend=MagickFalse;
cristyebbcfea2011-02-25 02:43:54 +0000561 respect_parenthesis=MagickFalse;
cristy3ed852e2009-09-05 21:47:34 +0000562 status=MagickTrue;
563 /*
564 Parse command-line arguments.
565 */
566 ReadCommandlLine(argc,&argv);
567 status=ExpandFilenames(&argc,&argv);
568 if (status == MagickFalse)
569 ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
570 GetExceptionMessage(errno));
571 if ((argc > 2) && (LocaleCompare("-concatenate",argv[1]) == 0))
572 return(ConcatenateImages(argc,argv,exception));
cristybb503372010-05-27 20:51:26 +0000573 for (i=1; i < (ssize_t) (argc-1); i++)
cristy3ed852e2009-09-05 21:47:34 +0000574 {
575 option=argv[i];
576 if (LocaleCompare(option,"(") == 0)
577 {
578 FireImageStack(MagickTrue,MagickTrue,pend);
579 if (k == MaxImageStackDepth)
580 ThrowConvertException(OptionError,"ParenthesisNestedTooDeeply",
581 option);
582 PushImageStack();
583 continue;
584 }
585 if (LocaleCompare(option,")") == 0)
586 {
587 FireImageStack(MagickTrue,MagickTrue,MagickTrue);
588 if (k == 0)
589 ThrowConvertException(OptionError,"UnableToParseExpression",option);
590 PopImageStack();
591 continue;
592 }
cristy042ee782011-04-22 18:48:30 +0000593 if (IsCommandOption(option) == MagickFalse)
cristy3ed852e2009-09-05 21:47:34 +0000594 {
595 Image
596 *images;
597
598 /*
599 Read input image.
600 */
601 FireImageStack(MagickTrue,MagickTrue,pend);
602 filename=argv[i];
cristycee97112010-05-28 00:44:52 +0000603 if ((LocaleCompare(filename,"--") == 0) && (i < (ssize_t) (argc-1)))
cristy3ed852e2009-09-05 21:47:34 +0000604 filename=argv[++i];
cristy3ed852e2009-09-05 21:47:34 +0000605 if (image_info->ping != MagickFalse)
cristy1b58f252012-03-01 01:41:41 +0000606 images=PingImages(image_info,filename,exception);
cristy3ed852e2009-09-05 21:47:34 +0000607 else
cristy1b58f252012-03-01 01:41:41 +0000608 images=ReadImages(image_info,filename,exception);
cristy3ed852e2009-09-05 21:47:34 +0000609 status&=(images != (Image *) NULL) &&
610 (exception->severity < ErrorException);
611 if (images == (Image *) NULL)
612 continue;
613 AppendImageStack(images);
614 continue;
615 }
616 pend=image != (Image *) NULL ? MagickTrue : MagickFalse;
617 switch (*(option+1))
618 {
619 case 'a':
620 {
621 if (LocaleCompare("adaptive-blur",option+1) == 0)
622 {
623 i++;
cristybb503372010-05-27 20:51:26 +0000624 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000625 ThrowConvertException(OptionError,"MissingArgument",option);
626 if (IsGeometry(argv[i]) == MagickFalse)
627 ThrowConvertInvalidArgumentException(option,argv[i]);
628 break;
629 }
630 if (LocaleCompare("adaptive-resize",option+1) == 0)
631 {
632 i++;
cristybb503372010-05-27 20:51:26 +0000633 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000634 ThrowConvertException(OptionError,"MissingArgument",option);
635 if (IsGeometry(argv[i]) == MagickFalse)
636 ThrowConvertInvalidArgumentException(option,argv[i]);
637 break;
638 }
639 if (LocaleCompare("adaptive-sharpen",option+1) == 0)
640 {
641 i++;
cristybb503372010-05-27 20:51:26 +0000642 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000643 ThrowConvertException(OptionError,"MissingArgument",option);
644 if (IsGeometry(argv[i]) == MagickFalse)
645 ThrowConvertInvalidArgumentException(option,argv[i]);
646 break;
647 }
648 if (LocaleCompare("adjoin",option+1) == 0)
649 break;
650 if (LocaleCompare("affine",option+1) == 0)
651 {
652 if (*option == '+')
653 break;
654 i++;
cristybb503372010-05-27 20:51:26 +0000655 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000656 ThrowConvertException(OptionError,"MissingArgument",option);
cristy3ed852e2009-09-05 21:47:34 +0000657 break;
658 }
659 if (LocaleCompare("alpha",option+1) == 0)
660 {
cristybb503372010-05-27 20:51:26 +0000661 ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000662 type;
663
664 if (*option == '+')
665 break;
666 i++;
cristybb503372010-05-27 20:51:26 +0000667 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000668 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +0000669 type=ParseCommandOption(MagickAlphaOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +0000670 if (type < 0)
671 ThrowConvertException(OptionError,"UnrecognizedAlphaChannelType",
672 argv[i]);
673 break;
674 }
675 if (LocaleCompare("annotate",option+1) == 0)
676 {
677 if (*option == '+')
678 break;
679 i++;
cristybb503372010-05-27 20:51:26 +0000680 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000681 ThrowConvertException(OptionError,"MissingArgument",option);
682 if (IsGeometry(argv[i]) == MagickFalse)
683 ThrowConvertInvalidArgumentException(option,argv[i]);
684 i++;
cristybb503372010-05-27 20:51:26 +0000685 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000686 ThrowConvertException(OptionError,"MissingArgument",option);
687 break;
688 }
689 if (LocaleCompare("antialias",option+1) == 0)
690 break;
691 if (LocaleCompare("append",option+1) == 0)
692 break;
693 if (LocaleCompare("attenuate",option+1) == 0)
694 {
695 if (*option == '+')
696 break;
697 i++;
cristybb503372010-05-27 20:51:26 +0000698 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000699 ThrowConvertException(OptionError,"MissingArgument",option);
700 if (IsGeometry(argv[i]) == MagickFalse)
701 ThrowConvertInvalidArgumentException(option,argv[i]);
702 break;
703 }
704 if (LocaleCompare("authenticate",option+1) == 0)
705 {
706 if (*option == '+')
707 break;
708 i++;
cristybb503372010-05-27 20:51:26 +0000709 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000710 ThrowConvertException(OptionError,"MissingArgument",option);
711 break;
712 }
713 if (LocaleCompare("auto-gamma",option+1) == 0)
714 break;
715 if (LocaleCompare("auto-level",option+1) == 0)
716 break;
717 if (LocaleCompare("auto-orient",option+1) == 0)
718 break;
719 if (LocaleCompare("average",option+1) == 0)
720 break;
721 ThrowConvertException(OptionError,"UnrecognizedOption",option)
722 }
723 case 'b':
724 {
725 if (LocaleCompare("background",option+1) == 0)
726 {
727 if (*option == '+')
728 break;
729 i++;
cristybb503372010-05-27 20:51:26 +0000730 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000731 ThrowConvertException(OptionError,"MissingArgument",option);
732 break;
733 }
734 if (LocaleCompare("bench",option+1) == 0)
735 {
736 if (*option == '+')
737 break;
738 i++;
cristybb503372010-05-27 20:51:26 +0000739 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000740 ThrowConvertException(OptionError,"MissingArgument",option);
741 if (IsGeometry(argv[i]) == MagickFalse)
742 ThrowConvertInvalidArgumentException(option,argv[i]);
743 break;
744 }
745 if (LocaleCompare("bias",option+1) == 0)
746 {
747 if (*option == '+')
748 break;
749 i++;
cristybb503372010-05-27 20:51:26 +0000750 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000751 ThrowConvertException(OptionError,"MissingArgument",option);
752 if (IsGeometry(argv[i]) == MagickFalse)
753 ThrowConvertInvalidArgumentException(option,argv[i]);
754 break;
755 }
756 if (LocaleCompare("black-point-compensation",option+1) == 0)
757 break;
758 if (LocaleCompare("black-threshold",option+1) == 0)
759 {
760 if (*option == '+')
761 break;
762 i++;
cristybb503372010-05-27 20:51:26 +0000763 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000764 ThrowConvertException(OptionError,"MissingArgument",option);
765 if (IsGeometry(argv[i]) == MagickFalse)
766 ThrowConvertInvalidArgumentException(option,argv[i]);
767 break;
768 }
769 if (LocaleCompare("blue-primary",option+1) == 0)
770 {
771 if (*option == '+')
772 break;
773 i++;
cristybb503372010-05-27 20:51:26 +0000774 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000775 ThrowConvertException(OptionError,"MissingArgument",option);
776 if (IsGeometry(argv[i]) == MagickFalse)
777 ThrowConvertInvalidArgumentException(option,argv[i]);
778 break;
779 }
780 if (LocaleCompare("blue-shift",option+1) == 0)
781 {
782 if (*option == '+')
783 break;
784 i++;
cristybb503372010-05-27 20:51:26 +0000785 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000786 ThrowConvertException(OptionError,"MissingArgument",option);
787 if (IsGeometry(argv[i]) == MagickFalse)
788 ThrowConvertInvalidArgumentException(option,argv[i]);
789 break;
790 }
791 if (LocaleCompare("blur",option+1) == 0)
792 {
793 if (*option == '+')
794 break;
795 i++;
cristybb503372010-05-27 20:51:26 +0000796 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000797 ThrowConvertException(OptionError,"MissingArgument",option);
798 if (IsGeometry(argv[i]) == MagickFalse)
799 ThrowConvertInvalidArgumentException(option,argv[i]);
800 break;
801 }
802 if (LocaleCompare("border",option+1) == 0)
803 {
804 if (*option == '+')
805 break;
806 i++;
cristybb503372010-05-27 20:51:26 +0000807 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000808 ThrowConvertException(OptionError,"MissingArgument",option);
809 if (IsGeometry(argv[i]) == MagickFalse)
810 ThrowConvertInvalidArgumentException(option,argv[i]);
811 break;
812 }
813 if (LocaleCompare("bordercolor",option+1) == 0)
814 {
815 if (*option == '+')
816 break;
817 i++;
cristybb503372010-05-27 20:51:26 +0000818 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000819 ThrowConvertException(OptionError,"MissingArgument",option);
820 break;
821 }
822 if (LocaleCompare("box",option+1) == 0)
823 {
824 if (*option == '+')
825 break;
826 i++;
cristybb503372010-05-27 20:51:26 +0000827 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000828 ThrowConvertException(OptionError,"MissingArgument",option);
829 break;
830 }
cristya28d6b82010-01-11 20:03:47 +0000831 if (LocaleCompare("brightness-contrast",option+1) == 0)
832 {
833 i++;
cristybb503372010-05-27 20:51:26 +0000834 if (i == (ssize_t) (argc-1))
cristya28d6b82010-01-11 20:03:47 +0000835 ThrowConvertException(OptionError,"MissingArgument",option);
836 if (IsGeometry(argv[i]) == MagickFalse)
837 ThrowConvertInvalidArgumentException(option,argv[i]);
838 break;
839 }
cristy3ed852e2009-09-05 21:47:34 +0000840 ThrowConvertException(OptionError,"UnrecognizedOption",option)
841 }
842 case 'c':
843 {
844 if (LocaleCompare("cache",option+1) == 0)
845 {
846 if (*option == '+')
847 break;
848 i++;
cristybb503372010-05-27 20:51:26 +0000849 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000850 ThrowConvertException(OptionError,"MissingArgument",option);
851 if (IsGeometry(argv[i]) == MagickFalse)
852 ThrowConvertInvalidArgumentException(option,argv[i]);
853 break;
854 }
855 if (LocaleCompare("caption",option+1) == 0)
856 {
857 if (*option == '+')
858 break;
859 i++;
cristybb503372010-05-27 20:51:26 +0000860 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +0000861 ThrowConvertException(OptionError,"MissingArgument",option);
862 break;
863 }
864 if (LocaleCompare("cdl",option+1) == 0)
865 {
866 if (*option == '+')
867 break;
868 i++;
cristybb503372010-05-27 20:51:26 +0000869 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000870 ThrowConvertException(OptionError,"MissingArgument",option);
871 break;
872 }
873 if (LocaleCompare("channel",option+1) == 0)
874 {
cristybb503372010-05-27 20:51:26 +0000875 ssize_t
cristy3ed852e2009-09-05 21:47:34 +0000876 channel;
877
878 if (*option == '+')
879 break;
880 i++;
cristybb503372010-05-27 20:51:26 +0000881 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000882 ThrowConvertException(OptionError,"MissingArgument",option);
883 channel=ParseChannelOption(argv[i]);
884 if (channel < 0)
885 ThrowConvertException(OptionError,"UnrecognizedChannelType",
886 argv[i]);
887 break;
888 }
cristy5f257b22012-03-07 00:27:29 +0000889 if (LocaleCompare("channel-fx",option+1) == 0)
cristy87c02f42012-02-24 00:19:10 +0000890 {
891 ssize_t
892 channel;
893
894 if (*option == '+')
895 break;
896 i++;
897 if (i == (ssize_t) (argc-1))
898 ThrowConvertException(OptionError,"MissingArgument",option);
cristy953c4bd2012-02-24 01:04:04 +0000899 channel=ParsePixelChannelOption(argv[i]);
cristy87c02f42012-02-24 00:19:10 +0000900 if (channel < 0)
901 ThrowConvertException(OptionError,"UnrecognizedChannelType",
902 argv[i]);
903 break;
904 }
cristy3ed852e2009-09-05 21:47:34 +0000905 if (LocaleCompare("charcoal",option+1) == 0)
906 {
907 if (*option == '+')
908 break;
909 i++;
cristybb503372010-05-27 20:51:26 +0000910 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000911 ThrowConvertException(OptionError,"MissingArgument",option);
912 if (IsGeometry(argv[i]) == MagickFalse)
913 ThrowConvertInvalidArgumentException(option,argv[i]);
914 break;
915 }
916 if (LocaleCompare("chop",option+1) == 0)
917 {
918 if (*option == '+')
919 break;
920 i++;
cristybb503372010-05-27 20:51:26 +0000921 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000922 ThrowConvertException(OptionError,"MissingArgument",option);
923 if (IsGeometry(argv[i]) == MagickFalse)
924 ThrowConvertInvalidArgumentException(option,argv[i]);
925 break;
926 }
cristy1eb45dd2009-09-25 16:38:06 +0000927 if (LocaleCompare("clamp",option+1) == 0)
928 break;
cristy3ed852e2009-09-05 21:47:34 +0000929 if (LocaleCompare("clip",option+1) == 0)
930 break;
931 if (LocaleCompare("clip-mask",option+1) == 0)
932 {
933 if (*option == '+')
934 break;
935 i++;
cristybb503372010-05-27 20:51:26 +0000936 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000937 ThrowConvertException(OptionError,"MissingArgument",option);
938 break;
939 }
940 if (LocaleCompare("clip-path",option+1) == 0)
941 {
942 i++;
cristybb503372010-05-27 20:51:26 +0000943 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000944 ThrowConvertException(OptionError,"MissingArgument",option);
945 break;
946 }
947 if (LocaleCompare("clone",option+1) == 0)
948 {
949 Image
950 *clone_images;
951
952 clone_images=image;
953 if (k != 0)
954 clone_images=image_stack[k-1].image;
955 if (clone_images == (Image *) NULL)
anthony8226e722012-04-05 14:25:46 +0000956 ThrowConvertException(ImageError,"UnableToCloneImage",option);
cristy3ed852e2009-09-05 21:47:34 +0000957 FireImageStack(MagickTrue,MagickTrue,MagickTrue);
958 if (*option == '+')
959 clone_images=CloneImages(clone_images,"-1",exception);
960 else
961 {
962 i++;
cristybb503372010-05-27 20:51:26 +0000963 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000964 ThrowConvertException(OptionError,"MissingArgument",option);
965 if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
966 ThrowConvertInvalidArgumentException(option,argv[i]);
967 clone_images=CloneImages(clone_images,argv[i],exception);
968 }
969 if (clone_images == (Image *) NULL)
970 ThrowConvertException(OptionError,"NoSuchImage",option);
971 AppendImageStack(clone_images);
972 break;
973 }
974 if (LocaleCompare("clut",option+1) == 0)
975 break;
976 if (LocaleCompare("coalesce",option+1) == 0)
977 break;
978 if (LocaleCompare("colorize",option+1) == 0)
979 {
980 if (*option == '+')
981 break;
982 i++;
cristybb503372010-05-27 20:51:26 +0000983 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +0000984 ThrowConvertException(OptionError,"MissingArgument",option);
985 if (IsGeometry(argv[i]) == MagickFalse)
986 ThrowConvertInvalidArgumentException(option,argv[i]);
987 break;
988 }
cristye6365592010-04-02 17:31:23 +0000989 if (LocaleCompare("color-matrix",option+1) == 0)
990 {
cristyb6bd4ad2010-08-08 01:12:27 +0000991 KernelInfo
992 *kernel_info;
993
cristye6365592010-04-02 17:31:23 +0000994 if (*option == '+')
995 break;
996 i++;
cristybb503372010-05-27 20:51:26 +0000997 if (i == (ssize_t) (argc-1))
cristye6365592010-04-02 17:31:23 +0000998 ThrowConvertException(OptionError,"MissingArgument",option);
cristyb6bd4ad2010-08-08 01:12:27 +0000999 kernel_info=AcquireKernelInfo(argv[i]);
1000 if (kernel_info == (KernelInfo *) NULL)
cristye6365592010-04-02 17:31:23 +00001001 ThrowConvertInvalidArgumentException(option,argv[i]);
cristyb6bd4ad2010-08-08 01:12:27 +00001002 kernel_info=DestroyKernelInfo(kernel_info);
cristye6365592010-04-02 17:31:23 +00001003 break;
1004 }
cristy3ed852e2009-09-05 21:47:34 +00001005 if (LocaleCompare("colors",option+1) == 0)
1006 {
1007 if (*option == '+')
1008 break;
1009 i++;
cristybb503372010-05-27 20:51:26 +00001010 if ((i == (ssize_t) (argc-1)) ||
cristy3ed852e2009-09-05 21:47:34 +00001011 (IsGeometry(argv[i]) == MagickFalse))
1012 ThrowConvertException(OptionError,"MissingArgument",option);
1013 break;
1014 }
1015 if (LocaleCompare("colorspace",option+1) == 0)
1016 {
cristybb503372010-05-27 20:51:26 +00001017 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001018 colorspace;
1019
1020 if (*option == '+')
1021 break;
1022 i++;
cristybb503372010-05-27 20:51:26 +00001023 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001024 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001025 colorspace=ParseCommandOption(MagickColorspaceOptions,
cristy3ed852e2009-09-05 21:47:34 +00001026 MagickFalse,argv[i]);
1027 if (colorspace < 0)
1028 ThrowConvertException(OptionError,"UnrecognizedColorspace",
1029 argv[i]);
1030 break;
1031 }
1032 if (LocaleCompare("combine",option+1) == 0)
1033 break;
1034 if (LocaleCompare("comment",option+1) == 0)
1035 {
1036 if (*option == '+')
1037 break;
1038 i++;
cristybb503372010-05-27 20:51:26 +00001039 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001040 ThrowConvertException(OptionError,"MissingArgument",option);
1041 break;
1042 }
1043 if (LocaleCompare("compose",option+1) == 0)
1044 {
cristybb503372010-05-27 20:51:26 +00001045 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001046 compose;
1047
1048 if (*option == '+')
1049 break;
1050 i++;
cristybb503372010-05-27 20:51:26 +00001051 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001052 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001053 compose=ParseCommandOption(MagickComposeOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001054 argv[i]);
1055 if (compose < 0)
1056 ThrowConvertException(OptionError,"UnrecognizedComposeOperator",
1057 argv[i]);
1058 break;
1059 }
1060 if (LocaleCompare("composite",option+1) == 0)
1061 break;
1062 if (LocaleCompare("compress",option+1) == 0)
1063 {
cristybb503372010-05-27 20:51:26 +00001064 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001065 compress;
1066
1067 if (*option == '+')
1068 break;
1069 i++;
cristybb503372010-05-27 20:51:26 +00001070 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001071 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001072 compress=ParseCommandOption(MagickCompressOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001073 argv[i]);
1074 if (compress < 0)
1075 ThrowConvertException(OptionError,"UnrecognizedImageCompression",
1076 argv[i]);
1077 break;
1078 }
cristy22879752009-10-25 23:55:40 +00001079 if (LocaleCompare("concurrent",option+1) == 0)
1080 break;
cristy3ed852e2009-09-05 21:47:34 +00001081 if (LocaleCompare("contrast",option+1) == 0)
1082 break;
1083 if (LocaleCompare("contrast-stretch",option+1) == 0)
1084 {
1085 i++;
cristybb503372010-05-27 20:51:26 +00001086 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001087 ThrowConvertException(OptionError,"MissingArgument",option);
1088 if (IsGeometry(argv[i]) == MagickFalse)
1089 ThrowConvertInvalidArgumentException(option,argv[i]);
1090 break;
1091 }
1092 if (LocaleCompare("convolve",option+1) == 0)
1093 {
cristyb6bd4ad2010-08-08 01:12:27 +00001094 KernelInfo
1095 *kernel_info;
1096
cristy3ed852e2009-09-05 21:47:34 +00001097 if (*option == '+')
1098 break;
1099 i++;
cristybb503372010-05-27 20:51:26 +00001100 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001101 ThrowConvertException(OptionError,"MissingArgument",option);
cristyb6bd4ad2010-08-08 01:12:27 +00001102 kernel_info=AcquireKernelInfo(argv[i]);
1103 if (kernel_info == (KernelInfo *) NULL)
cristy3ed852e2009-09-05 21:47:34 +00001104 ThrowConvertInvalidArgumentException(option,argv[i]);
cristyb6bd4ad2010-08-08 01:12:27 +00001105 kernel_info=DestroyKernelInfo(kernel_info);
cristy3ed852e2009-09-05 21:47:34 +00001106 break;
1107 }
1108 if (LocaleCompare("crop",option+1) == 0)
1109 {
1110 if (*option == '+')
1111 break;
1112 i++;
cristybb503372010-05-27 20:51:26 +00001113 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001114 ThrowConvertException(OptionError,"MissingArgument",option);
1115 if (IsGeometry(argv[i]) == MagickFalse)
1116 ThrowConvertInvalidArgumentException(option,argv[i]);
1117 break;
1118 }
1119 if (LocaleCompare("cycle",option+1) == 0)
1120 {
1121 if (*option == '+')
1122 break;
1123 i++;
cristybb503372010-05-27 20:51:26 +00001124 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001125 ThrowConvertException(OptionError,"MissingArgument",option);
1126 if (IsGeometry(argv[i]) == MagickFalse)
1127 ThrowConvertInvalidArgumentException(option,argv[i]);
1128 break;
1129 }
1130 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1131 }
1132 case 'd':
1133 {
1134 if (LocaleCompare("decipher",option+1) == 0)
1135 {
1136 if (*option == '+')
1137 break;
1138 i++;
cristybb503372010-05-27 20:51:26 +00001139 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001140 ThrowConvertException(OptionError,"MissingArgument",option);
1141 break;
1142 }
1143 if (LocaleCompare("deconstruct",option+1) == 0)
1144 break;
1145 if (LocaleCompare("debug",option+1) == 0)
1146 {
cristybb503372010-05-27 20:51:26 +00001147 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001148 event;
1149
1150 if (*option == '+')
1151 break;
1152 i++;
cristybb503372010-05-27 20:51:26 +00001153 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001154 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001155 event=ParseCommandOption(MagickLogEventOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001156 if (event < 0)
1157 ThrowConvertException(OptionError,"UnrecognizedEventType",
1158 argv[i]);
1159 (void) SetLogEventMask(argv[i]);
1160 break;
1161 }
1162 if (LocaleCompare("define",option+1) == 0)
1163 {
1164 i++;
cristybb503372010-05-27 20:51:26 +00001165 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001166 ThrowConvertException(OptionError,"MissingArgument",option);
1167 if (*option == '+')
1168 {
1169 const char
1170 *define;
1171
1172 define=GetImageOption(image_info,argv[i]);
1173 if (define == (const char *) NULL)
1174 ThrowConvertException(OptionError,"NoSuchOption",argv[i]);
1175 break;
1176 }
1177 break;
1178 }
1179 if (LocaleCompare("delay",option+1) == 0)
1180 {
1181 if (*option == '+')
1182 break;
1183 i++;
cristybb503372010-05-27 20:51:26 +00001184 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001185 ThrowConvertException(OptionError,"MissingArgument",option);
1186 if (IsGeometry(argv[i]) == MagickFalse)
1187 ThrowConvertInvalidArgumentException(option,argv[i]);
1188 break;
1189 }
1190 if (LocaleCompare("density",option+1) == 0)
1191 {
1192 if (*option == '+')
1193 break;
1194 i++;
cristybb503372010-05-27 20:51:26 +00001195 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001196 ThrowConvertException(OptionError,"MissingArgument",option);
1197 if (IsGeometry(argv[i]) == MagickFalse)
1198 ThrowConvertInvalidArgumentException(option,argv[i]);
1199 break;
1200 }
1201 if (LocaleCompare("depth",option+1) == 0)
1202 {
1203 if (*option == '+')
1204 break;
1205 i++;
cristybb503372010-05-27 20:51:26 +00001206 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001207 ThrowConvertException(OptionError,"MissingArgument",option);
1208 if (IsGeometry(argv[i]) == MagickFalse)
1209 ThrowConvertInvalidArgumentException(option,argv[i]);
1210 break;
1211 }
1212 if (LocaleCompare("delete",option+1) == 0)
1213 {
1214 if (*option == '+')
1215 break;
1216 i++;
cristybb503372010-05-27 20:51:26 +00001217 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001218 ThrowConvertException(OptionError,"MissingArgument",option);
1219 if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
1220 ThrowConvertInvalidArgumentException(option,argv[i]);
1221 break;
1222 }
1223 if (LocaleCompare("deskew",option+1) == 0)
1224 {
1225 if (*option == '+')
1226 break;
1227 i++;
cristybb503372010-05-27 20:51:26 +00001228 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001229 ThrowConvertException(OptionError,"MissingArgument",option);
1230 if (IsGeometry(argv[i]) == MagickFalse)
1231 ThrowConvertInvalidArgumentException(option,argv[i]);
1232 break;
1233 }
1234 if (LocaleCompare("despeckle",option+1) == 0)
1235 break;
cristyc9b12952010-03-28 01:12:28 +00001236 if (LocaleCompare("direction",option+1) == 0)
1237 {
cristybb503372010-05-27 20:51:26 +00001238 ssize_t
cristyc9b12952010-03-28 01:12:28 +00001239 direction;
1240
1241 if (*option == '+')
1242 break;
1243 i++;
cristybb503372010-05-27 20:51:26 +00001244 if (i == (ssize_t) argc)
cristyc9b12952010-03-28 01:12:28 +00001245 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001246 direction=ParseCommandOption(MagickDirectionOptions,MagickFalse,
cristyc9b12952010-03-28 01:12:28 +00001247 argv[i]);
1248 if (direction < 0)
1249 ThrowConvertException(OptionError,"UnrecognizedDirectionType",
1250 argv[i]);
1251 break;
1252 }
cristy3ed852e2009-09-05 21:47:34 +00001253 if (LocaleCompare("display",option+1) == 0)
1254 {
1255 if (*option == '+')
1256 break;
1257 i++;
cristybb503372010-05-27 20:51:26 +00001258 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001259 ThrowConvertException(OptionError,"MissingArgument",option);
1260 break;
1261 }
1262 if (LocaleCompare("dispose",option+1) == 0)
1263 {
cristybb503372010-05-27 20:51:26 +00001264 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001265 dispose;
1266
1267 if (*option == '+')
1268 break;
1269 i++;
cristybb503372010-05-27 20:51:26 +00001270 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001271 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001272 dispose=ParseCommandOption(MagickDisposeOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001273 if (dispose < 0)
1274 ThrowConvertException(OptionError,"UnrecognizedDisposeMethod",
1275 argv[i]);
1276 break;
1277 }
1278 if (LocaleCompare("distort",option+1) == 0)
1279 {
cristybb503372010-05-27 20:51:26 +00001280 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001281 op;
1282
1283 i++;
cristybb503372010-05-27 20:51:26 +00001284 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001285 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001286 op=ParseCommandOption(MagickDistortOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001287 if (op < 0)
1288 ThrowConvertException(OptionError,"UnrecognizedDistortMethod",
1289 argv[i]);
1290 i++;
cristybb503372010-05-27 20:51:26 +00001291 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001292 ThrowConvertException(OptionError,"MissingArgument",option);
1293 break;
1294 }
1295 if (LocaleCompare("dither",option+1) == 0)
1296 {
cristybb503372010-05-27 20:51:26 +00001297 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001298 method;
1299
1300 if (*option == '+')
1301 break;
1302 i++;
cristybb503372010-05-27 20:51:26 +00001303 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001304 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001305 method=ParseCommandOption(MagickDitherOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001306 if (method < 0)
1307 ThrowConvertException(OptionError,"UnrecognizedDitherMethod",
1308 argv[i]);
1309 break;
1310 }
1311 if (LocaleCompare("draw",option+1) == 0)
1312 {
1313 if (*option == '+')
1314 break;
1315 i++;
cristybb503372010-05-27 20:51:26 +00001316 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001317 ThrowConvertException(OptionError,"MissingArgument",option);
1318 break;
1319 }
cristy5d28d482011-03-20 21:59:40 +00001320 if (LocaleCompare("duplicate",option+1) == 0)
1321 {
cristy5d28d482011-03-20 21:59:40 +00001322 if (*option == '+')
cristyecb10ff2011-03-22 13:14:03 +00001323 break;
1324 i++;
1325 if (i == (ssize_t) (argc-1))
1326 ThrowConvertException(OptionError,"MissingArgument",option);
1327 if (IsGeometry(argv[i]) == MagickFalse)
1328 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy5d28d482011-03-20 21:59:40 +00001329 break;
1330 }
cristy22879752009-10-25 23:55:40 +00001331 if (LocaleCompare("duration",option+1) == 0)
1332 {
1333 if (*option == '+')
1334 break;
1335 i++;
cristybb503372010-05-27 20:51:26 +00001336 if (i == (ssize_t) (argc-1))
cristy22879752009-10-25 23:55:40 +00001337 ThrowConvertException(OptionError,"MissingArgument",option);
1338 if (IsGeometry(argv[i]) == MagickFalse)
1339 ThrowConvertInvalidArgumentException(option,argv[i]);
1340 break;
1341 }
cristy3ed852e2009-09-05 21:47:34 +00001342 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1343 }
1344 case 'e':
1345 {
1346 if (LocaleCompare("edge",option+1) == 0)
1347 {
1348 if (*option == '+')
1349 break;
1350 i++;
cristybb503372010-05-27 20:51:26 +00001351 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001352 ThrowConvertException(OptionError,"MissingArgument",option);
1353 if (IsGeometry(argv[i]) == MagickFalse)
1354 ThrowConvertInvalidArgumentException(option,argv[i]);
1355 break;
1356 }
1357 if (LocaleCompare("emboss",option+1) == 0)
1358 {
1359 if (*option == '+')
1360 break;
1361 i++;
cristybb503372010-05-27 20:51:26 +00001362 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001363 ThrowConvertException(OptionError,"MissingArgument",option);
1364 if (IsGeometry(argv[i]) == MagickFalse)
1365 ThrowConvertInvalidArgumentException(option,argv[i]);
1366 break;
1367 }
1368 if (LocaleCompare("encipher",option+1) == 0)
1369 {
1370 if (*option == '+')
1371 break;
1372 i++;
cristybb503372010-05-27 20:51:26 +00001373 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001374 ThrowConvertException(OptionError,"MissingArgument",option);
1375 break;
1376 }
1377 if (LocaleCompare("encoding",option+1) == 0)
1378 {
1379 if (*option == '+')
1380 break;
1381 i++;
cristybb503372010-05-27 20:51:26 +00001382 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001383 ThrowConvertException(OptionError,"MissingArgument",option);
1384 break;
1385 }
1386 if (LocaleCompare("endian",option+1) == 0)
1387 {
cristybb503372010-05-27 20:51:26 +00001388 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001389 endian;
1390
1391 if (*option == '+')
1392 break;
1393 i++;
cristybb503372010-05-27 20:51:26 +00001394 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001395 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001396 endian=ParseCommandOption(MagickEndianOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001397 argv[i]);
1398 if (endian < 0)
1399 ThrowConvertException(OptionError,"UnrecognizedEndianType",
1400 argv[i]);
1401 break;
1402 }
1403 if (LocaleCompare("enhance",option+1) == 0)
1404 break;
1405 if (LocaleCompare("equalize",option+1) == 0)
1406 break;
1407 if (LocaleCompare("evaluate",option+1) == 0)
1408 {
cristybb503372010-05-27 20:51:26 +00001409 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001410 op;
1411
1412 if (*option == '+')
1413 break;
1414 i++;
cristybb503372010-05-27 20:51:26 +00001415 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001416 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001417 op=ParseCommandOption(MagickEvaluateOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001418 if (op < 0)
1419 ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
1420 argv[i]);
1421 i++;
cristybb503372010-05-27 20:51:26 +00001422 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001423 ThrowConvertException(OptionError,"MissingArgument",option);
1424 if (IsGeometry(argv[i]) == MagickFalse)
1425 ThrowConvertInvalidArgumentException(option,argv[i]);
1426 break;
1427 }
cristyd18ae7c2010-03-07 17:39:52 +00001428 if (LocaleCompare("evaluate-sequence",option+1) == 0)
1429 {
cristybb503372010-05-27 20:51:26 +00001430 ssize_t
cristyd18ae7c2010-03-07 17:39:52 +00001431 op;
1432
1433 if (*option == '+')
1434 break;
1435 i++;
cristybb503372010-05-27 20:51:26 +00001436 if (i == (ssize_t) argc)
cristyd18ae7c2010-03-07 17:39:52 +00001437 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001438 op=ParseCommandOption(MagickEvaluateOptions,MagickFalse,argv[i]);
cristyd18ae7c2010-03-07 17:39:52 +00001439 if (op < 0)
1440 ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
1441 argv[i]);
1442 break;
1443 }
cristy3ed852e2009-09-05 21:47:34 +00001444 if (LocaleCompare("extent",option+1) == 0)
1445 {
1446 if (*option == '+')
1447 break;
1448 i++;
cristybb503372010-05-27 20:51:26 +00001449 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001450 ThrowConvertException(OptionError,"MissingArgument",option);
1451 if (IsGeometry(argv[i]) == MagickFalse)
1452 ThrowConvertInvalidArgumentException(option,argv[i]);
1453 break;
1454 }
1455 if (LocaleCompare("extract",option+1) == 0)
1456 {
1457 if (*option == '+')
1458 break;
1459 i++;
cristybb503372010-05-27 20:51:26 +00001460 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001461 ThrowConvertException(OptionError,"MissingArgument",option);
1462 if (IsGeometry(argv[i]) == MagickFalse)
1463 ThrowConvertInvalidArgumentException(option,argv[i]);
1464 break;
1465 }
1466 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1467 }
1468 case 'f':
1469 {
1470 if (LocaleCompare("family",option+1) == 0)
1471 {
1472 if (*option == '+')
1473 break;
1474 i++;
cristybb503372010-05-27 20:51:26 +00001475 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001476 ThrowConvertException(OptionError,"MissingArgument",option);
1477 break;
1478 }
cristy14154222012-06-15 23:21:49 +00001479 if (LocaleCompare("features",option+1) == 0)
1480 {
1481 if (*option == '+')
1482 break;
1483 i++;
1484 if (i == (ssize_t) (argc-1))
1485 ThrowConvertException(OptionError,"MissingArgument",option);
1486 if (IsGeometry(argv[i]) == MagickFalse)
1487 ThrowConvertInvalidArgumentException(option,argv[i]);
1488 break;
1489 }
cristy3ed852e2009-09-05 21:47:34 +00001490 if (LocaleCompare("fft",option+1) == 0)
1491 break;
1492 if (LocaleCompare("fill",option+1) == 0)
1493 {
1494 if (*option == '+')
1495 break;
1496 i++;
cristybb503372010-05-27 20:51:26 +00001497 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001498 ThrowConvertException(OptionError,"MissingArgument",option);
1499 break;
1500 }
1501 if (LocaleCompare("filter",option+1) == 0)
1502 {
cristybb503372010-05-27 20:51:26 +00001503 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001504 filter;
1505
1506 if (*option == '+')
1507 break;
1508 i++;
cristybb503372010-05-27 20:51:26 +00001509 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001510 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001511 filter=ParseCommandOption(MagickFilterOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001512 if (filter < 0)
1513 ThrowConvertException(OptionError,"UnrecognizedImageFilter",
1514 argv[i]);
1515 break;
1516 }
1517 if (LocaleCompare("flatten",option+1) == 0)
1518 break;
1519 if (LocaleCompare("flip",option+1) == 0)
1520 break;
1521 if (LocaleCompare("flop",option+1) == 0)
1522 break;
1523 if (LocaleCompare("floodfill",option+1) == 0)
1524 {
1525 if (*option == '+')
1526 break;
1527 i++;
cristybb503372010-05-27 20:51:26 +00001528 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001529 ThrowConvertException(OptionError,"MissingArgument",option);
1530 if (IsGeometry(argv[i]) == MagickFalse)
1531 ThrowConvertInvalidArgumentException(option,argv[i]);
1532 i++;
cristybb503372010-05-27 20:51:26 +00001533 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001534 ThrowConvertException(OptionError,"MissingArgument",option);
1535 break;
1536 }
1537 if (LocaleCompare("font",option+1) == 0)
1538 {
1539 if (*option == '+')
1540 break;
1541 i++;
cristybb503372010-05-27 20:51:26 +00001542 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001543 ThrowConvertException(OptionError,"MissingArgument",option);
1544 break;
1545 }
1546 if (LocaleCompare("format",option+1) == 0)
1547 {
1548 if (*option == '+')
1549 break;
1550 i++;
cristybb503372010-05-27 20:51:26 +00001551 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001552 ThrowConvertException(OptionError,"MissingArgument",option);
1553 format=argv[i];
1554 break;
1555 }
1556 if (LocaleCompare("frame",option+1) == 0)
1557 {
1558 if (*option == '+')
1559 break;
1560 i++;
cristybb503372010-05-27 20:51:26 +00001561 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001562 ThrowConvertException(OptionError,"MissingArgument",option);
1563 if (IsGeometry(argv[i]) == MagickFalse)
1564 ThrowConvertInvalidArgumentException(option,argv[i]);
1565 break;
1566 }
1567 if (LocaleCompare("function",option+1) == 0)
1568 {
cristybb503372010-05-27 20:51:26 +00001569 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001570 op;
1571
1572 if (*option == '+')
1573 break;
1574 i++;
cristybb503372010-05-27 20:51:26 +00001575 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001576 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001577 op=ParseCommandOption(MagickFunctionOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001578 if (op < 0)
1579 ThrowConvertException(OptionError,"UnrecognizedFunction",argv[i]);
1580 i++;
cristybb503372010-05-27 20:51:26 +00001581 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001582 ThrowConvertException(OptionError,"MissingArgument",option);
1583 break;
1584 }
1585 if (LocaleCompare("fuzz",option+1) == 0)
1586 {
1587 if (*option == '+')
1588 break;
1589 i++;
cristybb503372010-05-27 20:51:26 +00001590 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001591 ThrowConvertException(OptionError,"MissingArgument",option);
1592 if (IsGeometry(argv[i]) == MagickFalse)
1593 ThrowConvertInvalidArgumentException(option,argv[i]);
1594 break;
1595 }
1596 if (LocaleCompare("fx",option+1) == 0)
1597 {
1598 if (*option == '+')
1599 break;
1600 i++;
cristybb503372010-05-27 20:51:26 +00001601 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001602 ThrowConvertException(OptionError,"MissingArgument",option);
1603 break;
1604 }
1605 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1606 }
1607 case 'g':
1608 {
1609 if (LocaleCompare("gamma",option+1) == 0)
1610 {
1611 i++;
cristybb503372010-05-27 20:51:26 +00001612 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001613 ThrowConvertException(OptionError,"MissingArgument",option);
1614 if (IsGeometry(argv[i]) == MagickFalse)
1615 ThrowConvertInvalidArgumentException(option,argv[i]);
1616 break;
1617 }
1618 if ((LocaleCompare("gaussian-blur",option+1) == 0) ||
1619 (LocaleCompare("gaussian",option+1) == 0))
1620 {
1621 i++;
cristybb503372010-05-27 20:51:26 +00001622 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001623 ThrowConvertException(OptionError,"MissingArgument",option);
1624 if (IsGeometry(argv[i]) == MagickFalse)
1625 ThrowConvertInvalidArgumentException(option,argv[i]);
1626 break;
1627 }
1628 if (LocaleCompare("geometry",option+1) == 0)
1629 {
1630 if (*option == '+')
1631 break;
1632 i++;
cristybb503372010-05-27 20:51:26 +00001633 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001634 ThrowConvertException(OptionError,"MissingArgument",option);
1635 if (IsGeometry(argv[i]) == MagickFalse)
1636 ThrowConvertInvalidArgumentException(option,argv[i]);
1637 break;
1638 }
1639 if (LocaleCompare("gravity",option+1) == 0)
1640 {
cristybb503372010-05-27 20:51:26 +00001641 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001642 gravity;
1643
1644 if (*option == '+')
1645 break;
1646 i++;
cristybb503372010-05-27 20:51:26 +00001647 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001648 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001649 gravity=ParseCommandOption(MagickGravityOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001650 argv[i]);
1651 if (gravity < 0)
1652 ThrowConvertException(OptionError,"UnrecognizedGravityType",
1653 argv[i]);
1654 break;
1655 }
1656 if (LocaleCompare("green-primary",option+1) == 0)
1657 {
1658 if (*option == '+')
1659 break;
1660 i++;
cristybb503372010-05-27 20:51:26 +00001661 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001662 ThrowConvertException(OptionError,"MissingArgument",option);
1663 if (IsGeometry(argv[i]) == MagickFalse)
1664 ThrowConvertInvalidArgumentException(option,argv[i]);
1665 break;
1666 }
1667 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1668 }
1669 case 'h':
1670 {
1671 if (LocaleCompare("hald-clut",option+1) == 0)
1672 break;
1673 if ((LocaleCompare("help",option+1) == 0) ||
1674 (LocaleCompare("-help",option+1) == 0))
1675 return(ConvertUsage());
1676 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1677 }
1678 case 'i':
1679 {
1680 if (LocaleCompare("identify",option+1) == 0)
1681 break;
1682 if (LocaleCompare("ift",option+1) == 0)
1683 break;
1684 if (LocaleCompare("implode",option+1) == 0)
1685 {
1686 if (*option == '+')
1687 break;
1688 i++;
cristybb503372010-05-27 20:51:26 +00001689 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001690 ThrowConvertException(OptionError,"MissingArgument",option);
1691 if (IsGeometry(argv[i]) == MagickFalse)
1692 ThrowConvertInvalidArgumentException(option,argv[i]);
1693 break;
1694 }
1695 if (LocaleCompare("insert",option+1) == 0)
1696 {
1697 if (*option == '+')
1698 break;
1699 i++;
cristybb503372010-05-27 20:51:26 +00001700 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001701 ThrowConvertException(OptionError,"MissingArgument",option);
1702 if (IsGeometry(argv[i]) == MagickFalse)
1703 ThrowConvertInvalidArgumentException(option,argv[i]);
1704 break;
1705 }
1706 if (LocaleCompare("intent",option+1) == 0)
1707 {
cristybb503372010-05-27 20:51:26 +00001708 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001709 intent;
1710
1711 if (*option == '+')
1712 break;
1713 i++;
cristybb503372010-05-27 20:51:26 +00001714 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001715 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001716 intent=ParseCommandOption(MagickIntentOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001717 argv[i]);
1718 if (intent < 0)
1719 ThrowConvertException(OptionError,"UnrecognizedIntentType",
1720 argv[i]);
1721 break;
1722 }
1723 if (LocaleCompare("interlace",option+1) == 0)
1724 {
cristybb503372010-05-27 20:51:26 +00001725 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001726 interlace;
1727
1728 if (*option == '+')
1729 break;
1730 i++;
cristybb503372010-05-27 20:51:26 +00001731 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001732 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001733 interlace=ParseCommandOption(MagickInterlaceOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001734 argv[i]);
1735 if (interlace < 0)
1736 ThrowConvertException(OptionError,"UnrecognizedInterlaceType",
1737 argv[i]);
1738 break;
1739 }
cristyb32b90a2009-09-07 21:45:48 +00001740 if (LocaleCompare("interline-spacing",option+1) == 0)
1741 {
1742 if (*option == '+')
1743 break;
1744 i++;
cristybb503372010-05-27 20:51:26 +00001745 if (i == (ssize_t) (argc-1))
cristyb32b90a2009-09-07 21:45:48 +00001746 ThrowConvertException(OptionError,"MissingArgument",option);
1747 if (IsGeometry(argv[i]) == MagickFalse)
1748 ThrowConvertInvalidArgumentException(option,argv[i]);
1749 break;
1750 }
cristy3ed852e2009-09-05 21:47:34 +00001751 if (LocaleCompare("interpolate",option+1) == 0)
1752 {
cristybb503372010-05-27 20:51:26 +00001753 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001754 interpolate;
1755
1756 if (*option == '+')
1757 break;
1758 i++;
cristybb503372010-05-27 20:51:26 +00001759 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001760 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001761 interpolate=ParseCommandOption(MagickInterpolateOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001762 argv[i]);
1763 if (interpolate < 0)
1764 ThrowConvertException(OptionError,"UnrecognizedInterpolateMethod",
1765 argv[i]);
1766 break;
1767 }
1768 if (LocaleCompare("interword-spacing",option+1) == 0)
1769 {
1770 if (*option == '+')
1771 break;
1772 i++;
cristybb503372010-05-27 20:51:26 +00001773 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001774 ThrowConvertException(OptionError,"MissingArgument",option);
1775 if (IsGeometry(argv[i]) == MagickFalse)
1776 ThrowConvertInvalidArgumentException(option,argv[i]);
1777 break;
1778 }
1779 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1780 }
1781 case 'k':
1782 {
1783 if (LocaleCompare("kerning",option+1) == 0)
1784 {
1785 if (*option == '+')
1786 break;
1787 i++;
cristybb503372010-05-27 20:51:26 +00001788 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001789 ThrowConvertException(OptionError,"MissingArgument",option);
1790 if (IsGeometry(argv[i]) == MagickFalse)
1791 ThrowConvertInvalidArgumentException(option,argv[i]);
1792 break;
1793 }
1794 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1795 }
1796 case 'l':
1797 {
1798 if (LocaleCompare("label",option+1) == 0)
1799 {
1800 if (*option == '+')
1801 break;
1802 i++;
cristybb503372010-05-27 20:51:26 +00001803 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001804 ThrowConvertException(OptionError,"MissingArgument",option);
1805 break;
1806 }
1807 if (LocaleCompare("lat",option+1) == 0)
1808 {
1809 if (*option == '+')
1810 break;
1811 i++;
cristybb503372010-05-27 20:51:26 +00001812 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001813 ThrowConvertException(OptionError,"MissingArgument",option);
1814 if (IsGeometry(argv[i]) == MagickFalse)
1815 ThrowConvertInvalidArgumentException(option,argv[i]);
1816 break;
1817 }
1818 if (LocaleCompare("layers",option+1) == 0)
1819 {
cristybb503372010-05-27 20:51:26 +00001820 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001821 type;
1822
1823 if (*option == '+')
1824 break;
1825 i++;
cristybb503372010-05-27 20:51:26 +00001826 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001827 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001828 type=ParseCommandOption(MagickLayerOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001829 if (type < 0)
1830 ThrowConvertException(OptionError,"UnrecognizedLayerMethod",
1831 argv[i]);
1832 break;
1833 }
1834 if (LocaleCompare("level",option+1) == 0)
1835 {
1836 i++;
cristybb503372010-05-27 20:51:26 +00001837 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001838 ThrowConvertException(OptionError,"MissingArgument",option);
1839 if (IsGeometry(argv[i]) == MagickFalse)
1840 ThrowConvertInvalidArgumentException(option,argv[i]);
1841 break;
1842 }
1843 if (LocaleCompare("level-colors",option+1) == 0)
1844 {
1845 i++;
cristybb503372010-05-27 20:51:26 +00001846 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001847 ThrowConvertException(OptionError,"MissingArgument",option);
1848 break;
1849 }
cristy3ed852e2009-09-05 21:47:34 +00001850 if (LocaleCompare("limit",option+1) == 0)
1851 {
1852 char
1853 *p;
1854
1855 double
1856 value;
1857
cristybb503372010-05-27 20:51:26 +00001858 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001859 resource;
1860
1861 if (*option == '+')
1862 break;
1863 i++;
cristybb503372010-05-27 20:51:26 +00001864 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001865 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001866 resource=ParseCommandOption(MagickResourceOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00001867 argv[i]);
1868 if (resource < 0)
1869 ThrowConvertException(OptionError,"UnrecognizedResourceType",
1870 argv[i]);
1871 i++;
cristybb503372010-05-27 20:51:26 +00001872 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001873 ThrowConvertException(OptionError,"MissingArgument",option);
cristydbdd0e32011-11-04 23:29:40 +00001874 value=StringToDouble(argv[i],&p);
cristyda16f162011-02-19 23:52:17 +00001875 (void) value;
cristy3ed852e2009-09-05 21:47:34 +00001876 if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
1877 ThrowConvertInvalidArgumentException(option,argv[i]);
1878 break;
1879 }
1880 if (LocaleCompare("linear-stretch",option+1) == 0)
1881 {
1882 i++;
cristybb503372010-05-27 20:51:26 +00001883 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001884 ThrowConvertException(OptionError,"MissingArgument",option);
1885 if (IsGeometry(argv[i]) == MagickFalse)
1886 ThrowConvertInvalidArgumentException(option,argv[i]);
1887 break;
1888 }
anthonyef0daa62012-03-24 13:43:59 +00001889 if (LocaleCompare("liquid-rescale",option+1) == 0)
1890 {
1891 i++;
1892 if (i == (ssize_t) (argc-1))
1893 ThrowConvertException(OptionError,"MissingArgument",option);
1894 if (IsGeometry(argv[i]) == MagickFalse)
1895 ThrowConvertInvalidArgumentException(option,argv[i]);
1896 break;
1897 }
cristy3ed852e2009-09-05 21:47:34 +00001898 if (LocaleCompare("list",option+1) == 0)
1899 {
cristybb503372010-05-27 20:51:26 +00001900 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00001901 list;
1902
1903 if (*option == '+')
1904 break;
1905 i++;
cristybb503372010-05-27 20:51:26 +00001906 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00001907 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00001908 list=ParseCommandOption(MagickListOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00001909 if (list < 0)
1910 ThrowConvertException(OptionError,"UnrecognizedListType",argv[i]);
cristyaeb2cbc2010-05-07 13:28:58 +00001911 status=MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
cristy3ed852e2009-09-05 21:47:34 +00001912 argv+j,exception);
1913 DestroyConvert();
cristyaeb2cbc2010-05-07 13:28:58 +00001914 return(status != 0 ? MagickFalse : MagickTrue);
cristy3ed852e2009-09-05 21:47:34 +00001915 }
1916 if (LocaleCompare("log",option+1) == 0)
1917 {
1918 if (*option == '+')
1919 break;
1920 i++;
cristybb503372010-05-27 20:51:26 +00001921 if ((i == (ssize_t) argc) ||
cristy3ed852e2009-09-05 21:47:34 +00001922 (strchr(argv[i],'%') == (char *) NULL))
1923 ThrowConvertException(OptionError,"MissingArgument",option);
1924 break;
1925 }
1926 if (LocaleCompare("loop",option+1) == 0)
1927 {
1928 if (*option == '+')
1929 break;
1930 i++;
cristybb503372010-05-27 20:51:26 +00001931 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001932 ThrowConvertException(OptionError,"MissingArgument",option);
1933 if (IsGeometry(argv[i]) == MagickFalse)
1934 ThrowConvertInvalidArgumentException(option,argv[i]);
1935 break;
1936 }
1937 ThrowConvertException(OptionError,"UnrecognizedOption",option)
1938 }
1939 case 'm':
1940 {
1941 if (LocaleCompare("map",option+1) == 0)
1942 {
1943 if (*option == '+')
1944 break;
1945 i++;
cristybb503372010-05-27 20:51:26 +00001946 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001947 ThrowConvertException(OptionError,"MissingArgument",option);
1948 break;
1949 }
1950 if (LocaleCompare("mask",option+1) == 0)
1951 {
1952 if (*option == '+')
1953 break;
1954 i++;
cristybb503372010-05-27 20:51:26 +00001955 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001956 ThrowConvertException(OptionError,"MissingArgument",option);
1957 break;
1958 }
1959 if (LocaleCompare("matte",option+1) == 0)
1960 break;
1961 if (LocaleCompare("mattecolor",option+1) == 0)
1962 {
1963 if (*option == '+')
1964 break;
1965 i++;
cristybb503372010-05-27 20:51:26 +00001966 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001967 ThrowConvertException(OptionError,"MissingArgument",option);
1968 break;
1969 }
cristy875e28a2010-03-06 19:46:55 +00001970 if (LocaleCompare("maximum",option+1) == 0)
cristy1c274c92010-03-06 02:06:45 +00001971 break;
cristy3ed852e2009-09-05 21:47:34 +00001972 if (LocaleCompare("median",option+1) == 0)
1973 {
1974 if (*option == '+')
1975 break;
1976 i++;
cristybb503372010-05-27 20:51:26 +00001977 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00001978 ThrowConvertException(OptionError,"MissingArgument",option);
1979 if (IsGeometry(argv[i]) == MagickFalse)
1980 ThrowConvertInvalidArgumentException(option,argv[i]);
1981 break;
1982 }
cristy875e28a2010-03-06 19:46:55 +00001983 if (LocaleCompare("minimum",option+1) == 0)
cristy1c274c92010-03-06 02:06:45 +00001984 break;
cristyd28f7532011-02-27 23:57:37 +00001985 if (LocaleCompare("mode",option+1) == 0)
1986 {
1987 if (*option == '+')
1988 break;
1989 i++;
1990 if (i == (ssize_t) (argc-1))
1991 ThrowConvertException(OptionError,"MissingArgument",option);
1992 if (IsGeometry(argv[i]) == MagickFalse)
1993 ThrowConvertInvalidArgumentException(option,argv[i]);
1994 break;
1995 }
cristy3ed852e2009-09-05 21:47:34 +00001996 if (LocaleCompare("modulate",option+1) == 0)
1997 {
1998 if (*option == '+')
1999 break;
2000 i++;
cristybb503372010-05-27 20:51:26 +00002001 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002002 ThrowConvertException(OptionError,"MissingArgument",option);
2003 if (IsGeometry(argv[i]) == MagickFalse)
2004 ThrowConvertInvalidArgumentException(option,argv[i]);
2005 break;
2006 }
2007 if (LocaleCompare("monitor",option+1) == 0)
2008 break;
2009 if (LocaleCompare("monochrome",option+1) == 0)
2010 break;
2011 if (LocaleCompare("morph",option+1) == 0)
2012 {
2013 if (*option == '+')
2014 break;
2015 i++;
cristybb503372010-05-27 20:51:26 +00002016 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002017 ThrowConvertException(OptionError,"MissingArgument",option);
2018 if (IsGeometry(argv[i]) == MagickFalse)
2019 ThrowConvertInvalidArgumentException(option,argv[i]);
2020 break;
2021 }
anthony29188a82010-01-22 10:12:34 +00002022 if (LocaleCompare("morphology",option+1) == 0)
2023 {
anthony29188a82010-01-22 10:12:34 +00002024 char
2025 token[MaxTextExtent];
2026
cristyb6bd4ad2010-08-08 01:12:27 +00002027 KernelInfo
2028 *kernel_info;
2029
cristybb503372010-05-27 20:51:26 +00002030 ssize_t
cristye6365592010-04-02 17:31:23 +00002031 op;
2032
anthony29188a82010-01-22 10:12:34 +00002033 i++;
cristybb503372010-05-27 20:51:26 +00002034 if (i == (ssize_t) argc)
anthony29188a82010-01-22 10:12:34 +00002035 ThrowConvertException(OptionError,"MissingArgument",option);
2036 GetMagickToken(argv[i],NULL,token);
cristy042ee782011-04-22 18:48:30 +00002037 op=ParseCommandOption(MagickMorphologyOptions,MagickFalse,token);
anthony29188a82010-01-22 10:12:34 +00002038 if (op < 0)
2039 ThrowConvertException(OptionError,"UnrecognizedMorphologyMethod",
cristye6365592010-04-02 17:31:23 +00002040 token);
anthony29188a82010-01-22 10:12:34 +00002041 i++;
cristybb503372010-05-27 20:51:26 +00002042 if (i == (ssize_t) (argc-1))
anthony29188a82010-01-22 10:12:34 +00002043 ThrowConvertException(OptionError,"MissingArgument",option);
cristyb6bd4ad2010-08-08 01:12:27 +00002044 kernel_info=AcquireKernelInfo(argv[i]);
2045 if (kernel_info == (KernelInfo *) NULL)
anthony29188a82010-01-22 10:12:34 +00002046 ThrowConvertInvalidArgumentException(option,argv[i]);
cristyb6bd4ad2010-08-08 01:12:27 +00002047 kernel_info=DestroyKernelInfo(kernel_info);
anthony29188a82010-01-22 10:12:34 +00002048 break;
2049 }
cristy3ed852e2009-09-05 21:47:34 +00002050 if (LocaleCompare("mosaic",option+1) == 0)
2051 break;
2052 if (LocaleCompare("motion-blur",option+1) == 0)
2053 {
2054 if (*option == '+')
2055 break;
2056 i++;
cristybb503372010-05-27 20:51:26 +00002057 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002058 ThrowConvertException(OptionError,"MissingArgument",option);
2059 if (IsGeometry(argv[i]) == MagickFalse)
2060 ThrowConvertInvalidArgumentException(option,argv[i]);
2061 break;
2062 }
2063 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2064 }
2065 case 'n':
2066 {
2067 if (LocaleCompare("negate",option+1) == 0)
2068 break;
2069 if (LocaleCompare("noise",option+1) == 0)
2070 {
2071 i++;
cristybb503372010-05-27 20:51:26 +00002072 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002073 ThrowConvertException(OptionError,"MissingArgument",option);
2074 if (*option == '+')
2075 {
cristybb503372010-05-27 20:51:26 +00002076 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002077 noise;
2078
cristy042ee782011-04-22 18:48:30 +00002079 noise=ParseCommandOption(MagickNoiseOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002080 if (noise < 0)
2081 ThrowConvertException(OptionError,"UnrecognizedNoiseType",
2082 argv[i]);
2083 break;
2084 }
2085 if (IsGeometry(argv[i]) == MagickFalse)
2086 ThrowConvertInvalidArgumentException(option,argv[i]);
2087 break;
2088 }
2089 if (LocaleCompare("noop",option+1) == 0)
2090 break;
2091 if (LocaleCompare("normalize",option+1) == 0)
2092 break;
2093 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2094 }
2095 case 'o':
2096 {
2097 if (LocaleCompare("opaque",option+1) == 0)
2098 {
2099 i++;
cristybb503372010-05-27 20:51:26 +00002100 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002101 ThrowConvertException(OptionError,"MissingArgument",option);
2102 break;
2103 }
2104 if (LocaleCompare("ordered-dither",option+1) == 0)
2105 {
2106 if (*option == '+')
2107 break;
2108 i++;
cristybb503372010-05-27 20:51:26 +00002109 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002110 ThrowConvertException(OptionError,"MissingArgument",option);
2111 break;
2112 }
2113 if (LocaleCompare("orient",option+1) == 0)
2114 {
cristybb503372010-05-27 20:51:26 +00002115 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002116 orientation;
2117
2118 if (*option == '+')
2119 break;
2120 i++;
cristybb503372010-05-27 20:51:26 +00002121 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002122 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002123 orientation=ParseCommandOption(MagickOrientationOptions,
cristy3ed852e2009-09-05 21:47:34 +00002124 MagickFalse,argv[i]);
2125 if (orientation < 0)
2126 ThrowConvertException(OptionError,"UnrecognizedImageOrientation",
2127 argv[i]);
2128 break;
2129 }
2130 ThrowConvertException(OptionError,"UnrecognizedOption",argv[i])
2131 }
2132 case 'p':
2133 {
2134 if (LocaleCompare("page",option+1) == 0)
2135 {
2136 if (*option == '+')
2137 break;
2138 i++;
cristybb503372010-05-27 20:51:26 +00002139 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002140 ThrowConvertException(OptionError,"MissingArgument",option);
2141 break;
2142 }
2143 if (LocaleCompare("paint",option+1) == 0)
2144 {
2145 if (*option == '+')
2146 break;
2147 i++;
cristybb503372010-05-27 20:51:26 +00002148 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002149 ThrowConvertException(OptionError,"MissingArgument",option);
2150 if (IsGeometry(argv[i]) == MagickFalse)
2151 ThrowConvertInvalidArgumentException(option,argv[i]);
2152 break;
2153 }
2154 if (LocaleCompare("ping",option+1) == 0)
2155 break;
2156 if (LocaleCompare("pointsize",option+1) == 0)
2157 {
2158 if (*option == '+')
2159 break;
2160 i++;
cristybb503372010-05-27 20:51:26 +00002161 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002162 ThrowConvertException(OptionError,"MissingArgument",option);
2163 if (IsGeometry(argv[i]) == MagickFalse)
2164 ThrowConvertInvalidArgumentException(option,argv[i]);
2165 break;
2166 }
2167 if (LocaleCompare("polaroid",option+1) == 0)
2168 {
2169 if (*option == '+')
2170 break;
2171 i++;
cristybb503372010-05-27 20:51:26 +00002172 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002173 ThrowConvertException(OptionError,"MissingArgument",option);
2174 if (IsGeometry(argv[i]) == MagickFalse)
2175 ThrowConvertInvalidArgumentException(option,argv[i]);
2176 break;
2177 }
2178 if (LocaleCompare("posterize",option+1) == 0)
2179 {
2180 if (*option == '+')
2181 break;
2182 i++;
cristybb503372010-05-27 20:51:26 +00002183 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002184 ThrowConvertException(OptionError,"MissingArgument",option);
2185 if (IsGeometry(argv[i]) == MagickFalse)
2186 ThrowConvertInvalidArgumentException(option,argv[i]);
2187 break;
2188 }
cristye7f51092010-01-17 00:39:37 +00002189 if (LocaleCompare("precision",option+1) == 0)
2190 {
2191 if (*option == '+')
2192 break;
2193 i++;
cristybb503372010-05-27 20:51:26 +00002194 if (i == (ssize_t) (argc-1))
cristye7f51092010-01-17 00:39:37 +00002195 ThrowConvertException(OptionError,"MissingArgument",option);
2196 if (IsGeometry(argv[i]) == MagickFalse)
2197 ThrowConvertInvalidArgumentException(option,argv[i]);
2198 break;
2199 }
cristy3ed852e2009-09-05 21:47:34 +00002200 if (LocaleCompare("preview",option+1) == 0)
2201 {
cristybb503372010-05-27 20:51:26 +00002202 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002203 preview;
2204
2205 if (*option == '+')
2206 break;
2207 i++;
cristybb503372010-05-27 20:51:26 +00002208 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002209 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002210 preview=ParseCommandOption(MagickPreviewOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00002211 argv[i]);
2212 if (preview < 0)
2213 ThrowConvertException(OptionError,"UnrecognizedPreviewType",
2214 argv[i]);
2215 break;
2216 }
2217 if (LocaleCompare("print",option+1) == 0)
2218 {
2219 if (*option == '+')
2220 break;
2221 i++;
cristybb503372010-05-27 20:51:26 +00002222 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002223 ThrowConvertException(OptionError,"MissingArgument",option);
2224 break;
2225 }
2226 if (LocaleCompare("process",option+1) == 0)
2227 {
2228 if (*option == '+')
2229 break;
2230 i++;
cristybb503372010-05-27 20:51:26 +00002231 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002232 ThrowConvertException(OptionError,"MissingArgument",option);
2233 break;
2234 }
2235 if (LocaleCompare("profile",option+1) == 0)
2236 {
2237 i++;
cristybb503372010-05-27 20:51:26 +00002238 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002239 ThrowConvertException(OptionError,"MissingArgument",option);
2240 break;
2241 }
2242 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2243 }
2244 case 'q':
2245 {
2246 if (LocaleCompare("quality",option+1) == 0)
2247 {
2248 if (*option == '+')
2249 break;
2250 i++;
cristybb503372010-05-27 20:51:26 +00002251 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002252 ThrowConvertException(OptionError,"MissingArgument",option);
2253 if (IsGeometry(argv[i]) == MagickFalse)
2254 ThrowConvertInvalidArgumentException(option,argv[i]);
2255 break;
2256 }
2257 if (LocaleCompare("quantize",option+1) == 0)
2258 {
cristybb503372010-05-27 20:51:26 +00002259 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002260 colorspace;
2261
2262 if (*option == '+')
2263 break;
2264 i++;
cristybb503372010-05-27 20:51:26 +00002265 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002266 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002267 colorspace=ParseCommandOption(MagickColorspaceOptions,
cristy3ed852e2009-09-05 21:47:34 +00002268 MagickFalse,argv[i]);
2269 if (colorspace < 0)
2270 ThrowConvertException(OptionError,"UnrecognizedColorspace",
2271 argv[i]);
2272 break;
2273 }
2274 if (LocaleCompare("quiet",option+1) == 0)
2275 break;
2276 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2277 }
2278 case 'r':
2279 {
2280 if (LocaleCompare("radial-blur",option+1) == 0)
2281 {
2282 i++;
cristybb503372010-05-27 20:51:26 +00002283 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002284 ThrowConvertException(OptionError,"MissingArgument",option);
2285 if (IsGeometry(argv[i]) == MagickFalse)
2286 ThrowConvertInvalidArgumentException(option,argv[i]);
2287 break;
2288 }
2289 if (LocaleCompare("raise",option+1) == 0)
2290 {
2291 i++;
cristybb503372010-05-27 20:51:26 +00002292 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002293 ThrowConvertException(OptionError,"MissingArgument",option);
2294 if (IsGeometry(argv[i]) == MagickFalse)
2295 ThrowConvertInvalidArgumentException(option,argv[i]);
2296 break;
2297 }
2298 if (LocaleCompare("random-threshold",option+1) == 0)
2299 {
2300 if (*option == '+')
2301 break;
2302 i++;
cristybb503372010-05-27 20:51:26 +00002303 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002304 ThrowConvertException(OptionError,"MissingArgument",option);
2305 if (IsGeometry(argv[i]) == MagickFalse)
2306 ThrowConvertInvalidArgumentException(option,argv[i]);
2307 break;
2308 }
cristy3ed852e2009-09-05 21:47:34 +00002309 if (LocaleCompare("red-primary",option+1) == 0)
2310 {
2311 if (*option == '+')
2312 break;
2313 i++;
cristybb503372010-05-27 20:51:26 +00002314 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002315 ThrowConvertException(OptionError,"MissingArgument",option);
2316 if (IsGeometry(argv[i]) == MagickFalse)
2317 ThrowConvertInvalidArgumentException(option,argv[i]);
2318 break;
2319 }
2320 if (LocaleCompare("regard-warnings",option+1) == 0)
2321 break;
2322 if (LocaleCompare("region",option+1) == 0)
2323 {
2324 if (*option == '+')
2325 break;
2326 i++;
cristybb503372010-05-27 20:51:26 +00002327 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002328 ThrowConvertException(OptionError,"MissingArgument",option);
2329 if (IsGeometry(argv[i]) == MagickFalse)
2330 ThrowConvertInvalidArgumentException(option,argv[i]);
2331 break;
2332 }
2333 if (LocaleCompare("remap",option+1) == 0)
2334 {
2335 if (*option == '+')
2336 break;
2337 i++;
cristybb503372010-05-27 20:51:26 +00002338 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002339 ThrowConvertException(OptionError,"MissingArgument",option);
2340 break;
2341 }
2342 if (LocaleCompare("render",option+1) == 0)
2343 break;
2344 if (LocaleCompare("repage",option+1) == 0)
2345 {
2346 if (*option == '+')
2347 break;
2348 i++;
cristybb503372010-05-27 20:51:26 +00002349 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002350 ThrowConvertException(OptionError,"MissingArgument",option);
2351 if (IsGeometry(argv[i]) == MagickFalse)
2352 ThrowConvertInvalidArgumentException(option,argv[i]);
2353 break;
2354 }
2355 if (LocaleCompare("resample",option+1) == 0)
2356 {
2357 if (*option == '+')
2358 break;
2359 i++;
cristybb503372010-05-27 20:51:26 +00002360 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002361 ThrowConvertException(OptionError,"MissingArgument",option);
2362 if (IsGeometry(argv[i]) == MagickFalse)
2363 ThrowConvertInvalidArgumentException(option,argv[i]);
2364 break;
2365 }
2366 if (LocaleCompare("resize",option+1) == 0)
2367 {
2368 if (*option == '+')
2369 break;
2370 i++;
cristybb503372010-05-27 20:51:26 +00002371 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002372 ThrowConvertException(OptionError,"MissingArgument",option);
2373 if (IsGeometry(argv[i]) == MagickFalse)
2374 ThrowConvertInvalidArgumentException(option,argv[i]);
2375 break;
2376 }
2377 if (LocaleNCompare("respect-parentheses",option+1,17) == 0)
2378 {
2379 respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
2380 break;
2381 }
2382 if (LocaleCompare("reverse",option+1) == 0)
2383 break;
2384 if (LocaleCompare("roll",option+1) == 0)
2385 {
2386 if (*option == '+')
2387 break;
2388 i++;
cristybb503372010-05-27 20:51:26 +00002389 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002390 ThrowConvertException(OptionError,"MissingArgument",option);
2391 if (IsGeometry(argv[i]) == MagickFalse)
2392 ThrowConvertInvalidArgumentException(option,argv[i]);
2393 break;
2394 }
2395 if (LocaleCompare("rotate",option+1) == 0)
2396 {
2397 i++;
cristybb503372010-05-27 20:51:26 +00002398 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002399 ThrowConvertException(OptionError,"MissingArgument",option);
2400 if (IsGeometry(argv[i]) == MagickFalse)
2401 ThrowConvertInvalidArgumentException(option,argv[i]);
2402 break;
2403 }
2404 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2405 }
2406 case 's':
2407 {
2408 if (LocaleCompare("sample",option+1) == 0)
2409 {
2410 if (*option == '+')
2411 break;
2412 i++;
cristybb503372010-05-27 20:51:26 +00002413 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002414 ThrowConvertException(OptionError,"MissingArgument",option);
2415 if (IsGeometry(argv[i]) == MagickFalse)
2416 ThrowConvertInvalidArgumentException(option,argv[i]);
2417 break;
2418 }
2419 if (LocaleCompare("sampling-factor",option+1) == 0)
2420 {
2421 if (*option == '+')
2422 break;
2423 i++;
cristybb503372010-05-27 20:51:26 +00002424 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002425 ThrowConvertException(OptionError,"MissingArgument",option);
2426 if (IsGeometry(argv[i]) == MagickFalse)
2427 ThrowConvertInvalidArgumentException(option,argv[i]);
2428 break;
2429 }
2430 if (LocaleCompare("scale",option+1) == 0)
2431 {
2432 if (*option == '+')
2433 break;
2434 i++;
cristybb503372010-05-27 20:51:26 +00002435 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002436 ThrowConvertException(OptionError,"MissingArgument",option);
2437 if (IsGeometry(argv[i]) == MagickFalse)
2438 ThrowConvertInvalidArgumentException(option,argv[i]);
2439 break;
2440 }
2441 if (LocaleCompare("scene",option+1) == 0)
2442 {
2443 if (*option == '+')
2444 break;
2445 i++;
cristybb503372010-05-27 20:51:26 +00002446 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002447 ThrowConvertException(OptionError,"MissingArgument",option);
2448 if (IsGeometry(argv[i]) == MagickFalse)
2449 ThrowConvertInvalidArgumentException(option,argv[i]);
2450 break;
2451 }
2452 if (LocaleCompare("seed",option+1) == 0)
2453 {
2454 if (*option == '+')
2455 break;
2456 i++;
cristybb503372010-05-27 20:51:26 +00002457 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002458 ThrowConvertException(OptionError,"MissingArgument",option);
2459 if (IsGeometry(argv[i]) == MagickFalse)
2460 ThrowConvertInvalidArgumentException(option,argv[i]);
2461 break;
2462 }
2463 if (LocaleCompare("segment",option+1) == 0)
2464 {
2465 if (*option == '+')
2466 break;
2467 i++;
cristybb503372010-05-27 20:51:26 +00002468 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002469 ThrowConvertException(OptionError,"MissingArgument",option);
2470 if (IsGeometry(argv[i]) == MagickFalse)
2471 ThrowConvertInvalidArgumentException(option,argv[i]);
2472 break;
2473 }
2474 if (LocaleCompare("selective-blur",option+1) == 0)
2475 {
2476 i++;
cristybb503372010-05-27 20:51:26 +00002477 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002478 ThrowConvertException(OptionError,"MissingArgument",option);
2479 if (IsGeometry(argv[i]) == MagickFalse)
2480 ThrowConvertInvalidArgumentException(option,argv[i]);
2481 break;
2482 }
2483 if (LocaleCompare("separate",option+1) == 0)
2484 break;
2485 if (LocaleCompare("sepia-tone",option+1) == 0)
2486 {
2487 if (*option == '+')
2488 break;
2489 i++;
cristybb503372010-05-27 20:51:26 +00002490 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002491 ThrowConvertException(OptionError,"MissingArgument",option);
2492 if (IsGeometry(argv[i]) == MagickFalse)
2493 ThrowConvertInvalidArgumentException(option,argv[i]);
2494 break;
2495 }
2496 if (LocaleCompare("set",option+1) == 0)
2497 {
2498 i++;
cristybb503372010-05-27 20:51:26 +00002499 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002500 ThrowConvertException(OptionError,"MissingArgument",option);
2501 if (*option == '+')
2502 break;
2503 i++;
cristybb503372010-05-27 20:51:26 +00002504 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002505 ThrowConvertException(OptionError,"MissingArgument",option);
2506 break;
2507 }
2508 if (LocaleCompare("shade",option+1) == 0)
2509 {
2510 i++;
cristybb503372010-05-27 20:51:26 +00002511 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002512 ThrowConvertException(OptionError,"MissingArgument",option);
2513 if (IsGeometry(argv[i]) == MagickFalse)
2514 ThrowConvertInvalidArgumentException(option,argv[i]);
2515 break;
2516 }
2517 if (LocaleCompare("shadow",option+1) == 0)
2518 {
2519 if (*option == '+')
2520 break;
2521 i++;
cristybb503372010-05-27 20:51:26 +00002522 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002523 ThrowConvertException(OptionError,"MissingArgument",option);
2524 if (IsGeometry(argv[i]) == MagickFalse)
2525 ThrowConvertInvalidArgumentException(option,argv[i]);
2526 break;
2527 }
2528 if (LocaleCompare("sharpen",option+1) == 0)
2529 {
2530 i++;
cristybb503372010-05-27 20:51:26 +00002531 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002532 ThrowConvertException(OptionError,"MissingArgument",option);
2533 if (IsGeometry(argv[i]) == MagickFalse)
2534 ThrowConvertInvalidArgumentException(option,argv[i]);
2535 break;
2536 }
2537 if (LocaleCompare("shave",option+1) == 0)
2538 {
2539 if (*option == '+')
2540 break;
2541 i++;
cristybb503372010-05-27 20:51:26 +00002542 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002543 ThrowConvertException(OptionError,"MissingArgument",option);
2544 if (IsGeometry(argv[i]) == MagickFalse)
2545 ThrowConvertInvalidArgumentException(option,argv[i]);
2546 break;
2547 }
2548 if (LocaleCompare("shear",option+1) == 0)
2549 {
2550 i++;
cristybb503372010-05-27 20:51:26 +00002551 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002552 ThrowConvertException(OptionError,"MissingArgument",option);
2553 if (IsGeometry(argv[i]) == MagickFalse)
2554 ThrowConvertInvalidArgumentException(option,argv[i]);
2555 break;
2556 }
2557 if (LocaleCompare("sigmoidal-contrast",option+1) == 0)
2558 {
2559 i++;
cristybb503372010-05-27 20:51:26 +00002560 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002561 ThrowConvertException(OptionError,"MissingArgument",option);
2562 if (IsGeometry(argv[i]) == MagickFalse)
2563 ThrowConvertInvalidArgumentException(option,argv[i]);
2564 break;
2565 }
2566 if (LocaleCompare("size",option+1) == 0)
2567 {
2568 if (*option == '+')
2569 break;
2570 i++;
cristybb503372010-05-27 20:51:26 +00002571 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002572 ThrowConvertException(OptionError,"MissingArgument",option);
2573 if (IsGeometry(argv[i]) == MagickFalse)
2574 ThrowConvertInvalidArgumentException(option,argv[i]);
2575 break;
2576 }
2577 if (LocaleCompare("sketch",option+1) == 0)
2578 {
2579 if (*option == '+')
2580 break;
2581 i++;
cristybb503372010-05-27 20:51:26 +00002582 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002583 ThrowConvertException(OptionError,"MissingArgument",option);
2584 if (IsGeometry(argv[i]) == MagickFalse)
2585 ThrowConvertInvalidArgumentException(option,argv[i]);
2586 break;
2587 }
cristy4285d782011-02-09 20:12:28 +00002588 if (LocaleCompare("smush",option+1) == 0)
2589 {
cristy4285d782011-02-09 20:12:28 +00002590 i++;
2591 if (i == (ssize_t) (argc-1))
2592 ThrowConvertException(OptionError,"MissingArgument",option);
2593 if (IsGeometry(argv[i]) == MagickFalse)
2594 ThrowConvertInvalidArgumentException(option,argv[i]);
cristy4285d782011-02-09 20:12:28 +00002595 break;
2596 }
cristy3ed852e2009-09-05 21:47:34 +00002597 if (LocaleCompare("solarize",option+1) == 0)
2598 {
2599 if (*option == '+')
2600 break;
2601 i++;
cristybb503372010-05-27 20:51:26 +00002602 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002603 ThrowConvertException(OptionError,"MissingArgument",option);
2604 if (IsGeometry(argv[i]) == MagickFalse)
2605 ThrowConvertInvalidArgumentException(option,argv[i]);
2606 break;
2607 }
2608 if (LocaleCompare("sparse-color",option+1) == 0)
2609 {
cristybb503372010-05-27 20:51:26 +00002610 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002611 op;
2612
2613 i++;
cristybb503372010-05-27 20:51:26 +00002614 if (i == (ssize_t) argc)
cristy3ed852e2009-09-05 21:47:34 +00002615 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002616 op=ParseCommandOption(MagickSparseColorOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002617 if (op < 0)
2618 ThrowConvertException(OptionError,"UnrecognizedSparseColorMethod",
2619 argv[i]);
2620 i++;
cristybb503372010-05-27 20:51:26 +00002621 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002622 ThrowConvertException(OptionError,"MissingArgument",option);
2623 break;
2624 }
2625 if (LocaleCompare("splice",option+1) == 0)
2626 {
2627 if (*option == '+')
2628 break;
2629 i++;
cristybb503372010-05-27 20:51:26 +00002630 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002631 ThrowConvertException(OptionError,"MissingArgument",option);
2632 if (IsGeometry(argv[i]) == MagickFalse)
2633 ThrowConvertInvalidArgumentException(option,argv[i]);
2634 break;
2635 }
2636 if (LocaleCompare("spread",option+1) == 0)
2637 {
2638 if (*option == '+')
2639 break;
2640 i++;
cristybb503372010-05-27 20:51:26 +00002641 if ((i == (ssize_t) (argc-1)) ||
cristy3ed852e2009-09-05 21:47:34 +00002642 (IsGeometry(argv[i]) == MagickFalse))
2643 ThrowConvertException(OptionError,"MissingArgument",option);
2644 break;
2645 }
cristy0834d642011-03-18 18:26:08 +00002646 if (LocaleCompare("statistic",option+1) == 0)
2647 {
2648 ssize_t
2649 op;
2650
2651 if (*option == '+')
2652 break;
2653 i++;
2654 if (i == (ssize_t) argc)
2655 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002656 op=ParseCommandOption(MagickStatisticOptions,MagickFalse,argv[i]);
cristy0834d642011-03-18 18:26:08 +00002657 if (op < 0)
2658 ThrowConvertException(OptionError,"UnrecognizedStatisticType",
2659 argv[i]);
2660 i++;
2661 if (i == (ssize_t) (argc-1))
2662 ThrowConvertException(OptionError,"MissingArgument",option);
2663 if (IsGeometry(argv[i]) == MagickFalse)
2664 ThrowConvertInvalidArgumentException(option,argv[i]);
2665 break;
2666 }
cristy3ed852e2009-09-05 21:47:34 +00002667 if (LocaleCompare("stretch",option+1) == 0)
2668 {
cristybb503372010-05-27 20:51:26 +00002669 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002670 stretch;
2671
2672 if (*option == '+')
2673 break;
2674 i++;
cristybb503372010-05-27 20:51:26 +00002675 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002676 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002677 stretch=ParseCommandOption(MagickStretchOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00002678 argv[i]);
2679 if (stretch < 0)
2680 ThrowConvertException(OptionError,"UnrecognizedStyleType",
2681 argv[i]);
2682 break;
2683 }
2684 if (LocaleCompare("strip",option+1) == 0)
2685 break;
2686 if (LocaleCompare("stroke",option+1) == 0)
2687 {
2688 if (*option == '+')
2689 break;
2690 i++;
cristybb503372010-05-27 20:51:26 +00002691 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002692 ThrowConvertException(OptionError,"MissingArgument",option);
2693 break;
2694 }
2695 if (LocaleCompare("strokewidth",option+1) == 0)
2696 {
2697 if (*option == '+')
2698 break;
2699 i++;
cristybb503372010-05-27 20:51:26 +00002700 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002701 ThrowConvertException(OptionError,"MissingArgument",option);
2702 if (IsGeometry(argv[i]) == MagickFalse)
2703 ThrowConvertInvalidArgumentException(option,argv[i]);
2704 break;
2705 }
2706 if (LocaleCompare("style",option+1) == 0)
2707 {
cristybb503372010-05-27 20:51:26 +00002708 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002709 style;
2710
2711 if (*option == '+')
2712 break;
2713 i++;
cristybb503372010-05-27 20:51:26 +00002714 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002715 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002716 style=ParseCommandOption(MagickStyleOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002717 if (style < 0)
2718 ThrowConvertException(OptionError,"UnrecognizedStyleType",
2719 argv[i]);
2720 break;
2721 }
2722 if (LocaleCompare("support",option+1) == 0)
2723 {
2724 i++; /* deprecated */
2725 break;
2726 }
2727 if (LocaleCompare("swap",option+1) == 0)
2728 {
2729 if (*option == '+')
2730 break;
2731 i++;
cristybb503372010-05-27 20:51:26 +00002732 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002733 ThrowConvertException(OptionError,"MissingArgument",option);
2734 if (IsGeometry(argv[i]) == MagickFalse)
2735 ThrowConvertInvalidArgumentException(option,argv[i]);
2736 break;
2737 }
2738 if (LocaleCompare("swirl",option+1) == 0)
2739 {
2740 if (*option == '+')
2741 break;
2742 i++;
cristybb503372010-05-27 20:51:26 +00002743 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002744 ThrowConvertException(OptionError,"MissingArgument",option);
2745 if (IsGeometry(argv[i]) == MagickFalse)
2746 ThrowConvertInvalidArgumentException(option,argv[i]);
2747 break;
2748 }
cristyd9a29192010-10-16 16:49:53 +00002749 if (LocaleCompare("synchronize",option+1) == 0)
2750 break;
cristy3ed852e2009-09-05 21:47:34 +00002751 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2752 }
2753 case 't':
2754 {
2755 if (LocaleCompare("taint",option+1) == 0)
2756 break;
2757 if (LocaleCompare("texture",option+1) == 0)
2758 {
2759 if (*option == '+')
2760 break;
2761 i++;
cristybb503372010-05-27 20:51:26 +00002762 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002763 ThrowConvertException(OptionError,"MissingArgument",option);
2764 break;
2765 }
anthony52bef752012-03-27 13:54:47 +00002766 if (LocaleCompare("threshold",option+1) == 0)
cristy3ed852e2009-09-05 21:47:34 +00002767 {
2768 if (*option == '+')
2769 break;
2770 i++;
cristybb503372010-05-27 20:51:26 +00002771 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002772 ThrowConvertException(OptionError,"MissingArgument",option);
2773 if (IsGeometry(argv[i]) == MagickFalse)
2774 ThrowConvertInvalidArgumentException(option,argv[i]);
2775 break;
2776 }
anthony52bef752012-03-27 13:54:47 +00002777 if (LocaleCompare("thumbnail",option+1) == 0)
cristy3ed852e2009-09-05 21:47:34 +00002778 {
2779 if (*option == '+')
2780 break;
2781 i++;
cristybb503372010-05-27 20:51:26 +00002782 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002783 ThrowConvertException(OptionError,"MissingArgument",option);
2784 if (IsGeometry(argv[i]) == MagickFalse)
2785 ThrowConvertInvalidArgumentException(option,argv[i]);
2786 break;
2787 }
2788 if (LocaleCompare("tile",option+1) == 0)
2789 {
2790 if (*option == '+')
2791 break;
2792 i++;
cristybb503372010-05-27 20:51:26 +00002793 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002794 ThrowConvertException(OptionError,"MissingArgument",option);
2795 break;
2796 }
2797 if (LocaleCompare("tile-offset",option+1) == 0)
2798 {
2799 if (*option == '+')
2800 break;
2801 i++;
cristybb503372010-05-27 20:51:26 +00002802 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002803 ThrowConvertException(OptionError,"MissingArgument",option);
2804 if (IsGeometry(argv[i]) == MagickFalse)
2805 ThrowConvertInvalidArgumentException(option,argv[i]);
2806 break;
2807 }
2808 if (LocaleCompare("tint",option+1) == 0)
2809 {
2810 if (*option == '+')
2811 break;
2812 i++;
cristybb503372010-05-27 20:51:26 +00002813 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002814 ThrowConvertException(OptionError,"MissingArgument",option);
2815 if (IsGeometry(argv[i]) == MagickFalse)
2816 ThrowConvertInvalidArgumentException(option,argv[i]);
2817 break;
2818 }
2819 if (LocaleCompare("transform",option+1) == 0)
2820 break;
2821 if (LocaleCompare("transparent",option+1) == 0)
2822 {
2823 i++;
cristybb503372010-05-27 20:51:26 +00002824 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002825 ThrowConvertException(OptionError,"MissingArgument",option);
2826 break;
2827 }
2828 if (LocaleCompare("transparent-color",option+1) == 0)
2829 {
2830 if (*option == '+')
2831 break;
2832 i++;
cristybb503372010-05-27 20:51:26 +00002833 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002834 ThrowConvertException(OptionError,"MissingArgument",option);
2835 break;
2836 }
2837 if (LocaleCompare("transpose",option+1) == 0)
2838 break;
2839 if (LocaleCompare("transverse",option+1) == 0)
2840 break;
2841 if (LocaleCompare("treedepth",option+1) == 0)
2842 {
2843 if (*option == '+')
2844 break;
2845 i++;
cristybb503372010-05-27 20:51:26 +00002846 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002847 ThrowConvertException(OptionError,"MissingArgument",option);
2848 if (IsGeometry(argv[i]) == MagickFalse)
2849 ThrowConvertInvalidArgumentException(option,argv[i]);
2850 break;
2851 }
2852 if (LocaleCompare("trim",option+1) == 0)
2853 break;
2854 if (LocaleCompare("type",option+1) == 0)
2855 {
cristybb503372010-05-27 20:51:26 +00002856 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002857 type;
2858
2859 if (*option == '+')
2860 break;
2861 i++;
cristybb503372010-05-27 20:51:26 +00002862 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002863 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002864 type=ParseCommandOption(MagickTypeOptions,MagickFalse,argv[i]);
cristy3ed852e2009-09-05 21:47:34 +00002865 if (type < 0)
2866 ThrowConvertException(OptionError,"UnrecognizedImageType",
2867 argv[i]);
2868 break;
2869 }
2870 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2871 }
2872 case 'u':
2873 {
2874 if (LocaleCompare("undercolor",option+1) == 0)
2875 {
2876 if (*option == '+')
2877 break;
2878 i++;
cristybb503372010-05-27 20:51:26 +00002879 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002880 ThrowConvertException(OptionError,"MissingArgument",option);
2881 break;
2882 }
2883 if (LocaleCompare("unique-colors",option+1) == 0)
2884 break;
2885 if (LocaleCompare("units",option+1) == 0)
2886 {
cristybb503372010-05-27 20:51:26 +00002887 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002888 units;
2889
2890 if (*option == '+')
2891 break;
2892 i++;
cristybb503372010-05-27 20:51:26 +00002893 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002894 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002895 units=ParseCommandOption(MagickResolutionOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00002896 argv[i]);
2897 if (units < 0)
2898 ThrowConvertException(OptionError,"UnrecognizedUnitsType",
2899 argv[i]);
2900 break;
2901 }
2902 if (LocaleCompare("unsharp",option+1) == 0)
2903 {
2904 if (*option == '+')
2905 break;
2906 i++;
cristybb503372010-05-27 20:51:26 +00002907 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002908 ThrowConvertException(OptionError,"MissingArgument",option);
2909 if (IsGeometry(argv[i]) == MagickFalse)
2910 ThrowConvertInvalidArgumentException(option,argv[i]);
2911 break;
2912 }
2913 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2914 }
2915 case 'v':
2916 {
2917 if (LocaleCompare("verbose",option+1) == 0)
2918 break;
2919 if ((LocaleCompare("version",option+1) == 0) ||
2920 (LocaleCompare("-version",option+1) == 0))
2921 {
cristyb51dff52011-05-19 16:55:47 +00002922 (void) FormatLocaleFile(stdout,"Version: %s\n",
cristybb503372010-05-27 20:51:26 +00002923 GetMagickVersion((size_t *) NULL));
cristy1e604812011-05-19 18:07:50 +00002924 (void) FormatLocaleFile(stdout,"Copyright: %s\n",
2925 GetMagickCopyright());
2926 (void) FormatLocaleFile(stdout,"Features: %s\n\n",
2927 GetMagickFeatures());
cristy3ed852e2009-09-05 21:47:34 +00002928 break;
2929 }
2930 if (LocaleCompare("view",option+1) == 0)
2931 {
2932 if (*option == '+')
2933 break;
2934 i++;
cristybb503372010-05-27 20:51:26 +00002935 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002936 ThrowConvertException(OptionError,"MissingArgument",option);
2937 break;
2938 }
2939 if (LocaleCompare("vignette",option+1) == 0)
2940 {
2941 if (*option == '+')
2942 break;
2943 i++;
cristybb503372010-05-27 20:51:26 +00002944 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002945 ThrowConvertException(OptionError,"MissingArgument",option);
2946 if (IsGeometry(argv[i]) == MagickFalse)
2947 ThrowConvertInvalidArgumentException(option,argv[i]);
2948 break;
2949 }
2950 if (LocaleCompare("virtual-pixel",option+1) == 0)
2951 {
cristybb503372010-05-27 20:51:26 +00002952 ssize_t
cristy3ed852e2009-09-05 21:47:34 +00002953 method;
2954
2955 if (*option == '+')
2956 break;
2957 i++;
cristybb503372010-05-27 20:51:26 +00002958 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002959 ThrowConvertException(OptionError,"MissingArgument",option);
cristy042ee782011-04-22 18:48:30 +00002960 method=ParseCommandOption(MagickVirtualPixelOptions,MagickFalse,
cristy3ed852e2009-09-05 21:47:34 +00002961 argv[i]);
2962 if (method < 0)
2963 ThrowConvertException(OptionError,
2964 "UnrecognizedVirtualPixelMethod",argv[i]);
2965 break;
2966 }
2967 ThrowConvertException(OptionError,"UnrecognizedOption",option)
2968 }
2969 case 'w':
2970 {
2971 if (LocaleCompare("wave",option+1) == 0)
2972 {
2973 i++;
cristybb503372010-05-27 20:51:26 +00002974 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002975 ThrowConvertException(OptionError,"MissingArgument",option);
2976 if (IsGeometry(argv[i]) == MagickFalse)
2977 ThrowConvertInvalidArgumentException(option,argv[i]);
2978 break;
2979 }
2980 if (LocaleCompare("weight",option+1) == 0)
2981 {
2982 if (*option == '+')
2983 break;
2984 i++;
cristybb503372010-05-27 20:51:26 +00002985 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002986 ThrowConvertException(OptionError,"MissingArgument",option);
2987 break;
2988 }
2989 if (LocaleCompare("white-point",option+1) == 0)
2990 {
2991 if (*option == '+')
2992 break;
2993 i++;
cristybb503372010-05-27 20:51:26 +00002994 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00002995 ThrowConvertException(OptionError,"MissingArgument",option);
2996 if (IsGeometry(argv[i]) == MagickFalse)
2997 ThrowConvertInvalidArgumentException(option,argv[i]);
2998 break;
2999 }
3000 if (LocaleCompare("white-threshold",option+1) == 0)
3001 {
3002 if (*option == '+')
3003 break;
3004 i++;
cristybb503372010-05-27 20:51:26 +00003005 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00003006 ThrowConvertException(OptionError,"MissingArgument",option);
3007 if (IsGeometry(argv[i]) == MagickFalse)
3008 ThrowConvertInvalidArgumentException(option,argv[i]);
3009 break;
3010 }
3011 if (LocaleCompare("write",option+1) == 0)
3012 {
3013 i++;
cristybb503372010-05-27 20:51:26 +00003014 if (i == (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00003015 ThrowConvertException(OptionError,"MissingArgument",option);
3016 break;
3017 }
3018 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3019 }
3020 case '?':
3021 break;
3022 default:
3023 ThrowConvertException(OptionError,"UnrecognizedOption",option)
3024 }
cristy042ee782011-04-22 18:48:30 +00003025 fire=(GetCommandOptionFlags(MagickCommandOptions,MagickFalse,option) &
3026 FireOptionFlag) == 0 ? MagickFalse : MagickTrue;
cristy3ed852e2009-09-05 21:47:34 +00003027 if (fire != MagickFalse)
3028 FireImageStack(MagickTrue,MagickTrue,MagickTrue);
3029 }
3030 if (k != 0)
3031 ThrowConvertException(OptionError,"UnbalancedParenthesis",argv[i]);
cristybb503372010-05-27 20:51:26 +00003032 if (i-- != (ssize_t) (argc-1))
cristy3ed852e2009-09-05 21:47:34 +00003033 ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
cristy3ed852e2009-09-05 21:47:34 +00003034 FinalizeImageSettings(image_info,image,MagickTrue);
cristy94f20072009-09-12 02:12:36 +00003035 if (image == (Image *) NULL)
anthonye5b39652012-04-21 05:37:29 +00003036 ThrowConvertException(OptionError,"NoImagesDefined",argv[argc-1]);
3037 if (IsCommandOption(argv[argc-1]))
3038 ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
3039 if (LocaleCompare(" ",argv[argc-1])==0) /* common line continuation error */
cristy94f20072009-09-12 02:12:36 +00003040 ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
cristy3ed852e2009-09-05 21:47:34 +00003041 status&=WriteImages(image_info,image,argv[argc-1],exception);
3042 if (metadata != (char **) NULL)
3043 {
3044 char
3045 *text;
3046
cristy018f07f2011-09-04 21:15:19 +00003047 text=InterpretImageProperties(image_info,image,format,exception);
cristy3ed852e2009-09-05 21:47:34 +00003048 if (text == (char *) NULL)
3049 ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
3050 GetExceptionMessage(errno));
3051 (void) ConcatenateString(&(*metadata),text);
3052 text=DestroyString(text);
3053 }
3054 DestroyConvert();
3055 return(status != 0 ? MagickTrue : MagickFalse);
3056}