TURBO PASCAL |
Новости
|
5.3.2. Глобальные ссылкиВ этом разделе описываются все определения интерфейсной части модуля F_EMS. Процедура DisposeEMSHandle Объявление: Procedure DisposeEMSHandle(var Handle: Word); Функция: Уничтожает дескриптор Handle и освобождает связанную с ним EMS— память. Переменная EMSErrorFlag Объявление: const EMSErrorFlag: Boolean = False; Функция: Хранит признак успешности предыдущего обращения к объектам и подпрограммам модуля: если после обращения к функциям EMM регистр АН содержит ненулевой код возврата, а также в случае обнаружения других ошибочных ситуаций, в эту переменную помещается значение True, в противном случае — False. Программа пользователя может проверить этот признак для анализа только что завершившегося обращения к методам и подпрограммам модуля. Функция EMSSeg Объявление: Function EMSSeg: Word; функция: Возвращает сегментную часть адреса окна, в которое отображаются логические страницы EMS— памяти. Переменная EMSStatus Объявление: const EMSStatus: Byte; Функция: Хранит статус завершения (код возврата) предыдущего обращения к функциям EMM. Смысл различных значений этой переменной указан в табл.15. Функция CctEMMVersion Объявление: Function FetEMMVersion: String; Функция: Возвращает номер версии EMM в формате Х.Х. Например, для EMM версии 4.0 возвращается строка «4.0». Процедура GetEMSInfo Объявление: Procedure GetEMSInfo(var AllPage, Pages: Word); Функция: Возвращает в переменной AllPage общее число EMS— страниц, а в Pages количество свободных страниц (т.е. не связанных ни с одним дескриптором). Функция IsEMS. Объявление: Function IsEMS: Boolean; Функция: Определяет наличие в компьютере EMS— памяти и возвращает True, если память обнаружена. В электронном справочнике «Не1р\» фирмы Flambeaux Software, Inc. для проверки факта подключения драйвера EMS— памяти рекомендуется прочитать имя драйвера — строку «ЕММХХХХО», содержащуюся в его заголовке (со смещением 10 от начала заголовка); вектор прерывания $67 всегда содержит адрес заголовка, поэтому следующая подпрограмма может определить, загружен ли EMM: Function IsEMM: Boolean; type THead = record Beg: array [1..10] of Byte; Head: array [1..8] of Char end; var PHead:"Thead; P: Pointer absolute PHead; begin GetIntVec($67,P) ; IsEMM := PHead".Head»'ЕММХХХХО' end; Однако па практике эта проверка не всегда дает правильный результат, так как вектор $67 может быть подменен другими резидентными программами, активно использующими EMS— память. После такой подмены этот вектор будет указывать на новый обработчик прерывания, в котором осуществляется контроль за использованием EMS— памяти и который вовсе не обязан содержать заголовок драйвера со смещением 10 байт от точки входа. В функции IsEMS используется более аккуратный прием, также рекомендуемый в справочнике «Help!»: в рамках MS-DOS драйвер EMM объявляется как внешний файл с именем «ЕММХХХХО»; функция создает дескриптор файла с этим именем с помощью вызова функции $3D MS-DOS и открывает его для чтения, после чего с помощью вызова IOCTL (функция $44 MS-DOS) проверяется статус файла. Если файл существует и его статус не равен нулю (что означает — устройство готово, нет конца файла), считается, что драйвер EMM подключен EMS— память существует. В этом случае функция определяет версию EMM и помещает ее во внутреннюю переменную EMSVer. Поскольку вызов функции IsEMM осуществляется перед любым обращением к EMM, ненулевое содержимое этой переменной служит признаком того, что проверка уже произведена и EMM установлен. Если EMSVerOO, функция IsEMS не делает описанную выше проверку, а сразу возвращает True, экономя несколько миллисекунд на каждом обращении. Процедура MapEMSPage. Объявление: Procedure MapEMSPage(Handle,Physic,Logic: Word); Функция: Картирует окно, связывая его физическую страницу Physic с логической страницей Logic дескриптора Handle. Поскольку картирование окна выполняется практически перед каждым обращением к EMS— памяти, эта процедура реализована с помощью встроенного ассемблера. Кроме того, в ней запоминаются параметры обращения и, если очередное обращение не изменяет существующей карты страниц, блокируется вызов EMM. Эти меры экономят до 25% времени при интенсивной работе с EMS— массивами. Процедура NewEMSHandle. Объявление: Procedure NewEMSHandle(var Handle: Word; Pages: Word); Функция: Открывает новый дескриптор Handle и связывает с ним Pages страниц EMS— памяти. Гипьг PEMSXXXX. Объявление: type PEMSArray^TMSArray; PEMSMatrix^TEMSMatrix; PEMSScreen^TEMSScreen; PEMSText="TEMSText ; PEMSType^TEMSType; PEMSVector^TEMSVector; Функция: Определяют типы—указатели для размещения объектов модуля в динамической памяти. Гип PIndex Объявление: type PIndex^TIndex; Функция: Используется для размещения списка индексов многомерного массива TEMSArray в динамической памяти. Константы RegHeadTEMSXXXX Объявление: const RegHeadTEMSArea : String [14]='F_EMS TEMSArea'; RegHeadTEMSArray : String [14]='F_EMS TEMSArra'; RegHeadTEMSMatrix: String [14]='F_EMS TEMSMatr'; RegHeadTEMSScreen: String [14]='F_EMS TEMSScre'; RegHeadTEMSType : String [14]='F_EMS TEMSType'; RegHeadTEMSVector: String [14]='F_EMS TEMSVect'; Функция: Служат для идентификации объектов модуля при работе с файлами. Тип TIndex Объявление: type TIndex = array [l..Max!nt div 6,1..3] of Longint; Функция: Описывает массив индексов, используемый внутри объекта TEMSArray. Примечание. В программе не следует объявлять переменные типа TIndex, т.к. длина этого массива слишком велика. Тип используется как базовый для определения типа—указателя PIndex. Доступ к отображаемой памяти 151 Тип TIndexBond Объявление: type TIndexBond = array [l-.MaxInt div 4, 1..2] of Longint; Функция: Используется /у\я передачи конструктору TEMSArray.Init списка граничных пар многомерного массива. См. примечание к TIndex. Тип TIndexList Объявление: type TIndexList = array [l.-MaxInt div 2] of Longint; функция; Используется для указания списка индексов многомерного массива при обращении к методам объекта TEMSAnay. См. примечание к TIndex. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |