Found some time have a look at this, the two multi lisps are library routines rather tahn command line input use dynamic dcl's.
Code:
; perp line on end of a line
; By Alan H March 2019
(defun lperp ( / dist pt1 pt2 ans ang oldsnap)
;(setq dist 5); remove line to use input
(if (not AH:getvalsm)(load "Multi Getvals.lsp"))
(setq dist (atof (nth 0 (AH:getvalsm (list "Length input" "Enter length" 10 9 "5")))))
(setq oldsnap (getvar 'osmode))
(setq pt1 (getpoint "pick pt1"))
(setq pt2 (getpoint pt1 "pick pt2"))
(setq ang (+ (/ pi 2.0)(angle pt1 pt2)))
(setvar 'osmode 0)
(command "line" pt1 pt2 "")
(if (not AH:Butts)(load "Multi radio buttons.lsp"))
(setq ans (ah:butts "V" '("Please choose" "Left" "Mid" "Right" )))
(cond
((= ans "Left")(command "line" pt2 (polar pt2 ang dist) ""))
((= ans "Right")(command "line" pt2 (polar pt2 (+ pi ang) dist) ""))
)
(if (= ans "Mid")(progn
(setq pt1 (polar pt2 ang (/ dist 2.0)))
(setq pt2 (polar pt1 (+ pi ang) dist))
(command "line" pt1 pt2 "")
)
)
(setvar 'osmode oldsnap)
)
(lperp)