In simplest terms, something like this [untested]:
(defun C:BAP (/ ss n); = Blocks At Points
(prompt "\nTo place YourBlockName Block(s) at selected Point object(s),")
(if (setq ss (ssget '((0 . "POINT")))); will supply its own Select objects prompt
(repeat (setq n (sslength ss)); then
(command
"_.insert" "YourBlockName"
"_none" (cdr (assoc 10 (entget (ssname ss (setq n (1- n))))))
"" "" ""
); command
); repeat
(prompt "\nNo Point(s) selected."); else
); if
(princ)
); defun
That's at default scale factors of 1 for a Block not defined to be only uniformly scaled, rotation of 0, assuming a Block without Attributes. Lots of enhancements are possible [Layer control, Undo begin/end wrapping, command-echo suppression, error handling to reset those in case something goes wrong, scale factors calculated from drawing scale, notification to the User of how many were Inserted, remembering the Block name and offering it as a default in later use, etc., etc.].
Kent Cooper, AIA