Руководство по языку B.Pascal 7



Инициализация администратора оверлеев


Здесь мы рассмотрим некоторые примеры того, как инициализи- руется администратор оверлеев (подсистема управления оверлеями). Код инициализации должен быть помещен перед первым обращением к оверлейной программе. Инициализацию обычно следует делать в опе- раторной части программы.

Следующая часть программы показывает, как немного требуется для того, чтобы инициализировать администратор оверлеев.

begin OvrInit('EDITOR.OVR'); end;

Проверка на ошибки не делается. Поэтому если для оверлейного буфера не хватает памяти или оверлейный файл не найден, то при попытке вызова оверлейной программы произойдет ошибка 208 (Overlay manager not installed - "Администратор оверлеев не уста- новлен").

Приведем другой небольшой пример, являющийся расширением предыдущего.

begin OvrInit('EDITOR.OVR'); OvrInitEMS; end;

В этом случае, если предположить, что для оверлейного буфера имеется достаточно памяти и что можно найти оверлейный файл, ад- министратор оверлеев проверяет, имеется ли память EMS, и если это так, загружает оверлейный файл в расширенную память.

Как уже упоминалось ранее, начальный размер оверлейного бу- фера выбирается минимально возможным или, иначе говоря, настолько большим, чтобы вместить оверлей наибольшего размера. Для некото- рых прикладных задач этого может быть достаточным, однако предс- тавим ситуацию, при которой одна из функций программы реализуется с помощью двух или более модулей, каждый из которых является оверлейным. Если общий размер таких модулей больше, чем размер наибольшего оверлея, то частое обращение модулей друг к другу приведет к интенсивному свопингу.

Очевидно, решение заключается в том, чтобы увеличить размер оверлейного буфера таким образом, чтобы в любой заданный момент времени имелось достаточно памяти для того, чтобы содержать в се- бе все оверлеи, часто обращающиеся друг к другу. Следующая часть программы показывает использование для увеличения размера овер- лейного буфера процедуры OvrSetBuf:

const OvrMaxSize = 80000; begin OvrInit('EDITOR.OVR'); OvrInitEMS; OvrSetBuf(OvrMaxSize); end;




Содержание  Назад  Вперед