Changing units i for going to a site plan and back is too much work.
Here is something i developed back in release 12 see if it wroks for you.
(DEFUN C:LBA ()(GTVRS)(SETQ GNA 3.1459)(prompt "\nLine by direction")
(while (setq pt1 (GETPOINT "Starting poinC: "))
(setq pt2 pt1 dist1 0.0)(setvar "osmode" 0)
(while (/= GNA NIL)(SVRANG)
(setq dist (Getdist "Distance: ")
dist1 (+ dist1 dist)
pt3 (polar pt2 GNA dist)
pt3 (list (car pt3) (cadr pt3)))(command "_.line" pt2 PT3 "")
(setq pt2 pt3))(command "")
(if (not (zerop dist1))(print "\nPerimeter = %s" (rtos dist1 2))))
(stvrS)(setq pt1 nil pt2 nil pt3 nil ang nil dist nil dist1 nil)(princ))
(DEFUN CALC ()
(SETQ ANG (+ DG (/ (+ MN (/ SC 60)) 60)))
(COND ((= DR "N")
(IF (= RD "E") (SETQ GNL (- 90 ANG)))
(IF (= RD "W") (SETQ GNL (+ 90 ANG))))
((= DR "S")
(IF (= RD "E") (SETQ GNL (+ 270 ANG)))
(IF (= RD "W") (SETQ GNL (- 270 ANG)))))
(PROMPT (STRCAT "\n\nIs this OK: " (RTOS ANG 2 8)))
(SETQ GNA (DTR GNL)))
(DEFUN SVRANG ()
(COMMAND "AUPREC" "8" "AUNITS" "0")(INITGET "North South")
(SETQ DR (GETKWORD "\nNorth/South/<North> : ")
DG (GETREAL " Degrees : ") MN (GETREAL " Minutes : ")
SC (GETREAL " Seconds : ")); ( DS (GETREAL "\nDistance : "))
(INITGET "East West")(SETQ RD (GETKWORD "\nEast/West/<West> : "))
(IF (= "South" DR)(SETQ DR "S")(SETQ DR "N"))
(IF (= "East" RD)(SETQ RD "E")(SETQ RD "W"))(CALC))
(defun dtr (a) (* pi (/ a 180.0)))(DEFUN RTD (a) (* 180.0 (/ A PI)))
Hope this helps...
Matthew