]> granicus.if.org Git - imagemagick/blobdiff - MagickWand/montage.c
(no commit message)
[imagemagick] / MagickWand / montage.c
index bb0919d6e46740b8df88c7fdbaf1cd2decedc606..52d3b0d247b38476b256cab565f64cc9e8928287 100644 (file)
 %                MagickWand Methods to Create Image Thumbnails                %
 %                                                                             %
 %                              Software Design                                %
-%                                John Cristy                                  %
+%                                   Cristy                                    %
 %                                 July 1992                                   %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2015 ImageMagick Studio LLC, a non-profit organization      %
 %  dedicated to making software imaging solutions freely available.           %
 %                                                                             %
 %  You may not use this file except in compliance with the License.  You may  %
@@ -100,11 +100,12 @@ static MagickBooleanType MontageUsage(void)
     {
       "-adaptive-sharpen geometry",
       "                     adaptively sharpen pixels; increase effect near edges",
-      " annotate geometry text",
+      "-annotate geometry text",
       "                     annotate the image with text",
       "-auto-orient         automagically orient image",
       "-blur geometry      reduce image noise and reduce detail levels",
       "-border geometry     surround image with a border of color",
+      "-channel mask        set the image channel mask",
       "-crop geometry       preferred size and location of the cropped image",
       "-extent geometry     set the image size",
       "-flatten             flatten a sequence of images",
@@ -116,6 +117,7 @@ static MagickBooleanType MontageUsage(void)
       "-repage geometry     size and location of an image canvas (operator)",
       "-resize geometry     resize the image",
       "-rotate degrees      apply Paeth rotation to the image",
+      "-scale geometry      scale the image",
       "-strip               strip image of all profiles and comments",
       "-transform           affine transform image",
       "-transpose           flip image vertically and rotate 90 degrees",
@@ -135,7 +137,6 @@ static MagickBooleanType MontageUsage(void)
       "-blue-primary point  chromaticity blue primary point",
       "-bordercolor color   border color",
       "-caption string      assign a caption to an image",
-      "-channel type        apply option to select image channels",
       "-colors value        preferred number of colors in the image",
       "-colorspace type     alternate image colorsapce",
       "-comment string      annotate image with comment",
@@ -166,10 +167,10 @@ static MagickBooleanType MontageUsage(void)
       "-kerning value       set the space between two letters",
       "-label string        assign a label to an image",
       "-limit type value    pixel cache resource limit",
+      "-matte               store matte channel if the image has one",
       "-mattecolor color    frame color",
       "-mode type           framing style",
       "-monitor             monitor progress",
-      "-origin geometry     image origin",
       "-page geometry       size and location of an image canvas (setting)",
       "-pointsize value     font point size",
       "-profile filename    add, delete, or apply an image profile",
@@ -187,6 +188,7 @@ static MagickBooleanType MontageUsage(void)
       "-shadow              add a shadow beneath a tile to simulate depth",
       "-size geometry       width and height of image",
       "-stroke color        color to use when stroking a graphic primitive",
+      "-support factor      resize support: > 1.0 is blurry, < 1.0 is sharp",
       "-synchronize         synchronize image to storage device",
       "-taint               declare the image as modified",
       "-texture filename    name of texture to tile onto the image background",
@@ -213,14 +215,16 @@ static MagickBooleanType MontageUsage(void)
     *stack_operators[]=
     {
       "-clone indexes       clone an image",
+      "-delete indexes      delete the image from the image sequence",
       "-duplicate count,indexes",
       "                     duplicate an image one or more times",
+      "-insert index        insert last image into the image sequence",
+      "-reverse             reverse image sequence",
+      "-swap indexes        swap two images in the image sequence",
       (char *) NULL
     };
 
-  (void) printf("Version: %s\n",GetMagickVersion((size_t *) NULL));
-  (void) printf("Copyright: %s\n",GetMagickCopyright());
-  (void) printf("Features: %s\n\n",GetMagickFeatures());
+  ListMagickVersion(stdout);
   (void) printf("Usage: %s [options ...] file [ [options ...] file ...] file\n",
     GetClientName());
   (void) printf("\nImage Settings:\n");
@@ -245,7 +249,7 @@ static MagickBooleanType MontageUsage(void)
   (void) printf(
     "-borderwidth, -font, -mattecolor, or -title\n");
   (void) printf(
-    "\nBy default, the image format of `file' is determined by its magic\n");
+    "\nBy default, the image format of 'file' is determined by its magic\n");
   (void) printf(
     "number.  To specify a particular image format, precede the filename\n");
   (void) printf(
@@ -278,7 +282,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
 #define ThrowMontageInvalidArgumentException(option,argument) \
 { \
   (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
-    "InvalidArgument","`%s': %s",option,argument); \
+    "InvalidArgument","'%s': %s",option,argument); \
   DestroyMontage(); \
   return(MagickFalse); \
 }
@@ -334,12 +338,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
       if ((LocaleCompare("version",option+1) == 0) ||
           (LocaleCompare("-version",option+1) == 0))
         {
-          (void) FormatLocaleFile(stdout,"Version: %s\n",
-            GetMagickVersion((size_t *) NULL));
-          (void) FormatLocaleFile(stdout,"Copyright: %s\n",
-            GetMagickCopyright());
-          (void) FormatLocaleFile(stdout,"Features: %s\n\n",
-            GetMagickFeatures());
+          ListMagickVersion(stdout);
           return(MagickFalse);
         }
     }
@@ -404,11 +403,13 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
           filename=argv[i];
           if ((LocaleCompare(filename,"--") == 0) && (i < (ssize_t) (argc-1)))
             filename=argv[++i];
-          (void) CopyMagickString(image_info->filename,filename,MaxTextExtent);
-          if (first_scene != last_scene)
+          (void) CloneString(&image_info->font,montage_info->font);
+          if (first_scene == last_scene)
+            images=ReadImages(image_info,filename,exception);
+          else
             {
               char
-                filename[MaxTextExtent];
+                filename[MagickPathExtent];
 
               /*
                 Form filename for multi-part images.
@@ -416,13 +417,10 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
               (void) InterpretImageFilename(image_info,(Image *) NULL,
                 image_info->filename,(int) scene,filename,exception);
               if (LocaleCompare(filename,image_info->filename) == 0)
-                (void) FormatLocaleString(filename,MaxTextExtent,"%s.%.20g",
+                (void) FormatLocaleString(filename,MagickPathExtent,"%s.%.20g",
                   image_info->filename,(double) scene);
-              (void) CopyMagickString(image_info->filename,filename,
-                MaxTextExtent);
+              images=ReadImages(image_info,filename,exception);
             }
-          (void) CloneString(&image_info->font,montage_info->font);
-          images=ReadImages(image_info,exception);
           status&=(images != (Image *) NULL) &&
             (exception->severity < ErrorException);
           if (images == (Image *) NULL)
@@ -439,7 +437,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
         if (LocaleCompare("adaptive-sharpen",option+1) == 0)
           {
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             if (IsGeometry(argv[i]) == MagickFalse)
               ThrowMontageInvalidArgumentException(option,argv[i]);
@@ -452,7 +450,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             if (IsGeometry(argv[i]) == MagickFalse)
               ThrowMontageInvalidArgumentException(option,argv[i]);
@@ -468,9 +466,9 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             i++;
             if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
-            type=ParseCommandOption(MagickAlphaOptions,MagickFalse,argv[i]);
+            type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,argv[i]);
             if (type < 0)
-              ThrowMontageException(OptionError,"UnrecognizedAlphaChannelType",
+              ThrowMontageException(OptionError,"UnrecognizedAlphaChannelOption",
                 argv[i]);
             break;
           }
@@ -479,11 +477,11 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             if (IsGeometry(argv[i]) == MagickFalse)
               ThrowMontageInvalidArgumentException(option,argv[i]);
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             i++;
             break;
@@ -540,7 +538,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
           {
             if (k == 0)
               {
-                (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
+                (void) CopyMagickString(argv[i]+1,"sans",MagickPathExtent);
                 montage_info->border_width=0;
               }
             if (*option == '+')
@@ -610,7 +608,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             channel=ParseChannelOption(argv[i]);
             if (channel < 0)
@@ -621,28 +619,30 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
         if (LocaleCompare("clone",option+1) == 0)
           {
             Image
-              *clone_images;
-
-            clone_images=image;
+              *clone_images,
+              *clone_list;
+            
+            clone_list=CloneImageList(image,exception);
             if (k != 0)
-              clone_images=image_stack[k-1].image;
-            if (clone_images == (Image *) NULL)
+              clone_list=CloneImageList(image_stack[k-1].image,exception);
+            if (clone_list == (Image *) NULL)
               ThrowMontageException(ImageError,"ImageSequenceRequired",option);
             FireImageStack(MagickTrue,MagickTrue,MagickTrue);
             if (*option == '+')
-              clone_images=CloneImages(clone_images,"-1",exception);
+              clone_images=CloneImages(clone_list,"-1",exception);
             else
-              {
+              { 
                 i++;
-                if (i == (ssize_t) (argc-1))
+                if (i == (ssize_t) argc)
                   ThrowMontageException(OptionError,"MissingArgument",option);
                 if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
                   ThrowMontageInvalidArgumentException(option,argv[i]);
-                clone_images=CloneImages(clone_images,argv[i],exception);
+                clone_images=CloneImages(clone_list,argv[i],exception);
               }
             if (clone_images == (Image *) NULL)
               ThrowMontageException(OptionError,"NoSuchImage",option);
             AppendImageStack(clone_images);
+            clone_list=DestroyImageList(clone_list);
             break;
           }
         if (LocaleCompare("coalesce",option+1) == 0)
@@ -770,6 +770,17 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
               }
             break;
           }
+        if (LocaleCompare("delete",option+1) == 0)
+          {
+            if (*option == '+')
+              break;
+            i++;
+            if (i == (ssize_t) argc)
+              ThrowMontageException(OptionError,"MissingArgument",option);
+            if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
+              ThrowMontageInvalidArgumentException(option,argv[i]);
+            break;
+          }
         if (LocaleCompare("density",option+1) == 0)
           {
             if (*option == '+')
@@ -847,7 +858,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             if (IsGeometry(argv[i]) == MagickFalse)
               ThrowMontageInvalidArgumentException(option,argv[i]);
@@ -858,7 +869,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             if (IsGeometry(argv[i]) == MagickFalse)
               ThrowMontageInvalidArgumentException(option,argv[i]);
@@ -899,7 +910,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             if (IsGeometry(argv[i]) == MagickFalse)
               ThrowMontageInvalidArgumentException(option,argv[i]);
@@ -968,7 +979,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
           {
             if (k == 0)
               {
-                (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
+                (void) CopyMagickString(argv[i]+1,"sans",MagickPathExtent);
                 (void) CloneString(&montage_info->frame,(char *) NULL);
               }
             if (*option == '+')
@@ -1051,6 +1062,17 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
       {
         if (LocaleCompare("identify",option+1) == 0)
           break;
+        if (LocaleCompare("insert",option+1) == 0)
+          {
+            if (*option == '+')
+              break;
+            i++;
+            if (i == (ssize_t) argc)
+              ThrowMontageException(OptionError,"MissingArgument",option);
+            if (IsGeometry(argv[i]) == MagickFalse)
+              ThrowMontageInvalidArgumentException(option,argv[i]);
+            break;
+          }
         if (LocaleCompare("interlace",option+1) == 0)
           {
             ssize_t
@@ -1094,7 +1116,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             if (IsGeometry(argv[i]) == MagickFalse)
               ThrowMontageInvalidArgumentException(option,argv[i]);
@@ -1137,7 +1159,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             i++;
             if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
-            value=InterpretLocaleValue(argv[i],&p);
+            value=StringToDouble(argv[i],&p);
             (void) value;
             if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
               ThrowMontageInvalidArgumentException(option,argv[i]);
@@ -1159,7 +1181,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             status=MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
               argv+j,exception);
             DestroyMontage();
-            return(status != 0 ? MagickFalse : MagickTrue);
+            return(status == 0 ? MagickTrue : MagickFalse);
           }
         if (LocaleCompare("log",option+1) == 0)
           {
@@ -1193,7 +1215,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             MontageMode
               mode;
 
-            (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
+            (void) CopyMagickString(argv[i]+1,"sans",MagickPathExtent);
             if (*option == '+')
               break;
             i++;
@@ -1246,21 +1268,6 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
           break;
         ThrowMontageException(OptionError,"UnrecognizedOption",option)
       }
-      case 'o':
-      {
-        if (LocaleCompare("origin",option+1) == 0)
-          {
-            if (*option == '+')
-              break;
-            i++;
-            if (i == (ssize_t) argc)
-              ThrowMontageException(OptionError,"MissingArgument",option);
-            if (IsGeometry(argv[i]) == MagickFalse)
-              ThrowMontageInvalidArgumentException(option,argv[i]);
-            break;
-          }
-        ThrowMontageException(OptionError,"UnrecognizedOption",option)
-      }
       case 'p':
       {
         if (LocaleCompare("page",option+1) == 0)
@@ -1282,8 +1289,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
               ThrowMontageException(OptionError,"MissingArgument",option);
             if (IsGeometry(argv[i]) == MagickFalse)
               ThrowMontageInvalidArgumentException(option,argv[i]);
-            montage_info->pointsize=InterpretLocaleValue(argv[i],
-              (char **) NULL);
+            montage_info->pointsize=StringToDouble(argv[i],(char **) NULL);
             break;
           }
         if (LocaleCompare("polaroid",option+1) == 0)
@@ -1291,7 +1297,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             if (IsGeometry(argv[i]) == MagickFalse)
               ThrowMontageInvalidArgumentException(option,argv[i]);
@@ -1300,7 +1306,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
         if (LocaleCompare("profile",option+1) == 0)
           {
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             break;
           }
@@ -1327,7 +1333,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             colorspace=ParseCommandOption(MagickColorspaceOptions,
               MagickFalse,argv[i]);
@@ -1384,6 +1390,8 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
             break;
           }
+        if (LocaleCompare("reverse",option+1) == 0)
+          break;
         if (LocaleCompare("rotate",option+1) == 0)
           {
             i++;
@@ -1408,12 +1416,12 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
               ThrowMontageInvalidArgumentException(option,argv[i]);
             break;
           }
-        if (LocaleCompare("seed",option+1) == 0)
+        if (LocaleCompare("scale",option+1) == 0)
           {
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             if (IsGeometry(argv[i]) == MagickFalse)
               ThrowMontageInvalidArgumentException(option,argv[i]);
@@ -1435,6 +1443,17 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             (void) sscanf(argv[i],"%ld-%ld",&first_scene,&last_scene);
             break;
           }
+        if (LocaleCompare("seed",option+1) == 0)
+          {
+            if (*option == '+')
+              break;
+            i++;
+            if (i == (ssize_t) argc)
+              ThrowMontageException(OptionError,"MissingArgument",option);
+            if (IsGeometry(argv[i]) == MagickFalse)
+              ThrowMontageInvalidArgumentException(option,argv[i]);
+            break;
+          }
         if (LocaleCompare("set",option+1) == 0)
           {
             i++;
@@ -1451,7 +1470,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
           {
             if (k == 0)
               {
-                (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
+                (void) CopyMagickString(argv[i]+1,"sans",MagickPathExtent);
                 montage_info->shadow=(*option == '-') ? MagickTrue :
                   MagickFalse;
                 break;
@@ -1459,7 +1478,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             if (IsGeometry(argv[i]) == MagickFalse)
               ThrowMontageInvalidArgumentException(option,argv[i]);
@@ -1516,6 +1535,17 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             i++;  /* deprecated */
             break;
           }
+        if (LocaleCompare("swap",option+1) == 0)
+          {
+            if (*option == '+')
+              break;
+            i++;
+            if (i == (ssize_t) argc)
+              ThrowMontageException(OptionError,"MissingArgument",option);
+            if (IsGeometry(argv[i]) == MagickFalse)
+              ThrowMontageInvalidArgumentException(option,argv[i]);
+            break;
+          }
         if (LocaleCompare("synchronize",option+1) == 0)
           break;
         ThrowMontageException(OptionError,"UnrecognizedOption",option)
@@ -1550,7 +1580,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
           {
             if (k == 0)
               {
-                (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
+                (void) CopyMagickString(argv[i]+1,"sans",MagickPathExtent);
                 (void) CloneString(&montage_info->tile,(char *) NULL);
               }
             if (*option == '+')
@@ -1569,7 +1599,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             if (IsGeometry(argv[i]) == MagickFalse)
               ThrowMontageInvalidArgumentException(option,argv[i]);
@@ -1617,7 +1647,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             break;
           }
@@ -1662,7 +1692,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             units=ParseCommandOption(MagickResolutionOptions,MagickFalse,
               argv[i]);
@@ -1676,7 +1706,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             if (*option == '+')
               break;
             i++;
-            if (i == (ssize_t) (argc-1))
+            if (i == (ssize_t) argc)
               ThrowMontageException(OptionError,"MissingArgument",option);
             if (IsGeometry(argv[i]) == MagickFalse)
               ThrowMontageInvalidArgumentException(option,argv[i]);
@@ -1693,12 +1723,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
         if ((LocaleCompare("version",option+1) == 0) ||
             (LocaleCompare("-version",option+1) == 0))
           {
-            (void) FormatLocaleFile(stdout,"Version: %s\n",
-              GetMagickVersion((size_t *) NULL));
-            (void) FormatLocaleFile(stdout,"Copyright: %s\n",
-              GetMagickCopyright());
-            (void) FormatLocaleFile(stdout,"Features: %s\n\n",
-              GetMagickFeatures());
+            ListMagickVersion(stdout);
             break;
           }
         if (LocaleCompare("virtual-pixel",option+1) == 0)
@@ -1754,7 +1779,7 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
   FinalizeImageSettings(image_info,image,MagickTrue);
   if (image == (Image *) NULL)
     ThrowMontageException(OptionError,"MissingAnImageFilename",argv[argc-1]);
-  (void) CopyMagickString(montage_info->filename,argv[argc-1],MaxTextExtent);
+  (void) CopyMagickString(montage_info->filename,argv[argc-1],MagickPathExtent);
   montage_image=MontageImageList(image_info,montage_info,image,exception);
   if (montage_image == (Image *) NULL)
     status=MagickFalse;
@@ -1763,12 +1788,12 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
       /*
         Write image.
       */
-      (void) CopyMagickString(image_info->filename,argv[argc-1],MaxTextExtent);
+      (void) CopyMagickString(image_info->filename,argv[argc-1],MagickPathExtent);
       (void) CopyMagickString(montage_image->magick_filename,argv[argc-1],
-        MaxTextExtent);
+        MagickPathExtent);
       if (*montage_image->magick == '\0')
         (void) CopyMagickString(montage_image->magick,image->magick,
-          MaxTextExtent);
+          MagickPathExtent);
       status&=WriteImages(image_info,montage_image,argv[argc-1],exception);
       if (metadata != (char **) NULL)
         {
@@ -1781,7 +1806,6 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
             ThrowMontageException(ResourceLimitError,"MemoryAllocationFailed",
               GetExceptionMessage(errno));
           (void) ConcatenateString(&(*metadata),text);
-          (void) ConcatenateString(&(*metadata),"\n");
           text=DestroyString(text);
         }
     }