import.c

Go to the documentation of this file.
00001 /*
00002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00003 %                                                                             %
00004 %                                                                             %
00005 %                                                                             %
00006 %                 IIIII  M   M  PPPP    OOO   RRRR   TTTTT                    %
00007 %                   I    MM MM  P   P  O   O  R   R    T                      %
00008 %                   I    M M M  PPPP   O   O  RRRR     T                      %
00009 %                   I    M   M  P      O   O  R R      T                      %
00010 %                 IIIII  M   M  P       OOO   R  R     T                      %
00011 %                                                                             %
00012 %                                                                             %
00013 %               Import image to a machine independent format.                 %
00014 %                                                                             %
00015 %                           Software Design                                   %
00016 %                             John Cristy                                     %
00017 %                              July 1992                                      %
00018 %                                                                             %
00019 %                                                                             %
00020 %  Copyright 1999-2006 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 %  Import is an X Window System window dumping utility.  Import allows X
00037 %  users to store window images in a specially formatted dump file.  This
00038 %  file can then be read by the Display utility for redisplay, printing,
00039 %  editing, formatting, archiving, image processing, etc.  The target
00040 %  window can be specified by id or name or be selected by clicking the
00041 %  mouse in the desired window.  The keyboard bell is rung once at the
00042 %  beginning of the dump and twice when the dump is completed.
00043 %
00044 %
00045 */
00046 
00047 
00048 /*
00049   Include declarations.
00050 */
00051 #include "magick/studio.h"
00052 #include "magick/annotate.h"
00053 #include "magick/attribute.h"
00054 #include "magick/client.h"
00055 #include "magick/color.h"
00056 #include "magick/constitute.h"
00057 #include "magick/decorate.h"
00058 #include "magick/draw.h"
00059 #include "magick/effect.h"
00060 #include "magick/exception.h"
00061 #include "magick/exception-private.h"
00062 #include "magick/gem.h"
00063 #include "magick/geometry.h"
00064 #include "magick/image.h"
00065 #include "magick/image-private.h"
00066 #include "magick/import.h"
00067 #include "magick/list.h"
00068 #include "magick/memory_.h"
00069 #include "magick/mogrify.h"
00070 #include "magick/mogrify-private.h"
00071 #include "magick/monitor.h"
00072 #include "magick/montage.h"
00073 #include "magick/option.h"
00074 #include "magick/quantize.h"
00075 #include "magick/resize.h"
00076 #include "magick/resource_.h"
00077 #include "magick/string_.h"
00078 #include "magick/utility.h"
00079 #include "magick/version.h"
00080 #include "magick/xwindow.h"
00081 #include "magick/xwindow-private.h"
00082 
00083 /*
00084 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00085 %                                                                             %
00086 %                                                                             %
00087 %                                                                             %
00088 +   I m p o r t I m a g e C o m m a n d                                       %
00089 %                                                                             %
00090 %                                                                             %
00091 %                                                                             %
00092 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00093 %
00094 %  ImportImageCommand() reads an image from any visible window on an X server
00095 %  and outputs it as an image file. You can capture a single window, the
00096 %  entire screen, or any rectangular portion of the screen.  You can use the
00097 %  display utility for redisplay, printing, editing, formatting, archiving,
00098 %  image processing, etc. of the captured image.</dd>
00099 %
00100 %  The target window can be specified by id, name, or may be selected by
00101 %  clicking the mouse in the desired window. If you press a button and then
00102 %  drag, a rectangle will form which expands and contracts as the mouse moves.
00103 %  To save the portion of the screen defined by the rectangle, just release
00104 %  the button. The keyboard bell is rung once at the beginning of the screen
00105 %  capture and twice when it completes.
00106 %
00107 %  The format of the ImportImageCommand method is:
00108 %
00109 %      MagickBooleanType ImportImageCommand(ImageInfo *image_info,int argc,
00110 %        char **argv,char **metadata,ExceptionInfo *exception)
00111 %
00112 %  A description of each parameter follows:
00113 %
00114 %    o image_info: The image info.
00115 %
00116 %    o argc: The number of elements in the argument vector.
00117 %
00118 %    o argv: A text array containing the command line arguments.
00119 %
00120 %    o metadata: any metadata is returned here.
00121 %
00122 %    o exception: Return any errors or warnings in this structure.
00123 %
00124 %
00125 */
00126 
00127 static void ImportUsage(void)
00128 {
00129   const char
00130     **p;
00131 
00132   static const char
00133     *options[]=
00134     {
00135       "-adjoin              join images into a single multi-image file",
00136       "-annotate geometry text",
00137       "                     annotate the image with text",
00138       "-border              include image borders in the output image",
00139       "-channel type        apply option to select image channels",
00140       "-colors value        preferred number of colors in the image",
00141       "-colorspace type     alternate image colorspace",
00142       "-comment string      annotate image with comment",
00143       "-compress type       type of pixel compression when writing the image",
00144       "-crop geometry       preferred size and location of the cropped image",
00145       "-debug events        display copious debugging information",
00146       "-define format:option",
00147       "                     define one or more image format options",
00148       "-delay value         display the next image after pausing",
00149       "-density geometry    horizontal and vertical density of the image",
00150       "-depth value         image depth",
00151       "-descend             obtain image by descending window hierarchy",
00152       "-display server      X server to contact",
00153       "-dispose method      GIF disposal method",
00154       "-dither              apply Floyd/Steinberg error diffusion to image",
00155       "-encoding type       text encoding type",
00156       "-endian type         endianness (MSB or LSB) of the image",
00157       "-format \"string\"     output formatted image characteristics",
00158       "-frame               include window manager frame",
00159       "-geometry geometry   preferred size or location of the image",
00160       "-gravity direction   which direction to gravitate towards",
00161       "-help                print program options",
00162       "-identify            identify the format and characteristics of the image",
00163       "-interlace type      None, Line, Plane, or Partition",
00164       "-label name          assign a label to an image",
00165       "-limit type value    Area, Disk, Map, or Memory resource limit",
00166       "-log format          format of debugging information",
00167       "-monitor             monitor progress",
00168       "-monochrome          transform image to black and white",
00169       "-negate              replace every pixel with its complementary color ",
00170       "-page geometry       size and location of an image canvas",
00171       "-pause value         seconds delay between snapshots",
00172       "-pointsize value     font point size",
00173       "-quality value       JPEG/MIFF/PNG compression level",
00174       "-quiet               suppress all error or warning messages",
00175       "-repage geometry     size and location of an image canvas",
00176       "-resize geometry     resize the image",
00177       "-rotate degrees      apply Paeth rotation to the image",
00178       "-sampling-factor geometry",
00179       "                     horizontal and vertical sampling factor",
00180       "-scene value         image scene number",
00181       "-screen              select image from root window",
00182       "-set attribute value set an image attribute",
00183       "-silent              operate silently, i.e. don't ring any bells ",
00184       "-snaps value         number of screen snapshots",
00185       "-strip               strip image of all profiles and comments",
00186       "-support factor      resize support: > 1.0 is blurry, < 1.0 is sharp",
00187       "-thumbnail geometry  create a thumbnail of the image",
00188       "-transparent color   make this color transparent within the image",
00189       "-treedepth value     color tree depth",
00190       "-trim                trim image edges",
00191       "-type type           image type",
00192       "-verbose             print detailed information about the image",
00193       "-version             print version information",
00194       "-virtual-pixel method",
00195       "                     Constant, Edge, Mirror, or Tile",
00196       "-window id           select window with this id or name",
00197       (char *) NULL
00198     };
00199 
00200   (void) printf("Version: %s\n",GetMagickVersion((unsigned long *) NULL));
00201   (void) printf("Copyright: %s\n\n",GetMagickCopyright());
00202   (void) printf("Usage: %s [options ...] [ file ]\n",
00203     GetClientName());
00204   (void) printf("\nWhere options include:\n");
00205   for (p=options; *p != (char *) NULL; p++)
00206     (void) printf("  %s\n",*p);
00207   (void) printf(
00208   "\nBy default, 'file' is written in the MIFF image format.  To\n");
00209   (void) printf(
00210     "specify a particular image format, precede the filename with an image\n");
00211   (void) printf(
00212     "format name and a colon (i.e. ps:image) or specify the image type as\n");
00213   (void) printf(
00214     "the filename suffix (i.e. image.ps).  Specify 'file' as '-' for\n");
00215   (void) printf("standard input or output.\n");
00216   exit(0);
00217 }
00218 
00219 MagickExport MagickBooleanType ImportImageCommand(ImageInfo *image_info,
00220   int argc,char **argv,char **magick_unused(metadata),ExceptionInfo *exception)
00221 {
00222 #if defined(HasX11)
00223 #define DestroyImport() \
00224 { \
00225   XDestroyResourceInfo(&resource_info); \
00226   if (display != (Display *) NULL) \
00227     { \
00228       XCloseDisplay(display); \
00229       display=(Display *) NULL; \
00230     } \
00231   for ( ; k >= 0; k--) \
00232     image_stack[k]=DestroyImageList(image_stack[k]); \
00233   for (i=0; i < (long) argc; i++) \
00234     argv[i]=(char *) RelinquishMagickMemory(argv[i]); \
00235   argv=(char **) RelinquishMagickMemory(argv); \
00236 }
00237 #define ThrowImportException(asperity,tag,option) \
00238 { \
00239   (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \
00240     option); \
00241   DestroyImport(); \
00242   return(MagickFalse); \
00243 }
00244 #define ThrowImportInvalidArgumentException(option,argument) \
00245 { \
00246   (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
00247     "InvalidArgument","`%s': %s",argument,option); \
00248   DestroyImport(); \
00249   return(MagickFalse); \
00250 }
00251 
00252   char
00253     *filename,
00254     *option,
00255     *resource_value,
00256     *server_name,
00257     *target_window;
00258 
00259   Display
00260     *display;
00261 
00262   Image
00263     *image_stack[MaxImageStackDepth+1];
00264 
00265   long
00266     j,
00267     k,
00268     snapshots;
00269 
00270   MagickBooleanType
00271     fire,
00272     pend;
00273 
00274   MagickStatusType
00275     status;
00276 
00277   QuantizeInfo
00278     *quantize_info;
00279 
00280   register long
00281     i;
00282 
00283   XImportInfo
00284     ximage_info;
00285 
00286   XResourceInfo
00287     resource_info;
00288 
00289   XrmDatabase
00290     resource_database;
00291 
00292   /*
00293     Set defaults.
00294   */
00295   assert(image_info != (ImageInfo *) NULL);
00296   assert(image_info->signature == MagickSignature);
00297   if (image_info->debug != MagickFalse)
00298     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
00299   assert(exception != (ExceptionInfo *) NULL);
00300   display=(Display *) NULL;
00301   j=1;
00302   k=0;
00303   image_stack[k]=NewImageList();
00304   option=(char *) NULL;
00305   pend=MagickFalse;
00306   resource_database=(XrmDatabase) NULL;
00307   (void) ResetMagickMemory(&resource_info,0,sizeof(resource_info));
00308   server_name=(char *) NULL;
00309   status=MagickTrue;
00310   SetNotifyHandlers;
00311   /*
00312     Check for server name specified on the command line.
00313   */
00314   ReadCommandlLine(argc,&argv);
00315   status=ExpandFilenames(&argc,&argv);
00316   if (status == MagickFalse)
00317     ThrowImportException(ResourceLimitError,"MemoryAllocationFailed",
00318       strerror(errno));
00319   for (i=1; i < (long) argc; i++)
00320   {
00321     /*
00322       Check command line for server name.
00323     */
00324     option=argv[i];
00325     if (IsMagickOption(option) == MagickFalse)
00326       continue;
00327     if (LocaleCompare("display",option+1) == 0)
00328       {
00329         /*
00330           User specified server name.
00331         */
00332         i++;
00333         if (i == (long) argc)
00334           ThrowImportException(OptionError,"MissingArgument",option);
00335         server_name=argv[i];
00336       }
00337     if (LocaleCompare("help",option+1) == 0)
00338       ImportUsage();
00339   }
00340   /*
00341     Get user defaults from X resource database.
00342   */
00343   display=XOpenDisplay(server_name);
00344   if (display == (Display *) NULL)
00345     ThrowImportException(XServerError,"UnableToOpenXServer",
00346       XDisplayName(server_name));
00347   (void) XSetErrorHandler(XError);
00348   resource_database=XGetResourceDatabase(display,GetClientName());
00349   XGetImportInfo(&ximage_info);
00350   XGetResourceInfo(resource_database,GetClientName(),&resource_info);
00351   image_info=resource_info.image_info;
00352   quantize_info=resource_info.quantize_info;
00353   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00354     "border","False");
00355   ximage_info.borders=IsTrue(resource_value);
00356   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00357     "delay","0");
00358   resource_info.delay=(unsigned int) atoi(resource_value);
00359   image_info->density=XGetResourceInstance(resource_database,GetClientName(),
00360     "density",(char *) NULL);
00361   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00362     "descend","True");
00363   ximage_info.descend=IsTrue(resource_value);
00364   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00365     "frame","False");
00366   ximage_info.frame=IsTrue(resource_value);
00367   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00368     "interlace","none");
00369   image_info->interlace=UndefinedInterlace;
00370   if (LocaleCompare("None",resource_value) == 0)
00371     image_info->interlace=NoInterlace;
00372   if (LocaleCompare("Line",resource_value) == 0)
00373     image_info->interlace=LineInterlace;
00374   if (LocaleCompare("Plane",resource_value) == 0)
00375     image_info->interlace=PlaneInterlace;
00376   if (LocaleCompare("Partition",resource_value) == 0)
00377     image_info->interlace=PartitionInterlace;
00378   if (image_info->interlace == UndefinedInterlace)
00379     ThrowImportException(OptionError,"Unrecognized interlace type",
00380       resource_value);
00381   image_info->page=XGetResourceInstance(resource_database,GetClientName(),
00382     "pageGeometry",(char *) NULL);
00383   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00384     "pause","0");
00385   resource_info.pause=(unsigned int) atol(resource_value);
00386   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00387     "quality","85");
00388   image_info->quality=(unsigned long) atol(resource_value);
00389   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00390     "screen","False");
00391   ximage_info.screen=IsTrue(resource_value);
00392   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00393     "silent","False");
00394   ximage_info.silent=IsTrue(resource_value);
00395   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00396     "verbose","False");
00397   image_info->verbose=IsTrue(resource_value);
00398   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00399     "dither","True");
00400   quantize_info->dither=IsTrue(resource_value);
00401   snapshots=1;
00402   status=MagickTrue;
00403   filename=(char *) NULL;
00404   target_window=(char *) NULL;
00405   /*
00406     Check command syntax.
00407   */
00408   for (i=1; i < (long) argc; i++)
00409   {
00410     option=argv[i];
00411     if (LocaleCompare(option,"(") == 0)
00412       {
00413         if (k == MaxImageStackDepth)
00414           ThrowImportException(OptionError,"ParenthesisNestedTooDeeply",
00415             option);
00416         MogrifyImageStack(image_stack[k],MagickTrue,pend);
00417         k++;
00418         image_stack[k]=NewImageList();
00419         continue;
00420       }
00421     if (LocaleCompare(option,")") == 0)
00422       {
00423         if (k == 0)
00424           ThrowImportException(OptionError,"UnableToParseExpression",option);
00425         if (image_stack[k] != (Image *) NULL)
00426           {
00427             MogrifyImageStack(image_stack[k],MagickTrue,MagickTrue);
00428             AppendImageToList(&image_stack[k-1],image_stack[k]);
00429           }
00430         k--;
00431         continue;
00432       }
00433     if (IsMagickOption(option) == MagickFalse)
00434       {
00435         Image
00436           *image;
00437 
00438         unsigned long
00439           scene;
00440 
00441         /*
00442           Read image from X server.
00443         */
00444         MogrifyImageStack(image_stack[k],MagickFalse,pend);
00445         filename=argv[i];
00446         if (target_window != (char *) NULL)
00447           (void) CopyMagickString(image_info->filename,target_window,
00448             MaxTextExtent);
00449         for (scene=0; scene < (unsigned long) Max(snapshots,1); scene++)
00450         {
00451           (void) sleep(resource_info.pause);
00452           image=XImportImage(image_info,&ximage_info);
00453           status&=(image != (Image *) NULL) &&
00454             (exception->severity < ErrorException);
00455           if (image == (Image *) NULL)
00456             continue;
00457           (void) CopyMagickString(image->filename,filename,MaxTextExtent);
00458           (void) strcpy(image->magick,"PS");
00459           image->scene=scene;
00460           AppendImageToList(&image_stack[k],image);
00461           MogrifyImageStack(image_stack[k],MagickFalse,MagickTrue);
00462         }
00463         continue;
00464       }
00465     pend=image_stack[k] != (Image *) NULL ? MagickTrue : MagickFalse;
00466     switch(*(option+1))
00467     {
00468       case 'a':
00469       {
00470         if (LocaleCompare("adjoin",option+1) == 0)
00471           break;
00472         if (LocaleCompare("annotate",option+1) == 0)
00473           {
00474             if (*option == '+')
00475               break;
00476             i++;
00477             if (i == (long) (argc-1))
00478               ThrowImportException(OptionError,"MissingArgument",option);
00479             if (IsGeometry(argv[i]) == MagickFalse)
00480               ThrowImportInvalidArgumentException(option,argv[i]);
00481             if (i == (long) (argc-1))
00482               ThrowImportException(OptionError,"MissingArgument",option);
00483             i++;
00484             break;
00485           }
00486         ThrowImportException(OptionError,"UnrecognizedOption",option);
00487       }
00488       case 'b':
00489       {
00490         if (LocaleCompare("border",option+1) == 0)
00491           {
00492             ximage_info.borders=(*option == '-') ? MagickTrue : MagickFalse;
00493             (void) strcpy(argv[i]+1,"{0}");
00494             break;
00495           }
00496         if (LocaleCompare("bordercolor",option+1) == 0)
00497           {
00498             if (*option == '+')
00499               break;
00500             i++;
00501             if (i == (long) argc)
00502               ThrowImportException(OptionError,"MissingArgument",option);
00503             break;
00504           }
00505         ThrowImportException(OptionError,"UnrecognizedOption",option);
00506       }
00507       case 'c':
00508       {
00509         if (LocaleCompare("cache",option+1) == 0)
00510           {
00511             if (*option == '+')
00512               break;
00513             i++;
00514             if (i == (long) argc)
00515               ThrowImportException(OptionError,"MissingArgument",option);
00516             if (IsGeometry(argv[i]) == MagickFalse)
00517               ThrowImportInvalidArgumentException(option,argv[i]);
00518             break;
00519           }
00520         if (LocaleCompare("channel",option+1) == 0)
00521           {
00522             long
00523               channel;
00524 
00525             if (*option == '+')
00526               break;
00527             i++;
00528             if (i == (long) (argc-1))
00529               ThrowImportException(OptionError,"MissingArgument",option);
00530             channel=ParseChannelOption(argv[i]);
00531             if (channel < 0)
00532               ThrowImportException(OptionError,"UnrecognizedChannelType",
00533                 argv[i]);
00534             break;
00535           }
00536         if (LocaleCompare("colors",option+1) == 0)
00537           {
00538             quantize_info->number_colors=0;
00539             if (*option == '+')
00540               break;
00541             i++;
00542             if (i == (long) argc)
00543               ThrowImportException(OptionError,"MissingArgument",option);
00544             if (IsGeometry(argv[i]) == MagickFalse)
00545               ThrowImportInvalidArgumentException(option,argv[i]);
00546             quantize_info->number_colors=(unsigned long) atol(argv[i]);
00547             break;
00548           }
00549         if (LocaleCompare("colorspace",option+1) == 0)
00550           {
00551             long
00552               colorspace;
00553 
00554             quantize_info->colorspace=UndefinedColorspace;
00555             if (*option == '+')
00556               break;
00557             i++;
00558             if (i == (long) argc)
00559               ThrowImportException(OptionError,"MissingArgument",option);
00560             colorspace=ParseMagickOption(MagickColorspaceOptions,MagickFalse,
00561               argv[i]);
00562             if (colorspace < 0)
00563               ThrowImportException(OptionError,"UnrecognizedColorspace",
00564                 argv[i]);
00565             quantize_info->colorspace=(ColorspaceType) colorspace;
00566             if (quantize_info->colorspace == GRAYColorspace)
00567               {
00568                 quantize_info->colorspace=GRAYColorspace;
00569                 quantize_info->number_colors=256;
00570                 quantize_info->tree_depth=8;
00571               }
00572             break;
00573           }
00574         if (LocaleCompare("comment",option+1) == 0)
00575           {
00576             if (*option == '-')
00577               break;
00578             i++;
00579             if (i == (long) argc)
00580               ThrowImportException(OptionError,"MissingArgument",option);
00581             status=SetImageOption(image_info,"Comment",argv[i]);
00582             if (status == MagickFalse)
00583               ThrowImportException(OptionError,"UnrecognizedOption",argv[i]);
00584             break;
00585           }
00586         if (LocaleCompare("compress",option+1) == 0)
00587           {
00588             long
00589               compression;
00590 
00591             if (*option == '+')
00592               break;
00593             i++;
00594             if (i == (long) argc)
00595               ThrowImportException(OptionError,"MissingArgument",option);
00596             compression=ParseMagickOption(MagickCompressionOptions,
00597               MagickFalse,argv[i]);
00598             if (compression < 0)
00599               ThrowImportException(OptionError,"UnrecognizedImageCompression",
00600                 argv[i]);
00601             break;
00602           }
00603         if (LocaleCompare("crop",option+1) == 0)
00604           {
00605             if (*option == '+')
00606               break;
00607             i++;
00608             if (i == (long) argc)
00609               ThrowImportException(OptionError,"MissingArgument",option);
00610             if (IsGeometry(argv[i]) == MagickFalse)
00611               ThrowImportInvalidArgumentException(option,argv[i]);
00612             break;
00613           }
00614         ThrowImportException(OptionError,"UnrecognizedOption",option);
00615       }
00616       case 'd':
00617       {
00618         if (LocaleCompare("debug",option+1) == 0)
00619           {
00620             LogEventType
00621               event_mask;
00622 
00623             (void) SetLogEventMask("None");
00624             if (*option == '+')
00625               break;
00626             i++;
00627             if (i == (long) argc)
00628               ThrowImportException(OptionError,"MissingArgument",option);
00629             event_mask=SetLogEventMask(argv[i]);
00630             if (event_mask == UndefinedEvents)
00631               ThrowImportException(OptionError,"UnrecognizedEventType",option);
00632             break;
00633           }
00634         if (LocaleCompare("define",option+1) == 0)
00635           {
00636             i++;
00637             if (i == (long) argc)
00638               ThrowImportException(OptionError,"MissingArgument",option);
00639             if (*option == '+')
00640               {
00641                 const char
00642                   *define;
00643 
00644                 define=GetImageOption(image_info,argv[i]);
00645                 if (define == (char *) NULL)
00646                   ThrowImportException(OptionError,"NoSuchOption",argv[i]);
00647                 break;
00648               }
00649             break;
00650           }
00651         if (LocaleCompare("delay",option+1) == 0)
00652           {
00653             if (*option == '+')
00654               break;
00655             i++;
00656             if (i == (long) argc)
00657               ThrowImportException(OptionError,"MissingArgument",option);
00658             if (IsGeometry(argv[i]) == MagickFalse)
00659               ThrowImportInvalidArgumentException(option,argv[i]);
00660             status=SetImageOption(image_info,"delay",argv[i]);
00661             if (status == MagickFalse)
00662               ThrowImportException(OptionError,"UnrecognizedOption",argv[i]);
00663             break;
00664           }
00665         if (LocaleCompare("density",option+1) == 0)
00666           {
00667             if (*option == '+')
00668               break;
00669             i++;
00670             if (i == (long) argc)
00671               ThrowImportException(OptionError,"MissingArgument",option);
00672             if (IsGeometry(argv[i]) == MagickFalse)
00673               ThrowImportInvalidArgumentException(option,argv[i]);
00674             break;
00675           }
00676         if (LocaleCompare("depth",option+1) == 0)
00677           {
00678             if (*option == '+')
00679               break;
00680             i++;
00681             if (i == (long) argc)
00682               ThrowImportException(OptionError,"MissingArgument",option);
00683             if (IsGeometry(argv[i]) == MagickFalse)
00684               ThrowImportInvalidArgumentException(option,argv[i]);
00685             break;
00686           }
00687         if (LocaleCompare("descend",option+1) == 0)
00688           {
00689             ximage_info.descend=(*option == '-') ? MagickTrue : MagickFalse;
00690             break;
00691           }
00692         if (LocaleCompare("display",option+1) == 0)
00693           {
00694             if (*option == '+')
00695               break;
00696             i++;
00697             if (i == (long) argc)
00698               ThrowImportException(OptionError,"MissingArgument",option);
00699             break;
00700           }
00701         if (LocaleCompare("dispose",option+1) == 0)
00702           {
00703             long
00704               dispose;
00705 
00706             if (*option == '+')
00707               break;
00708             i++;
00709             if (i == (long) argc)
00710               ThrowImportException(OptionError,"MissingArgument",option);
00711             dispose=ParseMagickOption(MagickDisposeOptions,MagickFalse,argv[i]);
00712             if (dispose < 0)
00713               ThrowImportException(OptionError,"UnrecognizedDisposeMethod",
00714                 argv[i]);
00715             break;
00716           }
00717         if (LocaleCompare("dither",option+1) == 0)
00718           {
00719             quantize_info->dither=(*option == '-') ? MagickTrue : MagickFalse;
00720             break;
00721           }
00722         ThrowImportException(OptionError,"UnrecognizedOption",option);
00723       }
00724       case 'e':
00725       {
00726         if (LocaleCompare("encoding",option+1) == 0)
00727           {
00728             if (*option == '+')
00729               break;
00730             i++;
00731             if (i == (long) argc)
00732               ThrowImportException(OptionError,"MissingArgument",option);
00733             break;
00734           }
00735         if (LocaleCompare("endian",option+1) == 0)
00736           {
00737             long
00738               endian;
00739 
00740             if (*option == '+')
00741               break;
00742             i++;
00743             if (i == (long) argc)
00744               ThrowImportException(OptionError,"MissingArgument",option);
00745             endian=ParseMagickOption(MagickEndianOptions,MagickFalse,
00746               argv[i]);
00747             if (endian < 0)
00748               ThrowImportException(OptionError,"UnrecognizedEndianType",
00749                 argv[i]);
00750             break;
00751           }
00752         ThrowImportException(OptionError,"UnrecognizedOption",option);
00753       }
00754       case 'f':
00755       {
00756         if (LocaleCompare("frame",option+1) == 0)
00757           {
00758             ximage_info.frame=(*option == '-') ? MagickTrue : MagickFalse;
00759             (void) strcpy(argv[i]+1,"{0}");
00760             break;
00761           }
00762         if (LocaleCompare("format",option+1) == 0)
00763           {
00764             if (*option == '+')
00765               break;
00766             i++;
00767             if (i == (long) (argc-1))
00768               ThrowImportException(OptionError,"MissingArgument",option);
00769             break;
00770           }
00771         ThrowImportException(OptionError,"UnrecognizedOption",option);
00772       }
00773       case 'g':
00774       {
00775         if (LocaleCompare("geometry",option+1) == 0)
00776           {
00777             if (*option == '+')
00778               break;
00779             i++;
00780             if (i == (long) argc)
00781               ThrowImportException(OptionError,"MissingArgument",option);
00782             if (IsGeometry(argv[i]) == MagickFalse)
00783               ThrowImportInvalidArgumentException(option,argv[i]);
00784             break;
00785           }
00786         if (LocaleCompare("gravity",option+1) == 0)
00787           {
00788             long
00789               gravity;
00790 
00791             if (*option == '+')
00792               break;
00793             i++;
00794             if (i == (long) argc)
00795               ThrowImportException(OptionError,"MissingArgument",option);
00796             gravity=ParseMagickOption(MagickGravityOptions,MagickFalse,argv[i]);
00797             if (gravity < 0)
00798               ThrowImportException(OptionError,"UnrecognizedGravityType",
00799                 argv[i]);
00800             break;
00801           }
00802         ThrowImportException(OptionError,"UnrecognizedOption",option);
00803       }
00804       case 'h':
00805       {
00806         if (LocaleCompare("help",option+1) == 0)
00807           break;
00808         ThrowImportException(OptionError,"UnrecognizedOption",option);
00809       }
00810       case 'i':
00811       {
00812         if (LocaleCompare("identify",option+1) == 0)
00813           break;
00814         if (LocaleCompare("interlace",option+1) == 0)
00815           {
00816             long
00817               interlace;
00818 
00819             if (*option == '+')
00820               break;
00821             i++;
00822             if (i == (long) argc)
00823               ThrowImportException(OptionError,"MissingArgument",option);
00824             interlace=ParseMagickOption(MagickInterlaceOptions,MagickFalse,
00825               argv[i]);
00826             if (interlace < 0)
00827               ThrowImportException(OptionError,"UnrecognizedInterlaceType",
00828                 argv[i]);
00829             break;
00830           }
00831         ThrowImportException(OptionError,"UnrecognizedOption",option);
00832       }
00833       case 'l':
00834       {
00835         if (LocaleCompare("label",option+1) == 0)
00836           {
00837             if (*option == '+')
00838               break;
00839             i++;
00840             if (i == (long) argc)
00841               ThrowImportException(OptionError,"MissingArgument",option);
00842             status=SetImageOption(image_info,"label",argv[i]);
00843             if (status == MagickFalse)
00844               ThrowImportException(OptionError,"UnrecognizedOption",argv[i]);
00845             break;
00846           }
00847         if (LocaleCompare("limit",option+1) == 0)
00848           {
00849             long
00850               resource;
00851 
00852             if (*option == '+')
00853               break;
00854             i++;
00855             if (i == (long) argc)
00856               ThrowImportException(OptionError,"MissingArgument",option);
00857             resource=ParseMagickOption(MagickResourceOptions,MagickFalse,
00858               argv[i]);
00859             if (resource < 0)
00860               ThrowImportException(OptionError,"UnrecognizedResourceType",
00861                 argv[i]);
00862             i++;
00863             if (i == (long) argc)
00864               ThrowImportException(OptionError,"MissingArgument",option);
00865             if ((LocaleCompare("unlimited",argv[i]) != 0) &&
00866                 (IsGeometry(argv[i]) == MagickFalse))
00867               ThrowImportInvalidArgumentException(option,argv[i]);
00868             break;
00869           }
00870         if (LocaleCompare("log",option+1) == 0)
00871           {
00872             if (*option == '+')
00873               break;
00874             i++;
00875             if ((i == (long) argc) || (strchr(argv[i],'%') == (char *) NULL))
00876               ThrowImportException(OptionError,"MissingArgument",option);
00877             break;
00878           }
00879         ThrowImportException(OptionError,"UnrecognizedOption",option);
00880       }
00881       case 'm':
00882       {
00883         if (LocaleCompare("monitor",option+1) == 0)
00884           break;
00885         if (LocaleCompare("monochrome",option+1) == 0)
00886           {
00887             if (*option == '+')
00888               break;
00889             quantize_info->number_colors=2;
00890             quantize_info->tree_depth=8;
00891             quantize_info->colorspace=GRAYColorspace;
00892             break;
00893           }
00894         ThrowImportException(OptionError,"UnrecognizedOption",option);
00895       }
00896       case 'n':
00897       {
00898         if (LocaleCompare("negate",option+1) == 0)
00899           break;
00900         ThrowImportException(OptionError,"UnrecognizedOption",option);
00901       }
00902       case 'p':
00903       {
00904         if (LocaleCompare("page",option+1) == 0)
00905           {
00906             if (*option == '+')
00907               break;
00908             i++;
00909             if (i == (long) argc)
00910               ThrowImportException(OptionError,"MissingArgument",option);
00911             status=SetImageOption(image_info,"page",argv[i]);
00912             if (status == MagickFalse)
00913               ThrowImportException(OptionError,"UnrecognizedOption",argv[i]);
00914             break;
00915           }
00916         if (LocaleCompare("pause",option+1) == 0)
00917           {
00918             resource_info.pause=0;
00919             if (*option == '+')
00920               break;
00921             i++;
00922             if (i == (long) argc)
00923               ThrowImportException(OptionError,"MissingArgument",option);
00924             if (IsGeometry(argv[i]) == MagickFalse)
00925               ThrowImportInvalidArgumentException(option,argv[i]);
00926             resource_info.pause=(unsigned int) atoi(argv[i]);
00927             break;
00928           }
00929         if (LocaleCompare("ping",option+1) == 0)
00930           ThrowImportException(OptionError,"DeprecatedOption",option);
00931         if (LocaleCompare("pointsize",option+1) == 0)
00932           {
00933             if (*option == '+')
00934               break;
00935             i++;
00936             if (i == (long) argc)
00937               ThrowImportException(OptionError,"MissingArgument",option);
00938             if (IsGeometry(argv[i]) == MagickFalse)
00939               ThrowImportInvalidArgumentException(option,argv[i]);
00940             break;
00941           }
00942         ThrowImportException(OptionError,"UnrecognizedOption",option);
00943       }
00944       case 'q':
00945       {
00946         if (LocaleCompare("quality",option+1) == 0)
00947           {
00948             if (*option == '+')
00949               break;
00950             i++;
00951             if (i == (long) argc)
00952               ThrowImportException(OptionError,"MissingArgument",option);
00953             if (IsGeometry(argv[i]) == MagickFalse)
00954               ThrowImportInvalidArgumentException(option,argv[i]);
00955             break;
00956           }
00957         if (LocaleCompare("quiet",option+1) == 0)
00958           break;
00959         ThrowImportException(OptionError,"UnrecognizedOption",option);
00960       }
00961       case 'r':
00962       {
00963         if (LocaleCompare("repage",option+1) == 0)
00964           {
00965             if (*option == '+')
00966               break;
00967             i++;
00968             if (i == (long) (argc-1))
00969               ThrowImportException(OptionError,"MissingArgument",option);
00970             if (IsGeometry(argv[i]) == MagickFalse)
00971               ThrowImportInvalidArgumentException(option,argv[i]);
00972             break;
00973           }
00974         if (LocaleCompare("resize",option+1) == 0)
00975           {
00976             if (*option == '+')
00977               break;
00978             i++;
00979             if (i == (long) argc)
00980               ThrowImportException(OptionError,"MissingArgument",option);
00981             if (IsGeometry(argv[i]) == MagickFalse)
00982               ThrowImportInvalidArgumentException(option,argv[i]);
00983             break;
00984           }
00985         if (LocaleCompare("rotate",option+1) == 0)
00986           {
00987             i++;
00988             if (i == (long) argc)
00989               ThrowImportException(OptionError,"MissingArgument",option);
00990             if (IsGeometry(argv[i]) == MagickFalse)
00991               ThrowImportInvalidArgumentException(option,argv[i]);
00992             break;
00993           }
00994         ThrowImportException(OptionError,"UnrecognizedOption",option);
00995       }
00996       case 's':
00997       {
00998         if (LocaleCompare("sampling-factor",option+1) == 0)
00999           {
01000             if (*option == '+')
01001               break;
01002             i++;
01003             if (i == (long) argc)
01004               ThrowImportException(OptionError,"MissingArgument",option);
01005             if (IsGeometry(argv[i]) == MagickFalse)
01006               ThrowImportInvalidArgumentException(option,argv[i]);
01007             break;
01008           }
01009         if (LocaleCompare("scene",option+1) == 0)
01010           {
01011             if (*option == '+')
01012               break;
01013             i++;
01014             if (i == (long) argc)
01015               ThrowImportException(OptionError,"MissingArgument",option);
01016             if (IsGeometry(argv[i]) == MagickFalse)
01017               ThrowImportInvalidArgumentException(option,argv[i]);
01018             break;
01019           }
01020         if (LocaleCompare("set",option+1) == 0)
01021           {
01022             i++;
01023             if (i == (long) argc)
01024               ThrowImportException(OptionError,"MissingArgument",option);
01025             if (*option == '+')
01026               break;
01027             i++;
01028             if (i == (long) argc)
01029               ThrowImportException(OptionError,"MissingArgument",option);
01030             break;
01031           }
01032         if (LocaleCompare("screen",option+1) == 0)
01033           {
01034             ximage_info.screen=(*option == '-') ? MagickTrue : MagickFalse;
01035             break;
01036           }
01037         if (LocaleCompare("silent",option+1) == 0)
01038           {
01039             ximage_info.silent=(*option == '-') ? MagickTrue : MagickFalse;
01040             break;
01041           }
01042         if (LocaleCompare("snaps",option+1) == 0)
01043           {
01044             (void) strcpy(argv[i]+1,"{1}");
01045             i++;
01046             if (i == (long) argc)
01047               ThrowImportException(OptionError,"MissingArgument",option);
01048             if (IsGeometry(argv[i]) == MagickFalse)
01049               ThrowImportInvalidArgumentException(option,argv[i]);
01050             snapshots=atol(argv[i]);
01051             break;
01052           }
01053         if (LocaleCompare("strip",option+1) == 0)
01054           break;
01055         if (LocaleCompare("support",option+1) == 0)
01056           {
01057             if (*option == '+')
01058               break;
01059             i++;
01060             if (i == (long) argc)
01061               ThrowImportException(OptionError,"MissingArgument",option);
01062             if (IsGeometry(argv[i]) == MagickFalse)
01063               ThrowImportInvalidArgumentException(option,argv[i]);
01064             break;
01065           }
01066         ThrowImportException(OptionError,"UnrecognizedOption",option);
01067       }
01068       case 't':
01069       {
01070         if (LocaleCompare("thumnail",option+1) == 0)
01071           {
01072             if (*option == '+')
01073               break;
01074             i++;
01075             if (i == (long) argc)
01076               ThrowImportException(OptionError,"MissingArgument",option);
01077             if (IsGeometry(argv[i]) == MagickFalse)
01078               ThrowImportInvalidArgumentException(option,argv[i]);
01079             break;
01080           }
01081         if (LocaleCompare("transparent",option+1) == 0)
01082           {
01083             if (*option == '+')
01084               break;
01085             i++;
01086             if (i == (long) argc)
01087               ThrowImportException(OptionError,"MissingArgument",option);
01088             break;
01089           }
01090         if (LocaleCompare("treedepth",option+1) == 0)
01091           {
01092             quantize_info->tree_depth=0;
01093             if (*option == '+')
01094               break;
01095             i++;
01096             if (i == (long) argc)
01097               ThrowImportException(OptionError,"MissingArgument",option);
01098             if (IsGeometry(argv[i]) == MagickFalse)
01099               ThrowImportInvalidArgumentException(option,argv[i]);
01100             quantize_info->tree_depth=(unsigned long) atol(argv[i]);
01101             break;
01102           }
01103         if (LocaleCompare("trim",option+1) == 0)
01104           break;
01105         if (LocaleCompare("type",option+1) == 0)
01106           {
01107             long
01108               type;
01109 
01110             if (*option == '+')
01111               break;
01112             i++;
01113             if (i == (long) argc)
01114               ThrowImportException(OptionError,"MissingArgument",option);
01115             type=ParseMagickOption(MagickImageOptions,MagickFalse,argv[i]);
01116             if (type < 0)
01117               ThrowImportException(OptionError,"UnrecognizedImageType",argv[i]);
01118             break;
01119           }
01120         ThrowImportException(OptionError,"UnrecognizedOption",option);
01121       }
01122       case 'w':
01123       {
01124         i++;
01125         if (i == (long) argc)
01126           ThrowImportException(OptionError,"MissingArgument",option);
01127         (void) CloneString(&target_window,argv[i]);
01128         break;
01129       }
01130       case 'v':
01131       {
01132         if (LocaleCompare("verbose",option+1) == 0)
01133           break;
01134         if (LocaleCompare("version",option+1) == 0)
01135           break;
01136         ThrowImportException(OptionError,"UnrecognizedOption",option);
01137       }
01138       case '?':
01139         break;
01140       default:
01141         ThrowImportException(OptionError,"UnrecognizedOption",option);
01142     }
01143     fire=(MagickBooleanType) ParseMagickOption(MagickMogrifyOptions,
01144       MagickFalse,option+1);
01145     if (fire == MagickTrue)
01146       MogrifyImageStack(image_stack[k],MagickTrue,MagickTrue);
01147   }
01148   if (k != 0)
01149     ThrowImportException(OptionError,"UnbalancedParenthesis",argv[i]);
01150   if (i != argc)
01151     ThrowImportException(OptionError,"MissingAnImageFilename",argv[i]);
01152   if (image_stack[k] == (Image *) NULL)
01153     ThrowImportException(OptionError,"MissingAnImageFilename",argv[argc-1]);
01154   MogrifyImageStack(image_stack[k],MagickTrue,MagickTrue)
01155   GetImageException(image_stack[k],exception);
01156   status&=WriteImages(image_info,image_stack[k],filename,exception);
01157   DestroyImport();
01158   return(status != 0 ? MagickTrue : MagickFalse);
01159 #else
01160   (void) ThrowMagickException(exception,GetMagickModule(),MissingDelegateError,
01161     "XWindowLibraryIsNotAvailable","`%s'",image_info->filename);
01162   ImportUsage();
01163   return(MagickFalse);
01164 #endif
01165 }

Generated on Thu Sep 4 11:42:46 2008 for ImageMagick by  doxygen 1.5.6