After reading the entire thread, here is my version.
(defun getEntity (msg enttype / picked ent1 ent2 return)
(setvar "ErrNo" 0) ; reset variable
(while
(not
(cond
((and (null (setq picked (nentsel msg)))
(/= 52 (getvar "ErrNo")) ; <Enter> was not hit
)
(prompt "\nMissed, Try Again.")
)
((null picked) t) ; exit loop
((progn
(setq ent1 (car picked))
(if (> (length picked) 2)
(setq ent2 (caar (reverse picked)))
(setq ent2 nil)
)
(cond
((null enttype)
(setq return (if ent2 ent2 ent1))
)
((and ent2 (= (strcase enttype)(cdr (assoc 0 (entget ent2)))))
(setq return ent2)
)
((= (strcase enttype) (cdr (assoc 0 (entget ent1))))
(setq return ent1)
)
(t (prompt "\nWrong entity type, Try Again."))
)
)
)
)
)
)
return
)
(defun c:test ()
(getEntity "\nSelect a circle object." "CIRCLE")
)