OK here's more than a snippet

Try pasting the following lisp code into a file, save and load. Tested briefly on text entities. Starts with "txtsnap".
==========================================
(defun c:txtsnap ()
(command "undo" "be")
(setq SnapStart (getvar "SNAPBASE"))
(setq Xstart (car SnapStart)
YStart (cadr SnapStart)
)
(setq xsnap (getreal "\nEnter x snap spacing: "))
(setq ysnap (getreal "\nEnter y snap spacing: "))
(setq txtset (ssget '((0 . "*TEXT"))))
(setq LenSet (sslength txtSet))
(setq Ecount 0)
(repeat LenSet
(setq Ename (ssname txtset Ecount))
(setq Edata (entget Ename))
(setq InsPt (cdr (assoc 10 Edata)))
(setq Xins (car InsPt)
Yins (cadr InsPt)
)
(setq Xround (roundsnap Xins xsnap xstart)
YRound (roundsnap Yins ysnap ystart)
PtRound (list Xround YRound)
)
(setq NewInsData (cons 10 PtRound))
(setq newdata (subst NewInsdata (assoc 10 Edata) Edata))
(entmod Newdata)
(setq ECount (1+ Ecount))
)
(command "undo" "e")
(princ)
)
;;--------------------------------
(defun roundsnap (val incr base)
(setq Snapdist (- val base))
(setq NewNum (/ Snapdist incr))
(setq NumSteps (atoi (rtos NewNum 2 0)))
(setq Rounded (* NumSteps incr))
(setq NewCoord (+ base rounded))
)