Доступ к отображаемой памяти_____ 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— память или про—