Встроенный ассемблер, графика в Турбо Паскале

 

Ассемблером называется машинно-зависимый компилятор, преобразующий специальным образом составленные текстовые строки в машинные инструкции. Встроенный ассемблер (далее - просто ассемблер) дает возможность программировать на уровне отдельных машинных инструкций В МП 8086/8088 имеется 14 регистров. В функциональном отношении они делятся на группы В архитектуре МП 8086/8088 адрес любого байта задается двумя 16-битовыми словами - сегментом и смещением В приводимых ниже таблицах указывается мнемоника всех допустимых инструкций для МП 8086/8088 Приведенное выше общее описание архитектуры МП 8086/8088 является базовым для любого ассемблера, в том числе и для встроенного ассемблера Турбо Паскаля Здесь и далее ассемблерными командами называются команды на языке встроенного ассемблера Встроенный ассемблер не поддерживает никакие директивы, обычно используемые в других ассемблерах, за исключением DB, DW, DD Ассемблерные подпрограммы - это процедуры и функции, объявленные с директивой Assembler. В таких подпрограммах исполняемая часть не содержит begin... end и состоит из единственного ассемблерного оператора asm... end

Во многих случаях стандартные для Паскаля возможности ввода/вывода данных с помощью процедур Read, ReadLn, Write, WriteLn оказываются явно недостаточными для разработки удобных в использовании диалоговых программ. Звуковые возможности ПК основаны на одноканальном управляемом звуковом генераторе, вырабатывающем электромагнитные колебания звуковой частоты. Колебания подаются на встроенный в ПК динамик и заставляют его звучать. Дополнительные возможности управления клавиатурой реализуются двумя функциями: KeyPressed и ReadKey. Библиотека Turbo Vision способна удовлетворить самым высоким требованиям и я настоятельно рекомендую обращаться к ней при программировании сложных текстовых изображений (меню, окон и т.п.).

Начиная с версии 4.0, в состав Турбо Паскаля включена мощная библиотека графических подпрограмм Graph, остающаяся практически неизменной во всех последующих версиях. Настройка графических процедур на работу с конкретным адаптером достигается за счет подключения нужного графического драйвера Процедура InitGraph. Инициирует графический режим работы адаптера Многие графические процедуры и функции используют указатель текущей позиции на экране, который в отличие от текстового курсора невидим Процедура PutPixel. Вычерчивает прямоугольник с указанными координатами углов Функция ImageSize. Возвращает размер памяти в байтах, необходимый для размещения прямоугольного фрагмента изображения Описываемые ниже стандартные процедуры и функции поддерживают вывод текстовых сообщений в графическом режиме Процедура Circle. Вычерчивает окружность В Турбо Паскале имеется возможность включения графического драйвера и штриховых шрифтов непосредственно в тело программы. Процедура SetColor. Устанавливает текущий цвет для выводимых линий и символов

В этой главе мы попробуем разработать программу, которая использует некоторые возможности Turbo Vision. Пусть, например, нам необходимо создать простейшую информационную систему - нечто вроде электронной записной книжки. Предполагается, что данные, используемые этой системой, будут храниться в виде записей в дисковом файле. Наша задача - разработать удобную диалоговую программу, облегчающую доступ к файловым данным. Таким образом, нам необходимо модифицировать стандартное поведение объекта Notebook. Для этого мы должны отыскать в типе TApplication метод, ответственный за создание строки статуса Необходимо пояснить назначение вновь введенных констант стХХХХ. Вернемся к смысловой части нашего примера и подумаем о том, какие еще свойства следует придать программе Работа большинства прикладных программ проходит в три этапа: подготовка к работе, собственно работа и, наконец, ее завершение. В нашем случае к подготовительному этапу можно отнести такие действия, как анализ существования файла данных и его (файла) подготовка к работе. В обработчике событий TNotebook.HandleEvent мы предусмотрели вызовы нескольких процедур, с помощью которых реализуются конкретные действия программы. Настала пора запрограммировать эти действия. При попытке откомпилировать полученный вариант программы Турбо Паскаль сообщит о неизвестном идентификаторе DisableCommands. В объекте TScroller для вывода текста предусмотрен абстрактный метод Draw. Абстрактным он называется потому, что не выполняет никакой полезной работы. Однако именно к этому методу обращается обработчик событий объекта TScroller всякий раз, когда понадобится обновить на экране вид окна Пора заняться основной содержательной частью нашей программы - процедурой Work. Весьма важным принципом Turbo Vision является принцип отделения процесса создания видимых изображений от процесса обработки данных Как уже отмечалось, с помощью процедуры Draw можно выводить обычный текст и выделенный текст Обработчик событий диалогового окна поддерживает только стандартные команды cmClose, cmOk, cmCancel Мы создали программу, которая погружает пользователя в среду объектно-ориентированного диалога Turbo Vision: она поддерживает командные клавиши, работу с мышью, может сменить каталог или диск, выбрать нужный файл и загрузить его в окно просмотра В процедуре Draw переменная Color задает атрибуты (цвет символов и цвет фона) символов, выводимых с помощью методов MoveChar и MoveStr Режим редактирования отличается от режима добавления записей двумя обстоятельствами: во-первых, в режиме редактирования поля ввода данных окна должны содержать текст, взятый из редактируемой записи, а в режиме ввода эти поля пусты Для вывода текста мы использовали глобальный массив Lines При реализации режима удаления записи нам нужно учесть тот факт, что порядок следования записей в файле и коллекции может быть различным Для поиска нужной записи сформируем диалоговое окно Итак, мы завершили создание диалоговой программы, обслуживающей электронную «записную книжку»

Все свойства Turbo Vision заключены в полях и методах входящих в библиотеку объектов. Объект TObject никогда не используется самостоятельно и служит основой для начинающегося с него дерева объектов В функциональном отношении все потомки объекта TObject делятся на две группы Видимый объект - это любой объект, который является потомком TView и может быть изображен на экране в текстовом режиме работы дисплея Абстрактная группа - это объект TGroup. Этот объект, вообще говоря, не является абстрактным, однако его экземпляры практически никогда не используются в программах: основное назначение объекта - служить основой иерархии родственных объектов пользователя. Все множество объектов Turbo Vision строится на базе трех примитивных объектов: TPoint, TRect и TObject TCollection реализует набор элементов, подобный массивам языка Турбо Паскаль Объект TStringList реализует специальный вид строкового ресурса, в котором к строкам можно обращаться с помощью числового индекса Для создания рамки окна и кнопок изменения размера окна и его закрытия предназначен объект TFrame Абстрактный объект TValidator и его потомки образуют группу объектов-контролеров. Поток - это обобщение процедур ввода/вывода данных.

Любой видимый элемент Turbo Vision имеет два важнейших свойства: он полностью контролирует изображение в пределах выделенного ему участка экрана и знает, как обрабатывать связанные с этим участком события - нажатие на клавиши или отметку мышью. Видимый элемент может быть частично или полностью перекрыт другими видимыми элементами. Замечательным свойством видимых элементов Turbo Vision является их способность образовывать группы. Все группы являются потомками абстрактного объекта TGroup. Все цвета в Turbo Vision определяются системой палитр: за каждым стандартным видимым элементом закреплен свой набор условных номеров цветов, называемый палитрой. Создание группы осуществляется за счет создания экземпляра объекта-наследника TGroup и присоединения к нему всех видимых элементов группы. Видимый элемент владеет прямоугольным участком экрана. Все программы в среде Turbo Vision рассчитаны на диалоговый способ взаимодействия с пользователем, а следовательно, в них активно используются точки ветвления, управляемые командами пользователя (точки диалога). Каждый видимый элемент Turbo Vision имеет 5 полей, которые определяют его поведение в диалоговой среде и которые можно использовать для того, чтобы изменить свойства элемента Последовательное присоединение подэлементов к группе приводит к так называемому Z-упорядочению видимых элементов Поле Options представляет собой шестнадцатиразрядное слово, биты (разряды) Внутри любой группы видимых элементов в каждый момент времени может быть выбран (активизирован) один и только один элемент. Поле DragMode размером в один байт определяет, как ведет себя видимый элемент при перемещении владельца. Напомню, что Turbo Vision позволяет перемещать окно на экране с помощью мыши, если «схватить» мышью верхнюю рамку окна. Шестнадцатиразрядное поле State хранит различные признаки, определяющие поведение или состояние видимого элемента В отличие от других полей поле State доступно только для чтения (поля Options, DragMode и GrowMode доступны также и для записи). Восьмиразрядное поле GrowMode определяет, как должен изменяться видимый элемент, когда его владелец (группа) изменяет свои размеры

События представляют собой небольшие пакеты информации, которыми обмениваются видимые элементы и которые создаются средой Turbo Vision в ответ на те или иные действия пользователя. Нажатие на любую клавишу или манипуляция мышью порождает событие, которое передается по цепочке активности видимых элементов до тех пор, пока не найдется элемент, знающий как обработать это событие Важно помнить, что события сами по себе не производят никаких действий в программе, но в ответ на событие могут создаваться новые видимые элементы, модифицироваться или уничтожаться существующие элементы, что и приводит к изменению содержимого экрана. Существуют 4 основных класса событий: события от мыши, события от клавиатуры, сообщения и пустые события. Внутри класса события могут подразделяться на виды. В этом классе событий имеется единственное событие evKeyDown, связанное с нажатием на клавишу Как уже говорилось, любая программа, работающая в среде Turbo Vision, является прямым или косвенным (через TApplicatiori) потомком TProgram и основана на обращении к трем главным методам этого объекта: Init, Run и Done. Обычно активные события (evKeyDown и evCommand) получают и обрабатывают видимые элементы, принадлежащие цепочке активности Поскольку события обычно связаны с какими-то действиями пользователя программа должна, как правило, реагировать на эти действия изменением видимого изображения В качестве значения константы-команды можно использовать любое число в диапазоне от О до 65535, однако следует учесть, что диапазоны 0...99 и 2S6...999 Turbo Vision резервирует для стандартных команд и их не следует использовать для определения команд пользователя Как указать на необходимость выполнения команды? Для этого в Turbo Vision Вы просто создаете событие-команду (evCommand), в поле Command которой помещаете код нужной команды Позиционированные события - это всегда события от мыши (evMouse). После того как Вы определили команду и установили элемент управления, который генерирует ее (например, элемент меню или кнопка диалогового окна), Вам нужно научить Ваш видимый элемент реагировать на возникновение этой команды. Единственным источником событий является метод TView.GetEvent. Поскольку программа, работающая в среде Turbo Vision, рассчитана на диалог с пользователем, в ней всегда найдутся такие промежутки времени, в течение которых она просто пассивно ожидает действий пользователя. События, определенные пользователем Каждый видимый элемент имеет поле EventMask В Turbo Vision предусмотрены средства, облегчающие создание контекстно-зависимой справочной службы. Иерархия объектов Turbo Vision построена так, чтобы любой объект имел все необходимые для его работы поля и методы. Некоторые события могут оказаться ненужными в данном контексте программы

Начертательная геометрия и инженерная графика, перспектива