00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
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
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
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
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
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
00339
00340 option=argv[i];
00341 if (LocaleCompare("display",option+1) == 0)
00342 {
00343
00344
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
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
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
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;
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++;
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 }