Администратор оверлеев (или подсистема управления оверлеями)
Borland Pascal реализуется с помощью стандартного модуля Overlay.
В модуле Overlay используются усовершенствованные методы управле-
ния буферами, что обеспечивает оптимальное выполнение программы в
имеющейся области памяти. Например, подсистема управления оверле-
ями сохраняет в оверлейном буфере столько оверлеев, сколько воз-
можно. Это позволяет уменьшить частоту считывания оверлеев с дис-
ка. После загрузки оверлея вызов одной из его подпрограмм выпол-
няется также быстро, как обращение к неоверлейной программе. Кро-
ме того, когда у администратора оверлеев возникает необходимость
вывести один оверлей, чтобы освободить место для другого, он сна-
чала пытается вывести те оверлеи, которые не являются активными
(то есть те, которые в данный момент времени не содержат активных
программ).
Для реализации улучшенных методов управления оверлеями
Borland Pascal требует от вас при написании программы, в которой
используются оверлеи, соблюдать два важных правила:
1. Все оверлейные модули должны содержать директиву {$O+},
приводящую к тому, что компилятор обеспечивает генериро-
вание оверлейного кода.
2. При каждом обращении к оверлейной процедуре или функции
вы должны обеспечить использование всеми активными про-
цедурами и функциями вызовов типа FAR (дальний тип вызо-
ва).
Оба правила будут поясняться далее в разделе под заголовком
"Разработка оверлейных программ". Сейчас мы просто отметим, что
вы можете легко удовлетворить эти правила, поместив в начале
оверлейных модулей директиву компилятора {$O+,F+}, а в начале
всех других модулей и основной программы - директиву {$F+}.
Примечание: Несоблюдение требования обеспечения даль-
него типа вызова в оверлейной программе вызовет непредска-
зуемые и возможно катастрофические результаты при выполне-
нии программы.
Директива компилятора {$O имя_модуля} используется в прог-
рамме для указания того, какой из модулей будет оверлейным. Эта
директива должна размещаться за оператором uses программы, в кото-
ром перед именами всех других оверлейных модулей должно указы-
ваться имя стандартного модуля Overlay. Приведем следующий при-
мер:
program Editor;
{$F+} { Все процедуры и функции будут использовать
дальний тип вызова }
uses
Overlay, Crt, Dos, EdInOut, EdFormat, EdPrint, EdFind,
EdMain;
{$O EdInOut }
{$O EdFormat }
{$O EdPrint }
{$O EdFind }
{$O EdMain }
Если вы пытаетесь использовать в качестве оверлейного мо-
дуль, при компиляции которого не была указана директива {$O+}, то
компилятор выведет сообщение об ошибке. Что касается стандартных
модулей, то оверлейным может быть только модуль Dos. Другие стан-
дартные модули не могут использоваться в качестве оверлейных. К
тому же программы, содержащие оверлейные модули, при использова-
нии IDE реального режима должны компилироваться на диск. Если вы
пытаетесь выполнить компиляцию таких программ в память, то компи-
лятор выводит сообщение об ошибке.