18.4.2. Установка размера буфера
Процедура OvrSetBuf (Size : LongInt) регулирует размер буфера. Она должна вызываться после инициализации администратора оверлеев процедурами OvrInit и OvrInitEMS. В параметре Size задается требуемая величина буфера в байтах. Она должна быть больше или равна начальному размеру буфера и не превышать размер всей доступной памяти, который можно вычислить как (MaxAvail + стартовое значение OvrGetBuf).
Вообще говоря, при инициализации администратора оверлеев под оверлеи автоматически выделяется ровно столько памяти, сколько необходимо для загрузки наибольшего оверлейного модуля. Если значение Size больше текущего размера буфера, то дополнительный объем выделяется из кучи. Если же меньше, то ненужная часть буфера присоединяется к куче. У процедуры OvrSetBuf есть одна особенность: она проверяет состояние области кучи. Если она пуста, то процедура работает без ошибок. Если же в этой области уже были размещены динамические переменные (процедурами New или GetMem), то в OvrResult будет возвращена ошибка OvrError. Эта же ошибка будет возвращена, если значение Size слишком мало или если не была проведена инициализации администратора оверлеев.
Возможная ошибка, OvrNoMemory, говорит о том, что не хватает памяти для увеличения размера буфера. Это может быть из-за наличия в программе директивы распределения памяти типа {$М 16384, 0, 655360}. В этом случае необходимо указать минимальный размер кучи, не меньший чем максимальное приращение к оверлейному буферу, например {$М 16384, 65536, 655360}.
- 400 -
Наиболее удобно менять размер буфера относительно текущего значения. Пусть надо увеличить его размер на 2048 байт. Это можно проделать вызовом
OvrSetBuf( OvrGetBuf + 2048 ).
Особо следует остановиться на совместной работе модулей Graph и Overlay. При включении графических режимов в области кучи отводится место под графический драйвер и шрифты. Этим блокируется возможность изменения оверлейного буфера. Поэтому будет безопаснее инициализировать и регистрировать графические драйверы и шрифты только после запуска администратора оверлеев и назначения размера буфера.