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 #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
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
00093
00094
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
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
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
00340
00341 option=argv[i];
00342 if (IsMagickOption(option) == MagickFalse)
00343 continue;
00344 if (LocaleCompare("display",option+1) == 0)
00345 {
00346
00347
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
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
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
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;
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++;
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 }