Actually, Keith, after I posted that I decided that it would be best to entmake the line, removing the need to store, change, reset the osnaps. So here's my revised code:
(defun c:perp2ln (/ ANG INTPT LINE PT1 PT2 PT3 PT4)
(and (setq line (entsel "\nSelect line: "))
(setq line (entget (car line)))
(setq pt1 (cdr (assoc 10 line))
pt2 (cdr (assoc 11 line))
)
(setq pt3 (getpoint "\nSelect point to draw perpendicular from: "))
(setq ang (angle pt1 pt2))
(setq pt4 (polar pt3 (+ ang (/ pi 2)) 1))
(setq intPt (inters pt1 pt2 pt3 pt4 nil))
(entmake (list '(0 . "LINE")
(cons 10 pt3)
(cons 11 intPt)
)
)
)
(princ)
)
Jeff