Тексты программ 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; {Подсчет КС}