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