PageRenderTime 158ms CodeModel.GetById 10ms RepoModel.GetById 1ms app.codeStats 0ms

/lib/wand/convert.c

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