MagickWand  6.7.5
convert.c
Go to the documentation of this file.
00001 /*
00002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00003 %                                                                             %
00004 %                                                                             %
00005 %                                                                             %
00006 %                CCCC   OOO   N   N  V   V  EEEEE  RRRR   TTTTT               %
00007 %               C      O   O  NN  N  V   V  E      R   R    T                 %
00008 %               C      O   O  N N N  V   V  EEE    RRRR     T                 %
00009 %               C      O   O  N  NN   V V   E      R R      T                 %
00010 %                CCCC   OOO   N   N    V    EEEEE  R  R     T                 %
00011 %                                                                             %
00012 %                                                                             %
00013 %                Convert an image from one format to another.                 %
00014 %                                                                             %
00015 %                              Software Design                                %
00016 %                                John Cristy                                  %
00017 %                                April 1992                                   %
00018 %                                                                             %
00019 %                                                                             %
00020 %  Copyright 1999-2012 ImageMagick Studio LLC, a non-profit organization      %
00021 %  dedicated to making software imaging solutions freely available.           %
00022 %                                                                             %
00023 %  You may not use this file except in compliance with the License.  You may  %
00024 %  obtain a copy of the License at                                            %
00025 %                                                                             %
00026 %    http://www.imagemagick.org/script/license.php                            %
00027 %                                                                             %
00028 %  Unless required by applicable law or agreed to in writing, software        %
00029 %  distributed under the License is distributed on an "AS IS" BASIS,          %
00030 %  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
00031 %  See the License for the specific language governing permissions and        %
00032 %  limitations under the License.                                             %
00033 %                                                                             %
00034 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00035 %
00036 %  Use the convert program to convert between image formats as well as resize
00037 %  an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample,
00038 %  and much more.
00039 %
00040 */
00041 
00042 /*
00043   Include declarations.
00044 */
00045 #include "MagickWand/studio.h"
00046 #include "MagickWand/MagickWand.h"
00047 #include "MagickWand/mogrify-private.h"
00048 #include "MagickCore/string-private.h"
00049 #include "MagickCore/utility-private.h"
00050 /*
00051   Define declarations.
00052 */
00053 #define ThrowFileException(exception,severity,tag,context) \
00054 { \
00055   char \
00056     *message; \
00057  \
00058   message=GetExceptionMessage(errno); \
00059   (void) ThrowMagickException(exception,GetMagickModule(),severity, \
00060     tag == (const char *) NULL ? "unknown" : tag,"`%s': %s",context,message); \
00061   message=DestroyString(message); \
00062 }
00063 
00064 /*
00065 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00066 %                                                                             %
00067 %                                                                             %
00068 %                                                                             %
00069 +   C o n v e r t I m a g e C o m m a n d                                     %
00070 %                                                                             %
00071 %                                                                             %
00072 %                                                                             %
00073 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00074 %
00075 %  ConvertImageCommand() reads one or more images, applies one or more image
00076 %  processing operations, and writes out the image in the same or differing
00077 %  format.
00078 %
00079 %  The format of the ConvertImageCommand method is:
00080 %
00081 %      MagickBooleanType ConvertImageCommand(ImageInfo *image_info,int argc,
00082 %        char **argv,char **metadata,ExceptionInfo *exception)
00083 %
00084 %  A description of each parameter follows:
00085 %
00086 %    o image_info: the image info.
00087 %
00088 %    o argc: the number of elements in the argument vector.
00089 %
00090 %    o argv: A text array containing the command line arguments.
00091 %
00092 %    o metadata: any metadata is returned here.
00093 %
00094 %    o exception: return any errors or warnings in this structure.
00095 %
00096 */
00097 
00098 static MagickBooleanType ConcatenateImages(int argc,char **argv,
00099   ExceptionInfo *exception)
00100 {
00101   FILE
00102     *input,
00103     *output;
00104 
00105   int
00106     c;
00107 
00108   register ssize_t
00109     i;
00110 
00111   /*
00112     Open output file.
00113   */
00114   output=fopen_utf8(argv[argc-1],"wb");
00115   if (output == (FILE *) NULL)
00116     {
00117       ThrowFileException(exception,FileOpenError,"UnableToOpenFile",
00118         argv[argc-1]);
00119       return(MagickFalse);
00120     }
00121   for (i=2; i < (ssize_t) (argc-1); i++)
00122   {
00123     input=fopen_utf8(argv[i],"rb");
00124     if (input == (FILE *) NULL)
00125       ThrowFileException(exception,FileOpenError,"UnableToOpenFile",argv[i]);
00126     for (c=fgetc(input); c != EOF; c=fgetc(input))
00127       (void) fputc((char) c,output);
00128     (void) fclose(input);
00129     (void) remove_utf8(argv[i]);
00130   }
00131   (void) fclose(output);
00132   return(MagickTrue);
00133 }
00134 
00135 static MagickBooleanType ConvertUsage(void)
00136 {
00137   static const char
00138     *miscellaneous[]=
00139     {
00140       "-debug events        display copious debugging information",
00141       "-help                print program options",
00142       "-list type           print a list of supported option arguments",
00143       "-log format          format of debugging information",
00144       "-version             print version information",
00145       (char *) NULL
00146     },
00147     *operators[]=
00148     {
00149       "-adaptive-blur geometry",
00150       "                     adaptively blur pixels; decrease effect near edges",
00151       "-adaptive-resize geometry",
00152       "                     adaptively resize image using 'mesh' interpolation",
00153       "-adaptive-sharpen geometry",
00154       "                     adaptively sharpen pixels; increase effect near edges",
00155       "-alpha option        on, activate, off, deactivate, set, opaque, copy",
00156       "                     transparent, extract, background, or shape",
00157       "-annotate geometry text",
00158       "                     annotate the image with text",
00159       "-auto-gamma          automagically adjust gamma level of image",
00160       "-auto-level          automagically adjust color levels of image",
00161       "-auto-orient         automagically orient (rotate) image",
00162       "-bench iterations    measure performance",
00163       "-black-threshold value",
00164       "                     force all pixels below the threshold into black",
00165       "-blue-shift factor   simulate a scene at nighttime in the moonlight",
00166       "-blur geometry       reduce image noise and reduce detail levels",
00167       "-border geometry     surround image with a border of color",
00168       "-bordercolor color   border color",
00169       "-brightness-contrast geometry",
00170       "                     improve brightness / contrast of the image",
00171       "-cdl filename        color correct with a color decision list",
00172       "-charcoal radius     simulate a charcoal drawing",
00173       "-chop geometry       remove pixels from the image interior",
00174       "-clamp               restrict pixel range from 0 to the quantum depth",
00175       "-clip                clip along the first path from the 8BIM profile",
00176       "-clip-mask filename  associate a clip mask with the image",
00177       "-clip-path id        clip along a named path from the 8BIM profile",
00178       "-colorize value      colorize the image with the fill color",
00179       "-color-matrix matrix apply color correction to the image",
00180       "-contrast            enhance or reduce the image contrast",
00181       "-contrast-stretch geometry",
00182       "                     improve contrast by `stretching' the intensity range",
00183       "-convolve coefficients",
00184       "                     apply a convolution kernel to the image",
00185       "-cycle amount        cycle the image colormap",
00186       "-decipher filename   convert cipher pixels to plain pixels",
00187       "-deskew threshold    straighten an image",
00188       "-despeckle           reduce the speckles within an image",
00189       "-distort method args",
00190       "                     distort images according to given method ad args",
00191       "-draw string         annotate the image with a graphic primitive",
00192       "-edge radius         apply a filter to detect edges in the image",
00193       "-encipher filename   convert plain pixels to cipher pixels",
00194       "-emboss radius       emboss an image",
00195       "-enhance             apply a digital filter to enhance a noisy image",
00196       "-equalize            perform histogram equalization to an image",
00197       "-evaluate operator value",
00198       "                     evaluate an arithmetic, relational, or logical expression",
00199       "-extent geometry     set the image size",
00200       "-extract geometry    extract area from image",
00201       "-fft                 implements the discrete Fourier transform (DFT)",
00202       "-flip                flip image vertically",
00203       "-floodfill geometry color",
00204       "                     floodfill the image with color",
00205       "-flop                flop image horizontally",
00206       "-frame geometry      surround image with an ornamental border",
00207       "-function name parameters",
00208       "                     apply function over image values",
00209       "-gamma value         level of gamma correction",
00210       "-gaussian-blur geometry",
00211       "                     reduce image noise and reduce detail levels",
00212       "-geometry geometry   preferred size or location of the image",
00213       "-identify            identify the format and characteristics of the image",
00214       "-ift                 implements the inverse discrete Fourier transform (DFT)",
00215       "-implode amount      implode image pixels about the center",
00216       "-interpolative-resize geometry",
00217       "                     resize image using interpolation",
00218       "-lat geometry        local adaptive thresholding",
00219       "-layers method       optimize, merge,  or compare image layers",
00220       "-level value         adjust the level of image contrast",
00221       "-level-colors color,color",
00222       "                     level image with the given colors",
00223       "-linear-stretch geometry",
00224       "                     improve contrast by `stretching with saturation'",
00225       "-liquid-rescale geometry",
00226       "                     rescale image with seam-carving",
00227       "-median geometry     apply a median filter to the image",
00228       "-mode geometry       make each pixel the 'predominant color' of the neighborhood",
00229       "-modulate value      vary the brightness, saturation, and hue",
00230       "-monochrome          transform image to black and white",
00231       "-morphology method kernel",
00232       "                     apply a morphology method to the image",
00233       "-motion-blur geometry",
00234       "                     simulate motion blur",
00235       "-negate              replace every pixel with its complementary color ",
00236       "-noise geometry      add or reduce noise in an image",
00237       "-normalize           transform image to span the full range of colors",
00238       "-opaque color        change this color to the fill color",
00239       "-ordered-dither NxN",
00240       "                     add a noise pattern to the image with specific",
00241       "                     amplitudes",
00242       "-paint radius        simulate an oil painting",
00243       "-polaroid angle      simulate a Polaroid picture",
00244       "-posterize levels    reduce the image to a limited number of color levels",
00245       "-profile filename    add, delete, or apply an image profile",
00246       "-quantize colorspace reduce colors in this colorspace",
00247       "-radial-blur angle   radial blur the image",
00248       "-raise value         lighten/darken image edges to create a 3-D effect",
00249       "-random-threshold low,high",
00250       "                     random threshold the image",
00251       "-region geometry     apply options to a portion of the image",
00252       "-render              render vector graphics",
00253       "-repage geometry     size and location of an image canvas",
00254       "-resample geometry   change the resolution of an image",
00255       "-resize geometry     resize the image",
00256       "-roll geometry       roll an image vertically or horizontally",
00257       "-rotate degrees      apply Paeth rotation to the image",
00258       "-sample geometry     scale image with pixel sampling",
00259       "-scale geometry      scale the image",
00260       "-segment values      segment an image",
00261       "-selective-blur geometry",
00262       "                     selectively blur pixels within a contrast threshold",
00263       "-sepia-tone threshold",
00264       "                     simulate a sepia-toned photo",
00265       "-set property value  set an image property",
00266       "-shade degrees       shade the image using a distant light source",
00267       "-shadow geometry     simulate an image shadow",
00268       "-sharpen geometry    sharpen the image",
00269       "-shave geometry      shave pixels from the image edges",
00270       "-shear geometry      slide one edge of the image along the X or Y axis",
00271       "-sigmoidal-contrast geometry",
00272       "                     increase the contrast without saturating highlights or shadows",
00273       "-sketch geometry     simulate a pencil sketch",
00274       "-solarize threshold  negate all pixels above the threshold level",
00275       "-sparse-color method args",
00276       "                     fill in a image based on a few color points",
00277       "-splice geometry     splice the background color into the image",
00278       "-spread radius       displace image pixels by a random amount",
00279       "-statistic type geometry",
00280       "                     replace each pixel with corresponding statistic from the neighborhood",
00281       "-strip               strip image of all profiles and comments",
00282       "-swirl degrees       swirl image pixels about the center",
00283       "-threshold value     threshold the image",
00284       "-thumbnail geometry  create a thumbnail of the image",
00285       "-tile filename       tile image when filling a graphic primitive",
00286       "-tint value          tint the image with the fill color",
00287       "-transform           affine transform image",
00288       "-transparent color   make this color transparent within the image",
00289       "-transpose           flip image vertically and rotate 90 degrees",
00290       "-transverse          flop image horizontally and rotate 270 degrees",
00291       "-trim                trim image edges",
00292       "-type type           image type",
00293       "-unique-colors       discard all but one of any pixel color",
00294       "-unsharp geometry    sharpen the image",
00295       "-vignette geometry   soften the edges of the image in vignette style",
00296       "-wave geometry       alter an image along a sine wave",
00297       "-white-threshold value",
00298       "                     force all pixels above the threshold into white",
00299       (char *) NULL
00300     },
00301     *sequence_operators[]=
00302     {
00303       "-append              append an image sequence",
00304       "-clut                apply a color lookup table to the image",
00305       "-coalesce            merge a sequence of images",
00306       "-combine             combine a sequence of images",
00307       "-composite           composite image",
00308       "-crop geometry       cut out a rectangular region of the image",
00309       "-deconstruct         break down an image sequence into constituent parts",
00310       "-evaluate-sequence operator",
00311       "                     evaluate an arithmetic, relational, or logical expression",
00312       "-flatten             flatten a sequence of images",
00313       "-fx expression       apply mathematical expression to an image channel(s)",
00314       "-hald-clut           apply a Hald color lookup table to the image",
00315       "-morph value         morph an image sequence",
00316       "-mosaic              create a mosaic from an image sequence",
00317       "-print string        interpret string and print to console",
00318       "-process arguments   process the image with a custom image filter",
00319       "-separate            separate an image channel into a grayscale image",
00320       "-smush geometry      smush an image sequence together",
00321       "-write filename      write images to this file",
00322       (char *) NULL
00323     },
00324     *settings[]=
00325     {
00326       "-adjoin              join images into a single multi-image file",
00327       "-affine matrix       affine transform matrix",
00328       "-alpha option        activate, deactivate, reset, or set the alpha channel",
00329       "-antialias           remove pixel-aliasing",
00330       "-authenticate password",
00331       "                     decipher image with this password",
00332       "-attenuate value     lessen (or intensify) when adding noise to an image",
00333       "-background color    background color",
00334       "-bias value          add bias when convolving an image",
00335       "-black-point-compensation",
00336       "                     use black point compensation",
00337       "-blue-primary point  chromaticity blue primary point",
00338       "-bordercolor color   border color",
00339       "-caption string      assign a caption to an image",
00340       "-channel type        apply option to select image channels",
00341       "-colors value        preferred number of colors in the image",
00342       "-colorspace type     alternate image colorspace",
00343       "-comment string      annotate image with comment",
00344       "-compose operator    set image composite operator",
00345       "-compress type       type of pixel compression when writing the image",
00346       "-define format:option",
00347       "                     define one or more image format options",
00348       "-delay value         display the next image after pausing",
00349       "-density geometry    horizontal and vertical density of the image",
00350       "-depth value         image depth",
00351       "-direction type      render text right-to-left or left-to-right",
00352       "-display server      get image or font from this X server",
00353       "-dispose method      layer disposal method",
00354       "-dither method       apply error diffusion to image",
00355       "-encoding type       text encoding type",
00356       "-endian type         endianness (MSB or LSB) of the image",
00357       "-family name         render text with this font family",
00358       "-fill color          color to use when filling a graphic primitive",
00359       "-filter type         use this filter when resizing an image",
00360       "-font name           render text with this font",
00361       "-format \"string\"     output formatted image characteristics",
00362       "-fuzz distance       colors within this distance are considered equal",
00363       "-gravity type        horizontal and vertical text placement",
00364       "-green-primary point chromaticity green primary point",
00365       "-intent type         type of rendering intent when managing the image color",
00366       "-interlace type      type of image interlacing scheme",
00367       "-interline-spacing value",
00368       "                     set the space between two text lines",
00369       "-interpolate method  pixel color interpolation method",
00370       "-interword-spacing value",
00371       "                     set the space between two words",
00372       "-kerning value       set the space between two letters",
00373       "-label string        assign a label to an image",
00374       "-limit type value    pixel cache resource limit",
00375       "-loop iterations     add Netscape loop extension to your GIF animation",
00376       "-mask filename       associate a mask with the image",
00377       "-mattecolor color    frame color",
00378       "-monitor             monitor progress",
00379       "-orient type         image orientation",
00380       "-page geometry       size and location of an image canvas (setting)",
00381       "-ping                efficiently determine image attributes",
00382       "-pointsize value     font point size",
00383       "-precision value     maximum number of significant digits to print",
00384       "-preview type        image preview type",
00385       "-quality value       JPEG/MIFF/PNG compression level",
00386       "-quiet               suppress all warning messages",
00387       "-red-primary point   chromaticity red primary point",
00388       "-regard-warnings     pay attention to warning messages",
00389       "-remap filename      transform image colors to match this set of colors",
00390       "-respect-parentheses settings remain in effect until parenthesis boundary",
00391       "-sampling-factor geometry",
00392       "                     horizontal and vertical sampling factor",
00393       "-scene value         image scene number",
00394       "-seed value          seed a new sequence of pseudo-random numbers",
00395       "-size geometry       width and height of image",
00396       "-stretch type        render text with this font stretch",
00397       "-stroke color        graphic primitive stroke color",
00398       "-strokewidth value   graphic primitive stroke width",
00399       "-style type          render text with this font style",
00400       "-synchronize         synchronize image to storage device",
00401       "-taint               declare the image as modified",
00402       "-texture filename    name of texture to tile onto the image background",
00403       "-tile-offset geometry",
00404       "                     tile offset",
00405       "-treedepth value     color tree depth",
00406       "-transparent-color color",
00407       "                     transparent color",
00408       "-undercolor color    annotation bounding box color",
00409       "-units type          the units of image resolution",
00410       "-verbose             print detailed information about the image",
00411       "-view                FlashPix viewing transforms",
00412       "-virtual-pixel method",
00413       "                     virtual pixel access method",
00414       "-weight type         render text with this font weight",
00415       "-white-point point   chromaticity white point",
00416       (char *) NULL
00417     },
00418     *stack_operators[]=
00419     {
00420       "-clone indexes       clone an image",
00421       "-delete indexes      delete the image from the image sequence",
00422       "-duplicate count,indexes",
00423       "                     duplicate an image one or more times",
00424       "-insert index        insert last image into the image sequence",
00425       "-reverse             reverse image sequence",
00426       "-swap indexes        swap two images in the image sequence",
00427       (char *) NULL
00428     };
00429 
00430   const char
00431     **p;
00432 
00433   (void) printf("Version: %s\n",GetMagickVersion((size_t *) NULL));
00434   (void) printf("Copyright: %s\n",GetMagickCopyright());
00435   (void) printf("Features: %s\n\n",GetMagickFeatures());
00436   (void) printf("Usage: %s [options ...] file [ [options ...] "
00437     "file ...] [options ...] file\n",GetClientName());
00438   (void) printf("\nImage Settings:\n");
00439   for (p=settings; *p != (char *) NULL; p++)
00440     (void) printf("  %s\n",*p);
00441   (void) printf("\nImage Operators:\n");
00442   for (p=operators; *p != (char *) NULL; p++)
00443     (void) printf("  %s\n",*p);
00444   (void) printf("\nImage Sequence Operators:\n");
00445   for (p=sequence_operators; *p != (char *) NULL; p++)
00446     (void) printf("  %s\n",*p);
00447   (void) printf("\nImage Stack Operators:\n");
00448   for (p=stack_operators; *p != (char *) NULL; p++)
00449     (void) printf("  %s\n",*p);
00450   (void) printf("\nMiscellaneous Options:\n");
00451   for (p=miscellaneous; *p != (char *) NULL; p++)
00452     (void) printf("  %s\n",*p);
00453   (void) printf(
00454     "\nBy default, the image format of `file' is determined by its magic\n");
00455   (void) printf(
00456     "number.  To specify a particular image format, precede the filename\n");
00457   (void) printf(
00458     "with an image format name and a colon (i.e. ps:image) or specify the\n");
00459   (void) printf(
00460     "image type as the filename suffix (i.e. image.ps).  Specify 'file' as\n");
00461   (void) printf("'-' for standard input or output.\n");
00462   return(MagickFalse);
00463 }
00464 
00465 WandExport MagickBooleanType ConvertImageCommand(ImageInfo *image_info,
00466   int argc,char **argv,char **metadata,ExceptionInfo *exception)
00467 {
00468 #define NotInitialized  (unsigned int) (~0)
00469 #define DestroyConvert() \
00470 { \
00471   DestroyImageStack(); \
00472   for (i=0; i < (ssize_t) argc; i++) \
00473     argv[i]=DestroyString(argv[i]); \
00474   argv=(char **) RelinquishMagickMemory(argv); \
00475 }
00476 #define ThrowConvertException(asperity,tag,option) \
00477 { \
00478   (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \
00479     option); \
00480   DestroyConvert(); \
00481   return(MagickFalse); \
00482 }
00483 #define ThrowConvertInvalidArgumentException(option,argument) \
00484 { \
00485   (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
00486     "InvalidArgument","`%s': %s",option,argument); \
00487   DestroyConvert(); \
00488   return(MagickFalse); \
00489 }
00490 
00491   char
00492     *filename,
00493     *option;
00494 
00495   const char
00496     *format;
00497 
00498   Image
00499     *image;
00500 
00501   ImageStack
00502     image_stack[MaxImageStackDepth+1];
00503 
00504   MagickBooleanType
00505     fire,
00506     pend,
00507     respect_parenthesis;
00508 
00509   MagickStatusType
00510     status;
00511 
00512   register ssize_t
00513     i;
00514 
00515   ssize_t
00516     j,
00517     k;
00518 
00519   /*
00520     Set defaults.
00521   */
00522   assert(image_info != (ImageInfo *) NULL);
00523   assert(image_info->signature == MagickSignature);
00524   if (image_info->debug != MagickFalse)
00525     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
00526   assert(exception != (ExceptionInfo *) NULL);
00527   if (argc == 2)
00528     {
00529       option=argv[1];
00530       if ((LocaleCompare("version",option+1) == 0) ||
00531           (LocaleCompare("-version",option+1) == 0))
00532         {
00533           (void) FormatLocaleFile(stdout,"Version: %s\n",
00534             GetMagickVersion((size_t *) NULL));
00535           (void) FormatLocaleFile(stdout,"Copyright: %s\n",
00536             GetMagickCopyright());
00537           (void) FormatLocaleFile(stdout,"Features: %s\n\n",
00538             GetMagickFeatures());
00539           return(MagickFalse);
00540         }
00541     }
00542   if (argc < 3)
00543     return(ConvertUsage());
00544   filename=(char *) NULL;
00545   format="%w,%h,%m";
00546   j=1;
00547   k=0;
00548   NewImageStack();
00549   option=(char *) NULL;
00550   pend=MagickFalse;
00551   respect_parenthesis=MagickFalse;
00552   status=MagickTrue;
00553   /*
00554     Parse command-line arguments.
00555   */
00556   ReadCommandlLine(argc,&argv);
00557   status=ExpandFilenames(&argc,&argv);
00558   if (status == MagickFalse)
00559     ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
00560       GetExceptionMessage(errno));
00561   if ((argc > 2) && (LocaleCompare("-concatenate",argv[1]) == 0))
00562     return(ConcatenateImages(argc,argv,exception));
00563   for (i=1; i < (ssize_t) (argc-1); i++)
00564   {
00565     option=argv[i];
00566     if (LocaleCompare(option,"(") == 0)
00567       {
00568         FireImageStack(MagickTrue,MagickTrue,pend);
00569         if (k == MaxImageStackDepth)
00570           ThrowConvertException(OptionError,"ParenthesisNestedTooDeeply",
00571             option);
00572         PushImageStack();
00573         continue;
00574       }
00575     if (LocaleCompare(option,")") == 0)
00576       {
00577         FireImageStack(MagickTrue,MagickTrue,MagickTrue);
00578         if (k == 0)
00579           ThrowConvertException(OptionError,"UnableToParseExpression",option);
00580         PopImageStack();
00581         continue;
00582       }
00583     if (IsCommandOption(option) == MagickFalse)
00584       {
00585         Image
00586           *images;
00587 
00588         /*
00589           Read input image.
00590         */
00591         FireImageStack(MagickTrue,MagickTrue,pend);
00592         filename=argv[i];
00593         if ((LocaleCompare(filename,"--") == 0) && (i < (ssize_t) (argc-1)))
00594           filename=argv[++i];
00595         (void) CopyMagickString(image_info->filename,filename,MaxTextExtent);
00596         if (image_info->ping != MagickFalse)
00597           images=PingImages(image_info,exception);
00598         else
00599           images=ReadImages(image_info,exception);
00600         status&=(images != (Image *) NULL) &&
00601           (exception->severity < ErrorException);
00602         if (images == (Image *) NULL)
00603           continue;
00604         AppendImageStack(images);
00605         continue;
00606       }
00607     pend=image != (Image *) NULL ? MagickTrue : MagickFalse;
00608     switch (*(option+1))
00609     {
00610       case 'a':
00611       {
00612         if (LocaleCompare("adaptive-blur",option+1) == 0)
00613           {
00614             i++;
00615             if (i == (ssize_t) (argc-1))
00616               ThrowConvertException(OptionError,"MissingArgument",option);
00617             if (IsGeometry(argv[i]) == MagickFalse)
00618               ThrowConvertInvalidArgumentException(option,argv[i]);
00619             break;
00620           }
00621         if (LocaleCompare("adaptive-resize",option+1) == 0)
00622           {
00623             i++;
00624             if (i == (ssize_t) (argc-1))
00625               ThrowConvertException(OptionError,"MissingArgument",option);
00626             if (IsGeometry(argv[i]) == MagickFalse)
00627               ThrowConvertInvalidArgumentException(option,argv[i]);
00628             break;
00629           }
00630         if (LocaleCompare("adaptive-sharpen",option+1) == 0)
00631           {
00632             i++;
00633             if (i == (ssize_t) (argc-1))
00634               ThrowConvertException(OptionError,"MissingArgument",option);
00635             if (IsGeometry(argv[i]) == MagickFalse)
00636               ThrowConvertInvalidArgumentException(option,argv[i]);
00637             break;
00638           }
00639         if (LocaleCompare("adjoin",option+1) == 0)
00640           break;
00641         if (LocaleCompare("affine",option+1) == 0)
00642           {
00643             if (*option == '+')
00644               break;
00645             i++;
00646             if (i == (ssize_t) (argc-1))
00647               ThrowConvertException(OptionError,"MissingArgument",option);
00648             break;
00649           }
00650         if (LocaleCompare("alpha",option+1) == 0)
00651           {
00652             ssize_t
00653               type;
00654 
00655             if (*option == '+')
00656               break;
00657             i++;
00658             if (i == (ssize_t) argc)
00659               ThrowConvertException(OptionError,"MissingArgument",option);
00660             type=ParseCommandOption(MagickAlphaOptions,MagickFalse,argv[i]);
00661             if (type < 0)
00662               ThrowConvertException(OptionError,"UnrecognizedAlphaChannelType",
00663                 argv[i]);
00664             break;
00665           }
00666         if (LocaleCompare("annotate",option+1) == 0)
00667           {
00668             if (*option == '+')
00669               break;
00670             i++;
00671             if (i == (ssize_t) (argc-1))
00672               ThrowConvertException(OptionError,"MissingArgument",option);
00673             if (IsGeometry(argv[i]) == MagickFalse)
00674               ThrowConvertInvalidArgumentException(option,argv[i]);
00675             i++;
00676             if (i == (ssize_t) (argc-1))
00677               ThrowConvertException(OptionError,"MissingArgument",option);
00678             break;
00679           }
00680         if (LocaleCompare("antialias",option+1) == 0)
00681           break;
00682         if (LocaleCompare("append",option+1) == 0)
00683           break;
00684         if (LocaleCompare("attenuate",option+1) == 0)
00685           {
00686             if (*option == '+')
00687               break;
00688             i++;
00689             if (i == (ssize_t) (argc-1))
00690               ThrowConvertException(OptionError,"MissingArgument",option);
00691             if (IsGeometry(argv[i]) == MagickFalse)
00692               ThrowConvertInvalidArgumentException(option,argv[i]);
00693             break;
00694           }
00695         if (LocaleCompare("authenticate",option+1) == 0)
00696           {
00697             if (*option == '+')
00698               break;
00699             i++;
00700             if (i == (ssize_t) (argc-1))
00701               ThrowConvertException(OptionError,"MissingArgument",option);
00702             break;
00703           }
00704         if (LocaleCompare("auto-gamma",option+1) == 0)
00705           break;
00706         if (LocaleCompare("auto-level",option+1) == 0)
00707           break;
00708         if (LocaleCompare("auto-orient",option+1) == 0)
00709           break;
00710         if (LocaleCompare("average",option+1) == 0)
00711           break;
00712         ThrowConvertException(OptionError,"UnrecognizedOption",option)
00713       }
00714       case 'b':
00715       {
00716         if (LocaleCompare("background",option+1) == 0)
00717           {
00718             if (*option == '+')
00719               break;
00720             i++;
00721             if (i == (ssize_t) (argc-1))
00722               ThrowConvertException(OptionError,"MissingArgument",option);
00723             break;
00724           }
00725         if (LocaleCompare("bench",option+1) == 0)
00726           {
00727             if (*option == '+')
00728               break;
00729             i++;
00730             if (i == (ssize_t) (argc-1))
00731               ThrowConvertException(OptionError,"MissingArgument",option);
00732             if (IsGeometry(argv[i]) == MagickFalse)
00733               ThrowConvertInvalidArgumentException(option,argv[i]);
00734             break;
00735           }
00736         if (LocaleCompare("bias",option+1) == 0)
00737           {
00738             if (*option == '+')
00739               break;
00740             i++;
00741             if (i == (ssize_t) (argc-1))
00742               ThrowConvertException(OptionError,"MissingArgument",option);
00743             if (IsGeometry(argv[i]) == MagickFalse)
00744               ThrowConvertInvalidArgumentException(option,argv[i]);
00745             break;
00746           }
00747         if (LocaleCompare("black-point-compensation",option+1) == 0)
00748           break;
00749         if (LocaleCompare("black-threshold",option+1) == 0)
00750           {
00751             if (*option == '+')
00752               break;
00753             i++;
00754             if (i == (ssize_t) (argc-1))
00755               ThrowConvertException(OptionError,"MissingArgument",option);
00756             if (IsGeometry(argv[i]) == MagickFalse)
00757               ThrowConvertInvalidArgumentException(option,argv[i]);
00758             break;
00759           }
00760         if (LocaleCompare("blue-primary",option+1) == 0)
00761           {
00762             if (*option == '+')
00763               break;
00764             i++;
00765             if (i == (ssize_t) (argc-1))
00766               ThrowConvertException(OptionError,"MissingArgument",option);
00767             if (IsGeometry(argv[i]) == MagickFalse)
00768               ThrowConvertInvalidArgumentException(option,argv[i]);
00769             break;
00770           }
00771         if (LocaleCompare("blue-shift",option+1) == 0)
00772           {
00773             if (*option == '+')
00774               break;
00775             i++;
00776             if (i == (ssize_t) (argc-1))
00777               ThrowConvertException(OptionError,"MissingArgument",option);
00778             if (IsGeometry(argv[i]) == MagickFalse)
00779               ThrowConvertInvalidArgumentException(option,argv[i]);
00780             break;
00781           }
00782         if (LocaleCompare("blur",option+1) == 0)
00783           {
00784             if (*option == '+')
00785               break;
00786             i++;
00787             if (i == (ssize_t) (argc-1))
00788               ThrowConvertException(OptionError,"MissingArgument",option);
00789             if (IsGeometry(argv[i]) == MagickFalse)
00790               ThrowConvertInvalidArgumentException(option,argv[i]);
00791             break;
00792           }
00793         if (LocaleCompare("border",option+1) == 0)
00794           {
00795             if (*option == '+')
00796               break;
00797             i++;
00798             if (i == (ssize_t) (argc-1))
00799               ThrowConvertException(OptionError,"MissingArgument",option);
00800             if (IsGeometry(argv[i]) == MagickFalse)
00801               ThrowConvertInvalidArgumentException(option,argv[i]);
00802             break;
00803           }
00804         if (LocaleCompare("bordercolor",option+1) == 0)
00805           {
00806             if (*option == '+')
00807               break;
00808             i++;
00809             if (i == (ssize_t) (argc-1))
00810               ThrowConvertException(OptionError,"MissingArgument",option);
00811             break;
00812           }
00813         if (LocaleCompare("box",option+1) == 0)
00814           {
00815             if (*option == '+')
00816               break;
00817             i++;
00818             if (i == (ssize_t) (argc-1))
00819               ThrowConvertException(OptionError,"MissingArgument",option);
00820             break;
00821           }
00822         if (LocaleCompare("brightness-contrast",option+1) == 0)
00823           {
00824             i++;
00825             if (i == (ssize_t) (argc-1))
00826               ThrowConvertException(OptionError,"MissingArgument",option);
00827             if (IsGeometry(argv[i]) == MagickFalse)
00828               ThrowConvertInvalidArgumentException(option,argv[i]);
00829             break;
00830           }
00831         ThrowConvertException(OptionError,"UnrecognizedOption",option)
00832       }
00833       case 'c':
00834       {
00835         if (LocaleCompare("cache",option+1) == 0)
00836           {
00837             if (*option == '+')
00838               break;
00839             i++;
00840             if (i == (ssize_t) (argc-1))
00841               ThrowConvertException(OptionError,"MissingArgument",option);
00842             if (IsGeometry(argv[i]) == MagickFalse)
00843               ThrowConvertInvalidArgumentException(option,argv[i]);
00844             break;
00845           }
00846         if (LocaleCompare("caption",option+1) == 0)
00847           {
00848             if (*option == '+')
00849               break;
00850             i++;
00851             if (i == (ssize_t) argc)
00852               ThrowConvertException(OptionError,"MissingArgument",option);
00853             break;
00854           }
00855         if (LocaleCompare("cdl",option+1) == 0)
00856           {
00857             if (*option == '+')
00858               break;
00859             i++;
00860             if (i == (ssize_t) (argc-1))
00861               ThrowConvertException(OptionError,"MissingArgument",option);
00862             break;
00863           }
00864         if (LocaleCompare("channel",option+1) == 0)
00865           {
00866             ssize_t
00867               channel;
00868 
00869             if (*option == '+')
00870               break;
00871             i++;
00872             if (i == (ssize_t) (argc-1))
00873               ThrowConvertException(OptionError,"MissingArgument",option);
00874             channel=ParseChannelOption(argv[i]);
00875             if (channel < 0)
00876               ThrowConvertException(OptionError,"UnrecognizedChannelType",
00877                 argv[i]);
00878             break;
00879           }
00880         if (LocaleCompare("charcoal",option+1) == 0)
00881           {
00882             if (*option == '+')
00883               break;
00884             i++;
00885             if (i == (ssize_t) (argc-1))
00886               ThrowConvertException(OptionError,"MissingArgument",option);
00887             if (IsGeometry(argv[i]) == MagickFalse)
00888               ThrowConvertInvalidArgumentException(option,argv[i]);
00889             break;
00890           }
00891         if (LocaleCompare("chop",option+1) == 0)
00892           {
00893             if (*option == '+')
00894               break;
00895             i++;
00896             if (i == (ssize_t) (argc-1))
00897               ThrowConvertException(OptionError,"MissingArgument",option);
00898             if (IsGeometry(argv[i]) == MagickFalse)
00899               ThrowConvertInvalidArgumentException(option,argv[i]);
00900             break;
00901           }
00902         if (LocaleCompare("clamp",option+1) == 0)
00903           break;
00904         if (LocaleCompare("clip",option+1) == 0)
00905           break;
00906         if (LocaleCompare("clip-mask",option+1) == 0)
00907           {
00908             if (*option == '+')
00909               break;
00910             i++;
00911             if (i == (ssize_t) (argc-1))
00912               ThrowConvertException(OptionError,"MissingArgument",option);
00913             break;
00914           }
00915         if (LocaleCompare("clip-path",option+1) == 0)
00916           {
00917             i++;
00918             if (i == (ssize_t) (argc-1))
00919               ThrowConvertException(OptionError,"MissingArgument",option);
00920             break;
00921           }
00922         if (LocaleCompare("clone",option+1) == 0)
00923           {
00924             Image
00925               *clone_images;
00926 
00927             clone_images=image;
00928             if (k != 0)
00929               clone_images=image_stack[k-1].image;
00930             if (clone_images == (Image *) NULL)
00931               ThrowConvertException(ImageError,"ImageSequenceRequired",option);
00932             FireImageStack(MagickTrue,MagickTrue,MagickTrue);
00933             if (*option == '+')
00934               clone_images=CloneImages(clone_images,"-1",exception);
00935             else
00936               {
00937                 i++;
00938                 if (i == (ssize_t) (argc-1))
00939                   ThrowConvertException(OptionError,"MissingArgument",option);
00940                 if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
00941                   ThrowConvertInvalidArgumentException(option,argv[i]);
00942                 clone_images=CloneImages(clone_images,argv[i],exception);
00943               }
00944             if (clone_images == (Image *) NULL)
00945               ThrowConvertException(OptionError,"NoSuchImage",option);
00946             AppendImageStack(clone_images);
00947             break;
00948           }
00949         if (LocaleCompare("clut",option+1) == 0)
00950           break;
00951         if (LocaleCompare("coalesce",option+1) == 0)
00952           break;
00953         if (LocaleCompare("colorize",option+1) == 0)
00954           {
00955             if (*option == '+')
00956               break;
00957             i++;
00958             if (i == (ssize_t) (argc-1))
00959               ThrowConvertException(OptionError,"MissingArgument",option);
00960             if (IsGeometry(argv[i]) == MagickFalse)
00961               ThrowConvertInvalidArgumentException(option,argv[i]);
00962             break;
00963           }
00964         if (LocaleCompare("color-matrix",option+1) == 0)
00965           {
00966             KernelInfo
00967               *kernel_info;
00968 
00969             if (*option == '+')
00970               break;
00971             i++;
00972             if (i == (ssize_t) (argc-1))
00973               ThrowConvertException(OptionError,"MissingArgument",option);
00974             kernel_info=AcquireKernelInfo(argv[i]);
00975             if (kernel_info == (KernelInfo *) NULL)
00976               ThrowConvertInvalidArgumentException(option,argv[i]);
00977             kernel_info=DestroyKernelInfo(kernel_info);
00978             break;
00979           }
00980         if (LocaleCompare("colors",option+1) == 0)
00981           {
00982             if (*option == '+')
00983               break;
00984             i++;
00985             if ((i == (ssize_t) (argc-1)) ||
00986                 (IsGeometry(argv[i]) == MagickFalse))
00987               ThrowConvertException(OptionError,"MissingArgument",option);
00988             break;
00989           }
00990         if (LocaleCompare("colorspace",option+1) == 0)
00991           {
00992             ssize_t
00993               colorspace;
00994 
00995             if (*option == '+')
00996               break;
00997             i++;
00998             if (i == (ssize_t) (argc-1))
00999               ThrowConvertException(OptionError,"MissingArgument",option);
01000             colorspace=ParseCommandOption(MagickColorspaceOptions,
01001               MagickFalse,argv[i]);
01002             if (colorspace < 0)
01003               ThrowConvertException(OptionError,"UnrecognizedColorspace",
01004                 argv[i]);
01005             break;
01006           }
01007         if (LocaleCompare("combine",option+1) == 0)
01008           break;
01009         if (LocaleCompare("comment",option+1) == 0)
01010           {
01011             if (*option == '+')
01012               break;
01013             i++;
01014             if (i == (ssize_t) argc)
01015               ThrowConvertException(OptionError,"MissingArgument",option);
01016             break;
01017           }
01018         if (LocaleCompare("compose",option+1) == 0)
01019           {
01020             ssize_t
01021               compose;
01022 
01023             if (*option == '+')
01024               break;
01025             i++;
01026             if (i == (ssize_t) argc)
01027               ThrowConvertException(OptionError,"MissingArgument",option);
01028             compose=ParseCommandOption(MagickComposeOptions,MagickFalse,
01029               argv[i]);
01030             if (compose < 0)
01031               ThrowConvertException(OptionError,"UnrecognizedComposeOperator",
01032                 argv[i]);
01033             break;
01034           }
01035         if (LocaleCompare("composite",option+1) == 0)
01036           break;
01037         if (LocaleCompare("compress",option+1) == 0)
01038           {
01039             ssize_t
01040               compress;
01041 
01042             if (*option == '+')
01043               break;
01044             i++;
01045             if (i == (ssize_t) (argc-1))
01046               ThrowConvertException(OptionError,"MissingArgument",option);
01047             compress=ParseCommandOption(MagickCompressOptions,MagickFalse,
01048               argv[i]);
01049             if (compress < 0)
01050               ThrowConvertException(OptionError,"UnrecognizedImageCompression",
01051                 argv[i]);
01052             break;
01053           }
01054         if (LocaleCompare("concurrent",option+1) == 0)
01055           break;
01056         if (LocaleCompare("contrast",option+1) == 0)
01057           break;
01058         if (LocaleCompare("contrast-stretch",option+1) == 0)
01059           {
01060             i++;
01061             if (i == (ssize_t) (argc-1))
01062               ThrowConvertException(OptionError,"MissingArgument",option);
01063             if (IsGeometry(argv[i]) == MagickFalse)
01064               ThrowConvertInvalidArgumentException(option,argv[i]);
01065             break;
01066           }
01067         if (LocaleCompare("convolve",option+1) == 0)
01068           {
01069             KernelInfo
01070               *kernel_info;
01071 
01072             if (*option == '+')
01073               break;
01074             i++;
01075             if (i == (ssize_t) (argc-1))
01076               ThrowConvertException(OptionError,"MissingArgument",option);
01077             kernel_info=AcquireKernelInfo(argv[i]);
01078             if (kernel_info == (KernelInfo *) NULL)
01079               ThrowConvertInvalidArgumentException(option,argv[i]);
01080             kernel_info=DestroyKernelInfo(kernel_info);
01081             break;
01082           }
01083         if (LocaleCompare("crop",option+1) == 0)
01084           {
01085             if (*option == '+')
01086               break;
01087             i++;
01088             if (i == (ssize_t) (argc-1))
01089               ThrowConvertException(OptionError,"MissingArgument",option);
01090             if (IsGeometry(argv[i]) == MagickFalse)
01091               ThrowConvertInvalidArgumentException(option,argv[i]);
01092             break;
01093           }
01094         if (LocaleCompare("cycle",option+1) == 0)
01095           {
01096             if (*option == '+')
01097               break;
01098             i++;
01099             if (i == (ssize_t) (argc-1))
01100               ThrowConvertException(OptionError,"MissingArgument",option);
01101             if (IsGeometry(argv[i]) == MagickFalse)
01102               ThrowConvertInvalidArgumentException(option,argv[i]);
01103             break;
01104           }
01105         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01106       }
01107       case 'd':
01108       {
01109         if (LocaleCompare("decipher",option+1) == 0)
01110           {
01111             if (*option == '+')
01112               break;
01113             i++;
01114             if (i == (ssize_t) (argc-1))
01115               ThrowConvertException(OptionError,"MissingArgument",option);
01116             break;
01117           }
01118         if (LocaleCompare("deconstruct",option+1) == 0)
01119           break;
01120         if (LocaleCompare("debug",option+1) == 0)
01121           {
01122             ssize_t
01123               event;
01124 
01125             if (*option == '+')
01126               break;
01127             i++;
01128             if (i == (ssize_t) argc)
01129               ThrowConvertException(OptionError,"MissingArgument",option);
01130             event=ParseCommandOption(MagickLogEventOptions,MagickFalse,argv[i]);
01131             if (event < 0)
01132               ThrowConvertException(OptionError,"UnrecognizedEventType",
01133                 argv[i]);
01134             (void) SetLogEventMask(argv[i]);
01135             break;
01136           }
01137         if (LocaleCompare("define",option+1) == 0)
01138           {
01139             i++;
01140             if (i == (ssize_t) argc)
01141               ThrowConvertException(OptionError,"MissingArgument",option);
01142             if (*option == '+')
01143               {
01144                 const char
01145                   *define;
01146 
01147                 define=GetImageOption(image_info,argv[i]);
01148                 if (define == (const char *) NULL)
01149                   ThrowConvertException(OptionError,"NoSuchOption",argv[i]);
01150                 break;
01151               }
01152             break;
01153           }
01154         if (LocaleCompare("delay",option+1) == 0)
01155           {
01156             if (*option == '+')
01157               break;
01158             i++;
01159             if (i == (ssize_t) argc)
01160               ThrowConvertException(OptionError,"MissingArgument",option);
01161             if (IsGeometry(argv[i]) == MagickFalse)
01162               ThrowConvertInvalidArgumentException(option,argv[i]);
01163             break;
01164           }
01165         if (LocaleCompare("density",option+1) == 0)
01166           {
01167             if (*option == '+')
01168               break;
01169             i++;
01170             if (i == (ssize_t) (argc-1))
01171               ThrowConvertException(OptionError,"MissingArgument",option);
01172             if (IsGeometry(argv[i]) == MagickFalse)
01173               ThrowConvertInvalidArgumentException(option,argv[i]);
01174             break;
01175           }
01176         if (LocaleCompare("depth",option+1) == 0)
01177           {
01178             if (*option == '+')
01179               break;
01180             i++;
01181             if (i == (ssize_t) (argc-1))
01182               ThrowConvertException(OptionError,"MissingArgument",option);
01183             if (IsGeometry(argv[i]) == MagickFalse)
01184               ThrowConvertInvalidArgumentException(option,argv[i]);
01185             break;
01186           }
01187         if (LocaleCompare("delete",option+1) == 0)
01188           {
01189             if (*option == '+')
01190               break;
01191             i++;
01192             if (i == (ssize_t) (argc-1))
01193               ThrowConvertException(OptionError,"MissingArgument",option);
01194             if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
01195               ThrowConvertInvalidArgumentException(option,argv[i]);
01196             break;
01197           }
01198         if (LocaleCompare("deskew",option+1) == 0)
01199           {
01200             if (*option == '+')
01201               break;
01202             i++;
01203             if (i == (ssize_t) (argc-1))
01204               ThrowConvertException(OptionError,"MissingArgument",option);
01205             if (IsGeometry(argv[i]) == MagickFalse)
01206               ThrowConvertInvalidArgumentException(option,argv[i]);
01207             break;
01208           }
01209         if (LocaleCompare("despeckle",option+1) == 0)
01210           break;
01211         if (LocaleCompare("direction",option+1) == 0)
01212           {
01213             ssize_t
01214               direction;
01215 
01216             if (*option == '+')
01217               break;
01218             i++;
01219             if (i == (ssize_t) argc)
01220               ThrowConvertException(OptionError,"MissingArgument",option);
01221             direction=ParseCommandOption(MagickDirectionOptions,MagickFalse,
01222               argv[i]);
01223             if (direction < 0)
01224               ThrowConvertException(OptionError,"UnrecognizedDirectionType",
01225                 argv[i]);
01226             break;
01227           }
01228         if (LocaleCompare("display",option+1) == 0)
01229           {
01230             if (*option == '+')
01231               break;
01232             i++;
01233             if (i == (ssize_t) (argc-1))
01234               ThrowConvertException(OptionError,"MissingArgument",option);
01235             break;
01236           }
01237         if (LocaleCompare("dispose",option+1) == 0)
01238           {
01239             ssize_t
01240               dispose;
01241 
01242             if (*option == '+')
01243               break;
01244             i++;
01245             if (i == (ssize_t) argc)
01246               ThrowConvertException(OptionError,"MissingArgument",option);
01247             dispose=ParseCommandOption(MagickDisposeOptions,MagickFalse,argv[i]);
01248             if (dispose < 0)
01249               ThrowConvertException(OptionError,"UnrecognizedDisposeMethod",
01250                 argv[i]);
01251             break;
01252           }
01253         if (LocaleCompare("distort",option+1) == 0)
01254           {
01255             ssize_t
01256               op;
01257 
01258             i++;
01259             if (i == (ssize_t) argc)
01260               ThrowConvertException(OptionError,"MissingArgument",option);
01261             op=ParseCommandOption(MagickDistortOptions,MagickFalse,argv[i]);
01262             if (op < 0)
01263               ThrowConvertException(OptionError,"UnrecognizedDistortMethod",
01264                 argv[i]);
01265             i++;
01266             if (i == (ssize_t) (argc-1))
01267               ThrowConvertException(OptionError,"MissingArgument",option);
01268             break;
01269           }
01270         if (LocaleCompare("dither",option+1) == 0)
01271           {
01272             ssize_t
01273               method;
01274 
01275             if (*option == '+')
01276               break;
01277             i++;
01278             if (i == (ssize_t) argc)
01279               ThrowConvertException(OptionError,"MissingArgument",option);
01280             method=ParseCommandOption(MagickDitherOptions,MagickFalse,argv[i]);
01281             if (method < 0)
01282               ThrowConvertException(OptionError,"UnrecognizedDitherMethod",
01283                 argv[i]);
01284             break;
01285           }
01286         if (LocaleCompare("draw",option+1) == 0)
01287           {
01288             if (*option == '+')
01289               break;
01290             i++;
01291             if (i == (ssize_t) (argc-1))
01292               ThrowConvertException(OptionError,"MissingArgument",option);
01293             break;
01294           }
01295         if (LocaleCompare("duplicate",option+1) == 0)
01296           {
01297             if (*option == '+')
01298               break;
01299             i++;
01300             if (i == (ssize_t) (argc-1))
01301               ThrowConvertException(OptionError,"MissingArgument",option);
01302             if (IsGeometry(argv[i]) == MagickFalse)
01303               ThrowConvertInvalidArgumentException(option,argv[i]);
01304             break;
01305           }
01306         if (LocaleCompare("duration",option+1) == 0)
01307           {
01308             if (*option == '+')
01309               break;
01310             i++;
01311             if (i == (ssize_t) (argc-1))
01312               ThrowConvertException(OptionError,"MissingArgument",option);
01313             if (IsGeometry(argv[i]) == MagickFalse)
01314               ThrowConvertInvalidArgumentException(option,argv[i]);
01315             break;
01316           }
01317         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01318       }
01319       case 'e':
01320       {
01321         if (LocaleCompare("edge",option+1) == 0)
01322           {
01323             if (*option == '+')
01324               break;
01325             i++;
01326             if (i == (ssize_t) (argc-1))
01327               ThrowConvertException(OptionError,"MissingArgument",option);
01328             if (IsGeometry(argv[i]) == MagickFalse)
01329               ThrowConvertInvalidArgumentException(option,argv[i]);
01330             break;
01331           }
01332         if (LocaleCompare("emboss",option+1) == 0)
01333           {
01334             if (*option == '+')
01335               break;
01336             i++;
01337             if (i == (ssize_t) (argc-1))
01338               ThrowConvertException(OptionError,"MissingArgument",option);
01339             if (IsGeometry(argv[i]) == MagickFalse)
01340               ThrowConvertInvalidArgumentException(option,argv[i]);
01341             break;
01342           }
01343         if (LocaleCompare("encipher",option+1) == 0)
01344           {
01345             if (*option == '+')
01346               break;
01347             i++;
01348             if (i == (ssize_t) (argc-1))
01349               ThrowConvertException(OptionError,"MissingArgument",option);
01350             break;
01351           }
01352         if (LocaleCompare("encoding",option+1) == 0)
01353           {
01354             if (*option == '+')
01355               break;
01356             i++;
01357             if (i == (ssize_t) (argc-1))
01358               ThrowConvertException(OptionError,"MissingArgument",option);
01359             break;
01360           }
01361         if (LocaleCompare("endian",option+1) == 0)
01362           {
01363             ssize_t
01364               endian;
01365 
01366             if (*option == '+')
01367               break;
01368             i++;
01369             if (i == (ssize_t) (argc-1))
01370               ThrowConvertException(OptionError,"MissingArgument",option);
01371             endian=ParseCommandOption(MagickEndianOptions,MagickFalse,
01372               argv[i]);
01373             if (endian < 0)
01374               ThrowConvertException(OptionError,"UnrecognizedEndianType",
01375                 argv[i]);
01376             break;
01377           }
01378         if (LocaleCompare("enhance",option+1) == 0)
01379           break;
01380         if (LocaleCompare("equalize",option+1) == 0)
01381           break;
01382         if (LocaleCompare("evaluate",option+1) == 0)
01383           {
01384             ssize_t
01385               op;
01386 
01387             if (*option == '+')
01388               break;
01389             i++;
01390             if (i == (ssize_t) argc)
01391               ThrowConvertException(OptionError,"MissingArgument",option);
01392             op=ParseCommandOption(MagickEvaluateOptions,MagickFalse,argv[i]);
01393             if (op < 0)
01394               ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
01395                 argv[i]);
01396             i++;
01397             if (i == (ssize_t) (argc-1))
01398               ThrowConvertException(OptionError,"MissingArgument",option);
01399             if (IsGeometry(argv[i]) == MagickFalse)
01400               ThrowConvertInvalidArgumentException(option,argv[i]);
01401             break;
01402           }
01403         if (LocaleCompare("evaluate-sequence",option+1) == 0)
01404           {
01405             ssize_t
01406               op;
01407 
01408             if (*option == '+')
01409               break;
01410             i++;
01411             if (i == (ssize_t) argc)
01412               ThrowConvertException(OptionError,"MissingArgument",option);
01413             op=ParseCommandOption(MagickEvaluateOptions,MagickFalse,argv[i]);
01414             if (op < 0)
01415               ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
01416                 argv[i]);
01417             break;
01418           }
01419         if (LocaleCompare("extent",option+1) == 0)
01420           {
01421             if (*option == '+')
01422               break;
01423             i++;
01424             if (i == (ssize_t) (argc-1))
01425               ThrowConvertException(OptionError,"MissingArgument",option);
01426             if (IsGeometry(argv[i]) == MagickFalse)
01427               ThrowConvertInvalidArgumentException(option,argv[i]);
01428             break;
01429           }
01430         if (LocaleCompare("extract",option+1) == 0)
01431           {
01432             if (*option == '+')
01433               break;
01434             i++;
01435             if (i == (ssize_t) (argc-1))
01436               ThrowConvertException(OptionError,"MissingArgument",option);
01437             if (IsGeometry(argv[i]) == MagickFalse)
01438               ThrowConvertInvalidArgumentException(option,argv[i]);
01439             break;
01440           }
01441         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01442       }
01443       case 'f':
01444       {
01445         if (LocaleCompare("family",option+1) == 0)
01446           {
01447             if (*option == '+')
01448               break;
01449             i++;
01450             if (i == (ssize_t) (argc-1))
01451               ThrowConvertException(OptionError,"MissingArgument",option);
01452             break;
01453           }
01454         if (LocaleCompare("fft",option+1) == 0)
01455           break;
01456         if (LocaleCompare("fill",option+1) == 0)
01457           {
01458             if (*option == '+')
01459               break;
01460             i++;
01461             if (i == (ssize_t) (argc-1))
01462               ThrowConvertException(OptionError,"MissingArgument",option);
01463             break;
01464           }
01465         if (LocaleCompare("filter",option+1) == 0)
01466           {
01467             ssize_t
01468               filter;
01469 
01470             if (*option == '+')
01471               break;
01472             i++;
01473             if (i == (ssize_t) (argc-1))
01474               ThrowConvertException(OptionError,"MissingArgument",option);
01475             filter=ParseCommandOption(MagickFilterOptions,MagickFalse,argv[i]);
01476             if (filter < 0)
01477               ThrowConvertException(OptionError,"UnrecognizedImageFilter",
01478                 argv[i]);
01479             break;
01480           }
01481         if (LocaleCompare("flatten",option+1) == 0)
01482           break;
01483         if (LocaleCompare("flip",option+1) == 0)
01484           break;
01485         if (LocaleCompare("flop",option+1) == 0)
01486           break;
01487         if (LocaleCompare("floodfill",option+1) == 0)
01488           {
01489             if (*option == '+')
01490               break;
01491             i++;
01492             if (i == (ssize_t) (argc-1))
01493               ThrowConvertException(OptionError,"MissingArgument",option);
01494             if (IsGeometry(argv[i]) == MagickFalse)
01495               ThrowConvertInvalidArgumentException(option,argv[i]);
01496             i++;
01497             if (i == (ssize_t) (argc-1))
01498               ThrowConvertException(OptionError,"MissingArgument",option);
01499             break;
01500           }
01501         if (LocaleCompare("font",option+1) == 0)
01502           {
01503             if (*option == '+')
01504               break;
01505             i++;
01506             if (i == (ssize_t) (argc-1))
01507               ThrowConvertException(OptionError,"MissingArgument",option);
01508             break;
01509           }
01510         if (LocaleCompare("format",option+1) == 0)
01511           {
01512             if (*option == '+')
01513               break;
01514             i++;
01515             if (i == (ssize_t) (argc-1))
01516               ThrowConvertException(OptionError,"MissingArgument",option);
01517             format=argv[i];
01518             break;
01519           }
01520         if (LocaleCompare("frame",option+1) == 0)
01521           {
01522             if (*option == '+')
01523               break;
01524             i++;
01525             if (i == (ssize_t) (argc-1))
01526               ThrowConvertException(OptionError,"MissingArgument",option);
01527             if (IsGeometry(argv[i]) == MagickFalse)
01528               ThrowConvertInvalidArgumentException(option,argv[i]);
01529             break;
01530           }
01531         if (LocaleCompare("function",option+1) == 0)
01532           {
01533             ssize_t
01534               op;
01535 
01536             if (*option == '+')
01537               break;
01538             i++;
01539             if (i == (ssize_t) argc)
01540               ThrowConvertException(OptionError,"MissingArgument",option);
01541             op=ParseCommandOption(MagickFunctionOptions,MagickFalse,argv[i]);
01542             if (op < 0)
01543               ThrowConvertException(OptionError,"UnrecognizedFunction",argv[i]);
01544              i++;
01545              if (i == (ssize_t) (argc-1))
01546                ThrowConvertException(OptionError,"MissingArgument",option);
01547             break;
01548           }
01549         if (LocaleCompare("fuzz",option+1) == 0)
01550           {
01551             if (*option == '+')
01552               break;
01553             i++;
01554             if (i == (ssize_t) (argc-1))
01555               ThrowConvertException(OptionError,"MissingArgument",option);
01556             if (IsGeometry(argv[i]) == MagickFalse)
01557               ThrowConvertInvalidArgumentException(option,argv[i]);
01558             break;
01559           }
01560         if (LocaleCompare("fx",option+1) == 0)
01561           {
01562             if (*option == '+')
01563               break;
01564             i++;
01565             if (i == (ssize_t) (argc-1))
01566               ThrowConvertException(OptionError,"MissingArgument",option);
01567             break;
01568           }
01569         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01570       }
01571       case 'g':
01572       {
01573         if (LocaleCompare("gamma",option+1) == 0)
01574           {
01575             i++;
01576             if (i == (ssize_t) (argc-1))
01577               ThrowConvertException(OptionError,"MissingArgument",option);
01578             if (IsGeometry(argv[i]) == MagickFalse)
01579               ThrowConvertInvalidArgumentException(option,argv[i]);
01580             break;
01581           }
01582         if ((LocaleCompare("gaussian-blur",option+1) == 0) ||
01583             (LocaleCompare("gaussian",option+1) == 0))
01584           {
01585             i++;
01586             if (i == (ssize_t) (argc-1))
01587               ThrowConvertException(OptionError,"MissingArgument",option);
01588             if (IsGeometry(argv[i]) == MagickFalse)
01589               ThrowConvertInvalidArgumentException(option,argv[i]);
01590             break;
01591           }
01592         if (LocaleCompare("geometry",option+1) == 0)
01593           {
01594             if (*option == '+')
01595               break;
01596             i++;
01597             if (i == (ssize_t) (argc-1))
01598               ThrowConvertException(OptionError,"MissingArgument",option);
01599             if (IsGeometry(argv[i]) == MagickFalse)
01600               ThrowConvertInvalidArgumentException(option,argv[i]);
01601             break;
01602           }
01603         if (LocaleCompare("gravity",option+1) == 0)
01604           {
01605             ssize_t
01606               gravity;
01607 
01608             if (*option == '+')
01609               break;
01610             i++;
01611             if (i == (ssize_t) (argc-1))
01612               ThrowConvertException(OptionError,"MissingArgument",option);
01613             gravity=ParseCommandOption(MagickGravityOptions,MagickFalse,
01614               argv[i]);
01615             if (gravity < 0)
01616               ThrowConvertException(OptionError,"UnrecognizedGravityType",
01617                 argv[i]);
01618             break;
01619           }
01620         if (LocaleCompare("green-primary",option+1) == 0)
01621           {
01622             if (*option == '+')
01623               break;
01624             i++;
01625             if (i == (ssize_t) (argc-1))
01626               ThrowConvertException(OptionError,"MissingArgument",option);
01627             if (IsGeometry(argv[i]) == MagickFalse)
01628               ThrowConvertInvalidArgumentException(option,argv[i]);
01629             break;
01630           }
01631         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01632       }
01633       case 'h':
01634       {
01635         if (LocaleCompare("hald-clut",option+1) == 0)
01636           break;
01637         if ((LocaleCompare("help",option+1) == 0) ||
01638             (LocaleCompare("-help",option+1) == 0))
01639           return(ConvertUsage());
01640         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01641       }
01642       case 'i':
01643       {
01644         if (LocaleCompare("identify",option+1) == 0)
01645           break;
01646         if (LocaleCompare("ift",option+1) == 0)
01647           break;
01648         if (LocaleCompare("implode",option+1) == 0)
01649           {
01650             if (*option == '+')
01651               break;
01652             i++;
01653             if (i == (ssize_t) (argc-1))
01654               ThrowConvertException(OptionError,"MissingArgument",option);
01655             if (IsGeometry(argv[i]) == MagickFalse)
01656               ThrowConvertInvalidArgumentException(option,argv[i]);
01657             break;
01658           }
01659         if (LocaleCompare("insert",option+1) == 0)
01660           {
01661             if (*option == '+')
01662               break;
01663             i++;
01664             if (i == (ssize_t) (argc-1))
01665               ThrowConvertException(OptionError,"MissingArgument",option);
01666             if (IsGeometry(argv[i]) == MagickFalse)
01667               ThrowConvertInvalidArgumentException(option,argv[i]);
01668             break;
01669           }
01670         if (LocaleCompare("intent",option+1) == 0)
01671           {
01672             ssize_t
01673               intent;
01674 
01675             if (*option == '+')
01676               break;
01677             i++;
01678             if (i == (ssize_t) (argc-1))
01679               ThrowConvertException(OptionError,"MissingArgument",option);
01680             intent=ParseCommandOption(MagickIntentOptions,MagickFalse,
01681               argv[i]);
01682             if (intent < 0)
01683               ThrowConvertException(OptionError,"UnrecognizedIntentType",
01684                 argv[i]);
01685             break;
01686           }
01687         if (LocaleCompare("interlace",option+1) == 0)
01688           {
01689             ssize_t
01690               interlace;
01691 
01692             if (*option == '+')
01693               break;
01694             i++;
01695             if (i == (ssize_t) (argc-1))
01696               ThrowConvertException(OptionError,"MissingArgument",option);
01697             interlace=ParseCommandOption(MagickInterlaceOptions,MagickFalse,
01698               argv[i]);
01699             if (interlace < 0)
01700               ThrowConvertException(OptionError,"UnrecognizedInterlaceType",
01701                 argv[i]);
01702             break;
01703           }
01704         if (LocaleCompare("interline-spacing",option+1) == 0)
01705           {
01706             if (*option == '+')
01707               break;
01708             i++;
01709             if (i == (ssize_t) (argc-1))
01710               ThrowConvertException(OptionError,"MissingArgument",option);
01711             if (IsGeometry(argv[i]) == MagickFalse)
01712               ThrowConvertInvalidArgumentException(option,argv[i]);
01713             break;
01714           }
01715         if (LocaleCompare("interpolate",option+1) == 0)
01716           {
01717             ssize_t
01718               interpolate;
01719 
01720             if (*option == '+')
01721               break;
01722             i++;
01723             if (i == (ssize_t) argc)
01724               ThrowConvertException(OptionError,"MissingArgument",option);
01725             interpolate=ParseCommandOption(MagickInterpolateOptions,MagickFalse,
01726               argv[i]);
01727             if (interpolate < 0)
01728               ThrowConvertException(OptionError,"UnrecognizedInterpolateMethod",
01729                 argv[i]);
01730             break;
01731           }
01732         if (LocaleCompare("interword-spacing",option+1) == 0)
01733           {
01734             if (*option == '+')
01735               break;
01736             i++;
01737             if (i == (ssize_t) (argc-1))
01738               ThrowConvertException(OptionError,"MissingArgument",option);
01739             if (IsGeometry(argv[i]) == MagickFalse)
01740               ThrowConvertInvalidArgumentException(option,argv[i]);
01741             break;
01742           }
01743         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01744       }
01745       case 'k':
01746       {
01747         if (LocaleCompare("kerning",option+1) == 0)
01748           {
01749             if (*option == '+')
01750               break;
01751             i++;
01752             if (i == (ssize_t) (argc-1))
01753               ThrowConvertException(OptionError,"MissingArgument",option);
01754             if (IsGeometry(argv[i]) == MagickFalse)
01755               ThrowConvertInvalidArgumentException(option,argv[i]);
01756             break;
01757           }
01758         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01759       }
01760       case 'l':
01761       {
01762         if (LocaleCompare("label",option+1) == 0)
01763           {
01764             if (*option == '+')
01765               break;
01766             i++;
01767             if (i == (ssize_t) argc)
01768               ThrowConvertException(OptionError,"MissingArgument",option);
01769             break;
01770           }
01771         if (LocaleCompare("lat",option+1) == 0)
01772           {
01773             if (*option == '+')
01774               break;
01775             i++;
01776             if (i == (ssize_t) (argc-1))
01777               ThrowConvertException(OptionError,"MissingArgument",option);
01778             if (IsGeometry(argv[i]) == MagickFalse)
01779               ThrowConvertInvalidArgumentException(option,argv[i]);
01780             break;
01781           }
01782         if (LocaleCompare("layers",option+1) == 0)
01783           {
01784             ssize_t
01785               type;
01786 
01787             if (*option == '+')
01788               break;
01789             i++;
01790             if (i == (ssize_t) (argc-1))
01791               ThrowConvertException(OptionError,"MissingArgument",option);
01792             type=ParseCommandOption(MagickLayerOptions,MagickFalse,argv[i]);
01793             if (type < 0)
01794               ThrowConvertException(OptionError,"UnrecognizedLayerMethod",
01795                 argv[i]);
01796             break;
01797           }
01798         if (LocaleCompare("level",option+1) == 0)
01799           {
01800             i++;
01801             if (i == (ssize_t) (argc-1))
01802               ThrowConvertException(OptionError,"MissingArgument",option);
01803             if (IsGeometry(argv[i]) == MagickFalse)
01804               ThrowConvertInvalidArgumentException(option,argv[i]);
01805             break;
01806           }
01807         if (LocaleCompare("level-colors",option+1) == 0)
01808           {
01809             i++;
01810             if (i == (ssize_t) (argc-1))
01811               ThrowConvertException(OptionError,"MissingArgument",option);
01812             break;
01813           }
01814         if (LocaleCompare("liquid-rescale",option+1) == 0)
01815           {
01816             i++;
01817             if (i == (ssize_t) (argc-1))
01818               ThrowConvertException(OptionError,"MissingArgument",option);
01819             if (IsGeometry(argv[i]) == MagickFalse)
01820               ThrowConvertInvalidArgumentException(option,argv[i]);
01821             break;
01822           }
01823         if (LocaleCompare("limit",option+1) == 0)
01824           {
01825             char
01826               *p;
01827 
01828             double
01829               value;
01830 
01831             ssize_t
01832               resource;
01833 
01834             if (*option == '+')
01835               break;
01836             i++;
01837             if (i == (ssize_t) argc)
01838               ThrowConvertException(OptionError,"MissingArgument",option);
01839             resource=ParseCommandOption(MagickResourceOptions,MagickFalse,
01840               argv[i]);
01841             if (resource < 0)
01842               ThrowConvertException(OptionError,"UnrecognizedResourceType",
01843                 argv[i]);
01844             i++;
01845             if (i == (ssize_t) argc)
01846               ThrowConvertException(OptionError,"MissingArgument",option);
01847             value=StringToDouble(argv[i],&p);
01848             (void) value;
01849             if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
01850               ThrowConvertInvalidArgumentException(option,argv[i]);
01851             break;
01852           }
01853         if (LocaleCompare("linear-stretch",option+1) == 0)
01854           {
01855             i++;
01856             if (i == (ssize_t) (argc-1))
01857               ThrowConvertException(OptionError,"MissingArgument",option);
01858             if (IsGeometry(argv[i]) == MagickFalse)
01859               ThrowConvertInvalidArgumentException(option,argv[i]);
01860             break;
01861           }
01862         if (LocaleCompare("list",option+1) == 0)
01863           {
01864             ssize_t
01865               list;
01866 
01867             if (*option == '+')
01868               break;
01869             i++;
01870             if (i == (ssize_t) argc)
01871               ThrowConvertException(OptionError,"MissingArgument",option);
01872             list=ParseCommandOption(MagickListOptions,MagickFalse,argv[i]);
01873             if (list < 0)
01874               ThrowConvertException(OptionError,"UnrecognizedListType",argv[i]);
01875             status=MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
01876               argv+j,exception);
01877             DestroyConvert();
01878             return(status != 0 ? MagickFalse : MagickTrue);
01879           }
01880         if (LocaleCompare("log",option+1) == 0)
01881           {
01882             if (*option == '+')
01883               break;
01884             i++;
01885             if ((i == (ssize_t) argc) ||
01886                 (strchr(argv[i],'%') == (char *) NULL))
01887               ThrowConvertException(OptionError,"MissingArgument",option);
01888             break;
01889           }
01890         if (LocaleCompare("loop",option+1) == 0)
01891           {
01892             if (*option == '+')
01893               break;
01894             i++;
01895             if (i == (ssize_t) (argc-1))
01896               ThrowConvertException(OptionError,"MissingArgument",option);
01897             if (IsGeometry(argv[i]) == MagickFalse)
01898               ThrowConvertInvalidArgumentException(option,argv[i]);
01899             break;
01900           }
01901         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01902       }
01903       case 'm':
01904       {
01905         if (LocaleCompare("map",option+1) == 0)
01906           {
01907             if (*option == '+')
01908               break;
01909             i++;
01910             if (i == (ssize_t) (argc-1))
01911               ThrowConvertException(OptionError,"MissingArgument",option);
01912             break;
01913           }
01914         if (LocaleCompare("mask",option+1) == 0)
01915           {
01916             if (*option == '+')
01917               break;
01918             i++;
01919             if (i == (ssize_t) (argc-1))
01920               ThrowConvertException(OptionError,"MissingArgument",option);
01921             break;
01922           }
01923         if (LocaleCompare("matte",option+1) == 0)
01924           break;
01925         if (LocaleCompare("mattecolor",option+1) == 0)
01926           {
01927             if (*option == '+')
01928               break;
01929             i++;
01930             if (i == (ssize_t) (argc-1))
01931               ThrowConvertException(OptionError,"MissingArgument",option);
01932             break;
01933           }
01934         if (LocaleCompare("maximum",option+1) == 0)
01935           break;
01936         if (LocaleCompare("median",option+1) == 0)
01937           {
01938             if (*option == '+')
01939               break;
01940             i++;
01941             if (i == (ssize_t) (argc-1))
01942               ThrowConvertException(OptionError,"MissingArgument",option);
01943             if (IsGeometry(argv[i]) == MagickFalse)
01944               ThrowConvertInvalidArgumentException(option,argv[i]);
01945             break;
01946           }
01947         if (LocaleCompare("minimum",option+1) == 0)
01948           break;
01949         if (LocaleCompare("mode",option+1) == 0)
01950           {
01951             if (*option == '+')
01952               break;
01953             i++;
01954             if (i == (ssize_t) (argc-1))
01955               ThrowConvertException(OptionError,"MissingArgument",option);
01956             if (IsGeometry(argv[i]) == MagickFalse)
01957               ThrowConvertInvalidArgumentException(option,argv[i]);
01958             break;
01959           }
01960         if (LocaleCompare("modulate",option+1) == 0)
01961           {
01962             if (*option == '+')
01963               break;
01964             i++;
01965             if (i == (ssize_t) (argc-1))
01966               ThrowConvertException(OptionError,"MissingArgument",option);
01967             if (IsGeometry(argv[i]) == MagickFalse)
01968               ThrowConvertInvalidArgumentException(option,argv[i]);
01969             break;
01970           }
01971         if (LocaleCompare("monitor",option+1) == 0)
01972           break;
01973         if (LocaleCompare("monochrome",option+1) == 0)
01974           break;
01975         if (LocaleCompare("morph",option+1) == 0)
01976           {
01977             if (*option == '+')
01978               break;
01979             i++;
01980             if (i == (ssize_t) (argc-1))
01981               ThrowConvertException(OptionError,"MissingArgument",option);
01982             if (IsGeometry(argv[i]) == MagickFalse)
01983               ThrowConvertInvalidArgumentException(option,argv[i]);
01984             break;
01985           }
01986         if (LocaleCompare("morphology",option+1) == 0)
01987           {
01988             char
01989               token[MaxTextExtent];
01990 
01991             KernelInfo
01992               *kernel_info;
01993 
01994             ssize_t
01995               op;
01996 
01997             i++;
01998             if (i == (ssize_t) argc)
01999               ThrowConvertException(OptionError,"MissingArgument",option);
02000             GetMagickToken(argv[i],NULL,token);
02001             op=ParseCommandOption(MagickMorphologyOptions,MagickFalse,token);
02002             if (op < 0)
02003               ThrowConvertException(OptionError,"UnrecognizedMorphologyMethod",
02004                 token);
02005             i++;
02006             if (i == (ssize_t) (argc-1))
02007               ThrowConvertException(OptionError,"MissingArgument",option);
02008             kernel_info=AcquireKernelInfo(argv[i]);
02009             if (kernel_info == (KernelInfo *) NULL)
02010               ThrowConvertInvalidArgumentException(option,argv[i]);
02011             kernel_info=DestroyKernelInfo(kernel_info);
02012             break;
02013           }
02014         if (LocaleCompare("mosaic",option+1) == 0)
02015           break;
02016         if (LocaleCompare("motion-blur",option+1) == 0)
02017           {
02018             if (*option == '+')
02019               break;
02020             i++;
02021             if (i == (ssize_t) (argc-1))
02022               ThrowConvertException(OptionError,"MissingArgument",option);
02023             if (IsGeometry(argv[i]) == MagickFalse)
02024               ThrowConvertInvalidArgumentException(option,argv[i]);
02025             break;
02026           }
02027         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02028       }
02029       case 'n':
02030       {
02031         if (LocaleCompare("negate",option+1) == 0)
02032           break;
02033         if (LocaleCompare("noise",option+1) == 0)
02034           {
02035             i++;
02036             if (i == (ssize_t) (argc-1))
02037               ThrowConvertException(OptionError,"MissingArgument",option);
02038             if (*option == '+')
02039               {
02040                 ssize_t
02041                   noise;
02042 
02043                 noise=ParseCommandOption(MagickNoiseOptions,MagickFalse,argv[i]);
02044                 if (noise < 0)
02045                   ThrowConvertException(OptionError,"UnrecognizedNoiseType",
02046                     argv[i]);
02047                 break;
02048               }
02049             if (IsGeometry(argv[i]) == MagickFalse)
02050               ThrowConvertInvalidArgumentException(option,argv[i]);
02051             break;
02052           }
02053         if (LocaleCompare("noop",option+1) == 0)
02054           break;
02055         if (LocaleCompare("normalize",option+1) == 0)
02056           break;
02057         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02058       }
02059       case 'o':
02060       {
02061         if (LocaleCompare("opaque",option+1) == 0)
02062           {
02063             i++;
02064             if (i == (ssize_t) (argc-1))
02065               ThrowConvertException(OptionError,"MissingArgument",option);
02066             break;
02067           }
02068         if (LocaleCompare("ordered-dither",option+1) == 0)
02069           {
02070             if (*option == '+')
02071               break;
02072             i++;
02073             if (i == (ssize_t) (argc-1))
02074               ThrowConvertException(OptionError,"MissingArgument",option);
02075             break;
02076           }
02077         if (LocaleCompare("orient",option+1) == 0)
02078           {
02079             ssize_t
02080               orientation;
02081 
02082             if (*option == '+')
02083               break;
02084             i++;
02085             if (i == (ssize_t) (argc-1))
02086               ThrowConvertException(OptionError,"MissingArgument",option);
02087             orientation=ParseCommandOption(MagickOrientationOptions,
02088               MagickFalse,argv[i]);
02089             if (orientation < 0)
02090               ThrowConvertException(OptionError,"UnrecognizedImageOrientation",
02091                 argv[i]);
02092             break;
02093           }
02094         ThrowConvertException(OptionError,"UnrecognizedOption",argv[i])
02095       }
02096       case 'p':
02097       {
02098         if (LocaleCompare("page",option+1) == 0)
02099           {
02100             if (*option == '+')
02101               break;
02102             i++;
02103             if (i == (ssize_t) argc)
02104               ThrowConvertException(OptionError,"MissingArgument",option);
02105             break;
02106           }
02107         if (LocaleCompare("paint",option+1) == 0)
02108           {
02109             if (*option == '+')
02110               break;
02111             i++;
02112             if (i == (ssize_t) (argc-1))
02113               ThrowConvertException(OptionError,"MissingArgument",option);
02114             if (IsGeometry(argv[i]) == MagickFalse)
02115               ThrowConvertInvalidArgumentException(option,argv[i]);
02116             break;
02117           }
02118         if (LocaleCompare("ping",option+1) == 0)
02119           break;
02120         if (LocaleCompare("pointsize",option+1) == 0)
02121           {
02122             if (*option == '+')
02123               break;
02124             i++;
02125             if (i == (ssize_t) (argc-1))
02126               ThrowConvertException(OptionError,"MissingArgument",option);
02127             if (IsGeometry(argv[i]) == MagickFalse)
02128               ThrowConvertInvalidArgumentException(option,argv[i]);
02129             break;
02130           }
02131         if (LocaleCompare("polaroid",option+1) == 0)
02132           {
02133             if (*option == '+')
02134               break;
02135             i++;
02136             if (i == (ssize_t) (argc-1))
02137               ThrowConvertException(OptionError,"MissingArgument",option);
02138             if (IsGeometry(argv[i]) == MagickFalse)
02139               ThrowConvertInvalidArgumentException(option,argv[i]);
02140             break;
02141           }
02142         if (LocaleCompare("posterize",option+1) == 0)
02143           {
02144             if (*option == '+')
02145               break;
02146             i++;
02147             if (i == (ssize_t) (argc-1))
02148               ThrowConvertException(OptionError,"MissingArgument",option);
02149             if (IsGeometry(argv[i]) == MagickFalse)
02150               ThrowConvertInvalidArgumentException(option,argv[i]);
02151             break;
02152           }
02153         if (LocaleCompare("precision",option+1) == 0)
02154           {
02155             if (*option == '+')
02156               break;
02157             i++;
02158             if (i == (ssize_t) (argc-1))
02159               ThrowConvertException(OptionError,"MissingArgument",option);
02160             if (IsGeometry(argv[i]) == MagickFalse)
02161               ThrowConvertInvalidArgumentException(option,argv[i]);
02162             break;
02163           }
02164         if (LocaleCompare("preview",option+1) == 0)
02165           {
02166             ssize_t
02167               preview;
02168 
02169             if (*option == '+')
02170               break;
02171             i++;
02172             if (i == (ssize_t) (argc-1))
02173               ThrowConvertException(OptionError,"MissingArgument",option);
02174             preview=ParseCommandOption(MagickPreviewOptions,MagickFalse,
02175               argv[i]);
02176             if (preview < 0)
02177               ThrowConvertException(OptionError,"UnrecognizedPreviewType",
02178                 argv[i]);
02179             break;
02180           }
02181         if (LocaleCompare("print",option+1) == 0)
02182           {
02183             if (*option == '+')
02184               break;
02185             i++;
02186             if (i == (ssize_t) (argc-1))
02187               ThrowConvertException(OptionError,"MissingArgument",option);
02188             break;
02189           }
02190         if (LocaleCompare("process",option+1) == 0)
02191           {
02192             if (*option == '+')
02193               break;
02194             i++;
02195             if (i == (ssize_t) (argc-1))
02196               ThrowConvertException(OptionError,"MissingArgument",option);
02197             break;
02198           }
02199         if (LocaleCompare("profile",option+1) == 0)
02200           {
02201             i++;
02202             if (i == (ssize_t) (argc-1))
02203               ThrowConvertException(OptionError,"MissingArgument",option);
02204             break;
02205           }
02206         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02207       }
02208       case 'q':
02209       {
02210         if (LocaleCompare("quality",option+1) == 0)
02211           {
02212             if (*option == '+')
02213               break;
02214             i++;
02215             if (i == (ssize_t) (argc-1))
02216               ThrowConvertException(OptionError,"MissingArgument",option);
02217             if (IsGeometry(argv[i]) == MagickFalse)
02218               ThrowConvertInvalidArgumentException(option,argv[i]);
02219             break;
02220           }
02221         if (LocaleCompare("quantize",option+1) == 0)
02222           {
02223             ssize_t
02224               colorspace;
02225 
02226             if (*option == '+')
02227               break;
02228             i++;
02229             if (i == (ssize_t) (argc-1))
02230               ThrowConvertException(OptionError,"MissingArgument",option);
02231             colorspace=ParseCommandOption(MagickColorspaceOptions,
02232               MagickFalse,argv[i]);
02233             if (colorspace < 0)
02234               ThrowConvertException(OptionError,"UnrecognizedColorspace",
02235                 argv[i]);
02236             break;
02237           }
02238         if (LocaleCompare("quiet",option+1) == 0)
02239           break;
02240         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02241       }
02242       case 'r':
02243       {
02244         if (LocaleCompare("radial-blur",option+1) == 0)
02245           {
02246             i++;
02247             if (i == (ssize_t) (argc-1))
02248               ThrowConvertException(OptionError,"MissingArgument",option);
02249             if (IsGeometry(argv[i]) == MagickFalse)
02250               ThrowConvertInvalidArgumentException(option,argv[i]);
02251             break;
02252           }
02253         if (LocaleCompare("raise",option+1) == 0)
02254           {
02255             i++;
02256             if (i == (ssize_t) (argc-1))
02257               ThrowConvertException(OptionError,"MissingArgument",option);
02258             if (IsGeometry(argv[i]) == MagickFalse)
02259               ThrowConvertInvalidArgumentException(option,argv[i]);
02260             break;
02261           }
02262         if (LocaleCompare("random-threshold",option+1) == 0)
02263           {
02264             if (*option == '+')
02265               break;
02266             i++;
02267             if (i == (ssize_t) (argc-1))
02268               ThrowConvertException(OptionError,"MissingArgument",option);
02269             if (IsGeometry(argv[i]) == MagickFalse)
02270               ThrowConvertInvalidArgumentException(option,argv[i]);
02271             break;
02272           }
02273         if (LocaleCompare("red-primary",option+1) == 0)
02274           {
02275             if (*option == '+')
02276               break;
02277             i++;
02278             if (i == (ssize_t) (argc-1))
02279               ThrowConvertException(OptionError,"MissingArgument",option);
02280             if (IsGeometry(argv[i]) == MagickFalse)
02281               ThrowConvertInvalidArgumentException(option,argv[i]);
02282             break;
02283           }
02284         if (LocaleCompare("regard-warnings",option+1) == 0)
02285           break;
02286         if (LocaleCompare("region",option+1) == 0)
02287           {
02288             if (*option == '+')
02289               break;
02290             i++;
02291             if (i == (ssize_t) (argc-1))
02292               ThrowConvertException(OptionError,"MissingArgument",option);
02293             if (IsGeometry(argv[i]) == MagickFalse)
02294               ThrowConvertInvalidArgumentException(option,argv[i]);
02295             break;
02296           }
02297         if (LocaleCompare("remap",option+1) == 0)
02298           {
02299             if (*option == '+')
02300               break;
02301             i++;
02302             if (i == (ssize_t) (argc-1))
02303               ThrowConvertException(OptionError,"MissingArgument",option);
02304             break;
02305           }
02306         if (LocaleCompare("render",option+1) == 0)
02307           break;
02308         if (LocaleCompare("repage",option+1) == 0)
02309           {
02310             if (*option == '+')
02311               break;
02312             i++;
02313             if (i == (ssize_t) (argc-1))
02314               ThrowConvertException(OptionError,"MissingArgument",option);
02315             if (IsGeometry(argv[i]) == MagickFalse)
02316               ThrowConvertInvalidArgumentException(option,argv[i]);
02317             break;
02318           }
02319         if (LocaleCompare("resample",option+1) == 0)
02320           {
02321             if (*option == '+')
02322               break;
02323             i++;
02324             if (i == (ssize_t) (argc-1))
02325               ThrowConvertException(OptionError,"MissingArgument",option);
02326             if (IsGeometry(argv[i]) == MagickFalse)
02327               ThrowConvertInvalidArgumentException(option,argv[i]);
02328             break;
02329           }
02330         if (LocaleCompare("resize",option+1) == 0)
02331           {
02332             if (*option == '+')
02333               break;
02334             i++;
02335             if (i == (ssize_t) (argc-1))
02336               ThrowConvertException(OptionError,"MissingArgument",option);
02337             if (IsGeometry(argv[i]) == MagickFalse)
02338               ThrowConvertInvalidArgumentException(option,argv[i]);
02339             break;
02340           }
02341         if (LocaleNCompare("respect-parentheses",option+1,17) == 0)
02342           {
02343             respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
02344             break;
02345           }
02346         if (LocaleCompare("reverse",option+1) == 0)
02347           break;
02348         if (LocaleCompare("roll",option+1) == 0)
02349           {
02350             if (*option == '+')
02351               break;
02352             i++;
02353             if (i == (ssize_t) (argc-1))
02354               ThrowConvertException(OptionError,"MissingArgument",option);
02355             if (IsGeometry(argv[i]) == MagickFalse)
02356               ThrowConvertInvalidArgumentException(option,argv[i]);
02357             break;
02358           }
02359         if (LocaleCompare("rotate",option+1) == 0)
02360           {
02361             i++;
02362             if (i == (ssize_t) (argc-1))
02363               ThrowConvertException(OptionError,"MissingArgument",option);
02364             if (IsGeometry(argv[i]) == MagickFalse)
02365               ThrowConvertInvalidArgumentException(option,argv[i]);
02366             break;
02367           }
02368         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02369       }
02370       case 's':
02371       {
02372         if (LocaleCompare("sample",option+1) == 0)
02373           {
02374             if (*option == '+')
02375               break;
02376             i++;
02377             if (i == (ssize_t) (argc-1))
02378               ThrowConvertException(OptionError,"MissingArgument",option);
02379             if (IsGeometry(argv[i]) == MagickFalse)
02380               ThrowConvertInvalidArgumentException(option,argv[i]);
02381             break;
02382           }
02383         if (LocaleCompare("sampling-factor",option+1) == 0)
02384           {
02385             if (*option == '+')
02386               break;
02387             i++;
02388             if (i == (ssize_t) (argc-1))
02389               ThrowConvertException(OptionError,"MissingArgument",option);
02390             if (IsGeometry(argv[i]) == MagickFalse)
02391               ThrowConvertInvalidArgumentException(option,argv[i]);
02392             break;
02393           }
02394         if (LocaleCompare("scale",option+1) == 0)
02395           {
02396             if (*option == '+')
02397               break;
02398             i++;
02399             if (i == (ssize_t) (argc-1))
02400               ThrowConvertException(OptionError,"MissingArgument",option);
02401             if (IsGeometry(argv[i]) == MagickFalse)
02402               ThrowConvertInvalidArgumentException(option,argv[i]);
02403             break;
02404           }
02405         if (LocaleCompare("scene",option+1) == 0)
02406           {
02407             if (*option == '+')
02408               break;
02409             i++;
02410             if (i == (ssize_t) (argc-1))
02411               ThrowConvertException(OptionError,"MissingArgument",option);
02412             if (IsGeometry(argv[i]) == MagickFalse)
02413               ThrowConvertInvalidArgumentException(option,argv[i]);
02414             break;
02415           }
02416         if (LocaleCompare("seed",option+1) == 0)
02417           {
02418             if (*option == '+')
02419               break;
02420             i++;
02421             if (i == (ssize_t) (argc-1))
02422               ThrowConvertException(OptionError,"MissingArgument",option);
02423             if (IsGeometry(argv[i]) == MagickFalse)
02424               ThrowConvertInvalidArgumentException(option,argv[i]);
02425             break;
02426           }
02427         if (LocaleCompare("segment",option+1) == 0)
02428           {
02429             if (*option == '+')
02430               break;
02431             i++;
02432             if (i == (ssize_t) (argc-1))
02433               ThrowConvertException(OptionError,"MissingArgument",option);
02434             if (IsGeometry(argv[i]) == MagickFalse)
02435               ThrowConvertInvalidArgumentException(option,argv[i]);
02436             break;
02437           }
02438         if (LocaleCompare("selective-blur",option+1) == 0)
02439           {
02440             i++;
02441             if (i == (ssize_t) (argc-1))
02442               ThrowConvertException(OptionError,"MissingArgument",option);
02443             if (IsGeometry(argv[i]) == MagickFalse)
02444               ThrowConvertInvalidArgumentException(option,argv[i]);
02445             break;
02446           }
02447         if (LocaleCompare("separate",option+1) == 0)
02448           break;
02449         if (LocaleCompare("sepia-tone",option+1) == 0)
02450           {
02451             if (*option == '+')
02452               break;
02453             i++;
02454             if (i == (ssize_t) (argc-1))
02455               ThrowConvertException(OptionError,"MissingArgument",option);
02456             if (IsGeometry(argv[i]) == MagickFalse)
02457               ThrowConvertInvalidArgumentException(option,argv[i]);
02458             break;
02459           }
02460         if (LocaleCompare("set",option+1) == 0)
02461           {
02462             i++;
02463             if (i == (ssize_t) argc)
02464               ThrowConvertException(OptionError,"MissingArgument",option);
02465             if (*option == '+')
02466               break;
02467             i++;
02468             if (i == (ssize_t) argc)
02469               ThrowConvertException(OptionError,"MissingArgument",option);
02470             break;
02471           }
02472         if (LocaleCompare("shade",option+1) == 0)
02473           {
02474             i++;
02475             if (i == (ssize_t) (argc-1))
02476               ThrowConvertException(OptionError,"MissingArgument",option);
02477             if (IsGeometry(argv[i]) == MagickFalse)
02478               ThrowConvertInvalidArgumentException(option,argv[i]);
02479             break;
02480           }
02481         if (LocaleCompare("shadow",option+1) == 0)
02482           {
02483             if (*option == '+')
02484               break;
02485             i++;
02486             if (i == (ssize_t) (argc-1))
02487               ThrowConvertException(OptionError,"MissingArgument",option);
02488             if (IsGeometry(argv[i]) == MagickFalse)
02489               ThrowConvertInvalidArgumentException(option,argv[i]);
02490             break;
02491           }
02492         if (LocaleCompare("sharpen",option+1) == 0)
02493           {
02494             i++;
02495             if (i == (ssize_t) (argc-1))
02496               ThrowConvertException(OptionError,"MissingArgument",option);
02497             if (IsGeometry(argv[i]) == MagickFalse)
02498               ThrowConvertInvalidArgumentException(option,argv[i]);
02499             break;
02500           }
02501         if (LocaleCompare("shave",option+1) == 0)
02502           {
02503             if (*option == '+')
02504               break;
02505             i++;
02506             if (i == (ssize_t) (argc-1))
02507               ThrowConvertException(OptionError,"MissingArgument",option);
02508             if (IsGeometry(argv[i]) == MagickFalse)
02509               ThrowConvertInvalidArgumentException(option,argv[i]);
02510             break;
02511           }
02512         if (LocaleCompare("shear",option+1) == 0)
02513           {
02514             i++;
02515             if (i == (ssize_t) (argc-1))
02516               ThrowConvertException(OptionError,"MissingArgument",option);
02517             if (IsGeometry(argv[i]) == MagickFalse)
02518               ThrowConvertInvalidArgumentException(option,argv[i]);
02519             break;
02520           }
02521         if (LocaleCompare("sigmoidal-contrast",option+1) == 0)
02522           {
02523             i++;
02524             if (i == (ssize_t) (argc-1))
02525               ThrowConvertException(OptionError,"MissingArgument",option);
02526             if (IsGeometry(argv[i]) == MagickFalse)
02527               ThrowConvertInvalidArgumentException(option,argv[i]);
02528             break;
02529           }
02530         if (LocaleCompare("size",option+1) == 0)
02531           {
02532             if (*option == '+')
02533               break;
02534             i++;
02535             if (i == (ssize_t) (argc-1))
02536               ThrowConvertException(OptionError,"MissingArgument",option);
02537             if (IsGeometry(argv[i]) == MagickFalse)
02538               ThrowConvertInvalidArgumentException(option,argv[i]);
02539             break;
02540           }
02541         if (LocaleCompare("sketch",option+1) == 0)
02542           {
02543             if (*option == '+')
02544               break;
02545             i++;
02546             if (i == (ssize_t) (argc-1))
02547               ThrowConvertException(OptionError,"MissingArgument",option);
02548             if (IsGeometry(argv[i]) == MagickFalse)
02549               ThrowConvertInvalidArgumentException(option,argv[i]);
02550             break;
02551           }
02552         if (LocaleCompare("smush",option+1) == 0)
02553           {
02554             i++;
02555             if (i == (ssize_t) (argc-1))
02556               ThrowConvertException(OptionError,"MissingArgument",option);
02557             if (IsGeometry(argv[i]) == MagickFalse)
02558               ThrowConvertInvalidArgumentException(option,argv[i]);
02559             break;
02560           }
02561         if (LocaleCompare("solarize",option+1) == 0)
02562           {
02563             if (*option == '+')
02564               break;
02565             i++;
02566             if (i == (ssize_t) (argc-1))
02567               ThrowConvertException(OptionError,"MissingArgument",option);
02568             if (IsGeometry(argv[i]) == MagickFalse)
02569               ThrowConvertInvalidArgumentException(option,argv[i]);
02570             break;
02571           }
02572         if (LocaleCompare("sparse-color",option+1) == 0)
02573           {
02574             ssize_t
02575               op;
02576 
02577             i++;
02578             if (i == (ssize_t) argc)
02579               ThrowConvertException(OptionError,"MissingArgument",option);
02580             op=ParseCommandOption(MagickSparseColorOptions,MagickFalse,argv[i]);
02581             if (op < 0)
02582               ThrowConvertException(OptionError,"UnrecognizedSparseColorMethod",
02583                 argv[i]);
02584             i++;
02585             if (i == (ssize_t) (argc-1))
02586               ThrowConvertException(OptionError,"MissingArgument",option);
02587             break;
02588           }
02589         if (LocaleCompare("splice",option+1) == 0)
02590           {
02591             if (*option == '+')
02592               break;
02593             i++;
02594             if (i == (ssize_t) (argc-1))
02595               ThrowConvertException(OptionError,"MissingArgument",option);
02596             if (IsGeometry(argv[i]) == MagickFalse)
02597               ThrowConvertInvalidArgumentException(option,argv[i]);
02598             break;
02599           }
02600         if (LocaleCompare("spread",option+1) == 0)
02601           {
02602             if (*option == '+')
02603               break;
02604             i++;
02605             if ((i == (ssize_t) (argc-1)) ||
02606                 (IsGeometry(argv[i]) == MagickFalse))
02607               ThrowConvertException(OptionError,"MissingArgument",option);
02608             break;
02609           }
02610         if (LocaleCompare("statistic",option+1) == 0)
02611           {
02612             ssize_t
02613               op;
02614 
02615             if (*option == '+')
02616               break;
02617             i++;
02618             if (i == (ssize_t) argc)
02619               ThrowConvertException(OptionError,"MissingArgument",option);
02620             op=ParseCommandOption(MagickStatisticOptions,MagickFalse,argv[i]);
02621             if (op < 0)
02622               ThrowConvertException(OptionError,"UnrecognizedStatisticType",
02623                 argv[i]);
02624             i++;
02625             if (i == (ssize_t) (argc-1))
02626               ThrowConvertException(OptionError,"MissingArgument",option);
02627             if (IsGeometry(argv[i]) == MagickFalse)
02628               ThrowConvertInvalidArgumentException(option,argv[i]);
02629             break;
02630           }
02631         if (LocaleCompare("stretch",option+1) == 0)
02632           {
02633             ssize_t
02634               stretch;
02635 
02636             if (*option == '+')
02637               break;
02638             i++;
02639             if (i == (ssize_t) (argc-1))
02640               ThrowConvertException(OptionError,"MissingArgument",option);
02641             stretch=ParseCommandOption(MagickStretchOptions,MagickFalse,
02642               argv[i]);
02643             if (stretch < 0)
02644               ThrowConvertException(OptionError,"UnrecognizedStyleType",
02645                 argv[i]);
02646             break;
02647           }
02648         if (LocaleCompare("strip",option+1) == 0)
02649           break;
02650         if (LocaleCompare("stroke",option+1) == 0)
02651           {
02652             if (*option == '+')
02653               break;
02654             i++;
02655             if (i == (ssize_t) (argc-1))
02656               ThrowConvertException(OptionError,"MissingArgument",option);
02657             break;
02658           }
02659         if (LocaleCompare("strokewidth",option+1) == 0)
02660           {
02661             if (*option == '+')
02662               break;
02663             i++;
02664             if (i == (ssize_t) (argc-1))
02665               ThrowConvertException(OptionError,"MissingArgument",option);
02666             if (IsGeometry(argv[i]) == MagickFalse)
02667               ThrowConvertInvalidArgumentException(option,argv[i]);
02668             break;
02669           }
02670         if (LocaleCompare("style",option+1) == 0)
02671           {
02672             ssize_t
02673               style;
02674 
02675             if (*option == '+')
02676               break;
02677             i++;
02678             if (i == (ssize_t) (argc-1))
02679               ThrowConvertException(OptionError,"MissingArgument",option);
02680             style=ParseCommandOption(MagickStyleOptions,MagickFalse,argv[i]);
02681             if (style < 0)
02682               ThrowConvertException(OptionError,"UnrecognizedStyleType",
02683                 argv[i]);
02684             break;
02685           }
02686         if (LocaleCompare("support",option+1) == 0)
02687           {
02688             i++;  /* deprecated */
02689             break;
02690           }
02691         if (LocaleCompare("swap",option+1) == 0)
02692           {
02693             if (*option == '+')
02694               break;
02695             i++;
02696             if (i == (ssize_t) (argc-1))
02697               ThrowConvertException(OptionError,"MissingArgument",option);
02698             if (IsGeometry(argv[i]) == MagickFalse)
02699               ThrowConvertInvalidArgumentException(option,argv[i]);
02700             break;
02701           }
02702         if (LocaleCompare("swirl",option+1) == 0)
02703           {
02704             if (*option == '+')
02705               break;
02706             i++;
02707             if (i == (ssize_t) (argc-1))
02708               ThrowConvertException(OptionError,"MissingArgument",option);
02709             if (IsGeometry(argv[i]) == MagickFalse)
02710               ThrowConvertInvalidArgumentException(option,argv[i]);
02711             break;
02712           }
02713         if (LocaleCompare("synchronize",option+1) == 0)
02714           break;
02715         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02716       }
02717       case 't':
02718       {
02719         if (LocaleCompare("taint",option+1) == 0)
02720           break;
02721         if (LocaleCompare("texture",option+1) == 0)
02722           {
02723             if (*option == '+')
02724               break;
02725             i++;
02726             if (i == (ssize_t) (argc-1))
02727               ThrowConvertException(OptionError,"MissingArgument",option);
02728             break;
02729           }
02730         if (LocaleCompare("thumbnail",option+1) == 0)
02731           {
02732             if (*option == '+')
02733               break;
02734             i++;
02735             if (i == (ssize_t) (argc-1))
02736               ThrowConvertException(OptionError,"MissingArgument",option);
02737             if (IsGeometry(argv[i]) == MagickFalse)
02738               ThrowConvertInvalidArgumentException(option,argv[i]);
02739             break;
02740           }
02741         if (LocaleCompare("threshold",option+1) == 0)
02742           {
02743             if (*option == '+')
02744               break;
02745             i++;
02746             if (i == (ssize_t) (argc-1))
02747               ThrowConvertException(OptionError,"MissingArgument",option);
02748             if (IsGeometry(argv[i]) == MagickFalse)
02749               ThrowConvertInvalidArgumentException(option,argv[i]);
02750             break;
02751           }
02752         if (LocaleCompare("tile",option+1) == 0)
02753           {
02754             if (*option == '+')
02755               break;
02756             i++;
02757             if (i == (ssize_t) (argc-1))
02758               ThrowConvertException(OptionError,"MissingArgument",option);
02759             break;
02760           }
02761         if (LocaleCompare("tile-offset",option+1) == 0)
02762           {
02763             if (*option == '+')
02764               break;
02765             i++;
02766             if (i == (ssize_t) (argc-1))
02767               ThrowConvertException(OptionError,"MissingArgument",option);
02768             if (IsGeometry(argv[i]) == MagickFalse)
02769               ThrowConvertInvalidArgumentException(option,argv[i]);
02770             break;
02771           }
02772         if (LocaleCompare("tint",option+1) == 0)
02773           {
02774             if (*option == '+')
02775               break;
02776             i++;
02777             if (i == (ssize_t) (argc-1))
02778               ThrowConvertException(OptionError,"MissingArgument",option);
02779             if (IsGeometry(argv[i]) == MagickFalse)
02780               ThrowConvertInvalidArgumentException(option,argv[i]);
02781             break;
02782           }
02783         if (LocaleCompare("transform",option+1) == 0)
02784           break;
02785         if (LocaleCompare("transparent",option+1) == 0)
02786           {
02787             i++;
02788             if (i == (ssize_t) (argc-1))
02789               ThrowConvertException(OptionError,"MissingArgument",option);
02790             break;
02791           }
02792         if (LocaleCompare("transparent-color",option+1) == 0)
02793           {
02794             if (*option == '+')
02795               break;
02796             i++;
02797             if (i == (ssize_t) (argc-1))
02798               ThrowConvertException(OptionError,"MissingArgument",option);
02799             break;
02800           }
02801         if (LocaleCompare("transpose",option+1) == 0)
02802           break;
02803         if (LocaleCompare("transverse",option+1) == 0)
02804           break;
02805         if (LocaleCompare("treedepth",option+1) == 0)
02806           {
02807             if (*option == '+')
02808               break;
02809             i++;
02810             if (i == (ssize_t) (argc-1))
02811               ThrowConvertException(OptionError,"MissingArgument",option);
02812             if (IsGeometry(argv[i]) == MagickFalse)
02813               ThrowConvertInvalidArgumentException(option,argv[i]);
02814             break;
02815           }
02816         if (LocaleCompare("trim",option+1) == 0)
02817           break;
02818         if (LocaleCompare("type",option+1) == 0)
02819           {
02820             ssize_t
02821               type;
02822 
02823             if (*option == '+')
02824               break;
02825             i++;
02826             if (i == (ssize_t) (argc-1))
02827               ThrowConvertException(OptionError,"MissingArgument",option);
02828             type=ParseCommandOption(MagickTypeOptions,MagickFalse,argv[i]);
02829             if (type < 0)
02830               ThrowConvertException(OptionError,"UnrecognizedImageType",
02831                 argv[i]);
02832             break;
02833           }
02834         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02835       }
02836       case 'u':
02837       {
02838         if (LocaleCompare("undercolor",option+1) == 0)
02839           {
02840             if (*option == '+')
02841               break;
02842             i++;
02843             if (i == (ssize_t) (argc-1))
02844               ThrowConvertException(OptionError,"MissingArgument",option);
02845             break;
02846           }
02847         if (LocaleCompare("unique-colors",option+1) == 0)
02848           break;
02849         if (LocaleCompare("units",option+1) == 0)
02850           {
02851             ssize_t
02852               units;
02853 
02854             if (*option == '+')
02855               break;
02856             i++;
02857             if (i == (ssize_t) (argc-1))
02858               ThrowConvertException(OptionError,"MissingArgument",option);
02859             units=ParseCommandOption(MagickResolutionOptions,MagickFalse,
02860               argv[i]);
02861             if (units < 0)
02862               ThrowConvertException(OptionError,"UnrecognizedUnitsType",
02863                 argv[i]);
02864             break;
02865           }
02866         if (LocaleCompare("unsharp",option+1) == 0)
02867           {
02868             if (*option == '+')
02869               break;
02870             i++;
02871             if (i == (ssize_t) (argc-1))
02872               ThrowConvertException(OptionError,"MissingArgument",option);
02873             if (IsGeometry(argv[i]) == MagickFalse)
02874               ThrowConvertInvalidArgumentException(option,argv[i]);
02875             break;
02876           }
02877         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02878       }
02879       case 'v':
02880       {
02881         if (LocaleCompare("verbose",option+1) == 0)
02882           break;
02883         if ((LocaleCompare("version",option+1) == 0) ||
02884             (LocaleCompare("-version",option+1) == 0))
02885           {
02886             (void) FormatLocaleFile(stdout,"Version: %s\n",
02887               GetMagickVersion((size_t *) NULL));
02888             (void) FormatLocaleFile(stdout,"Copyright: %s\n",
02889               GetMagickCopyright());
02890             (void) FormatLocaleFile(stdout,"Features: %s\n\n",
02891               GetMagickFeatures());
02892             break;
02893           }
02894         if (LocaleCompare("view",option+1) == 0)
02895           {
02896             if (*option == '+')
02897               break;
02898             i++;
02899             if (i == (ssize_t) (argc-1))
02900               ThrowConvertException(OptionError,"MissingArgument",option);
02901             break;
02902           }
02903         if (LocaleCompare("vignette",option+1) == 0)
02904           {
02905             if (*option == '+')
02906               break;
02907             i++;
02908             if (i == (ssize_t) (argc-1))
02909               ThrowConvertException(OptionError,"MissingArgument",option);
02910             if (IsGeometry(argv[i]) == MagickFalse)
02911               ThrowConvertInvalidArgumentException(option,argv[i]);
02912             break;
02913           }
02914         if (LocaleCompare("virtual-pixel",option+1) == 0)
02915           {
02916             ssize_t
02917               method;
02918 
02919             if (*option == '+')
02920               break;
02921             i++;
02922             if (i == (ssize_t) (argc-1))
02923               ThrowConvertException(OptionError,"MissingArgument",option);
02924             method=ParseCommandOption(MagickVirtualPixelOptions,MagickFalse,
02925               argv[i]);
02926             if (method < 0)
02927               ThrowConvertException(OptionError,
02928                 "UnrecognizedVirtualPixelMethod",argv[i]);
02929             break;
02930           }
02931         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02932       }
02933       case 'w':
02934       {
02935         if (LocaleCompare("wave",option+1) == 0)
02936           {
02937             i++;
02938             if (i == (ssize_t) (argc-1))
02939               ThrowConvertException(OptionError,"MissingArgument",option);
02940             if (IsGeometry(argv[i]) == MagickFalse)
02941               ThrowConvertInvalidArgumentException(option,argv[i]);
02942             break;
02943           }
02944         if (LocaleCompare("weight",option+1) == 0)
02945           {
02946             if (*option == '+')
02947               break;
02948             i++;
02949             if (i == (ssize_t) (argc-1))
02950               ThrowConvertException(OptionError,"MissingArgument",option);
02951             break;
02952           }
02953         if (LocaleCompare("white-point",option+1) == 0)
02954           {
02955             if (*option == '+')
02956               break;
02957             i++;
02958             if (i == (ssize_t) (argc-1))
02959               ThrowConvertException(OptionError,"MissingArgument",option);
02960             if (IsGeometry(argv[i]) == MagickFalse)
02961               ThrowConvertInvalidArgumentException(option,argv[i]);
02962             break;
02963           }
02964         if (LocaleCompare("white-threshold",option+1) == 0)
02965           {
02966             if (*option == '+')
02967               break;
02968             i++;
02969             if (i == (ssize_t) (argc-1))
02970               ThrowConvertException(OptionError,"MissingArgument",option);
02971             if (IsGeometry(argv[i]) == MagickFalse)
02972               ThrowConvertInvalidArgumentException(option,argv[i]);
02973             break;
02974           }
02975         if (LocaleCompare("write",option+1) == 0)
02976           {
02977             i++;
02978             if (i == (ssize_t) (argc-1))
02979               ThrowConvertException(OptionError,"MissingArgument",option);
02980             break;
02981           }
02982         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02983       }
02984       case '?':
02985         break;
02986       default:
02987         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02988     }
02989     fire=(GetCommandOptionFlags(MagickCommandOptions,MagickFalse,option) &
02990       FireOptionFlag) == 0 ?  MagickFalse : MagickTrue;
02991     if (fire != MagickFalse)
02992       FireImageStack(MagickTrue,MagickTrue,MagickTrue);
02993   }
02994   if (k != 0)
02995     ThrowConvertException(OptionError,"UnbalancedParenthesis",argv[i]);
02996   if (i-- != (ssize_t) (argc-1))
02997     ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
02998   if (image == (Image *) NULL)
02999     ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
03000   FinalizeImageSettings(image_info,image,MagickTrue);
03001   if (image == (Image *) NULL)
03002     ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
03003   status&=WriteImages(image_info,image,argv[argc-1],exception);
03004   if (metadata != (char **) NULL)
03005     {
03006       char
03007         *text;
03008 
03009       text=InterpretImageProperties(image_info,image,format,exception);
03010       if (text == (char *) NULL)
03011         ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
03012           GetExceptionMessage(errno));
03013       (void) ConcatenateString(&(*metadata),text);
03014       text=DestroyString(text);
03015     }
03016   DestroyConvert();
03017   return(status != 0 ? MagickTrue : MagickFalse);
03018 }