+(when (subr-fboundp 'read-event)
+ ;; for Emacs 19 or later
+
+ (defun-maybe-cond next-command-event (&optional event prompt)
+ "Read an event object from the input stream.
+If EVENT is non-nil, it should be an event object and will be filled
+in and returned; otherwise a new event object will be created and
+returned.
+If PROMPT is non-nil, it should be a string and will be displayed in
+the echo area while this function is waiting for an event.
+\[XEmacs emulating function]"
+ ((subr-fboundp 'string)
+ ;; for Emacs 20.3 or later
+ (read-event prompt t)
+ )
+ (t
+ (if prompt (message prompt))
+ (read-event)
+ ))
+
+ (defsubst-maybe character-to-event (ch)
+ "Convert keystroke CH into an event structure, replete with bucky bits.
+Note that CH (the keystroke specifier) can be an integer, a character
+or a symbol such as 'clear. [XEmacs emulating function]"
+ ch)
+
+ (defun-maybe event-to-character (event)
+ "Return the character approximation to the given event object.
+If the event isn't a keypress, this returns nil.
+\[XEmacs emulating function]"
+ (cond ((symbolp event)
+ ;; mask is (BASE-TYPE MODIFIER-BITS) or nil.
+ (let ((mask (get event 'event-symbol-element-mask)))
+ (if mask
+ (let ((base (get (car mask) 'ascii-character)))
+ (if base
+ (logior base (car (cdr mask)))
+ )))))
+ ((integerp event) event)
+ ))
+ )
+
+
+;;; @ MULE 2 emulation
+;;;
+
+(defun-maybe-cond cancel-undo-boundary ()
+ "Cancel undo boundary. [MULE 2.3 emulating function]"
+ ((boundp 'buffer-undo-list)
+ ;; for Emacs 19.7 or later
+ (if (and (consp buffer-undo-list)
+ ;; if car is nil.
+ (null (car buffer-undo-list)))
+ (setq buffer-undo-list (cdr buffer-undo-list))
+ ))
+ (t
+ ;; for anything older than Emacs 19.7.
+ ))
+