-
Notifications
You must be signed in to change notification settings - Fork 0
CD Wave
License
milosoftware/cdwave
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
unit License; interface type TKey = record lo, hi: Cardinal; end; type TRegInfo = class private user: string; key: TKey; keya, keyb, keyc: Cardinal; RegKey: string; procedure Load; function isRegistered: Boolean; public constructor Create(a,b,c: Cardinal; const ARegKey: string); procedure EnterCode(const auser: string; const acode: string); property RegisteredUser: string read user; property Registered: boolean read isRegistered; function verify(const s: string): TKey; end; var RegInfo: TRegInfo; implementation uses Registry, SysUtils, Dialogs; resourcestring NoValidKeyStr = 'Key is not valid.'; ThankRegStr = 'Thank you for registering'; function Code(const s: string; a, b: Cardinal): Cardinal; var i: integer; begin result := b; for i := 1 to length(s) do result := (result * a) + ord(s[i]); end; constructor TRegInfo.Create; begin keya := a; keyb := b; keyc := c; RegKey := ARegKey; if ARegKey <> '' then Load; end; function TRegInfo.isRegistered(): Boolean; var vkey: TKey; begin Result := false; if (user <> '') and (key.lo <> 0) then begin vkey := verify(IntToStr(DiskSize(ord(ParamStr(0)[1]) - ord('A'))) + user); result := (vkey.lo = key.lo) and (vkey.hi = key.hi); end; end; procedure TRegInfo.Load; var r: TRegistry; begin r := TRegistry.Create; try r.OpenKey(RegKey, False); try user := r.ReadString('User'); r.ReadBinaryData('Code', key, sizeof(key)); except user := ''; key.lo := 0; key.hi := 0; end; finally r.Free; end; end; function StringToKey(const s: string): TKey; var c: string; v: Cardinal; i: Integer; begin c := '$' + Copy(s, 1, 8); val(c, v, i); if i<>0 then raise Exception.Create(NoValidKeyStr); result.lo := v; c := '$' + Copy(s, 9, 8); val(c, v, i); if i<>0 then raise Exception.Create(NoValidKeyStr); result.hi := v; end; procedure TRegInfo.EnterCode; var newkey, vkey: TKey; ss: int64; s: string; r: TRegistry; begin user := auser; newkey := StringToKey(ACode); vkey := verify(auser); if (vkey.lo = newkey.lo) and (vkey.hi = newkey.hi) then begin ss := DiskSize(ord(ParamStr(0)[1]) - ord('A')); s := IntToStr(ss) + user; newkey := verify(s); r := TRegistry.Create; try r.OpenKey(RegKey, True); r.WriteString('User', auser); r.WriteBinaryData('Code', newkey, sizeof(newkey)); finally r.Free; end; MessageDlg(ThankRegStr, mtInformation, [mbOk], 9001); end else raise Exception.Create(NoValidKeyStr); Load; end; function TRegInfo.verify; begin result.lo := Code(s, keya, keyb); result.hi := Code(s, keyc, result.lo); end; end.
About
CD Wave
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published