1
0
mirror of synced 2024-09-19 17:56:09 +00:00

Fixed: hash conflict list

This commit is contained in:
Mark van Renswoude 2004-07-29 13:48:35 +00:00
parent 40d0401c95
commit 4d284957d4
8 changed files with 367 additions and 252 deletions

View File

@ -32,6 +32,6 @@
-M -M
-$M16384,1048576 -$M16384,1048576
-K$00400000 -K$00400000
-LE"c:\program files\borland\delphi6\Projects\Bpl" -LE"c:\delphi6\Projects\Bpl"
-LN"c:\program files\borland\delphi6\Projects\Bpl" -LN"c:\delphi6\Projects\Bpl"
-DmadExcept -DmadExcept

View File

@ -56,6 +56,10 @@ HostApplication=
Launcher= Launcher=
UseLauncher=0 UseLauncher=0
DebugCWD= DebugCWD=
[Language]
ActiveLang=
ProjectLang=
RootDir=
[Version Info] [Version Info]
IncludeVerInfo=0 IncludeVerInfo=0
AutoIncBuild=0 AutoIncBuild=0
@ -82,118 +86,11 @@ ProductName=
ProductVersion=1.0.0.0 ProductVersion=1.0.0.0
Comments= Comments=
[Excluded Packages] [Excluded Packages]
c:\program files\borland\delphi6\Projects\Bpl\dclIndyCore60.bpl=Indy 10 Core Design Time c:\delphi6\Projects\Bpl\DIPasDocD6.bpl=DiPasDoc - Designtime
c:\program files\borland\delphi6\Projects\Bpl\dclIndyProtocols60.bpl=Indy 10 Protocols Design Time C:\Program Files\madCollection\madRemote\Delphi 6\madRemote_.bpl=madRemote 1.1b · www.madshi.net
c:\program files\borland\delphi6\Projects\Bpl\P164_D60.bpl=TurboPower OfficePartner 1.64 Design-time package - VCL60 C:\Program Files\madCollection\madKernel\Delphi 6\madKernel_.bpl=madKernel 1.3 · www.madshi.net
c:\program files\borland\delphi6\Projects\Bpl\VirtualTreesD6D.bpl=Virtual Treeview C:\Program Files\madCollection\madCodeHook\Delphi 6\madCodeHook_.bpl=madCodeHook 2.1b · www.madshi.net
c:\program files\borland\delphi6\Projects\Bpl\BalloonD6.bpl=Balloon 2.0 C:\Program Files\madCollection\madSecurity\Delphi 6\madSecurity_.bpl=madSecurity 1.1n · www.madshi.net
c:\program files\borland\delphi6\Projects\Bpl\SysILS.bpl=(untitled) C:\Program Files\madCollection\madShell\Delphi 6\madShell_.bpl=madShell 1.3k · www.madshi.net
c:\program files\borland\delphi6\Projects\Bpl\DragDropD6.bpl=Drag and Drop Component Suite
C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\JvCoreD6D.bpl=JVCL Core Components
C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\JvStdCtrlsD6D.bpl=JVCL Standard Controls
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvCustomD6D.bpl=JVCL Custom Controls
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvCtrlsD6D.bpl=JVCL Visual Controls
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvWizardD6D.bpl=JVCL Wizard Design Time Package
c:\program files\borland\delphi6\Projects\Bpl\dclIndy60.bpl=Internet Direct (Indy) for D6 Property and Component Editors
c:\program files\borland\delphi6\Bin\dclnet60.bpl=Borland Internet Components
c:\program files\borland\delphi6\Bin\dclsoap60.bpl=Borland SOAP Components
c:\program files\borland\delphi6\Projects\Bpl\ColorPickerButtonD6.bpl=ColorPickerButton
C:\Program Files\Borland\Delphi6\Projects\Bpl\ThreadNameExpert60.bpl=JCL Thread Name IDE expert for Delphi 6
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvDlgsD6D.bpl=JVCL Dialog Components
c:\program files\borland\delphi6\Projects\Bpl\asqlite.bpl=Aducom Software -- SQLite Design Time Components
C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\aSQLitepkg.bpl=Aducom Software -- SQLite RunTime Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvAppFrmD6D.bpl=JVCL Application and Form Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvBandsD6D.bpl=JVCL Band Objects
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvCmpD6D.bpl=JVCL Non-Visual Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvCryptD6D.bpl=JVCL Encryption and Compression Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvDockingD6D.bpl=JVCL Docking Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvDotNetCtrlsD6D.bpl=JVCL DotNet Controls
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvGlobusD6D.bpl=JVCL Globus Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvHMID6D.bpl=JVCL HMI Controls design time unit
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvInterpreterD6D.bpl=JVCL Interpreter Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvJansD6D.bpl=JVCL Jans Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvManagedThreadsD6D.bpl=JVCL Managed Threads
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvMMD6D.bpl=JVCL Multimedia and Image Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvNetD6D.bpl=JVCL Network Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvPageCompsD6D.bpl=JVCL Page Style Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvPluginD6D.bpl=JVCL Plugin Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvPrintPreviewD6D.bpl=JVCL Print Preview Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvSystemD6D.bpl=JVCL System Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvTimeFrameworkD6D.bpl=JVCL Time Framework
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvValidatorsD6D.bpl=JVCL Validators and Error Provider Components
C:\Program Files\Borland\Delphi6\Projects\Bpl\JvXPCtrlsD6D.bpl=JVCL XP Controls
c:\program files\borland\delphi6\Projects\Bpl\GJLSoftwareD5.bpl=GJL Software ExDBGrid Components
c:\program files\borland\delphi6\Projects\Bpl\FREEREP6.bpl=FreeReport 2.32 Components
c:\program files\borland\delphi6\Projects\Bpl\PageControlExD6.bpl=PageControlEx
F:\Delphi\Components\madCollection\madExcept\Delphi 6\madExceptIde_.bpl=madExceptIde 1.0b · www.madshi.net
c:\program files\borland\delphi6\Projects\Bpl\ZCore.bpl=Zeos Core Classes and Intefaces
c:\program files\borland\delphi6\Projects\Bpl\ZParse.bpl=Zeos Parsing Classes and Intefaces
c:\program files\borland\delphi6\Projects\Bpl\ZParseSql.bpl=Zeos SQL Parsing Classes and Intefaces
c:\program files\borland\delphi6\Projects\Bpl\ZPlain.bpl=Zeos Plain Database API
c:\program files\borland\delphi6\Projects\Bpl\ZDbc.bpl=Zeos Low Level Database API
c:\program files\borland\delphi6\Projects\Bpl\ZComponent.bpl=Zeos Database Components
c:\program files\borland\delphi6\Projects\Bpl\IconXPD6.bpl=IconXP
c:\program files\borland\delphi6\Projects\Bpl\NLDVDBT_D6D.bpl=NLDVirtualDBTree
c:\program files\borland\delphi6\Projects\Bpl\ff2_d60.bpl=TurboPower FlashFiler Designtime Package - VCL60
C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\GR32_D6.bpl=Graphics32
c:\program files\borland\delphi6\Projects\Bpl\GR32_DSGN_D6.bpl=Graphics32 Design Time Package
c:\program files\borland\delphi6\Projects\Bpl\PNGImage_D6.bpl=PNGImage
C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\tbx_d6.bpl=Toolbar2000 -- TBX Extensions (Alex Denisov)
C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\tb2k_d6.bpl=Toolbar2000 Components (Jordan Russell)
c:\program files\borland\delphi6\Projects\Bpl\tbxdsgn_d6.bpl=Toolbar2000 -- TBX Extensions Design Package (Alex Denisov)
C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\tb2kdsgn_d6.bpl=Toolbar2000 Design Package (Jordan Russell)
c:\program files\borland\delphi6\Projects\Bpl\SynEdit_D6.bpl=SynEdit component suite
c:\program files\borland\delphi6\Projects\Bpl\DelphiX_for5.bpl=DelphiX - DirectX components for Delphi
c:\program files\borland\delphi6\Projects\Bpl\NLDMBD6D.bpl=NLDMessageBox
c:\program files\borland\delphi6\Bin\dcl31w60.bpl=Delphi 1.0 Compatibility Components
c:\program files\borland\delphi6\Projects\Bpl\NLDTrayIconD6.bpl=NLDTrayIcon donated by SVG_1986
c:\program files\borland\delphi6\Projects\Bpl\ServerListD6D.bpl=SOF2Manager - Server List Designtime
C:\WINDOWS\System32\ibevnt60.bpl=Borland Interbase Event Alerter Component C:\WINDOWS\System32\ibevnt60.bpl=Borland Interbase Event Alerter Component
F:\Delphi\Components\madCollection\madBasic\Delphi 6\madHelp_.bpl=madHelp 1.1 · www.madshi.net c:\delphi6\Projects\Bpl\PsychoTidyD6.bpl=PsychoTidy IDE Expert
F:\Delphi\Components\madCollection\madRemote\Delphi 6\madRemote_.bpl=madRemote 1.1a · www.madshi.net
F:\Delphi\Components\madCollection\madKernel\Delphi 6\madKernel_.bpl=madKernel 1.2z · www.madshi.net
F:\Delphi\Components\madCollection\madCodeHook\Delphi 6\madCodeHook_.bpl=madCodeHook 2.0a · www.madshi.net
F:\Delphi\Components\madCollection\madSecurity\Delphi 6\madSecurity_.bpl=madSecurity 1.1n · www.madshi.net
F:\Delphi\Components\madCollection\madShell\Delphi 6\madShell_.bpl=madShell 1.3i · www.madshi.net
c:\program files\borland\delphi6\Projects\Bpl\BMSpinEditD6.bpl=BMSpinEdit
c:\program files\borland\delphi6\Projects\Bpl\GLScene6.bpl=GLScene - OpenGL 3D library
c:\program files\borland\delphi6\Projects\Bpl\TntUnicodeVcl_D60.bpl=Tnt Unicode Controls
c:\program files\borland\delphi6\Bin\dclsmp60.bpl=Borland Sample Components
c:\program files\borland\delphi6\Projects\Bpl\X2MultiMon_D6D.bpl=X2MultiMon Designtime Package
F:\Delphi\Components\ZipForge\Lib\Delphi 6\dclZipForged6.bpl=ZipForge Package
c:\program files\borland\delphi6\Bin\dclado60.bpl=Borland ADO DB Components
c:\program files\borland\delphi6\Bin\dclbde60.bpl=Borland BDE DB Components
C:\Program Files\Borland\Delphi6\Bin\dbx60.bpl=Borland SQL Explorer UI Package
c:\program files\borland\delphi6\Bin\DCLIB60.bpl=InterBase Data Access Components
c:\program files\borland\delphi6\Bin\dclbdecds60.bpl=Borland Local BDE ClientDataset Components
c:\program files\borland\delphi6\Bin\dclqrt60.bpl=QuickReport Components
c:\program files\borland\delphi6\Bin\dcltee60.bpl=TeeChart Components
c:\program files\borland\delphi6\Bin\dcldss60.bpl=Borland Decision Cube Components
c:\program files\borland\delphi6\Bin\dcltqr60.bpl=TeeChart for QuickReport Components
c:\program files\borland\delphi6\Bin\dclclxdb60.bpl=Borland CLX Database Components
C:\Program Files\Borland\Delphi6\Bin\dclclxstd60.bpl=Borland CLX Standard Components
c:\program files\borland\delphi6\Bin\dclmcn60.bpl=Borland DataSnap Connection Components
c:\program files\borland\delphi6\Bin\applet60.bpl=Borland Control Panel Applet Package
c:\program files\borland\delphi6\Bin\dclemacsedit60.bpl=Borland Editor Emacs Enhancements
c:\program files\borland\delphi6\Bin\dclshlctrls60.bpl=Shell Control Property and Component Editors
c:\program files\borland\delphi6\Bin\DBWEBXPRT.BPL=Borland Web Wizard Package
c:\program files\borland\delphi6\Bin\dclwbm60.bpl=Borland InternetExpress Components
c:\program files\borland\delphi6\Bin\dclie60.bpl=Internet Explorer Components
c:\program files\borland\delphi6\Bin\dclwebsnap60.bpl=Borland WebSnap Components
c:\program files\borland\delphi6\Bin\dclite60.bpl=Borland Integrated Translation Environment
c:\program files\borland\delphi6\Bin\dcldbx60.bpl=Borland dbExpress Components
c:\program files\borland\delphi6\Bin\dcldbxcds60.bpl=Borland Local DBX ClientDataset Components
c:\program files\borland\delphi6\Projects\Bpl\v103_d60.bpl=TurboPower VisualPlanIt 1.03 designtime package - VCL60
[Included Packages]
C:\Program Files\Borland\Delphi6\Bin\dclstd60.bpl=Borland Standard Components
c:\program files\borland\delphi6\Bin\dclsmpedit60.bpl=Borland Editor Script Enhancements
C:\Program Files\Borland\Delphi6\Bin\dcldb60.bpl=Borland Database Components
C:\Program Files\Borland\Delphi6\Bin\dclact60.bpl=Borland ActionBar Components
F:\Delphi\Components\madCollection\madBasic\Delphi 6\madBasic_.bpl=madBasic 1.1f · www.madshi.net
F:\Delphi\Components\madCollection\madDisAsm\Delphi 6\madDisAsm_.bpl=madDisAsm 2.0a · www.madshi.net
F:\Delphi\Components\madCollection\madExcept\Delphi 6\madExcept_.bpl=madExcept 2.6a · www.madshi.net
F:\Delphi\Components\madCollection\madExcept\Delphi 6\madExceptWizard_.bpl=madExceptWizard 2.6 · www.madshi.net
c:\program files\borland\delphi6\Bin\dclcds60.bpl=Borland Base Cached ClientDataset Component
C:\Program Files\Borland\Delphi6\Bin\dclmid60.bpl=Borland MyBase DataAccess Components
H:\Downloads\commentexpert.bpl=Comment Expert v1.0 Alpha
C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\ThemeManager6.bpl=Windows XP Theme Manager

View File

@ -66,7 +66,7 @@ begin
shData.Reset(); shData.Reset();
while shData.Next() do while shData.Next() do
Write(shData.CurrentKey, ': ', shData.CurrentValue, ' (', WriteLn(shData.CurrentKey, ': ', shData.CurrentValue, ' (',
shData[shData.CurrentKey], ')'); shData[shData.CurrentKey], ')');
finally finally
FreeAndNil(shData); FreeAndNil(shData);

View File

@ -32,6 +32,5 @@
-M -M
-$M16384,1048576 -$M16384,1048576
-K$00400000 -K$00400000
-LE"c:\program files\borland\delphi6\Projects\Bpl" -LE"c:\delphi6\Projects\Bpl"
-LN"c:\program files\borland\delphi6\Projects\Bpl" -LN"c:\delphi6\Projects\Bpl"
-DmadExcept

View File

@ -46,8 +46,8 @@ UnitOutputDir=
PackageDLLOutputDir= PackageDLLOutputDir=
PackageDCPOutputDir= PackageDCPOutputDir=
SearchPath= SearchPath=
Packages=vcl;rtl;vclx;Indy60;madBasic_;madDisAsm_;dsnap;dbrtl;xmlrtl;inet;soaprtl Packages=vcl;rtl;vclx;indy;madBasic_;madDisAsm_;dsnap;dbrtl;xmlrtl;inet;soaprtl
Conditionals=madExcept Conditionals=
DebugSourceDirs= DebugSourceDirs=
UsePackages=0 UsePackages=0
[Parameters] [Parameters]
@ -56,13 +56,17 @@ HostApplication=
Launcher= Launcher=
UseLauncher=0 UseLauncher=0
DebugCWD= DebugCWD=
[Language]
ActiveLang=
ProjectLang=
RootDir=
[Version Info] [Version Info]
IncludeVerInfo=0 IncludeVerInfo=0
AutoIncBuild=1 AutoIncBuild=1
MajorVer=1 MajorVer=1
MinorVer=0 MinorVer=0
Release=0 Release=0
Build=0 Build=1
Debug=0 Debug=0
PreRelease=0 PreRelease=0
Special=0 Special=0
@ -73,7 +77,7 @@ CodePage=1252
[Version Info Keys] [Version Info Keys]
CompanyName= CompanyName=
FileDescription= FileDescription=
FileVersion=1.0.0.0 FileVersion=1.0.0.1
InternalName= InternalName=
LegalCopyright= LegalCopyright=
LegalTrademarks= LegalTrademarks=
@ -82,79 +86,6 @@ ProductName=
ProductVersion= ProductVersion=
Comments= Comments=
[Excluded Packages] [Excluded Packages]
c:\program files\borland\delphi6\Projects\Bpl\VirtualTreesD6D.bpl=Virtual Treeview c:\delphi6\Projects\Bpl\DIPasDocD6.bpl=DiPasDoc - Designtime
C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\ThemeManager6.bpl=Windows XP Theme Manager
c:\program files\borland\delphi6\Projects\Bpl\JVCL200_D60.bpl=JEDI-VCL Components
c:\program files\borland\delphi6\Projects\Bpl\dclIndy60.bpl=Internet Direct (Indy) for D6 Property and Component Editors
c:\program files\borland\delphi6\Projects\Bpl\BalloonD6.bpl=Balloon 2.0
c:\program files\borland\delphi6\Projects\Bpl\asqlite.bpl=Aducom Software -- SQLite Design Time Components
C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\aSQLitepkg.bpl=Aducom Software -- SQLite RunTime Components
C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\GR32_D6.bpl=Graphics32
c:\program files\borland\delphi6\Projects\Bpl\GR32_DSGN_D6.bpl=Graphics32 Design Time Package
c:\program files\borland\delphi6\Projects\Bpl\PNGImage_D6.bpl=PNGImage
c:\program files\borland\delphi6\Projects\Bpl\BMSpinEditD6.bpl=BMSpinEdit
C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\tbx_d6.bpl=Toolbar2000 -- TBX Extensions (Alex Denisov)
C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\tb2k_d6.bpl=Toolbar2000 Components (Jordan Russell)
c:\program files\borland\delphi6\Projects\Bpl\tbxdsgn_d6.bpl=Toolbar2000 -- TBX Extensions Design Package (Alex Denisov)
C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\tb2kdsgn_d6.bpl=Toolbar2000 Design Package (Jordan Russell)
c:\program files\borland\delphi6\Projects\Bpl\SynEdit_D6.bpl=SynEdit component suite
c:\program files\borland\delphi6\Projects\Bpl\DelphiX_for5.bpl=DelphiX - DirectX components for Delphi
c:\program files\borland\delphi6\Projects\Bpl\GLScene6.bpl=GLScene - OpenGL 3D library
c:\program files\borland\delphi6\Projects\Bpl\NLDMBD6D.bpl=NLDMessageBox
c:\program files\borland\delphi6\Projects\Bpl\TntUnicodeVcl_D60.bpl=Tnt Unicode Controls
c:\program files\borland\delphi6\Projects\Bpl\PageControlExD6.bpl=PageControlEx
c:\program files\borland\delphi6\Bin\dclsmp60.bpl=Borland Sample Components
c:\program files\borland\delphi6\Bin\dcl31w60.bpl=Delphi 1.0 Compatibility Components
c:\program files\borland\delphi6\Projects\Bpl\NLDTrayIconD6.bpl=NLDTrayIcon donated by SVG_1986
c:\program files\borland\delphi6\Projects\Bpl\ServerListD6D.bpl=SOF2Manager - Server List Designtime
C:\WINDOWS\System32\ibevnt60.bpl=Borland Interbase Event Alerter Component C:\WINDOWS\System32\ibevnt60.bpl=Borland Interbase Event Alerter Component
F:\Delphi\Components\madCollection\madBasic\Delphi 6\madHelp_.bpl=madHelp 1.1 · www.madshi.net c:\delphi6\Projects\Bpl\PsychoTidyD6.bpl=PsychoTidy IDE Expert
F:\Delphi\Components\madCollection\madRemote\Delphi 6\madRemote_.bpl=madRemote 1.1a · www.madshi.net
F:\Delphi\Components\madCollection\madKernel\Delphi 6\madKernel_.bpl=madKernel 1.2z · www.madshi.net
F:\Delphi\Components\madCollection\madCodeHook\Delphi 6\madCodeHook_.bpl=madCodeHook 2.0a · www.madshi.net
F:\Delphi\Components\madCollection\madSecurity\Delphi 6\madSecurity_.bpl=madSecurity 1.1n · www.madshi.net
F:\Delphi\Components\madCollection\madShell\Delphi 6\madShell_.bpl=madShell 1.3i · www.madshi.net
c:\program files\borland\delphi6\Projects\Bpl\X2MultiMon_D6D.bpl=X2MultiMon Designtime Package
c:\program files\borland\delphi6\Projects\Bpl\ff2_d60.bpl=TurboPower FlashFiler Designtime Package - VCL60
F:\Delphi\Components\ZipForge\Lib\Delphi 6\dclZipForged6.bpl=ZipForge Package
c:\program files\borland\delphi6\Bin\dclado60.bpl=Borland ADO DB Components
c:\program files\borland\delphi6\Bin\dclbde60.bpl=Borland BDE DB Components
C:\Program Files\Borland\Delphi6\Bin\dbx60.bpl=Borland SQL Explorer UI Package
c:\program files\borland\delphi6\Bin\DCLIB60.bpl=InterBase Data Access Components
c:\program files\borland\delphi6\Bin\dclcds60.bpl=Borland Base Cached ClientDataset Component
C:\Program Files\Borland\Delphi6\Bin\dclmid60.bpl=Borland MyBase DataAccess Components
c:\program files\borland\delphi6\Bin\dclbdecds60.bpl=Borland Local BDE ClientDataset Components
c:\program files\borland\delphi6\Bin\dclqrt60.bpl=QuickReport Components
c:\program files\borland\delphi6\Bin\dcltee60.bpl=TeeChart Components
c:\program files\borland\delphi6\Bin\dcldss60.bpl=Borland Decision Cube Components
c:\program files\borland\delphi6\Bin\dcltqr60.bpl=TeeChart for QuickReport Components
c:\program files\borland\delphi6\Bin\dclclxdb60.bpl=Borland CLX Database Components
C:\Program Files\Borland\Delphi6\Bin\dclclxstd60.bpl=Borland CLX Standard Components
c:\program files\borland\delphi6\Bin\dclmcn60.bpl=Borland DataSnap Connection Components
c:\program files\borland\delphi6\Bin\applet60.bpl=Borland Control Panel Applet Package
c:\program files\borland\delphi6\Bin\dclemacsedit60.bpl=Borland Editor Emacs Enhancements
c:\program files\borland\delphi6\Bin\dclshlctrls60.bpl=Shell Control Property and Component Editors
c:\program files\borland\delphi6\Bin\DBWEBXPRT.BPL=Borland Web Wizard Package
c:\program files\borland\delphi6\Bin\DCLNMF60.bpl=NetMasters Fastnet Tools
c:\program files\borland\delphi6\Bin\dclwbm60.bpl=Borland InternetExpress Components
c:\program files\borland\delphi6\Bin\dclie60.bpl=Internet Explorer Components
c:\program files\borland\delphi6\Bin\dclwebsnap60.bpl=Borland WebSnap Components
c:\program files\borland\delphi6\Bin\dclite60.bpl=Borland Integrated Translation Environment
c:\program files\borland\delphi6\Bin\dcldbx60.bpl=Borland dbExpress Components
c:\program files\borland\delphi6\Bin\dcldbxcds60.bpl=Borland Local DBX ClientDataset Components
[Included Packages]
C:\Program Files\Borland\Delphi6\Bin\dclstd60.bpl=Borland Standard Components
c:\program files\borland\delphi6\Bin\dclsmpedit60.bpl=Borland Editor Script Enhancements
F:\Delphi\Components\madCollection\madBasic\Delphi 6\madBasic_.bpl=madBasic 1.1f · www.madshi.net
F:\Delphi\Components\madCollection\madDisAsm\Delphi 6\madDisAsm_.bpl=madDisAsm 2.0a · www.madshi.net
F:\Delphi\Components\madCollection\madExcept\Delphi 6\madExcept_.bpl=madExcept 2.6a · www.madshi.net
F:\Delphi\Components\madCollection\madExcept\Delphi 6\madExceptIde_.bpl=madExceptIde 1.0b · www.madshi.net
F:\Delphi\Components\madCollection\madExcept\Delphi 6\madExceptWizard_.bpl=madExceptWizard 2.6 · www.madshi.net
C:\Program Files\Borland\Delphi6\Bin\dcldb60.bpl=Borland Database Components
c:\program files\borland\delphi6\Bin\dclnet60.bpl=Borland Internet Components
c:\program files\borland\delphi6\Bin\dclsoap60.bpl=Borland SOAP Components
c:\program files\borland\delphi6\Projects\Bpl\ColorPickerButtonD6.bpl=ColorPickerButton
C:\Program Files\Borland\Delphi6\Bin\dclact60.bpl=Borland ActionBar Components
c:\program files\borland\delphi6\Projects\Bpl\SysILS.bpl=(untitled)
c:\program files\borland\delphi6\Projects\Bpl\videocap5.bpl=(untitled)
c:\program files\borland\delphi6\Projects\Bpl\DragDropD6.bpl=Drag and Drop Component Suite

View File

@ -3,8 +3,6 @@ program X2UtilsSettingsTest;
{$APPTYPE CONSOLE} {$APPTYPE CONSOLE}
uses uses
madExcept,
madLinkDisAsm,
Classes, Classes,
SysUtils, SysUtils,
Windows, Windows,
@ -98,6 +96,12 @@ begin
end; end;
} }
// Test for the definitions
{
Settings.Define('Test', 'Value', 5, [[0, 5], [10, 15]]);
Settings.ReadInteger('Test', 'Value');
}
TraverseSection(Settings, '', 1); TraverseSection(Settings, '', 1);
WriteLn; WriteLn;
finally finally

View File

@ -192,12 +192,14 @@ type
property CurrentValue: String read GetCurrentValue; property CurrentValue: String read GetCurrentValue;
end; end;
resourcestring
RSInvalidCursor = 'Cursor is invalid!';
RSInvalidDataSize = 'Invalid data size!';
implementation implementation
resourcestring resourcestring
RSOrphanNode = 'BUG: Node does not seem to belong to it''s parent!'; RSOrphanNode = 'BUG: Node does not seem to belong to it''s parent!';
RSInvalidCursor = 'Cursor is invalid!';
RSTooManyPops = 'More Pops than Pushes!'; RSTooManyPops = 'More Pops than Pushes!';
RSInvalidDataSize = 'Invalid data size!';
const const
CStackSize = 32; CStackSize = 32;

View File

@ -18,16 +18,24 @@ uses
type type
{ {
:$ Internal representation of a hash node :$ Internal representation of a hash item
} }
PX2UtHashNode = ^TX2UtHashNode; PX2UtHashItem = ^TX2UtHashItem;
TX2UtHashNode = record TX2UtHashItem = record
Prev: PX2UtHashNode; Prev: PX2UtHashItem;
Next: PX2UtHashNode; Next: PX2UtHashItem;
Key: String; Key: String;
Value: record end; Value: record end;
end; end;
{
:$ Internal hash list
}
PX2UtHashList = ^TX2UtHashList;
TX2UtHashList = record
Root: PX2UtHashItem;
end;
{ {
:$ Hash implementation :$ Hash implementation
@ -36,31 +44,39 @@ type
} }
TX2UtCustomHash = class(TX2UtCustomBTree) TX2UtCustomHash = class(TX2UtCustomBTree)
private private
FHashCursor: PX2UtHashNode; FHashCursor: PX2UtHashItem;
FHashDataSize: Cardinal; FHashDataSize: Cardinal;
FHashItemSize: Cardinal;
function GetCurrentKey(): String; function GetCurrentKey(): String;
function GetHashTotalSize(): Cardinal;
protected protected
function Hash(const AValue: String): Cardinal; virtual; function Hash(const AValue: String): Cardinal; virtual;
function LookupNode(const AKey: String; function GetItemData(const AItem: PX2UtHashItem): Pointer; virtual;
function LookupItem(const AKey: String;
out ANode: PX2UtBTreeNode;
const ACanCreate: Boolean = False; const ACanCreate: Boolean = False;
const ASetCursor: Boolean = False): PX2UtBTreeNode; const ASetCursor: Boolean = False): PX2UtHashItem;
procedure InitNode(var ANode: PX2UtBTreeNode); override;
procedure FreeNode(var ANode: PX2UtBTreeNode); override; procedure FreeNode(var ANode: PX2UtBTreeNode); override;
procedure ClearCursor(); override; procedure ClearCursor(); override;
function ValidCursor(const ARaiseError: Boolean = True): Boolean; override; function ValidCursor(const ARaiseError: Boolean = True): Boolean; override;
procedure InitHashNode(var ANode: PX2UtHashNode); virtual; procedure InitHashItem(var AItem: PX2UtHashItem); virtual;
procedure FreeHashNode(var ANode: PX2UtHashNode); virtual; procedure FreeHashItem(var AItem: PX2UtHashItem); virtual;
property HashCursor: PX2UtHashItem read FHashCursor write FHashCursor;
property HashItemSize: Cardinal read FHashItemSize;
property HashTotalSize: Cardinal read GetHashTotalSize;
property HashDataSize: Cardinal read FHashDataSize write FHashDataSize; property HashDataSize: Cardinal read FHashDataSize write FHashDataSize;
//:$ Returns the key at the current cursor location. //:$ Returns the key at the current cursor location.
property CurrentKey: String read GetCurrentKey; property CurrentKey: String read GetCurrentKey;
public public
constructor Create(); override;
//:$ Deletes an item from the hash. //:$ Deletes an item from the hash.
procedure Delete(const AKey: String); procedure Delete(const AKey: String);
@ -93,6 +109,7 @@ type
//:$ Returns the value at the current cursor location. //:$ Returns the value at the current cursor location.
property CurrentValue: Pointer read GetCurrentValue; property CurrentValue: Pointer read GetCurrentValue;
end; end;
*)
{ {
:$ Hash implementation for string values :$ Hash implementation for string values
@ -104,8 +121,8 @@ type
function GetCurrentValue(): String; function GetCurrentValue(): String;
protected protected
procedure InitNode(var ANode: PX2UtBTreeNode); override; procedure InitHashItem(var AItem: PX2UtHashItem); override;
procedure FreeNode(var ANode: PX2UtBTreeNode); override; procedure FreeHashItem(var AItem: PX2UtHashItem); override;
public public
constructor Create(); override; constructor Create(); override;
property CurrentKey; property CurrentKey;
@ -117,16 +134,166 @@ type
//:$ Returns the value at the current cursor location. //:$ Returns the value at the current cursor location.
property CurrentValue: String read GetCurrentValue; property CurrentValue: String read GetCurrentValue;
end; end;
*)
procedure Mix(var A, B, C: Cardinal);
implementation implementation
resourcestring
RSEmptyKey = 'Cannot hash an empty key!';
{======================== TX2UtCustomHash
Initialization
========================================}
constructor TX2UtCustomHash.Create;
begin
inherited;
FHashItemSize := SizeOf(TX2UtHashItem);
DataSize := FHashItemSize;
end;
{======================== TX2UtCustomHash {======================== TX2UtCustomHash
Hashing Hashing
========================================} ========================================}
procedure Mix(var A, B, C: Cardinal);
asm
sub A, B; sub A, C; shr C, 13; xor A, C;
sub B, C; sub B, A; shl A, 8; xor B, A;
sub C, A; sub C, B; shr B, 13; xor C, B;
sub A, B; sub A, C; shr C, 12; xor A, C;
sub B, C; sub B, A; shl A, 16; xor B, A;
sub C, A; sub C, B; shr B, 5; xor C, B;
sub A, B; sub A, C; shr C, 3; xor A, C;
sub B, C; sub B, A; shl A, 10; xor B, A;
sub C, A; sub C, B; shr B, 15; xor C, B;
end;
function TX2UtCustomHash.Hash; function TX2UtCustomHash.Hash;
begin begin
Result := 0; Result := 0;
(*
ypedef unsigned long int ub4; /* unsigned 4-byte quantities */
typedef unsigned char ub1; /* unsigned 1-byte quantities */
#define hashsize(n) ((ub4)1<<(n))
#define hashmask(n) (hashsize(n)-1)
/*
--------------------------------------------------------------------
mix -- mix 3 32-bit values reversibly.
For every delta with one or two bits set, and the deltas of all three
high bits or all three low bits, whether the original value of a,b,c
is almost all zero or is uniformly distributed,
* If mix() is run forward or backward, at least 32 bits in a,b,c
have at least 1/4 probability of changing.
* If mix() is run forward, every bit of c will change between 1/3 and
2/3 of the time. (Well, 22/100 and 78/100 for some 2-bit deltas.)
mix() was built out of 36 single-cycle latency instructions in a
structure that could supported 2x parallelism, like so:
a -= b;
a -= c; x = (c>>13);
b -= c; a ^= x;
b -= a; x = (a<<8);
c -= a; b ^= x;
c -= b; x = (b>>13);
...
Unfortunately, superscalar Pentiums and Sparcs can't take advantage
of that parallelism. They've also turned some of those single-cycle
latency instructions into multi-cycle latency instructions. Still,
this is the fastest good hash I could find. There were about 2^^68
to choose from. I only looked at a billion or so.
--------------------------------------------------------------------
*/
#define mix(a,b,c) \
{ \
a -= b; a -= c; a ^= (c>>13); \
b -= c; b -= a; b ^= (a<<8); \
c -= a; c -= b; c ^= (b>>13); \
a -= b; a -= c; a ^= (c>>12); \
b -= c; b -= a; b ^= (a<<16); \
c -= a; c -= b; c ^= (b>>5); \
a -= b; a -= c; a ^= (c>>3); \
b -= c; b -= a; b ^= (a<<10); \
c -= a; c -= b; c ^= (b>>15); \
}
/*
--------------------------------------------------------------------
hash() -- hash a variable-length key into a 32-bit value
k : the key (the unaligned variable-length array of bytes)
len : the length of the key, counting by bytes
initval : can be any 4-byte value
Returns a 32-bit value. Every bit of the key affects every bit of
the return value. Every 1-bit and 2-bit delta achieves avalanche.
About 6*len+35 instructions.
The best hash table sizes are powers of 2. There is no need to do
mod a prime (mod is sooo slow!). If you need less than 32 bits,
use a bitmask. For example, if you need only 10 bits, do
h = (h & hashmask(10));
In which case, the hash table should have hashsize(10) elements.
If you are hashing n strings (ub1 ** )k, do it like this:
for (i=0, h=0; i<n; ++i) h = hash( k[i], len[i], h);
By Bob Jenkins, 1996. bob_jenkins@burtleburtle.net. You may use this
code any way you wish, private, educational, or commercial. It's free.
See http://burtleburtle.net/bob/hash/evahash.html
Use for hash table lookup, or anything where one collision in 2^^32 is
acceptable. Do NOT use for cryptographic purposes.
--------------------------------------------------------------------
*/
ub4 hash( k, length, initval)
register ub1 *k; /* the key */
register ub4 length; /* the length of the key */
register ub4 initval; /* the previous hash, or an arbitrary value */
{
register ub4 a,b,c,len;
/* Set up the internal state */
len = length;
a = b = 0x9e3779b9; /* the golden ratio; an arbitrary value */
c = initval; /* the previous hash value */
/*---------------------------------------- handle most of the key */
while (len >= 12)
{
a += (k[0] +((ub4)k[1]<<8) +((ub4)k[2]<<16) +((ub4)k[3]<<24));
b += (k[4] +((ub4)k[5]<<8) +((ub4)k[6]<<16) +((ub4)k[7]<<24));
c += (k[8] +((ub4)k[9]<<8) +((ub4)k[10]<<16)+((ub4)k[11]<<24));
mix(a,b,c);
k += 12; len -= 12;
}
/*------------------------------------- handle the last 11 bytes */
c += length;
switch(len) /* all the case statements fall through */
{
case 11: c+=((ub4)k[10]<<24);
case 10: c+=((ub4)k[9]<<16);
case 9 : c+=((ub4)k[8]<<8);
/* the first byte of c is reserved for the length */
case 8 : b+=((ub4)k[7]<<24);
case 7 : b+=((ub4)k[6]<<16);
case 6 : b+=((ub4)k[5]<<8);
case 5 : b+=k[4];
case 4 : a+=((ub4)k[3]<<24);
case 3 : a+=((ub4)k[2]<<16);
case 2 : a+=((ub4)k[1]<<8);
case 1 : a+=k[0];
/* case 0: nothing left to add */
}
mix(a,b,c);
/*-------------------------------------------- report the result */
return c;
}
*)
end; end;
@ -139,6 +306,10 @@ begin
Result := inherited ValidCursor(ARaiseError); Result := inherited ValidCursor(ARaiseError);
if Result then if Result then
begin begin
Result := Assigned(FHashCursor);
if (not Result) and (ARaiseError) then
raise EX2UtBTreeInvalidCursor.Create(RSInvalidCursor);
end; end;
end; end;
@ -158,7 +329,7 @@ begin
begin begin
Result := inherited Next(); Result := inherited Next();
if Result then if Result then
FHashCursor := GetNodeData(Cursor); FHashCursor := PX2UtHashList(GetNodeData(Cursor))^.Root;
end else end else
Result := True; Result := True;
end; end;
@ -167,19 +338,105 @@ end;
{======================== TX2UtCustomHash {======================== TX2UtCustomHash
Item Management Item Management
========================================} ========================================}
function TX2UtCustomHash.LookupNode; function TX2UtCustomHash.GetItemData;
begin
Assert(HashDataSize > 0, RSInvalidDataSize);
Result := Pointer(Cardinal(AItem) + HashItemSize);
end;
function TX2UtCustomHash.LookupItem;
var var
iIndex: Integer; iIndex: Integer;
pNode: PX2UtBTreeNode; pData: PX2UtHashList;
pFound: PX2UtHashItem;
pItem: PX2UtHashItem;
pLast: PX2UtHashItem;
begin begin
Result := nil;
iIndex := Hash(AKey); iIndex := Hash(AKey);
pNode := inherited LookupNode(iIndex, ACanCreate, ASetCursor); ANode := inherited LookupNode(iIndex, ACanCreate, ASetCursor);
if Assigned(ANode) then
begin
pData := PX2UtHashList(GetNodeData(ANode));
pItem := pData^.Root;
pLast := nil;
if Assigned(pItem) then
begin
pFound := nil;
// Find key
repeat
if pItem.Key = AKey then
begin
pFound := pItem;
break;
end;
pLast := pItem;
pItem := pItem^.Next;
until not Assigned(pItem);
pItem := pFound;
end;
if Assigned(pItem) then
Result := pItem
else if ACanCreate then
begin
InitHashItem(pItem);
if not Assigned(pData^.Root) then
pData^.Root := pItem;
if Assigned(pLast) then
pLast^.Next := pItem;
pItem^.Prev := pLast;
pItem^.Next := nil;
pItem^.Key := AKey;
Result := pItem;
end else
Result := nil;
end;
if Assigned(Result) and ASetCursor then
FHashCursor := Result;
end; end;
procedure TX2UtCustomHash.Delete; procedure TX2UtCustomHash.Delete;
var
bFree: Boolean;
pData: PX2UtHashList;
pNode: PX2UtBTreeNode;
pItem: PX2UtHashItem;
begin begin
pItem := LookupItem(AKey, pNode);
if Assigned(pItem) then
begin
pData := GetItemData(pItem);
if pData^.Root = pItem then
begin
if Assigned(pItem^.Next) then
pData^.Root := pItem^.Next
else if Assigned(pItem^.Prev) then
pData^.Root := pItem^.Prev
else
pData^.Root := nil;
end;
bFree := (not Assigned(pData^.Root));
FreeHashItem(pItem);
if bFree then
FreeNode(pNode);
end;
inherited Delete(Hash(AKey)); inherited Delete(Hash(AKey));
end; end;
@ -197,6 +454,7 @@ begin
Result := ''; Result := '';
if ValidCursor(True) then if ValidCursor(True) then
begin begin
Result := HashCursor^.Key;
{ {
pKey := GetNodeInternal(Cursor); pKey := GetNodeInternal(Cursor);
Result := pKey^; Result := pKey^;
@ -205,36 +463,56 @@ begin
end; end;
procedure TX2UtCustomHash.InitNode;
var
pData: PString;
begin
inherited;
{
pData := GetNodeInternal(ANode);
Initialize(pData^);
}
end;
procedure TX2UtCustomHash.FreeNode; procedure TX2UtCustomHash.FreeNode;
var var
pData: PString; pData: PX2UtHashItem;
pNext: PX2UtHashItem;
begin begin
{ pData := PX2UtHashList(GetNodeData(ANode))^.Root;
pData := GetNodeInternal(ANode); while Assigned(pData) do
Finalize(pData^); begin
} pNext := pData^.Next;
FreeHashItem(pData);
pData := pNext;
end;
inherited; inherited;
end; end;
procedure TX2UtCustomHash.InitHashItem;
begin
Assert(HashDataSize > 0, RSInvalidDataSize);
GetMem(AItem, HashTotalSize);
FillChar(AItem^, HashTotalSize, #0);
end;
procedure TX2UtCustomHash.FreeHashItem;
begin
if Assigned(AItem^.Prev) then
AItem^.Prev^.Next := AItem^.Next;
if Assigned(AItem^.Next) then
AItem^.Next^.Prev := AItem^.Prev;
FreeMem(AItem, HashTotalSize);
ClearCursor();
AItem := nil;
end;
function TX2UtCustomHash.GetHashTotalSize;
begin
Result := FHashItemSize + FHashDataSize;
end;
{============================== TX2UtHash {============================== TX2UtHash
Item Management Item Management
========================================} ========================================}
(*
constructor TX2UtHash.Create; constructor TX2UtHash.Create;
begin begin
inherited; inherited;
@ -268,6 +546,7 @@ begin
if ValidCursor(True) then if ValidCursor(True) then
Result := PPointer(GetNodeData(Cursor))^; Result := PPointer(GetNodeData(Cursor))^;
end; end;
*)
{======================== TX2UtStringHash {======================== TX2UtStringHash
@ -277,47 +556,50 @@ constructor TX2UtStringHash.Create;
begin begin
inherited; inherited;
DataSize := SizeOf(PString); HashDataSize := SizeOf(PString);
end; end;
function TX2UtStringHash.GetItem; function TX2UtStringHash.GetItem;
var var
pNode: PX2UtBTreeNode; pNode: PX2UtBTreeNode;
pItem: PX2UtHashItem;
begin begin
pNode := LookupNode(Key); pItem := LookupItem(Key, pNode);
if Assigned(pNode) then if Assigned(pItem) then
Result := PString(GetNodeData(pNode))^; Result := PString(GetItemData(pItem))^;
end; end;
procedure TX2UtStringHash.SetItem; procedure TX2UtStringHash.SetItem;
var var
pNode: PX2UtBTreeNode; pNode: PX2UtBTreeNode;
pItem: PX2UtHashItem;
begin begin
pNode := LookupNode(Key, True); Assert(Length(Key) > 0, RSEmptyKey);
if Assigned(pNode) then pItem := LookupItem(Key, pNode, True);
PString(GetNodeData(pNode))^ := Value; if Assigned(pItem) then
PString(GetItemData(pItem))^ := Value;
end; end;
procedure TX2UtStringHash.InitNode; procedure TX2UtStringHash.InitHashItem;
var var
pData: PString; pData: PString;
begin begin
inherited; inherited;
pData := GetNodeData(ANode); pData := GetItemData(AItem);
Initialize(pData^); Initialize(pData^);
end; end;
procedure TX2UtStringHash.FreeNode; procedure TX2UtStringHash.FreeHashItem;
var var
pData: PString; pData: PString;
begin begin
pData := GetNodeData(ANode); pData := GetItemData(AItem);
Finalize(pData^); Finalize(pData^);
inherited; inherited;
@ -330,7 +612,7 @@ var
begin begin
if ValidCursor() then if ValidCursor() then
Result := PString(GetNodeData(Cursor))^; Result := PString(GetItemData(HashCursor))^;
end; end;
end. end.