Общие сведения о среде HomeLisp

Для начала работы запустите модуль HomelispIde.exe. После запуска произойдет автоматическая загрузка библиотеки дополнительных функций из модуля, заданного в файле конфигурации после чего пользователь увидит главное окно программы:



Интерфейс программы достаточно прозрачен. Имеется стандартное меню и тулбар. Можно пользоваться тем и другим по желанию пользователя - все функции тулбара продублированы в главном меню. Часть функций дополнительно реализована в контекстном меню (о чем будет сказано ниже).

Размеры главной формы можно менять в разумных пределах (в т.ч. и распахивать на весь экран). Уменьшать ширину главной формы можно только до тех пор, пока все элементы меню отображаются в одной строке.

Основную часть главной формы занимают две области: область ввода внизу и область ответа вверху. Между областями ввода и ответа располагается разделительная линия. Эту линию можно перемещать по вертикали мышью (при нажатой левой клавише). Это дает возможность менять по желанию относительные размеры областей ввода и ответа.

В нижней части формы располагается статус-бар с шестью панелями. В первой панели отобразается текущее количество занятых ячеек списочной памяти. Во второй - текущее количество атомов (длина списка объектов). В третьей панели отображается текущее число переменных (атомов, которым присвоены значения конструкцией SET/SETQ). Четвертая панель показывает суммарное время выполнения последней команды (в сек.). Во время выполнения команд загрузки из файлов в этой панели располагается прогресс-бар. В пятой панели размещается индикатор контроля скобочной структуры вводимых S-выражений. В последней, шестой панели отображаются индикаторы управления статистикой, эхо и дампом.


Назначение командных кнопок тулбара:


1.

Открыть и загрузить файл.При нажатии на эту кнопку появляется стандартный диалог выбора файла с расширением ".lsp". Если пользователь нажимает кнопку "принять" - файл загружается (т.е. последовательно исполняются все S-выражения, содержащиеся в файле). При этом, если в файле содержится определяющее выражение уже заданной ранее функции, то оно заменяет старое определение. То же относится и к значениям переменных: если атом A имел значение 12, а в файле содержится команда (SETQ A 20), то после загрузки файла атом A будет иметь значение 20. Если загрузка завершена без ошибок, то в область ввода выдается итоговое сообщение об успешной загрузке. Эту команду можно выполнить, вызвав встроенную функцию HLisp-а: (RDS ["имя-файла"]). Если имя файла опущено - будет вызвано окно диалога.


2.

Сохранить состояние в файле. При нажатии на эту кнопку появится окно стандартного диалога "сохранить как". Пользователь задает имя файла, в который будут сохранены определяющие выражения всех функций, а также значения всех переменных (из ассоциативного списка).Эту команду можно выполнить, вызвав встроенную функцию HLisp-а: (WRS ["имя-файла"]). Если имя файла опущено - будет вызвано окно диалога.


3.

Вызвать автономный редактор. Позволяет готовить исходные тексты в текстовом редакторе. HomeLisp имеет в своем составе встроенный редактор, а также позволяет пользователю вызвать любой внешний редактор (путь ко внешнему редактору можно задать в режиме конфигурации).


4.

Вызвать редактор диалогов. Режим позволяет вызвать встроенный дизайнер экранных форм.


5.

Очистить область ввода. Позволяет очистить область ввода (ниже разделительной линии). Следует отметить, что при вводе S-выражения область ввода очищается автоматически.


6.

Очистить область вывода. Позволяет очистить область вывода (выше разделительной линии). В процессе работы с системой область вывода скроллируется. Размер сохраняемой части (в Кб) задается в ini-файле. Значение по умолчанию - 10Кб. Для очистки области вывода можно использовать контекстное меню (см. ниже), а также встроенную функцию (CLS).


7.

Включить/выключить ведение журнала. При включенном режиме все введенные команды выводятся в журнал. Журнал представляет собой текстовый файл в текущей директории, имеющий имя HomeLisp.log. Кроме самой команды в журнале фиксируется дата и время ввода. Журнал удобно использовать для разбора аварийных или спорных ситуаций. По умолчанию ведение журнала при запуске включается автоматически. Кнопка позволяет отключить ведение журнала. Программа может быть настроена таким образом, чтобы при запуске ведение журнала было выключено (см. режим "Конфигурация")


8.

Включить/выключить режим эха. При включенном режиме эха вводимые S-выражения дублируются в области вывода, после чего вычисляются. Результат вычислений выводится после строки ===>. По умолчанию режим эха включен. При нажатии этой кнопки режим эха выключается. Последующее нажатие вновь включает эхо. Статус эха отображается в шестой панели статус-бара (Эхо=Вкл/Выкл). Включение и выключение режима может осуществляется встроенной функцией (ECHO [выражение]). Если результат вычисления выражения равен Nil, режим эха выключается. Если же результат вычисления выражения не равен Nil, режим эха включается.


9.

Включить/выключить режим статистики. При включенном режиме статистики после вычисления S-выражения в область вывода выводится статистика вызовов функций Лиспа. По умолчанию режим статистики включен. При нажатии этой кнопки режим статистики выключается. Последующее нажатие вновь включает статистику. Статус режима отображается в шестой панели статус-бара (Стат=Вкл/Выкл). Включить статистику можно, введя S-выражение (STAT); выключается статистика вводом S-выражения (UNSTAT).


10.

Включить/выключить формирование дампа. При включенном режиме дампа во внешний файл выводится подробная информация, характеризующая процесс вычисления S-выражения "изнутри". Этот режим может помочь при отладке, но сильно замедляет процесс вычисления. По умолчанию режим выключен. При нажатии кнопки выводится диалог выбора файла для дампа (расширение ".dmp"). Если пользователь отказывается от выбора - режим не включается. Если же файл выбран, то информация о вычислении каждого S-выражения будет дописываться в конец файла. Статус режима отображается в шестой панели статус-бара (Дамп=Вкл/Выкл). Если дамп включен, то в статус-баре отображается имя файла. Как и для режима статистики, существует пара встроенных функций, позволяющая управлять режимом дампирования из программного кода: (DUMP ["имя_файла"]) - включить и (UNDUMP) - выключить дампирование соответственно.


11.

Вставка стандартного шаблона. Для облегчения работы начинающих изучать Lisp, поддерживается возможность вставки в текущее положение области ввода шаблонов стандартных конструкций. В поставку включены следующие шаблоны: COND, LAMBDA, DEFUN, SEXPR, SFEXPR, SMACRO, PROG. Шаблоны как текстовые файлы с расширением .patt хранятся в поддиректории \Patt. При необходимости пользователь может поместить в эту директорию и другие шаблоны. При нажатии на кнопку появится окно выбора шаблона. Пользователь должен выбрать нужный шаблон и нажать кнопку "Принять". Этот режим ниже будет описан более подробно.


12.

Показать/скрыть список объектов. Однократное нажатие на эту кнопку покажет пользователю список всех атомов (список объектов). У каждого атома кроме наименования показываются стандартные индикаторы (APVAL, FIXED, FLOAT, BITS, EXPR, FEXPR, SUBR, FSUBR, MACRO), а также весь список дополнительных свойств. Для атомов типа EXPR, FEXPR, MACRO можно увидеть определяющее выражение. Все, что показывается пользователю, может быть также получено с помощью встроенных и дополнительных функций. Обращаем внимание, что значения атомов в списке объектов не содержатся. Для их просмотра служит режим "показать/скрыть ассоциативный список". Повторное нажатие на кнопку убирает список объектов с главной формы.


13.

Показать/скрыть ассоциативный список. Однократное нажатие на эту кнопку покажет пользователю список всех атомов, имеющих значения. Значение атома можно увидеть, просто введя S-выражение, состоящее из имени атома. Повторное нажатие на кнопку убирает ассоциативный список с главной формы.


14.

Просмотр дампов. Этот режим позволяет просматривать дампы без выхода из среды разработки. Будет отображено диалоговое окно, и пользователь должен будет выбрать имя файла для просмотра.


15.

Менеджер графических окон. Нажатие этой кнопки вызывает менеджер графических окон. Кнопка активна только в случае, если в сеансе создано хотя бы одно графическое окно. Менеджер окон позволяет скрывать, отображать и уничтожать графические окна, созданные вызовом функции grwCreate.


16.

Уборка мусора. Нажатие этой кнопки запускает подпрограмму сборки мусора. В данной версии убирается мусор в списке объектов и в области списочных ячеек. Особенность реализации интерпретатора такова, что в области списочных ячеек мусор образуется чрезвычайно редко (разве что при работе с циклическими структурами; для линейных структур ненужные далее списочные ячейки утилизируются автоматически). Нажатие кнопки "Убрать мусор" полностью эквивалентно вызову встроенной функции (GC). В область ответа выводится итоговое сообщение "Утилизировано столько-то списочных ячеек и столько-то атомов".


17.

Прервать выполнение. Эта кнопка бывает активной только в процессе выполнения введенной команды. Нажатие этой кнопки вызывает прерывание выполнения введенной команды и немедленное завершение. В качестве результата возвращается предопределенный атом brkState.


18.

Построить exe-файл. Система позволяет строить т.н. псевдо-exe-файлы: к объектному коду ядра Лиспа добавляется исходный код всех необходимых функций (а также константы). Эта информация сохраняется на диске с заданным пользователем именем и расширением "exe". При запуске этого файла на выполнение, сначала разворачивается ядро Лиспа, а затем загружается вся сохраненная информация и вызывается стартовое S-выражение (оно задается пользователем при создании exe-файла). После чего программа на Лиспе выполняется обычным образом. Описываемая кнопка будет активной только в случае, когда в текущей директории HomeLisp находится файл-заготовка HomeLisp.stb.


19.

Конфигурация. Нажатие этой кнопки вызывает форму конфигурации. Пользователь может задать некоторые числовые параметры распределения памяти, а также указать путь к файлу автозагружаемой библиотеки стандартных функций. Вся информация, введенная пользователем, сохраняется в ini-файле Homelisp.ini. Старое содержимое файла сохраняется в файле Homelisp.bak.


20.

Помощь. Это то, что вы сейчас читаете.


21.

О программе и авторе. Будет показана форма, на которой представлен номер версии программы (впрочем, он продублирован в заголовке главной формы), а также даны ссылки на сайт разработчика и его почтовый адрес.


22.

Выход. Нажатие на эту кнопку завершает работу. Завершиться можно также, введя команду (EXIT ["Прощальное сообщение"]). Если прощальное сообщение задано, оно будет выведено перед окончательным завершением.



Контекстное меню


Для управления некоторыми параметрами областей ввода и вывода служит контекстное меню, вызываемое по правому щелчку мыши, выполняемому в одной из областей. Контекстное меню имеет вид:

Как можно видеть из рисунка, контекстное меню включает четыре группы команд:

В первую группу входят команды, выполняемые с содержимым буфера обмена. Эти команды активны, если буфер обмена содержит данные (Вставить) или в области ввода или вывода имеется выделенный текст. Следует отметить, что даже если буфер обмена содержит текст, команда Вставить никогда не будет активной для области вывода - в области вывода вставка невозможна.

Следующая группа команд позволяет очистить области ввода/вывода, а также буфер обмена.

Третья группа команд позволяет задать цвет фона, цвет текста и шрифт для той области, на которой контекстное меню активизировано. Рекомендуется использовать моноширинные шрифты (Courier, FixedSys).

Последняя команда позволяет включить/выключить горизонтальную линейку. При выключенной линейке длинные строки разрезаются в соответствии с шириной области ввода/вывода. При включенной линейке этого не происходит, но появляется возможность горизонтального скроллирования экрана.