Смекни!
smekni.com

АвтоЛИСП - реализация языка программирования (стр. 9 из 10)

\r для return возврат,ввод

\t для tab табуляция

\nnn для символов,чей восьмиричный код nnn

Таким образом:

(prin1 (chr 2)) печатает "\002" и вводит "\002"

(prin1 (chr 10)) печатает "\n" и вводит "\n"

4.89.(princ <expr>[<file-desc>])

Эта функция такая же, как PRIN1, кроме того, что контрольные символы в <expr> печатаются без расширения. В общем, PRIN1 разработан для написания выражений в таком виде, чтобы они были совместимы с функцией LOAD , в то время как PRINC будет печатать их в пригодном для чтения функцией READ-LINE виде.

4.90. (print <expr>[<file-desc>])

Эта функция такая же, как PRIN1, кроме того, что новые линии печатаются перед <expr>, а в промежутке печатается следующее выражение.

4.91. (progn <expr>...)

Эта функция последовательно вычисляет каждое <выражение> и вводит значение последнего выражения. Вы можете применять PROGN для вычисления нескольких выражений, где предусматривается только одно выражение. Например:

(if (=a b) (progn

(setq a (+a 10)

(setq b (-b 10)

)

Функция IF нормально вычисляет одно выражение "then", если тестовое выражение вычисляется к чему-либо отличному от нуля. В этом примере мы применяли PROGN для вычисления двух выражений вместо первоначального.

4.92.(prompt <msg>)

Эта функция высвечивает на экране в зоне подсказок <msg>/сообщение и вводит ноль. <msg> - строка. В двухэкранной конфигурации АвтоКАДа, функция PROMPT высвечивает <msg> на обоих экранах и поэтому предпочтительна для PRINC. Например:

(prompt "New value:")

на экранах появится "New value:" и вводится ноль.

4.93.(quote <expr>)

Вводит невычисляемое <выражение>. Она также может быть записана следующим образом:

'expr

Например:

(quote a) вводит A

(quote cat) вводит CAT

(quote (a b)) вводит (A B)

'a вводит A

'cat вводит CAT

'(a b) вводит (A B)

4.94. (read <string>)

Эта функция вводит первый перечень или атом, полученные из <строки>. <строка> не должна содержать пробелов. Например:

(read "hello") вводит HELLO

(read "hi") вводит HI

(read "(a)") вводит (A)

4.95.(read-char [<file-desc>])

Эта функция читает единичный символ из буфера ввода клавиатуры или из открытого файла, описанного в <file-desc>. Она вводит (целое число) ASCII код, представляющий возможность прочесть символ.

Если <file-desc> не определен, а в буфере ввода клавиатуры нет символов, READ-CHAR ждет, пока вы что-либо напечатаете с клавиатуры (сопроводжая запись клавишей RETURN !). Например, предположим, что буфер ввода клавиатуры пуст:

(read-char)

будет ждать, чтобы что-то было введено. Если вы напечатаете "A B C", а затем нажмете RETURN, READ-CHAR введет 65 (код ASCII для буквы "A"). На следующие вызовы READ-CHAR введет 66, 67 и 10 (новая линия) соответственно. Если затем будут произведены следующие вызовы READ-CHAR, она опять будет ждать ввод.

4.96. (read-line [<file-desc>])

Эта функция читает строку с клавиатуры или из открытого файла, описанного в <file-desc>. Если конец файла не вычисляется, READ-LINE вводит ноль, в противном случае она вводит строку, которая была прочитана. Предположим, что F - действительный поинтер открытого файла:

(read-line f)

введет следующую входную линию из файла, или ноль, если был достигнут конец файла.

4.97 (redraw [<ename>[<mode>]])

Эффект функции зависит от количества заданных параметров. Если вызов без параметров,

(redraw)

он перерисует весь чертеж, как команда АвтоКАДа REDRAW. Если вызов с параметром имени объекта,

(redraw <ename>)

перечерчен будет выбранный объект. Это полезно при определении объекта на экране после применения GRCLEAR для очистки экрана.

Завершение контроля над перечерчиванием объекта осуществляется вызовом REDRAW с двумя параметрами:

(<ename><mode>)

где <ename> - имя объекта, который будет перечерчен, а <mode> - целое число с одним из следующих значений:

Redraw Mode

Action/действие

1

Перечертить объект на экране

2

Уничтожить объект (внести пробелы)

3

Высвечивание объекта (если позволяет дисплей)

4

Отмена высвечивания объекта (если позволяет дисплей)

Если <ename> - заголовок или комплексный объект (Полилиния или Блок с дополнениями), главный объект и все его подобъекты будут отрабатываться, если параметр <mode> положительный. Если параметр <mode> отрицательный, управляемый функцией REDRAW будет только один заголовок. Если ошибок нет, REDRAW всегда вводит ноль.

4.98.(rem <num1><num2>...)

Эта функция делит <num1> на <num2> и вводит остаток (<num1> вычисляет остаток <num2>). <num1> mod <num2> mod - модуль операция вычисления остатка.

REM может применяться с действительными и целыми числами со стандартными правилами перевода. Например:

(rem 42 12) вводит 6

(rem 12.0 16) вводит 12.000000

(rem 60 3) вводит 0

4.99.(repeat <number><expr>...)

В этой функции <число> представляет любое из положительных целых чисел. Функция вычисляет каждое <expr> <number> количество раз и вводит значение последнего выражения. Например, заданы назначения:

(setq a 10)

(setq b 100)

тогда:

(repeat 4

(setq a(+ a 10)))

(setq b(+ b 10)))

) вводит 140

4.100.(reverse <list>)

Эта функция вводит <список> с зарезервированными элементами. Например:

(reverse '((a)b c)) вводит (C B (A))

4.101. (rtos <number>[<precision>])

Эта функция вводит строку, которая является представлением <числа> (действительного) согласно с установками <mode>/ режим и <precision>/точность и переменной, задающей размеры АвтоКАДа DIMZIN. <режим> и <точность> - целые числа, которые выбирают линейные элементы режима и точности. Ниже перечислены обеспеченные значения <режима>:

RTOS Режим

Редактируемый формат

1

Научный

2

Десятичный

3

Прикладной (футы и десятичные дюймы)

4

Архитектурный (футы и дробные дюймы)

5

Производные дробные элементы

Параметры <mode> и <precision> соответствуют системе переменных LUNITS и LUPREC АвтоКАДа. Если вы пропускаете параметры, будут применяться текущие установки LUPREC и LUNITS. Примеры RTOS:

(rtos 17.5 1 4) вводит "1.7500E+01"

(rtos 17.5 2 2) вводит "17.50"

(rtos 17.5 3 2) вводит "1'-5.50""

(rtos 17.5 4 2) вводит "1'-5 1/2""

(rtos 17.5 5 2) вводит "17 1/2"

Глава 5. Разработка интерфейсов пользователя

5.1. Меню пользователя

Меню пользователя служит для расширения и дополнения существующего и разработки собственного меню. Меню пользователя задается в файле меню.Файлы меню представляют собой текстовые файлы.

Исходные файлы меню имеют расширение .mnu. Компилированные файлы имеют расширение .mnx. LISP-файлы меню имеют расширение .mnl. Эти файлы автоматически загружаются в память при загрузке файла меню с таким же именем и содержат LISP-выражения, которые могут использоваться файлом меню. Файлы определения меню имеют расширение .mnd. Они являются специальными исходными файлами, содержащими макросы. Файлы этого типа компилируются с помощью программы mc, которая размещена в каталоге SAMPLE.

Файл .mnu компилируется, и создается файл с расширением .mnx, который имеет компактный внутренний формат, позволяет значительно быстрее осуществлять загрузку меню. При создании нового рисунка файл меню с именем, указанным в рисунке-прототипе, загружается автоматически. АвтоКАД предоставляет возможность заменить это меню на новое. Для компиляции и загрузки меню используется команда menu (меню). При этом АвтоКАД записывает в файл рисунка имя последнего использовавшегося с ним меню; при последующем редактировании этого рисунка меню загружается автоматически. Команда menu загружает файл меню с диска:

Command: MENU

Для задания имени файла на экран выводится стандартное диалоговое окно файлов с заголовком «Выбор файла меню». АвтоКАД ищет файл с расширением .mnu, если он найден, то ищет файл с расширением .mnx, и если MNX-файл имеет те же дату и время создания, что и MNU-файл, он загружается АвтоКАДом. Иначе компилируется MNU-файл и загружается MNX-файл. Если MNU-файл не найден, АвтоКАД ищет MNX-файл. Если MNX-файл найден, АвтоКАД его загружает, иначе высвечивается сообщение об ошибке и запрос на ввод другого файла меню.

Если отключена системная переменная FILEDIA, можно воспользоваться командной строкой для загрузки меню:

Command: MENU : (Команда: МЕНЮ)

Menu file name or . for none <current>: : (Имя файла меню или . если оно не нужно <текущее имя>:

Имя файла задается без расширения.

Иногда имеет смысл полностью убрать меню, например, для очистки зоны экранного меню. Для этого необходимо ввести «.» в ответ на запрос команды MENU.

5.2. Структура файла меню

Файл меню можно логически разбить на разделы, каждый из которых относится к некоторому устройству, поддерживающему работу с меню, и содержит командные строки, предназначенные для этого устройства. Разделы идентифицируются с помощью меток разделов:

***SCREEN - экранное меню;

***BUTTONSn - кнопочное меню устройства указания, где n - число от 1 до 4;

***AUXn - дополнительное кнопочное меню, где n - число от 1 до 4;

***POPn - падающие и курсорные меню, где n - число от 1 до 16;

***ICON - графическое меню;

***TABLETn - область меню планшета, где n - число от 1 до 4.