From c3d3707cec366704a90803a093d10fdb5df6abdc Mon Sep 17 00:00:00 2001 From: Pavel Kovalenko Date: Fri, 17 Oct 2014 12:45:19 +0400 Subject: [PATCH] Delete ElPack demos, BPLs and uninstall tool. --- .../ElPack/BCBDemos/CheckCombo/CheckCombo.bpr | 176 - .../ElPack/BCBDemos/CheckCombo/CheckCombo.cpp | 20 - .../ElPack/BCBDemos/CheckCombo/CheckCombo.res | Bin 876 -> 0 bytes .../ElPack/BCBDemos/CheckCombo/Unit1.dfm | Bin 2392 -> 0 bytes .../ElPack/BCBDemos/CheckCombo/Unit1.pas | 170 - .../ElPack/BCBDemos/DskBrows/DskBrows.res | Bin 876 -> 0 bytes .../ElPack/BCBDemos/DskBrows/DskBrowser.bpr | 179 - .../ElPack/BCBDemos/DskBrows/DskBrowser.cpp | 23 - .../ElPack/BCBDemos/DskBrows/DskBrowser.res | Bin 876 -> 0 bytes .../ElPack/BCBDemos/DskBrows/frmMain.cpp | 338 -- .../ElPack/BCBDemos/DskBrows/frmMain.dfm | Bin 3189 -> 0 bytes .../ElPack/BCBDemos/DskBrows/frmMain.h | 76 - .../ElPack/BCBDemos/DskBrows/frmMain.pas | 342 -- .../ElPack/BCBDemos/DskBrows/frmSeach.dfm | Bin 813 -> 0 bytes .../ElPack/BCBDemos/DskBrows/frmSeach.pas | 40 - .../ElPack/BCBDemos/DskBrows/frmSearch.cpp | 23 - .../ElPack/BCBDemos/DskBrows/frmSearch.dfm | Bin 748 -> 0 bytes .../ElPack/BCBDemos/DskBrows/frmSearch.h | 28 - .../ElPack/BCBDemos/DskBrows/frmSelForm.dfm | Bin 358 -> 0 bytes .../ElPack/BCBDemos/DskBrows/frmSelForm.pas | 26 - .../ElPack/BCBDemos/ElAppBar/ElAppBarDemo.bpr | 159 - .../ElPack/BCBDemos/ElAppBar/ElAppBarDemo.cpp | 24 - .../ElPack/BCBDemos/ElAppBar/ElAppBarDemo.res | Bin 876 -> 0 bytes .../ElPack/BCBDemos/ElAppBar/frmMain.dfm | Bin 14555 -> 0 bytes .../ElPack/BCBDemos/ElAppBar/frmMain.pas | 137 - .../ElPack/BCBDemos/ElAppBar/frmOpts.dfm | Bin 10118 -> 0 bytes .../ElPack/BCBDemos/ElAppBar/frmOpts.pas | 39 - .../ElPack/BCBDemos/ElKeeper/ABOUT.PAS | 63 - .../ElPack/BCBDemos/ElKeeper/ABOUT.dfm | Bin 4449 -> 0 bytes .../ElPack/BCBDemos/ElKeeper/Clip.res | Bin 168 -> 0 bytes .../ElPack/BCBDemos/ElKeeper/Cryptcon.pas | 637 --- .../ElPack/BCBDemos/ElKeeper/Cryptdef.inc | 44 - .../ElPack/BCBDemos/ElKeeper/DEFINE.INC | 2 - .../ElPack/BCBDemos/ElKeeper/ElAES.pas | 2478 --------- .../ElPack/BCBDemos/ElKeeper/ElKeeper.bpr | 125 - .../ElPack/BCBDemos/ElKeeper/ElKeeper.cpp | 37 - .../ElPack/BCBDemos/ElKeeper/ElKeeper.dpr | 47 - .../ElPack/BCBDemos/ElKeeper/ElKeeper.res | Bin 1688 -> 0 bytes .../ElPack/BCBDemos/ElKeeper/EntryData.pas | 380 -- .../ElPack/BCBDemos/ElKeeper/FrmOpts.dfm | Bin 4170 -> 0 bytes .../ElPack/BCBDemos/ElKeeper/FrmOpts.pas | 100 - .../ElPack/BCBDemos/ElKeeper/IDEAUnit.pas | 418 -- .../ElPack/BCBDemos/ElKeeper/KeeperOpts.pas | 65 - .../ElPack/BCBDemos/ElKeeper/KeyGen.pas | 120 - .../ElPack/BCBDemos/ElKeeper/LOGOSTRS.RES | Bin 564 -> 0 bytes .../ElPack/BCBDemos/ElKeeper/LogoMain.dfm | Bin 43747 -> 0 bytes .../ElPack/BCBDemos/ElKeeper/LogoMain.pas | 2136 -------- .../ElPack/BCBDemos/ElKeeper/LogoStrs.pas | 20 - .../ElPack/BCBDemos/ElKeeper/OLEDROP.PAS | 291 - .../ElPack/BCBDemos/ElKeeper/PswRec.res | Bin 876 -> 0 bytes .../BCBDemos/ElKeeper/frmFolderProp.dfm | Bin 1328 -> 0 bytes .../BCBDemos/ElKeeper/frmFolderProp.pas | 31 - .../ElPack/BCBDemos/ElKeeper/frmPassword.dfm | Bin 1692 -> 0 bytes .../ElPack/BCBDemos/ElKeeper/frmPassword.pas | 40 - .../ElPack/BCBDemos/ElKeeper/frmPswGen.dfm | Bin 3971 -> 0 bytes .../ElPack/BCBDemos/ElKeeper/frmPswGen.pas | 115 - .../BCBDemos/ElKeeper/frmQuickAccess.dfm | Bin 5318 -> 0 bytes .../BCBDemos/ElKeeper/frmQuickAccess.pas | 409 -- .../ElPack/BCBDemos/ElKeeper/frmRecProp.dfm | Bin 10667 -> 0 bytes .../ElPack/BCBDemos/ElKeeper/frmRecProp.pas | 393 -- .../ElPack/BCBDemos/ElKeeper/hexeditor.dcr | Bin 876 -> 0 bytes .../ElPack/BCBDemos/ElKeeper/hexeditor.pas | 4663 ----------------- .../ElPack/BCBDemos/ElKeeper/md5unit.pas | 498 -- .../ElPack/BCBDemos/ElKeeper/readme.txt | 10 - .../ElPack/BCBDemos/GridDemo/GridDemo.bpr | 161 - .../ElPack/BCBDemos/GridDemo/GridDemo.cpp | 22 - .../ElPack/BCBDemos/GridDemo/GridDemo.res | Bin 876 -> 0 bytes .../ElPack/BCBDemos/GridDemo/Main.dfm | Bin 1407 -> 0 bytes .../ElPack/BCBDemos/GridDemo/Main.pas | 176 - .../ElPack/BCBDemos/IniEdit/ElIniEdit.res | Bin 1640 -> 0 bytes .../ElPack/BCBDemos/IniEdit/INITIPS.RES | Bin 1308 -> 0 bytes .../ElPack/BCBDemos/IniEdit/IniEdit.bpr | 159 - .../ElPack/BCBDemos/IniEdit/IniEdit.cpp | 23 - .../ElPack/BCBDemos/IniEdit/IniEdit.res | Bin 876 -> 0 bytes .../ElPack/BCBDemos/IniEdit/IniEdits.res | Bin 1356 -> 0 bytes .../ElPack/BCBDemos/IniEdit/IniOpts.pas | 140 - .../ElPack/BCBDemos/IniEdit/IniStrings.pas | 14 - .../ElPack/BCBDemos/IniEdit/Main.dfm | Bin 27398 -> 0 bytes .../ElPack/BCBDemos/IniEdit/Main.pas | 1641 ------ .../ElPack/BCBDemos/IniEdit/frmMstrEdit.dfm | Bin 6318 -> 0 bytes .../ElPack/BCBDemos/IniEdit/frmMstrEdit.pas | 28 - .../ElPack/BCBDemos/OwnerDraw/OwnerDraw.bpr | 183 - .../ElPack/BCBDemos/OwnerDraw/OwnerDraw.cpp | 20 - .../ElPack/BCBDemos/OwnerDraw/OwnerDraw.res | Bin 876 -> 0 bytes .../ElPack/BCBDemos/OwnerDraw/Unit1.dfm | Bin 4385 -> 0 bytes .../ElPack/BCBDemos/OwnerDraw/Unit1.pas | 72 - .../ElPack/BCBDemos/Pinger/About.dfm | Bin 3748 -> 0 bytes .../ElPack/BCBDemos/Pinger/About.pas | 29 - .../ElPack/BCBDemos/Pinger/ElPinger.bpr | 159 - .../ElPack/BCBDemos/Pinger/ElPinger.cpp | 32 - .../ElPack/BCBDemos/Pinger/ElPinger.res | Bin 1596 -> 0 bytes .../ElPack/BCBDemos/Pinger/ICMP.pas | 438 -- .../ElPack/BCBDemos/Pinger/MAIN.PAS | 339 -- .../ElPack/BCBDemos/Pinger/MAIN.dfm | Bin 2883 -> 0 bytes .../ElPack/BCBDemos/Pinger/PingThread.pas | 57 - .../ElPack/BCBDemos/Pinger/SiteMan.pas | 149 - .../ElPack/BCBDemos/Pinger/frmList.dfm | Bin 1109 -> 0 bytes .../ElPack/BCBDemos/Pinger/frmList.pas | 41 - .../ElPack/BCBDemos/Pinger/frmProp.dfm | Bin 4004 -> 0 bytes .../ElPack/BCBDemos/Pinger/frmProp.pas | 52 - .../ElPack/BCBDemos/ShapedForm/LockerDemo.bpr | 158 - .../ElPack/BCBDemos/ShapedForm/LockerDemo.cpp | 21 - .../ElPack/BCBDemos/ShapedForm/LockerDemo.res | Bin 876 -> 0 bytes .../ElPack/BCBDemos/ShapedForm/LockerForm.dfm | Bin 16409 -> 0 bytes .../ElPack/BCBDemos/ShapedForm/LockerForm.pas | 76 - .../ElPack/BCBDemos/ShapedForm/readme.txt | 8 - .../ElPack/BCBDemos/TrayDays/CalOptions.pas | 50 - .../ElPack/BCBDemos/TrayDays/FONT.RES | Bin 1532 -> 0 bytes .../ElPack/BCBDemos/TrayDays/Fake.pas | 353 -- .../ElPack/BCBDemos/TrayDays/KILLDATE.RES | Bin 272 -> 0 bytes .../ElPack/BCBDemos/TrayDays/TrayDays.bpr | 192 - .../ElPack/BCBDemos/TrayDays/TrayDays.cpp | 32 - .../ElPack/BCBDemos/TrayDays/TrayDays.res | Bin 876 -> 0 bytes .../ElPack/BCBDemos/TrayDays/frmCalConfig.dfm | Bin 6699 -> 0 bytes .../ElPack/BCBDemos/TrayDays/frmCalConfig.pas | 219 - .../ElPack/BCBDemos/TrayDays/frmCalend.dfm | Bin 4967 -> 0 bytes .../ElPack/BCBDemos/TrayDays/frmCalend.pas | 273 - .../ElPack/BCBDemos/TrayDays/frmDateProp.dfm | Bin 2312 -> 0 bytes .../ElPack/BCBDemos/TrayDays/frmDateProp.pas | 51 - .../BCBDemos/TrayDays/frmHolidayProp.dfm | Bin 3333 -> 0 bytes .../BCBDemos/TrayDays/frmHolidayProp.pas | 93 - .../ElPack/BCBDemos/TrayDays/readme.txt | 4 - sdk/components/ElPack/bpl/elpackB6.BPL | Bin 2233856 -> 0 bytes sdk/components/ElPack/bpl/elpkdbB6.BPL | Bin 216576 -> 0 bytes sdk/components/ElPack/bpl/elpproB6.BPL | Bin 214016 -> 0 bytes sdk/components/ElPack/tools/uninst.exe | Bin 79872 -> 0 bytes 126 files changed, 20387 deletions(-) delete mode 100644 sdk/components/ElPack/BCBDemos/CheckCombo/CheckCombo.bpr delete mode 100644 sdk/components/ElPack/BCBDemos/CheckCombo/CheckCombo.cpp delete mode 100644 sdk/components/ElPack/BCBDemos/CheckCombo/CheckCombo.res delete mode 100644 sdk/components/ElPack/BCBDemos/CheckCombo/Unit1.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/CheckCombo/Unit1.pas delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/DskBrows.res delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/DskBrowser.bpr delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/DskBrowser.cpp delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/DskBrowser.res delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/frmMain.cpp delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/frmMain.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/frmMain.h delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/frmMain.pas delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/frmSeach.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/frmSeach.pas delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/frmSearch.cpp delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/frmSearch.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/frmSearch.h delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/frmSelForm.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/DskBrows/frmSelForm.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElAppBar/ElAppBarDemo.bpr delete mode 100644 sdk/components/ElPack/BCBDemos/ElAppBar/ElAppBarDemo.cpp delete mode 100644 sdk/components/ElPack/BCBDemos/ElAppBar/ElAppBarDemo.res delete mode 100644 sdk/components/ElPack/BCBDemos/ElAppBar/frmMain.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/ElAppBar/frmMain.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElAppBar/frmOpts.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/ElAppBar/frmOpts.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/ABOUT.PAS delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/ABOUT.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/Clip.res delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/Cryptcon.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/Cryptdef.inc delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/DEFINE.INC delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/ElAES.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.bpr delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.cpp delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.dpr delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.res delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/EntryData.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/FrmOpts.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/FrmOpts.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/IDEAUnit.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/KeeperOpts.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/KeyGen.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/LOGOSTRS.RES delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/LogoMain.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/LogoMain.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/LogoStrs.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/OLEDROP.PAS delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/PswRec.res delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/frmFolderProp.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/frmFolderProp.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/frmPassword.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/frmPassword.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/frmPswGen.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/frmPswGen.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/frmQuickAccess.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/frmQuickAccess.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/frmRecProp.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/frmRecProp.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/hexeditor.dcr delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/hexeditor.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/md5unit.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ElKeeper/readme.txt delete mode 100644 sdk/components/ElPack/BCBDemos/GridDemo/GridDemo.bpr delete mode 100644 sdk/components/ElPack/BCBDemos/GridDemo/GridDemo.cpp delete mode 100644 sdk/components/ElPack/BCBDemos/GridDemo/GridDemo.res delete mode 100644 sdk/components/ElPack/BCBDemos/GridDemo/Main.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/GridDemo/Main.pas delete mode 100644 sdk/components/ElPack/BCBDemos/IniEdit/ElIniEdit.res delete mode 100644 sdk/components/ElPack/BCBDemos/IniEdit/INITIPS.RES delete mode 100644 sdk/components/ElPack/BCBDemos/IniEdit/IniEdit.bpr delete mode 100644 sdk/components/ElPack/BCBDemos/IniEdit/IniEdit.cpp delete mode 100644 sdk/components/ElPack/BCBDemos/IniEdit/IniEdit.res delete mode 100644 sdk/components/ElPack/BCBDemos/IniEdit/IniEdits.res delete mode 100644 sdk/components/ElPack/BCBDemos/IniEdit/IniOpts.pas delete mode 100644 sdk/components/ElPack/BCBDemos/IniEdit/IniStrings.pas delete mode 100644 sdk/components/ElPack/BCBDemos/IniEdit/Main.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/IniEdit/Main.pas delete mode 100644 sdk/components/ElPack/BCBDemos/IniEdit/frmMstrEdit.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/IniEdit/frmMstrEdit.pas delete mode 100644 sdk/components/ElPack/BCBDemos/OwnerDraw/OwnerDraw.bpr delete mode 100644 sdk/components/ElPack/BCBDemos/OwnerDraw/OwnerDraw.cpp delete mode 100644 sdk/components/ElPack/BCBDemos/OwnerDraw/OwnerDraw.res delete mode 100644 sdk/components/ElPack/BCBDemos/OwnerDraw/Unit1.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/OwnerDraw/Unit1.pas delete mode 100644 sdk/components/ElPack/BCBDemos/Pinger/About.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/Pinger/About.pas delete mode 100644 sdk/components/ElPack/BCBDemos/Pinger/ElPinger.bpr delete mode 100644 sdk/components/ElPack/BCBDemos/Pinger/ElPinger.cpp delete mode 100644 sdk/components/ElPack/BCBDemos/Pinger/ElPinger.res delete mode 100644 sdk/components/ElPack/BCBDemos/Pinger/ICMP.pas delete mode 100644 sdk/components/ElPack/BCBDemos/Pinger/MAIN.PAS delete mode 100644 sdk/components/ElPack/BCBDemos/Pinger/MAIN.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/Pinger/PingThread.pas delete mode 100644 sdk/components/ElPack/BCBDemos/Pinger/SiteMan.pas delete mode 100644 sdk/components/ElPack/BCBDemos/Pinger/frmList.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/Pinger/frmList.pas delete mode 100644 sdk/components/ElPack/BCBDemos/Pinger/frmProp.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/Pinger/frmProp.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ShapedForm/LockerDemo.bpr delete mode 100644 sdk/components/ElPack/BCBDemos/ShapedForm/LockerDemo.cpp delete mode 100644 sdk/components/ElPack/BCBDemos/ShapedForm/LockerDemo.res delete mode 100644 sdk/components/ElPack/BCBDemos/ShapedForm/LockerForm.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/ShapedForm/LockerForm.pas delete mode 100644 sdk/components/ElPack/BCBDemos/ShapedForm/readme.txt delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/CalOptions.pas delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/FONT.RES delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/Fake.pas delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/KILLDATE.RES delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/TrayDays.bpr delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/TrayDays.cpp delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/TrayDays.res delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/frmCalConfig.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/frmCalConfig.pas delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/frmCalend.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/frmCalend.pas delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/frmDateProp.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/frmDateProp.pas delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/frmHolidayProp.dfm delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/frmHolidayProp.pas delete mode 100644 sdk/components/ElPack/BCBDemos/TrayDays/readme.txt delete mode 100644 sdk/components/ElPack/bpl/elpackB6.BPL delete mode 100644 sdk/components/ElPack/bpl/elpkdbB6.BPL delete mode 100644 sdk/components/ElPack/bpl/elpproB6.BPL delete mode 100644 sdk/components/ElPack/tools/uninst.exe diff --git a/sdk/components/ElPack/BCBDemos/CheckCombo/CheckCombo.bpr b/sdk/components/ElPack/BCBDemos/CheckCombo/CheckCombo.bpr deleted file mode 100644 index a7981a1c41a..00000000000 --- a/sdk/components/ElPack/BCBDemos/CheckCombo/CheckCombo.bpr +++ /dev/null @@ -1,176 +0,0 @@ -# --------------------------------------------------------------------------- -!if !$d(BCB) -BCB = $(MAKEDIR)\.. -!endif - -# --------------------------------------------------------------------------- -# IDE SECTION -# --------------------------------------------------------------------------- -# The following section of the project makefile is managed by the BCB IDE. -# It is recommended to use the IDE to change any of the values in this -# section. -# --------------------------------------------------------------------------- - -VERSION = BCB.03 -# --------------------------------------------------------------------------- -PROJECT = CheckCombo.exe -OBJFILES = Unit1.obj CheckCombo.obj -RESFILES = -DEFFILE = -RESDEPEN = $(RESFILES) Unit1.dfm -LIBFILES = -LIBRARIES = VCL35.lib -SPARELIBS = VCL35.lib -PACKAGES = -# --------------------------------------------------------------------------- -PATHCPP = .; -PATHASM = .; -PATHPAS = .; -PATHRC = .; -DEBUGLIBPATH = $(BCB)\lib\debug -RELEASELIBPATH = $(BCB)\lib\release -# --------------------------------------------------------------------------- -CFLAG1 = -O2 -Hc -w -Ve -k- -vi -c -b- -w-par -w-inl -Vx -tW -CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl \ - -H=$(BCB)\lib\vcl35.csm -CFLAG3 = -Tkh30000 -PFLAGS = -U$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ - -I$(BCB)\include;$(BCB)\include\vcl -$L- -$D- -v \ - -JPHN -M -RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl -AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 \ - /zn /d_RTLDLL /dUSEPACKAGES -LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ - -aa -Tpe -x -Gn -IFLAGS = -# --------------------------------------------------------------------------- -ALLOBJ = c0w32.obj sysinit.obj $(OBJFILES) -ALLRES = $(RESFILES) -ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib -# --------------------------------------------------------------------------- -!ifdef IDEOPTIONS - -[Version Info] -IncludeVerInfo=0 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1049 -CodePage=1251 - -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= - -[HistoryLists\hlIncludePath] -Count=1 -Item0=$(BCB)\include;$(BCB)\include\vcl;E:\projects\ElPack\Code\Source - -[HistoryLists\hlLibraryPath] -Count=2 -Item0=..\..\elpack\lib;$(BCB)\lib\obj;$(BCB)\lib;E:\projects\ElPack\Code\Source -Item1=..\..\elpack\lib;$(BCB)\lib\obj;$(BCB)\lib - -[HistoryLists\hlDebugSourcePath] -Count=2 -Item0=$(BCB)\source\vcl;E:\projects\ElPack\Code\Source -Item1=$(BCB)\source\vcl - -[Debugging] -DebugSourceDirs=$(BCB)\source\vcl;E:\projects\ElPack\Code\Source - -[Parameters] -RunParams= -HostApplication= - -!endif - -# --------------------------------------------------------------------------- -# MAKE SECTION -# --------------------------------------------------------------------------- -# This section of the project file is not used by the BCB IDE. It is for -# the benefit of building from the command-line using the MAKE utility. -# --------------------------------------------------------------------------- - -.autodepend -# --------------------------------------------------------------------------- -!if !$d(BCC32) -BCC32 = bcc32 -!endif - -!if !$d(DCC32) -DCC32 = dcc32 -!endif - -!if !$d(TASM32) -TASM32 = tasm32 -!endif - -!if !$d(LINKER) -LINKER = ilink32 -!endif - -!if !$d(BRCC32) -BRCC32 = brcc32 -!endif -# --------------------------------------------------------------------------- -!if $d(PATHCPP) -.PATH.CPP = $(PATHCPP) -.PATH.C = $(PATHCPP) -!endif - -!if $d(PATHPAS) -.PATH.PAS = $(PATHPAS) -!endif - -!if $d(PATHASM) -.PATH.ASM = $(PATHASM) -!endif - -!if $d(PATHRC) -.PATH.RC = $(PATHRC) -!endif -# --------------------------------------------------------------------------- -$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) - $(BCB)\BIN\$(LINKER) @&&! - $(LFLAGS) + - $(ALLOBJ), + - $(PROJECT),, + - $(ALLLIB), + - $(DEFFILE), + - $(ALLRES) -! -# --------------------------------------------------------------------------- -.pas.hpp: - $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } - -.pas.obj: - $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } - -.cpp.obj: - $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } - -.c.obj: - $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } - -.asm.obj: - $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ - -.rc.res: - $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< -# --------------------------------------------------------------------------- diff --git a/sdk/components/ElPack/BCBDemos/CheckCombo/CheckCombo.cpp b/sdk/components/ElPack/BCBDemos/CheckCombo/CheckCombo.cpp deleted file mode 100644 index 6a810670b1f..00000000000 --- a/sdk/components/ElPack/BCBDemos/CheckCombo/CheckCombo.cpp +++ /dev/null @@ -1,20 +0,0 @@ -//--------------------------------------------------------------------------- -#include -#pragma hdrstop -USEFORMNS("Unit1.pas", Unit1, Form1); -//--------------------------------------------------------------------------- -WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) -{ - try - { - Application->Initialize(); - Application->CreateForm(__classid(TForm1), &Form1); - Application->Run(); - } - catch (Exception &exception) - { - Application->ShowException(&exception); - } - return 0; -} -//--------------------------------------------------------------------------- diff --git a/sdk/components/ElPack/BCBDemos/CheckCombo/CheckCombo.res b/sdk/components/ElPack/BCBDemos/CheckCombo/CheckCombo.res deleted file mode 100644 index 292d56b51aaf9a05d912978e3494a04232358d6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmah|F>c#H5FCaA=)wqHxJhM}Df0sBnX(-4cBp4U?b?1`eE2N5r4dLoRR^~Px3PIVc(@kO@aRfaL zVka6YWMW7hB!AcNa5O<0lA{STVA5JcYtaClot0fWY#}-gDxJd`tWHB204H&hSiODd z)LbDiiq`3gN`vxb@jD*$wk)%GS?f{1OuOu6U*Cq(SspGpno)X()EOqTlL+LF?M-wxj6j7<4Jj zuES-emmD{ucl(cdcxWFgJA1rQMkw9)#+ch}X!6E4IsXtcYk=ur;DUz@2L{ZA{#&Fs z5cc$u-Xr4^BmXkrG>qHWH|8-g<|$;nV4R)<_(B@<5kK%1SNKVO!!_dp$M-^RgNG=Z L{E}NCx5&dYYvc|{ diff --git a/sdk/components/ElPack/BCBDemos/CheckCombo/Unit1.dfm b/sdk/components/ElPack/BCBDemos/CheckCombo/Unit1.dfm deleted file mode 100644 index 2039f73de85137d94d0b44f4f8c41d967870d977..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2392 zcmcguyKf^!7#~04U9atn^Ux^=2z=7%kU)x(6e#7b9UDhypQG$vQo`8&94}eVSTp0Z zeV_+@L zWG7!u6XG6Kc2aJIi{9=^FeYozQHeiE!sY$MTd|c>udTX?%~+}m-dR`0KQKzPuRP9D zTcs|v&YOHxcvvX$UXyFG4LzQ%aHh6PT`D9fWA&h1v7gr5_exd!*eSbKsO3HvMz-aj zdaTWdE{s$rP(;gIrvvT@?LjJ6cM1+=vfzO5I-$R##y(_7s==Ht9~!2{uBqISHv(TC zfjDHXZv1^q&m7H}BZgb{T>+2`2EEgGu+cb)_L-gSvzjUmghY(#mN$$OvEkr1)JYoCIi82h>dT^8TFqD3umZP zj};WgmtOehxdk&&R#3f%?-b_Mx0lHUC-QP&Vuq7xZvH#U$I&LHD8K&hG8vC#;pZiy zjEc!3N-K7^@dp(?qTw*_bo7g|SLF~e> z=u;r})i2tYkO%l){T_?$qx`G;#GarHxv>vyKKd~c)9VI|9(0InU^*o=-U9hKSWE}i z6yPTaZs)hxP%{67i_S|vzg{O41+^b`Z9U%~i9LH0!R;jX?0tMMQKkWEpM8{nfnRO+ zeP++DBCmZHz#&hz7OM5Br@9`i!87nptL8D7ma2e}!A%=RUpn0P+W9&kNT>+xP+_@G z=Ndx>x*QMdRGz0+E-oHjTv$g`;JxW?X0C-n)1;!&@9RDSW=1zH><@z;lW9vchdp`* z(!8VT8qiJ{Jf`Vzq1UD|Bu&JoAPMw^bpE^+?^gt{G@da9ttRz0TD z_m-JV!*`i(A$*q^yb!*tC!SCP>U(M&oTia_=0D*KtOnCzppVGN>K;7f8Z2mAMp{b) zl90Pmw?1TjpSB>VV?{p7&htShH-d3RpAI%q*->RS=#jMsD?$gesL=;ObvHI%op-&Z h%s1ExB5qR!#~`uY8?Ve;FY3a-q%Xsthb;`GzX7WWi=+Sm diff --git a/sdk/components/ElPack/BCBDemos/CheckCombo/Unit1.pas b/sdk/components/ElPack/BCBDemos/CheckCombo/Unit1.pas deleted file mode 100644 index 65fe9157e05..00000000000 --- a/sdk/components/ElPack/BCBDemos/CheckCombo/Unit1.pas +++ /dev/null @@ -1,170 +0,0 @@ -unit Unit1; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - ElTree, ElTools, StdCtrls, ElHeader, ElVCLUtils, ElTreeComboBox, - ElXPThemedControl, ElUxTheme, ElTmSchema; - -type - TForm1 = class(TForm) - Tree: TElTree; - InplaceCombo: TElTreeInplaceComboBox; - procedure FormShow(Sender: TObject); - procedure TreeItemDraw(Sender: TObject; Item: TElTreeItem; - Surface: TCanvas; R: TRect; SectionIndex: Integer); - procedure TreeClick(Sender: TObject); - procedure InplaceComboValidateResult(Sender: TObject; - var InputValid: Boolean); - procedure InplaceComboBeforeOperation(Sender: TObject; - var DefaultConversion: Boolean); - private - - public - { Public declarations } - end; - -var - Form1: TForm1; - -const EnumData : array[0..4] of string = ('1', '2', '3', '4','5'); - -type - PDataRec = ^TDataRec; - TDataRec = record - Checked : boolean; - ComboIdx : integer; - end; - -var DataRec : TDataRec; - -implementation - -{$R *.DFM} - -procedure TForm1.FormShow(Sender: TObject); -var TI : TElTreeItem; - CS : TElCellStyle; -begin - TI := Tree.Items[0]; - TI.UseStyles := true; - CS := TI.AddStyle; - CS.OwnerProps := true; - CS.Style := elhsOwnerDraw; - CS.CellType := sftEnum; - CS := TI.AddStyle; - CS.OwnerProps := true; - CS.Style := elhsOwnerDraw; - TI.Data := @DataRec; - DataRec.Checked := false; - DataRec.ComboIdx := 0; -end; - -procedure TForm1.TreeItemDraw(Sender: TObject; Item: TElTreeItem; - Surface: TCanvas; R: TRect; SectionIndex: Integer); -var R1 : TRect; - sid: integer; - ATheme: HTheme; -const CheckStates : array[boolean] of integer = (0, DFCS_CHECKED); -begin - Surface.Brush.Style := bsClear; - if SectionIndex = 1 then - begin - if Tree.IsThemeApplied then - begin - ATheme := OpenThemeData(Handle, 'COMBOBOX'); - if ATheme <> 0 then - begin - Dec(R.Right, 16); - DrawText(Surface.Handle, Pchar(EnumData[PDataRec(Item.Data).ComboIdx]), -1, R, DT_LEFT or DT_SINGLELINE or DT_VCENTER); - R.Left := R.Right; - R.Right := R.Right + 16; - - if PDataRec(Item.Data).Checked then - sid := CBS_CHECKEDNORMAL - else - sid := CBS_UNCHECKEDNORMAL; - DrawThemeBackground(ATheme, Surface.Handle, CP_DROPDOWNBUTTON, CBXS_NORMAL, R, @R); - CloseThemeData(ATheme); - exit; - end - end; - Dec(R.Right, 10); - DrawText(Surface.Handle, Pchar(EnumData[PDataRec(Item.Data).ComboIdx]), -1, R, DT_LEFT or DT_SINGLELINE or DT_VCENTER); - R.Left := R.Right; - R.Right := R.Right + 10; - - ElVCLUtils.DrawArrow(Surface, eadDown, R, clWindowText, true); - end else - if SectionIndex = 2 then - begin - ElTools.CenterRects(14, R.Right - R.Left, 14, R.Bottom - R.Top, R1); - OffsetRect(R1, R.Left, R.Top); - if Tree.IsThemeApplied then - begin - ATheme := OpenThemeData(Handle, 'BUTTON'); - if ATheme <> 0 then - begin - if PDataRec(Item.Data).Checked then - sid := CBS_CHECKEDNORMAL - else - sid := CBS_UNCHECKEDNORMAL; - DrawThemeBackground(ATheme, Surface.Handle, BP_CHECKBOX, sid, R1, @R); - CloseThemeData(ATheme); - exit; - end - end; - DrawFrameControl(Surface.Handle, R1, DFC_BUTTON, DFCS_BUTTONCHECK or CheckStates[PDataRec(Item.Data).Checked]); - end; -end; - -procedure TForm1.TreeClick(Sender: TObject); -var HS : integer; - Item : TElTreeItem; - ItemPart: TSTItemPart; - P : TPoint; - Data : PDataRec; -begin - GetCursorPos(P); - P := Tree.ScreenToClient(P); - Item := Tree.GetItemAt(P.x, P.Y, ItemPart, HS); - if HS = 2 then - begin - Data := PDataRec(Item.Data); - Data.Checked := not Data.Checked; - Item.RedrawItemPart(true, Tree.HeaderSections[HS].Left, Tree.HeaderSections[HS].Right); - end else - if HS = 1 then - begin - if P.X > Tree.HeaderSections[HS].Right -10 then - Tree.EditItem(Item, HS); - end; -end; - -procedure TForm1.InplaceComboValidateResult(Sender: TObject; - var InputValid: Boolean); -var comboBox : TCombobox; -begin - ComboBox := InplaceCombo.Editor; - if ComboBox.ItemIndex >= 0 then - PDataRec(InplaceCombo.Item.Data).ComboIdx := ComboBox.ItemIndex - else - InputValid := false; -end; - -procedure TForm1.InplaceComboBeforeOperation(Sender: TObject; - var DefaultConversion: Boolean); -var comboBox : TCombobox; - i : integer; -begin - ComboBox := InplaceCombo.Editor; - Combobox.Style := csDropDownList; - Combobox.Items.Clear; - for i := 0 to 4 do - Combobox.Items.Add(EnumData[i]); - ComboBox.ItemIndex := PDataRec(InplaceCombo.Item.Data).ComboIdx; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/DskBrows/DskBrows.res b/sdk/components/ElPack/BCBDemos/DskBrows/DskBrows.res deleted file mode 100644 index b369156c076dbea4fc87e1cdb77a4e86205ae2cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmb7@u}Z{15QhI;0_pS$8!J;<`UWa4?24$bVsWr#rdYUz6Y@B*%%fOZT3&Im{+n!a z2_A@({F#}2GqcOW0zgHDFo@y8zE&g8S(Ei_y}m5QqH6{fbw_1Lzu9xz1mFvi!STzG z5_DZh5H}HB7#zRDz5?oZTH|)KZ!1=6PixFm+qT~C{eH$tCvHAkO*(P6b9%vzRtxU6 z-da9szA;Mo>y?Loedkksx$oCEM(Yr5;z}#4HulJs+HM>st|MnY_OpJ;)snM*!Q*^w zX8m!#O!J*%zrm3kr<^cP`*+SO;u)8M82te^jwXeG77w5?G%1AXKX|O3_osX~Kj$Rn zp`Y)4%1g^r^qxB#IAE;>-p1??AE(TeGd`t~|Ieu_>Q=C-yI;yfhoe3jA5e!205? -#pragma hdrstop -USERES("DskBrows.res"); -USEFORM("frmMain.cpp", MainForm); -USEFORM("frmSearch.cpp", SearchForm); -//--------------------------------------------------------------------------- -WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) -{ - try - { - Application->Initialize(); - Application->CreateForm(__classid(TMainForm), &MainForm); - Application->CreateForm(__classid(TSearchForm), &SearchForm); - Application->Run(); - } - catch (Exception &exception) - { - Application->ShowException(&exception); - } - return 0; -} -//--------------------------------------------------------------------------- diff --git a/sdk/components/ElPack/BCBDemos/DskBrows/DskBrowser.res b/sdk/components/ElPack/BCBDemos/DskBrows/DskBrowser.res deleted file mode 100644 index 1993f343f7b84bfed123b1bae240a4257a9cb511..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmah|F>c#H5FCaA=pqPJxJf0IDf0ssz1^AJyMhM*Q_>hmE??p4!%6q)@vJr;e;%DoU$~f(bJ9a! zX3zV`0KUjF7x?9p%uv@g1v!KS;{w0#TvB|4M6s|VTs=sO%%*)IC_43V7u!c1K}Unw ziCPM&7-9#>|7+NuO^}B8Y{DEEHP+Br)BtCvMVs_nh)#n_7O)1Z(@+G!MHI(YZ?>&k zC}erwI6YQLP+Z*oj(WW*igZy_deE>=M9N(wI;9fp56MPx3o%8BaLB7jhdsOs6Az JE94e=_zP!^4dVa+ diff --git a/sdk/components/ElPack/BCBDemos/DskBrows/frmMain.cpp b/sdk/components/ElPack/BCBDemos/DskBrows/frmMain.cpp deleted file mode 100644 index 0d3970be10b..00000000000 --- a/sdk/components/ElPack/BCBDemos/DskBrows/frmMain.cpp +++ /dev/null @@ -1,338 +0,0 @@ -//--------------------------------------------------------------------------- - -#include -#include -#include -#pragma hdrstop - -#include "frmMain.h" -//--------------------------------------------------------------------------- -#pragma package(smart_init) -#pragma link "ElTree" -#pragma link "ElXPThemedControl" -#pragma resource "*.dfm" -TMainForm *MainForm; -//--------------------------------------------------------------------------- -__fastcall TMainForm::TMainForm(TComponent* Owner) - : TForm(Owner) -{ -} -//--------------------------------------------------------------------------- -TCursor __fastcall TElDragObject::GetDragCursor(bool Accepted, int X, int Y) { - - if (typeid(Control) == typeid(TElTree)) { - if (((dynamic_cast< TElTree* >(Control))->GetItemAtY(Y) != NULL) || - (Accepted)) { - return (dynamic_cast< TElTree* >(Control))->DragCursor; - } - else { - return crNoDrop; - } - } - else { - return TDragControlObject::GetDragCursor(Accepted,X,Y); - } -} - -//--------------------------------------------------------------------------- -void __fastcall TMainForm::ExitBtnClick(TObject *Sender) -{ - MainForm->Close(); -} -//--------------------------------------------------------------------------- - -void __fastcall TMainForm::FormCreate(TObject *Sender) -{ - LastSelected = NULL; - Hash = new TElHashList(); - Tree->IsUpdating = true; - FillRoots(); - Tree->IsUpdating = false; - Tree->DragImageMode = dimNever; -} -//--------------------------------------------------------------------------- - -void __fastcall TMainForm::FullPathCBClick(TObject *Sender) -{ - Tree->HeaderSections->Item[0]->Visible = FullPathCB->Checked; -} -//--------------------------------------------------------------------------- - -void __fastcall TMainForm::TreeCompareItems(TObject *Sender, - TElTreeItem *Item1, TElTreeItem *Item2, int &res) -{ - AnsiString S1, S2; - - S1 = ""; - S2 = ""; - try { - if (Item1->ColumnText->Count > 0) { S1 = Item1->ColumnText->Strings[0]; } - } - catch (Exception &exception) { } - - try { - if (Item2->ColumnText->Count > 0) { S2 = Item2->ColumnText->Strings[0]; } - } - catch (Exception &exception) { } - - if (Item1->Bold) { - if (Item2->Bold) { - res = AnsiCompareText(S1, S2); - } - else { - res = -1; - } - } - else { - if (Item2->Bold) { - res = 1; - } - else { - res = AnsiCompareText(S1, S2); - } - } -} -//--------------------------------------------------------------------------- - -void __fastcall TMainForm::TreeDragDrop(TObject *Sender, TObject *Source, - int X, int Y) -{ - MessageBox(0, "Sorry, but moving a file is not implemented", "ElPack Demo", 0); -} -//--------------------------------------------------------------------------- - -void __fastcall TMainForm::TreeDragOver(TObject *Sender, TObject *Source, - int X, int Y, TDragState State, bool &Accept) -{ - TElTreeItem* TSI; - Accept = false; - if (typeid(Source) != typeid(TElDragObject)) { return; } - - TSI = dynamic_cast< TElTree* >(dynamic_cast(Source)->Control)->GetItemAtY(Y); - if ((TSI != NULL) && (!(TSI->IsUnder(ItemDragging))) ) { - Accept = true; - } -} -//--------------------------------------------------------------------------- - -void __fastcall TMainForm::TreeHeaderColumnClick(TObject *Sender, - int SectionIndex) -{ - - Tree->SortSection = SectionIndex; - switch ( SectionIndex ) { - case 0 : Tree->SortType = Eltree::stText; break; - case 1 : Tree->SortType = Eltree::stCustom; break; - case 2 : Tree->SortType = Eltree::stNumber; break; - case 3 : Tree->SortType = Eltree::stDate; break; - case 4 : Tree->SortType = Eltree::stTime; break; - } - if ((Tree->HeaderSections->Item[SectionIndex])->SortMode == hsmAscend) { - (Tree->HeaderSections->Item[SectionIndex])->SortMode = hsmDescend; - } - else { - (Tree->HeaderSections->Item[SectionIndex])->SortMode = hsmAscend; - } - if (LastSelected != NULL) { - LastSelected->Sort(false); - } - else { - Tree->Sort(false); - } -} -//--------------------------------------------------------------------------- - -void __fastcall TMainForm::TreeItemCollapse(TObject *Sender, - TElTreeItem *Item) -{ - Tree->IsUpdating = true; - Item->Clear(); - LastSelected = Item->Parent; - Tree->IsUpdating = false; -} -//--------------------------------------------------------------------------- - -void __fastcall TMainForm::TreeItemExpand(TObject *Sender, - TElTreeItem *Item) -{ - - Tree->IsUpdating = true; - FillTree(Item, Item->ColumnText->Strings[0]); - LastSelected = Item; - Tree->IsUpdating = false; -} -//--------------------------------------------------------------------------- - -void __fastcall TMainForm::TreeItemExpanding(TObject *Sender, - TElTreeItem *Item, bool &CanProcess) -{ - -TSearchRec SRec; - AnsiString s; - - s = Item->ColumnText->Strings[0]; -// if (s[s.Length()] != '\\') { s = s + '\\'; } - if (AnsiLastChar(s) != "\\") { s = s + "\\"; } - s = s + "*.*"; -// FillChar(SRec, sizeof(SRec), #0); - CanProcess = (FindFirst(s, faAnyFile, SRec) == 0); - FindClose(SRec); - -} -//--------------------------------------------------------------------------- - -void __fastcall TMainForm::TreeKeyUp(TObject *Sender, WORD &Key, - TShiftState Shift) -{ - if (Key == VK_DELETE) { - MessageBox(0, "Sorry, but deleting a file is not implemented", - "ElPack Demo", 0); - } -} -//--------------------------------------------------------------------------- - -void __fastcall TMainForm::TreeStartDrag(TObject *Sender, - TDragObject *&DragObject) -{ - ItemDragging = Tree->ItemFocused; - DragObject = new TElDragObject(Tree); - -} -//--------------------------------------------------------------------------- - -void __fastcall TMainForm::TreeValidateInplaceEdit(TObject *Sender, - TElTreeItem *Item, TElHeaderSection *Section, AnsiString &Text, - bool &Accept) -{ - - MessageBox(0, "Sorry, renaming a file is not implemented","ElPack Demo", 0); - Accept = false; - -} -//--------------------------------------------------------------------------- - -void __fastcall TMainForm::FillTree(TElTreeItem* Item, AnsiString Path) { - - TSearchRec SRec; - TElTreeItem* TSI; - bool b; - AnsiString s, FName; - int hn; - HICON IconHandle; - char* p; - TSHFileInfo SHFI; - TIcon* Icon ; - - - s = Path; - - if (*(s.AnsiLastChar()) != '\\') { s = s + "\\"; } - b = (FindFirst(s+"*.*", faAnyFile, SRec) == 0); - while (b) { - if ( (strcmp(SRec.FindData.cFileName,".") != 0) && - (strcmp(SRec.FindData.cFileName,"..") != 0) ) { - TSI = Tree->Items->AddItem(Item); - TSI->Text = SRec.FindData.cFileName; - FName = s + SRec.FindData.cFileName; - TSI->ColumnText->Add(FName); - TSI->ColumnText->Add(IntToStr(SRec.Size)); - TSI->ColumnText->Add(DateToStr(FileDateToDateTime(SRec.Time))); - TSI->ColumnText->Add(TimeToStr(FileDateToDateTime(SRec.Time))); - if ((faDirectory & SRec.Attr)>0) { - TSI->ParentStyle = false; - TSI->Bold = true; - TSI->ForceButtons = true; - } - if ((faHidden & SRec.Attr)>0) { - TSI->ParentStyle = false; - TSI->Italic = true; - TSI->ParentColors = false; - TSI->Color = clGray; - TSI->BkColor = Tree->BkColor; - TSI->UseBkColor = false; - } - if ((FILE_ATTRIBUTE_COMPRESSED & SRec.FindData.dwFileAttributes) > 0) { - TSI->ParentColors = false; - TSI->Color = clBlue; - TSI->BkColor = Tree->BkColor; - TSI->UseBkColor = false; - } -// GetMem(p, 260); - p = (char *) malloc(260); - StrPCopy(p, FName); - SHGetFileInfo(p, 0, &SHFI, sizeof(SHFI), 0x400 | 0x200 | 0x100 | 4 | 1); - IconHandle = SHFI.hIcon; - if (IconHandle != 0) { - hn = Hash->GetIndex(SHFI.szTypeName); - if ((hn == -1) || - (strcmp(SHFI.szTypeName,"Application")==0) || - (strcmp(SHFI.szTypeName,"Icon")==0)) { - Icon = new TIcon(); - Icon->Handle = IconHandle; - TSI->ImageIndex = Images->AddIcon(Icon); - Hash->AddItem(SHFI.szTypeName, &(TSI->ImageIndex)); - } - else { - TSI->ImageIndex = *((int *) Hash->GetByIndex(hn)); - } - TSI->StateImageIndex = TSI->ImageIndex; - } - free(p); - } - b = (FindNext(SRec) == 0); - } - FindClose(SRec); -} - - -void __fastcall TMainForm::FillRoots() -{ - TElTreeItem* TSI; - DWORD DrivesMask; - AnsiString s; - TIcon* Icon; - HICON IconHandle; - char* p; - TSHFileInfo SHFI; - - DrivesMask = GetLogicalDrives(); - for (int i=0; i < 25; i++ ) { - if (((DrivesMask >> i) % 2) == 1) { - - s = char(i+65); - s = s+":"; - TSI = Tree->Items->AddItem(NULL); - TSI->ParentStyle = false; - TSI->Bold = true; - TSI->ColumnText->Add(s+"\\"); - TSI->ForceButtons = true; -// GetMem(p, 260); - p = (char *) malloc(260); - StrPCopy(p, s+"\\"); - SHGetFileInfo(p, 0, &SHFI, sizeof(SHFI), 0x400 | 0x200 | 0x100 | 4 | 1); - IconHandle = SHFI.hIcon; - if ( IconHandle != 0 ) { - Icon = new TIcon(); - Icon->Handle = IconHandle; - TSI->ImageIndex = Images->AddIcon(Icon); - TSI->StateImageIndex = TSI->ImageIndex; -// Icon->Free; - } - free(p); - if (strlen(SHFI.szDisplayName)>0) { - s = StrPas(SHFI.szDisplayName); - } - TSI->Text = s; - } - } -} - - -void __fastcall TMainForm::TreeShowLineHint(TObject *Sender, - TElTreeItem *Item, TElFString &Text, THintWindow *HintWindow, - tagPOINT &MousePos, bool &DoShowHint) -{ - Text = Item->ColumnText->Strings[0]; -} -//--------------------------------------------------------------------------- - diff --git a/sdk/components/ElPack/BCBDemos/DskBrows/frmMain.dfm b/sdk/components/ElPack/BCBDemos/DskBrows/frmMain.dfm deleted file mode 100644 index 3649b01768f02f6efc40f92f61d27c8e19065be2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3189 zcmcf@%Wm67kfdyp)LU@_G?zjJiWa>X?x{iBq>*K*5@JQN$vC|=D{3t*yxJv}E6dKo zK>G!~^dIso{geJc&h8ACl$AsXdZ`JJ+<9=`oSEB_6%N~j7roKx&^l;LDwY+Fdk20v zBuwd}|jwOO=43ex#1*IazXD!GMls!q9WaYMAJmc!k$7b!+Dn9W2EK6{Dr5 zYPZeVOt`y*gO0s6Uyn&!*7$`TT=DNV{Q zog`?52k%qNVi67?-G|qq)LJgA>X96Xn3IThr%Ze0BSmIy&gF_u{SpG1Uq$c>pe8=TX@|BAS%GFId*Q+uPe+%d!BrEGR|*ZvnJzcue8OtMLsyY-{oM@d={g7)j)_ zExQGvxl)Q{Jw0gYITh7XE4?Ok#@0Zqg+JmCPeOd{n;QQy=QPCqKIEeW64BdMO!OSI zZCsmX+IRu&kBt5gxPxZ?`Q#+UTmQ3}7&iQ`w_9k;HWqd>3-dtorzf@pIOiTL46ws( zjp3&({ORWt8^gJK4;Df#{s#;DAH*>HYi#cTu6Pd?hU~*Em(2f^_J#-9`BTH9vB~rC z$Y^em^TAQyz-<{Hn-a4jQtv}s?K7cA0xed4y)PAe19lO9%mhvRM}T-^`qv>*>1WBl zY0cFyw$Tok(1r!pkW>9?8^gImRHq*IWVF0~G9;E1ErsPsg z{pPyukK!1|CiTk5ZnP!7mw)Tm@N`Vcxe1<^Qck7RemRgzXFb@lKMORBoNJTjyfgb= zNG2m(S{#`0WD;nYht)HxfH%+Lmk8zt=2=9gX|G57{YTqa@nl86^$zMo8_eR3FWFnK!Rreug=_7PyBnGgLnJMhnkmnAr86rqY7YetLlXFac z^J^w%ZZqdF0s#dw(qv#AL0F88O$;z}nl6GU(JqX=HS(NVx+?;yJy38M{8B)1w7hHnDfRS4s&jw&*&K z*4ye1esEVVwhO-C6601fNhxGme%P7Q=;Babm2j$#VW@Tv&BExV>-6JHN#S=Z*V0^T zNvpYao{!@@ea>26{Z4GAa_y6G?K|Vs+jKuIe99;HYtt3()D+w^mN4ig-dbNJlbR_j dg=vpDW{J+a4E&gw(X{jU#?yJ~=>g8Xe*vbgwch{$ diff --git a/sdk/components/ElPack/BCBDemos/DskBrows/frmMain.h b/sdk/components/ElPack/BCBDemos/DskBrows/frmMain.h deleted file mode 100644 index 45549ca012f..00000000000 --- a/sdk/components/ElPack/BCBDemos/DskBrows/frmMain.h +++ /dev/null @@ -1,76 +0,0 @@ -//--------------------------------------------------------------------------- - -#ifndef frmMainH -#define frmMainH -//--------------------------------------------------------------------------- -#include -#include -#include -#include -#include "ElTree.hpp" -#include -#include -#include "ElXPThemedControl.h" -#include -#include "ElHashList.hpp" -//--------------------------------------------------------------------------- -using namespace std; - -class TMainForm : public TForm -{ -__published: // IDE-managed Components - TElTree *Tree; - TButton *Button1; - TButton *ExitBtn; - TImageList *Images; - TCheckBox *FullPathCB; - void __fastcall ExitBtnClick(TObject *Sender); - void __fastcall FormCreate(TObject *Sender); - void __fastcall FullPathCBClick(TObject *Sender); - void __fastcall TreeCompareItems(TObject *Sender, - TElTreeItem *Item1, TElTreeItem *Item2, int &res); - void __fastcall TreeDragDrop(TObject *Sender, TObject *Source, - int X, int Y); - void __fastcall TreeDragOver(TObject *Sender, TObject *Source, - int X, int Y, TDragState State, bool &Accept); - void __fastcall TreeHeaderColumnClick(TObject *Sender, - int SectionIndex); - void __fastcall TreeItemCollapse(TObject *Sender, - TElTreeItem *Item); - void __fastcall TreeItemExpand(TObject *Sender, TElTreeItem *Item); - void __fastcall TreeItemExpanding(TObject *Sender, - TElTreeItem *Item, bool &CanProcess); - void __fastcall TreeKeyUp(TObject *Sender, WORD &Key, - TShiftState Shift); - void __fastcall TreeStartDrag(TObject *Sender, - TDragObject *&DragObject); - void __fastcall TreeValidateInplaceEdit(TObject *Sender, - TElTreeItem *Item, TElHeaderSection *Section, AnsiString &Text, - bool &Accept); - void __fastcall TreeShowLineHint(TObject *Sender, TElTreeItem *Item, - TElFString &Text, THintWindow *HintWindow, tagPOINT &MousePos, - bool &DoShowHint); -private: // User declarations - TElTreeItem* LastSelected; - TElTreeItem* ItemDragging; - TElHashList* Hash; - -public: // User declarations - __fastcall TMainForm(TComponent* Owner); - void __fastcall FillRoots(); - void __fastcall FillTree(TElTreeItem* Item, AnsiString Path); - -}; - -class TElDragObject : public TDragControlObject { - protected: - TCursor __fastcall GetDragCursor(bool Accepted, int X, int Y); - public: - __fastcall TElDragObject(TControl* AControl) : TDragControlObject(AControl) { } - -}; - -//--------------------------------------------------------------------------- -extern PACKAGE TMainForm *MainForm; -//--------------------------------------------------------------------------- -#endif diff --git a/sdk/components/ElPack/BCBDemos/DskBrows/frmMain.pas b/sdk/components/ElPack/BCBDemos/DskBrows/frmMain.pas deleted file mode 100644 index 5abdaf5521b..00000000000 --- a/sdk/components/ElPack/BCBDemos/DskBrows/frmMain.pas +++ /dev/null @@ -1,342 +0,0 @@ -{$Q-} -{$RANGECHECKS OFF} -unit frmMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, ElTree, ElHashList, ShellApi, ElStrUtils, - {$IFDEF VER120} - ImgList, - {$ENDIF} - ElHeader, ElXPThemedControl; - -type - TMainForm = class(TForm) - Tree: TElTree; - ExitBtn: TButton; - FullPathCB: TCheckBox; - Images: TImageList; - Button1: TButton; - procedure ExitBtnClick(Sender: TObject); - procedure FullPathCBClick(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure TreeItemExpand(Sender: TObject; Item: TElTreeItem); - procedure TreeItemCollapse(Sender: TObject; Item: TElTreeItem); - procedure TreeItemExpanding(Sender: TObject; Item: TElTreeItem; - var CanProcess: Boolean); - procedure TreeHeaderColumnClick(Sender: TObject; - SectionIndex: Integer); - procedure TreeCompareItems(Sender: TObject; Item1, Item2: TElTreeItem; - var res: Integer); - procedure TreeStartDrag(Sender: TObject; var DragObject: TDragObject); - procedure TreeDragOver(Sender, Source: TObject; X, Y: Integer; - State: TDragState; var Accept: Boolean); - procedure TreeDragDrop(Sender, Source: TObject; X, Y: Integer); - procedure TreeKeyUp(Sender: TObject; var Key: Word; - Shift: TShiftState); - procedure TreeValidateInplaceEdit(Sender: TObject; Item: TElTreeItem; Section : TElHeaderSection; - var Text: String; var Accept: Boolean); - procedure Button1Click(Sender: TObject); - procedure TreeShowLineHint(Sender: TObject; Item: TElTreeItem; - var Text: TElFString; HintWindow: THintWindow; MousePos: TPoint; - var DoShowHint: Boolean); - private - LastSelected, ItemDragging : TElTreeItem; - Hash : TElHashList; - { Private declarations } - public - { Public declarations } - procedure FillRoots; - procedure FillTree(Item:TElTreeItem; Path : string); - end; - -var - MainForm: TMainForm; - -type TElDragObject = class (TDragControlObject) - function GetDragCursor(Accepted: Boolean; X, Y: Integer): TCursor; override; - end; - -implementation - -{$R *.DFM} - -procedure TMainForm.ExitBtnClick(Sender: TObject); -begin - Close; -end; - -procedure TMainForm.FillTree; -var SRec : TSearchRec; - TSI : TElTreeItem; - b : boolean; - s, FName : string; - hn : integer; - Icon : TIcon; - IconHandle : HICON; - p : pchar; - SHFI : TSHFileInfo; - -begin - s:=Path; - if s[length(s)]<>'\' then s:=s+'\'; - b:=(FindFirst(s+'*.*', faAnyFile, SRec) = 0); - while b do - begin - if (strcomp(SRec.FindData.cFileName,'.')<>0) and (strcomp(SRec.FindData.cFileName,'..')<>0) then - begin - TSI:=Tree.Items.AddItem(Item); - TSI.Text:=SRec.FindData.cFileName; - FName := s+ SRec.FindData.cFileName; - //hn:=TSI.Parent.ChildrenCount; - TSI.ColumnText.Add(FName); - TSI.ColumnText.Add(IntToStr(SRec.Size)); - TSI.ColumnText.Add(DateToStr(FileDateToDateTime(SRec.Time))); - TSI.ColumnText.Add(TimeToStr(FileDateToDateTime(SRec.Time))); - if (faDirectory AND SRec.Attr)>0 then - begin - TSI.ParentStyle := false; - TSI.Bold := true; - TSI.ForceButtons:=true; - end; - if (faHidden AND SRec.Attr)>0 then - begin - TSI.ParentStyle := false; - TSI.Italic := true; - TSI.ParentColors:=false; - TSI.Color := clGray; - TSI.BkColor := Tree.BkColor; - TSI.UseBkColor := false; - end; - if (FILE_ATTRIBUTE_COMPRESSED AND SRec.FindData.dwFileAttributes) >0 then - begin - TSI.ParentColors:=false; - TSI.Color := clBlue; - TSI.BkColor := Tree.BkColor; - end; - GetMem(p, 260); - StrPCopy(p, FName); - SHGetFileInfo(p, 0, SHFI, SizeOf(SHFI), $400 or $200 or $100 or 4 or 1); - IconHandle:=SHFI.hIcon; - if IconHandle<>0 then - begin - hn := Hash.GetIndex(SHFI.szTypeName); - if (hn = -1) or (strcomp(SHFI.szTypeName,'Application')=0) or (strcomp(SHFI.szTypeName,'Icon')=0) then - begin - Icon:=TIcon.Create; - Icon.Handle:=IconHandle; - TSI.ImageIndex:=Images.AddIcon(Icon); - Icon.Free; - Hash.AddItem(SHFI.szTypeName, pointer (TSI.ImageIndex)); - end else TSI.ImageIndex:=integer(Hash.GetByIndex(hn)); - TSI.StateImageIndex:=TSI.ImageIndex; - end; - FreeMem(p); - end; - b:=(FindNext(SRec) = 0); - end; - FindClose(SRec); -end; - -procedure TMainForm.FillRoots; -var TSI : TElTreeItem; - DrivesMask : DWORD; - i : integer; - s : string; - Icon : TIcon; - IconHandle : HICON; - p : pchar; - SHFI : TSHFileInfo; - -begin - DrivesMask := GetLogicalDrives; - for I:=0 to 25 do - begin - if ((DrivesMask shr i) mod 2) = 1 then - begin - s:=chr(i+65)+':'; - TSI:=Tree.Items.AddItem(nil); - TSI.ParentStyle:=false; - TSI.Bold:=true; - TSI.ColumnText.Add(s+'\'); - TSI.ForceButtons := true; - GetMem(p, 260); - StrPCopy(p, s+'\'); - SHGetFileInfo(p, 0, SHFI, SizeOf(SHFI), $400 or $200 or $100 or 4 or 1); - IconHandle:=SHFI.hIcon; - if IconHandle<>0 then - begin - Icon:=TIcon.Create; - Icon.Handle:=IconHandle; - TSI.ImageIndex:=Images.AddIcon(Icon); - TSI.StateImageIndex:=TSI.ImageIndex; - Icon.Free; - end; - FreeMem(p); - if strlen(SHFI.szDisplayName)>0 then s := StrPas(SHFI.szDisplayName); - TSI.Text := s; - end; - end; -end; - -procedure TMainForm.FullPathCBClick(Sender: TObject); -begin - Tree.HeaderSections.Item[0].Visible:=FullPathCB.Checked; -end; - -procedure TMainForm.FormCreate(Sender: TObject); -begin - LastSelected := nil; - Hash := TElHashList.Create; - Tree.IsUpdating:=true; - FillRoots; - Tree.IsUpdating:=false; - Tree.DragImageMode := dimNever; -end; - -procedure TMainForm.TreeItemExpand(Sender: TObject; Item: TElTreeItem); -begin - Tree.IsUpdating:=true; - FillTree(Item, Item.ColumnText[0]); - LastSelected:=Item; - Tree.IsUpdating:=false; -end; - -procedure TMainForm.TreeItemCollapse(Sender: TObject; Item: TElTreeItem); -begin - Tree.IsUpdating:=true; - Item.Clear; - LastSelected:=Item.Parent; - Tree.IsUpdating:=false; -end; - -procedure TMainForm.TreeItemExpanding(Sender: TObject; Item: TElTreeItem; - var CanProcess: Boolean); - -var SRec : TSearchRec; - s : string; - -begin -// Tree.HeaderSections.SectionsOrder := 'i0:w100:vf;i1:w120:vt;i4:w60:vt;i3:w80:vt;i2:w80:vt'; - s:=Item.ColumnText[0]; - if s[length(s)]<>'\' then s:=s+'\'; - s:=s+'*.*'; - FillChar(SRec, sizeof(SRec), #0); - CanProcess:=(FindFirst(s, faAnyFile, SRec) = 0); - FindClose(SRec); -end; - -procedure TMainForm.TreeHeaderColumnClick(Sender: TObject; - SectionIndex: Integer); -begin - Tree.SortSection:=SectionIndex; - case SectionIndex of - 0: Tree.SortType := stText; - 1: Tree.SortType := stCustom; - 2: Tree.SortType := stNumber; - 3: Tree.SortType := stDate; - 4: Tree.SortType := stTime; - end; - if Tree.HeaderSections[SectionIndex].SortMode=hsmAscend then - Tree.HeaderSections[SectionIndex].SortMode:=hsmDescend else - Tree.HeaderSections[SectionIndex].SortMode:=hsmAscend; - if LastSelected <> nil then LastSelected.Sort(false) else Tree.Sort(false); -end; - -procedure TMainForm.TreeCompareItems(Sender: TObject; Item1, - Item2: TElTreeItem; var res: Integer); -var S1, S2 : string; -begin - S1 := ''; - S2 := ''; - try - if Item1.ColumnText.Count>0 then S1:=Item1.ColumnText[0]; - except - on E:Exception do ; - end; - try - if Item2.ColumnText.Count>0 then S2:=Item2.ColumnText[0]; - except - on E:Exception do ; - end; - If Item1.Bold then - begin - if Item2.Bold then - begin - res:=AnsiCompareText(S1, S2); - end else res:=-1; - end else - if item2.Bold then res:=1 else - begin - res:=AnsiCompareText(S1, S2); - end; -end; - -procedure TMainForm.TreeStartDrag(Sender: TObject; - var DragObject: TDragObject); -begin - ItemDragging := Tree.ItemFocused; - DragObject:=TElDragObject.Create(Tree); -end; - -procedure TMainForm.TreeDragOver(Sender, Source: TObject; X, Y: Integer; - State: TDragState; var Accept: Boolean); -var TSI:TElTreeItem; -begin - Accept:=false; - if not (Source is TElDragObject) then exit; - TSI := ((Source as TElDragObject).Control as TElTree).GetItemAtY(Y); - if (TSI<>nil) and (not TSI.IsUnder(ItemDragging)) then - Accept:=true; -end; - -function TElDragObject.GetDragCursor(Accepted: Boolean; X, Y: Integer): TCursor; -begin - if Control is TElTree then - begin - if ((Control as TElTree).GetItemAtY(Y)<>nil) or (Accepted) then - Result := (Control as TElTree).DragCursor else - Result := crNoDrop; - end else result:=inherited GetDragCursor(Accepted,X,Y); -end; - - -procedure TMainForm.TreeDragDrop(Sender, Source: TObject; X, Y: Integer); -begin - MessageBox(0, 'Sorry, but moving a file is not implemented','ElPack Demo', 0); -end; - -procedure TMainForm.TreeKeyUp(Sender: TObject; var Key: Word; - Shift: TShiftState); -begin - if Key = VK_DELETE then MessageBox(0, 'Sorry, but deleting a file is not implemented','ElPack Demo', 0); -end; - -procedure TMainForm.TreeValidateInplaceEdit(Sender: TObject; - Item: TElTreeItem; Section : TElHeaderSection; var Text: String; var Accept: Boolean); -begin - MessageBox(0, 'Sorry, renaming a file is not implemented','ElPack Demo', 0); - Accept:=false; -end; - -procedure TMainForm.Button1Click(Sender: TObject); -begin -(* - if SearchForm = nil then - SearchForm := TSearchForm.Create(nil); - SearchForm.Show; - SearchForm.BringToFront; -*) -end; - -procedure TMainForm.TreeShowLineHint(Sender: TObject; Item: TElTreeItem; - var Text: TElFString; HintWindow: THintWindow; MousePos: TPoint; - var DoShowHint: Boolean); -begin - Text:=Item.ColumnText[0]; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/DskBrows/frmSeach.dfm b/sdk/components/ElPack/BCBDemos/DskBrows/frmSeach.dfm deleted file mode 100644 index d07debdd56ff22e940649475dccd3a5e309d8810..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmbVKPjAyO6nB#}Nz(q{ydhW5o|}ZQMSL}66cU~0vC3((gx z&5h4qMbuLG#AdT(1;Vb+H+2xht#TM{6T`qZg>mkNJ5-c^1@}JA%O*~+RytU70T;!q z*TFtl1q3DKQSH!iQA8jSG$9Tf?GTk5G^i2Ern&Fr55@N<#TWNFZEY?~R&$+!Hb}?j zMxxaFo9v>s{|~Z$4d}Rf&Rj-YIFFXkY!dU{w=(5f6yme2cj z?aq_57;Cj1tG%4@0=;X5&8c+18j4Gbn#;SQXIu3XT2-^QHBJyn=dBFdnHYv?^@$$2 gc>6ytI*syk_t_-l=$7J1b$J+Z@rb-bTIDnR2GF_ndjJ3c diff --git a/sdk/components/ElPack/BCBDemos/DskBrows/frmSeach.pas b/sdk/components/ElPack/BCBDemos/DskBrows/frmSeach.pas deleted file mode 100644 index b33a0c923b4..00000000000 --- a/sdk/components/ElPack/BCBDemos/DskBrows/frmSeach.pas +++ /dev/null @@ -1,40 +0,0 @@ -unit frmSeach; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, - Dialogs, ElTree, StdCtrls; - -type - TSearchForm = class(TForm) - SearchBtn: TButton; - CloseBtn: TButton; - Label1: TLabel; - FieldCombo: TComboBox; - ActionCombo: TComboBox; - DataEdit: TEdit; - procedure CloseBtnClick(Sender: TObject); - private - { Private declarations } - public - Tree : TElTree; - end; - -var - SearchForm: TSearchForm; - -implementation - -{$R *.DFM} - -procedure TSearchForm.CloseBtnClick(Sender: TObject); -begin - Close; -end; - -initialization - SearchForm := nil; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/DskBrows/frmSearch.cpp b/sdk/components/ElPack/BCBDemos/DskBrows/frmSearch.cpp deleted file mode 100644 index 40bc7d91bdd..00000000000 --- a/sdk/components/ElPack/BCBDemos/DskBrows/frmSearch.cpp +++ /dev/null @@ -1,23 +0,0 @@ -//--------------------------------------------------------------------------- - -#include -#pragma hdrstop - -#include "frmSearch.h" -//--------------------------------------------------------------------------- -#pragma package(smart_init) -#pragma resource "*.dfm" - -TSearchForm *SearchForm; -//--------------------------------------------------------------------------- -__fastcall TSearchForm::TSearchForm(TComponent* Owner) - : TForm(Owner) -{ -} -//--------------------------------------------------------------------------- -void __fastcall TSearchForm::CloseBtnClick(TObject *Sender) -{ - SearchForm->Close(); -} -//--------------------------------------------------------------------------- - diff --git a/sdk/components/ElPack/BCBDemos/DskBrows/frmSearch.dfm b/sdk/components/ElPack/BCBDemos/DskBrows/frmSearch.dfm deleted file mode 100644 index fb7788297ab59a6228d8cc60d3c89623804a1302..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 748 zcmaKq!A{#i6h&WbV>=EOY`UN;uMm|gM0edLCRPxEM43S>+ll>xM@(kWcq#%Pz?#3~ z6Z!?+A<@`Qa3~cUYo12;+;{KzB>+nL-AO!1Mw2r*+I_MB=r}p*P=ZXSd7|_@XpYVh zXU2|NHdQzFGi+V*%;ffOa0ke*a$`S$7qc6~m2@{$+li9qFwU7S(0Dt?{iJ&_q(9<8 zcS8C!sBe`}+S^XWC6}4HrMNJi>Y^rFf7;b_&gSTbXCxv_77;R=tO3(@sf=h>Nio&hF->NW{UuLoVI*MghNv!ZS$mcqKG*dd7ae)WLm#@)n zt_q9*+B8=4sp_dkkZ=@PHEn{U75Huq{uG=ToUd03%b_?VMss;pv|OhO=n#I7u5-)` zf=}6Wq%+jk@@X2oPB$%Ue&_f7W50%G18mWL#*M$UVdY_S?eRNIqjUf~+WTdUlI^;i zo{{yR@d$6)JY9$0du`L(uO$r*8k`@CWv&0x4pzJThvx2AiU!v5Mlu#Wz4pR2s~VRk Fe*sl}-}nFk diff --git a/sdk/components/ElPack/BCBDemos/DskBrows/frmSearch.h b/sdk/components/ElPack/BCBDemos/DskBrows/frmSearch.h deleted file mode 100644 index 0673a9894af..00000000000 --- a/sdk/components/ElPack/BCBDemos/DskBrows/frmSearch.h +++ /dev/null @@ -1,28 +0,0 @@ -//--------------------------------------------------------------------------- - -#ifndef SearchH -#define SearchH -//--------------------------------------------------------------------------- -#include -#include -#include -#include -//--------------------------------------------------------------------------- -class TSearchForm : public TForm -{ -__published: // IDE-managed Components - TLabel *Label1; - TComboBox *FieldCombo; - TComboBox *ActionCombo; - TEdit *DataEdit; - TButton *SearchBtn; - TButton *CloseBtn; - void __fastcall CloseBtnClick(TObject *Sender); -private: // User declarations -public: // User declarations - __fastcall TSearchForm(TComponent* Owner); -}; -//--------------------------------------------------------------------------- -extern PACKAGE TSearchForm *SearchForm; -//--------------------------------------------------------------------------- -#endif diff --git a/sdk/components/ElPack/BCBDemos/DskBrows/frmSelForm.dfm b/sdk/components/ElPack/BCBDemos/DskBrows/frmSelForm.dfm deleted file mode 100644 index 13ded2d17bd85aa8e06b53680a9e292c986e13e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmX|-T~32Q6oscC1^H2z&=r_&0Vt$Rs3n~-ebg!3!X(2?GfX0G$33_ZU)_h#%1`Tk zxw$zxC+EArE+RO|(%pWGmJeix5XsY}Loo1Es>Z(Tn+#6c{G6FYp3QIMMN*ZZuzu%Y zJI8j#D3_HT)3at$%i8e3~ws?W5Xcrh1J5Bzv zsfU7`b->#k)J7Dw@#+pimxus4Bx9|PWM}pLvuI>C(12_p>)Lkyk70$JRl;^CpLpC& Q4|@%B2tDqG9~r2hKfFwEE&u=k diff --git a/sdk/components/ElPack/BCBDemos/DskBrows/frmSelForm.pas b/sdk/components/ElPack/BCBDemos/DskBrows/frmSelForm.pas deleted file mode 100644 index 3c71b5dfc68..00000000000 --- a/sdk/components/ElPack/BCBDemos/DskBrows/frmSelForm.pas +++ /dev/null @@ -1,26 +0,0 @@ -unit frmSelForm; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls; - -type - TSelForm = class(TForm) - SelLB: TListBox; - private - { Private declarations } - public - { Public declarations } - end; - -var - SelForm: TSelForm; - -implementation - -{$R *.DFM} - -end. - diff --git a/sdk/components/ElPack/BCBDemos/ElAppBar/ElAppBarDemo.bpr b/sdk/components/ElPack/BCBDemos/ElAppBar/ElAppBarDemo.bpr deleted file mode 100644 index b37daa73e53..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElAppBar/ElAppBarDemo.bpr +++ /dev/null @@ -1,159 +0,0 @@ -# --------------------------------------------------------------------------- -!if !$d(BCB) -BCB = $(MAKEDIR)\.. -!endif - -# --------------------------------------------------------------------------- -# IDE SECTION -# --------------------------------------------------------------------------- -# The following section of the project makefile is managed by the BCB IDE. -# It is recommended to use the IDE to change any of the values in this -# section. -# --------------------------------------------------------------------------- - -VERSION = BCB.03 -# --------------------------------------------------------------------------- -PROJECT = ElAppBarDemo.exe -OBJFILES = frmMain.obj frmOpts.obj ElAppBarDemo.obj -RESFILES = ElAppBarDemo.res -DEFFILE = -RESDEPEN = $(RESFILES) frmMain.dfm frmOpts.dfm -LIBFILES = -LIBRARIES = -SPARELIBS = VCL35.lib -PACKAGES = -# --------------------------------------------------------------------------- -PATHCPP = .; -PATHASM = .; -PATHPAS = .; -PATHRC = .; -DEBUGLIBPATH = $(BCB)\lib\debug -RELEASELIBPATH = $(BCB)\lib\release -# --------------------------------------------------------------------------- -CFLAG1 = -Od -Hc -w -Ve -r- -k -y -v -vi- -c -b- -w-par -w-inl -Vx -tW -CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -D_RTLDLL;USEPACKAGES -H=$(BCB)\lib\vcl35.csm -CFLAG3 = -Tkh30000 -PFLAGS = -U$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ - -I$(BCB)\include;$(BCB)\include\vcl -D_RTLDLL;USEPACKAGES -$Y -$W -$O- -v -JPHN \ - -M -RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl -D_RTLDLL;USEPACKAGES -AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /d_RTLDLL /dUSEPACKAGES /mx /w2 /zd -LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpe -x -Gn -v -IFLAGS = -# --------------------------------------------------------------------------- -ALLOBJ = c0w32.obj $(PACKAGES) sysinit.obj $(OBJFILES) -ALLRES = $(RESFILES) -ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib -# --------------------------------------------------------------------------- -!ifdef IDEOPTIONS - -[Version Info] -IncludeVerInfo=0 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1049 -CodePage=1251 - -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= - -[Debugging] -DebugSourceDirs=$(BCB)\source\vcl - -[Parameters] -RunParams= -HostApplication= - -!endif - -# --------------------------------------------------------------------------- -# MAKE SECTION -# --------------------------------------------------------------------------- -# This section of the project file is not used by the BCB IDE. It is for -# the benefit of building from the command-line using the MAKE utility. -# --------------------------------------------------------------------------- - -.autodepend -# --------------------------------------------------------------------------- -!if !$d(BCC32) -BCC32 = bcc32 -!endif - -!if !$d(DCC32) -DCC32 = dcc32 -!endif - -!if !$d(TASM32) -TASM32 = tasm32 -!endif - -!if !$d(LINKER) -LINKER = ilink32 -!endif - -!if !$d(BRCC32) -BRCC32 = brcc32 -!endif -# --------------------------------------------------------------------------- -!if $d(PATHCPP) -.PATH.CPP = $(PATHCPP) -.PATH.C = $(PATHCPP) -!endif - -!if $d(PATHPAS) -.PATH.PAS = $(PATHPAS) -!endif - -!if $d(PATHASM) -.PATH.ASM = $(PATHASM) -!endif - -!if $d(PATHRC) -.PATH.RC = $(PATHRC) -!endif -# --------------------------------------------------------------------------- -$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) - $(BCB)\BIN\$(LINKER) @&&! - $(LFLAGS) + - $(ALLOBJ), + - $(PROJECT),, + - $(ALLLIB), + - $(DEFFILE), + - $(ALLRES) -! -# --------------------------------------------------------------------------- -.pas.hpp: - $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } - -.pas.obj: - $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } - -.cpp.obj: - $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } - -.c.obj: - $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } - -.asm.obj: - $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ - -.rc.res: - $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< -# --------------------------------------------------------------------------- diff --git a/sdk/components/ElPack/BCBDemos/ElAppBar/ElAppBarDemo.cpp b/sdk/components/ElPack/BCBDemos/ElAppBar/ElAppBarDemo.cpp deleted file mode 100644 index 65d4f0738d6..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElAppBar/ElAppBarDemo.cpp +++ /dev/null @@ -1,24 +0,0 @@ -//--------------------------------------------------------------------------- -#include -#pragma hdrstop -USERES("ElAppBarDemo.res"); -USEFORMNS("frmMain.pas", Frmmain, frmBar); -USEFORMNS("frmOpts.pas", Frmopts, OptionsForm); -//--------------------------------------------------------------------------- -WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) -{ - try - { - Application->Initialize(); - Application->Title = "ElAppBar Demo"; - Application->CreateForm(__classid(TfrmBar), &frmBar); - Application->CreateForm(__classid(TOptionsForm), &OptionsForm); - Application->Run(); - } - catch (Exception &exception) - { - Application->ShowException(&exception); - } - return 0; -} -//--------------------------------------------------------------------------- diff --git a/sdk/components/ElPack/BCBDemos/ElAppBar/ElAppBarDemo.res b/sdk/components/ElPack/BCBDemos/ElAppBar/ElAppBarDemo.res deleted file mode 100644 index b369156c076dbea4fc87e1cdb77a4e86205ae2cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 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 diff --git a/sdk/components/ElPack/BCBDemos/ElAppBar/frmMain.pas b/sdk/components/ElPack/BCBDemos/ElAppBar/frmMain.pas deleted file mode 100644 index 635eb1e53bb..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElAppBar/frmMain.pas +++ /dev/null @@ -1,137 +0,0 @@ -unit frmMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, ElACtrls, ElSpin, ExtCtrls, ElPanel, ElClock, ElBtnCtl, - ElPopBtn, ElAppBar, Menus, ElToolBar, ElXPThemedControl; - -type - TfrmBar = class(TElAppBar) - LeftImage: TImage; - TopImage: TImage; - PopupMenu1: TPopupMenu; - miExit: TMenuItem; - ElToolBar1: TElToolBar; - ElClock1: TElClock; - btnOptions: TElPopupButton; - procedure miExitClick(Sender: TObject); - procedure btnOptionsClick(Sender: TObject); - procedure FormCreate(Sender: TObject); - private - procedure EdgeChange(Sender : TObject); - protected - procedure CreateParams(var Params: TCreateParams); override; - procedure WMNcHitTest(var Msg : TWMNCHitTest); message WM_NCHITTEST; - public - end; - -var - frmBar: TfrmBar; - -implementation - -uses frmOpts; - -{$R *.DFM} - -procedure TfrmBar.WMNcHitTest(var Msg : TWMNCHitTest); -var p : TPoint; -begin - inherited; - p := ScreenToClient(SmallPointToPoint(Msg.Pos)); - if PtInRect(LeftImage.BoundsRect, p) or PtInRect(TopImage.BoundsRect, p) then - Msg.result := HTCaption; -end; - -procedure TfrmBar.EdgeChange; -begin - if Edge in [abeLeft, abeRight] then - begin - EltoolBar1.Orientation := eboVert; - LeftImage.Visible := false; - TopImage.Visible := true; - end else - begin - EltoolBar1.Orientation := eboHorz; - LeftImage.Visible := true; - TopImage.Visible := false; - end; -end; - -procedure TfrmBar.miExitClick(Sender: TObject); -begin - Close; -end; - -procedure TfrmBar.btnOptionsClick(Sender: TObject); -var aEdges : TAppBarFlags; -begin - with OptionsForm do - begin - LeftCB.Enabled := Edge <> abeLeft; - LeftCB.checked := abfAllowLeft in Flags; - - RightCB.Enabled := Edge <> abeRight; - RightCB.checked := abfAllowRight in Flags; - - TopCB.Enabled := Edge <> abeTop; - TopCB.checked := abfAllowTop in Flags; - - BottomCB.Enabled := Edge <> abeBottom; - BottomCB.Checked := abfAllowBottom in Flags; - - FloatingCB.Enabled := Edge <> abeFloat; - FloatingCB.Checked := abfAllowFloat in Flags; - - KeepSizeCB.Checked := KeepSize; - AutohideCB.Checked := AutoHide; - TopmostCB.Checked := AlwaysOnTop; - OnScreenCB.Checked := PreventOffScreen; - TaskBarCB.Checked := TaskEntry <> abtHide; - end; - if OptionsForm.ShowModal = mrOk then - with OptionsForm do - begin - aEdges := []; - - if LeftCB.Checked then include(aEdges, abfAllowLeft); - if RightCB.Checked then include(aEdges, abfAllowRight); - if TopCB.Checked then include(aEdges, abfAllowTop); - if BottomCB.Checked then include(aEdges, abfAllowBottom); - if FloatingCB.Checked then include(aEdges, abfAllowFloat); - - Flags := aEdges; - KeepSize := KeepSizeCB.Checked; - AutoHide := AutohideCB.Checked; - AlwaysOnTop := TopmostCB.Checked; - PreventOffScreen := OnScreenCB.Checked; - if TaskBarCB.Checked then TaskEntry := abtShow else TaskEntry := abtHide; - end; -end; - -procedure TfrmBar.FormCreate(Sender: TObject); -var r : TRect; - hb, vb : integer; -begin - OnEdgeChanged := EdgeChange; - hb := Width - ClientWidth; - vb := Height - ClientHeight; - r.Left := ElToolBar1.BtnWidth + ElToolBar1.BtnOffsHorz * 2 + hb; - r.Right := ElToolBar1.BtnWidth + ElToolBar1.BtnOffsHorz * 2 + hb; - r.Top := ElToolBar1.BtnHeight + ElToolBar1.BtnOffsVert * 2 + vb; - r.Bottom := ElToolBar1.BtnHeight + ElToolBar1.BtnOffsVert * 2 + vb; - DockDims := r; -end; - -procedure TFrmBar.CreateParams(var Params: TCreateParams); -begin - inherited; - Params.Style := WS_POPUP or WS_CLIPSIBLINGS or WS_CLIPCHILDREN or WS_THICKFRAME; - // WS_EX_TOOLWINDOW is MANDATORY, otherwise everything stops working!!!!!!!!!!! - Params.ExStyle := Params.ExStyle or WS_EX_CONTROLPARENT or WS_EX_TOOLWINDOW; -end; {CreateParams} - -end. - diff --git a/sdk/components/ElPack/BCBDemos/ElAppBar/frmOpts.dfm b/sdk/components/ElPack/BCBDemos/ElAppBar/frmOpts.dfm deleted file mode 100644 index eeb503a69f97386a90f6484d0ede8f21434c6729..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10118 zcmeHNPj4GV6rVVWcl{?R?E%4wIUqoyN(%yR9AYPK(loIZJ5+F?6MJm0vff$kj++>9 z@QnlFz$f5~@M-u6l{km@W_Rq}$=cXSQ7n~8v$OO5{^q@zcsg&di=spp<5m&e(u*z-srQ>zPWs6_Ql43+gbAK1q=!6Y;e(ShNo6HMolLt;W z(pN}J#BPYt!TDL+zG$`s&b=xi_a?{r6&atu0!{3m=AUpB|mKAeLtpM`lvjFVa z8#R~7!emN$N)fr;V&`>SW4R^PN1^Rjq<7oJQEVtcxR7j;ilwC{nhxgEIGA6raxg7Q z74&H|*B0Mx|5Y?MVXdcQc@W3)$tuTklTrXajb!frBWYKJguR&#=BqfE->z~nZAv5T z(|E4me>{sdS1{>#y>vvc;)w39azu-iYV^~XZro2y$u|B>3V-NVhOj`r&2#D1kD{NV z_tg>N4-&`pNXPWU;^Bbx_@UR~S2<$s@h*ekkwWQMbeMa}Lm1@Nit1-*XOBr%{Gmw5 zchD-w_{4wTK>G~Z$Iu=@TO$;ngwU9;2Kq4`6Y>tV>+9<~&le&_u-!FoV~9JpyI_iN zAeOsfLL2}_wcBC>?FaV`%6bdw5KmrfZrx*7Q_wV$t?)fhlD-wqs&2$5}cvX-i_7Wyi!|j%Vp*(*MUa zS$~=Fx#fDAWor!fmfm+7gV`r?2fJvod6+g}oWzuT2gdR?6PRwLAN$leu)m8PrK>RA z-OgLV@;2s^VWV&|jPE>hxkt@DgG(p4S~!3U54fc1%Z)d0-jD|qdi1jK+poWnhZEx7 zMND@3oD}easV3UPaIssF$$iLr{gb2VfqspcXX^r-t*gvyb61_O*T-a`19m>rNuRHC z@6P!e*WTM&f62c;V08KYl{kdV!~`-kc?q8=gKZwBc|1@iB!LGeqwFa<@(li1(=vMG zXeFmmQv1nUaK9HvQx}Swn^C$frOydl@6TJiv<@7qr;xCLv+a!zUD9azx#&a+s z4`mi^88KSg#tckL+sVKJ6M?BLF`rmAO9yH5atV&6aWk+edj$A#%d(%+PuQ9zi}Z!? zWMM)3v*-!mCMFY$iNPG3`f8l;i}ER%1P^0%gP)K`UUL3gHjAE=BMBRmckOo`k6_FU zya{>j7k%OT#5TO+IEld=CuJ9U*Lblvd?m-@*mshq-;sxybi=Xc-B*tobh|GM|K@jP z&e!olczVRnk(*WCFQdEbtNW?)T5%mcRg*044y8D7Iy_yg&^6uzeXss-1Iya^uTYfA zKBsYQo`L!RiXCm{x}(SRvd=y0Na_j^@{o4%e=0jGSRRHlho1N}Wh+o3E*^32H=Uo1 zbm%Jab0Zz!qqs^(2s%`B)%&ITxM7+MC!`&LMft}Ra>!W+1w$Ed+3rJ?3iAcoqvACW zls{9QHD@DW~VsT?rhcj1Qw aKde%l0j!*}UpucFjr)Do$jLwYOrJ3T diff --git a/sdk/components/ElPack/BCBDemos/ElAppBar/frmOpts.pas b/sdk/components/ElPack/BCBDemos/ElAppBar/frmOpts.pas deleted file mode 100644 index d7675730895..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElAppBar/frmOpts.pas +++ /dev/null @@ -1,39 +0,0 @@ -unit frmOpts; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - ExtCtrls, ElPanel, ElBtnCtl, ElCheckCtl, ElPopBtn; - -type - TOptionsForm = class(TForm) - ElPanel1: TElPanel; - LeftCB: TElCheckBox; - RightCB: TElCheckBox; - TopCB: TElCheckBox; - BottomCB: TElCheckBox; - FloatingCB: TElCheckBox; - btnOK: TElPopupButton; - btnCancel: TElPopupButton; - ElPanel2: TElPanel; - AutoHideCB: TElCheckBox; - KeepSizeCB: TElCheckBox; - TopmostCB: TElCheckBox; - OnScreenCB: TElCheckBox; - TaskBarCB: TElCheckBox; - private - { Private declarations } - public - { Public declarations } - end; - -var - OptionsForm: TOptionsForm; - -implementation - -{$R *.DFM} - -end. - diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/ABOUT.PAS b/sdk/components/ElPack/BCBDemos/ElKeeper/ABOUT.PAS deleted file mode 100644 index 3962ddc51f8..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/ABOUT.PAS +++ /dev/null @@ -1,63 +0,0 @@ -unit ABOUT; - -interface - -uses Windows, Classes, SysUtils, Graphics, Forms, Controls, StdCtrls, - Buttons, ExtCtrls, ElURLLabel, ElBtnCtl, ElPopBtn, ElFrmPers, ElCLabel, - ElVerInfo, ElXPThemedControl, ElPanel; - -type - TAboutBox = class(TForm) - ElFormPersist1: TElFormPersist; - VerInfo: TElVersionInfo; - Panel1: TElPanel; - ProgramIcon: TImage; - ProductName: TLabel; - Copyright: TLabel; - MailLabel: TElURLLabel; - HomeLabel: TElURLLabel; - Label2: TLabel; - Label3: TLabel; - Label5: TLabel; - lblVersion: TLabel; - NameLabel: TLabel; - Label6: TLabel; - OkBtn: TElPopupButton; - procedure FormCreate(Sender: TObject); - procedure OkBtnClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - AboutBox: TAboutBox; - -implementation - -{$R *.DFM} - -procedure TAboutBox.FormCreate(Sender: TObject); -var InfoString : string; -begin - InfoString := ''; - if (InfoString <> '') then - begin - NameLabel.Caption := InfoString; - NameLabel.Visible := true; - NameLabel.Font.Color := clGreen; - end; - lblVersion.Caption := IntToStr(VerInfo.MajorVersion) + '.' + - IntToStr(VerInfo.MinorVersion) + - IntToStr(VerInfo.Release); -end; - -procedure TAboutBox.OkBtnClick(Sender: TObject); -begin - ModalResult := mrCancel; - Close; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/ABOUT.dfm b/sdk/components/ElPack/BCBDemos/ElKeeper/ABOUT.dfm deleted file mode 100644 index fe2bbbef5f380ca908ac240c03883a69ae6c33ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4449 zcmc&&O>7&-6&{ficbB9n$wiA4Xn+L@G%kwBKdlSLCySH?36?}cTqO>WqF#}+%e96( zi`}J`5&~H0LE@o+3KS^n9@?IQ!U!B7ryPCqNl0$#p&;Vq;QRnmoU{pbh`oI?v%4fE z#BqSMS!#FRdo%Oqy?Ha=d#f;uw3%XgRV$XSp|g|AQwV95xwDEkvqoEfk+$WS7+u7M zpAJUS8gb{&3kk5*kc8bq3<=!fZ1|{a92_2^xH)|EuH6kE9&&%eAPm3k9=r#heM(vP;AZ&c0q76I z$DH2_zPk4*W5e(PdmQy%9pb~?{kQj7LpI>v|l`|pVU1wKKD_Qj$;ypIBy zJwTa+4|_o`aFFshHUQc?olejWZ+*=9$7lki?XY+2uYY+X45uClbz!i1>ytOa&kl7q zC=7e;aO=*U!}pCT!3TTc*6r5}eQN4v)Z7cUfSP&+mIAu(u@U^*y(!)>f?r3h18j%y z^(vG}z2suu$7Oc96}dt^iydL9;LvK##n>*v5yq}uwnaY)4wKsy^mxT;W8zf+7VKIh zbv>)$c68iR<4D%7kcw_&lHt#D98gk-;YkXO#VC+T;2}FhoQA%LH!w+|LJ^L)>C%>6 z*ESt2<=0G~oZ zv$VEeb{RD3+|_KIE>j^W%+l5x!NrzgU>DbAl+hNNx`}fYmzu8LWY{76khvdu;YUi1 z+(@bNOv|TLYYQv+idAD13at4ZpogRtEx)Nd8$cJA*ppowaL0I~0v+QG8o(QdP6DBT zU?>BB3}pBVoTK<=VS+lC;e+D=)T+M48!Dj)0Z?k-VE@7 zH->T87jzHU_y>vLfa|w8zZ3la-iM-vcW4K%-s40xAYgbS+W7#p1Nb8NJ2%*y9OI4s z{d=Olz}pSL8_r*6c(Y+Jyy<}8_TTTL!w&*GH${tn8*t8D~;H?JAS z)Pozhfj0t%H-IOHI%kcb-HGrf;yXr!H+-GVcE=31U=-jD8*c6xCg=>ngk9bNH0}To zyMXQK_``t&KA~An?5WE*P*-SEw+B;r#_)=i)KRv={a{&N z{zk`?5_L9RR*4L{bveSJKcLvJafO3R6BbC4eO;hm;_I`C7WH)P=jyo^Uby)D`Lk!w zseBE--iRDv;p)mFUt(oRw+N@WCFu_YB-W!9o=+^vlv=Jw-SnGdqw|*SXC?qz8q|Hx zQ}Odn(2-bGSg;Lx8ABMnY3iC!8G{TfqFQ*UhWgJy2)@3C${F6O4e5edHXe#XK}4k5 zpaHX3mSaj8TADO0MdpXh1)pBBhHZb*f&_%?qBe|7lp>*An1@{8E?V~bPzVv0#VMLRP0!bx*ww&^OY#2AF; z#NI4fBauTw;dQR?XOY66#0n=9lSj`_Up)VmJ1k!#FIje-2CQ%!0)l@J070g@>G`<% ztsppYKw+6=;85{3Prnr%s+4xpf&8lNV$*^tp#pnKN5*Po1=s&K9*8aT>wztk{zq(n zF*biZS^vUHVm$1TOUJ@mU_~)?T28U$`_vvQufxYLSDpSB&jab#W8GI{-9OIq8gv05 zx1BObsZMRgYK!3Q`LqJ;f6Wq zp%+xqkPg4-_0U8j7sTlGtqnAl2xr$L@%$?)%@NCSpvD)g-{Ak~NL|ZA0pxfZt@_l(+0nRg;!{Qkk!4$kGVCn|-xn$T H8R-3ADJ+eo diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/Clip.res b/sdk/components/ElPack/BCBDemos/ElKeeper/Clip.res deleted file mode 100644 index ee4a682ed9ae0a602c5658585095c58d69f24f55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmZQzU|>)H;{X347|28cF+iRU5dZ(r#Nf=}!{Esf0K~ow?od?%0+K8+4H`fO8xV5? lF(VLy07x%3@E>Sl3sAxUh%12D1Ih;RVR#3S4Z=r&7y#X~5VHUP diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/Cryptcon.pas b/sdk/components/ElPack/BCBDemos/ElKeeper/Cryptcon.pas deleted file mode 100644 index 91d6f75a4f7..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/Cryptcon.pas +++ /dev/null @@ -1,637 +0,0 @@ -unit Cryptcon; -{***************************************************************************** - UNIT: Cryptcon - Description: This unit contains an Object Pascal Object which can be used as - a base class for constructing Encryption Objects for BLOCK - Ciphers. This contains all the necessary fields/methods for - doing encryption. In most cases all that a user of this base class - will need to do is override the EncipherBLOCK/DecipherBLOCK and - SetKeys(generate SubKeys) methods. It handles things such as - File encryption, Byte Array encryption, different modes of - operation(CBC, ECB, CFB). - ----------------------------------------------------------------------------- - Code Author: Greg Carter, gregc@cryptocard.com - Organization: CRYPTOCard Corporation, info@cryptocard.com - R&D Division, Carleton Place, ON, CANADA, K7C 3T2 - 1-613-253-3152 Voice, 1-613-253-4685 Fax. - Date of V.1: Jan. 30 1996. - - Compatibility & Testing with BP7.0: Marcel Roorda, garfield@xs4all.nl - -----------------------------------------------------------------------------} -{Usage: See one of the included algorithm implementations, TRC5, TBLOWFISH, - TIDEA to see how to inherite and use this base class. -{-----------------------------------------------------------------------------} -{LEGAL: This code is placed into the public domain, hence requires - no license or runtime fees. However this code is copyright by - CRYPTOCard. CRYPTOCard grants anyone who may wish to use, modify - or redistribute this code privileges to do so, provided the user - agrees to the following three(3) rules: - - 1)Any Applications, (ie exes which make use of this - Object...), for-profit or non-profit, - must acknowledge the author of this Object(ie. - MD5 Implementation provided by Greg Carter, CRYPTOCard - Corporation) somewhere in the accompanying Application - documentation(ie AboutBox, HelpFile, readme...). NO runtime - or licensing fees are required! - - 2)Any Developer Component(ie Delphi Component, Visual Basic VBX, - DLL) derived from this software must acknowledge that it is - derived from "Crypto Object Pascal Implementation Originated by - Greg Carter, CRYPTOCard Corporation 1996". Also all efforts should - be made to point out any changes from the original. - !!!!!Further, any Developer Components based on this code - *MAY NOT* be sold for profit. This Object was placed into the - public domain, and therefore any derived components should - also.!!!!! - - 3)CRYPTOCard Corporation makes no representations concerning this - software or the suitability of this software for any particular - purpose. It is provided "as is" without express or implied - warranty of any kind. CRYPTOCard accepts no liability from any - loss or damage as a result of using this software. - ------------------------------------------------------------------------------ -Why Use this instead of a freely available C DLL? - -The goal was to provide a number of Encryption/Hash implementations in Object -Pascal, so that the Pascal Developer has considerably more freedom. These -Implementations are geared toward the PC(Intel) Microsoft Windows developer, -who will be using Borland's New 32bit developement environment(Delphi32). The -code generated by this new compiler is considerablely faster then 16bit versions. -And should provide the Developer with faster implementations then those using -C DLLs. ------------------------------------------------------------------------------ -NOTES: ------------------------------------------------------------------------------- -Revised: 00/00/00 BY: ******* Reason: ****** ------------------------------------------------------------------------------- -} - -{Declare the compiler defines} -{$I CRYPTDEF.INC} -{------Changeable compiler switches-----------------------------------} -{$A+ Word align variables } -{$F+ Force Far calls } -{$K+ Use smart callbacks -{$N+ Allow coprocessor instructions } -{$P+ Open parameters enabled } -{$S+ Stack checking } -{$T- @ operator is NOT typed } -{$IFDEF DELPHI} -{$U- Non Pentium safe FDIV } -{$Z- No automatic word-sized enumerations} -{$ENDIF} -{---------------------------------------------------------------------} -{ Modified 17/08/98 12:21:57 by the CDK, Version 3.02 Rev. F } -{ Modified 17/08/98 12:22:42 by the CDK, Version 3.02 Rev. F } - -interface -uses Windows, SysUtils, Classes ; - -type - {An enumerated typt which tells the object what type the input to the cipher is} - TSourceType = (SourceFile, SourceByteArray,SourceString, SourceStream); - {Different modes of cipher operation} - TCipherMode = (ECBMode, CBCMode, CFBMode); - - UWORD_32bits = LongInt; - UWORD_16bits = WORD; - UBYTE_08bits = BYTE; - - BArray = array[0..7] of BYTE; - PArray = ^BArray; - LArray = array[0..1] of UWORD_32bits; - PLong = ^UWORD_32bits; - PLArray = ^LArray; - - singleBytes = Record - byte3: BYTE; {LSB} - byte2: BYTE; - byte1: BYTE; - byte0: BYTE; {MSB} - end;{SingleBytes} -{$DEFINE INTEL} - - aword = record - case Integer Of - 0: (LWord: UWORD_32bits); - 1: (fByte: Array[0..3] of UBYTE_08bits); - 2: (w: singleBytes); - end;{aword, 32bits!} - - Paword = ^aword; -{------------------------------------------------------------------------------} -{TCrypto Object: TCrypto Object descends from the base class(of you respestive - compiler(TComponent for Delphi, TObject for BP7). It is a - basic 'container' to hold all the input/output information to - an encryption routine. - - When using a cipher in CBC or CFB mode the cipher needs an - initialization vector(IV). The user can either supply an - IV vector, by assigning a string value(which MUST be the - same length as block of the cipher) to the FIVector field, or - have an IVector generated for them. If the user chooses to have - the IVector generated(Do not assign it anything), then upon - completion of the current encryption, the FIVector field - will hold the IV vector used. You need to keep a copy of the - IV vector used to encrypt, in order to decrypt anything. It is - not necessary to keep this value secret. - - A destructor fills the Objects copy of the User Key with - zeros on exit for security reasons. - - 'Protected' Fields under Delphi are accessible to desendents of - the inherited object, but not to users of the desendent - objects. --------------------------------------------------------------------------------} - -TCrypto = class(TComponent) - Protected -{ Protected declarations } - FIVector: String; {Initial IVector MUST be as long as FBLOCKSIZE} - FIVTemp: PArray; {IVector during cipher} - FKey: String; {Local Copy of User Key} - FInputType: TSourceType;{SourceString, SourceByteArray, SourceFile} - FCipherMode: TCipherMode;{ECBMode, CBCMode, CFBMode} - FInputFilePath: String; {Path to input file} - FOutputFilePath: String; {Path to output file} - FInputArray: PArray; {Pointer to input array} - FOutputArray: PArray; {Output Array} - FInputStream: TStream; - FOutputStream: TStream; - FInputString: String; {Pascal String to Encipher} - FInputLength: WORD; {16bit Unsigned Length of ByteArray} - FBuffer: array[0..4096] of BYTE; {Local Copy of Data} - FSmallBuffer: array[0..63] of BYTE; - FDoneFile: Boolean; {Signal reading of file or array is done} - FBLOCKSIZE: BYTE; {MUST be initialized in Constructor} - Procedure ShiftLeft(pIV, pNewData: PByte; Pos: WORD); - function MIN(Aparam, Bparam: integer): integer; - Procedure GenIVector; {generates a psedo random IVector} - Procedure InitIV; - Procedure StartCipher(Continue: Boolean); - Procedure EncipherBLOCK; virtual;abstract; - Procedure DecipherBLOCK; virtual;abstract; - {do any SubKey generation or initialization here} - Procedure SetKeys;virtual;abstract; - Procedure Encipher_File; - Procedure Decipher_File; - Procedure Encipher_Bytes;virtual; - Procedure Decipher_Bytes;virtual; -{Different modes for Block Ciphers} - Procedure EncipherECB; - Procedure DecipherECB; - Procedure EncipherCFB; - Procedure DecipherCFB; - Procedure EncipherCBC; - Procedure DecipherCBC; - - procedure Encipher_Stream; - procedure Decipher_Stream; - public -{ Public declarations } - Procedure DecipherData(Continue: Boolean); {Users call these to perform} - Procedure EncipherData(Continue: Boolean); {Encryption/Decryption} - {Continue is used for CBC and CFB Modes, where the encryption procedure - needs to know whether to generate a new Initialization Vector, or use the - one generated in the last round of the previous encryption} - {constructor Create(Owner: TComponent);override;} - destructor Destroy;override; - Property pInputArray: PArray read FInputArray write FInputArray; - Property pOutputArray: PArray read FOutputArray write FOutputArray;{!!See FOutputArray} - published -{Published properties show up in the object inspector} - Property Key: String write FKey Stored False; - Property InputType: TSourceType read FInputType write FInputType; - Property InputFilePath: String read FInputFilePath write FInputFilePath; - Property OutputFilePath: String read FOutputFilePath write FOutputFilePath; - Property InputString: String read FInputString write FInputString; - Property InputLength: WORD read FInputLength write FInputLength; - Property CipherMode: TCipherMode read FCipherMode write FCipherMode; - Property IVector: String read FIVector write FIVector Stored False; - property InputStream: TStream read FInputStream write FInputStream; - property OutputStream: TStream read FOutputStream write FOutputStream; -end;{TCrypto} - -implementation - -destructor TCrypto.Destroy; - var i: integer; - begin - If FIVTemp <> nil then begin - FreeMem(FIVTemp, FBLOCKSIZE); - end; - for i := 1 to Length(FKey) do begin - FKey[i] := #0; - end; - inherited Destroy; -end;{destructor} - -{=======================Misc. Methods=========================================} -function TCrypto.MIN(Aparam, Bparam: integer): integer; -begin - if Aparam > Bparam then - MIN := Bparam - else - MIN := Aparam; -end; - -Procedure TCrypto.ShiftLeft(pIV, pNewData: PByte; Pos: WORD); -{Used in CFB Mode} -var - TempPtr: PByte; - i: BYTE; -begin - TempPtr := pIV; Inc(TempPtr, Pos); - For i:= 1 To (FBLOCKSIZE - Pos) do - pIV^ := TempPtr^; Inc(pIV); //Inc(TempPtr); - repeat - pIV^ := pNewData^; Inc(pIV); Inc(pNewData); - Dec(Pos); - Until Pos = 0; -end;{TCrypto.ShiftLeft} - -Procedure TCrypto.GenIVector; -var - i: WORD; -begin - Randomize; - FIVector := ''; - For i:= 1 to FBLOCKSIZE do begin - FIVector := FIVector + Chr(BYTE(Random(93) + 33)); - {add 33 so all in ascii printable range} - end; -end; - -Procedure TCrypto.InitIV; -begin - {If the user wishes to supply an IV vector then let them, otherwise we - generate one, and put it in FIVector, so that they can see it, also put - IV in FIVTemp, which is used during the cipher routines} - If FIVector = '' then - GenIVector; - if FIVTemp = nil then - GetMem(FIVTemp, FBLOCKSIZE); - Move(FIVector[1], FIVTemp^, FBLOCKSIZE); -end; - -Procedure TCrypto.StartCipher(Continue: Boolean); -begin -if Not Continue then begin - SetKeys; - Case FCipherMode of - ECBMode: - begin - end; - CBCMode: - begin - InitIV; - end; - CFBMode: - begin - InitIV; - end; - end;{Case} -end;{if} -end;{TCrypto.StartCipher} - -{==================Main Entry Public Methods==================================} -Procedure TCrypto.EncipherData(Continue: Boolean); -{Public/Protected Procedure used to encipher data} -var -pStr: PChar; - begin - StartCipher(Continue); - case FInputType of - SourceStream: - Encipher_Stream; - SourceFile: - begin - Encipher_File; - end; - SourceByteArray: - begin - {Check Length!!!!} - Move(FInputArray^, FBuffer, FInputLength); - Encipher_Bytes; - end; - SourceString: - begin - {Convert Pascal String to Byte Array} - pStr := StrAlloc(Length(FInputString) + 1); - try {protect dyanmic memory allocation} - StrPCopy(pStr, FInputString); - FInputLength := Length(FInputString); - FInputArray := Pointer(pStr); - {Check Length!!!!} - Move(FInputArray^, FBuffer, FInputLength); - Encipher_Bytes; - finally - StrDispose(pStr); - end; - end;{SourceString} - end;{case} -end;{TCrypto.EncipherData} - -Procedure TCrypto.DecipherData(Continue: Boolean); -{Public/Proctected Procedure used to Decipher data} - begin - StartCipher(Continue); - case FInputType of - SourceStream: - Decipher_Stream; - SourceFile: - begin - Decipher_File; - end; - SourceByteArray: - begin - {Check Length!!!!} - Move(FInputArray^, FBuffer, FInputLength); - Decipher_Bytes; - end; - SourceString: - begin - {FIXME: Error, can't decipher input as Pascal string} - end;{SourceString} - end;{case} -end;{TCrypto.DecipherData} - -{=========================Data handling Methods===============================} -Procedure TCrypto.Encipher_Bytes; -begin - Case FCipherMode of - ECBMode: - EncipherECB; - CBCMode: - EncipherCBC; - CFBMode: - EncipherCFB; - end;{Case} -end; - -Procedure TCrypto.Encipher_File; -var - InputFile, OutputFile: File; - NumWrite, NumRead: integer; - DoneFile: Boolean; -begin - DoneFile := False; - AssignFile(InputFile, FInputFilePath); - Reset(InputFile, 1); - NumWrite := FileCreate(FOutputFilePath); - FileClose(NumWrite); - AssignFile(OutputFile, FOutputFilePath); - Reset(OutputFile, 1); - repeat - BlockRead(InputFile,FBuffer,4096, NumRead{FInputLength}); - FInputLength := NumRead; - if FInputLength<>4096 then DoneFile := True; - {Call Encipher_Bytes to handle the actual encryption} - FInputArray := @FBuffer; - FOutputArray := @FBuffer; - Encipher_Bytes; - {Case FCipherMode of - ECBMode: - EncipherECB; - CBCMode: - EncipherCBC; - CFBMode: - EncipherCFB; - end;{Case} - {Put in OutputFile} - BlockWrite(OutputFile,FBuffer, FInputLength,NumWrite); - {Should signal a disk full error when numwrite<>FInputLength} - until DoneFile or (NumWrite <> FInputLength); - CloseFile(InputFile); - CloseFile(OutputFile); -{ FInputLength := TotalRead;} -end;{TCrypto.Encipher_File} - -Procedure TCrypto.Decipher_Bytes; -begin - Case FCipherMode of {keep in this order for compiler optimization} - ECBMode: - DecipherECB; - CBCMode: - DecipherCBC; - CFBMode: - DecipherCFB; - end;{Case} -end;{TCrypto.Decipher_Bytes} - -Procedure TCrypto.Decipher_File; -var - InputFile, OutputFile: File; - NumWrite, NumRead: integer ; - DoneFile: Boolean; -begin - DoneFile := False; - AssignFile(InputFile, FInputFilePath); - Reset(InputFile, 1); - NumWrite := FileCreate(FOutputFilePath); - FileClose(NumWrite); - AssignFile(OutputFile, FOutputFilePath); - Reset(OutputFile, 1); - - repeat - BlockRead(InputFile,FBuffer, 4096, NumRead{FInputLength}); - FInputLength := NumRead; - if FInputLength<>4096 then DoneFile := True; - FInputArray := @FBuffer; - FOutputArray := @FBuffer; - Decipher_Bytes; - {Put in OutputFile} - BlockWrite(OutputFile,FBuffer, FInputLength,NumWrite); - {Should signal a disk full error when numwrite<>FInputLength} - until DoneFile or (NumWrite <> FInputLength); - CloseFile(InputFile); - CloseFile(OutputFile); -{ FInputLength := TotalRead;} -end;{TCrypto.Decipher_File} - -{===========================Cipher Mode Methods===============================} -Procedure TCrypto.EncipherCFB; -var - i: WORD; - WhatsLeft, Index: Longint; - pOut: PByte; - curSize : BYTE; -begin - WhatsLeft := FInputLength; - curSize := MIN(FBLOCKSIZE, WhatsLeft); - pOut := PByte(FOutputArray); {get pointer to users outputarray} - Index := 0; - while (curSize > 0) do begin - Move(FIVTemp^, FSmallBuffer, FBLOCKSIZE); - EncipherBLOCK; - For i:= 0 to (curSize - 1) do begin - PArray(pOut)^[i] := FBuffer[Index + i] Xor FSmallBuffer[i]; - end; - If curSize = FBLOCKSIZE then - Move(pOut^, FIVTemp^, FBLOCKSIZE) - else - ShiftLeft(Pointer(FIVTemp), Pointer(pOut), curSize); - Dec(WhatsLeft, curSize); - Inc(pOut, curSize); - Inc(Index, curSize); - curSize:= MIN(FBLOCKSIZE, WhatsLeft); - end;{while} -end;{TCrypto.EncipherCFB} - -Procedure TCrypto.DecipherCFB; -var - i: WORD; - WhatsLeft, Index: Longint; - pOut: PByte; - curSize : BYTE; -begin - WhatsLeft := FInputLength; - curSize := MIN(FBLOCKSIZE, WhatsLeft); - pOut := PByte(FOutputArray); {save pointer to users outputarray} - Index := 0; - while (curSize > 0) do begin - Move(FIVTemp^, FSmallBuffer, FBLOCKSIZE); - EncipherBLOCK; - {Put Cipher Text in Feeback Register, IVTemp} - If curSize = FBLOCKSIZE then - Move(FBuffer[Index], FIVTemp^, FBLOCKSIZE) - else - ShiftLeft(Pointer(FIVTemp), @FBuffer[Index], curSize); - For i:= 0 to (curSize - 1) do begin - PArray(pOut)^[i] := FBuffer[Index + i] Xor FSmallBuffer[i]; - end; - Dec(WhatsLeft, curSize); - Inc(Index, curSize); - Inc(pOut, curSize); - curSize := MIN(FBLOCKSIZE, WhatsLeft); - end;{while} -end;{TCrypto.DecipherCFB} - -Procedure TCrypto.EncipherECB; -var Index: WORD; -begin - {Pad the input to a multiple of 64bits(8BYTES) with Nulls} - while (FInputLength mod FBLOCKSIZE)<>0 do begin - FBuffer[FInputLength] := 0; - Inc(FInputLength); - end; - Index := 0; - repeat {Do one BLOCK at a time} - Move(FBuffer[Index], FSmallBuffer, FBLOCKSIZE); - EncipherBLOCK; - Move(FSmallBuffer, FOutputArray^[Index], FBLOCKSIZE); - Inc(Index,FBLOCKSIZE); - until Index = FInputLength; -end;{TCrypto.EncipherECB} - -Procedure TCrypto.DecipherECB; -var Index: WORD; -begin - {Pad the input to a multiple of FBLOCKSIZE with Nulls} - while (FInputLength mod FBLOCKSIZE)<>0 do begin - FBuffer[FInputLength] := 0; - Inc(FInputLength); - end; - Index := 0; - repeat {Do one BLOCK at a time} - Move(FBuffer[Index], FSmallBuffer, FBLOCKSIZE); - DecipherBLOCK; - Move(FSmallBuffer, FOutputArray^[Index], FBLOCKSIZE); - Inc(Index,FBLOCKSIZE); - until Index = FInputLength; -end;{TCrypto.DecipherECB} - -Procedure TCrypto.EncipherCBC; -{Purpose: Performs Cipher Block Chaining(CBC) mode encrytion. - C_i := E(P_i Xor C_i-1 ) -} -var - pOut: PArray; - Index: LongInt; - i: WORD; -begin - pOut := PArray(FOutputArray); - Index := 0; -{Pad the input to a multiple of FBLOCKSIZE with Nulls} - while (FInputLength mod FBLOCKSIZE)<>0 do begin - FBuffer[FInputLength] := 0; - Inc(FInputLength); - end; - repeat {Do one BLOCK at a time} - Move(FBuffer[Index], FSmallBuffer, FBLOCKSIZE); - For i:= 0 to (FBLOCKSIZE - 1) do begin - FSmallBuffer[i] := FSmallBuffer[i] Xor PArray(FIVTemp)^[i]; - end; - EncipherBLOCK; - Move(FSmallBuffer, FIVTemp^, FBLOCKSIZE); {Put Cipher text in FB register} - Move(FSmallBuffer, pOut^[Index], FBLOCKSIZE);{Put Cipher in Output Buffer} - Inc(Index,FBLOCKSIZE); - until Index = FInputLength; -end;{TCrypto.EncipherCBC} - -Procedure TCrypto.DecipherCBC; -{Purpose: Performs Cipher Block Chaining(CBC) mode Decrytion. - P_i := C_i-1 Xor D(Ci) -} -var - pOut: PArray; - Index : LongInt; - i: WORD; -begin - pOut := PArray(FOutputArray); - Index := 0; -{Pad the input to a multiple of FBLOCKSIZE with Nulls} - while (FInputLength mod FBLOCKSIZE)<>0 do begin - FBuffer[FInputLength] := 0; - Inc(FInputLength); - end; - repeat {Do one BLOCK at a time} - Move(FBuffer[Index], FSmallBuffer, FBLOCKSIZE); - DecipherBLOCK; {Decipher C_i} - For i:= 0 to (FBLOCKSIZE - 1) do begin {xor with C_i-1} - FSmallBuffer[i] := FSmallBuffer[i] Xor PArray(FIVTemp)^[i]; - end; - Move(FBuffer[Index], FIVTemp^, FBLOCKSIZE); {Save next IV} - Move(FSmallBuffer, PArray(pOut)^[Index], FBLOCKSIZE); {Save Plain Text} - Inc(Index,FBLOCKSIZE); - until Index = FInputLength; -end;{TCrypto.EncipherCBC} - -procedure TCrypto.Encipher_Stream; { protected } -var NumWrite: integer; - DoneFile: Boolean; - -begin - DoneFile := false; - repeat - FInputLength := FInputStream.Read(FBuffer, 4096); - if FInputLength<>4096 then DoneFile := True; - FInputArray := @FBuffer; - FOutputArray := @FBuffer; - Encipher_Bytes; - {Put in OutputFile} - NumWrite := FOutputStream.Write(FBuffer, FInputLength); - {Should signal a disk full error when numwrite<>FInputLength} - until DoneFile or (NumWrite <> FInputLength); -end; { Encipher_Stream } - -procedure TCrypto.Decipher_Stream; { protected } -var NumWrite: integer; - DoneFile: Boolean; -begin - DoneFile := false; - repeat - FInputLength := FInputStream.Read(FBuffer, 4096); - if FInputLength<>4096 then DoneFile := True; - FInputArray := @FBuffer; - FOutputArray := @FBuffer; - Decipher_Bytes; - {Put in OutputFile} - NumWrite := FOutputStream.Write(FBuffer, FInputLength); - {Should signal a disk full error when numwrite<>FInputLength} - until DoneFile or (NumWrite <> FInputLength); -end; { Decipher_Stream } - -end. diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/Cryptdef.inc b/sdk/components/ElPack/BCBDemos/ElKeeper/Cryptdef.inc deleted file mode 100644 index b7d9baba1a3..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/Cryptdef.inc +++ /dev/null @@ -1,44 +0,0 @@ -{===CRYPTDEF.INC====================================================== - -Compiler defines for the CRYPTOCard Encryption Component Library. - -CRYPTDEF.INC is Copyright (c) 1996 by CRYPTOCard Corportation - -VERSION HISTORY -10Feb96 1.00 initial release -{=====================================================================} - -{Notes: to deactivate a compiler define, place a period '.' between the - left curly brace and the '$' of '$DEFINE'.} - - -{Undefine this if you don't want debugging info} - -{$DEFINE DEBUG} -{$DEFINE DELPHI} {If you are using DELPHI 32 you MUST Keep DELPHI defined too} -{$DEFINE ORDER_DCBA} {INTEL DO NOT CHANGE UNLESS YOU ARE ON A MAC} -{.$DEFINE ORDER_ABCD} {MAC} -{.$DEFINE BP7} -{.$DEFINE DELPHI32} -{Only define one of the next two} -{$DEFINE i286} {These are for the assembler routines} -{.$DEFINE i386} {Delphi32 allows 386 instructions and no longer - supports inline asm functions} - -{===DO NOT MODIFY ANYTHING BEYOND THIS POINT==========================} - -{------Fixed compiler switches----------------------------------------} -{$B- Short-circuit boolean expressions } -{$G+ 80286+ type instructions } -{$I+ I/O checking via exceptions } -{$V- Disable var string checking } -{$W- No Windows realmode stack frame } -{$X+ Enable extended syntax } -{$Q- NO Integer overflow checking } -{$R- NO Range checking } -{$IFDEF DEBUG} -{$D+,L+,Y+ Enable debug information } -{$ELSE} -{$D-,L-,Y- Disable debug information } -{$ENDIF} -{---------------------------------------------------------------------} diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/DEFINE.INC b/sdk/components/ElPack/BCBDemos/ElKeeper/DEFINE.INC deleted file mode 100644 index b28090f3ef9..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/DEFINE.INC +++ /dev/null @@ -1,2 +0,0 @@ -{$define debug} -{$IMAGEBASE $00400000} diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/ElAES.pas b/sdk/components/ElPack/BCBDemos/ElKeeper/ElAES.pas deleted file mode 100644 index b8374c144c0..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/ElAES.pas +++ /dev/null @@ -1,2478 +0,0 @@ -(**************************************************) -(* *) -(* Advanced Encryption Standard (AES) *) -(* *) -(* Copyright (c) 1998-2001 *) -(* EldoS, Alexander Ionov *) -(* *) -(**************************************************) - -unit ElAES; - -interface - -uses - Classes, SysUtils; - -type - EAESError = class(Exception); - - TAESBuffer = array [0..15] of byte; - TAESKey128 = array [0..15] of byte; - TAESKey192 = array [0..23] of byte; - TAESKey256 = array [0..31] of byte; - TAESExpandedKey128 = array [0..43] of longword; - TAESExpandedKey192 = array [0..53] of longword; - TAESExpandedKey256 = array [0..63] of longword; - -// Key expansion routines for encryption - -procedure ExpandAESKeyForEncryption(const Key: TAESKey128; - var ExpandedKey: TAESExpandedKey128); overload; -procedure ExpandAESKeyForEncryption(const Key: TAESKey192; - var ExpandedKey: TAESExpandedKey192); overload; -procedure ExpandAESKeyForEncryption(const Key: TAESKey256; - var ExpandedKey: TAESExpandedKey256); overload; - -// Block encryption routines - -procedure EncryptAES(const InBuf: TAESBuffer; const Key: TAESExpandedKey128; - var OutBuf: TAESBuffer); overload; -procedure EncryptAES(const InBuf: TAESBuffer; const Key: TAESExpandedKey192; - var OutBuf: TAESBuffer); overload; -procedure EncryptAES(const InBuf: TAESBuffer; const Key: TAESExpandedKey256; - var OutBuf: TAESBuffer); overload; - -// Stream encryption routines (ECB mode) - -procedure EncryptAESStreamECB(Source: TStream; Count: cardinal; - const Key: TAESKey128; Dest: TStream); overload; -procedure EncryptAESStreamECB(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey128; Dest: TStream); overload; - -procedure EncryptAESStreamECB(Source: TStream; Count: cardinal; - const Key: TAESKey192; Dest: TStream); overload; -procedure EncryptAESStreamECB(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey192; Dest: TStream); overload; - -procedure EncryptAESStreamECB(Source: TStream; Count: cardinal; - const Key: TAESKey256; Dest: TStream); overload; -procedure EncryptAESStreamECB(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey256; Dest: TStream); overload; - -// Stream encryption routines (CBC mode) - -procedure EncryptAESStreamCBC(Source: TStream; Count: cardinal; - const Key: TAESKey128; const InitVector: TAESBuffer; Dest: TStream); overload; -procedure EncryptAESStreamCBC(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey128; const InitVector: TAESBuffer; - Dest: TStream); overload; - -procedure EncryptAESStreamCBC(Source: TStream; Count: cardinal; - const Key: TAESKey192; const InitVector: TAESBuffer; Dest: TStream); overload; -procedure EncryptAESStreamCBC(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey192; const InitVector: TAESBuffer; - Dest: TStream); overload; - -procedure EncryptAESStreamCBC(Source: TStream; Count: cardinal; - const Key: TAESKey256; const InitVector: TAESBuffer; Dest: TStream); overload; -procedure EncryptAESStreamCBC(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey256; const InitVector: TAESBuffer; - Dest: TStream); overload; - -// Key transformation routines for decryption - -procedure ExpandAESKeyForDecryption(var ExpandedKey: TAESExpandedKey128); overload; -procedure ExpandAESKeyForDecryption(const Key: TAESKey128; - var ExpandedKey: TAESExpandedKey128); overload; - -procedure ExpandAESKeyForDecryption(var ExpandedKey: TAESExpandedKey192); overload; -procedure ExpandAESKeyForDecryption(const Key: TAESKey192; - var ExpandedKey: TAESExpandedKey192); overload; - -procedure ExpandAESKeyForDecryption(var ExpandedKey: TAESExpandedKey256); overload; -procedure ExpandAESKeyForDecryption(const Key: TAESKey256; - var ExpandedKey: TAESExpandedKey256); overload; - -// Block decryption routines - -procedure DecryptAES(const InBuf: TAESBuffer; const Key: TAESExpandedKey128; - var OutBuf: TAESBuffer); overload; -procedure DecryptAES(const InBuf: TAESBuffer; const Key: TAESExpandedKey192; - var OutBuf: TAESBuffer); overload; -procedure DecryptAES(const InBuf: TAESBuffer; const Key: TAESExpandedKey256; - var OutBuf: TAESBuffer); overload; - -// Stream decryption routines (ECB mode) - -procedure DecryptAESStreamECB(Source: TStream; Count: cardinal; - const Key: TAESKey128; Dest: TStream); overload; -procedure DecryptAESStreamECB(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey128; Dest: TStream); overload; - -procedure DecryptAESStreamECB(Source: TStream; Count: cardinal; - const Key: TAESKey192; Dest: TStream); overload; -procedure DecryptAESStreamECB(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey192; Dest: TStream); overload; - -procedure DecryptAESStreamECB(Source: TStream; Count: cardinal; - const Key: TAESKey256; Dest: TStream); overload; -procedure DecryptAESStreamECB(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey256; Dest: TStream); overload; - -// Stream decryption routines (CBC mode) - -procedure DecryptAESStreamCBC(Source: TStream; Count: cardinal; - const Key: TAESKey128; const InitVector: TAESBuffer; Dest: TStream); overload; -procedure DecryptAESStreamCBC(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey128; const InitVector: TAESBuffer; - Dest: TStream); overload; - -procedure DecryptAESStreamCBC(Source: TStream; Count: cardinal; - const Key: TAESKey192; const InitVector: TAESBuffer; Dest: TStream); overload; -procedure DecryptAESStreamCBC(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey192; const InitVector: TAESBuffer; - Dest: TStream); overload; - -procedure DecryptAESStreamCBC(Source: TStream; Count: cardinal; - const Key: TAESKey256; const InitVector: TAESBuffer; Dest: TStream); overload; -procedure DecryptAESStreamCBC(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey256; const InitVector: TAESBuffer; - Dest: TStream); overload; - -resourcestring - SInvalidInBufSize = 'Invalid buffer size for decryption'; - SReadError = 'Stream read error'; - SWriteError = 'Stream write error'; - -implementation - -type - PLongWord = ^LongWord; - -function Min(A, B: integer): integer; -begin - if A < B then - Result := A - else - Result := B; -end; - -const - Rcon: array [1..30] of longword = ( - $00000001, $00000002, $00000004, $00000008, $00000010, $00000020, - $00000040, $00000080, $0000001B, $00000036, $0000006C, $000000D8, - $000000AB, $0000004D, $0000009A, $0000002F, $0000005E, $000000BC, - $00000063, $000000C6, $00000097, $00000035, $0000006A, $000000D4, - $000000B3, $0000007D, $000000FA, $000000EF, $000000C5, $00000091 - ); - - ForwardTable: array [0..255] of longword = ( - $A56363C6, $847C7CF8, $997777EE, $8D7B7BF6, $0DF2F2FF, $BD6B6BD6, $B16F6FDE, $54C5C591, - $50303060, $03010102, $A96767CE, $7D2B2B56, $19FEFEE7, $62D7D7B5, $E6ABAB4D, $9A7676EC, - $45CACA8F, $9D82821F, $40C9C989, $877D7DFA, $15FAFAEF, $EB5959B2, $C947478E, $0BF0F0FB, - $ECADAD41, $67D4D4B3, $FDA2A25F, $EAAFAF45, $BF9C9C23, $F7A4A453, $967272E4, $5BC0C09B, - $C2B7B775, $1CFDFDE1, $AE93933D, $6A26264C, $5A36366C, $413F3F7E, $02F7F7F5, $4FCCCC83, - $5C343468, $F4A5A551, $34E5E5D1, $08F1F1F9, $937171E2, $73D8D8AB, $53313162, $3F15152A, - $0C040408, $52C7C795, $65232346, $5EC3C39D, $28181830, $A1969637, $0F05050A, $B59A9A2F, - $0907070E, $36121224, $9B80801B, $3DE2E2DF, $26EBEBCD, $6927274E, $CDB2B27F, $9F7575EA, - $1B090912, $9E83831D, $742C2C58, $2E1A1A34, $2D1B1B36, $B26E6EDC, $EE5A5AB4, $FBA0A05B, - $F65252A4, $4D3B3B76, $61D6D6B7, $CEB3B37D, $7B292952, $3EE3E3DD, $712F2F5E, $97848413, - $F55353A6, $68D1D1B9, $00000000, $2CEDEDC1, $60202040, $1FFCFCE3, $C8B1B179, $ED5B5BB6, - $BE6A6AD4, $46CBCB8D, $D9BEBE67, $4B393972, $DE4A4A94, $D44C4C98, $E85858B0, $4ACFCF85, - $6BD0D0BB, $2AEFEFC5, $E5AAAA4F, $16FBFBED, $C5434386, $D74D4D9A, $55333366, $94858511, - $CF45458A, $10F9F9E9, $06020204, $817F7FFE, $F05050A0, $443C3C78, $BA9F9F25, $E3A8A84B, - $F35151A2, $FEA3A35D, $C0404080, $8A8F8F05, $AD92923F, $BC9D9D21, $48383870, $04F5F5F1, - $DFBCBC63, $C1B6B677, $75DADAAF, $63212142, $30101020, $1AFFFFE5, $0EF3F3FD, $6DD2D2BF, - $4CCDCD81, $140C0C18, $35131326, $2FECECC3, $E15F5FBE, $A2979735, $CC444488, $3917172E, - $57C4C493, $F2A7A755, $827E7EFC, $473D3D7A, $AC6464C8, $E75D5DBA, $2B191932, $957373E6, - $A06060C0, $98818119, $D14F4F9E, $7FDCDCA3, $66222244, $7E2A2A54, $AB90903B, $8388880B, - $CA46468C, $29EEEEC7, $D3B8B86B, $3C141428, $79DEDEA7, $E25E5EBC, $1D0B0B16, $76DBDBAD, - $3BE0E0DB, $56323264, $4E3A3A74, $1E0A0A14, $DB494992, $0A06060C, $6C242448, $E45C5CB8, - $5DC2C29F, $6ED3D3BD, $EFACAC43, $A66262C4, $A8919139, $A4959531, $37E4E4D3, $8B7979F2, - $32E7E7D5, $43C8C88B, $5937376E, $B76D6DDA, $8C8D8D01, $64D5D5B1, $D24E4E9C, $E0A9A949, - $B46C6CD8, $FA5656AC, $07F4F4F3, $25EAEACF, $AF6565CA, $8E7A7AF4, $E9AEAE47, $18080810, - $D5BABA6F, $887878F0, $6F25254A, $722E2E5C, $241C1C38, $F1A6A657, $C7B4B473, $51C6C697, - $23E8E8CB, $7CDDDDA1, $9C7474E8, $211F1F3E, $DD4B4B96, $DCBDBD61, $868B8B0D, $858A8A0F, - $907070E0, $423E3E7C, $C4B5B571, $AA6666CC, $D8484890, $05030306, $01F6F6F7, $120E0E1C, - $A36161C2, $5F35356A, $F95757AE, $D0B9B969, $91868617, $58C1C199, $271D1D3A, $B99E9E27, - $38E1E1D9, $13F8F8EB, $B398982B, $33111122, $BB6969D2, $70D9D9A9, $898E8E07, $A7949433, - $B69B9B2D, $221E1E3C, $92878715, $20E9E9C9, $49CECE87, $FF5555AA, $78282850, $7ADFDFA5, - $8F8C8C03, $F8A1A159, $80898909, $170D0D1A, $DABFBF65, $31E6E6D7, $C6424284, $B86868D0, - $C3414182, $B0999929, $772D2D5A, $110F0F1E, $CBB0B07B, $FC5454A8, $D6BBBB6D, $3A16162C - ); - - LastForwardTable: array [0..255] of longword = ( - $00000063, $0000007C, $00000077, $0000007B, $000000F2, $0000006B, $0000006F, $000000C5, - $00000030, $00000001, $00000067, $0000002B, $000000FE, $000000D7, $000000AB, $00000076, - $000000CA, $00000082, $000000C9, $0000007D, $000000FA, $00000059, $00000047, $000000F0, - $000000AD, $000000D4, $000000A2, $000000AF, $0000009C, $000000A4, $00000072, $000000C0, - $000000B7, $000000FD, $00000093, $00000026, $00000036, $0000003F, $000000F7, $000000CC, - $00000034, $000000A5, $000000E5, $000000F1, $00000071, $000000D8, $00000031, $00000015, - $00000004, $000000C7, $00000023, $000000C3, $00000018, $00000096, $00000005, $0000009A, - $00000007, $00000012, $00000080, $000000E2, $000000EB, $00000027, $000000B2, $00000075, - $00000009, $00000083, $0000002C, $0000001A, $0000001B, $0000006E, $0000005A, $000000A0, - $00000052, $0000003B, $000000D6, $000000B3, $00000029, $000000E3, $0000002F, $00000084, - $00000053, $000000D1, $00000000, $000000ED, $00000020, $000000FC, $000000B1, $0000005B, - $0000006A, $000000CB, $000000BE, $00000039, $0000004A, $0000004C, $00000058, $000000CF, - $000000D0, $000000EF, $000000AA, $000000FB, $00000043, $0000004D, $00000033, $00000085, - $00000045, $000000F9, $00000002, $0000007F, $00000050, $0000003C, $0000009F, $000000A8, - $00000051, $000000A3, $00000040, $0000008F, $00000092, $0000009D, $00000038, $000000F5, - $000000BC, $000000B6, $000000DA, $00000021, $00000010, $000000FF, $000000F3, $000000D2, - $000000CD, $0000000C, $00000013, $000000EC, $0000005F, $00000097, $00000044, $00000017, - $000000C4, $000000A7, $0000007E, $0000003D, $00000064, $0000005D, $00000019, $00000073, - $00000060, $00000081, $0000004F, $000000DC, $00000022, $0000002A, $00000090, $00000088, - $00000046, $000000EE, $000000B8, $00000014, $000000DE, $0000005E, $0000000B, $000000DB, - $000000E0, $00000032, $0000003A, $0000000A, $00000049, $00000006, $00000024, $0000005C, - $000000C2, $000000D3, $000000AC, $00000062, $00000091, $00000095, $000000E4, $00000079, - $000000E7, $000000C8, $00000037, $0000006D, $0000008D, $000000D5, $0000004E, $000000A9, - $0000006C, $00000056, $000000F4, $000000EA, $00000065, $0000007A, $000000AE, $00000008, - $000000BA, $00000078, $00000025, $0000002E, $0000001C, $000000A6, $000000B4, $000000C6, - $000000E8, $000000DD, $00000074, $0000001F, $0000004B, $000000BD, $0000008B, $0000008A, - $00000070, $0000003E, $000000B5, $00000066, $00000048, $00000003, $000000F6, $0000000E, - $00000061, $00000035, $00000057, $000000B9, $00000086, $000000C1, $0000001D, $0000009E, - $000000E1, $000000F8, $00000098, $00000011, $00000069, $000000D9, $0000008E, $00000094, - $0000009B, $0000001E, $00000087, $000000E9, $000000CE, $00000055, $00000028, $000000DF, - $0000008C, $000000A1, $00000089, $0000000D, $000000BF, $000000E6, $00000042, $00000068, - $00000041, $00000099, $0000002D, $0000000F, $000000B0, $00000054, $000000BB, $00000016 - ); - - InverseTable: array [0..255] of longword = ( - $50A7F451, $5365417E, $C3A4171A, $965E273A, $CB6BAB3B, $F1459D1F, $AB58FAAC, $9303E34B, - $55FA3020, $F66D76AD, $9176CC88, $254C02F5, $FCD7E54F, $D7CB2AC5, $80443526, $8FA362B5, - $495AB1DE, $671BBA25, $980EEA45, $E1C0FE5D, $02752FC3, $12F04C81, $A397468D, $C6F9D36B, - $E75F8F03, $959C9215, $EB7A6DBF, $DA595295, $2D83BED4, $D3217458, $2969E049, $44C8C98E, - $6A89C275, $78798EF4, $6B3E5899, $DD71B927, $B64FE1BE, $17AD88F0, $66AC20C9, $B43ACE7D, - $184ADF63, $82311AE5, $60335197, $457F5362, $E07764B1, $84AE6BBB, $1CA081FE, $942B08F9, - $58684870, $19FD458F, $876CDE94, $B7F87B52, $23D373AB, $E2024B72, $578F1FE3, $2AAB5566, - $0728EBB2, $03C2B52F, $9A7BC586, $A50837D3, $F2872830, $B2A5BF23, $BA6A0302, $5C8216ED, - $2B1CCF8A, $92B479A7, $F0F207F3, $A1E2694E, $CDF4DA65, $D5BE0506, $1F6234D1, $8AFEA6C4, - $9D532E34, $A055F3A2, $32E18A05, $75EBF6A4, $39EC830B, $AAEF6040, $069F715E, $51106EBD, - $F98A213E, $3D06DD96, $AE053EDD, $46BDE64D, $B58D5491, $055DC471, $6FD40604, $FF155060, - $24FB9819, $97E9BDD6, $CC434089, $779ED967, $BD42E8B0, $888B8907, $385B19E7, $DBEEC879, - $470A7CA1, $E90F427C, $C91E84F8, $00000000, $83868009, $48ED2B32, $AC70111E, $4E725A6C, - $FBFF0EFD, $5638850F, $1ED5AE3D, $27392D36, $64D90F0A, $21A65C68, $D1545B9B, $3A2E3624, - $B1670A0C, $0FE75793, $D296EEB4, $9E919B1B, $4FC5C080, $A220DC61, $694B775A, $161A121C, - $0ABA93E2, $E52AA0C0, $43E0223C, $1D171B12, $0B0D090E, $ADC78BF2, $B9A8B62D, $C8A91E14, - $8519F157, $4C0775AF, $BBDD99EE, $FD607FA3, $9F2601F7, $BCF5725C, $C53B6644, $347EFB5B, - $7629438B, $DCC623CB, $68FCEDB6, $63F1E4B8, $CADC31D7, $10856342, $40229713, $2011C684, - $7D244A85, $F83DBBD2, $1132F9AE, $6DA129C7, $4B2F9E1D, $F330B2DC, $EC52860D, $D0E3C177, - $6C16B32B, $99B970A9, $FA489411, $2264E947, $C48CFCA8, $1A3FF0A0, $D82C7D56, $EF903322, - $C74E4987, $C1D138D9, $FEA2CA8C, $360BD498, $CF81F5A6, $28DE7AA5, $268EB7DA, $A4BFAD3F, - $E49D3A2C, $0D927850, $9BCC5F6A, $62467E54, $C2138DF6, $E8B8D890, $5EF7392E, $F5AFC382, - $BE805D9F, $7C93D069, $A92DD56F, $B31225CF, $3B99ACC8, $A77D1810, $6E639CE8, $7BBB3BDB, - $097826CD, $F418596E, $01B79AEC, $A89A4F83, $656E95E6, $7EE6FFAA, $08CFBC21, $E6E815EF, - $D99BE7BA, $CE366F4A, $D4099FEA, $D67CB029, $AFB2A431, $31233F2A, $3094A5C6, $C066A235, - $37BC4E74, $A6CA82FC, $B0D090E0, $15D8A733, $4A9804F1, $F7DAEC41, $0E50CD7F, $2FF69117, - $8DD64D76, $4DB0EF43, $544DAACC, $DF0496E4, $E3B5D19E, $1B886A4C, $B81F2CC1, $7F516546, - $04EA5E9D, $5D358C01, $737487FA, $2E410BFB, $5A1D67B3, $52D2DB92, $335610E9, $1347D66D, - $8C61D79A, $7A0CA137, $8E14F859, $893C13EB, $EE27A9CE, $35C961B7, $EDE51CE1, $3CB1477A, - $59DFD29C, $3F73F255, $79CE1418, $BF37C773, $EACDF753, $5BAAFD5F, $146F3DDF, $86DB4478, - $81F3AFCA, $3EC468B9, $2C342438, $5F40A3C2, $72C31D16, $0C25E2BC, $8B493C28, $41950DFF, - $7101A839, $DEB30C08, $9CE4B4D8, $90C15664, $6184CB7B, $70B632D5, $745C6C48, $4257B8D0 - ); - - LastInverseTable: array [0..255] of longword = ( - $00000052, $00000009, $0000006A, $000000D5, $00000030, $00000036, $000000A5, $00000038, - $000000BF, $00000040, $000000A3, $0000009E, $00000081, $000000F3, $000000D7, $000000FB, - $0000007C, $000000E3, $00000039, $00000082, $0000009B, $0000002F, $000000FF, $00000087, - $00000034, $0000008E, $00000043, $00000044, $000000C4, $000000DE, $000000E9, $000000CB, - $00000054, $0000007B, $00000094, $00000032, $000000A6, $000000C2, $00000023, $0000003D, - $000000EE, $0000004C, $00000095, $0000000B, $00000042, $000000FA, $000000C3, $0000004E, - $00000008, $0000002E, $000000A1, $00000066, $00000028, $000000D9, $00000024, $000000B2, - $00000076, $0000005B, $000000A2, $00000049, $0000006D, $0000008B, $000000D1, $00000025, - $00000072, $000000F8, $000000F6, $00000064, $00000086, $00000068, $00000098, $00000016, - $000000D4, $000000A4, $0000005C, $000000CC, $0000005D, $00000065, $000000B6, $00000092, - $0000006C, $00000070, $00000048, $00000050, $000000FD, $000000ED, $000000B9, $000000DA, - $0000005E, $00000015, $00000046, $00000057, $000000A7, $0000008D, $0000009D, $00000084, - $00000090, $000000D8, $000000AB, $00000000, $0000008C, $000000BC, $000000D3, $0000000A, - $000000F7, $000000E4, $00000058, $00000005, $000000B8, $000000B3, $00000045, $00000006, - $000000D0, $0000002C, $0000001E, $0000008F, $000000CA, $0000003F, $0000000F, $00000002, - $000000C1, $000000AF, $000000BD, $00000003, $00000001, $00000013, $0000008A, $0000006B, - $0000003A, $00000091, $00000011, $00000041, $0000004F, $00000067, $000000DC, $000000EA, - $00000097, $000000F2, $000000CF, $000000CE, $000000F0, $000000B4, $000000E6, $00000073, - $00000096, $000000AC, $00000074, $00000022, $000000E7, $000000AD, $00000035, $00000085, - $000000E2, $000000F9, $00000037, $000000E8, $0000001C, $00000075, $000000DF, $0000006E, - $00000047, $000000F1, $0000001A, $00000071, $0000001D, $00000029, $000000C5, $00000089, - $0000006F, $000000B7, $00000062, $0000000E, $000000AA, $00000018, $000000BE, $0000001B, - $000000FC, $00000056, $0000003E, $0000004B, $000000C6, $000000D2, $00000079, $00000020, - $0000009A, $000000DB, $000000C0, $000000FE, $00000078, $000000CD, $0000005A, $000000F4, - $0000001F, $000000DD, $000000A8, $00000033, $00000088, $00000007, $000000C7, $00000031, - $000000B1, $00000012, $00000010, $00000059, $00000027, $00000080, $000000EC, $0000005F, - $00000060, $00000051, $0000007F, $000000A9, $00000019, $000000B5, $0000004A, $0000000D, - $0000002D, $000000E5, $0000007A, $0000009F, $00000093, $000000C9, $0000009C, $000000EF, - $000000A0, $000000E0, $0000003B, $0000004D, $000000AE, $0000002A, $000000F5, $000000B0, - $000000C8, $000000EB, $000000BB, $0000003C, $00000083, $00000053, $00000099, $00000061, - $00000017, $0000002B, $00000004, $0000007E, $000000BA, $00000077, $000000D6, $00000026, - $000000E1, $00000069, $00000014, $00000063, $00000055, $00000021, $0000000C, $0000007D - ); - -procedure ExpandAESKeyForEncryption(const Key: TAESKey128; var ExpandedKey: TAESExpandedKey128); -var - I, J: integer; - T: longword; - W0, W1, W2, W3: longword; -begin - ExpandedKey[0] := PLongWord(@Key[0])^; - ExpandedKey[1] := PLongWord(@Key[4])^; - ExpandedKey[2] := PLongWord(@Key[8])^; - ExpandedKey[3] := PLongWord(@Key[12])^; - I := 0; J := 1; - repeat - T := (ExpandedKey[I + 3] shl 24) or (ExpandedKey[I + 3] shr 8); - W0 := LastForwardTable[Byte(T)]; W1 := LastForwardTable[Byte(T shr 8)]; - W2 := LastForwardTable[Byte(T shr 16)]; W3 := LastForwardTable[Byte(T shr 24)]; - ExpandedKey[I + 4] := ExpandedKey[I] xor - (W0 xor ((W1 shl 8) or (W1 shr 24)) xor - ((W2 shl 16) or (W2 shr 16)) xor ((W3 shl 24) or (W3 shr 8))) xor Rcon[J]; - Inc(J); - ExpandedKey[I + 5] := ExpandedKey[I + 1] xor ExpandedKey[I + 4]; - ExpandedKey[I + 6] := ExpandedKey[I + 2] xor ExpandedKey[I + 5]; - ExpandedKey[I + 7] := ExpandedKey[I + 3] xor ExpandedKey[I + 6]; - Inc(I, 4); - until I >= 40; -end; - -procedure ExpandAESKeyForEncryption(const Key: TAESKey192; var ExpandedKey: TAESExpandedKey192); overload; -var - I, J: integer; - T: longword; - W0, W1, W2, W3: longword; -begin - ExpandedKey[0] := PLongWord(@Key[0])^; - ExpandedKey[1] := PLongWord(@Key[4])^; - ExpandedKey[2] := PLongWord(@Key[8])^; - ExpandedKey[3] := PLongWord(@Key[12])^; - ExpandedKey[4] := PLongWord(@Key[16])^; - ExpandedKey[5] := PLongWord(@Key[20])^; - I := 0; J := 1; - repeat - T := (ExpandedKey[I + 5] shl 24) or (ExpandedKey[I + 5] shr 8); - W0 := LastForwardTable[Byte(T)]; W1 := LastForwardTable[Byte(T shr 8)]; - W2 := LastForwardTable[Byte(T shr 16)]; W3 := LastForwardTable[Byte(T shr 24)]; - ExpandedKey[I + 6] := ExpandedKey[I] xor - (W0 xor ((W1 shl 8) or (W1 shr 24)) xor - ((W2 shl 16) or (W2 shr 16)) xor ((W3 shl 24) or (W3 shr 8))) xor Rcon[J]; - Inc(J); - ExpandedKey[I + 7] := ExpandedKey[I + 1] xor ExpandedKey[I + 6]; - ExpandedKey[I + 8] := ExpandedKey[I + 2] xor ExpandedKey[I + 7]; - ExpandedKey[I + 9] := ExpandedKey[I + 3] xor ExpandedKey[I + 8]; - ExpandedKey[I + 10] := ExpandedKey[I + 4] xor ExpandedKey[I + 9]; - ExpandedKey[I + 11] := ExpandedKey[I + 5] xor ExpandedKey[I + 10]; - Inc(I, 6); - until I >= 46; -end; - -procedure ExpandAESKeyForEncryption(const Key: TAESKey256; var ExpandedKey: TAESExpandedKey256); overload; -var - I, J: integer; - T: longword; - W0, W1, W2, W3: longword; -begin - ExpandedKey[0] := PLongWord(@Key[0])^; - ExpandedKey[1] := PLongWord(@Key[4])^; - ExpandedKey[2] := PLongWord(@Key[8])^; - ExpandedKey[3] := PLongWord(@Key[12])^; - ExpandedKey[4] := PLongWord(@Key[16])^; - ExpandedKey[5] := PLongWord(@Key[20])^; - ExpandedKey[6] := PLongWord(@Key[24])^; - ExpandedKey[7] := PLongWord(@Key[28])^; - I := 0; J := 1; - repeat - T := (ExpandedKey[I + 7] shl 24) or (ExpandedKey[I + 7] shr 8); - W0 := LastForwardTable[Byte(T)]; W1 := LastForwardTable[Byte(T shr 8)]; - W2 := LastForwardTable[Byte(T shr 16)]; W3 := LastForwardTable[Byte(T shr 24)]; - ExpandedKey[I + 8] := ExpandedKey[I] xor - (W0 xor ((W1 shl 8) or (W1 shr 24)) xor - ((W2 shl 16) or (W2 shr 16)) xor ((W3 shl 24) or (W3 shr 8))) xor Rcon[J]; - Inc(J); - ExpandedKey[I + 9] := ExpandedKey[I + 1] xor ExpandedKey[I + 8]; - ExpandedKey[I + 10] := ExpandedKey[I + 2] xor ExpandedKey[I + 9]; - ExpandedKey[I + 11] := ExpandedKey[I + 3] xor ExpandedKey[I + 10]; - W0 := LastForwardTable[Byte(ExpandedKey[I + 11])]; - W1 := LastForwardTable[Byte(ExpandedKey[I + 11] shr 8)]; - W2 := LastForwardTable[Byte(ExpandedKey[I + 11] shr 16)]; - W3 := LastForwardTable[Byte(ExpandedKey[I + 11] shr 24)]; - ExpandedKey[I + 12] := ExpandedKey[I + 4] xor - (W0 xor ((W1 shl 8) or (W1 shr 24)) xor - ((W2 shl 16) or (W2 shr 16)) xor ((W3 shl 24) or (W3 shr 8))); - ExpandedKey[I + 13] := ExpandedKey[I + 5] xor ExpandedKey[I + 12]; - ExpandedKey[I + 14] := ExpandedKey[I + 6] xor ExpandedKey[I + 13]; - ExpandedKey[I + 15] := ExpandedKey[I + 7] xor ExpandedKey[I + 14]; - Inc(I, 8); - until I >= 52; -end; - -procedure EncryptAES(const InBuf: TAESBuffer; const Key: TAESExpandedKey128; - var OutBuf: TAESBuffer); -var - T0, T1: array [0..3] of longword; - W0, W1, W2, W3: longword; -begin - // initializing - T0[0] := PLongWord(@InBuf[0])^ xor Key[0]; - T0[1] := PLongWord(@InBuf[4])^ xor Key[1]; - T0[2] := PLongWord(@InBuf[8])^ xor Key[2]; - T0[3] := PLongWord(@InBuf[12])^ xor Key[3]; - // performing transformation 9 times - // round 1 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[4]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[5]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[6]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[7]; - // round 2 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[8]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[9]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[10]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[11]; - // round 3 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[12]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[13]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[14]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[15]; - // round 4 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[16]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[17]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[18]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[19]; - // round 5 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[20]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[21]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[22]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[23]; - // round 6 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[24]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[25]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[26]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[27]; - // round 7 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[28]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[29]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[30]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[31]; - // round 8 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[32]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[33]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[34]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[35]; - // round 9 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[36]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[37]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[38]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[39]; - // last round of transformations - W0 := LastForwardTable[Byte(T1[0])]; W1 := LastForwardTable[Byte(T1[1] shr 8)]; - W2 := LastForwardTable[Byte(T1[2] shr 16)]; W3 := LastForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[40]; - W0 := LastForwardTable[Byte(T1[1])]; W1 := LastForwardTable[Byte(T1[2] shr 8)]; - W2 := LastForwardTable[Byte(T1[3] shr 16)]; W3 := LastForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[41]; - W0 := LastForwardTable[Byte(T1[2])]; W1 := LastForwardTable[Byte(T1[3] shr 8)]; - W2 := LastForwardTable[Byte(T1[0] shr 16)]; W3 := LastForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[42]; - W0 := LastForwardTable[Byte(T1[3])]; W1 := LastForwardTable[Byte(T1[0] shr 8)]; - W2 := LastForwardTable[Byte(T1[1] shr 16)]; W3 := LastForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[43]; - // finalizing - PLongWord(@OutBuf[0])^ := T0[0]; PLongWord(@OutBuf[4])^ := T0[1]; - PLongWord(@OutBuf[8])^ := T0[2]; PLongWord(@OutBuf[12])^ := T0[3]; -end; - -procedure EncryptAES(const InBuf: TAESBuffer; const Key: TAESExpandedKey192; - var OutBuf: TAESBuffer); -var - T0, T1: array [0..3] of longword; - W0, W1, W2, W3: longword; -begin - // initializing - T0[0] := PLongWord(@InBuf[0])^ xor Key[0]; - T0[1] := PLongWord(@InBuf[4])^ xor Key[1]; - T0[2] := PLongWord(@InBuf[8])^ xor Key[2]; - T0[3] := PLongWord(@InBuf[12])^ xor Key[3]; - // performing transformation 11 times - // round 1 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[4]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[5]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[6]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[7]; - // round 2 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[8]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[9]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[10]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[11]; - // round 3 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[12]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[13]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[14]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[15]; - // round 4 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[16]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[17]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[18]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[19]; - // round 5 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[20]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[21]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[22]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[23]; - // round 6 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[24]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[25]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[26]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[27]; - // round 7 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[28]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[29]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[30]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[31]; - // round 8 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[32]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[33]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[34]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[35]; - // round 9 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[36]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[37]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[38]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[39]; - // round 10 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[40]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[41]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[42]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[43]; - // round 11 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[44]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[45]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[46]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[47]; - // last round of transformations - W0 := LastForwardTable[Byte(T1[0])]; W1 := LastForwardTable[Byte(T1[1] shr 8)]; - W2 := LastForwardTable[Byte(T1[2] shr 16)]; W3 := LastForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[48]; - W0 := LastForwardTable[Byte(T1[1])]; W1 := LastForwardTable[Byte(T1[2] shr 8)]; - W2 := LastForwardTable[Byte(T1[3] shr 16)]; W3 := LastForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[49]; - W0 := LastForwardTable[Byte(T1[2])]; W1 := LastForwardTable[Byte(T1[3] shr 8)]; - W2 := LastForwardTable[Byte(T1[0] shr 16)]; W3 := LastForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[50]; - W0 := LastForwardTable[Byte(T1[3])]; W1 := LastForwardTable[Byte(T1[0] shr 8)]; - W2 := LastForwardTable[Byte(T1[1] shr 16)]; W3 := LastForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[51]; - // finalizing - PLongWord(@OutBuf[0])^ := T0[0]; PLongWord(@OutBuf[4])^ := T0[1]; - PLongWord(@OutBuf[8])^ := T0[2]; PLongWord(@OutBuf[12])^ := T0[3]; -end; - -procedure EncryptAES(const InBuf: TAESBuffer; const Key: TAESExpandedKey256; - var OutBuf: TAESBuffer); -var - T0, T1: array [0..3] of longword; - W0, W1, W2, W3: longword; -begin - // initializing - T0[0] := PLongWord(@InBuf[0])^ xor Key[0]; - T0[1] := PLongWord(@InBuf[4])^ xor Key[1]; - T0[2] := PLongWord(@InBuf[8])^ xor Key[2]; - T0[3] := PLongWord(@InBuf[12])^ xor Key[3]; - // performing transformation 13 times - // round 1 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[4]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[5]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[6]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[7]; - // round 2 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[8]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[9]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[10]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[11]; - // round 3 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[12]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[13]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[14]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[15]; - // round 4 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[16]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[17]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[18]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[19]; - // round 5 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[20]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[21]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[22]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[23]; - // round 6 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[24]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[25]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[26]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[27]; - // round 7 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[28]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[29]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[30]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[31]; - // round 8 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[32]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[33]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[34]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[35]; - // round 9 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[36]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[37]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[38]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[39]; - // round 10 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[40]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[41]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[42]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[43]; - // round 11 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[44]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[45]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[46]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[47]; - // round 12 - W0 := ForwardTable[Byte(T1[0])]; W1 := ForwardTable[Byte(T1[1] shr 8)]; - W2 := ForwardTable[Byte(T1[2] shr 16)]; W3 := ForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[48]; - W0 := ForwardTable[Byte(T1[1])]; W1 := ForwardTable[Byte(T1[2] shr 8)]; - W2 := ForwardTable[Byte(T1[3] shr 16)]; W3 := ForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[49]; - W0 := ForwardTable[Byte(T1[2])]; W1 := ForwardTable[Byte(T1[3] shr 8)]; - W2 := ForwardTable[Byte(T1[0] shr 16)]; W3 := ForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[50]; - W0 := ForwardTable[Byte(T1[3])]; W1 := ForwardTable[Byte(T1[0] shr 8)]; - W2 := ForwardTable[Byte(T1[1] shr 16)]; W3 := ForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[51]; - // round 13 - W0 := ForwardTable[Byte(T0[0])]; W1 := ForwardTable[Byte(T0[1] shr 8)]; - W2 := ForwardTable[Byte(T0[2] shr 16)]; W3 := ForwardTable[Byte(T0[3] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[52]; - W0 := ForwardTable[Byte(T0[1])]; W1 := ForwardTable[Byte(T0[2] shr 8)]; - W2 := ForwardTable[Byte(T0[3] shr 16)]; W3 := ForwardTable[Byte(T0[0] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[53]; - W0 := ForwardTable[Byte(T0[2])]; W1 := ForwardTable[Byte(T0[3] shr 8)]; - W2 := ForwardTable[Byte(T0[0] shr 16)]; W3 := ForwardTable[Byte(T0[1] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[54]; - W0 := ForwardTable[Byte(T0[3])]; W1 := ForwardTable[Byte(T0[0] shr 8)]; - W2 := ForwardTable[Byte(T0[1] shr 16)]; W3 := ForwardTable[Byte(T0[2] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[55]; - // last round of transformations - W0 := LastForwardTable[Byte(T1[0])]; W1 := LastForwardTable[Byte(T1[1] shr 8)]; - W2 := LastForwardTable[Byte(T1[2] shr 16)]; W3 := LastForwardTable[Byte(T1[3] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[56]; - W0 := LastForwardTable[Byte(T1[1])]; W1 := LastForwardTable[Byte(T1[2] shr 8)]; - W2 := LastForwardTable[Byte(T1[3] shr 16)]; W3 := LastForwardTable[Byte(T1[0] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[57]; - W0 := LastForwardTable[Byte(T1[2])]; W1 := LastForwardTable[Byte(T1[3] shr 8)]; - W2 := LastForwardTable[Byte(T1[0] shr 16)]; W3 := LastForwardTable[Byte(T1[1] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[58]; - W0 := LastForwardTable[Byte(T1[3])]; W1 := LastForwardTable[Byte(T1[0] shr 8)]; - W2 := LastForwardTable[Byte(T1[1] shr 16)]; W3 := LastForwardTable[Byte(T1[2] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[59]; - // finalizing - PLongWord(@OutBuf[0])^ := T0[0]; PLongWord(@OutBuf[4])^ := T0[1]; - PLongWord(@OutBuf[8])^ := T0[2]; PLongWord(@OutBuf[12])^ := T0[3]; -end; - -procedure ExpandAESKeyForDecryption(var ExpandedKey: TAESExpandedKey128); -var - I: integer; - U, F2, F4, F8, F9: longword; -begin - for I := 1 to 9 do - begin - F9 := ExpandedKey[I * 4]; - U := F9 and $80808080; - F2 := ((F9 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F2 and $80808080; - F4 := ((F2 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F4 and $80808080; - F8 := ((F4 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - F9 := F9 xor F8; - ExpandedKey[I * 4] := F2 xor F4 xor F8 xor - (((F2 xor F9) shl 24) or ((F2 xor F9) shr 8)) xor - (((F4 xor F9) shl 16) or ((F4 xor F9) shr 16)) xor ((F9 shl 8) or (F9 shr 24)); - F9 := ExpandedKey[I * 4 + 1]; - U := F9 and $80808080; - F2 := ((F9 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F2 and $80808080; - F4 := ((F2 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F4 and $80808080; - F8 := ((F4 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - F9 := F9 xor F8; - ExpandedKey[I * 4 + 1] := F2 xor F4 xor F8 xor - (((F2 xor F9) shl 24) or ((F2 xor F9) shr 8)) xor - (((F4 xor F9) shl 16) or ((F4 xor F9) shr 16)) xor ((F9 shl 8) or (F9 shr 24)); - F9 := ExpandedKey[I * 4 + 2]; - U := F9 and $80808080; - F2 := ((F9 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F2 and $80808080; - F4 := ((F2 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F4 and $80808080; - F8 := ((F4 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - F9 := F9 xor F8; - ExpandedKey[I * 4 + 2] := F2 xor F4 xor F8 xor - (((F2 xor F9) shl 24) or ((F2 xor F9) shr 8)) xor - (((F4 xor F9) shl 16) or ((F4 xor F9) shr 16)) xor ((F9 shl 8) or (F9 shr 24)); - F9 := ExpandedKey[I * 4 + 3]; - U := F9 and $80808080; - F2 := ((F9 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F2 and $80808080; - F4 := ((F2 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F4 and $80808080; - F8 := ((F4 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - F9 := F9 xor F8; - ExpandedKey[I * 4 + 3] := F2 xor F4 xor F8 xor - (((F2 xor F9) shl 24) or ((F2 xor F9) shr 8)) xor - (((F4 xor F9) shl 16) or ((F4 xor F9) shr 16)) xor ((F9 shl 8) or (F9 shr 24)); - end; -end; - -procedure ExpandAESKeyForDecryption(const Key: TAESKey128; var ExpandedKey: TAESExpandedKey128); -begin - ExpandAESKeyForEncryption(Key, ExpandedKey); - ExpandAESKeyForDecryption(ExpandedKey); -end; - -procedure ExpandAESKeyForDecryption(var ExpandedKey: TAESExpandedKey192); -var - I: integer; - U, F2, F4, F8, F9: longword; -begin - for I := 1 to 11 do - begin - F9 := ExpandedKey[I * 4]; - U := F9 and $80808080; - F2 := ((F9 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F2 and $80808080; - F4 := ((F2 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F4 and $80808080; - F8 := ((F4 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - F9 := F9 xor F8; - ExpandedKey[I * 4] := F2 xor F4 xor F8 xor - (((F2 xor F9) shl 24) or ((F2 xor F9) shr 8)) xor - (((F4 xor F9) shl 16) or ((F4 xor F9) shr 16)) xor ((F9 shl 8) or (F9 shr 24)); - F9 := ExpandedKey[I * 4 + 1]; - U := F9 and $80808080; - F2 := ((F9 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F2 and $80808080; - F4 := ((F2 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F4 and $80808080; - F8 := ((F4 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - F9 := F9 xor F8; - ExpandedKey[I * 4 + 1] := F2 xor F4 xor F8 xor - (((F2 xor F9) shl 24) or ((F2 xor F9) shr 8)) xor - (((F4 xor F9) shl 16) or ((F4 xor F9) shr 16)) xor ((F9 shl 8) or (F9 shr 24)); - F9 := ExpandedKey[I * 4 + 2]; - U := F9 and $80808080; - F2 := ((F9 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F2 and $80808080; - F4 := ((F2 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F4 and $80808080; - F8 := ((F4 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - F9 := F9 xor F8; - ExpandedKey[I * 4 + 2] := F2 xor F4 xor F8 xor - (((F2 xor F9) shl 24) or ((F2 xor F9) shr 8)) xor - (((F4 xor F9) shl 16) or ((F4 xor F9) shr 16)) xor ((F9 shl 8) or (F9 shr 24)); - F9 := ExpandedKey[I * 4 + 3]; - U := F9 and $80808080; - F2 := ((F9 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F2 and $80808080; - F4 := ((F2 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F4 and $80808080; - F8 := ((F4 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - F9 := F9 xor F8; - ExpandedKey[I * 4 + 3] := F2 xor F4 xor F8 xor - (((F2 xor F9) shl 24) or ((F2 xor F9) shr 8)) xor - (((F4 xor F9) shl 16) or ((F4 xor F9) shr 16)) xor ((F9 shl 8) or (F9 shr 24)); - end; -end; - -procedure ExpandAESKeyForDecryption(const Key: TAESKey192; var ExpandedKey: TAESExpandedKey192); -begin - ExpandAESKeyForEncryption(Key, ExpandedKey); - ExpandAESKeyForDecryption(ExpandedKey); -end; - -procedure ExpandAESKeyForDecryption(var ExpandedKey: TAESExpandedKey256); -var - I: integer; - U, F2, F4, F8, F9: longword; -begin - for I := 1 to 13 do - begin - F9 := ExpandedKey[I * 4]; - U := F9 and $80808080; - F2 := ((F9 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F2 and $80808080; - F4 := ((F2 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F4 and $80808080; - F8 := ((F4 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - F9 := F9 xor F8; - ExpandedKey[I * 4] := F2 xor F4 xor F8 xor - (((F2 xor F9) shl 24) or ((F2 xor F9) shr 8)) xor - (((F4 xor F9) shl 16) or ((F4 xor F9) shr 16)) xor ((F9 shl 8) or (F9 shr 24)); - F9 := ExpandedKey[I * 4 + 1]; - U := F9 and $80808080; - F2 := ((F9 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F2 and $80808080; - F4 := ((F2 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F4 and $80808080; - F8 := ((F4 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - F9 := F9 xor F8; - ExpandedKey[I * 4 + 1] := F2 xor F4 xor F8 xor - (((F2 xor F9) shl 24) or ((F2 xor F9) shr 8)) xor - (((F4 xor F9) shl 16) or ((F4 xor F9) shr 16)) xor ((F9 shl 8) or (F9 shr 24)); - F9 := ExpandedKey[I * 4 + 2]; - U := F9 and $80808080; - F2 := ((F9 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F2 and $80808080; - F4 := ((F2 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F4 and $80808080; - F8 := ((F4 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - F9 := F9 xor F8; - ExpandedKey[I * 4 + 2] := F2 xor F4 xor F8 xor - (((F2 xor F9) shl 24) or ((F2 xor F9) shr 8)) xor - (((F4 xor F9) shl 16) or ((F4 xor F9) shr 16)) xor ((F9 shl 8) or (F9 shr 24)); - F9 := ExpandedKey[I * 4 + 3]; - U := F9 and $80808080; - F2 := ((F9 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F2 and $80808080; - F4 := ((F2 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - U := F4 and $80808080; - F8 := ((F4 and $7F7F7F7F) shl 1) xor ((U - (U shr 7)) and $1B1B1B1B); - F9 := F9 xor F8; - ExpandedKey[I * 4 + 3] := F2 xor F4 xor F8 xor - (((F2 xor F9) shl 24) or ((F2 xor F9) shr 8)) xor - (((F4 xor F9) shl 16) or ((F4 xor F9) shr 16)) xor ((F9 shl 8) or (F9 shr 24)); - end; -end; - -procedure ExpandAESKeyForDecryption(const Key: TAESKey256; var ExpandedKey: TAESExpandedKey256); -begin - ExpandAESKeyForEncryption(Key, ExpandedKey); - ExpandAESKeyForDecryption(ExpandedKey); -end; - -procedure DecryptAES(const InBuf: TAESBuffer; const Key: TAESExpandedKey128; - var OutBuf: TAESBuffer); -var - T0, T1: array [0..3] of longword; - W0, W1, W2, W3: longword; -begin - // initializing - T0[0] := PLongWord(@InBuf[0])^ xor Key[40]; - T0[1] := PLongWord(@InBuf[4])^ xor Key[41]; - T0[2] := PLongWord(@InBuf[8])^ xor Key[42]; - T0[3] := PLongWord(@InBuf[12])^ xor Key[43]; - // performing transformations 9 times - // round 1 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[36]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[37]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[38]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[39]; - // round 2 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[32]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[33]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[34]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[35]; - // round 3 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[28]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[29]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[30]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[31]; - // round 4 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[24]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[25]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[26]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[27]; - // round 5 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[20]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[21]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[22]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[23]; - // round 6 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[16]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[17]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[18]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[19]; - // round 7 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[12]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[13]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[14]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[15]; - // round 8 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[8]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[9]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[10]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[11]; - // round 9 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[4]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[5]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[6]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[7]; - // last round of transformations - W0 := LastInverseTable[Byte(T1[0])]; W1 := LastInverseTable[Byte(T1[3] shr 8)]; - W2 := LastInverseTable[Byte(T1[2] shr 16)]; W3 := LastInverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[0]; - W0 := LastInverseTable[Byte(T1[1])]; W1 := LastInverseTable[Byte(T1[0] shr 8)]; - W2 := LastInverseTable[Byte(T1[3] shr 16)]; W3 := LastInverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[1]; - W0 := LastInverseTable[Byte(T1[2])]; W1 := LastInverseTable[Byte(T1[1] shr 8)]; - W2 := LastInverseTable[Byte(T1[0] shr 16)]; W3 := LastInverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[2]; - W0 := LastInverseTable[Byte(T1[3])]; W1 := LastInverseTable[Byte(T1[2] shr 8)]; - W2 := LastInverseTable[Byte(T1[1] shr 16)]; W3 := LastInverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[3]; - // finalizing - PLongWord(@OutBuf[0])^ := T0[0]; PLongWord(@OutBuf[4])^ := T0[1]; - PLongWord(@OutBuf[8])^ := T0[2]; PLongWord(@OutBuf[12])^ := T0[3]; -end; - -procedure DecryptAES(const InBuf: TAESBuffer; const Key: TAESExpandedKey192; - var OutBuf: TAESBuffer); -var - T0, T1: array [0..3] of longword; - W0, W1, W2, W3: longword; -begin - // initializing - T0[0] := PLongWord(@InBuf[0])^ xor Key[48]; - T0[1] := PLongWord(@InBuf[4])^ xor Key[49]; - T0[2] := PLongWord(@InBuf[8])^ xor Key[50]; - T0[3] := PLongWord(@InBuf[12])^ xor Key[51]; - // performing transformations 11 times - // round 1 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[44]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[45]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[46]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[47]; - // round 2 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[40]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[41]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[42]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[43]; - // round 3 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[36]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[37]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[38]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[39]; - // round 4 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[32]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[33]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[34]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[35]; - // round 5 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[28]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[29]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[30]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[31]; - // round 6 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[24]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[25]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[26]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[27]; - // round 7 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[20]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[21]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[22]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[23]; - // round 8 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[16]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[17]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[18]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[19]; - // round 9 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[12]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[13]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[14]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[15]; - // round 10 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[8]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[9]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[10]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[11]; - // round 11 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[4]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[5]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[6]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[7]; - // last round of transformations - W0 := LastInverseTable[Byte(T1[0])]; W1 := LastInverseTable[Byte(T1[3] shr 8)]; - W2 := LastInverseTable[Byte(T1[2] shr 16)]; W3 := LastInverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[0]; - W0 := LastInverseTable[Byte(T1[1])]; W1 := LastInverseTable[Byte(T1[0] shr 8)]; - W2 := LastInverseTable[Byte(T1[3] shr 16)]; W3 := LastInverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[1]; - W0 := LastInverseTable[Byte(T1[2])]; W1 := LastInverseTable[Byte(T1[1] shr 8)]; - W2 := LastInverseTable[Byte(T1[0] shr 16)]; W3 := LastInverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[2]; - W0 := LastInverseTable[Byte(T1[3])]; W1 := LastInverseTable[Byte(T1[2] shr 8)]; - W2 := LastInverseTable[Byte(T1[1] shr 16)]; W3 := LastInverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[3]; - // finalizing - PLongWord(@OutBuf[0])^ := T0[0]; PLongWord(@OutBuf[4])^ := T0[1]; - PLongWord(@OutBuf[8])^ := T0[2]; PLongWord(@OutBuf[12])^ := T0[3]; -end; - -procedure DecryptAES(const InBuf: TAESBuffer; const Key: TAESExpandedKey256; - var OutBuf: TAESBuffer); -var - T0, T1: array [0..3] of longword; - W0, W1, W2, W3: longword; -begin - // initializing - T0[0] := PLongWord(@InBuf[0])^ xor Key[56]; - T0[1] := PLongWord(@InBuf[4])^ xor Key[57]; - T0[2] := PLongWord(@InBuf[8])^ xor Key[58]; - T0[3] := PLongWord(@InBuf[12])^ xor Key[59]; - // performing transformations 13 times - // round 1 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[52]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[53]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[54]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[55]; - // round 2 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[48]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[49]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[50]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[51]; - // round 3 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[44]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[45]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[46]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[47]; - // round 4 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[40]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[41]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[42]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[43]; - // round 5 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[36]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[37]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[38]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[39]; - // round 6 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[32]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[33]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[34]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[35]; - // round 7 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[28]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[29]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[30]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[31]; - // round 8 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[24]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[25]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[26]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[27]; - // round 9 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[20]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[21]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[22]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[23]; - // round 10 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[16]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[17]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[18]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[19]; - // round 11 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[12]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[13]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[14]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[15]; - // round 12 - W0 := InverseTable[Byte(T1[0])]; W1 := InverseTable[Byte(T1[3] shr 8)]; - W2 := InverseTable[Byte(T1[2] shr 16)]; W3 := InverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[8]; - W0 := InverseTable[Byte(T1[1])]; W1 := InverseTable[Byte(T1[0] shr 8)]; - W2 := InverseTable[Byte(T1[3] shr 16)]; W3 := InverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[9]; - W0 := InverseTable[Byte(T1[2])]; W1 := InverseTable[Byte(T1[1] shr 8)]; - W2 := InverseTable[Byte(T1[0] shr 16)]; W3 := InverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[10]; - W0 := InverseTable[Byte(T1[3])]; W1 := InverseTable[Byte(T1[2] shr 8)]; - W2 := InverseTable[Byte(T1[1] shr 16)]; W3 := InverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[11]; - // round 13 - W0 := InverseTable[Byte(T0[0])]; W1 := InverseTable[Byte(T0[3] shr 8)]; - W2 := InverseTable[Byte(T0[2] shr 16)]; W3 := InverseTable[Byte(T0[1] shr 24)]; - T1[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[4]; - W0 := InverseTable[Byte(T0[1])]; W1 := InverseTable[Byte(T0[0] shr 8)]; - W2 := InverseTable[Byte(T0[3] shr 16)]; W3 := InverseTable[Byte(T0[2] shr 24)]; - T1[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[5]; - W0 := InverseTable[Byte(T0[2])]; W1 := InverseTable[Byte(T0[1] shr 8)]; - W2 := InverseTable[Byte(T0[0] shr 16)]; W3 := InverseTable[Byte(T0[3] shr 24)]; - T1[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[6]; - W0 := InverseTable[Byte(T0[3])]; W1 := InverseTable[Byte(T0[2] shr 8)]; - W2 := InverseTable[Byte(T0[1] shr 16)]; W3 := InverseTable[Byte(T0[0] shr 24)]; - T1[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[7]; - // last round of transformations - W0 := LastInverseTable[Byte(T1[0])]; W1 := LastInverseTable[Byte(T1[3] shr 8)]; - W2 := LastInverseTable[Byte(T1[2] shr 16)]; W3 := LastInverseTable[Byte(T1[1] shr 24)]; - T0[0] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[0]; - W0 := LastInverseTable[Byte(T1[1])]; W1 := LastInverseTable[Byte(T1[0] shr 8)]; - W2 := LastInverseTable[Byte(T1[3] shr 16)]; W3 := LastInverseTable[Byte(T1[2] shr 24)]; - T0[1] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[1]; - W0 := LastInverseTable[Byte(T1[2])]; W1 := LastInverseTable[Byte(T1[1] shr 8)]; - W2 := LastInverseTable[Byte(T1[0] shr 16)]; W3 := LastInverseTable[Byte(T1[3] shr 24)]; - T0[2] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[2]; - W0 := LastInverseTable[Byte(T1[3])]; W1 := LastInverseTable[Byte(T1[2] shr 8)]; - W2 := LastInverseTable[Byte(T1[1] shr 16)]; W3 := LastInverseTable[Byte(T1[0] shr 24)]; - T0[3] := (W0 xor ((W1 shl 8) or (W1 shr 24)) xor ((W2 shl 16) or (W2 shr 16)) - xor ((W3 shl 24) or (W3 shr 8))) xor Key[3]; - // finalizing - PLongWord(@OutBuf[0])^ := T0[0]; PLongWord(@OutBuf[4])^ := T0[1]; - PLongWord(@OutBuf[8])^ := T0[2]; PLongWord(@OutBuf[12])^ := T0[3]; -end; - -// Stream encryption routines (ECB mode) - -procedure EncryptAESStreamECB(Source: TStream; Count: cardinal; - const Key: TAESKey128; Dest: TStream); -var - ExpandedKey: TAESExpandedKey128; -begin - ExpandAESKeyForEncryption(Key, ExpandedKey); - EncryptAESStreamECB(Source, Count, ExpandedKey, Dest); -end; - -procedure EncryptAESStreamECB(Source: TStream; Count: cardinal; - const Key: TAESKey192; Dest: TStream); -var - ExpandedKey: TAESExpandedKey192; -begin - ExpandAESKeyForEncryption(Key, ExpandedKey); - EncryptAESStreamECB(Source, Count, ExpandedKey, Dest); -end; - -procedure EncryptAESStreamECB(Source: TStream; Count: cardinal; - const Key: TAESKey256; Dest: TStream); -var - ExpandedKey: TAESExpandedKey256; -begin - ExpandAESKeyForEncryption(Key, ExpandedKey); - EncryptAESStreamECB(Source, Count, ExpandedKey, Dest); -end; - -procedure EncryptAESStreamECB(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey128; Dest: TStream); -var - TempIn, TempOut: TAESBuffer; - Done: cardinal; -begin - if Count = 0 then - begin - Source.Position := 0; - Count := Source.Size; - end - else Count := Min(Count, Source.Size - Source.Position); - if Count = 0 then exit; - while Count >= SizeOf(TAESBuffer) do - begin - Done := Source.Read(TempIn, SizeOf(TempIn)); - if Done < SizeOf(TempIn) then - raise EStreamError.Create(SReadError); - EncryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - Dec(Count, SizeOf(TAESBuffer)); - end; - if Count > 0 then - begin - Done := Source.Read(TempIn, Count); - if Done < Count then - raise EStreamError.Create(SReadError); - FillChar(TempIn[Count], SizeOf(TempIn) - Count, 0); - EncryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - end; -end; - -procedure EncryptAESStreamECB(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey192; Dest: TStream); -var - TempIn, TempOut: TAESBuffer; - Done: cardinal; -begin - if Count = 0 then - begin - Source.Position := 0; - Count := Source.Size; - end - else Count := Min(Count, Source.Size - Source.Position); - if Count = 0 then exit; - while Count >= SizeOf(TAESBuffer) do - begin - Done := Source.Read(TempIn, SizeOf(TempIn)); - if Done < SizeOf(TempIn) then - raise EStreamError.Create(SReadError); - EncryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - Dec(Count, SizeOf(TAESBuffer)); - end; - if Count > 0 then - begin - Done := Source.Read(TempIn, Count); - if Done < Count then - raise EStreamError.Create(SReadError); - FillChar(TempIn[Count], SizeOf(TempIn) - Count, 0); - EncryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - end; -end; - -procedure EncryptAESStreamECB(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey256; Dest: TStream); -var - TempIn, TempOut: TAESBuffer; - Done: cardinal; -begin - if Count = 0 then - begin - Source.Position := 0; - Count := Source.Size; - end - else Count := Min(Count, Source.Size - Source.Position); - if Count = 0 then exit; - while Count >= SizeOf(TAESBuffer) do - begin - Done := Source.Read(TempIn, SizeOf(TempIn)); - if Done < SizeOf(TempIn) then - raise EStreamError.Create(SReadError); - EncryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - Dec(Count, SizeOf(TAESBuffer)); - end; - if Count > 0 then - begin - Done := Source.Read(TempIn, Count); - if Done < Count then - raise EStreamError.Create(SReadError); - FillChar(TempIn[Count], SizeOf(TempIn) - Count, 0); - EncryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - end; -end; - -// Stream decryption routines (ECB mode) - -procedure DecryptAESStreamECB(Source: TStream; Count: cardinal; - const Key: TAESKey128; Dest: TStream); -var - ExpandedKey: TAESExpandedKey128; -begin - ExpandAESKeyForDecryption(Key, ExpandedKey); - DecryptAESStreamECB(Source, Count, ExpandedKey, Dest); -end; - -procedure DecryptAESStreamECB(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey128; Dest: TStream); -var - TempIn, TempOut: TAESBuffer; - Done: cardinal; -begin - if Count = 0 then - begin - Source.Position := 0; - Count := Source.Size; - end - else Count := Min(Count, Source.Size - Source.Position); - if Count = 0 then exit; - if (Count mod SizeOf(TAESBuffer)) > 0 then - raise EAESError.Create(SInvalidInBufSize); - while Count >= SizeOf(TAESBuffer) do - begin - Done := Source.Read(TempIn, SizeOf(TempIn)); - if Done < SizeOf(TempIn) then - raise EStreamError.Create(SReadError); - DecryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - Dec(Count, SizeOf(TAESBuffer)); - end; -end; - -procedure DecryptAESStreamECB(Source: TStream; Count: cardinal; - const Key: TAESKey192; Dest: TStream); -var - ExpandedKey: TAESExpandedKey192; -begin - ExpandAESKeyForDecryption(Key, ExpandedKey); - DecryptAESStreamECB(Source, Count, ExpandedKey, Dest); -end; - -procedure DecryptAESStreamECB(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey192; Dest: TStream); -var - TempIn, TempOut: TAESBuffer; - Done: cardinal; -begin - if Count = 0 then - begin - Source.Position := 0; - Count := Source.Size; - end - else Count := Min(Count, Source.Size - Source.Position); - if Count = 0 then exit; - if (Count mod SizeOf(TAESBuffer)) > 0 then - raise EAESError.Create(SInvalidInBufSize); - while Count >= SizeOf(TAESBuffer) do - begin - Done := Source.Read(TempIn, SizeOf(TempIn)); - if Done < SizeOf(TempIn) then - raise EStreamError.Create(SReadError); - DecryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - Dec(Count, SizeOf(TAESBuffer)); - end; -end; - -procedure DecryptAESStreamECB(Source: TStream; Count: cardinal; - const Key: TAESKey256; Dest: TStream); -var - ExpandedKey: TAESExpandedKey256; -begin - ExpandAESKeyForDecryption(Key, ExpandedKey); - DecryptAESStreamECB(Source, Count, ExpandedKey, Dest); -end; - -procedure DecryptAESStreamECB(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey256; Dest: TStream); -var - TempIn, TempOut: TAESBuffer; - Done: cardinal; -begin - if Count = 0 then - begin - Source.Position := 0; - Count := Source.Size; - end - else Count := Min(Count, Source.Size - Source.Position); - if Count = 0 then exit; - if (Count mod SizeOf(TAESBuffer)) > 0 then - raise EAESError.Create(SInvalidInBufSize); - while Count >= SizeOf(TAESBuffer) do - begin - Done := Source.Read(TempIn, SizeOf(TempIn)); - if Done < SizeOf(TempIn) then - raise EStreamError.Create(SReadError); - DecryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - Dec(Count, SizeOf(TAESBuffer)); - end; -end; - -// Stream encryption routines (CBC mode) - -procedure EncryptAESStreamCBC(Source: TStream; Count: cardinal; - const Key: TAESKey128; const InitVector: TAESBuffer; Dest: TStream); -var - ExpandedKey: TAESExpandedKey128; -begin - ExpandAESKeyForEncryption(Key, ExpandedKey); - EncryptAESStreamCBC(Source, Count, ExpandedKey, InitVector, Dest); -end; - -procedure EncryptAESStreamCBC(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey128; const InitVector: TAESBuffer; - Dest: TStream); -var - TempIn, TempOut, Vector: TAESBuffer; - Done: cardinal; -begin - if Count = 0 then - begin - Source.Position := 0; - Count := Source.Size; - end - else Count := Min(Count, Source.Size - Source.Position); - if Count = 0 then exit; - Vector := InitVector; - while Count >= SizeOf(TAESBuffer) do - begin - Done := Source.Read(TempIn, SizeOf(TempIn)); - if Done < SizeOf(TempIn) then - raise EStreamError.Create(SReadError); - PLongWord(@TempIn[0])^ := PLongWord(@TempIn[0])^ xor PLongWord(@Vector[0])^; - PLongWord(@TempIn[4])^ := PLongWord(@TempIn[4])^ xor PLongWord(@Vector[4])^; - PLongWord(@TempIn[8])^ := PLongWord(@TempIn[8])^ xor PLongWord(@Vector[8])^; - PLongWord(@TempIn[12])^ := PLongWord(@TempIn[12])^ xor PLongWord(@Vector[12])^; - EncryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - Vector := TempOut; - Dec(Count, SizeOf(TAESBuffer)); - end; - if Count > 0 then - begin - Done := Source.Read(TempIn, Count); - if Done < Count then - raise EStreamError.Create(SReadError); - FillChar(TempIn[Count], SizeOf(TempIn) - Count, 0); - PLongWord(@TempIn[0])^ := PLongWord(@TempIn[0])^ xor PLongWord(@Vector[0])^; - PLongWord(@TempIn[4])^ := PLongWord(@TempIn[4])^ xor PLongWord(@Vector[4])^; - PLongWord(@TempIn[8])^ := PLongWord(@TempIn[8])^ xor PLongWord(@Vector[8])^; - PLongWord(@TempIn[12])^ := PLongWord(@TempIn[12])^ xor PLongWord(@Vector[12])^; - EncryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - end; -end; - -procedure EncryptAESStreamCBC(Source: TStream; Count: cardinal; - const Key: TAESKey192; const InitVector: TAESBuffer; Dest: TStream); -var - ExpandedKey: TAESExpandedKey192; -begin - ExpandAESKeyForEncryption(Key, ExpandedKey); - EncryptAESStreamCBC(Source, Count, ExpandedKey, InitVector, Dest); -end; - -procedure EncryptAESStreamCBC(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey192; const InitVector: TAESBuffer; - Dest: TStream); -var - TempIn, TempOut, Vector: TAESBuffer; - Done: cardinal; -begin - if Count = 0 then - begin - Source.Position := 0; - Count := Source.Size; - end - else Count := Min(Count, Source.Size - Source.Position); - if Count = 0 then exit; - Vector := InitVector; - while Count >= SizeOf(TAESBuffer) do - begin - Done := Source.Read(TempIn, SizeOf(TempIn)); - if Done < SizeOf(TempIn) then - raise EStreamError.Create(SReadError); - PLongWord(@TempIn[0])^ := PLongWord(@TempIn[0])^ xor PLongWord(@Vector[0])^; - PLongWord(@TempIn[4])^ := PLongWord(@TempIn[4])^ xor PLongWord(@Vector[4])^; - PLongWord(@TempIn[8])^ := PLongWord(@TempIn[8])^ xor PLongWord(@Vector[8])^; - PLongWord(@TempIn[12])^ := PLongWord(@TempIn[12])^ xor PLongWord(@Vector[12])^; - EncryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - Vector := TempOut; - Dec(Count, SizeOf(TAESBuffer)); - end; - if Count > 0 then - begin - Done := Source.Read(TempIn, Count); - if Done < Count then - raise EStreamError.Create(SReadError); - FillChar(TempIn[Count], SizeOf(TempIn) - Count, 0); - PLongWord(@TempIn[0])^ := PLongWord(@TempIn[0])^ xor PLongWord(@Vector[0])^; - PLongWord(@TempIn[4])^ := PLongWord(@TempIn[4])^ xor PLongWord(@Vector[4])^; - PLongWord(@TempIn[8])^ := PLongWord(@TempIn[8])^ xor PLongWord(@Vector[8])^; - PLongWord(@TempIn[12])^ := PLongWord(@TempIn[12])^ xor PLongWord(@Vector[12])^; - EncryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - end; -end; - -procedure EncryptAESStreamCBC(Source: TStream; Count: cardinal; - const Key: TAESKey256; const InitVector: TAESBuffer; Dest: TStream); -var - ExpandedKey: TAESExpandedKey256; -begin - ExpandAESKeyForEncryption(Key, ExpandedKey); - EncryptAESStreamCBC(Source, Count, ExpandedKey, InitVector, Dest); -end; - -procedure EncryptAESStreamCBC(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey256; const InitVector: TAESBuffer; - Dest: TStream); -var - TempIn, TempOut, Vector: TAESBuffer; - Done: cardinal; -begin - if Count = 0 then - begin - Source.Position := 0; - Count := Source.Size; - end - else Count := Min(Count, Source.Size - Source.Position); - if Count = 0 then exit; - Vector := InitVector; - while Count >= SizeOf(TAESBuffer) do - begin - Done := Source.Read(TempIn, SizeOf(TempIn)); - if Done < SizeOf(TempIn) then - raise EStreamError.Create(SReadError); - PLongWord(@TempIn[0])^ := PLongWord(@TempIn[0])^ xor PLongWord(@Vector[0])^; - PLongWord(@TempIn[4])^ := PLongWord(@TempIn[4])^ xor PLongWord(@Vector[4])^; - PLongWord(@TempIn[8])^ := PLongWord(@TempIn[8])^ xor PLongWord(@Vector[8])^; - PLongWord(@TempIn[12])^ := PLongWord(@TempIn[12])^ xor PLongWord(@Vector[12])^; - EncryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - Vector := TempOut; - Dec(Count, SizeOf(TAESBuffer)); - end; - if Count > 0 then - begin - Done := Source.Read(TempIn, Count); - if Done < Count then - raise EStreamError.Create(SReadError); - FillChar(TempIn[Count], SizeOf(TempIn) - Count, 0); - PLongWord(@TempIn[0])^ := PLongWord(@TempIn[0])^ xor PLongWord(@Vector[0])^; - PLongWord(@TempIn[4])^ := PLongWord(@TempIn[4])^ xor PLongWord(@Vector[4])^; - PLongWord(@TempIn[8])^ := PLongWord(@TempIn[8])^ xor PLongWord(@Vector[8])^; - PLongWord(@TempIn[12])^ := PLongWord(@TempIn[12])^ xor PLongWord(@Vector[12])^; - EncryptAES(TempIn, ExpandedKey, TempOut); - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError.Create(SWriteError); - end; -end; - -// Stream decryption routines (CBC mode) - -procedure DecryptAESStreamCBC(Source: TStream; Count: cardinal; - const Key: TAESKey128; const InitVector: TAESBuffer; Dest: TStream); -var - ExpandedKey: TAESExpandedKey128; -begin - ExpandAESKeyForDecryption(Key, ExpandedKey); - DecryptAESStreamCBC(Source, Count, ExpandedKey, InitVector, Dest); -end; - -procedure DecryptAESStreamCBC(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey128; const InitVector: TAESBuffer; - Dest: TStream); -var - TempIn, TempOut: TAESBuffer; - Vector1, Vector2: TAESBuffer; - Done: cardinal; -begin - if Count = 0 then - begin - Source.Position := 0; - Count := Source.Size; - end - else Count := Min(Count, Source.Size - Source.Position); - if Count = 0 then exit; - if (Count mod SizeOf(TAESBuffer)) > 0 then - raise EAESError.Create(SInvalidInBufSize); - Vector1 := InitVector; - while Count >= SizeOf(TAESBuffer) do - begin - Done := Source.Read(TempIn, SizeOf(TempIn)); - if Done < SizeOf(TempIn) then - raise EStreamError(SReadError); - Vector2 := TempIn; - DecryptAES(TempIn, ExpandedKey, TempOut); - PLongWord(@TempOut[0])^ := PLongWord(@TempOut[0])^ xor PLongWord(@Vector1[0])^; - PLongWord(@TempOut[4])^ := PLongWord(@TempOut[4])^ xor PLongWord(@Vector1[4])^; - PLongWord(@TempOut[8])^ := PLongWord(@TempOut[8])^ xor PLongWord(@Vector1[8])^; - PLongWord(@TempOut[12])^ := PLongWord(@TempOut[12])^ xor PLongWord(@Vector1[12])^; - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError(SWriteError); - Vector1 := Vector2; - Dec(Count, SizeOf(TAESBuffer)); - end; -end; - -procedure DecryptAESStreamCBC(Source: TStream; Count: cardinal; - const Key: TAESKey192; const InitVector: TAESBuffer; Dest: TStream); -var - ExpandedKey: TAESExpandedKey192; -begin - ExpandAESKeyForDecryption(Key, ExpandedKey); - DecryptAESStreamCBC(Source, Count, ExpandedKey, InitVector, Dest); -end; - -procedure DecryptAESStreamCBC(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey192; const InitVector: TAESBuffer; - Dest: TStream); -var - TempIn, TempOut: TAESBuffer; - Vector1, Vector2: TAESBuffer; - Done: cardinal; -begin - if Count = 0 then - begin - Source.Position := 0; - Count := Source.Size; - end - else Count := Min(Count, Source.Size - Source.Position); - if Count = 0 then exit; - if (Count mod SizeOf(TAESBuffer)) > 0 then - raise EAESError.Create(SInvalidInBufSize); - Vector1 := InitVector; - while Count >= SizeOf(TAESBuffer) do - begin - Done := Source.Read(TempIn, SizeOf(TempIn)); - if Done < SizeOf(TempIn) then - raise EStreamError(SReadError); - Vector2 := TempIn; - DecryptAES(TempIn, ExpandedKey, TempOut); - PLongWord(@TempOut[0])^ := PLongWord(@TempOut[0])^ xor PLongWord(@Vector1[0])^; - PLongWord(@TempOut[4])^ := PLongWord(@TempOut[4])^ xor PLongWord(@Vector1[4])^; - PLongWord(@TempOut[8])^ := PLongWord(@TempOut[8])^ xor PLongWord(@Vector1[8])^; - PLongWord(@TempOut[12])^ := PLongWord(@TempOut[12])^ xor PLongWord(@Vector1[12])^; - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError(SWriteError); - Vector1 := Vector2; - Dec(Count, SizeOf(TAESBuffer)); - end; -end; - -procedure DecryptAESStreamCBC(Source: TStream; Count: cardinal; - const Key: TAESKey256; const InitVector: TAESBuffer; Dest: TStream); -var - ExpandedKey: TAESExpandedKey256; -begin - ExpandAESKeyForDecryption(Key, ExpandedKey); - DecryptAESStreamCBC(Source, Count, ExpandedKey, InitVector, Dest); -end; - -procedure DecryptAESStreamCBC(Source: TStream; Count: cardinal; - const ExpandedKey: TAESExpandedKey256; const InitVector: TAESBuffer; - Dest: TStream); -var - TempIn, TempOut: TAESBuffer; - Vector1, Vector2: TAESBuffer; - Done: cardinal; -begin - if Count = 0 then - begin - Source.Position := 0; - Count := Source.Size; - end - else Count := Min(Count, Source.Size - Source.Position); - if Count = 0 then exit; - if (Count mod SizeOf(TAESBuffer)) > 0 then - raise EAESError.Create(SInvalidInBufSize); - Vector1 := InitVector; - while Count >= SizeOf(TAESBuffer) do - begin - Done := Source.Read(TempIn, SizeOf(TempIn)); - if Done < SizeOf(TempIn) then - raise EStreamError(SReadError); - Vector2 := TempIn; - DecryptAES(TempIn, ExpandedKey, TempOut); - PLongWord(@TempOut[0])^ := PLongWord(@TempOut[0])^ xor PLongWord(@Vector1[0])^; - PLongWord(@TempOut[4])^ := PLongWord(@TempOut[4])^ xor PLongWord(@Vector1[4])^; - PLongWord(@TempOut[8])^ := PLongWord(@TempOut[8])^ xor PLongWord(@Vector1[8])^; - PLongWord(@TempOut[12])^ := PLongWord(@TempOut[12])^ xor PLongWord(@Vector1[12])^; - Done := Dest.Write(TempOut, SizeOf(TempOut)); - if Done < SizeOf(TempOut) then - raise EStreamError(SWriteError); - Vector1 := Vector2; - Dec(Count, SizeOf(TAESBuffer)); - end; -end; - -end. diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.bpr b/sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.bpr deleted file mode 100644 index 235e865ad78..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.bpr +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=2 -MinorVer=8 -Release=2 -Build=68 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 - -[Version Info Keys] -CompanyName=EldoS -FileDescription= -FileVersion=2.8.2.68 -InternalName= -LegalCopyright=(c) 1998-2001 EldoS, Eugene Mayevski -LegalTrademarks= -OriginalFilename= -ProductName=EldoS Keeper -ProductVersion=2.81 - -[Excluded Packages] -E:\Temp\ElPack\Code\dceldbB5.bpl=EldoS DB-Aware Controls (Design-time) - -[HistoryLists\hlIncludePath] -Count=1 -Item0=$(BCB)\include;$(BCB)\include\vcl - -[HistoryLists\hlLibraryPath] -Count=4 -Item0=$(BCB)\lib\obj;$(BCB)\lib;..\..\..\exe;e:\projects\elpack\code\source -Item1=$(BCB)\lib\obj;$(BCB)\lib;..\..\..\exe -Item2=$(BCB)\lib\obj;$(BCB)\lib;e:\projects\exe -Item3=$(BCB)\lib\obj;$(BCB)\lib - -[HistoryLists\hlDebugSourcePath] -Count=1 -Item0=$(BCB)\source\vcl - -[HistoryLists\hlConditionals] -Count=1 -Item0=DEBUG - -[Debugging] -DebugSourceDirs= - -[Parameters] -RunParams= -HostApplication= -RemoteHost= -RemotePath= -RemoteDebug=0 - -[Compiler] -ShowInfoMsgs=0 -LinkDebugVcl=1 -LinkCGLIB=0 - -[CORBA] -AddServerUnit=1 -AddClientUnit=1 -PrecompiledHeaders=1 - -[Language] -ActiveLang= -ProjectLang= -RootDir= - - \ No newline at end of file diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.cpp b/sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.cpp deleted file mode 100644 index 483c19afe60..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.cpp +++ /dev/null @@ -1,37 +0,0 @@ -//--------------------------------------------------------------------------- -#include -#pragma hdrstop -USERES("ElKeeper.res"); -USERES("LOGOSTRS.RES"); -USEFORMNS("ABOUT.PAS", About, AboutBox); -USEUNIT("Cryptcon.pas"); -USEFORMNS("frmPassword.pas", Frmpassword, PasswordDlg); -USEFORMNS("frmPswGen.pas", Frmpswgen, PswGenForm); -USEFORMNS("frmRecProp.pas", Frmrecprop, RecPropsForm); -USEFORMNS("frmQuickAccess.pas", Frmquickaccess, QuickAccessForm); - -USEUNIT("IDEAUnit.pas"); -USEUNIT("KeeperOpts.pas"); -USEFORMNS("LogoMain.pas", Logomain, LogoAppForm); -USEUNIT("LogoStrs.pas"); -USEUNIT("md5unit.pas"); -//--------------------------------------------------------------------------- -WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) -{ - try - { -// Application->Initialize(); - Application->Title = "EldoS Keeper"; - Application->HelpFile = "ElKeeper.hlp"; - Application->CreateForm(__classid(TLogoAppForm), &LogoAppForm); - Application->CreateForm(__classid(TPasswordDlg), &PasswordDlg); - Application->CreateForm(__classid(TQuickAccessForm), &QuickAccessForm); - Application->Run(); - } - catch (Exception &exception) - { - Application->ShowException(&exception); - } - return 0; -} -//--------------------------------------------------------------------------- diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.dpr b/sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.dpr deleted file mode 100644 index aef27c3d4e7..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.dpr +++ /dev/null @@ -1,47 +0,0 @@ -{$I DEFINE.INC} - -program ElKeeper; - -uses - Forms, - LogoMain in 'LogoMain.pas' {LogoAppForm}, - ABOUT in 'ABOUT.PAS' {AboutBox}, - frmPassword in 'frmPassword.pas' {PasswordDlg}, - frmRecProp in 'frmRecProp.pas' {RecPropsForm}, - Md5unit in '..\Libs\md5unit.pas', - Ideaunit in '..\Libs\Ideaunit.pas', - frmPswGen in 'frmPswGen.pas' {PswGenForm}, - KeeperOpts in 'KeeperOpts.pas', - frmQuickAccess in 'frmQuickAccess.pas' {QuickAccessForm}, - EntryData in 'EntryData.pas', - frmFolderProp in 'frmFolderProp.pas' {FolderPropsForm}, - FrmOpts in 'FrmOpts.pas' {OptionsForm}; - -{$R *.RES} -{$R LOGOSTRS.RES} - -type - TProcedure = procedure; - -var Form : TForm; - -procedure ExecuteApplication; -begin - Application.Title := 'EldoS Keeper'; - Application.HelpFile := 'ElKeeper.hlp'; - Application.ShowMainForm := false; - Application.CreateForm(TForm, Form); - LogoAppForm := TLogoAppForm.Create(Application); - PasswordDlg := TPasswordDlg.Create(Application); - QuickAccessForm := TQuickAccessForm.Create(Application); - LogoAppForm.Show; - with Application do - repeat - HandleMessage - until Terminated; -end; - -begin - ExecuteApplication; -end. - diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.res b/sdk/components/ElPack/BCBDemos/ElKeeper/ElKeeper.res deleted file mode 100644 index 282c2f818f2a6bfa8db6c1f74f1fb3cd57fff9ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1688 zcmb_b&ubG=5dOA}O;Y+J0YSWI5QQqW#I~RnF)g-*Vt-*nuO-xMjg84tQ`3Ub#Y@)W z!JE`W>B&P6`47Yep{Jldc?(n&X@y1)f>PV8-+P;FvTcvPWcIz8`DW&u*?j;IqF9zK zJi69)o#U@3Mv=Zi;H<|1web+5^imYqW}Pu7FCE|?x^8cL@(9y3xeJFNAvVk2__TQm z<9}Yh1$RQPS9cq<4lU$&5{==nxrZ#tr*P%tZa=?5xs5-1rESAUlmAsk&t|hm&RE%bDfB!VRaMQwSXq6&1_Zx7T&K<)&sV;$K`F)7i2{sV zb~&FfeO7}NJ&Wb_H)<>x)P>uZ%leFEMg`9pQrBprN(u`SzzmwLdj-HcVSS-(hw_WE zH)dG}Udt-CQV^khw91~})c;z&kpl}$lt|gqBm3{RC_k4dkw1#r%5RT?^CrSx6Q)iHU z(TFH>jPo}vv-D9Pa^(sK{2nK7bbK(}6z$WrWMVp&Nu*PBn1}Z=P;)PJRsb^a6r}ed{X*Zs+9vo?E;sL{~AL=-})-&_%f}-z0EB<`BycyF}D5 z{WH=lm}}%LI-kJ2w zL%7Roads(YC{_nf9g96WVSBz^65lVMlajB)rut<77v)!Fca~y5Ng`|Cr{D9{^A86! BO6dRq diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/EntryData.pas b/sdk/components/ElPack/BCBDemos/ElKeeper/EntryData.pas deleted file mode 100644 index 884e8ad2757..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/EntryData.pas +++ /dev/null @@ -1,380 +0,0 @@ -unit EntryData; - -interface - -uses ElAES, ElMTree, ElStack, Windows, Classes, SysUtils, ElTools; - -type PEntryRec = ^TEntryRec; - TEntryRec = record - ParentID, - RecID : DWORD; - Group : boolean; - Expanded : boolean; - Site, - Location, - Location2, - UName, - Acct, - Pswd, - Info : string; - Added, - Modified, - Expires : TDateTime; - DoExpires : boolean; - WarnDays : integer; - ExpWarned : boolean; - BinDataSize: integer; - BinData : Pointer; - end; - -var - FMTree : TElMTree; - LoadStack : TElStack; - FileVersion: integer; - AssignedID : integer; - -const FILE_VERSION = 5; - -function UniqueID: Integer; -function GetItemByID(ID : integer): PEntryRec; - -procedure DoItemLoad(Item : TElMTreeItem; Stream : TStream); -procedure DoItemSave(Item : TElMTreeItem; Stream : TStream); - -function AESEncrypt(Data : PChar; DataLen : integer; Key : Pointer): string; -function AESDecrypt(Data : PChar; DataLen : integer; Key : pointer) : string; - -implementation - -function GetItemByID(ID : integer): PEntryRec; -type TSearchRec = record - Id : DWORD; - Result : PEntryRec; - end; - PSearchRec = ^TSearchRec; - -var SearchRec : TSearchRec; - - procedure IntProc(Item : TElMTreeItem; Index : integer; var ContinueIterate : boolean; - IterateData : pointer); - var Entry : PEntryRec; - begin - if Item <> nil then - begin - Entry := PEntryRec(Item.Data); - if Entry.RecID = PSearchRec(IterateData).ID then - begin - PSearchRec(IterateData).Result := Entry; - ContinueIterate := false; - exit; - end; - end; - end; - -begin - SearchRec.Result := nil; - FMTree.Iterate(@IntProc, @SearchRec); - result := SearchRec.Result; -end; - -function UniqueID: Integer; -begin - repeat - Result := AssignedID; - Inc(AssignedID); - until GetItemByID(Result) = nil; -end; - -procedure DoItemLoad(Item : TElMTreeItem; Stream : TStream); -var - Entry : PEntryRec; - i : integer; - p : PChar; - b, version : byte; - -begin - try - New(Entry); - FillMemory(Entry, sizeof(Entry^), 0); - Item^.Data := Entry; - Stream.ReadBuffer(b, sizeof(byte)); - if b < 2 then - begin - version := 1; - Entry^.Group := boolean(b); - end else - begin - version := b; - Stream.ReadBuffer(b, sizeof(byte)); - Entry^.Group := boolean(b); - end; - - Stream.ReadBuffer(i, sizeof (integer)); - if (i < 0) or (i > 65535) then - raise EOutOfMemory.Create(''); - GetMem(P, i+1); - P[i]:=#0; - Stream.ReadBuffer(p^, i); - Entry^.Site := StrPas(p); - FreeMem(p); - - if (Version < 5) and Entry.Group then - begin - exit; - end; - - Stream.ReadBuffer(i, sizeof (integer)); - GetMem(P, i+1); - P[i]:=#0; - Stream.ReadBuffer(p^, i); - Entry^.Location := StrPas(p); - FreeMem(p); - - if version > 1 then - begin - Stream.ReadBuffer(i, sizeof (integer)); - if (i < 0) or (i > 65535) then - raise EOutOfMemory.Create(''); - GetMem(P, i+1); - P[i]:=#0; - Stream.ReadBuffer(p^, i); - Entry^.Location2 := StrPas(p); - FreeMem(p); - end; - - Stream.ReadBuffer(i, sizeof (integer)); - if (i < 0) or (i > 65535) then - raise EOutOfMemory.Create(''); - - GetMem(P, i+1); - P[i]:=#0; - Stream.ReadBuffer(p^, i); - Entry^.UName := StrPas(p); - FreeMem(p); - - Stream.ReadBuffer(i, sizeof (integer)); - if (i < 0) or (i > 65535) then - raise EOutOfMemory.Create(''); - GetMem(P, i+1); - P[i]:=#0; - Stream.ReadBuffer(p^, i); - Entry^.Acct := StrPas(p); - FreeMem(p); - - Stream.ReadBuffer(i, sizeof (integer)); - if (i < 0) or (i > 65535) then - raise EOutOfMemory.Create(''); - - GetMem(P, i+1); - P[i]:=#0; - Stream.ReadBuffer(p^, i); - Entry^.Pswd := StrPas(p); - FreeMem(p); - - Stream.ReadBuffer(i, sizeof (integer)); - if (i < 0) or (i > 65535) then - raise EOutOfMemory.Create(''); - - GetMem(P, i+1); - P[i]:=#0; - Stream.ReadBuffer(p^, i); - Entry^.Info := StrPas(p); - FreeMem(p); - - if Version <= 3 then - Entry.RecID := UniqueID; - - if version > 2 then - begin - Stream.ReadBuffer(Entry.Added, sizeof(Entry.Added)); - Stream.ReadBuffer(Entry.Modified, sizeof(Entry.Modified)); - Stream.ReadBuffer(Entry.Expires, sizeof(Entry.Expires)); - Stream.ReadBuffer(Entry.DoExpires, sizeof(Entry.DoExpires)); - Stream.ReadBuffer(Entry.WarnDays, sizeof(Entry.WarnDays)); - Stream.ReadBuffer(Entry.ExpWarned, sizeof(Entry.ExpWarned)); - if Version > 3 then - begin - Stream.ReadBuffer(Entry.Expanded, sizeof(Entry.Expanded)); - - // Read IDs - Stream.ReadBuffer(Entry.ParentID, sizeof(Entry.ParentID)); - Stream.ReadBuffer(Entry.RecID, sizeof(Entry.RecID)); - - // Read binary data - Stream.ReadBuffer(Entry.BinDataSize, sizeof(Entry.BinDataSize)); - if Entry.BinDataSize > 0 then - begin - GetMem(Entry.BinData, Entry.BinDataSize); - Stream.ReadBuffer(PChar(Entry.BinData)^, Entry.BinDataSize); - end; - end; - end else - begin - Entry^.Added := Now; - Entry^.Modified := Now; - end; - except - on E : Exception do - begin - Item.Data := nil; - raise; - end; - end; -end; { OnItemLoad } - -procedure DoItemSave(Item : TElMTreeItem; Stream : TStream); -var Entry : PEntryRec; - P : PChar; - i : integer; - b : byte; -begin - Entry := PEntryRec(Item^.Data); - b := FILE_VERSION; - Stream.WriteBuffer(b, Sizeof(boolean)); - Stream.WriteBuffer(Entry^.Group, Sizeof(boolean)); - i := Length(Entry^.Site); - Stream.WriteBuffer(i, sizeof(integer)); - P := PChar(Entry^.Site); - Stream.WriteBuffer(P^, i); - - i := Length(Entry^.Location); - Stream.WriteBuffer(i, sizeof(integer)); - P := PChar(Entry^.Location); - Stream.WriteBuffer(P^, i); - i := Length(Entry^.Location2); - Stream.WriteBuffer(i, sizeof(integer)); - P := PChar(Entry^.Location2); - Stream.WriteBuffer(P^, i); - i := Length(Entry^.UName); - Stream.WriteBuffer(i, sizeof(integer)); - P := PChar(Entry^.UName); - Stream.WriteBuffer(P^, i); - i := Length(Entry^.Acct); - Stream.WriteBuffer(i, sizeof(integer)); - P := PChar(Entry^.Acct); - Stream.WriteBuffer(P^, i); - i := Length(Entry^.Pswd); - Stream.WriteBuffer(i, sizeof(integer)); - P := PChar(Entry^.Pswd); - Stream.WriteBuffer(P^, i); - i := Length(Entry^.Info); - Stream.WriteBuffer(i, sizeof(integer)); - P := PChar(Entry^.Info); - Stream.WriteBuffer(P^, i); - // version 3 - Stream.WriteBuffer(Entry.Added, sizeof(Entry.Added)); - Stream.WriteBuffer(Entry.Modified, sizeof(Entry.Modified)); - Stream.WriteBuffer(Entry.Expires, sizeof(Entry.Expires)); - Stream.WriteBuffer(Entry.DoExpires, sizeof(Entry.DoExpires)); - Stream.WriteBuffer(Entry.WarnDays, sizeof(Entry.WarnDays)); - Stream.WriteBuffer(Entry.ExpWarned, sizeof(Entry.ExpWarned)); - // version 4 - - Stream.WriteBuffer(Entry.Expanded, sizeof(Entry.Expanded)); - - // Write IDs - Stream.WriteBuffer(Entry.ParentID, sizeof(Entry.ParentID)); - Stream.WriteBuffer(Entry.RecID, sizeof(Entry.RecID)); - - // Read binary data - Stream.WriteBuffer(Entry.BinDataSize, sizeof(Entry.BinDataSize)); - if Entry.BinDataSize > 0 then - begin - Stream.WriteBuffer(PChar(Entry.BinData)^, Entry.BinDataSize); - end; -end; { OnItemSave } - -function AESDecrypt(Data : PChar; DataLen : integer; Key : pointer) : string; -var l, rl : integer; - InStream : TElMemoryStream; - OutStream : TStringStream; - -type - PAESKey128 = ^TAESKey128; - - procedure DecryptStream(Source: TStream; Dest: TStream; Key: TAESKey128); - var - Count: integer; - DPos: integer; - begin - Source.Position := 0; - DPos := Dest.Position; - Source.ReadBuffer(Count, SizeOf(Count)); // read original size of data - // stream - DecryptAESStreamECB(Source, Source.Size - Source.Position, Key, Dest); - Dest.Size := DPos + Count; // restore the original size of data - Dest.Position := DPos; - end; - -begin - result := ''; - l := DataLen; - - MoveMemory(@rl, PChar(Data), sizeof(integer)); - if (l - sizeof(integer) >= rl) then - begin - InStream := TElMemoryStream.Create; - try - try - InStream.SetPointer(Data, l); - OutStream := TStringStream.Create(''); - try - DecryptStream(InStream, OutStream, PAESKey128(Key)^); - result := OutStream.DataString; - finally - OutStream.Free; - end; - finally - InStream.SetPointer(nil, 0); - end; - finally - InStream.Free; - end; - end; -end; - -function AESEncrypt(Data : PChar; DataLen : integer; Key : Pointer): string; -var InStream : TElMemoryStream; - OutStream : TStringStream; - -type - PAESKey128 = ^TAESKey128; - - procedure EncryptStream(Source: TStream; Dest: TStream; Key: TAESKey128); - var - Count: integer; - begin - Source.Position := 0; - Count := Source.Size; - Dest.Write(Count, SizeOf(Count)); // store the source stream size to - // restore after decryption - EncryptAESStreamECB(Source, 0, Key, Dest); - end; - -begin - if Key = nil then - result := #0#0#0#0 - else - begin - InStream := TElMemoryStream.Create; - try - try - InStream.SetPointer(Data, DataLen); - OutStream := TStringStream.Create(''); - try - EncryptStream(InStream, OutStream, PAESKey128(Key)^); - result := OutStream.DataString; - finally - OutStream.Free; - end; - finally - InStream.SetPointer(nil, 0); - end; - finally - InStream.Free; - end; - end; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/FrmOpts.dfm b/sdk/components/ElPack/BCBDemos/ElKeeper/FrmOpts.dfm deleted file mode 100644 index 75bc60e1f0cdf16900814914e84ab9a6709b908c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4170 zcmdT|&5j#I5S|_H+GBg2^>RQUacFT$q$nhT3paMXc6OC@Y^^6+BB3PhnX;$ZcDI>s zuk9Q;g-75eA|zgbN8rW{o+8Q-s(XI?2Vnz3S}yj?xVz@7ud2SP_U{$P?{xi>&ZAzd zbJlk5)<3H|j^AzF-SsUoPp5Cz=n}7{OnYd`*RlRsPN_1Zc7S%rxDRufiCSGHCqRdPyJ_& z}i@x?JnB8F1Bw_(TMe`@CXIrp9WH=Qnwm3gBM)eb0LCI>vF=*~y?6bDt^)d>qkJ zxCHJxHx6lVF^uIzg#LUCrQQBeH;e}@#`(?xXG2l)C{Jjp9GXp?iH5jT>|Z{T0(RSS zqQKBNiNSNKh~@!W8z0J9b#a+u@+_u$is^eN#pKc~IxGZLEka)*b|(+cZkq`EWQrhQ3mU>Z z7IHavr=Ge4L`z}}ETP`9+?UD$Kh&Z{1E_ZKMIs4_clGp34E)pFt0XTqdFrhaX+qHv z4K6X}D@@)^nf!W<$@@($EGS!zNt>S-F6DU(z_dL)J2GFSm!Q(87W__c}87S1R)9 za_P=CROH^5S6hGg7!It@7QzvXC3L~#_3T|Y%sei~I04&I^nt%2onLRIavVNckBkWW#m;jEUE8-n$f)hNv$5g#PUm6fv-{K@G~eCjQX2GCpSS)ipWV*Gg}*z0=P!0GlP~FE*}`!9ey Ha~$UnxgJnM diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/FrmOpts.pas b/sdk/components/ElPack/BCBDemos/ElKeeper/FrmOpts.pas deleted file mode 100644 index 4d3653eb417..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/FrmOpts.pas +++ /dev/null @@ -1,100 +0,0 @@ -unit FrmOpts; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - KeeperOpts, ElBtnCtl, ElPopBtn, ElCheckCtl, StdCtrls, ExtCtrls, ElPanel, - ElGroupBox, ElXPThemedControl; - -type - TOptionsForm = class(TForm) - FontDlg: TFontDialog; - ElPanel1: TElPanel; - ElGroupBox1: TElGroupBox; - MinToTrayCB: TElCheckBox; - MinOnCloseCB: TElCheckBox; - MinOnEscCB: TElCheckBox; - ElGroupBox3: TElGroupBox; - CountExpandCB: TElCheckBox; - ElGroupBox2: TElGroupBox; - RememberMRUCB: TElCheckBox; - RememberPswCB: TElCheckBox; - ReopenLastFileCB: TElCheckBox; - FontBtn: TElPopupButton; - CancelBtn: TElPopupButton; - OKBtn: TElPopupButton; - procedure FontBtnClick(Sender: TObject); - private - { Private declarations } - public - procedure SetData; - procedure GetData; - end; - -var - OptionsForm: TOptionsForm; - -implementation - -uses frmQuickAccess, LogoMain, Registry; - -{$R *.DFM} - -procedure TOptionsForm.SetData; -begin - MinToTrayCB.Checked := Options.ToTray; - ReopenLastFileCB.Checked := Options.ReopenFile; - RememberMRUCB.Checked := not Options.SaveKeys; - RememberPswCB.Checked := Options.KeepPassword; - MinOnEscCB.Checked := Options.MinimizeOnEsc; - MinOnCloseCB.Checked := Options.MinimizeOnClose; - CountExpandCB.Checked := Options.CountFolderChanges; -end; - -procedure TOptionsForm.GetData; -begin - Options.ToTray := MinToTrayCB.Checked; - Options.ReopenFile := ReopenLastFileCB.Checked; - Options.SaveKeys := not RememberMRUCB.Checked; - Options.KeepPassword := RememberPswCB.Checked; - Options.MinimizeOnEsc := MinOnEscCB.Checked; - Options.MinimizeOnClose := MinOnCloseCB.Checked; - Options.CountFolderChanges := CountExpandCB.Checked; -end; - -procedure TOptionsForm.FontBtnClick(Sender: TObject); -var Reg : TRegistry; - St : TFontStyles; - -begin - FontDlg.Font.Assign(LogoAppForm.Tree.Font); - if FontDlg.Execute then - with LogoAppForm do - begin - Tree.Font.Assign(FontDlg.Font); - Tree.TextColor := FontDlg.Font.Color; - - QuickAccessForm.Tree.Font.Assign(FontDlg.Font); - QuickAccessForm.Tree.TextColor := FontDlg.Font.Color; - - Reg:=nil; - try - try - Reg:=TRegistry.Create; - Reg.OpenKey('Software\EldoS\Keeper', true); - Reg.WriteString('FontName', Tree.Font.Name); - Reg.WriteInteger('FontCharset', Integer(Tree.Font.Charset)); - Reg.WriteInteger('FontSize', Tree.Font.Size); - St := Tree.Font.Style; - Reg.WriteBinaryData('FontStyles', St, sizeof(TFontStyles)); - finally - Reg.Free; - end; - except - on E: Exception do ; - end; - end; -end; - -end. diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/IDEAUnit.pas b/sdk/components/ElPack/BCBDemos/ElKeeper/IDEAUnit.pas deleted file mode 100644 index d54152910af..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/IDEAUnit.pas +++ /dev/null @@ -1,418 +0,0 @@ -unit Ideaunit; -{***************************************************************************** - UNIT: Ideaunit - Description: This unit contains an Object Pascal Object which can be used to - perform IDEA encryption/decryption. IDEA is a block cipher - developed by Xuejia Lai and James L. Massey of ETH Zurich. - The algorithm is considered to be more secure then DES. It - uses a 128-bit key. For a complete description of the algorithm - see 'Applied Cryptography' by Bruce Shneier, ISBN - 0-471-11709-9. - - The IDEA Algorithm patent protected by Ascom-Tech AG.(See LEGAL) - ----------------------------------------------------------------------------- - Code Author: Greg Carter, gregc@cryptocard.com - Organization: CRYPTOCard Corporation, info@cryptocard.com - R&D Division, Carleton Place, ON, CANADA, K7C 3T2 - 1-613-253-3152 Voice, 1-613-253-4685 Fax. - Date of V.1: Jan. 3 1996. - - Compatibility & Testing with BP7.0: Anne Marcel Roorda, garfield@xs4all.nl - -----------------------------------------------------------------------------} - {Useage: Below is typical usage(for File)of the IDEA Object, - Follow these steps: - 1) Declare and Create Variable of type TIDEA. - 2) Set InputSource Type, either SourceFile, SourceByteArray, or - SourceString(Pascal style string). - 3) Set Cipher Mode, optionally IVector. - 4) Point to Input Source and set Input Length(If needed) - 5) Point to Output Structure(array, file). - 6) Set Key; - 7) Call BF_EncipherData Method. - 8) Reference the Output. Thats it. - **** Note **** Steps 2..6 can occure in any order. - Here is a procedure in Delphi used to encrypt a file: -procedure Tcryptfrm.OpenCiphButtonClick(Sender: TObject); -var - IDEA: TIDEA; (*Step 1*) -begin -IDEA := TIDEA.Create;(*Step 1b*) - try - If OpenDialog1.Execute then - begin - IDEA.InputType := SourceFile; (*Step 2*) - IDEA.CipherMode := ECBMode; (*Step 3*) - IDEA.InputFilePath := OpenDialog1.FileName; (*Step 4*) - IDEA.OutputFilePath := ChangeFileExt(OpenDialog1.FileName, '.ccc'); (*Step 5*) - IDEA.Key := 'abcdefghijklmnopqrstuvwxyz'; (*Step 6*) - IDEA.BF_EncipherData(False); (*Step 7*) - end; - finally - IDEA.free; - end; -end; -{-----------------------------------------------------------------------------} -{LEGAL: The algorithm is patent protected by Ascom-Tech AG. No license - fees are required for non-commerical use. Commerical users should - contact Ascom Systec AG, Dept CMVV, Gewerbepark, CH-5506, - Magenwil, Switzerland, voice 41 64 56 59 83, fax 41 64 56 59 90, - email idea@ascom.ch - - This code is copyright by CRYPTOCard. CRYPTOCard grants anyone - who may wish to use, modify or redistribute this code privileges - to do so, provided the user agrees to the following three(3) - rules: - - 1)Any Applications, (ie exes which make use of this - Object...), for-profit or non-profit, - must acknowledge the author of this Object(ie. - IDEA Implementation provided by Greg Carter, CRYPTOCard - Corporation) somewhere in the accompanying Application - documentation(ie AboutBox, HelpFile, readme...). NO runtime - or licensing fees are required! - - 2)Any Developer Component(ie Delphi Component, Visual Basic VBX, - DLL) derived from this software must acknowledge that it is - derived from "IDEA Object Pascal Implementation Originated by - Greg Carter, CRYPTOCard Corporation 1996". Also all efforts should - be made to point out any changes from the original. - !!!!!Further, any Developer Components based on this code - *MAY NOT* be sold for profit. This Object was placed into the - public domain, and therefore any derived components should - also.!!!!! - - 3)CRYPTOCard Corporation makes no representations concerning this - software or the suitability of this software for any particular - purpose. It is provided "as is" without express or implied - warranty of any kind. CRYPTOCard accepts no liability from any - loss or damage as a result of using this software. - -CRYPTOCard Corporation is in no way affiliated with Ascom-Tech AG. ------------------------------------------------------------------------------ -Why Use this instead of a freely available C DLL? - -The goal was to provide a number of Encryption/Hash implementations in Object -Pascal, so that the Pascal Developer has considerably more freedom. These -Implementations are geared toward the PC(Intel) Microsoft Windows developer, -who will be using Borland's New 32bit developement environment(Delphi32). The -code generated by this new compiler is considerablely faster then 16bit versions. -And should provide the Developer with faster implementations then those using -C DLLs. ------------------------------------------------------------------------------ -NOTES: Make sure to read the LEGAL notes!!!! ------------------------------------------------------------------------------- -Revised: 00/00/00 BY: ******* Reason: ****** ------------------------------------------------------------------------------- -} -interface -{Declare the compiler defines} -{$I CRYPTDEF.INC} -{------Changeable compiler switches-----------------------------------} -{$A+ Word align variables } -{$F+ Force Far calls } -{$K+ Use smart callbacks -{$N+ Allow coprocessor instructions } -{$P+ Open parameters enabled } -{$S+ Stack checking } -{$T- @ operator is NOT typed } -{$IFDEF DELPHI} -{$U- Non Pentium safe FDIV } -{$Z- No automatic word-sized enumerations} -{$ENDIF} -{---------------------------------------------------------------------} -{$DEFINE ORDER_BA} -uses SysUtils, Cryptcon, Classes, Controls; - -const - IDEAKEYSIZE = 16; - IDEABLOCKSIZE = 8; - ROUNDS = 8; - KEYLEN = (6*ROUNDS + 4); -type - -UWORD16 = WORD; {16 unsigned integer} -pUWORD16 = ^UWORD16; -UWORD32 = LongInt; {Turn off Overflow checking} - -{Intelx86} - singleByte = Record - byte1: BYTE;{LSB} - byte0: BYTE;{MSB} - end;{SingleBytes} -{$DEFINE INTEL} - - aword16 = record - case Integer Of - 0: (SWord: UWORD16); - 1: (fByte: Array[0..1] of BYTE); - 2: (w: singleByte); - end;{aword, 16bits!} - -Paword = ^aword16; - -IDEA_BLOCK = record - X1: UWORD16; - X2: UWORD16; - X3: UWORD16; - X4: UWORD16; -end; - -pIDEA_BLOCK = ^IDEA_BLOCK; -KeyArray = array[0..(KEYLEN - 1)] of aword16; -PKeyArray = ^KeyArray; - - TIDEA = class(TCrypto) - Private - { Private declarations } - FpKey: PChar; - FRounds: BYTE; -{ FActiveBlock: IDEA_BLOCK;} - FpActiveBlock: pIDEA_BLOCK; - FEnCiKey: KeyArray; {Encipher Key} - FDeCiKey: KeyArray; {Decipher Key} - FCiKey: pUWORD16; {Pointer to current Key, either Encipher or Decipher Key} - Function MUL(pX, pY: pUWORD16): UWORD16; - Function INV(pX: pUWORD16): UWORD16; - Procedure IDEA_ExpandKey; - Procedure IDEA_InvertKey; - Procedure IDEA_Cipher; {En/Deciphers 64bit block depending on Key} - Procedure EncipherBLOCK;override; {Enciphers BLOCK} - Procedure DecipherBLOCK;override; {Deciphers BLOCK} - Procedure SetKeys; override; {Sets up En\DecipherKey SubKeys} - protected - { Protected declarations } - public - { Public declarations } - constructor Create(Owner: TComponent);override; - destructor Destroy;override; - end;{TIDEA} - - procedure Register;{register the component to the Delphi toolbar} - -implementation - -procedure Register; - {Registers the Component to the toobar, on the tab named 'Crypto'} - {Now all a Delphi programmer needs to do is drag n drop to have - Blowfish encryption} -begin - RegisterComponents('Crypto', [TIDEA]); -end; - -constructor TIDEA.Create(Owner: TComponent); -begin - FRounds := 8; - FBLOCKSIZE := SizeOf(IDEA_BLOCK); - FIVTemp := nil; - FpKey := StrAlloc(IDEAKEYSIZE + 1); - inherited Create(Owner); - FpActiveBlock := @FSmallBuffer; -end;{Create} - -destructor TIDEA.Destroy; -begin - StrDispose(FpKey); - inherited Destroy; -end;{TBlowFish.Destroy;} - -Function TIDEA.MUL(pX, pY: pUWORD16): UWORD16; -var - p: UWORD32; - x, y: UWORD16; -begin - p := UWORD32(pX^) * pY^; - if p = 0 then - x := 65537 - pX^ - pY^ - else begin - x := UWORD16(p SHR 16); - y := UWORD16(p); - x := y - x; - - if (y < x) then Inc(x, 65537); - end; - - MUL := x; -end;{TIDEA.MUL} - -Function TIDEA.INV(pX: pUWORD16): UWORD16; -var - t0, t1, q, y, x: UWORD16; -begin - x := PX^; - if (x <= 1) then begin - INV := x; - exit; - end; - t1 := UWORD16(65537 Div x); - y := UWORD16(65537 MOD x); - t0 := 1; - while y <> 1 do begin - q := x Div y; - x := x MOD y; - t0 := t0 + (t1 * q); - if x = 1 then begin - INV := t0; - exit; - end; - q := y Div x; - y := y MOD x; - t1 := t1 + (t0 * q); - end;{while} - - INV := 1 - t1; -end;{TIDEA.INV} - - -Procedure TIDEA.IDEA_ExpandKey; -var - i, j : BYTE; - pKey: PKeyArray; -begin - pKey := @FEnCiKey; - j:= 0; - for i:= 0 to 7 do begin - FEnCiKey[i].w.byte0 := BYTE(FpKey[j]); {MSB}{do this way so comp with PGP} - FEnCiKey[i].w.byte1 := BYTE(FpKey[j + 1]); - j := j + 2; -{ FEnCiKey[i].SWord := i +1; Test key} - end;{for} - -{ For j := 8 to (KEYLEN - 1) do begin - Inc(i); - pKey^[i + 7].SWord := (pKey^[i And 7].SWord SHL 9) Or (pKey^[i + 1 And 7].SWord SHR 7); - Inc(pKey, (i And 8)); - i := i And 7; - end;{for} - For i:= 8 to (KEYLEN - 1) do begin - if ((i And 7) < 6) then - FEnCiKey[i].SWord := ((FEnCiKey[i - 7].SWord And 127) SHL 9) Or (FEnCiKey[i - 6].SWord SHR 7) - else begin - if ((i And 7) = 6) then - FEnCiKey[i].SWord := ((FEnCiKey[i - 7].SWord And 127) SHL 9) Or (FEnCiKey[i - 14].SWord SHR 7) - else - FEnCiKey[i].SWord := ((FEnCiKey[i - 15].SWord And 127) SHL 9) Or (FEnCiKey[i - 14].SWord SHR 7); - end; - end;{for} -end;{TIDEA.IDEA_ExpandKey} - -Procedure TIDEA.IDEA_InvertKey; -var - i : WORD; - t1, t2, t3: UWORD16; - pDeKey, pCiKey: pUWORD16; - -begin - pCiKey := @FEnCiKey; {!!!!Expand_Key MUST have been called first!!!!} - pDeKey := @FDeCiKey; - Inc(pDeKey, KEYLEN); - t1 := INV(pCiKey); Inc(pCiKey); - t2 := 0 - pCiKey^; Inc(pCiKey); - t3 := 0 - PCiKey^; Inc(pCiKey); - Dec(pDeKey); pDeKey^ := INV(pCiKey); Inc(pCiKey); - Dec(pDeKey); pDeKey^ := t3; - Dec(pDeKey); pDeKey^ := t2; - Dec(pDeKey); pDeKey^ := t1; - for i := 1 to (FRounds -1) do begin - t1 := pCiKey^; Inc(pCiKey); - Dec(pDeKey); pDeKey^ := pCiKey^; Inc(pCiKey); - Dec(pDeKey); pDeKey^ := t1; - t1 := INV(pCiKey); Inc(pCiKey); - t2 := 0 - pCiKey^; Inc(pCiKey); - t3 := 0 - PCiKey^; Inc(pCiKey); - Dec(pDeKey); pDeKey^ := INV(pCiKey); Inc(pCiKey); - Dec(pDeKey); pDeKey^ := t2; - Dec(pDeKey); pDeKey^ := t3; - Dec(pDeKey); pDeKey^ := t1; - end;{for} - t1 := pCiKey^; Inc(pCiKey); - Dec(pDeKey); pDeKey^ := pCiKey^; Inc(pCiKey); - Dec(pDeKey); pDeKey^ := t1; - t1 := INV(pCiKey); Inc(pCiKey); - t2 := 0 - pCiKey^; Inc(pCiKey); - t3 := 0 - PCiKey^; Inc(pCiKey); - Dec(pDeKey); pDeKey^ := INV(pCiKey); Inc(pCiKey); - Dec(pDeKey); pDeKey^ := t3; - Dec(pDeKey); pDeKey^ := t2; - Dec(pDeKey); pDeKey^ := t1; -end;{TIDEA.IDEA_InvertKey} - -Procedure TIDEA.SetKeys; {Sets up En\DecipherKey SubKeys} -{var - i, j: integer; - dum: string;} -begin - {Convert a ascii string of 'hex' characters to hex values.} -{ j := 1; - for i:= 1 to 8 do begin - dum:= '$' + System.Copy(FKey, j, 2); - FpKey[i - 1] := char(StrToInt(dum)); - j := j + 2; - end;{for} - - StrPCopy(FpKey, FKey); - IDEA_ExpandKey;{Make Encipher Key} - IDEA_InvertKey;{Make Decipher Key} -end; - -Procedure TIDEA.IDEA_Cipher; {Enciphers 64bit block} -{IDEA CIPHER Alogrithm} -var - t2, t1: UWORD16; {Save these, for use in steps 11..14} - pKey: pUWORD16; - i : BYTE; -begin -pKey:= FCiKey; - {Flip bytes on Intel!!} - With FpActiveBlock^ do begin -{Intelx86, IDEA assumes BigEndian} - X1 := (X1 SHR 8) Or (X1 SHL 8); - X2 := (X2 SHR 8) Or (X2 SHL 8); - X3 := (X3 SHR 8) Or (X3 SHL 8); - X4 := (X4 SHR 8) Or (X4 SHL 8); - - for i:= 0 to (FRounds - 1) do begin - X1 := MUL(@X1, pKey); (*Step One 1*) Inc(pKey); - Inc(X2, pKey^); (*Step Two 2*) Inc(pKey); - Inc(X3, pKey^); (*Step Three 3*) Inc(pKey); - X4 := MUL(@X4, pKey); (*Step Four 4*) Inc(pKey); - - t2 := X3 Xor X1; (*Step Five 5*) - t1 := X2 Xor X4; (*Step Six 6*) - - t2 := MUL(@t2, pKey); (*Step Seven 7*) Inc(pKey); - Inc(t1, t2); (*Step Eight 8*) - t1 := MUL(@t1, pKey); (*Step Nine 9*) Inc(pKey); - Inc(t2, t1); (*Step Ten 10*) - - X1 := X1 Xor t1; (*Step Eleven 11*) - X4 := X4 Xor t2; (*Step Fourteen 14*) - t2 := t2 Xor X2; - X2 := X3 Xor t1; (*Step Twelve 12*) - X3 := t2; (*Step Thirteen 13*) - end;{for} - - X1 := MUL(@X1, pKey); Inc(pKey); - t2:= X2; - X2 := X3 + pKey^; Inc(pKey); - X3 := t2 + pKey^; Inc(pKey); - X4 := MUL(@X4, pKey); - X1 := (X1 SHR 8) Or (X1 SHL 8); - X2 := (X2 SHR 8) Or (X2 SHL 8); - X3 := (X3 SHR 8) Or (X3 SHL 8); - X4 := (X4 SHR 8) Or (X4 SHL 8); - end;{with FpActiveBlock^} -end;{TIDEA.IDEA_Encipher} - -Procedure TIDEA.EncipherBLOCK; -{Private procedure. Enciphers blocks of data pointed to by FInputArray.} -begin - FCiKey := @FEnCiKey; {Point to Encipher Key} - IDEA_Cipher; -end;{TIDEA.Encipher_Bytes} - -Procedure TIDEA.DecipherBLOCK; -begin - FCiKey := @FDeCiKey; {Point to Decipher Key} - IDEA_Cipher; -end;{TIDEA.Decipher_Bytes} -end. diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/KeeperOpts.pas b/sdk/components/ElPack/BCBDemos/ElKeeper/KeeperOpts.pas deleted file mode 100644 index 8624d3c2c46..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/KeeperOpts.pas +++ /dev/null @@ -1,65 +0,0 @@ -unit KeeperOpts; - -interface - -uses ElOpts, Classes; - -type - - TKeeperOpts = class(TElOptions) - private - FSaveKeys: Boolean; - FShowPassword: Boolean; - FKeepPassword: Boolean; - FLastFile: String; - FReopenFile: Boolean; - FToTray: Boolean; - FMinimizeOnEsc: Boolean; - FMinimizeOnClose: Boolean; - FCountFolderChanges: Boolean; - procedure SetShowPassword(newValue: Boolean); - public - constructor Create(AOwner: TComponent); override; - published - property ShowPassword: Boolean read FShowPassword write SetShowPassword default False; - property KeepPassword: Boolean read FKeepPassword write FKeepPassword; - property LastFile: String read FLastFile write FLastFile; - property ReopenFile: Boolean read FReopenFile write FReopenFile; - property ToTray: Boolean read FToTray write FToTray; - property SaveKeys: Boolean read FSaveKeys write FSaveKeys; - property MinimizeOnEsc: Boolean read FMinimizeOnEsc write FMinimizeOnEsc; - property MinimizeOnClose: Boolean read FMinimizeOnClose write FMinimizeOnClose - default false; - property CountFolderChanges: Boolean read FCountFolderChanges write - FCountFolderChanges; - end; - -var Options : TKeeperOpts; - -implementation - -uses LogoMain; - -constructor TKeeperOpts.Create(AOwner: TComponent); -begin - FShowPassword := False; - FCountFolderChanges := true; -end; - -procedure TKeeperOpts.SetShowPassword(newValue: Boolean); -begin - if (FShowPassword <> newValue) then - begin - FShowPassword := newValue; - if LogoAppForm <> nil then - with LogoAppForm do - begin - Tree.HeaderSections[4].Password := not newValue; - Tree.HeaderSections[3].Password := not newValue; - end; - end; {if} -end; - -end. - - diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/KeyGen.pas b/sdk/components/ElPack/BCBDemos/ElKeeper/KeyGen.pas deleted file mode 100644 index 977d92557ca..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/KeyGen.pas +++ /dev/null @@ -1,120 +0,0 @@ -unit KeyGen; - -interface - - function DecodeUName : string; - procedure Start; - -implementation - -uses - Windows, SysUtils, Classes, CryptCon, ElTools, ElStrUtils, IdeaUnit, MD5Unit; - -function DecodeUName : string; -var Stream : TFileStream; - FileName : string; - MD5 : TMD5; - MemStream : TStringStream; - arr : array [1..17] of char; - IDEA: TIDEA; - -begin - result := ''; - FileName := ExtractFilePath(ParamStr(0))+'ElKeeper.key.bin'; - if not FileExists(FileName) then exit; - - MD5:=TMD5.Create; - MD5.InputType:=SourceString; - MD5.InputString := 'EldoS Keeper'; - MD5.pOutputArray:= @arr; - MD5.MD5_Hash; - arr[17]:=#0; - MD5.Free; - try - MemStream := nil; - Stream := nil; - IDEA := nil; - try - MemStream := TStringStream.Create(''); - Stream :=TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); - IDEA := TIDEA.Create(nil); - IDEA.InputType := SourceStream; - IDEA.CipherMode := ECBMode; - IDEA.IVector:='EldoS Keeper'; - IDEA.Key:=StrPas(@arr); - IDEA.InputStream:=Stream; - IDEA.OutputStream:=MemStream; - IDEA.DecipherData(False); - MemStream.Seek(0, soFromBeginning); - result := MemStream.DataString; - finally - IDEA.free; - MemStream.Free; - Stream.Free; - end; - except - end; -end; - -procedure Start; - -var UserName : string; -var Stream : TStream; - MD5 : TMD5; - MemStream : TStringStream; - arr : array [1..17] of char; - IDEA: TIDEA; - FileName : string; - S : string; - p : pointer; - i : integer; -begin - UserName := ParamStr(1); - FileName := ExtractFilePath(ParamStr(0))+'ElKeeper.key'; - MD5:=TMD5.Create; - MD5.InputType:=SourceString; - MD5.InputString:='EldoS Keeper'; - MD5.pOutputArray:=@arr; - MD5.MD5_Hash; - arr[17]:=#0; - MD5.Free; - MemStream := nil; - Stream := nil; - IDEA := nil; - try - MemStream := TStringStream.Create(UserName); - MemStream.Seek(0, soFromBeginning); - if FileExists(FileName) then DeleteFile(FileName); - Stream := TDirectMemoryStream.Create; - IDEA := TIDEA.Create(nil); - try - IDEA.InputType := SourceStream; - IDEA.CipherMode := ECBMode; - IDEA.IVector:='EldoS Keeper'; - IDEA.Key:=StrPas(@arr); - IDEA.InputStream := MemStream; - IDEA.OutputStream := Stream; - IDEA.EncipherData(False); - S := Data2Str(TDirectMemoryStream(Stream).Memory, Stream.Size); - Stream.Free; - - Stream := TFileStream.Create(Filename, fmCreate or fmShareDenyWrite); - WriteTextToStream(Stream, S); - Stream.Free; - Str2Data(S, p, i); - - DeleteFile(FileName + '.bin'); - Stream := TFileStream.Create(Filename + '.bin', fmCreate or fmShareDenyWrite); - Stream.WriteBuffer(Pchar(p)^, i); - Stream.Free; - finally - IDEA.free; - MemStream.Free; - writeln(output, 'The key was generated for ', DecodeUName); - end; - except - writeln('Failed to create a key'); - end; -end; - -end. \ No newline at end of file diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/LOGOSTRS.RES b/sdk/components/ElPack/BCBDemos/ElKeeper/LOGOSTRS.RES deleted file mode 100644 index cbcf98389b5d55ab3be6dada6ec6dbb9e844b9b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564 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 Value then - begin - FModified := Value; - SaveBtn.Enabled := Modified2 or Value; - FileSaveItem.Enabled := Modified2 or Value; - end; -end; - -procedure TLogoAppForm.RestoreFontSettings; -var S : String; - c : integer; - size : integer; - St : TFontStyles; - bl : integer; -begin - if ElIniFile.ReadString('\', 'FontName', '', S) then - begin - Tree.Font.Name := S; - QuickAccessForm.Tree.Font.Name := S; - end; - if ElIniFile.ReadInteger('\', 'FontCharset', 0, c) then - begin - Tree.Font.Charset := c; - QuickAccessForm.Tree.Font.Charset := c; - end; - if ElIniFile.ReadInteger('\', 'FontSize', 0, size) then - begin - Tree.Font.Size := size; - QuickAccessForm.Tree.Font.Size := size; - end; - bl := sizeof(st); - if ElIniFile.ReadBinary( '\', 'FontStyles', st, bl) then - begin - Tree.Font.Style := st; - QuickAccessForm.Tree.Font.Style := st; - end; -end; - -procedure TLogoAppForm.FormCreate(Sender: TObject); -var S : String; -begin - Options := TKeeperOpts.Create(Self); - Options.Storage := ElIniFile; - Options.StorageType := eosElIni; - Options.Load; - S := Tree.HeaderSections.SectionsOrder; - if ElIniFile.ReadString('\LogoAppForm\Tree\ElHeader', 'Order', S, S) then - Tree.HeaderSections.SectionsOrder := S; - Tree.Restore; - ElMRU.Restore; - Tree.HeaderSections[9].ShowSortMark := false; - - if Options.ShowPassword then - PasswItem.Checked := true; - - Application.OnHelp := AppEventsHelp; - Application.OnRestore := Self.AppEventsRestore; - Application.OnMinimize := Self.AppEventsMinimize; - Application.OnIdle := AppEventsIdle; - FMTree := TElMTree.Create; - FMTree.OnItemDelete:=OnItemDelete; - FMTree.OnItemSave:=OnItemSave; - FMTree.OnItemLoad:=OnItemLoad; - LoadStack:=TElStack.Create; - Opened := false; - AboutBox:=TAboutBox.Create(Self); - if OpenDialog.InitialDir='' then - OpenDialog.InitialDir := ExtractFileDir(ParamStr(0)); - if SaveDialog.InitialDir='' then - SaveDialog.InitialDir := ExtractFileDir(ParamStr(0)); - begin - NewFolderBtn.Visible := true; - NewRecBtn.Visible := true; - NewRecord1.Visible := true; - NewFolder1.Visible := true; - DelBtn.Visible := true; - Delete1Item.Visible := true; - NewFoldItem.Visible := true; - NewRecItem.Visible := true; - DeleteItem.Visible := true; - end; - hMapping := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, MAX_PATH + 1, 'EldoS Keeper current file name'); - FileName := LoadStr(sUntitled); - AssignedID := 0; - JustStarted := true; -end; - -procedure TLogoAppForm.FileNew(Sender: TObject); -begin - if Opened then - if not FileClose then exit; - Tree.Items.Clear; - FMTree.Clear; - DeleteItem.Enabled := false; - PropItem.Enabled := false; - Delete1Item.Enabled := false; - Prop1Item.Enabled := false; - GoItem.Enabled := false; - GoBtn.Enabled := false; - Go1Item.Enabled := false; - PropBtn.Enabled := false; - DelBtn.Enabled :=false; - CopyBtn.Enabled := false; - CopyItem.Enabled := false; - //SelItem := nil; - Modified := false; - Modified2 := false; - Opened := true; - FilePassword := ''; - AssignedID := 0; - FileName := LoadStr(sUntitled); - QuickAccessForm.UpdateTree(FMTree); - Tree.BkColor := clWindow; - Tree.ShowColumns := true; -end; - -procedure TLogoAppForm.FileOpen(Sender: TObject); -begin - if OpenDialog.Execute then - begin - if Opened then - if not FileClose then - exit; - if LoadFile(OpenDialog.FileName, '', false) then - begin - FileName := OpenDialog.FileName; - //SelItem := nil; - Modified:= false; - Opened := true; - end; - end; -end; - -procedure TLogoAppForm.FileSave(Sender: TObject); -begin - if FileName = LoadStr(sUntitled) then - FileSaveAs(Sender) - else - if SaveFile(FileName) then - begin - Modified := false; - Modified2 := false; - end; -end; - -procedure TLogoAppForm.FileSaveAs(Sender: TObject); -begin - if SaveDialog.Execute then - begin - if FileExists(SaveDialog.FileName) then - if ElMessageDlg(FmtLoadStr(sOverwrite, [SaveDialog.FileName]), - mtConfirmation, mbYesNoCancel, 0) <> idYes then Exit; - if SaveFile(SaveDialog.FileName) then - begin - FileName := SaveDialog.FileName; - Options.LastFile := FileName; - Modified := false; - Modified2 := false; - ElMRU.Sections[0].Add(FileName, 0); - end; - end; -end; - -function TLogoAppForm.FileClose; -begin - result := true; - if not Opened then exit; - if Modified then - begin - case ElMessageDlg(LoadStr(sSaveOnCLose), mtWarning, [mbYes, mbNo, mbCancel], 0) of - id_Yes: begin - FileSave(Self); - if Modified then result:=false; - end; - id_No: begin - Modified := false; - Modified2 := false; - end; - id_Cancel: result:=false; - end; - end; - if Result then - begin - Opened := false; - Tree.Items.Clear; - FMTree.Clear; - FilePassword := ''; - FileName := LoadStr(sUntitled); - end; -end; - -procedure TLogoAppForm.FileExit(Sender: TObject); -begin - DoExit := true; - Close; -end; - -procedure TLogoAppForm.About(Sender: TObject); -begin - AboutBox.ShowModal; -end; - -function TLogoAppForm.SaveFile(AFileName : string): Boolean; - - function SaveEK3(Password : string) : boolean; - var AESKey, - KeyHash : array [1..17] of char; - MemStream : TDirectMemoryStream; - Stream : TStream; - MD5 : TCrMD5; - S : string; - begin - MD5:=TCrMD5.Create; - try - MD5.InputType := SourceString; - MD5.InputString := Password; - MD5.pOutputArray := @AESKey; - MD5.MD5_Hash; - AESKey[17]:=#0; - finally - MD5.Free; - end; - MD5:=TCrMD5.Create; - try - MD5.InputType := SourceByteArray; - MD5.pInputArray := @AESKey; - MD5.InputLength := 16; - MD5.pOutputArray := @KeyHash; - MD5.MD5_Hash; - finally - MD5.Free; - end; - MemStream := TDirectMemoryStream.Create; - try - MemStream.WriteBuffer(KeyHash, Sizeof(KeyHash)); - - FileVersion := FILE_VERSION; - MemStream.WriteBuffer(FileVersion, sizeof(integer)); - MemStream.WriteBuffer(AssignedID, sizeof(AssignedID)); - - FMTree.SaveToStream(MemStream); - FileVersion := 0; - MemStream.Seek(0, soFromBeginning); - try - Stream := TFileStream.Create(AFileName, fmCreate or fmShareDenyWrite); - except - Stream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite); - end; - try - S := AESEncrypt(MemStream.Memory, MemStream.Size, @AESKey); - Stream.WriteBuffer(PChar(S)[0], Length(S)); - finally - Stream.Free; - end; - finally - MemStream.Free; - end; - result := true; - end; - - function SaveEK2(Password : string) : boolean; - var key : array [1..17] of char; - MemStream : TDirectMemoryStream; - Stream : TStream; - MD5 : TCrMD5; - IDEA : TIDEA; - begin - - MD5:=TCrMD5.Create; - try - MD5.InputType := SourceString; - MD5.InputString := Password; - MD5.pOutputArray := @key; - MD5.MD5_Hash; - key[17]:=#0; - finally - MD5.Free; - end; - MemStream := TDirectMemoryStream.Create; - try - try - FMTree.SaveToStream(MemStream); - MemStream.Seek(0, soFromBeginning); - if FileExists(AFileName) then - Stream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite) - else - Stream := TFileStream.Create(AFileName, fmCreate or fmShareDenyWrite); - try - IDEA := TIDEA.Create(self); - try - IDEA.InputType := SourceStream; - IDEA.CipherMode := ECBMode; - IDEA.IVector := Password; - IDEA.Key := StrPas(@key); - IDEA.InputStream := MemStream; - IDEA.OutputStream:= Stream; - IDEA.EncipherData(False); - finally - IDEA.free; - end; - finally - Stream.Free; - end; - Modified := false; - Modified2 := false; - except - on E : Exception do - begin - ElMessageDlg(FmtLoadStr(sFailSave, [AFileName]), mtError, [mbOk], 0); - result := false; - exit; - end; - end; - finally - MemStream.Free; - end; - result := true; - end; - -var Passw : string; - -begin - PasswordDlg.Password.Text:=''; - PasswordDlg.ConfPassword.visible:=true; - PasswordDlg.ConfLabel.Visible:=true; - PasswordDlg.ConfPassword.Text:=''; - result:=false; - if (not Options.KeepPassword) or (FilePassword = '') then - begin - repeat - if PasswordDlg.ShowModal = mrCancel then - exit; - if PasswordDlg.Password.Text<>PasswordDlg.ConfPassword.Text then - ElMessageDlg (LoadStr(sPswNotMatch), mtError, [mbOk], 0) - else - if PasswordDlg.Password.Text='' then - ElMessageDlg (LoadStr(sPswEmpty), mtError, [mbOk], 0) - else - break; - until false; - Passw := PasswordDlg.Password.Text; - PasswordDlg.Password.Text:=''; - PasswordDlg.ConfPassword.Text:=''; - end - else - Passw := FilePassword; - - if lowercase(ExtractFileExt(AFileName)) = '.ek3' then - result := SaveEK3(Passw) - else - result := SaveEK2(Passw); -end; { SaveFile } - -function TLogoAppForm.LoadFile(AFileName, Passw : string; UseGivenPassword : - boolean): Boolean; - - function LoadEK3 : boolean; - var Stream : TFileStream; - MD5 : TCrMD5; - MemStream : TDirectMemoryStream; - AESKey, - KeyHash, - SigHash: array [1..17] of char; - S : string; - - begin - result := false; - MD5:=TCrMD5.Create; - try - MD5.InputType := SourceString; - MD5.InputString := Passw; - MD5.pOutputArray:= @AESKey; - MD5.MD5_Hash; - finally - MD5.Free; - end; - MD5:=TCrMD5.Create; - try - AESKey[17] :=#0; - MD5.InputType := SourceByteArray; - MD5.pInputArray := @AESKey; - MD5.InputLength := 16; - MD5.pOutputArray:= @KeyHash; - MD5.MD5_Hash; - finally - MD5.Free; - end; - - MemStream := TDirectMemoryStream.Create; - try - Stream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite); - MemStream.CopyFrom(Stream, Stream.Size); - try - if Passw <> '' then - begin - S := AESDecrypt(MemStream.Memory, MemStream.Size, @AESKey); - MemStream.Size := Length(S); - MoveMemory(MemStream.Memory, PChar(S), Length(S)); - S := ''; - MemStream.Position := 0; - MemStream.ReadBuffer(SigHash, sizeof(SigHash)); - end - else - begin - MemStream.ReadBuffer(SigHash, Sizeof(SigHash)); - end; - if not CompareMem(@SigHash[1], @KeyHash[1], 16) then - begin - result := false; - raise Exception.Create('Failed to open the file:'#13#10'The password is incorrect or the file is corrupt.'); - end; - - FMTree.Clear; - - MemStream.ReadBuffer(FileVersion, sizeof(Integer)); - if FileVersion >= 4 then - MemStream.ReadBuffer(AssignedID, sizeof(AssignedID)) - else - AssignedID := 0; - try - Tree.Items.BeginUpdate; - try - FMTree.LoadFromStream(MemStream); - result := true; - finally - Tree.Items.EndUpdate; - QuickAccessForm.UpdateTree(FMTree); - end; - FileVersion := 0; - except - on E: EReadError do - Raise Exception.Create('Failed to open the file: file seems to be corrupt.'); - end; - finally - Stream.Free; - end; - finally - MemStream.Free; - end; - end; - - - function LoadEK2 : boolean; - var Stream : TFileStream; - MD5 : TCrMD5; - MemStream : TDirectMemoryStream; - arr : array [1..17] of char; - IDEA: TIDEA; - begin - MD5:=TCrMD5.Create; - MD5.InputType:=SourceString; - MD5.InputString:=Passw; - MD5.pOutputArray:=@arr; - MD5.MD5_Hash; - arr[17]:=#0; - MD5.Free; - MemStream := nil; - Stream := nil; - try - MemStream := TDirectMemoryStream.Create; - Stream :=TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite); - if Passw<>'' then - begin - IDEA := nil; - try - IDEA := TIDEA.Create(self); - IDEA.InputType := SourceStream; - IDEA.CipherMode := ECBMode; - IDEA.IVector:=Passw; - - IDEA.Key:=StrPas(@arr); - IDEA.InputStream:=Stream; - IDEA.OutputStream:=MemStream; - IDEA.DecipherData(False); - MemStream.Seek(0, soFromBeginning); - - FMTree.Clear; - Tree.Items.Clear; - - Tree.Items.BeginUpdate; - try - FMTree.LoadFromStream(MemStream); - result := true; - finally - Tree.Items.EndUpdate; - QuickAccessForm.UpdateTree(FMTree); - end; - finally - IDEA.free; - end; - end - else - try - FMTree.LoadFromStream(Stream); - result := true; - finally - QuickAccessForm.UpdateTree(FMTree); - end; - MemStream.Free; - Stream.Free; - except - on E:Exception do - begin - ElMessageDlg(FmtLoadStr(sFailLoad, [AFileName]), mtError, [mbOk], 0); - - FMTree.Clear; - Tree.Items.Clear; - - MemStream.Free; - Stream.Free; - - result := false; - exit; - - end; - end; - end; - -var hMapping : THandle; - View : Pointer; - b : boolean; - -begin - result:=False; - b := false; - if not (FileExists(AFileName)) then exit; - hMapping := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, MAX_PATH + 1, 'EldoS Keeper current file name'); - if (hMapping <> 0) then - begin - View := MapViewOfFile(hMapping, FILE_MAP_WRITE, 0, 0, MAX_PATH + 1); - if (View <> nil) then - begin - if AnsiCompareText(AFileName, StrPas(PChar(View))) = 0 then - b := true; - UnmapViewOfFile(View); - end; - CloseHandle(hMapping); - end; - if b then - ElMessageDlg('This file is currently opened with PDA synchronization module.'#13#10'Please try to open this file a little later.', mtInformation, [mbOk], 0); - - if not UseGivenPassword then - begin - PasswordDlg.Password.Text:=''; - PasswordDlg.ConfPassword.visible:=false; - PasswordDlg.ConfLabel.Visible:=false; - PasswordDlg.ConfPassword.Text:=''; - if PasswordDlg.ShowModal = mrCancel then exit; - Passw := PasswordDlg.Password.Text; - PasswordDlg.Password.Text:=''; - end; - result := false; - Tree.Items.Clear; - - if lowercase(ExtractFileExt(AFileName)) = '.ek3' then - try - result := LoadEK3; - except - on E : Exception do - ElMessageDlg(E.Message, mtError, [mbOk], 0); - end - else - result := LoadEK2; - - if not result then - exit; - - ElMRU.Sections[0].Add(AFileName, 0); - if result then - begin - Options.LastFile := AFileName; - FilePassword := Passw; - end; -end; - -procedure TLogoAppForm.CloseBtnClick(Sender: TObject); -begin - if FileClose then - begin - GoItem.Enabled := false; - GoBtn.Enabled := false; - Go1Item.Enabled := false; - DeleteItem.Enabled := false; - PropItem.Enabled := false; - Delete1Item.Enabled := false; - Prop1Item.Enabled := false; - PropBtn.Enabled := false; - DelBtn.Enabled := false; - CopyBtn.Enabled := false; - CopyItem.Enabled := false; - //SelItem := nil; - Modified := false; - Modified2 := false; - QuickAccessForm.UpdateTree(FMTree); - end; -end; - -procedure TLogoAppForm.OnItemDelete(Sender : TObject; Item : TElMTreeItem; Data : pointer); -var E : PEntryRec; -begin - E:=PEntryRec(Data); - Dispose(E); -end; - -procedure TLogoAppForm.TreeMouseUp(Sender: TObject; Button: TMouseButton; - Shift: TShiftState; X, Y: Integer); -begin - if Button = mbRight then - begin - //SelItem := ElTree.ItemFocused; - DeleteItem.Enabled := SelItem<>nil; - PropItem.Enabled := SelItem<>nil; - Delete1Item.Enabled := SelItem <>nil; - Prop1Item.Enabled := SelItem <>nil; - PropBtn.Enabled := SelItem <>nil; - DelBtn.Enabled := SelItem <>nil; - GoItem.Enabled := SelItem <>nil; - Go1Item.Enabled := SelItem <>nil; - GoBtn.Enabled := SelItem <>nil; - CopyBtn.Enabled := SelItem <>nil; - CopyItem.Enabled := SelItem <>nil; - end; -end; - -procedure TLogoAppForm.NewFoldItemClick(Sender: TObject); -begin - CreateRecord(true); -end; - -procedure TLogoAppForm.CreateRecord(IsFolder : boolean); -var Item, - Item1 : TElTreeItem; - MItem : TElMTreeItem; - Entry : PEntryRec; -begin - Tree.Items.BeginUpdate; - try - New(Entry); - FillMemory(Entry, sizeof(TEntryRec), 0); - if (SelItem <> nil) then - begin - if (PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.Group) then - Item1 := SelItem - else - Item1 := SelItem.Parent; - Item := Tree.Items.AddItem(Item1); - Item.Expanded := false; - if Item1 <> nil then - Item1.Expanded := true; - if Item1 = nil then - begin - MItem := FMTree.AddItem(nil, Entry); - Entry.ParentID := DWORD(-1); - end - else - begin - Entry.ParentID := PEntryRec(Item1.Data).RecID; - MItem := FMTree.AddItem(Item1.Data, Entry); - end; - end - else - begin - Item := Tree.Items.AddItem(nil); - Item.Expanded := false; - MItem := FMTree.AddItem(nil, Entry); - Entry.ParentID := DWORD(-1); - end; - Item.Data := MItem; - Entry^.Group := IsFolder; - Entry.Added := Now; - Entry.Modified := Now; - Entry.Expires := Now + 30; - Entry.WarnDays := 1; - Entry.RecID := UniqueID; - Tree.ItemFocused := Item; - if not PropsEdit(SelItem) then - begin - FMTree.DeleteItem(MItem); - Tree.Items.DeleteItem(SelItem); - end - else - begin - Modified := true; - Opened := true; - UpdateItem(Item); - QuickAccessForm.UpdateTree(FMTree); - TreeItemFocused(self); - end; - finally - Tree.Items.EndUpdate; - end; -end; - -procedure TLogoAppForm.PropItemClick(Sender: TObject); -begin - if PropsEdit(SelItem) then - begin - QuickAccessForm.UpdateTree(FMTree); - TreeItemFocused(self); - end; -end; - -procedure TLogoAppForm.OnItemSave(Sender : TObject; Item : TElMTreeItem; Stream : TStream); { protected } -begin - DoItemSave(Item, Stream); -end; { OnItemSave } - -procedure TLogoAppForm.OnItemLoad(Sender : TObject; Item : TElMTreeItem; Stream : TStream); { protected } -var - VItem, Parent : TElTreeItem; - Entry : PEntryRec; - -begin - try - DoItemLoad(Item, Stream); - Entry := PEntryRec(Item.Data); - Parent := nil; - if not LoadStack.Empty then - begin - Parent := TElTreeItem(LoadStack.Pop); - if Parent.Data<>Item^.Parent then - begin - while (not LoadStack.Empty) do - begin - Parent := TElTreeItem(LoadStack.Pop); - if Parent.Data=Item^.Parent then - begin - LoadStack.Push(Parent); - break; - end; - end; - if LoadStack.Empty then Parent := nil; - end - else - LoadStack.Push(Parent); - end; - if Parent<>nil then - begin - VItem := Tree.Items.AddItem(Parent); - VItem.Data := Item; - end else - begin - VItem := Tree.Items.AddItem(nil); - VItem.Data := Item; - end; - Item^.Data := Entry; - LoadStack.Push(VItem); - - UpdateItem(VItem); - - VItem.Expanded := Entry.Expanded; - except - on E : Exception do - begin - Item.Data := nil; - raise; - end; - end; -end; { OnItemLoad } - -procedure TLogoAppForm.FormCloseQuery(Sender: TObject; - var CanClose: Boolean); -begin - if Options.MinimizeOnClose and (not DoExit) then - CanClose := true - else - CanClose := FileClose; -end; - -procedure TLogoAppForm.DeleteItemClick(Sender: TObject); -begin - if (SelItem = nil) or (SelItem.Data = nil) then exit; - if ElMessageDlg(LoadStr(sConfDelete), mtWarning, [mbYes, mbNo], 0)=mrNo then exit; - FMTree.DeleteItem(TElMTreeItem(SelItem.Data)); - Tree.Items.DeleteItem(SelItem); - Modified := true; - QuickAccessForm.UpdateTree(FMTree); - //SelItem := nil; -end; - -procedure TLogoAppForm.NewRecItemClick(Sender: TObject); -begin - CreateRecord(false); -end; - -procedure TLogoAppForm.UpdateItem(Item : TElTreeItem); -var Entry : PEntryRec; - s : string; -begin - if Item.Data=nil then exit; - Entry := PEntryRec(TElMTreeItem(Item.Data)^.Data); - - Tree.IsUpdating := true; - try - Item.Text:=Entry^.Site; - Item.ColumnText.Clear; - Item.ColumnText.Add(Entry^.Location); - if not Entry^.Group then - begin - Item.ColumnText.Add(Entry^.UName); - Item.ColumnText.Add(Entry^.Acct); - Item.ColumnText.Add(Entry^.Pswd); - Item.ColumnText.Add(Entry^.Info); - try - S := DateToStr(Entry^.Added); - except - S := DateToStr(Now); - end; - Item.ColumnText.Add(S); - - try - S := DateToStr(Entry^.Modified); - except - S := DateToStr(Now); - end; - Item.ColumnText.Add(S); - - try - S := DateToStr(Entry^.Expires); - except - S := DateToStr(Now + 1); - end; - Item.ColumnText.Add(S); - end; - - Item.ImageIndex := -1; - Item.StateImageIndex := -1; - - { - if Entry^.Group then - begin - Item.ImageIndex:=0; - Item.StateImageIndex := 1; - end - else - Item.ImageIndex := 2; - } - finally - Tree.IsUpdating:=false; - end; -end; - -function TLogoAppForm.PropsEdit(Item : TElTreeItem) : Boolean; { public } -begin - result :=false; - if (SelItem = nil) or (SelItem.Data = nil) then exit; - if PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.Group then - begin - with TFolderPropsForm.Create(Self) do - begin - SiteNameEdit.Text := PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.Site; - if ShowModal = mrOk then - begin - Modified := true; - SelItem.Text := SiteNameEdit.Text; - PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.Site := SiteNameEdit.Text; - result := true; - end; - Free; - end; - end else - begin - with TRecPropsForm.Create(Self) do - begin - try - Entry := PEntryRec(TElMTreeItem(Self.SelItem.Data)^.Data); - SetData; - if ShowModal = mrOk then - begin - GetData; - Self.UpdateItem(SelItem); - Self.Modified := true; - result := true; - end; - finally - Free; - end; - end; - end; -end; { PropsEdit } - -type TElDragObject = class (TDragControlObject) - function GetDragCursor(Accepted: Boolean; X, Y: Integer): TCursor; override; - end; - -function TElDragObject.GetDragCursor(Accepted: Boolean; X, Y: Integer): TCursor; -begin - if Control is TElTree then - begin - if ((Control as TElTree).GetItemAtY(Y)<>nil) or (Accepted) then - Result := (Control as TElTree).DragCursor else - Result := crNoDrop; - end else result:=inherited GetDragCursor(Accepted,X,Y); -end; - -procedure TLogoAppForm.TreeStartDrag(Sender: TObject; - var DragObject: TDragObject); -begin - DragItem := Tree.ItemFocused; - DragObject := TElDragObject.Create(Tree); -end; - -procedure TLogoAppForm.TreeDragOver(Sender, Source: TObject; X, - Y: Integer; State: TDragState; var Accept: Boolean); -var TSI:TElTreeItem; -begin - Accept:=false; - if Source.ClassType <> TElDragObject then exit; - TSI := Tree.GetItemAtY(Y); - if TSI = nil then - begin - Accept:=true; - exit; - end; - if ((not TSI.IsUnder(DragItem)) and (PEntryRec(TElMTreeItem(TSI.Data)^.Data)^.Group)) then - Accept:=true; -end; - -procedure TLogoAppForm.TreeDragDrop(Sender, Source: TObject; X, - Y: Integer); -var TSI :TElTreeItem; -begin - TSI := Tree.GetItemAtY(Y); - if ((TSI<>nil) and (not TSI.IsUnder(DragItem)) and - (PEntryRec(TElMTreeItem(TSI.Data)^.Data)^.Group)) or - (TSI = nil) then - begin - DragItem.MoveTo(TSI); - if TSI <> nil then - FMTree.MoveTo(TElMTreeItem(DragItem.Data), TElMTreeItem(TSI.Data)) - else - FMTree.MoveTo(TElMTreeItem(DragItem.Data), nil); - Modified := true; - QuickAccessForm.UpdateTree(FMTree); - end; - DragItem := nil; -end; - -procedure TLogoAppForm.Record1Click(Sender: TObject); -begin - //SelItem := ElTree.ItemFocused; - DeleteItem.Enabled := SelItem <> nil; - PropItem.Enabled := SelItem <> nil; - Delete1Item.Enabled := SelItem<> nil; - Prop1Item.Enabled := SelItem<> nil; - PropBtn.Enabled := SelItem <> nil; - DelBtn.Enabled := SelItem <> nil; - GoItem.Enabled := SelItem <> nil; - Go1Item.Enabled := SelItem <> nil; - GoBtn.Enabled := SelItem <> nil; - CopyBtn.Enabled := SelItem <> nil; - CopyItem.Enabled := SelItem<> nil; -end; - -procedure TLogoAppForm.TreeItemFocused(Sender: TObject); -var IsRecord : boolean; -begin - if (csDestroying in ComponentState) then exit; - - DeleteItem.Enabled := SelItem<>nil; - PropItem.Enabled := SelItem<>nil; - Delete1Item.Enabled := SelItem <>nil; - Prop1Item.Enabled := SelItem <>nil; - DelBtn.Enabled := SelItem <>nil; - PropBtn.Enabled := SelItem <>nil; - CopyBtn.Enabled := SelItem <>nil; - CopyItem.Enabled := SelItem <>nil; - IsRecord := (SelItem <>nil) and - (TElMTreeItem(SelItem.Data)^.Data <> nil) and - (not PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.Group); - - GoBtn.Enabled := IsRecord and (Length(PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.Location) > 0); - GoItem.Enabled := GoBtn.Enabled; - Go1Item.Enabled := GoBtn.Enabled; - Go2Btn.Enabled := IsRecord and (Length(PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.Location2) > 0); - Go2Item.Enabled := Go2Btn.Enabled; - - miCopyUsername.Enabled := IsRecord and (Length(PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.UName) > 0); - CopyUNameBtn.Enabled := miCopyUsername.Enabled; - - miCopyAccount.Enabled := IsRecord and (Length(PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.Acct) > 0); - CopyAcctBtn.Enabled := miCopyAccount.Enabled; - - CopyPswItem.Enabled := IsRecord and (Length(PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.Pswd) > 0); - CopyPswBtn.Enabled := CopyPswItem.Enabled; - - miSaveAttach.Enabled := IsRecord and - (PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.BinDataSize > 0); -end; - -procedure TLogoAppForm.FormClose(Sender: TObject; - var Action: TCloseAction); -var Reg : TRegistry; -begin - if DoExit or (not Options.MinimizeOnClose) then - begin - Action := caFree; - Tree.Items.Clear; - FMTree.Clear; - Reg := nil; - try - try - Reg := TRegistry.Create; - Reg.OpenKey('Software\EldoS\Keeper', true); - Reg.WriteString('OpenDir', OpenDialog.InitialDir); - Reg.WriteString('SaveDir', SaveDialog.InitialDir); - Reg.CloseKey; - finally - Reg.Free; - end; - except - on E : Exception do ; - end; - Application.Terminate; - end - else - begin - Application.Minimize; - end; -end; - -procedure TLogoAppForm.ContentsItemClick(Sender: TObject); -begin - Application.HelpCommand(HELP_FINDER, 0); -end; - -function TLogoAppForm.AppEventsHelp(Command: Word; Data: Integer; - var CallHelp: Boolean): Boolean; -begin - if (Command = HELP_CONTEXT) and (Data = 0) then - begin - CallHelp := false; - Application.HelpCommand(HELP_FINDER, 0); - end; - result := true; -end; - -procedure TLogoAppForm.GoItemClick(Sender: TObject); -begin - if (SelItem = nil) or (SelItem.Data = nil) then exit; - if PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.Group then exit; - ShellExecute(0,'open',PChar(PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.Location),nil, nil, SW_SHOWNORMAL); -end; - -procedure TLogoAppForm.FormDestroy(Sender: TObject); -var i : integer; - S : String; -begin - if (hMapping <> 0) then - CloseHandle(hMapping); - if Options.SaveKeys then - begin - for i := 0 to ElMRU.Sections.Count -1 do - ElMRU.Sections[i].Clear; - - Options.LastFile := ''; - end; - ElMRU.Save; - Tree.Save; - S := Tree.HeaderSections.SectionsOrder; - ElIniFile.WriteString('\LogoAppForm\Tree\ElHeader', 'Order', S); - Options.Save; - ElIniFile.Save; - FMTree.Free; - LogoAppForm := nil; -end; - -function TLogoAppForm.GetDataIndex(Data : Pointer) : integer; -var i : integer; -begin - result := -1; - for i := 0 to Tree.Items.Count - 1 do - begin - if TElMTreeItem(Tree.Items[i].Data).Data = Data then - begin - result := i; - exit; - end; - end; -end; - -procedure TLogoAppForm.CopyBtnClick(Sender: TObject); -var C : TClipboard; - Entry : PEntryRec; - S : TStringList; -begin - if Tree.ItemFocused = nil then exit; - Entry := PEntryRec(TElMTreeItem(Tree.ItemFocused.Data)^.Data); - C := TClipboard.Create; - S := TStringList.Create; - if Entry.Group - then S.Add('Group name: '+ Entry.Site) - else S.Add('Site/Program name: '+ Entry.Site); - if not Entry.Group then - begin - if Entry.Location <> '' then S.Add('Location/address: ' + Entry.Location); - if Entry.UName <> '' then S.Add('User name: ' + Entry.UName); - if Entry.Acct <> '' then S.Add('Account #: '+ Entry.Acct); - if Entry.Pswd <> '' then S.Add('Password: '+ Entry.Pswd); - if Entry.Info <> '' then S.Add('Additional info: '+ Entry.Info); - end; - C.AsText := S.Text; - S.Free; - C.Free; -end; - -procedure TLogoAppForm.PrintSetupItemClick(Sender: TObject); -begin - try - PrintSetDlg.Execute; - except - ElMessageDlg('There was an error while setting Printer properties', mtError, [mbOk], 0); - end; -end; - -procedure TLogoAppForm.PrintItemClick(Sender: TObject); -var - PrintText: TextFile; { declare a text-file variable } - i: integer; - L: TStringList; - - procedure IntPrepare(Item:TElTreeItem; Index: integer; var ContinueIterate:boolean; - IterateData:pointer; Tree:TCustomElTree); - var Entry : PEntryRec; - L, L1 : TStringList; - gap : string; - i : integer; - begin - Entry := PEntryRec(TElMTreeItem(Item.Data)^.Data); - L := TStringList(IterateData); - SetLength(gap, Item.Level*10); - FillChar(gap[1], Length(gap), 32); - if Entry.Group - then L.Add(gap + 'Group name: '+ Entry.Site) - else L.Add(gap + 'Site/Program name: '+ Entry.Site); - if not Entry.Group then - begin - if Entry.Location <> '' then L.Add(gap + 'Location/address: ' + Entry.Location); - if Entry.UName <> '' then L.Add(gap + 'User name: ' + Entry.UName); - if Entry.Acct <> '' then L.Add(gap + 'Account #: '+ Entry.Acct); - if Entry.Pswd <> '' then L.Add(gap + 'Password: '+ Entry.Pswd); - if pos(#13, Entry.Info)>0 then - begin - L1 := TStringList.Create; - try - L1.Text:=Entry.Info; - L.Add(gap + 'Additional info: '+ L1[0]); - for i := 1 to L1.Count -1 do - begin - L.Add(Gap + ' '+ L1[i]); - end; - finally - L1.Free; - end; - end else - begin - if Entry.Info <> '' then - L.Add(gap + 'Additional info: '+ Entry.Info); - end; - end; - L.Add(''); - end; - -begin - L := nil; - try - L := TStringList.Create; - L.Add(''); - L.Add(''); - L.Add(''); - L.Add('Password list from ' + FileName); - L.Add(''); - L.Add(''); - Screen.Cursor := crHourGlass; - try - AssignPrn(PrintText); { associate text file to printer device } - Rewrite(PrintText); { create and open output file } - Tree.Items.Iterate(false, true, @IntPrepare, L); - for i := 0 to L.Count -1 do - Writeln(PrintText, StrToOEM(L[i])); { write each line to printer } - finally - Screen.Cursor := crDefault; - end; // try/finally - finally - L.Free; - CloseFile(PrintText); - end; -end; - -procedure TLogoAppForm.TrayDblClick(Sender: TObject); -begin - if AMinimized then - begin - Tray.Enabled := false; - Application.Restore - end - else - begin - Tray.Enabled := false; - ShowWindow(Handle, SW_SHOW); - Windows.SetFocus(Handle); - BringToFront; - Application.BringToFront; - end; -end; - -procedure TLogoAppForm.AppEventsMinimize(Sender: TObject); -begin - MVis := IsWindowVisible(Handle) and (WindowState <> wsMinimized); - if MVis then - begin - ShowWindow(Handle,SW_HIDE); - end; - QVis := QuickAccessForm.Visible; - if QVis then - begin - QuickAccessForm.Visible := false; - //ShowWindow(QuickAccessForm.Handle, SW_HIDE); - end; - if Options.ToTray then - begin - Tray.Enabled := true; - ShowWindow(Application.Handle,SW_HIDE); - end; - AMinimized := true; -end; - -procedure TLogoAppForm.AppEventsRestore(Sender: TObject); -begin - if Options.ToTray then - begin - if MVis then - Tray.Enabled := false; - ShowWindow(Application.Handle, SW_RESTORE); - end; - if MVis then - ShowWindow(Handle, SW_SHOW); - if QVis then - begin - ShowWindow(QuickAccessForm.Handle,SW_SHOW); - QuickAccessForm.Visible := true; - end; - if QVis then - QuickAccessForm.BringToFront; - if MVis then - BringToFront; - Application.BringToFront; - AMinimized := false; -end; - -procedure TLogoAppForm.FormShow(Sender: TObject); -var bSucc : Boolean; -begin - RestoreFontSettings; - if Options.ShowPassword then - begin - Options.ShowPassword := false; - Options.ShowPassword := true; - end; - if Options.ReopenFile and (Options.LastFile <> '') and (not Options.SaveKeys) then - begin - if LoadFile(Options.LastFile, '', false) then - begin - FileName := Options.LastFile; - Opened := true; - Modified := false; - Modified2 := false; - end; - end; - if (ParamCount > 0) then - begin - if ParamCount > 1 then - bSucc := LoadFile(ParamStr(1), ParamStr(2), true) - else - bSucc := LoadFile(ParamStr(1), '', False); - if bSucc then - begin - FileName := ParamStr(1); - Modified := false; - Modified2 := false; - Opened := true; - end; - end; -end; - -procedure TLogoAppForm.PasswItemClick(Sender: TObject); -begin - Options.ShowPassword := not Options.ShowPassword; - PasswItem.Checked := not PasswItem.Checked; -end; - -procedure TLogoAppForm.ElMRUClick(Sender: TObject; Entry: TElMRUEntry); -begin - if Opened then - if not FileClose then - exit; - if LoadFile(Entry.Name, '', false) then - begin - FileName := Entry.Name; - Modified := false; - Modified2 := false; - Opened := true; - end; -end; - -procedure TLogoAppForm.FormCaptionButtonClick(Sender: TObject; - Button: TElCaptionButton); -begin - ElFormPersist.TopMost := Button.Down; -end; - -procedure TLogoAppForm.CopyPswItemClick(Sender: TObject); -var C : TClipboard; - Entry : PEntryRec; -begin - if Tree.ItemFocused = nil then exit; - Entry := PEntryRec(TElMTreeItem(Tree.ItemFocused.Data)^.Data); - if Entry.Group then exit; - C := TClipboard.Create; - C.Open; - C.AsText := Entry.Pswd; - C.Close; - C.Free; -end; - -procedure TLogoAppForm.ElFormPersistRestore(Sender: TObject); -begin - FormCaption.Buttons[0].Down := ElFormPersist.TopMost; -end; - -procedure TLogoAppForm.SetPswItemClick(Sender: TObject); -var Passw : string; - b : boolean; -begin - PasswordDlg.Password.Text:=''; - PasswordDlg.ConfPassword.visible:=true; - PasswordDlg.ConfLabel.Visible:=true; - PasswordDlg.ConfPassword.Text:=''; - repeat - if PasswordDlg.ShowModal = mrCancel then exit; - if PasswordDlg.Password.Text<>PasswordDlg.ConfPassword.Text then - ElMessageDlg (LoadStr(sPswNotMatch), mtError, [mbOk], 0) - else - if PasswordDlg.Password.Text='' then - ElMessageDlg (LoadStr(sPswEmpty), mtError, [mbOk], 0) - else break; - until false; - Passw := PasswordDlg.Password.Text; - PasswordDlg.Password.Text := ''; - PasswordDlg.ConfPassword.Text := ''; - FilePassword := Passw; - b := Options.KeepPassword; - Options.KeepPassword := true; - if FileName <> LoadStr(sUntitled) then - SaveFile(FileName); - Options.KeepPassword := b; -end; - -procedure TLogoAppForm.Go2BtnClick(Sender: TObject); -begin - if (SelItem = nil) or (SelItem.Data = nil) then exit; - if PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.Group then exit; - ShellExecute(0,'open',PChar(PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.Location2),nil, nil, SW_SHOWNORMAL); -end; - -procedure TLogoAppForm.miCopyUsernameClick(Sender: TObject); -var C : TClipboard; - Entry : PEntryRec; -begin - if Tree.ItemFocused = nil then exit; - Entry := PEntryRec(TElMTreeItem(Tree.ItemFocused.Data)^.Data); - if Entry.Group then exit; - C := TClipboard.Create; - C.Open; - C.AsText := Entry.UName; - C.Close; - C.Free; -end; - -procedure TLogoAppForm.miCopyAccountClick(Sender: TObject); -var C : TClipboard; - Entry : PEntryRec; -begin - if Tree.ItemFocused = nil then exit; - Entry := PEntryRec(TElMTreeItem(Tree.ItemFocused.Data)^.Data); - if Entry.Group then exit; - C := TClipboard.Create; - C.Open; - C.AsText := Entry.Acct; - C.Close; - C.Free; -end; - -procedure TLogoAppForm.SuggestItemClick(Sender: TObject); -var SHI : TShellExecuteInfo; - saveCursor : TCursor; -begin - saveCursor := Screen.Cursor; - Screen.Cursor := crHourGlass; - try - FillMemory(@SHI, sizeof(shi), 0); - SHI.cbSize := sizeof(SHI); - SHI.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_NOCLOSEPROCESS; - SHI.Wnd := Application.Handle; - SHI.lpVerb := 'open'; - SHI.lpFile := PCHAR('mailto:info@eldos.org?subject=EldoS Keeper suggestion'); - SHI.lpParameters := nil; - SHI.lpDirectory := nil; - ShellExecuteEx(@SHI); - CloseHandle(SHI.hProcess); - finally - Screen.Cursor := saveCursor; - end; { try/finally } -end; - -procedure TLogoAppForm.Timer1Timer(Sender: TObject); - - procedure IterateProc(Item : TElMTreeItem; Index : integer; var ContinueIterate : boolean; - IterateData : pointer); - var Rec : PEntryRec; - begin - Rec := Item.Data; - if Rec <> nil then - begin - if not (Rec.ExpWarned) and Rec.DoExpires and ((Rec.Expires - Rec.WarnDays) < Now) then - begin - Rec.ExpWarned := true; - ElMessageDlg(Format('%s account information expires in %d days', [Rec.Site, Trunc(Rec.Expires) - Trunc(Now)]), mtWarning, [mbOk], 0); - end; - end; - end; - -begin - FMTree.Iterate(@IterateProc, nil); -end; - -procedure TLogoAppForm.TellafriendItemClick(Sender: TObject); -var SHI : TShellExecuteInfo; - saveCursor : TCursor; -begin - saveCursor := Screen.Cursor; - Screen.Cursor := crHourGlass; - try - FillMemory(@SHI, sizeof(shi), 0); - SHI.cbSize := sizeof(SHI); - SHI.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_NOCLOSEPROCESS; - SHI.Wnd := Application.Handle; - SHI.lpVerb := 'open'; - SHI.lpFile := PCHAR('mailto:?subject=Take%20a%20look%20at%20EldoS%20Keeper%20at%20http://www.eldos.org/elkeeper/elkeeper.html'); - SHI.lpParameters := nil; - SHI.lpDirectory := nil; - ShellExecuteEx(@SHI); - CloseHandle(SHI.hProcess); - finally - Screen.Cursor := saveCursor; - end; { try/finally } -end; - -procedure TLogoAppForm.RegisterItemClick(Sender: TObject); -var SHI : TShellExecuteInfo; - saveCursor : TCursor; -begin - saveCursor := Screen.Cursor; - Screen.Cursor := crHourGlass; - try - FillMemory(@SHI, sizeof(shi), 0); - SHI.cbSize := sizeof(SHI); - SHI.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_NOCLOSEPROCESS; - SHI.Wnd := Application.Handle; - SHI.lpVerb := 'open'; - SHI.lpFile := PCHAR('http://www.shareit.com/programs/101908.htm'); - SHI.lpParameters := nil; - SHI.lpDirectory := nil; - ShellExecuteEx(@SHI); - CloseHandle(SHI.hProcess); - finally - Screen.Cursor := saveCursor; - end; { try/finally } -end; - -procedure TLogoAppForm.HomepageItemClick(Sender: TObject); -var SHI : TShellExecuteInfo; - saveCursor : TCursor; -begin - saveCursor := Screen.Cursor; - Screen.Cursor := crHourGlass; - try - FillMemory(@SHI, sizeof(shi), 0); - SHI.cbSize := sizeof(SHI); - SHI.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_NOCLOSEPROCESS; - SHI.Wnd := Application.Handle; - SHI.lpVerb := 'open'; - SHI.lpFile := PCHAR('http://www.eldos.org/elkeeper/elkeeper.html'); - SHI.lpParameters := nil; - SHI.lpDirectory := nil; - ShellExecuteEx(@SHI); - CloseHandle(SHI.hProcess); - finally - Screen.Cursor := saveCursor; - end; { try/finally } -end; - -procedure TLogoAppForm.TreeItemPicDraw(Sender: TObject; - Item: TElTreeItem; var ImageIndex: Integer); -var Entry : PEntryRec; -begin - Entry := PEntryRec(TelMTreeItem(Item.Data).Data); - if Entry = nil then exit; - if Entry^.Group then - begin - if Item.Expanded then - ImageIndex := 1 - else - ImageIndex := 0; - end - else - ImageIndex := 2; -end; - -procedure TLogoAppForm.QuickAccessBtnClick(Sender: TObject); -begin - if not QuickAccessForm.Visible then - QuickAccessForm.Show; - QuickAccessForm.BringToFront; -end; - -procedure TLogoAppForm.WMSysCommand(var Message: TMessage); -begin - if Message.wParam = SC_MINIMIZE then - begin - if QuickAccessForm.Visible then - begin - Tray.Enabled := true; - ShowWindow(Handle, SW_HIDE); - Application.BringToFront; - QuickAccessForm.BringToFront; - end - else - Application.Minimize; - end else - {if wParam = SC_RESTORE then - begin - Tray.Enabled := false; - ShowWindow(Handle,SW_SHOW); - end;} - inherited; -end; - -procedure TLogoAppForm.TreeItemExpand(Sender: TObject; Item: TElTreeItem); -var Entry : PEntryRec; -begin - Entry := PEntryRec(TelMTreeItem(Item.Data).Data); - Entry.Expanded := true; - if Options.CountFolderChanges then - Modified := true - else - Modified2 := true; -end; - -procedure TLogoAppForm.TreeItemCollapse(Sender: TObject; - Item: TElTreeItem); -var Entry : PEntryRec; -begin - Entry := PEntryRec(TelMTreeItem(Item.Data).Data); - Entry.Expanded := false; - if Options.CountFolderChanges then - Modified := true - else - Modified2 := true; -end; - -procedure TLogoAppForm.Exit1Click(Sender: TObject); -begin - DoExit := true; - Close; -end; - -procedure TLogoAppForm.miShowQuickAccessClick(Sender: TObject); -begin - if AMinimized then - begin - MVis := false; - if not QuickAccessForm.Visible then - QuickAccessForm.Show - else - QVis := true; - Application.Restore; - ShowWindow(Handle, SW_HIDE); - end - else - begin - QuickAccessForm.Show; - ShowWindow(QuickAccessForm.Handle, SW_SHOW); - Windows.SetFocus(QuickAccessForm.Handle); - Application.BringToFront; - QuickAccessForm.BringToFront; - end; -end; - -procedure TLogoAppForm.SetFileName(const Value: string); -var View : Pointer; -begin - FFileName := Value; - if hMapping <> 0 then - begin - View := MapViewOfFile(hMapping, FILE_MAP_WRITE, 0, 0, MAX_PATH + 1); - if (View <> nil) then - begin - StrPCopy(PChar(View), Value); - UnmapViewOfFile(View); - end; - end; - FormCaption.Texts[3].Caption := FFileName; -end; - -procedure TLogoAppForm.miCheckCompatClick(Sender: TObject); -begin - ElMessageDlg('This function is not implemented yet', mtInformation, [mbOk], 0); -end; - -procedure TLogoAppForm.SetOpened(Value: Boolean); -begin - if FOpened <> Value then - begin - FOpened := Value; - if Opened then - begin - // Tree.BkColor := clWindow; - Tree.ShowColumns := true; - Tree.Enabled := true; - end - else - begin - //Tree.BkColor := clBtnFace; - Tree.ShowColumns := false; - Tree.Enabled := false; - end; - FormCaption.Texts[2].Visible := FOpened; - FormCaption.Texts[3].Visible := FOpened; - PrintItem.Enabled := FOpened; - PrintBtn.Enabled := FOpened; - end; -end; - -procedure TLogoAppForm.AppEventsIdle(Sender : TObject; var Done: Boolean); -begin - if JustStarted then - begin - JustStarted := false; - if not Opened then - FileNew(Self); - end; -end; - -procedure TLogoAppForm.TreeHeaderColumnDraw(Sender: TCustomElHeader; - Canvas : TCanvas; Section: TElHeaderSection; R: TRect; Pressed: Boolean); -var R1 : TRect; -begin - if Section.Index = hsiAttachment then - begin - CenterRects(8, R.Right - R.Left, 15, R.Bottom - R.Top, R1); - Inc(R1.Left, R.Left); - Inc(R1.Top, R.Top); - ElImgList1.Draw(Canvas, R1.Left, R1.Top, 0); - end; -end; - -procedure TLogoAppForm.TreeItemDraw(Sender: TObject; Item: TElTreeItem; - Surface: TCanvas; R: TRect; SectionIndex: Integer); -var Entry : PEntryRec; - R1 : TRect; -begin - if SectionIndex = hsiAttachment then - begin - Entry := PEntryRec(TelMTreeItem(Item.Data).Data); - if (not Entry.Group) and (Entry.BinDataSize > 0) then - begin - CenterRects(8, R.Right - R.Left, 15, R.Bottom - R.Top, R1); - Inc(R1.Left, R.Left); - Inc(R1.Top, R.Top); - if Item.Selected then - ElImgList1.Draw(Surface, R1.Left, R1.Top, 1) - else - ElImgList1.Draw(Surface, R1.Left, R1.Top, 0); - end; - end; -end; - -procedure TLogoAppForm.miSaveAttachClick(Sender: TObject); -var DataStream : TStream; - fns : integer; - Entry : PEntryRec; -begin - if (SelItem <> nil) and - (TElMTreeItem(SelItem.Data)^.Data <> nil) and - (PEntryRec(TElMTreeItem(SelItem.Data)^.Data)^.BinDataSize > 0) then - begin - Entry := PEntryRec(TElMTreeItem(SelItem.Data)^.Data); - AttachSaveDlg.FileName := StrPas(PChar(Entry.BinData)); - if AttachSaveDlg.Execute then - begin - DataStream := TFileStream.Create(AttachSaveDlg.FileName, fmCreate or fmShareExclusive); - try - fns := StrLen(PChar(Entry.BinData)) + 1; - DataStream.WriteBuffer((PChar(Entry.BinData) + fns)^, Entry.BinDataSize - fns); - finally - DataStream.Free; - end; - end; - end; -end; - -procedure TLogoAppForm.miExportClick(Sender: TObject); -var OutStream : TStream; - AList : TStrings; - - procedure SaveItem(Item:TElTreeItem; Index: integer; var ContinueIterate:boolean; - IterateData:pointer; Tree:TCustomElTree); - var Entry : PEntryRec; - L, L1 : TStringList; - gap : string; - i : integer; - begin - L := TStringList(IterateData); - Entry := PEntryRec(TElMTreeItem(Item.Data).Data); - SetLength(gap, Item.Level*10); - FillChar(gap[1], Length(gap), 32); - if Entry.Group - then L.Add(gap + 'Group name: '+ Entry.Site) - else L.Add(gap + 'Site/Program name: '+ Entry.Site); - if not Entry.Group then - begin - if Entry.Location <> '' then L.Add(gap + 'Location/address: ' + Entry.Location); - if Entry.UName <> '' then L.Add(gap + 'User name: ' + Entry.UName); - if Entry.Acct <> '' then L.Add(gap + 'Account #: '+ Entry.Acct); - if Entry.Pswd <> '' then L.Add(gap + 'Password: '+ Entry.Pswd); - if pos(#13, Entry.Info)>0 then - begin - L1 := TStringList.Create; - try - L1.Text:=Entry.Info; - L.Add(gap + 'Additional info: '+ L1[0]); - for i := 1 to L1.Count -1 do - begin - L.Add(Gap + ' '+ L1[i]); - end; - finally - L1.Free; - end; - end else - begin - if Entry.Info <> '' then - L.Add(gap + 'Additional info: '+ Entry.Info); - end; - end; - L.Add(''); - end; - -begin - if ExportDialog.Execute then - begin - if ExportDialog.FilterIndex = 1 then - begin - try - OutStream := TFileStream.Create(ExportDialog.FileName, fmCreate or fmShareDenyWrite); - try - AList := TStringList.Create; - try - Tree.Items.Iterate(false, true, @SaveItem, AList); - WriteTextToStream(OutStream, AList.Text); - finally - AList.Free; - end; - finally - OutStream.Free; - end; - except - on E : EInOutError do - begin - ElMessageDlg(Format('There was an error %d while writing %s', [E.ErrorCode, ExtractFileName(FFileName)]), mtError, [mbOk], 0); - end; - on E : EStreamError do - begin - ElMessageDlg(Format('There was an error while writing %s: %s', [ExtractFileName(FFileName), E.Message]), mtError, [mbOk], 0); - end; - on E : Exception do - Application.ShowException(E); - end; - - end; - end; -end; - -procedure TLogoAppForm.TreeSortEnd(Sender: TObject); -begin - if QuickAccessForm <> nil then - QuickAccessForm.UpdateTree(FMTree); -end; - -procedure TLogoAppForm.FormKeyDown(Sender: TObject; var Key: Word; - Shift: TShiftState); -begin - if (Key = VK_ESCAPE) and (Shift = []) and Options.MinimizeOnEsc then - Application.Minimize; -end; - -procedure TLogoAppForm.OptionsItemClick(Sender: TObject); -begin - with TOptionsForm.Create(Self) do - begin - SetData; - if ShowModal = mrOk then - GetData; - Free; - end; -end; - -procedure TLogoAppForm.TreeHeaderLookup(Sender: TObject; - Section: TElHeaderSection; var Text: String); - -type - TSRec = record - Text: PChar; - ColNum: integer; - end; - PSRec = ^TSRec; - -var - SRec: TSrec; - TI: TElTreeItem; - - function IntCompare(Item: TElTreeItem; SearchDetails: Pointer): boolean; - var - i: integer; - AT: string; - begin - i := PSRec(SearchDetails).ColNum; - if LogoAppForm.Tree.MainTreeColumn = i then AT := AnsiUpperCase(Item.Text) else - begin - if Item.ColumnText.Count <= i then - AT := '' - else - begin - if I > LogoAppForm.Tree.MainTreeColumn then - AT := AnsiUpperCase(Item.ColumnText[i - 1]) - else - AT := AnsiUpperCase(Item.ColumnText[i]); - end; - end; - result := Pos(AnsiUpperCase(StrPas(PSRec(SearchDetails).Text)), AT) = 1; - end; - -begin - SRec.Text := PChar(Text); - SRec.ColNum := Section.Index; - TI := Tree.Items.LookForItemEx(Tree.ItemFocused, Section.Index, true, false, false, @SRec, @IntCompare); - if TI <> nil then - begin - Tree.EnsureVisible(TI); - TI.FullyExpanded := true; - Tree.ItemFocused := TI; - end; -end; - -procedure TLogoAppForm.ColumnsItemClick(Sender: TObject); -begin - Tree.HeaderSections.Owner.Setup; -end; - -procedure TLogoAppForm.SetModified2(Value: Boolean); -begin - if FModified2 <> Value then - begin - FModified2 := Value; - SaveBtn.Enabled := Modified or Value; - FileSaveItem.Enabled := Modified or Value; - end; -end; - - -procedure TLogoAppForm.TreeScroll(Sender: TObject; - ScrollBarKind: TScrollBarKind; ScrollCode: Integer); -begin - if ScrollBarKind = sbVertical then - QuickAccessForm.Tree.TopIndex := Tree.TopIndex; -end; - -end. diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/LogoStrs.pas b/sdk/components/ElPack/BCBDemos/ElKeeper/LogoStrs.pas deleted file mode 100644 index 8e7373b280c..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/LogoStrs.pas +++ /dev/null @@ -1,20 +0,0 @@ -unit LogoStrs; - -interface - -const - { string contants in strings.rc } - sUntitled = 1; - sOverwrite = 2; - sSaveOnCLose = 3; - sFolderName = 4; - sDemoWarn = 5; - sFailSave = 6; - sFailLoad = 7; - sConfDelete = 8; - sPswNotMatch = 9; - sPswEmpty = 10; - -implementation - -end. diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/OLEDROP.PAS b/sdk/components/ElPack/BCBDemos/ElKeeper/OLEDROP.PAS deleted file mode 100644 index d153037bd1b..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/OLEDROP.PAS +++ /dev/null @@ -1,291 +0,0 @@ -unit OLEDrop; -interface -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, activex; - -type - TOleDragObject = class(TDragObject) - private - dataObj : IDataObject; - Fkeys : longint; - FDown : boolean; - FString : string; - FList : TStringlist; - function GetFileList:TStringList; - function GetString:string; - public - constructor create; - destructor destroy; override; - function DragContent : integer; - property Keys : longint read Fkeys; - property FileList : TStringList read GetFileList; - property StringData : string read GetString; - end; - -type - IWCDropTarget = class(TInterfacedObject, IDropTarget) - private - FOwner : TWinControl; - Fhandle : HWND; - FdragObj : ToleDragObject; - FTarget : Pointer; - public - { IDropTarget } - function DragEnter(const dataObj: IDataObject; grfKeyState: Longint; - pt: TPoint; var dwEffect: Longint): HResult; stdcall; - function DragOver(grfKeyState: Longint; pt: TPoint; - var dwEffect: Longint): HResult; stdcall; - function DragLeave: HResult; stdcall; - function Drop(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; - var dwEffect: Longint): HResult; stdcall; - constructor create(aOwner:TWinControl); - destructor destroy; override; - end; - -implementation - -Type - PDropFiles = ^TDropFiles; - TDropFiles = record - pfiles : DWORD; - pt : TPOINT; - fNC : BOOL; - fWide : BOOL; - end; - -{------------------------------------------------------------------------------} -// Copy of the control unit DragMessage function - -function DragMessage(Handle: HWND; Msg: TDragMessage; Source: TDragObject; Target: Pointer; const Pos: TPoint): Longint; -var DragRec: TDragRec; -begin - Result := 0; - if Handle <> 0 then - begin - DragRec.Pos := Pos; - DragRec.Target := Target; - DragRec.Source := Source; - Result := SendMessage(Handle, CM_DRAG, Longint(Msg), Longint(@DragRec)); - end; -end; - -{------------------------------------------------------------------------------} -constructor TOleDragObject.create; -begin - Inherited create; - FList := TStringList.Create; -end; - -destructor TOleDragObject.destroy; -begin - FList.Free; - Inherited destroy; -end; - -function TOleDragObject.DragContent : integer; -var fmt : TFormatEtc; - efe : iEnumFormatEtc; - fmtCount: LongInt; - -begin - if (FDown) or (Not assigned(dataobj)) then - begin - result:=-1; - exit; - end; - fillchar(fmt,sizeof(fmt),0); - DataObj.EnumFormatEtc(datadir_get,efe); - EFE.Reset; - repeat - fmtCount:=0; - efe.Next(1,fmt,@fmtCount); - until (fmt.cfFormat=CF_HDROP) or (fmtCount=0); - if (fmt.cfFormat=CF_HDROP) then - begin - result:=fmt.cfFormat; - exit; - end; - EFE.Reset; - repeat - fmtCount:=0; - efe.Next(1,fmt,@fmtCount); - until (fmt.cfFormat=CF_TEXT) or (fmtCount=0); - if (fmt.cfFormat=CF_TEXT) then - begin - result:=fmt.cfFormat; - exit; - end; - result:=-1; -end; - -function TOleDragObject.GetString; - var mdm: TStgMedium; - pz : pchar; - fmt : TFormatEtc; - efe : iEnumFormatEtc; - fmtCount: LongInt; - -begin - Result := FString; - if (FDown) or (Not assigned(dataobj)) then exit; - result:=''; - fillchar(fmt,sizeof(fmt),0); - DataObj.EnumFormatEtc(datadir_get,efe); - EFE.Reset; - repeat - fmtCount:=0; - efe.Next(1,fmt,@fmtCount); - until (fmt.cfFormat=CF_TEXT) or (fmtCount=0); - if fmt.cfFormat<>CF_TEXT then - begin - result:=''; - exit; - end; - fmt.tymed := TYMED_HGLOBAL; - fmt.lindex := -1; - if dataobj.GetData(fmt,mdm)<>S_OK then result:='' else - try - if (fmt.cfFormat=CF_TEXT) and (mdm.tymed = TYMED_HGLOBAL) then - begin - pz := GlobalLock(mdm.HGlobal); - FString:=StrPas(pz); - Result:=FString; - GlobalUnlock(mdm.HGlobal); - end; - finally - if Assigned(mdm.unkForRelease) then - Iunknown(mdm.unkForRelease)._Release; - FDown := TRUE; - end; -end; - -function TOleDragObject.GetFileList; -var mdm:TStgMedium; - pz : pchar; - pdf : PDropFiles; - fmt : TFormatEtc; - s : string; - -begin - Result := FList; - if (FDown) or (Not assigned(DataObj)) then exit; - FList.Clear; - FillChar(fmt,sizeof(fmt),0); - fmt.cfFormat := CF_HDROP; - fmt.tymed := TYMED_HGLOBAL; - fmt.lindex := -1; - if dataobj.GetData(fmt,mdm)<>S_OK then - raise Exception.Create('IDataObject.GetData failed'); - try - if mdm.tymed = TYMED_HGLOBAL then - begin - pdf := GlobalLock(mdm.HGlobal); - pz := pchar(pdf); - Inc(pz, pdf^.pFiles); - if not (pdf.fWide) then - while (pz[0]<>#0) do - begin - FList.Add(string(pz)); - Inc(pz,1+strlen(pz)); - end - else - while (pz[0]<>#0) do - begin - s:=WideCharToString(PWideChar(pz)); - FList.Add(s); - Inc(pz,length(s)*2+2); - end; - GlobalUnlock(mdm.HGlobal); - end; - finally - if Assigned(mdm.unkForRelease) then - IUnknown(mdm.unkForRelease)._Release; - FDown := TRUE; - end; -end; - -{------------------------------------------------------------------------------} - -constructor IWCDropTarget.create(aOwner:TWinControl); -var rslt:HResult; obj:IDropTarget; -begin - Inherited create; - oleInitialize(nil); - FOwner := AOwner; - FHandle := aOwner.Handle; - _AddRef; - if not GetInterface(Iunknown,obj) then - raise Exception.Create('GetInterface failed'); - - Rslt := RegisterDragDrop(FHandle,obj as IDroptarget); - case Rslt of - S_OK : ; - DRAGDROP_E_INVALIDHWND : raise Exception.Create('RegisterDragDrop failed, invalide hwnd '); - DRAGDROP_E_ALREADYREGISTERED : raise Exception.Create('RegisterDragDrop failed, already registered'); - E_OUTOFMEMORY : raise Exception.Create('RegisterDragDrop failed, out of memory'); - E_INVALIDARG : raise Exception.Create('RegisterDragDrop failed, invalid arg'); - CO_E_NOTINITIALIZED : raise Exception.Create('RegisterDragDrop failed, coInitialize had not been called'); - else raise Exception.Create('RegisterDragDrop failed, unknown error code '+IntToStr(rslt and $7FFFFFFF)); - end; -end; - -destructor IWCDropTarget.destroy; -begin - RevokeDragDrop(FHandle); - oleUnInitialize; - Inherited destroy; -end; - -function IWCDropTarget.DragEnter(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; -begin - // TDragState = (dsDragEnter, dsDragLeave, dsDragMove); - // TDragMessage = (dmDragEnter, dmDragLeave, dmDragMove, dmDragDrop, dmDragCancel,dmFindTarget); - - FDragobj := ToleDragObject.Create; Fdragobj.dataObj := dataObj; Fdragobj.Fkeys := grfKeyState; - FTarget := pointer(DragMessage(FHandle,dmFindTarget,FDragObj,NIL,pt)); - - if DragMessage(FHandle,dmDragEnter,Fdragobj,FTarget,pt)<>0 - then dwEffect := DROPEFFECT_LINK - else dwEffect := DROPEFFECT_NONE; - - Result := S_OK; -end; - -function IWCDropTarget.DragOver(grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; -begin - Fdragobj.Fkeys := grfKeyState; - FTarget := pointer(DragMessage(FHandle,dmFindTarget,FDragObj,NIL,pt)); - if DragMessage(FHandle,dmDragMove,Fdragobj,Ftarget,pt)<>0 - then dwEffect := DROPEFFECT_LINK - else dwEffect := DROPEFFECT_NONE; - Result := S_OK; -end; - -function IWCDropTarget.DragLeave: HResult; -var pt:TPoint; -begin - DragMessage(FHandle,dmDragCancel,Fdragobj,FTarget,pt); - if Assigned(FDragObj) then - begin - Fdragobj.Free; - Fdragobj := nil; - end; - Result := S_OK; -end; - -function IWCDropTarget.Drop(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; -begin - Fdragobj.Fkeys := grfKeyState; - if DragMessage(FHandle,dmDragDrop,Fdragobj,FTarget,pt)<>0 - then dwEffect := DROPEFFECT_LINK - else dwEffect := DROPEFFECT_NONE; - if Assigned(FDragObj) then - begin - Fdragobj.Free; - Fdragobj := nil; - end; - Result := S_OK; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/PswRec.res b/sdk/components/ElPack/BCBDemos/ElKeeper/PswRec.res deleted file mode 100644 index 6dffa82c3c932ae889f46a9d5a8fc83870ccd116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmah|F>c#H5FCaA=)wqHxJhM}Df0sBnX(-4cBp4U?b?1`eE2N5r4dLoRR^~Px3PIVc(@kO@aRfaL zVka6YWMW7hB!AcNa5O<0lA{STVA5JcYtaClot0fWY#}-gDxJd`tWHB204H&hSiODd z)LbDiiq`3gN`vxb@jD*$wk)%GS?f{1OuOu6U*Cq(SspGpno)X()EOqTlL+LF?M-wxj6j7<4Jj zuES-emmD{ucl(cdcxWFgJA1rQMkw9)#+ch}X!6E4IsXtcYk=ur;DUz@2L{ZA{#&Fs z5cc$u-Xr4^BmXkrG>qHWH|8-g<|$;nV4R)<_(B@<5kK%1SNKVO!!_dp$M-^RgNG=Z L{E}NCx5&dYYy}QW diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/frmFolderProp.dfm b/sdk/components/ElPack/BCBDemos/ElKeeper/frmFolderProp.dfm deleted file mode 100644 index 5bee280db14f814aa3a74d895168c0ac06bc8bb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1328 zcmcIk&5qMB5O&fwKTW$Wi$LPmCqT=UTbnj&we2Qq0u>Sn++^BB>)Mgyc6WI!#2fG; zyu@mcU?*u;zyS$~Lt@Xwp839SCiA0>BF~?XC(B^z2chRL7wDq@yoFE{co+T1V4hJAQIve5mddu0KCed9EW@o(>u7d4lgtUev z+fviQq~hKlsZ0J|05^^G;fhh{EZDvPCEuQdg^Xy9*FcQ&T?4U7ApHu6{`QEYdlLP8 zLS@9krYvMB{c9)UQi~jOSpXZMp5!=84w%M}Op;7=!c2gYO&Jy4D$Agz`xPD2JUdoA zOQ3K}SQn}xEV(XKT@AUBI@xj=F(KFvH9dlbZAEzPt4`4oLT5^1mhbb?ULK*gtALP^ zpjGO)Bm+iW?U9$(D(h_8 zv0~!k7@VNgyL4NBux|O6C&o|zjj>tt|CO@#zbNbeOn|q zjAnGh7O-Q=)->f=$pN+EIIlcyxr8xigpA~*(UcPz@=+(;k+L++ly5hM_!<(q`w1Db Boo4_5 diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/frmFolderProp.pas b/sdk/components/ElPack/BCBDemos/ElKeeper/frmFolderProp.pas deleted file mode 100644 index 10cb6cae727..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/frmFolderProp.pas +++ /dev/null @@ -1,31 +0,0 @@ -unit frmFolderProp; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, ElBtnCtl, ElPopBtn, ElACtrls, ElFrmPers, ElXPThemedControl, - ExtCtrls, ElPanel; - -type - TFolderPropsForm = class(TForm) - FormPers: TElFormPersist; - ElPanel1: TElPanel; - Label1: TLabel; - SiteNameEdit: TElAdvancedEdit; - CancelBtn: TElPopupButton; - OKBtn: TElPopupButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - FolderPropsForm: TFolderPropsForm; - -implementation - -{$R *.DFM} - -end. diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/frmPassword.dfm b/sdk/components/ElPack/BCBDemos/ElKeeper/frmPassword.dfm deleted file mode 100644 index fb0f450035c7c264309d894b23ee8a299b4278be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1692 zcmd5+%Wl&^6rDJ&ABoeK)CFSG9TE%FvZK2sj%k#%iE2ZIghVIyO=5L2V~xj6%LnxP z*daEs<^x#6jK@w(5#k{svGI8B+&Od4xsR_66pq_La5g&iyy0`Szjb3GY4Z2oaE!BT z$$0FMS@X{S+7PCqj%)RhrS-#Fvm;%A2jZH5Wlu6M!Gz7ME>1H(2ff%h-iZ*+S_g-42`>+{usacA-)Wbm)rqg9~ zTHtDe8unQU`|?NFZFM2xi=P5-DCt<5r=45~M%PD!j-VR+Q4#Y+2|lR6A2j+4JcB-s z;mSZ;9>+@$rZ^|U=Q7{6RqmYTF^e%dg-jk9wVhy&WvNK?BUyJ+)45oC|LG&zT-o){ z+WFf{w7oKV7p3{=^(*A4Qt(-nXZA`sV>GZsJQ=C_m#HrDW;qd&5BWF(*)&SR!fYdS zkFL|jGy>(TDKGzyvZ-OdXKef{#^r0btZTnwy&m@BMA+2;xLZ39%jWois{HP{m7kgc zX6^CqLk2<`%2j1mx!r{u{0UqgA+#;)&nH+WhziaK0lt0TaImW!inK#4r-byH$l+w0 z?MNh-V7ne{(m~$<=IAKq diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/frmPassword.pas b/sdk/components/ElPack/BCBDemos/ElKeeper/frmPassword.pas deleted file mode 100644 index 0c915979b76..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/frmPassword.pas +++ /dev/null @@ -1,40 +0,0 @@ -unit frmPassword; - -interface - -uses Windows, SysUtils, Classes, Forms, Controls, StdCtrls, - Buttons, ElACtrls, ElBtnCtl, ElPopBtn, ElFlatCtl, ElXPThemedControl, - ExtCtrls, ElPanel; - -type - TPasswordDlg = class(TForm) - ElFlatController1: TElFlatController; - ElFlatController2: TElFlatController; - ElPanel1: TElPanel; - Label1: TLabel; - ConfLabel: TLabel; - OKBtn: TElPopupButton; - CancelBtn: TElPopupButton; - Password: TEdit; - ConfPassword: TEdit; - procedure FormShow(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - PasswordDlg: TPasswordDlg; - -implementation - -{$R *.DFM} - -procedure TPasswordDlg.FormShow(Sender: TObject); -begin - ActiveControl := Password; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/frmPswGen.dfm b/sdk/components/ElPack/BCBDemos/ElKeeper/frmPswGen.dfm deleted file mode 100644 index eaead62b46bedbaa03f0a92268b5b63d5e97d04c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3971 zcmd5<&2Aev5T;f?`y<&_0=PhK+rJzN)o|KVa*8BNu@Na!EVXHiA`PV-OAFJ>#V%!8 zx%CZt>`N4Vgg!wJeS{wS06~uFklY_Dsgk%r0PCP7x!jrgW`;8#UpZtv96fo^dDI;o z_sM=e*de&m-LH;^@$vx#T^^k|`LNW36H(kP6vsR){za;Xz``~U1Y8Kis0ya*UQ#)e9}ucwwvABYFmv zt^UXz(I9q55cwzidu45vSVJEB(oC}+@&h=b3np-B5U^Ek5VRSO;qd~ZmANfFlFzq> z{spjj2+>h6og2>_X+WZSi&*0h8`1!nl|1h#2O32B&miR#XeIN2(`4bC_TU_tLAG0T zdOC~vBJjqm5X{#aDX{sxAe)S>gS?-Be7Xr_{o}^{#;1+X8lN|wHg4Z;e38Q~UU#@wdl6$z zSVufe5Z~Q|xT3$xah9$hPE$5le|leP4AorQ}8;TFC6_|4t14sRh9Cz z6N=5W(i*#^Lq8Ce{f_KGZr(r|n~G<{okIlfRqJ!TITijnXwIYBvw1QRvILu*fKC{A zmM)lfpI-D-!z{i+Mv&IuGSS6p6#9VzsQ1XJ2Ka2fHQ!0Yyn9tk%imJA0Hbc9A!;b? z==*_QF4&4loMFkt-c5Dywvo+5AlHn-c8^9g$QK+9D@RfwWLpv)9%4&eVDk!W%^0x@ zXegRxWR3V?3gwn_bVj9Y4=xN+KZxiu;a=Sc37d6uG^a@FP|hJXN#r|oQF`(6CE3Z= z^`P|Z`8m0fEgqaE%ZERHPcAjTtaVw)Y$XGQ9K<_HUY4iZ8MF6`lm`#9uyAGDpD90j@35FjknC!odz2kRjBME` ze5hy{gNHeychs;fPL9Hv#OU?(Y|FADNs3C(;vYIlS9e533tIPs@uB>XXv=+3etSK~ z0waOT3k%*)Vm}sEIyOgm`@)lF?)LbMH^WfA*z2&Pz{k4gE<#s}S<^g0v;a z5f32}KE%XC*4pPN+Uznv3}w}m#MZd4a*GsdaxYR_sSunR)(R8t!Uz6j2~@mOP6`G2 zLh(`XFmLha$OYB; 0 then - begin - Randomize; - SetLength(Pssw, LengthSpin.Value); - for i := 1 to LengthSpin.Value do - begin - j := Round(Random(arrlen))+1; - Pssw[i] := SA[j]; - end; - PswEdit.Text := Pssw; - end; -end; - -procedure TPswGenForm.OKBtnClick(Sender: TObject); -begin - DoAccept := true; -end; - -procedure TPswGenForm.FormCloseQuery(Sender: TObject; - var CanClose: Boolean); -begin - if DoAccept then - begin - DoAccept := false; - CanClose := MessageDlg('Do you want to accept the generated password?', mtConfirmation, [mbOk, mbCancel], 0) = mrOk; - end; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/frmQuickAccess.dfm b/sdk/components/ElPack/BCBDemos/ElKeeper/frmQuickAccess.dfm deleted file mode 100644 index 7883fa3954f77f2c34a9e2cb8f8e5a8284a9b295..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5318 zcmds5%a0>R885eI+}(bSmrc+n2eODu5NNbvkq{s=YkS5!Cga$d_9lyjl$6^wc5B*Q zO?P=_97Xfk7fS?)L+<$pkPv?XBMzK625#=a_^R4eyH6kt}_aSjU{ru95=b>1=QX)u1D>d zCE@Za6*O-ULY~d%b9~6xq5+XIK1Wq6=`oiT_FAetQQM^y>8i|qPZLl5Y8u<;!WAPR%su4o_ zpwb1~tqac@QP}X38svDQ=ZqPjz#=MbJ_%VffDuP%%|aUn>O>8r)YJnUM;oIVXYzAw$48D(q4cQ+W_ig;ldvc1WQ*)6^21Y$y6M@$u$_1up84)<88<4LJBxeewG^d;$HQh+j?7$5sIP{2^H z$o@1Wp5JwB$=b8|F(40r*Oz|8-qwq9Zqg#efLH5MkGW>c+v2JgMUGF;IXCU&GvAi4 zx&DYM`ZZFn!}Nv$pLhc$f?|Itl%6yl*NuIcPF*G8qS6f+KPCY)NUpa*`^?R$@-4Nh zW+;zpL>^VU9WSbtPNR-_FJyrS?fOvxGVwym6i9`f$M(H6wp%f_?_9=aAbNpx@ukRa zr;*){k-c>pnc1abxQm$jrP#io!j?UZV~6(LE6{Cln@Z17QWsHCehimg!67?EbitsV`AOc)5&T?%{Bub*E>0SQU(u@npG z@)qxWRkm18ROj*@M_-veCi;A7kJ;ZPX7GQht4pxQ+F*xzHXFz^shDWAOdnI$t|bo1fb z?Fxbt)x1E^nPR?BigNIpWhjwM-EjB_k++r3we&chxs>F24#F&ZrR{iax+eqpGO8+9 zxsRjXRq&tT;8%_p>8OKTSTLB+;rInBppqO>bP0qPhi~V8n}=}OP1o^#WJyY=vnMJ+ z$R3ko7fv203rQr)FUT06o+7rSl2e(8>TyCE*~3Uhs5f&_)W|=9O#X!=9Ut-x3X`d~ z>kAJEDb@ja6YovD6}%agS$xUDQ$iNW$Ap}q`33;Lo*!U>EN4}ez;tq;+S;r-KbTcN zQT-VSl+{@^6GK5Sfc3b8%&HIO2PmJa@mkdJD>dUN={O=Jo6JGiQ8EYh=U{uNrh-6{ zM*C=f@Nia@pjkCSj&T`4$b*xE^dcA-EpoaPAVBu`1RGVPKUNF;QkAk!$P>9E@5 zpRdoqn4ir5f%h--qxo;<+4+y>`k#OBXz39rZ~XA@WM$<~hbw>h z?0Dt#6>wr7sN~|83{l+=#P;$Z%<$ZyBlGjCtnYsIZ_lyHr 0; - AccountSource.Enabled := Length(AccountText.Text) > 0; - LocationSource.Enabled := Length(LocationText.Text) > 0; - PasswordSource.Enabled := Length(PasswordText.Text) > 0; - - UsernameSource.Invalidate; - AccountSource.Invalidate; - LocationSource.Invalidate; - PasswordSource.Invalidate; -end; - -procedure TQuickAccessForm.UpdateTree(MTree : TElMTree); - - function DataPresent(Data : Pointer; Branch : TElMTreeItem) : TElMTreeItem; - var i : integer; - begin - result := nil; - for i := 0 to Branch.List.Count - 1 do - begin - if TElMTreeItem(Branch.List[i]).Data = Data then - begin - result := TElMTreeItem(Branch.List[i]); - exit; - end; - end; - end; - - procedure ClearItems(AnItem : TElTreeItem; MTreeItem : TElMTreeItem); - var i : integer; - begin - i := 0; - while i < AnItem.Count do - begin - if (DataPresent(AnItem.Children[i].Data, MTreeItem) = nil) then - Tree.Items.DeleteItem(AnItem.Children[i]) - else - inc(i); - end; - end; - - procedure UpdateItems(AnItem : TElTreeItem; MTreeItem : TElMTreeItem); - var i, - j : integer; - P : TElMTreeItem; - T : TElTreeItem; - b : boolean; - begin - i := 0; - while i < MTreeItem.List.Count do - begin - b := false; - T := nil; - P := TElMTreeItem(MTreeItem.List[i]).Data; - for j := 0 to AnItem.Count - 1 do - begin - T := AnItem.Children[j]; - if T.Data = P then - begin - b := true; - break; - end; - end; - if not b then - begin - T := Tree.Items.AddItem(AnItem); - AnItem.Expand(false); - T.ImageIndex := -1; - T.StateImageIndex := -1; - T.Data := P; - end; - T.Text := PEntryRec(P).Site; - UpdateItems(T, MTreeItem.List[i]); - inc(i); - end; - end; - - -var P : TElMTreeItem; - T : TElTreeItem; - i, - j : integer; - b : boolean; -begin - if QuickAccessForm = nil then - exit; - Tree.Items.BeginUpdate; - try - i := 0; - while i < Tree.Items.RootCount do - begin - P := DataPresent(Tree.Items.RootItem[i].Data, MTree.Root); - if (P = nil) then - Tree.Items.DeleteItem(Tree.Items.RootItem[i]) - else - begin - ClearItems(Tree.Items.RootItem[i], P); - inc(i); - end; - end; - for i := 0 to MTree.Root.List.Count - 1 do - begin - b := false; - T := nil; - P := TElMTreeItem(MTree.Root.List[i]).Data; - for j := 0 to Tree.Items.RootCount - 1 do - begin - T := Tree.Items.RootItem[j]; - if T.Data = P then - begin - b := true; - break; - end; - end; - if not b then - begin - T := Tree.Items.AddItem(nil); - T.ImageIndex := -1; - T.StateImageIndex := -1; - T.Data := P; - end; - T.Text := PEntryRec(P).Site; - T.ColumnText.Clear; - UpdateItems(T, MTree.Root.List[i]); - end; - finally - Tree.Items.EndUpdate; - end; - Tree.Sort(true); - UpdateImages; -end; - -procedure TQuickAccessForm.TreeItemFocused(Sender: TObject); -var Entry : PEntryRec; -begin - if (QuickAccessForm = nil) or (csDestroying in ComponentState) then - exit; - if (Tree.ItemFocused = nil) or (PEntryRec(Tree.ItemFocused.Data).Group) then - begin - UserNameText.Text := ''; - AccountText.Text := ''; - PasswordText.Text := ''; - LocationText.Text := ''; - end - else - begin - Entry := PEntryRec(Tree.ItemFocused.Data); - UserNameText.Text := Entry.UName; - AccountText.Text := Entry.Acct; - PasswordText.Text := Entry.Pswd; - LocationText.Text := Entry.Location ; - end; - UpdateImages; -end; - -procedure TQuickAccessForm.TreeItemPicDraw(Sender: TObject; - Item: TElTreeItem; var ImageIndex: Integer); -begin - if PEntryRec(Item.Data).Group then - begin - if Item.Expanded then - ImageIndex := 1 - else - ImageIndex := 0; - end - else - ImageIndex := 2; -end; - -procedure TQuickAccessForm.TreeDblClick(Sender: TObject); -var Item : TElTreeItem; - P : TPoint; -begin - GetCursorPos(P); - P := Tree.ScreenToClient(P); - Item := Tree.GetItemAtY(P.Y); - if Item <> nil then - begin - //Item := LogoAppForm.Tree.Items.LookForItem(nil, ); - if Item <> nil then - LogoAppForm.Tree.EnsureVisible(Item); - end; -end; - -procedure TQuickAccessForm.FormDestroy(Sender: TObject); -begin - QuickAccessForm := nil; - FEnBmp.Free; - FDisBmp.Free; -end; - -procedure TQuickAccessForm.UserNameSourceOleStartDrag(Sender: TObject; - var DragData: Pointer; var DragDataType, DragDataSize: Integer); -var P : PChar; - S : String; - Edt : TElAdvancedEdit; -begin - DragDataType := CF_TEXT; - Edt := nil; - if Sender = UserNameSource then - begin - Edt := UserNameText; - end - else - if Sender = AccountSource then - begin - Edt := AccountText; - end - else - if Sender = PasswordSource then - begin - Edt := PasswordText; - end - else - if Sender = LocationSource then - begin - Edt := LocationText; - end; - if Edt = nil then exit; - if Edt.SelLength > 0 then - S := Copy(Edt.Text, Edt.SelStart, Edt.SelLength) - else - S := Edt.Text; - if Length(S) = 0 then - begin - DragData := nil; - exit; - end; - GetMem(P, Length(S) + 1); - StrPCopy(P, S); - DragData := P; - DragDataSize := Length(S) + 1; -end; - -procedure TQuickAccessForm.UserNameSourceOleSourceDrag(Sender: TObject; - DragType: TDragType; shift: TShiftState; var ContinueDrop: Boolean); -begin - ContinueDrop := true; -end; - -procedure TQuickAccessForm.UserNameSourceTargetDrop(Sender: TObject; - Source: TOleDragObject; Shift: TShiftState; X, Y: Integer; - var DragType: TDragType); -begin - DragType := dtCopy; -end; - -procedure TQuickAccessForm.FormClose(Sender: TObject; - var Action: TCloseAction); -begin - if (LogoAppForm <> nil) and LogoAppForm.HandleAllocated and not IsWindowVisible(LogoAppForm.Handle) then - begin - Hide; - LogoAppForm.QVis := false; - Application.Minimize; - LogoAppForm.MVis := true; - LogoAppForm.QVis := false; - end; -end; - -procedure TQuickAccessForm.FormCreate(Sender: TObject); -begin - FEnBmp := TBitmap.Create; - FDisBmp := TBitmap.Create; - FEnBmp.Width := ImgList.Width; - FEnBmp.Height := ImgList.Height; - FDisBmp.Width := ImgList.Width; - FDisBmp.Height := ImgList.Height; - - ImgList.Draw(FEnBmp.Canvas, 0, 0, 0); - ImgList.Draw(FDisBmp.Canvas, 0, 0, 1); -end; - -procedure TQuickAccessForm.UserNameSourcePaint(Sender: TObject); -var ABitmap : TBitmap; - ACanvas : TCanvas; -begin - if Sender = UserNameSource then - begin - if Length(UserNameText.Text) > 0 then - ABitmap := FEnBmp - else - ABitmap := FDisBmp; - ACanvas := UsernameSource.Canvas; - end - else - if Sender = PasswordSource then - begin - if Length(PasswordText.Text) > 0 then - ABitmap := FEnBmp - else - ABitmap := FDisBmp; - ACanvas := PasswordSource.Canvas; - end - else - if Sender = LocationSource then - begin - if Length(LocationText.Text) > 0 then - ABitmap := FEnBmp - else - ABitmap := FDisBmp; - ACanvas := LocationSource.Canvas; - end - else - if Sender = AccountSource then - begin - if Length(AccountText.Text) > 0 then - ABitmap := FEnBmp - else - ABitmap := FDisBmp; - ACanvas := AccountSource.Canvas; - end - else - exit; - - DrawTransparentBitmapEx(ACanvas.Handle, ABitmap, 0, 0, - Rect(0, 0, ABitmap.Width - 1, ABitmap.Height - 1), ABitmap.Canvas.Pixels[0, ABitmap.Height - 1]); -end; - -procedure TQuickAccessForm.FormCaptionButtonClick(Sender: TObject; - Button: TElCaptionButton); -begin - FormPersist.TopMost := Button.Down; -end; - -procedure TQuickAccessForm.TreeCompareItems(Sender: TObject; Item1, - Item2: TElTreeItem; var res: Integer); -var i1, - i2 : integer; - -begin - i1 := LogoAppForm.GetDataIndex(Item1.Data); - i2 := LogoAppForm.GetDataIndex(Item2.Data); - if i2 > i1 then - res := -1 - else - if i2 < i1 then - res := 1 - else - res := 0; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/frmRecProp.dfm b/sdk/components/ElPack/BCBDemos/ElKeeper/frmRecProp.dfm deleted file mode 100644 index 40e9f7bb0000ea920347699f9919fa20551efe7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10667 zcmeGiOK%&;dAX$aMT(+i3AJwo0<=jEitY4~_+&mU)uKs=wABD@;~{rQF0|a)?hYj} z?V-mWTQr9rd(2O0(Q6L{dMSGAtp$20&`S>ua&*3V?1K;MVcE5VCPu{Fnc4Xs^S!@$ zW+}bHMy+$$?sS{&!3Y?5G7NWbI`@Q`MIoyqoypZ!)Q zUnPN!gD#!9SU37%-9auH={4k2hj`j1dfo?Ya~lpFFAUrx$Fs?451-LIpAeg> zpPT&c5t?9az11yukr$S`IBh#VQ&cj{-9F?B2}BdZ9m}HO7yoE$B08rhw@3W)8 zhQ;`|KLHd%!(h)n)DO)yAzeDAA%BNIlAXX!)Zh1Pe5NXSc#Ka}!_)_UvT2Fkc7)8i z0=6~3iVK=HaI5YV-zZWh6}IVF~&4n86S|oa9$Q?o#4ka3qE_|gihbZW~`6V7BMhW(Rv4{k6n%bl}B!H zVJrz@RDUdGQC*Ms+3Lb^y$2Rz6rf4j15LY^hokmFpVMI~^V{APGG5}_zAd+X5^rmA zxt#z5^dd!EG`>F#sWY4zl_@1%=M!wipf?Z505P?F57~Br!|+_l?+eI+pdTy|bS22v z;}8cI6Z`EnNdKB3D}w>(IxW9-E|uR&fz19w8j;kwU5QMygTn9>toFGezn4DJ``0_t zd~~GcyXV6EK)@_>-}6~S=7UI%c2-Esx^zGwD|mq*koXyyQr)0#4MYzI3qt!LhnD>d zx6IiXT<1J+B?)dqY-i|P0wOoS#Gm@rDW$|)dqAqx6M#G1$EuOK+==0))m$ktt1G=% z6O<7fTir1Nw+Q>}fsqA|Fs8ZBzxYDgh{wf4?&&8d%4R%RKbFILKm15Bnei32JXSpQ z0ZCb=HEyeP6O1GEnrMLMOqdQ1)O7~Oy2T0N&x-Ii39)7;Jbi$@nBccXP!Y@TN3WaW z0$_&&2m{KyySoYPnM=}MjOklVzxIIKjft119cj{=b=vABDb5RuB)J>lyDIhx@&?#$ z*bXf)r@>q#dl9NUPCJ_HtxSC4QC#WRILzy~AF{C1fM4z%GpMD)E_{6!NnPs$2&{*mEYh19lw;hE4qn zbE+vtPMjo)l|f@^5u$nl+e2_F0cG1jmd6IWG;q9;mKhk)-fPP5Zq@NWm0uR`r(za^ zBH^LW&3;NEs1^w+PmauCpLVC-G4{6hJ;X!q)NC=Hs%%3v z*`0+HPg281o=rA9yN+gIJ`2cayND|B&hSmVd1!1$0NF=?tZ>O|1NRWydc#8y`rF2w zUrwBusk5|#f)Tx{sl6FNtxW@#M*ymVt9ruk7-5*KVb_%lbYMBd{~OU3UF>2w7ve4L zptl^4Nd*`X{@>4)`+5tVB}4yt>%Uv~O%XQLoj^CkzWvy*lT*(UgF*ztJ{6;RF)Gr* zbwybg={$&ZbeJLpD~pIEj{Wcpi?#As?`yICABeT}|1Q>Z6@z?IJh%&X;2MPk3v4|v zmLWH7P)uEx7>xOZ|GUB~h_u^~*S#{6d=D=6^vd?+CGjL zy{Yr{*fxb{g(@DHb4VEbay(8fH`sn{`Fe

iWf zv7+lc9t(CYp;_!zh|8ZA^zy@q89P^%NduyRCkP6&*?(nI_9TuKO{l&Hm=zV(Oz{8( zBb*FaadfnlH?9f{EC>uFl|lhU1u9nf7ms%L{;+ZDD;4cVO8r$0dvjmM2Vkk9jzTIv zc>lWb0i|d#X6kl+d>~z?>ZcnBa=^d_$? z-ChbkVrx79(VRzC6sxy~&zJ#&Mk72uaqy|wRv^5$BLi20Rj4AknQLir4=u9Hdr@r3but}c!PdvZnuw)*W1G(bU*7(=(}j9uMrzi zC`9|Q{7E%7d9D}kChfo^&%7n)qHfsynidKO@op@vVXhHycaO$Uqq`|5Mb>L4-{+n^ z`%KxIpXFadjw|+!CpkBGL0X3f+9Px_TbJJn>KL%93*?ugVVmWzz$&($HQXW+8z9l!Y!M-`u>s@4I%xctc>`#n9wJAQ@WbUf~h%P6mM_DF%$QlH35H~ zc!n9ZtQzuP>4M*A9sEKHyc82M#$Q4(jR+|-9UW>RtDKG#9CL9bFI?hP-SJX&f1~DN z6hOX?MB<&+pC}`!L<+z2ntB>*9LaKjj_ne@DfOhY>Sw zU0^14*$6iCP{%}21`grgjhcC79pU!Fg#8y7j3s)_8fy%)?y=B>Ka0%p>O^Z|qj{Ru zS4Fdgme75HfdJ3Vdi<>60l{GCgp^+tW6wI2-=Rf`^_>GUA{F0fi*_6CzURPgE?kuB z+x#kBn9pOML?NA`L;JHuU^BhxI=&Bee&JvF6`Snel>)!L*CPxBwtfUyz-1!-zoM{c zA}T1sqms$6kt4YA!Acrp#Dbrsn3Q3I3N+LdQS@MMnGAHf6j{q*1tM+$`Sm{;TJr&S zqyaH-yF$BBaozF|2n)+^zq|YHJ3oUz;^=ci_s49PwvRn=iBRss2QIVAr(A&4`yzv9 zH_+s*HWvq*Z~}7!cXrr2k0Y@y2<=1F%+N#=$tb|>KDbLK-pp&ZmaZC039kH6&~pY{ F{u0B3eD(kU diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/frmRecProp.pas b/sdk/components/ElPack/BCBDemos/ElKeeper/frmRecProp.pas deleted file mode 100644 index d0eca47cafd..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/frmRecProp.pas +++ /dev/null @@ -1,393 +0,0 @@ -unit frmRecProp; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, ExtCtrls, ShellApi, OleDrop, ActiveX, ElTools, EntryData, - Menus, ElFrmPers, ElIni, ElACtrls, ElBtnCtl, ElPopBtn, ElCheckCtl, - ElBtnEdit, - ComCtrls, ElFlatCtl, ElSpin, ElDTPick, ElPromptDlg, hexeditor, Grids, - ElPgCtl, ElXPThemedControl, ElPanel; - -type - TRecPropsForm = class(TForm) - FormPers: TElFormPersist; - AttachSaveDlg: TSaveDialog; - AttachOpenDlg: TOpenDialog; - ElFlatController1: TElFlatController; - ElPanel1: TElPanel; - ElPageControl1: TElPageControl; - Main: TElTabSheet; - Label1: TLabel; - Label2: TLabel; - Label3: TLabel; - Label4: TLabel; - Label5: TLabel; - Label7: TLabel; - Label8: TLabel; - Label9: TLabel; - GoBtn: TElPopupButton; - PswGenBtn: TElPopupButton; - Go2Btn: TElPopupButton; - SiteNameEdit: TElAdvancedEdit; - URLEdit: TElAdvancedEdit; - UNameEdit: TElAdvancedEdit; - AcctEdit: TElAdvancedEdit; - PswEdit: TElAdvancedEdit; - URL2Edit: TElAdvancedEdit; - dtpAdded: TElDateTimePicker; - dtpModified: TElDateTimePicker; - OKBtn: TElPopupButton; - CancelBtn: TElPopupButton; - ElTabSheet3: TElTabSheet; - Label12: TLabel; - AttachedLabel: TLabel; - HexView: THexEditor; - TextView: TElAdvancedMemo; - ClearDataButton: TElPopupButton; - AttachDataButton: TElPopupButton; - SaveDatabutton: TElPopupButton; - AsTextRadio: TElRadioButton; - AsHexRadio: TElRadioButton; - ElTabSheet2: TElTabSheet; - Label6: TLabel; - Label10: TLabel; - Label11: TLabel; - InfoMemo: TElAdvancedMemo; - WrapCB: TElCheckBox; - ExpiresCB: TElCheckBox; - NotifySpin: TElSpinEdit; - dtpExpires: TElDateTimePicker; - procedure URLEditChange(Sender: TObject); - procedure GoBtnClick(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure FormDestroy(Sender: TObject); - procedure SiteNameEditDragDrop(Sender, Source: TObject; X, Y: Integer); - procedure SiteNameEditDragOver(Sender, Source: TObject; X, Y: Integer; - State: TDragState; var Accept: Boolean); - procedure URLEditDragOver(Sender, Source: TObject; X, Y: Integer; - State: TDragState; var Accept: Boolean); - procedure URLEditDragDrop(Sender, Source: TObject; X, Y: Integer); - procedure PswGenBtnClick(Sender: TObject); - procedure Go2BtnClick(Sender: TObject); - procedure FormShow(Sender: TObject); - procedure WrapCBClick(Sender: TObject); - procedure ExpiresCBClick(Sender: TObject); - procedure ClearDataButtonClick(Sender: TObject); - procedure SaveDatabuttonClick(Sender: TObject); - procedure URL2EditChange(Sender: TObject); - procedure URL2EditDragDrop(Sender, Source: TObject; X, Y: Integer); - procedure URL2EditDragOver(Sender, Source: TObject; X, Y: Integer; - State: TDragState; var Accept: Boolean); - procedure AttachDataButtonClick(Sender: TObject); - procedure AsHexRadioClick(Sender: TObject); - procedure AsTextRadioClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - Entry : PEntryRec; - FSNDropTarget, - FLDropTarget : IDropTarget; - BinDataSize : DWORD; - BinData : Pointer; - procedure GetData; - procedure SetData; - end; - -var - RecPropsForm: TRecPropsForm; - -implementation - -uses frmPswGen, LogoMain; - -resourcestring - sNone = '(None)'; - sPresent = 'Present '; - -procedure TRecPropsForm.GetData; { public } -begin - Entry^.Site:=SiteNameEdit.Text; - Entry^.Location:=URLEdit.Text; - Entry^.UName:=UNameEdit.Text; - Entry^.Acct:=AcctEdit.Text; - Entry^.Pswd:=PswEdit.Text; - Entry^.Info:=InfoMemo.Text; - Entry^.Location2 := URL2Edit.Text; - Entry^.Modified := Now; - if Trunc(Entry^.Expires) <> Trunc(dtpExpires.Date) then Entry.ExpWarned := false; - Entry^.Expires := Trunc(dtpExpires.Date); - Entry^.DoExpires := ExpiresCB.Checked; - Entry.WarnDays := NotifySpin.Value; - if Entry.BinData <> nil then - FreeMem(Entry.BinData); - Entry.BinDataSize := 0; - if BinData <> nil then - begin - GetMem(Entry.BinData, BinDataSize); - MoveMemory(Entry.BinData, BinData, BinDataSize); - Entry.BinDataSize := BinDataSize; - end; -end; { GetData } - -procedure TRecPropsForm.SetData; { public } -var Stream : TDirectMemoryStream; -begin - SiteNameEdit.Text:=Entry^.Site; - URLEdit.Text:=Entry^.Location; - UNameEdit.Text:=Entry^.UName; - AcctEdit.Text:=Entry^.Acct; - PswEdit.Text:=Entry^.Pswd; - InfoMemo.Text:=Entry^.Info; - URL2Edit.Text:=Entry^.Location2; - dtpModified.Date := Entry^.Modified; - dtpAdded.Date := Entry.Added; - dtpExpires.Date := Entry^.Expires; - NotifySpin.Value := Entry.WarnDays; - ExpiresCB.Checked := Entry^.DoExpires; - if Entry^.BinDataSize > 0 then - begin - BinDataSize := Entry.BinDataSize; - GetMem(BinData, BinDataSize); - MoveMemory(BinData, Entry.BinData, BinDataSize); - AttachedLabel.Caption := StrPas(PChar(Entry.BinData)) + ' (' + IntToStr(BinDataSize - StrLen(PChar(Entry.BinData)) - 1) + ' bytes)'; - Stream := TDirectMemoryStream.Create; - Stream.SetPointer(BinData, BinDataSize); - Stream.Seek(StrLen(PChar(Entry.BinData)) + 1, soFromBeginning); - HexView.LoadFromStream(Stream); - Stream.SetPointer(nil, 0); - end - else - begin - BinData := nil; - BinDataSize := 0; - AttachedLabel.Caption := sNone; - HexView.AsText := ''; - end; - if AsHexRadio.Checked then - AsHexRadioClick(Self) - else - AsTextRadioClick(Self); - - ExpiresCBClick(Self); -end; { SetData } - -{$R *.DFM} - -procedure TRecPropsForm.URLEditChange(Sender: TObject); -begin - GoBtn.Enabled:=UrlEdit.Text<>''; -end; - -procedure TRecPropsForm.GoBtnClick(Sender: TObject); -begin - ShellExecute(0,'open',PChar(UrlEdit.Text),nil, nil, SW_SHOWNORMAL); -end; - -procedure TRecPropsForm.FormCreate(Sender: TObject); -begin - FSNDropTarget := IWCDroptarget.Create(SiteNameEdit); - FLDropTarget := IWCDroptarget.Create(URLEdit); -end; - -procedure TRecPropsForm.FormDestroy(Sender: TObject); -begin - FSNDropTarget := nil; - FLDropTarget := nil; -end; - -procedure TRecPropsForm.SiteNameEditDragDrop(Sender, Source: TObject; X, - Y: Integer); -var i : Integer; -begin - if Source is ToleDragObject then - begin - i:=ToleDragObject(source).DragContent; - if i=CF_Text then - SiteNameEdit.Text:= ToleDragObject(source).StringData; - end; -end; - -procedure TRecPropsForm.SiteNameEditDragOver(Sender, Source: TObject; X, - Y: Integer; State: TDragState; var Accept: Boolean); -begin - Accept := Source is ToleDragObject; -end; - -procedure TRecPropsForm.URLEditDragOver(Sender, Source: TObject; X, - Y: Integer; State: TDragState; var Accept: Boolean); -begin - Accept := Source is TOleDragObject; -end; - -procedure TRecPropsForm.URLEditDragDrop(Sender, Source: TObject; X, - Y: Integer); -begin - if Source is ToleDragObject then - begin - if ToleDragObject(source).DragContent = CF_Text then - URLEdit.Text:= ToleDragObject(source).StringData; - end; -end; - -procedure TRecPropsForm.PswGenBtnClick(Sender: TObject); -begin - PswGenForm := TPswGenForm.Create(nil); - if PswGenForm.ShowModal = mrOk then - begin - PswEdit.Text := PswGenForm.Pssw; - end; - PswGenForm.Free; - PswGenForm := nil; -end; - -procedure TRecPropsForm.Go2BtnClick(Sender: TObject); -begin - ShellExecute(0,'open',PChar(Url2Edit.Text),nil, nil, SW_SHOWNORMAL); -end; - -procedure TRecPropsForm.FormShow(Sender: TObject); -begin - ActiveControl := SiteNameEdit; -end; - -procedure TRecPropsForm.WrapCBClick(Sender: TObject); -begin - InfoMemo.WordWrap := WrapCB.Checked; - if WrapCB.Checked then - InfoMemo.Scrollbars := ssVertical - else - InfoMemo.Scrollbars := ssBoth; -end; - -procedure TRecPropsForm.ExpiresCBClick(Sender: TObject); -begin - dtpExpires.Enabled := ExpiresCB.Checked; - NotifySpin.Enabled := ExpiresCB.Checked; -end; - -procedure TRecPropsForm.ClearDataButtonClick(Sender: TObject); -begin - if BinDataSize > 0 then - begin - if ElMessageDlg('Do you want to clear all associated data?', mtWarning, [mbYes, mbNo], 0) = idYes then - begin - FreeMem(BinData); - BinData := nil; - BinDataSize := 0; - AttachedLabel.Caption := sNone; - HexView.CreateEmptyFile('unnamed'); - TextView.Text := ''; - end; - end; -end; - -procedure TRecPropsForm.SaveDatabuttonClick(Sender: TObject); -var DataStream : TStream; - fns : DWORD; -begin - if BinDataSize > 0 then - begin - AttachSaveDlg.FileName := StrPas(PChar(Entry.BinData)); - if AttachSaveDlg.Execute then - begin - DataStream := TFileStream.Create(AttachSaveDlg.FileName, fmCreate or fmShareExclusive); - try - fns := StrLen(PChar(Entry.BinData)) + 1; - DataStream.WriteBuffer((PChar(BinData) + fns)^, BinDataSize - fns); - finally - DataStream.Free; - end; - end; - end - else - ElMessageDlg('There is no data available for saving', mtInformation, [mbOk], 0); -end; - -procedure TRecPropsForm.URL2EditChange(Sender: TObject); -begin - Go2Btn.Enabled:=Url2Edit.Text<>''; -end; - -procedure TRecPropsForm.URL2EditDragDrop(Sender, Source: TObject; X, - Y: Integer); -begin - if Source is ToleDragObject then - begin - if ToleDragObject(source).DragContent = CF_Text then - URL2Edit.Text := ToleDragObject(source).StringData; - end; -end; - -procedure TRecPropsForm.URL2EditDragOver(Sender, Source: TObject; X, - Y: Integer; State: TDragState; var Accept: Boolean); -begin - Accept := Source is TOleDragObject; -end; - -procedure TRecPropsForm.AttachDataButtonClick(Sender: TObject); -var NewData : Pointer; - NewSize : integer; - DataStream : TStream; - b : boolean; - FN: string; -begin - if BinDataSize > 0 then - b := ElMessageDlg('Attaching new data will clear all currently associated data. Continue?', mtWarning, [mbYes, mbNo], 0) = idYes - else - b := true; - if b then - begin - if AttachOpenDlg.Execute then - begin - DataStream := TFileStream.Create(AttachOpenDlg.FileName, fmOpenRead or fmShareDenyWrite); - try - FN := ExtractFileName(AttachOpenDlg.FileName); - NewSize := DataStream.Size + Length(FN) + 1; - GetMem(NewData, NewSize); - StrCopy(PChar(NewData), PChar(FN)); - DataStream.ReadBuffer((PChar(NewData) + Length(FN) + 1)^, DataStream.Size); - if BinData <> nil then - begin - FreeMem(BinData); - BinData := nil; - BinDataSize := 0; - end; - BinData := NewData; - BinDataSize := NewSize; - AttachedLabel.Caption := FN + ' (' + IntToStr(BinDataSize - Length(FN) - 1) + ' bytes)'; - DataStream.Position := 0; - HexView.LoadFromStream(DataStream); - if AsTextRadio.Checked then - AsTextRadioClick(Self); - - if ElMessageDlg('Add the name of the attached file and current time to record notes?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then - begin - InfoMemo.Lines.Add('Filename: ' + ExtractFileName(AttachOpenDlg.FileName)); - InfoMemo.Lines.Add('Added: ' + FormatDateTime('c', Now)); - end; - finally - DataStream.Free; - end; - end; - end; -end; - -procedure TRecPropsForm.AsHexRadioClick(Sender: TObject); -begin - HexView.Visible := true; - TextView.Visible := false; - TextView.Text := ''; -end; - -procedure TRecPropsForm.AsTextRadioClick(Sender: TObject); -begin - TextView.Text := HexView.AsText; - TextView.Visible := true; - HexView.Visible := false; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/hexeditor.dcr b/sdk/components/ElPack/BCBDemos/ElKeeper/hexeditor.dcr deleted file mode 100644 index 96c441566ff0694bae01cbf61b548717ed30e241..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmc&xp^m~p5Pc95aEHQ?5LC$-1mf%kNH}vOKnS0K1KFIqUs$zBg2ZC_N!V4xn{Ib0 z4VLh-GxPTKb-SGbfF47{2k8U0HDE+Vq>dG4m}0}2;D@_87SY>oHydG-kaUWu!OJb4 z^BgI_g*5ernG{);vFZc8m=^Jc+22)g{Ext47qG`c0xH~zbH*@JS5BL?RZfEuaZ=SQ z{%}tCl=}6i*AFi8*XV47Vvo}u&>4MEEzd}&GsZW5v1VT8Z)qAv2E2Vv{Q&l>Ur+LB w{wY5v)*9!Oe_qI~=YwuytP!g^d0CHs>Urx653WSPU!mXcT>6*T chars) - CTRL+DEL removes the current selection - - ***history : - V1.16 : released feb 02 99 - - added WMGetDlgCode to avoid problems with shortcut-controls on the form - (Merci á Monsieur Chessa for reporting this ) - changed the property ReadOnly to ReadOnlyFile ( to avoid confusion, sorry ) - fixed updating when the font gets changed - added OnKeyPress-support ( now you can modify the key before THexEditor will parse it in this event ) - - added - property WantTabs : Boolean ; if true, than you can navigate between char and hex field with - the TAB key, if not, you can navigate between your form's controls with - the TAB key, to change the current field in THexEditor, you have to use - CTRL+T. - - property ReadOnlyView : Boolean ; - if true, than the text/data in THexEditor can't edited via key presses, - just selection , moving and scrolling are still available - - - V1.15 : released 03/01/99 - - added option odOctal to TOffsetDisplayStyle to display line offset in octal system ("8"-based) - - fixed a problem on creating a THexEditor dynamically - ( thanks to John Shailes , JohnShailes@email.msn.com ) - - added (thanks to Daniel Jensen) - property AllowInsertMode : Boolean ; if this is set to true, THexEditor doesn't overwrite - but insert values at the current cursor position - ( this cannot be set if NoSizeChange is True ) - - property IsInsertMode : Boolean ; ReadOnly, if it returns true, the current mode is - inserting (see above ) - - property AutoCaretMode : Boolean ; if true, the caret will be set to a block - in overwrite mode and to a left line in insert mode - automatically - V1.14 : not released - fixed the problem with the hidden caret on windows nt ( changed the bitmap to an object member) - many thanx to Eric Grange egrange@hotmail.com - - added - property NoSizeChange : Boolean ; if this is set to true, just overwriting is allowed, - no deletion/insertion of data - - - the following items are currently unsupported : - - property VariableLineLength : Boolean ; if true, each line can display a different amount - of bytes (overwrites BytesPerLine) - - property LineLength [ Index : Integer ] : Integer ; to get/set each line's length - - property LineOffset [ Index : Integer ] : Integer ; ReadOnly, to obtain the starting offset - for each line ( useful when working with variable line lengths ) - - procedure SetLineLengths ( aLengths : TList ); to set all lines' length all in one to - different values stored in the aLengths parameter - V1.13 : released 11/07/98 ( thanks to Philippe Chessa Philippe_Chessa@compuserve.com for these suggestions ) - Now also typing shifted characters in the hex field is possible - added - function ConvertHexToBin ( aFrom , aTo : PChar ; const aCount : Integer ; - const SwapNibbles : Boolean ; var BytesTranslated : Integer ) : PChar; - translates things like "a0 00 CCDD ef..." to their binary values and - returns aTO ( aTo may point to the same memory position as aFrom ) - NOTE: this is not an object function ! - - function ConvertBinToHex ( aFrom , aTo : PChar ; const aCount : Integer ; - const SwapNibbles : Boolean ) : PChar; - translates binary data to its hexadecimal representation - aTo should be different from aFrom ( since aFrom would be overwritten - before reading its data ). after doing this a 0# will be stored at the end - of the result - NOTE: this is not an object function ! - - property AsText : string ; read / write THexEditor's Data from / to a String - property AsHex : string ; read / write THexEditor's Data from / to a hex string ("99AABBCC"...) - - property MaskWhiteSpaces : Boolean; if this is true, [#0..#31] chars will be replaced in the char field - with the char set in the MaskChar property - - property MaskChar : Char ; look at MaskWhiteSpaces - - - V1.12 : released 10/25/98 - Removed property OEMTranslate, therefore - Added property Translation: TTranslationType ; this can be set to display chars in various modes, - currently ttAnsi ( no translation ) , ttDos8 ( translation to 8 bit dos ascii - chars ), ttASCII ( translation to plain 7 bit ascii ) , ttMac ( chars will be - converted to Macintosh(TM) charset ) and ttEBCDIC ( Chars will be translated - to IBM(TM)'s ebcdic character set, code page 038 ) are implemented. - property SwapNibbles: Boolean ; if true the Byte value 160dec will be displayed in hex field as "0A" - rather than "A0" - function DeleteNibble ( const aPos : Integer ; const HighNibble : Boolean ) : Boolean; - removes 4 bits (1 nibble) at the given position, if HighNibble is true, - bits 16..128 will be deleted else bits 1..8 then shifts the file's contents - behind these bits bitwise to the left (to pos 0 ) - function InsertNibble ( const aPos : Integer ; const HighNibble : Boolean ) : Boolean; - inserts 4 bits (1 nibble) at the given position, if HighNibble is true, - 0000 will be inserted at position $80 else at $00 then shifts the file's contents - behind these bits bitwise to the right (to file end ) - procedure ConvertRange ( const aFrom , aTo : Integer ; const aTransFrom , aTransTo : TTranslationType ); - converts the given file-range from one code type to another, possible values - for aTransFrom , aTransTo are : ttAnsi , ttDOS8 , ttASCII , ttMAC , ttEBCDIC - - - V1.11 : released 10/04/98 - Added property BytesPerColumn: Integer; tells THexEditor how many Bytes will build one column in the hex field - (default 2 ); e.g. "0010 202f 304f" or "00 10 20 2f..." if set to 1 - property CaretStyle: TCaretStyle ( csFull, csLeftLine , csBottomLine ) : the caret's style - property OffsetDisplay: TOffsetDisplayStyle ( odHex , odDec , odNone ) : how should the line offset be shown ? - property ShowMarkerColumn : Boolean : if set to true, show a column left to the hex field to display marked lines - function Find ( aBuffer : PChar ; const aCount , aStart , aEnd : Integer ; - const IgnoreCase , SearchText : Boolean ) : Integer; - searches for the stuff in aBuffer from position aStart to Position aEnd and returns the position, - -1 if nothing has been found; if SearchText is True, thexeditor will convert the text to the - specified translation - - function Seek (const aOffset , aOrigin : Integer ; const FailIfOutOfRange : Boolean ) : Boolean - move the cursor position to the given value, if new position is out of file, go to start/end - or return false ( depends on FailIfOutOfRange ), aOffset,aOrigin: look at the help for - TCustomMemoryStream.Seek - - - - - V1.1 : all this nice stuff has been done by John Hamm ! - modified Markus's original version, mostly cosmetic changes - Added: SavetoStream, LoadFromStream - property Colors: TColors; created a TColors type, you can change the following colors: - Background, ChangedBackground, ChangedText, - CursorFrame, EvenColumn, OddColumn, Offset, - PositionBackground, and PositionText - To change the color of the normal text, use THexEditor.Font.Color -// changed to caretstyle mst property FullCaret: Boolean; set to True to have a block caret, False for a line caret - property OffsetSeparator: Char; change the character that trails the offset column -// changed to offsetdisplay mst property ShowOffset: Boolean; set to True to show offset, false hides offset - property FocusFrame: Boolean; set to True to show a Windows focus frame instead of the - solid CursorFrame - - Modified: SavetoFile, LoadFromFile to the Delphi standards (specify filename) - property Filename - read-only, - property GridLineWidth - published - property BytesPerLine - published - - V1.0 beta 1 : first public release 08/14/98 - -*) - -{.$define _debug} //do not remove the dot - - - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, grids; - -const - WM_STATECHANGED = WM_USER +2 ; - - {translation tables from/to windows ansi (~ iso } - - // - macintosh - - ctMacToISO : array [128..255] of Char = ( - #$C4,#$C5,#$C7,#$C9,#$D1,#$D6,#$DC,#$E1,#$E0,#$E2,#$E4,#$E3,#$E5,#$E7,#$E9,#$E8, - #$EA,#$EB,#$ED,#$EC,#$EE,#$EF,#$F1,#$F3,#$F2,#$F4,#$F6,#$F5,#$FA,#$F9,#$FB,#$FC, - #$DD,#$B0,#$A2,#$A3,#$A7,#$80,#$B6,#$DF,#$AE,#$A9,#$81,#$B4,#$A8,#$82,#$C6,#$D8, - #$83,#$B1,#$BE,#$84,#$A5,#$B5,#$8F,#$85,#$BD,#$BC,#$86,#$AA,#$BA,#$87,#$E6,#$F8, - #$BF,#$A1,#$AC,#$88,#$9F,#$89,#$90,#$AB,#$BB,#$8A,#$A0,#$C0,#$C3,#$D5,#$91,#$A6, - #$AD,#$8B,#$B3,#$B2,#$8C,#$B9,#$F7,#$D7,#$FF,#$8D,#$8E,#$A4,#$D0,#$F0,#$DE,#$FE, - #$FD,#$B7,#$92,#$93,#$94,#$C2,#$CA,#$C1,#$CB,#$C8,#$CD,#$CE,#$CF,#$CC,#$D3,#$D4, - #$95,#$D2,#$DA,#$DB,#$D9,#$9E,#$96,#$97,#$AF,#$98,#$99,#$9A,#$B8,#$9B,#$9C,#$9D ); - - ctISOToMac : array [128..255] of Char = ( - #$A5,#$AA,#$AD,#$B0,#$B3,#$B7,#$BA,#$BD,#$C3,#$C5,#$C9,#$D1,#$D4,#$D9,#$DA,#$B6, - #$C6,#$CE,#$E2,#$E3,#$E4,#$F0,#$F6,#$F7,#$F9,#$FA,#$FB,#$FD,#$FE,#$FF,#$F5,#$C4, - #$CA,#$C1,#$A2,#$A3,#$DB,#$B4,#$CF,#$A4,#$AC,#$A9,#$BB,#$C7,#$C2,#$D0,#$A8,#$F8, - #$A1,#$B1,#$D3,#$D2,#$AB,#$B5,#$A6,#$E1,#$FC,#$D5,#$BC,#$C8,#$B9,#$B8,#$B2,#$C0, - #$CB,#$E7,#$E5,#$CC,#$80,#$81,#$AE,#$82,#$E9,#$83,#$E6,#$E8,#$ED,#$EA,#$EB,#$EC, - #$DC,#$84,#$F1,#$EE,#$EF,#$CD,#$85,#$D7,#$AF,#$F4,#$F2,#$F3,#$86,#$A0,#$DE,#$A7, - #$88,#$87,#$89,#$8B,#$8A,#$8C,#$BE,#$8D,#$8F,#$8E,#$90,#$91,#$93,#$92,#$94,#$95, - #$DD,#$96,#$98,#$97,#$99,#$9B,#$9A,#$D6,#$BF,#$9D,#$9C,#$9E,#$9F,#$E0,#$DF,#$D8 ); - - // - ebcdic cp 38 - - ctEBCDICToISO : array [0..255] of Char = ( - #0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 , - #0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 , - #0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 , - #0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 , - ' ',#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,'.','<','(','+','þ', - '&','&',#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,'!','$','*',')',';',#0 , - '-','/',#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,'|',',','%','_','>','?', - #0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,'`',':','#','@','''','=','"', - #0 ,'a','b','c','d','e','f','g','h','i',#0 ,#0 ,#0 ,#0 ,#0 ,#0 , - #0 ,'j','k','l','m','n','o','p','q','r',#0 ,#0 ,#0 ,#0 ,#0 ,#0 , - #0 ,'~','s','t','u','v','w','x','y','z',#0 ,#0 ,#0 ,#0 ,#0 ,#0 , - #0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 ,#0 , - #0 ,'A','B','C','D','E','F','G','H','I',#0 ,#0 ,#0 ,#0 ,#0 ,#0 , - #0 ,'J','K','L','M','N','O','P','Q','R',#0 ,#0 ,#0 ,#0 ,#0 ,#0 , - '\',#0 ,'S','T','U','V','W','X','Y','Z',#0 ,#0 ,#0 ,#0 ,#0 ,#0 , - '0','1','2','3','4','5','6','7','8','9',#0 ,#0 ,#0 ,#0 ,#0 ,#0 ); - - ctISOToEBCDIC : array [0..255] of Char = ( - #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00, - #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00, - '@','Z','','{','[','l','P','}','M',']','\','N','k','`','K','a', - 'ð','ñ','ò','ó','ô','õ','ö','÷','ø','ù','z','^','L','~','n','o', - '|','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ñ','Ò','Ó','Ô','Õ','Ö', - '×','Ø','Ù','â','ã','ä','å','æ','ç','è','é',#00,'à',#00,#00,'m', - 'y','','‚','ƒ','„','…','†','‡','ˆ','‰','‘','’','“','”','•','–', - '—','˜','™','¢','£','¤','¥','¦','§','¨','©',#00,'j',#00,'¡',#00, - #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00, - #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00, - #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00, - #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00, - #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00, - #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00, - #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00, - #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,'O',#00 ); - -type - - TLongPoint = record - x , y : LongInt; - end; - - TCaretStyle = (csFull , csLeftLine , csBottomLine ); - TOffsetDisplayStyle = (odHex , odDec , odOctal , odNone ); - TTranslationType = (ttAnsi , ttDos8 , ttASCII , ttMac , ttEBCDIC ); - - PUndoRec = ^TUndoRec; - TUndoRec = packed record - Typ : Byte; - Changed : Boolean; - Modified : Boolean; - CurPos : Integer; - C1st : Byte; - CharField : Boolean; - SelS , SelE , SelP , Pos , Count , ReplCount : DWORD; - Buffer : Byte; - end; - - TColors = class(TPersistent) - private - FOffset: TColor; - FOddColumn: TColor; - FOddInverted: TColor; - FEvenColumn: TColor; - FEvenInverted: TColor; - FParent: TControl; - FPositionBackground: TColor; - FCursorFrame: TColor; - FBackground: TColor; - FChangedText: TColor; - FPositionText: TColor; - FChangedBackground: TColor; - protected - procedure SetBackground(const Value: TColor); - procedure SetChangedBackground(const Value: TColor); - procedure SetChangedText(const Value: TColor); - procedure SetCursorFrame(const Value: TColor); - procedure SetPositionBackground(const Value: TColor); - procedure SetPositionText(const Value: TColor); - procedure SetEvenColumn(const Value: TColor); - procedure SetOddColumn(const Value: TColor); - procedure SetOffset(const Value: TColor); - public - constructor Create(Parent: TControl); - published - property Background: TColor read FBackground write SetBackground; - property PositionBackground: TColor read FPositionBackground write SetPositionBackground; - property PositionText: TColor read FPositionText write SetPositionText; - property ChangedBackground: TColor read FChangedBackground write SetChangedBackground; - property ChangedText: TColor read FChangedText write SetChangedText; - property CursorFrame: TColor read FCursorFrame write SetCursorFrame; - property Offset: TColor read FOffset write SetOffset; - property OddColumn: TColor read FOddColumn write SetOddColumn; - property EvenColumn: TColor read FEvenColumn write SetEvenColumn; - end; - - THexEditor = class(TCustomGrid) - private - fCharWidth , fCharHeight : Integer; - fInsertOn : Boolean; - fCaretBitmap : TBitmap; - fColors: TColors; - fBytesPerLine : Integer; - fOffSetDisplayWidth : Integer; - fBPL2 : Integer; - fDataSize : Integer; - fIntFile : TFileStream; - fSwapNibbles : Integer; - fFocusFrame: Boolean; - fUndoMem : TMemoryStream; - fReadOnlyFile : Boolean; - fBytesPerColumn : Integer; - fPosInChars : Boolean; - fIntBuffer : PByteArray; - fIntBufferPos : Integer; - fFileName : string; - fInternalName : string; - fChangedBytes : TBits; - fMarker : array [0..9] of Integer; - fSelST , fSelPO , fSelEN : Integer; - fIsSelecting : Boolean; - fCanUndo : Boolean; - fUndoDesc : string; - fUndoCount : Integer; - fStateChanged : TNotifyEvent; -// fOEMTranslate : Boolean; - fTranslation : TTranslationType; - fModified : Boolean; - fCreateBackup : Boolean; - fBackupExt : string; - FOffsetDisplay: TOffsetDisplayStyle; - FOffsetChar: Char; - fCaretStyle : TCaretStyle; - fShowMarkerCol : Boolean; - fLastKeyWasALT : Boolean; - fMaskWhiteSpaces : Boolean; - fMaskChar : Char; - fNoSizeChange : Boolean; - fVariableLineLength : Boolean; - fOffsets : TList; - fAllowInsertMode : Boolean; - fAutoCaretMode : Boolean; - FWantTabs: Boolean; - FReadOnlyView: Boolean; - property Color; - procedure InternalErase(const BackSp: Boolean); - procedure SetReadOnlyView(const Value: Boolean); - procedure SetCaretStyle(const Value: TCaretStyle); - procedure SetFocusFrame(const Value: Boolean); - procedure SetBytesPerColumn(const Value: Integer); - procedure SetSwapNibbles ( const Value : Boolean ); - function GetSwapNibbles : Boolean; - function GetBytesPerColumn : Integer; - procedure SetShowMarkerColumn( const Value : Boolean ); - procedure SetOffsetDisplayWidth; - procedure SetOffsetChar(const Value: Char); - procedure SetOffsetDisplay(const Value: TOffsetDisplayStyle); - procedure SetColors(const Value: TColors); - procedure SetReadOnlyFile (const aValue : Boolean ); - procedure SetTranslation ( aValue : TTranslationType ); - procedure SetModified ( aValue : Boolean ); - procedure SetBytesPerLine ( aValue : Integer ); - procedure SetChanged ( aPos : Integer ; aValue : Boolean ); - procedure SetNoSizeChange ( const aValue : Boolean ); - procedure SetAllowInsertMode ( const aValue : Boolean ); - function GetIsInsertMode : Boolean; - procedure SetAutoCaretMode ( const aValue : Boolean ); - procedure SetWantTabs(const Value: Boolean); - protected - procedure CreateColoredCaret; - function GetMemory ( aIndex : Integer ):Char; - procedure SetMemory ( aIndex : Integer ; aChar : Char ); - procedure TestStream; - procedure AdjustMetrics; - function GetDataSize : Integer; - procedure CalcSizes; - procedure DrawCell(ACol, ARow: Longint; ARect: TRect; - AState: TGridDrawState); override; - function SelectCell(ACol, ARow: Longint): Boolean; override; -// procedure GetCurrentLine ( aLine : Integer ); - function GetPosAtCursor ( const aCol , aRow : Integer ) : Integer; - function GetCursorAtPos ( aPos : Integer ; aChars : Boolean ) : TLongPoint; - function GetOtherFieldCol ( aCol : Integer ; var Chars : Boolean ) : Integer; - function CheckSelectCell ( aCol , aRow : Integer ) : Boolean; - procedure WMChar(var Msg: TWMChar); message WM_CHAR; - procedure WMSTATECHANGED ( var Msg : TMessage ) ; message WM_STATECHANGED; - procedure WMGetDlgCode(var Msg: TWMGetDlgCode); message WM_GETDLGCODE; - procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED; - function GetByteAtPos ( aPos : Integer ) : Byte; - procedure SetByteAtPos ( aPos : Integer ; aByte : Byte ); - procedure GetMemAtPos ( aBuffer : PByteArray ; aPos , aCount : Integer ); - procedure SetMemAtPos ( aBuffer : PByteArray ; aPos , aCount : Integer ); - procedure ChangeByte ( aOldByte , aNewByte : Byte ; aPos , aCol , aRow : Integer ); - procedure KeyDown(var Key: Word; Shift: TShiftState); override; - procedure KeyUp(var Key: Word; Shift: TShiftState); override; - function HasChanged ( aPos : Integer ) : Boolean; - function IsMarkerPos ( aPos : Integer ) : Integer; - function GetMarkerRow ( aWhich : Byte ) : Integer; - function ParseKeyDown ( aShift : TShiftState ; aChar : Char ) : Boolean; - function IsSelected ( aPos : Integer ) :Boolean; - procedure RedrawPos ( aFrom , aTo : Integer ) ; - procedure ResetSelection ( aDraw : Boolean); - procedure ResetUndo; - {$ifdef _debug} - procedure ShowSelState; - {$endif} - procedure Select ( aCurCol , aCurRow , aNewCol , aNewRow : Integer ); - procedure MouseDown(Button: TMouseButton; Shift: TShiftState; - X, Y: Integer); override; -(* procedure MouseUP(Button: TMouseButton; Shift: TShiftState; - X, Y: Integer); override;*) - function CreateUndo ( aType : Integer ; aPos , aCount , aReplCount : Integer ) : Boolean; - procedure DoCreateUndo ( aType : Integer ; aPos , aCount , aReplCount : Integer ); - function GetSelStart : Integer; - function GetSelEnd : Integer; - function GetSelCount : Integer; - procedure SetSelStart ( aValue : Integer ); - procedure SetSelEnd ( aValue : Integer ); - procedure SetInCharField ( aValue : Boolean ); - function GetInCharField : Boolean; - procedure Loaded ; override; - procedure CreateWnd ; override; - procedure WMSetFocus(var Msg: TWMSetFocus); message WM_SETFOCUS; - procedure WMKillFocus(var Msg: TWMKillFocus); message WM_KILLFOCUS; - function TranslateToAnsiChar ( aByte : Byte ) : Char ; - function TranslateFromAnsiChar ( aByte : Byte ) : Char; - procedure InternalInsertBuffer ( aBuffer : PChar ; aSize , aPos : Integer ); - procedure InternalAppendBuffer ( aBuffer : PChar ; aSize : Integer ); - procedure MoveFileMem ( aFrom , aTo , aCount : Integer ); - procedure CheckInternalBuffer ( aPos : Integer ); - procedure SetInternalBufferByte ( aPos : Integer ; aByte : Byte ); - procedure InternalGetCurSel ( var aSP , aEP , aCol , aRow : Integer); - procedure InternalDeleteSelection ( aSP , aEP , aNCol , aNRow : Integer ); - procedure WMVScroll(var Msg: TWMVScroll); message WM_VSCROLL; - procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL; - function InternalDeleteNibble ( const aPos : Integer ; const HighNibble : Boolean ) : Boolean; - function InternalInsertNibble ( const aPos : Integer ; const HighNibble : Boolean ) : Boolean; - function CreateShift4BitStream ( const aStart : Integer ; var vName : TFileName ): TFileStream; - procedure InternalConvertRange ( const aFrom , aTo : Integer ; const aTransFrom , aTransTo : TTranslationType ); - function GetMarker (aIndex : Byte ) : Integer; - procedure SetMarker (aIndex : Byte ; const aValue : Integer ); - procedure SetMaskWhiteSpaces (const aValue : Boolean ); - procedure SetMaskChar ( const aValue : Char ); - procedure SetAsText ( const aValue : string ); - procedure SetAsHex ( const aValue : string ); - function GetAsText : string; - function GetAsHex : string; - procedure FreeFile; - procedure SetVariableLineLength ( const aValue : Boolean ); - procedure AdjustLineLengthsCount; - function GetLineLength ( aLine : Integer ) : Integer; - procedure SetLineLength ( aLine , aLength : Integer ); - function GetLineOffset ( aLine : Integer ) : Integer; - function OutOfBounds ( const aCol , aRow : Integer ) : Boolean; - function GetRow ( const aPos : Integer ) : Integer; - procedure StateNotification; - public - { Public-Deklarationen } - constructor Create ( aOwner : TComponent ) ;override; - destructor Destroy ; override; - {$Ifdef _debug} - procedure SaveUndo ( aFileName : TFileName ); //for debugging purposes, do not use it - {$endif} - function Seek (const aOffset , aOrigin : Integer ; const FailIfOutOfRange : Boolean ) : Boolean; - function Find ( aBuffer : PChar ; const aCount , aStart , aEnd : Integer ; // find something in the current file - const IgnoreCase , SearchText : Boolean ) : Integer; //and return the position, -1 if not found - procedure DeleteSelection; // delete the currently selected part of the file (with undo) - function LoadFromStream(Strm: TStream): Boolean; - function LoadFromFile(const Filename: string): Boolean; - function SaveToStream(Strm: TStream): Boolean; - function SaveToFile(const Filename: string): Boolean; - function Undo : Boolean; // if possible, undo last action (multiple undo!) - procedure CreateEmptyFile (const TempName : string ); // create a new, empty file and give it a special filename ( e.g. "untitled 1" ) - function BufferFromFile ( aPos : Integer ; var aCount : Integer ): PChar; // allocates memory for the result and fills it with acount bytes from pos apos - procedure InsertBuffer ( aBuffer : PChar ; aSize , aPos : Integer ); // insert contents of a buffer at the given position - procedure AppendBuffer ( aBuffer : PChar ; aSize : Integer); // store buffer's contents behind the current file - procedure ReplaceSelection ( aBuffer : PChar ; aSize : Integer ); // replace the current selection with buffer's contents - function GetCursorPos : Integer; // the file position where the cursor position points to - function DeleteNibble ( const aPos : Integer ; const HighNibble : Boolean ) : Boolean; - function InsertNibble ( const aPos : Integer ; const HighNibble : Boolean ) : Boolean; - procedure ConvertRange ( const aFrom , aTo : Integer ; const aTransFrom , aTransTo : TTranslationType ); - procedure ClearOffsets; - procedure SetLineLengths ( aLengths : TList ); - property SelStart : Integer read GetSelStart write SetSelStart; // selection start - property SelEnd : Integer read GetSelEnd write SetSelEnd; // selection End ( can be less than selstart ) - property SelCount : Integer read GetSelCount; // amount of selected bytes (0..n), ReadOnly - property CanUndo : Boolean read fCanUndo; // is undo possible ? - property InCharField : Boolean read GetInCharField write SetInCharField; // is the cursor set to the right (char) field (true ) or to the hex field - property UndoDescription : string read fUndoDesc; // get the undo description string - property ReadOnlyFile : Boolean read fReadOnlyFile write SetReadOnlyFile ;// if the current file is ReadOnly, this is set to true - property Modified : Boolean read fModified write SetModified; // true, if changes have been made - property DataSize : Integer read GetDataSize; // get the size of the file - property Data [ Index : Integer] : Char read GetMemory write SetMemory; // get / set one byte(char) of the file - property AsText : string read GetAsText write SetAsText; // get / set all data from / to a string variable - property AsHex : string read GetAsHex write SetAsHex; // get / set all data from / to a hex string variable - property Canvas; - property Col; - property LeftCol; - property Row; - property TabStops; - property TopRow; - property Filename: string read FFilename; - property Marker [ Index : Byte ] : Integer read GetMarker write SetMarker; - property VariableLineLength : Boolean read fVariableLineLength write SetVariableLineLength; - property LineLength [ Index : Integer ] : Integer read GetLineLength write SetLineLength ; - property LineOffset [ Index : Integer ] : Integer read GetLineOffset ; - property IsInsertMode : Boolean read GetIsInsertMode; - published - { Published-Deklarationen } - property ShowMarkerColumn : Boolean read fShowMarkerCol write SetShowMarkerColumn default True; - property BytesPerColumn : Integer read GetBytesPerColumn write SetBytesPerColumn default 4; - property OnStateChanged : TNotifyEvent read fStateChanged write fStateChanged; // if selection/state has changed (for setting the e.g. undo-menu automatically) - property Translation : TTranslationType read fTranslation write SetTranslation; - property CreateBackup : Boolean read fCreateBackup write fCreateBackup default True; // if true, create backup file on saving modified files - property BackupExtension : string read fBackupExt write fBackupExt; // if above is true, save the backup file with this file name extension - property Align; - property BorderStyle; - property OffsetDisplay: TOffsetDisplayStyle read FOffsetDisplay write SetOffsetDisplay; - property BytesPerLine : Integer read fBytesPerLine write SetBytesPerLine; // get/set how many bytes per line - property CaretStyle: TCaretStyle read FCaretStyle write SetCaretStyle default csFull; - property Colors: TColors read fColors write SetColors; // get/set the colors (descr. at the top of this file) - property Ctl3D; - property DragCursor; - property DragMode; - property Enabled; - property FocusFrame: Boolean read FFocusFrame write SetFocusFrame; - property Font; - property GridLineWidth default 0; - property OffsetSeparator: Char read FOffsetChar write SetOffsetChar; - property SwapNibbles: Boolean read GetSwapNibbles write SetSwapNibbles default False; - property MaskWhiteSpaces : Boolean read fMaskWhiteSpaces write SetMaskWhiteSpaces default True; - property MaskChar : Char read fMaskChar write SetMaskChar default '.'; - property NoSizeChange : Boolean read fNoSizeChange write SetNoSizeChange default False; - property AllowInsertMode : Boolean read fAllowInsertMode write SetAllowInsertMode default False; - property AutoCaretMode : Boolean read fAutoCaretMode write SetAutoCaretMode default True; - property WantTabs : Boolean read FWantTabs write SetWantTabs default True; - property ReadOnlyView : Boolean read FReadOnlyView write SetReadOnlyView default False; - property ParentCtl3D; - property ParentShowHint; - property PopupMenu; - property ScrollBars; - property ShowHint; - property TabOrder; - property TabStop; - property Visible; - property OnClick; - property OnDblClick; - property OnDragDrop; - property OnDragOver; - property OnEndDrag; - property OnEnter; - property OnExit; - property OnKeyDown; - property OnKeyPress; - property OnKeyUp; - property OnMouseDown; - property OnMouseMove; - property OnMouseUp; - property OnStartDrag; - {for delphi 4} - {$ifdef ver120} - property Anchors; - property BiDiMode; - property Constraints; - property DragKind; - property ParentBiDiMode; - property OnEndDock; - property OnMouseWheel; - property OnMouseWheelDown; - property OnMouseWheelUp; - property OnStartDock; - {$EndIf} - end; - - THexToCanvas = class ( TComponent ) - private - fHexEditor : THexEditor; - fFont : TFont; - fTopM,fLeftM,fBottomM,fRightM : Integer; - fLpP,fBpL,fBpC : Integer; - fOffsDy , fMemDy : TOffsetDisplayStyle; - fCharDy : Boolean; - fOffsCr , fMemCr , fCharCr : Char; - fShrink , fStretch : Boolean; - fSwapNibbles : Boolean; - procedure SetFont ( Value : TFont ); - procedure SetHexEditor ( Value : THexEditor ); - protected - procedure Notification ( aComponent : TComponent ; aOperation : TOperation ) ; Override; - public - Constructor Create ( aOwner : TComponent ) ; override; - Destructor Destroy ; override; - function Draw ( aCanvas : TCanvas ; const aStart , aEnd : Integer ; const TopLine , BottomLine : string ) : Integer; - procedure GetLayout; - property TopMargin : Integer read fTopM write fTopM; - property LeftMargin : Integer read fLeftM write fLeftM; - property RightMargin : Integer read fRightM write fRightM; - property BottomMargin : Integer read fBottomM write fBottomM; - property LinesPerPage : Integer read fLpP; - published - property HexEditor : THexEditor read fHexEditor write SetHexEditor; - property Font : TFont read fFont write SetFont; - property BytesPerLine : Integer read fBpL write fBpL default 16; - property OffsetDisplay : TOffsetDisplayStyle read fOffsDy write fOffsDy default odHex; - property OffsetSeparator : Char read fOffsCr write fOffsCr default ':'; - property MemFieldDisplay : TOffsetDisplayStyle read fMemDy write fMemDy default odHex; - property MemFieldSeparator : Char read fMemCr write fMemCr default ';'; - property DisplayCharField : Boolean read fCharDy write fCharDy default True; - property CharFieldSeparator : Char read fCharCr write fCharCr default #0; - property ShrinkToFit : Boolean read fShrink write fShrink default True; - property StretchToFit : Boolean read fStretch write fStretch default True; - property BytesPerColumn : Integer read fBpC write fBpC default 2; - property SwapNibbles : Boolean read fSwapNibbles write fSwapNibbles default False; - end; - -function Min ( a1,a2:Integer):Integer; -function Max ( a1,a2:Integer):Integer; -function LongPoint ( aX , aY : LongInt ) : TLongPoint; -function IsKeyDown ( aKey : Integer ) : Boolean; - -// translate the buffer to THexEditor's translation mode -procedure TranslateBufferFromAnsi ( const TType : TTranslationType ; aBuffer , bBuffer : PChar ; const aCount : Integer ); - -// translate the buffer to ANSI from THexEditor's translation mode -procedure TranslateBufferToAnsi ( const TType : TTranslationType ; aBuffer , bBuffer : PChar ; const aCount : Integer ); - -// translate a hexadecimal data representation ("a000 cc45 d3 42"...) to its binary values -function ConvertHexToBin ( aFrom , aTo : PChar ; const aCount : Integer ; - const SwapNibbles : Boolean ; var BytesTranslated : Integer ) : PChar; - -// translate binary data to its hex representation -function ConvertBinToHex ( aFrom , aTo : PChar ; const aCount : Integer ; - const SwapNibbles : Boolean ) : PChar; - - -// translate a Integer value to an octal string -function IntToOctal ( const aValue : Integer ) : string; - -{$IFDEF VER120} -// the same for int64 -function Int64ToOctal ( const aValue : Int64 ) : string; -{$ENDIF} - -procedure Register; - -implementation - -const - // undo constants - U_Byte_changed = 0; - U_Byte_removed = 1; - U_Insert_buffer = 2; - U_Replace_Selection = 3; - U_Append_Buffer = 4; - U_Nibble_Insert = 5; - U_Nibble_Delete = 6; - U_Convert = 7; - - UndoSTR : array [U_Byte_changed..U_Convert] of string = ( - 'Byte changed', - 'Byte(s) removed', - 'Insert buffer', - 'Replace selection', - 'Append buffer', - 'Insert nibble', - 'Delete nibble', - 'Convert' ); - - cMax_Undo = 100; // max available undo steps - - // size of the buffer that can hold a part of the current file in memory for faster access - cBuf_Size = 65536; - - HexCHL = '0123456789abcdef'; - HexCHU= '0123456789ABCDEF'; - HexCHA= HexCHL+HexCHU; -{_______________________________________________________________________} - -function Invert(Color: TColor): TColor; -begin - Result := RGB(255 - GetRValue(Color), 255 - GetGValue(Color), 255 - GetBValue(Color)); -end; - -{_______________________________________________________________________} - -// translate the buffer from ANSI to the given translation mode -procedure TranslateBufferFromAnsi ( const TType : TTranslationType ; aBuffer , bBuffer : PChar ; const aCount : Integer ); -var - pct : Integer; - pch : Char ; -begin - case TType - of - ttAnsi : Move ( aBuffer^ , bBuffer^ , aCount ); - ttDOS8, - ttASCII : CharToOEMBuff ( aBuffer , bBuffer , aCount ); - ttMAC : if aCount > 0 - then - for pct := 0 to Pred ( aCount ) - do begin - pch := aBuffer [pct]; - if pch < #128 - then - bBuffer [ pct] := pch - else - bBuffer [ pct ] := ctISOToMac [ Ord ( pch ) ]; - end; - ttEBCDIC : if aCount > 0 - then - for pct := 0 to Pred ( aCount ) - do - bBuffer [ pct] := ctISOToEBCDIC[Ord(aBuffer [pct])]; - end; -end; - -{_______________________________________________________________________} - -// translate the buffer to ANSI from the given translation mode -procedure TranslateBufferToAnsi ( const TType : TTranslationType ; aBuffer , bBuffer : PChar ; const aCount : Integer ); -var - pct : Integer; - pch : Char ; -begin - case TType - of - ttAnsi : Move ( aBuffer^ , bBuffer^ , aCount ); - ttDOS8, - ttASCII : OEMToCharBuff ( aBuffer , bBuffer , aCount ); - ttMAC : if aCount > 0 - then - for pct := 0 to Pred ( aCount ) - do begin - pch := aBuffer [pct]; - if pch < #128 - then - bBuffer [ pct] := pch - else - bBuffer [ pct ] := ctMacToISO [ Ord ( pch ) ]; - end; - ttEBCDIC : if aCount > 0 - then - for pct := 0 to Pred ( aCount ) - do - bBuffer [ pct] := ctEBCDICToISO[Ord(aBuffer [pct])]; - end; -end; - -{_______________________________________________________________________} - -function FillLeft (const FillChar : Char ; const IntStr : string ; const MaxLen : Integer):string; -begin - Result := IntStr; - while Length ( Result ) < MaxLen - do - Result := FillChar+Result; -end; - -{_______________________________________________________________________} - -function OEMChar ( aByte : Byte ) : Char; -var - psr : string; -begin - psr := Char(aByte)+#0; - OEMToChar ( @psr[1] , @psr[1] ); - Result := psr[1]; -end; - -{_______________________________________________________________________} - -function CharOEM ( aByte : Byte ) : Char; -var - psr : string; -begin - psr := Char(aByte)+#0; - CharToOEM ( @psr[1] , @psr[1] ); - Result := psr[1]; -end; - -{_______________________________________________________________________} - -procedure Register; -begin - RegisterComponents('Merkes'' Pages', [THexEditor , THexToCanvas]); -end; - -function GetTempName : string; -var - pPT : string; -begin - SetLength ( pPT , MAX_PATH+1); - SetLength ( pPt , GetTempPath ( MAX_PATH , @pPt[1] )); - pPT := Trim ( pPT ); - if pPT[Length ( ppT)] <> '\' - then - pPT := pPT+'\'; - repeat - Result := pPT+IntToHex(GetTickCount , 8)+'.MPHT'; - until not FileExists ( Result ); -end; - -function CanOpenFile ( const aName : TFileName; var ReadOnly : Boolean ) :Boolean; -var - fHandle : THandle ; -begin - Result := False; - ReadOnly := True; - if FileExists ( aName ) - then begin - fHandle := FileOpen ( aName , fmOpenRead or fmShareDenyNone ); - if fHandle <> INVALID_HANDLE_VALUE - then begin - FileClose ( fHandle ); - Result := True; - fHandle := FileOpen ( aName , fmOpenReadWrite); - if fHandle <> INVALID_HANDLE_VALUE - then begin - FileClose ( fHandle ); - ReadOnly := False; - end; - end; - end; -end; - -function IsKeyDown ( aKey : Integer ) : Boolean; -begin - Result := (GetKeyState( aKey) and (not 1)) <> 0; -end; - -function Min ( a1,a2:Integer):Integer; -begin - if a1 < a2 - then - Result := a1 - else - Result := a2; -end; - -function Max ( a1,a2:Integer):Integer; -begin - if a1 > a2 - then - Result := a1 - else - Result := a2; -end; - -function LongPoint ( aX , aY : LongInt ) : TLongPoint; -begin - Result.x := aX; - Result.y := aY; -end; - -// translate a hexadecimal data representation ("a000 cc45 d3 42"...) to its binary values -function ConvertHexToBin ( aFrom , aTo : PChar ; const aCount : Integer ; - const SwapNibbles : Boolean ; var BytesTranslated : Integer ) : PChar; -var - lHi : Boolean; - lCT : Integer; - lBy : Byte; - lNb : Char; -begin - Result := aTo; - BytesTranslated := 0; - lHi := True; - lBy := 0; - for lCT := 0 to Pred ( aCount ) - do - if Pos ( aFrom[lCT] , HexCHA ) <> 0 - then begin - lNB := UpCase ( aFrom[lCT] ); - if lHi - then - lBY := ((Pos ( lNB , HexCHU) -1 )*16) - else - lBy := lBy or ((Pos ( lNB , HexCHU) -1 )); - lHI := not lHI; - if lHI - then begin - if SwapNibbles - then - aTo [BytesTranslated] := Char(((lBy and 15)*16) or ((lBy and $f0) shr 4)) - else - aTo [BytesTranslated] := Char(lBY); - Inc ( BytesTranslated); - end; - end; -end; - -// translate binary data to its hex representation -function ConvertBinToHex ( aFrom , aTo : PChar ; const aCount : Integer ; - const SwapNibbles : Boolean ) : PChar; -var - lCT : Integer; - lBy : Byte; - lCX : Integer; -begin - Result := aTo; - lCX := 0; - for lCT := 0 to Pred ( aCount ) - do begin - lBy := Ord ( aFrom[lCT] ); - if SwapNibbles - then begin - aTo[lCX] := UpCase ( HexCHU[(lBY and 15)+1] ); - aTo[lCX+1] := UpCase ( HexCHU[(lBY shr 4)+1] ) - end - else begin - aTo[lCX+1] := UpCase ( HexCHU[(lBY and 15)+1] ); - aTo[lCX] := UpCase ( HexCHU[(lBY shr 4)+1] ) - end; - Inc ( lCX , 2 ); - end; - aTO [ lCX ] := #0; -end; - -{* octal stuff *} - -const gOctalChars = '01234567'; - -// translate a Integer value to an octal string -function IntToOctal ( const aValue : Integer ) : string; -var - lVal : Integer; -begin - Result := ''; - lVal := aValue; - repeat - Result := gOctalChars[(lVal mod 8)+1] + Result; - lVal := lVal shr 3; - until lVal = 0; - Result := '0'+Result; -end; - -{$IFDEF VER120} -// the same for int64 -function Int64ToOctal ( const aValue : Int64 ) : string; -var - lVal : Int64; -begin - Result := ''; - lVal := aValue; - repeat - Result := gOctalChars[(lVal mod 8)+1] + Result; - lVal := lVal shr 3; - until lVal = 0; - Result := '0'+Result; -end; -{$ENDIF} - - - -(* THexEditor Implementation *) - -constructor THexEditor.Create ( aOwner : TComponent ) ; -begin - inherited Create ( aOwner ); - fColors := TColors.Create(Self); - - ParentColor := False; - fIntFile := nil; - fUndoMem := nil; - - Color := fColors.Background; - - fCharWidth := -1; - fShowMarkerCol := True; - fOffSetDisplayWidth := -1; - fBytesPerLine := 16; - fOffsetChar := ':'; - fOffsetDisplay := odHex; - FCaretStyle := csFull; - FFocusFrame := True; - fSwapNibbles := 0; - FFilename := '---'; - - Font.Name := 'Courier'; - Font.Size := 12; - BorderStyle := bsSingle; - DefaultDrawing := False; - Options := [goVertLine, goHorzLine,goTabs,gOThumbTracking]; - GridLineWidth := 0; - fBytesPerColumn := 4; - CTL3D := False; - Cursor := crIBeam; - fChangedBytes := TBits.Create; - FillChar ( fMarker[0] , SizeOf ( fMarker ) , $ff ); - fSelST := -1; - fSelPO := -1; - fSelEN := -1; - fIsSelecting := False; - ResetUndo; - DefaultColWidth := 0; - DefaultRowHeight := 0; - ColCount := fBytesPerLine*3+3; - RowCount := 1; - fTranslation := ttAnsi; - fCanUndo := False; - fModified := False; - fReadOnlyFile := True; - fCreateBackup := True; - fBackupExt := '.bak'; - fInterNalName := GetTempName; - fIntBufferPos := -1; - GetMem ( fIntBuffer , cBuf_Size ); - fDataSize := -1; - fBPL2 := 2*fBytesPerLine; - fLastKeyWasALT := False; - fMaskWhiteSpaces := True; - fMaskChar := '.'; - fCaretBitmap := TBitmap.Create; - fNoSizeChange := False; - fVariableLineLength := False; - fOffsets := TList.Create; - fAllowInsertMode := False; - fInsertOn := False; - fAutoCaretMode := True; - fWantTabs := True; - fReadOnlyView := False; -end; - -procedure THexEditor.FreeFile; -begin - if fIntFile <> nil - then begin - // ~~~ask for saving changes - fIntFile.Size := 0; - fIntFile.Free; - fIntFile := nil; - end; -end; - -destructor THexEditor.Destroy ; -begin - FreeFile; - if fUndoMem <> nil - then begin - fUndoMem.Size := 0; - fUndoMem.Free; - fUndoMem := nil; - end; - fChangedBytes.Free; - if FileExists ( fInterNalName ) - then - DeleteFile ( fInternalName ); - - FreeMem ( fIntBuffer , cBuf_Size ); - - fColors.Free; - fCaretBitmap.Free; - fOffsets.Clear; - fOffsets.Free; - inherited Destroy; -end; - -procedure THexEditor.AdjustMetrics; -var - pCT : Integer; -begin - Canvas.Font.Assign ( Font ); - fCharWidth := Canvas.TextWidth ( 'w' ); - - SetOffsetDisplayWidth; - ColWidths[1] := fCharWidth * Integer(fShowMarkerCol); - - for pCT := 0 to Pred ( fBytesPerLine * 2) - do - if (((pCT+2) mod fBytesPerColumn) = 1) - then - ColWidths[pCT+2] := fCharWidth *2 - else - ColWidths[pCT+2] := fCharWidth ; - - for pCT := fBytesPerLine * 2 to (fBytesPerLine*3) - do - ColWidths[pCT+2] := fCharWidth; - - fCharHeight := Canvas.TextHeight( 'yY')+2; - DefaultRowHeight := fCharHeight; -end; - -function THexEditor.GetDataSize : Integer; -begin - Result := fDataSize; - if (fDataSize = -1) or (fIntBufferPos = -1) - then begin - if fIntFile = nil - then - Result := 0 - else - Result := fIntFile.Size; - fDataSize := Result - end -end; - -procedure THexEditor.CreateEmptyFile; -begin - FreeFile; - - FFilename := TempName; - ResetUndo; - ResetSelection(False); - fChangedBytes.Size := 0; - CalcSizes; - fModified := False; - fReadOnlyFile := True; - MoveColRow ( 2 , 0 , True , True ); -end; - -function THexEditor.SaveToStream(Strm: TStream): Boolean; -var - MemStrm: TMemoryStream; - pCr : TCursor; -begin - Result := True; - pCr := Cursor; - Cursor := crHourGlass; - MemStrm := TMemoryStream.Create; - try - try - fIntFile.Position := 0; - MemStrm.LoadFromStream(fIntFile); - MemStrm.SaveToStream(Strm); - except - Result := False; - end; - finally - MemStrm.Free; - Cursor := pCr; - end; -end; - -function THexEditor.SaveToFile(const Filename: string): Boolean; -var - pCr : TCursor; -begin - Result := True; - pCr := Cursor; - Cursor := crHourGlass; - try - if fCreateBackup and fModified and ( fFileName = FileName ) - then - if not CopyFile ( PChar ( FileName ) , PChar ( ChangeFileExt ( FileName , fBackupExt)) , False ) - then - Exit; - - try - fIntFile.Free; - Result := CopyFile ( PChar ( fInternalName ) , PChar ( FileName ) , False ); - except - Result := False; - end; - - fIntFile := tFileStream.Create ( fInternalName , fmOpenReadWrite ); - - if Result - then begin - fChangedBytes.Size := 0; - fModified := False; - fReadOnlyFile := False; - fFilename := Filename; - ResetUndo; - end; - finally - Cursor := pCr; - Invalidate; - end; -end; - -function THexEditor.LoadFromStream(Strm: TStream): Boolean; -var - pCR : TCursor; - MemStrm: TMemoryStream; -begin - - FreeFile; - - pCR := Cursor; - Cursor := crHourGlass; - - MemStrm := TMemoryStream.Create; - try - MemStrm.CopyFrom(Strm, Strm.Size - Strm.Position); - MemStrm.SaveToFile(fInternalName); - finally - MemStrm.Free; - end; - - SetFileAttributes ( PChar ( fInterNalName ) , 0 ); - - fIntFile := TFileStream.Create ( fInterNalName , fmOpenReadWrite ); - try - fIntFile.Position := 0; - Result := True; - finally - Cursor := pCR; - ResetUndo; - fChangedBytes.Size := 0; - CalcSizes; - fModified := False; - fIsSelecting := False; - MoveColRow ( 2 , 0 , True , True ); - end; -end; - -function THexEditor.LoadFromFile(const Filename: string): Boolean; -var - pCR : TCursor; -begin - Result := True; - - if CanOpenFile(FileName, fReadOnlyFile) then begin - FreeFile; - pCR := Cursor; - Cursor := crHourGlass; - CopyFile (PChar (FileName), PChar(fInternalName), False); - SetFileAttributes ( PChar ( fInterNalName ) , 0 ); - fIntFile := TFileStream.Create ( fInterNalName , fmOpenReadWrite ); - try - fIntFile.Position := 0; - FFilename := Filename; - Result := True; - finally - Cursor := pCR; - ResetUndo; - fChangedBytes.Size := 0; - CalcSizes; - fModified := False; - fIsSelecting := False; - MoveColRow ( 2 , 0 , True , True ); - end; - end -end; - -procedure THexEditor.CalcSizes; - - function CalcVarRowCount : Integer; - var - pCT,pPos : Integer; - begin - pCT := DataSize div fBytesPerLine; - pPos := 0; - while pPos < DataSize - do begin - pPos := LineOffset [ pCT]; - Inc ( pCT ); - end; - Result := Max( 0 , pCT-1); - end; - - -begin - fDataSize := -1; - - if fChangedBytes.Size > DataSize - then - fChangedBytes.Size := DataSize; - - if DataSize < 1 - then begin - FixedCols := 2; - RowCount := 1; - ColCount := fBytesPerLine*3+3; - if fOffsets.Count = 0 - then - LineLength[0] := fBytesPerLine; - - end - else - begin - if not fVariableLineLength - then - RowCount := (DataSize + (fBytesPerLine-1)) div fBytesPerLine - else - RowCount := CalcVarRowCount; - - ColCount := fBytesPerLine*3+3; - FixedCols := 2; - end; - FixedRows := 0; - fIntBufferPos := -1; - AdjustMetrics; -end; - -function THexEditor.TranslateFromAnsiChar ( aByte : Byte ) : Char; -begin - case fTranslation - of - ttAnsi : begin - if aByte < 32 - then - Result := #0 - else - Result := Char ( aByte ); - end; - ttDos8, - ttASCII : begin - if ((fTranslation = ttDos8) or (aByte < 128)) and (aByte > 31) - then - Result := CharOem ( aByte ) - else - Result := #0; - end; - ttMac : begin - if aByte < 32 - then - Result := #0 - else - if aByte < 128 - then - Result := Char ( aByte ) - else - Result := ctISOToMac [ aByte ]; - end; - ttEBCDIC : begin - Result := ctISOToEBCDIC[ aByte ]; - end; - else - Result := #0; - end; -end; - - -function THexEditor.TranslateToAnsiChar ( aByte : Byte ) : Char ; -begin - case fTranslation - of - ttAnsi : begin - Result := Char ( aByte ); - end; - ttDos8, - ttASCII : begin - Result := OemChar ( aByte ); - if ((fTranslation = ttASCII) and (aByte > 127)) - then - Result := fMaskChar; - end; - ttMac : begin - if aByte < 128 - then - Result := Char ( aByte ) - else - Result := ctMacToISO [ aByte ]; - end; - ttEBCDIC : begin - Result := ctEBCDICToISO[ aByte ]; - if Result = #0 - then - Result := fMaskChar; - end; - else - Result := fMaskChar; - end; - - if fMaskWhiteSpaces and (Result < #32 ) - then - Result := fMaskChar; - -end; - -function THexEditor.OutOfBounds ( const aCol , aRow : Integer ) : Boolean; -// check when VariableLineLength is true, if this given point is not a valid cell -var - pInCH : Boolean; - pMaxCol : Integer; -begin - Result := False; - if not fVariableLineLength - then - Exit; - - pInCH := aCol > (2 + fBPL2); - - if pInCH - then - pMaxCol := (fBytesPerLine *2) + 2 +LineLength[aRow] - else - pMaxCol := (LineLength[aRow]*2)+1 ; - - Result := (aCol > pMaxCol); - -end; - - - -procedure THexEditor.DrawCell( ACol, ARow: Longint; ARect: TRect; - AState: TGridDrawState); -var - pTMP : Boolean; - pOddCol: Boolean; - pChan: Boolean; - pSZ : Integer; - pAP : Integer; - pCO : string; - pSFR : string; - pCanText,pCanBrush : TColor; - - procedure _TextOut; - begin - with Canvas - do begin - SetTextColor ( Handle , ColorToRGB ( pCanText )); - SetBKColor ( Handle , ColorToRGB ( pCanBrush )); - ExtTextOut( Handle, aRect.Left, aRect.Top, ETO_CLIPPED or ETO_OPAQUE, @aRect, PChar(pco), - Length(pco), nil); - end; - end; - -begin - if (aRow = 0) and (DataSize < 1) - then begin - pCO := ' '; - if aCol = 0 - then - case fOffsetDisplay - of - odHex : pCO := '0x0'+ FOffsetChar; - odDec : pCO := '0'+FOffsetChar; - odOctal: pCO := 'o 0'+FOffsetChar; - end; - - pCanBrush := fColors.Background; - pCanText := Colors.Offset; - _TextOut; - if aCol = 2 - then begin - SetCaretPos ( aRect.Left , aRect.Top ); - end; - Exit; - end; - - pAP := LineOffset[aRow]; - - if aCol = 0 - then begin - case fOffsetDisplay - of - odNone : pCO := ' '; - odHex : pCO := '0x'+IntToHex( pAP , fOffsetDisplayWidth-3)+ FOffsetChar; - odDec : pCO := FillLeft(' ',IntToStr( pAP ), fOffsetDisplayWidth-1)+FOffsetChar; - odOctal: pCO := 'o '+FillLeft ( '0',IntToOctal ( pAP ) , fOffsetDisplayWidth-3)+fOffsetChar; - end; - pCanBrush := fColors.Background; - pCanText := Colors.Offset; - _TextOut; - Exit; - end; - - // testen ob Marker hier sitzt - // test if the marker have been positonned - if (aCol = 1) - then begin - if (IsMarkerPos ( aRow) > -1) - then begin - pCanText := fColors.PositionText; - pCanBrush := fColors.PositionBackground; - - pSZ := Canvas.Font.Size; - pSFR := Canvas.Font.Name; - Canvas.Font.Name := 'Arial'; - Canvas.Font.Size := Round ( psZ * 0.75); - pCO := IntToStr(IsMarkerPos ( aRow)); - _TextOut; - Canvas.Font.Size := pSZ; - Canvas.Font.Name := psFr; - end - else begin - pCanBrush := fColors.Background; - pCanText := Font.Color; - pCO := ' '; - _TextOut; - end; - Exit; - end; - - // empty cell ... xx xx_xxxx... - if (aCol = fBPL2+2) - then begin - pCanBrush := fColors.Background; - pCanText := Font.Color; - pCO := ' '; - _TextOut; - Exit; - end; - - CheckInternalBuffer ( pAP ); - - pAP := GetPosAtCursor ( aCol , aRow ); - - if (pAP >= DataSize) or (fVariableLineLength and OutOfBounds ( aCol , aRow )) - then begin - pCanBrush := fColors.Background; - pCanText := Font.Color; - pCO := ' '; - _TextOut; - Exit; - end; - - if not fPosInChars - then begin // partie hexadecimale - if ((aCol-2) mod 2) = fSwapNibbles - then - pCO := HexCHU[fIntBuffer[pAP - fIntBufferPos] shr 4+1] - else - pCO := HexCHU[fIntBuffer[pAP - fIntBufferPos] and 15+1] - end - else - pCO := TranslateToAnsiChar ( fIntBuffer[pAP - fIntBufferPos] ); - - // testen ob byte geändert - // test if byte have been changed - pChan := (HasChanged ( pAP ) ); - pOddCol := (((aCol-2) div fBytesPerColumn) mod 2)=0; - - if pChan - then begin - pCanText := fColors.ChangedText; - pCanBrush := fColors.ChangedBackground; - end - else begin - pCanBrush := fColors.Background; - pCanText := Font.Color; - - if not fPosInChars - then - if pOddCol - then - pCanText := Colors.OddColumn - else - pCanText := Colors.EvenColumn; - end; - - if (fSelPO <> -1) and IsSelected ( pAP ) - then begin - pSZ := pCanBrush; - pCanBrush := pCanText; - pCanText := pSZ; - - if not (PChan or fPosInChars) - then - if pOddCol - then - pCanText := Colors.FOddInverted - else - pCanText := Colors.FEvenInverted; - end; - - _TextOut ; - - if aRow = Row - then begin - if (aCol = Col) - then begin // Cursor ausgeben - if Focused - then begin - SetCaretPos ( aRect.Left , aRect.Top ); - end - end - else - if (GetOtherFieldCol ( Col , pTMP) = aCol) and Focused - then begin - if FFocusFrame - then - Canvas.DrawFocusRect(Rect(aRect.Left,aRect.Top,aRect.Left+fCharWidth,aRect.Bottom)) - else begin - Canvas.Pen.Color := fColors.CursorFrame; - Canvas.Brush.Style := bsClear; - Canvas.Rectangle ( aRect.Left , aRect.Top , aRect.Left+fCharWidth , aRect.Bottom ); - end; - end - end; -end; - -{$ifdef _debug} -procedure THexEditor.ShowSelState; -begin - if fIsSelecting - then begin - TForm(Owner).Caption := 'a' - end - else - TForm(Owner).Caption := '-'; -end; -{$endif} - -function THexEditor.SelectCell(ACol, ARow: Longint): Boolean; -var - pRow : Integer; - pRect : TRect; - pTMP : Boolean; - pOC : Integer; -begin - pRow := Row; - {$ifdef _debug} - ShowSelState; - {$endif} - if DataSize > 0 - then - Result := CheckSelectCell ( aCol , aRow ) - else begin - if not ((aCol = 2) and (aRow = 0)) - then - Result := False - else begin - Result := True; - Exit; - end; - end; - if Result - then begin - // cursor in anderem feld löschen - pOC := GetOtherFieldCol ( Col , pTMP ); - pRect := CellRect ( pOC , pRow); - InvalidateRect ( Handle , @pRect , False ); - - // cursor in anderem feld setzen - pOC := GetOtherFieldCol ( aCol , pTMP ); - pRect := CellRect ( pOC , aRow); - InvalidateRect ( Handle , @pRect , False ); - - if fIsSelecting - then - Select ( Col , Row , aCol , aRow ) - else - ResetSelection( True); - - // caret neu setzen - pRect := CellRect ( aCol , aRow); - SetCaretPos ( pRect.Left , pRect.Top ); - end; -end; -// Obtient la position dans le fichier à partir de la position du curseur -function THexEditor.GetPosAtCursor ( const aCol , aRow : Integer ) : Integer; -begin - fPosInChars := aCol > (2 + fBPL2); - Result := LineOffset[aRow]; - if fPosInChars - then - Result := Result+ (aCol - (3 + fBPL2)) - else - Result := Result+ ((aCol -2) div 2); - - if Result < 0 - then - Result := 0; -end; - -function THexEditor.GetRow ( const aPos : Integer ) : Integer; -var - pct : Integer; -begin - if not fVariableLineLength - then - Result := aPos div fBytesPerLine - else begin - Result := 0; - for pct := 0 to RowCount - 1 - do begin - if LineOffset[pct] > aPos - then begin - Result := pct -1; - Break; - end; - Result := RowCount -1; - end; - end; -end; - -function THexEditor.GetCursorAtPos ( aPos : Integer ; aChars : Boolean ) : TLongPoint; -var - pct : Integer; -begin - if aPos < 0 - then begin - Result.y := 0; - Result.x := 2; - Exit; - end; - - Result.y := GetRow ( aPos ); - if not fVariableLineLength - then - pct := aPos mod fBytesPerLine - else - pct := aPos - LineOffset[Result.y]; - - if aChars - then - Result.x := pct + (3 + fBPL2) - else - Result.x := (pct *2 ) +2; - -end; - -function THexEditor.GetOtherFieldCol ( aCol : Integer ; var Chars : Boolean ) : Integer; -var - pct : Integer; -begin - Chars := aCol > (2 + fBPL2); - if Chars - then begin - pct := (aCol - (3 + fBPL2)); - Result := (pct * 2)+2; - end - else begin - pct := ((aCol -2) div 2); - Result := pct + (3 + fBPL2); - end; -end; - -function THexEditor.CheckSelectCell ( aCol , aRow : Integer ) : Boolean; -var - pTP : TLongPoint; -const - pCan : Boolean = True; - pClicked : Boolean = False; -begin - Result := Inherited SelectCell ( aCol , aRow ); - - if (Result and fVariableLineLength and OutOfBounds ( aCol , aRow )) - then - Result := False; - - if not pCan - then - Exit; - try - pCan := False; - if Result - then begin - // überprüfen, ob linke maustaste oder shift gedrückt, sonst selection zurücksetzen - if not (IsKeyDown ( VK_SHIFT) or IsKeyDown ( VK_LBUTTON) ) - then - ResetSelection ( True ); - - // überprüfen, ob außerhalb der DateiGröße - if GetPosAtCursor ( aCol , aRow ) >= DataSize - then begin - GetPosAtCursor ( Col , Row ); - pTP := GetCursorAtPos ( DataSize - 1 , fPosInChars ); - MoveColRow ( pTP.x , pTP.y , True , True ); - Result := False; - end - else - if aCol = (2 + fBPL2 ) - then begin - Result := False; - if IsKeyDown ( VK_LBUTTON ) - then begin - aCol := aCol -1; - aCol := Max ( 2 , aCol ); - MoveColRow ( aCol , aRow , True , True ); - Exit; - end; - end; - - end; - finally - pCan := True; - end; - -end; - -procedure THexEditor.WMChar(var Msg: TWMChar); -var - pPos : Integer; - pCH : Char; - pOldBT , pNewBT : Byte; - pTP : TLongPoint; -begin - pCH := Char ( Msg.CharCode ); - if Assigned ( OnKeyPress ) - then - OnKeyPress ( Self , pCH ); - - if fReadOnlyView - then - Exit; - - {$ifdef _debug} - TForm(Owner).Caption := Char ( Msg.CharCode); - {$endif} - pPos := GetPosAtCursor ( Col , Row ); - if (pPos >= DataSize ) and not IsInsertMode - then - Exit; - if not fPosInChars // Zone d'affichage hexadecimale - then begin - // hex-eingabe, nur 0..9 , a..f erlaubt - if Pos ( pCH , HexCHA ) <> 0 - then begin - pCH := UpCase ( pCH ); - - if not IsInsertMode - then - ResetSelection ( True ); - - pTP := GetCursorAtPos ( pPos , fPosInChars ); - // Obtient la valeur du byte dans le fichier (OldByte) - if DataSize > pPos - then - pOldBT := GetByteAtPos ( pPos ) - else - pOldBT := 0; - - if (pTP.x = (Col - fSwapNibbles)) or (SelCount <> 0) - then - pNewBT := pOldBT and 15 + ((Pos ( pCH , HexCHU) -1 ) * 16) - else - pNewBT := (pOldBT and $F0) + (Pos ( pCH , HexCHU) -1 ); - - if IsInsertMode and ((pTP.x = Col ) or (SelCount > 0)) - then begin - - if fSwapNibbles = 0 - then - pNewBt := pNewBt and $f0 - else - pNewBT := pNewBt and $0f; - - if DataSize = 0 - then - AppendBuffer ( @pNewBT , 1 ) - else - if SelCount = 0 - then - InsertBuffer(@pNewBT, 1, pPos) - else - ReplaceSelection ( @pNewBT , 1 ); - end - else begin - ChangeByte(pOldBT, pNewBT, pPos, Col, Row); - if IsInsertMode and (pTP.x <> Col) and (pPos+1 = DataSize) - then begin - pNewBT := 0; - AppendBuffer ( @pNewBT , 1 ); - Exit;//ParseKeyDown ( [] , Char(VK_LEFT) ); - end; - end; - - ParseKeyDown ( [] , Char(VK_RIGHT) ); - end; - end - else begin - // zeichen-eingabe, alle zeichen erlaubt - if not fLastKeyWasALT // if the key has been entered via ALT + NUMPAD (0..9), make no translation (except oem to ansi) - then - pCH := TranslateFromAnsiChar ( Ord(pCH) ) - else - pCH := CharOEM(Ord(pCH)); // this doesn't work with all chars, but i don't know how to solve it - - if (pch < #32) and (not fLastKeyWasALT) - then - Exit; - - fLastKeyWasALT := False; - - if not IsInsertMode - then - ResetSelection ( True ); - - pTP := GetCursorAtPos ( pPos , fPosInChars); - pOldBT := GetByteAtPos ( pPos ); - - if IsInsertMode - then begin - if SelCount > 0 - then - ReplaceSelection ( @pCH , 1 ) - else - InsertBuffer(@pCH, 1, pPos) - end - else - ChangeByte(pOldBT, Ord(pCH), pPos, Col, Row); - ParseKeyDown ( [] , Char(VK_RIGHT) ); - end; -end; - -procedure THexEditor.SetByteAtPos ( aPos : Integer ; aByte : Byte ); -begin - fIntFile.Position := aPos; - fIntFile.Write ( aByte , SizeOf ( Byte ) ); -end; - -function THexEditor.GetByteAtPos ( aPos : Integer ) : Byte; -begin - fIntFile.Position := aPos; - fIntFile.Read ( Result , SizeOf ( Byte ) ); -end; - -procedure THexEditor.GetMemAtPos ( aBuffer : PByteArray ; aPos , aCount : Integer ); -begin - fIntFile.Position := aPos; - fIntFile.Read ( aBuffer^ , aCount ); -end; - -procedure THexEditor.SetMemAtPos ( aBuffer : PByteArray ; aPos , aCount : Integer ); -begin - fIntFile.Position := aPos; - fIntFile.Write ( aBuffer^ , aCount ); -end; - -{-------------------------------------------------------------------------------} -// *** procedure THexEditor.ChangeByte*** -// Change la valeur du byte -// Renseigne la structure Undo -{-------------------------------------------------------------------------------} -procedure THexEditor.ChangeByte ( aOldByte , aNewByte : Byte ; aPos , aCol , aRow : Integer ); -var - pRect : TRect; - pTMP : Boolean; - pCol : Integer; - pTP : TLongPoint; -begin - if aOldByte = aNewByte - then - Exit; - - if not CreateUndo ( U_Byte_changed , aPos , 1 , 0) - then - Exit; - - // Ecrit dans le fichier - SetByteAtPos ( aPos , aNewByte ); - SetInternalBufferByte ( aPos , aNewByte ); - if not IsInsertMode - then - fChangedBytes.Bits[aPos] := True; - pTP := GetCursorAtPos ( aPos , False ); - aCol := pTP.x; - pCol := GetOtherFieldCol ( aCol , pTMP ); - pRect := BoxRect ( aCol , aRow , aCol+1 , aRow ); - InvalidateRect ( Handle , @pRect , False ); - pRect := BoxRect ( pCol , aRow , pCol , aRow ); - InvalidateRect ( Handle , @pRect , False ); -end; - -function THexEditor.ParseKeyDown ( aShift : TShiftState ; aChar : Char ) : Boolean; - - function CheckIfLastCol ( const aCol , aRow : Integer ) : Boolean; - begin - Result := (not OutOfBounds ( aCol , aRow )) and OutOfBounds ( aCol+1 , aRow ); - end; - - function GetLastCol ( const aCol , aRow : Integer ) : Integer; - begin - if aCol > (2 + fBPL2) - then - Result := 3+fBPL2 - else - Result := 2; - while not((not OutOfBounds ( Result , aRow )) and OutOfBounds ( Result+1 , aRow )) - do - Inc ( Result ); - end; - - -var - pCT : Integer; - pTP : TLongPoint; - pRow : Integer; - pLastCol : Boolean; -begin - Result := False; - pLastCol := False; - - if not ((aShift <> [] ) or (aChar = #16)) - then - if not IsInsertMode - then - ResetSelection( True); - - if aChar = Char ( VK_PRIOR) - then begin - if fVariableLineLength - then - pLastCol := CheckIfLastCol (Col , Row ); - - if ssCtrl in aShift - then begin - // go to the first visible line - pRow := TopRow; - pCT := Col; - if pRow > -1 - then begin - if fVariableLineLength and pLastCol - then - pCT := GetLastCol ( pCT , pRow ) - else - while OutOfBounds ( pCT , pRow ) - do - Dec ( pCT ); - - - MoveColRow ( pCT , pRow , True , True ); - end; - end - else begin - // scroll up one page - pRow := Max ( 0 , Row - VisibleRowCount+1); - TopRow := Max ( 0 , TopRow - VisibleRowCount+1); - pCT := Col; - if pRow > -1 - then begin - if fVariableLineLength and pLastCol - then - pCT := GetLastCol ( pCT , pRow ) - else - while OutOfBounds ( pCT , pRow ) - do - Dec ( pCT ); - - MoveColRow ( pCT , pRow , True , True ); - end; - - end; - - Result := True; - end; - - if aChar = Char ( VK_NEXT ) - then begin - if fVariableLineLength - then - pLastCol := CheckIfLastCol (Col , Row ); - if ssCtrl in aShift - then begin - // go to the Last visible line - pRow := Min ( RowCount - 1 , TopRow+VisibleRowCount-1); - pCT := Col; - if pRow > -1 - then begin - if fVariableLineLength and pLastCol - then - pCT := GetLastCol ( pCT , pRow ) - else - while OutOfBounds ( pCT , pRow ) - do - Dec ( pCT ); - MoveColRow ( pCT , pRow , True , True ); - end; - end - else begin - // scroll down one page - pRow := Min ( RowCount - 1 , Row + VisibleRowCount-1); - TopRow := Min ( Max ( 0 , RowCount - VisibleRowCount ) , TopRow + VisibleRowCount-1); - pCT := Col; - if pRow > -1 - then begin - if fVariableLineLength and pLastCol - then - pCT := GetLastCol ( pCT , pRow ) - else - while OutOfBounds ( pCT , pRow ) - do - Dec ( pCT ); - - MoveColRow ( pCT , pRow , True , True ); - end; - - end; - - Result := True; - end; - - - - if aChar = Char ( VK_HOME ) - then begin - GetPosAtCursor ( Col , Row ); - if (ssCtrl in aShift ) - then begin // strg+pos1 - if not fPosInChars - then - MoveColRow ( 2,0 , True,True ) - else - MoveColRow ( GetOtherFieldCol ( 2 , fPosInChars ) , 0 , True , True ); - end - else - begin // normaler zeilenstart - if not fPosInChars - then - MoveColRow ( 2,Row , True,True ) - else - MoveColRow ( GetOtherFieldCol ( 2 , fPosInChars ) , Row , True , True ); - end; - Result := True; - end; - - if aChar = Char ( VK_END ) - then begin - GetPosAtCursor ( Col , Row ); - if (ssCtrl in aShift ) - then begin // strg+end - pTP := GetCursorAtPos ( DataSize - 1 , fPosInChars); - MoveColRow ( pTP.x,pTP.y , True,True ) - end - else - begin // normales zeilenende - if not fPosInChars - then begin - pCT := GetPosAtCursor (2 , Row+1 )-1; - if pCT >= DataSize - then - pCT := DataSize -1; - pTP := GetCursorAtPos ( pCT , fPosInChars ); - MoveColRow ( pTP.x , pTP.y , True,True ) - end - else begin - pCT := GetPosAtCursor (2 , Row+1 )-1; - if pCT >= DataSize - then - pCT := DataSize -1; - pTP := GetCursorAtPos ( pCT , True ); - MoveColRow ( pTP.x , pTP.y , True,True ) - end - end; - Result := True; - end; - - if (aChar = Char ( VK_LEFT )) and ( not (ssCTRL in aShift )) - then begin - pCT := GetPosAtCursor ( Col , Row ) -1; - if fPosInChars - then begin - if pCT < 0 - then - pCT := 0; - pTP := GetCursorAtPos ( pCT , fPosInChars ); - MoveColRow ( pTP.x , pTP.y , True , True ); - end - else - begin - pct := pct +1; - pTP := GetCursorAtPos ( pCT , False ); - if pTP.x < Col - then - MoveColRow ( Col - 1 , Row , True , True ) - else begin - pCT := pCT -1; - if pCT >= 0 - then begin - pTP := GetCursorAtPos ( pCT , fPosInChars ); - MoveColRow ( pTP.x+1 , pTP.y , True , True ); - end; - end - - end; - Result := True; - end; - - if (aChar = Char ( VK_RIGHT )) and ( not (ssCTRL in aShift )) - then begin - pCT := GetPosAtCursor ( Col , Row ) +1; - if fPosInChars - then begin - if pCT >= DataSize - then - pCT := DataSize-1; - pTP := GetCursorAtPos ( pCT , fPosInChars ); - MoveColRow ( pTP.x , pTP.y , True , True ); - end - else - begin - pct := pct -1; - pTP := GetCursorAtPos ( pCT , False ); - if pTP.x = Col - then - MoveColRow ( Col + 1 , Row , True , True ) - else begin - pCT := pCT +1; - if pCT < DataSize - then begin - pTP := GetCursorAtPos ( pCT , fPosInChars ); - MoveColRow ( pTP.x , pTP.y , True , True ); - end; - end - - end; - Result := True; - end; - - if (aChar = Char ( VK_RIGHT )) and (ssCTRL in aShift ) - then begin - pCT := ColCount - 1; - while OutOfBounds ( pCT , Row ) - do - Dec ( pCT ); - MoveColRow ( pCT , Row , True , True ); - Result := True; - end; - - if (aChar = Char ( VK_DOWN )) and ( not (ssCTRL in aShift )) - then begin - if fVariableLineLength - then - pLastCol := CheckIfLastCol (Col , Row ); - - pRow := Row +1; - pCT := Col; - if pRow < RowCount - then begin - if fVariableLineLength and pLastCol - then - pCT := GetLastCol ( pCT , pRow ) - else - while OutOfBounds ( pCT , pRow ) - do - Dec ( pCT ); - MoveColRow ( pCT , pRow , True , True ); - end; - Result := True; - end; - - if (aChar = Char ( VK_UP )) and ( not (ssCTRL in aShift )) - then begin - if fVariableLineLength - then - pLastCol := CheckIfLastCol (Col , Row ); - - pRow := Row -1; - pCT := Col; - if pRow > -1 - then begin - if fVariableLineLength and pLastCol - then - pCT := GetLastCol ( pCT , pRow ) - else - while OutOfBounds ( pCT , pRow ) - do - Dec ( pCT ); - MoveColRow ( pCT , pRow , True , True ); - end; - Result := True; - end; - - if ( ssCtrl in aShift ) and ( aChar = 'T' ) - then begin // ctrl+T - if DataSize > 0 - then - Col := GetOtherFieldCol ( Col , fPosInChars ); - Result := True; - end; - - if ( (aShift = []) or (aShift = [ssShift]) ) and ( aChar = Char ( VK_TAB ) ) - then begin // tab-taste - if DataSize > 0 - then - Col := GetOtherFieldCol ( Col , fPosInChars ); - Result := True; - end - else - if (aShift = [ssCtrl , ssShift]) and (( aChar >='0') and (aChar <='9')) - then begin // marker setzen - SetMarker ( Ord ( aChar) - Ord ( '0' ) , Row ); - Result := True; - end - else - if (aShift = [ssCtrl]) and (( aChar >='0') and (aChar <='9')) - then begin // marker zurückholen - ResetSelection( True ); - pRow := GetMarkerRow ( Ord ( aChar) - Ord ( '0' ) ); - if pRow < RowCount - then - MoveColRow ( 2 , pRow , True , True) - else - SetMarker ( Ord ( aChar) - Ord ( '0' ) , 1); - Result := True; - end - else - if (aShift = [ssShift]) and (aChar = #16) - then begin // Selection Starten - if not fIsSelecting - then - ResetSelection( True ); - fIsSelecting := True; - Result := True; - end; - -end; - -procedure THexEditor.KeyUp(var Key: Word; Shift: TShiftState); -begin - fLastKeyWasALT := Key = VK_MENU; // to check if the key in char field has been entered via ALT+NUMPAD (0..9) - {$ifdef _debug} - TForm ( Owner).Caption := IntToStr(Key ); - {$endif} - inherited KeyUp ( Key , Shift ); -end; - -procedure THexEditor.KeyDown(var Key: Word; Shift: TShiftState); -var - pChar : Char; -begin - {$ifdef _debug} - TForm(Owner).Caption := 'KeyDown : '+Char ( Key ); - {$endif} - if Key = VK_INSERT - then begin - Key := 0; - fInsertOn := not fInsertOn ; - if fAutoCaretMode - then - SetAutoCaretMode ( fAutoCaretMode ); - fChangedBytes.Size := 0; - Invalidate; - StateNotification; - Exit; - end; - - pChar := Char ( Key ); - - if Key = 8 - then begin //BACKSP - if (IsInsertMode and (not fReadOnlyView)) - then begin - Key := 0; - if SelCount > 0 - then - DeleteSelection; - InternalErase(true) - end - else Key := VK_Left; - end; - - if ((Key = VK_DELETE) and (not fReadOnlyView)) - then begin - Key := 0; - if (Shift = [ssCtrl] ) or ((SelCount > 0) and IsInsertMode) - then - DeleteSelection - else - if IsInsertMode - then - InternalErase ( False ); - end; - - if ParseKeyDown ( Shift , pChar ) - then - Key := 0 - else - inherited KeyDown ( Key , Shift ); - {$ifdef _debug} - ShowSelState; - {$endif} -end; - -function THexEditor.HasChanged ( aPos : Integer ) : Boolean; -begin - Result := False; - if IsInsertMode - then - Exit; - - if fChangedBytes.Size > aPos - then - Result := fChangedBytes.Bits[aPos]; -end; - -function THexEditor.IsMarkerPos ( aPos : Integer ) : Integer; -var - pct : Integer; -begin - Result := -1; - for pCT := 0 to 9 - do - if aPos = fMarker[pCT] - then begin - Result := pCT; - Exit; - end; -end; - -function THexEditor.GetMarker (aIndex : Byte ) : Integer; -begin - if aIndex > 9 - then - Raise Exception.Create ( 'SetMarker : Invalid marker index' ); - - Result := fMarker[aIndex] ; -end; - - -procedure THexEditor.SetMarker (aIndex : Byte ; const aValue : Integer ); -begin - if aIndex > 9 - then - Raise Exception.Create ( 'SetMarker : Invalid marker index' ); - - if fMarker[aIndex] <> aValue - then begin - fMarker[aIndex] := aValue; - Invalidate; - end; -end; - -function THexEditor.GetMarkerRow ( aWhich : Byte ) : Integer; -begin - Result := Row; - if fMarker[aWhich] <> -1 - then - Result := fMarker[aWhich]; -end; - -function THexEditor.IsSelected ( aPos : Integer ) :Boolean; -begin - Result := False; - if (fSelPO <> -1) and (aPos >= fSelST) and (aPos <= fSelEN) - then - Result := True; -end; - -procedure THexEditor.Select ( aCurCol , aCurRow , aNewCol , aNewRow : Integer ); - -var - pOST , pOEN , pNAP : Integer; - -begin - pOEN := fSelEN; - pOST := fSelST; - pNAP := GetPosAtCursor ( aNewCol , aNewRow ); - if fSelPO = -1 - then begin - fSelPO := GetPosAtCursor ( aCurCol , aCurRow ); - // überprüfen, ob in insert mode - if IsInsertMode - then begin - //falls von hinten nach vorn, dann letztes Byte nicht markieren - if fSelPO > (pNAP) - then - fSelPO := fSelPO -1 - else // letztes byte nicht mehr markieren, basta - if fSelPO < ( pNAP) - then - pNAP := pNAP -1; - end; - pOST := pNAP; - pOEN := pNAP; - fSelST := Min ( pOST , fSelPO); - fSelEN := Max ( fSelPO , pOEN ); - RedrawPos ( fSelST , fSelEN ); - end - else begin - // testen, ob neue selection /\ liegt als fSelPO - // wenn ja, dann start = sel, ende = selpo - if pNAP < fSelPO - then begin - fSelST := pNAP; - fSelEN := fSelPO; - RedrawPos ( Min ( fSelST , pOST ) , Max ( fSelST , pOST )); - RedrawPos ( Min ( fSelEN , pOEN ) , Max ( fSelEN , pOEN )); - end - else begin - // überprüfen, ob in insert mode - if IsInsertMode - then - pNAP := pNAP -1; - fSelEN := pNAP; - fSelST := fSelPO; - RedrawPos ( Min ( fSelST , pOST ) , Max ( fSelST , pOST )); - RedrawPos ( Min ( fSelEN , pOEN ) , Max ( fSelEN , pOEN )); - end; - end; - - StateNotification; -end; - -procedure THexEditor.RedrawPos ( aFrom , aTo : Integer ) ; -var - pR : TRect; -begin - aFrom := GetRow ( aFrom); - aTo := GetRow( aTo); - pR := BoxRect ( 2 , aFrom , ColCount -1 , aTo ); - InvalidateRect ( Handle , @pR , False ); -end; - -procedure THexEditor.ResetSelection ( aDraw : Boolean ); -var - pOldFrom , pOldTo : Integer; -begin - fIsSelecting := False; - pOldFrom := fSelST; - pOldTo := fSelEN; - fSelST := -1; - fSelPO := -1; - fSelEN := -1; - if aDraw - then - RedrawPos ( pOldFrom, pOldTo ); - StateNotification; -end; - -procedure THexEditor.MouseDown(Button: TMouseButton; Shift: TShiftState; - X, Y: Integer); -begin - inherited; - if Button = mbLeft - then begin - ResetSelection( True ); - if not (ssDouble in Shift) - then - fIsSelecting := True; - end; - {$ifdef _debug} - ShowSelState; - {$endif} -end; - -procedure THexEditor.InternalGetCurSel ( var aSP , aEP , aCol , aRow : Integer); -var - pTP : TLongPoint; -begin - if fSelPO = -1 - then begin - aSP := GetPosAtCursor ( Col , Row ); - aEP := aSP+1; - aCOL := Col; - aROW := Row; - end - else - begin - aSP := fSelST; - aEP := fSelEN+1; - GetPosAtCursor ( Col , Row ); - pTP := GetCursorAtPos ( fSelST , fPosInChars ); - aCOL := pTP.x; - aROW := ptp.y; - end; - if fChangedBytes.Size > aSP - then - fChangedBytes.Size := asp; -end; - -function THexEditor.CreateShift4BitStream ( const aStart : Integer ; var vName : TFileName ): TFileStream; -var - pbt1,pBt2 : Byte; - par : array [0..511] of Byte; - pct : Integer; -begin - Result := nil; - if aStart >= DataSize - then - Exit; - vName := GetTempName; - Result := TFileStream.Create ( vName , fmCreate ); - Result.Position := 0; - fIntFile.Position := aStart; - pBT1 := 0; - while fIntFile.Position < DataSize - do begin - FillChar ( par[0] , 512 , 0 ); - fIntFile.Read ( par[0] , 512 ); - for pct := 0 to 511 - do begin - pBT2 := par[pct] and 15; - par[pct] := (par[pct] shr 4) or (pBT1 shl 4 ); - pBT1 := pBT2; - end; - Result.Write ( par[0] , 512 ); - end; - Result.Position := 0; -end; - - - - -function THexEditor.InternalInsertNibble ( const aPos : Integer ; const HighNibble : Boolean ) : Boolean; -var - pOldCur : TCursor; - fST : TFileStream; - pName : TFileName; - pOldSize : Integer; - pBT : Byte; -begin - Result := False; - TestStream; - - if DataSize = 0 - then - Exit; - - pOldCur := Cursor; - pOldSize := fIntFile.Size; - Cursor := crHourGlass; - try - // nun zuerst alle restlichen bits verschieben - fIntFile.Position := aPos; - fIntFile.Read ( pBT , 1 ); - - fST := CreateShift4BitStream ( aPos , pName ); - with fST - do try - fIntFile.Position := aPos; - fIntFile.CopyFrom ( fST , fST.Size ); - finally - Free; - DeleteFile ( pName ); - end; - fIntFile.Position := aPos; - if HighNibble - then - pBT := pBT shr 4 - else - pBT := pBT and 240; - fIntFile.Write ( pBT , 1 ); - Result := True; - fIntFile.Size := pOldSize+1; - finally - Cursor := pOldCur; - end; -end; - -function THexEditor.InsertNibble ( const aPos : Integer ; const HighNibble : Boolean ) : Boolean; -const - Byt : Byte = 0; -begin - Result := False; - - if DataSize < 1 - then begin - ResetSelection ( False ); - AppendBuffer ( @Byt , 1 ); - Result := True; - Exit; - end; - - if (aPos >= DataSize ) or (aPos < 0 ) - then - Exit; - - if not CreateUndo ( U_Nibble_Insert , aPos , 0 , 0 ) - then - Exit; - - ResetSelection ( False ); - Result := InternalInsertNibble ( aPos , HighNibble ); - - if Result and (fChangedBytes.Size >= (aPos)) - then - fChangedBytes.Size := aPos; - - fIntBufferPos := -1; - CalcSizes ; -end; - -function THexEditor.InternalDeleteNibble ( const aPos : Integer ; const HighNibble : Boolean ) : Boolean; -var - pOldCur : TCursor; - fST : TFileStream; - pName : TFileName; - pOldSize : Integer; - pBT1,pBT2 : Byte; -begin - Result := False; - TestStream; - - if DataSize = 0 - then - Exit; - - pOldCur := Cursor; - pOldSize := fIntFile.Size; - Cursor := crHourGlass; - try - // nun zuerst alle restlichen bits verschieben - fIntFile.Position := aPos; - fIntFile.Read ( pBT1 , 1 ); - - fST := CreateShift4BitStream ( aPos , pName ); - with fST - do try - fIntFile.Position := aPos; - Position := 1; - fIntFile.CopyFrom ( fST , fST.Size -1); - finally - Free; - DeleteFile ( pName ); - end; - fIntFile.Position := aPos; - if not HighNibble - then begin - fIntFile.Read ( pBT2 , 1 ); - fIntFile.Seek(-1 , soFromCurrent ); - pBT1 := (pBT1 and 240) or (pBT2 and 15); - fIntFile.Write ( pBT1 , 1 ); - end; - Result := True; - fIntFile.Size := pOldSize; - finally - Cursor := pOldCur; - end; -end; - -function THexEditor.DeleteNibble ( const aPos : Integer ; const HighNibble : Boolean ) : Boolean; -begin - Result := False; - - if (aPos >= DataSize ) or (aPos < 0 ) - then - Exit; - - if not CreateUndo ( U_Nibble_Delete , aPos , 0 , 0 ) - then - Exit; - - ResetSelection ( False ); - Result := InternalDeleteNibble ( aPos , HighNibble ); - - if Result and (fChangedBytes.Size >= (aPos)) - then - fChangedBytes.Size := aPos; - - fIntBufferPos := -1; - CalcSizes ; - -end; - -procedure THexEditor.InternalConvertRange ( const aFrom , aTo : Integer ; const aTransFrom , aTransTo : TTranslationType ); -var - pSize : Integer; - pBUF : PChar; - pOCR : TCursor; -begin - pSize := (aTo-aFrom)+1; - pOCR := Cursor; - Cursor := crHourGlass; - GetMem ( pBUF , pSize ); - try - fIntFile.Position := aFrom; - fIntFile.Read ( pBUF^, pSize ); - - TranslateBufferToAnsi ( aTransFrom , pBUF , pBUF , pSize ); - TranslateBufferFromAnsi ( aTransTo , pBUF , pBUF , pSize ); - - fIntFile.Position := aFrom; - fIntFile.Write (pBUF^, pSize ); - finally - FreeMem ( pBUF , pSize ); - Cursor := pOCR; - end; -end; - - - -procedure THexEditor.ConvertRange ( const aFrom , aTo : Integer ; const aTransFrom , aTransTo : TTranslationType ); -begin - if aFrom > aTo - then - Exit; - - if aTransFrom = aTransTo - then - Exit; - - if (aTo >= DataSize ) or (aFrom < 0 ) - then - Exit; - - if not CreateUndo ( U_Convert , aFrom , (aTo-aFrom)+1 , 0 ) - then - Exit; - - InternalConvertRange ( aFrom , aTo , aTransFrom , aTransTo ); - - - fIntBufferPos := -1; - Invalidate; - -end; - - -procedure THexEditor.InternalDeleteSelection ( aSP , aEP , aNCol , aNRow : Integer ); -var - pTP : TLongPoint; -begin - if aEP <= ( DataSize - 1) - then - MoveFileMem ( aEP , aSP , DataSize - aEP ); - fIntFile.Size := DataSize - (aEp-aSP); - aEP := GetPosAtCursor ( aNCol , aNRow ); - if aEP >= DataSize - then begin - pTP := GetCursorAtPos ( DataSize - 1 , fPosInChars ); - MoveColRow ( pTP.x , pTP.y , True , True ); - end - else - MoveColRow ( aNCol , aNRow , True , True ); - - CalcSizes; - ResetSelection( False ); - - Invalidate; -end; - -procedure THexEditor.DeleteSelection; -var - pSP , pEP : Integer; - pNCol , pNROW : Integer; -begin - - InternalGetCurSel ( pSP , pEP , pNCOL , pNROW ); - if not CreateUndo ( U_Byte_removed , pSP , pEP-pSP , 0) - then - Exit; - - InternalDeleteSelection ( pSP , pEP , pNCOL , pNROW ); -end; - -function THexEditor.CreateUndo ( aType : Integer ; aPos , aCount , aReplCount : Integer ) : Boolean; -begin - Result := False; - if DataSize > 0 - then - Result := True; - - if not Result - then - if (aType = U_Insert_buffer) or (aType = U_Append_buffer) - then - Result := True; - - // check for NoSizeChange - if fNoSizeChange and Result - then - if (aType = U_Byte_removed ) or - (aType = U_Insert_buffer ) or - (aType = U_Append_Buffer ) or - (aType = U_Nibble_Insert ) or - (aType = U_Nibble_Delete) or - ((aType = U_Replace_Selection) and (aCount <> aReplCount)) - then - Result := False; - - if Result - then - fCanUndo := Result; - - if Result - then begin - DoCreateUndo ( aType , aPos , aCount , aReplCount ); - fModified := True; - end; - StateNotification; -end; - -procedure THexEditor.ResetUndo; -begin - fCanUndo := False; - fUndoDesc := 'No Undo'; - fUndoCount := 0; - if fUndoMem <> nil - then begin - fUndoMem.Size := 0; - fUndoMem.Free; - fUndoMem := nil; - end; - - if Assigned ( fStateChanged) - then - fStateChanged ( self ); -end; - -function THexEditor.GetSelStart : Integer; -begin - if fSelPO = -1 - then begin - Result := GetPosAtCursor ( Col , Row ); - end - else - Result := fSelPO; -end; - -function THexEditor.GetSelEnd : Integer; -begin - if fSelPO = -1 - then - Result := GetPosAtCursor ( Col , Row ) - else begin - Result := fSelEN; - if fSelPO = fSelEN - then - Result := fSelST; - end; -end; - -procedure THexEditor.SetSelStart ( aValue : Integer ); -var - pTP : TLongPoint; -begin - if (aValue < 0) or (aValue >= DataSize ) - then - raise Exception.Create ( 'Invalid SelStart' ) - else - begin - ResetSelection( True); - GetPosAtCursor ( Col , Row ); - pTP := GetCursorAtPos ( aValue , fPosInChars ); - MoveColRow ( pTP.x , pTP.y , True , True ); - end; -end; - -procedure THexEditor.SetSelEnd ( aValue : Integer ); -var - pTP : TLongPoint; -begin - if (aValue < 0) or ( aValue >= DataSize ) - then - raise Exception.Create ( 'Invalid SelEnd' ) - else begin - ResetSelection ( True ); - GetPosAtCursor ( Col , Row ); - pTP := GetCursorAtPos ( aValue , fPosInChars); - Select ( Col , Row , pTP.x , pTP.y ); - end; -end; - -procedure THexEditor.SetInCharField ( aValue : Boolean ); -begin - if DataSize < 1 - then - Exit; - GetPosAtCursor ( Col , Row ); - if fPosInChars <> aValue - then - MoveColRow ( GetOtherFieldCol ( Col , fPosInChars ) , Row , True , True ); -end; - -function THexEditor.GetInCharField : Boolean; -begin - Result := False; - if DataSize < 1 - then - Exit; - GetPosAtCursor ( Col , Row ); - Result := fPosInChars; -end; - -procedure THexEditor.Loaded ; -begin - inherited; - CreateEmptyFile( 'Untitled' ); -end; - -procedure THexEditor.CreateWnd ; -begin - inherited; - if (csDesigning in ComponentState) or ( fFileName = '---' ) - then - CreateEmptyFile( 'Untitled' ); -end; - -procedure THexEditor.WMSetFocus(var Msg: TWMSetFocus); -begin - inherited; - CreateColoredCaret; - SetCaretPos ( -50 , -50 ); - ShowCaret ( Handle ); - Invalidate; -end; - -procedure THexEditor.WMKillFocus(var Msg: TWMKillFocus); -begin - inherited; - HideCaret ( Handle ); - DestroyCaret ( ); - fIsSelecting := False; - Invalidate; -end; - -procedure THexEditor.WMSTATECHANGED ( var Msg : TMessage ) ; -begin - if Msg.WParam = 7 - then - if Assigned ( fStateChanged) - then - fStateChanged ( self ); -end; - -procedure THexEditor.SetTranslation ( aValue : TTranslationType ); -begin - if fTranslation <> aValue - then begin - fTranslation := aValue; - Invalidate; - end; -end; - -procedure THexEditor.SetModified ( aValue : Boolean ); -begin - fModified := aValue; - if not aValue - then begin - fCanUndo := False; - fChangedBytes.Size := 0; - Invalidate; - end; -end; - -procedure THexEditor.SetBytesPerLine ( aValue : Integer ); -var - pPS,pSP,pSS,pSE : Integer; - pTP : TLongPoint; -begin - if (aValue < 1) or (aValue > 256) - then - raise Exception.Create ( 'Invalid BytesPerLine argument' ) - else - if fBytesPerLine <> aValue - then begin - LockWindowUpdate ( Handle ); - ClearOffsets; - fVariableLineLength := False; - pSP := fSelPO; - pSS := fSelST; - pSE := fSelEN; - pPS := GetPosAtCursor ( Col , Row ); - fBytesPerLine := aValue; - fBPL2 := aValue * 2; - CalcSizes ; - pTP := GetCursorAtPos ( pPs , fPosInChars ); - MoveColRow ( pTP.x , pTP.y , True , True ); - fSelPO := pSP; - fSelST := pSS; - fSelEN := pSE; - LockWindowUpdate ( 0 ); - end; -end; - -procedure THexEditor.InternalAppendBuffer ( aBuffer : PChar ; aSize : Integer ); -var - pCT : Integer; -begin - TestStream; - - if DataSize = 0 - then begin - fIntFile.Position := 0; - fChangedBytes.Size := 0; - end; - - pCT := DataSize; - fIntFile.Size := pCT + aSize; - - SetMemAtPos ( PByteArray(aBuffer ), pCT , aSize ); - CalcSizes; -end; - -procedure THexEditor.InternalInsertBuffer ( aBuffer : PChar ; aSize , aPos : Integer ); -var - pCT : Integer; -begin - TestStream; - - if DataSize = 0 - then begin - fIntFile.Position := 0; - fChangedBytes.Size := 0; - end; - - pCT := DataSize; - fIntFile.Size := pCT + aSize; - - if aPos < pct - then // nur, wenn nicht hinter streamende, dann platz schaffen - MoveFileMem ( aPos , aPos+aSize , DataSize - aPos -aSize); - - SetMemAtPos ( PByteArray(aBuffer ), aPos , aSize ); - CalcSizes; -end; - -procedure THexEditor.InsertBuffer ( aBuffer : PChar ; aSize , aPos : Integer ); -var - pCT : Integer; -begin - - if not CreateUndo ( U_Insert_buffer , aPos , aSize , 0) - then - Exit; - - InternalInsertBuffer ( aBuffer , aSize , aPos ); - - if fChangedBytes.Size >= (aPos) - then - fChangedBytes.Size := aPos; - - pCT := GetPosAtCursor ( Col , Row ); - if pCT = aPos - then begin - fSelPO := aPos; - fSelST := aPos; - fSelEN := aPos+aSize-1; - StateNotification; - end; - Invalidate; - -end; - -procedure THexEditor.AppendBuffer ( aBuffer : PChar ; aSize : Integer); -var - pCT : Integer; - pTP : TLongPoint; -begin - - if not CreateUndo ( U_Append_buffer , DataSize , aSize , 0) - then - Exit; - - if fChangedBytes.Size >= (DataSize) - then - fChangedBytes.Size := DataSize; - - pCT := DataSize; - InternalAppendBuffer ( aBuffer , aSize ); - - GetPosAtCursor ( Col , Row ); - pTP := GetCursorAtPos ( pCT , fPosInChars ); - MoveColRow ( pTP.x , pTP.y , True , True ); - fSelPO := pCT; - fSelST := pCT; - fSelEN := pCT+aSize-1; - StateNotification; - Invalidate; - -end; - - -procedure THexEditor.ReplaceSelection ( aBuffer : PChar ; aSize : Integer ); -var - pSP , pEP , pCol , pRow : Integer; - pCT : Integer; - pOldCol , pOldRow : Integer; -begin - // auswahl berechnen - if fSelPO = -1 - then - InsertBuffer ( aBuffer , aSize , GetSelStart ) - else begin - - if fNoSizeChange - then begin - if aSize > SelCount - then - aSize := SelCount - else - if SelCount > aSize - then begin - SelStart := Min ( SelStart , SelEnd ); - SelEnd := SelStart + aSize-1; - end; - end; - - if not CreateUndo ( U_Replace_selection , fSelST , aSize , SelCount) - then - Exit; - - // zuerst aktuelle auswahl löschen - pOldCol := Col; - pOldRow := Row; - InternalGetCurSel ( pSP , pEP , pCol , pRow ); - InternalDeleteSelection ( pSP , pEP , pCol , pRow ); - InternalInsertBuffer ( aBuffer , aSize , pSP ); - if fChangedBytes.Size >= pSP - then - fChangedBytes.Size := Max ( 0 , pSP ); - pCT := GetPosAtCursor ( pOldCol , pOldRow ); - if (pCT = pSP) and (DataSize > pCT ) - then begin - MoveColRow ( pOldCol , pOldRow , True , True ); - fSelPO := pSP; - fSelST := pSP; - fSelEN := pSP+aSize-1; - StateNotification; - end; - end; -end; - -procedure THexEditor.DoCreateUndo ( aType : Integer ; aPos , aCount , aReplCount : Integer ); - -procedure FillBuffer ( var aBuffer : TUndoRec ; aSize : Integer ); -var - pTP : TLongPoint; -begin - FillChar ( aBuffer , aSize , 0 ); - aBuffer.Typ := aType; - aBuffer.CurPos := GetPosAtCursor ( Col , Row ); - if not fPosInChars - then begin - ptp := GetCursorAtPos ( aBuffer.CurPos , fPosInChars ); - aBuffer.C1st := Col - pTP.x; - end; - aBuffer.CharField := fPosInChars ; - aBuffer.SelS := fSelST; - aBuffer.SelE := fSelEN; - aBuffer.SelP := fSelPO; - aBuffer.Pos := aPos; - aBuffer.Count := aCount; - aBuffer.ReplCount := aReplCount; - aBuffer.Modified := fModified; -end; - -procedure DeleteFirstUndo; -var - pSK : Integer; - pCT : Integer; - pPT : Pointer; -begin - fUndoMem.Position := fUndoMem.Size; - pCT := fUndoMem.Position; - while fUndoMem.Position <> 0 - do begin - fUndoMem.Seek ( -4 , soFromCurrent ); - fUndoMem.Read ( pSK , 4 ); - pCT := fUndoMem.Position; - fUndoMem.Seek ( -pSK , soFromCurrent ); - end; - Integer(pPT) := Integer(fUndoMem.Memory)+pCT; - - Move ( pPT^, fUndoMem.Memory^, fUndoMem.Size - PCT ); - fUndoMem.Size := fUndoMem.Size - pCT; - fUndoMem.Position := fUndoMem.Size; - Dec ( fUndoCount ); -end; - -var - pBuf : PUndoRec; - pAR : PByteArray; -begin - fUndoDesc := UndoSTR [ aType]; - - if fUndoMem = nil - then - fUndoMem := TMemoryStream.Create; - - fUndoMem.Position := fUndoMem.Size; - - Inc (fUndoCount); - - if fUndoCount > cMax_Undo - then - DeleteFirstUndo; - - case aType of - U_Byte_changed : begin - GetMem ( pBuf , SizeOf ( TUndoRec ) ); - try - FillBuffer ( pBuf^ , SizeOf ( TUndoRec )); - pBuf.Buffer := GetByteAtPos ( aPos ); - pBuf.Changed := HasChanged ( aPos ); - fUndoMem.Write ( pBuf^ , SizeOf ( TUndoRec) ); - aPos := SizeOf ( TUndoRec)+4; - fUndoMem.Write ( aPos , 4 ); - finally - FreeMem ( pBuf , SizeOf ( TUndoRec ) ); - end; - end; - U_Byte_removed : begin - GetMem ( pBuf , SizeOf ( TUndoRec ) + aCount -1 ); - try - FillBuffer ( pBuf^ , SizeOf ( TUndoRec )); - pAR := @pBuf.Buffer; - GetMemAtPos ( pAR , aPos , aCount ); - fUndoMem.Write ( pBuf^ , SizeOf ( TUndoRec)+aCount -1 ); - aPos := SizeOf ( TUndoRec)+4+aCount-1; - fUndoMem.Write ( aPos , 4 ); - finally - FreeMem ( pBuf , SizeOf ( TUndoRec )+aCount -1 ); - fIntBufferPos := -1; - end; - end; - U_Insert_Buffer : begin - GetMem ( pBuf , SizeOf ( TUndoRec ) ); - try - FillBuffer ( pBuf^ , SizeOf ( TUndoRec )); - fUndoMem.Write ( pBuf^ , SizeOf ( TUndoRec) ); - aPos := SizeOf ( TUndoRec)+4; - fUndoMem.Write ( aPos , 4 ); - finally - FreeMem ( pBuf , SizeOf ( TUndoRec )+aCount -1 ); - fIntBufferPos := -1; - end; - end; - U_Replace_selection : begin - GetMem ( pBuf , SizeOf ( TUndoRec ) + aReplCount -1 ); - try - FillBuffer ( pBuf^ , SizeOf ( TUndoRec )); - pAR := @pBuf.Buffer; - GetMemAtPos ( pAR , aPos , aReplCount ); - fUndoMem.Write ( pBuf^ , SizeOf ( TUndoRec)+aReplCount -1 ); - aPos := SizeOf ( TUndoRec)+4+aReplCount-1; - fUndoMem.Write ( aPos , 4 ); - finally - FreeMem ( pBuf , SizeOf ( TUndoRec )+aReplCount -1 ); - fIntBufferPos := -1; - end; - end; - U_Append_buffer : begin - GetMem ( pBuf , SizeOf ( TUndoRec ) ); - try - FillBuffer ( pBuf^ , SizeOf ( TUndoRec )); - fUndoMem.Write ( pBuf^ , SizeOf ( TUndoRec) ); - aPos := SizeOf ( TUndoRec)+4; - fUndoMem.Write ( aPos , 4 ); - finally - FreeMem ( pBuf , SizeOf ( TUndoRec ) ); - fIntBufferPos := -1; - end; - end; - U_Nibble_Insert : begin - GetMem ( pBuf , SizeOf ( TUndoRec ) ); - try - FillBuffer ( pBuf^ , SizeOf ( TUndoRec )); - pBuf.Buffer := GetByteAtPos ( aPos ); - pBuf.Changed := HasChanged ( aPos ); - fUndoMem.Write ( pBuf^ , SizeOf ( TUndoRec) ); - aPos := SizeOf ( TUndoRec)+4; - fUndoMem.Write ( aPos , 4 ); - finally - FreeMem ( pBuf , SizeOf ( TUndoRec ) ); - end; - end; - U_Nibble_Delete : begin - GetMem ( pBuf , SizeOf ( TUndoRec ) ); - try - FillBuffer ( pBuf^ , SizeOf ( TUndoRec )); - pBuf.Buffer := GetByteAtPos ( aPos ); - pBuf.Changed := HasChanged ( aPos ); - fUndoMem.Write ( pBuf^ , SizeOf ( TUndoRec) ); - aPos := SizeOf ( TUndoRec)+4; - fUndoMem.Write ( aPos , 4 ); - finally - FreeMem ( pBuf , SizeOf ( TUndoRec ) ); - end; - end; - U_Convert : begin - GetMem ( pBuf , SizeOf ( TUndoRec ) + aCount -1 ); - try - FillBuffer ( pBuf^ , SizeOf ( TUndoRec )); - pAR := @pBuf.Buffer; - GetMemAtPos ( pAR , aPos , aCount ); - fUndoMem.Write ( pBuf^ , SizeOf ( TUndoRec)+aCount -1 ); - aPos := SizeOf ( TUndoRec)+4+aCount-1; - fUndoMem.Write ( aPos , 4 ); - finally - FreeMem ( pBuf , SizeOf ( TUndoRec )+aCount -1 ); - fIntBufferPos := -1; - end; - end; - end; - -end; - -function THexEditor.Undo : Boolean; - -procedure SetBuffer ( aBuffer : TUndoRec); -var - pTP : TLongPoint; -begin - pTP := GetCursorAtPos ( aBuffer.CurPos , aBuffer.CharField); - if not aBuffer.CharField - then - if DataSize > 0 - then - pTP.x := pTP.x+aBuffer.C1st; - MoveColRow ( pTP.x , pTP.y , True , True ); - fSelST := aBuffer.SelS ; - fSelEN := aBuffer.SelE ; - fSelPO := aBuffer.SelP ; - fModified := aBuffer.Modified; -end; - -function SetUndoPointer ( var aUR : TUndoRec) :Byte; -var - pSK : Integer; -begin - fUndoMem.Position := fUndoMem.Size-4; - fUndoMem.Read ( pSK , 4 ); - fUndoMem.Seek ( -pSK , soFromCurrent ); - fUndoMem.Read ( aUR , SizeOf(TUndoRec) ); - Result := aUR.Typ; -end; - -procedure NextUndo ( aCount : Integer ); -var - aUR : TUndoRec; -begin - fDataSize := -1; - fUndoMem.SetSize ( Max ( 0 , fUndoMem.Size - aCount ) ); - Dec ( fUndoCount ); - if fUndoMem.Size < 5 - then begin - ResetUndo; - end - else begin - fUndoDesc := UndoSTR[(SetUndoPointer ( aUR ) )]; - StateNotification; - end; - -end; - -var - pTY : Byte; - pUR : TUndoRec; -begin - Result := False; - if not fCanUndo - then begin - ResetUndo; - Exit; - end; - if (fUndoMem <> nil) and (fUndoMem.Size > 4 ) - then begin - // letztes word lesen - pTY := SetUndoPointer( pUR); - case pTY of - U_Byte_changed : begin - SetByteAtPos ( pUR.Pos , pUR.Buffer); - SetChanged ( pUR.Pos , pUR.Changed); - SetBuffer ( pUR ); - RedrawPos ( pUR.Pos , pUR.Pos ); - SetInternalBufferByte ( pUR.Pos , pUR.Buffer ); - NextUndo ( SizeOf(TUndoRec)+4); - end; - U_Byte_removed : begin - fIntBufferPos := -1; - InternalInsertBuffer ( Pointer ( Integer (fUndoMem.Memory)+fUndoMem.Position - 1),pUR.Count , pUR.Pos ); - SetBuffer ( pUR ); - if DWORD(fChangedBytes.Size) >= (pUR.Pos ) - then - fChangedBytes.Size := pUR.Pos ; - Invalidate; - NextUndo ( SizeOf(TUndoRec)+4+pUR.Count -1); - end; - U_Insert_buffer : begin - fIntBufferPos := -1; - InternalDeleteSelection ( pUR.Pos , pUR.Pos + pUR.Count , 10 , 0); - SetBuffer ( pUR ); - if DWORD(fChangedBytes.Size) >= (pUR.Pos ) - then - fChangedBytes.Size := pUR.Pos ; - Invalidate; - NextUndo ( SizeOf(TUndoRec)+4); - end; - U_Replace_selection : begin - fIntBufferPos := -1; - InternalDeleteSelection ( pUR.Pos , pUR.Pos + pUR.Count , 10 , 0); - InternalInsertBuffer ( Pointer ( Integer (fUndoMem.Memory)+fUndoMem.Position - 1),pUR.ReplCount , pUR.Pos ); - SetBuffer ( pUR ); - if DWORD(fChangedBytes.Size) >= (pUR.Pos ) - then - fChangedBytes.Size := Max ( 0 , pUR.Pos-1) ; - Invalidate; - NextUndo ( SizeOf(TUndoRec)+4+pUR.ReplCount -1); - end; - U_Append_buffer : begin - fIntBufferPos := -1; - Col := 2; - fIntFile.Size := pUR.Pos; - CalcSizes; - if DWORD(fChangedBytes.Size) >= (pUR.Pos ) - then - fChangedBytes.Size := pUR.Pos ; - SetBuffer ( pUR ); - Invalidate; - NextUndo ( SizeOf(TUndoRec)+4); - end; - U_Nibble_Insert : begin - fIntBufferPos := -1; - InternalDeleteNibble ( pUR.Pos , False ); - SetByteAtPos ( pUR.Pos , pUR.Buffer); - SetChanged ( pUR.Pos , pUR.Changed); - SetBuffer ( pUR ); - if DWORD(fChangedBytes.Size) >= (pUR.Pos ) - then - fChangedBytes.Size := pUR.Pos ; - fIntFile.Size := fIntFile.Size -1; - CalcSizes; - Invalidate; - NextUndo ( SizeOf(TUndoRec)+4); - end; - U_Nibble_Delete : begin - fIntBufferPos := -1; - InternalInsertNibble ( pUR.Pos , False ); - SetByteAtPos ( pUR.Pos , pUR.Buffer); - SetChanged ( pUR.Pos , pUR.Changed); - SetBuffer ( pUR ); - if DWORD(fChangedBytes.Size) >= (pUR.Pos ) - then - fChangedBytes.Size := pUR.Pos ; - fIntFile.Size := fIntFile.Size -1; - CalcSizes; - Invalidate; - NextUndo ( SizeOf(TUndoRec)+4); - end; - U_Convert : begin - fIntBufferPos := -1; - SetMemAtPos ( Pointer ( Integer (fUndoMem.Memory)+fUndoMem.Position - 1),pUR.Pos , pUR.Count ); - SetBuffer ( pUR ); - if DWORD(fChangedBytes.Size) >= (pUR.Pos ) - then - fChangedBytes.Size := pUR.Pos ; - Invalidate; - NextUndo ( SizeOf(TUndoRec)+4+pUR.Count -1); - end; - end; - end - else - ResetUndo; -end; - -procedure THexEditor.SetChanged ( aPos : Integer ; aValue : Boolean ); -begin - if IsInsertMode - then - fChangedBytes.Size := 0; - - if not aValue - then - if fChangedBytes.Size <= aPos - then - Exit; - fChangedBytes[aPos] := aValue; -end; - -{$ifdef _debug} -procedure THexEditor.SaveUndo ( aFileName : TFileName ); -begin - if fUndoMem <> nil - then - fUndoMem.SaveToFile ( aFileName ); -end; -{$endif} - -procedure THexEditor.MoveFileMem ( aFrom , aTo , aCount : Integer ); -var - pBU : PCHar; -begin - GetMem ( pBU , aCount ); - try - fIntFile.Position := aFrom; - fIntFile.Read ( pBU^, aCount ); - fIntFile.Position := aTO; - fIntFile.Write (pBU^, aCount ); - finally - FreeMem ( pBU , aCount ); - end; -end; - -procedure THexEditor.CheckInternalBuffer ( aPos : Integer ); -var - pFR : Integer; -begin - if (fIntBufferPos = -1 ) or (aPos < fIntBufferPos) or ((aPos+FbytesPerLine) > (fIntBufferPos+cBuf_size)) - then begin - fDataSize := -1; - pFR := aPos - (cBuf_size div 2); - if pFR < 0 - then - pFR := 0; - fIntFile.Position := pFR; - fIntFile.Read ( fIntBuffer^, cBuf_Size); - fIntBufferPos := pFR; - end; -end; - -procedure THexEditor.SetInternalBufferByte ( aPos : Integer ; aByte : Byte ); -begin - if (aPos < fIntBufferPos) or ((aPos+FbytesPerLine) > (fIntBufferPos+cBuf_Size)) or (fIntBufferPos = -1 ) - then - Exit; - fIntBuffer[aPos-fIntBufferPos] := aByte; -end; - -function THexEditor.GetCursorPos : Integer; -begin - Result := GetPosAtCursor ( Col , Row ); - if Result < 0 - then - Result := 0; - - if Result > Max ( 0 , DataSize - 1 ) - then - Result := Max ( 0 , DataSize - 1 ) -end; - -function THexEditor.GetSelCount : Integer; -begin - if fSelPO = -1 - then - Result := 0 - else - Result := Max ( fSelST , fSelEN ) - Min ( fSelST , fSelEN ) +1; -end; - -procedure THexEditor.TestStream; -begin - if fIntFile = nil - then begin - DeleteFile ( fInternalName ); - fIntFile := TFileStream.Create ( fInternalName , fmCreate ); - fIntFile.Position := 0; - fChangedBytes.Size := 0; - end; -end; - -function THexEditor.GetMemory ( aIndex : Integer ):Char; -begin - if (aIndex < 0) or (aIndex >= DataSize) - then - Raise Exception.Create ( 'Invalid GetMemory index' ) - else begin - fIntFile.Position := aIndex; - fIntFile.Read ( Result , 1 ); - end; -end; - -procedure THexEditor.SetMemory ( aIndex : Integer ; aChar : Char ); -begin - if (aIndex < 0) or (aIndex >= DataSize) - then - Raise Exception.Create ( 'Invalid SetMemory index' ) - else begin - fIntFile.Position := aIndex; - fIntFile.Write ( aChar , 1 ); - fIntBufferPos := -1; - end; -end; - -procedure THexEditor.SetReadOnlyFile ( const aValue : Boolean ); -begin - if aValue and (not fReadOnlyFile) - then begin - fReadOnlyFile := True; - StateNotification; - end; -end; - -function THexEditor.BufferFromFile ( aPos : Integer ; var aCount : Integer ): PChar; -begin - if (aPos < 0) or (aPos >= DataSize ) - then - raise Exception.Create ( 'Invalid BufferFromFile argument' ) - else begin - if (aPos + aCount) > DataSize - then - aCount := (DataSize-aPos) + 1; - - GetMem ( Result , aCount ); - try - fIntFile.Position := aPos; - fIntFile.Read ( Result^, aCount ); - except - FreeMem ( Result , aCount ); - Result := nil; - aCount := 0; - end; - end; -end; - -procedure THexEditor.WMVScroll(var Msg: TWMVScroll); -var - pRC : TRect; -begin - inherited; - pRC := CellRect ( Col , Row ); - if pRC.Left+pRC.Bottom = 0 - then - SetCaretPos ( -50 , -50) - else - SetCaretPos ( pRC.Left , pRC.Top); -end; - -procedure THexEditor.WMHScroll(var Msg: TWMHScroll); -var - pRC : TRect; -begin - inherited; - pRC := CellRect ( Col , Row ); - if pRC.Left+pRC.Bottom = 0 - then - SetCaretPos ( -50 , -50) - else - SetCaretPos ( pRC.Left , pRC.Top); -end; - -procedure THexEditor.CreateColoredCaret; -begin - DestroyCaret (); - fCaretBitmap.Width := fCharWidth; - fCaretBitmap.Height := fCharHeight-2; - fCaretBitmap.Canvas.Brush.Color := clBlack; - fCaretBitmap.Canvas.FillRect (Rect(0,0,fCharWidth , fCharHeight-2) ); - fCaretBitmap.Canvas.Brush.Color := fColors.CursorFrame xor $00FFFFFF ; - case fCaretStyle - of - csFull : fCaretBitmap.Canvas.FillRect (Rect(0,0,fCharWidth , fCharHeight-2) ); - csLeftLine : fCaretBitmap.Canvas.FillRect (Rect(0,0,2 , fCharHeight-2) ); - csBottomLine : fCaretBitmap.Canvas.FillRect (Rect(0,fCharHeight-4,fCharWidth , fCharHeight-2) ); - end; - CreateCaret ( Handle , fCaretBitmap.Handle , 0,0); -end; - -procedure THexEditor.SetBytesPerColumn(const Value: Integer); -begin - if fBytesPerColumn <> (Value * 2) - then begin - fBytesPerColumn := Value * 2; - AdjustMetrics; - Invalidate; - end; -end; - -function THexEditor.GetBytesPerColumn : Integer; -begin - Result := fBytesPerColumn div 2; -end; - -function THexEditor.Find ( aBuffer : PChar ; const aCount , aStart , aEnd : Integer ; - const IgnoreCase , SearchText : Boolean ) : Integer; - // find something in the current file and return the position, -1 if not found -var - pCR : TCursor; - pChAct : Char; - pCMem , pCFind , pCHit , pEnd : Integer; -begin - Result := -1; - pEnd := aEnd; - if pEnd >= DataSize - then - pEnd := DataSize -1; - - if aCount < 1 - then - Exit; - - if aStart + aCount > (pEnd+1) - then - Exit; // will never be found, if search-part is smaller than searched data - - pCR := Cursor; - Cursor := crHourGlass; - - if SearchText and ( fTranslation <> ttAnsi ) - then - TranslateBufferFromAnsi ( fTranslation , aBuffer , aBuffer , aCount ); - - try - if IgnoreCase - then - CharLowerBuff ( aBuffer , aCount ); - - pCMem := aStart; - PCFind := 0; - pCHit := pCMem+1; - - repeat - {$ifdef _debug} - if (PCMem mod 100000) = 0 - then - TForm(Owner).Caption := IntToStr(PCMem); - {$EndIf} - - if pCMem > pEnd - then - Exit; - - CheckInternalBuffer ( pCMem ); - PChAct := Char(fIntBuffer [ pCMem - fIntBufferPos]); - if IgnoreCase - then - CharLowerBuff ( @PChAct , 1 ); - - if ( PChAct = aBuffer[PCFind] ) - then begin - if PCFind = (aCount-1) - then begin - Result := PCMem-aCount+1; - Exit; - end - else begin - if PCFind = 0 - then - PCHit := PCMem+1; - Inc ( PCMem ); - Inc ( PCFind ); - end; - end - else begin - PCMem := PCHit; - PCFind := 0; - PCHit := PCMem+1; - end; - until False; - - - finally - Cursor := pCR; - end; - -end; - -procedure THexEditor.SetOffsetDisplayWidth; -begin - if fOffsetDisplay = odNone - then - fOffsetDisplayWidth := 0 - else begin - if fOffsetDisplay = odHex - then - fOffsetDisplayWidth := Length(IntToHex ( LineOffset[RowCount - 1] , 1 ))+3 - else - if fOffsetDisplay = odDec - then - fOffSetDisplayWidth := Length(IntToStr ( LineOffset[RowCount - 1]))+1 - else - fOffSetDisplayWidth := Length(IntToOctal ( LineOffset[RowCount - 1]))+3; - end; - ColWidths[0] := fOffsetDisplayWidth * fCharWidth; -end; - -procedure THexEditor.SetShowMarkerColumn( const Value : Boolean ); -begin - if Value <> fShowMarkerCol - then begin - fShowMarkerCol := Value; - AdjustMetrics; - end; -end; - -function THexEditor.Seek (const aOffset , aOrigin : Integer ; const FailIfOutOfRange : Boolean ) : Boolean; -var - pNP : Integer; -begin - Result := False; - pNP := GetCursorPos; - case aOrigin - of - soFromBeginning : pNP := aOffset; - soFromCurrent : pNP := GetCursorPos + aOffset; - soFromEnd : pNP := DataSize + aOffset - 1; - end; - if DataSize < 1 - then - Exit; - - if pNP < 0 - then begin - pNP := 0; - if FailIfOutOfRange - then - Exit; - end; - - if pNP >= DataSize - then begin - pNP := DataSize -1; - if FailIfOutOfRange - then - Exit; - end; - SelStart := pNP; - Result := True; -end; - -procedure THexEditor.SetSwapNibbles ( const Value : Boolean ); -begin - if Integer(Value) <> fSwapNibbles - then begin - fSwapNibbles := Integer(Value); - Invalidate; - end; -end; - -function THexEditor.GetSwapNibbles : Boolean; -begin - Result := Boolean ( fSwapNibbles ); -end; - -procedure THexEditor.SetColors(const Value: TColors); -begin - fColors := Value; -end; - -procedure THexEditor.SetOffsetChar(const Value: Char); -begin - if (FOffsetChar <> Value) then begin - FOffsetChar := Value; - Invalidate; - end; -end; - -procedure THexEditor.SetOffsetDisplay(const Value: TOffsetDisplayStyle); -begin - if FOffsetDisplay <> Value - then begin - FOffsetDisplay := Value; - - SetOffsetDisplayWidth; - - Invalidate; - end; -end; - - -procedure THexEditor.SetCaretStyle(const Value: TCaretStyle); -begin - if FCaretStyle <> Value - then begin - FCaretStyle := Value; - if Focused - then begin - CreateColoredCaret; - SetCaretPos ( -50 , -50 ); - ShowCaret ( Handle ); - Invalidate; - end; - end; -end; - -procedure THexEditor.SetFocusFrame(const Value: Boolean); -begin - if FFocusFrame <> Value then begin - FFocusFrame := Value; - Invalidate; - end; -end; - -procedure THexEditor.SetMaskWhiteSpaces (const aValue : Boolean ); -begin - if FMaskWhiteSpaces <> aValue then begin - FMaskWhiteSpaces := aValue; - Invalidate; - end; -end; - -procedure THexEditor.SetMaskChar ( const aValue : Char ); -begin - if fMaskChar <> aValue then begin - FMaskChar := aValue; - Invalidate; - end; -end; - -procedure THexEditor.SetAsText ( const aValue : string ); -var - lPC : PChar; -begin - if DataSize > 0 - then begin - // alles selektieren - SelStart := 0; - SelEnd := DataSize - 1; - end; - // do translation (thanks to philippe chessa) dec 17 98 - GetMem ( lPC , Length ( aValue )); - try - Move ( aValue[1] , lPC^, Length ( aValue )); - TranslateBufferFromANSI ( fTranslation , @aValue[1] , lPC , Length ( aValue )); - ReplaceSelection ( lPC , Length ( aValue )); - finally - FreeMem ( lPC ); - end; -end; - -procedure THexEditor.SetAsHex ( const aValue : string ); -var - buf : PChar; - lBD : Integer; -begin - if DataSize > 0 - then begin - // alles selektieren - SelStart := 0; - SelEnd := DataSize - 1; - end; - GetMem ( buf , Length ( aValue ) ); - try - ConvertHexToBin ( @aValue[1] , Buf , Length ( aValue ) , SwapNibbles , lBD ); - ReplaceSelection ( buf , lBD ); - finally - FreeMem ( buf ); - end; -end; - -function THexEditor.GetAsText : string; -begin - if DataSize < 1 - then - Result := '' - else begin - SetLength ( Result , DataSize ); - GetMemAtPos ( @Result[1] , 0 , DataSize ); - end; -end; - -function THexEditor.GetAsHex : string; -var - buf : PChar; - lSZ : Integer; -begin - if DataSize < 1 - then - Result := '' - else begin - lSZ := DataSize; - GetMem ( Buf , DataSize ); - try - buf := BufferFromFile ( 0 , lSZ ); - SetLength ( Result , DataSize * 2 ); - ConvertBinToHex ( Buf , @Result[1] , DataSize , SwapNibbles ); - finally - FreeMem ( Buf , DataSize ); - end; - end; -end; - -procedure THexEditor.SetVariableLineLength ( const aValue : Boolean ); -var - ppos : Integer; - pt : TLongPoint; - pss,pse,psp : Integer; -begin - if aValue <> fVariableLineLength - then begin - psp := fSelPO; - pss := fSelST; - pse := fSelEN; - ppos := GetPosAtCursor ( Col , Row ); - fVariableLineLength := aValue; - CalcSizes; - pt := GetCursorAtPos ( pPos , fPosInChars ); - MoveColRow ( pt.x , pt.y , True , True ); - Application.ProcessMessages; - fSelST := pss; - fSelEN := pse; - fSelPO := psp; - Invalidate; - end; -end; - -procedure THexEditor.AdjustLineLengthsCount; -begin - if fOffsets.Count = 0 - then - fOffsets.Add ( Pointer ( 0 )); - - while fOffsets.Count < (RowCount+1) - do - fOffsets.Add ( Pointer ( fBytesPerLine + Integer ( fOffsets[fOffsets.Count-1] ))); -end; - -procedure THexEditor.SetLineLength ( aLine , aLength : Integer ) ; -var - pCT : Integer; - pdf : Integer; -begin - - AdjustLineLengthsCount; - - if (aLength < 1) or (aLength > fBytesPerLine) - then begin - Raise Exception.Create ( 'Invalid Line Length argument' ); - Exit; - end; - - while fOffsets.Count < (aLine+2) - do - fOffsets.Add ( Pointer ( fBytesPerLine + Integer ( fOffsets[fOffsets.Count-1] ))); - - pdf := LineLength[aLine]-aLength; - - if pdf <> 0 - then begin - for pct := fOffsets.Count-1 downto aLine + 1 - do - fOffsets[pct] := Pointer ( Integer ( fOffsets[pct] ) - pdf ); - - if fVariableLineLength - then begin - CalcSizes; - Invalidate; - end; - end; -end; - -function THexEditor.GetLineLength ( aLine : Integer ) : Integer; -begin - if not fVariableLineLength - then - Result := fBytesPerLine - else begin - AdjustLineLengthsCount; - while fOffsets.Count < (aLine+2) - do - fOffsets.Add ( Pointer ( fBytesPerLine + Integer ( fOffsets[fOffsets.Count-1] ))); - - Result := Integer(fOffsets[aLine+1])-Integer ( fOffsets[aLine]); - end; -end; - -function THexEditor.GetLineOffset ( aLine : Integer ) : Integer; -begin - if not fVariableLineLength - then - Result := aLine * fBytesPerLine - else begin - AdjustLineLengthsCount; - while fOffsets.Count < (aLine+2) - do - fOffsets.Add ( Pointer ( fBytesPerLine + Integer ( fOffsets[fOffsets.Count-1] ))); - - Result := Integer(fOffsets[aLine]); - end; -end; - -procedure THexEditor.ClearOffsets; -begin - fOffsets.Clear; -end; - -procedure THexEditor.SetLineLengths ( aLengths : TList ); -var - pCT : Integer; - pPos : Integer; - pSP,pSS,pSE,pPs : Integer; - pTP : TLongPoint; - pInCH : Boolean; -begin - pSP := fSelPO; - pSS := fSelST; - pSE := fSelEN; - pPS := GetPosAtCursor ( Col , Row ); - pInCH := fPosInChars; - fOffsets.Clear; - if aLengths.Count > 0 - then begin - pPos := 0; - for pCT := 0 to aLengths.Count - 1 - do begin - fOffsets.Add ( Pointer ( pPos )); - pPos := pPos + Integer(aLengths[pCT]); - end; - end; - CalcSizes; - pTP := GetCursorAtPos ( pPs , pInCH ); - MoveColRow ( pTP.x , pTP.y , True , True ); - fSelPO := pSP; - fSelST := pSS; - fSelEN := pSE; - Invalidate; -end; - -function THexEditor.GetIsInsertMode: Boolean; -begin - Result := fInsertOn and (not fNoSizeChange) and fAllowInsertMode; -end; - -procedure THexEditor.SetAllowInsertMode(const aValue: Boolean); -begin - if fNoSizeChange - then - fAllowInsertMode := False - else - fAllowInsertMode := aValue; - StateNotification; -end; - - -procedure THexEditor.SetNoSizeChange(const aValue: Boolean); -begin - fNoSizeChange := aValue; - AllowInsertMode := fAllowInsertMode; -end; - -procedure THexEditor.StateNotification; -begin - if HandleAllocated - then - PostMessage ( Handle , WM_STATECHANGED , 7 , 7 ); - -end; - -procedure THexEditor.InternalErase(const BackSp: Boolean); -var - nPos : Integer; -begin - nPos := GetCursorPos; - if BackSp - then begin // Delete previous byte - if nPos = 0 - then - Exit; // Can't delete at offset -1 - if not CreateUndo(U_Byte_removed, nPos - 1, 1, 0) - then - Exit; - InternalDeleteSelection(nPos - 1, nPos, Col, Row); - Seek(nPos - 1, soFromBeginning, true); // Move caret - end - else begin // Delete next byte - if nPos = DataSize - then - Exit; // Cant delete at EOF - if CreateUndo(U_Byte_removed, nPos, 1, 0) - then - InternalDeleteSelection(nPos, nPos + 1, Col, Row); - end; -end; - -procedure THexEditor.SetAutoCaretMode(const aValue: Boolean); -begin - fAutoCaretMode := aValue; - if aValue - then begin - if IsInsertMode - then - CaretStyle := csLeftLine - else - CaretStyle := csFull; - end; -end; - -procedure THexEditor.WMGetDlgCode(var Msg: TWMGetDlgCode); -begin - inherited; - Msg.Result := Msg.Result or DLGC_WANTARROWS or DLGC_WANTCHARS ; - if fWantTabs - then - Msg.Result := Msg.Result or DLGC_WANTTAB - else - Msg.Result := Msg.Result and not DLGC_WANTTAB; -end; - -procedure THexEditor.CMFontChanged(var Message: TMessage); -begin - inherited; - if HandleAllocated - then begin - AdjustMetrics; - if Focused - then begin - CreateColoredCaret; - ShowCaret ( Handle ); - end; - end; -end; - -procedure THexEditor.SetWantTabs(const Value: Boolean); -begin - FWantTabs := Value; -end; - -procedure THexEditor.SetReadOnlyView(const Value: Boolean); -begin - FReadOnlyView := Value; -end; - -{ TColors } - -constructor TColors.Create(Parent: TControl); -begin - inherited Create; - FBackground := clWindow; - FPositionText := clWhite; - FChangedText := clMaroon; - FCursorFrame := clNavy; - FOffset := clBlack; - FOddColumn := clBlue; - FEvenColumn := clNavy; - - FOddInverted := Invert(FOddColumn); - FEvenInverted := Invert(FEvenColumn); - - FChangedBackground := $00A8FFFF; - FPositionBackground := clMaroon; - - FParent := Parent; -end; - -procedure TColors.SetBackground(const Value: TColor); -begin - if FBackground <> Value then - begin - FBackground := Value; - THexEditor(FParent).Color := Value; - FParent.Repaint; - end; -end; - -procedure TColors.SetChangedBackground(const Value: TColor); -begin - if FChangedBackground <> Value then - begin - FChangedBackground := Value; - FParent.Invalidate; - end; -end; - -procedure TColors.SetChangedText(const Value: TColor); -begin - if FChangedText <> Value then - begin - FChangedText := Value; - FParent.Invalidate; - end; -end; - -procedure TColors.SetCursorFrame(const Value: TColor); -begin - if FCursorFrame <> Value then - begin - FCursorFrame := Value; - FParent.Invalidate; - end; -end; - -procedure TColors.SetEvenColumn(const Value: TColor); -begin - if FEvenColumn <> Value then - begin - FEvenColumn := Value; - FEvenInverted := Invert(FEvenColumn); - FParent.Invalidate; - end; -end; - -procedure TColors.SetOddColumn(const Value: TColor); -begin - if FOddColumn <> Value then - begin - FOddColumn := Value; - FOddInverted := Invert(FOddColumn); - FParent.Invalidate; - end; -end; - -procedure TColors.SetOffset(const Value: TColor); -begin - if FOffset <> Value then - begin - FOffset := Value; - FParent.Invalidate; - end; -end; - -procedure TColors.SetPositionBackground(const Value: TColor); -begin - if FPositionBackground <> Value then - begin - FPositionBackground := Value; - FParent.Invalidate; - end; -end; - -procedure TColors.SetPositionText(const Value: TColor); -begin - if FPositionText <> Value then - begin - FPositionText := Value; - FParent.Invalidate; - end; -end; - - -(* THexToCanvas *) - -Constructor THexToCanvas.Create ( aOwner : TComponent ) ; -begin - Inherited Create ( aOwner ); - fHexEditor := nil; - fFont := TFont.Create; - Font.Name := 'Courier'; - Font.Size := 12; - fBpL := 16; - fOffsDy := odHex; - fOffsCr := ':'; - fMemDy := odHex; - fMemCr := ';'; - fCharDy := True; - fCharCr := #0; - fShrink := True; - fStretch := True; - fBpC := 2; - fSwapNibbles := False; - -end; - -Destructor THexToCanvas.Destroy; -begin - fFont.Free; - inherited ; -end; - -procedure THexToCanvas.SetFont ( Value : TFont ); -begin - fFont.Assign ( Value ); -end; - -procedure THexToCanvas.SetHexEditor ( Value : THexEditor ); -begin - fHexEditor := Value; - if Value <> nil - then - Value.FreeNotification ( Self ); -end; - -procedure THexToCanvas.Notification ( aComponent : TComponent ; aOperation : TOperation ) ; -begin - if fHexEditor <> nil - then - if aOperation = opRemove - then - if aComponent = fHexEditor - then - fHexEditor := nil; -end; - -procedure THexToCanvas.GetLayout; // get some properties from the assigned THexEditor -begin - if fHexEditor <> nil - then begin - fFont.Assign(fHexEditor.Font ); - fBpC := fHexEditor.BytesPerColumn; - fOffsCr := fHexEditor.OffsetSeparator; - fOffsDy := fHexEditor.OffsetDisplay; - fBpL := fHexEditor.BytesPerLine; - fMemDy := odHex; - fMemCr := ' '; - fCharDy := True; - fCharCr := #0; - fSwapNibbles := Boolean(fHexEditor.SwapNibbles); - end; -end; - -function THexToCanvas.Draw ( aCanvas : TCanvas ; const aStart , aEnd : Integer ; const TopLine , BottomLine : string ) : Integer; - - function GetOneLine ( aPos , aEnd : Integer ) : string; - - function GetByteHex ( aPos , aEnd : Integer ) : string; - begin - if aPos > aEnd - then - Result := ' ' - else begin - Result := IntToHex ( fHexEditor.GetByteAtPos ( aPos ),2); - if fSwapNibbles and (Length(Result) = 2) - then - Result := Result[2]+Result[1]; - end; - end; - - function GetByteDec ( aPos , aEnd : Integer ) : string; - begin - if aPos > aEnd - then - Result := ' ' - else - Result := FillLeft ( ' ',IntToStr(fHexEditor.GetByteAtPos ( aPos )) , 3); - end; - - function GetByteOctal ( aPos , aEnd : Integer ) : string; - begin - if aPos > aEnd - then - Result := ' ' - else - Result := FillLeft ( '0',IntToOctal(fHexEditor.GetByteAtPos ( aPos )) , 4); - end; - - var - pCT : Integer; - begin - case fOffsDy of - odNone : Result := ''; - odHex : Result := '0x'+IntToHex( aPos , fHexEditor.fOffsetDisplayWidth-3); - odDec : Result := FillLeft(' ',IntToStr( aPos ), fHexEditor.fOffsetDisplayWidth-1); - odOctal: Result := 'o '+FillLeft('0',IntToOctal( aPos ), fHexEditor.fOffsetDisplayWidth-3); - end; - if fOffsCr <> #0 - then - Result := Result + fOffsCr; - - if fMemDy = odHex - then begin - for pct := 1 to fBpL - do begin - Result := Result+GetByteHex ( aPos-1+pct , aEnd ); - if (pct mod fBpC ) = 0 - then - Result := Result+' '; - end; - end - else - if fMemDy = odDec - then begin - for pct := 1 to fBpL - do begin - Result := Result+GetByteDec ( aPos - 1 + pct , aEnd ); - if (pCt mod fBpC ) = 0 - then - Result := Result+' '; - end; - end - else - if fMemDy = odOctal - then begin - for pct := 1 to fBpL - do begin - Result := Result+GetByteOctal ( aPos - 1 + pct , aEnd ); - if (pCt mod fBpC ) = 0 - then - Result := Result+' '; - end; - end; - if fMemCr <> #0 - then - Result := Result+ fMemCr; - - if fCharDy - then - for pct := 1 to fBpL - do - if (aPos+pCt-1) > aEnd - then - Result := Result+' ' - else - Result := Result + fHexEditor.TranslateToAnsiChar ( fHexEditor.GetByteAtPos ( aPos+pCt-1 ) ); - if fCharCr <> #0 - then - Result := Result+ fCharCr; - end; - - -var - tmpFont : TFont; - OneLine : string; - lLen,lHe,lPos,lup,pEnd : Integer; -begin - - Result := -1; - if fBpL < 1 - then - Exit; - - if fHexEditor = nil - then begin - Result := MaxInt; - Exit; - end; - - pEnd := aEnd; - - if pEnd >= fHexEditor.DataSize - then - pEnd := fHexEditor.DataSize -1; - - if aStart > pEnd - then - Exit; - - // länge einer zeile berechnen - OneLine := GetOneLine ( aStart , pEnd ); - tmpFont := TFont.Create; - try - tmpFont.Assign ( aCanvas.Font ); - aCanvas.Font.Assign ( fFont ); - - if fStretch - then begin - lLen := aCanvas.TextWidth ( OneLine ); - while lLen < (fRightM - fLeftM) - do begin - aCanvas.Font.Size := aCanvas.Font.Size + 1; - lLen := aCanvas.TextWidth ( OneLine ); - end; - while lLen > (fRightM - fLeftM) - do begin - aCanvas.Font.Size := aCanvas.Font.Size - 1; - lLen := aCanvas.TextWidth ( OneLine ); - end; - end; - - if fShrink - then begin - lLen := aCanvas.TextWidth ( OneLine ); - while lLen > (fRightM - fLeftM) - do begin - aCanvas.Font.Size := aCanvas.Font.Size - 1; - lLen := aCanvas.TextWidth ( OneLine ); - end; - end; - - - lHe := Round(aCanvas.TextHeight ( OneLine ) * 1.2); - if lHe = aCanvas.TextHeight ( OneLine ) - then - inc ( lHe ); - - lPos := aStart; - lUp := fTopM; - if TopLine <> '' - then begin - aCanvas.TextOut ( fLeftM , lUp , TopLine ); - lUp := lUp+lHe; - end; - - if BottomLine <> '' - then - fBottomM := fBottomM - lHe; - - while (lHe + lUp ) <= fBottomM - do begin - aCanvas.TextOut ( fLeftM , lUp , OneLine ); - lPos := lPos+fBpL; - if lPos > pEnd - then begin - lPos := pEnd + 1; - Break; - end; - OneLine := GetOneLine ( lPos , pEnd ); - lUp := lUp + lHe; - end; - Result := lPos; - - if BottomLine <> '' - then - aCanvas.TextOut ( fLeftM , fBottomM , BottomLine ); - - finally - aCanvas.Font.Assign ( tmpFont ); - tmpFont.Free; - end; - -end; - -end. - - diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/md5unit.pas b/sdk/components/ElPack/BCBDemos/ElKeeper/md5unit.pas deleted file mode 100644 index c1d513229b3..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/md5unit.pas +++ /dev/null @@ -1,498 +0,0 @@ -unit Md5unit; -{***************************************************************************** - UNIT: MD5Unit - Description: This unit contains an Object Pascal Object which can be used to - perform an MD5 Hashing of byte array, file, or Pascal String. An - MD5 Hashing or Message Digest is a 'finger print' of the - input. This is 100% PASCAL!!! - - "It is conjectured that it is computationally infeasible - to produce two messages having the same message digest".... - "The MD5 algorithm is intended for digital signature - applications, where a large file must be "compressed" in a - secure manner before being encrypted with a private (secret) key - under a public-key cryptosystem such as RSA." R. Rivest - RfC: 1321, RSA Data Security, Inc. April 1992 - - The MD5 Algorithm was produced by RSA Data Security Inc.(See LEGAL) - ----------------------------------------------------------------------------- - Code Author: Greg Carter, gregc@cryptocard.com - Organization: CRYPTOCard Corporation, info@cryptocard.com - R&D Division, Carleton Place, ON, CANADA, K7C 3T2 - 1-613-253-3152 Voice, 1-613-253-4685 Fax. - Date of V.1: Jan. 3 1996. - - Compatibility & Testing with BP7.0: Anne Marcel Roorda, garfield@xs4all.nl - -----------------------------------------------------------------------------} - {Useage: Below is typical usage(for File)of the MD5 Object, Follow these steps: - Step 1: Declare and Create a New TMD5 object. This can be done by - 'Drag N Drop' a TMD5 off the Delphi Tool Pallet, - or explicitly in code. - Step 2: Set the InputType. - Step 3: Point to the input(InputString, InputFilePath, pInputArray). - Step 4: Point to the output Array(pOutputArray). - Step 5: Call the MD5_Hash procedure. - Your Done! - -Example -procedure Tcryptfrm.Button1Click(Sender: TObject); -var - md5hash: TMD5; (* Step 1a *) - outarray: array[0..15] of char; - InputFile: File; - startTime: LongInt; -begin - md5hash := TMD5.Create(Self); (* Step 1b *) - try - If OpenDialog1.Execute then - begin - md5hash.InputType := SourceFile; (* Step 2 *) - md5hash.InputFilePath := OpenDialog1.FileName; (* Step 3 *) - md5hash.pOutputArray := @outarray; (* Step 4 *) - startTime := timeGetTime; - md5hash.MD5_Hash; (* Step 5 *) - LEDLabel1.Caption := IntToStr(timeGetTime - startTime); - Label2.Caption := StrPas(outarray); (* Do something with output *) - end;(* if *) - finally - md5hash.free; - end; -end; -{-----------------------------------------------------------------------------} -{LEGAL: The algorithm was placed into the public domain, hence requires - no license or runtime fees. However this code is copyright by - CRYPTOCard. CRYPTOCard grants anyone who may wish to use, modify - or redistribute this code privileges to do so, provided the user - agrees to the following three(3) rules: - - 1)Any Applications, (ie exes which make use of this - Object...), for-profit or non-profit, - must acknowledge the author of this Object(ie. - MD5 Implementation provided by Greg Carter, CRYPTOCard - Corporation) somewhere in the accompanying Application - documentation(ie AboutBox, HelpFile, readme...). NO runtime - or licensing fees are required! - - 2)Any Developer Component(ie Delphi Component, Visual Basic VBX, - DLL) derived from this software must acknowledge that it is - derived from "MD5 Object Pascal Implementation Originated by - Greg Carter, CRYPTOCard Corporation 1996". Also all efforts should - be made to point out any changes from the original. - !!!!!Further, any Developer Components based on this code - *MAY NOT* be sold for profit. This Object was placed into the - public domain, and therefore any derived components should - also.!!!!! - - 3)CRYPTOCard Corporation makes no representations concerning this - software or the suitability of this software for any particular - purpose. It is provided "as is" without express or implied - warranty of any kind. CRYPTOCard accepts no liability from any - loss or damage as a result of using this software. - -CRYPTOCard Corporation is in no way affiliated with RSA Data Security Inc. -The MD5 Algorithm was produced by RSA Data Security Inc. ------------------------------------------------------------------------------ -Why Use this instead of a freely available C DLL? - -The goal was to provide a number of Encryption/Hash implementations in Object -Pascal, so that the Pascal Developer has considerably more freedom. These -Implementations are geared toward the PC(Intel) Microsoft Windows developer, -who will be using Borland's New 32bit developement environment(Delphi32). The -code generated by this new compiler is considerablely faster then 16bit versions. -And should provide the Developer with faster implementations then those using -C DLLs. ------------------------------------------------------------------------------ -NOTES: Version 1 does not contain any cross-platform considerations. If trying - to use this code on a Big Endian style processor you will need to write - additional code to reorder the bytes. ------------------------------------------------------------------------------- -Revised: 00/00/00 BY: ******* Reason: ****** ------------------------------------------------------------------------------- -} -{Declare the compiler defines} -{------Changeable compiler switches-----------------------------------} -{$A+ Word align variables } -{$F+ Force Far calls } -{$K+ Use smart callbacks -{$N+ Allow coprocessor instructions } -{$P+ Open parameters enabled } -{$S+ Stack checking } -{$T- @ operator is NOT typed } -{$U- Non Pentium safe FDIV } -{$Z- No automatic word-sized enumerations} -{$H+ Huge Strings} -{$Q- No Integer overflow checking} -{---------------------------------------------------------------------} - -interface -uses SysUtils, Classes, Windows -{$IFNDEF MD5ONLY} -, CryptCon -{$ENDIF} -; - - {An enumerated typt which tells the object what type the input to the cipher is} -{$IFDEF MD5ONLY} -type - TSourceType = (SourceFile, SourceByteArray,SourceString); -{$ENDIF} - -Type -ULONG32 = record - LoWord16: WORD; - HiWord16: WORD; -end; - -PULONG32 = ^ULONG32; -PLong = ^LongInt; - -hashDigest = record - A: DWORD; - B: DWORD; - C: DWORD; - D: DWORD; -end;{hashArray} - -PTR_Hash = ^hashDigest; - - TMD5 = class - Private - { Private declarations } - - FType : TSourceType; {Source type, whether its a file or ByteArray, or - a Pascal String} - FInputFilePath: String; {Full Path to Input File} - FInputArray: PByte; {Point to input array} - FInputString: String; {Input String} - FOutputDigest: PTR_Hash; {output MD5 Digest} - FSourceLength: LongInt; {input length in BYTES} - FActiveBlock: Array[0..15] of DWORD; {the 64Byte block being transformed} - FA, FB, FC, FD, FAA, FBB, FCC, FDD: DWORD; - {FA..FDD are used during Step 4, the transform. I made them part of the - Object to cut down on time used to pass variables.} - {FF, GG, HH, II are used in Step 4, the transform} - Procedure FF(var a, b, c, d, x: DWORD; s: BYTE; ac: DWORD); - Procedure GG(var a, b, c, d, x: DWORD; s: BYTE; ac: DWORD); - Procedure HH(var a, b, c, d, x: DWORD; s: BYTE; ac: DWORD); - Procedure II(var a, b, c, d, x: DWORD; s: BYTE; ac: DWORD); - - protected - { Protected declarations } - public - { Public declarations } - {Initialize is used in Step 3, this fills FA..FD with init. values - and points FpA..FpD to FA..FD} - Procedure MD5_Initialize; - {this is where all the magic happens} - Procedure MD5_Transform; - Procedure MD5_Finish; - Procedure MD5_Hash_Bytes; -{ Procedure MD5_Hash_String;(Pascal Style strings???)} - Procedure MD5_Hash_File; - {This procedure sends the data 64Bytes at a time to MD5_Transform} - Procedure MD5_Hash; - Property pInputArray: PByte read FInputArray write FInputArray; - Property pOutputArray: PTR_Hash read FOutputDigest write FOutputDigest;{!!See FOutputArray} - Published - Property InputType: TSourceType read FType write FType; - Property InputFilePath: String read FInputFilePath write FInputFilePath; - Property InputString: String read FInputString write FInputString; - Property InputLength: LongInt read FSourceLength write FSourceLength; -end;{TMD5} - -Const -{Constants for MD5Transform routine.} - S11 = 7; - S12 = 12; - S13 = 17; - S14 = 22; - S21 = 5; - S22 = 9; - S23 = 14; - S24 = 20; - S31 = 4; - S32 = 11; - S33 = 16; - S34 = 23; - S41 = 6; - S42 = 10; - S43 = 15; - S44 = 21; - -implementation - -{This will only work on an intel} - -{$warnings off} -Function ROL(A: Longint; Amount: BYTE): Longint; -begin - asm - mov cl, Amount - mov eax, a - rol eax, cl - mov result, eax - end; -end; -{$warnings on} - -Procedure TMD5.MD5_Initialize; -begin - FA := $67452301; FB:=$efcdab89; FC:=$98badcfe; FD:=$10325476; -end;{MD5_Initialize} - -Procedure TMD5.FF; -{Purpose: Round 1 of the Transform. - Equivalent to a = b + ((a + F(b,c,d) + x + ac) <<< s) - Where F(b,c,d) = b And c Or Not(b) And d -} -begin - a := a + ((b and c) Or (not(b) And (d))) + x + ac; - a:= ROL(a, s); - Inc(a, b); -end;{FF} - -Procedure TMD5.GG; -{Purpose: Round 2 of the Transform. - Equivalent to a = b + ((a + G(b,c,d) + x + ac) <<< s) - Where G(b,c,d) = b And d Or c Not d -} -begin - a := a + ((b And d) Or ( c And (Not d))) + x + ac; - a:= ROL(a, s); - Inc(a, b); -end;{GG} - -Procedure TMD5.HH; -{Purpose: Round 3 of the Transform. - Equivalent to a = b + ((a + H(b,c,d) + x + ac) <<< s) - Where H(b,c,d) = b Xor c Xor d -} -begin - a := a + (b Xor c Xor d) + x + ac; - a := ROL(a, s); - a := b + a; -end;{HH} - -Procedure TMD5.II; -{Purpose: Round 4 of the Transform. - Equivalent to a = b + ((a + I(b,c,d) + x + ac) <<< s) - Where I(b,c,d) = C Xor (b Or Not(d)) -} -begin - a := a + (c Xor (b Or (Not d))) + x + ac; - a := ROL(a, s); - a := b + a; -end;{II} - -Procedure TMD5.MD5_Transform; -{Purpose: Perform Step 4 of the algorithm. This is where all the important - stuff happens. This performs the rounds on a 64Byte Block. This - procedure should be called in a loop until all input data has been - transformed. -} - -begin - FAA := FA; - FBB := FB; - FCC := FC; - FDD := FD; - - { Round 1 } - FF (FA, FB, FC, FD, FActiveBlock[ 0], S11, $d76aa478); { 1 } - FF (FD, FA, FB, FC, FActiveBlock[ 1], S12, $e8c7b756); { 2 } - FF (FC, FD, FA, FB, FActiveBlock[ 2], S13, $242070db); { 3 } - FF (FB, FC, FD, FA, FActiveBlock[ 3], S14, $c1bdceee); { 4 } - FF (FA, FB, FC, FD, FActiveBlock[ 4], S11, $f57c0faf); { 5 } - FF (FD, FA, FB, FC, FActiveBlock[ 5], S12, $4787c62a); { 6 } - FF (FC, FD, FA, FB, FActiveBlock[ 6], S13, $a8304613); { 7 } - FF (FB, FC, FD, FA, FActiveBlock[ 7], S14, $fd469501); { 8 } - FF (FA, FB, FC, FD, FActiveBlock[ 8], S11, $698098d8); { 9 } - FF (FD, FA, FB, FC, FActiveBlock[ 9], S12, $8b44f7af); { 10 } - FF (FC, FD, FA, FB, FActiveBlock[10], S13, $ffff5bb1); { 11 } - FF (FB, FC, FD, FA, FActiveBlock[11], S14, $895cd7be); { 12 } - FF (FA, FB, FC, FD, FActiveBlock[12], S11, $6b901122); { 13 } - FF (FD, FA, FB, FC, FActiveBlock[13], S12, $fd987193); { 14 } - FF (FC, FD, FA, FB, FActiveBlock[14], S13, $a679438e); { 15 } - FF (FB, FC, FD, FA, FActiveBlock[15], S14, $49b40821); { 16 } - - { Round 2 } - GG (FA, FB, FC, FD, FActiveBlock[ 1], S21, $f61e2562); { 17 } - GG (FD, FA, FB, FC, FActiveBlock[ 6], S22, $c040b340); { 18 } - GG (FC, FD, FA, FB, FActiveBlock[11], S23, $265e5a51); { 19 } - GG (FB, FC, FD, FA, FActiveBlock[ 0], S24, $e9b6c7aa); { 20 } - GG (FA, FB, FC, FD, FActiveBlock[ 5], S21, $d62f105d); { 21 } - GG (FD, FA, FB, FC, FActiveBlock[10], S22, $2441453); { 22 } - GG (FC, FD, FA, FB, FActiveBlock[15], S23, $d8a1e681); { 23 } - GG (FB, FC, FD, FA, FActiveBlock[ 4], S24, $e7d3fbc8); { 24 } - GG (FA, FB, FC, FD, FActiveBlock[ 9], S21, $21e1cde6); { 25 } - GG (FD, FA, FB, FC, FActiveBlock[14], S22, $c33707d6); { 26 } - GG (FC, FD, FA, FB, FActiveBlock[ 3], S23, $f4d50d87); { 27 } - GG (FB, FC, FD, FA, FActiveBlock[ 8], S24, $455a14ed); { 28 } - GG (FA, FB, FC, FD, FActiveBlock[13], S21, $a9e3e905); { 29 } - GG (FD, FA, FB, FC, FActiveBlock[ 2], S22, $fcefa3f8); { 30 } - GG (FC, FD, FA, FB, FActiveBlock[ 7], S23, $676f02d9); { 31 } - GG (FB, FC, FD, FA, FActiveBlock[12], S24, $8d2a4c8a); { 32 } - - { Round 3 } - HH (FA, FB, FC, FD, FActiveBlock[ 5], S31, $fffa3942); { 33 } - HH (FD, FA, FB, FC, FActiveBlock[ 8], S32, $8771f681); { 34 } - HH (FC, FD, FA, FB, FActiveBlock[11], S33, $6d9d6122); { 35 } - HH (FB, FC, FD, FA, FActiveBlock[14], S34, $fde5380c); { 36 } - HH (FA, FB, FC, FD, FActiveBlock[ 1], S31, $a4beea44); { 37 } - HH (FD, FA, FB, FC, FActiveBlock[ 4], S32, $4bdecfa9); { 38 } - HH (FC, FD, FA, FB, FActiveBlock[ 7], S33, $f6bb4b60); { 39 } - HH (FB, FC, FD, FA, FActiveBlock[10], S34, $bebfbc70); { 40 } - HH (FA, FB, FC, FD, FActiveBlock[13], S31, $289b7ec6); { 41 } - HH (FD, FA, FB, FC, FActiveBlock[ 0], S32, $eaa127fa); { 42 } - HH (FC, FD, FA, FB, FActiveBlock[ 3], S33, $d4ef3085); { 43 } - HH (FB, FC, FD, FA, FActiveBlock[ 6], S34, $4881d05); { 44 } - HH (FA, FB, FC, FD, FActiveBlock[ 9], S31, $d9d4d039); { 45 } - HH (FD, FA, FB, FC, FActiveBlock[12], S32, $e6db99e5); { 46 } - HH (FC, FD, FA, FB, FActiveBlock[15], S33, $1fa27cf8); { 47 } - HH (FB, FC, FD, FA, FActiveBlock[ 2], S34, $c4ac5665); { 48 } - - { Round 4 } - II (FA, FB, FC, FD, FActiveBlock[ 0], S41, $f4292244); { 49 } - II (FD, FA, FB, FC, FActiveBlock[ 7], S42, $432aff97); { 50 } - II (FC, FD, FA, FB, FActiveBlock[14], S43, $ab9423a7); { 51 } - II (FB, FC, FD, FA, FActiveBlock[ 5], S44, $fc93a039); { 52 } - II (FA, FB, FC, FD, FActiveBlock[12], S41, $655b59c3); { 53 } - II (FD, FA, FB, FC, FActiveBlock[ 3], S42, $8f0ccc92); { 54 } - II (FC, FD, FA, FB, FActiveBlock[10], S43, $ffeff47d); { 55 } - II (FB, FC, FD, FA, FActiveBlock[ 1], S44, $85845dd1); { 56 } - II (FA, FB, FC, FD, FActiveBlock[ 8], S41, $6fa87e4f); { 57 } - II (FD, FA, FB, FC, FActiveBlock[15], S42, $fe2ce6e0); { 58 } - II (FC, FD, FA, FB, FActiveBlock[ 6], S43, $a3014314); { 59 } - II (FB, FC, FD, FA, FActiveBlock[13], S44, $4e0811a1); { 60 } - II (FA, FB, FC, FD, FActiveBlock[ 4], S41, $f7537e82); { 61 } - II (FD, FA, FB, FC, FActiveBlock[11], S42, $bd3af235); { 62 } - II (FC, FD, FA, FB, FActiveBlock[ 2], S43, $2ad7d2bb); { 63 } - II (FB, FC, FD, FA, FActiveBlock[ 9], S44, $eb86d391); { 64 } - - Inc(FA, FAA); - Inc(FB, FBB); - Inc(FC, FCC); - Inc(FD, FDD); - { Zeroize sensitive information} - FillChar(FActiveBlock, SizeOf(FActiveBlock), #0); -end;{TMD5.MD5_Transform} - -Procedure TMD5.MD5_Hash; -var - pStr: PChar; -begin - MD5_Initialize; - case FType of - SourceFile: - begin - MD5_Hash_File; - end;{SourceFile} - SourceByteArray: - begin - MD5_Hash_Bytes; - end;{SourceByteArray} - SourceString: - begin - {Convert Pascal String to Byte Array} - pStr:=nil; - try {protect dyanmic memory allocation} - GetMem(pStr, Length(FInputString)+1); - StrPCopy(pStr, FInputString); - FSourceLength := Length(FInputString); - FInputArray := Pointer(pStr); - MD5_Hash_Bytes; - finally - if pStr<>nil then FreeMem(pStr, Length(FInputString)+1); - end; - end;{SourceString} - end;{case} - MD5_Finish; -end;{TMD5.MD5_Hash} - -Procedure TMD5.MD5_Hash_Bytes; -var - Buffer: array[0..4159] of Byte; - Count64: Comp; - index: longInt; -begin - Move(FInputArray^, Buffer, FSourceLength); - Count64 := FSourceLength * 8; {Save the Length(in bits) before padding} - Buffer[FSourceLength] := $80; {Must always pad with at least a '1'} - inc(FSourceLength); - - while (FSourceLength mod 64)<>56 do begin - Buffer[FSourceLength] := 0; - Inc(FSourceLength); - end; - Move(Count64,Buffer[FSourceLength],SizeOf(Count64){This better be 64bits}); - index := 0; - Inc(FSourceLength, 8); - repeat - MoveMemory(@FActiveBlock,@Buffer[Index],64); - MD5_Transform; - Inc(Index,64); - until Index = FSourceLength; -end;{TMD5.Hash_Bytes} - -Procedure TMD5.MD5_Hash_File; -var - Buffer:array[0..4159] of BYTE; - InputFile: File; - Count64: Comp; - DoneFile : Boolean; - Index: LongInt; - NumRead: integer; -begin -DoneFile := False; -{$IFDEF DELPHI} - AssignFile(InputFile, FInputFilePath); -{$ENDIF} -{$IFDEF BP7} - Assign(InputFile, FInputFilePath); -{$ENDIF} - -Reset(InputFile, 1); -Count64 := 0; -repeat - BlockRead(InputFile,Buffer,4096,NumRead); - Count64 := Count64 + NumRead; - if NumRead<>4096 {reached end of file} - then begin - Buffer[NumRead]:= $80; - Inc(NumRead); - while (NumRead mod 64)<>56 - do begin - Buffer[ NumRead ] := 0; - Inc(NumRead); - end; - Count64 := Count64 * 8; - Move(Count64,Buffer[NumRead],8); - Inc(NumRead,8); - DoneFile := True; - end; - Index := 0; - repeat - Move(Buffer[Index], FActiveBlock, 64); - {Flip bytes here on a Mac(I think)} - - MD5_Transform; - Inc(Index,64); - until Index = NumRead; - until DoneFile; -{$IFDEF DELPHI} - CloseFile(InputFile); -{$ENDIF} -{$IFDEF BP7} - Close(InputFile); -{$ENDIF} -end;{TMD5.MD5_Hash_File} - - -Procedure TMD5.MD5_Finish; -begin - FOutputDigest^.A := FA; - FOutputDigest^.B := FB; - FOutputDigest^.C := FC; - FOutputDigest^.D := FD; -end; -end. diff --git a/sdk/components/ElPack/BCBDemos/ElKeeper/readme.txt b/sdk/components/ElPack/BCBDemos/ElKeeper/readme.txt deleted file mode 100644 index eda804e6f6b..00000000000 --- a/sdk/components/ElPack/BCBDemos/ElKeeper/readme.txt +++ /dev/null @@ -1,10 +0,0 @@ -EldoS Keeper source code. - -EldoS Keeper is built using exactly this code. -Note, that if you get an Access Violation, this doesn't mean, that there is a -problem with some code. This can happen because of the compiler options. - -This demo uses freeware third-party component named HexEditor. - -This code can be compiled only with C++Builder 4 or 5. C++Builder 3 can't be -used. diff --git a/sdk/components/ElPack/BCBDemos/GridDemo/GridDemo.bpr b/sdk/components/ElPack/BCBDemos/GridDemo/GridDemo.bpr deleted file mode 100644 index 5818495068a..00000000000 --- a/sdk/components/ElPack/BCBDemos/GridDemo/GridDemo.bpr +++ /dev/null @@ -1,161 +0,0 @@ -# --------------------------------------------------------------------------- -!if !$d(BCB) -BCB = $(MAKEDIR)\.. -!endif - -# --------------------------------------------------------------------------- -# IDE SECTION -# --------------------------------------------------------------------------- -# The following section of the project makefile is managed by the BCB IDE. -# It is recommended to use the IDE to change any of the values in this -# section. -# --------------------------------------------------------------------------- - -VERSION = BCB.03 -# --------------------------------------------------------------------------- -PROJECT = GridDemo.exe -OBJFILES = Main.obj GridDemo.obj -RESFILES = GridDemo.res -DEFFILE = -RESDEPEN = $(RESFILES) Main.dfm -LIBFILES = -LIBRARIES = -SPARELIBS = VCL35.lib elpackB3.lib -PACKAGES = vclx35.bpi VCL35.bpi vcldb35.bpi vcldbx35.bpi bcbsmp35.bpi dclocx35.bpi \ - Qrpt35.bpi teeui35.bpi VclSmp35.bpi teedb35.bpi tee35.bpi ibsmp35.bpi dss35.bpi \ - NMFast35.bpi inetdb35.bpi inet35.bpi VclMid35.bpi elpackB3.bpi -# --------------------------------------------------------------------------- -PATHCPP = .; -PATHASM = .; -PATHPAS = .; -PATHRC = .; -DEBUGLIBPATH = $(BCB)\lib\debug -RELEASELIBPATH = $(BCB)\lib\release -# --------------------------------------------------------------------------- -CFLAG1 = -Od -Hc -w -Ve -r- -k -y -v -vi- -c -b- -w-par -w-inl -Vx -tW -CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -D_RTLDLL;USEPACKAGES -H=$(BCB)\lib\vcl35.csm -CFLAG3 = -Tkh30000 -PFLAGS = -U..\..\lib;$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ - -I$(BCB)\include;$(BCB)\include\vcl -D_RTLDLL;USEPACKAGES -$Y -$W -$O- -v -JPHN \ - -M -RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl -D_RTLDLL;USEPACKAGES -AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /d_RTLDLL /dUSEPACKAGES /mx /w2 /zd -LFLAGS = -L..\..\lib;$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpe -x -Gn -v -IFLAGS = -# --------------------------------------------------------------------------- -ALLOBJ = c0w32.obj $(PACKAGES) sysinit.obj $(OBJFILES) -ALLRES = $(RESFILES) -ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib -# --------------------------------------------------------------------------- -!ifdef IDEOPTIONS - -[Version Info] -IncludeVerInfo=0 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1049 -CodePage=1251 - -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= - -[Debugging] -DebugSourceDirs=$(BCB)\source\vcl - -[Parameters] -RunParams= -HostApplication= - -!endif - -# --------------------------------------------------------------------------- -# MAKE SECTION -# --------------------------------------------------------------------------- -# This section of the project file is not used by the BCB IDE. It is for -# the benefit of building from the command-line using the MAKE utility. -# --------------------------------------------------------------------------- - -.autodepend -# --------------------------------------------------------------------------- -!if !$d(BCC32) -BCC32 = bcc32 -!endif - -!if !$d(DCC32) -DCC32 = dcc32 -!endif - -!if !$d(TASM32) -TASM32 = tasm32 -!endif - -!if !$d(LINKER) -LINKER = ilink32 -!endif - -!if !$d(BRCC32) -BRCC32 = brcc32 -!endif -# --------------------------------------------------------------------------- -!if $d(PATHCPP) -.PATH.CPP = $(PATHCPP) -.PATH.C = $(PATHCPP) -!endif - -!if $d(PATHPAS) -.PATH.PAS = $(PATHPAS) -!endif - -!if $d(PATHASM) -.PATH.ASM = $(PATHASM) -!endif - -!if $d(PATHRC) -.PATH.RC = $(PATHRC) -!endif -# --------------------------------------------------------------------------- -$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) - $(BCB)\BIN\$(LINKER) @&&! - $(LFLAGS) + - $(ALLOBJ), + - $(PROJECT),, + - $(ALLLIB), + - $(DEFFILE), + - $(ALLRES) -! -# --------------------------------------------------------------------------- -.pas.hpp: - $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } - -.pas.obj: - $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } - -.cpp.obj: - $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } - -.c.obj: - $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } - -.asm.obj: - $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ - -.rc.res: - $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< -# --------------------------------------------------------------------------- diff --git a/sdk/components/ElPack/BCBDemos/GridDemo/GridDemo.cpp b/sdk/components/ElPack/BCBDemos/GridDemo/GridDemo.cpp deleted file mode 100644 index f04dcd09db7..00000000000 --- a/sdk/components/ElPack/BCBDemos/GridDemo/GridDemo.cpp +++ /dev/null @@ -1,22 +0,0 @@ -//--------------------------------------------------------------------------- -#include -#pragma hdrstop -USERES("GridDemo.res"); -USEFORMNS("Main.pas", Main, Form1); -//--------------------------------------------------------------------------- -WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) -{ - try - { - Application->Initialize(); - Application->Title = "Grid Demo"; - Application->CreateForm(__classid(TForm1), &Form1); - Application->Run(); - } - catch (Exception &exception) - { - Application->ShowException(&exception); - } - return 0; -} -//--------------------------------------------------------------------------- diff --git a/sdk/components/ElPack/BCBDemos/GridDemo/GridDemo.res b/sdk/components/ElPack/BCBDemos/GridDemo/GridDemo.res deleted file mode 100644 index b369156c076dbea4fc87e1cdb77a4e86205ae2cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmb7@u}Z{15QhI;0_pS$8!J;<`UWa4?24$bVsWr#rdYUz6Y@B*%%fOZT3&Im{+n!a z2_A@({F#}2GqcOW0zgHDFo@y8zE&g8S(Ei_y}m5QqH6{fbw_1Lzu9xz1mFvi!STzG z5_DZh5H}HB7#zRDz5?oZTH|)KZ!1=6PixFm+qT~C{eH$tCvHAkO*(P6b9%vzRtxU6 z-da9szA;Mo>y?Loedkksx$oCEM(Yr5;z}#4HulJs+HM>st|MnY_OpJ;)snM*!Q*^w zX8m!#O!J*%zrm3kr<^cP`*+SO;u)8M82te^jwXeG77w5?G%1AXKX|O3_osX~Kj$Rn zp`Y)4%1g^r^qxB#IAE;>-p1??AE(TeGd`t~|Ieu_>Q=C-yI;yfhoe3jA5e!205?eIz$2M5>f{EcHluQ@kzg)Bx@*l=yY})R zde!LE4#QRy1l2s$|->& zD)-X~5YY#|N8`kL9cV{$7iHu|EfR5n6|?9tETp5b7D2SGgSbLYBjZB7$&YyxPH{$L zNn7-pNOf$=rbf~;>Ux+oND5T0)yNo6#Xi8O&Eib>mDXg0>7YlOCt4*w_x@)l+8H5- zY#aiCSbF7W91rv>LkS~c?Up)#2f*j4sotBDOhz25hd#*ZP?@S&#a0tb9DG6u{hZBa zmfF9(dvBws2q|)gP(l4vUMRl)Do@O2zuov&(5He~&B+MNqIe2iNEcKY-}vtG{CO^4 zc>ezNgRPDJ<=IiPBTTYeu7foA^PC}3i8kWvu-x?)^}F=vF-F*kS;TL#-! zW#cYcJ(H5rFuee)QdMx{FjV=)Bm~Uk#0#|Bd4BH~y9z()q87a|1>WR%+{NPDS-rg6 zy}b07wJPO$4Mwt|!dWp)*f_sTc!tO&!Vk1$Z-~!8c)mWHNIWlOTt?FoxSo)WOh`5? zhLUlm*T*t(4E!I4QXz8sXPtd7!Y4hhfMKa-!6(XUJ~MBP9Wq&eN2IPEn@Z^ zGqdt$x3B){cI(lym+MSbbr{s)4X9b9CYyzpNhu&dY9tV!*V&}{B2x)$4N|$_ nil) then - begin - if Key = VK_UP then - begin - if QuickEditCheckBox.Checked and Tree.IsEditing then - Tree.EndEdit(true); - - i := Tree.ItemFocused.AbsoluteIndex; - if i > 0 then - begin - Tree.ItemFocused := Tree.Items[i - 1]; - Tree.EnsureVisible(Tree.ItemFocused); - end; - - if QuickEditCheckBox.Checked then - Tree.EditItem(Tree.ItemFocused, Tree.SelectColumn); - Key := 0; - end - else - if Key = VK_DOWN then - begin - if QuickEditCheckBox.Checked and Tree.IsEditing then - Tree.EndEdit(true); - - i := Tree.ItemFocused.AbsoluteIndex; - if i < Tree.Items.Count - 1 then - begin - Tree.ItemFocused := Tree.Items[i + 1]; - Tree.EnsureVisible(Tree.ItemFocused); - end; - - if QuickEditCheckBox.Checked then - Tree.EditItem(Tree.ItemFocused, Tree.SelectColumn); - Key := 0; - end - else - if Key = VK_LEFT then - begin - if QuickEditCheckBox.Checked and Tree.IsEditing then - Tree.EndEdit(true); - if Tree.SelectColumn = 1 then - Tree.SelectColumn := 0 - else - begin - - i := Tree.ItemFocused.AbsoluteIndex; - if i > 0 then - begin - Tree.ItemFocused := Tree.Items[i - 1]; - Tree.EnsureVisible(Tree.ItemFocused); - end; - Tree.SelectColumn := 1; - end; - if QuickEditCheckBox.Checked then - Tree.EditItem(Tree.ItemFocused, Tree.SelectColumn); - Key := 0; - end - else - if Key = VK_RIGHT then - begin - if Tree.SelectColumn = 0 then - Tree.SelectColumn := 1 - else - begin - i := Tree.ItemFocused.AbsoluteIndex; - if i < Tree.Items.Count - 1 then - begin - Tree.ItemFocused := Tree.Items[i + 1]; - Tree.EnsureVisibleBottom(Tree.ItemFocused); - end; - Tree.SelectColumn := 0; - end; - if QuickEditCheckBox.Checked then - Tree.EditItem(Tree.ItemFocused, Tree.SelectColumn); - Key := 0; - end - end; - if Key = VK_INSERT then - begin - Item := Tree.Items.AddItem(nil); - Tree.EnsureVisibleBottom(Item); - if Tree.ItemFocused = nil then - begin - Tree.ItemFocused := Item; - if QuickEditCheckBox.Checked then - Tree.EditItem(Item, Tree.SelectColumn); - end; - Key := 0; - end - else - if Key = VK_DELETE then - begin - Tree.Items.DeleteItem(Tree.ItemFocused); - Key := 0; - end; - end; -end; - -procedure TForm1.TreeClick(Sender: TObject); -var Item : TElTreeItem; - HCol : integer; - IP : TSTItemPart; - P : TPoint; -begin - GetCursorPos(P); - P := Tree.ScreenToClient(P); - Item := Tree.GetItemAt(P.X, P.Y, IP, HCol); - if (Item <> nil) and ((HCol = 0) or (HCol = 1)) then - begin - if QuickEditCheckBox.Checked and Tree.IsEditing then - Tree.EndEdit(true); - Tree.ItemFocused := Item; - Tree.SelectColumn := HCol; - if QuickEditCheckBox.Checked then - Tree.EditItem(Tree.ItemFocused, Tree.SelectColumn); - end; -end; - -procedure TForm1.TreeDblClick(Sender: TObject); -var Item : TElTreeItem; - HCol : integer; - IP : TSTItemPart; - P : TPoint; -begin - GetCursorPos(P); - P := Tree.ScreenToClient(P); - Item := Tree.GetItemAt(P.X, P.Y, IP, HCol); - if (Item <> nil) and ((HCol = 0) or (HCol = 1)) then - begin - if QuickEditCheckBox.Checked and Tree.IsEditing then - Tree.EndEdit(true); - Tree.ItemFocused := Item; - Tree.SelectColumn := HCol; - Tree.EditItem(Tree.ItemFocused, Tree.SelectColumn); - end; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/IniEdit/ElIniEdit.res b/sdk/components/ElPack/BCBDemos/IniEdit/ElIniEdit.res deleted file mode 100644 index 9729e87353d022555db6facee329f79dd936351d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1640 zcmd5+&ubb{5T11f4VL1e6hbeXQmBPcOcg@vp$SO?fu@nBcumDvn`&0kq?+3j54(^< z{*}O93QNI1B*z|li?@2}_M3S=T|=bpt&_~YH#^^a^W*K4h{%G5p;ByTy7;At>1VU4)lRO! zR?>5Ofs(7c?by>);O8C%R|)0s=L&(>Hw%7F*%IuVxjD8Qj#5G3n+2h#r0cn}_T?z} zdf}V-z!yIEww>rEJ;Z0(%k{Ec1pOJizuK8+pG$z}ITB9EbGPTY-EMDUUycMZ*N#0- zM)7013Ev-VmG%F4hUoDhH39tJYX}*B2*aN@N{8c>?O`)~fHCkfh2eeLr48Dlx6n=6 z!>T2EFZebXWLass6?}^fx}MynGsTJ!67ACgp0DX0b~}>cK=N&4&+;vP z^Gop?#8-_o@%oCL5GGXYV#?zs1HgAeZ8{>GYP5~DK~*r@^pTqIJ`_xr^5}F8nnw*> z(K6iw-zG4})S@!*XXv^NtIDK6HRurDee8>r0akNw0nwp~RG`g_|J-Txh&QxuvK(Zg|!QwGwi;gwmMh{v0TSA$9u4s z$9d;111IXxEFT}sce*@05Ln{CP diff --git a/sdk/components/ElPack/BCBDemos/IniEdit/INITIPS.RES b/sdk/components/ElPack/BCBDemos/IniEdit/INITIPS.RES deleted file mode 100644 index 92ea0a1d0d5be9b9a38b8a48169db17a4c6a631a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1308 zcmaiz%TB^j5QfLZxb_jcW21>HUAXfWO*F7@o}41!Bg^2f^>k* zoLe4jBi?V7M)~D0k7e+XWx@S^Pu`pes=1GUX_Hp&8{{dqPpG}Fcx+>CbKVj4X7C_i zu{UgacI^=k8=nsPPT(vf-uF&KU2GG3;9Y=6kq04%YMOfRQ$jO*c$4T(=niu#N{3BwhcQGivUy^w) z@#;|$atNc?+D7K})Yc;`@{oDk_Gu4??a9+DrfZa*!`bv{70dmKwO4Q^R3cWyYMUqR zhGx+bm`X`ZIUZe~eySs?r5+vsGG)3>>u z1|&1IUmN?{Ln79u6?6a1%`Q9zXthHh!# diff --git a/sdk/components/ElPack/BCBDemos/IniEdit/IniEdit.bpr b/sdk/components/ElPack/BCBDemos/IniEdit/IniEdit.bpr deleted file mode 100644 index daa26382f05..00000000000 --- a/sdk/components/ElPack/BCBDemos/IniEdit/IniEdit.bpr +++ /dev/null @@ -1,159 +0,0 @@ -# --------------------------------------------------------------------------- -!if !$d(BCB) -BCB = $(MAKEDIR)\.. -!endif - -# --------------------------------------------------------------------------- -# IDE SECTION -# --------------------------------------------------------------------------- -# The following section of the project makefile is managed by the BCB IDE. -# It is recommended to use the IDE to change any of the values in this -# section. -# --------------------------------------------------------------------------- - -VERSION = BCB.03 -# --------------------------------------------------------------------------- -PROJECT = IniEdit.exe -OBJFILES = IniOpts.obj IniStrings.obj Main.obj IniEdit.obj -RESFILES = IniEdit.res -DEFFILE = -RESDEPEN = $(RESFILES) -LIBFILES = -LIBRARIES = -SPARELIBS = VCL35.lib -# --------------------------------------------------------------------------- -PATHCPP = .; -PATHASM = .; -PATHPAS = .; -PATHRC = .; -DEBUGLIBPATH = $(BCB)\lib\debug -RELEASELIBPATH = $(BCB)\lib\release -# --------------------------------------------------------------------------- -CFLAG1 = -Od -Hc -w -Ve -r- -k -y -v -vi- -c -b- -w-par -w-inl -Vx -tW -CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -D_RTLDLL;USEPACKAGES -H=$(BCB)\lib\vcl35.csm -CFLAG3 = -Tkh30000 -PFLAGS = -U$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ - -I$(BCB)\include;$(BCB)\include\vcl -D_RTLDLL;USEPACKAGES -$Y -$W -$O- -v -JPHN \ - -M -RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl -D_RTLDLL;USEPACKAGES -AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /d_RTLDLL /dUSEPACKAGES /mx /w2 /zd -LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpe -x -Gn -v -IFLAGS = -# --------------------------------------------------------------------------- -ALLOBJ = c0w32.obj $(PACKAGES) sysinit.obj $(OBJFILES) -ALLRES = $(RESFILES) -ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib -# --------------------------------------------------------------------------- -!ifdef IDEOPTIONS - -[Version Info] -IncludeVerInfo=0 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1049 -CodePage=1251 - -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= - -[Debugging] -DebugSourceDirs=$(BCB)\source\vcl - -[Parameters] -RunParams= -HostApplication= - -!endif - -# --------------------------------------------------------------------------- -# MAKE SECTION -# --------------------------------------------------------------------------- -# This section of the project file is not used by the BCB IDE. It is for -# the benefit of building from the command-line using the MAKE utility. -# --------------------------------------------------------------------------- - -.autodepend -# --------------------------------------------------------------------------- -!if !$d(BCC32) -BCC32 = bcc32 -!endif - -!if !$d(DCC32) -DCC32 = dcc32 -!endif - -!if !$d(TASM32) -TASM32 = tasm32 -!endif - -!if !$d(LINKER) -LINKER = ilink32 -!endif - -!if !$d(BRCC32) -BRCC32 = brcc32 -!endif -# --------------------------------------------------------------------------- -!if $d(PATHCPP) -.PATH.CPP = $(PATHCPP) -.PATH.C = $(PATHCPP) -!endif - -!if $d(PATHPAS) -.PATH.PAS = $(PATHPAS) -!endif - -!if $d(PATHASM) -.PATH.ASM = $(PATHASM) -!endif - -!if $d(PATHRC) -.PATH.RC = $(PATHRC) -!endif -# --------------------------------------------------------------------------- -$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) - $(BCB)\BIN\$(LINKER) @&&! - $(LFLAGS) + - $(ALLOBJ), + - $(PROJECT),, + - $(ALLLIB), + - $(DEFFILE), + - $(ALLRES) -! -# --------------------------------------------------------------------------- -.pas.hpp: - $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } - -.pas.obj: - $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } - -.cpp.obj: - $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } - -.c.obj: - $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } - -.asm.obj: - $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ - -.rc.res: - $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< -# --------------------------------------------------------------------------- - diff --git a/sdk/components/ElPack/BCBDemos/IniEdit/IniEdit.cpp b/sdk/components/ElPack/BCBDemos/IniEdit/IniEdit.cpp deleted file mode 100644 index 25f6096e004..00000000000 --- a/sdk/components/ElPack/BCBDemos/IniEdit/IniEdit.cpp +++ /dev/null @@ -1,23 +0,0 @@ -//--------------------------------------------------------------------------- -#include -#pragma hdrstop -USERES("IniEdit.res"); -USEUNIT("IniOpts.pas"); -USEUNIT("IniStrings.pas"); -USEUNIT("Main.pas"); -//--------------------------------------------------------------------------- -WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) -{ - try - { - Application->Initialize(); - Application->Run(); - } - catch (Exception &exception) - { - Application->ShowException(&exception); - } - return 0; -} -//--------------------------------------------------------------------------- - diff --git a/sdk/components/ElPack/BCBDemos/IniEdit/IniEdit.res b/sdk/components/ElPack/BCBDemos/IniEdit/IniEdit.res deleted file mode 100644 index 7e24c6942be62665fd370c56ec3393964fe7bd28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmb7@u}Z{15QhKU1=8siHddyz6z&03T-X&+U&Z2J%S^Fw3n%1pVwp#=w6wh9VEs4Q z>VtlHQkS8BU)7`cv|`Owe$IahPe`WcV& zwVCwC`7+LTj{OElZk%$$Jni2(uZSmHa$Z&v+~W~1)B|4W2bzeBckA}^8-49t2IvUTVTHy>E*L0yAW>+H6oSD)B@%_k zoS$o?BakRGMxv-PI0A`6V;H1ha0C*C#z-6*gCmeAG)69lDZ{=85{1UBshN?EK%&r? zHElQ25l9povtCIU=?EkWjajcNjdTPOg~qH`Sw=bni9%!6Yi=VQfkdG($0zVH(h*1$ z8lz<{9 diff --git a/sdk/components/ElPack/BCBDemos/IniEdit/IniOpts.pas b/sdk/components/ElPack/BCBDemos/IniEdit/IniOpts.pas deleted file mode 100644 index 55798e9c362..00000000000 --- a/sdk/components/ElPack/BCBDemos/IniEdit/IniOpts.pas +++ /dev/null @@ -1,140 +0,0 @@ -unit IniOpts; - -interface - -uses - Classes, - SysUtils, - ElHeader, - ElTree, - ElOpts; - -type - TOptions = class(TElOptions) - private - FSort: Boolean; - FOneInstance: Boolean; - FCustomColors: Boolean; - FLazyWrite: Boolean; - FSimple: Boolean; - FLoadLastUsed: Boolean; - FShowDailyTip : Boolean; - procedure SetLazyWrite(newValue: Boolean); - procedure SetSimple(newValue: Boolean); - procedure SetCustomColors(newValue: Boolean); - procedure SetOneInstance(newValue: Boolean); - procedure SetSort(newValue: Boolean); - protected - procedure SetAutoSave (value : boolean); override; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - published - property LoadLastUsed: Boolean read FLoadLastUsed write FLoadLastUsed; - property LazyWrite: Boolean read FLazyWrite write SetLazyWrite default true; - property Simple: Boolean read FSimple write SetSimple; - property CustomColors: Boolean read FCustomColors write SetCustomColors; - property OneInstance: Boolean read FOneInstance write SetOneInstance; - property Sort: Boolean read FSort write SetSort; - property ShowDailyTip : Boolean read FShowDailyTip write FShowDailyTip; - end; - -var Options : TOptions; - -implementation - -uses Main; - -procedure TOptions.SetAutoSave (value : boolean); -begin - if FAutoSave <> value then - begin - FAutoSave := value; - MainForm.AutoSaveItem.Checked := value; - end; -end; - -procedure TOptions.SetLazyWrite(newValue: Boolean); -begin - if (FLazyWrite <> newValue) then - begin - FLazyWrite := newValue; - MainForm.LazyItem.Checked := FLazyWrite; - MainForm.IniFile.LazyWrite := FLazyWrite; - if not FLazyWrite then MainForm.Modified := false; - end; {if} -end; - -procedure TOptions.SetSimple(newValue: Boolean); -begin - if (FSimple <> newValue) then - begin - FSimple := newValue; - MainForm.IniFile.Simple := FSimple; - if FSimple - then MainForm.StandardItem.Checked := true - else MainForm.EnhancedItem.Checked := true; - MainForm.TreeItemFocused(Self); - end; {if} -end; - -procedure TOptions.SetCustomColors(newValue: Boolean); -begin - if (FCustomColors <> newValue) then - begin - FCustomColors := newValue; - Mainform.UseCustomItem.Checked := newValue; - MainForm.CustColorsItem.Enabled := newValue; - MainForm.RefreshItems; - end; {if} -end; - -procedure TOptions.SetOneInstance(newValue: Boolean); -begin - if (FOneInstance <> newValue) then - begin - FOneInstance := newValue; - MainForm.OneInst.Enabled := newValue; - MainForm.OneInstItem.Checked := newValue; - end; {if} -end; - -procedure TOptions.SetSort(newValue: Boolean); -var SM : TElSSortMode; -begin - if (FSort <> newValue) then - begin - FSort := newValue; - MainForm.SortItem.Checked := FSort; - if FSort then - begin - MainForm.Tree.SortMode := smAddClick; - if MainForm.Tree.SortDir = sdAscend then SM := hsmAscend else - if MainForm.Tree.SortDir = sdDescend then SM := hsmDescend else sm:=hsmNone; - MainForm.Tree.HeaderSections[MainForm.Tree.SortSection].SortMode := SM; - MainForm.Tree.Sort(true); - end else - begin - MainForm.Tree.SortMode := smNone; - MainForm.Tree.HeaderSections[MainForm.Tree.SortSection].SortMode := hsmNone; - end; - end; {if} -end; - -destructor TOptions.Destroy; -begin - inherited Destroy; -end; - -constructor TOptions.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - StorageType := eosElIni; - IniSection := 'Options'; - FLazyWrite := true; - FSort := true; - FShowDailyTip := True; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/IniEdit/IniStrings.pas b/sdk/components/ElPack/BCBDemos/IniEdit/IniStrings.pas deleted file mode 100644 index 43bf3c73d5f..00000000000 --- a/sdk/components/ElPack/BCBDemos/IniEdit/IniStrings.pas +++ /dev/null @@ -1,14 +0,0 @@ -unit IniStrings; - -interface - -const sUntitled = '(Untitled)'; - sLoading = 'Loading ...'; - sSaving = 'Saving ...'; - sNewItem = 'New entry'; - sDoDelete = 'Delete selected item(s)?'; - -implementation - -end. - diff --git a/sdk/components/ElPack/BCBDemos/IniEdit/Main.dfm b/sdk/components/ElPack/BCBDemos/IniEdit/Main.dfm deleted file mode 100644 index ca692e7de78787cee4365ea0d645fdf452cb3172..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27398 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 - then result := S_OK - else RESULT := DRAGDROP_S_DROP; - end; -end; - -function TIniDragObject.GiveFeedback(dwEffect: LongInt) : HRESULT; -begin - fEffect := dwEffect; - result := DRAGDROP_S_USEDEFAULTCURSORS; -end; - -function TIniDragObject.QueryGetData; { public } -begin - if (FormatEtc.cfFormat <> MainForm.ClipFormat) then result:= DV_E_FORMATETC - else - if (FormatEtc.dwAspect <> DVASPECT_CONTENT) then result:= DV_E_DVASPECT - else result:= S_OK; -end; { QueryGetData } - -function TIniDragObject.GetCanonicalFormatEtc(const FormatEtc: TFormatEtc; out FormatEtcOut: TFormatEtc) : HRESULT; { public } -begin - FormatEtcOut.ptd:=nil; - Result := E_NOTIMPL; -end; { GetCanonicalFormatEtc } - -function TIniDragObject.SetData(const FormatEtc: TFormatEtc; var Medium: TStgMedium; fRelease : Bool) : HRESULT; { public } -begin - result := E_NOTIMPL; -end; { SetData } - -function TIniDragObject.dAdvise(const FormatEtc: TFormatEtc; advf: LongInt; const advsink: IAdviseSink; out dwConnection: LongInt) : HRESULT; { public } -begin - result := OLE_E_ADVISENOTSUPPORTED; -end; { dAdvise } - -function TIniDragObject.dUnadvise(dwConnection: LongInt) : HRESULT; { public } -begin - result := OLE_E_ADVISENOTSUPPORTED; -end; { dUnadvise } - -function TIniDragObject.EnumdAdvise(out EnumAdvise: IEnumStatData) : HRESULT; { public } -begin - result := OLE_E_ADVISENOTSUPPORTED; -end; { EnumdAdvise } - -function TIniDragObject.EnumFormatEtc(dwDirection: LongInt; out EnumFormatEtc: IEnumFormatEtc) : HRESULT; { public } -var F : PFormatEtc; -begin - if (dwDirection = DATADIR_GET) then - begin - New(F); - F^.cfFormat := MainForm.ClipFormat; - F^.ptd := nil; - F^.dwAspect := DVASPECT_CONTENT; - F^.lIndex := -1; - F^.tymed := TYMED_HGLOBAL; - EnumFormatEtc := (TEnumFormatEtc.Create(PFormatList(F), 1, 0) as IEnumFormatEtc); - result := S_OK; - end - else - if (dwDirection = DATADIR_SET) then result := E_NOTIMPL - else result := E_INVALIDARG; -end; { EnumFormatEtc } - -function TIniDragObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium) : HRESULT; { public } -begin - Medium.tymed := 0; - Medium.UnkForRelease := nil; - Medium.hGlobal := 0; - if (FormatEtcIn.cfFormat = MainForm.ClipFormat) and - (FormatEtcIn.dwAspect = DVASPECT_CONTENT) and - (FormatEtcIn.tymed = TYMED_HGLOBAL) then - begin - if (MainForm.FStream1)<>nil then - begin - Medium.hGlobal := GlobalAlloc(GMEM_SHARE OR GMEM_ZEROINIT, MainForm.FStream1.Size); - if (Medium.hGlobal = 0) then - begin - result := E_OUTOFMEMORY; - Exit; - end; - medium.tymed := TYMED_HGLOBAL; - result := GetDataHere(FormatEtcIn, Medium); - end else result := E_UNEXPECTED; - end - else result := DV_E_FORMATETC; -end; { GetData } - -function TIniDragObject.GetDataHere(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium) : HRESULT; { public } -var p:pointer; -begin - if (FormatEtcIn.cfFormat = MainForm.ClipFormat) and - (FormatEtcIn.dwAspect = DVASPECT_CONTENT) and - (FormatEtcIn.tymed = TYMED_HGLOBAL) and (Medium.tymed = TYMED_HGLOBAL) then - begin - if (Medium.hGlobal = 0) then - begin - result := E_OUTOFMEMORY; - Exit; - end; - p := GlobalLock(Medium.hGlobal); - if (MainForm.FStream1)<>nil then - begin - MoveMemory(p, MainForm.FStream1.Memory, MainForm.FStream1.Size); - GlobalUnlock(Medium.hGlobal); - result := S_OK; - // now remove the old data - if fEffect = DROPEFFECT_MOVE then MainForm.DoDeleteItems(false); - end - else result := E_UNEXPECTED; - Medium.UnkForRelease := nil; - end - else - result := DV_E_FORMATETC; -end; { GetDataHere } - -(*///////////////////////////////////////////////////////////////////////////// - -Main form - -/////////////////////////////////////////////////////////////////////////////*) - -procedure TMainForm.UpdateBtns; -var b : boolean; -begin - b := Tree.SelectedCount >0; - if Assigned(CopyItem) then CopyItem.Enabled := b; - if Assigned(CutItem) then CutItem.Enabled := b; - if Assigned(DeleteItem) then DeleteItem.Enabled := b; -end; - -procedure TMainForm.Loaded; -begin - inherited; -end; - -procedure TMainForm.SetModified(NewValue : boolean); -begin - if NewValue <> FModified then - begin - if (not Options.LazyWrite) and (NewValue) then exit; - FModified := NewValue; - if FModified then ModifImage.Picture.Bitmap.LoadFromResourceName(hInstance, 'EXCLAMATION') - else ModifImage.Picture.Bitmap.Assign(nil); - SaveItem.Enabled := Modified; - SaveBtn.Enabled := Modified; - end; -end; - -function TMainForm.CloseCurrent : boolean; -begin - if FModified then - begin - case MessageDlg(Format('%s was modified. Save it now?', [FileName]), mtWarning , [mbYes, mbNo, mbCancel], 0) of - mrYes: result := DoSave(FileName); - mrNo: result := true; - else result := false; - end; - end else result := true; - if Result then - begin - IniFile.Path := ''; - FIgnoreDelete := true; - Tree.Items.Clear; - FIgnoreDelete := false; - FileName := sUntitled; - Modified := false; - end; -end; - -procedure TMainForm.SetFileName(NewValue : string); -begin - FFileName := newValue; - FormCaption.Texts[3].Caption := FFileName; -end; - -procedure TMainForm.FormCreate(Sender: TObject); -begin - SetHintWindow; - FileName := sUntitled; - OptionsIni.Path := ExtractFilePath(ParamStr(0)) + 'IniEdit.ini'; - try - OptionsIni.Load; // this is necessary!!! - except - end; - Options := TOptions.Create(nil); - Options.Storage := OptionsIni; - Options.AutoSave := true; - Options.Load; - ColorMap.Restore; - MRU.Restore; - Tree.Restore; - StatusBar.Restore; - Modified := false; - ClipFormat := RegisterClipboardFormat('EldoS IniEditor items format'); - FAction := -1; - FList1 := TElList.Create; - if ParamCount >0 then - begin - Options.Simple := (Uppercase(ExtractFileExt(ParamStr(1))) <> '.EIF'); - if DoLoad(ParamStr(1)) then - begin - FileName := ParamStr(1); - if Uppercase(ExtractFileExt(FileName)) = '.EIF' then MRU.Sections[0].Add(FileName, 0) else - if Uppercase(ExtractFileExt(FileName)) = '.INF' then MRU.Sections[2].Add(FileName, 0) else - if Uppercase(ExtractFileExt(FileName)) = '.INI' then MRU.Sections[1].Add(FileName, 0) else - MRU.Sections[3].Add(FileName, 0); - end; - end; - Application.OnMinimize := AppMinimize; - DailyTipDlg.ShowNextTime := Options.ShowDailyTip; - if Options.ShowDailyTip then - begin - DailyTipDlg.Execute; - Options.ShowDailyTip := DailyTipDlg.ShowNextTime; - end; -end; - -procedure TMainForm.FormDestroy(Sender: TObject); -begin - if Assigned(FList1) then - begin - FList1.Free; - FList1 := nil; - end; - if Assigned(FStream1) then - begin - FStream1.Free; - FStream1 := nil; - end; - MRU.Save; - ColorMap.Save; - StatusBar.Save; - Tree.Save; - Options.Free; -end; - -procedure TMainForm.StandardItemClick(Sender: TObject); -begin - Options.Simple := true; - Modified := true; -end; - -procedure TMainForm.EnhancedItemClick(Sender: TObject); -begin - Options.Simple := false; - Modified := true; -end; - -procedure TMainForm.OpenItemClick(Sender: TObject); -begin - if OpenDlg.Execute then - begin - if not CloseCurrent then exit; - Options.Simple := (Uppercase(ExtractFileExt(OpenDlg.FileName)) <> '.EIF'); - if DoLoad(OpenDlg.FileName) then - begin - FileName := OpenDlg.FileName; - if Uppercase(ExtractFileExt(FileName)) = '.EIF' then MRU.Sections[0].Add(FileName, 0) else - if Uppercase(ExtractFileExt(FileName)) = '.INF' then MRU.Sections[2].Add(FileName, 0) else - if Uppercase(ExtractFileExt(FileName)) = '.INI' then MRU.Sections[1].Add(FileName, 0) else - MRU.Sections[3].Add(FileName, 0); - end; - end; -end; - -procedure TMainForm.ExitItemClick(Sender: TObject); -begin - Close; -end; - -function TMainForm.DoLoad; - - procedure IntFillData(Key, Value : string; Item : TElTreeItem); - var bval : boolean; - sval : string; - ival : integer; - - begin - case IniFile.GetValueType(Key, Value) of - evtBoolean: - begin - IniFile.ReadBool(Key, Value, false, bval); - if bval then Item.ColumnText.Add('True') else Item.ColumnText.Add('False'); - Item.Data := pointer(Integer(Item.Data) or (ord(evtBoolean) shl 1)); - end; - evtInt: - begin - IniFile.ReadInteger(Key, Value, 0, ival); - Item.ColumnText.Add(IntToStr(ival)); - Item.Data := pointer(Integer(Item.Data) or (ord(evtInt) shl 1)); - end; - evtString: - begin - IniFile.ReadString(Key, Value, '', sval); - Item.ColumnText.Add(sval); - Item.Data := pointer(Integer(Item.Data) or (ord(evtString) shl 1)); - end; - evtMultiString: - begin - IniFile.ReadString(Key, Value, '', sval); - while true do - if not Replace(sval, #13#10, #32) then break; - Item.ColumnText.Add(sval); - Item.Data := pointer(Integer(Item.Data) or (ord(evtMultiString) shl 1)); - end; - evtBinary: - begin - IniFile.ReadString(Key, Value, '', sval); - Item.ColumnText.Add(sval); - Item.Data := pointer(Integer(Item.Data) or (ord(evtBinary) shl 1)); - end; - else Item.ColumnText.Add(''); - end; //case - Item.ColumnText.Add(''); - SetItemStyles(Item); - end; - - procedure IntLoad(KeyName : string; Parent : TElTreeItem); - var Item : TElTreeItem; - List : TStringList; - SaveKey : string; - SubKey : string; - i : integer; - - begin - List := TStringList.Create; - SaveKey := IniFile.CurrentKey; - if IniFile.OpenKey(KeyName, false) then - begin - IniFile.EnumSubKeys('', List); - for i := 0 to List.Count -1 do - begin - Item := Tree.Items.AddChildObject(Parent, List[i], TObject(1)); - if KeyName = IniFile.Delimiter - then SubKey := KeyName + List[i] - else SubKey := IniFile.CurrentKey + IniFile.Delimiter + List[i]; - IntFillData(SubKey, '', Item); - IntLoad(SubKey, Item); - end; - List.Clear; - IniFile.EnumValues('', List); - for i := 0 to List.Count - 1 do - begin - Item := Tree.Items.AddChild(Parent, List[i]); - IntFillData('', List[i], Item); - end; // for - end; - IniFile.OpenKey(SaveKey, false); - List.Free; - end; - -var b: boolean; - -begin - IniFile.Path := FileName; - StatusBar.Panels[0].Text := sLoading; - result := IniFile.Load; - b := Options.Sort; - Options.Sort := false; - Tree.Items.BeginUpdate; - IntLoad(IniFile.Delimiter, nil); - Options.Sort := b; - Tree.Items.EndUpdate; - StatusBar.Panels[0].Text := ''; -end; - -function TMainForm.DoSave; -begin - IniFile.Path := FileName; - StatusBar.Panels[0].Text := sSaving; - result := IniFile.Save; - StatusBar.Panels[0].Text := ''; - Modified := false; -end; - -procedure TMainForm.SaveItemClick(Sender: TObject); -begin - if FileName = sUntitled then SaveAsItemClick(Sender) else DoSave(FileName); -end; - -procedure TMainForm.LazyItemClick(Sender: TObject); -begin - Options.LazyWrite := not Options.LazyWrite; -end; - -procedure TMainForm.SaveAsItemClick(Sender: TObject); -begin - if SaveDlg.Execute then - begin - if DoSave(SaveDlg.FileName) then FileName := SaveDlg.FileName; - end; -end; - -procedure TMainForm.SavenowItemClick(Sender: TObject); -begin - Options.Save; - OptionsIni.Save; -end; - -procedure TMainForm.AutoSaveItemClick(Sender: TObject); -begin - Options.AutoSave := not Options.AutoSave; -end; - -procedure TMainForm.MRUClick(Sender: TObject; Entry: TElMRUEntry); -begin - if not CloseCurrent then exit; - Options.Simple := (Uppercase(ExtractFileExt(Entry.Name)) <> '.EIF'); - if DoLoad(Entry.Name) then - begin - FileName := Entry.Name; - if Uppercase(ExtractFileExt(FileName)) = '.EIF' then MRU.Sections[0].Add(FileName, 0) else - if Uppercase(ExtractFileExt(FileName)) = '.INF' then MRU.Sections[2].Add(FileName, 0) else - if Uppercase(ExtractFileExt(FileName)) = '.INI' then MRU.Sections[1].Add(FileName, 0) else - MRU.Sections[3].Add(FileName, 0); - end; -end; - -procedure TMainForm.NewItemClick(Sender: TObject); -begin - CloseCurrent; -end; - -procedure TMainForm.ColorMapChange(Sender: TObject); -begin - RefreshItems; -end; - -procedure TMainForm.UseCustomItemClick(Sender: TObject); -begin - Options.CustomColors := not Options.CustomColors; -end; - -procedure TMainForm.CustColorsItemClick(Sender: TObject); -begin - ColorMap.Edit('Custom colors'); -end; - -procedure TMainForm.OneInstInstanceRun(Sender: TObject; - Parameters: TStrings); -begin - if Parameters.Count < 2 then Exit; - if not CloseCurrent then exit; - Options.Simple := (Uppercase(ExtractFileExt(Parameters[1])) <> '.EIF'); - if DoLoad(Parameters[1]) then - begin - FileName := Parameters[1]; - if Uppercase(ExtractFileExt(FileName)) = '.EIF' then MRU.Sections[0].Add(FileName, 0) else - if Uppercase(ExtractFileExt(FileName)) = '.INF' then MRU.Sections[2].Add(FileName, 0) else - if Uppercase(ExtractFileExt(FileName)) = '.INI' then MRU.Sections[1].Add(FileName, 0) else - MRU.Sections[3].Add(FileName, 0); - end; -end; - -procedure TMainForm.OneInstItemClick(Sender: TObject); -begin - Options.OneInstance := not Options.OneInstance; -end; - -procedure TMainForm.ClipMonChange(Sender: TObject); -var b: boolean; -begin - b := ClipMon.DataFormats.IndexOf(GetFormatName(ClipFormat))<>-1; - PasteItem.Enabled := b; -end; - -procedure TMainForm.TreeItemPicDraw(Sender: TObject; Item: TElTreeItem; - var ImageIndex: Integer); -begin - if (Integer(Item.Data)) mod 2 = 1 then - begin - if Item.Focused then ImageIndex := 1 else - if Item.Expanded then ImageIndex := 0 else ImageIndex := 2; - end else - begin - if Item.Focused then ImageIndex := 4 else ImageIndex := 3; - end; -end; - -procedure TMainForm.SelectAllItemClick(Sender: TObject); -begin - Tree.SelectAll; - UpdateBtns; -end; - -procedure TMainForm.TreeItemFocused(Sender: TObject); -var b : boolean; -begin - UpdateBtns; - if Options.Simple then - begin - b := (Tree.ItemFocused <> nil) and (Tree.ItemFocused.Level = 0); - CreateKeyItem.Enabled := true; - CreateBoolItem.Enabled := b; - CreateIntItem.Enabled := b; - CreateStringItem.Enabled := b; - CreateMStringItem.Enabled := false; - CreateBinaryItem.Enabled := false; - end else - begin - CreateKeyItem.Enabled := true; - CreateBoolItem.Enabled := true; - CreateIntItem.Enabled := true; - CreateStringItem.Enabled := true; - CreateMStringItem.Enabled := true; - CreateBinaryItem.Enabled := true; - end; - b := (Tree.ItemFocused <> nil); - ModifyItem.Enabled := b; - RenameItem.Enabled := b; -end; - -procedure TMainForm.NewEntryItemClick(Sender: TObject); -var NewItem, ParentItem : TElTreeItem; - Key : string; - EType : integer; -begin - ParentItem := Tree.ItemFocused; - EType := TMenuItem(Sender).Tag; - if Options.Simple and (EType = 0) then ParentItem := nil; - if ParentItem = nil - then Key := IniFile.Delimiter - else Key := ParentItem.GetFullName(IniFile.Delimiter); - Tree.IsUpdating := true; - NewItem := Tree.Items.AddChild(ParentItem, sNewItem); - case EType of - 1: NewItem.ColumnText.Add('False'); - 2: NewItem.ColumnText.Add('0'); - else NewItem.ColumnText.Add(''); - end; - NewItem.ColumnText.Add(''); - if ParentItem <> nil then - begin - ParentItem.Data := pointer(Integer(ParentItem.Data) or 1); - SetItemStyles(ParentItem); - end; - if EType = 0 then NewItem.Data := pointer(1) else NewItem.Data := pointer((EType) shl 1); - SetItemStyles(NewItem); - if EType <> 0 - then FAction := 1 - else FAction := 0; - Tree.ItemFocused := NewItem; - Tree.IsUpdating := false; - NewItem.EditText; -end; - -procedure TMainForm.RefreshItems; - - procedure IntUpdProc(Item:TElTreeItem; Index: integer; var ContinueIterate:boolean; - IterateData:pointer; Tree:TCustomElTree); - begin - MainForm.SetItemStyles(Item); - end; - -begin - Tree.Items.BeginUpdate; - try - Tree.Items.Iterate(false, true, @IntUpdProc, nil); - finally - Tree.Items.EndUpdate; - end; -end; -{$HINTS OFF} -procedure TMainForm.SetItemStyles(Item : TElTreeItem); -var C : TColorEntry; - S : TElCellStyle; - i : integer; -begin - Tree.Items.BeginUpdate; - Item.UseStyles := true; - while Item.StylesCount > 0 do Item.RemoveStyle(Item.Styles[0]); - if Item.HasChildren - then C := ColorMap.Items[ColorMap.EntryByID(cidcmNwsk)] - else C := ColorMap.Items[ColorMap.EntryByID(cidcmNwosk)]; - with Item.MainStyle do - begin - TextFlags := 0; - OwnerProps := not Options.CustomColors; - FontName := Font.Name; - FontSize := Font.Size; - FontStyles := Font.Style; - CellBkColor := C.BkColor; - TextColor := C.FgColor; - TextBkColor := CellBkColor; - Style := ElhsText; - CellType := sftText; - end; - S := Item.AddStyle; - i := Integer(Item.Data) shr 1; - case i of - 0: i := cidcmVUndef; - 1: i := cidcmVbool; - 2: i := cidcmVInt; - 3: i := cidcmVStr; - 4: i := cidcmVMStr; - 5: i := cidcmVBin; - end; - C := ColorMap.Items[ColorMap.EntryByID(i)]; - with S do - begin - OwnerProps := not Options.CustomColors; - FontName := Font.Name; - FontSize := Font.Size; - FontStyles := Font.Style; - CellBkColor := C.BkColor; - TextColor := C.FgColor; - TextBkColor := CellBkColor; - TextFlags := 0; - Style := ElhsText; - i := Integer(Item.Data) shr 1; - case i of - 0: CellType := sftText; - 1: CellType := sftEnum; - 2: CellType := sftNumber; - 3: CellType := sftText; - 4: CellType := sftCustom; - 5: CellType := sftBlob; - end; - end; - S := Item.AddStyle; // this one is for column with value type - Tree.Items.EndUpdate; -end; -{$HINTS ON} - -procedure TMainForm.ModifyItemClick(Sender: TObject); -begin - Tree.EditItem(Tree.ItemFocused, 1); - SetItemStyles(Tree.ItemFocused); -end; - -procedure TMainForm.RenameItemClick(Sender: TObject); -begin - Tree.EditItem(Tree.ItemFocused, 0); -end; - -procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); -begin - CanClose := CloseCurrent; -end; - -procedure TMainForm.DoDeleteItems(Warn : boolean); -begin - FList1.Clear; - Tree.AllSelected(FList1); - if FList1.Count >0 then - begin - if Warn and (MessageDlg(sDoDelete, mtWarning, [mbYes, mbNo], 0)= mrNo) then - begin - FList1.Clear; - exit; - end; - Tree.Items.BeginUpdate; - while FList1.Count > 0 do - Tree.Items.DeleteItem(TElTreeItem(FList1[0])); - Tree.Items.EndUpdate; - end; -end; - -procedure TMainForm.TreeItemDeletion(Sender: TObject; Item: TElTreeItem); -var Key, Value : string; - i : integer; -begin - if FIgnoreDelete then exit; - Key := Item.GetFullName(IniFile.Delimiter); - i := LastPos(IniFile.Delimiter, Key); - Value := Copy(Key, i + 1, Length(Key)); - Key := Copy(Key, 1, i - 1); - IniFile.Delete(Key, Value); - if Assigned(FList1) then FList1.Remove(Item); -end; - -procedure TMainForm.TreeItemSelectedChange(Sender: TObject; - Item: TElTreeItem); - -type TSRec = record - Parent : TElTreeItem; - end; - PSRec = ^TSRec; - - procedure IntSel (Item:TElTreeItem; Index: integer; var ContinueIterate:boolean; - IterateData:pointer; Tree:TCustomElTree); - begin - if not (Item.IsUnder(PSRec(IterateData).Parent)) then - ContinueIterate := false - else - Item.Selected := true; - end; - -var SRec : TSrec; - -begin - // Selecting an item should also cause selection of all it's subitems: - // if any operation (like deletion or cut or copy) is executed, - // subitems follow the item. - // So deselection of the item when one of it's parents is selected - // is nonsence. - if Item.Selected and (not FIgnoreSelect) then - begin - FIgnoreSelect := true; - SRec.Parent := Item; - Tree.Items.BeginUpdate; - Tree.Items.IterateFrom(false, true, @IntSel, @SRec, Item); - Tree.Items.EndUpdate; - FIgnoreSelect := false; - end else - if not Item.Selected then - begin - SRec.Parent := Item.Parent; - while SRec.Parent<>nil do - begin - if SRec.Parent.Selected then - begin - Item.Selected := true; - exit; - end else SRec.Parent := SRec.Parent.Parent; - end; // while - end; -end; - -procedure TMainForm.DoPasteData(Item : TElTreeItem); - -var NoMessageKey, - NoMessageVal, - NoMessageVal2 : boolean; - TempKey : TElTreeItem; - - function UniqueEntryName(Key, Value : string) : string; - var i, j : integer; - SList1, SList2 : TStringList; - nf : boolean; - begin - result := UpperCase(Value); - SList1 := TStringList.Create; - SList2 := TStringList.Create; - IniFile.EnumSubKeys(Key, SList1); - IniFile.EnumValues(Key, SList2); - j := 0; - while true do - begin - nf := true; - for i := 0 to SList1.Count - 1 do - begin - if result = Uppercase(SList1[i]) then - begin - nf := false; - break; - end; - end; - if nf then - begin - for i := 0 to SList2.Count - 1 do - begin - if result = Uppercase(SList2[i]) then - begin - nf := false; - break; - end; - end; - end; - if nf then - begin - if j > 0 - then result := Value + '(' + IntToStr(j) + ')' - else result := Value; - exit; - end; - inc(j); - result := UpperCase(Value) + '(' + IntToStr(j) + ')'; - end; - SList1.Free; - SList2.Free; - end; - - procedure IntPaste(Parent : TElTreeItem); - var Item : TElTreeItem; - S : String; - i,j : integer; - b : boolean; - p : pointer; - IsKey : boolean; - Key, Value, FOldKey : string; - SList : TStringList; - - begin - ReadStringFromStream(FStream1, S); - FStream1.ReadBuffer(j, sizeof(integer)); - IsKey := (j mod 2) = 1; - if (IniFile.Simple) and (IsKey xor (Parent = nil)) then - begin - if IsKey then - begin - if not NoMessageKey then - begin - MessageDlg('In "Simple" mode keys can not be pasted to a key.'#13#10 + - 'Some values will be pasted to "root".', mtError, [mbOk], 0); - NoMessageKey := true; - end; - Parent := nil; - end else - begin - if not NoMessageVal then - begin - MessageDlg('In "Simple" mode values can be pasted only to some key.'#13#10 + - 'Some values will be pasted to the temporary key.', mtError, [mbOk], 0); - NoMessageVal := true; - end; - if TempKey = nil then - begin - TempKey := Tree.Items.AddChildObject(nil, UniqueEntryName(IniFile.Delimiter, 'Temporary'), TObject(1)); - FOldKey := IniFile.CurrentKey; - IniFile.OpenKey(IniFile.Delimiter + TempKey.Text, true); - IniFile.OpenKey(FOldKey, false); - end; - Parent := TempKey; - end; - end; - if IniFile.Simple and (Parent <> nil) and (Integer(Parent.Data) mod 2 = 0) then - begin - if not NoMessageVal2 then - begin - MessageDlg('In "Simple" mode source values can''t be pasted to other values.'#13#10 + - 'Source values will be pasted to the destination value parent key.', mtError, [mbOk], 0); - NoMessageVal2 := true; - end; - Parent := Parent.Parent; - end; - begin - if Parent = nil - then Key := IniFile.Delimiter - else Key := Parent.GetFullName(IniFile.Delimiter) + IniFile.Delimiter; - Value := UniqueEntryName(Key, S); - Item := Tree.Items.AddChildObject(Parent, Value, TObject(j)); - Item.Selected := true; - if IsKey then // we have to create an entry and set it as a key - begin - FOldKey := IniFile.CurrentKey; - IniFile.OpenKey(Key + Value, true); - IniFile.OpenKey(FOldKey, false); - end; - case (j shr 1) of // - 1: - begin - FStream1.ReadBuffer(b, sizeof(boolean)); - IniFile.WriteBool(Key, Item.Text, b); - if b then Item.ColumnText.Add('True') else Item.ColumnText.Add('False'); - end; - 2: - begin - FStream1.ReadBuffer(i, sizeof(integer)); - IniFile.WriteInteger(Key, Item.Text, i); - Item.ColumnText.Add(IntToStr(i)); - end; - 3: - begin - ReadStringFromStream(FStream1, S); - IniFile.WriteString(Key, Item.Text, S); - Item.ColumnText.Add(s); - end; - 4: - begin - ReadStringFromStream(FStream1, S); - SList := TStringList.Create; - SList.Text := S; - while true do - if not Replace(s, #13#10, #32) then break; - Item.ColumnText.Add(s); - IniFile.WriteMultiString(Key, ITem.Text, SList); - SList.Free; - end; - 5: - begin - FStream1.ReadBuffer(i, sizeof(integer)); - GetMem(P, i); - FStream1.ReadBuffer(PChar(p)^, i); - IniFile.WriteBinary(Key, Item.Text, PChar(p)^, i); - IniFile.ReadString(Key, Item.Text, '', s); - Item.ColumnText.Add(s); - FreeMem(P); - end; - end; // case - Item.ColumnText.Add(''); - SetItemStyles(Item); - end; // else - FStream1.ReadBuffer(j, sizeof(integer)); - for i := 0 to j - 1 do IntPaste(Item); - end; - -var i : integer; -begin - NoMessageKey := false; - NoMessageVal := false; - NoMessageVal2:= false; - TempKey := nil; - Modified := True; - try - try - Tree.Items.BeginUpdate; - repeat - FStream1.ReadBuffer(i, sizeof(integer)); - Tree.DeselectAll; - if i = ord('D') then IntPaste(Item) else break; - until false; - finally - Tree.Items.EndUpdate; - end; - except - end; -end; - -procedure TMainForm.PrepareCBList; - - procedure DoPrepare(Item : TElTreeItem); - var b : boolean; - S : string; - i : integer; - bd: pointer; - bl: integer; - Key : string; - - begin - FList1.Remove(Item); - WriteStringToStream(FStream1, Item.Text); - FStream1.WriteBuffer(Integer(Item.Data), sizeof(integer)); - if Item.Parent = nil - then Key := IniFile.Delimiter - else Key := Item.Parent.GetFullName(IniFile.Delimiter); - case (Integer(Item.Data) shr 1) of // - 1: - begin - IniFile.ReadBool(Key, Item.Text, false, b); - FStream1.WriteBuffer(b, sizeof(boolean)); - end; - 2: - begin - IniFile.ReadInteger(Key, Item.Text, 0, i); - FStream1.WriteBuffer(i, sizeof(integer)); - end; - 3, - 4: - begin - IniFile.ReadString(Key, Item.Text, '', S); - WriteStringToStream(FStream1, S); - end; - 5: - begin - bd := nil; - bl := 0; - IniFile.ReadBinary(Key, Item.Text, bd, bl); - GetMem(bd, bl); - IniFile.ReadBinary(Key, Item.Text, bd, bl); - FStream1.WriteBuffer(bl, sizeof(integer)); - FStream1.WriteBuffer(bd, bl); - end; - end; // case - i := Item.Count; - FStream1.WriteBuffer(i, sizeof(integer)); - for i := 0 to Item.Count - 1 do // Iterate - DoPrepare(Item.Children[i]); - end; - -var i : integer; - -begin - if FStream1 <> nil - then FStream1.SetSize(0) - else FStream1 := TDirectMemoryStream.Create; - FList1.Clear; - Tree.AllSelected(FList1); - while FList1.Count > 0 do - begin - i := ord('D'); // write a marker to the stream - FStream1.WriteBuffer(i, sizeof(integer)); - DoPrepare(TElTreeItem(FList1[0])); - end; - i := ord('E'); // write End of Stream marker - FStream1.WriteBuffer(i, sizeof(integer)); -end; - -procedure TMainForm.DeleteItemClick(Sender: TObject); -begin - DoDeleteItems(true); -end; - -procedure TMainForm.CopyItemClick(Sender: TObject); -var CBHandle : HGLOBAL; - P : Pointer; -begin - if OpenClipboard(Handle) then - begin - PrepareCBList; - EmptyClipboard; - CBHandle := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, FStream1.Size); - P := GlobalLock(CBHandle); - if p <> nil then - begin - MoveMemory(p, FStream1.Memory, FStream1.Size); - GlobalUnlock(CBHandle); - SetClipboardData(ClipFormat, CBHandle); - end; - CloseClipboard; - end; -end; - -procedure TMainForm.CutItemClick(Sender: TObject); -begin - CopyItemClick(Self); - DoDeleteItems(false); - Modified := true; -end; - -procedure TMainForm.PasteItemClick(Sender: TObject); -var CBHandle : HGLOBAL; - P : Pointer; - fmt :integer; -begin - if OpenClipboard(Handle) then - begin - fmt := 0; - repeat - fmt := EnumClipboardFormats(fmt); - if fmt=ClipFormat then break; - until fmt = 0; - if fmt=ClipFormat then // we can paste data - begin - CBHandle := GetClipboardData(ClipFormat); - if CBHandle <> 0 then - begin - p := GlobalLock(CBHandle); - if p <> nil then - begin - if FStream1 <> nil - then FStream1.SetSize(0) - else FStream1 := TDirectMemoryStream.Create; - // as we don't know the size of the stream, - // we assume it to be the maximum possible - FStream1.SetPointer(p, $7FFFFFFF); - // now read the data - DoPasteData(Tree.ItemFocused); - // now unlock the data - FStream1.SetPointer(nil, 0); - GlobalUnlock(CBHandle); - Modified := true; - end; // if - end; // if - end; //if - CloseClipboard; - end; - -end; - -procedure TMainForm.DropTargetTargetDrag(Sender: TObject; - State: TDragState; Source: TOleDragObject; Shift: TShiftState; X, - Y: Integer; var DragType: TDragType); -var FL: TStringList; -begin - DragType := dtNone; - if Source.HasDataFormat(ClipFormat) then - begin - if ssCtrl in Shift then DragType := dtCopy else - if Shift = [ssLeft] then DragType := dtMove else DragType := dtNone; - exit; - end; - if Source.HasDataFormat(CF_HDROP) then - begin - FL := Source.FileList; - if (FL.Count > 0) and FileExists(FL[0]) then DragType := dtLink; - end; -end; - -procedure TMainForm.DropTargetTargetDrop(Sender: TObject; - Source: TOleDragObject; Shift: TShiftState; X, Y: Integer; - var DragType: TDragType); -var FL: TStringList; - mdm: TStgMedium; - pz : pchar; - fmt : TFormatEtc; - efe : iEnumFormatEtc; - fmtCount: LongInt; - Item : TElTreeItem; - ItemPart : TSTItemPart; - HitColumn : integer; - Key : string; - -begin - Item := Tree.GetItemAt(X, Y, ItemPart, HitColumn); - if Item <> nil - then Key := Item.GetFullName(IniFile.Delimiter) - else Key := IniFile.Delimiter; - if ssCtrl in Shift then DragType := dtCopy else - if Shift = [] then DragType := dtMove else DragType := dtNone; - if ((DragType = dtCopy) or (DragType = dtMove)) and Source.HasDataFormat(ClipFormat) then - begin - fillchar(fmt,sizeof(fmt),0); - Source.DataObject.EnumFormatEtc(datadir_get,efe); - EFE.Reset; - repeat - fmtCount:=0; - efe.Next(1,fmt,@fmtCount); - until (fmt.cfFormat = ClipFormat) or (fmtCount=0); - if fmt.cfFormat<>ClipFormat then exit; - fmt.tymed := TYMED_HGLOBAL; - fmt.lindex := -1; - if Source.DataObject.GetData(fmt,mdm)<>S_OK then exit else - try - if (fmt.cfFormat=ClipFormat) and (mdm.tymed = TYMED_HGLOBAL) then - begin - // This is a dirty trick: - // if the Key doesn't exist in INI file, then we are moving the data, - // and are trying to move the data to Key's subitem, that was already deleted ;). - // As this is not allowed, we give a message and move data to the root - if not(IniFile.KeyExists(Key) - or IniFile.ValueExists(Copy(Key, 1, LastPos(IniFile.Delimiter, Key) -1), - Copy(Key, LastPos(IniFile.Delimiter, Key) + 1, Length(Key)))) then - begin - MessageDlg('Can''t move a key to itself or its subkey. Moving to "root" ... ', mtError, [mbOk], 0); - Item := nil; - end; - pz := GlobalLock(mdm.HGlobal); - if FStream1 <> nil - then FStream1.SetSize(0) - else FStream1 := TDirectMemoryStream.Create; - FStream1.SetPointer(pz, $7FFFFFFF); - DoPasteData(Item); - FStream1.SetPointer(nil, 0); - GlobalUnlock(mdm.HGlobal); - end; - finally - if Assigned(mdm.unkForRelease) then Iunknown(mdm.unkForRelease)._Release; - end; - end; - if Source.HasDataFormat(CF_HDROP) then - begin - if Source is TOleDragObject then - begin - FL := Source.FileList; - if (FL.Count > 0) and FileExists(FL[0]) then - begin - if CloseCurrent then - begin - Options.Simple := (Uppercase(ExtractFileExt(FL[0])) <> '.EIF'); - if DoLoad(FL[0]) then - begin - FileName := FL[0]; - if Uppercase(ExtractFileExt(FileName)) = '.EIF' then MRU.Sections[0].Add(FileName, 0) else - if Uppercase(ExtractFileExt(FileName)) = '.INF' then MRU.Sections[2].Add(FileName, 0) else - if Uppercase(ExtractFileExt(FileName)) = '.INI' then MRU.Sections[1].Add(FileName, 0) else - MRU.Sections[3].Add(FileName, 0); - end; - end; - end; // if - end; - end; -end; - -procedure TMainForm.SortItemClick(Sender: TObject); -begin - Options.Sort := not Options.Sort; -end; - -procedure TMainForm.TreeKeyUp(Sender: TObject; var Key: Word; - Shift: TShiftState); -begin - if (Shift = [ssCtrl]) and ((Key = ord('A')) or (Key = ord('a'))) then Tree.SelectAll; -end; - -procedure TMainForm.FormCaptionButtonClick(Sender: TObject; - Button: TElCaptionButton); -begin - ElFormPersist.Topmost := Button.Down; -end; - -procedure TMainForm.ElTrayDblClick(Sender: TObject); -begin - ShowWindow(Application.Handle, SW_SHOW); - ElTray.Enabled := false; - Application.Restore; - Application.BringToFront; -end; - -procedure TMainForm.AppMinimize(Sender : TObject); -begin - ShowWindow(Application.Handle, SW_HIDE); - ElTray.Enabled := true; -end; - -procedure TMainForm.TreeOleDragStart(Sender: TObject; var dataObj: IDataObject; - var dropSource: IDropSource; var dwOKEffects: TDragTypes); -var DragObj : TIniDragObject; -begin - PrepareCBList; - DragObj := TIniDragObject.Create; - DragObj.QueryInterface(IDataObject, dataObj); - DragObj.QueryInterface(IDropSource, dropSource); - dwOKEffects := [dtCopy, dtMove]; -end; - -procedure TMainForm.TreeTryEdit(Sender: TObject; Item: TElTreeItem; - SectionIndex: Integer; var CellType: TElFieldType; var CanEdit: Boolean); -begin - if FAction = -1 then // we have to define, what we are going to edit - begin - if (SectionIndex = 0) then // editing name - begin - if Integer(Item.Data) mod 2 = 1 then - FAction := 2 // editing a key - else - FAction := 3; // editing a value - end - else // editing value ... - begin - if Integer(Item.Data) mod 2 = 1 then - begin - FAction := 4; - CellType := sftText; - end - else - FAction := 5; - end; - end; - FSaveCellType := CellType; -end; - -procedure TMainForm.ModalEditExecute(Sender: TObject; - var Accepted: Boolean); -begin - ElMessageDlg('Unfortunately editing binary values is not implemented', mtInformation, [mbOk], 0); -end; - -procedure TMainForm.TreeOleDragFinish(Sender: TObject; dwEffect: TDragType; Result: HResult); -begin - Modified := true; -end; - -procedure TMainForm.CheckBoxEditAfterOperation( - Sender: TObject; var Accepted, DefaultConversion: Boolean); -var Key : String; -begin - DefaultConversion := false; - Accepted := true; - - CheckBoxEdit.Item.ColumnText[0] := BoolValues[CheckBoxEdit.Editor.Checked]; - if CheckBoxEdit.Item.Parent <> nil then - Key := CheckBoxEdit.Item.Parent.GetFullName(IniFile.Delimiter) - else - Key := IniFile.Delimiter; - IniFile.WriteBool(Key, CheckBoxEdit.Item.Text, CheckBoxEdit.Editor.Checked); - Modified := true; - FAction := -1; -end; - -procedure TMainForm.ButtonEditValidateResult(Sender: TObject; - var InputValid: Boolean); -var Text : string; - Key : string; -begin - if (FAction <> 4) and (FAction <> 5) then - begin - Text := ButtonEdit.Editor.Text; - - if (Pos(IniFile.Delimiter, Text) >0) or - (Pos(IniFile.Comment, Text) >0) or - (Pos('=', Text) > 0) then - begin - MessageBox(0, PChar(Format('Invalid characters in key/value name ("=" or "%s" or "%s").', - [IniFile.Delimiter, IniFile.Comment])), nil, MB_OK); - InputValid := false; - exit; - end; - if Length(Text) = 0 then - begin - MessageBox(0, 'Empty names are not allowed.', nil, MB_OK); - InputValid := false; - exit; - end; - if ButtonEdit.Item.Parent = nil then - Key := IniFile.Delimiter - else - Key := ButtonEdit.Item.Parent.GetFullName(IniFile.Delimiter) + IniFile.Delimiter; - - if IniFile.KeyExists(Key + Text) or IniFile.ValueExists(Key, Text) then - begin - MessageBox(0, 'Key/value with the name entered already exists.', nil, MB_OK); - InputValid := false; - exit; - end; - end; -end; - -procedure TMainForm.SpinEditAfterOperation(Sender: TObject; - var Accepted, DefaultConversion: Boolean); -var Key : string; -begin - if SpinEdit.Item.Parent = nil then - Key := IniFile.Delimiter - else - Key := SpinEdit.Item.Parent.GetFullName(IniFile.Delimiter)+IniFile.Delimiter; - - Accepted := IniFile.WriteInteger(Key, SpinEdit.Item.Text, SpinEdit.Editor.Value); - DefaultConversion := true; - FAction := -1; - Modified := true; -end; - -procedure TMainForm.MemoEditAfterOperation(Sender: TObject; - var Accepted, DefaultConversion: Boolean); -var Key : string; -begin - if MemoEdit.Item.Parent = nil then - Key := IniFile.Delimiter - else - Key := MemoEdit.Item.Parent.GetFullName(IniFile.Delimiter)+IniFile.Delimiter; - - Accepted := IniFile.WriteMultiString(Key, MemoEdit.Item.Text, MemoEdit.Editor.Lines); - DefaultConversion := true; - FAction := -1; - Modified := true; -end; - -procedure TMainForm.ButtonEditAfterOperation(Sender: TObject; - var Accepted, DefaultConversion: Boolean); -var Text : string; - Key : string; - FOldKey: string; -begin - if Accepted then - begin - Text := ButtonEdit.Editor.Text; - if ButtonEdit.Item.Parent = nil then - Key := IniFile.Delimiter - else - Key := ButtonEdit.Item.Parent.GetFullName(IniFile.Delimiter)+IniFile.Delimiter; - - if Accepted then - begin - case FAction of - 0: // create a key - begin - FOldKey := IniFile.CurrentKey; - Accepted := IniFile.OpenKey(Key + Text, true); - IniFile.OpenKey(FOldKey, false); - end; - 1: // create a value - Accepted := IniFile.CreateValue(Key, Text) <> nil; - 2: // rename a key - Accepted := IniFile.RenameKey(Key + ButtonEdit.Item.Text, Text); - 3: // rename a value - Accepted := IniFile.RenameValue(Key, ButtonEdit.Item.Text, Text); - 4: // edit value - Accepted := IniFile.WriteString(Key, ButtonEdit.Item.Text, Text); - end; - end; - if Accepted and (FAction = 1) then - IniFile.SetValueType(Key, Text, TElValueType(integer(ButtonEdit.Item.Data) shr 1)); - - SetItemStyles(ButtonEdit.Item); - end; - FAction := -1; - Modified := true; -end; - -procedure TMainForm.ButtonEditBeforeOperation(Sender: TObject; - var DefaultConversion: Boolean); -begin - ButtonEdit.Editor.ButtonVisible := false; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/IniEdit/frmMstrEdit.dfm b/sdk/components/ElPack/BCBDemos/IniEdit/frmMstrEdit.dfm deleted file mode 100644 index 60f9b2ca9573a03713e0f095b4011505178d8e97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6318 zcmeHMO>g5i5M|^|EPte36ezI0`Ow3j7KNaM?JtS125?5aq=IiB!15xV+i z=cIe|;WYU9_}$UP@Fb|GRV7tiZI0w+7>(6UAZ~TT6jD&{pPGrz_*5Jm_J^$@kCN6< z#No$uzR}!Zhv(s~kjc4-d(mj({ZdDu4C0V|5uC_#HJi`cbFEdhKlrt+BeMox*DS#w zY~P6X-XCO>zNz=7{95#)vAFeE^Fty`d>SU&uN$m$$w#7Eoy{)r>R)!kgkMQm=?d$0=$l< zvU-pgdC=Qy;>I{;&4`<{&=|_27@P)fZ7z)kzW_sS^l(@jwqvmIvqyzmfIA*TVv^&m|XnBh3$-$_d&8Mc>OgyhPoT!_w8qJd$G|lly z9L2G^@%>&hyb1Ma;#aY~9jVA~V%yw_`Au*)6V;j?>oa(C;Ia|K(09*x4Bft88_2O~ zyT|_W5y2b0_XB=4z{dy=cAnF5*N%BK5|X;^%Af2%Yr79ps@h8X?R{?TH*U?R+Mf2; z6M&Y#{j46PP!o(PtXZ5m25pn3O*NPdyL06`$>5nh@mO`_TB%tv)`-hKr}0?BJQ|II zU>(omgCgil=a{jZY7UmmW5=Y0`0X0yR(ug}rjK;4X#Ip9#9x59T8Niw6tDRlO}36r zS_mtT19Ma-U!;-hOTR(WA_sRl&#K|LP5WbOEriL^J!G%VwpvKvCQW6rSk4-i#(-xmC@vK5msLQlj}s9Y@KvYHJ06bly^Mw=H1g&W7!-xru^1^sR{nyIXdik z0W~x`N9UMFtz<>xX#8_{)Ijzee2?LH=Jq>ldLLTwJ;oaF(i>ko_r+BC`0^i5(wE+* z`}VST-teM6d+A;Io$VjV@H(pQa|yo;)Q6*3N!fVDS7)9%< -#pragma hdrstop -USEFORMNS("Unit1.pas", Unit1, Form1); -//--------------------------------------------------------------------------- -WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) -{ - try - { - Application->Initialize(); - Application->CreateForm(__classid(TForm1), &Form1); - Application->Run(); - } - catch (Exception &exception) - { - Application->ShowException(&exception); - } - return 0; -} -//--------------------------------------------------------------------------- diff --git a/sdk/components/ElPack/BCBDemos/OwnerDraw/OwnerDraw.res b/sdk/components/ElPack/BCBDemos/OwnerDraw/OwnerDraw.res deleted file mode 100644 index 1993f343f7b84bfed123b1bae240a4257a9cb511..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmah|F>c#H5FCaA=pqPJxJf0IDf0ssz1^AJyMhM*Q_>hmE??p4!%6q)@vJr;e;%DoU$~f(bJ9a! zX3zV`0KUjF7x?9p%uv@g1v!KS;{w0#TvB|4M6s|VTs=sO%%*)IC_43V7u!c1K}Unw ziCPM&7-9#>|7+NuO^}B8Y{DEEHP+Br)BtCvMVs_nh)#n_7O)1Z(@+G!MHI(YZ?>&k zC}erwI6YQLP+Z*oj(WW*igZy_deE>=M9N(wI;9fp56MPx3o%8BaLB7jhdsOs6Az JE94e=_zP!^4dVa+ diff --git a/sdk/components/ElPack/BCBDemos/OwnerDraw/Unit1.dfm b/sdk/components/ElPack/BCBDemos/OwnerDraw/Unit1.dfm deleted file mode 100644 index b85f0f9db18d820279ba678f0265f05ffaa3f810..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4385 zcmeHKO>7%Q6rNot>-Aq^Cy_`+)h;FCN1!OlsiH#a#<6jP6Gz!?gSf!hp2VxHcdeOm z9rqA{kl@+_t;CHJCvI>+l@Psg;8LWhT;R-Kg@hm#xA10X*KuM~2~<*$GSZvbnfLbX z=b883H$F%ryI5IYnMZTkTn-_7tvILIMV~h3M}vN(Og4FJMv2*eEA}NyE&8-hsKvW3 ziR)Fi}lo1{uUn&&MD`oqQe92t53U*Rzeb=Y)bj{sxyt?19$qr8i3h7kcPXx17+$36N z#WF1HF~cI%*_7`GNK;6wcvi#j#C7qb#8YO?*&!}lBXrrTHPkng!gJ^|gEYI0tHjlU zem>X()eu{t>Z204*E?#4ZEpal7CO!?+wmeQH?S>Ey>6AB)#x}>h>pome@gy_VsMKG;3^yD&_hjI4< zoQ;S(acXa&i6G`g+(qr3_a;Cy6&~ub;T$r1D>gEpc>$Tb=aFgr4DT4oy#Lb#D#Q9T z7~TC{RbB)8v!KH;zX>ANzda8fw2$|{QN=gq40@3W0+Jct$zK`XZNq|pZ8L^pk;SZ@FsIbNAuBd(q-J01z6Iu}fsG9YKX4~56?(XH?-Q*gk5NRUM^qdUyDyEfIOV9?9NF^n3M_Llp(I`mQT42B`U5no^La#{kn~-6>+Ihfxd9n;y?^fT_uzs&miF{D6S>P z2hEj=nZX*#A1vQ^Ni$ z!u}P`=D$GLcRtaSh!2BUIVEfi`|zl)7o*@SpwwV*A1QO^ddwaD1JzHK%$5HMnGYf8 Jg+qcye*%*^6@mZ& diff --git a/sdk/components/ElPack/BCBDemos/OwnerDraw/Unit1.pas b/sdk/components/ElPack/BCBDemos/OwnerDraw/Unit1.pas deleted file mode 100644 index 8f9497f2c79..00000000000 --- a/sdk/components/ElPack/BCBDemos/OwnerDraw/Unit1.pas +++ /dev/null @@ -1,72 +0,0 @@ -unit Unit1; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - ElTree, StdCtrls, ElHeader, ElXPThemedControl; - -type - TForm1 = class(TForm) - ElTree1: TElTree; - ElTree2: TElTree; - Label1: TLabel; - Label2: TLabel; - procedure FormShow(Sender: TObject); - procedure ElTree1ItemDraw(Sender: TObject; Item: TElTreeItem; - Surface: TCanvas; R: TRect; SectionIndex: Integer); - procedure ElTree2ItemDraw(Sender: TObject; Item: TElTreeItem; - Surface: TCanvas; R: TRect; SectionIndex: Integer); - procedure ElTree1HeaderColumnDraw(Sender: TCustomElHeader; - Canvas: TCanvas; Section: TElHeaderSection; R: TRect; - Pressed: Boolean); - private - { Private declarations } - public - { Public declarations } - end; - -var - Form1: TForm1; - -implementation - -{$R *.DFM} - -procedure TForm1.FormShow(Sender: TObject); -var TI : TElTreeItem; - CS : TElCellStyle; -begin - TI := ElTree2.Items[0]; - TI.UseStyles := true; - CS := TI.AddStyle; - CS.OwnerProps := true; - CS.Style := elhsOwnerDraw; -end; - -procedure TForm1.ElTree1ItemDraw(Sender: TObject; Item: TElTreeItem; - Surface: TCanvas; R: TRect; SectionIndex: Integer); -begin - Surface.Brush.Style := bsClear; - DrawText(Surface.Handle, 'Owner-drawn cell', -1, R, DT_SINGLELINE or DT_CENTER); -end; - -procedure TForm1.ElTree2ItemDraw(Sender: TObject; Item: TElTreeItem; - Surface: TCanvas; R: TRect; SectionIndex: Integer); -begin - Surface.Brush.Style := bsClear; - if Item.StylesCount > 0 then - DrawText(Surface.Handle, 'Owner-draw style defined by ElCellStyle', -1, R, DT_SINGLELINE or DT_LEFT) - else - DrawText(Surface.Handle, PChar(Format('cell #%d, Item #%d', [SectionIndex, Item.AbsoluteIndex])), -1, R, DT_SINGLELINE or DT_CENTER); -end; - -procedure TForm1.ElTree1HeaderColumnDraw(Sender: TCustomElHeader; - Canvas: TCanvas; Section: TElHeaderSection; R: TRect; Pressed: Boolean); -begin - Canvas.Brush.Style := bsClear; - DrawText(Canvas.Handle, 'Owner-drawn section', -1, R, DT_SINGLELINE or DT_CENTER or DT_VCENTER); -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/Pinger/About.dfm b/sdk/components/ElPack/BCBDemos/Pinger/About.dfm deleted file mode 100644 index 074be1767bc0518dc5f6c3aa312e2efa6c4425f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3748 zcmeHKy>BB$6d$jh{qV-VAR!QlVrjU5bWRKuWKe>&gE5Z5G~=&% z9NXo_7ifFqr#wP-bAQ{gOKm!0WqPK^M5c~=Ed66DZPQ`;ca$r2n0JaR)Mo)Dn%;O+ z9x+CJvrL074h}lh4^0$tEp|?@rnkdA&mpw0Rh%L7sIRUG;p-LRVV~8o*LPX^H)Klw ziPvRr`Z-$Phdl}v*9k(*w0nEi{nByW{<2al9kr@i}u;(x*`?rGNNx^Gb8=OSXq2~=~H=$TicA=zD z25N*RVzwY}R1+A4uE|6;Py>lBFE63x16SgQuC6!*1zz3-)$F#<^oEG+MP7)Ex~CTx zzx*412J5GMK`a*Ji!EY)Hk*pEghw;6AmOLL=3z}<{1n)E9t1A(eB#`E z&fc1zKFbR^NtK*8>3JyxxWkK|U6`^B1zc2zCIf}LVhYM_AH7LKk4LDMAJSGQz}T-q zgyJCA^v*B|n-JiB$5p<{+W0IATqTE8yXp9tsG=?kz)*CK7mB_nqxlb{Mq&N~%9imd zCXEq@)r|IOosMyUySnYP8yrDE7uBviZA{E&K)a(3;~^}CZV90qQmFD>BvaW)faSF+ z>C%?f^!z>!tYYEg;w@3+&y`R_?S*AZx+vRp0i>OuI^skLm)Yj2azaLCKhIh?uTN81-o!RXMdX3PKvBe_cxgIV;hM3s@bd zRG#dN@PEj4%wBlx1Hux|#|u!E23^$GUB-qFx3eLBVzNq~PE8SmRA#>><^pQ-l%qFfr>4=wy) z03s5TzVjr2^IDEYFoO%mV$@2wUq`n8EVljiaH;IaX^i`Ye)E&uK%|NErxJmuz3|BNE%DaQ7HGqJDIc%<#&o--oMFb`?hAxAg_ OMoC>~eyN3&1^oj9)>4`P diff --git a/sdk/components/ElPack/BCBDemos/Pinger/About.pas b/sdk/components/ElPack/BCBDemos/Pinger/About.pas deleted file mode 100644 index 3f2f2cc7e19..00000000000 --- a/sdk/components/ElPack/BCBDemos/Pinger/About.pas +++ /dev/null @@ -1,29 +0,0 @@ -unit About; - -interface - -uses Windows, Classes, Forms, Controls, StdCtrls, Buttons, ExtCtrls, ElURLLabel, - Graphics, ElCLabel; - -type - TAboutBox = class(TForm) - Panel1: TPanel; - OKButton: TButton; - ProductName: TLabel; - Copyright: TLabel; - Image1: TImage; - HomeLabel: TElURLLabel; - MailLabel: TElURLLabel; - Label3: TLabel; - ElPackLabel: TElURLLabel; - end; - -var - AboutBox: TAboutBox; - -implementation - -{$R *.DFM} - -end. - diff --git a/sdk/components/ElPack/BCBDemos/Pinger/ElPinger.bpr b/sdk/components/ElPack/BCBDemos/Pinger/ElPinger.bpr deleted file mode 100644 index 881a2ae130c..00000000000 --- a/sdk/components/ElPack/BCBDemos/Pinger/ElPinger.bpr +++ /dev/null @@ -1,159 +0,0 @@ -# --------------------------------------------------------------------------- -!if !$d(BCB) -BCB = $(MAKEDIR)\.. -!endif - -# --------------------------------------------------------------------------- -# IDE SECTION -# --------------------------------------------------------------------------- -# The following section of the project makefile is managed by the BCB IDE. -# It is recommended to use the IDE to change any of the values in this -# section. -# --------------------------------------------------------------------------- - -VERSION = BCB.03 -# --------------------------------------------------------------------------- -PROJECT = ElPinger.exe -OBJFILES = MAIN.obj About.obj frmList.obj frmProp.obj ICMP.obj PingThread.obj SiteMan.obj \ - ElPinger.obj -RESFILES = ElPinger.res -DEFFILE = -RESDEPEN = $(RESFILES) MAIN.dfm About.dfm frmList.dfm frmProp.dfm -LIBFILES = -LIBRARIES = -SPARELIBS = VCL35.lib -PACKAGES = -# --------------------------------------------------------------------------- -PATHCPP = .; -PATHASM = .; -PATHPAS = .; -PATHRC = .; -DEBUGLIBPATH = $(BCB)\lib\debug -RELEASELIBPATH = $(BCB)\lib\release -# --------------------------------------------------------------------------- -CFLAG1 = -Od -Hc -w -Ve -r- -k -y -v -vi- -c -b- -w-par -w-inl -Vx -tW -CFLAG2 = -I$(BCB)\include;$(BCB)\include\vcl -D_RTLDLL;USEPACKAGES -H=$(BCB)\lib\vcl35.csm -CFLAG3 = -Tkh30000 -PFLAGS = -U$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ - -I$(BCB)\include;$(BCB)\include\vcl -$Y -$W -$O- -v -JPHN -M -RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl -AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zd -LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) -aa -Tpe -x -Gn -v -IFLAGS = -# --------------------------------------------------------------------------- -ALLOBJ = c0w32.obj $(PACKAGES) sysinit.obj $(OBJFILES) -ALLRES = $(RESFILES) -ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib -# --------------------------------------------------------------------------- -!ifdef IDEOPTIONS - -[Version Info] -IncludeVerInfo=0 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1049 -CodePage=1251 - -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= - -[Debugging] -DebugSourceDirs=$(BCB)\source\vcl - -[Parameters] -RunParams= -HostApplication= - -!endif - -# --------------------------------------------------------------------------- -# MAKE SECTION -# --------------------------------------------------------------------------- -# This section of the project file is not used by the BCB IDE. It is for -# the benefit of building from the command-line using the MAKE utility. -# --------------------------------------------------------------------------- - -.autodepend -# --------------------------------------------------------------------------- -!if !$d(BCC32) -BCC32 = bcc32 -!endif - -!if !$d(DCC32) -DCC32 = dcc32 -!endif - -!if !$d(TASM32) -TASM32 = tasm32 -!endif - -!if !$d(LINKER) -LINKER = ilink32 -!endif - -!if !$d(BRCC32) -BRCC32 = brcc32 -!endif -# --------------------------------------------------------------------------- -!if $d(PATHCPP) -.PATH.CPP = $(PATHCPP) -.PATH.C = $(PATHCPP) -!endif - -!if $d(PATHPAS) -.PATH.PAS = $(PATHPAS) -!endif - -!if $d(PATHASM) -.PATH.ASM = $(PATHASM) -!endif - -!if $d(PATHRC) -.PATH.RC = $(PATHRC) -!endif -# --------------------------------------------------------------------------- -$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) - $(BCB)\BIN\$(LINKER) @&&! - $(LFLAGS) + - $(ALLOBJ), + - $(PROJECT),, + - $(ALLLIB), + - $(DEFFILE), + - $(ALLRES) -! -# --------------------------------------------------------------------------- -.pas.hpp: - $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } - -.pas.obj: - $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } - -.cpp.obj: - $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } - -.c.obj: - $(BCB)\BIN\$(BCC32) $(CFLAG1) $(CFLAG2) $(CFLAG3) -n$(@D) {$< } - -.asm.obj: - $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ - -.rc.res: - $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< -# --------------------------------------------------------------------------- diff --git a/sdk/components/ElPack/BCBDemos/Pinger/ElPinger.cpp b/sdk/components/ElPack/BCBDemos/Pinger/ElPinger.cpp deleted file mode 100644 index e8f0b999a42..00000000000 --- a/sdk/components/ElPack/BCBDemos/Pinger/ElPinger.cpp +++ /dev/null @@ -1,32 +0,0 @@ -//--------------------------------------------------------------------------- -#include -#pragma hdrstop -USERES("ElPinger.res"); -USEFORMNS("MAIN.PAS", Main, MainForm); -USEFORMNS("About.pas", About, AboutBox); -USEFORMNS("frmList.pas", Frmlist, SitesForm); -USEFORMNS("frmProp.pas", Frmprop, PropForm); -USEUNIT("ICMP.pas"); -USEUNIT("PingThread.pas"); -USEUNIT("SiteMan.pas"); -//--------------------------------------------------------------------------- -WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) -{ - try - { -// Application->Initialize(); - Application->Title = "EldoS Pinger"; - FreeLibrary(GetModuleHandle("OleAut32")); - Application->CreateForm(__classid(TMainForm), &MainForm); - Application->CreateForm(__classid(TSitesForm), &SitesForm); - Application->CreateForm(__classid(TPropForm), &PropForm); - Application->CreateForm(__classid(TAboutBox), &AboutBox); - Application->Run(); - } - catch (Exception &exception) - { - Application->ShowException(&exception); - } - return 0; -} -//--------------------------------------------------------------------------- diff --git a/sdk/components/ElPack/BCBDemos/Pinger/ElPinger.res b/sdk/components/ElPack/BCBDemos/Pinger/ElPinger.res deleted file mode 100644 index bae5442ae6b7217c2c526947b49c782b0b0d0632..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1596 zcmc(e&uUXq5XQe-vuH&w7je_w655eieJ2 z$u{9T`RBhF+={=;E|4lKkycR^mR-g2)?zFn_sF%(u4DG+dX0799ge-@wX$+`wQ(}}ujYaiWFi^^SnP>-A+o>WzhNq1N^I2facRF9aor%&pu3I39) zn|Ljv0@cxbqIK*|XA^4gf%vR<-m_2d6Hr~xv29y-K?iID>>21OW=oG`tLl2&^X_|n z<2-PD7apBCHqu*IM|wfL?NMXihqF!I)<-g>4OngRHMW>^M~|5?WsY;=Eo!&$4#~a5 zx`5LunPIkR-8WQhGI@)WXkwp&3{sxM(M?Y~apM_gH7}f=RL=AYY>#T^FdHmPBqmCj zX&$q9V&SapyzH*7`&pIW&AQo{1%`W0wBfu1tLaUU9{4RPC+w2d0Xh5q)+*mBzX4SJ BICua6 diff --git a/sdk/components/ElPack/BCBDemos/Pinger/ICMP.pas b/sdk/components/ElPack/BCBDemos/Pinger/ICMP.pas deleted file mode 100644 index afa9b66ad6f..00000000000 --- a/sdk/components/ElPack/BCBDemos/Pinger/ICMP.pas +++ /dev/null @@ -1,438 +0,0 @@ -{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -Author: François PIETTE -Description: This unit encapsulate the ICMP.DLL into an object of type TICMP. - Using this object, you can easily ping any host on your network. - Works only in 32 bits mode (no Delphi 1) under NT or 95. - TICMP is perfect for a console mode program, but if you build a - GUI program, you could use the TPing object wich is a true VCL - encapsulating the TICMP object. Then you can use object inspector - to change properties or event handler. This is much simpler to - use for a GUI program. -EMail: francois.piette@ping.be http://www.rtfm.be/fpiette - francois.piette@rtfm.be -Creation: January 6, 1997 -Version: 1.02 -WebSite: http://www.rtfm.be/fpiette/indexuk.htm -Support: Use the mailing list twsocket@rtfm.be See website for details. -Legal issues: Copyright (C) 1997 by François PIETTE - - This software is provided 'as-is', without any express or - implied warranty. In no event will the author be held liable - for any damages arising from the use of this software. - - Permission is granted to anyone to use this software for any - purpose, including commercial applications, and to alter it - and redistribute it freely, subject to the following - restrictions: - - 1. The origin of this software must not be misrepresented, - you must not claim that you wrote the original software. - If you use this software in a product, an acknowledgment - in the product documentation would be appreciated but is - not required. - - 2. Altered source versions must be plainly marked as such, and - must not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. - -Updates: -Dec 13, 1997 V1.01 Added OnEchoRequest and OnEchoReply events and removed the - corresponding OnDisplay event. This require to modify existing - programs. -Mar 15, 1998 V1.02 Deplaced address resolution just before use - - - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} -unit icmp; - -interface - -{$IFDEF VER80} -// This source file is *NOT* compatible with Delphi 1 because it uses -// Win 32 features. -{$ENDIF} - -uses - Windows, SysUtils, Classes, WinSock; - -const - IcmpVersion = 102; - IcmpDLL = 'icmp.dll'; - - // IP status codes returned to transports and user IOCTLs. - IP_SUCCESS = 0; - IP_STATUS_BASE = 11000; - IP_BUF_TOO_SMALL = (IP_STATUS_BASE + 1); - IP_DEST_NET_UNREACHABLE = (IP_STATUS_BASE + 2); - IP_DEST_HOST_UNREACHABLE = (IP_STATUS_BASE + 3); - IP_DEST_PROT_UNREACHABLE = (IP_STATUS_BASE + 4); - IP_DEST_PORT_UNREACHABLE = (IP_STATUS_BASE + 5); - IP_NO_RESOURCES = (IP_STATUS_BASE + 6); - IP_BAD_OPTION = (IP_STATUS_BASE + 7); - IP_HW_ERROR = (IP_STATUS_BASE + 8); - IP_PACKET_TOO_BIG = (IP_STATUS_BASE + 9); - IP_REQ_TIMED_OUT = (IP_STATUS_BASE + 10); - IP_BAD_REQ = (IP_STATUS_BASE + 11); - IP_BAD_ROUTE = (IP_STATUS_BASE + 12); - IP_TTL_EXPIRED_TRANSIT = (IP_STATUS_BASE + 13); - IP_TTL_EXPIRED_REASSEM = (IP_STATUS_BASE + 14); - IP_PARAM_PROBLEM = (IP_STATUS_BASE + 15); - IP_SOURCE_QUENCH = (IP_STATUS_BASE + 16); - IP_OPTION_TOO_BIG = (IP_STATUS_BASE + 17); - IP_BAD_DESTINATION = (IP_STATUS_BASE + 18); - - // status codes passed up on status indications. - IP_ADDR_DELETED = (IP_STATUS_BASE + 19); - IP_SPEC_MTU_CHANGE = (IP_STATUS_BASE + 20); - IP_MTU_CHANGE = (IP_STATUS_BASE + 21); - - IP_GENERAL_FAILURE = (IP_STATUS_BASE + 50); - - MAX_IP_STATUS = IP_GENERAL_FAILURE; - - IP_PENDING = (IP_STATUS_BASE + 255); - - // IP header flags - IP_FLAG_DF = $02; // Don't fragment this packet. - - // IP Option Types - IP_OPT_EOL = $00; // End of list option - IP_OPT_NOP = $01; // No operation - IP_OPT_SECURITY = $82; // Security option. - IP_OPT_LSRR = $83; // Loose source route. - IP_OPT_SSRR = $89; // Strict source route. - IP_OPT_RR = $07; // Record route. - IP_OPT_TS = $44; // Timestamp. - IP_OPT_SID = $88; // Stream ID (obsolete) - MAX_OPT_SIZE = $40; - -type - // IP types - TIPAddr = DWORD; // An IP address. - TIPMask = DWORD; // An IP subnet mask. - TIPStatus = DWORD; // Status code returned from IP APIs. - - PIPOptionInformation = ^TIPOptionInformation; - TIPOptionInformation = packed record - TTL: Byte; // Time To Live (used for traceroute) - TOS: Byte; // Type Of Service (usually 0) - Flags: Byte; // IP header flags (usually 0) - OptionsSize: Byte; // Size of options data (usually 0, max 40) - OptionsData: PChar; // Options data buffer - end; - - PIcmpEchoReply = ^TIcmpEchoReply; - TIcmpEchoReply = packed record - Address: TIPAddr; // Replying address - Status: DWord; // IP status value - RTT: DWord; // Round Trip Time in milliseconds - DataSize: Word; // Reply data size - Reserved: Word; // Reserved - Data: Pointer; // Pointer to reply data buffer - Options: TIPOptionInformation; // Reply options - end; - - // IcmpCreateFile: - // Opens a handle on which ICMP Echo Requests can be issued. - // Arguments: - // None. - // Return Value: - // An open file handle or INVALID_HANDLE_VALUE. Extended error information - // is available by calling GetLastError(). - TIcmpCreateFile = function: THandle; stdcall; - - // IcmpCloseHandle: - // Closes a handle opened by ICMPOpenFile. - // Arguments: - // IcmpHandle - The handle to close. - // Return Value: - // TRUE if the handle was closed successfully, otherwise FALSE. Extended - // error information is available by calling GetLastError(). - TIcmpCloseHandle = function(IcmpHandle: THandle): Boolean; stdcall; - - // IcmpSendEcho: - // Sends an ICMP Echo request and returns one or more replies. The - // call returns when the timeout has expired or the reply buffer - // is filled. - // Arguments: - // IcmpHandle - An open handle returned by ICMPCreateFile. - // DestinationAddress - The destination of the echo request. - // RequestData - A buffer containing the data to send in the - // request. - // RequestSize - The number of bytes in the request data buffer. - // RequestOptions - Pointer to the IP header options for the request. - // May be NULL. - // ReplyBuffer - A buffer to hold any replies to the request. - // On return, the buffer will contain an array of - // ICMP_ECHO_REPLY structures followed by options - // and data. The buffer should be large enough to - // hold at least one ICMP_ECHO_REPLY structure - // and 8 bytes of data - this is the size of - // an ICMP error message. - // ReplySize - The size in bytes of the reply buffer. - // Timeout - The time in milliseconds to wait for replies. - // Return Value: - // Returns the number of replies received and stored in ReplyBuffer. If - // the return value is zero, extended error information is available - // via GetLastError(). - TIcmpSendEcho = function(IcmpHandle: THandle; - DestinationAddress: TIPAddr; - RequestData: Pointer; - RequestSize: Word; - RequestOptions: PIPOptionInformation; - ReplyBuffer: Pointer; - ReplySize: DWord; - Timeout: DWord - ): DWord; stdcall; - - // Event handler type declaration for TICMP.OnDisplay event. - TICMPDisplay = procedure(Sender: TObject; Msg : String) of object; - TICMPReply = procedure(Sender: TObject; Error : Integer) of object; - - // The object wich encapsulate the ICMP.DLL - TICMP = class(TObject) - private - hICMPdll : HModule; // Handle for ICMP.DLL - IcmpCreateFile : TIcmpCreateFile; - IcmpCloseHandle : TIcmpCloseHandle; - IcmpSendEcho : TIcmpSendEcho; - hICMP : THandle; // Handle for the ICMP Calls - FReply : TIcmpEchoReply; // ICMP Echo reply buffer - FAddress : String; // Address given - FHostName : String; // Dotted IP of host (output) - FHostIP : String; // Name of host (Output) - FIPAddress : TIPAddr; // Address of host to contact - FSize : Integer; // Packet size (default to 56) - FTimeOut : Integer; // Timeout (default to 4000mS) - FTTL : Integer; // Time To Live (for send) - FOnDisplay : TICMPDisplay; // Event handler to display - FOnEchoRequest : TNotifyEvent; - FOnEchoReply : TICMPReply; - FLastError : DWORD; // After sending ICMP packet - FAddrResolved : Boolean; - public - constructor Create; virtual; - destructor Destroy; override; - function Ping : Integer; - procedure SetAddress(Value : String); - function GetErrorString : String; - procedure ResolveAddr; - - property Address : String read FAddress write SetAddress; - property Size : Integer read FSize write FSize; - property Timeout : Integer read FTimeout write FTimeout; - property Reply : TIcmpEchoReply read FReply; - property TTL : Integer read FTTL write FTTL; - property ErrorCode : DWORD read FLastError; - property ErrorString : String read GetErrorString; - property HostName : String read FHostName; - property HostIP : String read FHostIP; - property OnDisplay : TICMPDisplay read FOnDisplay write FOnDisplay; - property OnEchoRequest : TNotifyEvent read FOnEchoRequest - write FOnEchoRequest; - property OnEchoReply : TICMPReply read FOnEchoReply - write FOnEchoReply; - end; - - TICMPException = class(Exception); - -implementation - -{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} -constructor TICMP.Create; -var - WSAData: TWSAData; -begin - hICMP := INVALID_HANDLE_VALUE; - FSize := 56; - FTTL := 64; - FTimeOut := 4000; - - // initialise winsock - if WSAStartup($101, WSAData) <> 0 then - raise TICMPException.Create('Error initialising Winsock'); - - // register the icmp.dll stuff - hICMPdll := LoadLibrary(icmpDLL); - if hICMPdll = 0 then - raise TICMPException.Create('Unable to register ' + icmpDLL); - - @ICMPCreateFile := GetProcAddress(hICMPdll, 'IcmpCreateFile'); - @IcmpCloseHandle := GetProcAddress(hICMPdll, 'IcmpCloseHandle'); - @IcmpSendEcho := GetProcAddress(hICMPdll, 'IcmpSendEcho'); - - if (@ICMPCreateFile = Nil) or - (@IcmpCloseHandle = Nil) or - (@IcmpSendEcho = Nil) then - raise TICMPException.Create('Error loading dll functions'); - - hICMP := IcmpCreateFile; - if hICMP = INVALID_HANDLE_VALUE then - raise TICMPException.Create('Unable to get ping handle'); -end; - - -{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} -destructor TICMP.Destroy; -begin - if hICMP <> INVALID_HANDLE_VALUE then - IcmpCloseHandle(hICMP); - if hICMPdll <> 0 then - FreeLibrary(hICMPdll); - WSACleanup; - inherited Destroy; -end; - - -{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} -function MinInteger(X, Y: Integer): Integer; -begin - if X >= Y then - Result := Y - else - Result := X; -end; - - -{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} -procedure TICMP.ResolveAddr; -var - Phe : PHostEnt; // HostEntry buffer for name lookup -begin - // Convert host address to IP address - FIPAddress := inet_addr(PChar(FAddress)); - if FIPAddress <> INADDR_NONE then - // Was a numeric dotted address let it in this format - FHostName := FAddress - else begin - // Not a numeric dotted address, try to resolve by name - Phe := GetHostByName(PChar(FAddress)); - if Phe = nil then begin - FLastError := GetLastError; - if Assigned(FOnDisplay) then - FOnDisplay(Self, 'Unable to resolve ' + FAddress); - Exit; - end; - - FIPAddress := longint(plongint(Phe^.h_addr_list^)^); - FHostName := Phe^.h_name; - end; - - FHostIP := StrPas(inet_ntoa(TInAddr(FIPAddress))); - FAddrResolved := TRUE; -end; - - -{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} -procedure TICMP.SetAddress(Value : String); -begin - // Only change if needed (could take a long time) - if FAddress = Value then - Exit; - FAddress := Value; - FAddrResolved := FALSE; -// ResolveAddr; -end; - - -{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} -function TICMP.GetErrorString : String; -begin - case FLastError of - IP_SUCCESS: Result := 'No error'; - IP_BUF_TOO_SMALL: Result := 'Buffer too small'; - IP_DEST_NET_UNREACHABLE: Result := 'Destination network unreachable'; - IP_DEST_HOST_UNREACHABLE: Result := 'Destination host unreachable'; - IP_DEST_PROT_UNREACHABLE: Result := 'Destination protocol unreachable'; - IP_DEST_PORT_UNREACHABLE: Result := 'Destination port unreachable'; - IP_NO_RESOURCES: Result := 'No resources'; - IP_BAD_OPTION: Result := 'Bad option'; - IP_HW_ERROR: Result := 'Hardware error'; - IP_PACKET_TOO_BIG: Result := 'Packet too big'; - IP_REQ_TIMED_OUT: Result := 'Request timed out'; - IP_BAD_REQ: Result := 'Bad request'; - IP_BAD_ROUTE: Result := 'Bad route'; - IP_TTL_EXPIRED_TRANSIT: Result := 'TTL expired in transit'; - IP_TTL_EXPIRED_REASSEM: Result := 'TTL expired in reassembly'; - IP_PARAM_PROBLEM: Result := 'Parameter problem'; - IP_SOURCE_QUENCH: Result := 'Source quench'; - IP_OPTION_TOO_BIG: Result := 'Option too big'; - IP_BAD_DESTINATION: Result := 'Bad Destination'; - IP_ADDR_DELETED: Result := 'Address deleted'; - IP_SPEC_MTU_CHANGE: Result := 'Spec MTU change'; - IP_MTU_CHANGE: Result := 'MTU change'; - IP_GENERAL_FAILURE: Result := 'General failure'; - IP_PENDING: Result := 'Pending'; - else - Result := 'ICMP error #' + IntToStr(FLastError); - end; -end; - - -{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} -function TICMP.Ping : Integer; -var - BufferSize: Integer; - pReqData, pData: Pointer; - pIPE: PIcmpEchoReply; // ICMP Echo reply buffer - IPOpt: TIPOptionInformation; // IP Options for packet to send - Msg: String; -begin - Result := 0; - FLastError := 0; - - if not FAddrResolved then - ResolveAddr; - - if FIPAddress = INADDR_NONE then begin - FLastError := IP_BAD_DESTINATION; - if Assigned(FOnDisplay) then - FOnDisplay(Self, 'Invalid host address'); - Exit; - end; - - // Allocate space for data buffer space - BufferSize := SizeOf(TICMPEchoReply) + FSize; - GetMem(pReqData, FSize); - GetMem(pData, FSize); - GetMem(pIPE, BufferSize); - - try - // Fill data buffer with some data bytes - FillChar(pReqData^, FSize, $20); - Msg := 'Pinging from Delphi code written by F. Piette'; - Move(Msg[1], pReqData^, MinInteger(FSize, Length(Msg))); - - pIPE^.Data := pData; - FillChar(pIPE^, SizeOf(pIPE^), 0); - - if Assigned(FOnEchoRequest) then - FOnEchoRequest(Self); - - FillChar(IPOpt, SizeOf(IPOpt), 0); - IPOpt.TTL := FTTL; - Result := IcmpSendEcho(hICMP, FIPAddress, pReqData, FSize, - @IPOpt, pIPE, BufferSize, FTimeOut); - FLastError := GetLastError; - FReply := pIPE^; - - if Assigned(FOnEchoReply) then - FOnEchoReply(Self, Result); - finally - // Free those buffers - FreeMem(pIPE); - FreeMem(pData); - FreeMem(pReqData); - end; -end; - - -{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} - -end. - -{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} - diff --git a/sdk/components/ElPack/BCBDemos/Pinger/MAIN.PAS b/sdk/components/ElPack/BCBDemos/Pinger/MAIN.PAS deleted file mode 100644 index f1c20925e8e..00000000000 --- a/sdk/components/ElPack/BCBDemos/Pinger/MAIN.PAS +++ /dev/null @@ -1,339 +0,0 @@ -unit Main; - -interface - -uses - SysUtils, Windows, Messages, Classes, Graphics, Controls, - Forms, Dialogs, StdCtrls, ExtCtrls, Menus, ComCtrls, ElInputDlg, - ICMP, ElGraphs, SiteMan, ElTools, ElIni, ElFrmPers, ElTimers, ElPgCtl, - ElXPThemedControl, ElStatBar; - -type - TMainForm = class(TForm) - MainMenu: TMainMenu; - GraphAddItem: TMenuItem; - GraphRemoveItem: TMenuItem; - FileExitItem: TMenuItem; - HelpAboutItem: TMenuItem; - PropItem: TMenuItem; - ResetItem: TMenuItem; - ElFormPersist1: TElFormPersist; - ElIniFile1: TElIniFile; - TimerList: TElTimerPool; - Pages: TElPageControl; - StatusBar: TElStatusBar; - procedure FileExit(Sender: TObject); - procedure HelpAbout(Sender: TObject); - procedure GraphAddItemClick(Sender: TObject); - procedure FormDestroy(Sender: TObject); - procedure GraphRemoveItemClick(Sender: TObject); - procedure PropItemClick(Sender: TObject); - procedure PagesChange(Sender: TObject); - procedure FileMenuClick(Sender: TObject); - procedure ResetItemClick(Sender: TObject); - procedure FormClose(Sender: TObject; var Action: TCloseAction); - protected - SiteList : TList; - ShutDown : boolean; - function DoAddGraph(HostName:string) : TSite; - procedure LoadList; - procedure SaveList; - public - procedure Loaded ; override ; - end; - -var - MainForm: TMainForm; - -implementation - -uses frmList, About, frmProp; - -{$R *.DFM} - -procedure TMainForm.FileExit(Sender: TObject); -var i:integer; -begin - for i:=0 to SiteList.Count-1 do TSite(SiteList[i]).Shutdown:=true; - MainForm.Close; -end; - -procedure TMainForm.HelpAbout(Sender: TObject); -begin - AboutBox.ShowModal; -end; - -procedure TMainForm.GraphAddItemClick(Sender: TObject); -var S:String; -begin - Application.ProcessMessages; - S := ''; - if ElInputDlg.InputQuery('Add host to ping','Please enter the host name or address to ping', S, false) then - begin - if DoAddGraph(S) <> nil then - begin - PropItemClick(Self); - end; - end; -end; - -function TMainForm.DoAddGraph; -var S:String; - IC:TICMP; - Site : TSite; - Entry : TDataEntry; -begin - result := nil; - S:=HostName; - try - IC:=TICMP.Create; - except - On E:TICMPException do - begin - MessageBox(0,PChar(E.Message),PChar(Application.Title),MB_ICONSTOP or MB_OK); - exit; - end; - end; - IC.Address:=S; - IC.ResolveAddr; - if IC.ErrorCode > 0 then - begin - MessageBox(0,'Failed to resolve the given address',PChar(Application.Title),MB_ICONSTOP or MB_OK); - IC.Free; - Exit; - end; - Site := TSite.Create; - SiteList.Add(Site); - Site.Address := IC.HostIP; - IC.Free; - Site.RepCount := 0; - Site.HostName:=S; - Site.Timeout := 1000; - Site.StartTime:=DateTimeToStr(Now); - Site.Sheet:=TElTabSheet.Create(Pages); - Site.Sheet.PageControl:=Pages; - Site.Graph:=TElGraph.Create(Site.Sheet); - Site.Sheet.InsertControl(Site.Graph); - Site.Graph.Align:=alClient; - Site.Sheet.Caption:=Site.HostName; - Entry:=Site.Graph.AddEntry; - Site.Graph.ShowMinMax:=true; - Site.Graph.ShowLegend:=false; - Site.Graph.ColumnEntry:=Entry; - Site.Graph.MinMaxEntry:=Entry; - Site.Graph.ShowGrid:=false; - Site.Graph.HGridLines:=5; - Site.Graph.VGridLines:=20; - Site.Graph.Color:=clBtnText; - Site.Graph.LegendBkColor:=clWindow; - Entry.Color:=clLime; - Entry.MaxGrid:=100; - Entry.AutoGrid:=true; - Site.Start; - Pages.ActivePage := Site.Sheet; - PagesChange(Self); - Result := Site; -end; - -procedure TMainForm.FormDestroy(Sender: TObject); -var i:integer; - Site: TSite; -begin - ShutDown:=true; - Screen.Cursor := crHourGlass; - try - i:=0; - while i0 then - begin - Pages.ActivePage := Pages.Pages[0]; - PagesChange(Self); - end else StatusBar.SimpleText := ''; - end; -end; - -procedure TMainForm.PropItemClick(Sender: TObject); -var Sheet : TElTabSheet; - i : integer; - Site : TSite; -begin - Sheet:=Pages.ActivePage; - if Sheet = nil then exit; - i:=0; - while TSite(SiteList[i]).Sheet<>Sheet do inc(i); - if i>=SiteList.Count then exit; - Site:=TSite(SiteList[i]); - PropForm.HostLabel.Caption:=Site.Address; - PropForm.GridCB.Checked:=Site.Graph.ShowGrid; - PropForm.TimeOutSpin.Value:=Site.Timeout; - PropForm.LogCountSpin.Value:=Site.RepCount; - PropForm.IntervalSpin.Value := Site.Interval; - PropForm.RepCB.Checked:= Site.RepCount>0; - PropForm.LogNameEdit.Text:=Site.RepFile; - PropForm.LogNameEdit.Enabled := Site.RepCount>0; - if PropForm.ShowModal = mrCancel then exit; - Site.Timeout:=Trunc(PropForm.TimeOutSpin.Value); - Site.Interval := Trunc(PropForm.IntervalSpin.Value); - Site.Graph.ShowGrid:=PropForm.GridCB.Checked; - Site.RepFile:=PropForm.LogNameEdit.Text; - if not PropForm.RepCB.Checked - then Site.RepCount:= 0 - else Site.RepCount:= Round(PropForm.LogCountSpin.Value); -end; - -procedure TMainForm.Loaded ; { public } -var i:integer; -begin - SiteList:=TList.Create; - for i:=1 to ParamCount do // Iterate - DoAddGraph(ParamStr(i)); - LoadList; -end ; { Loaded } - -procedure TMainForm.PagesChange(Sender: TObject); -var Site : TSite; - i : integer; - Sheet : TElTabSheet; - -begin - i:=0; - Sheet := Pages.ActivePage; - if Sheet = nil then - begin - StatusBar.SimpleText := ''; - exit; - end; - if SiteList.Count < i then exit; - while TSite(SiteList[i]).Sheet<>Sheet do inc(i); - Site:=TSite(SiteList[i]); - StatusBar.SimpleText := 'Started '+ Site.StartTime; -end; - -procedure TMainForm.FileMenuClick(Sender: TObject); -begin - GraphRemoveItem.Enabled := Pages.ActivePage <> nil; - PropItem.Enabled := Pages.ActivePage <> nil; - ResetItem.Enabled := Pages.ActivePage <> nil; -end; - -procedure TMainForm.ResetItemClick(Sender: TObject); -var Sheet : TElTabSheet; - i : integer; - Site : TSite; - -begin - Sheet := Pages.ActivePage; - if Sheet = nil then exit; - if MessageBox(0, 'Reset statistics???', PChar(Application.Title), mb_YesNo) = mrNo then exit; - i := 0; - while TSite(SiteList[i]).Sheet<>Sheet do inc(i); - Site:=TSite(SiteList[i]); - Site.Graph.MinMaxEntry.Reset; - Site.StartTime:=DateTimeToStr(Now); - StatusBar.SimpleText := Site.StartTime; -end; - -procedure TMainForm.LoadList; { protected } -var S : TFileStream; - i, j, - k : integer; - Site : TSite; - host : string; - aFile : String; -begin - try - aFile := ExtractFilePath(ParamStr(0))+'ElPinger.hst'; - if FileExists(aFile) then - begin - S := TFileStream.Create(aFile, fmOpenRead or fmShareDenyWrite); - try - S.ReadBuffer(i, sizeof(Integer)); - for j := 0 to i - 1 do - begin - if (not ReadStringFromStream(S, Host)) or (Host = '') then Continue; - Site := DoAddGraph(Host); - if Site = nil then Continue; - if ReadStringFromStream(S, Host) then Site.RepFile := Host; - ReadStringFromStream(S, Site.StartTime); - StatusBar.SimpleText := 'Started '+ Site.StartTime; - S.ReadBuffer(K, sizeof(Integer)); - Site.Timeout := K; - S.ReadBuffer(K, sizeof(Integer)); - Site.RepCount := K; - S.ReadBuffer(K, sizeof(Integer)); - Site.Interval := K; - end; - finally - S.Free; - end; - end; - except - end; -end; { LoadList } - -procedure TMainForm.SaveList; { protected } -var S : TFileStream; - i, j : integer; - Site : TSite; - -begin - S := nil; - try - S := TFileStream.Create(ExtractFilePath(ParamStr(0))+'ElPinger.hst', fmCreate or fmShareDenyWrite); - i := SiteList.Count; - S.WriteBuffer(i, sizeof(Integer)); - for j := 0 to i - 1 do - begin - Site := TSite(SiteList[j]); - WriteStringToStream(S, Site.HostName); - WriteStringToStream(S, Site.RepFile); - WriteStringToStream(S, Site.StartTime); - S.WriteBuffer(Site.Timeout, sizeof(Integer)); - S.WriteBuffer(Site.RepCount, sizeof(Integer)); - S.WriteBuffer(Site.Interval, sizeof(Integer)); - end; - finally - S.Free; - end; -end; { SaveList } - -procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); -begin - SaveList; -end; - -end. diff --git a/sdk/components/ElPack/BCBDemos/Pinger/MAIN.dfm b/sdk/components/ElPack/BCBDemos/Pinger/MAIN.dfm deleted file mode 100644 index 2b95b2344fe83828eda92b29fc1669108d0888cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2883 zcmc&$&2HO95T;~FBqdpPQm5^aIaKJSf^+W0vVJO|mL*VhjQ|1CH8qwNS#pWpl@sUW zV;-aDJVB2>_AzuUP{6ld>&`AEMvPk&MSzylk~6cjGsBskZ+Ty}f>C>T+8_HP>u~?D zW?8|cf9M7yLgPLck+UI6Cvd5DzAEknJlXlpDxcGtTI@^;l>yNCLhU#OyF(I1d0eUY z*o;rT3619<>U|!oR%bzk1ZD4ad;Rv=N$|2WX#3M%P)%n!;d| z8i$AD2uHyx;oY)sjJ6>^y4~O;if(Sw2i}piZf|e#sVDBu-@3oo6b}4p5#H`T^;&&o zqWZpJOs>VN_wRrDH~by0U+D!KvuNMA*zk9ED>Ikz)}2|9@hfB-xTay;8cRqz?`}5y z3fXNQ4d!{RxTUYzPv%$e8pcj`%i_%>{|kZJ;h(P~R5`?fThzfv35VW_1stDxl|~RR zZPUJn`hiM%!N9f0affjUHujW=4C#*JE=VQ#wT*2jqBXNSp>Kf635a1FE{Z=^bziPK za@T4EJvJe8=wN#b&dQpW1|*7>#)#quA_f^m+*-9`E@mJMb`&kQE6D3U50}y@^%+sF zGvF!^Bz)z%qa{=HgvQ`F81RB1l-M=nBV}qnna^S7YwU3v(-1>o<0RpdDsZaP1%Ew^ zbVQD$>402Fw`^d-wn0h5<8A#mRt@QiUW@Q$S3o8B0uIX7fgWt)O3~_Xu05&PDAjSw$8ZGkxH}jsveTH^vC^OTIY~=%^&P4DeXS3GSA`ptg2MfC!wFd@@r_ZvC7QQhR zT^Fpb%h7v7^C6deO%$aOKhd+ET2SecB*CI#N#kC4{(AGW}084WFpxo4= zEtOr(w=eiI@7iq|S*z7b-G8Y8$x8&E3le!WzC^^$N8o0L^dX>uR--cFu*3{Ea@;d} zs<=R)v#UKejH!P4XN|S$*nE!3nga>f-48V+GMLjs`W7r3v2Mhra_l~%Ndhw`{nYz8 zh4DpQ7eNMSfeWbWBPzYB7}wh4mhb8@jfuD(@fkRFher`YQ>E~&+XY4=sz6i@l z7L_N{aX&b3`@I+DbMZy`xoG<^_c>Sgfe>o&eee0p&YAD`PJ@?c)1F^DlYk1C2662+ z&WVVzV@4n)W}wn)FA;Jul_6p5+M7cR0$+OOU1CyNUU%%BjstHr?hgCUpFVw>cKng) m_#_3(fJPuDoHN%@C+MfFcPV0_JrNL63G3wik|sxgO#TVt%5k>< diff --git a/sdk/components/ElPack/BCBDemos/Pinger/PingThread.pas b/sdk/components/ElPack/BCBDemos/Pinger/PingThread.pas deleted file mode 100644 index ecc56c91c95..00000000000 --- a/sdk/components/ElPack/BCBDemos/Pinger/PingThread.pas +++ /dev/null @@ -1,57 +0,0 @@ -unit PingThread; - -interface - -uses - Windows, Classes, ElGraphs, ICMP, SiteMan, SysUtils; - -type - TPingThread = class(TThread) - private - res : integer; - protected - procedure Execute; override; - procedure Report; - public - Address : string; - Timeout : integer; - DataSize : integer; - Graph : TElGraph; - Site : TSite; - - property Terminated; - end; - -implementation - -{ TPingThread } - -procedure TPingThread.Report; -begin - Graph.DataList[0].AddValue(res); - Site.SaveValue; - Graph.Repaint; -end; - -procedure TPingThread.Execute; -var xPing: TICMP; -begin - xPing := nil; - try - try - xPing:=TICMP.Create; - xPing.Address := Address; - xPing.Timeout := Timeout; - xPing.Size := DataSize; - res:=xPing.Ping; - if (res<>0) then res := xPing.Reply.RTT else res:=-1; - Synchronize(report); - finally - xPing.Free; - end; - except - on E : Exception do ; - end; -end; - -end. diff --git a/sdk/components/ElPack/BCBDemos/Pinger/SiteMan.pas b/sdk/components/ElPack/BCBDemos/Pinger/SiteMan.pas deleted file mode 100644 index a56ac202d61..00000000000 --- a/sdk/components/ElPack/BCBDemos/Pinger/SiteMan.pas +++ /dev/null @@ -1,149 +0,0 @@ -unit SiteMan; - -interface - -uses ElGraphs, ExtCtrls, ElPgCtl, Classes, Forms, SysUtils, ElTimers; - -type TSite = class - private - FInterval: integer; - procedure SetInterval(Value : integer); - procedure SetRepCount(Value : integer); - //procedure SetRepFile (Value : string); - public - Shutdown : boolean; - Address : string; - HostName : string; - Timeout : integer; - Graph : TElGraph; - Sheet : TElTabSheet; - StartTime : string; - ThreadList : TList; - Timer : TElTimerPoolItem; - FRepFile : string; - - F : TextFile; - FRepCount, - RepNow : integer; - procedure SaveValue; - procedure Start; - destructor Destroy; override; - procedure TimerProc(Sender:TObject); - procedure OnThreadFinish(Sender:TObject); - - property RepFile : string read FRepFile write FRepFile; - property RepCount : integer read FRepCount write SetRepCount; - property Interval : integer read FInterval write SetInterval; - end; - -implementation - -uses PingThread, Main; - -procedure TSite.SetRepCount(Value : integer); -begin - if (FRepFile <> '') and (Value >0) and (Value <>FRepCount) then - begin - if (FRepCount = 0) then - begin - try - if not FileExists(FRepFile) then - begin - AssignFile(F, FRepFile); - Rewrite(F); - end else - begin - AssignFile(F, FRepFile); - Append(F); - end; - Writeln(F, ''); - Write(F, 'Time: ', DateTimeToStr(Now)); - WriteLn(F, ' EldoS Pinger started logging.'); - CloseFile(F); - except - end; - end; - end; - FRepCount := Value; -end; - -procedure TSite.SetInterval; -var Event : TElTimerPoolItem; -begin - if (Value <> FInterval) and (Value >=500) then - begin - FInterval := Value; - Event := Timer; - Event.Interval := Value; - end; -end; - -procedure TSite.Start; -begin - ThreadList:=TList.Create; - if Interval = 0 then - FInterval := 1000; - Timer := MainForm.TimerList.Items.Add; - Timer.Interval := FInterval; - Timer.OnTimer := TimerProc; - Timer.Enabled := true; -end; - -destructor TSite.Destroy; -begin - Timer.Free; - - while ThreadList.Count >0 do - Application.ProcessMessages; - - ThreadList.Free; - inherited; -end; - -procedure TSite.OnThreadFinish(Sender:TObject); -begin - ThreadList.Remove(Sender); -end; - -procedure TSite.TimerProc; -var Thread : TPingThread; -begin - if Shutdown then exit; - Thread := TPingThread.Create(true); - Thread.Address:=Address; - Thread.Graph:=Graph; - Thread.Site := Self; - Thread.Timeout := Timeout; - Thread.FreeOnTerminate:=true; - Thread.OnTerminate:=OnThreadFinish; - ThreadList.Add(Thread); - Thread.Resume; -end; - -procedure TSite.SaveValue; { public } -var Min, - Max, - Avg : integer; -begin - if (RepCount = 0) or (RepFile = '') then exit; - inc (RepNow); - if RepNow >= RepCount then - begin - RepNow := 0; - try - AssignFile(F, RepFile); - Append(F); - Write(F, 'Time: ', DateTimeToStr(Now)); - Write(F, ' Faults: ', Graph.DataList[0].Faults); - Graph.DataList[0].CalcMinMax(Min, Max, Avg); - Write(F, ' Average: ', Avg); - WriteLn(F, ' Last: ', Graph.DataList[0].Value[Graph.DataList[0].ValueCount-1]); - - CloseFile(F); - except - on E: Exception do ; - end; - end; -end; { SaveValue } - -end. diff --git a/sdk/components/ElPack/BCBDemos/Pinger/frmList.dfm b/sdk/components/ElPack/BCBDemos/Pinger/frmList.dfm deleted file mode 100644 index 57b915e316cb59ae9640ec00292ae0262e0df28c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1109 zcmb`F&2rN)5XV&~j=$0-4P3b837EcuyQ|gi{(ssZHj3~pnqWUzF3?rqZ6g$g{*@hJDxvU2o>@n$J%_by zU2CmKY+GNEGZJ|M`79Q^a1I`p?-&@}RS^lnZYWR0gW-{_q=I*xC1m0rhN&oI*JBj8 zoC3W|W$OcSYX62NGHrc9U0-nd(o0ERfHZpJiSNFdM{m8UyTp^ou5SesxzUZAHWBQl zQ(e?WweMEty(SrS&KG!y2``2ia=NbHSED+}3`If9`HYLLz;O=1JvABRoq*$1jc=9| zO6xqNdtgPVH1jysZtb#V)9f4#q6u@8d%|N#=CqI_vDYhf6*di()HI|Y6n2`2M0Xjz zH>RguHI?7NoEp?29lp;g@smSSj_1lCg z_<}JLp$mmF6x-c)v{N};4>lvoYmEI0V_IX>+yliI{c%nn#;_(kCjDG}xoI?>zFp|5tBJ diff --git a/sdk/components/ElPack/BCBDemos/Pinger/frmList.pas b/sdk/components/ElPack/BCBDemos/Pinger/frmList.pas deleted file mode 100644 index 25cc3849f9e..00000000000 --- a/sdk/components/ElPack/BCBDemos/Pinger/frmList.pas +++ /dev/null @@ -1,41 +0,0 @@ -unit frmList; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, ElACtrls, ElXPThemedControl, ElBtnCtl, ElPopBtn; - -type - TSitesForm = class(TForm) - Sites: TElAdvancedListBox; - OkBtn: TElPopupButton; - CancelBtn: TElPopupButton; - procedure SitesClick(Sender: TObject); - procedure FormShow(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - SitesForm: TSitesForm; - -implementation - -{$R *.DFM} - - -procedure TSitesForm.SitesClick(Sender: TObject); -begin - OkBtn.Enabled := Sites.ItemIndex <> -1; -end; - -procedure TSitesForm.FormShow(Sender: TObject); -begin - ActiveControl := Sites; - OkBtn.Enabled := Sites.ItemIndex <> -1; -end; - -end. diff --git a/sdk/components/ElPack/BCBDemos/Pinger/frmProp.dfm b/sdk/components/ElPack/BCBDemos/Pinger/frmProp.dfm deleted file mode 100644 index 1ea03580e96d280553ce5bfa8ce5330fabe5bd13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4004 zcmc&%Pj4GV6d&)}-d#Jklb|4a+ml-^Ra>AS4p7IAn?h1sS-0gz$Loo`%6MnBJ5FN6 zA>!04LP8Z>IQJ89>=C{J;^bp5L_!5|BfOc}UH<{nxWF=p7d5zo6nK3wtEI<1#-gCX~a+ zlo)0=YIvBkzEQ^k_n4orv^~FX2OyG!+#}ISoqELQ+r;Y+xc&z!D*A!f;{*L?w9;fg zzgi#QFe2QjG`5)W+GXRA|Cy^ONZSaInC&+oCL4msvU*`b7Lzgv>Ji-#m% z+I4IP`;qOC(A!t@rKv?^2>@3cnB&5q8iFeWKiggvP4o;nufzKa+&0{|;Le~dJP|sP zqh)j9aRQydIyq4Zu(coM%VnG9TEmeSJG5(TMUnnE$?wO5r;*YpGp{J*j%0x&^f}?F$mOAwJ3BUAZCyF5Ty&P zwLYF=&76<*Z@8>F_FW=2LtzVE9$Q{bork9Vr_f>*Q+V2o;8kGTns7La&j*paig0Wu z?HTvgAIH0=|CrVm8`*8o=lM5kK>+T6MLA`=Y&gVz&!(PFmJMDN57sU?gD2*jMdeD1 z5l~QUku1%)Ee+Xl2qiAJv2Ww4No6$}f-B_ih-;`+qg?SC?8rA)Q! -#pragma hdrstop -USERES("LockerDemo.res"); -USEFORMNS("LockerForm.pas", Lockerform, frmLocker); -//--------------------------------------------------------------------------- -WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) -{ - try - { - Application->Initialize(); - Application->CreateForm(__classid(TfrmLocker), &frmLocker); - Application->Run(); - } - catch (Exception &exception) - { - Application->ShowException(&exception); - } - return 0; -} -//--------------------------------------------------------------------------- diff --git a/sdk/components/ElPack/BCBDemos/ShapedForm/LockerDemo.res b/sdk/components/ElPack/BCBDemos/ShapedForm/LockerDemo.res deleted file mode 100644 index b369156c076dbea4fc87e1cdb77a4e86205ae2cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 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 diff --git a/sdk/components/ElPack/BCBDemos/ShapedForm/LockerForm.pas b/sdk/components/ElPack/BCBDemos/ShapedForm/LockerForm.pas deleted file mode 100644 index 09734ee241e..00000000000 --- a/sdk/components/ElPack/BCBDemos/ShapedForm/LockerForm.pas +++ /dev/null @@ -1,76 +0,0 @@ -unit LockerForm; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - ElImgFrm, ExtCtrls, StdCtrls, ElPopBtn, ElBtnCtl, ElVCLUtils, ElACtrls, - Menus, ElXPThemedControl; - -type - TfrmLocker = class(TForm) - LockedImage: TImage; - UnlockedImage: TImage; - ImageForm: TElImageForm; - CaptionLabel: TLabel; - LockButton: TElPopupButton; - UnlockBkgnd: TImage; - LockBkgnd: TImage; - SampleEdit: TElAdvancedEdit; - PopupMenu1: TPopupMenu; - Close1: TMenuItem; - procedure LockButtonClick(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure Close1Click(Sender: TObject); - private - Unlocked : boolean; - public - { Public declarations } - end; - -var - frmLocker: TfrmLocker; - -implementation - -{$R *.DFM} - -procedure TfrmLocker.LockButtonClick(Sender: TObject); -begin - Unlocked := not Unlocked; - Hide; - if Unlocked then - begin - ClientHeight := UnlockedImage.Picture.Height; - CaptionLabel.Height := 91; - SampleEdit.Top := 108; - ImageForm.FormImage := UnlockedImage; - ImageForm.Background := UnlockBkgnd.Picture.Bitmap; - LockButton.Caption := 'Lock'; - LockButton.Top := 180; - end else - begin - ClientHeight := LockedImage.Picture.Height; - CaptionLabel.Height := 71; - SampleEdit.Top := 88; - ImageForm.FormImage := LockedImage; - ImageForm.Background := LockBkgnd.Picture.Bitmap; - LockButton.Caption := 'Unlock'; - LockButton.Top := 160; - end; - Show; -end; - -procedure TfrmLocker.FormCreate(Sender: TObject); -begin - ImageForm.Background := LockBkgnd.Picture.Bitmap; - ImageForm.BackgroundType := bgtTileBitmap; -end; - -procedure TfrmLocker.Close1Click(Sender: TObject); -begin - Close; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/ShapedForm/readme.txt b/sdk/components/ElPack/BCBDemos/ShapedForm/readme.txt deleted file mode 100644 index 5182e0945da..00000000000 --- a/sdk/components/ElPack/BCBDemos/ShapedForm/readme.txt +++ /dev/null @@ -1,8 +0,0 @@ -Before you implement your own shaped form, please take a look at the code of -this demo. Several properties are adjusted every time the shape of the form is -changed. - -Also remember to hide the form before changing it's shape to avoid flicker and -other side effects. - -Images are stored in TImage controls, which have width and height set to 0. \ No newline at end of file diff --git a/sdk/components/ElPack/BCBDemos/TrayDays/CalOptions.pas b/sdk/components/ElPack/BCBDemos/TrayDays/CalOptions.pas deleted file mode 100644 index 72824dd8b47..00000000000 --- a/sdk/components/ElPack/BCBDemos/TrayDays/CalOptions.pas +++ /dev/null @@ -1,50 +0,0 @@ -unit CalOptions; - -interface - -uses - ElCalendar, Graphics, SysUtils, ElCalendarDefs; - -type TCalOpts = record - ShowWarning : boolean; - WeekEndColor, - HolidayColor, - PeriodsColor: TColor; - ShowHolidays, - ShowPeriods : boolean; - PeriodInterval, - PeriodLength: integer; - PeriodStart : TDateTime; - ShowWeekNums: boolean; - WeekStart : integer; - WeekEnds : TElWeekendDays; - Holidays : TElHolidays; - end; - -var Options : TCalOpts; - -implementation - -initialization - with Options do - begin - ShowWarning := true; - WeekEndColor := clRed; - HolidayColor := clRed; - PeriodsColor := clAqua; - ShowHolidays := true; - ShowPeriods := false; - PeriodInterval := 28; - PeriodLength := 5; - PeriodStart := EncodeDate(1999, 1, 1); - ShowWeekNums := false; - WeekStart := 0; - WeekEnds := [Sat, Sun]; - Holidays := TElHolidays.Create(nil); - end; - -finalization - Options.Holidays.Free; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/TrayDays/FONT.RES b/sdk/components/ElPack/BCBDemos/TrayDays/FONT.RES deleted file mode 100644 index 0de9c0dc0cfa0e3dbd0d56ea0fac02f209a89e53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1532 zcmb_cJ5Iwu5Pb=VGWHQHs+18YFd~YS0%+*D0v#p3hAX!m!xurMq>4;w$)G)K05YnGE5kt22{30yWQrB;afgS2Uks72xgx%xPH=9_>xd7-0^o(B za7W9KTA;3L655P9aYyU@37SM2V?~k%LdZno>yn0?@|u){kU_(UTR}N4R50S8T*7^X z7qo`=(k&XTR!-B3Eu;JDBImppmgsG`(v9~r=iD;Zi=0sjD2vpb8J(%ZjM~quX8f}h z91a=I#~dxgqvpjb7dB4Oh9X~P+s2pgc-)p%J6_Lc z8DKua5Vs+2r7FkuQil95{p`;%^gFY6VspTn*c@LIg?@HajW$`6JA z5!uOO)8Iww6SRYLtF7$bKBapX*-^X4_$H1od58s7WQJQ@W6eMD8aMVw?$0;=F7#`d UB282KD)etOL6$kvZ;BVb01c_Q*#H0l diff --git a/sdk/components/ElPack/BCBDemos/TrayDays/Fake.pas b/sdk/components/ElPack/BCBDemos/TrayDays/Fake.pas deleted file mode 100644 index 83ac70e5fe8..00000000000 --- a/sdk/components/ElPack/BCBDemos/TrayDays/Fake.pas +++ /dev/null @@ -1,353 +0,0 @@ -unit Fake; - -interface - -uses - Forms, - ElTray, - SysUtils, - Controls, - Classes, - Windows, - Dialogs, - Graphics, - Messages, - Menus, - ElCalendar, - ElCalendarDefs, - ElTimers, - ElTools, - ElIni, - ElStrUtils, - ElShutdownWatcher, - CalOptions, - ElPromptDlg, - frmCalend, (* in 'frmCalend.pas' {CalendarForm}, *) - frmHolidayProp, (* in 'frmHolidayProp.pas' {HolidayPropForm}, *) - frmCalConfig, (* in 'frmCalConfig.pas' {CalConfigForm}, *) - frmDateProp; (* in 'frmDateProp.pas' {DatePropForm}; *) - -type - - TFakeClass = class - public - FTrayIcon : TElTrayIcon; - FTrayMenu : TPopupMenu; - FTimer : TElTimer; - FLastDate : integer; - FConfigIni: TElIniFile; - FBmp : TBitmap; - constructor Create; - destructor Destroy; override; - procedure OnSettingsItemClick(Sender : TObject); - procedure OnExitItemClick(Sender : TObject); - procedure TimerTimer(Sender : TObject); - procedure Run; - procedure UpdateCalendar; - procedure SaveOptions; - procedure LoadOptions; - procedure CheckRemindDays; - end; - -var FakeClass : TFakeClass; - -implementation - -procedure TFakeClass.CheckRemindDays; -var i : integer; - aDay : TElRemindDay; - Today : TDateTime; -begin - ToDay := Date; - for i := 0 to RemindDays.Count - 1 do - begin - aDay := TElRemindDay(RemindDays[i]); - if (not aDay.Notified) and (aDay.Date >= Today) and (aDay.Date - Today <= aDay.RemindTime) then - begin - aDay.Notified := true; - with TElPromptDialog.Create(nil) do - try - DialogCaption := 'EldoS TrayDays'; - Message := Format('%s is in %d days', [aDay.Name, aDay.RemindTime]); - Buttons := [mbOk]; - Show; - finally - Free; - end; - end; - end; -end; - -procedure TFakeClass.UpdateCalendar; -var CalForm : TCalendarForm; -begin - CalForm := TCalendarForm(FTrayIcon.ExtendedHintForm); - - with CalForm do - begin - Calendar.ShowPeriods := Options.ShowPeriods; - Calendar.StartOfWeek := Options.WeekStart; - Calendar.PeriodStart := Options.PeriodStart; - Calendar.PeriodLength := Options.PeriodLength; - Calendar.PeriodInterval := Options.PeriodInterval; - Calendar.WeekEndColor := Options.WeekEndColor; - Calendar.HolidayColor := Options.HolidayColor; - Calendar.PeriodColor := Options.PeriodsColor; - Calendar.WeekEndDays := Options.WeekEnds; - Calendar.Holidays := Options.Holidays; - Calendar.ShowWeekNum := Options.ShowWeekNums; - UpdateRemindDays; - end; -end; - -procedure TFakeClass.OnSettingsItemClick(Sender : TObject); -begin - with TCalConfigForm.Create(nil) do - try - SetData; - if ShowModal = mrOk then - begin - GetData; - UpdateCalendar; - end; - finally - Free; - end; -end; - -procedure TFakeClass.OnExitItemClick(Sender : TObject); -begin - PostMessage(Application.Handle, WM_QUIT, 0, 0); -end; - -procedure TFakeClass.Run; -begin - repeat - Application.HandleMessage; - until - Application.Terminated; -end; - -procedure TFakeClass.SaveOptions; -var St : TMemoryStream; - S : String; - wed : TElWeekEndDay; -begin - FConfigIni.ClearKey('\RemindDays'); - FConfigIni.WriteObject('\RemindDays', RemindDays); - - FConfigIni.WriteColor('\Settings', 'WeekEndColor', Options.WeekEndColor); - FConfigIni.WriteColor('\Settings', 'HolidayColor', Options.HolidayColor); - FConfigIni.WriteBool('\Settings', 'ShowHolidays', Options.ShowHolidays); - FConfigIni.WriteBool('\Settings', 'ShowWeekNums', Options.ShowWeekNums); - FConfigIni.WriteInteger('\Settings', 'WeekStart', Options.WeekStart); - - S := ''; - for wed := Sun to Sat do - if wed in Options.WeekEnds then S := S + char(Smallint(wed)+65); - - FConfigIni.WriteString('\Settings', 'WeekEnds', S); - - St := TMemoryStream.Create; - try - Options.Holidays.SaveToStream(St); - S := Data2Str(St.Memory, St.Size); - FConfigIni.WriteString('\Settings', 'Holidays', S); - finally - St.Free; - end; -end; - -procedure TFakeClass.LoadOptions; -var i : integer; - p1: Pointer; - wed : TElWeekEndDay; - Ss : TElMemoryStream; - S : String; -begin - Options.Holidays := TElHolidays.Create(nil); - - FConfigIni.ReadObject('\RemindDays', RemindDays); - - FConfigIni.ReadColor('\Settings', 'WeekEndColor', clRed, Options.WeekEndColor); - FConfigIni.ReadColor('\Settings', 'HolidayColor', clFuchsia, Options.HolidayColor); - FConfigIni.ReadBool('\Settings', 'ShowHolidays', false, Options.ShowHolidays); - FConfigIni.ReadBool('\Settings', 'ShowWeekNums', false, Options.ShowWeekNums); - FConfigIni.ReadInteger('\Settings', 'WeekStart', 0, Options.WeekStart); - - FConfigIni.ReadString('\Settings', 'WeekEnds', 'AG', S); - - Options.WeekEnds := []; - for wed := Sun to Sat do - if Pos(char(SmallInt(Wed)+65), S) > 0 then Include(Options.WeekEnds, Wed); - - FConfigIni.ReadString('\Settings', 'Holidays', '', S); - - if Str2Data(S, p1, i) then - begin - try - SS := nil; - try - SS := TElMemoryStream.Create; - SS.SetPointer(P1, i); - Options.Holidays.LoadFromStream(SS); - finally - SS.Free; - end; - except - end; - end; -end; - -procedure TFakeClass.TimerTimer; -var ST : TSystemTime; - Bmp: TBitmap; - Msk: TBitmap; - II: TIconInfo; - Icon: TIcon; - C : TColor; - R : TRect; - Font: TBitmap; - i, j: integer; -begin - GetLocalTime(ST); - if (FLastDate <> ST.wDay) then - begin - // generate new icon - Font := TBitmap.Create; - Font.Assign(FBmp); - FConfigIni.ReadColor('\Settings', 'TrayIconColor', clBtnText, C); - for i := 0 to Font.Width -1 do - begin - for j := 0 to Font.Height - 1 do - if Font.Canvas.Pixels[i, j] = clBlack then - Font.Canvas.Pixels[i, j] := C; - end; - - Bmp := TBitmap.Create; - try - Bmp.Width := 16; - Bmp.Height := 16; - Bmp.PixelFormat := pf4bit; - - Msk := TBitmap.Create; - try - Msk.Width := 16; - Msk.Height := 16; - Msk.PixelFormat := pf1bit; - Msk.Canvas.Brush.Color := clWhite; - Msk.Canvas.FillRect(Rect(0,0,16, 16)); - - - R := Rect(0, 0, 16, 16); - Msk.Canvas.Brush.Color := clWhite; - Msk.Canvas.FillRect(R); - R := Rect(0, 0, 15, 15); - - if ST.wDay > 9 then - begin - R := Rect(3, 1, 8, 7); - bitblt(Bmp.Canvas.Handle, R.Left, R.Top, 5, 6, Font.Canvas.Handle, St.wDay div 10 * 5, 0, SRCCOPY); - end; - R := Rect(10, 1, 15, 7); - bitblt(Bmp.Canvas.Handle, R.Left, R.Top, 5, 6, Font.Canvas.Handle, St.wDay mod 10 * 5, 0, SRCCOPY); - - R := Rect(3, 9, 8, 7); - bitblt(Bmp.Canvas.Handle, R.Left, R.Top, 5, 6, Font.Canvas.Handle, St.wMonth div 10 * 5, 0, SRCCOPY); - - R := Rect(10, 9, 15, 7); - bitblt(Bmp.Canvas.Handle, R.Left, R.Top, 5, 6, Font.Canvas.Handle, St.wMonth mod 10 * 5, 0, SRCCOPY); - - if ST.wDay > 9 then - begin - R := Rect(3, 1, 8, 7); - bitblt(Msk.Canvas.Handle, R.Left, R.Top, 5, 6, Font.Canvas.Handle, St.wDay div 10 * 5, 0, SRCCOPY); - end; - R := Rect(10, 1, 15, 7); - bitblt(Msk.Canvas.Handle, R.Left, R.Top, 5, 6, Font.Canvas.Handle, St.wDay mod 10 * 5, 0, SRCCOPY); - - R := Rect(3, 9, 8, 7); - bitblt(Msk.Canvas.Handle, R.Left, R.Top, 5, 6, Font.Canvas.Handle, St.wMonth div 10 * 5, 0, SRCCOPY); - - R := Rect(10, 9, 15, 7); - bitblt(Msk.Canvas.Handle, R.Left, R.Top, 5, 6, Font.Canvas.Handle, St.wMonth mod 10 * 5, 0, SRCCOPY); - - II.fIcon := true; - II.xHotspot := 0; - II.yHotspot := 0; - II.hbmMask := Msk.Handle; - II.hbmColor := Bmp.Handle; - Icon := TIcon.Create; - Icon.Handle := CreateIconIndirect(II); - FTrayIcon.StaticIcon := Icon; - Icon.Free; - - finally - Msk.Free; - end; - finally - Bmp.Free; - end; - CheckRemindDays; - end; - FLastDate := ST.wDay; -end; - -constructor TFakeClass.Create; -var MI : TMenuItem; - R : TRect; - i : integer; -begin - inherited; - FBmp := TBitmap.Create; - FBmp.LoadFromResourceName(HInstance, 'FONT'); - FConfigIni:= TElIniFile.Create(nil); - FConfigIni.UseRegistry := true; - FConfigIni.Path := 'SOFTWARE\EldoS\TrayDays'; - LoadOptions; - - FTimer := TElTimer.Create; - FTimer.OnTimer := TimerTimer; - - FTrayMenu := TPopupMenu.Create(nil); - MI := Menus.NewItem('&Settings', 0, false, true, OnSettingsItemClick, 0, 'SettingsItem'); - FTrayMenu.Items.Add(MI); - MI := Menus.NewItem('E&xit', 0, false, true, OnExitItemClick, 0, 'ExitItem'); - FTrayMenu.Items.Add(MI); - - FTrayIcon := TElTrayIcon.Create(nil); - FTrayIcon.ExtendedHintInteractive := true; - FTrayIcon.ExtendedHint := 'TCalendarForm'; - FTrayIcon.ExtendedHintDelay := 500; - FTrayIcon.ExtHintWndStyle := Cardinal(WS_POPUP or WS_BORDER or WS_THICKFRAME); - FTrayIcon.ExtHintWndExStyle := WS_EX_TOPMOST or WS_EX_TOOLWINDOW; - - SendMessage(FTrayIcon.ExtendedHintForm.Handle, CM_ShowingChanged, 0, 0); - R := FTrayIcon.ExtendedHintForm.BoundsRect; - FConfigIni.ReadRect('\Settings', 'Size', R, R); - with FTrayIcon.ExtendedHintForm do - SetBounds(Left, Top, R.Right - R.Left, R.Bottom - R.Top); - ShowWindow(Application.Handle, SW_HIDE); - UpdateCalendar; - if FConfigIni.ReadInteger('\Settings', 'BottomPanelHeight', TCalendarForm(FTrayIcon.ExtendedHintForm).BottomPanel.Height, i) then - TCalendarForm(FTrayIcon.ExtendedHintForm).BottomPanel.Height := i; - - FTrayIcon.PopupMenu := FTrayMenu; - TimerTimer(Self); - FTrayIcon.Enabled := true; - FTimer.Enabled := true; -end; - -destructor TFakeClass.Destroy; -begin - FConfigIni.WriteInteger('\Settings', 'BottomPanelHeight', TCalendarForm(FTrayIcon.ExtendedHintForm).BottomPanel.Height); - FConfigIni.WriteRect('\Settings', 'Size', FTrayIcon.ExtendedHintForm.BoundsRect); - SaveOptions; - FTrayIcon.Free; - FTrayMenu.Free; - FConfigIni.Free; - FBmp.Free; - inherited; -end; - -end. diff --git a/sdk/components/ElPack/BCBDemos/TrayDays/KILLDATE.RES b/sdk/components/ElPack/BCBDemos/TrayDays/KILLDATE.RES deleted file mode 100644 index f9c355bb44f1cb567d24e441aa6e828979a5174d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmZvWJqp4x48@<~ -#pragma hdrstop -USERES("FONT.RES"); -USERES("KILLDATE.RES"); -USERES("TrayDays.res"); -USEUNIT("CalOptions.pas"); -USEFORMNS("frmCalConfig.pas", Frmcalconfig, CalConfigForm); -USEFORMNS("frmCalend.pas", Frmcalend, CalendarForm); -USEFORMNS("frmDateProp.pas", Frmdateprop, DatePropForm); -USEFORMNS("frmHolidayProp.pas", Frmholidayprop, HolidayPropForm); -USEUNIT("Fake.pas"); -//--------------------------------------------------------------------------- -#include -//--------------------------------------------------------------------------- - -WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) -{ - Application->Initialize(); - Application->Title = "EldoS TrayDays"; - FakeClass = new TFakeClass(); - try - { - FakeClass->Run(); - } - __finally - { - FakeClass->Free(); - } - return 0; -} -//--------------------------------------------------------------------------- diff --git a/sdk/components/ElPack/BCBDemos/TrayDays/TrayDays.res b/sdk/components/ElPack/BCBDemos/TrayDays/TrayDays.res deleted file mode 100644 index 74c4cbbd9324b80fc837baac3ae93fa33afb19e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmb7@u};G<5QhJ>k+MMt7A7(}GS}IZ=CyaR%Mn=XCmCWzN zNfS{Camk;%%XfFSEExbwDuiAPXZE!i_>whQ$5yM$d?>nMP*QhPhV+{~r%eF95a}Ji z3@Jg|wghn#(S_de+wUu&dZ*QHNBg#7rSi1eJT*<@{od~>t{U9 z*Jjcm=gTS=$<`}1>7 zQXabb-lx2r9Q@it^A%ltatig=4M`~ZUP5DNeR diff --git a/sdk/components/ElPack/BCBDemos/TrayDays/frmCalConfig.dfm b/sdk/components/ElPack/BCBDemos/TrayDays/frmCalConfig.dfm deleted file mode 100644 index 9cee7acfac7cff6be9f16ea9a1c39a53e952d7fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6699 zcmeHL&2JmW6(5q~evl$XNil3UK*0b3+U8)mX@CMbg`z}Ju_Uru+6LM~GF*ag^vXaot!FQ#QEBp_wjpg z-g{RSG-$UD+r8t?!G5QAa)cf?wts-opx=31AG9%Tv-mU`cNm}6a-+3Fawn*os$ z*2H?7MkJP95{)Oa^jB0haVlDP0CpPIhki+72ToXuUhmQU@V){ia;6@8FX98QW~ zRuo;9q8h3X_Gq6avt(x`C5y|wvmF^5F@LVbT&$F}42n-2`_aS7!4!|lK|CUtMby~k z_+pow;u)144y<_!vaueQNTJ8@&q4qx4lMwx z(9IC*5SakgYS~ivUP{cZ2DFvmrFHLs?&*wd=ay1a+RV+aFsb~B*0d_EP)6rO3E8dg zlbCQ!)xZz%`S~0$O1v#4LLlFW*r2egQ5Z}xSarEYqjBsym?~eCL*+v4MN|d5f>VMC zA#(X9_#jiZYqY&=PFEH9=vgG9Atioh8m=W3IfFwyB-GLWe`=uqdxI0tLjC8dnbxw; z{pW<7fwvQ%Rsj~VNVFySaLSy`r0Yp){0qvT|FMCgr(xK%$N%Ey@f+#!%~0trf628o zKUqGrZ_n)BJhQIOYzm3F6ipWA=tigp!qu8-v+0m++WQwX%a=U1m(0^k?patjLeaYb z1Ze947dfgNz~iwDaO;ZJl*4oYjfc^c7z=B38IN9o$zp0O$@A66)*|jHgEROscrz$+ z6`sK=?=O}QVypp~->}TB=l1lAC90J$WXDYJtU>paoya&tu>m9V^65oAZqI~d)Aoc# zAz4@JVBg9}1gZsul2DS7xznn5V)@n*k;!z;Edh-j86U-nAm^;o9)4%RuMueIGn;FHX>kTF|t|y%i zkJO?UU^(N^LsjiyjY$0kPesH3d#S8%_kHE~5&2LcJgV(<1^=fjPmo z?~9jr_dm-Sl4C`_m)g<&C0nmctg&K^-D}Mx3!)dq%M5-ay=>K+u;Ss#d-S^cTKlI3 z6iWXx?_5gQK}y*F{rO6N?y3L;a)%5!%0P@!89}D5@*kMCQu8IhuKmO$yMhL<13ZX&)2CcrDfWO9%%LV<*IpHV1MLsc{s!&e(B3bCwv?;XTLHimG zEJFhV3Ci8Jio&n#^(lpo=;Lzkqwk2qbwwc&A&+#Blqa-eWUW)8E!)2>iEk|L(XVhW zmET-iP9NZnrMVT)@A8TE@dd}2Mvf{B6#fS=@xla=JDBTT5T8J}q%$~`?RyVbZ83IL z`{AlJlglfQT&#V#YQs}O(pm{bLZR?#2jdtFX)nf*c#OPFC>3y`;yMU$3FhI%dyupF z=aHO5@gX@U)O*{PuA&5CCAy^tLW=>42O>~!R^y1x1kuF><8&YuS9z@&c(p8yKf>b7 zDZhOA*~^!8Q!Y?~)G}1Gz_Rfy;&O&*BgictshN$sWoDh6QPUdgm(D za{Wdt(Ns{f2&M#=ER<5by^iBTJx;wy?pBUMJ$Hi(h^KWRc0#7?oLpz*QyX}_Ge#V9 zkDJ=|f~nFSnYwqK;M@5E^g{-Cov*<==gZu)g0HnVf-O3tu=Ma zLPzC0@&aWx6Wv=PU&G2F!`Dry^c8yNyr^pyyf|;li>1=?qDpF6g(77)tx)8XgI}h} z!JR7f6D!08&F<|qtGK5+=p`iHjWA_nsMbK2jw?0@-h;|f`J+d0uG5Jq)bO46 zE#*z+6h-sLdhsW})<0RTr_N5hke;7FEZK|ce1n~;m*NO&D|?sl8I0jHl8sS$5J^g$ zEhVswi6%`W{!-tR^1F&y1rSTD?!Gm#o9wiAPWT0nB nil; - HolidayRemoveBtn.Enabled := HolidaysList.ItemFocused <> nil; -end; - -procedure TCalConfigForm.HolidayRemoveBtnClick(Sender: TObject); -begin - if HolidaysList.ItemFocused = nil then Exit; - HolidaysList.Items.DeleteItem(HolidaysList.ItemFocused); -end; - -procedure TCalConfigForm.FormCreate(Sender: TObject); -begin - Holidays := TElHolidays.Create(Self); -end; - -procedure TCalConfigForm.FormDestroy(Sender: TObject); -begin - Holidays.Free; - Holidays := nil; -end; - -procedure TCalConfigForm.HolidaysSaveBtnClick(Sender: TObject); -var Stream : TFileStream; -begin - if SaveDlg.Execute then - begin - Stream := nil; - try - try - Stream := TFileStream.Create(SaveDlg.FileName, fmCreate or fmShareDenyWrite); - Holidays.SaveToStream(Stream); - finally // wrap up - Stream.Free; - end; // try/finally - except - MessageDlg('Failed to save holidays', mtError, [mbOk], 0); - end; - end; -end; - -procedure TCalConfigForm.HolidaysLoadBtnClick(Sender: TObject); -var Stream : TFileStream; - i : integer; -begin - if OpenDlg.Execute then - begin - Stream := nil; - try - try - Stream := TFileStream.Create(OpenDlg.FileName, fmOpenRead or fmShareDenyWrite); - Holidays.LoadFromStream(Stream); - HolidaysList.Items.Clear; - for i := 0 to Holidays.Count - 1 do AddHolidayToList(Holidays.Items[i]); - finally // wrap up - Stream.Free; - end; // try/finally - except - MessageDlg('Failed to load holidays', mtError, [mbOk], 0); - end; - end; -end; - -procedure TCalConfigForm.HolidaysListItemDeletion(Sender: TObject; - Item: TElTreeItem); -begin - if Assigned(Item) and Assigned(Holidays) then TElHoliday(Item.Data).Free; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/TrayDays/frmCalend.dfm b/sdk/components/ElPack/BCBDemos/TrayDays/frmCalend.dfm deleted file mode 100644 index e2227fa871c7d10fb346e1a9cd2b17dad097352c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4967 zcmc&&-EJc_6rLu{j3<+%Y0)kqA=E3hS1S;N>TYV*m{r`Fa|ZYrDKKfbWG zm%{FOF7AK(wdJB#dU24Y!~wv36(^*CT&1JQ;|3g7>Cu3BM^pkIwV328uqj7+J3tE_ z1?SGz3SKQ(!{5UJUo$F~3b>}_H3ig{3Yf#BcaHxbfc1}1w)28@l)ZiYH*ST0vjFeS z3aB2!wJThJ@=q^UfFA!pvHx#C8X5m*Ua*d`w~v15R_Jf7u)P_44+j+4U;g>!=({*! z_kW@OF90;s{fE3@9c6DH{PL~9Zx*o4(f7di`$;7B!blN>9UI2%%WG!;%je8~t&>T# zbsG7F$BsgldJY?>Xz>XA9;4Z{p#omWg`ai|9%g1$PAJbpbCC$1`9cLMe(%{vs6WAa~E8sWY|&KXdF<9K4&4QHd}#;E|`fUM)QO@jkB@x zGjYy@c7xY#GihZi_Q5-o999zWeQ_4I&nq3pKkvG)A4pWq%-e<$n>|jIyKp18HmMq) zf>B7p_f#;WoRV8_%{w~SUlx~A2W=d@a1XjS|2H&yGc zVRz7f;>qh!X-OGh8qey0XXP|F_gY**kB)Lm_2-pjKznC8s_!c{OYi$iMq-j~*v>;L zGAidb>9MiYwaS3XU}{%diHx{i9?-eH`7jd@jqG?4m0kAyP} zuQBk_^vOeYvIx@+d5k5#yB2PKXH<~iDndC}7r2?vE9%{;=z)yFgGeyL7>o2{9))zC zHmo98p0B7>!?RPy&P&z`u#NgiLYNPPWL=mnz;#q-nA(Z*<-GOX$))xU4gC_$#u0x zu3ojplPTDK$YDxWqYd_8BI8Vi+OXHg6BBRuBF|URbiM-W|9$2_Wo#a za1yc0+A*6!638SrihJ5#+tU{|oHB*P(G6st-+Xw&r1Aq910vu?F?mhz=N9YZoBB+) zg>I)*|F9p+$1j?EQ(tj1IfZ=rRMLcanzxBgLf%-_3u@@Jn~YN*%o}IxoLn*BHRxyz z!_EUqL$nC`!Wr5xYg$+#Hq)$ diff --git a/sdk/components/ElPack/BCBDemos/TrayDays/frmCalend.pas b/sdk/components/ElPack/BCBDemos/TrayDays/frmCalend.pas deleted file mode 100644 index f83457161a4..00000000000 --- a/sdk/components/ElPack/BCBDemos/TrayDays/frmCalend.pas +++ /dev/null @@ -1,273 +0,0 @@ -unit frmCalend; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - Grids, ElCalendar, StdCtrls, ElACtrls, ElSpin, ElBtnCtl, ElPopBtn, - ExtCtrls, ElPanel, ElSplit, ElObjList, ElPromptDlg, ElCombos, - ElHTMLView, ElXPThemedControl; - -type - - TElRemindDay = class; - - TCalendarForm = class(TForm) - Panel1: TPanel; - PrevMonBtn: TElPopupButton; - PrevYearBtn: TElPopupButton; - NextMonBtn: TElPopupButton; - NextYearBtn: TElPopupButton; - YearSpin: TElSpinEdit; - Calendar: TElCalendar; - BottomPanel: TElPanel; - ReminderView: TElHTMLView; - Splitter: TElSplitter; - btnAddDay: TElPopupButton; - MonthCombo: TElComboBox; - procedure PrevYearBtnClick(Sender: TObject); - procedure NextYearBtnClick(Sender: TObject); - procedure NextMonBtnClick(Sender: TObject); - procedure PrevMonBtnClick(Sender: TObject); - procedure MonthComboChange(Sender: TObject); - procedure YearSpinChange(Sender: TObject); - procedure CalendarChange(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure FormShow(Sender: TObject); - procedure FormResize(Sender: TObject); - procedure ReminderViewLinkClick(Sender: TObject; HRef: TElFString); - procedure ReminderViewImageNeeded(Sender: TObject; Src: TElFString; - var Image: TBitmap); - procedure btnAddDayClick(Sender: TObject); - private - public - procedure CreateParams(var Params: TCreateParams); override; - procedure SetNames; - procedure UpdateLabel; - procedure UpdateRemindDays; - function ConfigureRemindDay(ADay : TElRemindDay) : boolean; - end; - - TElRemindDay = class(TElObjectListItem) - private - FRemindTime : integer; - FName : string; - FDate : TDateTime; - FNotified : boolean; - published - property Name : string read FName write FName; - property RemindTime : integer read FRemindTime write FRemindTime; - property Date : TDateTime read FDate write FDate; - property Notified : boolean read FNotified write FNotified; - end; - -var - - CalendarForm: TCalendarForm; - RemindDays : TElObjectList; - KillBmp : TBitmap; - -{$R 'killdate.res'} - -const OrigHeight = -11; - OrigWidth = 193; - -implementation - -{$R *.DFM} - -uses frmDateProp; - -procedure TCalendarForm.SetNames; -var - i : integer; -begin - for i := 1 to 12 do - MonthCombo.Items.Add(LongMonthNames[i]); -end; - -procedure TCalendarForm.UpdateLabel; -begin - MonthCombo.ItemIndex := Calendar.Month - 1; - YearSpin.Value := Calendar.Year; -end; - -procedure TCalendarForm.PrevYearBtnClick(Sender: TObject); -begin - Calendar.Year := Calendar.Year - 1; - UpdateLabel; -end; - -procedure TCalendarForm.NextYearBtnClick(Sender: TObject); -begin - Calendar.Year := Calendar.Year + 1; - UpdateLabel; -end; - -procedure TCalendarForm.NextMonBtnClick(Sender: TObject); -begin - if Calendar.Month = 12 then - begin - Calendar.Month := 1; - Calendar.Year := Calendar.Year + 1; - end - else - Calendar.Month := Calendar.Month + 1; - UpdateLabel; -end; - -procedure TCalendarForm.PrevMonBtnClick(Sender: TObject); -begin - if Calendar.Month = 1 then - begin - Calendar.Month := 12; - Calendar.Year := Calendar.Year - 1; - end - else - Calendar.Month := Calendar.Month - 1; - UpdateLabel; -end; - -procedure TCalendarForm.MonthComboChange(Sender: TObject); -begin - if (MonthCombo.ItemIndex >= 0) and (MonthCombo.ItemIndex < 12) then - Calendar.Month := MonthCombo.ItemIndex + 1; -end; - -procedure TCalendarForm.YearSpinChange(Sender: TObject); -var - FSaveYear : integer; -begin - FSaveYear := Calendar.Year; - try - Calendar.Year := Trunc(YearSpin.Value); - except - Calendar.Year := FSaveYear; - end; -end; - -procedure TCalendarForm.CalendarChange(Sender: TObject); -begin - UpdateLabel; -end; - -procedure TCalendarForm.CreateParams(var Params: TCreateParams); { protected } -begin - inherited; - Params.Style := WS_POPUP or WS_BORDER or WS_THICKFRAME; -end; { CreateParams } - -procedure TCalendarForm.FormCreate(Sender: TObject); -begin - //SetNames; -end; - -procedure TCalendarForm.FormShow(Sender: TObject); -begin - UpdateLabel; -end; - -procedure TCalendarForm.FormResize(Sender: TObject); -begin - Calendar.Font.Height := MulDiv(OrigHeight, ClientWidth, OrigWidth); -end; - -function TCalendarForm.ConfigureRemindDay(ADay : TElRemindDay) : boolean; -begin - result := false; - with TDatePropForm.Create(nil) do - try - SetData(ADay); - if ShowModal = mrOk then - begin - GetData(ADay); - result := true; - end; - finally - free; - end; -end; - -procedure TCalendarForm.UpdateRemindDays; -var s : string; - Day : TElRemindDay; - Today: TDateTime; - i : integer; -begin - S := ''; - Today := Trunc(Now); - for i := 0 to RemindDays.Count - 1 do - begin - Day := TElRemindDay(RemindDays[i]); - if Day.Date < Today then - S := S + Format('%d days after %s ', [Trunc(Today - Day.Date), Integer(Pointer(Day)), Day.Name]) - else - if Day.Date > Today then - S := S + Format('%d days until %s ', [Trunc(Day.Date - Today), Integer(Pointer(Day)), Day.Name]) - else - S := S + Format('Today is %s ', [Integer(Pointer(Day)), Day.Name]); - S := S + Format('
', [Integer(Pointer(Day))]); - end; - ReminderView.Caption := S; -end; - -procedure TCalendarForm.ReminderViewLinkClick(Sender: TObject; - HRef: TElFString); -var i : integer; -begin - i := StrToIntDef(HRef, 0); - if i > 0 then - begin - if ConfigureRemindDay(TElRemindDay(Pointer(i))) then - UpdateRemindDays; - end - else - if i < 0 then - begin - if ElMessageDlg(Format('Do you want to delete %s?', [TElRemindDay(Pointer(-i)).Name]), mtWarning, [mbYes, mbNo], 0) = mrYes then - begin - RemindDays.Remove(Pointer(-i)); - UpdateRemindDays; - end; - end; -end; - -procedure TCalendarForm.ReminderViewImageNeeded(Sender: TObject; - Src: TElFString; var Image: TBitmap); -begin - if src = 'killimage' then - Image := KillBmp - else - Image := nil; -end; - -procedure TCalendarForm.btnAddDayClick(Sender: TObject); -var ADay : TElRemindDay; -begin - ADay := TElRemindDay(RemindDays.Add); - ADay.Date := Trunc(Now + 1); - if ConfigureRemindDay(ADay) then - begin - UpdateRemindDays; - end else - begin - RemindDays.Remove(ADay); - end; -end; - -initialization - - RegisterClass(TCalendarForm); - - RemindDays := TElObjectList.Create(nil, TElRemindDay); - RemindDays.AutoClearObjects := true; - KillBmp := TBitmap.Create; - KillBmp.LoadFromResourceName(HInstance, 'KILLDATEIMAGE'); - -finalization - - KillBmp.Free; - RemindDays.Free; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/TrayDays/frmDateProp.dfm b/sdk/components/ElPack/BCBDemos/TrayDays/frmDateProp.dfm deleted file mode 100644 index 4bcfba932969b93d86a26668b076bf1095b00b9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2312 zcmcgt&5j#I5N?luX2#?FCClGwB`y&MNC1h53+rF)5<7N0lLRCrwmnm}TW)ucdU|%( zTtI>s$OZ8XJPQxNV}L}I3ldb%*j}&qfC7j;tf#B0zpDQFtLi_iBxu!x_F&i_bo#>{ zxwrqDLr5^_+}jCSRKq~YxFglPwz(*EVXTXv7K(w4i=BekkSYRo7D|zLwGs0diH3O( zL`s$}UoSY=&M0Xy%H_mv(pWPoDtiX?IK~{HG=rqpNA zL6?qzSF->2GoCER&}5Nvb_(m`$|`uxLN#MSU`3yhn+P9lBHUdfynP#?Y!J3Lf4I5% z^X2CEZ*O*oFh{PAnb^wyQ4VmP)jwSVynY*?6wyV3M_$NO+m7ZrQH1OUZ9b538aGm{ zr6~7j4J|Uv;!h+4tu8?yu0Y?ap3Uh5&O`)P7TIqpdf9?8O}XwUEC@>DIu-m1|G{(wM z-LAbv$N|=FCPBdFFks;flw+3L#67r8T*b_Is%;OVaaW3o*@n~B*nF*+m{ba3hGn43 zcUB3_Cd`~S zemTTZ6y0e0Ykd`M92CAr4Zf;U-&`eYrpk;TtT5-*cGs+}>qKW0I9~?X7+}hNV+G*@ z2jpIgTL^ZK33K&jlK*{6PHdFwwdvP)em^|Pg=Si(iSMzJoP#=O^P7hIM`qoTVVXdM m4=6^B@ZEMQxhR}k3lda)zHuw42l zZ%`B{`U(a50DXkMPtQS)>2Q~lC@XM+)aYT!<#ISX-|ROZ=VJ}I{o&z3ul;&79**qc zcz_=4{Ii9SJF*|_xP2CdKDiumHn$m{HLg6D59w5t?&&3$%}alvdWUhJ@&k{>NquV) zI+ux{vjL6M#Vbc#M$|ATi4(>rFzb@J2w9A8=Z;%**okrx(qyX}g)|m@8lD8A^e3vT z=i|^9LFrd*%Vx2--wg;)s4yD6eY^eY(EYjFZ;zdQx2E2*h;d`fi;lzCXXh@x5Ow)N zIo01+<u7rvUeG8R0kYT&^tZLlQSM?J)!qH58&L1G z!!FE&WK0v$?a0LFrp(Lls3L>bBbKxUepn>O*~p35e|uw%O*nD9g&zuSYCJ4#wgnuK2^!u)$)x?zo1%&p3!KS3d#*U zIXhx8%}-6mSYGX{f$Kvu0oU@HyDm%D<=piT3)lK~r5%MQu~8ur?7f7x)uV~WLwU;2 zuLNtUV3o%w8y>$~^Z1FtSD|K(3!y$!y!=b0A&*sWF4BL;Y^Q=b;X7(B<1Dq`}kVW)lX)*tR1^M2}p` zg#tVDMRY$cqpPSQx#cB2D25(8j}OB{EMuu1Kus;!x1BvC_Z`83IEjWUcE}Tfu|uH- zeOz&akoy?hEaf7=t9+ z)Ml@!HgqG_yK7#rRU3U>ZE_iVTh!c@*xap3U7Ue9fJhJ}5}yztolU<^SQP3_VOjij zUVny{*XoJ3i!}>tdsusjwMSTcjI}3Ndy2JZSl@jBV;6=6V-Lnd7>{5)hVcZ(Qy5@p zft>|*7T8%}XMvpsb{5!KU}u4y1$KL2x3^p1C;BpeeoAi}k_=ZWRzE8qQRz4IUo!K5 z7U~yD*Jh!vDxye!cZ2**Lv}FKud0+Ue~Znvip|`us0FZcaWGzu+4_FN3T zxe@xEynS&(pC)yKPLixAHQ_$a8b=Hh=trt>>o8ES8Ct7z1$Tw1jF8OYh|SZvlDo?A z6dErXMCrLE8B|kI=r0!px>q}xkrS%^m}sZR$$5`XNg4^8Lvv}?q`y%F-J4;|=Q6VT zfcYeXb`h*}?Y0vTXi;IOK7M?D~yj&$n3N{|rsx!2bmb`vR{3 diff --git a/sdk/components/ElPack/BCBDemos/TrayDays/frmHolidayProp.pas b/sdk/components/ElPack/BCBDemos/TrayDays/frmHolidayProp.pas deleted file mode 100644 index 2b0a3139a04..00000000000 --- a/sdk/components/ElPack/BCBDemos/TrayDays/frmHolidayProp.pas +++ /dev/null @@ -1,93 +0,0 @@ -unit frmHolidayProp; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, ElACtrls, ExtCtrls, ElPopBtn, ElCalendar, ElBtnCtl, ElCheckCtl, - ElCalendarDefs, ElXPThemedControl; - -type - THolidayPropForm = class(TForm) - IsRestCB: TElCheckBox; - Panel1: TPanel; - Panel2: TPanel; - Label9: TLabel; - FloatDayCombo: TElAdvancedComboBox; - FloatDOWCombo: TElAdvancedComboBox; - FloatMonthCombo: TElAdvancedComboBox; - FloatDateRB: TElRadioButton; - Panel3: TPanel; - Label2: TLabel; - FixedDayCombo: TElAdvancedComboBox; - FixedMonthCombo: TElAdvancedComboBox; - FixedDateRB: TElRadioButton; - DescriptionEdit: TElAdvancedEdit; - Label1: TLabel; - OkBtn: TElPopupButton; - CancelBtn: TElPopupButton; - procedure FixedDateRBClick(Sender: TObject); - private - { Private declarations } - public - AHoliday : TElHoliday; - procedure SetData; - procedure GetData; - end; - -var - HolidayPropForm: THolidayPropForm; - -implementation - -{$R *.DFM} - -procedure THolidayPropForm.GetData; -begin - AHoliday.Description := DescriptionEdit.Text; - AHoliday.FixedDate := FixedDateRB.Checked; - if FixedDateRB.Checked then - begin - AHoliday.Month := FixedMonthCombo.ItemIndex + 1; - AHoliday.Day := FixedDayCombo.ItemIndex + 1; - end else - begin - AHoliday.Month := FloatMonthCombo.ItemIndex + 1; - AHoliday.DayOfWeek := FloatDOWCombo.ItemIndex; - AHoliday.Day := FloatDayCombo.ItemIndex + 1; - end; - AHoliday.IsRest := IsRestCB.Checked; -end; - -procedure THolidayPropForm.SetData; -begin - DescriptionEdit.Text := AHoliday.Description; - FixedDateRB.Checked := AHoliday.FixedDate; - FloatDateRB.Checked := not AHoliday.FixedDate; - FixedDateRBClick(Self); - if AHoliday.FixedDate then - begin - FixedMonthCombo.ItemIndex := AHoliday.Month - 1; - FixedDayCombo.ItemIndex := AHoliday.Day - 1; - end else - begin - FloatDayCombo.ItemIndex := AHoliday.Day - 1; - FloatDOWCombo.ItemIndex := AHoliday.DayOfWeek; - FloatMonthCombo.ItemIndex := AHoliday.Month - 1; - end; - IsRestCB.Checked := AHoliday.IsRest; -end; - -procedure THolidayPropForm.FixedDateRBClick(Sender: TObject); -var b : Boolean; -begin - b := FixedDateRB.Checked; - FixedDayCombo.Enabled := b; - FixedMonthCombo.Enabled := b; - FloatDayCombo.Enabled := not b; - FloatDOWCombo.Enabled := not b; - FloatMonthCombo.Enabled := not b; -end; - -end. - diff --git a/sdk/components/ElPack/BCBDemos/TrayDays/readme.txt b/sdk/components/ElPack/BCBDemos/TrayDays/readme.txt deleted file mode 100644 index b6b65c5771c..00000000000 --- a/sdk/components/ElPack/BCBDemos/TrayDays/readme.txt +++ /dev/null @@ -1,4 +0,0 @@ -This is the complete source code of TrayDays application, available from EldoS. -You can use this code only as example of using ElPack, and especially -ElCalendar and ElTrayIcon components. You may not distribute either exact or -modified TrayDays application. \ No newline at end of file diff --git a/sdk/components/ElPack/bpl/elpackB6.BPL b/sdk/components/ElPack/bpl/elpackB6.BPL deleted file mode 100644 index b13e9af7d0b867f128aa2db6c409c06efa0163ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2233856 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%0DJ7C{+p$v&b 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

yRcUBB@p8OF#L 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

b6_B=yO0_uxktK(7|s#`>9cCnsH`BpGa$ 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�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�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 `i58ykMPl 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

TAcqXyVb-Dv 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 OjA_@~pPoMq3H&dqg)qnf diff --git a/sdk/components/ElPack/bpl/elpkdbB6.BPL b/sdk/components/ElPack/bpl/elpkdbB6.BPL deleted file mode 100644 index abd1a516b117386c45e1d72ab34a041dc2e8158b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216576 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 C<=koj diff --git a/sdk/components/ElPack/tools/uninst.exe b/sdk/components/ElPack/tools/uninst.exe deleted file mode 100644 index 1f30f052a95007190a4c4d8d26642fcfdf7c9e17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79872 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 e?y@^2Z2dW4G2lf&neG8<24BKlKsV=1c`8$dm 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 rWO5Wr@f$5;l!Q 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