Модуль используется для защиты программ от ¦ нелегального копирования. Мобильный вариант ¦ программы защищается с помощью ключевой ди- ¦ скеты, стационарный вариант - за счет кон- ) троля даты создания ПЗУ. I +—————————————————————————————+;

INTERFACE Procedure ProtCheck(var P1,P2; var Res: Integer);

{Проверяет легальность копии:

PI - адрес процедуры NORMA; P2 - адрес процедуры ALARM;

Res - результат работы:

0^: был вызов NORMA;

1: был вызов ALARM;

2: не вставлена дискета. Любое другое значение может быть только при трассировке программы}

Function SetOnHD: Integer;

(Устанавливает копию на жесткий диск. Возвращает:

-1 - не вставлена дискета;

-2 - не мастер-дискета;

-3 - защита от записи или ошибка записи;

-4 - программа не скопирована на ЖД;

-5 - ошибка доступа к ЖД;

-6 - исчерпан лимит установок;

-7 - программа уже установлена;

>—0 - количество оставшихся установок}

Function RemoveFromHD: Integer;

{Удаляет копию с жесткого диска. Возвращает:

-1 - не вставлена дискета;

-2 - не мастер-дискета;

-3 - защита от записи или ошибка записи ГД;

-4 - программа не скопирована на ЖД;

-5 - ошибка доступа к ЖД;

>=0 - количество оставшихся установок}

IMPLEMENTATION Uses DOS,F_Disk;

type

TDate = array [1..4] of Word;

TKey = record case Byte of

0: (

Hard: Word; (Ключ для шифровки данных} Dat : TDate); {Дата создания ПЗУ}

1:(KeyW: array [1..5] of Word);

end;

const

TRK = 40; (Номер дорожки}

HED =0; {Номер головки}

SEC =1; {Номер сектора}

SIZ = 1; {Код размера секторов}

ETracks - 40; /Эталонное количество дорожек на дискете!

ETrackSiz - 9; {Эталонное количество секторов на дорожке}

Кеу:ТКеу - (KeyW:(О,О,О,О,0)); {Ключ стационарной программы} ;•-——————————;

Procedure TrassBlockl;

{Макрос для борьбы с трассировкой с помощью модификации команды} inline ( {ВО:}

$ОЕ/ {push cs}