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 from X11 Screen                          %
00014 %                                                                             %
00015 %                           Software Design                                   %
00016 %                             John Cristy                                     %
00017 %                              July 1992                                      %
00018 %                                                                             %
00019 %                                                                             %
00020 %  Copyright 1999-2009 ImageMagick Studio LLC, a non-profit organization      %
00021 %  dedicated to making software imaging solutions freely available.           %
00022 %                                                                             %
00023 %  You may not use this file except in compliance with the License.  You may  %
00024 %  obtain a copy of the License at                                            %
00025 %                                                                             %
00026 %    http://www.imagemagick.org/script/license.php                            %
00027 %                                                                             %
00028 %  Unless required by applicable law or agreed to in writing, software        %
00029 %  distributed under the License is distributed on an "AS IS" BASIS,          %
00030 %  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
00031 %  See the License for the specific language governing permissions and        %
00032 %  limitations under the License.                                             %
00033 %                                                                             %
00034 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00035 %
00036 %  Use the import program to capture some or all of an X server screen and
00037 %  save the image to a file.
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/xwindow-private.h"
00048 
00049 /*
00050 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00051 %                                                                             %
00052 %                                                                             %
00053 %                                                                             %
00054 +   I m p o r t I m a g e C o m m a n d                                       %
00055 %                                                                             %
00056 %                                                                             %
00057 %                                                                             %
00058 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00059 %
00060 %  ImportImageCommand() reads an image from any visible window on an X server
00061 %  and outputs it as an image file. You can capture a single window, the
00062 %  entire screen, or any rectangular portion of the screen.  You can use the
00063 %  display utility for redisplay, printing, editing, formatting, archiving,
00064 %  image processing, etc. of the captured image.</dd>
00065 %
00066 %  The target window can be specified by id, name, or may be selected by
00067 %  clicking the mouse in the desired window. If you press a button and then
00068 %  drag, a rectangle will form which expands and contracts as the mouse moves.
00069 %  To save the portion of the screen defined by the rectangle, just release
00070 %  the button. The keyboard bell is rung once at the beginning of the screen
00071 %  capture and twice when it completes.
00072 %
00073 %  The format of the ImportImageCommand method is:
00074 %
00075 %      MagickBooleanType ImportImageCommand(ImageInfo *image_info,int argc,
00076 %        char **argv,char **metadata,ExceptionInfo *exception)
00077 %
00078 %  A description of each parameter follows:
00079 %
00080 %    o image_info: the image info.
00081 %
00082 %    o argc: the number of elements in the argument vector.
00083 %
00084 %    o argv: A text array containing the command line arguments.
00085 %
00086 %    o metadata: any metadata is returned here.
00087 %
00088 %    o exception: return any errors or warnings in this structure.
00089 %
00090 */
00091 
00092 static MagickBooleanType ImportUsage(void)
00093 {
00094   const char
00095     **p;
00096 
00097   static const char
00098     *miscellaneous[]=
00099     {
00100       "-debug events        display copious debugging information",
00101       "-help                print program options",
00102       "-list type           print a list of supported option arguments",
00103       "-log format          format of debugging information",
00104       "-version             print version information",
00105       (char *) NULL
00106     },
00107     *operators[]=
00108     {
00109       "-annotate geometry text",
00110       "                     annotate the image with text",
00111       "-border              include image borders in the output image",
00112       "-colors value        preferred number of colors in the image",
00113       "-crop geometry       preferred size and location of the cropped image",
00114       "-encipher filename   convert plain pixels to cipher pixels",
00115       "-geometry geometry   preferred size or location of the image",
00116       "-help                print program options",
00117       "-monochrome          transform image to black and white",
00118       "-negate              replace every pixel with its complementary color ",
00119       "-repage geometry     size and location of an image canvas",
00120       "-quantize colorspace reduce colors in this colorspace",
00121       "-resize geometry     resize the image",
00122       "-rotate degrees      apply Paeth rotation to the image",
00123       "-strip               strip image of all profiles and comments",
00124       "-thumbnail geometry  create a thumbnail of the image",
00125       "-transparent color   make this color transparent within the image",
00126       "-trim                trim image edges",
00127       "-type type           image type",
00128       (char *) NULL
00129     },
00130     *settings[]=
00131     {
00132       "-adjoin              join images into a single multi-image file",
00133       "-channel type        apply option to select image channels",
00134       "-colorspace type     alternate image colorspace",
00135       "-comment string      annotate image with comment",
00136       "-compress type       type of pixel compression when writing the image",
00137       "-define format:option",
00138       "                     define one or more image format options",
00139       "-density geometry    horizontal and vertical density of the image",
00140       "-depth value         image depth",
00141       "-descend             obtain image by descending window hierarchy",
00142       "-display server      X server to contact",
00143       "-dispose method      layer disposal method",
00144       "-dither method       apply error diffusion to image",
00145       "-delay value         display the next image after pausing",
00146       "-encipher filename   convert plain pixels to cipher pixels",
00147       "-endian type         endianness (MSB or LSB) of the image",
00148       "-encoding type       text encoding type",
00149       "-filter type         use this filter when resizing an image",
00150       "-format \"string\"     output formatted image characteristics",
00151       "-frame               include window manager frame",
00152       "-gravity direction   which direction to gravitate towards",
00153       "-identify            identify the format and characteristics of the image",
00154       "-interlace type      None, Line, Plane, or Partition",
00155       "-interpolate method  pixel color interpolation method",
00156       "-label string        assign a label to an image",
00157       "-limit type value    Area, Disk, Map, or Memory resource limit",
00158       "-monitor             monitor progress",
00159       "-page geometry       size and location of an image canvas",
00160       "-pause value         seconds delay between snapshots",
00161       "-pointsize value     font point size",
00162       "-quality value       JPEG/MIFF/PNG compression level",
00163       "-quiet               suppress all warning messages",
00164       "-regard-warnings     pay attention to warning messages",
00165       "-respect-parentheses settings remain in effect until parenthesis boundary",
00166       "-sampling-factor geometry",
00167       "                     horizontal and vertical sampling factor",
00168       "-scene value         image scene number",
00169       "-screen              select image from root window",
00170       "-seed value          seed a new sequence of pseudo-random numbers",
00171       "-set property value  set an image property",
00172       "-silent              operate silently, i.e. don't ring any bells ",
00173       "-snaps value         number of screen snapshots",
00174       "-transparent-color color",
00175       "                     transparent color",
00176       "-treedepth value     color tree depth",
00177       "-verbose             print detailed information about the image",
00178       "-virtual-pixel method",
00179       "                     Constant, Edge, Mirror, or Tile",
00180       "-window id           select window with this id or name",
00181       (char *) NULL
00182     };
00183 
00184   (void) printf("Version: %s\n",GetMagickVersion((unsigned long *) NULL));
00185   (void) printf("Copyright: %s\n",GetMagickCopyright());
00186   (void) printf("Features: %s\n\n",GetMagickFeatures());
00187   (void) printf("Usage: %s [options ...] [ file ]\n",
00188     GetClientName());
00189   (void) printf("\nImage Settings:\n");
00190   for (p=settings; *p != (char *) NULL; p++)
00191     (void) printf("  %s\n",*p);
00192   (void) printf("\nImage Operators:\n");
00193   for (p=operators; *p != (char *) NULL; p++)
00194     (void) printf("  %s\n",*p);
00195   (void) printf("\nMiscellaneous Options:\n");
00196   for (p=miscellaneous; *p != (char *) NULL; p++)
00197     (void) printf("  %s\n",*p);
00198   (void) printf(
00199   "\nBy default, 'file' is written in the MIFF image format.  To\n");
00200   (void) printf(
00201     "specify a particular image format, precede the filename with an image\n");
00202   (void) printf(
00203     "format name and a colon (i.e. ps:image) or specify the image type as\n");
00204   (void) printf(
00205     "the filename suffix (i.e. image.ps).  Specify 'file' as '-' for\n");
00206   (void) printf("standard input or output.\n");
00207   return(MagickFalse);
00208 }
00209 
00210 static inline long MagickMax(const long x,const long y)
00211 {
00212   if (x > y)
00213     return(x);
00214   return(y);
00215 }
00216 
00217 WandExport MagickBooleanType ImportImageCommand(ImageInfo *image_info,
00218   int argc,char **argv,char **wand_unused(metadata),ExceptionInfo *exception)
00219 {
00220 #if defined(MAGICKCORE_X11_DELEGATE)
00221 #define DestroyImport() \
00222 { \
00223   XDestroyResourceInfo(&resource_info); \
00224   if (display != (Display *) NULL) \
00225     { \
00226       XCloseDisplay(display); \
00227       display=(Display *) NULL; \
00228     } \
00229   DestroyImageStack(); \
00230   if (target_window != (char *) NULL) \
00231     target_window=DestroyString(target_window); \
00232   for (i=0; i < (long) argc; i++) \
00233     argv[i]=DestroyString(argv[i]); \
00234   argv=(char **) RelinquishMagickMemory(argv); \
00235 }
00236 #define ThrowImportException(asperity,tag,option) \
00237 { \
00238   (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \
00239      option); \
00240   DestroyImport(); \
00241   return(MagickFalse); \
00242 }
00243 #define ThrowImportInvalidArgumentException(option,argument) \
00244 { \
00245   (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
00246     "InvalidArgument","`%s': %s",option,argument); \
00247   DestroyImport(); \
00248   return(MagickFalse); \
00249 }
00250 
00251   char
00252     *filename,
00253     *option,
00254     *resource_value,
00255     *server_name,
00256     *target_window;
00257 
00258   Display
00259     *display;
00260 
00261   Image
00262     *image;
00263 
00264   ImageStack
00265     image_stack[MaxImageStackDepth+1];
00266 
00267   long
00268     j,
00269     k,
00270     snapshots;
00271 
00272   MagickBooleanType
00273     fire,
00274     pend;
00275 
00276   MagickStatusType
00277     status;
00278 
00279   QuantizeInfo
00280     *quantize_info;
00281 
00282   register long
00283     i;
00284 
00285   XImportInfo
00286     ximage_info;
00287 
00288   XResourceInfo
00289     resource_info;
00290 
00291   XrmDatabase
00292     resource_database;
00293 
00294   /*
00295     Set defaults.
00296   */
00297   assert(image_info != (ImageInfo *) NULL);
00298   assert(image_info->signature == MagickSignature);
00299   if (image_info->debug != MagickFalse)
00300     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
00301   assert(exception != (ExceptionInfo *) NULL);
00302   if (argc == 2)
00303     {
00304       option=argv[1];
00305       if ((LocaleCompare("version",option+1) == 0) ||
00306           (LocaleCompare("-version",option+1) == 0))
00307         {
00308           (void) fprintf(stdout,"Version: %s\n",
00309             GetMagickVersion((unsigned long *) NULL));
00310           (void) fprintf(stdout,"Copyright: %s\n",GetMagickCopyright());
00311           (void) fprintf(stdout,"Features: %s\n\n",GetMagickFeatures());
00312           return(MagickFalse);
00313         }
00314     }
00315   display=(Display *) NULL;
00316   j=1;
00317   k=0;
00318   NewImageStack();
00319   option=(char *) NULL;
00320   pend=MagickFalse;
00321   resource_database=(XrmDatabase) NULL;
00322   (void) ResetMagickMemory(&resource_info,0,sizeof(resource_info));
00323   server_name=(char *) NULL;
00324   status=MagickTrue;
00325   SetNotifyHandlers;
00326   target_window=(char *) NULL;
00327   /*
00328     Check for server name specified on the command line.
00329   */
00330   ReadCommandlLine(argc,&argv);
00331   status=ExpandFilenames(&argc,&argv);
00332   if (status == MagickFalse)
00333     ThrowImportException(ResourceLimitError,"MemoryAllocationFailed",
00334       GetExceptionMessage(errno));
00335   for (i=1; i < (long) argc; i++)
00336   {
00337     /*
00338       Check command line for server name.
00339     */
00340     option=argv[i];
00341     if (LocaleCompare("display",option+1) == 0)
00342       {
00343         /*
00344           User specified server name.
00345         */
00346         i++;
00347         if (i == (long) argc)
00348           ThrowImportException(OptionError,"MissingArgument",option);
00349         server_name=argv[i];
00350       }
00351     if ((LocaleCompare("help",option+1) == 0) ||
00352         (LocaleCompare("-help",option+1) == 0))
00353       return(ImportUsage());
00354   }
00355   /*
00356     Get user defaults from X resource database.
00357   */
00358   display=XOpenDisplay(server_name);
00359   if (display == (Display *) NULL)
00360     ThrowImportException(XServerError,"UnableToOpenXServer",
00361       XDisplayName(server_name));
00362   (void) XSetErrorHandler(XError);
00363   resource_database=XGetResourceDatabase(display,GetClientName());
00364   XGetImportInfo(&ximage_info);
00365   XGetResourceInfo(image_info,resource_database,GetClientName(),
00366     &resource_info);
00367   quantize_info=resource_info.quantize_info;
00368   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00369     "border","False");
00370   ximage_info.borders=IsMagickTrue(resource_value);
00371   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00372     "delay","0");
00373   resource_info.delay=(unsigned int) atoi(resource_value);
00374   image_info->density=XGetResourceInstance(resource_database,GetClientName(),
00375     "density",(char *) NULL);
00376   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00377     "descend","True");
00378   ximage_info.descend=IsMagickTrue(resource_value);
00379   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00380     "frame","False");
00381   ximage_info.frame=IsMagickTrue(resource_value);
00382   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00383     "interlace","none");
00384   image_info->interlace=UndefinedInterlace;
00385   if (LocaleCompare("None",resource_value) == 0)
00386     image_info->interlace=NoInterlace;
00387   if (LocaleCompare("Line",resource_value) == 0)
00388     image_info->interlace=LineInterlace;
00389   if (LocaleCompare("Plane",resource_value) == 0)
00390     image_info->interlace=PlaneInterlace;
00391   if (LocaleCompare("Partition",resource_value) == 0)
00392     image_info->interlace=PartitionInterlace;
00393   if (image_info->interlace == UndefinedInterlace)
00394     ThrowImportException(OptionError,"Unrecognized interlace type",
00395       resource_value);
00396   image_info->page=XGetResourceInstance(resource_database,GetClientName(),
00397     "pageGeometry",(char *) NULL);
00398   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00399     "pause","0");
00400   resource_info.pause=(unsigned int) atol(resource_value);
00401   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00402     "quality","85");
00403   image_info->quality=(unsigned long) atol(resource_value);
00404   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00405     "screen","False");
00406   ximage_info.screen=IsMagickTrue(resource_value);
00407   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00408     "silent","False");
00409   ximage_info.silent=IsMagickTrue(resource_value);
00410   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00411     "verbose","False");
00412   image_info->verbose=IsMagickTrue(resource_value);
00413   resource_value=XGetResourceInstance(resource_database,GetClientName(),
00414     "dither","True");
00415   quantize_info->dither=IsMagickTrue(resource_value);
00416   snapshots=1;
00417   status=MagickTrue;
00418   filename=(char *) NULL;
00419   /*
00420     Check command syntax.
00421   */
00422   for (i=1; i < (long) argc; i++)
00423   {
00424     option=argv[i];
00425     if (LocaleCompare(option,"(") == 0)
00426       {
00427         FireImageStack(MagickFalse,MagickTrue,pend);
00428         if (k == MaxImageStackDepth)
00429           ThrowImportException(OptionError,"ParenthesisNestedTooDeeply",
00430             option);
00431         PushImageStack();
00432         continue;
00433       }
00434     if (LocaleCompare(option,")") == 0)
00435       {
00436         FireImageStack(MagickFalse,MagickTrue,MagickTrue);
00437         if (k == 0)
00438           ThrowImportException(OptionError,"UnableToParseExpression",option);
00439         PopImageStack();
00440         continue;
00441       }
00442     if (IsMagickOption(option) == MagickFalse)
00443       {
00444         Image
00445           *images;
00446 
00447         unsigned long
00448           scene;
00449 
00450         /*
00451           Read image from X server.
00452         */
00453         FireImageStack(MagickFalse,MagickFalse,pend);
00454         filename=argv[i];
00455         if (target_window != (char *) NULL)
00456           (void) CopyMagickString(image_info->filename,target_window,
00457             MaxTextExtent);
00458         for (scene=0; scene < (unsigned long) MagickMax(snapshots,1); scene++)
00459         {
00460           (void) sleep(resource_info.pause);
00461           images=XImportImage(image_info,&ximage_info);
00462           status&=(images != (Image *) NULL) &&
00463             (exception->severity < ErrorException);
00464           if (images == (Image *) NULL)
00465             continue;
00466           (void) CopyMagickString(images->filename,filename,MaxTextExtent);
00467           (void) CopyMagickString(images->magick,"PS",MaxTextExtent);
00468           images->scene=scene;
00469           AppendImageStack(images);
00470         }
00471         continue;
00472       }
00473     pend=image != (Image *) NULL ? MagickTrue : MagickFalse;
00474     switch(*(option+1))
00475     {
00476       case 'a':
00477       {
00478         if (LocaleCompare("adjoin",option+1) == 0)
00479           break;
00480         if (LocaleCompare("annotate",option+1) == 0)
00481           {
00482             if (*option == '+')
00483               break;
00484             i++;
00485             if (i == (long) (argc-1))
00486               ThrowImportException(OptionError,"MissingArgument",option);
00487             if (IsGeometry(argv[i]) == MagickFalse)
00488               ThrowImportInvalidArgumentException(option,argv[i]);
00489             if (i == (long) (argc-1))
00490               ThrowImportException(OptionError,"MissingArgument",option);
00491             i++;
00492             break;
00493           }
00494         ThrowImportException(OptionError,"UnrecognizedOption",option);
00495       }
00496       case 'b':
00497       {
00498         if (LocaleCompare("border",option+1) == 0)
00499           {
00500             (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
00501             ximage_info.borders=(*option == '-') ? MagickTrue : MagickFalse;
00502             break;
00503           }
00504         if (LocaleCompare("bordercolor",option+1) == 0)
00505           {
00506             if (*option == '+')
00507               break;
00508             i++;
00509             if (i == (long) argc)
00510               ThrowImportException(OptionError,"MissingArgument",option);
00511             break;
00512           }
00513         ThrowImportException(OptionError,"UnrecognizedOption",option);
00514       }
00515       case 'c':
00516       {
00517         if (LocaleCompare("cache",option+1) == 0)
00518           {
00519             if (*option == '+')
00520               break;
00521             i++;
00522             if (i == (long) argc)
00523               ThrowImportException(OptionError,"MissingArgument",option);
00524             if (IsGeometry(argv[i]) == MagickFalse)
00525               ThrowImportInvalidArgumentException(option,argv[i]);
00526             break;
00527           }
00528         if (LocaleCompare("channel",option+1) == 0)
00529           {
00530             long
00531               channel;
00532 
00533             if (*option == '+')
00534               break;
00535             i++;
00536             if (i == (long) (argc-1))
00537               ThrowImportException(OptionError,"MissingArgument",option);
00538             channel=ParseChannelOption(argv[i]);
00539             if (channel < 0)
00540               ThrowImportException(OptionError,"UnrecognizedChannelType",
00541                 argv[i]);
00542             break;
00543           }
00544         if (LocaleCompare("colors",option+1) == 0)
00545           {
00546             quantize_info->number_colors=0;
00547             if (*option == '+')
00548               break;
00549             i++;
00550             if (i == (long) argc)
00551               ThrowImportException(OptionError,"MissingArgument",option);
00552             if (IsGeometry(argv[i]) == MagickFalse)
00553               ThrowImportInvalidArgumentException(option,argv[i]);
00554             quantize_info->number_colors=(unsigned long) atol(argv[i]);
00555             break;
00556           }
00557         if (LocaleCompare("colorspace",option+1) == 0)
00558           {
00559             long
00560               colorspace;
00561 
00562             if (*option == '+')
00563               break;
00564             i++;
00565             if (i == (long) argc)
00566               ThrowImportException(OptionError,"MissingArgument",option);
00567             colorspace=ParseMagickOption(MagickColorspaceOptions,MagickFalse,
00568               argv[i]);
00569             if (colorspace < 0)
00570               ThrowImportException(OptionError,"UnrecognizedColorspace",
00571                 argv[i]);
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               compress;
00590 
00591             if (*option == '+')
00592               break;
00593             i++;
00594             if (i == (long) argc)
00595               ThrowImportException(OptionError,"MissingArgument",option);
00596             compress=ParseMagickOption(MagickCompressOptions,MagickFalse,
00597               argv[i]);
00598             if (compress < 0)
00599               ThrowImportException(OptionError,"UnrecognizedImageCompression",
00600                 argv[i]);
00601             break;
00602           }
00603         if (LocaleCompare("concurrent",option+1) == 0)
00604           break;
00605         if (LocaleCompare("crop",option+1) == 0)
00606           {
00607             if (*option == '+')
00608               break;
00609             i++;
00610             if (i == (long) argc)
00611               ThrowImportException(OptionError,"MissingArgument",option);
00612             if (IsGeometry(argv[i]) == MagickFalse)
00613               ThrowImportInvalidArgumentException(option,argv[i]);
00614             break;
00615           }
00616         ThrowImportException(OptionError,"UnrecognizedOption",option);
00617       }
00618       case 'd':
00619       {
00620         if (LocaleCompare("debug",option+1) == 0)
00621           {
00622             long
00623               event;
00624 
00625             if (*option == '+')
00626               break;
00627             i++;
00628             if (i == (long) argc)
00629               ThrowImportException(OptionError,"MissingArgument",option);
00630             event=ParseMagickOption(MagickLogEventOptions,MagickFalse,argv[i]);
00631             if (event < 0)
00632               ThrowImportException(OptionError,"UnrecognizedEventType",argv[i]);
00633             (void) SetLogEventMask(argv[i]);
00634             break;
00635           }
00636         if (LocaleCompare("define",option+1) == 0)
00637           {
00638             i++;
00639             if (i == (long) argc)
00640               ThrowImportException(OptionError,"MissingArgument",option);
00641             if (*option == '+')
00642               {
00643                 const char
00644                   *define;
00645 
00646                 define=GetImageOption(image_info,argv[i]);
00647                 if (define == (char *) NULL)
00648                   ThrowImportException(OptionError,"NoSuchOption",argv[i]);
00649                 break;
00650               }
00651             break;
00652           }
00653         if (LocaleCompare("delay",option+1) == 0)
00654           {
00655             if (*option == '+')
00656               break;
00657             i++;
00658             if (i == (long) argc)
00659               ThrowImportException(OptionError,"MissingArgument",option);
00660             if (IsGeometry(argv[i]) == MagickFalse)
00661               ThrowImportInvalidArgumentException(option,argv[i]);
00662             status=SetImageOption(image_info,"delay",argv[i]);
00663             if (status == MagickFalse)
00664               ThrowImportException(OptionError,"UnrecognizedOption",argv[i]);
00665             break;
00666           }
00667         if (LocaleCompare("density",option+1) == 0)
00668           {
00669             if (*option == '+')
00670               break;
00671             i++;
00672             if (i == (long) argc)
00673               ThrowImportException(OptionError,"MissingArgument",option);
00674             if (IsGeometry(argv[i]) == MagickFalse)
00675               ThrowImportInvalidArgumentException(option,argv[i]);
00676             break;
00677           }
00678         if (LocaleCompare("depth",option+1) == 0)
00679           {
00680             if (*option == '+')
00681               break;
00682             i++;
00683             if (i == (long) argc)
00684               ThrowImportException(OptionError,"MissingArgument",option);
00685             if (IsGeometry(argv[i]) == MagickFalse)
00686               ThrowImportInvalidArgumentException(option,argv[i]);
00687             break;
00688           }
00689         if (LocaleCompare("descend",option+1) == 0)
00690           {
00691             ximage_info.descend=(*option == '-') ? MagickTrue : MagickFalse;
00692             break;
00693           }
00694         if (LocaleCompare("display",option+1) == 0)
00695           {
00696             if (*option == '+')
00697               break;
00698             i++;
00699             if (i == (long) argc)
00700               ThrowImportException(OptionError,"MissingArgument",option);
00701             break;
00702           }
00703         if (LocaleCompare("dispose",option+1) == 0)
00704           {
00705             long
00706               dispose;
00707 
00708             if (*option == '+')
00709               break;
00710             i++;
00711             if (i == (long) argc)
00712               ThrowImportException(OptionError,"MissingArgument",option);
00713             dispose=ParseMagickOption(MagickDisposeOptions,MagickFalse,argv[i]);
00714             if (dispose < 0)
00715               ThrowImportException(OptionError,"UnrecognizedDisposeMethod",
00716                 argv[i]);
00717             break;
00718           }
00719         if (LocaleCompare("dither",option+1) == 0)
00720           {
00721             long
00722               method;
00723 
00724             quantize_info->dither=MagickFalse;
00725             if (*option == '+')
00726               break;
00727             i++;
00728             if (i == (long) argc)
00729               ThrowImportException(OptionError,"MissingArgument",option);
00730             method=ParseMagickOption(MagickDitherOptions,MagickFalse,argv[i]);
00731             if (method < 0)
00732               ThrowImportException(OptionError,"UnrecognizedDitherMethod",
00733                 argv[i]);
00734             quantize_info->dither=MagickTrue;
00735             quantize_info->dither_method=(DitherMethod) method;
00736             break;
00737           }
00738         if (LocaleCompare("duration",option+1) == 0)
00739           {
00740             if (*option == '+')
00741               break;
00742             i++;
00743             if (i == (long) (argc-1))
00744               ThrowImportException(OptionError,"MissingArgument",option);
00745             if (IsGeometry(argv[i]) == MagickFalse)
00746               ThrowImportInvalidArgumentException(option,argv[i]);
00747             break;
00748           }
00749         ThrowImportException(OptionError,"UnrecognizedOption",option);
00750       }
00751       case 'e':
00752       {
00753         if (LocaleCompare("encipher",option+1) == 0)
00754           {
00755             if (*option == '+')
00756               break;
00757             i++;
00758             if (i == (long) (argc-1))
00759               ThrowImportException(OptionError,"MissingArgument",option);
00760             break;
00761           }
00762         if (LocaleCompare("encoding",option+1) == 0)
00763           {
00764             if (*option == '+')
00765               break;
00766             i++;
00767             if (i == (long) argc)
00768               ThrowImportException(OptionError,"MissingArgument",option);
00769             break;
00770           }
00771         if (LocaleCompare("endian",option+1) == 0)
00772           {
00773             long
00774               endian;
00775 
00776             if (*option == '+')
00777               break;
00778             i++;
00779             if (i == (long) argc)
00780               ThrowImportException(OptionError,"MissingArgument",option);
00781             endian=ParseMagickOption(MagickEndianOptions,MagickFalse,
00782               argv[i]);
00783             if (endian < 0)
00784               ThrowImportException(OptionError,"UnrecognizedEndianType",
00785                 argv[i]);
00786             break;
00787           }
00788         ThrowImportException(OptionError,"UnrecognizedOption",option);
00789       }
00790       case 'f':
00791       {
00792         if (LocaleCompare("filter",option+1) == 0)
00793           {
00794             long
00795               filter;
00796 
00797             if (*option == '+')
00798               break;
00799             i++;
00800             if (i == (long) (argc-1))
00801               ThrowImportException(OptionError,"MissingArgument",option);
00802             filter=ParseMagickOption(MagickFilterOptions,MagickFalse,argv[i]);
00803             if (filter < 0)
00804               ThrowImportException(OptionError,"UnrecognizedImageFilter",
00805                 argv[i]);
00806             break;
00807           }
00808         if (LocaleCompare("frame",option+1) == 0)
00809           {
00810             (void) CopyMagickString(argv[i]+1,"sans0",MaxTextExtent);
00811             ximage_info.frame=(*option == '-') ? MagickTrue : MagickFalse;
00812             break;
00813           }
00814         if (LocaleCompare("format",option+1) == 0)
00815           {
00816             if (*option == '+')
00817               break;
00818             i++;
00819             if (i == (long) (argc-1))
00820               ThrowImportException(OptionError,"MissingArgument",option);
00821             break;
00822           }
00823         ThrowImportException(OptionError,"UnrecognizedOption",option);
00824       }
00825       case 'g':
00826       {
00827         if (LocaleCompare("geometry",option+1) == 0)
00828           {
00829             if (*option == '+')
00830               break;
00831             i++;
00832             if (i == (long) argc)
00833               ThrowImportException(OptionError,"MissingArgument",option);
00834             if (IsGeometry(argv[i]) == MagickFalse)
00835               ThrowImportInvalidArgumentException(option,argv[i]);
00836             break;
00837           }
00838         if (LocaleCompare("gravity",option+1) == 0)
00839           {
00840             long
00841               gravity;
00842 
00843             if (*option == '+')
00844               break;
00845             i++;
00846             if (i == (long) argc)
00847               ThrowImportException(OptionError,"MissingArgument",option);
00848             gravity=ParseMagickOption(MagickGravityOptions,MagickFalse,argv[i]);
00849             if (gravity < 0)
00850               ThrowImportException(OptionError,"UnrecognizedGravityType",
00851                 argv[i]);
00852             break;
00853           }
00854         ThrowImportException(OptionError,"UnrecognizedOption",option);
00855       }
00856       case 'h':
00857       {
00858         if (LocaleCompare("help",option+1) == 0)
00859           break;
00860         ThrowImportException(OptionError,"UnrecognizedOption",option);
00861       }
00862       case 'i':
00863       {
00864         if (LocaleCompare("identify",option+1) == 0)
00865           break;
00866         if (LocaleCompare("interlace",option+1) == 0)
00867           {
00868             long
00869               interlace;
00870 
00871             if (*option == '+')
00872               break;
00873             i++;
00874             if (i == (long) argc)
00875               ThrowImportException(OptionError,"MissingArgument",option);
00876             interlace=ParseMagickOption(MagickInterlaceOptions,MagickFalse,
00877               argv[i]);
00878             if (interlace < 0)
00879               ThrowImportException(OptionError,"UnrecognizedInterlaceType",
00880                 argv[i]);
00881             break;
00882           }
00883         if (LocaleCompare("interpolate",option+1) == 0)
00884           {
00885             long
00886               interpolate;
00887 
00888             if (*option == '+')
00889               break;
00890             i++;
00891             if (i == (long) argc)
00892               ThrowImportException(OptionError,"MissingArgument",option);
00893             interpolate=ParseMagickOption(MagickInterpolateOptions,MagickFalse,
00894               argv[i]);
00895             if (interpolate < 0)
00896               ThrowImportException(OptionError,"UnrecognizedInterpolateMethod",
00897                 argv[i]);
00898             break;
00899           }
00900         ThrowImportException(OptionError,"UnrecognizedOption",option);
00901       }
00902       case 'l':
00903       {
00904         if (LocaleCompare("label",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,"label",argv[i]);
00912             if (status == MagickFalse)
00913               ThrowImportException(OptionError,"UnrecognizedOption",argv[i]);
00914             break;
00915           }
00916         if (LocaleCompare("limit",option+1) == 0)
00917           {
00918             char
00919               *p;
00920 
00921             double
00922               value;
00923 
00924             long
00925               resource;
00926 
00927             if (*option == '+')
00928               break;
00929             i++;
00930             if (i == (long) argc)
00931               ThrowImportException(OptionError,"MissingArgument",option);
00932             resource=ParseMagickOption(MagickResourceOptions,MagickFalse,
00933               argv[i]);
00934             if (resource < 0)
00935               ThrowImportException(OptionError,"UnrecognizedResourceType",
00936                 argv[i]);
00937             i++;
00938             if (i == (long) argc)
00939               ThrowImportException(OptionError,"MissingArgument",option);
00940             value=strtod(argv[i],&p);
00941             if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
00942               ThrowImportInvalidArgumentException(option,argv[i]);
00943             break;
00944           }
00945         if (LocaleCompare("list",option+1) == 0)
00946           {
00947             long
00948               list;
00949 
00950             if (*option == '+')
00951               break;
00952             i++;
00953             if (i == (long) argc)
00954               ThrowImportException(OptionError,"MissingArgument",option);
00955             list=ParseMagickOption(MagickListOptions,MagickFalse,argv[i]);
00956             if (list < 0)
00957               ThrowImportException(OptionError,"UnrecognizedListType",argv[i]);
00958             (void) MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
00959               argv+j,exception);
00960             DestroyImport();
00961             return(MagickTrue);
00962           }
00963         if (LocaleCompare("log",option+1) == 0)
00964           {
00965             if (*option == '+')
00966               break;
00967             i++;
00968             if ((i == (long) argc) || (strchr(argv[i],'%') == (char *) NULL))
00969               ThrowImportException(OptionError,"MissingArgument",option);
00970             break;
00971           }
00972         ThrowImportException(OptionError,"UnrecognizedOption",option);
00973       }
00974       case 'm':
00975       {
00976         if (LocaleCompare("monitor",option+1) == 0)
00977           break;
00978         if (LocaleCompare("monochrome",option+1) == 0)
00979           {
00980             if (*option == '+')
00981               break;
00982             quantize_info->number_colors=2;
00983             quantize_info->colorspace=GRAYColorspace;
00984             break;
00985           }
00986         ThrowImportException(OptionError,"UnrecognizedOption",option);
00987       }
00988       case 'n':
00989       {
00990         if (LocaleCompare("negate",option+1) == 0)
00991           break;
00992         ThrowImportException(OptionError,"UnrecognizedOption",option);
00993       }
00994       case 'p':
00995       {
00996         if (LocaleCompare("page",option+1) == 0)
00997           {
00998             if (*option == '+')
00999               break;
01000             i++;
01001             if (i == (long) argc)
01002               ThrowImportException(OptionError,"MissingArgument",option);
01003             status=SetImageOption(image_info,"page",argv[i]);
01004             if (status == MagickFalse)
01005               ThrowImportException(OptionError,"UnrecognizedOption",argv[i]);
01006             break;
01007           }
01008         if (LocaleCompare("pause",option+1) == 0)
01009           {
01010             resource_info.pause=0;
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             resource_info.pause=(unsigned int) atoi(argv[i]);
01019             break;
01020           }
01021         if (LocaleCompare("ping",option+1) == 0)
01022           break;  /* deprecated option */
01023         if (LocaleCompare("pointsize",option+1) == 0)
01024           {
01025             if (*option == '+')
01026               break;
01027             i++;
01028             if (i == (long) argc)
01029               ThrowImportException(OptionError,"MissingArgument",option);
01030             if (IsGeometry(argv[i]) == MagickFalse)
01031               ThrowImportInvalidArgumentException(option,argv[i]);
01032             break;
01033           }
01034         ThrowImportException(OptionError,"UnrecognizedOption",option);
01035       }
01036       case 'q':
01037       {
01038         if (LocaleCompare("quality",option+1) == 0)
01039           {
01040             if (*option == '+')
01041               break;
01042             i++;
01043             if (i == (long) argc)
01044               ThrowImportException(OptionError,"MissingArgument",option);
01045             if (IsGeometry(argv[i]) == MagickFalse)
01046               ThrowImportInvalidArgumentException(option,argv[i]);
01047             break;
01048           }
01049         if (LocaleCompare("quantize",option+1) == 0)
01050           {
01051             long
01052               colorspace;
01053 
01054             if (*option == '+')
01055               break;
01056             i++;
01057             if (i == (long) (argc-1))
01058               ThrowImportException(OptionError,"MissingArgument",option);
01059             colorspace=ParseMagickOption(MagickColorspaceOptions,
01060               MagickFalse,argv[i]);
01061             if (colorspace < 0)
01062               ThrowImportException(OptionError,"UnrecognizedColorspace",
01063                 argv[i]);
01064             break;
01065           }
01066         if (LocaleCompare("quiet",option+1) == 0)
01067           break;
01068         ThrowImportException(OptionError,"UnrecognizedOption",option);
01069       }
01070       case 'r':
01071       {
01072         if (LocaleCompare("regard-warnings",option+1) == 0)
01073           break;
01074         if (LocaleCompare("repage",option+1) == 0)
01075           {
01076             if (*option == '+')
01077               break;
01078             i++;
01079             if (i == (long) (argc-1))
01080               ThrowImportException(OptionError,"MissingArgument",option);
01081             if (IsGeometry(argv[i]) == MagickFalse)
01082               ThrowImportInvalidArgumentException(option,argv[i]);
01083             break;
01084           }
01085         if (LocaleCompare("resize",option+1) == 0)
01086           {
01087             if (*option == '+')
01088               break;
01089             i++;
01090             if (i == (long) argc)
01091               ThrowImportException(OptionError,"MissingArgument",option);
01092             if (IsGeometry(argv[i]) == MagickFalse)
01093               ThrowImportInvalidArgumentException(option,argv[i]);
01094             break;
01095           }
01096         if (LocaleNCompare("respect-parentheses",option+1,17) == 0)
01097           {
01098             respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
01099             break;
01100           }
01101         if (LocaleCompare("rotate",option+1) == 0)
01102           {
01103             i++;
01104             if (i == (long) argc)
01105               ThrowImportException(OptionError,"MissingArgument",option);
01106             if (IsGeometry(argv[i]) == MagickFalse)
01107               ThrowImportInvalidArgumentException(option,argv[i]);
01108             break;
01109           }
01110         ThrowImportException(OptionError,"UnrecognizedOption",option);
01111       }
01112       case 's':
01113       {
01114         if (LocaleCompare("sampling-factor",option+1) == 0)
01115           {
01116             if (*option == '+')
01117               break;
01118             i++;
01119             if (i == (long) argc)
01120               ThrowImportException(OptionError,"MissingArgument",option);
01121             if (IsGeometry(argv[i]) == MagickFalse)
01122               ThrowImportInvalidArgumentException(option,argv[i]);
01123             break;
01124           }
01125         if (LocaleCompare("scene",option+1) == 0)
01126           {
01127             if (*option == '+')
01128               break;
01129             i++;
01130             if (i == (long) argc)
01131               ThrowImportException(OptionError,"MissingArgument",option);
01132             if (IsGeometry(argv[i]) == MagickFalse)
01133               ThrowImportInvalidArgumentException(option,argv[i]);
01134             break;
01135           }
01136         if (LocaleCompare("set",option+1) == 0)
01137           {
01138             i++;
01139             if (i == (long) argc)
01140               ThrowImportException(OptionError,"MissingArgument",option);
01141             if (*option == '+')
01142               break;
01143             i++;
01144             if (i == (long) argc)
01145               ThrowImportException(OptionError,"MissingArgument",option);
01146             break;
01147           }
01148         if (LocaleCompare("screen",option+1) == 0)
01149           {
01150             ximage_info.screen=(*option == '-') ? MagickTrue : MagickFalse;
01151             break;
01152           }
01153         if (LocaleCompare("seed",option+1) == 0)
01154           {
01155             if (*option == '+')
01156               break;
01157             i++;
01158             if (i == (long) (argc-1))
01159               ThrowImportException(OptionError,"MissingArgument",option);
01160             if (IsGeometry(argv[i]) == MagickFalse)
01161               ThrowImportInvalidArgumentException(option,argv[i]);
01162             break;
01163           }
01164         if (LocaleCompare("silent",option+1) == 0)
01165           {
01166             ximage_info.silent=(*option == '-') ? MagickTrue : MagickFalse;
01167             break;
01168           }
01169         if (LocaleCompare("snaps",option+1) == 0)
01170           {
01171             (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
01172             i++;
01173             if (i == (long) argc)
01174               ThrowImportException(OptionError,"MissingArgument",option);
01175             if (IsGeometry(argv[i]) == MagickFalse)
01176               ThrowImportInvalidArgumentException(option,argv[i]);
01177             snapshots=atol(argv[i]);
01178             break;
01179           }
01180         if (LocaleCompare("strip",option+1) == 0)
01181           break;
01182         if (LocaleCompare("support",option+1) == 0)
01183           {
01184             i++;  /* deprecated */
01185             break;
01186           }
01187         ThrowImportException(OptionError,"UnrecognizedOption",option);
01188       }
01189       case 't':
01190       {
01191         if (LocaleCompare("thumnail",option+1) == 0)
01192           {
01193             if (*option == '+')
01194               break;
01195             i++;
01196             if (i == (long) argc)
01197               ThrowImportException(OptionError,"MissingArgument",option);
01198             if (IsGeometry(argv[i]) == MagickFalse)
01199               ThrowImportInvalidArgumentException(option,argv[i]);
01200             break;
01201           }
01202         if (LocaleCompare("transparent",option+1) == 0)
01203           {
01204             i++;
01205             if (i == (long) argc)
01206               ThrowImportException(OptionError,"MissingArgument",option);
01207             break;
01208           }
01209         if (LocaleCompare("transparent-color",option+1) == 0)
01210           {
01211             if (*option == '+')
01212               break;
01213             i++;
01214             if (i == (long) (argc-1))
01215               ThrowImportException(OptionError,"MissingArgument",option);
01216             break;
01217           }
01218         if (LocaleCompare("treedepth",option+1) == 0)
01219           {
01220             quantize_info->tree_depth=0;
01221             if (*option == '+')
01222               break;
01223             i++;
01224             if (i == (long) argc)
01225               ThrowImportException(OptionError,"MissingArgument",option);
01226             if (IsGeometry(argv[i]) == MagickFalse)
01227               ThrowImportInvalidArgumentException(option,argv[i]);
01228             quantize_info->tree_depth=(unsigned long) atol(argv[i]);
01229             break;
01230           }
01231         if (LocaleCompare("trim",option+1) == 0)
01232           break;
01233         if (LocaleCompare("type",option+1) == 0)
01234           {
01235             long
01236               type;
01237 
01238             if (*option == '+')
01239               break;
01240             i++;
01241             if (i == (long) argc)
01242               ThrowImportException(OptionError,"MissingArgument",option);
01243             type=ParseMagickOption(MagickTypeOptions,MagickFalse,argv[i]);
01244             if (type < 0)
01245               ThrowImportException(OptionError,"UnrecognizedImageType",argv[i]);
01246             break;
01247           }
01248         ThrowImportException(OptionError,"UnrecognizedOption",option);
01249       }
01250       case 'w':
01251       {
01252         i++;
01253         if (i == (long) argc)
01254           ThrowImportException(OptionError,"MissingArgument",option);
01255         (void) CloneString(&target_window,argv[i]);
01256         break;
01257       }
01258       case 'v':
01259       {
01260         if (LocaleCompare("verbose",option+1) == 0)
01261           break;
01262         if ((LocaleCompare("version",option+1) == 0) ||
01263             (LocaleCompare("-version",option+1) == 0))
01264           {
01265             (void) fprintf(stdout,"Version: %s\n",
01266               GetMagickVersion((unsigned long *) NULL));
01267             (void) fprintf(stdout,"Copyright: %s\n",GetMagickCopyright());
01268             (void) fprintf(stdout,"Features: %s\n\n",GetMagickFeatures());
01269             break;
01270           }
01271         ThrowImportException(OptionError,"UnrecognizedOption",option);
01272       }
01273       case '?':
01274         break;
01275       default:
01276         ThrowImportException(OptionError,"UnrecognizedOption",option);
01277     }
01278     fire=ParseMagickOption(MagickImageListOptions,MagickFalse,option+1) < 0 ?
01279       MagickFalse : MagickTrue;
01280     if (fire != MagickFalse)
01281       FireImageStack(MagickFalse,MagickTrue,MagickTrue);
01282   }
01283   if (k != 0)
01284     ThrowImportException(OptionError,"UnbalancedParenthesis",argv[i]);
01285   if (i-- != argc)
01286     ThrowImportException(OptionError,"MissingAnImageFilename",argv[i]);
01287   if (image == (Image *) NULL)
01288     ThrowImportException(OptionError,"MissingAnImageFilename",argv[argc-1]);
01289   FinalizeImageSettings(image_info,image,MagickTrue);
01290   status&=WriteImages(image_info,image,filename,exception);
01291   DestroyImport();
01292   return(status != 0 ? MagickTrue : MagickFalse);
01293 #else
01294   (void) argc;
01295   (void) argv;
01296   (void) ThrowMagickException(exception,GetMagickModule(),MissingDelegateError,
01297     "DelegateLibrarySupportNotBuiltIn","`%s' (X11)",image_info->filename);
01298   return(ImportUsage());
01299 #endif
01300 }

Generated on 19 Nov 2009 for MagickWand by  doxygen 1.6.1