00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 #include "wand/studio.h"
00045 #include "wand/MagickWand.h"
00046 #include "wand/mogrify-private.h"
00047 #include "magick/display-private.h"
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093 static MagickBooleanType DisplayUsage(void)
00094 {
00095 const char
00096 **p;
00097
00098 static const char
00099 *buttons[]=
00100 {
00101 "1 press to map or unmap the Command widget",
00102 "2 press and drag to magnify a region of an image",
00103 "3 press to load an image from a visual image directory",
00104 (char *) NULL
00105 },
00106 *miscellaneous[]=
00107 {
00108 "-debug events display copious debugging information",
00109 "-help print program options",
00110 "-list type print a list of supported option arguments",
00111 "-log format format of debugging information",
00112 "-version print version information",
00113 (char *) NULL
00114 },
00115 *operators[]=
00116 {
00117 "-auto-orient automagically orient image",
00118 "-border geometry surround image with a border of color",
00119 "-clip clip along the first path from the 8BIM profile",
00120 "-clip-path id clip along a named path from the 8BIM profile",
00121 "-colors value preferred number of colors in the image",
00122 "-contrast enhance or reduce the image contrast",
00123 "-crop geometry preferred size and location of the cropped image",
00124 "-decipher filename convert cipher pixels to plain pixels",
00125 "-deskew threshold straighten an image",
00126 "-despeckle reduce the speckles within an image",
00127 "-edge factor apply a filter to detect edges in the image",
00128 "-enhance apply a digital filter to enhance a noisy image",
00129 "-equalize perform histogram equalization to an image",
00130 "-extract geometry extract area from image",
00131 "-flip flip image in the vertical direction",
00132 "-flop flop image in the horizontal direction",
00133 "-frame geometry surround image with an ornamental border",
00134 "-fuzz distance colors within this distance are considered equal",
00135 "-gamma value level of gamma correction",
00136 "-monochrome transform image to black and white",
00137 "-negate replace every pixel with its complementary color",
00138 "-normalize transform image to span the full range of colors",
00139 "-raise value lighten/darken image edges to create a 3-D effect",
00140 "-resample geometry change the resolution of an image",
00141 "-resize geometry resize the image",
00142 "-roll geometry roll an image vertically or horizontally",
00143 "-rotate degrees apply Paeth rotation to the image",
00144 "-sample geometry scale image with pixel sampling",
00145 "-segment value segment an image",
00146 "-sharpen geometry sharpen the image",
00147 "-strip strip image of all profiles and comments",
00148 "-threshold value threshold the image",
00149 "-trim trim image edges",
00150 (char *) NULL
00151 },
00152 *settings[]=
00153 {
00154 "-alpha option on, activate, off, deactivate, set, opaque, copy",
00155 " transparent, extract, background, or shape",
00156 "-antialias remove pixel-aliasing",
00157 "-authenticate password",
00158 " decipher image with this password",
00159 "-backdrop display image centered on a backdrop",
00160 "-channel type apply option to select image channels",
00161 "-colormap type Shared or Private",
00162 "-colorspace type alternate image colorspace",
00163 "-comment string annotate image with comment",
00164 "-compress type type of pixel compression when writing the image",
00165 "-define format:option",
00166 " define one or more image format options",
00167 "-delay value display the next image after pausing",
00168 "-density geometry horizontal and vertical density of the image",
00169 "-depth value image depth",
00170 "-display server display image to this X server",
00171 "-dispose method layer disposal method",
00172 "-dither method apply error diffusion to image",
00173 "-endian type endianness (MSB or LSB) of the image",
00174 "-filter type use this filter when resizing an image",
00175 "-format string output formatted image characteristics",
00176 "-geometry geometry preferred size and location of the Image window",
00177 "-gravity type horizontal and vertical backdrop placement",
00178 "-identify identify the format and characteristics of the image",
00179 "-immutable displayed image cannot be modified",
00180 "-interlace type type of image interlacing scheme",
00181 "-interpolate method pixel color interpolation method",
00182 "-label string assign a label to an image",
00183 "-limit type value pixel cache resource limit",
00184 "-loop iterations loop images then exit",
00185 "-map type display image using this Standard Colormap",
00186 "-monitor monitor progress",
00187 "-page geometry size and location of an image canvas",
00188 "-profile filename add, delete, or apply an image profile",
00189 "-quality value JPEG/MIFF/PNG compression level",
00190 "-quantize colorspace reduce colors in this colorspace",
00191 "-quiet suppress all warning messages",
00192 "-regard-warnings pay attention to warning messages",
00193 "-remote command execute a command in an remote display process",
00194 "-repage geometry size and location of an image canvas (operator)",
00195 "-respect-parentheses settings remain in effect until parenthesis boundary",
00196 "-sampling-factor geometry",
00197 " horizontal and vertical sampling factor",
00198 "-seed value seed a new sequence of pseudo-random numbers",
00199 "-set property value set an image property",
00200 "-size geometry width and height of image",
00201 "-texture filename name of texture to tile onto the image background",
00202 "-transparent-color color",
00203 " transparent color",
00204 "-treedepth value color tree depth",
00205 "-update seconds detect when image file is modified and redisplay",
00206 "-verbose print detailed information about the image",
00207 "-visual type display image using this visual type",
00208 "-virtual-pixel method",
00209 " virtual pixel access method",
00210 "-window id display image to background of this window",
00211 "-window-group id exit program when this window id is destroyed",
00212 "-write filename write image to a file",
00213 (char *) NULL
00214 },
00215 *sequence_operators[]=
00216 {
00217 "-coalesce merge a sequence of images",
00218 "-flatten flatten a sequence of images",
00219 (char *) NULL
00220 };
00221
00222 (void) printf("Version: %s\n",GetMagickVersion((unsigned long *) NULL));
00223 (void) printf("Copyright: %s\n",GetMagickCopyright());
00224 (void) printf("Features: %s\n\n",GetMagickFeatures());
00225 (void) printf("Usage: %s [options ...] file [ [options ...] file ...]\n",
00226 GetClientName());
00227 (void) printf("\nImage Settings:\n");
00228 for (p=settings; *p != (char *) NULL; p++)
00229 (void) printf(" %s\n",*p);
00230 (void) printf("\nImage Operators:\n");
00231 for (p=operators; *p != (char *) NULL; p++)
00232 (void) printf(" %s\n",*p);
00233 (void) printf("\nImage Sequence Operators:\n");
00234 for (p=sequence_operators; *p != (char *) NULL; p++)
00235 (void) printf(" %s\n",*p);
00236 (void) printf("\nMiscellaneous Options:\n");
00237 for (p=miscellaneous; *p != (char *) NULL; p++)
00238 (void) printf(" %s\n",*p);
00239 (void) printf(
00240 "\nIn addition to those listed above, you can specify these standard X\n");
00241 (void) printf(
00242 "resources as command line options: -background, -bordercolor,\n");
00243 (void) printf(
00244 "-borderwidth, -font, -foreground, -iconGeometry, -iconic, -mattecolor,\n");
00245 (void) printf("-name, -shared-memory, -usePixmap, or -title.\n");
00246 (void) printf(
00247 "\nBy default, the image format of `file' is determined by its magic\n");
00248 (void) printf(
00249 "number. To specify a particular image format, precede the filename\n");
00250 (void) printf(
00251 "with an image format name and a colon (i.e. ps:image) or specify the\n");
00252 (void) printf(
00253 "image type as the filename suffix (i.e. image.ps). Specify 'file' as\n");
00254 (void) printf("'-' for standard input or output.\n");
00255 (void) printf("\nButtons: \n");
00256 for (p=buttons; *p != (char *) NULL; p++)
00257 (void) printf(" %s\n",*p);
00258 return(MagickFalse);
00259 }
00260
00261 WandExport MagickBooleanType DisplayImageCommand(ImageInfo *image_info,
00262 int argc,char **argv,char **wand_unused(metadata),ExceptionInfo *exception)
00263 {
00264 #if defined(MAGICKCORE_X11_DELEGATE)
00265 #define DestroyDisplay() \
00266 { \
00267 if ((state & ExitState) == 0) \
00268 DestroyXResources(); \
00269 if (display != (Display *) NULL) \
00270 { \
00271 XCloseDisplay(display); \
00272 display=(Display *) NULL; \
00273 } \
00274 XDestroyResourceInfo(&resource_info); \
00275 DestroyImageStack(); \
00276 if (image_marker != (unsigned long *) NULL) \
00277 image_marker=(unsigned long *) RelinquishMagickMemory(image_marker); \
00278 for (i=0; i < (long) argc; i++) \
00279 argv[i]=DestroyString(argv[i]); \
00280 argv=(char **) RelinquishMagickMemory(argv); \
00281 }
00282 #define ThrowDisplayException(asperity,tag,option) \
00283 { \
00284 (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \
00285 option); \
00286 DestroyDisplay(); \
00287 return(MagickFalse); \
00288 }
00289 #define ThrowDisplayInvalidArgumentException(option,argument) \
00290 { \
00291 (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
00292 "InvalidArgument","`%s': %s",option,argument); \
00293 DestroyDisplay(); \
00294 return(MagickFalse); \
00295 }
00296
00297 char
00298 *resource_value,
00299 *server_name;
00300
00301 const char
00302 *option;
00303
00304 Display
00305 *display;
00306
00307 Image
00308 *image;
00309
00310 ImageStack
00311 image_stack[MaxImageStackDepth+1];
00312
00313 long
00314 image_number,
00315 iteration,
00316 j,
00317 k,
00318 l;
00319
00320 MagickBooleanType
00321 fire;
00322
00323 MagickStatusType
00324 pend,
00325 status;
00326
00327 QuantizeInfo
00328 *quantize_info;
00329
00330 register long
00331 i;
00332
00333 unsigned long
00334 *image_marker,
00335 iterations,
00336 last_image,
00337 state;
00338
00339 XResourceInfo
00340 resource_info;
00341
00342 XrmDatabase
00343 resource_database;
00344
00345
00346
00347
00348 assert(image_info != (ImageInfo *) NULL);
00349 assert(image_info->signature == MagickSignature);
00350 if (image_info->debug != MagickFalse)
00351 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
00352 assert(exception != (ExceptionInfo *) NULL);
00353 if (argc == 2)
00354 {
00355 option=argv[1];
00356 if ((LocaleCompare("version",option+1) == 0) ||
00357 (LocaleCompare("-version",option+1) == 0))
00358 {
00359 (void) fprintf(stdout,"Version: %s\n",
00360 GetMagickVersion((unsigned long *) NULL));
00361 (void) fprintf(stdout,"Copyright: %s\n",GetMagickCopyright());
00362 (void) fprintf(stdout,"Features: %s\n\n",GetMagickFeatures());
00363 return(MagickFalse);
00364 }
00365 }
00366 SetNotifyHandlers;
00367 display=(Display *) NULL;
00368 j=1;
00369 k=0;
00370 image_marker=(unsigned long *) NULL;
00371 image_number=0;
00372 last_image=0;
00373 NewImageStack();
00374 option=(char *) NULL;
00375 pend=MagickFalse;
00376 resource_database=(XrmDatabase) NULL;
00377 (void) ResetMagickMemory(&resource_info,0,sizeof(resource_info));
00378 server_name=(char *) NULL;
00379 state=0;
00380 status=MagickTrue;
00381 ReadCommandlLine(argc,&argv);
00382 status=ExpandFilenames(&argc,&argv);
00383 if (status == MagickFalse)
00384 ThrowDisplayException(ResourceLimitError,"MemoryAllocationFailed",
00385 GetExceptionMessage(errno));
00386 image_marker=(unsigned long *) AcquireQuantumMemory((size_t) argc+1UL,
00387 sizeof(*image_marker));
00388 if (image_marker == (unsigned long *) NULL)
00389 ThrowDisplayException(ResourceLimitError,"MemoryAllocationFailed",
00390 GetExceptionMessage(errno));
00391 for (i=0; i <= argc; i++)
00392 image_marker[i]=(unsigned long) argc;
00393
00394
00395
00396 for (i=1; i < (long) argc; i++)
00397 {
00398
00399
00400
00401 option=argv[i];
00402 if (LocaleCompare("display",option+1) == 0)
00403 {
00404
00405
00406
00407 i++;
00408 if (i == (long) argc)
00409 ThrowDisplayException(OptionError,"MissingArgument",option);
00410 server_name=argv[i];
00411 }
00412 if ((LocaleCompare("help",option+1) == 0) ||
00413 (LocaleCompare("-help",option+1) == 0))
00414 return(DisplayUsage());
00415 }
00416
00417
00418
00419 display=XOpenDisplay(server_name);
00420 if (display == (Display *) NULL)
00421 ThrowDisplayException(XServerError,"UnableToOpenXServer",
00422 XDisplayName(server_name));
00423 (void) XSetErrorHandler(XError);
00424 resource_database=XGetResourceDatabase(display,GetClientName());
00425 XGetResourceInfo(image_info,resource_database,GetClientName(),
00426 &resource_info);
00427 quantize_info=resource_info.quantize_info;
00428 image_info->density=XGetResourceInstance(resource_database,GetClientName(),
00429 "density",(char *) NULL);
00430 if (image_info->density == (char *) NULL)
00431 image_info->density=XGetScreenDensity(display);
00432 resource_value=XGetResourceInstance(resource_database,GetClientName(),
00433 "interlace","none");
00434 image_info->interlace=(InterlaceType)
00435 ParseMagickOption(MagickInterlaceOptions,MagickFalse,resource_value);
00436 image_info->page=XGetResourceInstance(resource_database,GetClientName(),
00437 "pageGeometry",(char *) NULL);
00438 resource_value=XGetResourceInstance(resource_database,GetClientName(),
00439 "quality","75");
00440 image_info->quality=(unsigned long) atol(resource_value);
00441 resource_value=XGetResourceInstance(resource_database,GetClientName(),
00442 "verbose","False");
00443 image_info->verbose=IsMagickTrue(resource_value);
00444 resource_value=XGetResourceInstance(resource_database,GetClientName(),
00445 "dither","True");
00446 quantize_info->dither=IsMagickTrue(resource_value);
00447
00448
00449
00450 iteration=0;
00451 for (i=1; ((i <= (long) argc) && ((state & ExitState) == 0)); i++)
00452 {
00453 if (i < (long) argc)
00454 option=argv[i];
00455 else
00456 if (image != (Image *) NULL)
00457 break;
00458 else
00459 if (isatty(STDIN_FILENO) != MagickFalse)
00460 option="logo:";
00461 else
00462 {
00463 int
00464 c;
00465
00466 c=getc(stdin);
00467 if (c == EOF)
00468 break;
00469 else
00470 {
00471 c=ungetc(c,stdin);
00472 option="-";
00473 }
00474 }
00475 if (LocaleCompare(option,"(") == 0)
00476 {
00477 FireImageStack(MagickFalse,MagickTrue,pend);
00478 if (k == MaxImageStackDepth)
00479 ThrowDisplayException(OptionError,"ParenthesisNestedTooDeeply",
00480 option);
00481 PushImageStack();
00482 continue;
00483 }
00484 if (LocaleCompare(option,")") == 0)
00485 {
00486 FireImageStack(MagickFalse,MagickTrue,MagickTrue);
00487 if (k == 0)
00488 ThrowDisplayException(OptionError,"UnableToParseExpression",option);
00489 PopImageStack();
00490 continue;
00491 }
00492 if (IsMagickOption(option) == MagickFalse)
00493 {
00494 const char
00495 *filename;
00496
00497 Image
00498 *images;
00499
00500
00501
00502
00503 FireImageStack(MagickFalse,MagickFalse,pend);
00504 filename=option;
00505 if ((LocaleCompare(filename,"--") == 0) && (i < (argc-1)))
00506 {
00507 option=argv[++i];
00508 filename=option;
00509 }
00510 (void) CopyMagickString(image_info->filename,filename,MaxTextExtent);
00511 images=ReadImage(image_info,exception);
00512 CatchException(exception);
00513 status&=(images != (Image *) NULL) &&
00514 (exception->severity < ErrorException);
00515 if (images == (Image *) NULL)
00516 continue;
00517 AppendImageStack(images);
00518 FinalizeImageSettings(image_info,image,MagickFalse);
00519 iterations=image->iterations;
00520 do
00521 {
00522
00523
00524
00525 resource_info.quantum=1;
00526 if (resource_info.window_id != (char *) NULL)
00527 {
00528
00529
00530
00531 status=XDisplayBackgroundImage(display,&resource_info,image);
00532 if (status != MagickFalse)
00533 {
00534 state|=RetainColorsState;
00535 status=MagickFalse;
00536 }
00537 }
00538 else
00539 do
00540 {
00541 Image
00542 *nexus;
00543
00544
00545
00546
00547 nexus=XDisplayImage(display,&resource_info,argv,argc,&image,
00548 &state);
00549 status&=nexus != (Image *) NULL;
00550 if (nexus == (Image *) NULL)
00551 break;
00552 while ((nexus != (Image *) NULL) && ((state & ExitState) == 0))
00553 {
00554 Image
00555 *next;
00556
00557 if (nexus->montage != (char *) NULL)
00558 {
00559
00560
00561
00562 RemoveAllImageStack()
00563 image=nexus;
00564 break;
00565 }
00566 next=XDisplayImage(display,&resource_info,argv,argc,&nexus,
00567 &state);
00568 if ((next == (Image *) NULL) &&
00569 (GetNextImageInList(nexus) != (Image *) NULL))
00570 {
00571 RemoveAllImageStack()
00572 image=GetNextImageInList(nexus);
00573 nexus=NewImageList();
00574 }
00575 else
00576 {
00577 if (nexus != image)
00578 nexus=DestroyImageList(nexus);
00579 nexus=next;
00580 }
00581 }
00582 } while ((state & ExitState) == 0);
00583 if (resource_info.write_filename != (char *) NULL)
00584 {
00585
00586
00587
00588 (void) CopyMagickString(image->filename,
00589 resource_info.write_filename,MaxTextExtent);
00590 (void) SetImageInfo(image_info,MagickTrue,&image->exception);
00591 status&=WriteImage(image_info,image);
00592 GetImageException(image,exception);
00593 }
00594
00595
00596
00597 if ((state & FormerImageState) != 0)
00598 for (l=0; l < resource_info.quantum; l++)
00599 {
00600 image=GetPreviousImageInList(image);
00601 if (image == (Image *) NULL)
00602 break;
00603 }
00604 else
00605 for (l=0; l < resource_info.quantum; l++)
00606 {
00607 image=GetNextImageInList(image);
00608 if (image == (Image *) NULL)
00609 break;
00610 }
00611 } while ((image != (Image *) NULL) && ((state & ExitState) == 0));
00612
00613
00614
00615 SetImageStack(image);
00616 RemoveAllImageStack();
00617 if ((state & FormerImageState) == 0)
00618 {
00619 last_image=(unsigned long) image_number;
00620 image_marker[i]=(unsigned long) image_number++;
00621 }
00622 else
00623 {
00624
00625
00626
00627 for (i--; i > 0; i--)
00628 if (image_marker[i] == (unsigned long) (image_number-2))
00629 break;
00630 image_number--;
00631 }
00632 if ((i == (long) (argc-1)) && ((state & ExitState) == 0))
00633 i=0;
00634 if ((state & ExitState) != 0)
00635 break;
00636
00637
00638
00639 if (image_number < 0)
00640 {
00641 if ((state & FormerImageState) != 0)
00642 {
00643
00644 for (i=1; i < (argc-2); i++)
00645 if (last_image == image_marker[i])
00646 break;
00647 image_number=(long) image_marker[i]+1;
00648 }
00649 continue;
00650 }
00651 if (resource_info.window_id != (char *) NULL)
00652 state|=ExitState;
00653 if ((iterations != 0) && (++iteration == (long) iterations))
00654 state|=ExitState;
00655 if (LocaleCompare(filename,"-") == 0)
00656 state|=ExitState;
00657 continue;
00658 }
00659 pend=image != (Image *) NULL ? MagickTrue : MagickFalse;
00660 switch (*(option+1))
00661 {
00662 case 'a':
00663 {
00664 if (LocaleCompare("alpha",option+1) == 0)
00665 {
00666 long
00667 type;
00668
00669 if (*option == '+')
00670 break;
00671 i++;
00672 if (i == (long) argc)
00673 ThrowDisplayException(OptionError,"MissingArgument",option);
00674 type=ParseMagickOption(MagickAlphaOptions,MagickFalse,argv[i]);
00675 if (type < 0)
00676 ThrowDisplayException(OptionError,"UnrecognizedAlphaChannelType",
00677 argv[i]);
00678 break;
00679 }
00680 if (LocaleCompare("antialias",option+1) == 0)
00681 break;
00682 if (LocaleCompare("authenticate",option+1) == 0)
00683 {
00684 if (*option == '+')
00685 break;
00686 i++;
00687 if (i == (long) argc)
00688 ThrowDisplayException(OptionError,"MissingArgument",option);
00689 break;
00690 }
00691 if (LocaleCompare("auto-orient",option+1) == 0)
00692 break;
00693 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
00694 }
00695 case 'b':
00696 {
00697 if (LocaleCompare("backdrop",option+1) == 0)
00698 {
00699 resource_info.backdrop=(*option == '-') ? MagickTrue : MagickFalse;
00700 break;
00701 }
00702 if (LocaleCompare("background",option+1) == 0)
00703 {
00704 if (*option == '+')
00705 break;
00706 i++;
00707 if (i == (long) argc)
00708 ThrowDisplayException(OptionError,"MissingArgument",option);
00709 resource_info.background_color=argv[i];
00710 break;
00711 }
00712 if (LocaleCompare("border",option+1) == 0)
00713 {
00714 if (*option == '+')
00715 break;
00716 i++;
00717 if (i == (long) argc)
00718 ThrowDisplayException(OptionError,"MissingArgument",option);
00719 if (IsGeometry(argv[i]) == MagickFalse)
00720 ThrowDisplayInvalidArgumentException(option,argv[i]);
00721 break;
00722 }
00723 if (LocaleCompare("bordercolor",option+1) == 0)
00724 {
00725 if (*option == '+')
00726 break;
00727 i++;
00728 if (i == (long) argc)
00729 ThrowDisplayException(OptionError,"MissingArgument",option);
00730 resource_info.border_color=argv[i];
00731 break;
00732 }
00733 if (LocaleCompare("borderwidth",option+1) == 0)
00734 {
00735 resource_info.border_width=0;
00736 if (*option == '+')
00737 break;
00738 i++;
00739 if (i == (long) argc)
00740 ThrowDisplayException(OptionError,"MissingArgument",option);
00741 if (IsGeometry(argv[i]) == MagickFalse)
00742 ThrowDisplayInvalidArgumentException(option,argv[i]);
00743 resource_info.border_width=(unsigned int) atoi(argv[i]);
00744 break;
00745 }
00746 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
00747 }
00748 case 'c':
00749 {
00750 if (LocaleCompare("cache",option+1) == 0)
00751 {
00752 if (*option == '+')
00753 break;
00754 i++;
00755 if (i == (long) argc)
00756 ThrowDisplayException(OptionError,"MissingArgument",option);
00757 if (IsGeometry(argv[i]) == MagickFalse)
00758 ThrowDisplayInvalidArgumentException(option,argv[i]);
00759 break;
00760 }
00761 if (LocaleCompare("channel",option+1) == 0)
00762 {
00763 long
00764 channel;
00765
00766 if (*option == '+')
00767 break;
00768 i++;
00769 if (i == (long) (argc-1))
00770 ThrowDisplayException(OptionError,"MissingArgument",option);
00771 channel=ParseChannelOption(argv[i]);
00772 if (channel < 0)
00773 ThrowDisplayException(OptionError,"UnrecognizedChannelType",
00774 argv[i]);
00775 break;
00776 }
00777 if (LocaleCompare("clip",option+1) == 0)
00778 break;
00779 if (LocaleCompare("clip-path",option+1) == 0)
00780 {
00781 i++;
00782 if (i == (long) argc)
00783 ThrowDisplayException(OptionError,"MissingArgument",option);
00784 break;
00785 }
00786 if (LocaleCompare("coalesce",option+1) == 0)
00787 break;
00788 if (LocaleCompare("colormap",option+1) == 0)
00789 {
00790 resource_info.colormap=PrivateColormap;
00791 if (*option == '+')
00792 break;
00793 i++;
00794 if (i == (long) argc)
00795 ThrowDisplayException(OptionError,"MissingArgument",option);
00796 resource_info.colormap=UndefinedColormap;
00797 if (LocaleCompare("private",argv[i]) == 0)
00798 resource_info.colormap=PrivateColormap;
00799 if (LocaleCompare("shared",argv[i]) == 0)
00800 resource_info.colormap=SharedColormap;
00801 if (resource_info.colormap == UndefinedColormap)
00802 ThrowDisplayException(OptionError,"UnrecognizedColormapType",
00803 argv[i]);
00804 break;
00805 }
00806 if (LocaleCompare("colors",option+1) == 0)
00807 {
00808 quantize_info->number_colors=0;
00809 if (*option == '+')
00810 break;
00811 i++;
00812 if (i == (long) argc)
00813 ThrowDisplayException(OptionError,"MissingArgument",option);
00814 if (IsGeometry(argv[i]) == MagickFalse)
00815 ThrowDisplayInvalidArgumentException(option,argv[i]);
00816 quantize_info->number_colors=(unsigned long) atol(argv[i]);
00817 break;
00818 }
00819 if (LocaleCompare("colorspace",option+1) == 0)
00820 {
00821 long
00822 colorspace;
00823
00824 if (*option == '+')
00825 break;
00826 i++;
00827 if (i == (long) argc)
00828 ThrowDisplayException(OptionError,"MissingArgument",option);
00829 colorspace=ParseMagickOption(MagickColorspaceOptions,
00830 MagickFalse,argv[i]);
00831 if (colorspace < 0)
00832 ThrowDisplayException(OptionError,"UnrecognizedColorspace",
00833 argv[i]);
00834 break;
00835 }
00836 if (LocaleCompare("comment",option+1) == 0)
00837 {
00838 if (*option == '+')
00839 break;
00840 i++;
00841 if (i == (long) argc)
00842 ThrowDisplayException(OptionError,"MissingArgument",option);
00843 break;
00844 }
00845 if (LocaleCompare("compress",option+1) == 0)
00846 {
00847 long
00848 compress;
00849
00850 if (*option == '+')
00851 break;
00852 i++;
00853 if (i == (long) argc)
00854 ThrowDisplayException(OptionError,"MissingArgument",option);
00855 compress=ParseMagickOption(MagickCompressOptions,MagickFalse,
00856 argv[i]);
00857 if (compress < 0)
00858 ThrowDisplayException(OptionError,"UnrecognizedImageCompression",
00859 argv[i]);
00860 break;
00861 }
00862 if (LocaleCompare("concurrent",option+1) == 0)
00863 break;
00864 if (LocaleCompare("contrast",option+1) == 0)
00865 break;
00866 if (LocaleCompare("crop",option+1) == 0)
00867 {
00868 if (*option == '+')
00869 break;
00870 i++;
00871 if (i == (long) argc)
00872 ThrowDisplayException(OptionError,"MissingArgument",option);
00873 if (IsGeometry(argv[i]) == MagickFalse)
00874 ThrowDisplayInvalidArgumentException(option,argv[i]);
00875 break;
00876 }
00877 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
00878 }
00879 case 'd':
00880 {
00881 if (LocaleCompare("debug",option+1) == 0)
00882 {
00883 long
00884 event;
00885
00886 if (*option == '+')
00887 break;
00888 i++;
00889 if (i == (long) argc)
00890 ThrowDisplayException(OptionError,"MissingArgument",option);
00891 event=ParseMagickOption(MagickLogEventOptions,MagickFalse,argv[i]);
00892 if (event < 0)
00893 ThrowDisplayException(OptionError,"UnrecognizedEventType",
00894 argv[i]);
00895 (void) SetLogEventMask(argv[i]);
00896 break;
00897 }
00898 if (LocaleCompare("decipher",option+1) == 0)
00899 {
00900 if (*option == '+')
00901 break;
00902 i++;
00903 if (i == (long) (argc-1))
00904 ThrowDisplayException(OptionError,"MissingArgument",option);
00905 break;
00906 }
00907 if (LocaleCompare("define",option+1) == 0)
00908 {
00909 i++;
00910 if (i == (long) argc)
00911 ThrowDisplayException(OptionError,"MissingArgument",option);
00912 if (*option == '+')
00913 {
00914 const char
00915 *define;
00916
00917 define=GetImageOption(image_info,argv[i]);
00918 if (define == (const char *) NULL)
00919 ThrowDisplayException(OptionError,"NoSuchOption",argv[i]);
00920 break;
00921 }
00922 break;
00923 }
00924 if (LocaleCompare("delay",option+1) == 0)
00925 {
00926 if (*option == '+')
00927 break;
00928 i++;
00929 if (i == (long) argc)
00930 ThrowDisplayException(OptionError,"MissingArgument",option);
00931 if (IsGeometry(argv[i]) == MagickFalse)
00932 ThrowDisplayInvalidArgumentException(option,argv[i]);
00933 break;
00934 }
00935 if (LocaleCompare("density",option+1) == 0)
00936 {
00937 if (*option == '+')
00938 break;
00939 i++;
00940 if (i == (long) argc)
00941 ThrowDisplayException(OptionError,"MissingArgument",option);
00942 if (IsGeometry(argv[i]) == MagickFalse)
00943 ThrowDisplayInvalidArgumentException(option,argv[i]);
00944 break;
00945 }
00946 if (LocaleCompare("depth",option+1) == 0)
00947 {
00948 if (*option == '+')
00949 break;
00950 i++;
00951 if (i == (long) argc)
00952 ThrowDisplayException(OptionError,"MissingArgument",option);
00953 if (IsGeometry(argv[i]) == MagickFalse)
00954 ThrowDisplayInvalidArgumentException(option,argv[i]);
00955 break;
00956 }
00957 if (LocaleCompare("deskew",option+1) == 0)
00958 {
00959 if (*option == '+')
00960 break;
00961 i++;
00962 if (i == (long) (argc-1))
00963 ThrowDisplayException(OptionError,"MissingArgument",option);
00964 if (IsGeometry(argv[i]) == MagickFalse)
00965 ThrowDisplayInvalidArgumentException(option,argv[i]);
00966 break;
00967 }
00968 if (LocaleCompare("despeckle",option+1) == 0)
00969 break;
00970 if (LocaleCompare("display",option+1) == 0)
00971 {
00972 if (*option == '+')
00973 break;
00974 i++;
00975 if (i == (long) argc)
00976 ThrowDisplayException(OptionError,"MissingArgument",option);
00977 break;
00978 }
00979 if (LocaleCompare("dispose",option+1) == 0)
00980 {
00981 long
00982 dispose;
00983
00984 if (*option == '+')
00985 break;
00986 i++;
00987 if (i == (long) argc)
00988 ThrowDisplayException(OptionError,"MissingArgument",option);
00989 dispose=ParseMagickOption(MagickDisposeOptions,MagickFalse,argv[i]);
00990 if (dispose < 0)
00991 ThrowDisplayException(OptionError,"UnrecognizedDisposeMethod",
00992 argv[i]);
00993 break;
00994 }
00995 if (LocaleCompare("dither",option+1) == 0)
00996 {
00997 long
00998 method;
00999
01000 quantize_info->dither=MagickFalse;
01001 if (*option == '+')
01002 break;
01003 i++;
01004 if (i == (long) argc)
01005 ThrowDisplayException(OptionError,"MissingArgument",option);
01006 method=ParseMagickOption(MagickDitherOptions,MagickFalse,argv[i]);
01007 if (method < 0)
01008 ThrowDisplayException(OptionError,"UnrecognizedDitherMethod",
01009 argv[i]);
01010 quantize_info->dither=MagickTrue;
01011 quantize_info->dither_method=(DitherMethod) method;
01012 break;
01013 }
01014 if (LocaleCompare("duration",option+1) == 0)
01015 {
01016 if (*option == '+')
01017 break;
01018 i++;
01019 if (i == (long) (argc-1))
01020 ThrowDisplayException(OptionError,"MissingArgument",option);
01021 if (IsGeometry(argv[i]) == MagickFalse)
01022 ThrowDisplayInvalidArgumentException(option,argv[i]);
01023 break;
01024 }
01025 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01026 }
01027 case 'e':
01028 {
01029 if (LocaleCompare("edge",option+1) == 0)
01030 {
01031 if (*option == '+')
01032 break;
01033 i++;
01034 if (i == (long) argc)
01035 ThrowDisplayException(OptionError,"MissingArgument",option);
01036 if (IsGeometry(argv[i]) == MagickFalse)
01037 ThrowDisplayInvalidArgumentException(option,argv[i]);
01038 break;
01039 }
01040 if (LocaleCompare("endian",option+1) == 0)
01041 {
01042 long
01043 endian;
01044
01045 if (*option == '+')
01046 break;
01047 i++;
01048 if (i == (long) argc)
01049 ThrowDisplayException(OptionError,"MissingArgument",option);
01050 endian=ParseMagickOption(MagickEndianOptions,MagickFalse,
01051 argv[i]);
01052 if (endian < 0)
01053 ThrowDisplayException(OptionError,"UnrecognizedEndianType",
01054 argv[i]);
01055 break;
01056 }
01057 if (LocaleCompare("enhance",option+1) == 0)
01058 break;
01059 if (LocaleCompare("equalize",option+1) == 0)
01060 break;
01061 if (LocaleCompare("extract",option+1) == 0)
01062 {
01063 if (*option == '+')
01064 break;
01065 i++;
01066 if (i == (long) argc)
01067 ThrowDisplayException(OptionError,"MissingArgument",option);
01068 if (IsGeometry(argv[i]) == MagickFalse)
01069 ThrowDisplayInvalidArgumentException(option,argv[i]);
01070 break;
01071 }
01072 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01073 }
01074 case 'f':
01075 {
01076 if (LocaleCompare("filter",option+1) == 0)
01077 {
01078 long
01079 filter;
01080
01081 if (*option == '+')
01082 break;
01083 i++;
01084 if (i == (long) argc)
01085 ThrowDisplayException(OptionError,"MissingArgument",option);
01086 filter=ParseMagickOption(MagickFilterOptions,MagickFalse,argv[i]);
01087 if (filter < 0)
01088 ThrowDisplayException(OptionError,"UnrecognizedImageFilter",
01089 argv[i]);
01090 break;
01091 }
01092 if (LocaleCompare("flatten",option+1) == 0)
01093 break;
01094 if (LocaleCompare("flip",option+1) == 0)
01095 break;
01096 if (LocaleCompare("flop",option+1) == 0)
01097 break;
01098 if (LocaleCompare("font",option+1) == 0)
01099 {
01100 if (*option == '+')
01101 break;
01102 i++;
01103 if (i == (long) argc)
01104 ThrowDisplayException(OptionError,"MissingArgument",option);
01105 resource_info.font=XGetResourceClass(resource_database,
01106 GetClientName(),"font",argv[i]);
01107 break;
01108 }
01109 if (LocaleCompare("foreground",option+1) == 0)
01110 {
01111 if (*option == '+')
01112 break;
01113 i++;
01114 if (i == (long) argc)
01115 ThrowDisplayException(OptionError,"MissingArgument",option);
01116 resource_info.foreground_color=argv[i];
01117 break;
01118 }
01119 if (LocaleCompare("format",option+1) == 0)
01120 {
01121 if (*option == '+')
01122 break;
01123 i++;
01124 if (i == (long) (argc-1))
01125 ThrowDisplayException(OptionError,"MissingArgument",option);
01126 break;
01127 }
01128 if (LocaleCompare("frame",option+1) == 0)
01129 {
01130 if (*option == '+')
01131 break;
01132 i++;
01133 if (i == (long) argc)
01134 ThrowDisplayException(OptionError,"MissingArgument",option);
01135 if (IsGeometry(argv[i]) == MagickFalse)
01136 ThrowDisplayInvalidArgumentException(option,argv[i]);
01137 break;
01138 }
01139 if (LocaleCompare("fuzz",option+1) == 0)
01140 {
01141 if (*option == '+')
01142 break;
01143 i++;
01144 if (i == (long) (argc-1))
01145 ThrowDisplayException(OptionError,"MissingArgument",option);
01146 if (IsGeometry(argv[i]) == MagickFalse)
01147 ThrowDisplayInvalidArgumentException(option,argv[i]);
01148 break;
01149 }
01150 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01151 }
01152 case 'g':
01153 {
01154 if (LocaleCompare("gamma",option+1) == 0)
01155 {
01156 i++;
01157 if (i == (long) argc)
01158 ThrowDisplayException(OptionError,"MissingArgument",option);
01159 if (IsGeometry(argv[i]) == MagickFalse)
01160 ThrowDisplayInvalidArgumentException(option,argv[i]);
01161 break;
01162 }
01163 if (LocaleCompare("geometry",option+1) == 0)
01164 {
01165 resource_info.image_geometry=(char *) NULL;
01166 if (*option == '+')
01167 break;
01168 (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
01169 i++;
01170 if (i == (long) argc)
01171 ThrowDisplayException(OptionError,"MissingArgument",option);
01172 if (IsGeometry(argv[i]) == MagickFalse)
01173 ThrowDisplayInvalidArgumentException(option,argv[i]);
01174 resource_info.image_geometry=ConstantString(argv[i]);
01175 break;
01176 }
01177 if (LocaleCompare("gravity",option+1) == 0)
01178 {
01179 long
01180 gravity;
01181
01182 if (*option == '+')
01183 break;
01184 i++;
01185 if (i == (long) (argc-1))
01186 ThrowDisplayException(OptionError,"MissingArgument",option);
01187 gravity=ParseMagickOption(MagickGravityOptions,MagickFalse,
01188 argv[i]);
01189 if (gravity < 0)
01190 ThrowDisplayException(OptionError,"UnrecognizedGravityType",
01191 argv[i]);
01192 break;
01193 }
01194 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01195 }
01196 case 'h':
01197 {
01198 if ((LocaleCompare("help",option+1) == 0) ||
01199 (LocaleCompare("-help",option+1) == 0))
01200 break;
01201 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01202 }
01203 case 'i':
01204 {
01205 if (LocaleCompare("identify",option+1) == 0)
01206 break;
01207 if (LocaleCompare("iconGeometry",option+1) == 0)
01208 {
01209 resource_info.icon_geometry=(char *) NULL;
01210 if (*option == '+')
01211 break;
01212 i++;
01213 if (i == (long) argc)
01214 ThrowDisplayException(OptionError,"MissingArgument",option);
01215 if (IsGeometry(argv[i]) == MagickFalse)
01216 ThrowDisplayInvalidArgumentException(option,argv[i]);
01217 resource_info.icon_geometry=argv[i];
01218 break;
01219 }
01220 if (LocaleCompare("iconic",option+1) == 0)
01221 {
01222 resource_info.iconic=(*option == '-') ? MagickTrue : MagickFalse;
01223 break;
01224 }
01225 if (LocaleCompare("immutable",option+1) == 0)
01226 {
01227 resource_info.immutable=(*option == '-') ? MagickTrue : MagickFalse;
01228 break;
01229 }
01230 if (LocaleCompare("interlace",option+1) == 0)
01231 {
01232 long
01233 interlace;
01234
01235 if (*option == '+')
01236 break;
01237 i++;
01238 if (i == (long) argc)
01239 ThrowDisplayException(OptionError,"MissingArgument",option);
01240 interlace=ParseMagickOption(MagickInterlaceOptions,MagickFalse,
01241 argv[i]);
01242 if (interlace < 0)
01243 ThrowDisplayException(OptionError,"UnrecognizedInterlaceType",
01244 argv[i]);
01245 break;
01246 }
01247 if (LocaleCompare("interpolate",option+1) == 0)
01248 {
01249 long
01250 interpolate;
01251
01252 if (*option == '+')
01253 break;
01254 i++;
01255 if (i == (long) argc)
01256 ThrowDisplayException(OptionError,"MissingArgument",option);
01257 interpolate=ParseMagickOption(MagickInterpolateOptions,MagickFalse,
01258 argv[i]);
01259 if (interpolate < 0)
01260 ThrowDisplayException(OptionError,"UnrecognizedInterpolateMethod",
01261 argv[i]);
01262 break;
01263 }
01264 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01265 }
01266 case 'l':
01267 {
01268 if (LocaleCompare("label",option+1) == 0)
01269 {
01270 if (*option == '+')
01271 break;
01272 i++;
01273 if (i == (long) argc)
01274 ThrowDisplayException(OptionError,"MissingArgument",option);
01275 break;
01276 }
01277 if (LocaleCompare("limit",option+1) == 0)
01278 {
01279 char
01280 *p;
01281
01282 double
01283 value;
01284
01285 long
01286 resource;
01287
01288 if (*option == '+')
01289 break;
01290 i++;
01291 if (i == (long) argc)
01292 ThrowDisplayException(OptionError,"MissingArgument",option);
01293 resource=ParseMagickOption(MagickResourceOptions,MagickFalse,
01294 argv[i]);
01295 if (resource < 0)
01296 ThrowDisplayException(OptionError,"UnrecognizedResourceType",
01297 argv[i]);
01298 i++;
01299 if (i == (long) argc)
01300 ThrowDisplayException(OptionError,"MissingArgument",option);
01301 value=strtod(argv[i],&p);
01302 if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
01303 ThrowDisplayInvalidArgumentException(option,argv[i]);
01304 break;
01305 }
01306 if (LocaleCompare("list",option+1) == 0)
01307 {
01308 long
01309 list;
01310
01311 if (*option == '+')
01312 break;
01313 i++;
01314 if (i == (long) argc)
01315 ThrowDisplayException(OptionError,"MissingArgument",option);
01316 list=ParseMagickOption(MagickListOptions,MagickFalse,argv[i]);
01317 if (list < 0)
01318 ThrowDisplayException(OptionError,"UnrecognizedListType",argv[i]);
01319 (void) MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
01320 argv+j,exception);
01321 DestroyDisplay();
01322 return(MagickTrue);
01323 }
01324 if (LocaleCompare("log",option+1) == 0)
01325 {
01326 if (*option == '+')
01327 break;
01328 i++;
01329 if ((i == (long) argc) ||
01330 (strchr(argv[i],'%') == (char *) NULL))
01331 ThrowDisplayException(OptionError,"MissingArgument",option);
01332 break;
01333 }
01334 if (LocaleCompare("loop",option+1) == 0)
01335 {
01336 if (*option == '+')
01337 break;
01338 i++;
01339 if (i == (long) (argc-1))
01340 ThrowDisplayException(OptionError,"MissingArgument",option);
01341 if (IsGeometry(argv[i]) == MagickFalse)
01342 ThrowDisplayInvalidArgumentException(option,argv[i]);
01343 iterations=(unsigned long) atol(argv[i]);
01344 break;
01345 }
01346 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01347 }
01348 case 'm':
01349 {
01350 if (LocaleCompare("magnify",option+1) == 0)
01351 {
01352 resource_info.magnify=2;
01353 if (*option == '+')
01354 break;
01355 i++;
01356 if (i == (long) argc)
01357 ThrowDisplayException(OptionError,"MissingArgument",option);
01358 if (IsGeometry(argv[i]) == MagickFalse)
01359 ThrowDisplayInvalidArgumentException(option,argv[i]);
01360 resource_info.magnify=(unsigned int) atoi(argv[i]);
01361 break;
01362 }
01363 if (LocaleCompare("map",option+1) == 0)
01364 {
01365 resource_info.map_type=(char *) NULL;
01366 if (*option == '+')
01367 break;
01368 (void) strcpy(argv[i]+1,"san");
01369 i++;
01370 if (i == (long) argc)
01371 ThrowDisplayException(OptionError,"MissingArgument",option);
01372 resource_info.map_type=argv[i];
01373 break;
01374 }
01375 if (LocaleCompare("matte",option+1) == 0)
01376 break;
01377 if (LocaleCompare("mattecolor",option+1) == 0)
01378 {
01379 if (*option == '+')
01380 break;
01381 i++;
01382 if (i == (long) argc)
01383 ThrowDisplayException(OptionError,"MissingArgument",option);
01384 resource_info.matte_color=argv[i];
01385 break;
01386 }
01387 if (LocaleCompare("monitor",option+1) == 0)
01388 break;
01389 if (LocaleCompare("monochrome",option+1) == 0)
01390 {
01391 if (*option == '+')
01392 break;
01393 quantize_info->number_colors=2;
01394 quantize_info->colorspace=GRAYColorspace;
01395 break;
01396 }
01397 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01398 }
01399 case 'n':
01400 {
01401 if (LocaleCompare("name",option+1) == 0)
01402 {
01403 resource_info.name=(char *) NULL;
01404 if (*option == '+')
01405 break;
01406 i++;
01407 if (i == (long) argc)
01408 ThrowDisplayException(OptionError,"MissingArgument",option);
01409 resource_info.name=ConstantString(argv[i]);
01410 break;
01411 }
01412 if (LocaleCompare("negate",option+1) == 0)
01413 break;
01414 if (LocaleCompare("noop",option+1) == 0)
01415 break;
01416 if (LocaleCompare("normalize",option+1) == 0)
01417 break;
01418 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01419 }
01420 case 'p':
01421 {
01422 if (LocaleCompare("page",option+1) == 0)
01423 {
01424 resource_info.image_geometry=(char *) NULL;
01425 if (*option == '+')
01426 break;
01427 i++;
01428 if (i == (long) argc)
01429 ThrowDisplayException(OptionError,"MissingArgument",option);
01430 resource_info.image_geometry=ConstantString(argv[i]);
01431 break;
01432 }
01433 if (LocaleCompare("profile",option+1) == 0)
01434 {
01435 i++;
01436 if (i == (long) argc)
01437 ThrowDisplayException(OptionError,"MissingArgument",option);
01438 break;
01439 }
01440 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01441 }
01442 case 'q':
01443 {
01444 if (LocaleCompare("quality",option+1) == 0)
01445 {
01446 if (*option == '+')
01447 break;
01448 i++;
01449 if (i == (long) argc)
01450 ThrowDisplayException(OptionError,"MissingArgument",option);
01451 if (IsGeometry(argv[i]) == MagickFalse)
01452 ThrowDisplayInvalidArgumentException(option,argv[i]);
01453 break;
01454 }
01455 if (LocaleCompare("quantize",option+1) == 0)
01456 {
01457 long
01458 colorspace;
01459
01460 if (*option == '+')
01461 break;
01462 i++;
01463 if (i == (long) (argc-1))
01464 ThrowDisplayException(OptionError,"MissingArgument",option);
01465 colorspace=ParseMagickOption(MagickColorspaceOptions,
01466 MagickFalse,argv[i]);
01467 if (colorspace < 0)
01468 ThrowDisplayException(OptionError,"UnrecognizedColorspace",
01469 argv[i]);
01470 break;
01471 }
01472 if (LocaleCompare("quiet",option+1) == 0)
01473 break;
01474 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01475 }
01476 case 'r':
01477 {
01478 if (LocaleCompare("raise",option+1) == 0)
01479 {
01480 i++;
01481 if (i == (long) argc)
01482 ThrowDisplayException(OptionError,"MissingArgument",option);
01483 if (IsGeometry(argv[i]) == MagickFalse)
01484 ThrowDisplayInvalidArgumentException(option,argv[i]);
01485 break;
01486 }
01487 if (LocaleCompare("regard-warnings",option+1) == 0)
01488 break;
01489 if (LocaleCompare("remote",option+1) == 0)
01490 {
01491 i++;
01492 if (i == (long) argc)
01493 ThrowDisplayException(OptionError,"MissingArgument",option);
01494 if (XRemoteCommand(display,resource_info.window_id,argv[i]) != 0)
01495 return(MagickFalse);
01496 i--;
01497 break;
01498 }
01499 if (LocaleCompare("repage",option+1) == 0)
01500 {
01501 if (*option == '+')
01502 break;
01503 i++;
01504 if (i == (long) argc)
01505 ThrowDisplayException(OptionError,"MissingArgument",option);
01506 if (IsGeometry(argv[i]) == MagickFalse)
01507 ThrowDisplayInvalidArgumentException(option,argv[i]);
01508 break;
01509 }
01510 if (LocaleCompare("resample",option+1) == 0)
01511 {
01512 if (*option == '+')
01513 break;
01514 i++;
01515 if (i == (long) (argc-1))
01516 ThrowDisplayException(OptionError,"MissingArgument",option);
01517 if (IsGeometry(argv[i]) == MagickFalse)
01518 ThrowDisplayInvalidArgumentException(option,argv[i]);
01519 break;
01520 }
01521 if (LocaleCompare("resize",option+1) == 0)
01522 {
01523 if (*option == '+')
01524 break;
01525 i++;
01526 if (i == (long) argc)
01527 ThrowDisplayException(OptionError,"MissingArgument",option);
01528 if (IsGeometry(argv[i]) == MagickFalse)
01529 ThrowDisplayInvalidArgumentException(option,argv[i]);
01530 break;
01531 }
01532 if (LocaleNCompare("respect-parentheses",option+1,17) == 0)
01533 {
01534 respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
01535 break;
01536 }
01537 if (LocaleCompare("roll",option+1) == 0)
01538 {
01539 if (*option == '+')
01540 break;
01541 i++;
01542 if (i == (long) argc)
01543 ThrowDisplayException(OptionError,"MissingArgument",option);
01544 if (IsGeometry(argv[i]) == MagickFalse)
01545 ThrowDisplayInvalidArgumentException(option,argv[i]);
01546 break;
01547 }
01548 if (LocaleCompare("rotate",option+1) == 0)
01549 {
01550 i++;
01551 if (i == (long) argc)
01552 ThrowDisplayException(OptionError,"MissingArgument",option);
01553 if (IsGeometry(argv[i]) == MagickFalse)
01554 ThrowDisplayInvalidArgumentException(option,argv[i]);
01555 break;
01556 }
01557 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01558 }
01559 case 's':
01560 {
01561 if (LocaleCompare("sample",option+1) == 0)
01562 {
01563 if (*option == '+')
01564 break;
01565 i++;
01566 if (i == (long) argc)
01567 ThrowDisplayException(OptionError,"MissingArgument",option);
01568 if (IsGeometry(argv[i]) == MagickFalse)
01569 ThrowDisplayInvalidArgumentException(option,argv[i]);
01570 break;
01571 }
01572 if (LocaleCompare("sampling-factor",option+1) == 0)
01573 {
01574 if (*option == '+')
01575 break;
01576 i++;
01577 if (i == (long) argc)
01578 ThrowDisplayException(OptionError,"MissingArgument",option);
01579 if (IsGeometry(argv[i]) == MagickFalse)
01580 ThrowDisplayInvalidArgumentException(option,argv[i]);
01581 break;
01582 }
01583 if (LocaleCompare("scenes",option+1) == 0)
01584 {
01585 if (*option == '+')
01586 break;
01587 i++;
01588 if (i == (long) argc)
01589 ThrowDisplayException(OptionError,"MissingArgument",option);
01590 if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
01591 ThrowDisplayInvalidArgumentException(option,argv[i]);
01592 break;
01593 }
01594 if (LocaleCompare("seed",option+1) == 0)
01595 {
01596 if (*option == '+')
01597 break;
01598 i++;
01599 if (i == (long) (argc-1))
01600 ThrowDisplayException(OptionError,"MissingArgument",option);
01601 if (IsGeometry(argv[i]) == MagickFalse)
01602 ThrowDisplayInvalidArgumentException(option,argv[i]);
01603 break;
01604 }
01605 if (LocaleCompare("segment",option+1) == 0)
01606 {
01607 if (*option == '+')
01608 break;
01609 i++;
01610 if (i == (long) argc)
01611 ThrowDisplayException(OptionError,"MissingArgument",option);
01612 if (IsGeometry(argv[i]) == MagickFalse)
01613 ThrowDisplayInvalidArgumentException(option,argv[i]);
01614 break;
01615 }
01616 if (LocaleCompare("set",option+1) == 0)
01617 {
01618 i++;
01619 if (i == (long) argc)
01620 ThrowDisplayException(OptionError,"MissingArgument",option);
01621 if (*option == '+')
01622 break;
01623 i++;
01624 if (i == (long) argc)
01625 ThrowDisplayException(OptionError,"MissingArgument",option);
01626 break;
01627 }
01628 if (LocaleCompare("sharpen",option+1) == 0)
01629 {
01630 if (*option == '+')
01631 break;
01632 i++;
01633 if (i == (long) argc)
01634 ThrowDisplayException(OptionError,"MissingArgument",option);
01635 if (IsGeometry(argv[i]) == MagickFalse)
01636 ThrowDisplayInvalidArgumentException(option,argv[i]);
01637 break;
01638 }
01639 if (LocaleCompare("shared-memory",option+1) == 0)
01640 {
01641 resource_info.use_shared_memory= (*option == '-') ? MagickTrue :
01642 MagickFalse;
01643 break;
01644 }
01645 if (LocaleCompare("size",option+1) == 0)
01646 {
01647 if (*option == '+')
01648 break;
01649 i++;
01650 if (i == (long) argc)
01651 ThrowDisplayException(OptionError,"MissingArgument",option);
01652 if (IsGeometry(argv[i]) == MagickFalse)
01653 ThrowDisplayInvalidArgumentException(option,argv[i]);
01654 break;
01655 }
01656 if (LocaleCompare("strip",option+1) == 0)
01657 break;
01658 if (LocaleCompare("support",option+1) == 0)
01659 {
01660 i++;
01661 break;
01662 }
01663 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01664 }
01665 case 't':
01666 {
01667 if (LocaleCompare("text-font",option+1) == 0)
01668 {
01669 resource_info.text_font=(char *) NULL;
01670 if (*option == '+')
01671 break;
01672 i++;
01673 if (i == (long) argc)
01674 ThrowDisplayException(OptionError,"MissingArgument",option);
01675 resource_info.text_font=XGetResourceClass(resource_database,
01676 GetClientName(),"font",argv[i]);
01677 break;
01678 }
01679 if (LocaleCompare("texture",option+1) == 0)
01680 {
01681 if (*option == '+')
01682 break;
01683 i++;
01684 if (i == (long) argc)
01685 ThrowDisplayException(OptionError,"MissingArgument",option);
01686 break;
01687 }
01688 if (LocaleCompare("threshold",option+1) == 0)
01689 {
01690 if (*option == '+')
01691 break;
01692 i++;
01693 if (i == (long) argc)
01694 ThrowDisplayException(OptionError,"MissingArgument",option);
01695 if (IsGeometry(argv[i]) == MagickFalse)
01696 ThrowDisplayInvalidArgumentException(option,argv[i]);
01697 break;
01698 }
01699 if (LocaleCompare("thumbnail",option+1) == 0)
01700 {
01701 if (*option == '+')
01702 break;
01703 i++;
01704 if (i == (long) argc)
01705 ThrowDisplayException(OptionError,"MissingArgument",option);
01706 if (IsGeometry(argv[i]) == MagickFalse)
01707 ThrowDisplayInvalidArgumentException(option,argv[i]);
01708 break;
01709 }
01710 if (LocaleCompare("title",option+1) == 0)
01711 {
01712 resource_info.title=(char *) NULL;
01713 if (*option == '+')
01714 break;
01715 i++;
01716 if (i == (long) argc)
01717 ThrowDisplayException(OptionError,"MissingArgument",option);
01718 resource_info.title=argv[i];
01719 break;
01720 }
01721 if (LocaleCompare("transparent-color",option+1) == 0)
01722 {
01723 if (*option == '+')
01724 break;
01725 i++;
01726 if (i == (long) (argc-1))
01727 ThrowDisplayException(OptionError,"MissingArgument",option);
01728 break;
01729 }
01730 if (LocaleCompare("treedepth",option+1) == 0)
01731 {
01732 quantize_info->tree_depth=0;
01733 if (*option == '+')
01734 break;
01735 i++;
01736 if (i == (long) argc)
01737 ThrowDisplayException(OptionError,"MissingArgument",option);
01738 if (IsGeometry(argv[i]) == MagickFalse)
01739 ThrowDisplayInvalidArgumentException(option,argv[i]);
01740 quantize_info->tree_depth=(unsigned long) atol(argv[i]);
01741 break;
01742 }
01743 if (LocaleCompare("trim",option+1) == 0)
01744 break;
01745 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01746 }
01747 case 'u':
01748 {
01749 if (LocaleCompare("update",option+1) == 0)
01750 {
01751 resource_info.update=(unsigned int) (*option == '-');
01752 if (*option == '+')
01753 break;
01754 i++;
01755 if (i == (long) argc)
01756 ThrowDisplayException(OptionError,"MissingArgument",option);
01757 if (IsGeometry(argv[i]) == MagickFalse)
01758 ThrowDisplayInvalidArgumentException(option,argv[i]);
01759 resource_info.update=(unsigned int) atoi(argv[i]);
01760 break;
01761 }
01762 if (LocaleCompare("use-pixmap",option+1) == 0)
01763 {
01764 resource_info.use_pixmap=(*option == '-') ? MagickTrue :
01765 MagickFalse;
01766 break;
01767 }
01768 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01769 }
01770 case 'v':
01771 {
01772 if (LocaleCompare("verbose",option+1) == 0)
01773 break;
01774 if ((LocaleCompare("version",option+1) == 0) ||
01775 (LocaleCompare("-version",option+1) == 0))
01776 {
01777 (void) fprintf(stdout,"Version: %s\n",
01778 GetMagickVersion((unsigned long *) NULL));
01779 (void) fprintf(stdout,"Copyright: %s\n",GetMagickCopyright());
01780 (void) fprintf(stdout,"Features: %s\n\n",GetMagickFeatures());
01781 break;
01782 }
01783 if (LocaleCompare("visual",option+1) == 0)
01784 {
01785 resource_info.visual_type=(char *) NULL;
01786 if (*option == '+')
01787 break;
01788 i++;
01789 if (i == (long) argc)
01790 ThrowDisplayException(OptionError,"MissingArgument",option);
01791 resource_info.visual_type=argv[i];
01792 break;
01793 }
01794 if (LocaleCompare("virtual-pixel",option+1) == 0)
01795 {
01796 long
01797 method;
01798
01799 if (*option == '+')
01800 break;
01801 i++;
01802 if (i == (long) (argc-1))
01803 ThrowDisplayException(OptionError,"MissingArgument",option);
01804 method=ParseMagickOption(MagickVirtualPixelOptions,MagickFalse,
01805 argv[i]);
01806 if (method < 0)
01807 ThrowDisplayException(OptionError,
01808 "UnrecognizedVirtualPixelMethod",argv[i]);
01809 break;
01810 }
01811 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01812 }
01813 case 'w':
01814 {
01815 if (LocaleCompare("window",option+1) == 0)
01816 {
01817 resource_info.window_id=(char *) NULL;
01818 if (*option == '+')
01819 break;
01820 i++;
01821 if (i == (long) argc)
01822 ThrowDisplayException(OptionError,"MissingArgument",option);
01823 resource_info.window_id=argv[i];
01824 break;
01825 }
01826 if (LocaleCompare("window-group",option+1) == 0)
01827 {
01828 resource_info.window_group=(char *) NULL;
01829 if (*option == '+')
01830 break;
01831 i++;
01832 if (i == (long) argc)
01833 ThrowDisplayException(OptionError,"MissingArgument",option);
01834 if (strtod(argv[i],(char **) NULL) != 0)
01835 resource_info.window_group=argv[i];
01836 break;
01837 }
01838 if (LocaleCompare("write",option+1) == 0)
01839 {
01840 resource_info.write_filename=(char *) NULL;
01841 if (*option == '+')
01842 break;
01843 i++;
01844 if (i == (long) argc)
01845 ThrowDisplayException(OptionError,"MissingArgument",option);
01846 resource_info.write_filename=argv[i];
01847 if (IsPathAccessible(resource_info.write_filename) != MagickFalse)
01848 {
01849 char
01850 answer[2],
01851 *p;
01852
01853 (void) fprintf(stderr,"Overwrite %s? ",
01854 resource_info.write_filename);
01855 p=fgets(answer,(int) sizeof(answer),stdin);
01856 if (((*answer != 'y') && (*answer != 'Y')))
01857 return(MagickFalse);
01858 }
01859 break;
01860 }
01861 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01862 }
01863 case '?':
01864 break;
01865 default:
01866 ThrowDisplayException(OptionError,"UnrecognizedOption",option);
01867 }
01868 fire=ParseMagickOption(MagickImageListOptions,MagickFalse,option+1) < 0 ?
01869 MagickFalse : MagickTrue;
01870 if (fire != MagickFalse)
01871 FireImageStack(MagickFalse,MagickTrue,MagickTrue);
01872 }
01873 if (k != 0)
01874 ThrowDisplayException(OptionError,"UnbalancedParenthesis",argv[i]);
01875 if (state & RetainColorsState)
01876 {
01877 XRetainWindowColors(display,XRootWindow(display,XDefaultScreen(display)));
01878 (void) XSync(display,MagickFalse);
01879 }
01880 DestroyDisplay();
01881 return(status != 0 ? MagickTrue : MagickFalse);
01882 #else
01883 (void) argc;
01884 (void) argv;
01885 (void) ThrowMagickException(exception,GetMagickModule(),MissingDelegateError,
01886 "DelegateLibrarySupportNotBuiltIn","`%s' (X11)",image_info->filename);
01887 return(DisplayUsage());
01888 #endif
01889 }