How about some error checking.
If you abort or fail to pick it will quit and remove the circle.
You may need to tweak to suite you specific needs but it is a start.
(defun c:cir (/ *error* osmd rw bldg pad padendp dist)
;; error function & Routine Exit
(defun *error* (msg)
(if
(not
(member
msg
'("console break" "Function cancelled" "quit / exit abort" "")
)
)
(princ (strcat "\nError: " msg))
) ; endif
;;reset all variables here
(if cir (entdel cir))
(setq cir nil)
(setvar "osmode" osmd)
)
(setq osmd (getvar "osmode"))
(setvar "cmdecho" 0)
(setvar "osmode" 4)
(if
(and
(setq rw (getpoint "\nSnap to Center of R/W Arc: "))
(setvar "osmode" 1)
(setq bldg (getpoint "\nSelect Endpoint of Bldg. Front: "))
(setq dist (distance rw bldg))
(setvar "osmode" 0)
(not (command "circle" rw dist))
(setq cir (entlast))
(setvar "osmode" 1)
(setq pad (entsel "\nSelect Bldg. Pad: "))
(setq
padendp (getpoint (cadr pad) "\nSelect Pad Endpoint Near Lot Line: ")
)
(setvar "osmode" 32)
(not (command "rotate" pad "" rw "r" rw padendp pause))
)
(prompt "\n*** Command complete ***")
(progn
(prompt "\n*** Command Aborted ***")
(if cir (entdel cir))
)
)
(*error* "")
(princ)
)
(prompt "\nCircle Loaded, Enter Cir to run.")
(princ)