Администратор оверлеев
Администратор оверлеев (или подсистема управления оверлеями) 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 реального режима должны компилироваться на диск. Если вы пытаетесь выполнить компиляцию таких программ в память, то компи- лятор выводит сообщение об ошибке.