TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

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.

 

Глава 5

Оглавление

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz