Радио-86РК/Радио 03-90/Драйвер оконного интерфейса

Материал из Emuverse
Версия от 12:35, 3 декабря 2008; Panther (обсуждение | вклад) (http://retro.h1.ru/RK86/Windows/WinIntr.html)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

Автор: Г. ШТЕФАН

Источник: http://retro.h1.ru/RK86/Windows/WinIntr.html

При разработке интерактивных (диалоговых) программ для персональных ЭВМ программисту приходится большое внимание уделять форме и способам отображения вводимой и выводимой информации на экране дисплея, или, как это принято теперь называть, «экранному интерфейсу» с конечным пользователем. Организация такого интерфейса занимает иногда значительный объем готовой программы и требует от программиста дополнительных усилий.

Именно поэтому в программах, публикуемых на страницах журнала «Радио», распространен в основном командный режим или, в лучшем случае, диалог с пользователем в виде вопросов — ответов. Программные системы для профессиональных компьютеров часто просто поражают воображение разнообразием и сложностью экранного интерфейса. Современные персональные компьютеры имеют для этого богатые возможности, как правило, все они позволяют воспроизводить информацию в цветном графическом режиме. В качестве примера можно привести программу — калькулятор, которая изображает на экране дисплея стилизованный калькулятор в натуральную величину. Операнды арифметических операций, вводимые с клавиатуры, синхронно отображаются на иммитируемом индикаторе калькулятора, на который затем выводится и результат. И все это в цвете.

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

Хорошо освоенным и широко распространенным приемом стала организация на экране дисплея как — бы нескольких независимых экранов различного размера, каждый такой экран, ограниченный прямоугольной рамкой, принято называть окном. Окон на экране может быть несколько, и они могут перекрывать друг друга. Их размеры во многих системах можно оперативно уменьшать или увеличивать так, что одно окно может даже занять весь экран. В профессиональных ПЭВМ, оснащенных мощными операционными системами, разные окна могут принадлежать разным программам, а также самой операционной системе или же одна программа может организовать и поддерживать на экране несколько окон.

Хорошим примером многооконных систем являются многооконные текстовые редакторы. Они позволяют «открыть» на экране несколько окон, в каждое окно можно вывести различные фрагменты одного или нескольких текстовых файлов с возможностью их редактирования.

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

Драйвер оконного интерфейса, предлагаемый вниманию читателей в этой статье, достаточно прост, занимает немного места в ОЗУ, но тем не менее позволяет программистам разрабатывать свои программы на БЕЙСИКе или АССЕМБЛЕРе в более современном стиле.

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

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

ФУНКЦИОНИРОВАНИЕ ДРАЙВЕРА

С помощью описываемого драйвера в любой момент выполнения программы, при любом заполнении экрана можно организовать на нем одно или несколько окон — прямоугольных областей, ограниченных рамкой. Последнее открытое окно становится активным. Область экрана, скрытая открываемым окном, сохраняется в рабочей области драйвера, организованной по принципу стека. В стеке драйвера сохраняются также параметры всех ранее открытых окон. При удалении активного окна с экрана восстанавливаются содержимое экрана и параметры предпоследнего активного окна, если оно было. Для вывода символов и текста через активное окно имеются две подпрограммы, аналогичные точкам входа МОНИТОРа OF809H и OF818H. При выводе текста через подпрограммы драйвера перехватываются и обрабатываются специальным образом следующие управляющие символы:

0DH — возврат каретки,
0СH — курсор в левый верхний угол,
1FH — очистка экрана.

Они обрабатываются так, что действуют только в рамках активного окна. Все остальные символы, включая управляющие, обрабатываются МОНИТОРОМ стандартным образом и, естественно, могут привести к выходу за пределы окна. Забота о том, чтобы длина выводимых сообщений и их число не приводили при выводе к выходу за пределы окна, ложится на программиста, что вряд ли можно считать существенным ограничением. Обработка «эскейп» — последовательностей и функция скроллинга в драйвере отсутствуют. Эти ограничения введены в целях упрощения драйвера, однако желающие могут доработать драйвер и реализовать отсутствующие функции аналогично тому, как это сделано в МОНИТОРе.

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

Текст драйвера приведен в таблице, при разработке программы соблюдены принципы модульного и структурного программирования, поэтому текст программы, снабженный подробным комментарием, может служить пособием по программированию на Ассемблере [1], [2].

ОПИСАНИЕ ПОДПРОГРАММЫ ДРАЙВЕРА

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

В статье рассматривается только первая возможность.

  • Подпрограмма RESETW служит для начальной инициализации драйвера: обнуления счетчика открытых окон и начальной установки указателя области сохранения.
  • Подпрограмма SAVEW увеличивает счетчик открытых окон, переписывает область экрана, занимаемую окном, и параметры последнего открытого окна в область сохранения.
  • Подпрограмма FRAMEW рисует рамку из псевдографических символов вокруг окна и активизирует окно, то есть заносит параметры открытого окна в специальные переменные драйвера.
  • Подпрограмма WRITE выводит текст через активное окно аналогично точке входа OF818H МОНИТОРа.
  • Подпрограмма WRITEC выводит символ через открытое окно аналогично точке входа 0F809H МОНИТОРа.
  • Подпрограмма RESTW стирает активное окно, восстанавливает содержимое экрана, уменьшает счетчик открытых окон и активизирует предпоследнее открытое окно.

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

На шаге STEP1 драйвер инициируется. При выполнении шага STEP2 открывается первое окно размерами 5 строк на 18 столбцов (регистры D и Е), включая рамку. Координаты верхнего левого угла — 5-я строка, 6-й столбец — задаются в регистрах Н и L. Выполнение двух подпрограмм SAVEW и FRAME сохраняет содержимое экрана и активизирует окно. Шаг STEP3 выводит в первое окно сообщение TSTXT1, а шаг STEP4 организует и активизирует второе окно того же размера, частично перекрывающее первое. Во второе окно также выводится текстовое сообщение.

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

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

Для большей наглядности выполнять тестовую программу целесообразно после заполнения экрана, например, по директиве МОНИТОРа D,100.

Г. ШТЕФАН, г. Москва

ЛИТЕРАТУРА

  1. Штефан Г. Г. Ассемблер: краткий курс для начинающих.— Радио, 1988, № 11, 12.
  2. Штефан Г. Г. Ассемблер: основы программирования или первые практические шаги.—Радио, 1989, № 1,2.

Отсканировано с журнала Радио № 3 1990 г.
Отредактировано Лесных Ю. 2001 г.