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