i know keith had a big part in this one, but here it is anyway:
(defun line_info(/ bear bldg_direction bldg_dist)
(princ "\n 7 8 9")
(princ "\n (45°NW) (UP) (45°NE)")
(princ "\n 4 6")
(princ "\n (LEFT) (RIGHT)")
(princ "\n 1 2 3")
(princ "\n (45°SW) (DOWN) (45°SE)")
(initget "1 2 3 4 6 7 8 9 Quit")
(setq bldg_direction (getkword "\nDirection (8=Up, 6=Right, 2=Down, 4=Left), <Quit>: "))
(cond
((= bldg_direction "Quit")(setq bldg_direction nil))
((= bldg_direction "")(setq bldg_direction nil))
((= bldg_direction "6")(setq bldg_direction "0"))
((= bldg_direction "9")(setq bldg_direction "45"))
((= bldg_direction "8")(setq bldg_direction "90"))
((= bldg_direction "7")(setq bldg_direction "135"))
((= bldg_direction "4")(setq bldg_direction "180"))
((= bldg_direction "1")(setq bldg_direction "225"))
((= bldg_direction "2")(setq bldg_direction "270"))
((= bldg_direction "3")(setq bldg_direction "315"))
)
(if (/= bldg_direction nil)
(progn
(setq bldg_dist (getdist "\nLengh of wall: "))
(setq bear (strcat "@" (rtos bldg_dist) "<" bldg_direction))
)
(setq bear nil)
)
)
(defun c:bldg-draw( / begin_point bear)
(setq begin_point (getpoint "\nBeginning point for building: "))
(setq bear (line_info))
(command "line" begin_point bear)
(while (setq bear (line_info))
(command bear)
)
(command)
(princ)
);defun