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: (Вирус в конце файла}