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