display.c

Go to the documentation of this file.
00001 /*
00002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00003 %                                                                             %
00004 %                                                                             %
00005 %                                                                             %
00006 %               DDDD   IIIII  SSSSS  PPPP   L       AAA   Y   Y               %
00007 %               D   D    I    SS     P   P  L      A   A   Y Y                %
00008 %               D   D    I     SSS   PPPP   L      AAAAA    Y                 %
00009 %               D   D    I       SS  P      L      A   A    Y                 %
00010 %               DDDD   IIIII  SSSSS  P      LLLLL  A   A    Y                 %
00011 %                                                                             %
00012 %                                                                             %
00013 %              Methods to Interactively Display and Edit an Image             %
00014 %                                                                             %
00015 %                             Software Design                                 %
00016 %                               John Cristy                                   %
00017 %                                July 1992                                    %
00018 %                                                                             %
00019 %                                                                             %
00020 %  Copyright 1999-2009 ImageMagick Studio LLC, a non-profit organization      %
00021 %  dedicated to making software imaging solutions freely available.           %
00022 %                                                                             %
00023 %  You may not use this file except in compliance with the License.  You may  %
00024 %  obtain a copy of the License at                                            %
00025 %                                                                             %
00026 %    http://www.imagemagick.org/script/license.php                            %
00027 %                                                                             %
00028 %  Unless required by applicable law or agreed to in writing, software        %
00029 %  distributed under the License is distributed on an "AS IS" BASIS,          %
00030 %  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
00031 %  See the License for the specific language governing permissions and        %
00032 %  limitations under the License.                                             %
00033 %                                                                             %
00034 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00035 %
00036 %  Use the display program to display an image or image sequence on any X
00037 %  server.
00038 %
00039 */
00040 
00041 /*
00042   Include declarations.
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 +   D i s p l a y I m a g e C o m m a n d                                     %
00055 %                                                                             %
00056 %                                                                             %
00057 %                                                                             %
00058 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00059 %
00060 %  DisplayImageCommand() displays a sequence of images on any workstation
00061 %  display running an X server.  Display first determines the hardware
00062 %  capabilities of the workstation. If the number of unique colors in an image
00063 %  is less than or equal to the number the workstation can support, the image
00064 %  is displayed in an X window. Otherwise the number of colors in the image is
00065 %  first reduced to match the color resolution of the workstation before it is
00066 %  displayed.
00067 %
00068 %  This means that a continuous-tone 24 bits/pixel image can display on a 8
00069 %  bit pseudo-color device or monochrome device. In most instances the reduced
00070 %  color image closely resembles the original. Alternatively, a monochrome or
00071 %  pseudo-color image sequence can display on a continuous-tone 24 bits/pixels
00072 %  device.
00073 %
00074 %  The format of the DisplayImageCommand method is:
00075 %
00076 %      MagickBooleanType DisplayImageCommand(ImageInfo *image_info,int argc,
00077 %        char **argv,char **metadata,ExceptionInfo *exception)
00078 %
00079 %  A description of each parameter follows:
00080 %
00081 %    o image_info: the image info.
00082 %
00083 %    o argc: the number of elements in the argument vector.
00084 %
00085 %    o argv: A text array containing the command line arguments.
00086 %
00087 %    o metadata: any metadata is returned here.
00088 %
00089 %    o exception: return any errors or warnings in this structure.
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     Set defaults.
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     Check for server name specified on the command line.
00395   */
00396   for (i=1; i < (long) argc; i++)
00397   {
00398     /*
00399       Check command line for server name.
00400     */
00401     option=argv[i];
00402     if (LocaleCompare("display",option+1) == 0)
00403       {
00404         /*
00405           User specified server name.
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     Get user defaults from X resource database.
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     Parse command line.
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           Option is a file name.
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             Transmogrify image as defined by the image processing options.
00524           */
00525           resource_info.quantum=1;
00526           if (resource_info.window_id != (char *) NULL)
00527             {
00528               /*
00529                 Display image to a specified X window.
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                 Display image to X server.
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                       User selected a visual directory image (montage).
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                 Write image.
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             Proceed to next/previous image.
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           Free image resources.
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               Proceed to previous image.
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           Determine if we should proceed to the first image.
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++;  /* deprecated */
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 }

Generated on 19 Nov 2009 for MagickWand by  doxygen 1.6.1