Home | History | Annotate | Download | only in MagickCore
      1 /*
      2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      3 %                                                                             %
      4 %                                                                             %
      5 %                                                                             %
      6 %                   OOO   PPPP   TTTTT  IIIII   OOO   N   N                   %
      7 %                  O   O  P   P    T      I    O   O  NN  N                   %
      8 %                  O   O  PPPP     T      I    O   O  N N N                   %
      9 %                  O   O  P        T      I    O   O  N  NN                   %
     10 %                   OOO   P        T    IIIII   OOO   N   N                   %
     11 %                                                                             %
     12 %                                                                             %
     13 %                         MagickCore Option Methods                           %
     14 %                                                                             %
     15 %                              Software Design                                %
     16 %                                   Cristy                                    %
     17 %                                 March 2000                                  %
     18 %                                                                             %
     19 %                                                                             %
     20 %  Copyright 1999-2019 ImageMagick Studio LLC, a non-profit organization      %
     21 %  dedicated to making software imaging solutions freely available.           %
     22 %                                                                             %
     23 %  You may not use this file except in compliance with the License.  You may  %
     24 %  obtain a copy of the License at                                            %
     25 %                                                                             %
     26 %    https://imagemagick.org/script/license.php                               %
     27 %                                                                             %
     28 %  Unless required by applicable law or agreed to in writing, software        %
     29 %  distributed under the License is distributed on an "AS IS" BASIS,          %
     30 %  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
     31 %  See the License for the specific language governing permissions and        %
     32 %  limitations under the License.                                             %
     33 %                                                                             %
     34 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     35 %
     36 %
     37 %
     38 */
     39 
     40 /*
     42   Include declarations.
     43 */
     44 #include "MagickCore/studio.h"
     45 #include "MagickCore/artifact.h"
     46 #include "MagickCore/cache.h"
     47 #include "MagickCore/color.h"
     48 #include "MagickCore/compare.h"
     49 #include "MagickCore/constitute.h"
     50 #include "MagickCore/distort.h"
     51 #include "MagickCore/draw.h"
     52 #include "MagickCore/effect.h"
     53 #include "MagickCore/exception.h"
     54 #include "MagickCore/exception-private.h"
     55 #include "MagickCore/fourier.h"
     56 #include "MagickCore/fx.h"
     57 #include "MagickCore/gem.h"
     58 #include "MagickCore/geometry.h"
     59 #include "MagickCore/image.h"
     60 #include "MagickCore/image-private.h"
     61 #include "MagickCore/layer.h"
     62 #include "MagickCore/mime-private.h"
     63 #include "MagickCore/memory_.h"
     64 #include "MagickCore/monitor.h"
     65 #include "MagickCore/montage.h"
     66 #include "MagickCore/morphology.h"
     67 #include "MagickCore/option.h"
     68 #include "MagickCore/option-private.h"
     69 #include "MagickCore/pixel.h"
     70 #include "MagickCore/policy.h"
     71 #include "MagickCore/property.h"
     72 #include "MagickCore/quantize.h"
     73 #include "MagickCore/quantum.h"
     74 #include "MagickCore/resample.h"
     75 #include "MagickCore/resource_.h"
     76 #include "MagickCore/splay-tree.h"
     77 #include "MagickCore/statistic.h"
     78 #include "MagickCore/string_.h"
     79 #include "MagickCore/threshold.h"
     80 #include "MagickCore/token.h"
     81 #include "MagickCore/utility.h"
     82 
     83 /*
     85   ImageMagick options.
     86 */
     87 static const OptionInfo
     88   AlignOptions[] =
     89   {
     90     { "Undefined", UndefinedAlign, UndefinedOptionFlag, MagickTrue },
     91     { "Center", CenterAlign, UndefinedOptionFlag, MagickFalse },
     92     { "End", RightAlign, UndefinedOptionFlag, MagickFalse },
     93     { "Left", LeftAlign, UndefinedOptionFlag, MagickFalse },
     94     { "Middle", CenterAlign, UndefinedOptionFlag, MagickFalse },
     95     { "Right", RightAlign, UndefinedOptionFlag, MagickFalse },
     96     { "Start", LeftAlign, UndefinedOptionFlag, MagickFalse },
     97     { (char *) NULL, UndefinedAlign, UndefinedOptionFlag, MagickFalse }
     98   },
     99   AlphaChannelOptions[] =
    100   {
    101     { "Undefined", UndefinedAlphaChannel, UndefinedOptionFlag, MagickTrue },
    102     { "Activate", ActivateAlphaChannel, UndefinedOptionFlag, MagickFalse },
    103     { "Associate", AssociateAlphaChannel, UndefinedOptionFlag, MagickFalse },
    104     { "Background", BackgroundAlphaChannel, UndefinedOptionFlag, MagickFalse },
    105     { "Copy", CopyAlphaChannel, UndefinedOptionFlag, MagickFalse },
    106     { "Deactivate", DeactivateAlphaChannel, UndefinedOptionFlag, MagickFalse },
    107     { "Discrete", DiscreteAlphaChannel, UndefinedOptionFlag, MagickFalse },
    108     { "Disassociate", DisassociateAlphaChannel, UndefinedOptionFlag, MagickFalse },
    109     { "Extract", ExtractAlphaChannel, UndefinedOptionFlag, MagickFalse },
    110     { "Off", OffAlphaChannel, UndefinedOptionFlag, MagickFalse },
    111     { "On", OnAlphaChannel, UndefinedOptionFlag, MagickFalse },
    112     { "Opaque", OpaqueAlphaChannel, UndefinedOptionFlag, MagickFalse },
    113     { "Remove", RemoveAlphaChannel, UndefinedOptionFlag, MagickFalse },
    114     { "Set", SetAlphaChannel, UndefinedOptionFlag, MagickFalse },
    115     { "Shape", ShapeAlphaChannel, UndefinedOptionFlag, MagickFalse },
    116     { "Reset", SetAlphaChannel, DeprecateOptionFlag, MagickTrue },
    117     { "Transparent", TransparentAlphaChannel, UndefinedOptionFlag, MagickFalse },
    118     { (char *) NULL, UndefinedAlphaChannel, UndefinedOptionFlag, MagickFalse }
    119   },
    120   AutoThresholdOptions[] =
    121   {
    122     { "Undefined", UndefinedThresholdMethod, UndefinedOptionFlag, MagickTrue },
    123     { "Kapur", KapurThresholdMethod, UndefinedOptionFlag, MagickFalse },
    124     { "OTSU", OTSUThresholdMethod, UndefinedOptionFlag, MagickFalse },
    125     { "Triangle", TriangleThresholdMethod, UndefinedOptionFlag, MagickFalse },
    126     { (char *) NULL, UndefinedThresholdMethod, UndefinedOptionFlag, MagickFalse }
    127   },
    128   BooleanOptions[] =
    129   {
    130     { "False", MagickFalse, UndefinedOptionFlag, MagickFalse },
    131     { "True", MagickTrue, UndefinedOptionFlag, MagickFalse },
    132     { "0", MagickFalse, UndefinedOptionFlag, MagickFalse },
    133     { "1", MagickTrue, UndefinedOptionFlag, MagickFalse },
    134     { (char *) NULL, MagickFalse, UndefinedOptionFlag, MagickFalse }
    135   },
    136   CacheOptions[] =
    137   {
    138     { "Disk", DiskCache, UndefinedOptionFlag, MagickFalse },
    139     { "Distributed", DistributedCache, UndefinedOptionFlag, MagickFalse },
    140     { "Map", MapCache, UndefinedOptionFlag, MagickFalse },
    141     { "Memory", MemoryCache, UndefinedOptionFlag, MagickFalse },
    142     { "Ping", PingCache, UndefinedOptionFlag, MagickFalse },
    143     { (char *) NULL, MagickFalse, UndefinedOptionFlag, MagickFalse }
    144   },
    145   ChannelOptions[] =
    146   {
    147     { "Undefined", UndefinedChannel, UndefinedOptionFlag, MagickTrue },
    148     /* special */
    149     { "All", CompositeChannels, UndefinedOptionFlag, MagickFalse },
    150     { "Sync", SyncChannels, UndefinedOptionFlag, MagickFalse },
    151     { "Default", DefaultChannels, UndefinedOptionFlag, MagickFalse },
    152     /* individual channel */
    153     { "A", AlphaChannel, UndefinedOptionFlag, MagickFalse },
    154     { "Alpha", AlphaChannel, UndefinedOptionFlag, MagickFalse },
    155     { "Black", BlackChannel, UndefinedOptionFlag, MagickFalse },
    156     { "B", BlueChannel, UndefinedOptionFlag, MagickFalse },
    157     { "Blue", BlueChannel, UndefinedOptionFlag, MagickFalse },
    158     { "C", CyanChannel, UndefinedOptionFlag, MagickFalse },
    159     { "Chroma", GreenChannel, UndefinedOptionFlag, MagickFalse },
    160     { "Cyan", CyanChannel, UndefinedOptionFlag, MagickFalse },
    161     { "Gray", GrayChannel, UndefinedOptionFlag, MagickFalse },
    162     { "G", GreenChannel, UndefinedOptionFlag, MagickFalse },
    163     { "Green", GreenChannel, UndefinedOptionFlag, MagickFalse },
    164     { "H", RedChannel, UndefinedOptionFlag, MagickFalse },
    165     { "Hue", RedChannel, UndefinedOptionFlag, MagickFalse },
    166     { "K", BlackChannel, UndefinedOptionFlag, MagickFalse },
    167     { "L", BlueChannel, UndefinedOptionFlag, MagickFalse },
    168     { "Lightness", BlueChannel, UndefinedOptionFlag, MagickFalse },
    169     { "Luminance", BlueChannel, UndefinedOptionFlag, MagickFalse },
    170     { "Luminosity", BlueChannel, DeprecateOptionFlag, MagickTrue },
    171     { "M", MagentaChannel, UndefinedOptionFlag, MagickFalse },
    172     { "Magenta", MagentaChannel, UndefinedOptionFlag, MagickFalse },
    173     { "Matte", AlphaChannel, DeprecateOptionFlag, MagickTrue },/*depreciate*/
    174     { "Meta", MetaChannel, UndefinedOptionFlag, MagickFalse },
    175     { "Opacity", AlphaChannel, DeprecateOptionFlag, MagickTrue },/*depreciate*/
    176     { "R", RedChannel, UndefinedOptionFlag, MagickFalse },
    177     { "Red", RedChannel, UndefinedOptionFlag, MagickFalse },
    178     { "S", GreenChannel, UndefinedOptionFlag, MagickFalse },
    179     { "Saturation", GreenChannel, UndefinedOptionFlag, MagickFalse },
    180     { "Y", YellowChannel, UndefinedOptionFlag, MagickFalse },
    181     { "Yellow", YellowChannel, UndefinedOptionFlag, MagickFalse },
    182     { "0", (ssize_t) (1L << 0), UndefinedOptionFlag, MagickFalse },
    183     { "1", (ssize_t) (1L << 1), UndefinedOptionFlag, MagickFalse },
    184     { "2", (ssize_t) (1L << 2), UndefinedOptionFlag, MagickFalse },
    185     { "3", (ssize_t) (1L << 3), UndefinedOptionFlag, MagickFalse },
    186     { "4", (ssize_t) (1L << 4), UndefinedOptionFlag, MagickFalse },
    187     { "5", (ssize_t) (1L << 5), UndefinedOptionFlag, MagickFalse },
    188     { "6", (ssize_t) (1L << 6), UndefinedOptionFlag, MagickFalse },
    189     { "7", (ssize_t) (1L << 7), UndefinedOptionFlag, MagickFalse },
    190     { "8", (ssize_t) (1L << 8), UndefinedOptionFlag, MagickFalse },
    191     { "9", (ssize_t) (1L << 9), UndefinedOptionFlag, MagickFalse },
    192     { "10", (ssize_t) (1L << 10), UndefinedOptionFlag, MagickFalse },
    193     { "11", (ssize_t) (1L << 11), UndefinedOptionFlag, MagickFalse },
    194     { "12", (ssize_t) (1L << 12), UndefinedOptionFlag, MagickFalse },
    195     { "13", (ssize_t) (1L << 13), UndefinedOptionFlag, MagickFalse },
    196     { "14", (ssize_t) (1L << 14), UndefinedOptionFlag, MagickFalse },
    197     { "15", (ssize_t) (1L << 15), UndefinedOptionFlag, MagickFalse },
    198     { "16", (ssize_t) (1L << 16), UndefinedOptionFlag, MagickFalse },
    199     { "17", (ssize_t) (1L << 17), UndefinedOptionFlag, MagickFalse },
    200     { "18", (ssize_t) (1L << 18), UndefinedOptionFlag, MagickFalse },
    201     { "19", (ssize_t) (1L << 19), UndefinedOptionFlag, MagickFalse },
    202     { "20", (ssize_t) (1L << 20), UndefinedOptionFlag, MagickFalse },
    203     { "21", (ssize_t) (1L << 21), UndefinedOptionFlag, MagickFalse },
    204     { "22", (ssize_t) (1L << 22), UndefinedOptionFlag, MagickFalse },
    205     { "23", (ssize_t) (1L << 23), UndefinedOptionFlag, MagickFalse },
    206     { "24", (ssize_t) (1L << 24), UndefinedOptionFlag, MagickFalse },
    207     { "25", (ssize_t) (1L << 25), UndefinedOptionFlag, MagickFalse },
    208     { "26", (ssize_t) (1L << 26), UndefinedOptionFlag, MagickFalse },
    209     { "27", (ssize_t) (1L << 27), UndefinedOptionFlag, MagickFalse },
    210     { "28", (ssize_t) (1L << 28), UndefinedOptionFlag, MagickFalse },
    211     { "29", (ssize_t) (1L << 29), UndefinedOptionFlag, MagickFalse },
    212     { "30", (ssize_t) (1L << 30), UndefinedOptionFlag, MagickFalse },
    213     { "31", (ssize_t) (1L << 31), UndefinedOptionFlag, MagickFalse },
    214     { (char *) NULL, UndefinedChannel, UndefinedOptionFlag, MagickFalse }
    215   },
    216   ClassOptions[] =
    217   {
    218     { "Undefined", UndefinedClass, UndefinedOptionFlag, MagickTrue },
    219     { "DirectClass", DirectClass, UndefinedOptionFlag, MagickFalse },
    220     { "PseudoClass", PseudoClass, UndefinedOptionFlag, MagickFalse },
    221     { (char *) NULL, UndefinedClass, UndefinedOptionFlag, MagickFalse }
    222   },
    223   CLIOptions[] =
    224   {
    225     { "Setting", 0, UndefinedOptionFlag, MagickFalse },
    226     { "  adjoin", 0, UndefinedOptionFlag, MagickFalse },
    227     { "  affine", 0, UndefinedOptionFlag, MagickFalse },
    228     { "  alpha", 0, UndefinedOptionFlag, MagickFalse },
    229     { "  antialias", 0, UndefinedOptionFlag, MagickFalse },
    230     { "  authenticate", 0, UndefinedOptionFlag, MagickFalse },
    231     { "  background", 0, UndefinedOptionFlag, MagickFalse },
    232     { "  bias", 0, UndefinedOptionFlag, MagickFalse },
    233     { "  black-point-compensation", 0, UndefinedOptionFlag, MagickFalse },
    234     { "  blue-primary", 0, UndefinedOptionFlag, MagickFalse },
    235     { "  bordercolor", 0, UndefinedOptionFlag, MagickFalse },
    236     { "  caption", 0, UndefinedOptionFlag, MagickFalse },
    237     { "  channel", 0, UndefinedOptionFlag, MagickFalse },
    238     { "  comment", 0, UndefinedOptionFlag, MagickFalse },
    239     { "  compress", 0, UndefinedOptionFlag, MagickFalse },
    240     { "  debug", 0, UndefinedOptionFlag, MagickFalse },
    241     { "  define", 0, UndefinedOptionFlag, MagickFalse },
    242     { "  delay", 0, UndefinedOptionFlag, MagickFalse },
    243     { "  density", 0, UndefinedOptionFlag, MagickFalse },
    244     { "  depth", 0, UndefinedOptionFlag, MagickFalse },
    245     { "  direction", 0, UndefinedOptionFlag, MagickFalse },
    246     { "  display", 0, UndefinedOptionFlag, MagickFalse },
    247     { "  dispose", 0, UndefinedOptionFlag, MagickFalse },
    248     { "  dither", 0, UndefinedOptionFlag, MagickFalse },
    249     { "  encoding", 0, UndefinedOptionFlag, MagickFalse },
    250     { "  endian", 0, UndefinedOptionFlag, MagickFalse },
    251     { "  extract", 0, UndefinedOptionFlag, MagickFalse },
    252     { "  family", 0, UndefinedOptionFlag, MagickFalse },
    253     { "  fill", 0, UndefinedOptionFlag, MagickFalse },
    254     { "  filter", 0, UndefinedOptionFlag, MagickFalse },
    255     { "  font", 0, UndefinedOptionFlag, MagickFalse },
    256     { "  format", 0, UndefinedOptionFlag, MagickFalse },
    257     { "  fuzz", 0, UndefinedOptionFlag, MagickFalse },
    258     { "  geometry", 0, UndefinedOptionFlag, MagickFalse },
    259     { "  gravity", 0, UndefinedOptionFlag, MagickFalse },
    260     { "  green-primary", 0, UndefinedOptionFlag, MagickFalse },
    261     { "  interlace", 0, UndefinedOptionFlag, MagickFalse },
    262     { "  intent", 0, UndefinedOptionFlag, MagickFalse },
    263     { "  interpolate", 0, UndefinedOptionFlag, MagickFalse },
    264     { "  label", 0, UndefinedOptionFlag, MagickFalse },
    265     { "  limit", 0, UndefinedOptionFlag, MagickFalse },
    266     { "  linewidth", 0, UndefinedOptionFlag, MagickFalse },
    267     { "  log", 0, UndefinedOptionFlag, MagickFalse },
    268     { "  loop", 0, UndefinedOptionFlag, MagickFalse },
    269     { "  mattecolor", 0, UndefinedOptionFlag, MagickFalse },
    270     { "  monitor", 0, UndefinedOptionFlag, MagickFalse },
    271     { "  orient", 0, UndefinedOptionFlag, MagickFalse },
    272     { "  page", 0, UndefinedOptionFlag, MagickFalse },
    273     { "  pointsize", 0, UndefinedOptionFlag, MagickFalse },
    274     { "  preview", 0, UndefinedOptionFlag, MagickFalse },
    275     { "  quality", 0, UndefinedOptionFlag, MagickFalse },
    276     { "  quiet", 0, UndefinedOptionFlag, MagickFalse },
    277     { "  read-mask", 0, UndefinedOptionFlag, MagickFalse },
    278     { "  red-primary", 0, UndefinedOptionFlag, MagickFalse },
    279     { "  region", 0, UndefinedOptionFlag, MagickFalse },
    280     { "  render", 0, UndefinedOptionFlag, MagickFalse },
    281     { "  repage", 0, UndefinedOptionFlag, MagickFalse },
    282     { "  sampling-factor", 0, UndefinedOptionFlag, MagickFalse },
    283     { "  scene", 0, UndefinedOptionFlag, MagickFalse },
    284     { "  seed", 0, UndefinedOptionFlag, MagickFalse },
    285     { "  size", 0, UndefinedOptionFlag, MagickFalse },
    286     { "  stretch", 0, UndefinedOptionFlag, MagickFalse },
    287     { "  stroke", 0, UndefinedOptionFlag, MagickFalse },
    288     { "  strokewidth", 0, UndefinedOptionFlag, MagickFalse },
    289     { "  style", 0, UndefinedOptionFlag, MagickFalse },
    290     { "  texture", 0, UndefinedOptionFlag, MagickFalse },
    291     { "  tile", 0, UndefinedOptionFlag, MagickFalse },
    292     { "  transparent-color", 0, UndefinedOptionFlag, MagickFalse },
    293     { "  treedepth", 0, UndefinedOptionFlag, MagickFalse },
    294     { "  type", 0, UndefinedOptionFlag, MagickFalse },
    295     { "  undercolor", 0, UndefinedOptionFlag, MagickFalse },
    296     { "  units", 0, UndefinedOptionFlag, MagickFalse },
    297     { "  verbose", 0, UndefinedOptionFlag, MagickFalse },
    298     { "  virtual-pixel", 0, UndefinedOptionFlag, MagickFalse },
    299     { "  weight", 0, UndefinedOptionFlag, MagickFalse },
    300     { "  write-mask", 0, UndefinedOptionFlag, MagickFalse },
    301     { "Operator", 0, UndefinedOptionFlag, MagickFalse },
    302     { "  annotate", 0, UndefinedOptionFlag, MagickFalse },
    303     { "  black-threshold", 0, UndefinedOptionFlag, MagickFalse },
    304     { "  blur", 0, UndefinedOptionFlag, MagickFalse },
    305     { "  border", 0, UndefinedOptionFlag, MagickFalse },
    306     { "  charcoal", 0, UndefinedOptionFlag, MagickFalse },
    307     { "  chop", 0, UndefinedOptionFlag, MagickFalse },
    308     { "  clip", 0, UndefinedOptionFlag, MagickFalse },
    309     { "  clip-path", 0, UndefinedOptionFlag, MagickFalse },
    310     { "  clip-mask", 0, UndefinedOptionFlag, MagickFalse },
    311     { "  colors", 0, UndefinedOptionFlag, MagickFalse },
    312     { "  colorize", 0, UndefinedOptionFlag, MagickFalse },
    313     { "  colorspace", 0, UndefinedOptionFlag, MagickFalse },
    314     { "  compose", 0, UndefinedOptionFlag, MagickFalse },
    315     { "  contrast", 0, UndefinedOptionFlag, MagickFalse },
    316     { "  convolve", 0, UndefinedOptionFlag, MagickFalse },
    317     { "  crop", 0, UndefinedOptionFlag, MagickFalse },
    318     { "  cycle", 0, UndefinedOptionFlag, MagickFalse },
    319     { "  despeckle", 0, UndefinedOptionFlag, MagickFalse },
    320     { "  draw", 0, UndefinedOptionFlag, MagickFalse },
    321     { "  edge", 0, UndefinedOptionFlag, MagickFalse },
    322     { "  emboss", 0, UndefinedOptionFlag, MagickFalse },
    323     { "  enhance", 0, UndefinedOptionFlag, MagickFalse },
    324     { "  equalize", 0, UndefinedOptionFlag, MagickFalse },
    325     { "  evaluate", 0, UndefinedOptionFlag, MagickFalse },
    326     { "  extent", 0, UndefinedOptionFlag, MagickFalse },
    327     { "  flip", 0, UndefinedOptionFlag, MagickFalse },
    328     { "  flop", 0, UndefinedOptionFlag, MagickFalse },
    329     { "  floodfill", 0, UndefinedOptionFlag, MagickFalse },
    330     { "  frame", 0, UndefinedOptionFlag, MagickFalse },
    331     { "  gamma", 0, UndefinedOptionFlag, MagickFalse },
    332     { "  gaussian-blur", 0, UndefinedOptionFlag, MagickFalse },
    333     { "  grayscale", 0, UndefinedOptionFlag, MagickFalse },
    334     { "  implode", 0, UndefinedOptionFlag, MagickFalse },
    335     { "  lat", 0, UndefinedOptionFlag, MagickFalse },
    336     { "  level", 0, UndefinedOptionFlag, MagickFalse },
    337     { "  map", 0, UndefinedOptionFlag, MagickFalse },
    338     { "  median", 0, UndefinedOptionFlag, MagickFalse },
    339     { "  modulate", 0, UndefinedOptionFlag, MagickFalse },
    340     { "  monochrome", 0, UndefinedOptionFlag, MagickFalse },
    341     { "  negate", 0, UndefinedOptionFlag, MagickFalse },
    342     { "  noise", 0, UndefinedOptionFlag, MagickFalse },
    343     { "  normalize", 0, UndefinedOptionFlag, MagickFalse },
    344     { "  opaque", 0, UndefinedOptionFlag, MagickFalse },
    345     { "  ordered-dither", 0, UndefinedOptionFlag, MagickFalse },
    346     { "  paint", 0, UndefinedOptionFlag, MagickFalse },
    347     { "  posterize", 0, UndefinedOptionFlag, MagickFalse },
    348     { "  raise", 0, UndefinedOptionFlag, MagickFalse },
    349     { "  profile", 0, UndefinedOptionFlag, MagickFalse },
    350     { "  radial-blur", 0, UndefinedOptionFlag, MagickFalse },
    351     { "  raise", 0, UndefinedOptionFlag, MagickFalse },
    352     { "  random-threshold", 0, UndefinedOptionFlag, MagickFalse },
    353     { "  range-threshold", 0, UndefinedOptionFlag, MagickFalse },
    354     { "  resample", 0, UndefinedOptionFlag, MagickFalse },
    355     { "  resize", 0, UndefinedOptionFlag, MagickFalse },
    356     { "  roll", 0, UndefinedOptionFlag, MagickFalse },
    357     { "  rotate", 0, UndefinedOptionFlag, MagickFalse },
    358     { "  sample", 0, UndefinedOptionFlag, MagickFalse },
    359     { "  scale", 0, UndefinedOptionFlag, MagickFalse },
    360     { "  sepia-tone", 0, UndefinedOptionFlag, MagickFalse },
    361     { "  segment", 0, UndefinedOptionFlag, MagickFalse },
    362     { "  shade", 0, UndefinedOptionFlag, MagickFalse },
    363     { "  shadow", 0, UndefinedOptionFlag, MagickFalse },
    364     { "  sharpen", 0, UndefinedOptionFlag, MagickFalse },
    365     { "  shave", 0, UndefinedOptionFlag, MagickFalse },
    366     { "  shear", 0, UndefinedOptionFlag, MagickFalse },
    367     { "  sigmoidal-contrast", 0, UndefinedOptionFlag, MagickFalse },
    368     { "  solarize", 0, UndefinedOptionFlag, MagickFalse },
    369     { "  splice", 0, UndefinedOptionFlag, MagickFalse },
    370     { "  spread", 0, UndefinedOptionFlag, MagickFalse },
    371     { "  strip", 0, UndefinedOptionFlag, MagickFalse },
    372     { "  swirl", 0, UndefinedOptionFlag, MagickFalse },
    373     { "  threshold", 0, UndefinedOptionFlag, MagickFalse },
    374     { "  transparent", 0, UndefinedOptionFlag, MagickFalse },
    375     { "  thumbnail", 0, UndefinedOptionFlag, MagickFalse },
    376     { "  tint", 0, UndefinedOptionFlag, MagickFalse },
    377     { "  transform", 0, UndefinedOptionFlag, MagickFalse },
    378     { "  trim", 0, UndefinedOptionFlag, MagickFalse },
    379     { "  unsharp", 0, UndefinedOptionFlag, MagickFalse },
    380     { "  version", 0, UndefinedOptionFlag, MagickFalse },
    381     { "  wave", 0, UndefinedOptionFlag, MagickFalse },
    382     { "  white-point", 0, UndefinedOptionFlag, MagickFalse },
    383     { "  white-threshold", 0, UndefinedOptionFlag, MagickFalse },
    384     { "Channel Operator", 0, UndefinedOptionFlag, MagickFalse },
    385     { "  channel-fx", 0, UndefinedOptionFlag, MagickFalse },
    386     { "  separate", 0, UndefinedOptionFlag, MagickFalse },
    387     { "Sequence Operator", 0, UndefinedOptionFlag, MagickFalse },
    388     { "  append", 0, UndefinedOptionFlag, MagickFalse },
    389     { "  affinity", 0, UndefinedOptionFlag, MagickFalse },
    390     { "  average", 0, UndefinedOptionFlag, MagickFalse },
    391     { "  clut", 0, UndefinedOptionFlag, MagickFalse },
    392     { "  coalesce", 0, UndefinedOptionFlag, MagickFalse },
    393     { "  combine", 0, UndefinedOptionFlag, MagickFalse },
    394     { "  compare", 0, UndefinedOptionFlag, MagickFalse },
    395     { "  complex", 0, UndefinedOptionFlag, MagickFalse },
    396     { "  composite", 0, UndefinedOptionFlag, MagickFalse },
    397     { "  copy", 0, UndefinedOptionFlag, MagickFalse },
    398     { "  crop", 0, UndefinedOptionFlag, MagickFalse },
    399     { "  debug", 0, UndefinedOptionFlag, MagickFalse },
    400     { "  deconstruct", 0, UndefinedOptionFlag, MagickFalse },
    401     { "  delete", 0, UndefinedOptionFlag, MagickFalse },
    402     { "  evaluate-sequence", 0, UndefinedOptionFlag, MagickFalse },
    403     { "  fft", 0, UndefinedOptionFlag, MagickFalse },
    404     { "  flatten", 0, UndefinedOptionFlag, MagickFalse },
    405     { "  fx", 0, UndefinedOptionFlag, MagickFalse },
    406     { "  hald-clut", 0, UndefinedOptionFlag, MagickFalse },
    407     { "  ift", 0, UndefinedOptionFlag, MagickFalse },
    408     { "  identify", 0, UndefinedOptionFlag, MagickFalse },
    409     { "  insert", 0, UndefinedOptionFlag, MagickFalse },
    410     { "  layers", 0, UndefinedOptionFlag, MagickFalse },
    411     { "  limit", 0, UndefinedOptionFlag, MagickFalse },
    412     { "  map", 0, UndefinedOptionFlag, MagickFalse },
    413     { "  maximum", 0, UndefinedOptionFlag, MagickFalse },
    414     { "  minimum", 0, UndefinedOptionFlag, MagickFalse },
    415     { "  morph", 0, UndefinedOptionFlag, MagickFalse },
    416     { "  mosaic", 0, UndefinedOptionFlag, MagickFalse },
    417     { "  optimize", 0, UndefinedOptionFlag, MagickFalse },
    418     { "  print", 0, UndefinedOptionFlag, MagickFalse },
    419     { "  process", 0, UndefinedOptionFlag, MagickFalse },
    420     { "  quiet", 0, UndefinedOptionFlag, MagickFalse },
    421     { "  swap", 0, UndefinedOptionFlag, MagickFalse },
    422     { "  write", 0, UndefinedOptionFlag, MagickFalse },
    423     { "Geometry", 0, UndefinedOptionFlag, MagickFalse },
    424     { "  adaptive-resize", 0, UndefinedOptionFlag, MagickFalse },
    425     { "  border", 0, UndefinedOptionFlag, MagickFalse },
    426     { "  borderwidth", 0, UndefinedOptionFlag, MagickFalse },
    427     { "  chop", 0, UndefinedOptionFlag, MagickFalse },
    428     { "  crop", 0, UndefinedOptionFlag, MagickFalse },
    429     { "  density", 0, UndefinedOptionFlag, MagickFalse },
    430     { "  extent", 0, UndefinedOptionFlag, MagickFalse },
    431     { "  extract", 0, UndefinedOptionFlag, MagickFalse },
    432     { "  frame", 0, UndefinedOptionFlag, MagickFalse },
    433     { "  geometry", 0, UndefinedOptionFlag, MagickFalse },
    434     { "  iconGeometry", 0, UndefinedOptionFlag, MagickFalse },
    435     { "  liquid-rescale", 0, UndefinedOptionFlag, MagickFalse },
    436     { "  page", 0, UndefinedOptionFlag, MagickFalse },
    437     { "  region", 0, UndefinedOptionFlag, MagickFalse },
    438     { "  repage", 0, UndefinedOptionFlag, MagickFalse },
    439     { "  resize", 0, UndefinedOptionFlag, MagickFalse },
    440     { "  sample", 0, UndefinedOptionFlag, MagickFalse },
    441     { "  scale", 0, UndefinedOptionFlag, MagickFalse },
    442     { "  shave", 0, UndefinedOptionFlag, MagickFalse },
    443     { "  splice", 0, UndefinedOptionFlag, MagickFalse },
    444     { "  thumbnail", 0, UndefinedOptionFlag, MagickFalse },
    445     { "  window", 0, UndefinedOptionFlag, MagickFalse },
    446     { "Stack", 0, UndefinedOptionFlag, MagickFalse },
    447     { "  clone", 0, UndefinedOptionFlag, MagickFalse },
    448     { "  delete", 0, UndefinedOptionFlag, MagickFalse },
    449     { "  insert", 0, UndefinedOptionFlag, MagickFalse },
    450     { "  swap", 0, UndefinedOptionFlag, MagickFalse },
    451     { (char *) NULL, 0, UndefinedOptionFlag, MagickFalse }
    452   },
    453   ClipPathOptions[] =
    454   {
    455     { "Undefined", UndefinedPathUnits, UndefinedOptionFlag, MagickTrue },
    456     { "ObjectBoundingBox", ObjectBoundingBox, UndefinedOptionFlag, MagickFalse },
    457     { "UserSpace", UserSpace, UndefinedOptionFlag, MagickFalse },
    458     { "UserSpaceOnUse", UserSpaceOnUse, UndefinedOptionFlag, MagickFalse },
    459     { (char *) NULL, UndefinedPathUnits, UndefinedOptionFlag, MagickFalse }
    460   },
    461   ColorspaceOptions[] =
    462   {
    463     { "Undefined", UndefinedColorspace, UndefinedOptionFlag, MagickTrue },
    464     { "CIELab", LabColorspace, UndefinedOptionFlag, MagickFalse },
    465     { "CMY", CMYColorspace, UndefinedOptionFlag, MagickFalse },
    466     { "CMYK", CMYKColorspace, UndefinedOptionFlag, MagickFalse },
    467     { "Gray", GRAYColorspace, UndefinedOptionFlag, MagickFalse },
    468     { "HCL", HCLColorspace, UndefinedOptionFlag, MagickFalse },
    469     { "HCLp", HCLpColorspace, UndefinedOptionFlag, MagickFalse },
    470     { "HSB", HSBColorspace, UndefinedOptionFlag, MagickFalse },
    471     { "HSI", HSIColorspace, UndefinedOptionFlag, MagickFalse },
    472     { "HSL", HSLColorspace, UndefinedOptionFlag, MagickFalse },
    473     { "HSV", HSVColorspace, UndefinedOptionFlag, MagickFalse },
    474     { "HWB", HWBColorspace, UndefinedOptionFlag, MagickFalse },
    475     { "Lab", LabColorspace, UndefinedOptionFlag, MagickFalse },
    476     { "LCH", LCHColorspace, UndefinedOptionFlag, MagickFalse },
    477     { "LCHab", LCHabColorspace, UndefinedOptionFlag, MagickFalse },
    478     { "LCHuv", LCHuvColorspace, UndefinedOptionFlag, MagickFalse },
    479     { "LinearGray", LinearGRAYColorspace, UndefinedOptionFlag, MagickFalse },
    480     { "LMS", LMSColorspace, UndefinedOptionFlag, MagickFalse },
    481     { "Log", LogColorspace, UndefinedOptionFlag, MagickFalse },
    482     { "Luv", LuvColorspace, UndefinedOptionFlag, MagickFalse },
    483     { "OHTA", OHTAColorspace, UndefinedOptionFlag, MagickFalse },
    484     { "Rec601YCbCr", Rec601YCbCrColorspace, UndefinedOptionFlag, MagickFalse },
    485     { "Rec709YCbCr", Rec709YCbCrColorspace, UndefinedOptionFlag, MagickFalse },
    486     { "RGB", RGBColorspace, UndefinedOptionFlag, MagickFalse },
    487     { "scRGB", scRGBColorspace, UndefinedOptionFlag, MagickFalse },
    488     { "sRGB", sRGBColorspace, UndefinedOptionFlag, MagickFalse },
    489     { "Transparent", TransparentColorspace, UndefinedOptionFlag, MagickFalse },
    490     { "xyY", xyYColorspace, UndefinedOptionFlag, MagickFalse },
    491     { "XYZ", XYZColorspace, UndefinedOptionFlag, MagickFalse },
    492     { "YCbCr", YCbCrColorspace, UndefinedOptionFlag, MagickFalse },
    493     { "YDbDr", YDbDrColorspace, UndefinedOptionFlag, MagickFalse },
    494     { "YCC", YCCColorspace, UndefinedOptionFlag, MagickFalse },
    495     { "YIQ", YIQColorspace, UndefinedOptionFlag, MagickFalse },
    496     { "YPbPr", YPbPrColorspace, UndefinedOptionFlag, MagickFalse },
    497     { "YUV", YUVColorspace, UndefinedOptionFlag, MagickFalse },
    498     { (char *) NULL, UndefinedColorspace, UndefinedOptionFlag, MagickFalse }
    499   },
    500   ComplexOptions[] =
    501   {
    502     { "Undefined", UndefinedComplexOperator, UndefinedOptionFlag, MagickTrue },
    503     { "Add", AddComplexOperator, UndefinedOptionFlag, MagickFalse },
    504     { "Conjugate", ConjugateComplexOperator, UndefinedOptionFlag, MagickFalse },
    505     { "Divide", DivideComplexOperator, UndefinedOptionFlag, MagickFalse },
    506     { "MagnitudePhase", MagnitudePhaseComplexOperator, UndefinedOptionFlag, MagickFalse },
    507     { "Multiply", MultiplyComplexOperator, UndefinedOptionFlag, MagickFalse },
    508     { "RealImaginary", RealImaginaryComplexOperator, UndefinedOptionFlag, MagickFalse },
    509     { "Subtract", SubtractComplexOperator, UndefinedOptionFlag, MagickFalse },
    510     { (char *) NULL, UndefinedComplexOperator, UndefinedOptionFlag, MagickFalse }
    511   },
    512   CommandOptions[] =
    513   {
    514     /*
    515       Must be ordered lexigraphically.
    516     */
    517     { "+alpha", 1L, DeprecateOptionFlag, MagickTrue },
    518     { "-alpha", 1L, SimpleOperatorFlag, MagickFalse },
    519     { "+background", 0L, ImageInfoOptionFlag, MagickFalse },
    520     { "-background", 1L, ImageInfoOptionFlag, MagickFalse },
    521     { "+format", 0L, ImageInfoOptionFlag, MagickFalse },
    522     { "-format", 1L, ImageInfoOptionFlag | NeverInterpretArgsFlag, MagickFalse },
    523     { "-quiet", 0L, GlobalOptionFlag | FireOptionFlag, MagickFalse },
    524     { "+quiet", 0L, GlobalOptionFlag | FireOptionFlag, MagickFalse },
    525     { "-regard-warnings", 0L, ImageInfoOptionFlag, MagickFalse },
    526     { "+regard-warnings", 0L, ImageInfoOptionFlag, MagickFalse },
    527     { "+repage", 0L, SimpleOperatorFlag, MagickFalse },
    528     { "-repage", 1L, SimpleOperatorFlag, MagickFalse },
    529     { "+size", 0L, ImageInfoOptionFlag, MagickFalse },
    530     { "-size", 1L, ImageInfoOptionFlag, MagickFalse },
    531     { "+virtual-pixel", 0L, ImageInfoOptionFlag, MagickFalse },
    532     { "-virtual-pixel", 1L, ImageInfoOptionFlag, MagickFalse },
    533     { "+blur", 0L, DeprecateOptionFlag, MagickTrue },
    534     { "-blur", 1L, SimpleOperatorFlag, MagickFalse },
    535     { "+resize", 1L, DeprecateOptionFlag, MagickTrue },
    536     { "-resize", 1L, SimpleOperatorFlag, MagickFalse },
    537     { "(", 0L, NoImageOperatorFlag, MagickTrue },
    538     { ")", 0L, NoImageOperatorFlag, MagickTrue },
    539     { "{", 0L, NoImageOperatorFlag, MagickTrue },
    540     { "}", 0L, NoImageOperatorFlag, MagickTrue },
    541     { "--", 1L, NoImageOperatorFlag, MagickTrue },
    542     { "+adaptive-blur", 1L, DeprecateOptionFlag, MagickTrue },
    543     { "-adaptive-blur", 1L, SimpleOperatorFlag, MagickFalse },
    544     { "+adaptive-resize", 1L, DeprecateOptionFlag, MagickTrue },
    545     { "-adaptive-resize", 1L, SimpleOperatorFlag, MagickFalse },
    546     { "+adaptive-sharpen", 1L, DeprecateOptionFlag, MagickTrue },
    547     { "-adaptive-sharpen", 1L, SimpleOperatorFlag, MagickFalse },
    548     { "-adjoin", 0L, ImageInfoOptionFlag, MagickFalse },
    549     { "+adjoin", 0L, ImageInfoOptionFlag, MagickFalse },
    550     { "+affine", 0L, ReplacedOptionFlag | DrawInfoOptionFlag, MagickTrue },
    551     { "-affine", 1L, ReplacedOptionFlag | DrawInfoOptionFlag, MagickTrue },
    552     { "+affinity", 0L, DeprecateOptionFlag, MagickTrue },
    553     { "-affinity", 1L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    554     { "+mattecolor", 0L, ImageInfoOptionFlag, MagickFalse },
    555     { "-mattecolor", 1L, ImageInfoOptionFlag, MagickFalse },
    556     { "+annotate", 0L, DeprecateOptionFlag, MagickTrue },
    557     { "-annotate", 2L, SimpleOperatorFlag | AlwaysInterpretArgsFlag, MagickFalse },
    558     { "-antialias", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    559     { "+antialias", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    560     { "-append", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    561     { "+append", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    562     { "+attenuate", 0L, ImageInfoOptionFlag, MagickFalse },
    563     { "-attenuate", 1L, ImageInfoOptionFlag, MagickFalse },
    564     { "+authenticate", 0L, ImageInfoOptionFlag, MagickFalse },
    565     { "-authenticate", 1L, ImageInfoOptionFlag, MagickFalse },
    566     { "+auto-gamma", 0L, DeprecateOptionFlag, MagickTrue },
    567     { "-auto-gamma", 0L, SimpleOperatorFlag, MagickFalse },
    568     { "+auto-level", 0L, DeprecateOptionFlag, MagickTrue },
    569     { "-auto-level", 0L, SimpleOperatorFlag, MagickFalse },
    570     { "+auto-orient", 0L, DeprecateOptionFlag, MagickTrue },
    571     { "-auto-orient", 0L, SimpleOperatorFlag, MagickFalse },
    572     { "+auto-threshold", 1L, DeprecateOptionFlag, MagickTrue },
    573     { "-auto-threshold", 1L, SimpleOperatorFlag, MagickFalse },
    574     { "+average", 0L, DeprecateOptionFlag, MagickTrue },
    575     { "-average", 0L, ReplacedOptionFlag | ListOperatorFlag | FireOptionFlag, MagickTrue },
    576     { "+backdrop", 0L, NonMagickOptionFlag | NeverInterpretArgsFlag, MagickFalse },
    577     { "-backdrop", 1L, NonMagickOptionFlag | NeverInterpretArgsFlag, MagickFalse },
    578     { "+bench", 1L, DeprecateOptionFlag, MagickTrue },
    579     { "-bench", 1L, GenesisOptionFlag, MagickFalse },
    580     { "+bias", 0L, ImageInfoOptionFlag, MagickFalse },
    581     { "-bias", 1L, ImageInfoOptionFlag, MagickFalse },
    582     { "-black-point-compensation", 0L, ImageInfoOptionFlag, MagickFalse },
    583     { "+black-point-compensation", 0L, ImageInfoOptionFlag, MagickFalse },
    584     { "+black-threshold", 0L, DeprecateOptionFlag, MagickTrue },
    585     { "-black-threshold", 1L, SimpleOperatorFlag, MagickFalse },
    586     { "+blend", 0L, NonMagickOptionFlag, MagickFalse },
    587     { "-blend", 1L, NonMagickOptionFlag, MagickFalse },
    588     { "+blue-primary", 0L, ImageInfoOptionFlag, MagickFalse },
    589     { "-blue-primary", 1L, ImageInfoOptionFlag, MagickFalse },
    590     { "-blue-shift", 1L, SimpleOperatorFlag, MagickFalse },
    591     { "+blue-shift", 1L, SimpleOperatorFlag, MagickFalse },
    592     { "+border", 1L, DeprecateOptionFlag, MagickTrue },
    593     { "-border", 1L, SimpleOperatorFlag, MagickFalse },
    594     { "+bordercolor", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    595     { "-bordercolor", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    596     { "+borderwidth", 0L, NonMagickOptionFlag, MagickFalse },
    597     { "-borderwidth", 1L, NonMagickOptionFlag, MagickFalse },
    598     { "+box", 0L, ReplacedOptionFlag | ImageInfoOptionFlag | DrawInfoOptionFlag, MagickTrue },
    599     { "-box", 1L, ReplacedOptionFlag | ImageInfoOptionFlag | DrawInfoOptionFlag, MagickTrue },
    600     { "+brightness-contrast", 0L, DeprecateOptionFlag, MagickTrue },
    601     { "-brightness-contrast", 1L, SimpleOperatorFlag, MagickFalse },
    602     { "+cache", 0L, GlobalOptionFlag, MagickFalse },
    603     { "-cache", 1L, GlobalOptionFlag, MagickFalse },
    604     { "+canny", 1L, DeprecateOptionFlag, MagickTrue },
    605     { "-canny", 1L, SimpleOperatorFlag, MagickTrue },
    606     { "+caption", 0L, ImageInfoOptionFlag | NeverInterpretArgsFlag, MagickFalse },
    607     { "-caption", 1L, ImageInfoOptionFlag | NeverInterpretArgsFlag, MagickFalse },
    608     { "+cdl", 1L, DeprecateOptionFlag, MagickTrue },
    609     { "-cdl", 1L, SimpleOperatorFlag | NeverInterpretArgsFlag, MagickFalse },
    610     { "+channel", 0L, SimpleOperatorFlag, MagickFalse },
    611     { "-channel", 1L, SimpleOperatorFlag, MagickFalse },
    612     { "-channel-fx", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    613     { "+charcoal", 1L, DeprecateOptionFlag, MagickTrue },
    614     { "-charcoal", 1L, SimpleOperatorFlag, MagickFalse },
    615     { "+chop", 1L, DeprecateOptionFlag, MagickTrue },
    616     { "-chop", 1L, SimpleOperatorFlag, MagickFalse },
    617     { "+clahe", 1L, DeprecateOptionFlag, MagickTrue },
    618     { "-clahe", 1L, SimpleOperatorFlag, MagickFalse },
    619     { "+clamp", 0L, DeprecateOptionFlag, MagickTrue },
    620     { "-clamp", 0L, SimpleOperatorFlag, MagickFalse },
    621     { "-clip", 0L, SimpleOperatorFlag, MagickFalse },
    622     { "+clip", 0L, SimpleOperatorFlag, MagickFalse },
    623     { "+clip-mask", 0L, SimpleOperatorFlag | NeverInterpretArgsFlag, MagickFalse },
    624     { "-clip-mask", 1L, SimpleOperatorFlag | NeverInterpretArgsFlag, MagickFalse },
    625     { "-clip-path", 1L, SimpleOperatorFlag, MagickFalse },
    626     { "+clip-path", 1L, SimpleOperatorFlag, MagickFalse },
    627     { "+clone", 0L, NoImageOperatorFlag, MagickFalse },
    628     { "-clone", 1L, NoImageOperatorFlag, MagickFalse },
    629     { "+clut", 0L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    630     { "-clut", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    631     { "+coalesce", 0L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    632     { "-coalesce", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    633     { "+colorize", 1L, DeprecateOptionFlag, MagickTrue },
    634     { "-colorize", 1L, SimpleOperatorFlag, MagickFalse },
    635     { "+colormap", 0L, NonMagickOptionFlag, MagickFalse },
    636     { "-colormap", 1L, NonMagickOptionFlag, MagickFalse },
    637     { "+color-matrix", 1L, DeprecateOptionFlag, MagickTrue },
    638     { "-color-matrix", 1L, SimpleOperatorFlag, MagickFalse },
    639     { "+colors", 1L, DeprecateOptionFlag, MagickTrue },
    640     { "-colors", 1L, SimpleOperatorFlag, MagickFalse },
    641     { "+colorspace", 0L, ImageInfoOptionFlag | SimpleOperatorFlag, MagickFalse },
    642     { "-colorspace", 1L, ImageInfoOptionFlag | SimpleOperatorFlag, MagickFalse },
    643     { "-combine", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    644     { "+combine", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    645     { "+comment", 0L, ImageInfoOptionFlag | NeverInterpretArgsFlag, MagickFalse },
    646     { "-comment", 1L, ImageInfoOptionFlag | NeverInterpretArgsFlag, MagickFalse },
    647     { "+compare", 0L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    648     { "-compare", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    649     { "+complex", 1L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    650     { "-complex", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    651     { "+compose", 0L, ImageInfoOptionFlag, MagickFalse },
    652     { "-compose", 1L, ImageInfoOptionFlag, MagickFalse },
    653     { "+composite", 0L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    654     { "-composite", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    655     { "+compress", 0L, ImageInfoOptionFlag, MagickFalse },
    656     { "-compress", 1L, ImageInfoOptionFlag, MagickFalse },
    657     { "+concurrent", 0L, DeprecateOptionFlag, MagickTrue },
    658     { "-concurrent", 0L, GenesisOptionFlag, MagickFalse },
    659     { "+connected-components", 1L, DeprecateOptionFlag, MagickTrue },
    660     { "-connected-components", 1L, SimpleOperatorFlag, MagickFalse },
    661     { "-contrast", 0L, ReplacedOptionFlag | SimpleOperatorFlag, MagickTrue },
    662     { "+contrast", 0L, ReplacedOptionFlag | SimpleOperatorFlag, MagickTrue },
    663     { "+contrast-stretch", 1L, DeprecateOptionFlag, MagickTrue },
    664     { "-contrast-stretch", 1L, SimpleOperatorFlag, MagickFalse },
    665     { "+convolve", 1L, DeprecateOptionFlag, MagickTrue },
    666     { "-convolve", 1L, SimpleOperatorFlag, MagickFalse },
    667     { "+copy", 2L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    668     { "-copy", 2L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    669     { "+crop", 1L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    670     { "-crop", 1L, SimpleOperatorFlag | FireOptionFlag, MagickFalse },
    671     { "+cycle", 1L, DeprecateOptionFlag, MagickTrue },
    672     { "-cycle", 1L, SimpleOperatorFlag, MagickFalse },
    673     { "+debug", 0L, GlobalOptionFlag | FireOptionFlag, MagickFalse },
    674     { "-debug", 1L, GlobalOptionFlag | FireOptionFlag, MagickFalse },
    675     { "+decipher", 1L, DeprecateOptionFlag, MagickTrue },
    676     { "-decipher", 1L, SimpleOperatorFlag | NeverInterpretArgsFlag, MagickFalse },
    677     { "+deconstruct", 0L, DeprecateOptionFlag, MagickTrue },
    678     { "-deconstruct", 0L, ReplacedOptionFlag | ListOperatorFlag | FireOptionFlag, MagickTrue },
    679     { "-define", 1L, ImageInfoOptionFlag | NeverInterpretArgsFlag | FireOptionFlag, MagickFalse },
    680     { "+define", 1L, ImageInfoOptionFlag | NeverInterpretArgsFlag | FireOptionFlag, MagickFalse },
    681     { "+delay", 0L, ImageInfoOptionFlag, MagickFalse },
    682     { "-delay", 1L, ImageInfoOptionFlag, MagickFalse },
    683     { "+delete", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    684     { "-delete", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    685     { "+density", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    686     { "-density", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    687     { "+depth", 0L, ImageInfoOptionFlag | SimpleOperatorFlag, MagickFalse },
    688     { "-depth", 1L, ImageInfoOptionFlag | SimpleOperatorFlag, MagickFalse },
    689     { "+descend", 0L, NonMagickOptionFlag, MagickFalse },
    690     { "-descend", 1L, NonMagickOptionFlag, MagickFalse },
    691     { "+deskew", 0L, SimpleOperatorFlag, MagickFalse },
    692     { "-deskew", 1L, SimpleOperatorFlag, MagickFalse },
    693     { "+despeckle", 0L, DeprecateOptionFlag, MagickTrue },
    694     { "-despeckle", 0L, SimpleOperatorFlag, MagickFalse },
    695     { "+direction", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    696     { "-direction", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    697     { "+displace", 0L, NonMagickOptionFlag, MagickFalse },
    698     { "-displace", 1L, NonMagickOptionFlag, MagickFalse },
    699     { "-display", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    700     { "+display", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    701     { "+dispose", 0L, ImageInfoOptionFlag, MagickFalse },
    702     { "-dispose", 1L, ImageInfoOptionFlag, MagickFalse },
    703     { "+dissimilarity-threshold", 0L, NonMagickOptionFlag | ImageInfoOptionFlag, MagickFalse },
    704     { "-dissimilarity-threshold", 1L, NonMagickOptionFlag | ImageInfoOptionFlag, MagickFalse },
    705     { "+dissolve", 0L, NonMagickOptionFlag, MagickFalse },
    706     { "-dissolve", 1L, NonMagickOptionFlag, MagickFalse },
    707     { "-distort", 2L, SimpleOperatorFlag | AlwaysInterpretArgsFlag, MagickFalse },
    708     { "+distort", 2L, SimpleOperatorFlag | AlwaysInterpretArgsFlag, MagickFalse },
    709     { "+dither", 0L, ImageInfoOptionFlag | QuantizeInfoOptionFlag, MagickFalse },
    710     { "-dither", 1L, ImageInfoOptionFlag | QuantizeInfoOptionFlag, MagickFalse },
    711     { "+draw", 0L, DeprecateOptionFlag, MagickTrue },
    712     { "-draw", 1L, SimpleOperatorFlag, MagickFalse },
    713     { "+duplicate", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    714     { "-duplicate", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    715     { "-duration", 1L, GenesisOptionFlag, MagickFalse },
    716     { "+duration", 1L, GenesisOptionFlag, MagickFalse },
    717     { "+edge", 1L, DeprecateOptionFlag, MagickTrue },
    718     { "-edge", 1L, SimpleOperatorFlag, MagickFalse },
    719     { "+emboss", 1L, DeprecateOptionFlag, MagickTrue },
    720     { "-emboss", 1L, SimpleOperatorFlag, MagickFalse },
    721     { "+encipher", 1L, DeprecateOptionFlag, MagickTrue },
    722     { "-encipher", 1L, SimpleOperatorFlag | NeverInterpretArgsFlag, MagickFalse },
    723     { "+encoding", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    724     { "-encoding", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    725     { "+endian", 0L, ImageInfoOptionFlag, MagickFalse },
    726     { "-endian", 1L, ImageInfoOptionFlag, MagickFalse },
    727     { "+enhance", 0L, DeprecateOptionFlag, MagickTrue },
    728     { "-enhance", 0L, SimpleOperatorFlag, MagickFalse },
    729     { "+equalize", 0L, DeprecateOptionFlag, MagickTrue },
    730     { "-equalize", 0L, SimpleOperatorFlag, MagickFalse },
    731     { "+evaluate", 2L, DeprecateOptionFlag, MagickTrue },
    732     { "-evaluate", 2L, SimpleOperatorFlag, MagickFalse },
    733     { "+evaluate-sequence", 1L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    734     { "-evaluate-sequence", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    735     { "-exit", 0L, SpecialOptionFlag, MagickFalse },
    736     { "+extent", 1L, DeprecateOptionFlag, MagickTrue },
    737     { "-extent", 1L, SimpleOperatorFlag, MagickFalse },
    738     { "+extract", 0L, ImageInfoOptionFlag, MagickFalse },
    739     { "-extract", 1L, ImageInfoOptionFlag, MagickFalse },
    740     { "+family", 0L, DeprecateOptionFlag, MagickTrue },
    741     { "-family", 1L, DrawInfoOptionFlag, MagickFalse },
    742     { "+features", 0L, SimpleOperatorFlag | FireOptionFlag, MagickFalse },
    743     { "-features", 1L, SimpleOperatorFlag | FireOptionFlag, MagickFalse },
    744     { "-fft", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    745     { "+fft", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    746     { "+fill", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    747     { "-fill", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    748     { "+filter", 0L, ImageInfoOptionFlag, MagickFalse },
    749     { "-filter", 1L, ImageInfoOptionFlag, MagickFalse },
    750     { "+flatten", 0L, DeprecateOptionFlag, MagickTrue },
    751     { "-flatten", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    752     { "+flip", 0L, DeprecateOptionFlag, MagickTrue },
    753     { "-flip", 0L, SimpleOperatorFlag, MagickFalse },
    754     { "-floodfill", 2L, SimpleOperatorFlag, MagickFalse },
    755     { "+floodfill", 2L, SimpleOperatorFlag, MagickFalse },
    756     { "+flop", 0L, DeprecateOptionFlag, MagickTrue },
    757     { "-flop", 0L, SimpleOperatorFlag, MagickFalse },
    758     { "+font", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    759     { "-font", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    760     { "+foreground", 0L, NonMagickOptionFlag, MagickFalse },
    761     { "-foreground", 1L, NonMagickOptionFlag, MagickFalse },
    762     { "+frame", 1L, DeprecateOptionFlag, MagickTrue },
    763     { "-frame", 1L, SimpleOperatorFlag, MagickFalse },
    764     { "+function", 2L, DeprecateOptionFlag, MagickTrue },
    765     { "-function", 2L,SimpleOperatorFlag | AlwaysInterpretArgsFlag, MagickFalse },
    766     { "+fuzz", 0L, ImageInfoOptionFlag, MagickFalse },
    767     { "-fuzz", 1L, ImageInfoOptionFlag, MagickFalse },
    768     { "+fx", 1L, DeprecateOptionFlag | FireOptionFlag | NeverInterpretArgsFlag, MagickTrue },
    769     { "-fx", 1L, ListOperatorFlag | FireOptionFlag | NeverInterpretArgsFlag, MagickFalse },
    770     { "-gamma", 1L, SimpleOperatorFlag, MagickFalse },
    771     { "+gamma", 1L, SimpleOperatorFlag, MagickFalse },
    772     { "+gaussian", 1L, DeprecateOptionFlag, MagickTrue },
    773     { "-gaussian", 1L, ReplacedOptionFlag | SimpleOperatorFlag, MagickTrue },
    774     { "+gaussian-blur", 1L, DeprecateOptionFlag, MagickTrue },
    775     { "-gaussian-blur", 1L, SimpleOperatorFlag, MagickFalse },
    776     { "+geometry", 0L, SimpleOperatorFlag, MagickFalse },
    777     { "-geometry", 1L, SimpleOperatorFlag, MagickFalse },
    778     { "+gravity", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    779     { "-gravity", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    780     { "+grayscale", 1L, SimpleOperatorFlag, MagickTrue },
    781     { "-grayscale", 1L, SimpleOperatorFlag, MagickFalse },
    782     { "+green-primary", 0L, ImageInfoOptionFlag, MagickFalse },
    783     { "-green-primary", 1L, ImageInfoOptionFlag, MagickFalse },
    784     { "+hald-clut", 0L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    785     { "-hald-clut", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    786     { "+highlight-color", 0L, NonMagickOptionFlag | ImageInfoOptionFlag, MagickFalse },
    787     { "-highlight-color", 1L, NonMagickOptionFlag | ImageInfoOptionFlag, MagickFalse },
    788     { "+hough-lines", 1L, DeprecateOptionFlag, MagickTrue },
    789     { "-hough-lines", 1L, SimpleOperatorFlag, MagickTrue },
    790     { "+iconGeometry", 0L, NonMagickOptionFlag, MagickFalse },
    791     { "-iconGeometry", 1L, NonMagickOptionFlag, MagickFalse },
    792     { "-iconic", 0L, NonMagickOptionFlag, MagickFalse },
    793     { "+iconic", 0L, NonMagickOptionFlag, MagickFalse },
    794     { "+identify", 0L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    795     { "-identify", 0L, SimpleOperatorFlag | FireOptionFlag, MagickFalse },
    796     { "-ift", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    797     { "+ift", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    798     { "-immutable", 0L, NonMagickOptionFlag, MagickFalse },
    799     { "+immutable", 0L, NonMagickOptionFlag, MagickFalse },
    800     { "+implode", 0L, DeprecateOptionFlag, MagickTrue },
    801     { "-implode", 1L, SimpleOperatorFlag, MagickFalse },
    802     { "+insert", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    803     { "-insert", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    804     { "+intensity", 0L, ImageInfoOptionFlag, MagickFalse },
    805     { "-intensity", 1L, ImageInfoOptionFlag, MagickFalse },
    806     { "+intent", 0L, ImageInfoOptionFlag, MagickFalse },
    807     { "-intent", 1L, ImageInfoOptionFlag, MagickFalse },
    808     { "+interlace", 0L, ImageInfoOptionFlag, MagickFalse },
    809     { "-interlace", 1L, ImageInfoOptionFlag, MagickFalse },
    810     { "+interline-spacing", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    811     { "-interline-spacing", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    812     { "+interpolate", 0L, ImageInfoOptionFlag, MagickFalse },
    813     { "-interpolate", 1L, ImageInfoOptionFlag, MagickFalse },
    814     { "+interpolative-resize", 1L, DeprecateOptionFlag, MagickTrue },
    815     { "-interpolative-resize", 1L, SimpleOperatorFlag, MagickFalse },
    816     { "+interword-spacing", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    817     { "-interword-spacing", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    818     { "+kerning", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    819     { "-kerning", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    820     { "+kuwahara", 0L, DeprecateOptionFlag, MagickTrue },
    821     { "-kuwahara", 1L, SimpleOperatorFlag, MagickFalse },
    822     { "+label", 0L, ImageInfoOptionFlag | NeverInterpretArgsFlag, MagickFalse },
    823     { "-label", 1L, ImageInfoOptionFlag | NeverInterpretArgsFlag, MagickFalse },
    824     { "+lat", 1L, DeprecateOptionFlag, MagickTrue },
    825     { "-lat", 1L, SimpleOperatorFlag, MagickFalse },
    826     { "+layers", 1L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    827     { "-layers", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    828     { "-level", 1L, SimpleOperatorFlag, MagickFalse },
    829     { "+level", 1L, SimpleOperatorFlag, MagickFalse },
    830     { "-level-colors", 1L, SimpleOperatorFlag, MagickFalse },
    831     { "+level-colors", 1L, SimpleOperatorFlag, MagickFalse },
    832     { "+limit", 0L, DeprecateOptionFlag, MagickTrue },
    833     { "-limit", 2L, GlobalOptionFlag | FireOptionFlag, MagickFalse },
    834     { "+linear-stretch", 1L, DeprecateOptionFlag, MagickTrue },
    835     { "-linear-stretch", 1L, SimpleOperatorFlag, MagickFalse },
    836     { "+liquid-rescale", 1L, DeprecateOptionFlag, MagickTrue },
    837     { "-liquid-rescale", 1L, SimpleOperatorFlag, MagickFalse },
    838     { "+list", 0L, DeprecateOptionFlag, MagickTrue },
    839     { "-list", 1L, NoImageOperatorFlag, MagickFalse },
    840     { "+local-contrast", 0L, DeprecateOptionFlag, MagickTrue },
    841     { "-local-contrast", 1L, SimpleOperatorFlag, MagickFalse },
    842     { "+log", 0L, DeprecateOptionFlag, MagickFalse },
    843     { "-log", 1L, GlobalOptionFlag, MagickFalse },
    844     { "+loop", 0L, ImageInfoOptionFlag, MagickFalse },
    845     { "-loop", 1L, ImageInfoOptionFlag, MagickFalse },
    846     { "+lowlight-color", 0L, NonMagickOptionFlag | ImageInfoOptionFlag, MagickFalse },
    847     { "-lowlight-color", 1L, NonMagickOptionFlag | ImageInfoOptionFlag, MagickFalse },
    848     { "+magnify", 0L, DeprecateOptionFlag, MagickTrue },
    849     { "-magnify", 0L, SimpleOperatorFlag, MagickFalse },
    850     { "+map", 0L, ReplacedOptionFlag | ListOperatorFlag | FireOptionFlag, MagickTrue },
    851     { "-map", 1L, ReplacedOptionFlag | SimpleOperatorFlag, MagickTrue },
    852     { "+mask", 0L, DeprecateOptionFlag | NeverInterpretArgsFlag, MagickFalse },
    853     { "-mask", 1L, DeprecateOptionFlag | NeverInterpretArgsFlag, MagickFalse },
    854     { "-matte", 0L, ReplacedOptionFlag | SimpleOperatorFlag, MagickTrue },
    855     { "+matte", 0L, ReplacedOptionFlag | SimpleOperatorFlag, MagickTrue },
    856     { "-maximum", 0L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    857     { "+maximum", 0L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    858     { "+mean-shift", 1L, DeprecateOptionFlag, MagickTrue },
    859     { "-mean-shift", 1L, SimpleOperatorFlag, MagickTrue },
    860     { "+median", 1L, DeprecateOptionFlag, MagickTrue },
    861     { "-median", 1L, ReplacedOptionFlag | SimpleOperatorFlag | FireOptionFlag, MagickTrue },
    862     { "+metric", 0L, DeprecateOptionFlag | FireOptionFlag, MagickFalse },
    863     { "-metric", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    864     { "-minimum", 0L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    865     { "+minimum", 0L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    866     { "+mode", 1L, NonMagickOptionFlag, MagickFalse },
    867     { "-mode", 1L, ReplacedOptionFlag | SimpleOperatorFlag, MagickTrue },
    868     { "+modulate", 1L, DeprecateOptionFlag, MagickTrue },
    869     { "-modulate", 1L, SimpleOperatorFlag, MagickFalse },
    870     { "-moments", 0L, SimpleOperatorFlag | FireOptionFlag, MagickFalse },
    871     { "+moments", 0L, SimpleOperatorFlag | FireOptionFlag, MagickFalse },
    872     { "-monitor", 0L, ImageInfoOptionFlag | SimpleOperatorFlag, MagickFalse },
    873     { "+monitor", 0L, ImageInfoOptionFlag | SimpleOperatorFlag, MagickFalse },
    874     { "+monochrome", 0L, ImageInfoOptionFlag, MagickFalse },
    875     { "-monochrome", 0L, ImageInfoOptionFlag | SimpleOperatorFlag, MagickFalse },
    876     { "+morph", 1L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    877     { "-morph", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    878     { "+morphology", 2L, DeprecateOptionFlag, MagickTrue },
    879     { "-morphology", 2L, SimpleOperatorFlag, MagickFalse },
    880     { "+mosaic", 0L, DeprecateOptionFlag, MagickTrue },
    881     { "-mosaic", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    882     { "+motion-blur", 1L, DeprecateOptionFlag, MagickTrue },
    883     { "-motion-blur", 1L, SimpleOperatorFlag, MagickFalse },
    884     { "+name", 0L, NonMagickOptionFlag, MagickFalse },
    885     { "-name", 1L, NonMagickOptionFlag, MagickFalse },
    886     { "+negate", 0L, SimpleOperatorFlag, MagickFalse },
    887     { "-negate", 0L, SimpleOperatorFlag, MagickFalse },
    888     { "-noise", 1L, ReplacedOptionFlag | SimpleOperatorFlag, MagickFalse },
    889     { "+noise", 1L, SimpleOperatorFlag, MagickFalse },
    890     { "-noop", 0L, NoImageOperatorFlag, MagickFalse },
    891     { "+normalize", 0L, DeprecateOptionFlag, MagickTrue },
    892     { "-normalize", 0L, SimpleOperatorFlag, MagickFalse },
    893     { "-opaque", 1L, SimpleOperatorFlag, MagickFalse },
    894     { "+opaque", 1L, SimpleOperatorFlag, MagickFalse },
    895     { "+ordered-dither", 0L, DeprecateOptionFlag, MagickTrue },
    896     { "-ordered-dither", 1L, SimpleOperatorFlag, MagickFalse },
    897     { "+orient", 0L, ImageInfoOptionFlag, MagickFalse },
    898     { "-orient", 1L, ImageInfoOptionFlag, MagickFalse },
    899     { "+page", 0L, ImageInfoOptionFlag, MagickFalse },
    900     { "-page", 1L, ImageInfoOptionFlag, MagickFalse },
    901     { "+paint", 0L, DeprecateOptionFlag, MagickTrue },
    902     { "-paint", 1L, SimpleOperatorFlag, MagickFalse },
    903     { "+path", 0L, NonMagickOptionFlag, MagickFalse },
    904     { "-path", 1L, NonMagickOptionFlag, MagickFalse },
    905     { "+pause", 0L, NonMagickOptionFlag, MagickFalse },
    906     { "-pause", 1L, NonMagickOptionFlag, MagickFalse },
    907     { "-ping", 0L, ImageInfoOptionFlag, MagickFalse },
    908     { "+ping", 0L, ImageInfoOptionFlag, MagickFalse },
    909     { "+pointsize", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    910     { "-pointsize", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
    911     { "+polaroid", 0L, SimpleOperatorFlag, MagickFalse },
    912     { "-polaroid", 1L, SimpleOperatorFlag, MagickFalse },
    913     { "+poly", 1L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    914     { "-poly", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    915     { "+posterize", 1L, DeprecateOptionFlag, MagickTrue },
    916     { "-posterize", 1L, SimpleOperatorFlag, MagickFalse },
    917     { "+precision", 0L, ImageInfoOptionFlag, MagickFalse },
    918     { "-precision", 1L, ImageInfoOptionFlag, MagickFalse },
    919     { "+preview", 0L, DeprecateOptionFlag, MagickTrue },
    920     { "-preview", 1L, SimpleOperatorFlag, MagickFalse },
    921     { "+print", 1L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    922     { "-print", 1L, NoImageOperatorFlag | AlwaysInterpretArgsFlag | FireOptionFlag, MagickFalse },
    923     { "+process", 1L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    924     { "-process", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    925     { "+profile", 1L, SimpleOperatorFlag, MagickFalse },
    926     { "-profile", 1L, SimpleOperatorFlag | NeverInterpretArgsFlag, MagickFalse },
    927     { "+quality", 0L, ImageInfoOptionFlag, MagickFalse },
    928     { "-quality", 1L, ImageInfoOptionFlag, MagickFalse },
    929     { "+quantize", 0L, QuantizeInfoOptionFlag, MagickFalse },
    930     { "-quantize", 1L, QuantizeInfoOptionFlag, MagickFalse },
    931     { "-raise", 1L, SimpleOperatorFlag, MagickFalse },
    932     { "+raise", 1L, SimpleOperatorFlag, MagickFalse },
    933     { "+random-threshold", 1L, DeprecateOptionFlag, MagickTrue },
    934     { "-random-threshold", 1L, SimpleOperatorFlag, MagickFalse },
    935     { "+range-threshold", 1L, DeprecateOptionFlag, MagickTrue },
    936     { "-range-threshold", 1L, SimpleOperatorFlag, MagickFalse },
    937     { "-read", 1L, NoImageOperatorFlag | NeverInterpretArgsFlag, MagickFalse },
    938     { "+read-mask", 0L, SimpleOperatorFlag | NeverInterpretArgsFlag, MagickFalse },
    939     { "-read-mask", 1L, SimpleOperatorFlag | NeverInterpretArgsFlag, MagickFalse },
    940     { "+recolor", 1L, DeprecateOptionFlag, MagickTrue },
    941     { "-recolor", 1L, ReplacedOptionFlag | SimpleOperatorFlag, MagickTrue },
    942     { "+red-primary", 0L, ImageInfoOptionFlag, MagickFalse },
    943     { "-red-primary", 1L, ImageInfoOptionFlag, MagickFalse },
    944     { "+region", 0L, SimpleOperatorFlag, MagickFalse },
    945     { "-region", 1L, SimpleOperatorFlag, MagickFalse },
    946     { "+remap", 0L, ListOperatorFlag | NeverInterpretArgsFlag | FireOptionFlag, MagickFalse },
    947     { "-remap", 1L, SimpleOperatorFlag | NeverInterpretArgsFlag, MagickFalse },
    948     { "+remote", 0L, NonMagickOptionFlag, MagickFalse },
    949     { "-remote", 1L, NonMagickOptionFlag, MagickFalse },
    950     { "-render", 0L, DrawInfoOptionFlag, MagickFalse },
    951     { "+render", 0L, DrawInfoOptionFlag, MagickFalse },
    952     { "+resample", 1L, DeprecateOptionFlag, MagickTrue },
    953     { "-resample", 1L, SimpleOperatorFlag, MagickFalse },
    954     { "-respect-parenthesis", 0L, ImageInfoOptionFlag, MagickFalse },
    955     { "+respect-parenthesis", 0L, ImageInfoOptionFlag, MagickFalse },
    956     { "+reverse", 0L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    957     { "-reverse", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
    958     { "+roll", 1L, DeprecateOptionFlag, MagickTrue },
    959     { "-roll", 1L, SimpleOperatorFlag, MagickFalse },
    960     { "+rotate", 1L, DeprecateOptionFlag, MagickTrue },
    961     { "-rotate", 1L, SimpleOperatorFlag, MagickFalse },
    962     { "-rotational-blur", 1L, SimpleOperatorFlag, MagickFalse },
    963     { "+sample", 1L, DeprecateOptionFlag, MagickTrue },
    964     { "-sample", 1L, SimpleOperatorFlag, MagickFalse },
    965     { "+sampling-factor", 0L, ImageInfoOptionFlag, MagickFalse },
    966     { "-sampling-factor", 1L, ImageInfoOptionFlag, MagickFalse },
    967     { "-sans0", 0L, NoImageOperatorFlag | NeverInterpretArgsFlag, MagickTrue },
    968     { "+sans0", 0L, NoImageOperatorFlag | NeverInterpretArgsFlag, MagickTrue }, /* equivelent to 'noop' */
    969     { "+sans1", 1L, NoImageOperatorFlag | NeverInterpretArgsFlag, MagickTrue },
    970     { "-sans1", 1L, NoImageOperatorFlag | NeverInterpretArgsFlag, MagickTrue }, /* equivelent to 'sans' */
    971     { "-sans", 1L, NoImageOperatorFlag | NeverInterpretArgsFlag, MagickTrue },
    972     { "+sans", 1L, NoImageOperatorFlag | NeverInterpretArgsFlag, MagickTrue },
    973     { "-sans2", 2L, NoImageOperatorFlag | NeverInterpretArgsFlag, MagickTrue },
    974     { "+sans2", 2L, NoImageOperatorFlag | NeverInterpretArgsFlag, MagickTrue },
    975     { "+scale", 1L, DeprecateOptionFlag, MagickTrue },
    976     { "-scale", 1L, SimpleOperatorFlag, MagickFalse },
    977     { "+scene", 0L, ImageInfoOptionFlag, MagickFalse },
    978     { "-scene", 1L, ImageInfoOptionFlag, MagickFalse },
    979     { "+scenes", 0L, NonMagickOptionFlag, MagickFalse },
    980     { "-scenes", 1L, NonMagickOptionFlag, MagickFalse },
    981     { "+screen", 0L, NonMagickOptionFlag, MagickFalse },
    982     { "-screen", 1L, NonMagickOptionFlag, MagickFalse },
    983     { "-script", 1L, SpecialOptionFlag | NeverInterpretArgsFlag, MagickFalse },
    984     { "+seed", 0L, GlobalOptionFlag, MagickFalse },
    985     { "-seed", 1L, GlobalOptionFlag, MagickFalse },
    986     { "+segment", 1L, DeprecateOptionFlag, MagickTrue },
    987     { "-segment", 1L, SimpleOperatorFlag, MagickFalse },
    988     { "+selective-blur", 1L, DeprecateOptionFlag, MagickTrue },
    989     { "-selective-blur", 1L, SimpleOperatorFlag, MagickFalse },
    990     { "+separate", 0L, DeprecateOptionFlag | FireOptionFlag, MagickTrue },
    991     { "-separate", 0L, SimpleOperatorFlag | FireOptionFlag, MagickFalse },
    992     { "+sepia-tone", 1L, DeprecateOptionFlag, MagickTrue },
    993     { "-sepia-tone", 1L, SimpleOperatorFlag, MagickFalse },
    994     { "+set", 1L, NoImageOperatorFlag, MagickFalse },
    995     { "-set", 2L, NoImageOperatorFlag | NeverInterpretArgsFlag, MagickFalse },
    996     { "+shade", 0L, DeprecateOptionFlag, MagickTrue },
    997     { "-shade", 1L, SimpleOperatorFlag, MagickFalse },
    998     { "+shadow", 1L, DeprecateOptionFlag, MagickTrue },
    999     { "-shadow", 1L, SimpleOperatorFlag, MagickFalse },
   1000     { "+shared-memory", 0L, NonMagickOptionFlag, MagickFalse },
   1001     { "-shared-memory", 1L, NonMagickOptionFlag, MagickFalse },
   1002     { "+sharpen", 1L, DeprecateOptionFlag, MagickTrue },
   1003     { "-sharpen", 1L, SimpleOperatorFlag, MagickFalse },
   1004     { "+shave", 1L, DeprecateOptionFlag, MagickTrue },
   1005     { "-shave", 1L, SimpleOperatorFlag, MagickFalse },
   1006     { "+shear", 1L, DeprecateOptionFlag, MagickTrue },
   1007     { "-shear", 1L, SimpleOperatorFlag, MagickFalse },
   1008     { "-sigmoidal-contrast", 1L, SimpleOperatorFlag, MagickFalse },
   1009     { "+sigmoidal-contrast", 1L, SimpleOperatorFlag, MagickFalse },
   1010     { "+silent", 0L, NonMagickOptionFlag, MagickFalse },
   1011     { "-silent", 1L, NonMagickOptionFlag, MagickFalse },
   1012     { "+similarity-threshold", 0L, NonMagickOptionFlag | ImageInfoOptionFlag, MagickFalse },
   1013     { "-similarity-threshold", 1L, NonMagickOptionFlag | ImageInfoOptionFlag, MagickFalse },
   1014     { "+sketch", 1L, DeprecateOptionFlag, MagickTrue },
   1015     { "-sketch", 1L, SimpleOperatorFlag, MagickFalse },
   1016     { "-smush", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
   1017     { "+smush", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
   1018     { "+snaps", 0L, NonMagickOptionFlag, MagickFalse },
   1019     { "-snaps", 1L, NonMagickOptionFlag, MagickFalse },
   1020     { "+solarize", 1L, DeprecateOptionFlag, MagickTrue },
   1021     { "-solarize", 1L, SimpleOperatorFlag, MagickFalse },
   1022     { "+sparse-color", 1L, DeprecateOptionFlag, MagickTrue },
   1023     { "-sparse-color", 2L, SimpleOperatorFlag | AlwaysInterpretArgsFlag, MagickFalse },
   1024     { "+splice", 1L, DeprecateOptionFlag, MagickTrue },
   1025     { "-splice", 1L, SimpleOperatorFlag, MagickFalse },
   1026     { "+spread", 1L, DeprecateOptionFlag, MagickTrue },
   1027     { "-spread", 1L, SimpleOperatorFlag, MagickFalse },
   1028     { "+statistic", 2L, DeprecateOptionFlag, MagickTrue },
   1029     { "-statistic", 2L, SimpleOperatorFlag, MagickFalse },
   1030     { "+stegano", 0L, NonMagickOptionFlag, MagickFalse },
   1031     { "-stegano", 1L, NonMagickOptionFlag, MagickFalse },
   1032     { "+stereo", 0L, DeprecateOptionFlag, MagickTrue },
   1033     { "-stereo", 1L, NonMagickOptionFlag, MagickFalse },
   1034     { "+stretch", 1L, DeprecateOptionFlag, MagickTrue },
   1035     { "-stretch", 1L, SimpleOperatorFlag, MagickFalse },
   1036     { "+strip", 0L, DeprecateOptionFlag, MagickTrue },
   1037     { "-strip", 0L, SimpleOperatorFlag, MagickFalse },
   1038     { "+stroke", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
   1039     { "-stroke", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
   1040     { "-strokewidth", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
   1041     { "+strokewidth", 1L, ImageInfoOptionFlag, MagickFalse },
   1042     { "+style", 0L, DrawInfoOptionFlag, MagickFalse },
   1043     { "-style", 1L, DrawInfoOptionFlag, MagickFalse },
   1044     { "-subimage", 0L, ListOperatorFlag, MagickFalse },
   1045     { "-subimage-search", 0L, NonMagickOptionFlag | ImageInfoOptionFlag, MagickFalse },
   1046     { "+subimage-search", 0L, NonMagickOptionFlag | ImageInfoOptionFlag, MagickFalse },
   1047     { "+swap", 0L, ListOperatorFlag | FireOptionFlag, MagickFalse },
   1048     { "-swap", 1L, ListOperatorFlag | FireOptionFlag, MagickFalse },
   1049     { "+swirl", 1L, DeprecateOptionFlag, MagickTrue },
   1050     { "-swirl", 1L, SimpleOperatorFlag, MagickFalse },
   1051     { "-synchronize", 0L, ImageInfoOptionFlag, MagickFalse },
   1052     { "+synchronize", 0L, ImageInfoOptionFlag, MagickFalse },
   1053     { "-taint", 0L, ImageInfoOptionFlag, MagickFalse },
   1054     { "+taint", 0L, ImageInfoOptionFlag, MagickFalse },
   1055     { "+text-font", 0L, NonMagickOptionFlag, MagickFalse },
   1056     { "-text-font", 1L, NonMagickOptionFlag, MagickFalse },
   1057     { "+texture", 0L, ImageInfoOptionFlag, MagickFalse },
   1058     { "-texture", 1L, ImageInfoOptionFlag | NeverInterpretArgsFlag, MagickFalse },
   1059     { "+threshold", 0L, SimpleOperatorFlag, MagickFalse },
   1060     { "-threshold", 1L, SimpleOperatorFlag, MagickFalse },
   1061     { "+thumbnail", 1L, DeprecateOptionFlag, MagickTrue },
   1062     { "-thumbnail", 1L, SimpleOperatorFlag, MagickFalse },
   1063     { "+tile", 0L, DrawInfoOptionFlag | NeverInterpretArgsFlag, MagickFalse },
   1064     { "-tile", 1L, DrawInfoOptionFlag | NeverInterpretArgsFlag, MagickFalse },
   1065     { "+tile-offset", 0L, ImageInfoOptionFlag, MagickFalse },
   1066     { "-tile-offset", 1L, ImageInfoOptionFlag, MagickFalse },
   1067     { "-tint", 1L, SimpleOperatorFlag, MagickFalse },
   1068     { "+tint", 1L, SimpleOperatorFlag, MagickFalse },
   1069     { "+title", 0L, NonMagickOptionFlag, MagickFalse },
   1070     { "-title", 1L, NonMagickOptionFlag, MagickFalse },
   1071     { "+transform", 0L, DeprecateOptionFlag, MagickTrue },
   1072     { "-transform", 0L, ReplacedOptionFlag | SimpleOperatorFlag, MagickTrue },
   1073     { "-transparent", 1L, SimpleOperatorFlag, MagickFalse },
   1074     { "+transparent", 1L, SimpleOperatorFlag, MagickFalse },
   1075     { "+transparent-color", 0L, ImageInfoOptionFlag, MagickFalse },
   1076     { "-transparent-color", 1L, ImageInfoOptionFlag, MagickFalse },
   1077     { "+transpose", 0L, DeprecateOptionFlag, MagickTrue },
   1078     { "-transpose", 0L, SimpleOperatorFlag, MagickFalse },
   1079     { "+transverse", 0L, DeprecateOptionFlag, MagickTrue },
   1080     { "-transverse", 0L, SimpleOperatorFlag, MagickFalse },
   1081     { "+treedepth", 1L, DeprecateOptionFlag, MagickTrue },
   1082     { "-treedepth", 1L, QuantizeInfoOptionFlag, MagickFalse },
   1083     { "+trim", 0L, DeprecateOptionFlag, MagickTrue },
   1084     { "-trim", 0L, SimpleOperatorFlag, MagickFalse },
   1085     { "+type", 0L, ImageInfoOptionFlag | SimpleOperatorFlag, MagickFalse },
   1086     { "-type", 1L, ImageInfoOptionFlag | SimpleOperatorFlag, MagickFalse },
   1087     { "+undercolor", 0L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
   1088     { "-undercolor", 1L, ImageInfoOptionFlag | DrawInfoOptionFlag, MagickFalse },
   1089     { "-unique", 0L, SimpleOperatorFlag, MagickFalse },
   1090     { "+unique", 0L, SimpleOperatorFlag, MagickFalse },
   1091     { "+unique-colors", 0L, DeprecateOptionFlag, MagickTrue },
   1092     { "-unique-colors", 0L, SimpleOperatorFlag, MagickFalse },
   1093     { "+units", 0L, ImageInfoOptionFlag, MagickFalse },
   1094     { "-units", 1L, ImageInfoOptionFlag, MagickFalse },
   1095     { "+unsharp", 1L, DeprecateOptionFlag, MagickTrue },
   1096     { "-unsharp", 1L, SimpleOperatorFlag, MagickFalse },
   1097     { "+update", 0L, NonMagickOptionFlag, MagickFalse },
   1098     { "-update", 1L, NonMagickOptionFlag, MagickFalse },
   1099     { "+use-pixmap", 0L, NonMagickOptionFlag, MagickFalse },
   1100     { "-use-pixmap", 1L, NonMagickOptionFlag, MagickFalse },
   1101     { "-verbose", 0L, ImageInfoOptionFlag, MagickFalse },
   1102     { "+verbose", 0L, ImageInfoOptionFlag, MagickFalse },
   1103     { "+version", 0L, DeprecateOptionFlag, MagickTrue },
   1104     { "-version", 0L, NoImageOperatorFlag, MagickFalse },
   1105     { "+view", 0L, ImageInfoOptionFlag, MagickFalse },
   1106     { "-view", 1L, ImageInfoOptionFlag, MagickFalse },
   1107     { "+vignette", 1L, DeprecateOptionFlag, MagickTrue },
   1108     { "-vignette", 1L, SimpleOperatorFlag, MagickFalse },
   1109     { "+visual", 0L, NonMagickOptionFlag, MagickFalse },
   1110     { "-visual", 1L, NonMagickOptionFlag, MagickFalse },
   1111     { "+watermark", 0L, NonMagickOptionFlag, MagickFalse },
   1112     { "-watermark", 1L, NonMagickOptionFlag, MagickFalse },
   1113     { "+wave", 1L, DeprecateOptionFlag, MagickTrue },
   1114     { "-wave", 1L, SimpleOperatorFlag, MagickFalse },
   1115     { "+wavelet-denoise", 0L, DeprecateOptionFlag, MagickTrue },
   1116     { "-wavelet-denoise", 1L, SimpleOperatorFlag, MagickFalse },
   1117     { "+weight", 1L, DeprecateOptionFlag, MagickTrue },
   1118     { "-weight", 1L, DrawInfoOptionFlag, MagickFalse },
   1119     { "+white-point", 0L, ImageInfoOptionFlag, MagickFalse },
   1120     { "-white-point", 1L, ImageInfoOptionFlag, MagickFalse },
   1121     { "+white-threshold", 1L, DeprecateOptionFlag, MagickTrue },
   1122     { "-white-threshold", 1L, SimpleOperatorFlag, MagickFalse },
   1123     { "+window", 0L, NonMagickOptionFlag, MagickFalse },
   1124     { "-window", 1L, NonMagickOptionFlag, MagickFalse },
   1125     { "+window-group", 0L, NonMagickOptionFlag, MagickFalse },
   1126     { "-window-group", 1L, NonMagickOptionFlag, MagickFalse },
   1127     { "-write", 1L, NoImageOperatorFlag | NeverInterpretArgsFlag | FireOptionFlag, MagickFalse },
   1128     { "+write", 1L, NoImageOperatorFlag | NeverInterpretArgsFlag | FireOptionFlag, MagickFalse },
   1129     { "+write-mask", 0L, SimpleOperatorFlag | NeverInterpretArgsFlag, MagickFalse },
   1130     { "-write-mask", 1L, SimpleOperatorFlag | NeverInterpretArgsFlag, MagickFalse },
   1131     { (char *) NULL, 0L, UndefinedOptionFlag, MagickFalse }
   1132   },
   1133   ComplianceOptions[] =
   1134   {
   1135     { "Undefined", UndefinedCompliance, UndefinedOptionFlag, MagickTrue },
   1136     { "CSS", CSSCompliance, UndefinedOptionFlag, MagickFalse },
   1137     { "MVG", MVGCompliance, UndefinedOptionFlag, MagickFalse },
   1138     { "No", NoCompliance, UndefinedOptionFlag, MagickFalse },
   1139     { "SVG", SVGCompliance, UndefinedOptionFlag, MagickFalse },
   1140     { "X11", X11Compliance, UndefinedOptionFlag, MagickFalse },
   1141     { "XPM", XPMCompliance, UndefinedOptionFlag, MagickFalse },
   1142     { (char *) NULL, UndefinedClass, UndefinedOptionFlag, MagickFalse }
   1143   },
   1144   ComposeOptions[] =
   1145   {
   1146     { "Undefined", UndefinedCompositeOp, UndefinedOptionFlag, MagickTrue },
   1147     { "Atop", AtopCompositeOp, UndefinedOptionFlag, MagickFalse },
   1148     { "Blend", BlendCompositeOp, UndefinedOptionFlag, MagickFalse },
   1149     { "Blur", BlurCompositeOp, UndefinedOptionFlag, MagickFalse },
   1150     { "Bumpmap", BumpmapCompositeOp, UndefinedOptionFlag, MagickFalse },
   1151     { "ChangeMask", ChangeMaskCompositeOp, UndefinedOptionFlag, MagickFalse },
   1152     { "Clear", ClearCompositeOp, UndefinedOptionFlag, MagickFalse },
   1153     { "ColorBurn", ColorBurnCompositeOp, UndefinedOptionFlag, MagickFalse },
   1154     { "ColorDodge", ColorDodgeCompositeOp, UndefinedOptionFlag, MagickFalse },
   1155     { "Colorize", ColorizeCompositeOp, UndefinedOptionFlag, MagickFalse },
   1156     { "CopyAlpha", CopyAlphaCompositeOp, UndefinedOptionFlag, MagickFalse },
   1157     { "CopyBlack", CopyBlackCompositeOp, UndefinedOptionFlag, MagickFalse },
   1158     { "CopyBlue", CopyBlueCompositeOp, UndefinedOptionFlag, MagickFalse },
   1159     { "CopyCyan", CopyCyanCompositeOp, UndefinedOptionFlag, MagickFalse },
   1160     { "CopyGreen", CopyGreenCompositeOp, UndefinedOptionFlag, MagickFalse },
   1161     { "Copy", CopyCompositeOp, UndefinedOptionFlag, MagickFalse },
   1162     { "CopyMagenta", CopyMagentaCompositeOp, UndefinedOptionFlag, MagickFalse },
   1163     { "CopyRed", CopyRedCompositeOp, UndefinedOptionFlag, MagickFalse },
   1164     { "CopyYellow", CopyYellowCompositeOp, UndefinedOptionFlag, MagickFalse },
   1165     { "Darken", DarkenCompositeOp, UndefinedOptionFlag, MagickFalse },
   1166     { "DarkenIntensity", DarkenIntensityCompositeOp, UndefinedOptionFlag, MagickFalse },
   1167     { "DivideDst", DivideDstCompositeOp, UndefinedOptionFlag, MagickFalse },
   1168     { "DivideSrc", DivideSrcCompositeOp, UndefinedOptionFlag, MagickFalse },
   1169     { "Dst", DstCompositeOp, UndefinedOptionFlag, MagickFalse },
   1170     { "Difference", DifferenceCompositeOp, UndefinedOptionFlag, MagickFalse },
   1171     { "Displace", DisplaceCompositeOp, UndefinedOptionFlag, MagickFalse },
   1172     { "Dissolve", DissolveCompositeOp, UndefinedOptionFlag, MagickFalse },
   1173     { "Distort", DistortCompositeOp, UndefinedOptionFlag, MagickFalse },
   1174     { "DstAtop", DstAtopCompositeOp, UndefinedOptionFlag, MagickFalse },
   1175     { "DstIn", DstInCompositeOp, UndefinedOptionFlag, MagickFalse },
   1176     { "DstOut", DstOutCompositeOp, UndefinedOptionFlag, MagickFalse },
   1177     { "DstOver", DstOverCompositeOp, UndefinedOptionFlag, MagickFalse },
   1178     { "Exclusion", ExclusionCompositeOp, UndefinedOptionFlag, MagickFalse },
   1179     { "HardLight", HardLightCompositeOp, UndefinedOptionFlag, MagickFalse },
   1180     { "HardMix", HardMixCompositeOp, UndefinedOptionFlag, MagickFalse },
   1181     { "Hue", HueCompositeOp, UndefinedOptionFlag, MagickFalse },
   1182     { "In", InCompositeOp, UndefinedOptionFlag, MagickFalse },
   1183     { "Intensity", IntensityCompositeOp, UndefinedOptionFlag, MagickFalse },
   1184     { "Lighten", LightenCompositeOp, UndefinedOptionFlag, MagickFalse },
   1185     { "LightenIntensity", LightenIntensityCompositeOp, UndefinedOptionFlag, MagickFalse },
   1186     { "LinearBurn", LinearBurnCompositeOp, UndefinedOptionFlag, MagickFalse },
   1187     { "LinearDodge", LinearDodgeCompositeOp, UndefinedOptionFlag, MagickFalse },
   1188     { "LinearLight", LinearLightCompositeOp, UndefinedOptionFlag, MagickFalse },
   1189     { "Luminize", LuminizeCompositeOp, UndefinedOptionFlag, MagickFalse },
   1190     { "Mathematics", MathematicsCompositeOp, UndefinedOptionFlag, MagickFalse },
   1191     { "MinusDst", MinusDstCompositeOp, UndefinedOptionFlag, MagickFalse },
   1192     { "MinusSrc", MinusSrcCompositeOp, UndefinedOptionFlag, MagickFalse },
   1193     { "Modulate", ModulateCompositeOp, UndefinedOptionFlag, MagickFalse },
   1194     { "ModulusAdd", ModulusAddCompositeOp, UndefinedOptionFlag, MagickFalse },
   1195     { "ModulusSubtract", ModulusSubtractCompositeOp, UndefinedOptionFlag, MagickFalse },
   1196     { "Multiply", MultiplyCompositeOp, UndefinedOptionFlag, MagickFalse },
   1197     { "None", NoCompositeOp, UndefinedOptionFlag, MagickFalse },
   1198     { "Out", OutCompositeOp, UndefinedOptionFlag, MagickFalse },
   1199     { "Overlay", OverlayCompositeOp, UndefinedOptionFlag, MagickFalse },
   1200     { "Over", OverCompositeOp, UndefinedOptionFlag, MagickFalse },
   1201     { "PegtopLight", PegtopLightCompositeOp, UndefinedOptionFlag, MagickFalse },
   1202     { "PinLight", PinLightCompositeOp, UndefinedOptionFlag, MagickFalse },
   1203     { "Plus", PlusCompositeOp, UndefinedOptionFlag, MagickFalse },
   1204     { "Replace", ReplaceCompositeOp, UndefinedOptionFlag, MagickFalse },
   1205     { "Saturate", SaturateCompositeOp, UndefinedOptionFlag, MagickFalse },
   1206     { "Screen", ScreenCompositeOp, UndefinedOptionFlag, MagickFalse },
   1207     { "SoftLight", SoftLightCompositeOp, UndefinedOptionFlag, MagickFalse },
   1208     { "Src", SrcCompositeOp, UndefinedOptionFlag, MagickFalse },
   1209     { "SrcAtop", SrcAtopCompositeOp, UndefinedOptionFlag, MagickFalse },
   1210     { "SrcIn", SrcInCompositeOp, UndefinedOptionFlag, MagickFalse },
   1211     { "SrcOut", SrcOutCompositeOp, UndefinedOptionFlag, MagickFalse },
   1212     { "SrcOver", SrcOverCompositeOp, UndefinedOptionFlag, MagickFalse },
   1213     { "Stereo", StereoCompositeOp, UndefinedOptionFlag, MagickFalse },
   1214     { "VividLight", VividLightCompositeOp, UndefinedOptionFlag, MagickFalse },
   1215     { "Xor", XorCompositeOp, UndefinedOptionFlag, MagickFalse },
   1216     { "Divide", DivideDstCompositeOp, DeprecateOptionFlag, MagickTrue },
   1217     { "Minus", MinusDstCompositeOp, DeprecateOptionFlag, MagickTrue },
   1218     { "Subtract", ModulusSubtractCompositeOp, DeprecateOptionFlag, MagickTrue },
   1219     { "Add", ModulusAddCompositeOp, DeprecateOptionFlag, MagickTrue },
   1220     { "Threshold", ThresholdCompositeOp, DeprecateOptionFlag, MagickTrue },
   1221     { "CopyOpacity", CopyAlphaCompositeOp, UndefinedOptionFlag, MagickTrue },
   1222     { (char *) NULL, UndefinedCompositeOp, UndefinedOptionFlag, MagickFalse }
   1223   },
   1224   CompressOptions[] =
   1225   {
   1226     { "Undefined", UndefinedCompression, UndefinedOptionFlag, MagickTrue },
   1227     { "B44A", B44ACompression, UndefinedOptionFlag, MagickFalse },
   1228     { "B44", B44Compression, UndefinedOptionFlag, MagickFalse },
   1229     { "BZip", BZipCompression, UndefinedOptionFlag, MagickFalse },
   1230     { "DXT1", DXT1Compression, UndefinedOptionFlag, MagickFalse },
   1231     { "DXT3", DXT3Compression, UndefinedOptionFlag, MagickFalse },
   1232     { "DXT5", DXT5Compression, UndefinedOptionFlag, MagickFalse },
   1233     { "Fax", FaxCompression, UndefinedOptionFlag, MagickFalse },
   1234     { "Group4", Group4Compression, UndefinedOptionFlag, MagickFalse },
   1235     { "JBIG1", JBIG1Compression, UndefinedOptionFlag, MagickFalse },
   1236     { "JBIG2", JBIG2Compression, UndefinedOptionFlag, MagickFalse },
   1237     { "JPEG2000", JPEG2000Compression, UndefinedOptionFlag, MagickFalse },
   1238     { "JPEG", JPEGCompression, UndefinedOptionFlag, MagickFalse },
   1239     { "LosslessJPEG", LosslessJPEGCompression, UndefinedOptionFlag, MagickFalse },
   1240     { "Lossless", LosslessJPEGCompression, UndefinedOptionFlag, MagickFalse },
   1241     { "LZMA", LZMACompression, UndefinedOptionFlag, MagickFalse },
   1242     { "LZW", LZWCompression, UndefinedOptionFlag, MagickFalse },
   1243     { "None", NoCompression, UndefinedOptionFlag, MagickFalse },
   1244     { "Piz", PizCompression, UndefinedOptionFlag, MagickFalse },
   1245     { "Pxr24", Pxr24Compression, UndefinedOptionFlag, MagickFalse },
   1246     { "RLE", RLECompression, UndefinedOptionFlag, MagickFalse },
   1247     { "RunlengthEncoded", RLECompression, UndefinedOptionFlag, MagickFalse },
   1248     { "WebP", WebPCompression, UndefinedOptionFlag, MagickFalse },
   1249     { "ZipS", ZipSCompression, UndefinedOptionFlag, MagickFalse },
   1250     { "Zip", ZipCompression, UndefinedOptionFlag, MagickFalse },
   1251     { "Zstd", ZstdCompression, UndefinedOptionFlag, MagickFalse },
   1252     { (char *) NULL, UndefinedCompression, UndefinedOptionFlag, MagickFalse }
   1253   },
   1254   DataTypeOptions[] =
   1255   {
   1256     { "Undefined", UndefinedData, UndefinedOptionFlag, MagickTrue },
   1257     { "Byte", ByteData, UndefinedOptionFlag, MagickFalse },
   1258     { "Long", LongData, UndefinedOptionFlag, MagickFalse },
   1259     { "Short", ShortData, UndefinedOptionFlag, MagickFalse },
   1260     { "String", StringData, UndefinedOptionFlag, MagickFalse },
   1261     { (char *) NULL, UndefinedData, UndefinedOptionFlag, MagickFalse }
   1262   },
   1263   DecorateOptions[] =
   1264   {
   1265     { "Undefined", UndefinedDecoration, UndefinedOptionFlag, MagickTrue },
   1266     { "LineThrough", LineThroughDecoration, UndefinedOptionFlag, MagickFalse },
   1267     { "None", NoDecoration, UndefinedOptionFlag, MagickFalse },
   1268     { "Overline", OverlineDecoration, UndefinedOptionFlag, MagickFalse },
   1269     { "Underline", UnderlineDecoration, UndefinedOptionFlag, MagickFalse },
   1270     { (char *) NULL, UndefinedDecoration, UndefinedOptionFlag, MagickFalse }
   1271   },
   1272   DirectionOptions[] =
   1273   {
   1274     { "Undefined", UndefinedDirection, UndefinedOptionFlag, MagickTrue },
   1275     { "right-to-left", RightToLeftDirection, UndefinedOptionFlag, MagickFalse },
   1276     { "left-to-right", LeftToRightDirection, UndefinedOptionFlag, MagickFalse },
   1277     { (char *) NULL, UndefinedDirection, UndefinedOptionFlag, MagickFalse }
   1278   },
   1279   DisposeOptions[] =
   1280   {
   1281     { "Undefined", UndefinedDispose, UndefinedOptionFlag, MagickFalse },
   1282     { "Background", BackgroundDispose, UndefinedOptionFlag, MagickFalse },
   1283     { "None", NoneDispose, UndefinedOptionFlag, MagickFalse },
   1284     { "Previous", PreviousDispose, UndefinedOptionFlag, MagickFalse },
   1285     { "0", UndefinedDispose, UndefinedOptionFlag, MagickFalse },
   1286     { "1", NoneDispose, UndefinedOptionFlag, MagickFalse },
   1287     { "2", BackgroundDispose, UndefinedOptionFlag, MagickFalse },
   1288     { "3", PreviousDispose, UndefinedOptionFlag, MagickFalse },
   1289     { (char *) NULL, UndefinedDispose, UndefinedOptionFlag, MagickFalse }
   1290   },
   1291   DistortOptions[] =
   1292   {
   1293     { "Affine", AffineDistortion, UndefinedOptionFlag, MagickFalse },
   1294     { "AffineProjection", AffineProjectionDistortion, UndefinedOptionFlag, MagickFalse },
   1295     { "ScaleRotateTranslate", ScaleRotateTranslateDistortion, UndefinedOptionFlag, MagickFalse },
   1296     { "SRT", ScaleRotateTranslateDistortion, UndefinedOptionFlag, MagickFalse },
   1297     { "Perspective", PerspectiveDistortion, UndefinedOptionFlag, MagickFalse },
   1298     { "PerspectiveProjection", PerspectiveProjectionDistortion, UndefinedOptionFlag, MagickFalse },
   1299     { "Bilinear", BilinearForwardDistortion, UndefinedOptionFlag, MagickTrue },
   1300     { "BilinearForward", BilinearForwardDistortion, UndefinedOptionFlag, MagickFalse },
   1301     { "BilinearReverse", BilinearReverseDistortion, UndefinedOptionFlag, MagickFalse },
   1302     { "Polynomial", PolynomialDistortion, UndefinedOptionFlag, MagickFalse },
   1303     { "Arc", ArcDistortion, UndefinedOptionFlag, MagickFalse },
   1304     { "Polar", PolarDistortion, UndefinedOptionFlag, MagickFalse },
   1305     { "DePolar", DePolarDistortion, UndefinedOptionFlag, MagickFalse },
   1306     { "Barrel", BarrelDistortion, UndefinedOptionFlag, MagickFalse },
   1307     { "Cylinder2Plane", Cylinder2PlaneDistortion, UndefinedOptionFlag, MagickTrue },
   1308     { "Plane2Cylinder", Plane2CylinderDistortion, UndefinedOptionFlag, MagickTrue },
   1309     { "BarrelInverse", BarrelInverseDistortion, UndefinedOptionFlag, MagickFalse },
   1310     { "Shepards", ShepardsDistortion, UndefinedOptionFlag, MagickFalse },
   1311     { "Resize", ResizeDistortion, UndefinedOptionFlag, MagickFalse },
   1312     { (char *) NULL, UndefinedDistortion, UndefinedOptionFlag, MagickFalse }
   1313   },
   1314   DitherOptions[] =
   1315   {
   1316     { "Undefined", UndefinedDitherMethod, UndefinedOptionFlag, MagickTrue },
   1317     { "None", NoDitherMethod, UndefinedOptionFlag, MagickFalse },
   1318     { "FloydSteinberg", FloydSteinbergDitherMethod, UndefinedOptionFlag, MagickFalse },
   1319     { "Riemersma", RiemersmaDitherMethod, UndefinedOptionFlag, MagickFalse },
   1320     { (char *) NULL, UndefinedEndian, UndefinedOptionFlag, MagickFalse }
   1321   },
   1322   EndianOptions[] =
   1323   {
   1324     { "Undefined", UndefinedEndian, UndefinedOptionFlag, MagickTrue },
   1325     { "LSB", LSBEndian, UndefinedOptionFlag, MagickFalse },
   1326     { "MSB", MSBEndian, UndefinedOptionFlag, MagickFalse },
   1327     { (char *) NULL, UndefinedEndian, UndefinedOptionFlag, MagickFalse }
   1328   },
   1329   EvaluateOptions[] =
   1330   {
   1331     { "Undefined", UndefinedEvaluateOperator, UndefinedOptionFlag, MagickTrue },
   1332     { "Abs", AbsEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1333     { "Add", AddEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1334     { "AddModulus", AddModulusEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1335     { "And", AndEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1336     { "Cos", CosineEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1337     { "Cosine", CosineEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1338     { "Divide", DivideEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1339     { "Exp", ExponentialEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1340     { "Exponential", ExponentialEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1341     { "GaussianNoise", GaussianNoiseEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1342     { "ImpulseNoise", ImpulseNoiseEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1343     { "LaplacianNoise", LaplacianNoiseEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1344     { "LeftShift", LeftShiftEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1345     { "Log", LogEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1346     { "Max", MaxEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1347     { "Mean", MeanEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1348     { "Median", MedianEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1349     { "Min", MinEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1350     { "MultiplicativeNoise", MultiplicativeNoiseEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1351     { "Multiply", MultiplyEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1352     { "Or", OrEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1353     { "PoissonNoise", PoissonNoiseEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1354     { "Pow", PowEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1355     { "RightShift", RightShiftEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1356     { "RMS", RootMeanSquareEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1357     { "RootMeanSquare", RootMeanSquareEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1358     { "Set", SetEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1359     { "Sin", SineEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1360     { "Sine", SineEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1361     { "Subtract", SubtractEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1362     { "Sum", SumEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1363     { "Threshold", ThresholdEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1364     { "ThresholdBlack", ThresholdBlackEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1365     { "ThresholdWhite", ThresholdWhiteEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1366     { "UniformNoise", UniformNoiseEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1367     { "Xor", XorEvaluateOperator, UndefinedOptionFlag, MagickFalse },
   1368     { (char *) NULL, UndefinedEvaluateOperator, UndefinedOptionFlag, MagickFalse }
   1369   },
   1370   FillRuleOptions[] =
   1371   {
   1372     { "Undefined", UndefinedRule, UndefinedOptionFlag, MagickTrue },
   1373     { "Evenodd", EvenOddRule, UndefinedOptionFlag, MagickFalse },
   1374     { "NonZero", NonZeroRule, UndefinedOptionFlag, MagickFalse },
   1375     { (char *) NULL, UndefinedRule, UndefinedOptionFlag, MagickFalse }
   1376   },
   1377   FilterOptions[] =
   1378   {
   1379     { "Undefined", UndefinedFilter, UndefinedOptionFlag, MagickTrue },
   1380     { "Bartlett", BartlettFilter, UndefinedOptionFlag, MagickFalse },
   1381     { "Blackman", BlackmanFilter, UndefinedOptionFlag, MagickFalse },
   1382     { "Bohman", BohmanFilter, UndefinedOptionFlag, MagickFalse },
   1383     { "Box", BoxFilter, UndefinedOptionFlag, MagickFalse },
   1384     { "Catrom", CatromFilter, UndefinedOptionFlag, MagickFalse },
   1385     { "Cosine", CosineFilter, UndefinedOptionFlag, MagickFalse },
   1386     { "Cubic", CubicFilter, UndefinedOptionFlag, MagickFalse },
   1387     { "Gaussian", GaussianFilter, UndefinedOptionFlag, MagickFalse },
   1388     { "Hamming", HammingFilter, UndefinedOptionFlag, MagickFalse },
   1389     { "Hann", HannFilter, UndefinedOptionFlag, MagickFalse },
   1390     { "Hanning", HannFilter, UndefinedOptionFlag, MagickTrue }, /*misspell*/
   1391     { "Hermite", HermiteFilter, UndefinedOptionFlag, MagickFalse },
   1392     { "Jinc", JincFilter, UndefinedOptionFlag, MagickFalse },
   1393     { "Kaiser", KaiserFilter, UndefinedOptionFlag, MagickFalse },
   1394     { "Lagrange", LagrangeFilter, UndefinedOptionFlag, MagickFalse },
   1395     { "Lanczos", LanczosFilter, UndefinedOptionFlag, MagickFalse },
   1396     { "Lanczos2", Lanczos2Filter, UndefinedOptionFlag, MagickFalse },
   1397     { "Lanczos2Sharp", Lanczos2SharpFilter, UndefinedOptionFlag, MagickFalse },
   1398     { "LanczosRadius", LanczosRadiusFilter, UndefinedOptionFlag, MagickFalse },
   1399     { "LanczosSharp", LanczosSharpFilter, UndefinedOptionFlag, MagickFalse },
   1400     { "Mitchell", MitchellFilter, UndefinedOptionFlag, MagickFalse },
   1401     { "Parzen", ParzenFilter, UndefinedOptionFlag, MagickFalse },
   1402     { "Point", PointFilter, UndefinedOptionFlag, MagickFalse },
   1403     { "Quadratic", QuadraticFilter, UndefinedOptionFlag, MagickFalse },
   1404     { "Robidoux", RobidouxFilter, UndefinedOptionFlag, MagickFalse },
   1405     { "RobidouxSharp", RobidouxSharpFilter, UndefinedOptionFlag, MagickFalse },
   1406     { "Sinc", SincFilter, UndefinedOptionFlag, MagickFalse },
   1407     { "SincFast", SincFastFilter, UndefinedOptionFlag, MagickFalse },
   1408     { "Spline", SplineFilter, UndefinedOptionFlag, MagickFalse },
   1409     { "CubicSpline", CubicSplineFilter, UndefinedOptionFlag, MagickFalse },
   1410     { "Triangle", TriangleFilter, UndefinedOptionFlag, MagickFalse },
   1411     { "Welch", WelchFilter, UndefinedOptionFlag, MagickFalse },
   1412     { "Welsh", WelchFilter, UndefinedOptionFlag, MagickTrue }, /*misspell*/
   1413     { (char *) NULL, UndefinedFilter, UndefinedOptionFlag, MagickFalse }
   1414   },
   1415   FunctionOptions[] =
   1416   {
   1417     { "Undefined", UndefinedFunction, UndefinedOptionFlag, MagickTrue },
   1418     { "Polynomial", PolynomialFunction, UndefinedOptionFlag, MagickFalse },
   1419     { "Sinusoid", SinusoidFunction, UndefinedOptionFlag, MagickFalse },
   1420     { "ArcSin", ArcsinFunction, UndefinedOptionFlag, MagickFalse },
   1421     { "ArcTan", ArctanFunction, UndefinedOptionFlag, MagickFalse },
   1422     { (char *) NULL, UndefinedFunction, UndefinedOptionFlag, MagickFalse }
   1423   },
   1424   GradientOptions[] =
   1425   {
   1426     { "Undefined", UndefinedGradient, UndefinedOptionFlag, MagickTrue },
   1427     { "Linear", LinearGradient, UndefinedOptionFlag, MagickFalse },
   1428     { "Radial", RadialGradient, UndefinedOptionFlag, MagickFalse },
   1429     { (char *) NULL, UndefinedRule, UndefinedOptionFlag, MagickFalse }
   1430   },
   1431   GravityOptions[] =
   1432   {
   1433     { "Undefined", UndefinedGravity, UndefinedOptionFlag, MagickTrue },
   1434     { "None", UndefinedGravity, UndefinedOptionFlag, MagickFalse },
   1435     { "Center", CenterGravity, UndefinedOptionFlag, MagickFalse },
   1436     { "East", EastGravity, UndefinedOptionFlag, MagickFalse },
   1437     { "Forget", ForgetGravity, UndefinedOptionFlag, MagickFalse },
   1438     { "NorthEast", NorthEastGravity, UndefinedOptionFlag, MagickFalse },
   1439     { "North", NorthGravity, UndefinedOptionFlag, MagickFalse },
   1440     { "NorthWest", NorthWestGravity, UndefinedOptionFlag, MagickFalse },
   1441     { "SouthEast", SouthEastGravity, UndefinedOptionFlag, MagickFalse },
   1442     { "South", SouthGravity, UndefinedOptionFlag, MagickFalse },
   1443     { "SouthWest", SouthWestGravity, UndefinedOptionFlag, MagickFalse },
   1444     { "West", WestGravity, UndefinedOptionFlag, MagickFalse },
   1445     { (char *) NULL, UndefinedGravity, UndefinedOptionFlag, MagickFalse }
   1446   },
   1447   IntentOptions[] =
   1448   {
   1449     { "Undefined", UndefinedIntent, UndefinedOptionFlag, MagickTrue },
   1450     { "Absolute", AbsoluteIntent, UndefinedOptionFlag, MagickFalse },
   1451     { "Perceptual", PerceptualIntent, UndefinedOptionFlag, MagickFalse },
   1452     { "Relative", RelativeIntent, UndefinedOptionFlag, MagickFalse },
   1453     { "Saturation", SaturationIntent, UndefinedOptionFlag, MagickFalse },
   1454     { (char *) NULL, UndefinedIntent, UndefinedOptionFlag, MagickFalse }
   1455   },
   1456   InterlaceOptions[] =
   1457   {
   1458     { "Undefined", UndefinedInterlace, UndefinedOptionFlag, MagickTrue },
   1459     { "Line", LineInterlace, UndefinedOptionFlag, MagickFalse },
   1460     { "None", NoInterlace, UndefinedOptionFlag, MagickFalse },
   1461     { "Plane", PlaneInterlace, UndefinedOptionFlag, MagickFalse },
   1462     { "Partition", PartitionInterlace, UndefinedOptionFlag, MagickFalse },
   1463     { "GIF", GIFInterlace, UndefinedOptionFlag, MagickFalse },
   1464     { "JPEG", JPEGInterlace, UndefinedOptionFlag, MagickFalse },
   1465     { "PNG", PNGInterlace, UndefinedOptionFlag, MagickFalse },
   1466     { (char *) NULL, UndefinedInterlace, UndefinedOptionFlag, MagickFalse }
   1467   },
   1468   InterpolateOptions[] =
   1469   {
   1470     { "Undefined", UndefinedInterpolatePixel, UndefinedOptionFlag, MagickTrue },
   1471     { "Average", AverageInterpolatePixel, UndefinedOptionFlag, MagickFalse },
   1472     { "Average4", AverageInterpolatePixel, UndefinedOptionFlag, MagickFalse },
   1473     { "Average9", Average9InterpolatePixel, UndefinedOptionFlag, MagickFalse },
   1474     { "Average16", Average16InterpolatePixel, UndefinedOptionFlag, MagickFalse },
   1475     { "Background", BackgroundInterpolatePixel, UndefinedOptionFlag, MagickFalse },
   1476     { "Bilinear", BilinearInterpolatePixel, UndefinedOptionFlag, MagickFalse },
   1477     { "Blend", BlendInterpolatePixel, UndefinedOptionFlag, MagickFalse },
   1478     { "Catrom", CatromInterpolatePixel, UndefinedOptionFlag, MagickFalse },
   1479     { "Integer", IntegerInterpolatePixel, UndefinedOptionFlag, MagickFalse },
   1480     { "Mesh", MeshInterpolatePixel, UndefinedOptionFlag, MagickFalse },
   1481     { "Nearest", NearestInterpolatePixel, UndefinedOptionFlag, MagickFalse },
   1482     { "NearestNeighbor", NearestInterpolatePixel, UndefinedOptionFlag, MagickTrue },
   1483     { "Spline", SplineInterpolatePixel, UndefinedOptionFlag, MagickFalse },
   1484 /*  { "Filter", FilterInterpolatePixel, UndefinedOptionFlag, MagickFalse }, */
   1485     { (char *) NULL, UndefinedInterpolatePixel, UndefinedOptionFlag, MagickFalse }
   1486   },
   1487   KernelOptions[] =
   1488   {
   1489     { "Undefined", UndefinedKernel, UndefinedOptionFlag, MagickTrue },
   1490     { "Unity", UnityKernel, UndefinedOptionFlag, MagickFalse },
   1491     { "Gaussian", GaussianKernel, UndefinedOptionFlag, MagickFalse },
   1492     { "DoG", DoGKernel, UndefinedOptionFlag, MagickFalse },
   1493     { "LoG", LoGKernel, UndefinedOptionFlag, MagickFalse },
   1494     { "Blur", BlurKernel, UndefinedOptionFlag, MagickFalse },
   1495     { "Comet", CometKernel, UndefinedOptionFlag, MagickFalse },
   1496     { "Binomial", BinomialKernel, UndefinedOptionFlag, MagickFalse },
   1497     { "Laplacian", LaplacianKernel, UndefinedOptionFlag, MagickFalse },
   1498     { "Sobel", SobelKernel, UndefinedOptionFlag, MagickFalse },
   1499     { "FreiChen", FreiChenKernel, UndefinedOptionFlag, MagickFalse },
   1500     { "Roberts", RobertsKernel, UndefinedOptionFlag, MagickFalse },
   1501     { "Prewitt", PrewittKernel, UndefinedOptionFlag, MagickFalse },
   1502     { "Compass", CompassKernel, UndefinedOptionFlag, MagickFalse },
   1503     { "Kirsch", KirschKernel, UndefinedOptionFlag, MagickFalse },
   1504     { "Diamond", DiamondKernel, UndefinedOptionFlag, MagickFalse },
   1505     { "Square", SquareKernel, UndefinedOptionFlag, MagickFalse },
   1506     { "Rectangle", RectangleKernel, UndefinedOptionFlag, MagickFalse },
   1507     { "Disk", DiskKernel, UndefinedOptionFlag, MagickFalse },
   1508     { "Octagon", OctagonKernel, UndefinedOptionFlag, MagickFalse },
   1509     { "Plus", PlusKernel, UndefinedOptionFlag, MagickFalse },
   1510     { "Cross", CrossKernel, UndefinedOptionFlag, MagickFalse },
   1511     { "Ring", RingKernel, UndefinedOptionFlag, MagickFalse },
   1512     { "Peaks", PeaksKernel, UndefinedOptionFlag, MagickFalse },
   1513     { "Edges", EdgesKernel, UndefinedOptionFlag, MagickFalse },
   1514     { "Corners", CornersKernel, UndefinedOptionFlag, MagickFalse },
   1515     { "Diagonals", DiagonalsKernel, UndefinedOptionFlag, MagickFalse },
   1516     { "LineEnds", LineEndsKernel, UndefinedOptionFlag, MagickFalse },
   1517     { "LineJunctions", LineJunctionsKernel, UndefinedOptionFlag, MagickFalse },
   1518     { "Ridges", RidgesKernel, UndefinedOptionFlag, MagickFalse },
   1519     { "ConvexHull", ConvexHullKernel, UndefinedOptionFlag, MagickFalse },
   1520     { "ThinSe", ThinSEKernel, UndefinedOptionFlag, MagickFalse },
   1521     { "Skeleton", SkeletonKernel, UndefinedOptionFlag, MagickFalse },
   1522     { "Chebyshev", ChebyshevKernel, UndefinedOptionFlag, MagickFalse },
   1523     { "Manhattan", ManhattanKernel, UndefinedOptionFlag, MagickFalse },
   1524     { "Octagonal", OctagonalKernel, UndefinedOptionFlag, MagickFalse },
   1525     { "Euclidean", EuclideanKernel, UndefinedOptionFlag, MagickFalse },
   1526     { "User Defined", UserDefinedKernel, UndefinedOptionFlag, MagickTrue },
   1527     { (char *) NULL, UndefinedKernel, UndefinedOptionFlag, MagickFalse }
   1528   },
   1529   LayerOptions[] =
   1530   {
   1531     { "Undefined", UndefinedLayer, UndefinedOptionFlag, MagickTrue },
   1532     { "Coalesce", CoalesceLayer, UndefinedOptionFlag, MagickFalse },
   1533     { "CompareAny", CompareAnyLayer, UndefinedOptionFlag, MagickFalse },
   1534     { "CompareClear", CompareClearLayer, UndefinedOptionFlag, MagickFalse },
   1535     { "CompareOverlay", CompareOverlayLayer, UndefinedOptionFlag, MagickFalse },
   1536     { "Dispose", DisposeLayer, UndefinedOptionFlag, MagickFalse },
   1537     { "Optimize", OptimizeLayer, UndefinedOptionFlag, MagickFalse },
   1538     { "OptimizeFrame", OptimizeImageLayer, UndefinedOptionFlag, MagickFalse },
   1539     { "OptimizePlus", OptimizePlusLayer, UndefinedOptionFlag, MagickFalse },
   1540     { "OptimizeTransparency", OptimizeTransLayer, UndefinedOptionFlag, MagickFalse },
   1541     { "RemoveDups", RemoveDupsLayer, UndefinedOptionFlag, MagickFalse },
   1542     { "RemoveZero", RemoveZeroLayer, UndefinedOptionFlag, MagickFalse },
   1543     { "Composite", CompositeLayer, UndefinedOptionFlag, MagickFalse },
   1544     { "Merge", MergeLayer, UndefinedOptionFlag, MagickFalse },
   1545     { "Flatten", FlattenLayer, UndefinedOptionFlag, MagickFalse },
   1546     { "Mosaic", MosaicLayer, UndefinedOptionFlag, MagickFalse },
   1547     { "TrimBounds", TrimBoundsLayer, UndefinedOptionFlag, MagickFalse },
   1548     { (char *) NULL, UndefinedLayer, UndefinedOptionFlag, MagickFalse }
   1549   },
   1550   LineCapOptions[] =
   1551   {
   1552     { "Undefined", UndefinedCap, UndefinedOptionFlag, MagickTrue },
   1553     { "Butt", ButtCap, UndefinedOptionFlag, MagickFalse },
   1554     { "Round", RoundCap, UndefinedOptionFlag, MagickFalse },
   1555     { "Square", SquareCap, UndefinedOptionFlag, MagickFalse },
   1556     { (char *) NULL, UndefinedCap, UndefinedOptionFlag, MagickFalse }
   1557   },
   1558   LineJoinOptions[] =
   1559   {
   1560     { "Undefined", UndefinedJoin, UndefinedOptionFlag, MagickTrue },
   1561     { "Bevel", BevelJoin, UndefinedOptionFlag, MagickFalse },
   1562     { "Miter", MiterJoin, UndefinedOptionFlag, MagickFalse },
   1563     { "Round", RoundJoin, UndefinedOptionFlag, MagickFalse },
   1564     { (char *) NULL, UndefinedJoin, UndefinedOptionFlag, MagickFalse }
   1565   },
   1566   ListOptions[] =
   1567   {
   1568     { "Align", MagickAlignOptions, UndefinedOptionFlag, MagickFalse },
   1569     { "Alpha", MagickAlphaChannelOptions, UndefinedOptionFlag, MagickFalse },
   1570     { "AutoThreshold", MagickAutoThresholdOptions, UndefinedOptionFlag, MagickFalse },
   1571     { "Boolean", MagickBooleanOptions, UndefinedOptionFlag, MagickFalse },
   1572     { "Cache", MagickCacheOptions, UndefinedOptionFlag, MagickFalse },
   1573     { "Channel", MagickChannelOptions, UndefinedOptionFlag, MagickFalse },
   1574     { "Class", MagickClassOptions, UndefinedOptionFlag, MagickFalse },
   1575     { "CLI", MagickCLIOptions, UndefinedOptionFlag, MagickFalse },
   1576     { "ClipPath", MagickClipPathOptions, UndefinedOptionFlag, MagickFalse },
   1577     { "Coder", MagickCoderOptions, UndefinedOptionFlag, MagickFalse },
   1578     { "Color", MagickColorOptions, UndefinedOptionFlag, MagickFalse },
   1579     { "Colorspace", MagickColorspaceOptions, UndefinedOptionFlag, MagickFalse },
   1580     { "Command", MagickCommandOptions, UndefinedOptionFlag, MagickFalse },
   1581     { "Compliance", MagickComplianceOptions, UndefinedOptionFlag, MagickFalse },
   1582     { "Complex", MagickComplexOptions, UndefinedOptionFlag, MagickFalse },
   1583     { "Compose", MagickComposeOptions, UndefinedOptionFlag, MagickFalse },
   1584     { "Compress", MagickCompressOptions, UndefinedOptionFlag, MagickFalse },
   1585     { "Configure", MagickConfigureOptions, UndefinedOptionFlag, MagickFalse },
   1586     { "DataType", MagickDataTypeOptions, UndefinedOptionFlag, MagickFalse },
   1587     { "Debug", MagickDebugOptions, UndefinedOptionFlag, MagickFalse },
   1588     { "Decoration", MagickDecorateOptions, UndefinedOptionFlag, MagickFalse },
   1589     { "Delegate", MagickDelegateOptions, UndefinedOptionFlag, MagickFalse },
   1590     { "Direction", MagickDirectionOptions, UndefinedOptionFlag, MagickFalse },
   1591     { "Dispose", MagickDisposeOptions, UndefinedOptionFlag, MagickFalse },
   1592     { "Distort", MagickDistortOptions, UndefinedOptionFlag, MagickFalse },
   1593     { "Dither", MagickDitherOptions, UndefinedOptionFlag, MagickFalse },
   1594     { "Endian", MagickEndianOptions, UndefinedOptionFlag, MagickFalse },
   1595     { "Evaluate", MagickEvaluateOptions, UndefinedOptionFlag, MagickFalse },
   1596     { "FillRule", MagickFillRuleOptions, UndefinedOptionFlag, MagickFalse },
   1597     { "Filter", MagickFilterOptions, UndefinedOptionFlag, MagickFalse },
   1598     { "Font", MagickFontOptions, UndefinedOptionFlag, MagickFalse },
   1599     { "Format", MagickFormatOptions, UndefinedOptionFlag, MagickFalse },
   1600     { "Function", MagickFunctionOptions, UndefinedOptionFlag, MagickFalse },
   1601     { "Gradient", MagickGradientOptions, UndefinedOptionFlag, MagickFalse },
   1602     { "Gravity", MagickGravityOptions, UndefinedOptionFlag, MagickFalse },
   1603     { "Intensity", MagickPixelIntensityOptions, UndefinedOptionFlag, MagickFalse },
   1604     { "Intent", MagickIntentOptions, UndefinedOptionFlag, MagickFalse },
   1605     { "Interlace", MagickInterlaceOptions, UndefinedOptionFlag, MagickFalse },
   1606     { "Interpolate", MagickInterpolateOptions, UndefinedOptionFlag, MagickFalse },
   1607     { "Kernel", MagickKernelOptions, UndefinedOptionFlag, MagickFalse },
   1608     { "Layers", MagickLayerOptions, UndefinedOptionFlag, MagickFalse },
   1609     { "LineCap", MagickLineCapOptions, UndefinedOptionFlag, MagickFalse },
   1610     { "LineJoin", MagickLineJoinOptions, UndefinedOptionFlag, MagickFalse },
   1611     { "List", MagickListOptions, UndefinedOptionFlag, MagickFalse },
   1612     { "Locale", MagickLocaleOptions, UndefinedOptionFlag, MagickFalse },
   1613     { "LogEvent", MagickLogEventOptions, UndefinedOptionFlag, MagickFalse },
   1614     { "Log", MagickLogOptions, UndefinedOptionFlag, MagickFalse },
   1615     { "Magic", MagickMagicOptions, UndefinedOptionFlag, MagickFalse },
   1616     { "Method", MagickMethodOptions, UndefinedOptionFlag, MagickFalse },
   1617     { "Metric", MagickMetricOptions, UndefinedOptionFlag, MagickFalse },
   1618     { "Mime", MagickMimeOptions, UndefinedOptionFlag, MagickFalse },
   1619     { "Mode", MagickModeOptions, UndefinedOptionFlag, MagickFalse },
   1620     { "Morphology", MagickMorphologyOptions, UndefinedOptionFlag, MagickFalse },
   1621     { "Module", MagickModuleOptions, UndefinedOptionFlag, MagickFalse },
   1622     { "Noise", MagickNoiseOptions, UndefinedOptionFlag, MagickFalse },
   1623     { "Orientation", MagickOrientationOptions, UndefinedOptionFlag, MagickFalse },
   1624     { "PixelChannel", MagickPixelChannelOptions, UndefinedOptionFlag, MagickFalse },
   1625     { "PixelIntensity", MagickPixelIntensityOptions, UndefinedOptionFlag, MagickFalse },
   1626     { "PixelMask", MagickPixelMaskOptions, UndefinedOptionFlag, MagickFalse },
   1627     { "PixelTrait", MagickPixelTraitOptions, UndefinedOptionFlag, MagickFalse },
   1628     { "Policy", MagickPolicyOptions, UndefinedOptionFlag, MagickFalse },
   1629     { "PolicyDomain", MagickPolicyDomainOptions, UndefinedOptionFlag, MagickFalse },
   1630     { "PolicyRights", MagickPolicyRightsOptions, UndefinedOptionFlag, MagickFalse },
   1631     { "Preview", MagickPreviewOptions, UndefinedOptionFlag, MagickFalse },
   1632     { "Primitive", MagickPrimitiveOptions, UndefinedOptionFlag, MagickFalse },
   1633     { "QuantumFormat", MagickQuantumFormatOptions, UndefinedOptionFlag, MagickFalse },
   1634     { "Resource", MagickResourceOptions, UndefinedOptionFlag, MagickFalse },
   1635     { "SparseColor", MagickSparseColorOptions, UndefinedOptionFlag, MagickFalse },
   1636     { "Statistic", MagickStatisticOptions, UndefinedOptionFlag, MagickFalse },
   1637     { "Storage", MagickStorageOptions, UndefinedOptionFlag, MagickFalse },
   1638     { "Stretch", MagickStretchOptions, UndefinedOptionFlag, MagickFalse },
   1639     { "Style", MagickStyleOptions, UndefinedOptionFlag, MagickFalse },
   1640     { "Threshold", MagickThresholdOptions, UndefinedOptionFlag, MagickFalse },
   1641     { "Tool", MagickToolOptions, UndefinedOptionFlag, MagickFalse },
   1642     { "Type", MagickTypeOptions, UndefinedOptionFlag, MagickFalse },
   1643     { "Units", MagickResolutionOptions, UndefinedOptionFlag, MagickFalse },
   1644     { "Undefined", MagickUndefinedOptions, UndefinedOptionFlag, MagickTrue },
   1645     { "Validate", MagickValidateOptions, UndefinedOptionFlag, MagickFalse },
   1646     { "VirtualPixel", MagickVirtualPixelOptions, UndefinedOptionFlag, MagickFalse },
   1647     { "Weight", MagickWeightOptions, UndefinedOptionFlag, MagickFalse },
   1648     { (char *) NULL, MagickUndefinedOptions, UndefinedOptionFlag, MagickFalse }
   1649   },
   1650   LogEventOptions[] =
   1651   {
   1652     { "Undefined", UndefinedEvents, UndefinedOptionFlag, MagickTrue },
   1653     { "All", (AllEvents &~ TraceEvent), UndefinedOptionFlag, MagickFalse },
   1654     { "Accelerate", AccelerateEvent, UndefinedOptionFlag, MagickFalse },
   1655     { "Annotate", AnnotateEvent, UndefinedOptionFlag, MagickFalse },
   1656     { "Blob", BlobEvent, UndefinedOptionFlag, MagickFalse },
   1657     { "Cache", CacheEvent, UndefinedOptionFlag, MagickFalse },
   1658     { "Coder", CoderEvent, UndefinedOptionFlag, MagickFalse },
   1659     { "Command", CommandEvent, UndefinedOptionFlag, MagickFalse },
   1660     { "Configure", ConfigureEvent, UndefinedOptionFlag, MagickFalse },
   1661     { "Deprecate", DeprecateEvent, UndefinedOptionFlag, MagickFalse },
   1662     { "Draw", DrawEvent, UndefinedOptionFlag, MagickFalse },
   1663     { "Exception", ExceptionEvent, UndefinedOptionFlag, MagickFalse },
   1664     { "Locale", LocaleEvent, UndefinedOptionFlag, MagickFalse },
   1665     { "Module", ModuleEvent, UndefinedOptionFlag, MagickFalse },
   1666     { "None", NoEvents, UndefinedOptionFlag, MagickFalse },
   1667     { "Pixel", PixelEvent, UndefinedOptionFlag, MagickFalse },
   1668     { "Policy", PolicyEvent, UndefinedOptionFlag, MagickFalse },
   1669     { "Resource", ResourceEvent, UndefinedOptionFlag, MagickFalse },
   1670     { "Trace", TraceEvent, UndefinedOptionFlag, MagickFalse },
   1671     { "Transform", TransformEvent, UndefinedOptionFlag, MagickFalse },
   1672     { "User", UserEvent, UndefinedOptionFlag, MagickFalse },
   1673     { "Wand", WandEvent, UndefinedOptionFlag, MagickFalse },
   1674     { "X11", X11Event, UndefinedOptionFlag, MagickFalse },
   1675     { (char *) NULL, UndefinedEvents, UndefinedOptionFlag, MagickFalse }
   1676   },
   1677   MetricOptions[] =
   1678   {
   1679     { "Undefined", UndefinedErrorMetric, UndefinedOptionFlag, MagickTrue },
   1680     { "AE", AbsoluteErrorMetric, UndefinedOptionFlag, MagickFalse },
   1681     { "DSSIM", StructuralDissimilarityErrorMetric, UndefinedOptionFlag, MagickFalse },
   1682     { "Fuzz", FuzzErrorMetric, UndefinedOptionFlag, MagickFalse },
   1683     { "MAE", MeanAbsoluteErrorMetric, UndefinedOptionFlag, MagickFalse },
   1684     { "MEPP", MeanErrorPerPixelErrorMetric, UndefinedOptionFlag, MagickFalse },
   1685     { "MSE", MeanSquaredErrorMetric, UndefinedOptionFlag, MagickFalse },
   1686     { "NCC", NormalizedCrossCorrelationErrorMetric, UndefinedOptionFlag, MagickFalse },
   1687     { "PAE", PeakAbsoluteErrorMetric, UndefinedOptionFlag, MagickFalse },
   1688     { "PHASH", PerceptualHashErrorMetric, UndefinedOptionFlag, MagickFalse },
   1689     { "PSNR", PeakSignalToNoiseRatioErrorMetric, UndefinedOptionFlag, MagickFalse },
   1690     { "RMSE", RootMeanSquaredErrorMetric, UndefinedOptionFlag, MagickFalse },
   1691     { "SSIM", StructuralSimilarityErrorMetric, UndefinedOptionFlag, MagickFalse },
   1692     { (char *) NULL, UndefinedErrorMetric, UndefinedOptionFlag, MagickFalse }
   1693   },
   1694   MethodOptions[] =
   1695   {
   1696     { "Undefined", UndefinedMethod, UndefinedOptionFlag, MagickTrue },
   1697     { "FillToBorder", FillToBorderMethod, UndefinedOptionFlag, MagickFalse },
   1698     { "Floodfill", FloodfillMethod, UndefinedOptionFlag, MagickFalse },
   1699     { "Point", PointMethod, UndefinedOptionFlag, MagickFalse },
   1700     { "Replace", ReplaceMethod, UndefinedOptionFlag, MagickFalse },
   1701     { "Reset", ResetMethod, UndefinedOptionFlag, MagickFalse },
   1702     { (char *) NULL, UndefinedMethod, UndefinedOptionFlag, MagickFalse }
   1703   },
   1704   ModeOptions[] =
   1705   {
   1706     { "Undefined", UndefinedMode, UndefinedOptionFlag, MagickTrue },
   1707     { "Concatenate", ConcatenateMode, UndefinedOptionFlag, MagickFalse },
   1708     { "Frame", FrameMode, UndefinedOptionFlag, MagickFalse },
   1709     { "Unframe", UnframeMode, UndefinedOptionFlag, MagickFalse },
   1710     { (char *) NULL, UndefinedMode, UndefinedOptionFlag, MagickFalse }
   1711   },
   1712   MorphologyOptions[] =
   1713   {
   1714     { "Undefined", UndefinedMorphology, UndefinedOptionFlag, MagickTrue },
   1715     { "Correlate", CorrelateMorphology, UndefinedOptionFlag, MagickFalse },
   1716     { "Convolve", ConvolveMorphology, UndefinedOptionFlag, MagickFalse },
   1717     { "Dilate", DilateMorphology, UndefinedOptionFlag, MagickFalse },
   1718     { "Erode", ErodeMorphology, UndefinedOptionFlag, MagickFalse },
   1719     { "Close", CloseMorphology, UndefinedOptionFlag, MagickFalse },
   1720     { "Open", OpenMorphology, UndefinedOptionFlag, MagickFalse },
   1721     { "DilateIntensity", DilateIntensityMorphology, UndefinedOptionFlag, MagickFalse },
   1722     { "ErodeIntensity", ErodeIntensityMorphology, UndefinedOptionFlag, MagickFalse },
   1723     { "CloseIntensity", CloseIntensityMorphology, UndefinedOptionFlag, MagickFalse },
   1724     { "OpenIntensity", OpenIntensityMorphology, UndefinedOptionFlag, MagickFalse },
   1725     { "DilateI", DilateIntensityMorphology, UndefinedOptionFlag, MagickFalse },
   1726     { "ErodeI", ErodeIntensityMorphology, UndefinedOptionFlag, MagickFalse },
   1727     { "CloseI", CloseIntensityMorphology, UndefinedOptionFlag, MagickFalse },
   1728     { "OpenI", OpenIntensityMorphology, UndefinedOptionFlag, MagickFalse },
   1729     { "Smooth", SmoothMorphology, UndefinedOptionFlag, MagickFalse },
   1730     { "EdgeOut", EdgeOutMorphology, UndefinedOptionFlag, MagickFalse },
   1731     { "EdgeIn", EdgeInMorphology, UndefinedOptionFlag, MagickFalse },
   1732     { "Edge", EdgeMorphology, UndefinedOptionFlag, MagickFalse },
   1733     { "TopHat", TopHatMorphology, UndefinedOptionFlag, MagickFalse },
   1734     { "BottomHat", BottomHatMorphology, UndefinedOptionFlag, MagickFalse },
   1735     { "Hmt", HitAndMissMorphology, UndefinedOptionFlag, MagickFalse },
   1736     { "HitNMiss", HitAndMissMorphology, UndefinedOptionFlag, MagickFalse },
   1737     { "HitAndMiss", HitAndMissMorphology, UndefinedOptionFlag, MagickFalse },
   1738     { "Thinning", ThinningMorphology, UndefinedOptionFlag, MagickFalse },
   1739     { "Thicken", ThickenMorphology, UndefinedOptionFlag, MagickFalse },
   1740     { "Distance", DistanceMorphology, UndefinedOptionFlag, MagickFalse },
   1741     { "IterativeDistance", IterativeDistanceMorphology, UndefinedOptionFlag, MagickFalse },
   1742     { "Voronoi", VoronoiMorphology, UndefinedOptionFlag, MagickTrue },
   1743     { (char *) NULL, UndefinedMorphology, UndefinedOptionFlag, MagickFalse }
   1744   },
   1745   NoiseOptions[] =
   1746   {
   1747     { "Undefined", UndefinedNoise, UndefinedOptionFlag, MagickTrue },
   1748     { "Gaussian", GaussianNoise, UndefinedOptionFlag, MagickFalse },
   1749     { "Impulse", ImpulseNoise, UndefinedOptionFlag, MagickFalse },
   1750     { "Laplacian", LaplacianNoise, UndefinedOptionFlag, MagickFalse },
   1751     { "Multiplicative", MultiplicativeGaussianNoise, UndefinedOptionFlag, MagickFalse },
   1752     { "Poisson", PoissonNoise, UndefinedOptionFlag, MagickFalse },
   1753     { "Random", RandomNoise, UndefinedOptionFlag, MagickFalse },
   1754     { "Uniform", UniformNoise, UndefinedOptionFlag, MagickFalse },
   1755     { (char *) NULL, UndefinedNoise, UndefinedOptionFlag, MagickFalse }
   1756   },
   1757   OrientationOptions[] =
   1758   {
   1759     { "Undefined", UndefinedOrientation, UndefinedOptionFlag, MagickTrue },
   1760     { "TopLeft", TopLeftOrientation, UndefinedOptionFlag, MagickFalse },
   1761     { "TopRight", TopRightOrientation, UndefinedOptionFlag, MagickFalse },
   1762     { "BottomRight", BottomRightOrientation, UndefinedOptionFlag, MagickFalse },
   1763     { "BottomLeft", BottomLeftOrientation, UndefinedOptionFlag, MagickFalse },
   1764     { "LeftTop", LeftTopOrientation, UndefinedOptionFlag, MagickFalse },
   1765     { "RightTop", RightTopOrientation, UndefinedOptionFlag, MagickFalse },
   1766     { "RightBottom", RightBottomOrientation, UndefinedOptionFlag, MagickFalse },
   1767     { "LeftBottom", LeftBottomOrientation, UndefinedOptionFlag, MagickFalse },
   1768     { (char *) NULL, UndefinedOrientation, UndefinedOptionFlag, MagickFalse }
   1769   },
   1770   PixelChannelOptions[] =
   1771   {
   1772     { "Undefined", UndefinedPixelChannel, UndefinedOptionFlag, MagickFalse },
   1773     { "A", AlphaPixelChannel, UndefinedOptionFlag, MagickFalse },
   1774     { "Alpha", AlphaPixelChannel, UndefinedOptionFlag, MagickFalse },
   1775     { "B", BluePixelChannel, UndefinedOptionFlag, MagickFalse },
   1776     { "Bk", BlackPixelChannel, UndefinedOptionFlag, MagickFalse },
   1777     { "Black", BlackPixelChannel, UndefinedOptionFlag, MagickFalse },
   1778     { "Blue", BluePixelChannel, UndefinedOptionFlag, MagickFalse },
   1779     { "Cb", CbPixelChannel, UndefinedOptionFlag, MagickFalse },
   1780     { "Composite", CompositePixelChannel, UndefinedOptionFlag, MagickFalse },
   1781     { "CompositeMask", CompositeMaskPixelChannel, UndefinedOptionFlag, MagickFalse },
   1782     { "C", CyanPixelChannel, UndefinedOptionFlag, MagickFalse },
   1783     { "Cr", CrPixelChannel, UndefinedOptionFlag, MagickFalse },
   1784     { "Cyan", CyanPixelChannel, UndefinedOptionFlag, MagickFalse },
   1785     { "Gray", GrayPixelChannel, UndefinedOptionFlag, MagickFalse },
   1786     { "G", GreenPixelChannel, UndefinedOptionFlag, MagickFalse },
   1787     { "Green", GreenPixelChannel, UndefinedOptionFlag, MagickFalse },
   1788     { "Index", IndexPixelChannel, UndefinedOptionFlag, MagickFalse },
   1789     { "Intensity", IntensityPixelChannel, UndefinedOptionFlag, MagickFalse },
   1790     { "K", BlackPixelChannel, UndefinedOptionFlag, MagickFalse },
   1791     { "M", MagentaPixelChannel, UndefinedOptionFlag, MagickFalse },
   1792     { "Magenta", MagentaPixelChannel, UndefinedOptionFlag, MagickFalse },
   1793     { "Meta", MetaPixelChannel, UndefinedOptionFlag, MagickFalse },
   1794     { "O", AlphaPixelChannel, UndefinedOptionFlag, MagickFalse },
   1795     { "R", RedPixelChannel, UndefinedOptionFlag, MagickFalse },
   1796     { "ReadMask", ReadMaskPixelChannel, UndefinedOptionFlag, MagickFalse },
   1797     { "Red", RedPixelChannel, UndefinedOptionFlag, MagickFalse },
   1798     { "Sync", SyncPixelChannel, UndefinedOptionFlag, MagickFalse },
   1799     { "WriteMask", WriteMaskPixelChannel, UndefinedOptionFlag, MagickFalse },
   1800     { "Y", YellowPixelChannel, UndefinedOptionFlag, MagickFalse },
   1801     { "Yellow", YellowPixelChannel, UndefinedOptionFlag, MagickFalse },
   1802     { (char *) NULL, UndefinedPixelChannel, UndefinedOptionFlag, MagickFalse }
   1803   },
   1804   PixelIntensityOptions[] =
   1805   {
   1806     { "Undefined", UndefinedPixelIntensityMethod, UndefinedOptionFlag, MagickTrue },
   1807     { "Average", AveragePixelIntensityMethod, UndefinedOptionFlag, MagickFalse },
   1808     { "Brightness", BrightnessPixelIntensityMethod, UndefinedOptionFlag, MagickFalse },
   1809     { "Lightness", LightnessPixelIntensityMethod, UndefinedOptionFlag, MagickFalse },
   1810     { "Mean", AveragePixelIntensityMethod, UndefinedOptionFlag, MagickFalse },
   1811     { "MS", MSPixelIntensityMethod, UndefinedOptionFlag, MagickFalse },
   1812     { "Rec601Luma", Rec601LumaPixelIntensityMethod, UndefinedOptionFlag, MagickFalse },
   1813     { "Rec601Luminance", Rec601LuminancePixelIntensityMethod, UndefinedOptionFlag, MagickFalse },
   1814     { "Rec709Luma", Rec709LumaPixelIntensityMethod, UndefinedOptionFlag, MagickFalse },
   1815     { "Rec709Luminance", Rec709LuminancePixelIntensityMethod, UndefinedOptionFlag, MagickFalse },
   1816     { "RMS", RMSPixelIntensityMethod, UndefinedOptionFlag, MagickFalse },
   1817     { (char *) NULL, UndefinedPixelIntensityMethod, UndefinedOptionFlag, MagickFalse }
   1818   },
   1819   PixelMaskOptions[] =
   1820   {
   1821     { "Undefined", UndefinedPixelMask, UndefinedOptionFlag, MagickTrue },
   1822     { "R", ReadPixelMask, UndefinedOptionFlag, MagickFalse },
   1823     { "Read", ReadPixelMask, UndefinedOptionFlag, MagickFalse },
   1824     { "W", WritePixelMask, UndefinedOptionFlag, MagickFalse },
   1825     { "Write", WritePixelMask, UndefinedOptionFlag, MagickFalse },
   1826     { (char *) NULL, UndefinedPixelMask, UndefinedOptionFlag, MagickFalse }
   1827   },
   1828   PixelTraitOptions[] =
   1829   {
   1830     { "Undefined", UndefinedPixelTrait, UndefinedOptionFlag, MagickTrue },
   1831     { "Blend", BlendPixelTrait, UndefinedOptionFlag, MagickFalse },
   1832     { "Copy", CopyPixelTrait, UndefinedOptionFlag, MagickFalse },
   1833     { "Update", UpdatePixelTrait, UndefinedOptionFlag, MagickFalse },
   1834     { (char *) NULL, UndefinedPixelTrait, UndefinedOptionFlag, MagickFalse }
   1835   },
   1836   PolicyDomainOptions[] =
   1837   {
   1838     { "Undefined", UndefinedPolicyDomain, UndefinedOptionFlag, MagickTrue },
   1839     { "Cache", CachePolicyDomain, UndefinedOptionFlag, MagickFalse },
   1840     { "Coder", CoderPolicyDomain, UndefinedOptionFlag, MagickFalse },
   1841     { "Delegate", DelegatePolicyDomain, UndefinedOptionFlag, MagickFalse },
   1842     { "Filter", FilterPolicyDomain, UndefinedOptionFlag, MagickFalse },
   1843     { "Module", ModulePolicyDomain, UndefinedOptionFlag, MagickFalse },
   1844     { "Path", PathPolicyDomain, UndefinedOptionFlag, MagickFalse },
   1845     { "Resource", ResourcePolicyDomain, UndefinedOptionFlag, MagickFalse },
   1846     { "System", SystemPolicyDomain, UndefinedOptionFlag, MagickFalse },
   1847     { (char *) NULL, UndefinedPolicyDomain, UndefinedOptionFlag, MagickFalse }
   1848   },
   1849   PolicyRightsOptions[] =
   1850   {
   1851     { "Undefined", UndefinedPolicyRights, UndefinedOptionFlag, MagickTrue },
   1852     { "All", AllPolicyRights, UndefinedOptionFlag, MagickFalse },
   1853     { "Execute", ExecutePolicyRights, UndefinedOptionFlag, MagickFalse },
   1854     { "None", NoPolicyRights, UndefinedOptionFlag, MagickFalse },
   1855     { "Read", ReadPolicyRights, UndefinedOptionFlag, MagickFalse },
   1856     { "Write", WritePolicyRights, UndefinedOptionFlag, MagickFalse },
   1857     { (char *) NULL, UndefinedPolicyRights, UndefinedOptionFlag, MagickFalse }
   1858   },
   1859   PreviewOptions[] =
   1860   {
   1861     { "Undefined", UndefinedPreview, UndefinedOptionFlag, MagickTrue },
   1862     { "AddNoise", AddNoisePreview, UndefinedOptionFlag, MagickFalse },
   1863     { "Blur", BlurPreview, UndefinedOptionFlag, MagickFalse },
   1864     { "Brightness", BrightnessPreview, UndefinedOptionFlag, MagickFalse },
   1865     { "Charcoal", CharcoalDrawingPreview, UndefinedOptionFlag, MagickFalse },
   1866     { "Despeckle", DespecklePreview, UndefinedOptionFlag, MagickFalse },
   1867     { "Dull", DullPreview, UndefinedOptionFlag, MagickFalse },
   1868     { "EdgeDetect", EdgeDetectPreview, UndefinedOptionFlag, MagickFalse },
   1869     { "Gamma", GammaPreview, UndefinedOptionFlag, MagickFalse },
   1870     { "Grayscale", GrayscalePreview, UndefinedOptionFlag, MagickFalse },
   1871     { "Hue", HuePreview, UndefinedOptionFlag, MagickFalse },
   1872     { "Implode", ImplodePreview, UndefinedOptionFlag, MagickFalse },
   1873     { "JPEG", JPEGPreview, UndefinedOptionFlag, MagickFalse },
   1874     { "OilPaint", OilPaintPreview, UndefinedOptionFlag, MagickFalse },
   1875     { "Quantize", QuantizePreview, UndefinedOptionFlag, MagickFalse },
   1876     { "Raise", RaisePreview, UndefinedOptionFlag, MagickFalse },
   1877     { "ReduceNoise", ReduceNoisePreview, UndefinedOptionFlag, MagickFalse },
   1878     { "Roll", RollPreview, UndefinedOptionFlag, MagickFalse },
   1879     { "Rotate", RotatePreview, UndefinedOptionFlag, MagickFalse },
   1880     { "Saturation", SaturationPreview, UndefinedOptionFlag, MagickFalse },
   1881     { "Segment", SegmentPreview, UndefinedOptionFlag, MagickFalse },
   1882     { "Shade", ShadePreview, UndefinedOptionFlag, MagickFalse },
   1883     { "Sharpen", SharpenPreview, UndefinedOptionFlag, MagickFalse },
   1884     { "Shear", ShearPreview, UndefinedOptionFlag, MagickFalse },
   1885     { "Solarize", SolarizePreview, UndefinedOptionFlag, MagickFalse },
   1886     { "Spiff", SpiffPreview, UndefinedOptionFlag, MagickFalse },
   1887     { "Spread", SpreadPreview, UndefinedOptionFlag, MagickFalse },
   1888     { "Swirl", SwirlPreview, UndefinedOptionFlag, MagickFalse },
   1889     { "Threshold", ThresholdPreview, UndefinedOptionFlag, MagickFalse },
   1890     { "Wave", WavePreview, UndefinedOptionFlag, MagickFalse },
   1891     { (char *) NULL, UndefinedPreview, UndefinedOptionFlag, MagickFalse }
   1892   },
   1893   PrimitiveOptions[] =
   1894   {
   1895     { "Undefined", UndefinedPrimitive, UndefinedOptionFlag, MagickTrue },
   1896     { "Alpha", AlphaPrimitive, UndefinedOptionFlag, MagickFalse },
   1897     { "Arc", ArcPrimitive, UndefinedOptionFlag, MagickFalse },
   1898     { "Bezier", BezierPrimitive, UndefinedOptionFlag, MagickFalse },
   1899     { "Circle", CirclePrimitive, UndefinedOptionFlag, MagickFalse },
   1900     { "Color", ColorPrimitive, UndefinedOptionFlag, MagickFalse },
   1901     { "Ellipse", EllipsePrimitive, UndefinedOptionFlag, MagickFalse },
   1902     { "Image", ImagePrimitive, UndefinedOptionFlag, MagickFalse },
   1903     { "Line", LinePrimitive, UndefinedOptionFlag, MagickFalse },
   1904     { "Matte", AlphaPrimitive, UndefinedOptionFlag, MagickFalse },
   1905     { "Path", PathPrimitive, UndefinedOptionFlag, MagickFalse },
   1906     { "Point", PointPrimitive, UndefinedOptionFlag, MagickFalse },
   1907     { "Polygon", PolygonPrimitive, UndefinedOptionFlag, MagickFalse },
   1908     { "Polyline", PolylinePrimitive, UndefinedOptionFlag, MagickFalse },
   1909     { "Rectangle", RectanglePrimitive, UndefinedOptionFlag, MagickFalse },
   1910     { "RoundRectangle", RoundRectanglePrimitive, UndefinedOptionFlag, MagickFalse },
   1911     { "Text", TextPrimitive, UndefinedOptionFlag, MagickFalse },
   1912     { (char *) NULL, UndefinedPrimitive, UndefinedOptionFlag, MagickFalse }
   1913   },
   1914   QuantumFormatOptions[] =
   1915   {
   1916     { "Undefined", UndefinedQuantumFormat, UndefinedOptionFlag, MagickTrue },
   1917     { "FloatingPoint", FloatingPointQuantumFormat, UndefinedOptionFlag, MagickFalse },
   1918     { "Signed", SignedQuantumFormat, UndefinedOptionFlag, MagickFalse },
   1919     { "Unsigned", UnsignedQuantumFormat, UndefinedOptionFlag, MagickFalse },
   1920     { (char *) NULL, FloatingPointQuantumFormat, UndefinedOptionFlag, MagickFalse }
   1921   },
   1922   ResolutionOptions[] =
   1923   {
   1924     { "Undefined", UndefinedResolution, UndefinedOptionFlag, MagickTrue },
   1925     { "PixelsPerInch", PixelsPerInchResolution, UndefinedOptionFlag, MagickFalse },
   1926     { "PixelsPerCentimeter", PixelsPerCentimeterResolution, UndefinedOptionFlag, MagickFalse },
   1927     { "1", UndefinedResolution, UndefinedOptionFlag, MagickFalse },
   1928     { "2", PixelsPerInchResolution, UndefinedOptionFlag, MagickFalse },
   1929     { "3", PixelsPerCentimeterResolution, UndefinedOptionFlag, MagickFalse },
   1930     { (char *) NULL, UndefinedResolution, UndefinedOptionFlag, MagickFalse }
   1931   },
   1932   ResourceOptions[] =
   1933   {
   1934     { "Undefined", UndefinedResource, UndefinedOptionFlag, MagickTrue },
   1935     { "Area", AreaResource, UndefinedOptionFlag, MagickFalse },
   1936     { "Disk", DiskResource, UndefinedOptionFlag, MagickFalse },
   1937     { "File", FileResource, UndefinedOptionFlag, MagickFalse },
   1938     { "Height", HeightResource, UndefinedOptionFlag, MagickFalse },
   1939     { "Map", MapResource, UndefinedOptionFlag, MagickFalse },
   1940     { "Memory", MemoryResource, UndefinedOptionFlag, MagickFalse },
   1941     { "Thread", ThreadResource, UndefinedOptionFlag, MagickFalse },
   1942     { "Throttle", ThrottleResource, UndefinedOptionFlag, MagickFalse },
   1943     { "Time", TimeResource, UndefinedOptionFlag, MagickFalse },
   1944     { "Width", WidthResource, UndefinedOptionFlag, MagickFalse },
   1945     { "ListLength", ListLengthResource, UndefinedOptionFlag, MagickFalse },
   1946     { (char *) NULL, UndefinedResource, UndefinedOptionFlag, MagickFalse }
   1947   },
   1948   SparseColorOptions[] =
   1949   {
   1950     { "Undefined", UndefinedDistortion, UndefinedOptionFlag, MagickTrue },
   1951     { "Barycentric", BarycentricColorInterpolate, UndefinedOptionFlag, MagickFalse },
   1952     { "Bilinear", BilinearColorInterpolate, UndefinedOptionFlag, MagickFalse },
   1953     { "Inverse", InverseColorInterpolate, UndefinedOptionFlag, MagickFalse },
   1954     { "Shepards", ShepardsColorInterpolate, UndefinedOptionFlag, MagickFalse },
   1955     { "Voronoi", VoronoiColorInterpolate, UndefinedOptionFlag, MagickFalse },
   1956     { "Manhattan", ManhattanColorInterpolate, UndefinedOptionFlag, MagickFalse },
   1957     { (char *) NULL, UndefinedResource, UndefinedOptionFlag, MagickFalse }
   1958   },
   1959   StatisticOptions[] =
   1960   {
   1961     { "Undefined", UndefinedStatistic, UndefinedOptionFlag, MagickTrue },
   1962     { "Gradient", GradientStatistic, UndefinedOptionFlag, MagickFalse },
   1963     { "Maximum", MaximumStatistic, UndefinedOptionFlag, MagickFalse },
   1964     { "Mean", MeanStatistic, UndefinedOptionFlag, MagickFalse },
   1965     { "Median", MedianStatistic, UndefinedOptionFlag, MagickFalse },
   1966     { "Minimum", MinimumStatistic, UndefinedOptionFlag, MagickFalse },
   1967     { "Mode", ModeStatistic, UndefinedOptionFlag, MagickFalse },
   1968     { "NonPeak", NonpeakStatistic, UndefinedOptionFlag, MagickFalse },
   1969     { "RootMeanSquare", RootMeanSquareStatistic, UndefinedOptionFlag, MagickFalse },
   1970     { "RMS", RootMeanSquareStatistic, UndefinedOptionFlag, MagickFalse },
   1971     { "StandardDeviation", StandardDeviationStatistic, UndefinedOptionFlag, MagickFalse },
   1972     { (char *) NULL, UndefinedMethod, UndefinedOptionFlag, MagickFalse }
   1973   },
   1974   StorageOptions[] =
   1975   {
   1976     { "Undefined", UndefinedPixel, UndefinedOptionFlag, MagickTrue },
   1977     { "Char", CharPixel, UndefinedOptionFlag, MagickFalse },
   1978     { "Double", DoublePixel, UndefinedOptionFlag, MagickFalse },
   1979     { "Float", FloatPixel, UndefinedOptionFlag, MagickFalse },
   1980     { "Long", LongPixel, UndefinedOptionFlag, MagickFalse },
   1981     { "LongLong", LongLongPixel, UndefinedOptionFlag, MagickFalse },
   1982     { "Quantum", QuantumPixel, UndefinedOptionFlag, MagickFalse },
   1983     { "Short", ShortPixel, UndefinedOptionFlag, MagickFalse },
   1984     { (char *) NULL, UndefinedResource, UndefinedOptionFlag, MagickFalse }
   1985   },
   1986   StretchOptions[] =
   1987   {
   1988     { "Undefined", UndefinedStretch, UndefinedOptionFlag, MagickTrue },
   1989     { "Any", AnyStretch, UndefinedOptionFlag, MagickFalse },
   1990     { "Condensed", CondensedStretch, UndefinedOptionFlag, MagickFalse },
   1991     { "Expanded", ExpandedStretch, UndefinedOptionFlag, MagickFalse },
   1992     { "ExtraCondensed", ExtraCondensedStretch, UndefinedOptionFlag, MagickFalse },
   1993     { "ExtraExpanded", ExtraExpandedStretch, UndefinedOptionFlag, MagickFalse },
   1994     { "Normal", NormalStretch, UndefinedOptionFlag, MagickFalse },
   1995     { "SemiCondensed", SemiCondensedStretch, UndefinedOptionFlag, MagickFalse },
   1996     { "SemiExpanded", SemiExpandedStretch, UndefinedOptionFlag, MagickFalse },
   1997     { "UltraCondensed", UltraCondensedStretch, UndefinedOptionFlag, MagickFalse },
   1998     { "UltraExpanded", UltraExpandedStretch, UndefinedOptionFlag, MagickFalse },
   1999     { (char *) NULL, UndefinedStretch, UndefinedOptionFlag, MagickFalse }
   2000   },
   2001   StyleOptions[] =
   2002   {
   2003     { "Undefined", UndefinedStyle, UndefinedOptionFlag, MagickTrue },
   2004     { "Any", AnyStyle, UndefinedOptionFlag, MagickFalse },
   2005     { "Bold", BoldStyle, UndefinedOptionFlag, MagickFalse },
   2006     { "Italic", ItalicStyle, UndefinedOptionFlag, MagickFalse },
   2007     { "Normal", NormalStyle, UndefinedOptionFlag, MagickFalse },
   2008     { "Oblique", ObliqueStyle, UndefinedOptionFlag, MagickFalse },
   2009     { (char *) NULL, UndefinedStyle, UndefinedOptionFlag, MagickFalse }
   2010   },
   2011   ToolOptions[] =
   2012   {
   2013     { "animate", 0, UndefinedOptionFlag, MagickFalse },
   2014     { "compare", 0, UndefinedOptionFlag, MagickFalse },
   2015     { "composite", 0, UndefinedOptionFlag, MagickFalse },
   2016     { "conjure", 0, UndefinedOptionFlag, MagickFalse },
   2017     { "convert", 0, UndefinedOptionFlag, MagickFalse },
   2018     { "display", 0, UndefinedOptionFlag, MagickFalse },
   2019     { "identify", 0, UndefinedOptionFlag, MagickFalse },
   2020     { "import", 0, UndefinedOptionFlag, MagickFalse },
   2021     { "mogrify", 0, UndefinedOptionFlag, MagickFalse },
   2022     { "montage", 0, UndefinedOptionFlag, MagickFalse },
   2023     { "stream", 0, UndefinedOptionFlag, MagickFalse },
   2024     { (char *) NULL, 0, UndefinedOptionFlag, MagickFalse }
   2025   },
   2026   TypeOptions[] =
   2027   {
   2028     { "Undefined", UndefinedType, UndefinedOptionFlag, MagickTrue },
   2029     { "Bilevel", BilevelType, UndefinedOptionFlag, MagickFalse },
   2030     { "ColorSeparation", ColorSeparationType, UndefinedOptionFlag, MagickFalse },
   2031     { "ColorSeparationAlpha", ColorSeparationAlphaType, UndefinedOptionFlag, MagickFalse },
   2032     { "ColorSeparationMatte", ColorSeparationAlphaType, UndefinedOptionFlag, MagickFalse },
   2033     { "Grayscale", GrayscaleType, UndefinedOptionFlag, MagickFalse },
   2034     { "GrayscaleAlpha", GrayscaleAlphaType, UndefinedOptionFlag, MagickFalse },
   2035     { "GrayscaleMatte", GrayscaleAlphaType, UndefinedOptionFlag, MagickFalse },
   2036     { "Optimize", OptimizeType, UndefinedOptionFlag, MagickFalse },
   2037     { "Palette", PaletteType, UndefinedOptionFlag, MagickFalse },
   2038     { "PaletteBilevelAlpha", PaletteBilevelAlphaType, UndefinedOptionFlag, MagickFalse },
   2039     { "PaletteBilevelMatte", PaletteBilevelAlphaType, UndefinedOptionFlag, MagickFalse },
   2040     { "PaletteAlpha", PaletteAlphaType, UndefinedOptionFlag, MagickFalse },
   2041     { "PaletteMatte", PaletteAlphaType, UndefinedOptionFlag, MagickFalse },
   2042     { "TrueColorAlpha", TrueColorAlphaType, UndefinedOptionFlag, MagickFalse },
   2043     { "TrueColorMatte", TrueColorAlphaType, UndefinedOptionFlag, MagickFalse },
   2044     { "TrueColor", TrueColorType, UndefinedOptionFlag, MagickFalse },
   2045     { (char *) NULL, UndefinedType, UndefinedOptionFlag, MagickFalse }
   2046   },
   2047   ValidateOptions[] =
   2048   {
   2049     { "Undefined", UndefinedValidate, UndefinedOptionFlag, MagickTrue },
   2050     { "All", AllValidate, UndefinedOptionFlag, MagickFalse },
   2051     { "Colorspace", ColorspaceValidate, UndefinedOptionFlag, MagickFalse },
   2052     { "Compare", CompareValidate, UndefinedOptionFlag, MagickFalse },
   2053     { "Composite", CompositeValidate, UndefinedOptionFlag, MagickFalse },
   2054     { "Convert", ConvertValidate, UndefinedOptionFlag, MagickFalse },
   2055     { "FormatsDisk", FormatsDiskValidate, UndefinedOptionFlag, MagickFalse },
   2056     { "FormatsMap", FormatsMapValidate, UndefinedOptionFlag, MagickFalse },
   2057     { "FormatsMemory", FormatsMemoryValidate, UndefinedOptionFlag, MagickFalse },
   2058     { "Identify", IdentifyValidate, UndefinedOptionFlag, MagickFalse },
   2059     { "ImportExport", ImportExportValidate, UndefinedOptionFlag, MagickFalse },
   2060     { "Montage", MontageValidate, UndefinedOptionFlag, MagickFalse },
   2061     { "Stream", StreamValidate, UndefinedOptionFlag, MagickFalse },
   2062     { "None", NoValidate, UndefinedOptionFlag, MagickFalse },
   2063     { (char *) NULL, UndefinedValidate, UndefinedOptionFlag, MagickFalse }
   2064   },
   2065   VirtualPixelOptions[] =
   2066   {
   2067     { "Undefined", UndefinedVirtualPixelMethod, UndefinedOptionFlag, MagickTrue },
   2068     { "Background", BackgroundVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2069     { "Black", BlackVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2070     { "Constant", BackgroundVirtualPixelMethod, DeprecateOptionFlag, MagickTrue },
   2071     { "CheckerTile", CheckerTileVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2072     { "Dither", DitherVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2073     { "Edge", EdgeVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2074     { "Gray", GrayVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2075     { "HorizontalTile", HorizontalTileVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2076     { "HorizontalTileEdge", HorizontalTileEdgeVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2077     { "Mirror", MirrorVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2078     { "None", TransparentVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2079     { "Random", RandomVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2080     { "Tile", TileVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2081     { "Transparent", TransparentVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2082     { "VerticalTile", VerticalTileVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2083     { "VerticalTileEdge", VerticalTileEdgeVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2084     { "White", WhiteVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
   2085     { (char *) NULL, UndefinedVirtualPixelMethod, UndefinedOptionFlag, MagickFalse }
   2086   },
   2087   WeightOptions[] =
   2088   {
   2089     { "Undefined", 0L, UndefinedOptionFlag, MagickTrue },
   2090     { "Thin", 100L, UndefinedOptionFlag, MagickFalse },
   2091     { "ExtraLight", 200L, UndefinedOptionFlag, MagickFalse },
   2092     { "UltraLight", 200L, UndefinedOptionFlag, MagickFalse },
   2093     { "Light", 300L, DeprecateOptionFlag, MagickTrue },
   2094     { "Normal", 400L, UndefinedOptionFlag, MagickFalse },
   2095     { "Regular", 400L, UndefinedOptionFlag, MagickFalse },
   2096     { "Medium", 500L, UndefinedOptionFlag, MagickFalse },
   2097     { "DemiBold", 600L, UndefinedOptionFlag, MagickFalse },
   2098     { "SemiBold", 600L, UndefinedOptionFlag, MagickFalse },
   2099     { "Bold", 700L, UndefinedOptionFlag, MagickFalse },
   2100     { "ExtraBold", 800L, UndefinedOptionFlag, MagickFalse },
   2101     { "UltraBold", 800L, UndefinedOptionFlag, MagickFalse },
   2102     { "Heavy", 900L, UndefinedOptionFlag, MagickFalse },
   2103     { "Black", 900L, UndefinedOptionFlag, MagickFalse },
   2104     { (char *) NULL, 0L, UndefinedOptionFlag, MagickFalse }
   2105   };
   2106 
   2107 /*
   2109 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2110 %                                                                             %
   2111 %                                                                             %
   2112 %                                                                             %
   2113 %   C l o n e I m a g e O p t i o n s                                         %
   2114 %                                                                             %
   2115 %                                                                             %
   2116 %                                                                             %
   2117 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2118 %
   2119 %  CloneImageOptions() clones all global image options, to another image_info
   2120 %
   2121 %  The format of the CloneImageOptions method is:
   2122 %
   2123 %      MagickBooleanType CloneImageOptions(ImageInfo *image_info,
   2124 %        const ImageInfo *clone_info)
   2125 %
   2126 %  A description of each parameter follows:
   2127 %
   2128 %    o image_info: the image info to recieve the cloned options.
   2129 %
   2130 %    o clone_info: the source image info for options to clone.
   2131 %
   2132 */
   2133 MagickExport MagickBooleanType CloneImageOptions(ImageInfo *image_info,
   2134   const ImageInfo *clone_info)
   2135 {
   2136   assert(image_info != (ImageInfo *) NULL);
   2137   assert(image_info->signature == MagickCoreSignature);
   2138   if (image_info->debug != MagickFalse)
   2139     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
   2140       image_info->filename);
   2141   assert(clone_info != (const ImageInfo *) NULL);
   2142   assert(clone_info->signature == MagickCoreSignature);
   2143   if (clone_info->options != (void *) NULL)
   2144     {
   2145       if (image_info->options != (void *) NULL)
   2146         DestroyImageOptions(image_info);
   2147       image_info->options=CloneSplayTree((SplayTreeInfo *) clone_info->options,
   2148         (void *(*)(void *)) ConstantString,(void *(*)(void *)) ConstantString);
   2149     }
   2150   return(MagickTrue);
   2151 }
   2152 
   2153 /*
   2155 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2156 %                                                                             %
   2157 %                                                                             %
   2158 %                                                                             %
   2159 %   D e f i n e I m a g e O p t i o n                                         %
   2160 %                                                                             %
   2161 %                                                                             %
   2162 %                                                                             %
   2163 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2164 %
   2165 %  DefineImageOption() associates an assignment string of the form
   2166 %  "key=value" with a global image option. It is equivelent to
   2167 %  SetImageOption().
   2168 %
   2169 %  The format of the DefineImageOption method is:
   2170 %
   2171 %      MagickBooleanType DefineImageOption(ImageInfo *image_info,
   2172 %        const char *option)
   2173 %
   2174 %  A description of each parameter follows:
   2175 %
   2176 %    o image_info: the image info.
   2177 %
   2178 %    o option: the image option assignment string.
   2179 %
   2180 */
   2181 MagickExport MagickBooleanType DefineImageOption(ImageInfo *image_info,
   2182   const char *option)
   2183 {
   2184   char
   2185     key[MagickPathExtent],
   2186     value[MagickPathExtent];
   2187 
   2188   register char
   2189     *p;
   2190 
   2191   assert(image_info != (ImageInfo *) NULL);
   2192   assert(option != (const char *) NULL);
   2193   (void) CopyMagickString(key,option,MagickPathExtent);
   2194   for (p=key; *p != '\0'; p++)
   2195     if (*p == '=')
   2196       break;
   2197   *value='\0';
   2198   if (*p == '=')
   2199     (void) CopyMagickString(value,p+1,MagickPathExtent);
   2200   *p='\0';
   2201   return(SetImageOption(image_info,key,value));
   2202 }
   2203 
   2204 /*
   2206 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2207 %                                                                             %
   2208 %                                                                             %
   2209 %                                                                             %
   2210 %   D e l e t e I m a g e O p t i o n                                         %
   2211 %                                                                             %
   2212 %                                                                             %
   2213 %                                                                             %
   2214 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2215 %
   2216 %  DeleteImageOption() deletes an key from the global image options.
   2217 %
   2218 %  Returns MagickTrue is the option is found and deleted from the Options.
   2219 %
   2220 %  The format of the DeleteImageOption method is:
   2221 %
   2222 %      MagickBooleanType DeleteImageOption(ImageInfo *image_info,
   2223 %        const char *key)
   2224 %
   2225 %  A description of each parameter follows:
   2226 %
   2227 %    o image_info: the image info.
   2228 %
   2229 %    o option: the image option.
   2230 %
   2231 */
   2232 MagickExport MagickBooleanType DeleteImageOption(ImageInfo *image_info,
   2233   const char *option)
   2234 {
   2235   assert(image_info != (ImageInfo *) NULL);
   2236   assert(image_info->signature == MagickCoreSignature);
   2237   if (image_info->debug != MagickFalse)
   2238     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
   2239       image_info->filename);
   2240   if (image_info->options == (void *) NULL)
   2241     return(MagickFalse);
   2242   return(DeleteNodeFromSplayTree((SplayTreeInfo *) image_info->options,option));
   2243 }
   2244 
   2245 /*
   2247 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2248 %                                                                             %
   2249 %                                                                             %
   2250 %                                                                             %
   2251 %   D e s t r o y I m a g e O p t i o n s                                     %
   2252 %                                                                             %
   2253 %                                                                             %
   2254 %                                                                             %
   2255 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2256 %
   2257 %  DestroyImageOptions() destroys all global options and associated memory
   2258 %  attached to the given image_info image list.
   2259 %
   2260 %  The format of the DestroyDefines method is:
   2261 %
   2262 %      void DestroyImageOptions(ImageInfo *image_info)
   2263 %
   2264 %  A description of each parameter follows:
   2265 %
   2266 %    o image_info: the image info.
   2267 %
   2268 */
   2269 MagickExport void DestroyImageOptions(ImageInfo *image_info)
   2270 {
   2271   assert(image_info != (ImageInfo *) NULL);
   2272   assert(image_info->signature == MagickCoreSignature);
   2273   if (image_info->debug != MagickFalse)
   2274     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
   2275       image_info->filename);
   2276   if (image_info->options != (void *) NULL)
   2277     image_info->options=DestroySplayTree((SplayTreeInfo *) image_info->options);
   2278 }
   2279 
   2280 /*
   2282 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2283 %                                                                             %
   2284 %                                                                             %
   2285 %                                                                             %
   2286 %   G e t I m a g e O p t i o n                                               %
   2287 %                                                                             %
   2288 %                                                                             %
   2289 %                                                                             %
   2290 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2291 %
   2292 %  GetImageOption() gets a value associated with the global image options.
   2293 %
   2294 %  The returned string is a constant string in the tree and should NOT be
   2295 %  freed by the caller.
   2296 %
   2297 %  The format of the GetImageOption method is:
   2298 %
   2299 %      const char *GetImageOption(const ImageInfo *image_info,
   2300 %        const char *option)
   2301 %
   2302 %  A description of each parameter follows:
   2303 %
   2304 %    o image_info: the image info.
   2305 %
   2306 %    o option: the option.
   2307 %
   2308 */
   2309 MagickExport const char *GetImageOption(const ImageInfo *image_info,
   2310   const char *option)
   2311 {
   2312   assert(image_info != (ImageInfo *) NULL);
   2313   assert(image_info->signature == MagickCoreSignature);
   2314   if (image_info->debug != MagickFalse)
   2315     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
   2316       image_info->filename);
   2317   if (image_info->options == (void *) NULL)
   2318     return((const char *) NULL);
   2319   return((const char *) GetValueFromSplayTree((SplayTreeInfo *)
   2320     image_info->options,option));
   2321 }
   2322 
   2323 /*
   2325 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2326 %                                                                             %
   2327 %                                                                             %
   2328 %                                                                             %
   2329 %   G e t C o m m a n d O p t i o n F l a g s                                 %
   2330 %                                                                             %
   2331 %                                                                             %
   2332 %                                                                             %
   2333 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2334 %
   2335 %  GetCommandOptionFlags() parses a string and returns an enumerated option
   2336 %  flags(s).  Return a value of -1 if no such option is found.
   2337 %
   2338 %  The format of the GetCommandOptionFlags method is:
   2339 %
   2340 %      ssize_t GetCommandOptionFlags(const CommandOption option,
   2341 %        const MagickBooleanType list,const char *options)
   2342 %
   2343 %  A description of each parameter follows:
   2344 %
   2345 %    o option: Index to the option table to lookup
   2346 %
   2347 %    o list: A option other than zero permits more than one option separated by
   2348 %      a comma or pipe.
   2349 %
   2350 %    o options: One or more options separated by commas.
   2351 %
   2352 */
   2353 
   2354 static const OptionInfo *GetOptionInfo(const CommandOption option)
   2355 {
   2356   switch (option)
   2357   {
   2358     case MagickAlignOptions: return(AlignOptions);
   2359     case MagickAlphaChannelOptions: return(AlphaChannelOptions);
   2360     case MagickAutoThresholdOptions: return(AutoThresholdOptions);
   2361     case MagickBooleanOptions: return(BooleanOptions);
   2362     case MagickCacheOptions: return(CacheOptions);
   2363     case MagickChannelOptions: return(ChannelOptions);
   2364     case MagickClassOptions: return(ClassOptions);
   2365     case MagickCLIOptions: return(CLIOptions);
   2366     case MagickClipPathOptions: return(ClipPathOptions);
   2367     case MagickColorspaceOptions: return(ColorspaceOptions);
   2368     case MagickCommandOptions: return(CommandOptions);
   2369     case MagickComplianceOptions: return(ComplianceOptions);
   2370     case MagickComplexOptions: return(ComplexOptions);
   2371     case MagickComposeOptions: return(ComposeOptions);
   2372     case MagickCompressOptions: return(CompressOptions);
   2373     case MagickDataTypeOptions: return(DataTypeOptions);
   2374     case MagickDebugOptions: return(LogEventOptions);
   2375     case MagickDecorateOptions: return(DecorateOptions);
   2376     case MagickDirectionOptions: return(DirectionOptions);
   2377     case MagickDisposeOptions: return(DisposeOptions);
   2378     case MagickDistortOptions: return(DistortOptions);
   2379     case MagickDitherOptions: return(DitherOptions);
   2380     case MagickEndianOptions: return(EndianOptions);
   2381     case MagickEvaluateOptions: return(EvaluateOptions);
   2382     case MagickFillRuleOptions: return(FillRuleOptions);
   2383     case MagickFilterOptions: return(FilterOptions);
   2384     case MagickFunctionOptions: return(FunctionOptions);
   2385     case MagickGradientOptions: return(GradientOptions);
   2386     case MagickGravityOptions: return(GravityOptions);
   2387     case MagickIntentOptions: return(IntentOptions);
   2388     case MagickInterlaceOptions: return(InterlaceOptions);
   2389     case MagickInterpolateOptions: return(InterpolateOptions);
   2390     case MagickKernelOptions: return(KernelOptions);
   2391     case MagickLayerOptions: return(LayerOptions);
   2392     case MagickLineCapOptions: return(LineCapOptions);
   2393     case MagickLineJoinOptions: return(LineJoinOptions);
   2394     case MagickListOptions: return(ListOptions);
   2395     case MagickLogEventOptions: return(LogEventOptions);
   2396     case MagickMetricOptions: return(MetricOptions);
   2397     case MagickMethodOptions: return(MethodOptions);
   2398     case MagickModeOptions: return(ModeOptions);
   2399     case MagickMorphologyOptions: return(MorphologyOptions);
   2400     case MagickNoiseOptions: return(NoiseOptions);
   2401     case MagickOrientationOptions: return(OrientationOptions);
   2402     case MagickPixelChannelOptions: return(PixelChannelOptions);
   2403     case MagickPixelIntensityOptions: return(PixelIntensityOptions);
   2404     case MagickPixelMaskOptions: return(PixelMaskOptions);
   2405     case MagickPixelTraitOptions: return(PixelTraitOptions);
   2406     case MagickPolicyDomainOptions: return(PolicyDomainOptions);
   2407     case MagickPolicyRightsOptions: return(PolicyRightsOptions);
   2408     case MagickPreviewOptions: return(PreviewOptions);
   2409     case MagickPrimitiveOptions: return(PrimitiveOptions);
   2410     case MagickQuantumFormatOptions: return(QuantumFormatOptions);
   2411     case MagickResolutionOptions: return(ResolutionOptions);
   2412     case MagickResourceOptions: return(ResourceOptions);
   2413     case MagickSparseColorOptions: return(SparseColorOptions);
   2414     case MagickStatisticOptions: return(StatisticOptions);
   2415     case MagickStorageOptions: return(StorageOptions);
   2416     case MagickStretchOptions: return(StretchOptions);
   2417     case MagickToolOptions: return(ToolOptions);
   2418     case MagickStyleOptions: return(StyleOptions);
   2419     case MagickTypeOptions: return(TypeOptions);
   2420     case MagickValidateOptions: return(ValidateOptions);
   2421     case MagickVirtualPixelOptions: return(VirtualPixelOptions);
   2422     case MagickWeightOptions: return(WeightOptions);
   2423     default: break;
   2424   }
   2425   return((const OptionInfo *) NULL);
   2426 }
   2427 
   2428 MagickExport ssize_t GetCommandOptionFlags(const CommandOption option,
   2429   const MagickBooleanType list,const char *options)
   2430 {
   2431   char
   2432     token[MagickPathExtent];
   2433 
   2434   const OptionInfo
   2435     *command_info,
   2436     *option_info;
   2437 
   2438   int
   2439     sentinel;
   2440 
   2441   MagickBooleanType
   2442     negate;
   2443 
   2444   register char
   2445     *q;
   2446 
   2447   register const char
   2448     *p;
   2449 
   2450   register ssize_t
   2451     i;
   2452 
   2453   ssize_t
   2454     option_types;
   2455 
   2456   if ((options == (const char *) NULL) || (*options == '\0'))
   2457     return(-1);
   2458   option_info=GetOptionInfo(option);
   2459   if (option_info == (const OptionInfo *) NULL)
   2460     return(UndefinedOptionFlag);
   2461   option_types=0;
   2462   sentinel=',';
   2463   if (strchr(options,'|') != (char *) NULL)
   2464     sentinel='|';
   2465   for (p=options; p != (char *) NULL; p=strchr(p,sentinel))
   2466   {
   2467     while (((isspace((int) ((unsigned char) *p)) != 0) || (*p == sentinel)) &&
   2468            (*p != '\0'))
   2469       p++;
   2470     negate=(*p == '!') ? MagickTrue : MagickFalse;
   2471     if (negate != MagickFalse)
   2472       p++;
   2473     q=token;
   2474     while (((isspace((int) ((unsigned char) *p)) == 0) && (*p != sentinel)) &&
   2475            (*p != '\0'))
   2476     {
   2477       if ((q-token) >= (MagickPathExtent-1))
   2478         break;
   2479       *q++=(*p++);
   2480     }
   2481     *q='\0';
   2482     for (i=0; option_info[i].mnemonic != (char *) NULL; i++)
   2483       if (LocaleCompare(token,option_info[i].mnemonic) == 0)
   2484         break;
   2485     command_info=option_info+i;
   2486     if ((command_info->mnemonic == (const char *) NULL) && (*token != '\0') &&
   2487         ((strchr(token+1,'-') != (char *) NULL) ||
   2488          (strchr(token+1,'_') != (char *) NULL)))
   2489       {
   2490         while ((q=strchr(token+1,'-')) != (char *) NULL)
   2491           (void) CopyMagickString(q,q+1,MagickPathExtent-strlen(q));
   2492         while ((q=strchr(token+1,'_')) != (char *) NULL)
   2493           (void) CopyMagickString(q,q+1,MagickPathExtent-strlen(q));
   2494         for (i=0; option_info[i].mnemonic != (char *) NULL; i++)
   2495           if (LocaleCompare(token,option_info[i].mnemonic) == 0)
   2496             break;
   2497         command_info=option_info+i;
   2498       }
   2499     if (command_info->mnemonic == (const char *) NULL)
   2500       return(-1);
   2501     if (negate != MagickFalse)
   2502       option_types=option_types &~ command_info->flags;
   2503     else
   2504       option_types=option_types | command_info->flags;
   2505     if (list == MagickFalse)
   2506       break;
   2507   }
   2508   return(option_types);
   2509 }
   2510 
   2511 /*
   2513 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2514 %                                                                             %
   2515 %                                                                             %
   2516 %                                                                             %
   2517 %   G e t C o m m a n d O p t i o n I n f o                                   %
   2518 %                                                                             %
   2519 %                                                                             %
   2520 %                                                                             %
   2521 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2522 %
   2523 %  GetCommandOptionInfo() returns a pointer to the matching OptionInfo entry
   2524 %  for the "CommandOptions" table.  It returns both the type (argument count)
   2525 %  and flags (argument type).
   2526 %
   2527 %  The format of the GetCommandOptionInfo method is:
   2528 %
   2529 %      const char **GetCommandOptionInfo(const char *option)
   2530 %
   2531 %  A description of each parameter follows:
   2532 %
   2533 %    o option: the option.
   2534 %
   2535 */
   2536 MagickExport const OptionInfo *GetCommandOptionInfo(const char *option)
   2537 {
   2538   register ssize_t
   2539     i;
   2540 
   2541   for (i=0; CommandOptions[i].mnemonic != (char *) NULL; i++)
   2542     if (LocaleCompare(option,CommandOptions[i].mnemonic) == 0)
   2543       break;
   2544   return(CommandOptions+i);
   2545 }
   2546 
   2547 /*
   2549 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2550 %                                                                             %
   2551 %                                                                             %
   2552 %                                                                             %
   2553 %   G e t C o m m a n d O p t i o n s                                         %
   2554 %                                                                             %
   2555 %                                                                             %
   2556 %                                                                             %
   2557 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2558 %
   2559 %  GetCommandOptions() returns a list of command options.
   2560 %
   2561 %  The format of the GetCommandOptions method is:
   2562 %
   2563 %      const char **GetCommandOptions(const CommandOption option)
   2564 %
   2565 %  A description of each parameter follows:
   2566 %
   2567 %    o option: the option.
   2568 %
   2569 */
   2570 MagickExport char **GetCommandOptions(const CommandOption option)
   2571 {
   2572   char
   2573     **options;
   2574 
   2575   const OptionInfo
   2576     *option_info;
   2577 
   2578   register ssize_t
   2579     i;
   2580 
   2581   option_info=GetOptionInfo(option);
   2582   if (option_info == (const OptionInfo *) NULL)
   2583     return((char **) NULL);
   2584   for (i=0; option_info[i].mnemonic != (const char *) NULL; i++) ;
   2585   options=(char **) AcquireQuantumMemory((size_t) i+1UL,sizeof(*options));
   2586   if (options == (char **) NULL)
   2587     ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
   2588   for (i=0; option_info[i].mnemonic != (const char *) NULL; i++)
   2589     options[i]=AcquireString(option_info[i].mnemonic);
   2590   options[i]=(char *) NULL;
   2591   return(options);
   2592 }
   2593 
   2594 /*
   2596 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2597 %                                                                             %
   2598 %                                                                             %
   2599 %                                                                             %
   2600 %   G e t N e x t I m a g e O p t i o n                                       %
   2601 %                                                                             %
   2602 %                                                                             %
   2603 %                                                                             %
   2604 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2605 %
   2606 %  GetNextImageOption() gets the next global option value.
   2607 %
   2608 %  The format of the GetNextImageOption method is:
   2609 %
   2610 %      char *GetNextImageOption(const ImageInfo *image_info)
   2611 %
   2612 %  A description of each parameter follows:
   2613 %
   2614 %    o image_info: the image info.
   2615 %
   2616 */
   2617 MagickExport char *GetNextImageOption(const ImageInfo *image_info)
   2618 {
   2619   assert(image_info != (ImageInfo *) NULL);
   2620   assert(image_info->signature == MagickCoreSignature);
   2621   if (image_info->debug != MagickFalse)
   2622     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
   2623       image_info->filename);
   2624   if (image_info->options == (void *) NULL)
   2625     return((char *) NULL);
   2626   return((char *) GetNextKeyInSplayTree((SplayTreeInfo *) image_info->options));
   2627 }
   2628 
   2629 /*
   2631 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2632 %                                                                             %
   2633 %                                                                             %
   2634 %                                                                             %
   2635 %     I s C o m m a n d O p t i o n                                           %
   2636 %                                                                             %
   2637 %                                                                             %
   2638 %                                                                             %
   2639 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2640 %
   2641 %  IsCommandOption() returns MagickTrue if the option begins with a - or + and
   2642 %  the first character that follows is alphanumeric.
   2643 %
   2644 %  The format of the IsCommandOption method is:
   2645 %
   2646 %      MagickBooleanType IsCommandOption(const char *option)
   2647 %
   2648 %  A description of each parameter follows:
   2649 %
   2650 %    o option: the option.
   2651 %
   2652 */
   2653 MagickExport MagickBooleanType IsCommandOption(const char *option)
   2654 {
   2655   assert(option != (const char *) NULL);
   2656   if ((*option != '-') && (*option != '+'))
   2657     return(MagickFalse);
   2658   if (strlen(option) == 1)
   2659     return(((*option == '{') || (*option == '}') || (*option == '[') ||
   2660       (*option == ']')) ? MagickTrue : MagickFalse);
   2661   option++;
   2662   if (isalpha((int) ((unsigned char) *option)) == 0)
   2663     return(MagickFalse);
   2664   return(MagickTrue);
   2665 }
   2666 
   2667 /*
   2669 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2670 %                                                                             %
   2671 %                                                                             %
   2672 %                                                                             %
   2673 %   C o m m a n d O p t i o n T o M n e m o n i c                             %
   2674 %                                                                             %
   2675 %                                                                             %
   2676 %                                                                             %
   2677 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2678 %
   2679 %  CommandOptionToMnemonic() returns an enumerated value as a mnemonic.
   2680 %
   2681 %  The format of the CommandOptionToMnemonic method is:
   2682 %
   2683 %      const char *CommandOptionToMnemonic(const CommandOption option,
   2684 %        const ssize_t type)
   2685 %
   2686 %  A description of each parameter follows:
   2687 %
   2688 %    o option: the option.
   2689 %
   2690 %    o type: one or more values separated by commas.
   2691 %
   2692 */
   2693 MagickExport const char *CommandOptionToMnemonic(const CommandOption option,
   2694   const ssize_t type)
   2695 {
   2696   const OptionInfo
   2697     *option_info;
   2698 
   2699   register ssize_t
   2700     i;
   2701 
   2702   option_info=GetOptionInfo(option);
   2703   if (option_info == (const OptionInfo *) NULL)
   2704     return((const char *) NULL);
   2705   for (i=0; option_info[i].mnemonic != (const char *) NULL; i++)
   2706     if (type == option_info[i].type)
   2707       break;
   2708   if (option_info[i].mnemonic == (const char *) NULL)
   2709     return("Unrecognized");
   2710   return(option_info[i].mnemonic);
   2711 }
   2712 
   2713 /*
   2715 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2716 %                                                                             %
   2717 %                                                                             %
   2718 %                                                                             %
   2719 %   I s O p t i o n M e m b e r                                               %
   2720 %                                                                             %
   2721 %                                                                             %
   2722 %                                                                             %
   2723 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2724 %
   2725 %  IsOptionMember() returns MagickTrue if the option is a member of the options
   2726 %  list (e.g. ICC is a member of xmp,icc,iptc).
   2727 %
   2728 %  The format of the IsOptionMember function is:
   2729 %
   2730 %      MagickBooleanType IsOptionMember(const char *option,
   2731 %        const char *options)
   2732 %
   2733 %  A description of each parameter follows:
   2734 %
   2735 %    o option: an option or option expression (e.g. ICC or *).
   2736 %
   2737 %    o options: one or more options separated by commas.
   2738 %
   2739 */
   2740 MagickExport MagickBooleanType IsOptionMember(const char *option,
   2741   const char *options)
   2742 {
   2743   char
   2744     **option_list,
   2745     *string;
   2746 
   2747   int
   2748     number_options;
   2749 
   2750   MagickBooleanType
   2751     member;
   2752 
   2753   register ssize_t
   2754     i;
   2755 
   2756   /*
   2757     Is option a member of the options list?
   2758   */
   2759   if (options == (const char *) NULL)
   2760     return(MagickFalse);
   2761   string=ConstantString(options);
   2762   (void) SubstituteString(&string,","," ");
   2763   option_list=StringToArgv(string,&number_options);
   2764   string=DestroyString(string);
   2765   if (option_list == (char **) NULL)
   2766     return(MagickFalse);
   2767   member=MagickFalse;
   2768   option_list[0]=DestroyString(option_list[0]);
   2769   for (i=1; i < (ssize_t) number_options; i++)
   2770   {
   2771     if ((*option_list[i] == '!') &&
   2772         (LocaleCompare(option,option_list[i]+1) == 0))
   2773       break;
   2774     if (GlobExpression(option,option_list[i],MagickTrue) != MagickFalse)
   2775       {
   2776         member=MagickTrue;
   2777         break;
   2778       }
   2779     option_list[i]=DestroyString(option_list[i]);
   2780   }
   2781   for ( ; i < (ssize_t) number_options; i++)
   2782     option_list[i]=DestroyString(option_list[i]);
   2783   option_list=(char **) RelinquishMagickMemory(option_list);
   2784   return(member);
   2785 }
   2786 
   2787 /*
   2789 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2790 %                                                                             %
   2791 %                                                                             %
   2792 %                                                                             %
   2793 %   L i s t C o m m a n d O p t i o n s                                       %
   2794 %                                                                             %
   2795 %                                                                             %
   2796 %                                                                             %
   2797 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2798 %
   2799 %  ListCommandOptions() lists the contents of enumerated option type(s).
   2800 %
   2801 %  The format of the ListCommandOptions method is:
   2802 %
   2803 %      MagickBooleanType ListCommandOptions(FILE *file,
   2804 %        const CommandOption option,ExceptionInfo *exception)
   2805 %
   2806 %  A description of each parameter follows:
   2807 %
   2808 %    o file:  list options to this file handle.
   2809 %
   2810 %    o option:  list these options.
   2811 %
   2812 %    o exception:  return any errors or warnings in this structure.
   2813 %
   2814 */
   2815 MagickExport MagickBooleanType ListCommandOptions(FILE *file,
   2816   const CommandOption option,ExceptionInfo *magick_unused(exception))
   2817 {
   2818   const OptionInfo
   2819     *option_info;
   2820 
   2821   register ssize_t
   2822     i;
   2823 
   2824   magick_unreferenced(exception);
   2825   if (file == (FILE *) NULL)
   2826     file=stdout;
   2827   option_info=GetOptionInfo(option);
   2828   if (option_info == (const OptionInfo *) NULL)
   2829     return(MagickFalse);
   2830   for (i=0; option_info[i].mnemonic != (char *) NULL; i++)
   2831   {
   2832     if (option_info[i].stealth != MagickFalse)
   2833       continue;
   2834     (void) FormatLocaleFile(file,"%s\n",option_info[i].mnemonic);
   2835   }
   2836   return(MagickTrue);
   2837 }
   2838 
   2839 /*
   2841 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2842 %                                                                             %
   2843 %                                                                             %
   2844 %                                                                             %
   2845 %   P a r s e C h a n n e l O p t i o n                                       %
   2846 %                                                                             %
   2847 %                                                                             %
   2848 %                                                                             %
   2849 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2850 %
   2851 %  ParseChannelOption() parses a string and returns an enumerated channel
   2852 %  type(s).
   2853 %
   2854 %  The format of the ParseChannelOption method is:
   2855 %
   2856 %      ssize_t ParseChannelOption(const char *channels)
   2857 %
   2858 %  A description of each parameter follows:
   2859 %
   2860 %    o options: One or more values separated by commas.
   2861 %
   2862 */
   2863 MagickExport ssize_t ParseChannelOption(const char *channels)
   2864 {
   2865   register ssize_t
   2866     i;
   2867 
   2868   ssize_t
   2869     channel;
   2870 
   2871   channel=ParseCommandOption(MagickChannelOptions,MagickTrue,channels);
   2872   if (channel >= 0)
   2873     return(channel);
   2874   channel=0;
   2875   for (i=0; i < (ssize_t) strlen(channels); i++)
   2876   {
   2877     switch (channels[i])
   2878     {
   2879       case 'A':
   2880       case 'a':
   2881       {
   2882         channel|=AlphaChannel;
   2883         break;
   2884       }
   2885       case 'B':
   2886       case 'b':
   2887       {
   2888         channel|=BlueChannel;
   2889         break;
   2890       }
   2891       case 'C':
   2892       case 'c':
   2893       {
   2894         channel|=CyanChannel;
   2895         break;
   2896       }
   2897       case 'g':
   2898       case 'G':
   2899       {
   2900         channel|=GreenChannel;
   2901         break;
   2902       }
   2903       case 'K':
   2904       case 'k':
   2905       {
   2906         channel|=BlackChannel;
   2907         break;
   2908       }
   2909       case 'M':
   2910       case 'm':
   2911       {
   2912         channel|=MagentaChannel;
   2913         break;
   2914       }
   2915       case 'o':
   2916       case 'O':
   2917       {
   2918         channel|=AlphaChannel; /* depreciate */
   2919         break;
   2920       }
   2921       case 'R':
   2922       case 'r':
   2923       {
   2924         channel|=RedChannel;
   2925         break;
   2926       }
   2927       case 'Y':
   2928       case 'y':
   2929       {
   2930         channel|=YellowChannel;
   2931         break;
   2932       }
   2933       case ',':
   2934       {
   2935         ssize_t
   2936           type;
   2937 
   2938         /*
   2939           Gather the additional channel flags and merge with shorthand.
   2940         */
   2941         type=ParseCommandOption(MagickChannelOptions,MagickTrue,channels+i+1);
   2942         if (type < 0)
   2943           return(type);
   2944         channel|=type;
   2945         return(channel);
   2946       }
   2947       default:
   2948         return(-1);
   2949     }
   2950   }
   2951   return(channel);
   2952 }
   2953 
   2954 /*
   2956 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2957 %                                                                             %
   2958 %                                                                             %
   2959 %                                                                             %
   2960 %   P a r s e C o m m a n d O p t i o n                                       %
   2961 %                                                                             %
   2962 %                                                                             %
   2963 %                                                                             %
   2964 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2965 %
   2966 %  ParseCommandOption() parses a string and returns an enumerated option
   2967 %  type(s).  Return a value of -1 if no such option is found.
   2968 %
   2969 %  The format of the ParseCommandOption method is:
   2970 %
   2971 %      ssize_t ParseCommandOption(const CommandOption option,
   2972 %        const MagickBooleanType list,const char *options)
   2973 %
   2974 %  A description of each parameter follows:
   2975 %
   2976 %    o option: Index to the option table to lookup
   2977 %
   2978 %    o list: A option other than zero permits more than one option separated by
   2979 %      a comma or pipe.
   2980 %
   2981 %    o options: One or more options separated by commas.
   2982 %
   2983 */
   2984 MagickExport ssize_t ParseCommandOption(const CommandOption option,
   2985   const MagickBooleanType list,const char *options)
   2986 {
   2987   char
   2988     token[MagickPathExtent];
   2989 
   2990   const OptionInfo
   2991     *command_info,
   2992     *option_info;
   2993 
   2994   int
   2995     sentinel;
   2996 
   2997   MagickBooleanType
   2998     negate;
   2999 
   3000   register char
   3001     *q;
   3002 
   3003   register const char
   3004     *p;
   3005 
   3006   register ssize_t
   3007     i;
   3008 
   3009   ssize_t
   3010     option_types;
   3011 
   3012   if ((options == (const char *) NULL) || (*options == '\0'))
   3013     return(-1);
   3014   option_info=GetOptionInfo(option);
   3015   if (option_info == (const OptionInfo *) NULL)
   3016     return(-1);
   3017   option_types=0;
   3018   sentinel=',';
   3019   if (strchr(options,'|') != (char *) NULL)
   3020     sentinel='|';
   3021   for (p=options; p != (char *) NULL; p=strchr(p,sentinel))
   3022   {
   3023     while (((isspace((int) ((unsigned char) *p)) != 0) || (*p == sentinel)) &&
   3024            (*p != '\0'))
   3025       p++;
   3026     negate=(*p == '!') ? MagickTrue : MagickFalse;
   3027     if (negate != MagickFalse)
   3028       p++;
   3029     q=token;
   3030     while (((isspace((int) ((unsigned char) *p)) == 0) && (*p != sentinel)) &&
   3031            (*p != '\0'))
   3032     {
   3033       if ((q-token) >= (MagickPathExtent-1))
   3034         break;
   3035       *q++=(*p++);
   3036     }
   3037     *q='\0';
   3038     for (i=0; option_info[i].mnemonic != (char *) NULL; i++)
   3039       if (LocaleCompare(token,option_info[i].mnemonic) == 0)
   3040         break;
   3041     command_info=option_info+i;
   3042     if ((command_info->mnemonic == (const char *) NULL) && (*token != '\0') &&
   3043         ((strchr(token+1,'-') != (char *) NULL) ||
   3044          (strchr(token+1,'_') != (char *) NULL)))
   3045         {
   3046           while ((q=strchr(token+1,'-')) != (char *) NULL)
   3047             (void) CopyMagickString(q,q+1,MagickPathExtent-strlen(q));
   3048           while ((q=strchr(token+1,'_')) != (char *) NULL)
   3049             (void) CopyMagickString(q,q+1,MagickPathExtent-strlen(q));
   3050           for (i=0; option_info[i].mnemonic != (char *) NULL; i++)
   3051             if (LocaleCompare(token,option_info[i].mnemonic) == 0)
   3052               break;
   3053           command_info=option_info+i;
   3054         }
   3055     if (command_info->mnemonic == (const char *) NULL)
   3056       return(-1);
   3057     if (negate != MagickFalse)
   3058       option_types=option_types &~ command_info->type;
   3059     else
   3060       option_types=option_types | command_info->type;
   3061     if (list == MagickFalse)
   3062       break;
   3063   }
   3064   return(option_types);
   3065 }
   3066 
   3067 /*
   3069 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   3070 %                                                                             %
   3071 %                                                                             %
   3072 %                                                                             %
   3073 %   P a r s e P i x e l C h a n n e l O p t i o n                             %
   3074 %                                                                             %
   3075 %                                                                             %
   3076 %                                                                             %
   3077 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   3078 %
   3079 %  ParsePixelChannelOption() parses a string and returns an enumerated pixel
   3080 %  channel type(s).
   3081 %
   3082 %  The format of the ParsePixelChannelOption method is:
   3083 %
   3084 %      ssize_t ParsePixelChannelOption(const char *channels)
   3085 %
   3086 %  A description of each parameter follows:
   3087 %
   3088 %    o channels: One or more channels separated by commas.
   3089 %
   3090 */
   3091 MagickExport ssize_t ParsePixelChannelOption(const char *channels)
   3092 {
   3093   char
   3094     *q,
   3095     token[MagickPathExtent];
   3096 
   3097   ssize_t
   3098     channel;
   3099 
   3100   GetNextToken(channels,(const char **) NULL,MagickPathExtent,token);
   3101   if ((*token == ';') || (*token == '|'))
   3102     return(RedPixelChannel);
   3103   channel=ParseCommandOption(MagickPixelChannelOptions,MagickTrue,token);
   3104   if (channel >= 0)
   3105     return(channel);
   3106   q=(char *) token;
   3107   channel=(ssize_t) InterpretLocaleValue(token,&q);
   3108   if ((q == token) || (channel < 0) || (channel >= MaxPixelChannels))
   3109     return(-1);
   3110   return(channel);
   3111 }
   3112 
   3113 /*
   3115 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   3116 %                                                                             %
   3117 %                                                                             %
   3118 %                                                                             %
   3119 %   R e m o v e I m a g e O p t i o n                                         %
   3120 %                                                                             %
   3121 %                                                                             %
   3122 %                                                                             %
   3123 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   3124 %
   3125 %  RemoveImageOption() removes an option from the image and returns its value.
   3126 %
   3127 %  In this case the ConstantString() value returned should be freed by the
   3128 %  caller when finished.
   3129 %
   3130 %  The format of the RemoveImageOption method is:
   3131 %
   3132 %      char *RemoveImageOption(ImageInfo *image_info,const char *option)
   3133 %
   3134 %  A description of each parameter follows:
   3135 %
   3136 %    o image_info: the image info.
   3137 %
   3138 %    o option: the image option.
   3139 %
   3140 */
   3141 MagickExport char *RemoveImageOption(ImageInfo *image_info,const char *option)
   3142 {
   3143   char
   3144     *value;
   3145 
   3146   assert(image_info != (ImageInfo *) NULL);
   3147   assert(image_info->signature == MagickCoreSignature);
   3148   if (image_info->debug != MagickFalse)
   3149     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
   3150       image_info->filename);
   3151   if (image_info->options == (void *) NULL)
   3152     return((char *) NULL);
   3153   value=(char *) RemoveNodeFromSplayTree((SplayTreeInfo *)
   3154     image_info->options,option);
   3155   return(value);
   3156 }
   3157 
   3158 /*
   3160 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   3161 %                                                                             %
   3162 %                                                                             %
   3163 %                                                                             %
   3164 %   R e s e t I m a g e O p t i o n                                           %
   3165 %                                                                             %
   3166 %                                                                             %
   3167 %                                                                             %
   3168 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   3169 %
   3170 %  ResetImageOptions() resets the image_info option.  That is, it deletes
   3171 %  all global options associated with the image_info structure.
   3172 %
   3173 %  The format of the ResetImageOptions method is:
   3174 %
   3175 %      ResetImageOptions(ImageInfo *image_info)
   3176 %
   3177 %  A description of each parameter follows:
   3178 %
   3179 %    o image_info: the image info.
   3180 %
   3181 */
   3182 MagickExport void ResetImageOptions(const ImageInfo *image_info)
   3183 {
   3184   assert(image_info != (ImageInfo *) NULL);
   3185   assert(image_info->signature == MagickCoreSignature);
   3186   if (image_info->debug != MagickFalse)
   3187     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
   3188       image_info->filename);
   3189   if (image_info->options == (void *) NULL)
   3190     return;
   3191   ResetSplayTree((SplayTreeInfo *) image_info->options);
   3192 }
   3193 
   3194 /*
   3196 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   3197 %                                                                             %
   3198 %                                                                             %
   3199 %                                                                             %
   3200 %   R e s e t I m a g e O p t i o n I t e r a t o r                           %
   3201 %                                                                             %
   3202 %                                                                             %
   3203 %                                                                             %
   3204 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   3205 %
   3206 %  ResetImageOptionIterator() resets the image_info values iterator.  Use it
   3207 %  in conjunction with GetNextImageOption() to iterate over all the values
   3208 %  associated with an image option.
   3209 %
   3210 %  The format of the ResetImageOptionIterator method is:
   3211 %
   3212 %      ResetImageOptionIterator(ImageInfo *image_info)
   3213 %
   3214 %  A description of each parameter follows:
   3215 %
   3216 %    o image_info: the image info.
   3217 %
   3218 */
   3219 MagickExport void ResetImageOptionIterator(const ImageInfo *image_info)
   3220 {
   3221   assert(image_info != (ImageInfo *) NULL);
   3222   assert(image_info->signature == MagickCoreSignature);
   3223   if (image_info->debug != MagickFalse)
   3224     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
   3225       image_info->filename);
   3226   if (image_info->options == (void *) NULL)
   3227     return;
   3228   ResetSplayTreeIterator((SplayTreeInfo *) image_info->options);
   3229 }
   3230 
   3231 /*
   3233 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   3234 %                                                                             %
   3235 %                                                                             %
   3236 %                                                                             %
   3237 %   S e t I m a g e O p t i o n                                               %
   3238 %                                                                             %
   3239 %                                                                             %
   3240 %                                                                             %
   3241 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   3242 %
   3243 %  SetImageOption() associates an value with an image option.
   3244 %
   3245 %  The format of the SetImageOption method is:
   3246 %
   3247 %      MagickBooleanType SetImageOption(ImageInfo *image_info,
   3248 %        const char *option,const char *value)
   3249 %
   3250 %  A description of each parameter follows:
   3251 %
   3252 %    o image_info: the image info.
   3253 %
   3254 %    o option: the image option.
   3255 %
   3256 %    o values: the image option values.
   3257 %
   3258 */
   3259 MagickExport MagickBooleanType SetImageOption(ImageInfo *image_info,
   3260   const char *option,const char *value)
   3261 {
   3262   assert(image_info != (ImageInfo *) NULL);
   3263   assert(image_info->signature == MagickCoreSignature);
   3264   if (image_info->debug != MagickFalse)
   3265     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
   3266       image_info->filename);
   3267   /*
   3268     Specific global option settings.
   3269   */
   3270   if (LocaleCompare(option,"size") == 0) {
   3271     (void) CloneString(&image_info->size,value);
   3272     return(MagickTrue);
   3273   }
   3274   /*
   3275     Create tree if needed - specify how key,values are to be freed.
   3276   */
   3277   if (image_info->options == (void *) NULL)
   3278     image_info->options=NewSplayTree(CompareSplayTreeString,
   3279       RelinquishMagickMemory,RelinquishMagickMemory);
   3280   /*
   3281     Delete Option if NULL --  empty string values are valid!
   3282   */
   3283   if (value == (const char *) NULL)
   3284     return(DeleteImageOption(image_info,option));
   3285   /*
   3286     Add option to splay-tree.
   3287   */
   3288   return(AddValueToSplayTree((SplayTreeInfo *) image_info->options,
   3289     ConstantString(option),ConstantString(value)));
   3290 }
   3291