When writing a routine that I think might be useful to be called from another routine, but also one that I want to use as a command unto itself, I usually write it WITHOUT the c: (what I refer to as a performing function) and then write a function that gathers the user input and then passes it to the other function (aka a gathering function). For example:
;;This is how a routine might normally be written as a command.
;;
(defun c:mycommand ( / ents var1 var2)
(setq ents(ssget))
(setq var1 (getpoint "Point1: "))
(setq var2 (getpoint "Point2: "))
(command "move" ents "" var1 var2)
)
;;now if I want to make it so that a different routine can gather the user input
;;(and probably do other things too) then perform the tasks, I would break it
;;into a performing function and a gathering function.
;;this is the gathering function.
(defun c:mycommand( / ents var1 var2)
(setq ents(ssget))
(setq var1 (getpoint "Point1: "))
(setq var2 (getpoint "Point2: "))
(mycommand ents var1 var2) ;; <--it might look like it's calling itself.
;; But it's calling the performing function
)
;;this is the performing function
(defun mycommand (ents var1 var2)
(command "Move" ents "" var1 var2)
)
This is just one example as to why both styles are useful.
Don Ireland
Engineering Design Technician

If a reply solves your issue, please remember to click on "Accept as Solution". This will help other users looking to solve a similar issue. Thank you.
Please do not send a PM asking for assistance. That's what the forums are for. This allows everyone to benefit from the question asked and the answers given.