diff --git a/magick/effect.c b/magick/effect.c
index c4c37ff..6c66d3d 100644
--- a/magick/effect.c
+++ b/magick/effect.c
@@ -156,26 +156,28 @@
     *edge_image,
     *gaussian_image;
 
-  long
-    j,
-    k,
-    progress,
-    u,
-    v,
-    y;
-
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    progress;
+
   MagickPixelPacket
     bias;
 
-  register long
+  register ssize_t
     i;
 
-  unsigned long
+  size_t
     width;
 
+  ssize_t
+    j,
+    k,
+    u,
+    v,
+    y;
+
   assert(image != (const Image *) NULL);
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
@@ -222,14 +224,14 @@
       ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
     }
   (void) ResetMagickMemory(kernel,0,(size_t) width*sizeof(*kernel));
-  for (i=0; i < (long) width; i+=2)
+  for (i=0; i < (ssize_t) width; i+=2)
   {
     kernel[i]=(double *) AcquireQuantumMemory((size_t) (width-i),(width-i)*
       sizeof(**kernel));
     if (kernel[i] == (double *) NULL)
       break;
     normalize=0.0;
-    j=(long) (width-i)/2;
+    j=(ssize_t) (width-i)/2;
     k=0;
     for (v=(-j); v <= j; v++)
     {
@@ -247,7 +249,7 @@
     for (k=0; k < (j*j); k++)
       kernel[i][k]=normalize*kernel[i][k];
   }
-  if (i < (long) width)
+  if (i < (ssize_t) width)
     {
       for (i-=2; i >= 0; i-=2)
         kernel[i]=(double *) RelinquishMagickMemory(kernel[i]);
@@ -269,7 +271,7 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
 #endif
-  for (y=0; y < (long) blur_image->rows; y++)
+  for (y=0; y < (ssize_t) blur_image->rows; y++)
   {
     register const IndexPacket
       *restrict indexes;
@@ -281,7 +283,7 @@
     register IndexPacket
       *restrict blur_indexes;
 
-    register long
+    register ssize_t
       x;
 
     register PixelPacket
@@ -298,7 +300,7 @@
         continue;
       }
     blur_indexes=GetCacheViewAuthenticIndexQueue(blur_view);
-    for (x=0; x < (long) blur_image->columns; x++)
+    for (x=0; x < (ssize_t) blur_image->columns; x++)
     {
       MagickPixelPacket
         pixel;
@@ -310,30 +312,30 @@
       register const double
         *restrict k;
 
-      register long
+      register ssize_t
         i,
         u,
         v;
 
       gamma=0.0;
-      i=(long) ceil((double) width*QuantumScale*PixelIntensity(r)-0.5);
+      i=(ssize_t) ceil((double) width*QuantumScale*PixelIntensity(r)-0.5);
       if (i < 0)
         i=0;
       else
-        if (i > (long) width)
-          i=(long) width;
+        if (i > (ssize_t) width)
+          i=(ssize_t) width;
       if ((i & 0x01) != 0)
         i--;
-      p=GetCacheViewVirtualPixels(image_view,x-((long) (width-i)/2L),y-(long)
+      p=GetCacheViewVirtualPixels(image_view,x-((ssize_t) (width-i)/2L),y-(ssize_t)
         ((width-i)/2L),width-i,width-i,exception);
       if (p == (const PixelPacket *) NULL)
         break;
       indexes=GetCacheViewVirtualIndexQueue(image_view);
       pixel=bias;
       k=kernel[i];
-      for (v=0; v < (long) (width-i); v++)
+      for (v=0; v < (ssize_t) (width-i); v++)
       {
-        for (u=0; u < (long) (width-i); u++)
+        for (u=0; u < (ssize_t) (width-i); u++)
         {
           alpha=1.0;
           if (((channel & OpacityChannel) != 0) &&
@@ -391,7 +393,7 @@
   edge_view=DestroyCacheView(edge_view);
   image_view=DestroyCacheView(image_view);
   edge_image=DestroyImage(edge_image);
-  for (i=0; i < (long) width;  i+=2)
+  for (i=0; i < (ssize_t) width;  i+=2)
     kernel[i]=(double *) RelinquishMagickMemory(kernel[i]);
   kernel=(double **) RelinquishMagickMemory(kernel);
   if (status == MagickFalse)
@@ -471,26 +473,28 @@
     *edge_image,
     *gaussian_image;
 
-  long
-    j,
-    k,
-    progress,
-    u,
-    v,
-    y;
-
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    progress;
+
   MagickPixelPacket
     bias;
 
-  register long
+  register ssize_t
     i;
 
-  unsigned long
+  size_t
     width;
 
+  ssize_t
+    j,
+    k,
+    u,
+    v,
+    y;
+
   assert(image != (const Image *) NULL);
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
@@ -537,14 +541,14 @@
       ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
     }
   (void) ResetMagickMemory(kernel,0,(size_t) width*sizeof(*kernel));
-  for (i=0; i < (long) width; i+=2)
+  for (i=0; i < (ssize_t) width; i+=2)
   {
     kernel[i]=(double *) AcquireQuantumMemory((size_t) (width-i),(width-i)*
       sizeof(**kernel));
     if (kernel[i] == (double *) NULL)
       break;
     normalize=0.0;
-    j=(long) (width-i)/2;
+    j=(ssize_t) (width-i)/2;
     k=0;
     for (v=(-j); v <= j; v++)
     {
@@ -562,7 +566,7 @@
     for (k=0; k < (j*j); k++)
       kernel[i][k]=normalize*kernel[i][k];
   }
-  if (i < (long) width)
+  if (i < (ssize_t) width)
     {
       for (i-=2; i >= 0; i-=2)
         kernel[i]=(double *) RelinquishMagickMemory(kernel[i]);
@@ -584,7 +588,7 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
 #endif
-  for (y=0; y < (long) sharp_image->rows; y++)
+  for (y=0; y < (ssize_t) sharp_image->rows; y++)
   {
     register const IndexPacket
       *restrict indexes;
@@ -596,7 +600,7 @@
     register IndexPacket
       *restrict sharp_indexes;
 
-    register long
+    register ssize_t
       x;
 
     register PixelPacket
@@ -613,7 +617,7 @@
         continue;
       }
     sharp_indexes=GetCacheViewAuthenticIndexQueue(sharp_view);
-    for (x=0; x < (long) sharp_image->columns; x++)
+    for (x=0; x < (ssize_t) sharp_image->columns; x++)
     {
       MagickPixelPacket
         pixel;
@@ -625,31 +629,31 @@
       register const double
         *restrict k;
 
-      register long
+      register ssize_t
         i,
         u,
         v;
 
       gamma=0.0;
-      i=(long) ceil((double) width*(QuantumRange-QuantumScale*
+      i=(ssize_t) ceil((double) width*(QuantumRange-QuantumScale*
         PixelIntensity(r))-0.5);
       if (i < 0)
         i=0;
       else
-        if (i > (long) width)
-          i=(long) width;
+        if (i > (ssize_t) width)
+          i=(ssize_t) width;
       if ((i & 0x01) != 0)
         i--;
-      p=GetCacheViewVirtualPixels(image_view,x-((long) (width-i)/2L),y-(long)
+      p=GetCacheViewVirtualPixels(image_view,x-((ssize_t) (width-i)/2L),y-(ssize_t)
         ((width-i)/2L),width-i,width-i,exception);
       if (p == (const PixelPacket *) NULL)
         break;
       indexes=GetCacheViewVirtualIndexQueue(image_view);
       k=kernel[i];
       pixel=bias;
-      for (v=0; v < (long) (width-i); v++)
+      for (v=0; v < (ssize_t) (width-i); v++)
       {
-        for (u=0; u < (long) (width-i); u++)
+        for (u=0; u < (ssize_t) (width-i); u++)
         {
           alpha=1.0;
           if (((channel & OpacityChannel) != 0) &&
@@ -707,7 +711,7 @@
   edge_view=DestroyCacheView(edge_view);
   image_view=DestroyCacheView(image_view);
   edge_image=DestroyImage(edge_image);
-  for (i=0; i < (long) width;  i+=2)
+  for (i=0; i < (ssize_t) width;  i+=2)
     kernel[i]=(double *) RelinquishMagickMemory(kernel[i]);
   kernel=(double **) RelinquishMagickMemory(kernel);
   if (status == MagickFalse)
@@ -767,17 +771,17 @@
   return(blur_image);
 }
 
-static double *GetBlurKernel(const unsigned long width,const double sigma)
+static double *GetBlurKernel(const size_t width,const double sigma)
 {
   double
     *kernel,
     normalize;
 
-  long
+  ssize_t
     j,
     k;
 
-  register long
+  register ssize_t
     i;
 
   /*
@@ -788,7 +792,7 @@
   if (kernel == (double *) NULL)
     return(0);
   normalize=0.0;
-  j=(long) width/2;
+  j=(ssize_t) width/2;
   i=0;
   for (k=(-j); k <= j; k++)
   {
@@ -797,7 +801,7 @@
     normalize+=kernel[i];
     i++;
   }
-  for (i=0; i < (long) width; i++)
+  for (i=0; i < (ssize_t) width; i++)
     kernel[i]/=normalize;
   return(kernel);
 }
@@ -818,23 +822,25 @@
   Image
     *blur_image;
 
-  long
-    progress,
-    x,
-    y;
-
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    progress;
+
   MagickPixelPacket
     bias;
 
-  register long
+  register ssize_t
     i;
 
-  unsigned long
+  size_t
     width;
 
+  ssize_t
+    x,
+    y;
+
   /*
     Initialize blur image attributes.
   */
@@ -875,7 +881,7 @@
         "  BlurImage with %ld kernel:",width);
       message=AcquireString("");
       k=kernel;
-      for (i=0; i < (long) width; i++)
+      for (i=0; i < (ssize_t) width; i++)
       {
         *message='\0';
         (void) FormatMagickString(format,MaxTextExtent,"%ld: ",i);
@@ -898,7 +904,7 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
 #endif
-  for (y=0; y < (long) blur_image->rows; y++)
+  for (y=0; y < (ssize_t) blur_image->rows; y++)
   {
     register const IndexPacket
       *restrict indexes;
@@ -909,7 +915,7 @@
     register IndexPacket
       *restrict blur_indexes;
 
-    register long
+    register ssize_t
       x;
 
     register PixelPacket
@@ -917,7 +923,7 @@
 
     if (status == MagickFalse)
       continue;
-    p=GetCacheViewVirtualPixels(image_view,-((long) width/2L),y,image->columns+
+    p=GetCacheViewVirtualPixels(image_view,-((ssize_t) width/2L),y,image->columns+
       width,1,exception);
     q=GetCacheViewAuthenticPixels(blur_view,0,y,blur_image->columns,1,
       exception);
@@ -928,7 +934,7 @@
       }
     indexes=GetCacheViewVirtualIndexQueue(image_view);
     blur_indexes=GetCacheViewAuthenticIndexQueue(blur_view);
-    for (x=0; x < (long) blur_image->columns; x++)
+    for (x=0; x < (ssize_t) blur_image->columns; x++)
     {
       MagickPixelPacket
         pixel;
@@ -939,7 +945,7 @@
       register const PixelPacket
         *restrict kernel_pixels;
 
-      register long
+      register ssize_t
         i;
 
       pixel=bias;
@@ -947,7 +953,7 @@
       kernel_pixels=p;
       if (((channel & OpacityChannel) == 0) || (image->matte == MagickFalse))
         {
-          for (i=0; i < (long) width; i++)
+          for (i=0; i < (ssize_t) width; i++)
           {
             pixel.red+=(*k)*kernel_pixels->red;
             pixel.green+=(*k)*kernel_pixels->green;
@@ -965,7 +971,7 @@
             {
               k=kernel;
               kernel_pixels=p;
-              for (i=0; i < (long) width; i++)
+              for (i=0; i < (ssize_t) width; i++)
               {
                 pixel.opacity+=(*k)*kernel_pixels->opacity;
                 k++;
@@ -981,7 +987,7 @@
 
               k=kernel;
               kernel_indexes=indexes;
-              for (i=0; i < (long) width; i++)
+              for (i=0; i < (ssize_t) width; i++)
               {
                 pixel.index+=(*k)*(*kernel_indexes);
                 k++;
@@ -997,7 +1003,7 @@
             gamma;
 
           gamma=0.0;
-          for (i=0; i < (long) width; i++)
+          for (i=0; i < (ssize_t) width; i++)
           {
             alpha=(MagickRealType) (QuantumScale*
               GetAlphaPixelComponent(kernel_pixels));
@@ -1019,7 +1025,7 @@
             {
               k=kernel;
               kernel_pixels=p;
-              for (i=0; i < (long) width; i++)
+              for (i=0; i < (ssize_t) width; i++)
               {
                 pixel.opacity+=(*k)*kernel_pixels->opacity;
                 k++;
@@ -1036,7 +1042,7 @@
               k=kernel;
               kernel_pixels=p;
               kernel_indexes=indexes;
-              for (i=0; i < (long) width; i++)
+              for (i=0; i < (ssize_t) width; i++)
               {
                 alpha=(MagickRealType) (QuantumScale*
                   GetAlphaPixelComponent(kernel_pixels));
@@ -1078,7 +1084,7 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
 #endif
-  for (x=0; x < (long) blur_image->columns; x++)
+  for (x=0; x < (ssize_t) blur_image->columns; x++)
   {
     register const IndexPacket
       *restrict indexes;
@@ -1089,7 +1095,7 @@
     register IndexPacket
       *restrict blur_indexes;
 
-    register long
+    register ssize_t
       y;
 
     register PixelPacket
@@ -1097,7 +1103,7 @@
 
     if (status == MagickFalse)
       continue;
-    p=GetCacheViewVirtualPixels(image_view,x,-((long) width/2L),1,image->rows+
+    p=GetCacheViewVirtualPixels(image_view,x,-((ssize_t) width/2L),1,image->rows+
       width,exception);
     q=GetCacheViewAuthenticPixels(blur_view,x,0,1,blur_image->rows,exception);
     if ((p == (const PixelPacket *) NULL) || (q == (PixelPacket *) NULL))
@@ -1107,7 +1113,7 @@
       }
     indexes=GetCacheViewVirtualIndexQueue(image_view);
     blur_indexes=GetCacheViewAuthenticIndexQueue(blur_view);
-    for (y=0; y < (long) blur_image->rows; y++)
+    for (y=0; y < (ssize_t) blur_image->rows; y++)
     {
       MagickPixelPacket
         pixel;
@@ -1118,7 +1124,7 @@
       register const PixelPacket
         *restrict kernel_pixels;
 
-      register long
+      register ssize_t
         i;
 
       pixel=bias;
@@ -1126,7 +1132,7 @@
       kernel_pixels=p;
       if (((channel & OpacityChannel) == 0) || (image->matte == MagickFalse))
         {
-          for (i=0; i < (long) width; i++)
+          for (i=0; i < (ssize_t) width; i++)
           {
             pixel.red+=(*k)*kernel_pixels->red;
             pixel.green+=(*k)*kernel_pixels->green;
@@ -1144,7 +1150,7 @@
             {
               k=kernel;
               kernel_pixels=p;
-              for (i=0; i < (long) width; i++)
+              for (i=0; i < (ssize_t) width; i++)
               {
                 pixel.opacity+=(*k)*kernel_pixels->opacity;
                 k++;
@@ -1160,7 +1166,7 @@
 
               k=kernel;
               kernel_indexes=indexes;
-              for (i=0; i < (long) width; i++)
+              for (i=0; i < (ssize_t) width; i++)
               {
                 pixel.index+=(*k)*(*kernel_indexes);
                 k++;
@@ -1176,7 +1182,7 @@
             gamma;
 
           gamma=0.0;
-          for (i=0; i < (long) width; i++)
+          for (i=0; i < (ssize_t) width; i++)
           {
             alpha=(MagickRealType) (QuantumScale*
               GetAlphaPixelComponent(kernel_pixels));
@@ -1198,7 +1204,7 @@
             {
               k=kernel;
               kernel_pixels=p;
-              for (i=0; i < (long) width; i++)
+              for (i=0; i < (ssize_t) width; i++)
               {
                 pixel.opacity+=(*k)*kernel_pixels->opacity;
                 k++;
@@ -1215,7 +1221,7 @@
               k=kernel;
               kernel_pixels=p;
               kernel_indexes=indexes;
-              for (i=0; i < (long) width; i++)
+              for (i=0; i < (ssize_t) width; i++)
               {
                 alpha=(MagickRealType) (QuantumScale*
                   GetAlphaPixelComponent(kernel_pixels));
@@ -1271,10 +1277,10 @@
 %
 %  The format of the ConvolveImage method is:
 %
-%      Image *ConvolveImage(const Image *image,const unsigned long order,
+%      Image *ConvolveImage(const Image *image,const size_t order,
 %        const double *kernel,ExceptionInfo *exception)
 %      Image *ConvolveImageChannel(const Image *image,const ChannelType channel,
-%        const unsigned long order,const double *kernel,
+%        const size_t order,const double *kernel,
 %        ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
@@ -1291,7 +1297,7 @@
 %
 */
 
-MagickExport Image *ConvolveImage(const Image *image,const unsigned long order,
+MagickExport Image *ConvolveImage(const Image *image,const size_t order,
   const double *kernel,ExceptionInfo *exception)
 {
   Image
@@ -1303,7 +1309,7 @@
 }
 
 MagickExport Image *ConvolveImageChannel(const Image *image,
-  const ChannelType channel,const unsigned long order,const double *kernel,
+  const ChannelType channel,const size_t order,const double *kernel,
   ExceptionInfo *exception)
 {
 #define ConvolveImageTag  "Convolve/Image"
@@ -1318,25 +1324,27 @@
   Image
     *convolve_image;
 
-  long
-    progress,
-    y;
-
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    progress;
+
   MagickPixelPacket
     bias;
 
   MagickRealType
     gamma;
 
-  register long
+  register ssize_t
     i;
 
-  unsigned long
+  size_t
     width;
 
+  ssize_t
+    y;
+
   /*
     Initialize convolve image attributes.
   */
@@ -1364,7 +1372,7 @@
         format[MaxTextExtent],
         *message;
 
-      long
+      ssize_t
         u,
         v;
 
@@ -1375,12 +1383,12 @@
         "  ConvolveImage with %ldx%ld kernel:",width,width);
       message=AcquireString("");
       k=kernel;
-      for (v=0; v < (long) width; v++)
+      for (v=0; v < (ssize_t) width; v++)
       {
         *message='\0';
         (void) FormatMagickString(format,MaxTextExtent,"%ld: ",v);
         (void) ConcatenateString(&message,format);
-        for (u=0; u < (long) width; u++)
+        for (u=0; u < (ssize_t) width; u++)
         {
           (void) FormatMagickString(format,MaxTextExtent,"%g ",*k++);
           (void) ConcatenateString(&message,format);
@@ -1400,10 +1408,10 @@
       ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
     }
   gamma=0.0;
-  for (i=0; i < (long) (width*width); i++)
+  for (i=0; i < (ssize_t) (width*width); i++)
     gamma+=kernel[i];
   gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
-  for (i=0; i < (long) (width*width); i++)
+  for (i=0; i < (ssize_t) (width*width); i++)
     normal_kernel[i]=gamma*kernel[i];
   /*
     Convolve image.
@@ -1417,7 +1425,7 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
 #endif
-  for (y=0; y < (long) image->rows; y++)
+  for (y=0; y < (ssize_t) image->rows; y++)
   {
     MagickBooleanType
       sync;
@@ -1431,7 +1439,7 @@
     register IndexPacket
       *restrict convolve_indexes;
 
-    register long
+    register ssize_t
       x;
 
     register PixelPacket
@@ -1439,7 +1447,7 @@
 
     if (status == MagickFalse)
       continue;
-    p=GetCacheViewVirtualPixels(image_view,-((long) width/2L),y-(long) (width/
+    p=GetCacheViewVirtualPixels(image_view,-((ssize_t) width/2L),y-(ssize_t) (width/
       2L),image->columns+width,width,exception);
     q=GetCacheViewAuthenticPixels(convolve_view,0,y,convolve_image->columns,1,
       exception);
@@ -1450,9 +1458,9 @@
       }
     indexes=GetCacheViewVirtualIndexQueue(image_view);
     convolve_indexes=GetCacheViewAuthenticIndexQueue(convolve_view);
-    for (x=0; x < (long) image->columns; x++)
+    for (x=0; x < (ssize_t) image->columns; x++)
     {
-      long
+      ssize_t
         v;
 
       MagickPixelPacket
@@ -1464,7 +1472,7 @@
       register const PixelPacket
         *restrict kernel_pixels;
 
-      register long
+      register ssize_t
         u;
 
       pixel=bias;
@@ -1472,9 +1480,9 @@
       kernel_pixels=p;
       if (((channel & OpacityChannel) == 0) || (image->matte == MagickFalse))
         {
-          for (v=0; v < (long) width; v++)
+          for (v=0; v < (ssize_t) width; v++)
           {
-            for (u=0; u < (long) width; u++)
+            for (u=0; u < (ssize_t) width; u++)
             {
               pixel.red+=(*k)*kernel_pixels[u].red;
               pixel.green+=(*k)*kernel_pixels[u].green;
@@ -1493,9 +1501,9 @@
             {
               k=normal_kernel;
               kernel_pixels=p;
-              for (v=0; v < (long) width; v++)
+              for (v=0; v < (ssize_t) width; v++)
               {
-                for (u=0; u < (long) width; u++)
+                for (u=0; u < (ssize_t) width; u++)
                 {
                   pixel.opacity+=(*k)*kernel_pixels[u].opacity;
                   k++;
@@ -1512,9 +1520,9 @@
 
               k=normal_kernel;
               kernel_indexes=indexes;
-              for (v=0; v < (long) width; v++)
+              for (v=0; v < (ssize_t) width; v++)
               {
-                for (u=0; u < (long) width; u++)
+                for (u=0; u < (ssize_t) width; u++)
                 {
                   pixel.index+=(*k)*kernel_indexes[u];
                   k++;
@@ -1531,9 +1539,9 @@
             gamma;
 
           gamma=0.0;
-          for (v=0; v < (long) width; v++)
+          for (v=0; v < (ssize_t) width; v++)
           {
-            for (u=0; u < (long) width; u++)
+            for (u=0; u < (ssize_t) width; u++)
             {
               alpha=(MagickRealType) (QuantumScale*(QuantumRange-
                 kernel_pixels[u].opacity));
@@ -1556,9 +1564,9 @@
             {
               k=normal_kernel;
               kernel_pixels=p;
-              for (v=0; v < (long) width; v++)
+              for (v=0; v < (ssize_t) width; v++)
               {
-                for (u=0; u < (long) width; u++)
+                for (u=0; u < (ssize_t) width; u++)
                 {
                   pixel.opacity+=(*k)*kernel_pixels[u].opacity;
                   k++;
@@ -1576,9 +1584,9 @@
               k=normal_kernel;
               kernel_pixels=p;
               kernel_indexes=indexes;
-              for (v=0; v < (long) width; v++)
+              for (v=0; v < (ssize_t) width; v++)
               {
-                for (u=0; u < (long) width; u++)
+                for (u=0; u < (ssize_t) width; u++)
                 {
                   alpha=(MagickRealType) (QuantumScale*(QuantumRange-
                     kernel_pixels[u].opacity));
@@ -1648,11 +1656,11 @@
 
 static Quantum **DestroyPixelThreadSet(Quantum **pixels)
 {
-  register long
+  register ssize_t
     i;
 
   assert(pixels != (Quantum **) NULL);
-  for (i=0; i < (long) GetOpenMPMaximumThreads(); i++)
+  for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++)
     if (pixels[i] != (Quantum *) NULL)
       pixels[i]=(Quantum *) RelinquishMagickMemory(pixels[i]);
   pixels=(Quantum **) RelinquishAlignedMemory(pixels);
@@ -1661,13 +1669,13 @@
 
 static Quantum **AcquirePixelThreadSet(const size_t count)
 {
-  register long
+  register ssize_t
     i;
 
   Quantum
     **pixels;
 
-  unsigned long
+  size_t
     number_threads;
 
   number_threads=GetOpenMPMaximumThreads();
@@ -1675,7 +1683,7 @@
   if (pixels == (Quantum **) NULL)
     return((Quantum **) NULL);
   (void) ResetMagickMemory(pixels,0,number_threads*sizeof(*pixels));
-  for (i=0; i < (long) number_threads; i++)
+  for (i=0; i < (ssize_t) number_threads; i++)
   {
     pixels[i]=(Quantum *) AcquireQuantumMemory(count,sizeof(**pixels));
     if (pixels[i] == (Quantum *) NULL)
@@ -1684,17 +1692,17 @@
   return(pixels);
 }
 
-static void Hull(const long x_offset,const long y_offset,
-  const unsigned long columns,const unsigned long rows,Quantum *f,Quantum *g,
+static void Hull(const ssize_t x_offset,const ssize_t y_offset,
+  const size_t columns,const size_t rows,Quantum *f,Quantum *g,
   const int polarity)
 {
-  long
+  ssize_t
     y;
 
   MagickRealType
     v;
 
-  register long
+  register ssize_t
     x;
 
   register Quantum
@@ -1707,14 +1715,14 @@
   assert(g != (Quantum *) NULL);
   p=f+(columns+2);
   q=g+(columns+2);
-  r=p+(y_offset*((long) columns+2)+x_offset);
-  for (y=0; y < (long) rows; y++)
+  r=p+(y_offset*((ssize_t) columns+2)+x_offset);
+  for (y=0; y < (ssize_t) rows; y++)
   {
     p++;
     q++;
     r++;
     if (polarity > 0)
-      for (x=(long) columns; x != 0; x--)
+      for (x=(ssize_t) columns; x != 0; x--)
       {
         v=(MagickRealType) (*p);
         if ((MagickRealType) *r >= (v+(MagickRealType) ScaleCharToQuantum(2)))
@@ -1725,11 +1733,11 @@
         r++;
       }
     else
-      for (x=(long) columns; x != 0; x--)
+      for (x=(ssize_t) columns; x != 0; x--)
       {
         v=(MagickRealType) (*p);
         if ((MagickRealType) *r <= (v-(MagickRealType) ScaleCharToQuantum(2)))
-          v-=(long) ScaleCharToQuantum(1);
+          v-=(ssize_t) ScaleCharToQuantum(1);
         *q=(Quantum) v;
         p++;
         q++;
@@ -1741,16 +1749,16 @@
   }
   p=f+(columns+2);
   q=g+(columns+2);
-  r=q+(y_offset*((long) columns+2)+x_offset);
-  s=q-(y_offset*((long) columns+2)+x_offset);
-  for (y=0; y < (long) rows; y++)
+  r=q+(y_offset*((ssize_t) columns+2)+x_offset);
+  s=q-(y_offset*((ssize_t) columns+2)+x_offset);
+  for (y=0; y < (ssize_t) rows; y++)
   {
     p++;
     q++;
     r++;
     s++;
     if (polarity > 0)
-      for (x=(long) columns; x != 0; x--)
+      for (x=(ssize_t) columns; x != 0; x--)
       {
         v=(MagickRealType) (*q);
         if (((MagickRealType) *s >=
@@ -1764,7 +1772,7 @@
         s++;
       }
     else
-      for (x=(long) columns; x != 0; x--)
+      for (x=(ssize_t) columns; x != 0; x--)
       {
         v=(MagickRealType) (*q);
         if (((MagickRealType) *s <=
@@ -1795,7 +1803,7 @@
   Image
     *despeckle_image;
 
-  long
+  ssize_t
     channel;
 
   MagickBooleanType
@@ -1808,7 +1816,7 @@
   size_t
     length;
 
-  static const int
+  static const ssize_t
     X[4] = {0, 1, 1,-1},
     Y[4] = {1, 0, 1, 1};
 
@@ -1857,11 +1865,11 @@
 #endif
   for (channel=0; channel <= 3; channel++)
   {
-    long
+    ssize_t
       j,
       y;
 
-    register long
+    register ssize_t
       i,
       id,
       x;
@@ -1876,8 +1884,8 @@
     pixel=pixels[id];
     (void) ResetMagickMemory(pixel,0,length*sizeof(*pixel));
     buffer=buffers[id];
-    j=(long) image->columns+2;
-    for (y=0; y < (long) image->rows; y++)
+    j=(ssize_t) image->columns+2;
+    for (y=0; y < (ssize_t) image->rows; y++)
     {
       register const PixelPacket
         *restrict p;
@@ -1886,7 +1894,7 @@
       if (p == (const PixelPacket *) NULL)
         break;
       j++;
-      for (x=0; x < (long) image->columns; x++)
+      for (x=0; x < (ssize_t) image->columns; x++)
       {
         switch (channel)
         {
@@ -1909,8 +1917,8 @@
       Hull(-X[i],-Y[i],image->columns,image->rows,pixel,buffer,-1);
       Hull(X[i],Y[i],image->columns,image->rows,pixel,buffer,-1);
     }
-    j=(long) image->columns+2;
-    for (y=0; y < (long) image->rows; y++)
+    j=(ssize_t) image->columns+2;
+    for (y=0; y < (ssize_t) image->rows; y++)
     {
       MagickBooleanType
         sync;
@@ -1923,7 +1931,7 @@
       if (q == (PixelPacket *) NULL)
         break;
       j++;
-      for (x=0; x < (long) image->columns; x++)
+      for (x=0; x < (ssize_t) image->columns; x++)
       {
         switch (channel)
         {
@@ -1952,7 +1960,8 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp critical (MagickCore_DespeckleImage)
 #endif
-        proceed=SetImageProgress(image,DespeckleImageTag,channel,3);
+        proceed=SetImageProgress(image,DespeckleImageTag,(MagickOffsetType)
+          channel,3);
         if (proceed == MagickFalse)
           status=MagickFalse;
       }
@@ -2005,10 +2014,10 @@
   double
     *kernel;
 
-  register long
+  register ssize_t
     i;
 
-  unsigned long
+  size_t
     width;
 
   assert(image != (const Image *) NULL);
@@ -2021,7 +2030,7 @@
   kernel=(double *) AcquireQuantumMemory((size_t) width,width*sizeof(*kernel));
   if (kernel == (double *) NULL)
     ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
-  for (i=0; i < (long) (width*width); i++)
+  for (i=0; i < (ssize_t) (width*width); i++)
     kernel[i]=(-1.0);
   kernel[i/2]=(double) (width*width-1.0);
   edge_image=ConvolveImage(image,width,kernel,exception);
@@ -2071,16 +2080,16 @@
   Image
     *emboss_image;
 
-  long
+  ssize_t
     j,
     k,
     u,
     v;
 
-  register long
+  register ssize_t
     i;
 
-  unsigned long
+  size_t
     width;
 
   assert(image != (Image *) NULL);
@@ -2093,7 +2102,7 @@
   kernel=(double *) AcquireQuantumMemory((size_t) width,width*sizeof(*kernel));
   if (kernel == (double *) NULL)
     ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
-  j=(long) width/2;
+  j=(ssize_t) width/2;
   k=j;
   i=0;
   for (v=(-j); v <= j; v++)
@@ -2170,16 +2179,18 @@
   Image
     *filter_image;
 
-  long
-    progress,
-    y;
-
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    progress;
+
   MagickPixelPacket
     bias;
 
+  ssize_t
+    y;
+
   /*
     Initialize filter image attributes.
   */
@@ -2206,7 +2217,7 @@
         format[MaxTextExtent],
         *message;
 
-      long
+      ssize_t
         u,
         v;
 
@@ -2217,12 +2228,12 @@
         "  FilterImage with %ldx%ld kernel:",kernel->width,kernel->height);
       message=AcquireString("");
       k=kernel->values;
-      for (v=0; v < (long) kernel->height; v++)
+      for (v=0; v < (ssize_t) kernel->height; v++)
       {
         *message='\0';
         (void) FormatMagickString(format,MaxTextExtent,"%ld: ",v);
         (void) ConcatenateString(&message,format);
-        for (u=0; u < (long) kernel->width; u++)
+        for (u=0; u < (ssize_t) kernel->width; u++)
         {
           (void) FormatMagickString(format,MaxTextExtent,"%g ",*k++);
           (void) ConcatenateString(&message,format);
@@ -2246,7 +2257,7 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
 #endif
-  for (y=0; y < (long) image->rows; y++)
+  for (y=0; y < (ssize_t) image->rows; y++)
   {
     MagickBooleanType
       sync;
@@ -2260,7 +2271,7 @@
     register IndexPacket
       *restrict filter_indexes;
 
-    register long
+    register ssize_t
       x;
 
     register PixelPacket
@@ -2268,8 +2279,8 @@
 
     if (status == MagickFalse)
       continue;
-    p=GetCacheViewVirtualPixels(image_view,-((long) kernel->width/2L),
-      y-(long) (kernel->height/2L),image->columns+kernel->width,kernel->height,
+    p=GetCacheViewVirtualPixels(image_view,-((ssize_t) kernel->width/2L),
+      y-(ssize_t) (kernel->height/2L),image->columns+kernel->width,kernel->height,
       exception);
     q=GetCacheViewAuthenticPixels(filter_view,0,y,filter_image->columns,1,
       exception);
@@ -2280,9 +2291,9 @@
       }
     indexes=GetCacheViewVirtualIndexQueue(image_view);
     filter_indexes=GetCacheViewAuthenticIndexQueue(filter_view);
-    for (x=0; x < (long) image->columns; x++)
+    for (x=0; x < (ssize_t) image->columns; x++)
     {
-      long
+      ssize_t
         v;
 
       MagickPixelPacket
@@ -2294,7 +2305,7 @@
       register const PixelPacket
         *restrict kernel_pixels;
 
-      register long
+      register ssize_t
         u;
 
       pixel=bias;
@@ -2302,9 +2313,9 @@
       kernel_pixels=p;
       if (((channel & OpacityChannel) == 0) || (image->matte == MagickFalse))
         {
-          for (v=0; v < (long) kernel->width; v++)
+          for (v=0; v < (ssize_t) kernel->width; v++)
           {
-            for (u=0; u < (long) kernel->height; u++)
+            for (u=0; u < (ssize_t) kernel->height; u++)
             {
               pixel.red+=(*k)*kernel_pixels[u].red;
               pixel.green+=(*k)*kernel_pixels[u].green;
@@ -2323,9 +2334,9 @@
             {
               k=kernel->values;
               kernel_pixels=p;
-              for (v=0; v < (long) kernel->width; v++)
+              for (v=0; v < (ssize_t) kernel->width; v++)
               {
-                for (u=0; u < (long) kernel->height; u++)
+                for (u=0; u < (ssize_t) kernel->height; u++)
                 {
                   pixel.opacity+=(*k)*kernel_pixels[u].opacity;
                   k++;
@@ -2342,9 +2353,9 @@
 
               k=kernel->values;
               kernel_indexes=indexes;
-              for (v=0; v < (long) kernel->width; v++)
+              for (v=0; v < (ssize_t) kernel->width; v++)
               {
-                for (u=0; u < (long) kernel->height; u++)
+                for (u=0; u < (ssize_t) kernel->height; u++)
                 {
                   pixel.index+=(*k)*kernel_indexes[u];
                   k++;
@@ -2361,9 +2372,9 @@
             gamma;
 
           gamma=0.0;
-          for (v=0; v < (long) kernel->width; v++)
+          for (v=0; v < (ssize_t) kernel->width; v++)
           {
-            for (u=0; u < (long) kernel->height; u++)
+            for (u=0; u < (ssize_t) kernel->height; u++)
             {
               alpha=(MagickRealType) (QuantumScale*(QuantumRange-
                 kernel_pixels[u].opacity));
@@ -2386,9 +2397,9 @@
             {
               k=kernel->values;
               kernel_pixels=p;
-              for (v=0; v < (long) kernel->width; v++)
+              for (v=0; v < (ssize_t) kernel->width; v++)
               {
-                for (u=0; u < (long) kernel->height; u++)
+                for (u=0; u < (ssize_t) kernel->height; u++)
                 {
                   pixel.opacity+=(*k)*kernel_pixels[u].opacity;
                   k++;
@@ -2406,9 +2417,9 @@
               k=kernel->values;
               kernel_pixels=p;
               kernel_indexes=indexes;
-              for (v=0; v < (long) kernel->width; v++)
+              for (v=0; v < (ssize_t) kernel->width; v++)
               {
-                for (u=0; u < (long) kernel->height; u++)
+                for (u=0; u < (ssize_t) kernel->height; u++)
                 {
                   alpha=(MagickRealType) (QuantumScale*(QuantumRange-
                     kernel_pixels[u].opacity));
@@ -2509,15 +2520,15 @@
   Image
     *blur_image;
 
-  long
+  ssize_t
     j,
     u,
     v;
 
-  register long
+  register ssize_t
     i;
 
-  unsigned long
+  size_t
     width;
 
   assert(image != (const Image *) NULL);
@@ -2530,7 +2541,7 @@
   kernel=(double *) AcquireQuantumMemory((size_t) width,width*sizeof(*kernel));
   if (kernel == (double *) NULL)
     ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
-  j=(long) width/2;
+  j=(ssize_t) width/2;
   i=0;
   for (v=(-j); v <= j; v++)
   {
@@ -2582,7 +2593,7 @@
 
 typedef struct _MedianListNode
 {
-  unsigned long
+  size_t
     next[9],
     count,
     signature;
@@ -2590,7 +2601,7 @@
 
 typedef struct _MedianSkipList
 {
-  long
+  ssize_t
     level;
 
   MedianListNode
@@ -2599,7 +2610,7 @@
 
 typedef struct _MedianPixelList
 {
-  unsigned long
+  size_t
     center,
     seed,
     signature;
@@ -2610,7 +2621,7 @@
 
 static MedianPixelList *DestroyMedianPixelList(MedianPixelList *pixel_list)
 {
-  register long
+  register ssize_t
     i;
 
   if (pixel_list == (MedianPixelList *) NULL)
@@ -2626,23 +2637,23 @@
 static MedianPixelList **DestroyMedianPixelListThreadSet(
   MedianPixelList **pixel_list)
 {
-  register long
+  register ssize_t
     i;
 
   assert(pixel_list != (MedianPixelList **) NULL);
-  for (i=0; i < (long) GetOpenMPMaximumThreads(); i++)
+  for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++)
     if (pixel_list[i] != (MedianPixelList *) NULL)
       pixel_list[i]=DestroyMedianPixelList(pixel_list[i]);
   pixel_list=(MedianPixelList **) RelinquishAlignedMemory(pixel_list);
   return(pixel_list);
 }
 
-static MedianPixelList *AcquireMedianPixelList(const unsigned long width)
+static MedianPixelList *AcquireMedianPixelList(const size_t width)
 {
   MedianPixelList
     *pixel_list;
 
-  register long
+  register ssize_t
     i;
 
   pixel_list=(MedianPixelList *) AcquireAlignedMemory(1,sizeof(*pixel_list));
@@ -2664,15 +2675,15 @@
 }
 
 static MedianPixelList **AcquireMedianPixelListThreadSet(
-  const unsigned long width)
+  const size_t width)
 {
-  register long
+  register ssize_t
     i;
 
   MedianPixelList
     **pixel_list;
 
-  unsigned long
+  size_t
     number_threads;
 
   number_threads=GetOpenMPMaximumThreads();
@@ -2681,7 +2692,7 @@
   if (pixel_list == (MedianPixelList **) NULL)
     return((MedianPixelList **) NULL);
   (void) ResetMagickMemory(pixel_list,0,number_threads*sizeof(*pixel_list));
-  for (i=0; i < (long) number_threads; i++)
+  for (i=0; i < (ssize_t) number_threads; i++)
   {
     pixel_list[i]=AcquireMedianPixelList(width);
     if (pixel_list[i] == (MedianPixelList *) NULL)
@@ -2691,15 +2702,15 @@
 }
 
 static void AddNodeMedianPixelList(MedianPixelList *pixel_list,
-  const long channel,const unsigned long color)
+  const ssize_t channel,const size_t color)
 {
-  register long
+  register ssize_t
     level;
 
   register MedianSkipList
     *list;
 
-  unsigned long
+  size_t
     search,
     update[9];
 
@@ -2710,7 +2721,7 @@
   list->nodes[color].signature=pixel_list->signature;
   list->nodes[color].count=1;
   /*
-    Determine where it belongs in the list.
+    Determine where it bessize_ts in the list.
   */
   search=65536UL;
   for (level=list->level; level >= 0; level--)
@@ -2756,13 +2767,13 @@
   MagickPixelPacket
     pixel;
 
-  register long
+  register ssize_t
     channel;
 
   register MedianSkipList
     *list;
 
-  unsigned long
+  size_t
     center,
     color,
     count;
@@ -2800,7 +2811,7 @@
   const PixelPacket *pixel,const IndexPacket *indexes,
   MedianPixelList *pixel_list)
 {
-  unsigned long
+  size_t
     signature;
 
   unsigned short
@@ -2844,7 +2855,7 @@
   int
     level;
 
-  register long
+  register ssize_t
     channel;
 
   register MedianListNode
@@ -2879,19 +2890,21 @@
   Image
     *median_image;
 
-  long
-    progress,
-    y;
-
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    progress;
+
   MedianPixelList
     **restrict pixel_list;
 
-  unsigned long
+  size_t
     width;
 
+  ssize_t
+    y;
+
   /*
     Initialize median image attributes.
   */
@@ -2930,7 +2943,7 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
 #endif
-  for (y=0; y < (long) median_image->rows; y++)
+  for (y=0; y < (ssize_t) median_image->rows; y++)
   {
     register const IndexPacket
       *restrict indexes;
@@ -2941,7 +2954,7 @@
     register IndexPacket
       *restrict median_indexes;
 
-    register long
+    register ssize_t
       id,
       x;
 
@@ -2950,7 +2963,7 @@
 
     if (status == MagickFalse)
       continue;
-    p=GetCacheViewVirtualPixels(image_view,-((long) width/2L),y-(long) (width/
+    p=GetCacheViewVirtualPixels(image_view,-((ssize_t) width/2L),y-(ssize_t) (width/
       2L),image->columns+width,width,exception);
     q=QueueCacheViewAuthenticPixels(median_view,0,y,median_image->columns,1,
       exception);
@@ -2962,7 +2975,7 @@
     indexes=GetCacheViewVirtualIndexQueue(image_view);
     median_indexes=GetCacheViewAuthenticIndexQueue(median_view);
     id=GetOpenMPThreadId();
-    for (x=0; x < (long) median_image->columns; x++)
+    for (x=0; x < (ssize_t) median_image->columns; x++)
     {
       MagickPixelPacket
         pixel;
@@ -2973,16 +2986,16 @@
       register const IndexPacket
         *restrict s;
 
-      register long
+      register ssize_t
         u,
         v;
 
       r=p;
       s=indexes+x;
       ResetMedianPixelList(pixel_list[id]);
-      for (v=0; v < (long) width; v++)
+      for (v=0; v < (ssize_t) width; v++)
       {
-        for (u=0; u < (long) width; u++)
+        for (u=0; u < (ssize_t) width; u++)
           InsertMedianPixelList(image,r+u,s+u,pixel_list[id]);
         r+=image->columns+width;
         s+=image->columns+width;
@@ -3053,19 +3066,19 @@
 %
 %    o sigma: the standard deviation of the Gaussian, in pixels.
 %
-%    o angle: Apply the effect along this angle.
+%    o angle: Apply the effect assize_t this angle.
 %
 %    o exception: return any errors or warnings in this structure.
 %
 */
 
-static double *GetMotionBlurKernel(const unsigned long width,const double sigma)
+static double *GetMotionBlurKernel(const size_t width,const double sigma)
 {
   double
     *kernel,
     normalize;
 
-  register long
+  register ssize_t
     i;
 
   /*
@@ -3076,13 +3089,13 @@
   if (kernel == (double *) NULL)
     return(kernel);
   normalize=0.0;
-  for (i=0; i < (long) width; i++)
+  for (i=0; i < (ssize_t) width; i++)
   {
     kernel[i]=exp((-((double) i*i)/(double) (2.0*MagickSigma*MagickSigma)))/
       (MagickSQ2PI*MagickSigma);
     normalize+=kernel[i];
   }
-  for (i=0; i < (long) width; i++)
+  for (i=0; i < (ssize_t) width; i++)
     kernel[i]/=normalize;
   return(kernel);
 }
@@ -3112,13 +3125,12 @@
   Image
     *blur_image;
 
-  long
-    progress,
-    y;
-
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    progress;
+
   MagickPixelPacket
     bias;
 
@@ -3128,12 +3140,15 @@
   PointInfo
     point;
 
-  register long
+  register ssize_t
     i;
 
-  unsigned long
+  size_t
     width;
 
+  ssize_t
+    y;
+
   assert(image != (Image *) NULL);
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
@@ -3166,10 +3181,10 @@
     }
   point.x=(double) width*sin(DegreesToRadians(angle));
   point.y=(double) width*cos(DegreesToRadians(angle));
-  for (i=0; i < (long) width; i++)
+  for (i=0; i < (ssize_t) width; i++)
   {
-    offset[i].x=(long) ceil((double) (i*point.y)/hypot(point.x,point.y)-0.5);
-    offset[i].y=(long) ceil((double) (i*point.x)/hypot(point.x,point.y)-0.5);
+    offset[i].x=(ssize_t) ceil((double) (i*point.y)/hypot(point.x,point.y)-0.5);
+    offset[i].y=(ssize_t) ceil((double) (i*point.x)/hypot(point.x,point.y)-0.5);
   }
   /*
     Motion blur image.
@@ -3182,12 +3197,12 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT) && defined(MAGICKCORE_FUTURE)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
 #endif
-  for (y=0; y < (long) image->rows; y++)
+  for (y=0; y < (ssize_t) image->rows; y++)
   {
     register IndexPacket
       *restrict blur_indexes;
 
-    register long
+    register ssize_t
       x;
 
     register PixelPacket
@@ -3203,7 +3218,7 @@
         continue;
       }
     blur_indexes=GetCacheViewAuthenticIndexQueue(blur_view);
-    for (x=0; x < (long) image->columns; x++)
+    for (x=0; x < (ssize_t) image->columns; x++)
     {
       MagickPixelPacket
         qixel;
@@ -3214,7 +3229,7 @@
       register double
         *restrict k;
 
-      register long
+      register ssize_t
         i;
 
       register const IndexPacket
@@ -3224,7 +3239,7 @@
       qixel=bias;
       if (((channel & OpacityChannel) == 0) || (image->matte == MagickFalse))
         {
-          for (i=0; i < (long) width; i++)
+          for (i=0; i < (ssize_t) width; i++)
           {
             (void) GetOneCacheViewVirtualPixel(image_view,x+offset[i].x,y+
               offset[i].y,&pixel,exception);
@@ -3259,7 +3274,7 @@
 
           alpha=0.0;
           gamma=0.0;
-          for (i=0; i < (long) width; i++)
+          for (i=0; i < (ssize_t) width; i++)
           {
             (void) GetOneCacheViewVirtualPixel(image_view,x+offset[i].x,y+
               offset[i].y,&pixel,exception);
@@ -3374,7 +3389,7 @@
   ImageInfo
     *preview_info;
 
-  long
+  ssize_t
     y;
 
   MagickBooleanType
@@ -3389,11 +3404,11 @@
   RectangleInfo
     geometry;
 
-  register long
+  register ssize_t
     i,
     x;
 
-  unsigned long
+  size_t
     colors;
 
   /*
@@ -3451,8 +3466,8 @@
       }
       case RollPreview:
       {
-        x=(long) ((i+1)*thumbnail->columns)/NumberTiles;
-        y=(long) ((i+1)*thumbnail->rows)/NumberTiles;
+        x=(ssize_t) ((i+1)*thumbnail->columns)/NumberTiles;
+        y=(ssize_t) ((i+1)*thumbnail->rows)/NumberTiles;
         preview_image=RollImage(thumbnail,x,y,exception);
         (void) FormatMagickString(label,MaxTextExtent,"roll %ldx%ld",x,y);
         break;
@@ -3672,8 +3687,8 @@
         preview_image=CloneImage(thumbnail,0,0,MagickTrue,exception);
         if (preview_image == (Image *) NULL)
           break;
-        geometry.width=(unsigned long) (2*i+2);
-        geometry.height=(unsigned long) (2*i+2);
+        geometry.width=(size_t) (2*i+2);
+        geometry.height=(size_t) (2*i+2);
         geometry.x=i/2;
         geometry.y=i/2;
         (void) RaiseImage(preview_image,&geometry,MagickTrue);
@@ -3743,7 +3758,7 @@
         preview_image=CloneImage(thumbnail,0,0,MagickTrue,exception);
         if (preview_image == (Image *) NULL)
           break;
-        preview_info->quality=(unsigned long) percentage;
+        preview_info->quality=(size_t) percentage;
         (void) FormatMagickString(factor,MaxTextExtent,"%lu",
           preview_info->quality);
         file=AcquireUniqueFileResource(filename);
@@ -3778,7 +3793,7 @@
               GetBlobSize(preview_image))/1024.0);
           else
             (void) FormatMagickString(label,MaxTextExtent,"quality %s\n%lub ",
-              factor,(unsigned long) GetBlobSize(thumbnail));
+              factor,(size_t) GetBlobSize(thumbnail));
         break;
       }
     }
@@ -3791,7 +3806,8 @@
     (void) DeleteImageProperty(preview_image,"label");
     (void) SetImageProperty(preview_image,"label",label);
     AppendImageToList(&images,preview_image);
-    proceed=SetImageProgress(image,PreviewImageTag,i,NumberTiles);
+    proceed=SetImageProgress(image,PreviewImageTag,(MagickOffsetType) i,
+      NumberTiles);
     if (proceed == MagickFalse)
       break;
   }
@@ -3883,13 +3899,12 @@
   Image
     *blur_image;
 
-  long
-    progress,
-    y;
-
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    progress;
+
   MagickPixelPacket
     bias;
 
@@ -3903,12 +3918,15 @@
   PointInfo
     blur_center;
 
-  register long
+  register ssize_t
     i;
 
-  unsigned long
+  size_t
     n;
 
+  ssize_t
+    y;
+
   /*
     Allocate blur image.
   */
@@ -3930,7 +3948,7 @@
   blur_center.x=(double) image->columns/2.0;
   blur_center.y=(double) image->rows/2.0;
   blur_radius=hypot(blur_center.x,blur_center.y);
-  n=(unsigned long) fabs(4.0*DegreesToRadians(angle)*sqrt((double) blur_radius)+
+  n=(size_t) fabs(4.0*DegreesToRadians(angle)*sqrt((double) blur_radius)+
     2UL);
   theta=DegreesToRadians(angle)/(MagickRealType) (n-1);
   cos_theta=(MagickRealType *) AcquireQuantumMemory((size_t) n,
@@ -3944,7 +3962,7 @@
       ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
     }
   offset=theta*(MagickRealType) (n-1)/2.0;
-  for (i=0; i < (long) n; i++)
+  for (i=0; i < (ssize_t) n; i++)
   {
     cos_theta[i]=cos((double) (theta*i-offset));
     sin_theta[i]=sin((double) (theta*i-offset));
@@ -3960,7 +3978,7 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
 #endif
-  for (y=0; y < (long) blur_image->rows; y++)
+  for (y=0; y < (ssize_t) blur_image->rows; y++)
   {
     register const IndexPacket
       *restrict indexes;
@@ -3968,7 +3986,7 @@
     register IndexPacket
       *restrict blur_indexes;
 
-    register long
+    register ssize_t
       x;
 
     register PixelPacket
@@ -3984,7 +4002,7 @@
         continue;
       }
     blur_indexes=GetCacheViewAuthenticIndexQueue(blur_view);
-    for (x=0; x < (long) blur_image->columns; x++)
+    for (x=0; x < (ssize_t) blur_image->columns; x++)
     {
       MagickPixelPacket
         qixel;
@@ -3999,10 +4017,10 @@
       PointInfo
         center;
 
-      register long
+      register ssize_t
         i;
 
-      unsigned long
+      size_t
         step;
 
       center.x=(double) x-blur_center.x;
@@ -4012,7 +4030,7 @@
         step=1;
       else
         {
-          step=(unsigned long) (blur_radius/radius);
+          step=(size_t) (blur_radius/radius);
           if (step == 0)
             step=1;
           else
@@ -4023,10 +4041,10 @@
       qixel=bias;
       if (((channel & OpacityChannel) == 0) || (image->matte == MagickFalse))
         {
-          for (i=0; i < (long) n; i+=step)
+          for (i=0; i < (ssize_t) n; i+=step)
           {
-            (void) GetOneCacheViewVirtualPixel(image_view,(long) (blur_center.x+
-              center.x*cos_theta[i]-center.y*sin_theta[i]+0.5),(long) (
+            (void) GetOneCacheViewVirtualPixel(image_view,(ssize_t) (blur_center.x+
+              center.x*cos_theta[i]-center.y*sin_theta[i]+0.5),(ssize_t) (
               blur_center.y+center.x*sin_theta[i]+center.y*cos_theta[i]+0.5),
               &pixel,exception);
             qixel.red+=pixel.red;
@@ -4062,10 +4080,10 @@
 
           alpha=1.0;
           gamma=0.0;
-          for (i=0; i < (long) n; i+=step)
+          for (i=0; i < (ssize_t) n; i+=step)
           {
-            (void) GetOneCacheViewVirtualPixel(image_view,(long) (blur_center.x+
-              center.x*cos_theta[i]-center.y*sin_theta[i]+0.5),(long) (
+            (void) GetOneCacheViewVirtualPixel(image_view,(ssize_t) (blur_center.x+
+              center.x*cos_theta[i]-center.y*sin_theta[i]+0.5),(ssize_t) (
               blur_center.y+center.x*sin_theta[i]+center.y*cos_theta[i]+0.5),
               &pixel,exception);
             alpha=(MagickRealType) (QuantumScale*
@@ -4159,13 +4177,13 @@
   MagickPixelPacket
     pixel;
 
-  register long
+  register ssize_t
     channel;
 
   register MedianSkipList
     *list;
 
-  unsigned long
+  size_t
     center,
     color,
     count,
@@ -4221,19 +4239,21 @@
   Image
     *noise_image;
 
-  long
-    progress,
-    y;
-
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    progress;
+
   MedianPixelList
     **restrict pixel_list;
 
-  unsigned long
+  size_t
     width;
 
+  ssize_t
+    y;
+
   /*
     Initialize noise image attributes.
   */
@@ -4272,7 +4292,7 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
 #endif
-  for (y=0; y < (long) noise_image->rows; y++)
+  for (y=0; y < (ssize_t) noise_image->rows; y++)
   {
     register const IndexPacket
       *restrict indexes;
@@ -4283,7 +4303,7 @@
     register IndexPacket
       *restrict noise_indexes;
 
-    register long
+    register ssize_t
       id,
       x;
 
@@ -4292,7 +4312,7 @@
 
     if (status == MagickFalse)
       continue;
-    p=GetCacheViewVirtualPixels(image_view,-((long) width/2L),y-(long) (width/
+    p=GetCacheViewVirtualPixels(image_view,-((ssize_t) width/2L),y-(ssize_t) (width/
       2L),image->columns+width,width,exception);
     q=QueueCacheViewAuthenticPixels(noise_view,0,y,noise_image->columns,1,
       exception);
@@ -4304,7 +4324,7 @@
     indexes=GetCacheViewVirtualIndexQueue(image_view);
     noise_indexes=GetCacheViewAuthenticIndexQueue(noise_view);
     id=GetOpenMPThreadId();
-    for (x=0; x < (long) noise_image->columns; x++)
+    for (x=0; x < (ssize_t) noise_image->columns; x++)
     {
       MagickPixelPacket
         pixel;
@@ -4315,16 +4335,16 @@
       register const IndexPacket
         *restrict s;
 
-      register long
+      register ssize_t
         u,
         v;
 
       r=p;
       s=indexes+x;
       ResetMedianPixelList(pixel_list[id]);
-      for (v=0; v < (long) width; v++)
+      for (v=0; v < (ssize_t) width; v++)
       {
-        for (u=0; u < (long) width; u++)
+        for (u=0; u < (ssize_t) width; u++)
           InsertMedianPixelList(image,r+u,s+u,pixel_list[id]);
         r+=image->columns+width;
         s+=image->columns+width;
@@ -4432,25 +4452,27 @@
   Image
     *blur_image;
 
-  long
-    j,
-    progress,
-    u,
-    v,
-    y;
-
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    progress;
+
   MagickPixelPacket
     bias;
 
-  register long
+  register ssize_t
     i;
 
-  unsigned long
+  size_t
     width;
 
+  ssize_t
+    j,
+    u,
+    v,
+    y;
+
   /*
     Initialize blur image attributes.
   */
@@ -4464,7 +4486,7 @@
   kernel=(double *) AcquireQuantumMemory((size_t) width,width*sizeof(*kernel));
   if (kernel == (double *) NULL)
     ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
-  j=(long) width/2;
+  j=(ssize_t) width/2;
   i=0;
   for (v=(-j); v <= j; v++)
   {
@@ -4478,7 +4500,7 @@
         format[MaxTextExtent],
         *message;
 
-      long
+      ssize_t
         u,
         v;
 
@@ -4489,12 +4511,12 @@
         "  SelectiveBlurImage with %ldx%ld kernel:",width,width);
       message=AcquireString("");
       k=kernel;
-      for (v=0; v < (long) width; v++)
+      for (v=0; v < (ssize_t) width; v++)
       {
         *message='\0';
         (void) FormatMagickString(format,MaxTextExtent,"%ld: ",v);
         (void) ConcatenateString(&message,format);
-        for (u=0; u < (long) width; u++)
+        for (u=0; u < (ssize_t) width; u++)
         {
           (void) FormatMagickString(format,MaxTextExtent,"%+f ",*k++);
           (void) ConcatenateString(&message,format);
@@ -4524,7 +4546,7 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
 #endif
-  for (y=0; y < (long) image->rows; y++)
+  for (y=0; y < (ssize_t) image->rows; y++)
   {
     MagickBooleanType
       sync;
@@ -4541,7 +4563,7 @@
     register IndexPacket
       *restrict blur_indexes;
 
-    register long
+    register ssize_t
       x;
 
     register PixelPacket
@@ -4549,7 +4571,7 @@
 
     if (status == MagickFalse)
       continue;
-    p=GetCacheViewVirtualPixels(image_view,-((long) width/2L),y-(long) (width/
+    p=GetCacheViewVirtualPixels(image_view,-((ssize_t) width/2L),y-(ssize_t) (width/
       2L),image->columns+width,width,exception);
     q=GetCacheViewAuthenticPixels(blur_view,0,y,blur_image->columns,1,
       exception);
@@ -4560,9 +4582,9 @@
       }
     indexes=GetCacheViewVirtualIndexQueue(image_view);
     blur_indexes=GetCacheViewAuthenticIndexQueue(blur_view);
-    for (x=0; x < (long) image->columns; x++)
+    for (x=0; x < (ssize_t) image->columns; x++)
     {
-      long
+      ssize_t
         j,
         v;
 
@@ -4572,7 +4594,7 @@
       register const double
         *restrict k;
 
-      register long
+      register ssize_t
         u;
 
       pixel=bias;
@@ -4581,9 +4603,9 @@
       j=0;
       if (((channel & OpacityChannel) == 0) || (image->matte == MagickFalse))
         {
-          for (v=0; v < (long) width; v++)
+          for (v=0; v < (ssize_t) width; v++)
           {
-            for (u=0; u < (long) width; u++)
+            for (u=0; u < (ssize_t) width; u++)
             {
               if (SelectiveContrast(p+u+j,q,threshold) != MagickFalse)
                 {
@@ -4610,9 +4632,9 @@
             {
               gamma=0.0;
               j=0;
-              for (v=0; v < (long) width; v++)
+              for (v=0; v < (ssize_t) width; v++)
               {
-                for (u=0; u < (long) width; u++)
+                for (u=0; u < (ssize_t) width; u++)
                 {
                   if (SelectiveContrast(p+u+j,q,threshold) != MagickFalse)
                     {
@@ -4636,9 +4658,9 @@
             {
               gamma=0.0;
               j=0;
-              for (v=0; v < (long) width; v++)
+              for (v=0; v < (ssize_t) width; v++)
               {
-                for (u=0; u < (long) width; u++)
+                for (u=0; u < (ssize_t) width; u++)
                 {
                   if (SelectiveContrast(p+u+j,q,threshold) != MagickFalse)
                     {
@@ -4663,9 +4685,9 @@
           MagickRealType
             alpha;
 
-          for (v=0; v < (long) width; v++)
+          for (v=0; v < (ssize_t) width; v++)
           {
-            for (u=0; u < (long) width; u++)
+            for (u=0; u < (ssize_t) width; u++)
             {
               if (SelectiveContrast(p+u+j,q,threshold) != MagickFalse)
                 {
@@ -4695,9 +4717,9 @@
             {
               gamma=0.0;
               j=0;
-              for (v=0; v < (long) width; v++)
+              for (v=0; v < (ssize_t) width; v++)
               {
-                for (u=0; u < (long) width; u++)
+                for (u=0; u < (ssize_t) width; u++)
                 {
                   if (SelectiveContrast(p+u+j,q,threshold) != MagickFalse)
                     {
@@ -4721,9 +4743,9 @@
             {
               gamma=0.0;
               j=0;
-              for (v=0; v < (long) width; v++)
+              for (v=0; v < (ssize_t) width; v++)
               {
-                for (u=0; u < (long) width; u++)
+                for (u=0; u < (ssize_t) width; u++)
                 {
                   if (SelectiveContrast(p+u+j,q,threshold) != MagickFalse)
                     {
@@ -4818,16 +4840,18 @@
   Image
     *shade_image;
 
-  long
-    progress,
-    y;
-
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    progress;
+
   PrimaryInfo
     light;
 
+  ssize_t
+    y;
+
   /*
     Initialize shaded image attributes.
   */
@@ -4864,7 +4888,7 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
 #endif
-  for (y=0; y < (long) image->rows; y++)
+  for (y=0; y < (ssize_t) image->rows; y++)
   {
     MagickRealType
       distance,
@@ -4880,7 +4904,7 @@
       *restrict s1,
       *restrict s2;
 
-    register long
+    register ssize_t
       x;
 
     register PixelPacket
@@ -4903,7 +4927,7 @@
     s0=p+1;
     s1=s0+image->columns+2;
     s2=s1+image->columns+2;
-    for (x=0; x < (long) image->columns; x++)
+    for (x=0; x < (ssize_t) image->columns; x++)
     {
       /*
         Determine the surface normal and compute shading.
@@ -5032,15 +5056,15 @@
   Image
     *sharp_image;
 
-  long
+  ssize_t
     j,
     u,
     v;
 
-  register long
+  register ssize_t
     i;
 
-  unsigned long
+  size_t
     width;
 
   assert(image != (const Image *) NULL);
@@ -5054,7 +5078,7 @@
   if (kernel == (double *) NULL)
     ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
   normalize=0.0;
-  j=(long) width/2;
+  j=(ssize_t) width/2;
   i=0;
   for (v=(-j); v <= j; v++)
   {
@@ -5111,13 +5135,12 @@
   Image
     *spread_image;
 
-  long
-    progress,
-    y;
-
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    progress;
+
   MagickPixelPacket
     bias;
 
@@ -5127,9 +5150,12 @@
   ResampleFilter
     **restrict resample_filter;
 
-  unsigned long
+  size_t
     width;
 
+  ssize_t
+    y;
+
   /*
     Initialize spread image attributes.
   */
@@ -5163,7 +5189,7 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT) && defined(MAGICKCORE_FUTURE)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
 #endif
-  for (y=0; y < (long) spread_image->rows; y++)
+  for (y=0; y < (ssize_t) spread_image->rows; y++)
   {
     MagickPixelPacket
       pixel;
@@ -5171,7 +5197,7 @@
     register IndexPacket
       *restrict indexes;
 
-    register long
+    register ssize_t
       id,
       x;
 
@@ -5190,7 +5216,7 @@
     indexes=GetCacheViewAuthenticIndexQueue(image_view);
     pixel=bias;
     id=GetOpenMPThreadId();
-    for (x=0; x < (long) spread_image->columns; x++)
+    for (x=0; x < (ssize_t) spread_image->columns; x++)
     {
       (void) ResamplePixelColor(resample_filter[id],(double) x+width*
         (GetPseudoRandomValue(random_info[id])-0.5),(double) y+width*
@@ -5289,19 +5315,21 @@
   Image
     *unsharp_image;
 
-  long
-    progress,
-    y;
-
   MagickBooleanType
     status;
 
+  MagickOffsetType
+    progress;
+
   MagickPixelPacket
     bias;
 
   MagickRealType
     quantum_threshold;
 
+  ssize_t
+    y;
+
   assert(image != (const Image *) NULL);
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
@@ -5322,7 +5350,7 @@
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(dynamic,4) shared(progress,status)
 #endif
-  for (y=0; y < (long) image->rows; y++)
+  for (y=0; y < (ssize_t) image->rows; y++)
   {
     MagickPixelPacket
       pixel;
@@ -5336,7 +5364,7 @@
     register IndexPacket
       *restrict unsharp_indexes;
 
-    register long
+    register ssize_t
       x;
 
     register PixelPacket
@@ -5355,7 +5383,7 @@
     indexes=GetCacheViewVirtualIndexQueue(image_view);
     unsharp_indexes=GetCacheViewAuthenticIndexQueue(unsharp_view);
     pixel=bias;
-    for (x=0; x < (long) image->columns; x++)
+    for (x=0; x < (ssize_t) image->columns; x++)
     {
       if ((channel & RedChannel) != 0)
         {