Red Nova, mapcar must be removed from *error*
this should work
(defun c:test (/ i val *error*)
(defun *error* (msg)
(print (getvar "cecolor"))
(princ " < color on start *error*")
(foreach v val (setvar (car v) (cdr v)))
(print (getvar "cecolor"))
(princ " < color after mapcar *error*")
(if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
(princ (strcat "\nError: " msg))
)
(vla-endundomark adoc)
(print (getvar "cecolor"))
(princ " < color after endundomar *error*")
)
(vl-load-com)
(vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
(print (getvar "cecolor"))
(princ " < color on start test")
(setq val (mapcar (function (lambda (v) (cons v (getvar v)))) '("clayer" "cecolor")))
(setvar "cecolor" "1")
(print (getvar "cecolor"))
(princ " < color after cecolor 1")
(setq i 1)
(while (< i 5000000) (setq i (1+ i)))
(setvar "cecolor" "2")
(print (getvar "cecolor"))
(princ " < color after cecolor 2")
(*error* nil)
(print (getvar "cecolor"))
(princ " < color on end test")
)
Command: test
"3" < color on start test
"1" < color after cecolor 1
"1" < color on start *error*
"3" < color after mapcar *error*
"3" < color after endundomar *error*
Command:
Command: *Cancel*