Тексты программ 423
Procedure ProtCheck(var P1,P2; var Res: Integer);
{Проверяет легальность копии:
PI - адрес процедуры NORMA; P2 - адрес процедуры ALARM;
Res - результат работы:
0: был вызов NORMA;
1: был вызов ALARM;
2: не вставлена дискета.
Любое другое значение может быть только при трассировке программы}
type
РТуре = Procedure;
var
Norma: РТуре absolute Pl;
Alarm: РТуре absolute P2;
DSK : Byte;
label
L1,L2;
begin
Res :» -1;
TrassBlockl;
if Key.Hard=0 then
if LegalDiskett(DSK) then begin
TrassBlock2;
LI:
Norma;
Res := 0 end else
begin L2:
TrassBlock2;
if DSK=2 then
Res := 2 else begin Alarm;
Res := 1 end end else
if LegalHD(DSK) then
goto Ll else
goto L2 end; (ProtCheck} ^_-——————.————;
Procedure HidnSec(var Buf: TBuf; Inst,Limit: Byte);
{'Цифрует буфер ключевого сектора} var
k,n: Word;
begin
TrassBlockl;
Randomize;
for k := 2 to 254 do Buf[k] := Random (256);
Buf[l] := Random(255)+1; {Ключ для шифровки}
{$R-}
Buf[17] := Inst; {Счетчик установок} Buf[200] := Limit; {Лимит установок} n := 0; {Подсчет КС}