--- xemacs-21.0-b41/lisp/dragdrop.el.orig	Wed Jun  3 20:42:46 1998
+++ xemacs-21.0-b41/lisp/dragdrop.el	Wed Jun  3 21:54:40 1998
@@ -39,29 +39,29 @@
 ;; Anyway: is dragdrop- a good prefix for all this?
 ;; What if someone trys drop<TAB> in the minibuffer?
 (defgroup drag-n-drop nil
-  "Window system-independent drag'n'drop support."
+  "*{EXPERIMENTAL} Window system-independent drag'n'drop support."
   :group 'editing)
 
 (defcustom dragdrop-drop-at-point nil
-  "*If non-nil, the drop handler functions will drop text at the cursor location.
+  "*{EXPERIMENTAL} If non-nil, drop text at the cursor location.
 Otherwise, the cursor will be moved to the location of the pointer drop before
 text is inserted."
   :type 'boolean
   :group 'drag-n-drop)
 
 (defcustom dragdrop-autoload-tm-view nil
-  "*If non-nil, autoload tm-view if a MIME buffer needs to be decoded.
+  "*{EXPERIMENTAL} If non-nil, autoload tm-view to decode MIME data.
 Otherwise, the buffer is only decoded if tm-view is already avaiable."
   :type 'boolean
   :group 'drag-n-drop)
 
 ;; the widget for editing the drop-functions
 (define-widget 'dragdrop-function-widget 'list
-  "Widget for editing drop dispatch functions."
+  "*{EXPERIMENTAL} Widget for editing drop dispatch functions."
   :args `((choice :tag "Function"
-		  (function-item dragdrop-drop-url-default)
-		  (function-item dragdrop-drop-mime-default)
-		  (function-item dragdrop-drop-log-function)
+		  (function-item experimental-dragdrop-drop-url-default)
+		  (function-item experimental-dragdrop-drop-mime-default)
+		  (function-item experimental-dragdrop-drop-log-function)
 		  (function :tag "Other" nil))
 	  (choice :tag "Button" :value t
 		  (choice-item :tag "Ignore" t)
@@ -83,9 +83,9 @@
 		  (sexp :tag "Arg" :value nil)))
   :value '(nil t t))
 
-(defcustom dragdrop-drop-functions '((dragdrop-drop-url-default t t)
-				     (dragdrop-drop-mime-default t t))
-  "This is the standart drop function search list.
+(defcustom experimental-dragdrop-drop-functions '((experimental-dragdrop-drop-url-default t t)
+						  (experimental-dragdrop-drop-mime-default t t))
+  "*{EXPERIMENTAL} This is the standart drop function search list.
 Each element is a list of a function, a button selector, a modifier
 selector and optional argumets to the function call.
 The function must accept at least two arguments: first is the event
@@ -96,39 +96,39 @@
   :type '(repeat dragdrop-function-widget))
 
 (defgroup dnd-debug nil
-  "Drag'n'Drop debugging options."
+  "*{EXPERIMENTAL} Drag'n'Drop debugging options."
   :group 'drag-n-drop)
 
 (defcustom dragdrop-drop-log nil
-  "If non-nil, every drop is logged.
+  "*{EXPERIMENTAL} If non-nil, every drop is logged.
 The name of the buffer is set in the custom 'dragdrop-drop-log-name"
   :group 'dnd-debug
   :type 'boolean)
 
 (defcustom dragdrop-drop-log-name "*drop log buffer*"
-  "The name of the buffer used to log drops.
+  "*{EXPERIMENTAL} The name of the buffer used to log drops.
 Set dragdrop-drop-log to non-nil to enable this feature."
   :group 'dnd-debug
   :type 'string)
 
 (defvar dragdrop-drop-log-buffer nil
-  "Buffer to log drops in debug mode.")
+  "*{EXPERIMENTAL} Buffer to log drops in debug mode.")
 
 ;;
 ;; Drop API
 ;;
 (defun dragdrop-drop-dispatch (object)
-  "This function identifies DROP type misc-user-events.
+  "*{EXPERIMENTAL} This function identifies DROP type misc-user-events.
 It calls functions which will handle the drag."
   (let ((event current-mouse-event))
     (and dragdrop-drop-log
-	 (dragdrop-drop-log-function event object))
+	 (experimental-dragdrop-drop-log-function event object))
     (dragdrop-drop-find-functions event object)))
 
 (defun dragdrop-drop-find-functions (event object)
   "Finds valid drop-handle functions and executes them to dispose the drop.
-It does this by looking for extent-properties called 'dragdrop-drop-functions
-and for variables named like this."
+It does this by looking for extent-properties called
+'experimental-dragdrop-drop-functions and for variables named like this."
   (catch 'dragdrop-drop-is-done
     (and (event-over-text-area-p event)
 	 ;; let's search the extents
@@ -141,15 +141,17 @@
 	     (or pos (setq pos cpos))
 	     (select-window window)
 	     (setq buffer (window-buffer))
-	     (let ((ext (extent-at pos buffer 'dragdrop-drop-functions)))
+	     (let ((ext (extent-at pos buffer 'experimental-dragdrop-drop-functions)))
 	       (while (not (eq ext nil))
 		 (dragdrop-drop-do-functions
-		  (extent-property ext 'dragdrop-drop-functions)
+		  (extent-property ext 'experimental-dragdrop-drop-functions)
 		  event
 		  object)
-		 (setq ext (extent-at pos buffer 'dragdrop-drop-functions ext)))))))
-    ;; now look into the variable dragdrop-drop-functions
-    (dragdrop-drop-do-functions dragdrop-drop-functions event object)))
+		 (setq ext (extent-at pos buffer
+				      'experimental-dragdrop-drop-functions
+				      ext)))))))
+    ;; now look into the variable experimental-dragdrop-drop-functions
+    (dragdrop-drop-do-functions experimental-dragdrop-drop-functions event object)))
 
 (defun dragdrop-compare-mods (first-mods second-mods)
   "Returns t if both first-mods and second-mods contain the same elements.
@@ -181,8 +183,8 @@
       (setq drop-funs (cdr drop-funs))))
   nil)
 
-(defun dragdrop-drop-log-function (event object &optional message buffer)
-  "Logs any drops into a buffer.
+(defun experimental-dragdrop-drop-log-function (event object &optional message buffer)
+  "*{EXPERIMENTAL} Logs any drops into a buffer.
 If buffer is nil, it inserts the data into a buffer called after
 dragdrop-drop-log-name.
 If dragdrop-drop-log is non-nil, this is done automatically for each drop.
@@ -223,8 +225,8 @@
     (insert "----------\n"))
   nil)
 
-(defun dragdrop-drop-url-default (event object)
-  "Default handler for dropped URL data.
+(defun experimental-dragdrop-drop-url-default (event object)
+  "*{EXPERIMENTAL} Default handler for dropped URL data.
 Finds files and URLs. Returns nil if object does not contain URL data."
   (cond ((eq (car object) 'dragdrop-URL)
 	 (let ((data (cdr object))
@@ -253,8 +255,8 @@
 	   t))
 	(t nil)))
 
-(defun dragdrop-drop-mime-default (event object)
-  "Default handler for dropped MIME data.
+(defun experimental-dragdrop-drop-mime-default (event object)
+  "*{EXPERIMENTAL} Default handler for dropped MIME data.
 Inserts text into buffer, creates MIME buffers for other types.
 Returns nil if object does not contain MIME data."
   (cond ((eq (car object) 'dragdrop-MIME)
@@ -342,29 +344,29 @@
 ;;
 ;; Drag API
 ;;
-(defun dragdrop-drag (event object)
-  "The generic drag function.
+(defun experimental-dragdrop-drag (event object)
+  "*{EXPERIMENTAL} The generic drag function.
 Tries to do the best with object in the selected protocol.
 Object must comply to the standart drag'n'drop object 
 format."
   (error "Not implemented"))
 
-(defun dragdrop-drag-region (event begin end)
-  "Drag a region.
+(defun experimental-dragdrop-drag-region (event begin end)
+  "*{EXPERIMENTAL} Drag a region.
 This function uses special data types if the low-level
 protocol requires it. It does so by calling
 dragdrop-drag-pure-text."
   (dragdrop-drag-pure-text event
 			   (buffer-substring-no-properties begin end)))
 
-(defun dragdrop-drag-pure-text (event text)
-  "Drag text-only data.
+(defun experimental-dragdrop-drag-pure-text (event text)
+  "*{EXPERIMENTAL} Drag text-only data.
 Takes care of special low-level protocol data types.
 Text must be a list of strings."
   (error "Not implemented"))
 
-(defun dragdrop-drag-pure-file (event file)
-  "Drag filepath-only data.
+(defun experimental-dragdrop-drag-pure-file (event file)
+  "*{EXPERIMENTAL} Drag filepath-only data.
 Takes care of special low-level protocol data types.
 file must be a list of strings."
   (error "Not implemented"))
--- xemacs-21.0-b41/man/lispref/dragndrop.texi.orig	Wed Jun  3 20:42:47 1998
+++ xemacs-21.0-b41/man/lispref/dragndrop.texi	Wed Jun  3 20:43:14 1998
@@ -9,7 +9,7 @@
 @cindex drag'n'drop
 
 @emph{WARNING}: the Drag'n'Drop API is still under development and the
-interface may change!
+interface may change! The current implementation is considered experimental.
 
   Drag'n'drop is a way to transfer information between multiple applications.
 To do this serveral GUIs define their own protocols. Examples are OffiX, CDE,
--- xemacs-21.0-b41/src/frame-x.c.orig	Wed Jun  3 20:42:49 1998
+++ xemacs-21.0-b41/src/frame-x.c	Thu Jun  4 21:04:57 1998
@@ -976,12 +976,41 @@
 #include <Dt/Dnd.h>
 
 static Widget CurrentDragWidget = NULL;
+static XtCallbackRec dnd_convert_cb_rec[2];
+static XtCallbackRec dnd_destroy_cb_rec[2];
+static int drag_not_done = 0;
 
 static void
 x_cde_destroy_callback (Widget widget, XtPointer clientData,
 			XtPointer callData)
 {
+  DtDndDragFinishCallbackStruct *dragFinishInfo =
+    (DtDndDragFinishCallbackStruct *)callData;
+  DtDndContext *dragData = dragFinishInfo->dragData;
+  int i;
+
+  /* free the items */
+  if (callData != NULL && dragData != NULL)
+    {
+      if (dragData->protocol == DtDND_BUFFER_TRANSFER)
+	{
+	  for (i = 0; i < dragData->numItems; i++)
+	    {
+	      XtFree(dragData->data.buffers[i].bp);
+	      if (dragData->data.buffers[i].name)
+		XtFree(dragData->data.buffers[i].name);
+	    }
+	}
+      else
+	{
+	  for (i = 0; i < dragData->numItems; i++)
+	    XtFree(dragData->data.files[i]);
+	}
+    }
+
+  /* free the data string */
   xfree (clientData);
+
   CurrentDragWidget = NULL;
 }
 
@@ -995,12 +1024,12 @@
   char *textptr = NULL;
   int i;
 
-  if(convertInfo == NULL)
+  if (convertInfo == NULL)
     {
       return;
     }
 
-  if((convertInfo->dragData->protocol != DtDND_BUFFER_TRANSFER
+  if ((convertInfo->dragData->protocol != DtDND_BUFFER_TRANSFER
       && convertInfo->dragData->protocol != DtDND_FILENAME_TRANSFER) ||
      (convertInfo->reason != DtCR_DND_CONVERT_DATA))
     {
@@ -1026,15 +1055,10 @@
   convertInfo->status = DtDND_SUCCESS;
 }
 
-
-static XtCallbackRec dnd_convert_cb_rec[2];
-static XtCallbackRec dnd_destroy_cb_rec[2];
-static int drag_not_done = 0;
-
 static Lisp_Object
 abort_current_drag(Lisp_Object arg)
 {
-  if(CurrentDragWidget && drag_not_done)
+  if (CurrentDragWidget && drag_not_done)
     {
       XmDragCancel(CurrentDragWidget);
       CurrentDragWidget = NULL;
@@ -1061,6 +1085,7 @@
       Display *display = XtDisplayOfObject (wid);
       struct device *d    = get_device_from_display (display);
       struct x_device *xd = DEVICE_X_DATA (d);
+      XWindowAttributes win_attrib;
       unsigned int modifier = 0, state = 0;
       char *Ctext;
       int numItems = 0, textlen = 0, pos = 0;
@@ -1083,14 +1108,23 @@
       x_event.xbutton.send_event = False;
       x_event.xbutton.display = XtDisplayOfObject(wid);
       x_event.xbutton.window = XtWindowOfObject(wid);
-      x_event.xbutton.root = XRootWindow(x_event.xkey.display, 0);
+      x_event.xbutton.root = XRootWindow(x_event.xbutton.display, 0);
       x_event.xbutton.subwindow = 0;
       x_event.xbutton.time = lisp_event->timestamp;
       x_event.xbutton.x = lisp_event->event.button.x;
       x_event.xbutton.y = lisp_event->event.button.y;
-      x_event.xbutton.x_root = lisp_event->event.button.x; /* this is wrong */
-      x_event.xbutton.y_root = lisp_event->event.button.y;
-
+      if (Success == XGetWindowAttributes (x_event.xbutton.display,
+					   x_event.xbutton.window,
+					   &win_attrib))
+	{
+	  x_event.xbutton.x_root = win_attrib.x + lisp_event->event.button.x;
+	  x_event.xbutton.y_root = win_attrib.y + lisp_event->event.button.y;
+	}
+      else
+	{
+	  x_event.xbutton.x_root = lisp_event->event.button.x; /* this is wrong */
+	  x_event.xbutton.y_root = lisp_event->event.button.y;
+	}
       modifier = lisp_event->event.button.modifiers;
       if (modifier & MOD_SHIFT)   state |= ShiftMask;
       if (modifier & MOD_CONTROL) state |= ControlMask;
@@ -1277,6 +1311,7 @@
       Display *display = XtDisplayOfObject (wid);
       struct device *d    = get_device_from_display (display);
       struct x_device *xd = DEVICE_X_DATA (d);
+      XWindowAttributes win_attrib;
       unsigned int modifier = 0, state = 0;
       char *dnd_data = NULL;
       unsigned long dnd_len = 0;
@@ -1345,8 +1380,18 @@
       x_event.xbutton.time = lisp_event->timestamp;
       x_event.xbutton.x = lisp_event->event.button.x;
       x_event.xbutton.y = lisp_event->event.button.y;
-      x_event.xbutton.x_root = lisp_event->event.button.x; /* this is wrong */
-      x_event.xbutton.y_root = lisp_event->event.button.y;
+      if (Success == XGetWindowAttributes (x_event.xbutton.display,
+					   x_event.xbutton.window,
+					   &win_attrib))
+	{
+	  x_event.xbutton.x_root = win_attrib.x + lisp_event->event.button.x;
+	  x_event.xbutton.y_root = win_attrib.y + lisp_event->event.button.y;
+	}
+      else
+	{
+	  x_event.xbutton.x_root = lisp_event->event.button.x; /* this is wrong */
+	  x_event.xbutton.y_root = lisp_event->event.button.y;
+	}
 
       modifier = lisp_event->event.button.modifiers;
       if (modifier & MOD_SHIFT)   state |= ShiftMask;
@@ -1365,6 +1410,7 @@
       if (dnd_dealloc)
 	xfree (dnd_data);
 
+      /* the next thing blocks everything... */
       if (DndHandleDragging(wid, &x_event))
 	return Qt;
     }
--- xemacs-21.0-b41/tests/Dnd/droptest.el.orig	Wed Jun  3 20:42:52 1998
+++ xemacs-21.0-b41/tests/Dnd/droptest.el	Thu Jun  4 21:11:28 1998
@@ -23,6 +23,21 @@
 	   (funcall (intern "cde-start-drag-internal") event t what)))
 	(t display-message 'error "no valid drag protocols implemented")))
 
+(defun start-region-drag (event)
+  (interactive "_e")
+  (if (click-inside-extent-p event zmacs-region-extent)
+      ;; okay, this is a drag
+      (cond ((featurep 'offix)
+	     (offix-start-drag-region event
+				      (extent-start-position zmacs-region-extent)
+				      (extent-end-position zmacs-region-extent)))
+	    ((featurep 'cde)
+	     ;; should also work with CDE
+	     (cde-start-drag-region event
+				    (extent-start-position zmacs-region-extent)
+				    (extent-end-position zmacs-region-extent)))
+	    (t (error "No offix or CDE support compiled in")))))
+
 (defun make-drop-targets ()
   (let ((buf (get-buffer-create "*DND misc-user extent test buffer*"))
 	(s nil)
@@ -34,7 +49,7 @@
     (setq e (point))
     (setq ext (make-extent s e))
     (set-extent-property ext
-			 'dragdrop-drop-functions
+			 'experimental-dragdrop-drop-functions
 			 '((do-nothing t t)
 			   (dnd-drop-message t t "on target 1")))
     (set-extent-property ext 'mouse-face 'highlight)
@@ -44,7 +59,7 @@
     (setq e (point))
     (setq ext (make-extent s e))
     (set-extent-property ext
-			 'dragdrop-drop-functions
+			 'experimental-dragdrop-drop-functions
 			 '((dnd-drop-message t t "on target 2")))
     (set-extent-property ext 'mouse-face 'highlight)
     (insert "    ")
@@ -53,7 +68,7 @@
     (setq e (point))
     (setq ext (make-extent s e))
     (set-extent-property ext
-			 'dragdrop-drop-functions
+			 'experimental-dragdrop-drop-functions
 			 '((dnd-drop-message t t "on target 3")))
     (set-extent-property ext 'mouse-face 'highlight)
     (newline 2)))
@@ -125,11 +140,11 @@
 
 (defun file-drag (event)
   (interactive "@e")
-  (start-drag event "/tmp/printcap" 2))
+  (start-drag event "/tmp/DropTest.xpm" 2))
 
 (defun cde-file-drag (event)
   (interactive "@e")
-  (start-drag event '("/tmp/printcap") t))
+  (start-drag event '("/tmp/DropTest.xpm") t))
 
 (defun url-drag (event)
   (interactive "@e")
@@ -137,9 +152,9 @@
 
 (defun files-drag (event)
   (interactive "@e")
-  (start-drag event '("/tmp/dragtest" "/tmp/droptest" "/tmp/printcap") 3))
+  (start-drag event '("/tmp/DropTest.html" "/tmp/DropTest.xpm" "/tmp/DropTest.tex") 3))
 
-(setq dragdrop-drop-functions '((do-nothing t t)
+(setq experimental-dragdrop-drop-functions '((do-nothing t t)
 				;; CDE does not have any button info...
 				(dnd-drop-message 0 t "cde-drop somewhere else")
 				(dnd-drop-message 2 t "region somewhere else")
@@ -158,4 +173,4 @@
 (use-local-map lmap)
 (local-set-key [q] 'end-dnd-demo)
 (setq button2-func (lookup-key global-map [button2]))
-(global-unset-key [button2])
+(global-set-key [button2] 'start-region-drag)
--- xemacs-21.0-b41/tests/Dnd/README.orig	Thu Jun  4 21:03:17 1998
+++ xemacs-21.0-b41/tests/Dnd/README	Thu Jun  4 21:15:52 1998
@@ -3,8 +3,22 @@
 This path contains test code for the new XEmacs
 Drag'n'Drop code.
 
-Currently only drops are of interest. The internal
-functions should work for OffiX, CDE, and MSWindows.
+To test the code do the following:
+1) call 'bash droptest.sh' to create the test files in /tmp
+2) load and eval droptest.el in XEmacs
+3) Try to do some internal DnD by using the sources and targets
+   in the new buffer
+4) Do some external DnD:
+   4a) OffiX: use files and editor of OffiX
+              drag something from files or editor into XEmacs
+              drag something from XEmacs to xv (only with OffiX patch,
+              editor or files -- files can only move and copy within
+              itself, cause OffiX is not quite the right thing to do)
+   4b) CDE: use dtfile and dtpad instead, but here everything should
+            work.
+   4c) MSWindows: well, explorer should do. But only file data
+                  should work, and I don't know if the test
+                  already handles this.
 
 The misc-user-event now also responds as a button-x-event
 to the event-* query functions.
--- xemacs-21.0-b41/tests/Dnd/droptest.sh.orig	Thu Jun  4 21:16:13 1998
+++ xemacs-21.0-b41/tests/Dnd/droptest.sh	Thu Jun  4 12:35:21 1998
@@ -0,0 +1,102 @@
+#!/bin/sh
+
+cat README > /tmp/DropTest.txt
+
+cat > /tmp/DropTest.html <<EOF
+<HTML>
+<HEAD>
+<TITLE>DropTest Page</TITLE>
+</HEAD>
+<BODY>
+<H1>DropTest</H1>
+Just a Test!
+</BODY>
+</HTML>
+EOF
+
+cat > /tmp/DropTest.tex <<EOF
+\documentclass{article}
+
+\begin{document}
+This is a DropTest!
+\end{document}
+EOF
+
+cat > /tmp/DropTest.xpm <<EOF
+/* XPM */
+static char *test[] = {
+/* width height num_colors chars_per_pixel */
+"    76    50       19            1",
+/* colors */
+". c #ffffff",
+"# c #000000",
+"a c #737373",
+"b c #aeb2c3",
+"c c #9397a5",
+"d c #dcdee5",
+"e c #5d6069",
+"f c #949494",
+"g c #adadad",
+"h c #212121",
+"i c #bdbdbd",
+"j c #dedede",
+"k c #636363",
+"l c #ff0000",
+"m c #00ff00",
+"n c #0000ff",
+"o c #ffff00",
+"p c #ff00ff",
+"q c #424242",
+/* pixels */
+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbb#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbbbbbbbbbb",
+"bbbbbbbbbbbbbb#jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjqqdbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbb#jjggggggggggggggggggggggggggggggggggggggggggjqqdbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbb#jjggggggggggggggggggggggggggggggggggj...........jiibbbbbbbbbb",
+"bbbbbbbbbbbbbb#jjggjjjjjjjjjjjjjjjjjjjjjjjjjjjjj...iiiiiipp.ppii....bbbbbbbb",
+"bbbbbbbbbbbbbb#jjggjjgggggggggggggqqjgggggggg...iiiiiiiip..pppqiiiii..cbbbbb",
+"bbbbbbbbbbbbbb#jjggjjgggggggggggggqqjggggggg.iiiiooooooi.pp.ppqiiiii##cbbbbb",
+"bbbbbbbbbbbbbb#jjggjjgggggggggggggqqjgggggg.iiiiooooolliiqqqqqiiiiii##cbbbbb",
+"bbbbbbbbbbbbbb#qqggjjgggjjjjjjjjggqqjgggg..iiiiiooooolliiiiiiiiiiii#cccbbbbb",
+"bbbbbbb..........qgjjgggjqqqqqqqggqqjggg.iiiiiiiioolliiif#####iiii#cccbbbbbb",
+"bbbbbbbqqqqqqqqii.qjjgggggggggggggqqjggg.iiillliiiiiiiii#aaaiiii##ccbbbbbbbb",
+"bbbbbbbbbcccccciiiqjjgggggggggggggqqjggg.iillll#iii..iii#jjjiiiiaajjjjbbbbbb",
+"bbbbbbbbbbbbbbeaaaqjjgggggggggggggqqjggg.iillll#i..nnnniiiiiiiiiiiiiqqcbbbbb",
+"bbbbbbbbbbbbbb#..iqjjqqqqqqqqqqqqqqqjqqq.iii###iinnnnnnnimmnmmnmiiiiqqcbbbbb",
+"bbbbbbbbbbbbbbeaaaaqqiiiiiiiiiiiiiiiiiiikiiiiiiiinnnnnn#innmnnmiiiiq##cbbbbb",
+"bbbbbbbbbbbbbb.iiiiqqffffffffffffffffffffkkhiiiiiiinnnn#immnmmqiiif#cccbbbbb",
+"bbbbbbbbbbjjjjjjjjjjjjjjjjfffffffffffffffffhh##iiiiiiiiiinnnqqiihh#cccbbbbbb",
+"bbbbbbbbbjiiiiiiiiiiiiiiiifffffffffffffffffff####ggiiiiiiiiiiiahccccbbbbbbbb",
+"bbbbbbbjjijjjjfjjjjffjjjjfggqfffffffffffffffffff###############cccbbbbbbbbbb",
+"bbbbbbbjjijgggkjjggkkjgggkggqkffffff................aaaaaaaaqqbcbbbbbbbbbbbb",
+"bbbbbbbjjijgggkjjggkkjgggkggqkaaffff..#####..####...#fffffffqqdbbbbbbbbbbbbb",
+"bbbbbbbjjijgggkjjggkkjgggkggqkaaffff.#aaaaa..##aaaa.#aafffffqqdbbbbbbbbbbbbb",
+"bbbbbbbjjijgggkjjggkkjgggkggqkaaffff.#aaaff..##ffff.#aafffffqqdbbbbbbbbbbbbb",
+"bbbbbbbjjiaaaagaaaaggaaaaiggqkaaffff##aafff..##ffff##aafffffqqdbbbbbbbbbbbbb",
+"bbbbbbbjjiiiiiiiiiiiiiiiiiggqkaafffffaaafff..##fffffaaafffffqqdbbbbbbbbbbbbb",
+"bbbbbbbjjijiijijjijiijiijiggqkaafffffffffff..##f...........dqqdbbbbbbbbbbbbb",
+"bbbbbbbjjjjjjjjjjjjjjjjjjjggqhqqqqqqqqqqqqq..##q.###...##..#qqdbbbbbbbbbbbbb",
+"bbbbbbbjjjjjjjjjjjjjjjjjjjggqebbddddddddddd..##d.##d...#d..#dddbbbbbbbbbbbbb",
+"bbbbbbbjjijiijijjijiijiijiggqeccbbbbbbbbbbb..##c###c...#c###ccbbbbbbbbbbbbbb",
+"bbbbbbbjjiiiiiiiiiiiiiiiiiggqeccbbbbbbbbbbb..##cbccc...#cbbcccbbbbbbbbbbbbbb",
+"bbbbbbbjjgiggigiigiggiggigffqeccbbbbbbbbbbb..##cbbbb...#cbb.......bbbbbbbbbb",
+"bbbbbbbjjgggggggggggggggggffqeccbbbbbbbbbbb..##cbbbb...#cbb.##.#..#bbbbbbbbb",
+"bbbbbbbjjfgffgfggfgffgffgfaaqeccbbbbbbbbbbb..##cbbbb...#cbb###.####cbbbbbbbb",
+"bbbbbbbjjfffffffffffffffffffqeccbbbbbbbb........#bbb...#cbbbbb.#ccccbbbbbbbb",
+"bbbbbbbjjffffffffffffffffaffqeccbbbbbbbb#########cc.....#bbbbb.#ccbbbbbbbbbb",
+"bbbbbbbjjafaafaffafaafaafaffqeccbbbbbbbbbcccccccccc######ccb....##bbbbbbbbbb",
+"bbbbbbbjjaaaaaaaaaaaaaaaaaaaqeccbbbbbbbbbbbbbbbbbbbbcccccccbbb####cbbbbbbbbb",
+"bbbbbbbbbbaaaaaaaaaaaaaaaahheeccbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccbbbbbbbbb",
+"bbbbbbbbbbbqqqqqqqqqqqqqqqeeecccbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbeeeeeeeeeeeeeeeccbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbbccccccccccccccccbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
+};
+EOF
--- xemacs-21.0-b41/configure.in.orig	Wed Jun  3 20:42:46 1998
+++ xemacs-21.0-b41/configure.in	Wed Jun  3 20:43:14 1998
@@ -3928,7 +3928,7 @@
 test "$with_cde"      = yes && echo "  Compiling in support for CDE."
 test "$with_tooltalk" = yes && echo "  Compiling in support for ToolTalk."
 test "$with_offix"    = yes && echo "  Compiling in support for OffiX."
-test "$with_dragndrop" = yes && echo "  Compiling in support for Drag'n'Drop ($dragndrop_proto )."
+test "$with_dragndrop" = yes && echo "  Compiling in EXPERIMENTAL support for Drag'n'Drop ($dragndrop_proto )."
 test "$with_workshop" = yes && echo "  Compiling in support for Sun WorkShop."
 test "$with_session"  != no && echo "  Compiling in support for proper session-management."
 case "$with_menubars" in
--- xemacs-21.0-b41/configure.usage.orig	Sun May 10 02:25:07 1998
+++ xemacs-21.0-b41/configure.usage	Wed Jun  3 20:43:14 1998
@@ -79,6 +79,8 @@
 --with-dragndrop (*)	Compile in the generic drag and drop API. This is
 			automatically added if one of the drag and drop
 			protocols is found (currently CDE, OffiX, MSWindows).
+			*WARNING*  The Drag'n'drop support is under development
+				   and is considered experimental.
 --with-cde (*)		Compile in support for CDE drag and drop.
 --with-offix (*)	Compile in support for OffiX drag and drop.
 --without-xmu (*)	For those unfortunates whose vendors don't ship Xmu.
