diff --git a/magick/PreRvIcccm.c b/magick/PreRvIcccm.c
new file mode 100644
index 0000000..7bce9cc
--- /dev/null
+++ b/magick/PreRvIcccm.c
@@ -0,0 +1,347 @@
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% %
+% IIIII CCCC CCCC CCCC M M %
+% I C C C MM MM %
+% I C C C M M M %
+% I C C C M M %
+% IIIII CCCC CCCC CCCC M M %
+% %
+% MagickCore X11 Compatibility Methods %
+% %
+% Software Design %
+% John Cristy %
+% December 1994 %
+% %
+% %
+% Copyright 1999-2009 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 %
+% obtain a copy of the License at %
+% %
+% http://www.imagemagick.org/script/license.php %
+% %
+% Unless required by applicable law or agreed to in writing, software %
+% distributed under the License is distributed on an "AS IS" BASIS, %
+% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
+% See the License for the specific language governing permissions and %
+% limitations under the License. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+*/
+
+#include "magick/studio.h"
+#if defined(MAGICKCORE_X11_DELEGATE)
+#include "magick/xwindow-private.h"
+
+#if defined(PRE_R6_ICCCM)
+/*
+ Compatibility methods for pre X11R6 ICCCM.
+*/
+Status XInitImage(XImage *ximage)
+{
+ Display
+ display;
+
+ ScreenFormat
+ screen_format;
+
+ XImage
+ *created_ximage,
+ target_ximage;
+
+ /*
+ Initialize the X image.
+ */
+ screen_format.depth=ximage->depth;
+ screen_format.bits_per_pixel=(int) ximage->bits_per_pixel;
+ display.byte_order=ximage->byte_order;
+ display.bitmap_unit=ximage->bitmap_unit;
+ display.bitmap_bit_order=ximage->bitmap_bit_order;
+ display.pixmap_format=(&screen_format);
+ display.nformats=1;
+ created_ximage=XCreateImage(&display,(Visual *) NULL,ximage->depth,
+ ximage->format,ximage->xoffset,(char *) NULL,ximage->width,ximage->height,
+ ximage->bitmap_pad,ximage->bytes_per_line);
+ if (created_ximage == (XImage *) NULL)
+ return(0);
+ target_ximage=(*ximage);
+ *ximage=(*created_ximage);
+ created_ximage->data=(char *) NULL;
+ XDestroyImage(created_ximage);
+ ximage->red_mask=target_ximage.red_mask;
+ ximage->green_mask=target_ximage.green_mask;
+ ximage->blue_mask=target_ximage.blue_mask;
+ return(1);
+}
+#endif
+
+#if defined(PRE_R5_ICCCM)
+/*
+ Compatibility methods for pre X11R5 ICCCM.
+*/
+void XrmCombineDatabase(XrmDatabase source,XrmDatabase *target,
+ Bool override)
+{
+ XrmMergeDatabases(source,target);
+}
+
+Status XrmCombineFileDatabase(const char *filename,XrmDatabase *target,
+ Bool override)
+{
+ XrmDatabase
+ *combined_database,
+ source;
+
+ source=XrmGetFileDatabase(filename);
+ if (override == MagickFalse)
+ XrmMergeDatabases(source,target);
+ return(1);
+}
+
+XrmDatabase XrmGetDatabase(Display *display)
+{
+ return(display->db);
+}
+
+char *XSetLocaleModifiers(char *modifiers)
+{
+ return((char *) NULL);
+}
+
+Bool XSupportsLocale()
+{
+ return(0);
+}
+#endif
+
+#if defined(PRE_R4_ICCCM)
+/*
+ Compatibility methods for pre X11R4 ICCCM.
+*/
+XClassHint *XAllocClassHint)
+{
+ return((XClassHint *) AcquireMagickMemory(sizeof(XClassHint)));
+}
+
+XIconSize *XAllocIconSize)
+{
+ return((XIconSize *) AcquireMagickMemory(sizeof(XIconSize)));
+}
+
+XSizeHints *XAllocSizeHints)
+{
+ return((XSizeHints *) AcquireMagickMemory(sizeof(XSizeHints)));
+}
+
+Status XReconfigureWMWindow(Display *display,Window window,int screen_number,
+ unsigned int value_mask,XWindowChanges *values)
+{
+ return(XConfigureWindow(display,window,value_mask,values));
+}
+
+XStandardColormap *XAllocStandardColormap)
+{
+ return((XStandardColormap *) AcquireMagickMemory(sizeof(XStandardColormap)));
+}
+
+XWMHints *XAllocWMHints)
+{
+ return((XWMHints *) AcquireMagickMemory(sizeof(XWMHints)));
+}
+
+Status XGetGCValues(Display *display,GC gc,unsigned long mask,
+ XGCValues *values)
+{
+ return(MagickTrue);
+}
+
+Status XGetRGBColormaps(Display *display,Window window,
+ XStandardColormap **colormap,int *count,Atom property)
+{
+ *count=1;
+ return(XGetStandardColormap(display,window,*colormap,property));
+}
+
+Status XGetWMColormapWindows(Display *display,Window window,
+ Window **colormap_windows,int *number_windows)
+{
+ Atom
+ actual_type,
+ *data,
+ property;
+
+ int
+ actual_format,
+ status;
+
+ unsigned long
+ leftover,
+ number_items;
+
+ property=XInternAtom(display,"WM_COLORMAP_WINDOWS",MagickFalse);
+ if (property == None)
+ return(MagickFalse);
+ /*
+ Get the window property.
+ */
+ *data=(Atom) NULL;
+ status=XGetWindowProperty(display,window,property,0L,1000000L,MagickFalse,
+ XA_WINDOW,&actual_type,&actual_format,&number_items,&leftover,
+ (unsigned char **) &data);
+ if (status != Success)
+ return(MagickFalse);
+ if ((actual_type != XA_WINDOW) || (actual_format != 32))
+ {
+ if (data != (Atom *) NULL)
+ XFree((char *) data);
+ return(MagickFalse);
+ }
+ *colormap_windows=(Window *) data;
+ *number_windows=(int) number_items;
+ return(MagickTrue);
+}
+
+Status XGetWMName(Display *display,Window window,XTextProperty *text_property)
+{
+ char
+ *window_name;
+
+ if (XFetchName(display,window,&window_name) == 0)
+ return(MagickFalse);
+ text_property->value=(unsigned char *) window_name;
+ text_property->encoding=XA_STRING;
+ text_property->format=8;
+ text_property->nitems=strlen(window_name);
+ return(MagickTrue);
+}
+
+char *XResourceManagerString(Display *display)
+{
+ return(display->xdefaults);
+}
+
+void XrmDestroyDatabase(XrmDatabase database)
+{
+}
+
+void XSetWMIconName(Display *display,Window window,XTextProperty *property)
+{
+ XSetIconName(display,window,property->value);
+}
+
+void XSetWMName(Display *display,Window window,XTextProperty *property)
+{
+ XStoreName(display,window,property->value);
+}
+
+void XSetWMProperties(Display *display,Window window,
+ XTextProperty *window_name,XTextProperty *icon_name,char **argv,
+ int argc,XSizeHints *size_hints,XWMHints *manager_hints,
+ XClassHint *class_hint)
+{
+ XSetStandardProperties(display,window,window_name->value,icon_name->value,
+ None,argv,argc,size_hints);
+ XSetWMHints(display,window,manager_hints);
+ XSetClassHint(display,window,class_hint);
+}
+
+Status XSetWMProtocols(Display *display,Window window,Atom *protocols,
+ int count)
+{
+ Atom
+ wm_protocols;
+
+ wm_protocols=XInternAtom(display,"WM_PROTOCOLS",MagickFalse);
+ XChangeProperty(display,window,wm_protocols,XA_ATOM,32,PropModeReplace,
+ (unsigned char *) protocols,count);
+ return(MagickTrue);
+}
+
+int XStringListToTextProperty(char **argv,int argc,XTextProperty *property)
+{
+ register int
+ i;
+
+ register unsigned int
+ number_bytes;
+
+ XTextProperty
+ protocol;
+
+ number_bytes=0;
+ for (i=0; i < (long) argc; i++)
+ number_bytes+=(unsigned int) ((argv[i] ? strlen(argv[i]) : 0)+1);
+ protocol.encoding=XA_STRING;
+ protocol.format=8;
+ protocol.nitems=0;
+ if (number_bytes)
+ protocol.nitems=number_bytes-1;
+ protocol.value=NULL;
+ if (number_bytes <= 0)
+ {
+ protocol.value=(unsigned char *) AcquireQuantumMemory(1UL,
+ sizeof(*protocol.value));
+ if (protocol.value == MagickFalse)
+ return(MagickFalse);
+ *protocol.value='\0';
+ }
+ else
+ {
+ register char
+ *buffer;
+
+ buffer=(char *) AcquireQuantumMemory(number_bytes,sizeof(*buffer));
+ if (buffer == (char *) NULL)
+ return(MagickFalse);
+ protocol.value=(unsigned char *) buffer;
+ for (i=0; i < (long) argc; i++)
+ {
+ char
+ *argument;
+
+ argument=argv[i];
+ if (argument == MagickFalse)
+ *buffer++='\0';
+ else
+ {
+ (void) CopyMagickString(buffer,argument,MaxTextExtent);
+ buffer+=(strlen(argument)+1);
+ }
+ }
+ }
+ *property=protocol;
+ return(MagickTrue);
+}
+
+VisualID XVisualIDFromVisual(Visual *visual)
+{
+ return(visual->visualid);
+}
+
+Status XWithdrawWindow(Display *display,Window window,int screen)
+{
+ return(XUnmapWindow(display,window));
+}
+
+int XWMGeometry(Display *display,int screen,char *user_geometry,
+ char *default_geometry,unsigned int border_width,XSizeHints *size_hints,
+ int *x,int *y,int *width,int *height,int *gravity)
+{
+ int
+ status;
+
+ status=XGeometry(display,screen,user_geometry,default_geometry,border_width,
+ 0,0,0,0,x,y,width,height);
+ *gravity=NorthWestGravity;
+ return(status);
+}
+#endif
+
+#endif