k: Word;

p: ^yteArr;

label

NotFag^ const

ЬхЫ"'Файл ';

txt2=' содержит оверлеи, архив или отладочную информацию.';

begin

CheckFile := False;

BlockRead(fe,H,SizeOf(H),k); {Читаем заголовок} if not CheckRead(NE,SizeOf(H),k) then

goto Not Fag; {Ошибка чтения} if H.Sign <> $5A4D then begin

WriteLn('Файл ',NE,' не является ЕХЕ-программой!');

NotFag:

WriteLn('Защита не установлена');

Exit end else begin

if FileSize(fe)-H.HdrSize*16>LFag then {Проверяем и блокируем повторную защиту} begin

GetMem(p,LFag);

Seek(fe,FileSize(fe)-LFag) ;

BlocltReadffetp^LFag,k) ;

k := LFag div 2; {Сравниваем, начиная с середины кода} repeat

inc (k) until (k>LFag) or (p" [k] OCFag^ [k] ) ;

FreeMem(p,LFag) ;

if k > LFag then begin

WriteLn('Файл ',NE,' уже защищен!');

Exit end end;

{Проверяем размер программы}

Intr($12,r); {Получаем объем памяти} LS := FileSize(fe)+LFag+SizeOf(HH)+15;

if r.AX*lO24.0-LS-H.MinMem*16 <= 0 then begin

WriteLn('Файл ',NE,' слишком велик!') ;

goto NotFag end;

if (FileSize(fe)+15) div 16>H.PageCnt+H.HdrSize then begin

WriteLn(txtl,NE,txt2) ;

Write('Устанавливать защиту (У/М,умлч.У)? ');

ReadLn(s);

if s»1 ' then s : - ' Y ' ;

if UpCase(s[l]) = 'N' then

goto NotFag end;

HH.Head24 := H;

with HH,HH.Head24 do