Исходный текст Результат компиляции
Файл Main.ovr
6. Основная часть оверлейной программы должна, естественно, содержать описатель uses, в котором перечисляются используемые оверлейные модули (в этом же описании могут быть указаны и неоверлейные модули, используемые программой). Первым модулем в описании должен быть указан системный модуль Overlay. Кроме того, вслед за этим описанием должны размещаться директивы компилятора, указывающие, какие модули из перечисленных в описании uses являются оверлейными. Каждая такая директива имеет вид:
($0 Имя_модуля)
Имя_модуля в этой директиве должно идентифицировать дисковый файл с кодом оверлейного модуля (tpu-файла ). Допускается указание дисковода и/или цепочки объемлющих каталогов. Расширение имени (tpu) может быть опущено.
Заметим, что из всех системных модулей Turbo Pascal в качестве оверлейного может быть использован ТОЛЬКО модуль dos.
7. В теле главной программы перед первым обращением к какой-либо оверлейной подпрограмме должен быть вызов стандартной процедуры Ovrlnit из модуля Overlay. Эта процедура инициализирует подсистему управления оверлеями; единственным ее параметром является строка с именем файла, в котором собраны коды оверлейных модулей (ovr-файл).
Ниже приведен простой пример оверлейной программы, состоящей из главной программы и двух оверлейных моду лей. Этот пример входит в группу демонстрационных файлов стандартной поставки системы Turbo Pascal.
{$F+,0+} { директивы $F, $0 включены )
program OvrDemo; { главная часть оверлейной программы }
[ В uses-списке должен быть указан модуль Overlay, а также оверлейные модули; указание модуля Crt показывает, что в списке должны быть все используемые в программе модули}
UsesOverlay, Crt, OvrDemol, OvrDemo2;
{$O OvrDemo1} {Указание оверлейных модулей из}
{$O OvrDevo2} {числа указанных в uses-списке }
begin { Используем средства модуля Crt }
TextAttr := White;
CIrScr; { Инициализация системы управления оверлеями }
OvrInit(OVRDEMO.OVR);
if OvrResult <> 0 then begin Writeln('Ошибка: ', OvrResult) ; Halt(l) end;
{ Коды процедур Write 1 и Write2, расположенные в оверлейных модулях, будут при выполнении программы попеременно загружаться в оверлейный буфер }
repeat
Writel;
Write2
Until KeyPressed
end.
Файл OVRDEM01.PAS Файл OVRDEM02.РАS
|
unit OvrDemol;
{$0+,F+} ($0+,F+)
unit OvrDemo2;
interface
interface
procedure Writel; procedure Write2;
implementation implementation
procedure Write1; procedure Write2;
begin begin
Writeln('Один...') Writeln('Два...')
end; end;
end. End.
Вопросы для самопроверки
1.Что является базовыми принципами оверлейного механизма представления программы
2.Что содержит основная часть оверлейной программы.
3.Недостаток работы оверлейных модулей.
4.Схема распределения памяти в оверлейных программах