PageRenderTime 57ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/wand/animate.c

http://github.com/idaunis/binarytiers
C | 1471 lines | 1324 code | 39 blank | 108 comment | 592 complexity | 3ab2c4fdd9083847b1320a275c27278e MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. /*
  2. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  3. % %
  4. % %
  5. % %
  6. % AAA N N IIIII M M AAA TTTTT EEEEE %
  7. % A A NN N I MM MM A A T E %
  8. % AAAAA N N N I M M M AAAAA T EEE %
  9. % A A N NN I M M A A T E %
  10. % A A N N IIIII M M A A T EEEEE %
  11. % %
  12. % %
  13. % Methods to Interactively Animate an Image Sequence %
  14. % %
  15. % Software Design %
  16. % John Cristy %
  17. % July 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 animate program to animate an image sequence on any X server.
  37. %
  38. */
  39. /*
  40. Include declarations.
  41. */
  42. #include "wand/studio.h"
  43. #include "wand/MagickWand.h"
  44. #include "wand/mogrify-private.h"
  45. #include "magick/animate-private.h"
  46. #include "magick/string-private.h"
  47. /*
  48. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  49. % %
  50. % %
  51. % %
  52. + A n i m a t e I m a g e C o m m a n d %
  53. % %
  54. % %
  55. % %
  56. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  57. %
  58. % AnimateImageCommand() displays a sequence of images on any workstation
  59. % display running an X server. Animate first determines the hardware
  60. % capabilities of the workstation. If the number of unique colors in an image
  61. % is less than or equal to the number the workstation can support, the image
  62. % is displayed in an X window. Otherwise the number of colors in the image is
  63. % first reduced to match the color resolution of the workstation before it is
  64. % displayed.
  65. %
  66. % This means that a continuous-tone 24 bits/pixel image can display on a 8
  67. % bit pseudo-color device or monochrome device. In most instances the reduced
  68. % color image closely resembles the original. Alternatively, a monochrome or
  69. % pseudo-color image sequence can display on a continuous-tone 24 bits/pixels
  70. % device.
  71. %
  72. % The format of the AnimateImageCommand method is:
  73. %
  74. % MagickBooleanType AnimateImageCommand(ImageInfo *image_info,int argc,
  75. % char **argv,char **metadata,ExceptionInfo *exception)
  76. %
  77. % A description of each parameter follows:
  78. %
  79. % o image_info: the image info.
  80. %
  81. % o argc: the number of elements in the argument vector.
  82. %
  83. % o argv: A text array containing the command line arguments.
  84. %
  85. % o metadata: any metadata is returned here.
  86. %
  87. % o exception: return any errors or warnings in this structure.
  88. %
  89. */
  90. static MagickBooleanType AnimateUsage(void)
  91. {
  92. const char
  93. **p;
  94. static const char
  95. *buttons[]=
  96. {
  97. "Press any button to map or unmap the Command widget",
  98. (char *) NULL
  99. },
  100. *miscellaneous[]=
  101. {
  102. "-debug events display copious debugging information",
  103. "-help print program options",
  104. "-list type print a list of supported option arguments",
  105. "-log format format of debugging information",
  106. "-version print version information",
  107. (char *) NULL
  108. },
  109. *operators[]=
  110. {
  111. "-colors value preferred number of colors in the image",
  112. "-crop geometry preferred size and location of the cropped image",
  113. "-extract geometry extract area from image",
  114. "-monochrome transform image to black and white",
  115. "-repage geometry size and location of an image canvas (operator)",
  116. "-resample geometry change the resolution of an image",
  117. "-resize geometry resize the image",
  118. "-rotate degrees apply Paeth rotation to the image",
  119. "-strip strip image of all profiles and comments",
  120. "-thumbnail geometry create a thumbnail of the image",
  121. "-trim trim image edges",
  122. (char *) NULL
  123. },
  124. *settings[]=
  125. {
  126. "-alpha option on, activate, off, deactivate, set, opaque, copy",
  127. " transparent, extract, background, or shape",
  128. "-authenticate password",
  129. " decipher image with this password",
  130. "-backdrop display image centered on a backdrop",
  131. "-channel type apply option to select image channels",
  132. "-colormap type Shared or Private",
  133. "-colorspace type alternate image colorspace",
  134. "-decipher filename convert cipher pixels to plain pixels",
  135. "-define format:option",
  136. " define one or more image format options",
  137. "-delay value display the next image after pausing",
  138. "-density geometry horizontal and vertical density of the image",
  139. "-depth value image depth",
  140. "-display server display image to this X server",
  141. "-dispose method layer disposal method",
  142. "-dither method apply error diffusion to image",
  143. "-filter type use this filter when resizing an image",
  144. "-format \"string\" output formatted image characteristics",
  145. "-gamma value level of gamma correction",
  146. "-geometry geometry preferred size and location of the Image window",
  147. "-gravity type horizontal and vertical backdrop placement",
  148. "-identify identify the format and characteristics of the image",
  149. "-immutable displayed image cannot be modified",
  150. "-interlace type type of image interlacing scheme",
  151. "-interpolate method pixel color interpolation method",
  152. "-limit type value pixel cache resource limit",
  153. "-loop iterations loop images then exit",
  154. "-map type display image using this Standard Colormap",
  155. "-monitor monitor progress",
  156. "-pause seconds to pause before reanimating",
  157. "-page geometry size and location of an image canvas (setting)",
  158. "-quantize colorspace reduce colors in this colorspace",
  159. "-quiet suppress all warning messages",
  160. "-regard-warnings pay attention to warning messages",
  161. "-remote command execute a command in an remote display process",
  162. "-respect-parentheses settings remain in effect until parenthesis boundary",
  163. "-sampling-factor geometry",
  164. " horizontal and vertical sampling factor",
  165. "-seed value seed a new sequence of pseudo-random numbers",
  166. "-set attribute value set an image attribute",
  167. "-size geometry width and height of image",
  168. "-transparent-color color",
  169. " transparent color",
  170. "-treedepth value color tree depth",
  171. "-verbose print detailed information about the image",
  172. "-visual type display image using this visual type",
  173. "-virtual-pixel method",
  174. " virtual pixel access method",
  175. "-window id display image to background of this window",
  176. (char *) NULL
  177. },
  178. *sequence_operators[]=
  179. {
  180. "-coalesce merge a sequence of images",
  181. "-flatten flatten a sequence of images",
  182. (char *) NULL
  183. };
  184. (void) printf("Version: %s\n",GetMagickVersion((size_t *) NULL));
  185. (void) printf("Copyright: %s\n",GetMagickCopyright());
  186. (void) printf("Features: %s\n\n",GetMagickFeatures());
  187. (void) printf("Usage: %s [options ...] file [ [options ...] file ...]\n",
  188. GetClientName());
  189. (void) printf("\nImage Settings:\n");
  190. for (p=settings; *p != (char *) NULL; p++)
  191. (void) printf(" %s\n",*p);
  192. (void) printf("\nImage Operators:\n");
  193. for (p=operators; *p != (char *) NULL; p++)
  194. (void) printf(" %s\n",*p);
  195. (void) printf("\nImage Sequence Operators:\n");
  196. for (p=sequence_operators; *p != (char *) NULL; p++)
  197. (void) printf(" %s\n",*p);
  198. (void) printf("\nMiscellaneous Options:\n");
  199. for (p=miscellaneous; *p != (char *) NULL; p++)
  200. (void) printf(" %s\n",*p);
  201. (void) printf(
  202. "\nIn addition to those listed above, you can specify these standard X\n");
  203. (void) printf(
  204. "resources as command line options: -background, -bordercolor,\n");
  205. (void) printf(
  206. "-borderwidth, -font, -foreground, -iconGeometry, -iconic, -name,\n");
  207. (void) printf("-mattecolor, -shared-memory, or -title.\n");
  208. (void) printf(
  209. "\nBy default, the image format of `file' is determined by its magic\n");
  210. (void) printf(
  211. "number. To specify a particular image format, precede the filename\n");
  212. (void) printf(
  213. "with an image format name and a colon (i.e. ps:image) or specify the\n");
  214. (void) printf(
  215. "image type as the filename suffix (i.e. image.ps). Specify 'file' as\n");
  216. (void) printf("'-' for standard input or output.\n");
  217. (void) printf("\nButtons: \n");
  218. for (p=buttons; *p != (char *) NULL; p++)
  219. (void) printf(" %s\n",*p);
  220. return(MagickFalse);
  221. }
  222. WandExport MagickBooleanType AnimateImageCommand(ImageInfo *image_info,
  223. int argc,char **argv,char **wand_unused(metadata),ExceptionInfo *exception)
  224. {
  225. #if defined(MAGICKCORE_X11_DELEGATE)
  226. #define DestroyAnimate() \
  227. { \
  228. XDestroyResourceInfo(&resource_info); \
  229. if (display != (Display *) NULL) \
  230. { \
  231. XCloseDisplay(display); \
  232. display=(Display *) NULL; \
  233. } \
  234. XDestroyResourceInfo(&resource_info); \
  235. DestroyImageStack(); \
  236. for (i=0; i < (ssize_t) argc; i++) \
  237. argv[i]=DestroyString(argv[i]); \
  238. argv=(char **) RelinquishMagickMemory(argv); \
  239. }
  240. #define ThrowAnimateException(asperity,tag,option) \
  241. { \
  242. (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \
  243. option); \
  244. DestroyAnimate(); \
  245. return(MagickFalse); \
  246. }
  247. #define ThrowAnimateInvalidArgumentException(option,argument) \
  248. { \
  249. (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
  250. "InvalidArgument","`%s': %s",option,argument); \
  251. DestroyAnimate(); \
  252. return(MagickFalse); \
  253. }
  254. char
  255. *resource_value,
  256. *server_name;
  257. const char
  258. *option;
  259. Display
  260. *display;
  261. Image
  262. *image;
  263. ImageStack
  264. image_stack[MaxImageStackDepth+1];
  265. MagickBooleanType
  266. fire,
  267. pend,
  268. respect_parenthesis;
  269. MagickStatusType
  270. status;
  271. QuantizeInfo
  272. *quantize_info;
  273. register ssize_t
  274. i;
  275. ssize_t
  276. j,
  277. k;
  278. XResourceInfo
  279. resource_info;
  280. XrmDatabase
  281. resource_database;
  282. /*
  283. Set defaults.
  284. */
  285. assert(image_info != (ImageInfo *) NULL);
  286. assert(image_info->signature == MagickSignature);
  287. if (image_info->debug != MagickFalse)
  288. (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
  289. assert(exception != (ExceptionInfo *) NULL);
  290. if (argc == 2)
  291. {
  292. option=argv[1];
  293. if ((LocaleCompare("version",option+1) == 0) ||
  294. (LocaleCompare("-version",option+1) == 0))
  295. {
  296. (void) fprintf(stdout,"Version: %s\n",
  297. GetMagickVersion((size_t *) NULL));
  298. (void) fprintf(stdout,"Copyright: %s\n",GetMagickCopyright());
  299. (void) fprintf(stdout,"Features: %s\n\n",GetMagickFeatures());
  300. return(MagickFalse);
  301. }
  302. }
  303. status=MagickTrue;
  304. SetNotifyHandlers;
  305. display=(Display *) NULL;
  306. j=1;
  307. k=0;
  308. NewImageStack();
  309. option=(char *) NULL;
  310. pend=MagickFalse;
  311. respect_parenthesis=MagickFalse;
  312. resource_database=(XrmDatabase) NULL;
  313. (void) ResetMagickMemory(&resource_info,0,sizeof(XResourceInfo));
  314. server_name=(char *) NULL;
  315. status=MagickTrue;
  316. /*
  317. Check for server name specified on the command line.
  318. */
  319. ReadCommandlLine(argc,&argv);
  320. status=ExpandFilenames(&argc,&argv);
  321. if (status == MagickFalse)
  322. ThrowAnimateException(ResourceLimitError,"MemoryAllocationFailed",
  323. image_info->filename);
  324. for (i=1; i < (ssize_t) argc; i++)
  325. {
  326. /*
  327. Check command line for server name.
  328. */
  329. option=argv[i];
  330. if (LocaleCompare("display",option+1) == 0)
  331. {
  332. /*
  333. User specified server name.
  334. */
  335. i++;
  336. if (i == (ssize_t) argc)
  337. ThrowAnimateException(OptionError,"MissingArgument",option);
  338. server_name=argv[i];
  339. }
  340. if ((LocaleCompare("help",option+1) == 0) ||
  341. (LocaleCompare("-help",option+1) == 0))
  342. return(AnimateUsage());
  343. }
  344. /*
  345. Get user defaults from X resource database.
  346. */
  347. display=XOpenDisplay(server_name);
  348. if (display == (Display *) NULL)
  349. ThrowAnimateException(XServerError,"UnableToOpenXServer",
  350. XDisplayName(server_name));
  351. (void) XSetErrorHandler(XError);
  352. resource_database=XGetResourceDatabase(display,GetClientName());
  353. XGetResourceInfo(image_info,resource_database,GetClientName(),
  354. &resource_info);
  355. quantize_info=resource_info.quantize_info;
  356. image_info->density=XGetResourceInstance(resource_database,GetClientName(),
  357. "density",(char *) NULL);
  358. if (image_info->density == (char *) NULL)
  359. image_info->density=XGetScreenDensity(display);
  360. resource_value=XGetResourceInstance(resource_database,GetClientName(),
  361. "interlace","none");
  362. image_info->interlace=(InterlaceType)
  363. ParseMagickOption(MagickInterlaceOptions,MagickFalse,resource_value);
  364. resource_value=XGetResourceInstance(resource_database,GetClientName(),
  365. "verbose","False");
  366. image_info->verbose=IsMagickTrue(resource_value);
  367. resource_value=XGetResourceInstance(resource_database,GetClientName(),
  368. "dither","True");
  369. quantize_info->dither=IsMagickTrue(resource_value);
  370. /*
  371. Parse command line.
  372. */
  373. for (i=1; i <= (ssize_t) argc; i++)
  374. {
  375. if (i < (ssize_t) argc)
  376. option=argv[i];
  377. else
  378. if (image != (Image *) NULL)
  379. break;
  380. else
  381. if (isatty(STDIN_FILENO) != MagickFalse)
  382. option="logo:";
  383. else
  384. {
  385. int
  386. c;
  387. c=getc(stdin);
  388. if (c == EOF)
  389. option="logo:";
  390. else
  391. {
  392. c=ungetc(c,stdin);
  393. option="-";
  394. }
  395. }
  396. if (LocaleCompare(option,"(") == 0)
  397. {
  398. FireImageStack(MagickFalse,MagickTrue,pend);
  399. if (k == MaxImageStackDepth)
  400. ThrowAnimateException(OptionError,"ParenthesisNestedTooDeeply",
  401. option);
  402. PushImageStack();
  403. continue;
  404. }
  405. if (LocaleCompare(option,")") == 0)
  406. {
  407. FireImageStack(MagickFalse,MagickTrue,MagickTrue);
  408. if (k == 0)
  409. ThrowAnimateException(OptionError,"UnableToParseExpression",option);
  410. PopImageStack();
  411. continue;
  412. }
  413. if (IsMagickOption(option) == MagickFalse)
  414. {
  415. const char
  416. *filename;
  417. Image
  418. *images;
  419. /*
  420. Read input image.
  421. */
  422. FireImageStack(MagickFalse,MagickFalse,pend);
  423. filename=option;
  424. if ((LocaleCompare(filename,"--") == 0) && (i < (ssize_t) (argc-1)))
  425. {
  426. option=argv[++i];
  427. filename=option;
  428. }
  429. (void) CopyMagickString(image_info->filename,filename,MaxTextExtent);
  430. if (image_info->ping != MagickFalse)
  431. images=PingImages(image_info,exception);
  432. else
  433. images=ReadImages(image_info,exception);
  434. status&=(images != (Image *) NULL) &&
  435. (exception->severity < ErrorException);
  436. if (images == (Image *) NULL)
  437. continue;
  438. AppendImageStack(images);
  439. continue;
  440. }
  441. pend=image != (Image *) NULL ? MagickTrue : MagickFalse;
  442. switch (*(option+1))
  443. {
  444. case 'a':
  445. {
  446. if (LocaleCompare("alpha",option+1) == 0)
  447. {
  448. ssize_t
  449. type;
  450. if (*option == '+')
  451. break;
  452. i++;
  453. if (i == (ssize_t) argc)
  454. ThrowAnimateException(OptionError,"MissingArgument",option);
  455. type=ParseMagickOption(MagickAlphaOptions,MagickFalse,argv[i]);
  456. if (type < 0)
  457. ThrowAnimateException(OptionError,"UnrecognizedAlphaChannelType",
  458. argv[i]);
  459. break;
  460. }
  461. if (LocaleCompare("authenticate",option+1) == 0)
  462. {
  463. if (*option == '+')
  464. break;
  465. i++;
  466. if (i == (ssize_t) argc)
  467. ThrowAnimateException(OptionError,"MissingArgument",option);
  468. break;
  469. }
  470. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  471. }
  472. case 'b':
  473. {
  474. if (LocaleCompare("backdrop",option+1) == 0)
  475. {
  476. resource_info.backdrop=(*option == '-') ? MagickTrue : MagickFalse;
  477. break;
  478. }
  479. if (LocaleCompare("background",option+1) == 0)
  480. {
  481. if (*option == '+')
  482. break;
  483. i++;
  484. if (i == (ssize_t) argc)
  485. ThrowAnimateException(OptionError,"MissingArgument",option);
  486. resource_info.background_color=argv[i];
  487. break;
  488. }
  489. if (LocaleCompare("bordercolor",option+1) == 0)
  490. {
  491. if (*option == '+')
  492. break;
  493. i++;
  494. if (i == (ssize_t) argc)
  495. ThrowAnimateException(OptionError,"MissingArgument",option);
  496. resource_info.border_color=argv[i];
  497. break;
  498. }
  499. if (LocaleCompare("borderwidth",option+1) == 0)
  500. {
  501. resource_info.border_width=0;
  502. if (*option == '+')
  503. break;
  504. i++;
  505. if ((i == (ssize_t) argc) || (IsGeometry(argv[i]) == MagickFalse))
  506. ThrowAnimateException(OptionError,"MissingArgument",option);
  507. resource_info.border_width=(unsigned int)
  508. StringToUnsignedLong(argv[i]);
  509. break;
  510. }
  511. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  512. }
  513. case 'c':
  514. {
  515. if (LocaleCompare("cache",option+1) == 0)
  516. {
  517. if (*option == '+')
  518. break;
  519. i++;
  520. if (i == (ssize_t) argc)
  521. ThrowAnimateException(OptionError,"MissingArgument",option);
  522. if (IsGeometry(argv[i]) == MagickFalse)
  523. ThrowAnimateInvalidArgumentException(option,argv[i]);
  524. break;
  525. }
  526. if (LocaleCompare("channel",option+1) == 0)
  527. {
  528. ssize_t
  529. channel;
  530. if (*option == '+')
  531. break;
  532. i++;
  533. if (i == (ssize_t) (argc-1))
  534. ThrowAnimateException(OptionError,"MissingArgument",option);
  535. channel=ParseChannelOption(argv[i]);
  536. if (channel < 0)
  537. ThrowAnimateException(OptionError,"UnrecognizedChannelType",
  538. argv[i]);
  539. break;
  540. }
  541. if (LocaleCompare("clone",option+1) == 0)
  542. {
  543. Image
  544. *clone_images;
  545. clone_images=image;
  546. if (k != 0)
  547. clone_images=image_stack[k-1].image;
  548. if (clone_images == (Image *) NULL)
  549. ThrowAnimateException(ImageError,"ImageSequenceRequired",option);
  550. FireImageStack(MagickFalse,MagickTrue,MagickTrue);
  551. if (*option == '+')
  552. clone_images=CloneImages(clone_images,"-1",exception);
  553. else
  554. {
  555. i++;
  556. if (i == (ssize_t) (argc-1))
  557. ThrowAnimateException(OptionError,"MissingArgument",option);
  558. if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
  559. ThrowAnimateInvalidArgumentException(option,argv[i]);
  560. clone_images=CloneImages(clone_images,argv[i],exception);
  561. }
  562. if (clone_images == (Image *) NULL)
  563. ThrowAnimateException(OptionError,"NoSuchImage",option);
  564. AppendImageStack(clone_images);
  565. break;
  566. }
  567. if (LocaleCompare("coalesce",option+1) == 0)
  568. break;
  569. if (LocaleCompare("colormap",option+1) == 0)
  570. {
  571. resource_info.colormap=PrivateColormap;
  572. if (*option == '+')
  573. break;
  574. i++;
  575. if (i == (ssize_t) argc)
  576. ThrowAnimateException(OptionError,"MissingArgument",option);
  577. resource_info.colormap=UndefinedColormap;
  578. if (LocaleCompare("private",argv[i]) == 0)
  579. resource_info.colormap=PrivateColormap;
  580. if (LocaleCompare("shared",argv[i]) == 0)
  581. resource_info.colormap=SharedColormap;
  582. if (resource_info.colormap == UndefinedColormap)
  583. ThrowAnimateException(OptionError,"UnrecognizedColormapType",
  584. argv[i]);
  585. break;
  586. }
  587. if (LocaleCompare("colors",option+1) == 0)
  588. {
  589. quantize_info->number_colors=0;
  590. if (*option == '+')
  591. break;
  592. i++;
  593. if (i == (ssize_t) argc)
  594. ThrowAnimateException(OptionError,"MissingArgument",option);
  595. if (IsGeometry(argv[i]) == MagickFalse)
  596. ThrowAnimateInvalidArgumentException(option,argv[i]);
  597. quantize_info->number_colors=StringToUnsignedLong(argv[i]);
  598. break;
  599. }
  600. if (LocaleCompare("colorspace",option+1) == 0)
  601. {
  602. ssize_t
  603. colorspace;
  604. if (*option == '+')
  605. break;
  606. i++;
  607. if (i == (ssize_t) argc)
  608. ThrowAnimateException(OptionError,"MissingArgument",option);
  609. colorspace=ParseMagickOption(MagickColorspaceOptions,
  610. MagickFalse,argv[i]);
  611. if (colorspace < 0)
  612. ThrowAnimateException(OptionError,"UnrecognizedColorspace",
  613. argv[i]);
  614. break;
  615. }
  616. if (LocaleCompare("concurrent",option+1) == 0)
  617. break;
  618. if (LocaleCompare("crop",option+1) == 0)
  619. {
  620. if (*option == '+')
  621. break;
  622. i++;
  623. if (i == (ssize_t) argc)
  624. ThrowAnimateException(OptionError,"MissingArgument",option);
  625. if (IsGeometry(argv[i]) == MagickFalse)
  626. ThrowAnimateInvalidArgumentException(option,argv[i]);
  627. break;
  628. }
  629. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  630. }
  631. case 'd':
  632. {
  633. if (LocaleCompare("debug",option+1) == 0)
  634. {
  635. ssize_t
  636. event;
  637. if (*option == '+')
  638. break;
  639. i++;
  640. if (i == (ssize_t) argc)
  641. ThrowAnimateException(OptionError,"MissingArgument",option);
  642. event=ParseMagickOption(MagickLogEventOptions,MagickFalse,argv[i]);
  643. if (event < 0)
  644. ThrowAnimateException(OptionError,"UnrecognizedEventType",
  645. argv[i]);
  646. (void) SetLogEventMask(argv[i]);
  647. break;
  648. }
  649. if (LocaleCompare("decipher",option+1) == 0)
  650. {
  651. if (*option == '+')
  652. break;
  653. i++;
  654. if (i == (ssize_t) (argc-1))
  655. ThrowAnimateException(OptionError,"MissingArgument",option);
  656. break;
  657. }
  658. if (LocaleCompare("define",option+1) == 0)
  659. {
  660. i++;
  661. if (i == (ssize_t) argc)
  662. ThrowAnimateException(OptionError,"MissingArgument",option);
  663. if (*option == '+')
  664. {
  665. const char
  666. *define;
  667. define=GetImageOption(image_info,argv[i]);
  668. if (define == (const char *) NULL)
  669. ThrowAnimateException(OptionError,"NoSuchOption",argv[i]);
  670. break;
  671. }
  672. break;
  673. }
  674. if (LocaleCompare("delay",option+1) == 0)
  675. {
  676. if (*option == '+')
  677. break;
  678. i++;
  679. if (i == (ssize_t) argc)
  680. ThrowAnimateException(OptionError,"MissingArgument",option);
  681. if (IsGeometry(argv[i]) == MagickFalse)
  682. ThrowAnimateInvalidArgumentException(option,argv[i]);
  683. break;
  684. }
  685. if (LocaleCompare("density",option+1) == 0)
  686. {
  687. if (*option == '+')
  688. break;
  689. i++;
  690. if (i == (ssize_t) argc)
  691. ThrowAnimateException(OptionError,"MissingArgument",option);
  692. if (IsGeometry(argv[i]) == MagickFalse)
  693. ThrowAnimateInvalidArgumentException(option,argv[i]);
  694. break;
  695. }
  696. if (LocaleCompare("depth",option+1) == 0)
  697. {
  698. if (*option == '+')
  699. break;
  700. i++;
  701. if (i == (ssize_t) argc)
  702. ThrowAnimateException(OptionError,"MissingArgument",option);
  703. if (IsGeometry(argv[i]) == MagickFalse)
  704. ThrowAnimateInvalidArgumentException(option,argv[i]);
  705. break;
  706. }
  707. if (LocaleCompare("display",option+1) == 0)
  708. {
  709. if (*option == '+')
  710. break;
  711. i++;
  712. if (i == (ssize_t) argc)
  713. ThrowAnimateException(OptionError,"MissingArgument",option);
  714. break;
  715. }
  716. if (LocaleCompare("dispose",option+1) == 0)
  717. {
  718. ssize_t
  719. dispose;
  720. if (*option == '+')
  721. break;
  722. i++;
  723. if (i == (ssize_t) argc)
  724. ThrowAnimateException(OptionError,"MissingArgument",option);
  725. dispose=ParseMagickOption(MagickDisposeOptions,MagickFalse,argv[i]);
  726. if (dispose < 0)
  727. ThrowAnimateException(OptionError,"UnrecognizedDisposeMethod",
  728. argv[i]);
  729. break;
  730. }
  731. if (LocaleCompare("dither",option+1) == 0)
  732. {
  733. ssize_t
  734. method;
  735. quantize_info->dither=MagickFalse;
  736. if (*option == '+')
  737. break;
  738. i++;
  739. if (i == (ssize_t) argc)
  740. ThrowAnimateException(OptionError,"MissingArgument",option);
  741. method=ParseMagickOption(MagickDitherOptions,MagickFalse,argv[i]);
  742. if (method < 0)
  743. ThrowAnimateException(OptionError,"UnrecognizedDitherMethod",
  744. argv[i]);
  745. quantize_info->dither=MagickTrue;
  746. quantize_info->dither_method=(DitherMethod) method;
  747. break;
  748. }
  749. if (LocaleCompare("duration",option+1) == 0)
  750. {
  751. if (*option == '+')
  752. break;
  753. i++;
  754. if (i == (ssize_t) (argc-1))
  755. ThrowAnimateException(OptionError,"MissingArgument",option);
  756. if (IsGeometry(argv[i]) == MagickFalse)
  757. ThrowAnimateInvalidArgumentException(option,argv[i]);
  758. break;
  759. }
  760. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  761. }
  762. case 'e':
  763. {
  764. if (LocaleCompare("extract",option+1) == 0)
  765. {
  766. if (*option == '+')
  767. break;
  768. i++;
  769. if (i == (ssize_t) argc)
  770. ThrowAnimateException(OptionError,"MissingArgument",option);
  771. if (IsGeometry(argv[i]) == MagickFalse)
  772. ThrowAnimateInvalidArgumentException(option,argv[i]);
  773. break;
  774. }
  775. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  776. }
  777. case 'f':
  778. {
  779. if (LocaleCompare("filter",option+1) == 0)
  780. {
  781. ssize_t
  782. filter;
  783. if (*option == '+')
  784. break;
  785. i++;
  786. if (i == (ssize_t) (argc-1))
  787. ThrowAnimateException(OptionError,"MissingArgument",option);
  788. filter=ParseMagickOption(MagickFilterOptions,MagickFalse,argv[i]);
  789. if (filter < 0)
  790. ThrowAnimateException(OptionError,"UnrecognizedImageFilter",
  791. argv[i]);
  792. break;
  793. }
  794. if (LocaleCompare("flatten",option+1) == 0)
  795. break;
  796. if (LocaleCompare("font",option+1) == 0)
  797. {
  798. if (*option == '+')
  799. break;
  800. i++;
  801. if (i == (ssize_t) argc)
  802. ThrowAnimateException(OptionError,"MissingArgument",option);
  803. resource_info.font=XGetResourceClass(resource_database,
  804. GetClientName(),"font",argv[i]);
  805. break;
  806. }
  807. if (LocaleCompare("foreground",option+1) == 0)
  808. {
  809. if (*option == '+')
  810. break;
  811. i++;
  812. if (i == (ssize_t) argc)
  813. ThrowAnimateException(OptionError,"MissingArgument",option);
  814. resource_info.foreground_color=argv[i];
  815. break;
  816. }
  817. if (LocaleCompare("format",option+1) == 0)
  818. {
  819. if (*option == '+')
  820. break;
  821. i++;
  822. if (i == (ssize_t) (argc-1))
  823. ThrowAnimateException(OptionError,"MissingArgument",option);
  824. break;
  825. }
  826. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  827. }
  828. case 'g':
  829. {
  830. if (LocaleCompare("gamma",option+1) == 0)
  831. {
  832. i++;
  833. if (i == (ssize_t) argc)
  834. ThrowAnimateException(OptionError,"MissingArgument",option);
  835. if (IsGeometry(argv[i]) == MagickFalse)
  836. ThrowAnimateInvalidArgumentException(option,argv[i]);
  837. break;
  838. }
  839. if (LocaleCompare("geometry",option+1) == 0)
  840. {
  841. resource_info.image_geometry=(char *) NULL;
  842. if (*option == '+')
  843. break;
  844. i++;
  845. if (i == (ssize_t) argc)
  846. ThrowAnimateException(OptionError,"MissingArgument",option);
  847. if (IsGeometry(argv[i]) == MagickFalse)
  848. ThrowAnimateInvalidArgumentException(option,argv[i]);
  849. resource_info.image_geometry=ConstantString(argv[i]);
  850. break;
  851. }
  852. if (LocaleCompare("gravity",option+1) == 0)
  853. {
  854. ssize_t
  855. gravity;
  856. if (*option == '+')
  857. break;
  858. i++;
  859. if (i == (ssize_t) (argc-1))
  860. ThrowAnimateException(OptionError,"MissingArgument",option);
  861. gravity=ParseMagickOption(MagickGravityOptions,MagickFalse,
  862. argv[i]);
  863. if (gravity < 0)
  864. ThrowAnimateException(OptionError,"UnrecognizedGravityType",
  865. argv[i]);
  866. break;
  867. }
  868. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  869. }
  870. case 'h':
  871. {
  872. if ((LocaleCompare("help",option+1) == 0) ||
  873. (LocaleCompare("-help",option+1) == 0))
  874. break;
  875. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  876. }
  877. case 'i':
  878. {
  879. if (LocaleCompare("iconGeometry",option+1) == 0)
  880. {
  881. resource_info.icon_geometry=(char *) NULL;
  882. if (*option == '+')
  883. break;
  884. i++;
  885. if (i == (ssize_t) argc)
  886. ThrowAnimateException(OptionError,"MissingArgument",option);
  887. if (IsGeometry(argv[i]) == MagickFalse)
  888. ThrowAnimateInvalidArgumentException(option,argv[i]);
  889. resource_info.icon_geometry=argv[i];
  890. break;
  891. }
  892. if (LocaleCompare("iconic",option+1) == 0)
  893. {
  894. resource_info.iconic=(*option == '-') ? MagickTrue : MagickFalse;
  895. break;
  896. }
  897. if (LocaleCompare("identify",option+1) == 0)
  898. break;
  899. if (LocaleCompare("immutable",option+1) == 0)
  900. {
  901. resource_info.immutable=(*option == '-') ? MagickTrue : MagickFalse;
  902. break;
  903. }
  904. if (LocaleCompare("interlace",option+1) == 0)
  905. {
  906. ssize_t
  907. interlace;
  908. if (*option == '+')
  909. break;
  910. i++;
  911. if (i == (ssize_t) argc)
  912. ThrowAnimateException(OptionError,"MissingArgument",option);
  913. interlace=ParseMagickOption(MagickInterlaceOptions,MagickFalse,
  914. argv[i]);
  915. if (interlace < 0)
  916. ThrowAnimateException(OptionError,"UnrecognizedInterlaceType",
  917. argv[i]);
  918. break;
  919. }
  920. if (LocaleCompare("interpolate",option+1) == 0)
  921. {
  922. ssize_t
  923. interpolate;
  924. if (*option == '+')
  925. break;
  926. i++;
  927. if (i == (ssize_t) argc)
  928. ThrowAnimateException(OptionError,"MissingArgument",option);
  929. interpolate=ParseMagickOption(MagickInterpolateOptions,MagickFalse,
  930. argv[i]);
  931. if (interpolate < 0)
  932. ThrowAnimateException(OptionError,"UnrecognizedInterpolateMethod",
  933. argv[i]);
  934. break;
  935. }
  936. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  937. }
  938. case 'l':
  939. {
  940. if (LocaleCompare("label",option+1) == 0)
  941. {
  942. if (*option == '+')
  943. break;
  944. i++;
  945. if (i == (ssize_t) argc)
  946. ThrowAnimateException(OptionError,"MissingArgument",option);
  947. break;
  948. }
  949. if (LocaleCompare("limit",option+1) == 0)
  950. {
  951. char
  952. *p;
  953. double
  954. value;
  955. ssize_t
  956. resource;
  957. if (*option == '+')
  958. break;
  959. i++;
  960. if (i == (ssize_t) argc)
  961. ThrowAnimateException(OptionError,"MissingArgument",option);
  962. resource=ParseMagickOption(MagickResourceOptions,MagickFalse,
  963. argv[i]);
  964. if (resource < 0)
  965. ThrowAnimateException(OptionError,"UnrecognizedResourceType",
  966. argv[i]);
  967. i++;
  968. if (i == (ssize_t) argc)
  969. ThrowAnimateException(OptionError,"MissingArgument",option);
  970. value=strtod(argv[i],&p);
  971. (void) value;
  972. if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
  973. ThrowAnimateInvalidArgumentException(option,argv[i]);
  974. break;
  975. }
  976. if (LocaleCompare("list",option+1) == 0)
  977. {
  978. ssize_t
  979. list;
  980. if (*option == '+')
  981. break;
  982. i++;
  983. if (i == (ssize_t) argc)
  984. ThrowAnimateException(OptionError,"MissingArgument",option);
  985. list=ParseMagickOption(MagickListOptions,MagickFalse,argv[i]);
  986. if (list < 0)
  987. ThrowAnimateException(OptionError,"UnrecognizedListType",argv[i]);
  988. status=MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
  989. argv+j,exception);
  990. DestroyAnimate();
  991. return(status != 0 ? MagickFalse : MagickTrue);
  992. }
  993. if (LocaleCompare("log",option+1) == 0)
  994. {
  995. if (*option == '+')
  996. break;
  997. i++;
  998. if ((i == (ssize_t) argc) ||
  999. (strchr(argv[i],'%') == (char *) NULL))
  1000. ThrowAnimateException(OptionError,"MissingArgument",option);
  1001. break;
  1002. }
  1003. if (LocaleCompare("loop",option+1) == 0)
  1004. {
  1005. if (*option == '+')
  1006. break;
  1007. i++;
  1008. if (i == (ssize_t) (argc-1))
  1009. ThrowAnimateException(OptionError,"MissingArgument",option);
  1010. if (IsGeometry(argv[i]) == MagickFalse)
  1011. ThrowAnimateInvalidArgumentException(option,argv[i]);
  1012. break;
  1013. }
  1014. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  1015. }
  1016. case 'm':
  1017. {
  1018. if (LocaleCompare("map",option+1) == 0)
  1019. {
  1020. resource_info.map_type=(char *) NULL;
  1021. if (*option == '+')
  1022. break;
  1023. (void) CopyMagickString(argv[i]+1,"san",MaxTextExtent);
  1024. i++;
  1025. if (i == (ssize_t) argc)
  1026. ThrowAnimateException(OptionError,"MissingArgument",option);
  1027. resource_info.map_type=argv[i];
  1028. break;
  1029. }
  1030. if (LocaleCompare("matte",option+1) == 0)
  1031. break;
  1032. if (LocaleCompare("mattecolor",option+1) == 0)
  1033. {
  1034. if (*option == '+')
  1035. break;
  1036. i++;
  1037. if (i == (ssize_t) argc)
  1038. ThrowAnimateException(OptionError,"MissingArgument",option);
  1039. resource_info.matte_color=argv[i];
  1040. break;
  1041. }
  1042. if (LocaleCompare("monitor",option+1) == 0)
  1043. break;
  1044. if (LocaleCompare("monochrome",option+1) == 0)
  1045. {
  1046. if (*option == '+')
  1047. break;
  1048. quantize_info->number_colors=2;
  1049. quantize_info->colorspace=GRAYColorspace;
  1050. break;
  1051. }
  1052. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  1053. }
  1054. case 'n':
  1055. {
  1056. if (LocaleCompare("name",option+1) == 0)
  1057. {
  1058. resource_info.name=(char *) NULL;
  1059. if (*option == '+')
  1060. break;
  1061. i++;
  1062. if (i == (ssize_t) argc)
  1063. ThrowAnimateException(OptionError,"MissingArgument",option);
  1064. resource_info.name=ConstantString(argv[i]);
  1065. break;
  1066. }
  1067. if (LocaleCompare("noop",option+1) == 0)
  1068. break;
  1069. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  1070. }
  1071. case 'p':
  1072. {
  1073. if (LocaleCompare("pause",option+1) == 0)
  1074. {
  1075. resource_info.pause=0;
  1076. if (*option == '+')
  1077. break;
  1078. i++;
  1079. if (i == (ssize_t) argc)
  1080. ThrowAnimateException(OptionError,"MissingArgument",option);
  1081. if (IsGeometry(argv[i]) == MagickFalse)
  1082. ThrowAnimateInvalidArgumentException(option,argv[i]);
  1083. resource_info.pause=(unsigned int) StringToUnsignedLong(argv[i]);
  1084. break;
  1085. }
  1086. if (LocaleCompare("page",option+1) == 0)
  1087. {
  1088. if (*option == '+')
  1089. break;
  1090. i++;
  1091. if (i == (ssize_t) argc)
  1092. ThrowAnimateException(OptionError,"MissingArgument",option);
  1093. break;
  1094. }
  1095. if (LocaleCompare("profile",option+1) == 0)
  1096. {
  1097. i++;
  1098. if (i == (ssize_t) argc)
  1099. ThrowAnimateException(OptionError,"MissingArgument",option);
  1100. break;
  1101. }
  1102. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  1103. }
  1104. case 'q':
  1105. {
  1106. if (LocaleCompare("quantize",option+1) == 0)
  1107. {
  1108. ssize_t
  1109. colorspace;
  1110. if (*option == '+')
  1111. break;
  1112. i++;
  1113. if (i == (ssize_t) (argc-1))
  1114. ThrowAnimateException(OptionError,"MissingArgument",option);
  1115. colorspace=ParseMagickOption(MagickColorspaceOptions,
  1116. MagickFalse,argv[i]);
  1117. if (colorspace < 0)
  1118. ThrowAnimateException(OptionError,"UnrecognizedColorspace",
  1119. argv[i]);
  1120. break;
  1121. }
  1122. if (LocaleCompare("quiet",option+1) == 0)
  1123. break;
  1124. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  1125. }
  1126. case 'r':
  1127. {
  1128. if (LocaleCompare("regard-warnings",option+1) == 0)
  1129. break;
  1130. if (LocaleCompare("remote",option+1) == 0)
  1131. {
  1132. i++;
  1133. if (i == (ssize_t) argc)
  1134. ThrowAnimateException(OptionError,"MissingArgument",option);
  1135. if (XRemoteCommand(display,resource_info.window_id,argv[i]) != 0)
  1136. return(MagickFalse);
  1137. i--;
  1138. break;
  1139. }
  1140. if (LocaleCompare("repage",option+1) == 0)
  1141. {
  1142. if (*option == '+')
  1143. break;
  1144. i++;
  1145. if (i == (ssize_t) argc)
  1146. ThrowAnimateException(OptionError,"MissingArgument",option);
  1147. if (IsGeometry(argv[i]) == MagickFalse)
  1148. ThrowAnimateInvalidArgumentException(option,argv[i]);
  1149. break;
  1150. }
  1151. if (LocaleCompare("resample",option+1) == 0)
  1152. {
  1153. if (*option == '+')
  1154. break;
  1155. i++;
  1156. if (i == (ssize_t) (argc-1))
  1157. ThrowAnimateException(OptionError,"MissingArgument",option);
  1158. if (IsGeometry(argv[i]) == MagickFalse)
  1159. ThrowAnimateInvalidArgumentException(option,argv[i]);
  1160. break;
  1161. }
  1162. if (LocaleCompare("resize",option+1) == 0)
  1163. {
  1164. if (*option == '+')
  1165. break;
  1166. i++;
  1167. if (i == (ssize_t) argc)
  1168. ThrowAnimateException(OptionError,"MissingArgument",option);
  1169. if (IsGeometry(argv[i]) == MagickFalse)
  1170. ThrowAnimateInvalidArgumentException(option,argv[i]);
  1171. break;
  1172. }
  1173. if (LocaleNCompare("respect-parentheses",option+1,17) == 0)
  1174. {
  1175. respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
  1176. break;
  1177. }
  1178. if (LocaleCompare("rotate",option+1) == 0)
  1179. {
  1180. i++;
  1181. if (i == (ssize_t) argc)
  1182. ThrowAnimateException(OptionError,"MissingArgument",option);
  1183. if (IsGeometry(argv[i]) == MagickFalse)
  1184. ThrowAnimateInvalidArgumentException(option,argv[i]);
  1185. break;
  1186. }
  1187. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  1188. }
  1189. case 's':
  1190. {
  1191. if (LocaleCompare("sampling-factor",option+1) == 0)
  1192. {
  1193. if (*option == '+')
  1194. break;
  1195. i++;
  1196. if (i == (ssize_t) argc)
  1197. ThrowAnimateException(OptionError,"MissingArgument",option);
  1198. if (IsGeometry(argv[i]) == MagickFalse)
  1199. ThrowAnimateInvalidArgumentException(option,argv[i]);
  1200. break;
  1201. }
  1202. if (LocaleCompare("seed",option+1) == 0)
  1203. {
  1204. if (*option == '+')
  1205. break;
  1206. i++;
  1207. if (i == (ssize_t) (argc-1))
  1208. ThrowAnimateException(OptionError,"MissingArgument",option);
  1209. if (IsGeometry(argv[i]) == MagickFalse)
  1210. ThrowAnimateInvalidArgumentException(option,argv[i]);
  1211. break;
  1212. }
  1213. if (LocaleCompare("scenes",option+1) == 0) /* deprecated */
  1214. {
  1215. if (*option == '+')
  1216. break;
  1217. i++;
  1218. if (i == (ssize_t) argc)
  1219. ThrowAnimateException(OptionError,"MissingArgument",option);
  1220. if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
  1221. ThrowAnimateInvalidArgumentException(option,argv[i]);
  1222. break;
  1223. }
  1224. if (LocaleCompare("set",option+1) == 0)
  1225. {
  1226. i++;
  1227. if (i == (ssize_t) argc)
  1228. ThrowAnimateException(OptionError,"MissingArgument",option);
  1229. if (*option == '+')
  1230. break;
  1231. i++;
  1232. if (i == (ssize_t) argc)
  1233. ThrowAnimateException(OptionError,"MissingArgument",option);
  1234. break;
  1235. }
  1236. if (LocaleCompare("shared-memory",option+1) == 0)
  1237. {
  1238. resource_info.use_shared_memory=(*option == '-') ? MagickTrue :
  1239. MagickFalse;
  1240. break;
  1241. }
  1242. if (LocaleCompare("size",option+1) == 0)
  1243. {
  1244. if (*option == '+')
  1245. break;
  1246. i++;
  1247. if (i == (ssize_t) argc)
  1248. ThrowAnimateException(OptionError,"MissingArgument",option);
  1249. if (IsGeometry(argv[i]) == MagickFalse)
  1250. ThrowAnimateInvalidArgumentException(option,argv[i]);
  1251. break;
  1252. }
  1253. if (LocaleCompare("strip",option+1) == 0)
  1254. break;
  1255. if (LocaleCompare("support",option+1) == 0)
  1256. {
  1257. i++; /* deprecated */
  1258. break;
  1259. }
  1260. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  1261. }
  1262. case 't':
  1263. {
  1264. if (LocaleCompare("text-font",option+1) == 0)
  1265. {
  1266. resource_info.text_font=(char *) NULL;
  1267. if (*option == '+')
  1268. break;
  1269. i++;
  1270. if (i == (ssize_t) argc)
  1271. ThrowAnimateException(OptionError,"MissingArgument",option);
  1272. resource_info.text_font=XGetResourceClass(resource_database,
  1273. GetClientName(),"font",argv[i]);
  1274. break;
  1275. }
  1276. if (LocaleCompare("thumbnail",option+1) == 0)
  1277. {
  1278. if (*option == '+')
  1279. break;
  1280. i++;
  1281. if (i == (ssize_t) argc)
  1282. ThrowAnimateException(OptionError,"MissingArgument",option);
  1283. if (IsGeometry(argv[i]) == MagickFalse)
  1284. ThrowAnimateInvalidArgumentException(option,argv[i]);
  1285. break;
  1286. }
  1287. if (LocaleCompare("title",option+1) == 0)
  1288. {
  1289. resource_info.title=(char *) NULL;
  1290. if (*option == '+')
  1291. break;
  1292. i++;
  1293. if (i == (ssize_t) argc)
  1294. ThrowAnimateException(OptionError,"MissingArgument",option);
  1295. resource_info.title=argv[i];
  1296. break;
  1297. }
  1298. if (LocaleCompare("transparent-color",option+1) == 0)
  1299. {
  1300. if (*option == '+')
  1301. break;
  1302. i++;
  1303. if (i == (ssize_t) (argc-1))
  1304. ThrowAnimateException(OptionError,"MissingArgument",option);
  1305. break;
  1306. }
  1307. if (LocaleCompare("treedepth",option+1) == 0)
  1308. {
  1309. quantize_info->tree_depth=0;
  1310. if (*option == '+')
  1311. break;
  1312. i++;
  1313. if (i == (ssize_t) argc)
  1314. ThrowAnimateException(OptionError,"MissingArgument",option);
  1315. if (IsGeometry(argv[i]) == MagickFalse)
  1316. ThrowAnimateInvalidArgumentException(option,argv[i]);
  1317. quantize_info->tree_depth=StringToUnsignedLong(argv[i]);
  1318. break;
  1319. }
  1320. if (LocaleCompare("trim",option+1) == 0)
  1321. break;
  1322. ThrowAnimateException(OptionError,"UnrecognizedOption",option);
  1323. }
  1324. case 'v':
  1325. {
  1326. if (LocaleCompare("verbose",option+1) == 0)
  1327. break;
  1328. if ((LocaleCompare("version",option+1) == 0) ||
  1329. (LocaleCompare("-version",option+1) == 0))
  1330. {
  1331. (void) fprintf(stdout,"Version: %s\n",
  1332. GetMagickVersion((size_t *) NULL));
  1333. (void) fprintf(stdout,"Copyright: %s\n",GetMagickCopyright());
  1334. (void) fprintf(stdout,"Features: %s\n\n",GetMagickFeatures());
  1335. break;
  1336. }
  1337. if (LocaleCompare("virtual-pixel",option+1) == 0)
  1338. {
  1339. ssize_t
  1340. method;
  1341. if (*option == '+')
  1342. break;
  1343. i++;
  1344. if (i == (ssize_t) argc)
  1345. ThrowAnimateException(OptionError,"MissingArgument",option);
  1346. method=ParseMagickOption(MagickVirtualPixelOptions,MagickFalse,
  1347. argv[i]);
  1348. if (method < 0)
  1349. ThrowAnimateException(OptionError,
  1350. "UnrecognizedVirtualPixelMethod",argv[i]);
  1351. break;
  1352. }
  1353. if (LocaleCompare("visual",option+1) == 0)
  1354. {
  1355. resource_info.visual_type=(char *) NULL;
  1356. if (*option == '+')
  1357. break;
  1358. i++;
  1359. if (i == (ssize_t) argc)
  1360. ThrowAnimateExc

Large files files are truncated, but you can click here to view the full file