+ /* Long format: (apply DELTA START END FUN . ARGS). */
+ Lisp_Object delta = car;
+ Lisp_Object start = Fcar (cdr);
+ Lisp_Object end = Fcar (Fcdr (cdr));
+ Lisp_Object start_mark = Fcopy_marker (start, Qnil);
+ Lisp_Object end_mark = Fcopy_marker (end, Qt);
+
+ cdr = Fcdr (Fcdr (cdr));
+ apply1 (Fcar (cdr), Fcdr (cdr));
+
+ /* Check that the function did what the entry said it
+ would do. */
+ if (!EQ (start, Fmarker_position (start_mark))
+ || (XINT (delta) + XINT (end)
+ != marker_position (end_mark)))
+ error ("Changes to be undone by function different than announced");
+ Fset_marker (start_mark, Qnil, Qnil);
+ Fset_marker (end_mark, Qnil, Qnil);