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

Generated on Sat Nov 22 23:45:25 2008 for MagickWand by  doxygen 1.5.7.1