Для установки значений переменной MODEMACRO может также быть использован AutoLISP.
load.
Приведенные здесь образцы процедур можно скопировать в файл формата ASCII, который должен загружаться функцией AutoLISPstrcat.
В следующей команде, написанной на AutoLISP, определяется выражение для MODEMACRO, которое несет в себе ту же информацию, что и стандартная строка состояния. Так как в AutoLISP нет возможности переносить строки, для объединения отдельных выражений в одну строку MODEMACRO используется функция AutoLISP(defun C:ACADMODE ( )
(setvar "modemacro"
(strcat
"Слой $(substr,$(getvar,clayer),1,8)"
"$(if,$(getvar,orthomode), Орто)"
"$(if,$(getvar,snapmode), Шаг)"
"$(if,$(getvar,tabmode), Планшет)"
"$(if,$(=,$(getvar,tilemode),0),"
"$(if,$(=,$(getvar,cvport),1), P)"
")"
)
)
)
Эту AutoLISP-процедуру можно записать в файл с именем acadmode.lsp. При его загрузке будет создаваться строка состояния, являющаяся аналогом стандартной строки. Данный пример не является особо полезным применением возможностей MODEMACRO; он включен в руководство лишь в иллюстративных целях.
S::STARTUP для присвоения переменной MODEMACRO значения, определяемого в файле mode1.lsp.
В следующем образце файла acad.lsp используется функция;;; Образец файла acad.lsp, использующий S::STARTUP для загрузки
;;; файла MODE1.LSP, где определяется строка для MODEMACRO
(defun S::STARTUP ( )
(load "mode1")
(princ)
)
;;; Далее могут определяться и загружаться другие ;;; AutoLISP-файлы
;;; загружены здесь
Если загружен файл AutoLISP (mode1.lsp), системная переменная MODEMACRO используется для определения содержимого строки состояния, в которой отображается приведенная далее последовательность. L: первые восемь символов имени слоя, имя чертежа и часть пути, а также первая буква имени каждого текущего режима. Независимо от длины имени слоя, положение имени чертежа остается неизменным.
;;; MODE1.LSP
;;;
(setvar "modemacro"
(strcat
"L:$(substr,$(getvar,clayer),1,30)"
"$(substr, ,1,$(-,30,$(strlen,$(getvar,clayer)))) "
;; ^^^^^^^^ Здесь записано 8 пробелов
"<.."
"$(if,$(eq,$(getvar,dwgname),UNNAMED),UNNAMED,"
"$(substr,$(getvar,dwgname),"
"$(if,$(>,$(strlen,$(getvar,dwgprefix)),29),"
"$(-,$(strlen,$(getvar,dwgprefix)),29),1"
"),"
"$(strlen,$(getvar,dwgname))"
")"
")"
">"
"$(if,$(getvar,orthomode), O, )"
"$(if,$(getvar,snapmode), S, )"
"$(if,$(getvar,tabmode), T, )"
"$(if,$(and,"
"$(=,$(getvar,tilemode),0),$(=,$(getvar,cvport),1)),P)"
)
)
Запись выражений с отступами от начала строки улучшает понимание текста программы (в частности, DIESEL-строк и файлов AutoLISP).