I would maybe volunteer, but I think this will be a huge effort.
First of all I see
in vc.el:
(require 'dired-aux)) ; for dired-kill-{line,tree}
That's missing. So let's compare xemacs dired.el vs. emacs dired.el.
Ouch not even close!
OK, try compiling emacs dired.el:
Compiling file /usr/share/emacs/21.2/lisp/dired.el at Tue Aug 13 14:51:12 2002
While compiling dired-readin:
** function dired-readin used to take 2-3 arguments, now takes 2
** variable failed bound but not referenced
While compiling dired-readin-insert:
** function dired-readin-insert used to take 1-2 arguments, now takes 1
While compiling dired-insert-headerline:
** function dired-insert-headerline used to take 0+ arguments, now takes 1
While compiling dired-revert:
** dired-uncache called with 1 argument, but requires 2
While compiling dired-insert-old-subdirs:
** dired-uncache called with 1 argument, but requires 2
While compiling dired-uncache:
** function dired-uncache used to take 2 arguments, now takes 1
While compiling dired-find-file:
** function dired-find-file used to take 0-1 arguments, now takes 0
While compiling dired-find-file-other-window:
** function dired-find-file-other-window used to take 0-2 arguments, now
takes 0
While compiling dired-display-file:
** function dired-display-file used to take 0-1 arguments, now takes 0
While compiling dired-get-filename:
** reference to free variable default-file-name-coding-system
While compiling dired-move-to-filename:
** function dired-move-to-filename used to take 0-3 arguments, now takes 0-2
While compiling dired-move-to-end-of-filename:
** function dired-move-to-end-of-filename used to take 0-3 arguments, now
takes 0-1
While compiling dired-buffers-for-dir:
** variable pattern bound but not referenced
While compiling dired-alist-add-1:
** function dired-alist-add-1 used to take 2-4 arguments, now takes 2
While compiling dired-do-flagged-delete:
** evaluating (< nil 0): (wrong-type-argument number-char-or-marker-p nil)
While compiling dired-internal-do-deletions:
** function dired-internal-do-deletions used to take 2-3 arguments, now
takes 2
** dired-log-summary called with 2 arguments, but requires 3
While compiling dired-mark-prompt:
** function dired-mark-prompt used to take 2-3 arguments, now takes 2
While compiling dired-format-columns-of-files:
** function dired-format-columns-of-files used to take 1-2 arguments, now
takes 1
While compiling dired-mark-files-in-region:
** function dired-mark-files-in-region used to take 2-3 arguments, now takes
2
While compiling dired-mark:
** function dired-mark used to take 1-2 arguments, now takes 1
While compiling dired-mark-symlinks:
** function dired-mark-symlinks used to take 0-1 arguments, now takes 1
While compiling dired-mark-directories:
** function dired-mark-directories used to take 0-1 arguments, now takes 1
While compiling dired-mark-executables:
** function dired-mark-executables used to take 0-1 arguments, now takes 1
While compiling dired-flag-backup-files:
** function dired-flag-backup-files used to take 0+ arguments, now takes 0-1
While compiling dired-unmark-all-files:
** variable query bound but not referenced
While compiling dired-log-summary:
** function dired-log-summary used to take 3 arguments, now takes 2
While compiling dired-sort-set-modeline:
** function dired-sort-set-modeline used to take 0-1 arguments, now takes 0
While compiling dired-sort-other:
** function dired-sort-other used to take 1-3 arguments, now takes 1-2
While compiling the end of the data:
** The following functions are not known to be defined:
file-system-info, propertized-buffer-identification, posn-window,
event-end, posn-point
I think we need someone with a lot more elisp expertise than I have to
fix this.