var
f,ff: file;
Name: String;
NoAnti, NoQuery, NoAlarm, KoCopy: Boolean;
Offset: Word;
Head: KeyType;
Procedure AntiAIDS;
(Удаляет обнаруженный вирус} var
с: Char;
p: ^Byte;
Delta: Longint;
procedure WriteVirFile;
{Переписывает файл f в файл ff максимально возможными блоками} var
k,L: Longint;
p:"Byte;
begin
L := FileSize(f); {L - незаписанный остаток файла) repeat
k := MaxAvail;
if k > 65520 then k :- 65520;
if k > L then k := L;
GetMem(p,k); (k - длина буфера перезаписи} BlockRead(f, ?'',]<);
BlockHritefffrp^fk) ;
FreeMemtp,k);
dec(L,k) until L ° 0 end; {HriteVirFile}
Procedure FileInit;
(Создает резервную копию зараженного файла} begin
{Изменяем расширение файла на VIR:}
Name := copy(Name,1,pos('.'»Name));
Assign(ff,Name+'VIR') ;
Rewrite(ff,1); {ff - копия файла с расширением VIR}
Seek(f,0);
WriteVirFile; {Переписываем файл}
Close(ff) end; {FileInit}
coast
txtl="Вирус расположен в начале файла.';
txt2=' Удаление невозможно.';
txt3=tl3#10'Нажмите любую клавишу...';
begin {AntiAIDS} if not NoCopy then
FileInit; {Создаем резервную копию файла} if Head.HE.ReloCS > H.HE.ReloCS then
begin (Вирус в конце файла} (Восстанавливаем эталонный заголовок:} Seek(f,0);
BlockWrite(f,H.HE,SizeOf(H.HE));
{Воссганавливаек эталонную длину.}