k,nz,sz: Word;

label

VirDet,SetBeg,Next,Stop;

const

txl = 'Антивирусный контроль файлов (ESC - стоп):';

tx2 = 'Вирус не обнаружен.';

tx3 •= "Проверьте незащищенные файлы!';

tx4 = 'Вирус может быть резидентным,'+

' рекомендую перезагрузить систему!';

tx5 = 'Перезагрузить ДОС';

begin {Check}

if FColT'.Count^O then

Exit; {Нет файлов в коллекции} IntlSAddr Head.Intl3;

SetIntVec($62,Head.Intl3) ;

WriteLnC ': (80-Length(txl)) div2,txl);

Files := 0; {Счетчик проверенных файлов} for k := 0 to predtFColl".Count) do begin

oh := FCoU^Attk);

with ch" do begin Assign(FF,Name);

{$!-} Reset (FF,1) ;

l?I+} if lOResult о 0 then

WriteLnC Ошибка доступа к файлу ',Naine) else begin

{Сообщаем о контроле очередного файла} GotoXY(l,WhereY) ;

Write(' ':79); {Стираем строку} GotoXY(lO,WhereY) ;

Write(Name,' '); {Выводи» имя файла} inc(Files); {Счетчик файлов} {Читаем первый сектор файла) sz :- 512;

if FileSize(FF)<512 then

sz FileSize(FF); (Длина чтения} BlockRead(FP,Sec,sz,hz) ,• if szonz then begin

WriteLn( 'Ошибка чтения из файла ',Name);

Close(FF) ;

goto Next end;

{Контролируем файл:} if not Equal(Sec,Sec0,sz) then

Goto VirDet; (Изменен - вирус!} Close(FF) ;

goto Next; {Если нет отличий} VirDet: (Обнаружен вирус:}

WriteLn('заражен!'#7);

IsVirus True;

(Спрашиваем разрешения и лечим, если это возможно}

case Cure(SecO,Sec) of

0: goto Next; (Вирус в начале ЕХЕ-файла не удалять}

1: (Вирус в конце файла}