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