Wouldn't (initget 0) be just as effective before (getpoint ...) and simpler than writing out a (while (not...)) function? Not to take from your lesson 7, but just something to think about. As long as I'm in this subject: Ron, think about this, lisp will process many things behind the scenes. (setq's ...) can all be lumped together under one setq, as long as it isn't needed after another function or subroutine, i.e.
(setq cmd (getvar "cmdecho")
att (getvar 'attdia)
clay (getvar 'clayer)
)
(setvar "cmdecho" 0)
(setvar "attdia" 0)
Then, consider using
(initget 7) ;check the values in the help for your preference
(setq bsscale (getreal "\nEnter Scale: "))
(initget 1) ;same as above applies here. Edited here. Thinkin bit.
(setq inpt (getpoint "\nPick barscale location: "))
At this point you could create your layer and group both commands into one. It all depends on personal preference, though.
(command ".-layer" "m" "M-SHEET" ""
".-insert" "R:\\AEITITLE\\Barscale.dwg"
inpt
"1"
"1"
"0"
(strcat (rtos bsscale 2 0) "'")
(strcat (rtos (* bsscale 0) 2 0) "'")
(strcat (rtos (/ bsscale 2) 2 0) "'")
(strcat (rtos bsscale 2 0) "'")
(strcat (rtos (* bsscale 2) 2 0) "'")
)
(setvar 'cmdecho cmd)
(setvar "attdia" att)
(setvar "clayer" clay)
(princ)
You'll notice that you can't lump setvar like you can command and setq. You'll also notice that in getvar and setvar you can call the variable in double quotes or preceded by a single quote. Last, take a look at leaving out an option that'll wait for user input and see what happens to the resetting of your variables.