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));

{Воссганавливаек эталонную длину.}