If you test the following program without compiling it works.
But if compiling with separate namespace VLX, he does not behave as it should.
The TEST function should show an error message (division by zero)
Did I miss something?
(defun tbn:error-init (sys / tmp ss cmd)
(*push-error-using-command*)
(setq tbn:olderr *error*
*error* (lambda (s)
(if (/= s "Function cancelled")
(prompt (strcat "\nBomb!! Error: " s)))
(while (= (getvar "CMDACTIVE") 1)
(command))
(eval tbn:error_exe)
(tbn:error-restore))
tbn:error_exe (cadr sys)
sys (car sys)
tbn:sysvars nil
tbn:error-undo (getvar "undoctl")
ss (ssgetfirst)
cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(cond ((= 2 (logand tbn:error-undo 2))
(command "_.undo" "_control" "_all"
"_.undo" "_auto" "_off"))
((/= 1 (logand tbn:error-undo 1))
(command "_.undo" "_all"
"_.undo" "_auto" "_off")))
(command "_.UNDO" "_group")
(setvar "cmdecho" cmd)
(repeat (/ (length sys) 2)
(setq tmp (car sys)
tbn:sysvars (cons (list tmp (getvar tmp))
tbn:sysvars)
tmp (setvar tmp (cadr sys))
sys (cddr sys)))
(sssetfirst (car ss) (cadr ss)))
(defun tbn:error-restore (/ cmd x)
(foreach x tbn:sysvars (setvar (car x) (cadr x)))
(redraw)
(setq cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command "_.UNDO" "_e")
(cond ((/= 1 (logand tbn:error-undo 1))
(command "_.undo" "_control" "_none"))
((= 2 (logand tbn:error-undo 2))
(command "_.undo" "_control" "_one")))
(setvar "cmdecho" cmd)
(setq *error* tbn:olderr)
(*pop-error-mode*)
(princ))
(defun c:teste (/ ss a b)
(tbn:error-init '(("cmdecho" 0 "osmode" 0) nil))
(setq a (getpoint)
b (getpoint a)
)
(command "line" a b "")
(setq a (getpoint)
b (getpoint a)
)
(command "line" a b "")
(/ 1 0)
(setq a (getpoint)
b (getpoint a)
)
(command "line" a b "")
(setq ss (ssget))
(alert (itoa (sslength ss)))
(tbn:error-restore)
)