@ Lee:
A question about your (LM:endundo) function. Why do you use (while ...)? It is not possible to have nested undo groups. Well, at least it is not possible in BricsCAD.
I saw no reason to make the assumption that nested undo groups were not possible on every CAD platform offering LISP support, and if undo groups are indeed not supported on a particular CAD platform, the use of
while over
if will only result in the test expression being evaluated one additional time (hardly a performance hit).