1/*
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%                                   Cristy                                    %
17%                                April 1992                                   %
18%                                                                             %
19%                                                                             %
20%  Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization      %
21%  dedicated to making software imaging solutions freely available.           %
22%                                                                             %
23%  You may not use this file except in compliance with the License.  You may  %
24%  obtain a copy of the License at                                            %
25%                                                                             %
26%    http://www.imagemagick.org/script/license.php                            %
27%                                                                             %
28%  Unless required by applicable law or agreed to in writing, software        %
29%  distributed under the License is distributed on an "AS IS" BASIS,          %
30%  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
31%  See the License for the specific language governing permissions and        %
32%  limitations under the License.                                             %
33%                                                                             %
34%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35%
36%  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*/
45#include "MagickWand/studio.h"
46#include "MagickWand/MagickWand.h"
47#include "MagickWand/mogrify-private.h"
48#include "MagickCore/string-private.h"
49#include "MagickCore/utility-private.h"
50/*
51  Define declarations.
52*/
53#define ThrowFileException(exception,severity,tag,context) \
54{ \
55  char \
56    *message; \
57 \
58  message=GetExceptionMessage(errno); \
59  (void) ThrowMagickException(exception,GetMagickModule(),severity, \
60    tag == (const char *) NULL ? "unknown" : tag,"'%s': %s",context,message); \
61  message=DestroyString(message); \
62}
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
108  MagickBooleanType
109    status;
110
111  register ssize_t
112    i;
113
114  /*
115    Open output file.
116  */
117  output=fopen_utf8(argv[argc-1],"wb");
118  if (output == (FILE *) NULL)
119    {
120      ThrowFileException(exception,FileOpenError,"UnableToOpenFile",
121        argv[argc-1]);
122      return(MagickFalse);
123    }
124  status=MagickTrue;
125  for (i=2; i < (ssize_t) (argc-1); i++)
126  {
127    input=fopen_utf8(argv[i],"rb");
128    if (input == (FILE *) NULL)
129      {
130        ThrowFileException(exception,FileOpenError,"UnableToOpenFile",argv[i]);
131        continue;
132      }
133    for (c=fgetc(input); c != EOF; c=fgetc(input))
134      if (fputc((char) c,output) != c)
135        status=MagickFalse;
136    (void) fclose(input);
137    (void) remove_utf8(argv[i]);
138  }
139  (void) fclose(output);
140  return(status);
141}
142
143static MagickBooleanType ConvertUsage(void)
144{
145  static const char
146    *channel_operators[]=
147    {
148      "-channel-fx expression",
149      "                     exchange, extract, or transfer one or more image channels",
150      "-separate            separate an image channel into a grayscale image",
151      (char *) NULL
152    },
153    *miscellaneous[]=
154    {
155      "-debug events        display copious debugging information",
156      "-distribute-cache port",
157      "                     distributed pixel cache spanning one or more servers",
158      "-help                print program options",
159      "-list type           print a list of supported option arguments",
160      "-log format          format of debugging information",
161      "-version             print version information",
162      (char *) NULL
163    },
164    *operators[]=
165    {
166      "-adaptive-blur geometry",
167      "                     adaptively blur pixels; decrease effect near edges",
168      "-adaptive-resize geometry",
169      "                     adaptively resize image using 'mesh' interpolation",
170      "-adaptive-sharpen geometry",
171      "                     adaptively sharpen pixels; increase effect near edges",
172      "-alpha option        on, activate, off, deactivate, set, opaque, copy",
173      "                     transparent, extract, background, or shape",
174      "-annotate geometry text",
175      "                     annotate the image with text",
176      "-auto-gamma          automagically adjust gamma level of image",
177      "-auto-level          automagically adjust color levels of image",
178      "-auto-orient         automagically orient (rotate) image",
179      "-bench iterations    measure performance",
180      "-black-threshold value",
181      "                     force all pixels below the threshold into black",
182      "-blue-shift factor   simulate a scene at nighttime in the moonlight",
183      "-blur geometry       reduce image noise and reduce detail levels",
184      "-border geometry     surround image with a border of color",
185      "-bordercolor color   border color",
186      "-brightness-contrast geometry",
187      "                     improve brightness / contrast of the image",
188      "-canny geometry      detect edges in the image",
189      "-cdl filename        color correct with a color decision list",
190      "-channel mask        set the image channel mask",
191      "-charcoal radius     simulate a charcoal drawing",
192      "-chop geometry       remove pixels from the image interior",
193      "-clamp               keep pixel values in range (0-QuantumRange)",
194      "-colorize value      colorize the image with the fill color",
195      "-color-matrix matrix apply color correction to the image",
196      "-connected-components connectivity",
197      "                     connected-components uniquely labeled",
198      "-contrast            enhance or reduce the image contrast",
199      "-contrast-stretch geometry",
200      "                     improve contrast by 'stretching' the intensity range",
201      "-convolve coefficients",
202      "                     apply a convolution kernel to the image",
203      "-cycle amount        cycle the image colormap",
204      "-decipher filename   convert cipher pixels to plain pixels",
205      "-deskew threshold    straighten an image",
206      "-despeckle           reduce the speckles within an image",
207      "-distort method args",
208      "                     distort images according to given method ad args",
209      "-draw string         annotate the image with a graphic primitive",
210      "-edge radius         apply a filter to detect edges in the image",
211      "-encipher filename   convert plain pixels to cipher pixels",
212      "-emboss radius       emboss an image",
213      "-enhance             apply a digital filter to enhance a noisy image",
214      "-equalize            perform histogram equalization to an image",
215      "-evaluate operator value",
216      "                     evaluate an arithmetic, relational, or logical expression",
217      "-extent geometry     set the image size",
218      "-extract geometry    extract area from image",
219      "-fft                 implements the discrete Fourier transform (DFT)",
220      "-flip                flip image vertically",
221      "-floodfill geometry color",
222      "                     floodfill the image with color",
223      "-flop                flop image horizontally",
224      "-frame geometry      surround image with an ornamental border",
225      "-function name parameters",
226      "                     apply function over image values",
227      "-gamma value         level of gamma correction",
228      "-gaussian-blur geometry",
229      "                     reduce image noise and reduce detail levels",
230      "-geometry geometry   preferred size or location of the image",
231      "-grayscale method    convert image to grayscale",
232      "-hough-lines geometry",
233      "                     identify lines in the image",
234      "-identify            identify the format and characteristics of the image",
235      "-ift                 implements the inverse discrete Fourier transform (DFT)",
236      "-implode amount      implode image pixels about the center",
237      "-kuwahara geometry   edge preserving noise reduction filter",
238      "-lat geometry        local adaptive thresholding",
239      "-level value         adjust the level of image contrast",
240      "-level-colors color,color",
241      "                     level image with the given colors",
242      "-linear-stretch geometry",
243      "                     improve contrast by 'stretching with saturation'",
244      "-liquid-rescale geometry",
245      "                     rescale image with seam-carving",
246      "-local-contrast geometry",
247      "                     enhance local contrast",
248      "-mean-shift geometry delineate arbitrarily shaped clusters in the image",
249      "-median geometry     apply a median filter to the image",
250      "-mode geometry       make each pixel the 'predominant color' of the",
251      "                     neighborhood",
252      "-modulate value      vary the brightness, saturation, and hue",
253      "-monochrome          transform image to black and white",
254      "-morphology method kernel",
255      "                     apply a morphology method to the image",
256      "-motion-blur geometry",
257      "                     simulate motion blur",
258      "-negate              replace every pixel with its complementary color ",
259      "-noise geometry      add or reduce noise in an image",
260      "-normalize           transform image to span the full range of colors",
261      "-opaque color        change this color to the fill color",
262      "-ordered-dither NxN",
263      "                     add a noise pattern to the image with specific",
264      "                     amplitudes",
265      "-paint radius        simulate an oil painting",
266      "-perceptible epsilon",
267      "                     pixel value less than |epsilon| become epsilon or",
268      "                     -epsilon",
269      "-polaroid angle      simulate a Polaroid picture",
270      "-posterize levels    reduce the image to a limited number of color levels",
271      "-profile filename    add, delete, or apply an image profile",
272      "-quantize colorspace reduce colors in this colorspace",
273      "-raise value         lighten/darken image edges to create a 3-D effect",
274      "-random-threshold low,high",
275      "                     random threshold the image",
276      "-region geometry     apply options to a portion of the image",
277      "-render              render vector graphics",
278      "-repage geometry     size and location of an image canvas",
279      "-resample geometry   change the resolution of an image",
280      "-resize geometry     resize the image",
281      "-roll geometry       roll an image vertically or horizontally",
282      "-rotate degrees      apply Paeth rotation to the image",
283      "-rotational-blur angle",
284      "                     rotational blur the image",
285      "-sample geometry     scale image with pixel sampling",
286      "-scale geometry      scale the image",
287      "-segment values      segment an image",
288      "-selective-blur geometry",
289      "                     selectively blur pixels within a contrast threshold",
290      "-sepia-tone threshold",
291      "                     simulate a sepia-toned photo",
292      "-set property value  set an image property",
293      "-shade degrees       shade the image using a distant light source",
294      "-shadow geometry     simulate an image shadow",
295      "-sharpen geometry    sharpen the image",
296      "-shave geometry      shave pixels from the image edges",
297      "-shear geometry      slide one edge of the image along the X or Y axis",
298      "-sigmoidal-contrast geometry",
299      "                     increase the contrast without saturating highlights or",
300      "                     shadows",
301      "-sketch geometry     simulate a pencil sketch",
302      "-solarize threshold  negate all pixels above the threshold level",
303      "-sparse-color method args",
304      "                     fill in a image based on a few color points",
305      "-splice geometry     splice the background color into the image",
306      "-spread radius       displace image pixels by a random amount",
307      "-statistic type geometry",
308      "                     replace each pixel with corresponding statistic from the",
309      "                     neighborhood",
310      "-strip               strip image of all profiles and comments",
311      "-swirl degrees       swirl image pixels about the center",
312      "-threshold value     threshold the image",
313      "-thumbnail geometry  create a thumbnail of the image",
314      "-tile filename       tile image when filling a graphic primitive",
315      "-tint value          tint the image with the fill color",
316      "-transform           affine transform image",
317      "-transparent color   make this color transparent within the image",
318      "-transpose           flip image vertically and rotate 90 degrees",
319      "-transverse          flop image horizontally and rotate 270 degrees",
320      "-trim                trim image edges",
321      "-type type           image type",
322      "-unique-colors       discard all but one of any pixel color",
323      "-unsharp geometry    sharpen the image",
324      "-vignette geometry   soften the edges of the image in vignette style",
325      "-wave geometry       alter an image along a sine wave",
326      "-wavelet-denoise threshold",
327      "                     removes noise from the image using a wavelet transform",
328      "-white-threshold value",
329      "                     force all pixels above the threshold into white",
330      (char *) NULL
331    },
332    *sequence_operators[]=
333    {
334      "-append              append an image sequence",
335      "-clut                apply a color lookup table to the image",
336      "-coalesce            merge a sequence of images",
337      "-combine             combine a sequence of images",
338      "-compare             mathematically and visually annotate the difference between an image and its reconstruction",
339      "-complex operator    perform complex mathematics on an image sequence",
340      "-composite           composite image",
341      "-copy geometry offset",
342      "                     copy pixels from one area of an image to another",
343      "-crop geometry       cut out a rectangular region of the image",
344      "-deconstruct         break down an image sequence into constituent parts",
345      "-evaluate-sequence operator",
346      "                     evaluate an arithmetic, relational, or logical expression",
347      "-flatten             flatten a sequence of images",
348      "-fx expression       apply mathematical expression to an image channel(s)",
349      "-hald-clut           apply a Hald color lookup table to the image",
350      "-layers method       optimize, merge, or compare image layers",
351      "-morph value         morph an image sequence",
352      "-mosaic              create a mosaic from an image sequence",
353      "-poly terms          build a polynomial from the image sequence and the corresponding",
354      "                     terms (coefficients and degree pairs).",
355      "-print string        interpret string and print to console",
356      "-process arguments   process the image with a custom image filter",
357      "-smush geometry      smush an image sequence together",
358      "-write filename      write images to this file",
359      (char *) NULL
360    },
361    *settings[]=
362    {
363      "-adjoin              join images into a single multi-image file",
364      "-affine matrix       affine transform matrix",
365      "-alpha option        activate, deactivate, reset, or set the alpha channel",
366      "-alpha-color color   frame color",
367      "-antialias           remove pixel-aliasing",
368      "-authenticate password",
369      "                     decipher image with this password",
370      "-attenuate value     lessen (or intensify) when adding noise to an image",
371      "-background color    background color",
372      "-bias value          add bias when convolving an image",
373      "-black-point-compensation",
374      "                     use black point compensation",
375      "-blue-primary point  chromaticity blue primary point",
376      "-bordercolor color   border color",
377      "-caption string      assign a caption to an image",
378      "-clip                clip along the first path from the 8BIM profile",
379      "-clip-mask filename  associate a clip mask with the image",
380      "-clip-path id        clip along a named path from the 8BIM profile",
381      "-colors value        preferred number of colors in the image",
382      "-colorspace type     alternate image colorspace",
383      "-comment string      annotate image with comment",
384      "-compose operator    set image composite operator",
385      "-compress type       type of pixel compression when writing the image",
386      "-define format:option",
387      "                     define one or more image format options",
388      "-delay value         display the next image after pausing",
389      "-density geometry    horizontal and vertical density of the image",
390      "-depth value         image depth",
391      "-direction type      render text right-to-left or left-to-right",
392      "-display server      get image or font from this X server",
393      "-dispose method      layer disposal method",
394      "-dither method       apply error diffusion to image",
395      "-encoding type       text encoding type",
396      "-endian type         endianness (MSB or LSB) of the image",
397      "-family name         render text with this font family",
398      "-features distance   analyze image features (e.g. contrast, correlation)",
399      "-fill color          color to use when filling a graphic primitive",
400      "-filter type         use this filter when resizing an image",
401      "-font name           render text with this font",
402      "-format \"string\"     output formatted image characteristics",
403      "-fuzz distance       colors within this distance are considered equal",
404      "-gravity type        horizontal and vertical text placement",
405      "-green-primary point chromaticity green primary point",
406      "-intensity method    method to generate an intensity value from a pixel",
407      "-intent type         type of rendering intent when managing the image color",
408      "-interlace type      type of image interlacing scheme",
409      "-interline-spacing value",
410      "                     set the space between two text lines",
411      "-interpolate method  pixel color interpolation method",
412      "-interword-spacing value",
413      "                     set the space between two words",
414      "-kerning value       set the space between two letters",
415      "-label string        assign a label to an image",
416      "-limit type value    pixel cache resource limit",
417      "-loop iterations     add Netscape loop extension to your GIF animation",
418      "-matte               store matte channel if the image has one",
419      "-moments             report image moments",
420      "-monitor             monitor progress",
421      "-orient type         image orientation",
422      "-page geometry       size and location of an image canvas (setting)",
423      "-ping                efficiently determine image attributes",
424      "-pointsize value     font point size",
425      "-precision value     maximum number of significant digits to print",
426      "-preview type        image preview type",
427      "-quality value       JPEG/MIFF/PNG compression level",
428      "-quiet               suppress all warning messages",
429      "-read-mask filename  associate a read mask with the image",
430      "-red-primary point   chromaticity red primary point",
431      "-regard-warnings     pay attention to warning messages",
432      "-remap filename      transform image colors to match this set of colors",
433      "-respect-parentheses settings remain in effect until parenthesis boundary",
434      "-sampling-factor geometry",
435      "                     horizontal and vertical sampling factor",
436      "-scene value         image scene number",
437      "-seed value          seed a new sequence of pseudo-random numbers",
438      "-size geometry       width and height of image",
439      "-stretch type        render text with this font stretch",
440      "-stroke color        graphic primitive stroke color",
441      "-strokewidth value   graphic primitive stroke width",
442      "-style type          render text with this font style",
443      "-support factor      resize support: > 1.0 is blurry, < 1.0 is sharp",
444      "-synchronize         synchronize image to storage device",
445      "-taint               declare the image as modified",
446      "-texture filename    name of texture to tile onto the image background",
447      "-tile-offset geometry",
448      "                     tile offset",
449      "-treedepth value     color tree depth",
450      "-transparent-color color",
451      "                     transparent color",
452      "-undercolor color    annotation bounding box color",
453      "-units type          the units of image resolution",
454      "-verbose             print detailed information about the image",
455      "-view                FlashPix viewing transforms",
456      "-virtual-pixel method",
457      "                     virtual pixel access method",
458      "-weight type         render text with this font weight",
459      "-white-point point   chromaticity white point",
460      "-write-mask filename associate a write mask with the image",
461      (char *) NULL
462    },
463    *stack_operators[]=
464    {
465      "-clone indexes       clone an image",
466      "-delete indexes      delete the image from the image sequence",
467      "-duplicate count,indexes",
468      "                     duplicate an image one or more times",
469      "-insert index        insert last image into the image sequence",
470      "-reverse             reverse image sequence",
471      "-swap indexes        swap two images in the image sequence",
472      (char *) NULL
473    };
474
475  const char
476    **p;
477
478  ListMagickVersion(stdout);
479  (void) printf("Usage: %s [options ...] file [ [options ...] "
480    "file ...] [options ...] file\n",GetClientName());
481  (void) printf("\nImage Settings:\n");
482  for (p=settings; *p != (char *) NULL; p++)
483    (void) printf("  %s\n",*p);
484  (void) printf("\nImage Operators:\n");
485  for (p=operators; *p != (char *) NULL; p++)
486    (void) printf("  %s\n",*p);
487  (void) printf("\nImage Channel Operators:\n");
488  for (p=channel_operators; *p != (char *) NULL; p++)
489    (void) printf("  %s\n",*p);
490  (void) printf("\nImage Sequence Operators:\n");
491  for (p=sequence_operators; *p != (char *) NULL; p++)
492    (void) printf("  %s\n",*p);
493  (void) printf("\nImage Stack Operators:\n");
494  for (p=stack_operators; *p != (char *) NULL; p++)
495    (void) printf("  %s\n",*p);
496  (void) printf("\nMiscellaneous Options:\n");
497  for (p=miscellaneous; *p != (char *) NULL; p++)
498    (void) printf("  %s\n",*p);
499  (void) printf(
500    "\nBy default, the image format of 'file' is determined by its magic\n");
501  (void) printf(
502    "number.  To specify a particular image format, precede the filename\n");
503  (void) printf(
504    "with an image format name and a colon (i.e. ps:image) or specify the\n");
505  (void) printf(
506    "image type as the filename suffix (i.e. image.ps).  Specify 'file' as\n");
507  (void) printf("'-' for standard input or output.\n");
508  return(MagickFalse);
509}
510
511WandExport MagickBooleanType ConvertImageCommand(ImageInfo *image_info,
512  int argc,char **argv,char **metadata,ExceptionInfo *exception)
513{
514#define NotInitialized  (unsigned int) (~0)
515#define DestroyConvert() \
516{ \
517  DestroyImageStack(); \
518  for (i=0; i < (ssize_t) argc; i++) \
519    argv[i]=DestroyString(argv[i]); \
520  argv=(char **) RelinquishMagickMemory(argv); \
521}
522#define ThrowConvertException(asperity,tag,option) \
523{ \
524  (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \
525    option); \
526  DestroyConvert(); \
527  return(MagickFalse); \
528}
529#define ThrowConvertInvalidArgumentException(option,argument) \
530{ \
531  (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
532    "InvalidArgument","'%s': %s",option,argument); \
533  DestroyConvert(); \
534  return(MagickFalse); \
535}
536
537  char
538    *filename,
539    *option;
540
541  const char
542    *format;
543
544  Image
545    *image;
546
547  ImageStack
548    image_stack[MaxImageStackDepth+1];
549
550  MagickBooleanType
551    fire,
552    pend,
553    respect_parenthesis;
554
555  MagickStatusType
556    status;
557
558  register ssize_t
559    i;
560
561  ssize_t
562    j,
563    k;
564
565  /*
566    Set defaults.
567  */
568  assert(image_info != (ImageInfo *) NULL);
569  assert(image_info->signature == MagickCoreSignature);
570  if (image_info->debug != MagickFalse)
571    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
572  assert(exception != (ExceptionInfo *) NULL);
573  if (argc == 2)
574    {
575      option=argv[1];
576      if ((LocaleCompare("version",option+1) == 0) ||
577          (LocaleCompare("-version",option+1) == 0))
578        {
579          ListMagickVersion(stdout);
580          return(MagickTrue);
581        }
582    }
583  if (argc < 3)
584    return(ConvertUsage());
585  filename=(char *) NULL;
586  format="%w,%h,%m";
587  j=1;
588  k=0;
589  NewImageStack();
590  option=(char *) NULL;
591  pend=MagickFalse;
592  respect_parenthesis=MagickFalse;
593  status=MagickTrue;
594  /*
595    Parse command-line arguments.
596  */
597  ReadCommandlLine(argc,&argv);
598  status=ExpandFilenames(&argc,&argv);
599  if (status == MagickFalse)
600    ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
601      GetExceptionMessage(errno));
602  if ((argc > 2) && (LocaleCompare("-concatenate",argv[1]) == 0))
603    return(ConcatenateImages(argc,argv,exception));
604  for (i=1; i < (ssize_t) (argc-1); i++)
605  {
606    option=argv[i];
607    if (LocaleCompare(option,"(") == 0)
608      {
609        FireImageStack(MagickTrue,MagickTrue,pend);
610        if (k == MaxImageStackDepth)
611          ThrowConvertException(OptionError,"ParenthesisNestedTooDeeply",
612            option);
613        PushImageStack();
614        continue;
615      }
616    if (LocaleCompare(option,")") == 0)
617      {
618        FireImageStack(MagickTrue,MagickTrue,MagickTrue);
619        if (k == 0)
620          ThrowConvertException(OptionError,"UnableToParseExpression",option);
621        PopImageStack();
622        continue;
623      }
624    if (IsCommandOption(option) == MagickFalse)
625      {
626        Image
627          *images;
628
629        /*
630          Read input image.
631        */
632        FireImageStack(MagickTrue,MagickTrue,pend);
633        filename=argv[i];
634        if ((LocaleCompare(filename,"--") == 0) && (i < (ssize_t) (argc-1)))
635          filename=argv[++i];
636        if (image_info->ping != MagickFalse)
637          images=PingImages(image_info,filename,exception);
638        else
639          images=ReadImages(image_info,filename,exception);
640        status&=(images != (Image *) NULL) &&
641          (exception->severity < ErrorException);
642        if (images == (Image *) NULL)
643          continue;
644        AppendImageStack(images);
645        continue;
646      }
647    pend=image != (Image *) NULL ? MagickTrue : MagickFalse;
648    switch (*(option+1))
649    {
650      case 'a':
651      {
652        if (LocaleCompare("adaptive-blur",option+1) == 0)
653          {
654            i++;
655            if (i == (ssize_t) argc)
656              ThrowConvertException(OptionError,"MissingArgument",option);
657            if (IsGeometry(argv[i]) == MagickFalse)
658              ThrowConvertInvalidArgumentException(option,argv[i]);
659            break;
660          }
661        if (LocaleCompare("adaptive-resize",option+1) == 0)
662          {
663            i++;
664            if (i == (ssize_t) argc)
665              ThrowConvertException(OptionError,"MissingArgument",option);
666            if (IsGeometry(argv[i]) == MagickFalse)
667              ThrowConvertInvalidArgumentException(option,argv[i]);
668            break;
669          }
670        if (LocaleCompare("adaptive-sharpen",option+1) == 0)
671          {
672            i++;
673            if (i == (ssize_t) argc)
674              ThrowConvertException(OptionError,"MissingArgument",option);
675            if (IsGeometry(argv[i]) == MagickFalse)
676              ThrowConvertInvalidArgumentException(option,argv[i]);
677            break;
678          }
679        if (LocaleCompare("adjoin",option+1) == 0)
680          break;
681        if (LocaleCompare("affine",option+1) == 0)
682          {
683            if (*option == '+')
684              break;
685            i++;
686            if (i == (ssize_t) argc)
687              ThrowConvertException(OptionError,"MissingArgument",option);
688            if (IsGeometry(argv[i]) == MagickFalse)
689              ThrowConvertInvalidArgumentException(option,argv[i]);
690            break;
691          }
692        if (LocaleCompare("alpha",option+1) == 0)
693          {
694            ssize_t
695              type;
696
697            if (*option == '+')
698              break;
699            i++;
700            if (i == (ssize_t) argc)
701              ThrowConvertException(OptionError,"MissingArgument",option);
702            type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,
703              argv[i]);
704            if (type < 0)
705              ThrowConvertException(OptionError,
706                "UnrecognizedAlphaChannelOption",argv[i]);
707            break;
708          }
709        if (LocaleCompare("alpha-color", option + 1) == 0)
710        {
711          if (*option == '+')
712            break;
713          i++;
714          if (i == (ssize_t)argc)
715            ThrowConvertException(OptionError, "MissingArgument", option);
716          break;
717        }
718        if (LocaleCompare("annotate",option+1) == 0)
719          {
720            if (*option == '+')
721              break;
722            i++;
723            if (i == (ssize_t) argc)
724              ThrowConvertException(OptionError,"MissingArgument",option);
725            if (IsGeometry(argv[i]) == MagickFalse)
726              ThrowConvertInvalidArgumentException(option,argv[i]);
727            i++;
728            if (i == (ssize_t) argc)
729              ThrowConvertException(OptionError,"MissingArgument",option);
730            break;
731          }
732        if (LocaleCompare("antialias",option+1) == 0)
733          break;
734        if (LocaleCompare("append",option+1) == 0)
735          break;
736        if (LocaleCompare("attenuate",option+1) == 0)
737          {
738            if (*option == '+')
739              break;
740            i++;
741            if (i == (ssize_t) argc)
742              ThrowConvertException(OptionError,"MissingArgument",option);
743            if (IsGeometry(argv[i]) == MagickFalse)
744              ThrowConvertInvalidArgumentException(option,argv[i]);
745            break;
746          }
747        if (LocaleCompare("authenticate",option+1) == 0)
748          {
749            if (*option == '+')
750              break;
751            i++;
752            if (i == (ssize_t) argc)
753              ThrowConvertException(OptionError,"MissingArgument",option);
754            break;
755          }
756        if (LocaleCompare("auto-gamma",option+1) == 0)
757          break;
758        if (LocaleCompare("auto-level",option+1) == 0)
759          break;
760        if (LocaleCompare("auto-orient",option+1) == 0)
761          break;
762        if (LocaleCompare("average",option+1) == 0)
763          break;
764        ThrowConvertException(OptionError,"UnrecognizedOption",option)
765      }
766      case 'b':
767      {
768        if (LocaleCompare("background",option+1) == 0)
769          {
770            if (*option == '+')
771              break;
772            i++;
773            if (i == (ssize_t) argc)
774              ThrowConvertException(OptionError,"MissingArgument",option);
775            break;
776          }
777        if (LocaleCompare("bench",option+1) == 0)
778          {
779            if (*option == '+')
780              break;
781            i++;
782            if (i == (ssize_t) argc)
783              ThrowConvertException(OptionError,"MissingArgument",option);
784            if (IsGeometry(argv[i]) == MagickFalse)
785              ThrowConvertInvalidArgumentException(option,argv[i]);
786            break;
787          }
788        if (LocaleCompare("bias",option+1) == 0)
789          {
790            if (*option == '+')
791              break;
792            i++;
793            if (i == (ssize_t) argc)
794              ThrowConvertException(OptionError,"MissingArgument",option);
795            if (IsGeometry(argv[i]) == MagickFalse)
796              ThrowConvertInvalidArgumentException(option,argv[i]);
797            break;
798          }
799        if (LocaleCompare("black-point-compensation",option+1) == 0)
800          break;
801        if (LocaleCompare("black-threshold",option+1) == 0)
802          {
803            if (*option == '+')
804              break;
805            i++;
806            if (i == (ssize_t) argc)
807              ThrowConvertException(OptionError,"MissingArgument",option);
808            if (IsGeometry(argv[i]) == MagickFalse)
809              ThrowConvertInvalidArgumentException(option,argv[i]);
810            break;
811          }
812        if (LocaleCompare("blue-primary",option+1) == 0)
813          {
814            if (*option == '+')
815              break;
816            i++;
817            if (i == (ssize_t) argc)
818              ThrowConvertException(OptionError,"MissingArgument",option);
819            if (IsGeometry(argv[i]) == MagickFalse)
820              ThrowConvertInvalidArgumentException(option,argv[i]);
821            break;
822          }
823        if (LocaleCompare("blue-shift",option+1) == 0)
824          {
825            if (*option == '+')
826              break;
827            i++;
828            if (i == (ssize_t) argc)
829              ThrowConvertException(OptionError,"MissingArgument",option);
830            if (IsGeometry(argv[i]) == MagickFalse)
831              ThrowConvertInvalidArgumentException(option,argv[i]);
832            break;
833          }
834        if (LocaleCompare("blur",option+1) == 0)
835          {
836            if (*option == '+')
837              break;
838            i++;
839            if (i == (ssize_t) argc)
840              ThrowConvertException(OptionError,"MissingArgument",option);
841            if (IsGeometry(argv[i]) == MagickFalse)
842              ThrowConvertInvalidArgumentException(option,argv[i]);
843            break;
844          }
845        if (LocaleCompare("border",option+1) == 0)
846          {
847            if (*option == '+')
848              break;
849            i++;
850            if (i == (ssize_t) argc)
851              ThrowConvertException(OptionError,"MissingArgument",option);
852            if (IsGeometry(argv[i]) == MagickFalse)
853              ThrowConvertInvalidArgumentException(option,argv[i]);
854            break;
855          }
856        if (LocaleCompare("bordercolor",option+1) == 0)
857          {
858            if (*option == '+')
859              break;
860            i++;
861            if (i == (ssize_t) argc)
862              ThrowConvertException(OptionError,"MissingArgument",option);
863            break;
864          }
865        if (LocaleCompare("box",option+1) == 0)
866          {
867            if (*option == '+')
868              break;
869            i++;
870            if (i == (ssize_t) argc)
871              ThrowConvertException(OptionError,"MissingArgument",option);
872            break;
873          }
874        if (LocaleCompare("brightness-contrast",option+1) == 0)
875          {
876            i++;
877            if (i == (ssize_t) argc)
878              ThrowConvertException(OptionError,"MissingArgument",option);
879            if (IsGeometry(argv[i]) == MagickFalse)
880              ThrowConvertInvalidArgumentException(option,argv[i]);
881            break;
882          }
883        ThrowConvertException(OptionError,"UnrecognizedOption",option)
884      }
885      case 'c':
886      {
887        if (LocaleCompare("cache",option+1) == 0)
888          {
889            if (*option == '+')
890              break;
891            i++;
892            if (i == (ssize_t) argc)
893              ThrowConvertException(OptionError,"MissingArgument",option);
894            if (IsGeometry(argv[i]) == MagickFalse)
895              ThrowConvertInvalidArgumentException(option,argv[i]);
896            break;
897          }
898        if (LocaleCompare("canny",option+1) == 0)
899          {
900            if (*option == '+')
901              break;
902            i++;
903            if (i == (ssize_t) argc)
904              ThrowConvertException(OptionError,"MissingArgument",option);
905            if (IsGeometry(argv[i]) == MagickFalse)
906              ThrowConvertInvalidArgumentException(option,argv[i]);
907            break;
908          }
909        if (LocaleCompare("caption",option+1) == 0)
910          {
911            if (*option == '+')
912              break;
913            i++;
914            if (i == (ssize_t) argc)
915              ThrowConvertException(OptionError,"MissingArgument",option);
916            break;
917          }
918        if (LocaleCompare("cdl",option+1) == 0)
919          {
920            if (*option == '+')
921              break;
922            i++;
923            if (i == (ssize_t) argc)
924              ThrowConvertException(OptionError,"MissingArgument",option);
925            break;
926          }
927        if (LocaleCompare("channel",option+1) == 0)
928          {
929            ssize_t
930              channel;
931
932            if (*option == '+')
933              break;
934            i++;
935            if (i == (ssize_t) argc)
936              ThrowConvertException(OptionError,"MissingArgument",option);
937            channel=ParseChannelOption(argv[i]);
938            if (channel < 0)
939              ThrowConvertException(OptionError,"UnrecognizedChannelType",
940                argv[i]);
941            break;
942          }
943        if (LocaleCompare("channel-fx",option+1) == 0)
944          {
945            ssize_t
946              channel;
947
948            if (*option == '+')
949              break;
950            i++;
951            if (i == (ssize_t) argc)
952              ThrowConvertException(OptionError,"MissingArgument",option);
953            channel=ParsePixelChannelOption(argv[i]);
954            if (channel < 0)
955              ThrowConvertException(OptionError,"UnrecognizedChannelType",
956                argv[i]);
957            break;
958          }
959        if (LocaleCompare("charcoal",option+1) == 0)
960          {
961            if (*option == '+')
962              break;
963            i++;
964            if (i == (ssize_t) argc)
965              ThrowConvertException(OptionError,"MissingArgument",option);
966            if (IsGeometry(argv[i]) == MagickFalse)
967              ThrowConvertInvalidArgumentException(option,argv[i]);
968            break;
969          }
970        if (LocaleCompare("chop",option+1) == 0)
971          {
972            if (*option == '+')
973              break;
974            i++;
975            if (i == (ssize_t) argc)
976              ThrowConvertException(OptionError,"MissingArgument",option);
977            if (IsGeometry(argv[i]) == MagickFalse)
978              ThrowConvertInvalidArgumentException(option,argv[i]);
979            break;
980          }
981        if (LocaleCompare("clamp",option+1) == 0)
982          break;
983        if (LocaleCompare("clip",option+1) == 0)
984          break;
985        if (LocaleCompare("clip-mask",option+1) == 0)
986          {
987            if (*option == '+')
988              break;
989            i++;
990            if (i == (ssize_t) argc)
991              ThrowConvertException(OptionError,"MissingArgument",option);
992            break;
993          }
994        if (LocaleCompare("clip-path",option+1) == 0)
995          {
996            i++;
997            if (i == (ssize_t) argc)
998              ThrowConvertException(OptionError,"MissingArgument",option);
999            break;
1000          }
1001        if (LocaleCompare("clone",option+1) == 0)
1002          {
1003            Image
1004              *clone_images,
1005              *clone_list;
1006
1007            clone_list=CloneImageList(image,exception);
1008            if (k != 0)
1009              clone_list=CloneImageList(image_stack[k-1].image,exception);
1010            if (clone_list == (Image *) NULL)
1011              ThrowConvertException(ImageError,"ImageSequenceRequired",option);
1012            FireImageStack(MagickTrue,MagickTrue,MagickTrue);
1013            if (*option == '+')
1014              clone_images=CloneImages(clone_list,"-1",exception);
1015            else
1016              {
1017                i++;
1018                if (i == (ssize_t) argc)
1019                  ThrowConvertException(OptionError,"MissingArgument",option);
1020                if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
1021                  ThrowConvertInvalidArgumentException(option,argv[i]);
1022                clone_images=CloneImages(clone_list,argv[i],exception);
1023              }
1024            if (clone_images == (Image *) NULL)
1025              ThrowConvertException(OptionError,"NoSuchImage",option);
1026            AppendImageStack(clone_images);
1027            clone_list=DestroyImageList(clone_list);
1028            break;
1029          }
1030        if (LocaleCompare("clut",option+1) == 0)
1031          break;
1032        if (LocaleCompare("coalesce",option+1) == 0)
1033          break;
1034        if (LocaleCompare("colorize",option+1) == 0)
1035          {
1036            if (*option == '+')
1037              break;
1038            i++;
1039            if (i == (ssize_t) argc)
1040              ThrowConvertException(OptionError,"MissingArgument",option);
1041            if (IsGeometry(argv[i]) == MagickFalse)
1042              ThrowConvertInvalidArgumentException(option,argv[i]);
1043            break;
1044          }
1045        if (LocaleCompare("color-matrix",option+1) == 0)
1046          {
1047            KernelInfo
1048              *kernel_info;
1049
1050            if (*option == '+')
1051              break;
1052            i++;
1053            if (i == (ssize_t) argc)
1054              ThrowConvertException(OptionError,"MissingArgument",option);
1055            kernel_info=AcquireKernelInfo(argv[i],exception);
1056            if (kernel_info == (KernelInfo *) NULL)
1057              ThrowConvertInvalidArgumentException(option,argv[i]);
1058            kernel_info=DestroyKernelInfo(kernel_info);
1059            break;
1060          }
1061        if (LocaleCompare("colors",option+1) == 0)
1062          {
1063            if (*option == '+')
1064              break;
1065            i++;
1066            if ((i == (ssize_t) argc) ||
1067                (IsGeometry(argv[i]) == MagickFalse))
1068              ThrowConvertException(OptionError,"MissingArgument",option);
1069            break;
1070          }
1071        if (LocaleCompare("colorspace",option+1) == 0)
1072          {
1073            ssize_t
1074              colorspace;
1075
1076            if (*option == '+')
1077              break;
1078            i++;
1079            if (i == (ssize_t) argc)
1080              ThrowConvertException(OptionError,"MissingArgument",option);
1081            colorspace=ParseCommandOption(MagickColorspaceOptions,
1082              MagickFalse,argv[i]);
1083            if (colorspace < 0)
1084              ThrowConvertException(OptionError,"UnrecognizedColorspace",
1085                argv[i]);
1086            break;
1087          }
1088        if (LocaleCompare("combine",option+1) == 0)
1089          break;
1090        if (LocaleCompare("comment",option+1) == 0)
1091          {
1092            if (*option == '+')
1093              break;
1094            i++;
1095            if (i == (ssize_t) argc)
1096              ThrowConvertException(OptionError,"MissingArgument",option);
1097            break;
1098          }
1099        if (LocaleCompare("compare",option+1) == 0)
1100          break;
1101        if (LocaleCompare("complex",option+1) == 0)
1102          {
1103            ssize_t
1104              op;
1105
1106            if (*option == '+')
1107              break;
1108            i++;
1109            if (i == (ssize_t) argc)
1110              ThrowConvertException(OptionError,"MissingArgument",option);
1111            op=ParseCommandOption(MagickComplexOptions,MagickFalse,argv[i]);
1112            if (op < 0)
1113              ThrowConvertException(OptionError,"UnrecognizedComplexOperator",
1114                argv[i]);
1115            break;
1116          }
1117        if (LocaleCompare("compose",option+1) == 0)
1118          {
1119            ssize_t
1120              compose;
1121
1122            if (*option == '+')
1123              break;
1124            i++;
1125            if (i == (ssize_t) argc)
1126              ThrowConvertException(OptionError,"MissingArgument",option);
1127            compose=ParseCommandOption(MagickComposeOptions,MagickFalse,
1128              argv[i]);
1129            if (compose < 0)
1130              ThrowConvertException(OptionError,"UnrecognizedComposeOperator",
1131                argv[i]);
1132            break;
1133          }
1134        if (LocaleCompare("composite",option+1) == 0)
1135          break;
1136        if (LocaleCompare("compress",option+1) == 0)
1137          {
1138            ssize_t
1139              compress;
1140
1141            if (*option == '+')
1142              break;
1143            i++;
1144            if (i == (ssize_t) argc)
1145              ThrowConvertException(OptionError,"MissingArgument",option);
1146            compress=ParseCommandOption(MagickCompressOptions,MagickFalse,
1147              argv[i]);
1148            if (compress < 0)
1149              ThrowConvertException(OptionError,"UnrecognizedImageCompression",
1150                argv[i]);
1151            break;
1152          }
1153        if (LocaleCompare("concurrent",option+1) == 0)
1154          break;
1155        if (LocaleCompare("connected-components",option+1) == 0)
1156          {
1157            i++;
1158            if (i == (ssize_t) argc)
1159              ThrowConvertException(OptionError,"MissingArgument",option);
1160            if (IsGeometry(argv[i]) == MagickFalse)
1161              ThrowConvertInvalidArgumentException(option,argv[i]);
1162            break;
1163          }
1164        if (LocaleCompare("contrast",option+1) == 0)
1165          break;
1166        if (LocaleCompare("contrast-stretch",option+1) == 0)
1167          {
1168            i++;
1169            if (i == (ssize_t) argc)
1170              ThrowConvertException(OptionError,"MissingArgument",option);
1171            if (IsGeometry(argv[i]) == MagickFalse)
1172              ThrowConvertInvalidArgumentException(option,argv[i]);
1173            break;
1174          }
1175        if (LocaleCompare("convolve",option+1) == 0)
1176          {
1177            KernelInfo
1178              *kernel_info;
1179
1180            if (*option == '+')
1181              break;
1182            i++;
1183            if (i == (ssize_t) argc)
1184              ThrowConvertException(OptionError,"MissingArgument",option);
1185            kernel_info=AcquireKernelInfo(argv[i],exception);
1186            if (kernel_info == (KernelInfo *) NULL)
1187              ThrowConvertInvalidArgumentException(option,argv[i]);
1188            kernel_info=DestroyKernelInfo(kernel_info);
1189            break;
1190          }
1191        if (LocaleCompare("copy",option+1) == 0)
1192          {
1193            if (*option == '+')
1194              break;
1195            i++;
1196            if (i == (ssize_t) argc)
1197              ThrowConvertException(OptionError,"MissingArgument",option);
1198            if (IsGeometry(argv[i]) == MagickFalse)
1199              ThrowConvertInvalidArgumentException(option,argv[i]);
1200            i++;
1201            if (i == (ssize_t) argc)
1202              ThrowConvertException(OptionError,"MissingArgument",option);
1203            if (IsGeometry(argv[i]) == MagickFalse)
1204              ThrowConvertInvalidArgumentException(option,argv[i]);
1205            break;
1206          }
1207        if (LocaleCompare("crop",option+1) == 0)
1208          {
1209            if (*option == '+')
1210              break;
1211            i++;
1212            if (i == (ssize_t) argc)
1213              ThrowConvertException(OptionError,"MissingArgument",option);
1214            if (IsGeometry(argv[i]) == MagickFalse)
1215              ThrowConvertInvalidArgumentException(option,argv[i]);
1216            break;
1217          }
1218        if (LocaleCompare("cycle",option+1) == 0)
1219          {
1220            if (*option == '+')
1221              break;
1222            i++;
1223            if (i == (ssize_t) argc)
1224              ThrowConvertException(OptionError,"MissingArgument",option);
1225            if (IsGeometry(argv[i]) == MagickFalse)
1226              ThrowConvertInvalidArgumentException(option,argv[i]);
1227            break;
1228          }
1229        ThrowConvertException(OptionError,"UnrecognizedOption",option)
1230      }
1231      case 'd':
1232      {
1233        if (LocaleCompare("decipher",option+1) == 0)
1234          {
1235            if (*option == '+')
1236              break;
1237            i++;
1238            if (i == (ssize_t) argc)
1239              ThrowConvertException(OptionError,"MissingArgument",option);
1240            break;
1241          }
1242        if (LocaleCompare("deconstruct",option+1) == 0)
1243          break;
1244        if (LocaleCompare("debug",option+1) == 0)
1245          {
1246            ssize_t
1247              event;
1248
1249            if (*option == '+')
1250              break;
1251            i++;
1252            if (i == (ssize_t) argc)
1253              ThrowConvertException(OptionError,"MissingArgument",option);
1254            event=ParseCommandOption(MagickLogEventOptions,MagickFalse,argv[i]);
1255            if (event < 0)
1256              ThrowConvertException(OptionError,"UnrecognizedEventType",
1257                argv[i]);
1258            (void) SetLogEventMask(argv[i]);
1259            break;
1260          }
1261        if (LocaleCompare("define",option+1) == 0)
1262          {
1263            i++;
1264            if (i == (ssize_t) argc)
1265              ThrowConvertException(OptionError,"MissingArgument",option);
1266            if (*option == '+')
1267              {
1268                const char
1269                  *define;
1270
1271                define=GetImageOption(image_info,argv[i]);
1272                if (define == (const char *) NULL)
1273                  ThrowConvertException(OptionError,"NoSuchOption",argv[i]);
1274                break;
1275              }
1276            break;
1277          }
1278        if (LocaleCompare("delay",option+1) == 0)
1279          {
1280            if (*option == '+')
1281              break;
1282            i++;
1283            if (i == (ssize_t) argc)
1284              ThrowConvertException(OptionError,"MissingArgument",option);
1285            if (IsGeometry(argv[i]) == MagickFalse)
1286              ThrowConvertInvalidArgumentException(option,argv[i]);
1287            break;
1288          }
1289        if (LocaleCompare("density",option+1) == 0)
1290          {
1291            if (*option == '+')
1292              break;
1293            i++;
1294            if (i == (ssize_t) argc)
1295              ThrowConvertException(OptionError,"MissingArgument",option);
1296            if (IsGeometry(argv[i]) == MagickFalse)
1297              ThrowConvertInvalidArgumentException(option,argv[i]);
1298            break;
1299          }
1300        if (LocaleCompare("depth",option+1) == 0)
1301          {
1302            if (*option == '+')
1303              break;
1304            i++;
1305            if (i == (ssize_t) argc)
1306              ThrowConvertException(OptionError,"MissingArgument",option);
1307            if (IsGeometry(argv[i]) == MagickFalse)
1308              ThrowConvertInvalidArgumentException(option,argv[i]);
1309            break;
1310          }
1311        if (LocaleCompare("delete",option+1) == 0)
1312          {
1313            if (*option == '+')
1314              break;
1315            i++;
1316            if (i == (ssize_t) argc)
1317              ThrowConvertException(OptionError,"MissingArgument",option);
1318            if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
1319              ThrowConvertInvalidArgumentException(option,argv[i]);
1320            break;
1321          }
1322        if (LocaleCompare("deskew",option+1) == 0)
1323          {
1324            if (*option == '+')
1325              break;
1326            i++;
1327            if (i == (ssize_t) argc)
1328              ThrowConvertException(OptionError,"MissingArgument",option);
1329            if (IsGeometry(argv[i]) == MagickFalse)
1330              ThrowConvertInvalidArgumentException(option,argv[i]);
1331            break;
1332          }
1333        if (LocaleCompare("despeckle",option+1) == 0)
1334          break;
1335        if (LocaleCompare("direction",option+1) == 0)
1336          {
1337            ssize_t
1338              direction;
1339
1340            if (*option == '+')
1341              break;
1342            i++;
1343            if (i == (ssize_t) argc)
1344              ThrowConvertException(OptionError,"MissingArgument",option);
1345            direction=ParseCommandOption(MagickDirectionOptions,MagickFalse,
1346              argv[i]);
1347            if (direction < 0)
1348              ThrowConvertException(OptionError,"UnrecognizedDirectionType",
1349                argv[i]);
1350            break;
1351          }
1352        if (LocaleCompare("display",option+1) == 0)
1353          {
1354            if (*option == '+')
1355              break;
1356            i++;
1357            if (i == (ssize_t) argc)
1358              ThrowConvertException(OptionError,"MissingArgument",option);
1359            break;
1360          }
1361        if (LocaleCompare("dispose",option+1) == 0)
1362          {
1363            ssize_t
1364              dispose;
1365
1366            if (*option == '+')
1367              break;
1368            i++;
1369            if (i == (ssize_t) argc)
1370              ThrowConvertException(OptionError,"MissingArgument",option);
1371            dispose=ParseCommandOption(MagickDisposeOptions,MagickFalse,argv[i]);
1372            if (dispose < 0)
1373              ThrowConvertException(OptionError,"UnrecognizedDisposeMethod",
1374                argv[i]);
1375            break;
1376          }
1377        if (LocaleCompare("distort",option+1) == 0)
1378          {
1379            ssize_t
1380              op;
1381
1382            i++;
1383            if (i == (ssize_t) argc)
1384              ThrowConvertException(OptionError,"MissingArgument",option);
1385            op=ParseCommandOption(MagickDistortOptions,MagickFalse,argv[i]);
1386            if (op < 0)
1387              ThrowConvertException(OptionError,"UnrecognizedDistortMethod",
1388                argv[i]);
1389            i++;
1390            if (i == (ssize_t) argc)
1391              ThrowConvertException(OptionError,"MissingArgument",option);
1392            break;
1393          }
1394        if (LocaleCompare("dither",option+1) == 0)
1395          {
1396            ssize_t
1397              method;
1398
1399            if (*option == '+')
1400              break;
1401            i++;
1402            if (i == (ssize_t) argc)
1403              ThrowConvertException(OptionError,"MissingArgument",option);
1404            method=ParseCommandOption(MagickDitherOptions,MagickFalse,argv[i]);
1405            if (method < 0)
1406              ThrowConvertException(OptionError,"UnrecognizedDitherMethod",
1407                argv[i]);
1408            break;
1409          }
1410        if (LocaleCompare("draw",option+1) == 0)
1411          {
1412            if (*option == '+')
1413              break;
1414            i++;
1415            if (i == (ssize_t) argc)
1416              ThrowConvertException(OptionError,"MissingArgument",option);
1417            break;
1418          }
1419        if (LocaleCompare("duplicate",option+1) == 0)
1420          {
1421            if (*option == '+')
1422              break;
1423            i++;
1424            if (i == (ssize_t) argc)
1425              ThrowConvertException(OptionError,"MissingArgument",option);
1426            if (IsGeometry(argv[i]) == MagickFalse)
1427              ThrowConvertInvalidArgumentException(option,argv[i]);
1428            break;
1429          }
1430        if (LocaleCompare("duration",option+1) == 0)
1431          {
1432            if (*option == '+')
1433              break;
1434            i++;
1435            if (i == (ssize_t) argc)
1436              ThrowConvertException(OptionError,"MissingArgument",option);
1437            if (IsGeometry(argv[i]) == MagickFalse)
1438              ThrowConvertInvalidArgumentException(option,argv[i]);
1439            break;
1440          }
1441        ThrowConvertException(OptionError,"UnrecognizedOption",option)
1442      }
1443      case 'e':
1444      {
1445        if (LocaleCompare("edge",option+1) == 0)
1446          {
1447            if (*option == '+')
1448              break;
1449            i++;
1450            if (i == (ssize_t) argc)
1451              ThrowConvertException(OptionError,"MissingArgument",option);
1452            if (IsGeometry(argv[i]) == MagickFalse)
1453              ThrowConvertInvalidArgumentException(option,argv[i]);
1454            break;
1455          }
1456        if (LocaleCompare("emboss",option+1) == 0)
1457          {
1458            if (*option == '+')
1459              break;
1460            i++;
1461            if (i == (ssize_t) argc)
1462              ThrowConvertException(OptionError,"MissingArgument",option);
1463            if (IsGeometry(argv[i]) == MagickFalse)
1464              ThrowConvertInvalidArgumentException(option,argv[i]);
1465            break;
1466          }
1467        if (LocaleCompare("encipher",option+1) == 0)
1468          {
1469            if (*option == '+')
1470              break;
1471            i++;
1472            if (i == (ssize_t) argc)
1473              ThrowConvertException(OptionError,"MissingArgument",option);
1474            break;
1475          }
1476        if (LocaleCompare("encoding",option+1) == 0)
1477          {
1478            if (*option == '+')
1479              break;
1480            i++;
1481            if (i == (ssize_t) argc)
1482              ThrowConvertException(OptionError,"MissingArgument",option);
1483            break;
1484          }
1485        if (LocaleCompare("endian",option+1) == 0)
1486          {
1487            ssize_t
1488              endian;
1489
1490            if (*option == '+')
1491              break;
1492            i++;
1493            if (i == (ssize_t) argc)
1494              ThrowConvertException(OptionError,"MissingArgument",option);
1495            endian=ParseCommandOption(MagickEndianOptions,MagickFalse,
1496              argv[i]);
1497            if (endian < 0)
1498              ThrowConvertException(OptionError,"UnrecognizedEndianType",
1499                argv[i]);
1500            break;
1501          }
1502        if (LocaleCompare("enhance",option+1) == 0)
1503          break;
1504        if (LocaleCompare("equalize",option+1) == 0)
1505          break;
1506        if (LocaleCompare("evaluate",option+1) == 0)
1507          {
1508            ssize_t
1509              op;
1510
1511            if (*option == '+')
1512              break;
1513            i++;
1514            if (i == (ssize_t) argc)
1515              ThrowConvertException(OptionError,"MissingArgument",option);
1516            op=ParseCommandOption(MagickEvaluateOptions,MagickFalse,argv[i]);
1517            if (op < 0)
1518              ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
1519                argv[i]);
1520            i++;
1521            if (i == (ssize_t) argc)
1522              ThrowConvertException(OptionError,"MissingArgument",option);
1523            if (IsGeometry(argv[i]) == MagickFalse)
1524              ThrowConvertInvalidArgumentException(option,argv[i]);
1525            break;
1526          }
1527        if (LocaleCompare("evaluate-sequence",option+1) == 0)
1528          {
1529            ssize_t
1530              op;
1531
1532            if (*option == '+')
1533              break;
1534            i++;
1535            if (i == (ssize_t) argc)
1536              ThrowConvertException(OptionError,"MissingArgument",option);
1537            op=ParseCommandOption(MagickEvaluateOptions,MagickFalse,argv[i]);
1538            if (op < 0)
1539              ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
1540                argv[i]);
1541            break;
1542          }
1543        if (LocaleCompare("extent",option+1) == 0)
1544          {
1545            if (*option == '+')
1546              break;
1547            i++;
1548            if (i == (ssize_t) argc)
1549              ThrowConvertException(OptionError,"MissingArgument",option);
1550            if (IsGeometry(argv[i]) == MagickFalse)
1551              ThrowConvertInvalidArgumentException(option,argv[i]);
1552            break;
1553          }
1554        if (LocaleCompare("extract",option+1) == 0)
1555          {
1556            if (*option == '+')
1557              break;
1558            i++;
1559            if (i == (ssize_t) argc)
1560              ThrowConvertException(OptionError,"MissingArgument",option);
1561            if (IsGeometry(argv[i]) == MagickFalse)
1562              ThrowConvertInvalidArgumentException(option,argv[i]);
1563            break;
1564          }
1565        ThrowConvertException(OptionError,"UnrecognizedOption",option)
1566      }
1567      case 'f':
1568      {
1569        if (LocaleCompare("family",option+1) == 0)
1570          {
1571            if (*option == '+')
1572              break;
1573            i++;
1574            if (i == (ssize_t) argc)
1575              ThrowConvertException(OptionError,"MissingArgument",option);
1576            break;
1577          }
1578        if (LocaleCompare("features",option+1) == 0)
1579          {
1580            if (*option == '+')
1581              break;
1582            i++;
1583            if (i == (ssize_t) argc)
1584              ThrowConvertException(OptionError,"MissingArgument",option);
1585            if (IsGeometry(argv[i]) == MagickFalse)
1586              ThrowConvertInvalidArgumentException(option,argv[i]);
1587            break;
1588          }
1589        if (LocaleCompare("fft",option+1) == 0)
1590          break;
1591        if (LocaleCompare("fill",option+1) == 0)
1592          {
1593            if (*option == '+')
1594              break;
1595            i++;
1596            if (i == (ssize_t) argc)
1597              ThrowConvertException(OptionError,"MissingArgument",option);
1598            break;
1599          }
1600        if (LocaleCompare("filter",option+1) == 0)
1601          {
1602            ssize_t
1603              filter;
1604
1605            if (*option == '+')
1606              break;
1607            i++;
1608            if (i == (ssize_t) argc)
1609              ThrowConvertException(OptionError,"MissingArgument",option);
1610            filter=ParseCommandOption(MagickFilterOptions,MagickFalse,argv[i]);
1611            if (filter < 0)
1612              ThrowConvertException(OptionError,"UnrecognizedImageFilter",
1613                argv[i]);
1614            break;
1615          }
1616        if (LocaleCompare("flatten",option+1) == 0)
1617          break;
1618        if (LocaleCompare("flip",option+1) == 0)
1619          break;
1620        if (LocaleCompare("flop",option+1) == 0)
1621          break;
1622        if (LocaleCompare("floodfill",option+1) == 0)
1623          {
1624            if (*option == '+')
1625              break;
1626            i++;
1627            if (i == (ssize_t) argc)
1628              ThrowConvertException(OptionError,"MissingArgument",option);
1629            if (IsGeometry(argv[i]) == MagickFalse)
1630              ThrowConvertInvalidArgumentException(option,argv[i]);
1631            i++;
1632            if (i == (ssize_t) argc)
1633              ThrowConvertException(OptionError,"MissingArgument",option);
1634            break;
1635          }
1636        if (LocaleCompare("font",option+1) == 0)
1637          {
1638            if (*option == '+')
1639              break;
1640            i++;
1641            if (i == (ssize_t) argc)
1642              ThrowConvertException(OptionError,"MissingArgument",option);
1643            break;
1644          }
1645        if (LocaleCompare("format",option+1) == 0)
1646          {
1647            if (*option == '+')
1648              break;
1649            i++;
1650            if (i == (ssize_t) argc)
1651              ThrowConvertException(OptionError,"MissingArgument",option);
1652            format=argv[i];
1653            break;
1654          }
1655        if (LocaleCompare("frame",option+1) == 0)
1656          {
1657            if (*option == '+')
1658              break;
1659            i++;
1660            if (i == (ssize_t) argc)
1661              ThrowConvertException(OptionError,"MissingArgument",option);
1662            if (IsGeometry(argv[i]) == MagickFalse)
1663              ThrowConvertInvalidArgumentException(option,argv[i]);
1664            break;
1665          }
1666        if (LocaleCompare("function",option+1) == 0)
1667          {
1668            ssize_t
1669              op;
1670
1671            if (*option == '+')
1672              break;
1673            i++;
1674            if (i == (ssize_t) argc)
1675              ThrowConvertException(OptionError,"MissingArgument",option);
1676            op=ParseCommandOption(MagickFunctionOptions,MagickFalse,argv[i]);
1677            if (op < 0)
1678              ThrowConvertException(OptionError,"UnrecognizedFunction",argv[i]);
1679             i++;
1680             if (i == (ssize_t) argc)
1681               ThrowConvertException(OptionError,"MissingArgument",option);
1682            break;
1683          }
1684        if (LocaleCompare("fuzz",option+1) == 0)
1685          {
1686            if (*option == '+')
1687              break;
1688            i++;
1689            if (i == (ssize_t) argc)
1690              ThrowConvertException(OptionError,"MissingArgument",option);
1691            if (IsGeometry(argv[i]) == MagickFalse)
1692              ThrowConvertInvalidArgumentException(option,argv[i]);
1693            break;
1694          }
1695        if (LocaleCompare("fx",option+1) == 0)
1696          {
1697            if (*option == '+')
1698              break;
1699            i++;
1700            if (i == (ssize_t) argc)
1701              ThrowConvertException(OptionError,"MissingArgument",option);
1702            break;
1703          }
1704        ThrowConvertException(OptionError,"UnrecognizedOption",option)
1705      }
1706      case 'g':
1707      {
1708        if (LocaleCompare("gamma",option+1) == 0)
1709          {
1710            i++;
1711            if (i == (ssize_t) argc)
1712              ThrowConvertException(OptionError,"MissingArgument",option);
1713            if (IsGeometry(argv[i]) == MagickFalse)
1714              ThrowConvertInvalidArgumentException(option,argv[i]);
1715            break;
1716          }
1717        if ((LocaleCompare("gaussian-blur",option+1) == 0) ||
1718            (LocaleCompare("gaussian",option+1) == 0))
1719          {
1720            i++;
1721            if (i == (ssize_t) argc)
1722              ThrowConvertException(OptionError,"MissingArgument",option);
1723            if (IsGeometry(argv[i]) == MagickFalse)
1724              ThrowConvertInvalidArgumentException(option,argv[i]);
1725            break;
1726          }
1727        if (LocaleCompare("geometry",option+1) == 0)
1728          {
1729            if (*option == '+')
1730              break;
1731            i++;
1732            if (i == (ssize_t) argc)
1733              ThrowConvertException(OptionError,"MissingArgument",option);
1734            if (IsGeometry(argv[i]) == MagickFalse)
1735              ThrowConvertInvalidArgumentException(option,argv[i]);
1736            break;
1737          }
1738        if (LocaleCompare("gravity",option+1) == 0)
1739          {
1740            ssize_t
1741              gravity;
1742
1743            if (*option == '+')
1744              break;
1745            i++;
1746            if (i == (ssize_t) argc)
1747              ThrowConvertException(OptionError,"MissingArgument",option);
1748            gravity=ParseCommandOption(MagickGravityOptions,MagickFalse,
1749              argv[i]);
1750            if (gravity < 0)
1751              ThrowConvertException(OptionError,"UnrecognizedGravityType",
1752                argv[i]);
1753            break;
1754          }
1755        if (LocaleCompare("grayscale",option+1) == 0)
1756          {
1757            ssize_t
1758              method;
1759
1760            if (*option == '+')
1761              break;
1762            i++;
1763            if (i == (ssize_t) argc)
1764              ThrowConvertException(OptionError,"MissingArgument",option);
1765            method=ParseCommandOption(MagickPixelIntensityOptions,MagickFalse,
1766              argv[i]);
1767            if (method < 0)
1768              ThrowConvertException(OptionError,"UnrecognizedIntensityMethod",
1769                argv[i]);
1770            break;
1771          }
1772        if (LocaleCompare("green-primary",option+1) == 0)
1773          {
1774            if (*option == '+')
1775              break;
1776            i++;
1777            if (i == (ssize_t) argc)
1778              ThrowConvertException(OptionError,"MissingArgument",option);
1779            if (IsGeometry(argv[i]) == MagickFalse)
1780              ThrowConvertInvalidArgumentException(option,argv[i]);
1781            break;
1782          }
1783        ThrowConvertException(OptionError,"UnrecognizedOption",option)
1784      }
1785      case 'h':
1786      {
1787        if (LocaleCompare("hald-clut",option+1) == 0)
1788          break;
1789        if ((LocaleCompare("help",option+1) == 0) ||
1790            (LocaleCompare("-help",option+1) == 0))
1791          return(ConvertUsage());
1792        if (LocaleCompare("hough-lines",option+1) == 0)
1793          {
1794            if (*option == '+')
1795              break;
1796            i++;
1797            if (i == (ssize_t) argc)
1798              ThrowConvertException(OptionError,"MissingArgument",option);
1799            if (IsGeometry(argv[i]) == MagickFalse)
1800              ThrowConvertInvalidArgumentException(option,argv[i]);
1801            break;
1802          }
1803        ThrowConvertException(OptionError,"UnrecognizedOption",option)
1804      }
1805      case 'i':
1806      {
1807        if (LocaleCompare("identify",option+1) == 0)
1808          break;
1809        if (LocaleCompare("ift",option+1) == 0)
1810          break;
1811        if (LocaleCompare("implode",option+1) == 0)
1812          {
1813            if (*option == '+')
1814              break;
1815            i++;
1816            if (i == (ssize_t) argc)
1817              ThrowConvertException(OptionError,"MissingArgument",option);
1818            if (IsGeometry(argv[i]) == MagickFalse)
1819              ThrowConvertInvalidArgumentException(option,argv[i]);
1820            break;
1821          }
1822        if (LocaleCompare("insert",option+1) == 0)
1823          {
1824            if (*option == '+')
1825              break;
1826            i++;
1827            if (i == (ssize_t) argc)
1828              ThrowConvertException(OptionError,"MissingArgument",option);
1829            if (IsGeometry(argv[i]) == MagickFalse)
1830              ThrowConvertInvalidArgumentException(option,argv[i]);
1831            break;
1832          }
1833        if (LocaleCompare("intensity",option+1) == 0)
1834          {
1835            ssize_t
1836              intensity;
1837
1838            if (*option == '+')
1839              break;
1840            i++;
1841            if (i == (ssize_t) argc)
1842              ThrowConvertException(OptionError,"MissingArgument",option);
1843            intensity=ParseCommandOption(MagickPixelIntensityOptions,
1844              MagickFalse,argv[i]);
1845            if (intensity < 0)
1846              ThrowConvertException(OptionError,"UnrecognizedIntensityMethod",
1847                argv[i]);
1848            break;
1849          }
1850        if (LocaleCompare("intent",option+1) == 0)
1851          {
1852            ssize_t
1853              intent;
1854
1855            if (*option == '+')
1856              break;
1857            i++;
1858            if (i == (ssize_t) argc)
1859              ThrowConvertException(OptionError,"MissingArgument",option);
1860            intent=ParseCommandOption(MagickIntentOptions,MagickFalse,argv[i]);
1861            if (intent < 0)
1862              ThrowConvertException(OptionError,"UnrecognizedIntentType",argv[i]);
1863            break;
1864          }
1865        if (LocaleCompare("interlace",option+1) == 0)
1866          {
1867            ssize_t
1868              interlace;
1869
1870            if (*option == '+')
1871              break;
1872            i++;
1873            if (i == (ssize_t) argc)
1874              ThrowConvertException(OptionError,"MissingArgument",option);
1875            interlace=ParseCommandOption(MagickInterlaceOptions,MagickFalse,
1876              argv[i]);
1877            if (interlace < 0)
1878              ThrowConvertException(OptionError,"UnrecognizedInterlaceType",
1879                argv[i]);
1880            break;
1881          }
1882        if (LocaleCompare("interline-spacing",option+1) == 0)
1883          {
1884            if (*option == '+')
1885              break;
1886            i++;
1887            if (i == (ssize_t) argc)
1888              ThrowConvertException(OptionError,"MissingArgument",option);
1889            if (IsGeometry(argv[i]) == MagickFalse)
1890              ThrowConvertInvalidArgumentException(option,argv[i]);
1891            break;
1892          }
1893        if (LocaleCompare("interpolate",option+1) == 0)
1894          {
1895            ssize_t
1896              interpolate;
1897
1898            if (*option == '+')
1899              break;
1900            i++;
1901            if (i == (ssize_t) argc)
1902              ThrowConvertException(OptionError,"MissingArgument",option);
1903            interpolate=ParseCommandOption(MagickInterpolateOptions,MagickFalse,
1904              argv[i]);
1905            if (interpolate < 0)
1906              ThrowConvertException(OptionError,"UnrecognizedInterpolateMethod",
1907                argv[i]);
1908            break;
1909          }
1910        if (LocaleCompare("interword-spacing",option+1) == 0)
1911          {
1912            if (*option == '+')
1913              break;
1914            i++;
1915            if (i == (ssize_t) argc)
1916              ThrowConvertException(OptionError,"MissingArgument",option);
1917            if (IsGeometry(argv[i]) == MagickFalse)
1918              ThrowConvertInvalidArgumentException(option,argv[i]);
1919            break;
1920          }
1921        ThrowConvertException(OptionError,"UnrecognizedOption",option)
1922      }
1923      case 'k':
1924      {
1925        if (LocaleCompare("kerning",option+1) == 0)
1926          {
1927            if (*option == '+')
1928              break;
1929            i++;
1930            if (i == (ssize_t) argc)
1931              ThrowConvertException(OptionError,"MissingArgument",option);
1932            if (IsGeometry(argv[i]) == MagickFalse)
1933              ThrowConvertInvalidArgumentException(option,argv[i]);
1934            break;
1935          }
1936        if (LocaleCompare("kuwahara",option+1) == 0)
1937          {
1938            if (*option == '+')
1939              break;
1940            i++;
1941            if (i == (ssize_t) argc)
1942              ThrowConvertException(OptionError,"MissingArgument",option);
1943            if (IsGeometry(argv[i]) == MagickFalse)
1944              ThrowConvertInvalidArgumentException(option,argv[i]);
1945            break;
1946          }
1947        ThrowConvertException(OptionError,"UnrecognizedOption",option)
1948      }
1949      case 'l':
1950      {
1951        if (LocaleCompare("label",option+1) == 0)
1952          {
1953            if (*option == '+')
1954              break;
1955            i++;
1956            if (i == (ssize_t) argc)
1957              ThrowConvertException(OptionError,"MissingArgument",option);
1958            break;
1959          }
1960        if (LocaleCompare("lat",option+1) == 0)
1961          {
1962            if (*option == '+')
1963              break;
1964            i++;
1965            if (i == (ssize_t) argc)
1966              ThrowConvertException(OptionError,"MissingArgument",option);
1967            if (IsGeometry(argv[i]) == MagickFalse)
1968              ThrowConvertInvalidArgumentException(option,argv[i]);
1969            break;
1970          }
1971        if (LocaleCompare("layers",option+1) == 0)
1972          {
1973            ssize_t
1974              type;
1975
1976            if (*option == '+')
1977              break;
1978            i++;
1979            if (i == (ssize_t) argc)
1980              ThrowConvertException(OptionError,"MissingArgument",option);
1981            type=ParseCommandOption(MagickLayerOptions,MagickFalse,argv[i]);
1982            if (type < 0)
1983              ThrowConvertException(OptionError,"UnrecognizedLayerMethod",
1984                argv[i]);
1985            break;
1986          }
1987        if (LocaleCompare("level",option+1) == 0)
1988          {
1989            i++;
1990            if (i == (ssize_t) argc)
1991              ThrowConvertException(OptionError,"MissingArgument",option);
1992            if (IsGeometry(argv[i]) == MagickFalse)
1993              ThrowConvertInvalidArgumentException(option,argv[i]);
1994            break;
1995          }
1996        if (LocaleCompare("level-colors",option+1) == 0)
1997          {
1998            i++;
1999            if (i == (ssize_t) argc)
2000              ThrowConvertException(OptionError,"MissingArgument",option);
2001            break;
2002          }
2003        if (LocaleCompare("limit",option+1) == 0)
2004          {
2005            char
2006              *p;
2007
2008            double
2009              value;
2010
2011            ssize_t
2012              resource;
2013
2014            if (*option == '+')
2015              break;
2016            i++;
2017            if (i == (ssize_t) argc)
2018              ThrowConvertException(OptionError,"MissingArgument",option);
2019            resource=ParseCommandOption(MagickResourceOptions,MagickFalse,
2020              argv[i]);
2021            if (resource < 0)
2022              ThrowConvertException(OptionError,"UnrecognizedResourceType",
2023                argv[i]);
2024            i++;
2025            if (i == (ssize_t) argc)
2026              ThrowConvertException(OptionError,"MissingArgument",option);
2027            value=StringToDouble(argv[i],&p);
2028            (void) value;
2029            if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
2030              ThrowConvertInvalidArgumentException(option,argv[i]);
2031            break;
2032          }
2033        if (LocaleCompare("linear-stretch",option+1) == 0)
2034          {
2035            i++;
2036            if (i == (ssize_t) argc)
2037              ThrowConvertException(OptionError,"MissingArgument",option);
2038            if (IsGeometry(argv[i]) == MagickFalse)
2039              ThrowConvertInvalidArgumentException(option,argv[i]);
2040            break;
2041          }
2042        if (LocaleCompare("liquid-rescale",option+1) == 0)
2043          {
2044            i++;
2045            if (i == (ssize_t) argc)
2046              ThrowConvertException(OptionError,"MissingArgument",option);
2047            if (IsGeometry(argv[i]) == MagickFalse)
2048              ThrowConvertInvalidArgumentException(option,argv[i]);
2049            break;
2050          }
2051        if (LocaleCompare("list",option+1) == 0)
2052          {
2053            ssize_t
2054              list;
2055
2056            if (*option == '+')
2057              break;
2058            i++;
2059            if (i == (ssize_t) argc)
2060              ThrowConvertException(OptionError,"MissingArgument",option);
2061            list=ParseCommandOption(MagickListOptions,MagickFalse,argv[i]);
2062            if (list < 0)
2063              ThrowConvertException(OptionError,"UnrecognizedListType",argv[i]);
2064            status=MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
2065              argv+j,exception);
2066            DestroyConvert();
2067            return(status == 0 ? MagickTrue : MagickFalse);
2068          }
2069        if (LocaleCompare("local-contrast",option+1) == 0)
2070          {
2071            i++;
2072            if (i == (ssize_t)argc)
2073              ThrowConvertException(OptionError, "MissingArgument", option);
2074            if (IsGeometry(argv[i]) == MagickFalse)
2075              ThrowConvertInvalidArgumentException(option,argv[i]);
2076            break;
2077          }
2078        if (LocaleCompare("log",option+1) == 0)
2079          {
2080            if (*option == '+')
2081              break;
2082            i++;
2083            if ((i == (ssize_t) argc) ||
2084                (strchr(argv[i],'%') == (char *) NULL))
2085              ThrowConvertException(OptionError,"MissingArgument",option);
2086            break;
2087          }
2088        if (LocaleCompare("loop",option+1) == 0)
2089          {
2090            if (*option == '+')
2091              break;
2092            i++;
2093            if (i == (ssize_t) argc)
2094              ThrowConvertException(OptionError,"MissingArgument",option);
2095            if (IsGeometry(argv[i]) == MagickFalse)
2096              ThrowConvertInvalidArgumentException(option,argv[i]);
2097            break;
2098          }
2099        ThrowConvertException(OptionError,"UnrecognizedOption",option)
2100      }
2101      case 'm':
2102      {
2103        if (LocaleCompare("map",option+1) == 0)
2104          {
2105            if (*option == '+')
2106              break;
2107            i++;
2108            if (i == (ssize_t) argc)
2109              ThrowConvertException(OptionError,"MissingArgument",option);
2110            break;
2111          }
2112        if (LocaleCompare("mask",option+1) == 0)
2113          {
2114            if (*option == '+')
2115              break;
2116            i++;
2117            if (i == (ssize_t) argc)
2118              ThrowConvertException(OptionError,"MissingArgument",option);
2119            break;
2120          }
2121        if (LocaleCompare("matte",option+1) == 0)
2122          break;
2123        if (LocaleCompare("maximum",option+1) == 0)
2124          break;
2125        if (LocaleCompare("mean-shift",option+1) == 0)
2126          {
2127            if (*option == '+')
2128              break;
2129            i++;
2130            if (i == (ssize_t) argc)
2131              ThrowConvertException(OptionError,"MissingArgument",option);
2132            if (IsGeometry(argv[i]) == MagickFalse)
2133              ThrowConvertInvalidArgumentException(option,argv[i]);
2134            break;
2135          }
2136        if (LocaleCompare("median",option+1) == 0)
2137          {
2138            if (*option == '+')
2139              break;
2140            i++;
2141            if (i == (ssize_t) argc)
2142              ThrowConvertException(OptionError,"MissingArgument",option);
2143            if (IsGeometry(argv[i]) == MagickFalse)
2144              ThrowConvertInvalidArgumentException(option,argv[i]);
2145            break;
2146          }
2147        if (LocaleCompare("metric",option+1) == 0)
2148          {
2149            ssize_t
2150              type;
2151
2152            if (*option == '+')
2153              break;
2154            i++;
2155            if (i == (ssize_t) argc)
2156              ThrowConvertException(OptionError,"MissingArgument",option);
2157            type=ParseCommandOption(MagickMetricOptions,MagickTrue,argv[i]);
2158            if (type < 0)
2159              ThrowConvertException(OptionError,"UnrecognizedMetricType",
2160                argv[i]);
2161            break;
2162          }
2163        if (LocaleCompare("minimum",option+1) == 0)
2164          break;
2165        if (LocaleCompare("mode",option+1) == 0)
2166          {
2167            if (*option == '+')
2168              break;
2169            i++;
2170            if (i == (ssize_t) argc)
2171              ThrowConvertException(OptionError,"MissingArgument",option);
2172            if (IsGeometry(argv[i]) == MagickFalse)
2173              ThrowConvertInvalidArgumentException(option,argv[i]);
2174            break;
2175          }
2176        if (LocaleCompare("modulate",option+1) == 0)
2177          {
2178            if (*option == '+')
2179              break;
2180            i++;
2181            if (i == (ssize_t) argc)
2182              ThrowConvertException(OptionError,"MissingArgument",option);
2183            if (IsGeometry(argv[i]) == MagickFalse)
2184              ThrowConvertInvalidArgumentException(option,argv[i]);
2185            break;
2186          }
2187        if (LocaleCompare("moments",option+1) == 0)
2188          break;
2189        if (LocaleCompare("monitor",option+1) == 0)
2190          break;
2191        if (LocaleCompare("monochrome",option+1) == 0)
2192          break;
2193        if (LocaleCompare("morph",option+1) == 0)
2194          {
2195            if (*option == '+')
2196              break;
2197            i++;
2198            if (i == (ssize_t) argc)
2199              ThrowConvertException(OptionError,"MissingArgument",option);
2200            if (IsGeometry(argv[i]) == MagickFalse)
2201              ThrowConvertInvalidArgumentException(option,argv[i]);
2202            break;
2203          }
2204        if (LocaleCompare("morphology",option+1) == 0)
2205          {
2206            char
2207              token[MagickPathExtent];
2208
2209            KernelInfo
2210              *kernel_info;
2211
2212            ssize_t
2213              op;
2214
2215            i++;
2216            if (i == (ssize_t) argc)
2217              ThrowConvertException(OptionError,"MissingArgument",option);
2218            GetNextToken(argv[i],(const char **) NULL,MagickPathExtent,token);
2219            op=ParseCommandOption(MagickMorphologyOptions,MagickFalse,token);
2220            if (op < 0)
2221              ThrowConvertException(OptionError,"UnrecognizedMorphologyMethod",
2222                token);
2223            i++;
2224            if (i == (ssize_t) argc)
2225              ThrowConvertException(OptionError,"MissingArgument",option);
2226            kernel_info=AcquireKernelInfo(argv[i],exception);
2227            if (kernel_info == (KernelInfo *) NULL)
2228              ThrowConvertInvalidArgumentException(option,argv[i]);
2229            kernel_info=DestroyKernelInfo(kernel_info);
2230            break;
2231          }
2232        if (LocaleCompare("mosaic",option+1) == 0)
2233          break;
2234        if (LocaleCompare("motion-blur",option+1) == 0)
2235          {
2236            if (*option == '+')
2237              break;
2238            i++;
2239            if (i == (ssize_t) argc)
2240              ThrowConvertException(OptionError,"MissingArgument",option);
2241            if (IsGeometry(argv[i]) == MagickFalse)
2242              ThrowConvertInvalidArgumentException(option,argv[i]);
2243            break;
2244          }
2245        ThrowConvertException(OptionError,"UnrecognizedOption",option)
2246      }
2247      case 'n':
2248      {
2249        if (LocaleCompare("negate",option+1) == 0)
2250          break;
2251        if (LocaleCompare("noise",option+1) == 0)
2252          {
2253            i++;
2254            if (i == (ssize_t) argc)
2255              ThrowConvertException(OptionError,"MissingArgument",option);
2256            if (*option == '+')
2257              {
2258                ssize_t
2259                  noise;
2260
2261                noise=ParseCommandOption(MagickNoiseOptions,MagickFalse,argv[i]);
2262                if (noise < 0)
2263                  ThrowConvertException(OptionError,"UnrecognizedNoiseType",
2264                    argv[i]);
2265                break;
2266              }
2267            if (IsGeometry(argv[i]) == MagickFalse)
2268              ThrowConvertInvalidArgumentException(option,argv[i]);
2269            break;
2270          }
2271        if (LocaleCompare("noop",option+1) == 0)
2272          break;
2273        if (LocaleCompare("normalize",option+1) == 0)
2274          break;
2275        ThrowConvertException(OptionError,"UnrecognizedOption",option)
2276      }
2277      case 'o':
2278      {
2279        if (LocaleCompare("opaque",option+1) == 0)
2280          {
2281            i++;
2282            if (i == (ssize_t) argc)
2283              ThrowConvertException(OptionError,"MissingArgument",option);
2284            break;
2285          }
2286        if (LocaleCompare("ordered-dither",option+1) == 0)
2287          {
2288            if (*option == '+')
2289              break;
2290            i++;
2291            if (i == (ssize_t) argc)
2292              ThrowConvertException(OptionError,"MissingArgument",option);
2293            break;
2294          }
2295        if (LocaleCompare("orient",option+1) == 0)
2296          {
2297            ssize_t
2298              orientation;
2299
2300            if (*option == '+')
2301              break;
2302            i++;
2303            if (i == (ssize_t) argc)
2304              ThrowConvertException(OptionError,"MissingArgument",option);
2305            orientation=ParseCommandOption(MagickOrientationOptions,
2306              MagickFalse,argv[i]);
2307            if (orientation < 0)
2308              ThrowConvertException(OptionError,"UnrecognizedImageOrientation",
2309                argv[i]);
2310            break;
2311          }
2312        ThrowConvertException(OptionError,"UnrecognizedOption",argv[i])
2313      }
2314      case 'p':
2315      {
2316        if (LocaleCompare("page",option+1) == 0)
2317          {
2318            if (*option == '+')
2319              break;
2320            i++;
2321            if (i == (ssize_t) argc)
2322              ThrowConvertException(OptionError,"MissingArgument",option);
2323            break;
2324          }
2325        if (LocaleCompare("paint",option+1) == 0)
2326          {
2327            if (*option == '+')
2328              break;
2329            i++;
2330            if (i == (ssize_t) argc)
2331              ThrowConvertException(OptionError,"MissingArgument",option);
2332            if (IsGeometry(argv[i]) == MagickFalse)
2333              ThrowConvertInvalidArgumentException(option,argv[i]);
2334            break;
2335          }
2336        if (LocaleCompare("perceptible",option+1) == 0)
2337          {
2338            if (*option == '+')
2339              break;
2340            i++;
2341            if (i == (ssize_t) argc)
2342              ThrowConvertException(OptionError,"MissingArgument",option);
2343            if (IsGeometry(argv[i]) == MagickFalse)
2344              ThrowConvertInvalidArgumentException(option,argv[i]);
2345            break;
2346          }
2347        if (LocaleCompare("ping",option+1) == 0)
2348          break;
2349        if (LocaleCompare("pointsize",option+1) == 0)
2350          {
2351            if (*option == '+')
2352              break;
2353            i++;
2354            if (i == (ssize_t) argc)
2355              ThrowConvertException(OptionError,"MissingArgument",option);
2356            if (IsGeometry(argv[i]) == MagickFalse)
2357              ThrowConvertInvalidArgumentException(option,argv[i]);
2358            break;
2359          }
2360        if (LocaleCompare("polaroid",option+1) == 0)
2361          {
2362            if (*option == '+')
2363              break;
2364            i++;
2365            if (i == (ssize_t) argc)
2366              ThrowConvertException(OptionError,"MissingArgument",option);
2367            if (IsGeometry(argv[i]) == MagickFalse)
2368              ThrowConvertInvalidArgumentException(option,argv[i]);
2369            break;
2370          }
2371        if (LocaleCompare("poly",option+1) == 0)
2372          {
2373            if (*option == '+')
2374              break;
2375            i++;
2376            if (i == (ssize_t) argc)
2377              ThrowConvertException(OptionError,"MissingArgument",option);
2378            if (IsGeometry(argv[i]) == MagickFalse)
2379              ThrowConvertInvalidArgumentException(option,argv[i]);
2380            break;
2381          }
2382        if (LocaleCompare("posterize",option+1) == 0)
2383          {
2384            if (*option == '+')
2385              break;
2386            i++;
2387            if (i == (ssize_t) argc)
2388              ThrowConvertException(OptionError,"MissingArgument",option);
2389            if (IsGeometry(argv[i]) == MagickFalse)
2390              ThrowConvertInvalidArgumentException(option,argv[i]);
2391            break;
2392          }
2393        if (LocaleCompare("precision",option+1) == 0)
2394          {
2395            if (*option == '+')
2396              break;
2397            i++;
2398            if (i == (ssize_t) argc)
2399              ThrowConvertException(OptionError,"MissingArgument",option);
2400            if (IsGeometry(argv[i]) == MagickFalse)
2401              ThrowConvertInvalidArgumentException(option,argv[i]);
2402            break;
2403          }
2404        if (LocaleCompare("preview",option+1) == 0)
2405          {
2406            ssize_t
2407              preview;
2408
2409            if (*option == '+')
2410              break;
2411            i++;
2412            if (i == (ssize_t) argc)
2413              ThrowConvertException(OptionError,"MissingArgument",option);
2414            preview=ParseCommandOption(MagickPreviewOptions,MagickFalse,
2415              argv[i]);
2416            if (preview < 0)
2417              ThrowConvertException(OptionError,"UnrecognizedPreviewType",
2418                argv[i]);
2419            break;
2420          }
2421        if (LocaleCompare("print",option+1) == 0)
2422          {
2423            if (*option == '+')
2424              break;
2425            i++;
2426            if (i == (ssize_t) argc)
2427              ThrowConvertException(OptionError,"MissingArgument",option);
2428            break;
2429          }
2430        if (LocaleCompare("process",option+1) == 0)
2431          {
2432            if (*option == '+')
2433              break;
2434            i++;
2435            if (i == (ssize_t) argc)
2436              ThrowConvertException(OptionError,"MissingArgument",option);
2437            break;
2438          }
2439        if (LocaleCompare("profile",option+1) == 0)
2440          {
2441            i++;
2442            if (i == (ssize_t) argc)
2443              ThrowConvertException(OptionError,"MissingArgument",option);
2444            break;
2445          }
2446        ThrowConvertException(OptionError,"UnrecognizedOption",option)
2447      }
2448      case 'q':
2449      {
2450        if (LocaleCompare("quality",option+1) == 0)
2451          {
2452            if (*option == '+')
2453              break;
2454            i++;
2455            if (i == (ssize_t) argc)
2456              ThrowConvertException(OptionError,"MissingArgument",option);
2457            if (IsGeometry(argv[i]) == MagickFalse)
2458              ThrowConvertInvalidArgumentException(option,argv[i]);
2459            break;
2460          }
2461        if (LocaleCompare("quantize",option+1) == 0)
2462          {
2463            ssize_t
2464              colorspace;
2465
2466            if (*option == '+')
2467              break;
2468            i++;
2469            if (i == (ssize_t) argc)
2470              ThrowConvertException(OptionError,"MissingArgument",option);
2471            colorspace=ParseCommandOption(MagickColorspaceOptions,
2472              MagickFalse,argv[i]);
2473            if (colorspace < 0)
2474              ThrowConvertException(OptionError,"UnrecognizedColorspace",
2475                argv[i]);
2476            break;
2477          }
2478        if (LocaleCompare("quiet",option+1) == 0)
2479          break;
2480        ThrowConvertException(OptionError,"UnrecognizedOption",option)
2481      }
2482      case 'r':
2483      {
2484        if (LocaleCompare("rotational-blur",option+1) == 0)
2485          {
2486            i++;
2487            if (i == (ssize_t) argc)
2488              ThrowConvertException(OptionError,"MissingArgument",option);
2489            if (IsGeometry(argv[i]) == MagickFalse)
2490              ThrowConvertInvalidArgumentException(option,argv[i]);
2491            break;
2492          }
2493        if (LocaleCompare("raise",option+1) == 0)
2494          {
2495            i++;
2496            if (i == (ssize_t) argc)
2497              ThrowConvertException(OptionError,"MissingArgument",option);
2498            if (IsGeometry(argv[i]) == MagickFalse)
2499              ThrowConvertInvalidArgumentException(option,argv[i]);
2500            break;
2501          }
2502        if (LocaleCompare("random-threshold",option+1) == 0)
2503          {
2504            if (*option == '+')
2505              break;
2506            i++;
2507            if (i == (ssize_t) argc)
2508              ThrowConvertException(OptionError,"MissingArgument",option);
2509            if (IsGeometry(argv[i]) == MagickFalse)
2510              ThrowConvertInvalidArgumentException(option,argv[i]);
2511            break;
2512          }
2513        if (LocaleCompare("red-primary",option+1) == 0)
2514          {
2515            if (*option == '+')
2516              break;
2517            i++;
2518            if (i == (ssize_t) argc)
2519              ThrowConvertException(OptionError,"MissingArgument",option);
2520            if (IsGeometry(argv[i]) == MagickFalse)
2521              ThrowConvertInvalidArgumentException(option,argv[i]);
2522            break;
2523          }
2524        if (LocaleCompare("regard-warnings",option+1) == 0)
2525          break;
2526        if (LocaleCompare("region",option+1) == 0)
2527          {
2528            if (*option == '+')
2529              break;
2530            i++;
2531            if (i == (ssize_t) argc)
2532              ThrowConvertException(OptionError,"MissingArgument",option);
2533            if (IsGeometry(argv[i]) == MagickFalse)
2534              ThrowConvertInvalidArgumentException(option,argv[i]);
2535            break;
2536          }
2537        if (LocaleCompare("remap",option+1) == 0)
2538          {
2539            if (*option == '+')
2540              break;
2541            i++;
2542            if (i == (ssize_t) argc)
2543              ThrowConvertException(OptionError,"MissingArgument",option);
2544            break;
2545          }
2546        if (LocaleCompare("render",option+1) == 0)
2547          break;
2548        if (LocaleCompare("repage",option+1) == 0)
2549          {
2550            if (*option == '+')
2551              break;
2552            i++;
2553            if (i == (ssize_t) argc)
2554              ThrowConvertException(OptionError,"MissingArgument",option);
2555            if (IsGeometry(argv[i]) == MagickFalse)
2556              ThrowConvertInvalidArgumentException(option,argv[i]);
2557            break;
2558          }
2559        if (LocaleCompare("resample",option+1) == 0)
2560          {
2561            if (*option == '+')
2562              break;
2563            i++;
2564            if (i == (ssize_t) argc)
2565              ThrowConvertException(OptionError,"MissingArgument",option);
2566            if (IsGeometry(argv[i]) == MagickFalse)
2567              ThrowConvertInvalidArgumentException(option,argv[i]);
2568            break;
2569          }
2570        if (LocaleCompare("resize",option+1) == 0)
2571          {
2572            if (*option == '+')
2573              break;
2574            i++;
2575            if (i == (ssize_t) argc)
2576              ThrowConvertException(OptionError,"MissingArgument",option);
2577            if (IsGeometry(argv[i]) == MagickFalse)
2578              ThrowConvertInvalidArgumentException(option,argv[i]);
2579            break;
2580          }
2581        if (LocaleNCompare("respect-parentheses",option+1,17) == 0)
2582          {
2583            respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
2584            break;
2585          }
2586        if (LocaleCompare("reverse",option+1) == 0)
2587          break;
2588        if (LocaleCompare("roll",option+1) == 0)
2589          {
2590            if (*option == '+')
2591              break;
2592            i++;
2593            if (i == (ssize_t) argc)
2594              ThrowConvertException(OptionError,"MissingArgument",option);
2595            if (IsGeometry(argv[i]) == MagickFalse)
2596              ThrowConvertInvalidArgumentException(option,argv[i]);
2597            break;
2598          }
2599        if (LocaleCompare("rotate",option+1) == 0)
2600          {
2601            i++;
2602            if (i == (ssize_t) argc)
2603              ThrowConvertException(OptionError,"MissingArgument",option);
2604            if (IsGeometry(argv[i]) == MagickFalse)
2605              ThrowConvertInvalidArgumentException(option,argv[i]);
2606            break;
2607          }
2608        ThrowConvertException(OptionError,"UnrecognizedOption",option)
2609      }
2610      case 's':
2611      {
2612        if (LocaleCompare("sample",option+1) == 0)
2613          {
2614            if (*option == '+')
2615              break;
2616            i++;
2617            if (i == (ssize_t) argc)
2618              ThrowConvertException(OptionError,"MissingArgument",option);
2619            if (IsGeometry(argv[i]) == MagickFalse)
2620              ThrowConvertInvalidArgumentException(option,argv[i]);
2621            break;
2622          }
2623        if (LocaleCompare("sampling-factor",option+1) == 0)
2624          {
2625            if (*option == '+')
2626              break;
2627            i++;
2628            if (i == (ssize_t) argc)
2629              ThrowConvertException(OptionError,"MissingArgument",option);
2630            if (IsGeometry(argv[i]) == MagickFalse)
2631              ThrowConvertInvalidArgumentException(option,argv[i]);
2632            break;
2633          }
2634        if (LocaleCompare("scale",option+1) == 0)
2635          {
2636            if (*option == '+')
2637              break;
2638            i++;
2639            if (i == (ssize_t) argc)
2640              ThrowConvertException(OptionError,"MissingArgument",option);
2641            if (IsGeometry(argv[i]) == MagickFalse)
2642              ThrowConvertInvalidArgumentException(option,argv[i]);
2643            break;
2644          }
2645        if (LocaleCompare("scene",option+1) == 0)
2646          {
2647            if (*option == '+')
2648              break;
2649            i++;
2650            if (i == (ssize_t) argc)
2651              ThrowConvertException(OptionError,"MissingArgument",option);
2652            if (IsGeometry(argv[i]) == MagickFalse)
2653              ThrowConvertInvalidArgumentException(option,argv[i]);
2654            break;
2655          }
2656        if (LocaleCompare("seed",option+1) == 0)
2657          {
2658            if (*option == '+')
2659              break;
2660            i++;
2661            if (i == (ssize_t) argc)
2662              ThrowConvertException(OptionError,"MissingArgument",option);
2663            if (IsGeometry(argv[i]) == MagickFalse)
2664              ThrowConvertInvalidArgumentException(option,argv[i]);
2665            break;
2666          }
2667        if (LocaleCompare("segment",option+1) == 0)
2668          {
2669            if (*option == '+')
2670              break;
2671            i++;
2672            if (i == (ssize_t) argc)
2673              ThrowConvertException(OptionError,"MissingArgument",option);
2674            if (IsGeometry(argv[i]) == MagickFalse)
2675              ThrowConvertInvalidArgumentException(option,argv[i]);
2676            break;
2677          }
2678        if (LocaleCompare("selective-blur",option+1) == 0)
2679          {
2680            i++;
2681            if (i == (ssize_t) argc)
2682              ThrowConvertException(OptionError,"MissingArgument",option);
2683            if (IsGeometry(argv[i]) == MagickFalse)
2684              ThrowConvertInvalidArgumentException(option,argv[i]);
2685            break;
2686          }
2687        if (LocaleCompare("separate",option+1) == 0)
2688          break;
2689        if (LocaleCompare("sepia-tone",option+1) == 0)
2690          {
2691            if (*option == '+')
2692              break;
2693            i++;
2694            if (i == (ssize_t) argc)
2695              ThrowConvertException(OptionError,"MissingArgument",option);
2696            if (IsGeometry(argv[i]) == MagickFalse)
2697              ThrowConvertInvalidArgumentException(option,argv[i]);
2698            break;
2699          }
2700        if (LocaleCompare("set",option+1) == 0)
2701          {
2702            i++;
2703            if (i == (ssize_t) argc)
2704              ThrowConvertException(OptionError,"MissingArgument",option);
2705            if (*option == '+')
2706              break;
2707            i++;
2708            if (i == (ssize_t) argc)
2709              ThrowConvertException(OptionError,"MissingArgument",option);
2710            break;
2711          }
2712        if (LocaleCompare("shade",option+1) == 0)
2713          {
2714            i++;
2715            if (i == (ssize_t) argc)
2716              ThrowConvertException(OptionError,"MissingArgument",option);
2717            if (IsGeometry(argv[i]) == MagickFalse)
2718              ThrowConvertInvalidArgumentException(option,argv[i]);
2719            break;
2720          }
2721        if (LocaleCompare("shadow",option+1) == 0)
2722          {
2723            if (*option == '+')
2724              break;
2725            i++;
2726            if (i == (ssize_t) argc)
2727              ThrowConvertException(OptionError,"MissingArgument",option);
2728            if (IsGeometry(argv[i]) == MagickFalse)
2729              ThrowConvertInvalidArgumentException(option,argv[i]);
2730            break;
2731          }
2732        if (LocaleCompare("sharpen",option+1) == 0)
2733          {
2734            i++;
2735            if (i == (ssize_t) argc)
2736              ThrowConvertException(OptionError,"MissingArgument",option);
2737            if (IsGeometry(argv[i]) == MagickFalse)
2738              ThrowConvertInvalidArgumentException(option,argv[i]);
2739            break;
2740          }
2741        if (LocaleCompare("shave",option+1) == 0)
2742          {
2743            if (*option == '+')
2744              break;
2745            i++;
2746            if (i == (ssize_t) argc)
2747              ThrowConvertException(OptionError,"MissingArgument",option);
2748            if (IsGeometry(argv[i]) == MagickFalse)
2749              ThrowConvertInvalidArgumentException(option,argv[i]);
2750            break;
2751          }
2752        if (LocaleCompare("shear",option+1) == 0)
2753          {
2754            i++;
2755            if (i == (ssize_t) argc)
2756              ThrowConvertException(OptionError,"MissingArgument",option);
2757            if (IsGeometry(argv[i]) == MagickFalse)
2758              ThrowConvertInvalidArgumentException(option,argv[i]);
2759            break;
2760          }
2761        if (LocaleCompare("sigmoidal-contrast",option+1) == 0)
2762          {
2763            i++;
2764            if (i == (ssize_t) argc)
2765              ThrowConvertException(OptionError,"MissingArgument",option);
2766            if (IsGeometry(argv[i]) == MagickFalse)
2767              ThrowConvertInvalidArgumentException(option,argv[i]);
2768            break;
2769          }
2770        if (LocaleCompare("size",option+1) == 0)
2771          {
2772            if (*option == '+')
2773              break;
2774            i++;
2775            if (i == (ssize_t) argc)
2776              ThrowConvertException(OptionError,"MissingArgument",option);
2777            if (IsGeometry(argv[i]) == MagickFalse)
2778              ThrowConvertInvalidArgumentException(option,argv[i]);
2779            break;
2780          }
2781        if (LocaleCompare("sketch",option+1) == 0)
2782          {
2783            if (*option == '+')
2784              break;
2785            i++;
2786            if (i == (ssize_t) argc)
2787              ThrowConvertException(OptionError,"MissingArgument",option);
2788            if (IsGeometry(argv[i]) == MagickFalse)
2789              ThrowConvertInvalidArgumentException(option,argv[i]);
2790            break;
2791          }
2792        if (LocaleCompare("smush",option+1) == 0)
2793          {
2794            i++;
2795            if (i == (ssize_t) argc)
2796              ThrowConvertException(OptionError,"MissingArgument",option);
2797            if (IsGeometry(argv[i]) == MagickFalse)
2798              ThrowConvertInvalidArgumentException(option,argv[i]);
2799            break;
2800          }
2801        if (LocaleCompare("solarize",option+1) == 0)
2802          {
2803            if (*option == '+')
2804              break;
2805            i++;
2806            if (i == (ssize_t) argc)
2807              ThrowConvertException(OptionError,"MissingArgument",option);
2808            if (IsGeometry(argv[i]) == MagickFalse)
2809              ThrowConvertInvalidArgumentException(option,argv[i]);
2810            break;
2811          }
2812        if (LocaleCompare("sparse-color",option+1) == 0)
2813          {
2814            ssize_t
2815              op;
2816
2817            i++;
2818            if (i == (ssize_t) argc)
2819              ThrowConvertException(OptionError,"MissingArgument",option);
2820            op=ParseCommandOption(MagickSparseColorOptions,MagickFalse,argv[i]);
2821            if (op < 0)
2822              ThrowConvertException(OptionError,"UnrecognizedSparseColorMethod",
2823                argv[i]);
2824            i++;
2825            if (i == (ssize_t) argc)
2826              ThrowConvertException(OptionError,"MissingArgument",option);
2827            break;
2828          }
2829        if (LocaleCompare("splice",option+1) == 0)
2830          {
2831            if (*option == '+')
2832              break;
2833            i++;
2834            if (i == (ssize_t) argc)
2835              ThrowConvertException(OptionError,"MissingArgument",option);
2836            if (IsGeometry(argv[i]) == MagickFalse)
2837              ThrowConvertInvalidArgumentException(option,argv[i]);
2838            break;
2839          }
2840        if (LocaleCompare("spread",option+1) == 0)
2841          {
2842            if (*option == '+')
2843              break;
2844            i++;
2845            if ((i == (ssize_t) argc) ||
2846                (IsGeometry(argv[i]) == MagickFalse))
2847              ThrowConvertException(OptionError,"MissingArgument",option);
2848            break;
2849          }
2850        if (LocaleCompare("statistic",option+1) == 0)
2851          {
2852            ssize_t
2853              op;
2854
2855            if (*option == '+')
2856              break;
2857            i++;
2858            if (i == (ssize_t) argc)
2859              ThrowConvertException(OptionError,"MissingArgument",option);
2860            op=ParseCommandOption(MagickStatisticOptions,MagickFalse,argv[i]);
2861            if (op < 0)
2862              ThrowConvertException(OptionError,"UnrecognizedStatisticType",
2863                argv[i]);
2864            i++;
2865            if (i == (ssize_t) argc)
2866              ThrowConvertException(OptionError,"MissingArgument",option);
2867            if (IsGeometry(argv[i]) == MagickFalse)
2868              ThrowConvertInvalidArgumentException(option,argv[i]);
2869            break;
2870          }
2871        if (LocaleCompare("stretch",option+1) == 0)
2872          {
2873            ssize_t
2874              stretch;
2875
2876            if (*option == '+')
2877              break;
2878            i++;
2879            if (i == (ssize_t) argc)
2880              ThrowConvertException(OptionError,"MissingArgument",option);
2881            stretch=ParseCommandOption(MagickStretchOptions,MagickFalse,
2882              argv[i]);
2883            if (stretch < 0)
2884              ThrowConvertException(OptionError,"UnrecognizedStyleType",
2885                argv[i]);
2886            break;
2887          }
2888        if (LocaleCompare("strip",option+1) == 0)
2889          break;
2890        if (LocaleCompare("stroke",option+1) == 0)
2891          {
2892            if (*option == '+')
2893              break;
2894            i++;
2895            if (i == (ssize_t) argc)
2896              ThrowConvertException(OptionError,"MissingArgument",option);
2897            break;
2898          }
2899        if (LocaleCompare("strokewidth",option+1) == 0)
2900          {
2901            if (*option == '+')
2902              break;
2903            i++;
2904            if (i == (ssize_t) argc)
2905              ThrowConvertException(OptionError,"MissingArgument",option);
2906            if (IsGeometry(argv[i]) == MagickFalse)
2907              ThrowConvertInvalidArgumentException(option,argv[i]);
2908            break;
2909          }
2910        if (LocaleCompare("style",option+1) == 0)
2911          {
2912            ssize_t
2913              style;
2914
2915            if (*option == '+')
2916              break;
2917            i++;
2918            if (i == (ssize_t) argc)
2919              ThrowConvertException(OptionError,"MissingArgument",option);
2920            style=ParseCommandOption(MagickStyleOptions,MagickFalse,argv[i]);
2921            if (style < 0)
2922              ThrowConvertException(OptionError,"UnrecognizedStyleType",
2923                argv[i]);
2924            break;
2925          }
2926        if (LocaleCompare("support",option+1) == 0)
2927          {
2928            i++;  /* deprecated */
2929            break;
2930          }
2931        if (LocaleCompare("swap",option+1) == 0)
2932          {
2933            if (*option == '+')
2934              break;
2935            i++;
2936            if (i == (ssize_t) argc)
2937              ThrowConvertException(OptionError,"MissingArgument",option);
2938            if (IsGeometry(argv[i]) == MagickFalse)
2939              ThrowConvertInvalidArgumentException(option,argv[i]);
2940            break;
2941          }
2942        if (LocaleCompare("swirl",option+1) == 0)
2943          {
2944            if (*option == '+')
2945              break;
2946            i++;
2947            if (i == (ssize_t) argc)
2948              ThrowConvertException(OptionError,"MissingArgument",option);
2949            if (IsGeometry(argv[i]) == MagickFalse)
2950              ThrowConvertInvalidArgumentException(option,argv[i]);
2951            break;
2952          }
2953        if (LocaleCompare("synchronize",option+1) == 0)
2954          break;
2955        ThrowConvertException(OptionError,"UnrecognizedOption",option)
2956      }
2957      case 't':
2958      {
2959        if (LocaleCompare("taint",option+1) == 0)
2960          break;
2961        if (LocaleCompare("texture",option+1) == 0)
2962          {
2963            if (*option == '+')
2964              break;
2965            i++;
2966            if (i == (ssize_t) argc)
2967              ThrowConvertException(OptionError,"MissingArgument",option);
2968            break;
2969          }
2970        if (LocaleCompare("threshold",option+1) == 0)
2971          {
2972            if (*option == '+')
2973              break;
2974            i++;
2975            if (i == (ssize_t) argc)
2976              ThrowConvertException(OptionError,"MissingArgument",option);
2977            if (IsGeometry(argv[i]) == MagickFalse)
2978              ThrowConvertInvalidArgumentException(option,argv[i]);
2979            break;
2980          }
2981        if (LocaleCompare("thumbnail",option+1) == 0)
2982          {
2983            if (*option == '+')
2984              break;
2985            i++;
2986            if (i == (ssize_t) argc)
2987              ThrowConvertException(OptionError,"MissingArgument",option);
2988            if (IsGeometry(argv[i]) == MagickFalse)
2989              ThrowConvertInvalidArgumentException(option,argv[i]);
2990            break;
2991          }
2992        if (LocaleCompare("tile",option+1) == 0)
2993          {
2994            if (*option == '+')
2995              break;
2996            i++;
2997            if (i == (ssize_t) argc)
2998              ThrowConvertException(OptionError,"MissingArgument",option);
2999            break;
3000          }
3001        if (LocaleCompare("tile-offset",option+1) == 0)
3002          {
3003            if (*option == '+')
3004              break;
3005            i++;
3006            if (i == (ssize_t) argc)
3007              ThrowConvertException(OptionError,"MissingArgument",option);
3008            if (IsGeometry(argv[i]) == MagickFalse)
3009              ThrowConvertInvalidArgumentException(option,argv[i]);
3010            break;
3011          }
3012        if (LocaleCompare("tint",option+1) == 0)
3013          {
3014            if (*option == '+')
3015              break;
3016            i++;
3017            if (i == (ssize_t) argc)
3018              ThrowConvertException(OptionError,"MissingArgument",option);
3019            if (IsGeometry(argv[i]) == MagickFalse)
3020              ThrowConvertInvalidArgumentException(option,argv[i]);
3021            break;
3022          }
3023        if (LocaleCompare("transform",option+1) == 0)
3024          break;
3025        if (LocaleCompare("transparent",option+1) == 0)
3026          {
3027            i++;
3028            if (i == (ssize_t) argc)
3029              ThrowConvertException(OptionError,"MissingArgument",option);
3030            break;
3031          }
3032        if (LocaleCompare("transparent-color",option+1) == 0)
3033          {
3034            if (*option == '+')
3035              break;
3036            i++;
3037            if (i == (ssize_t) argc)
3038              ThrowConvertException(OptionError,"MissingArgument",option);
3039            break;
3040          }
3041        if (LocaleCompare("transpose",option+1) == 0)
3042          break;
3043        if (LocaleCompare("transverse",option+1) == 0)
3044          break;
3045        if (LocaleCompare("treedepth",option+1) == 0)
3046          {
3047            if (*option == '+')
3048              break;
3049            i++;
3050            if (i == (ssize_t) argc)
3051              ThrowConvertException(OptionError,"MissingArgument",option);
3052            if (IsGeometry(argv[i]) == MagickFalse)
3053              ThrowConvertInvalidArgumentException(option,argv[i]);
3054            break;
3055          }
3056        if (LocaleCompare("trim",option+1) == 0)
3057          break;
3058        if (LocaleCompare("type",option+1) == 0)
3059          {
3060            ssize_t
3061              type;
3062
3063            if (*option == '+')
3064              break;
3065            i++;
3066            if (i == (ssize_t) argc)
3067              ThrowConvertException(OptionError,"MissingArgument",option);
3068            type=ParseCommandOption(MagickTypeOptions,MagickFalse,argv[i]);
3069            if (type < 0)
3070              ThrowConvertException(OptionError,"UnrecognizedImageType",
3071                argv[i]);
3072            break;
3073          }
3074        ThrowConvertException(OptionError,"UnrecognizedOption",option)
3075      }
3076      case 'u':
3077      {
3078        if (LocaleCompare("undercolor",option+1) == 0)
3079          {
3080            if (*option == '+')
3081              break;
3082            i++;
3083            if (i == (ssize_t) argc)
3084              ThrowConvertException(OptionError,"MissingArgument",option);
3085            break;
3086          }
3087        if (LocaleCompare("unique-colors",option+1) == 0)
3088          break;
3089        if (LocaleCompare("units",option+1) == 0)
3090          {
3091            ssize_t
3092              units;
3093
3094            if (*option == '+')
3095              break;
3096            i++;
3097            if (i == (ssize_t) argc)
3098              ThrowConvertException(OptionError,"MissingArgument",option);
3099            units=ParseCommandOption(MagickResolutionOptions,MagickFalse,
3100              argv[i]);
3101            if (units < 0)
3102              ThrowConvertException(OptionError,"UnrecognizedUnitsType",
3103                argv[i]);
3104            break;
3105          }
3106        if (LocaleCompare("unsharp",option+1) == 0)
3107          {
3108            if (*option == '+')
3109              break;
3110            i++;
3111            if (i == (ssize_t) argc)
3112              ThrowConvertException(OptionError,"MissingArgument",option);
3113            if (IsGeometry(argv[i]) == MagickFalse)
3114              ThrowConvertInvalidArgumentException(option,argv[i]);
3115            break;
3116          }
3117        ThrowConvertException(OptionError,"UnrecognizedOption",option)
3118      }
3119      case 'v':
3120      {
3121        if (LocaleCompare("verbose",option+1) == 0)
3122          break;
3123        if ((LocaleCompare("version",option+1) == 0) ||
3124            (LocaleCompare("-version",option+1) == 0))
3125          {
3126            ListMagickVersion(stdout);
3127            break;
3128          }
3129        if (LocaleCompare("vignette",option+1) == 0)
3130          {
3131            if (*option == '+')
3132              break;
3133            i++;
3134            if (i == (ssize_t) argc)
3135              ThrowConvertException(OptionError,"MissingArgument",option);
3136            if (IsGeometry(argv[i]) == MagickFalse)
3137              ThrowConvertInvalidArgumentException(option,argv[i]);
3138            break;
3139          }
3140        if (LocaleCompare("virtual-pixel",option+1) == 0)
3141          {
3142            ssize_t
3143              method;
3144
3145            if (*option == '+')
3146              break;
3147            i++;
3148            if (i == (ssize_t) argc)
3149              ThrowConvertException(OptionError,"MissingArgument",option);
3150            method=ParseCommandOption(MagickVirtualPixelOptions,MagickFalse,
3151              argv[i]);
3152            if (method < 0)
3153              ThrowConvertException(OptionError,
3154                "UnrecognizedVirtualPixelMethod",argv[i]);
3155            break;
3156          }
3157        ThrowConvertException(OptionError,"UnrecognizedOption",option)
3158      }
3159      case 'w':
3160      {
3161        if (LocaleCompare("wave",option+1) == 0)
3162          {
3163            i++;
3164            if (i == (ssize_t) argc)
3165              ThrowConvertException(OptionError,"MissingArgument",option);
3166            if (IsGeometry(argv[i]) == MagickFalse)
3167              ThrowConvertInvalidArgumentException(option,argv[i]);
3168            break;
3169          }
3170        if (LocaleCompare("wavelet-denoise",option+1) == 0)
3171          {
3172            i++;
3173            if (i == (ssize_t) argc)
3174              ThrowConvertException(OptionError,"MissingArgument",option);
3175            if (IsGeometry(argv[i]) == MagickFalse)
3176              ThrowConvertInvalidArgumentException(option,argv[i]);
3177            break;
3178          }
3179        if (LocaleCompare("weight",option+1) == 0)
3180          {
3181            if (*option == '+')
3182              break;
3183            i++;
3184            if (i == (ssize_t) argc)
3185              ThrowConvertException(OptionError,"MissingArgument",option);
3186            break;
3187          }
3188        if (LocaleCompare("white-point",option+1) == 0)
3189          {
3190            if (*option == '+')
3191              break;
3192            i++;
3193            if (i == (ssize_t) argc)
3194              ThrowConvertException(OptionError,"MissingArgument",option);
3195            if (IsGeometry(argv[i]) == MagickFalse)
3196              ThrowConvertInvalidArgumentException(option,argv[i]);
3197            break;
3198          }
3199        if (LocaleCompare("white-threshold",option+1) == 0)
3200          {
3201            if (*option == '+')
3202              break;
3203            i++;
3204            if (i == (ssize_t) argc)
3205              ThrowConvertException(OptionError,"MissingArgument",option);
3206            if (IsGeometry(argv[i]) == MagickFalse)
3207              ThrowConvertInvalidArgumentException(option,argv[i]);
3208            break;
3209          }
3210        if (LocaleCompare("write",option+1) == 0)
3211          {
3212            i++;
3213            if (i == (ssize_t) argc)
3214              ThrowConvertException(OptionError,"MissingArgument",option);
3215            break;
3216          }
3217        ThrowConvertException(OptionError,"UnrecognizedOption",option)
3218      }
3219      case '?':
3220        break;
3221      default:
3222        ThrowConvertException(OptionError,"UnrecognizedOption",option)
3223    }
3224    fire=(GetCommandOptionFlags(MagickCommandOptions,MagickFalse,option) &
3225      FireOptionFlag) == 0 ?  MagickFalse : MagickTrue;
3226    if (fire != MagickFalse)
3227      FireImageStack(MagickTrue,MagickTrue,MagickTrue);
3228  }
3229  if (k != 0)
3230    ThrowConvertException(OptionError,"UnbalancedParenthesis",argv[i]);
3231  if (i-- != (ssize_t) (argc-1))
3232    ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
3233  FinalizeImageSettings(image_info,image,MagickTrue);
3234  if (image == (Image *) NULL)
3235    ThrowConvertException(OptionError,"NoImagesDefined",argv[argc-1]);
3236  if (IsCommandOption(argv[argc-1]))
3237    ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
3238  if (LocaleCompare(" ",argv[argc-1])==0) /* common line continuation error */
3239    ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
3240  status&=WriteImages(image_info,image,argv[argc-1],exception);
3241  if (metadata != (char **) NULL)
3242    {
3243      char
3244        *text;
3245
3246      text=InterpretImageProperties(image_info,image,format,exception);
3247      if (text == (char *) NULL)
3248        ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
3249          GetExceptionMessage(errno));
3250      (void) ConcatenateString(&(*metadata),text);
3251      text=DestroyString(text);
3252    }
3253  DestroyConvert();
3254  return(status != 0 ? MagickTrue : MagickFalse);
3255}
3256