Доступ к отображаемой памяти_____ 139

соответствующую глобальной константе RegHeadTEMSArea. Затем читаются поля МахРад и Size. После этого создается дескриптор Handle и с ним связываются МахРаде страниц. Наконец из файла считываются и помещаются в EMS— память Size байт данных.

Store Procedure Store (var F: File); Virtual;

Перекрывается: Часто

Записывает в файл Р текущее состояние объекта TEMSArea. Файл F должен быть нетипизированным файлом. Перед обращением к методу программа должна открыть его, указав длину блока в 1 байт. Метод вначале записывает в файл заголовок объекта — глобальную константу RegHeadTEMSArea, затем поля МахРаде, Size и, наконец, все Size байт из EMS— памяти.

Следующий пример иллюстрирует технику использования методов 5tore и Load.

Uses F_EMS;

var

Area: TEMSArea;

F: File;

begin

Area.Init (100000); {Резервируем в EMS 100000 байт} {.......) {Наполняем EMS-память данными}

Assign(F,'Test.dat'); {Связываем файловую переменную с

именем вновь создаваемого файла} Rewrite(F,1); {Создаем файл; длина блока данных

равна 1 байту!} Store(F); {Сохраняем данные в файле};

Area.Done; {Освобождаем EMS-память} Seek(F,0); {Позиционируем указатель на начало файла} Area.Load(F); {Читаем все поля и данные

объекта TEMSArea из файла F} /....... } {Используем данные}

Area.Done {Освобождаем EMS-память} end.

WriteEMS Procedure WriteEMS (var Source; Destin, Sz:

Longint); Virtual;

Перекрывается: Никогда

Записывает Sz байт данных из переменной Source в EMS— память, пропустив Destin байт от ее начала. Вместе с методом ReadEMS обеспечивает низкоуровневый доступ к отображаемой памяти. Фактический обмен данными осуществляется порциями по 16 Кбайт. Разбивка всего массива Sz байт на порции и необходимое картирование EMS— памяти осуществляется внутри метода.

TEMSVector_______________________________________

Объект TEMSVector имитирует обычный одномерный массив Паскаля. Его элементами могут быть любые данные одинаковой длины — методы Setltem и Getltem могут соответственно записать в EMS— память или про—