From 84299d30d68440b301eb7800f1f89bd8e7af806a Mon Sep 17 00:00:00 2001 From: david Date: Fri, 27 Feb 2009 12:18:04 +0000 Subject: [PATCH] =?UTF-8?q?Importaci=C3=B3n=20inicial?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jcl@16 c37d764d-f447-7644-a108-883140d013fb --- official/1.104/Install multiple profiles.bat | 1 + official/1.104/Install turbo delphi.bat | 20 + official/1.104/Install.bat | 42 + official/1.104/Install.txt | 71 + official/1.104/LICENSE-BZIP2.txt | 42 + official/1.104/LICENSE-DRYICONS.txt | 34 + official/1.104/LICENSE-PCRE.txt | 68 + official/1.104/LICENSE-SEVENZIP.txt | 57 + official/1.104/LICENSE-ZLIB.txt | 25 + official/1.104/LICENSE.txt | 470 + official/1.104/bin/JCL-install.ini | 152 + official/1.104/bin/JediInstaller.exe | Bin 0 -> 580096 bytes official/1.104/bin/RAD Studio 2009.log | 77 + official/1.104/bin/dirinfo.txt | 1 + official/1.104/clean.bat | 16 + official/1.104/clean.sh | 12 + official/1.104/devtools/included_files.bat | 19 + official/1.104/devtools/included_files.sh | 21 + official/1.104/devtools/jpp | Bin 0 -> 248908 bytes official/1.104/devtools/jpp.exe | Bin 0 -> 205312 bytes official/1.104/devtools/pgEdit.exe | Bin 0 -> 1394176 bytes official/1.104/devtools/pgEdit.xml | 107 + official/1.104/docs/Contacting authors.html | 33 + official/1.104/docs/Contributors.html | 398 + official/1.104/docs/Contributors.txt | 116 + official/1.104/docs/Experts.html | 160 + official/1.104/docs/MPL FAQ.html | 131 + official/1.104/docs/MPL-1.1.txt | 470 + official/1.104/docs/Readme.html | 406 + official/1.104/docs/Readme.txt | 323 + official/1.104/docs/ThreadSafe.txt | 28 + official/1.104/docs/cps.html | 655 + official/1.104/docs/cps_files/strucv1.jpg | Bin 0 -> 33442 bytes official/1.104/docs/cps_files/test.css | 793 + official/1.104/docs/styles/default.css | 34 + official/1.104/examples/C10.exc | 1 + official/1.104/examples/C5.exc | 1 + official/1.104/examples/C6.exc | 1 + official/1.104/examples/D10.exc | 1 + official/1.104/examples/D11.exc | 1 + official/1.104/examples/D5.exc | 1 + official/1.104/examples/D6.exc | 1 + official/1.104/examples/D7.exc | 1 + official/1.104/examples/D9.exc | 1 + official/1.104/examples/ExtraRequirements.exc | 5 + .../1.104/examples/JclDebugExamples.bdsgroup | 23 + official/1.104/examples/JclDebugExamples.bpg | 33 + .../algorithms/AlgorithmsExample.dof | 2 + .../algorithms/AlgorithmsExample.dpr | 21 + .../algorithms/AlgorithmsExample.res | Bin 0 -> 876 bytes .../algorithms/AlgorithmsExampleMain.dfm | 250 + .../algorithms/AlgorithmsExampleMain.pas | 246 + .../containers/hashing/HashingExample.dof | 76 + .../containers/hashing/HashingExample.dpr | 21 + .../containers/hashing/HashingExample.res | Bin 0 -> 876 bytes .../containers/hashing/HashingExampleMain.dfm | 173 + .../containers/hashing/HashingExampleMain.pas | 442 + .../common/containers/lists/ListExample.dof | 76 + .../common/containers/lists/ListExample.dpr | 22 + .../common/containers/lists/ListExample.res | Bin 0 -> 876 bytes .../containers/lists/ListExampleMain.dfm | 145 + .../containers/lists/ListExampleMain.pas | 575 + .../common/containers/lists/MyObjectList.pas | 133 + .../performance/ContainerPerformance.dof | 3 + .../performance/ContainerPerformance.dpr | 22 + .../performance/ContainerPerformance.res | Bin 0 -> 876 bytes .../performance/ContainerPerformanceMain.dfm | 101 + .../performance/ContainerPerformanceMain.pas | 158 + .../performance/ContainerPerformanceTests.pas | 353 + .../common/containers/trees/TreeExample.dof | 2 + .../common/containers/trees/TreeExample.dpr | 21 + .../common/containers/trees/TreeExample.res | Bin 0 -> 876 bytes .../containers/trees/TreeExampleMain.dfm | 62 + .../containers/trees/TreeExampleMain.pas | 168 + .../common/containers/trees/TreeStructure.dof | 2 + .../common/containers/trees/TreeStructure.dpr | 14 + .../common/containers/trees/TreeStructure.res | Bin 0 -> 876 bytes .../containers/trees/TreeStructureMain.dfm | 247 + .../containers/trees/TreeStructureMain.pas | 344 + .../common/expreval/ExprEvalExample.dof | 3 + .../common/expreval/ExprEvalExample.dpr | 19 + .../common/expreval/ExprEvalExample.res | Bin 0 -> 876 bytes .../common/expreval/ExprEvalExampleLogic.pas | 105 + .../common/expreval/ExprEvalExampleMain.dfm | 71 + .../common/expreval/ExprEvalExampleMain.pas | 67 + .../common/filesearch/FileSearchDemo.dof | 2 + .../common/filesearch/FileSearchDemo.dpr | 16 + .../common/filesearch/FileSearchDemo.res | Bin 0 -> 876 bytes .../common/filesearch/FileSearchDemoMain.dfm | 364 + .../common/filesearch/FileSearchDemoMain.pas | 260 + .../examples/common/graphics/ClipLineDemo.dof | 3 + .../examples/common/graphics/ClipLineDemo.dpr | 16 + .../examples/common/graphics/ClipLineDemo.res | Bin 0 -> 876 bytes .../common/graphics/ClipLineDemoMain.dfm | 17 + .../common/graphics/ClipLineDemoMain.pas | 85 + .../graphics/StretchGraphicDemoMain.dfm | 217 + .../graphics/StretchGraphicDemoMain.pas | 503 + .../common/graphics/StretchGraphicExample.dof | 3 + .../common/graphics/StretchGraphicExample.dpr | 16 + .../common/graphics/StretchGraphicExample.res | Bin 0 -> 876 bytes .../common/multimedia/MidiOutExample.dof | 3 + .../common/multimedia/MidiOutExample.dpr | 16 + .../common/multimedia/MidiOutExample.res | Bin 0 -> 876 bytes .../common/multimedia/MidiOutExampleMain.dfm | 488 + .../common/multimedia/MidiOutExampleMain.pas | 194 + .../multimedia/MidiOutExampleTuningDlg.dfm | 102 + .../multimedia/MidiOutExampleTuningDlg.pas | 170 + .../common/numformat/NumFormatExample.dof | 2 + .../common/numformat/NumFormatExample.dpr | 16 + .../common/numformat/NumFormatExample.res | Bin 0 -> 876 bytes .../common/numformat/NumFormatExampleMain.dfm | 208 + .../common/numformat/NumFormatExampleMain.pas | 221 + .../1.104/examples/common/pcre/PCREDemo.dof | 2 + .../1.104/examples/common/pcre/PCREDemo.dpr | 17 + .../1.104/examples/common/pcre/PCREDemo.res | Bin 0 -> 876 bytes .../examples/common/pcre/PCREDemoMain.dfm | 233 + .../examples/common/pcre/PCREDemoMain.pas | 200 + .../examples/common/rtti/RTTIDemoMain.dfm | 71 + .../examples/common/rtti/RTTIDemoMain.pas | 331 + .../examples/common/rtti/RTTIExample.dof | 3 + .../examples/common/rtti/RTTIExample.dpr | 16 + .../examples/common/rtti/RTTIExample.res | Bin 0 -> 876 bytes .../common/sysinfo/EnvironmentExample.dof | 3 + .../common/sysinfo/EnvironmentExample.dpr | 16 + .../common/sysinfo/EnvironmentExample.res | Bin 0 -> 876 bytes .../common/sysinfo/EnvironmentExampleMain.dfm | 34 + .../common/sysinfo/EnvironmentExampleMain.pas | 76 + .../common/textconverter/TextConverter.dof | 3 + .../common/textconverter/TextConverter.dpr | 13 + .../common/textconverter/TextConverter.res | Bin 0 -> 876 bytes .../textconverter/TextConverterMain.dfm | 141 + .../textconverter/TextConverterMain.pas | 146 + .../common/textreader/TextReaderDemoMain.dfm | 94 + .../common/textreader/TextReaderDemoMain.pas | 152 + .../common/textreader/TextReaderExample.dof | 3 + .../common/textreader/TextReaderExample.dpr | 16 + .../common/textreader/TextReaderExample.res | Bin 0 -> 876 bytes .../unitversioning/UnitVersioningTest.dof | 2 + .../unitversioning/UnitVersioningTest.dpr | 46 + .../unitversioning/UnitVersioningTest.res | Bin 0 -> 876 bytes .../unitversioning/UnitVersioningTestDLL.dof | 2 + .../unitversioning/UnitVersioningTestDLL.dpr | 48 + .../unitversioning/UnitVersioningTestMain.dfm | 91 + .../unitversioning/UnitVersioningTestMain.pas | 290 + .../dotnet/JCLNetDemo/AssemblyInfo.cs | 67 + .../JCLNetDemo/JCLNet.FrmMain.resources | Bin 0 -> 7154 bytes .../JCLNetDemo/JCLNet.WinForm.resources | Bin 0 -> 3602 bytes .../examples/dotnet/JCLNetDemo/JCLNet.bdsproj | 102 + .../examples/dotnet/JCLNetDemo/WinForm.cs | 254 + .../examples/dotnet/JCLNetDemo/WinForm.resx | 202 + .../examples/windows/ConsoleExamples.dof | 3 + .../examples/windows/ConsoleExamples.dpr | 409 + .../windows/appinst/AppInstDemoMain.dfm | 131 + .../windows/appinst/AppInstDemoMain.pas | 169 + .../windows/appinst/AppInstExample.dof | 3 + .../windows/appinst/AppInstExample.dpr | 16 + .../windows/appinst/AppInstExample.res | Bin 0 -> 876 bytes .../windows/appinst/SingleInstDemoMain.dfm | 25 + .../windows/appinst/SingleInstDemoMain.pas | 34 + .../windows/appinst/SingleInstExample.dof | 3 + .../windows/appinst/SingleInstExample.dpr | 18 + .../windows/appinst/SingleInstExample.res | Bin 0 -> 876 bytes .../asuser/CreateProcAsUserDemoMain.dfm | 194 + .../asuser/CreateProcAsUserDemoMain.pas | 93 + .../asuser/CreateProcAsUserExample.dof | 3 + .../asuser/CreateProcAsUserExample.dpr | 17 + .../asuser/CreateProcAsUserExample.res | Bin 0 -> 876 bytes .../1.104/examples/windows/clr/ClrDemo.dof | 3 + .../1.104/examples/windows/clr/ClrDemo.dpr | 24 + .../1.104/examples/windows/clr/ClrDemo.res | Bin 0 -> 1128 bytes .../windows/clr/ClrDemoAbstractFrame.dfm | 7 + .../windows/clr/ClrDemoAbstractFrame.pas | 105 + .../examples/windows/clr/ClrDemoBlobForm.dfm | 71 + .../examples/windows/clr/ClrDemoBlobForm.pas | 71 + .../examples/windows/clr/ClrDemoCLRFrame.dfm | 184 + .../examples/windows/clr/ClrDemoCLRFrame.pas | 183 + .../examples/windows/clr/ClrDemoGuidForm.dfm | 48 + .../examples/windows/clr/ClrDemoGuidForm.pas | 53 + .../examples/windows/clr/ClrDemoMain.dfm | 171 + .../examples/windows/clr/ClrDemoMain.pas | 195 + .../windows/clr/ClrDemoMetaDataFrame.dfm | 70 + .../windows/clr/ClrDemoMetaDataFrame.pas | 56 + .../windows/clr/ClrDemoStringsForm.dfm | 52 + .../windows/clr/ClrDemoStringsForm.pas | 54 + .../examples/windows/clr/ClrDemoTableForm.dfm | 102 + .../examples/windows/clr/ClrDemoTableForm.pas | 598 + .../windows/clr/ClrDemoUserStringsForm.dfm | 52 + .../windows/clr/ClrDemoUserStringsForm.pas | 54 + .../compression/archive/ArchiveDemo.dof | 3 + .../compression/archive/ArchiveDemo.dpr | 15 + .../compression/archive/ArchiveDemo.res | Bin 0 -> 4396 bytes .../windows/compression/archive/UMain.dfm | 359 + .../windows/compression/archive/UMain.pas | 568 + .../compression/archive/UProperties.dfm | 243 + .../compression/archive/UProperties.pas | 262 + .../debug/framestrack/FramesTrackDemoMain.dfm | 91 + .../debug/framestrack/FramesTrackDemoMain.pas | 186 + .../debug/framestrack/FramesTrackExample.dof | 3 + .../debug/framestrack/FramesTrackExample.dpr | 16 + .../debug/framestrack/FramesTrackExample.res | Bin 0 -> 876 bytes .../ExceptionReportConverter.dpr | 18 + .../ExceptionReportConverter.res | Bin 0 -> 876 bytes .../debug/reportconverter/formConverter.dfm | 65 + .../debug/reportconverter/formConverter.pas | 194 + .../debug/sourceloc/SourceLocDemoMain.dfm | 134 + .../debug/sourceloc/SourceLocDemoMain.pas | 124 + .../debug/sourceloc/SourceLocExample.dof | 3 + .../debug/sourceloc/SourceLocExample.dpr | 16 + .../debug/sourceloc/SourceLocExample.res | Bin 0 -> 876 bytes .../StackTrackDLLsComLibrary.bdsproj | 175 + .../stacktrack/StackTrackDLLsComLibrary.dof | 3 + .../stacktrack/StackTrackDLLsComLibrary.dpr | 21 + .../stacktrack/StackTrackDLLsComLibrary.res | Bin 0 -> 876 bytes .../stacktrack/StackTrackDLLsComLibrary.tlb | Bin 0 -> 1668 bytes .../StackTrackDLLsComLibrary_TLB.pas | 97 + .../stacktrack/StackTrackDLLsComUnit.pas | 38 + .../stacktrack/StackTrackDLLsDemoMain.dfm | 115 + .../stacktrack/StackTrackDLLsDemoMain.pas | 130 + .../StackTrackDLLsDynamicLibrary.bdsproj | 175 + .../StackTrackDLLsDynamicLibrary.dof | 3 + .../StackTrackDLLsDynamicLibrary.dpr | 15 + .../StackTrackDLLsDynamicLibrary.res | Bin 0 -> 876 bytes .../stacktrack/StackTrackDLLsDynamicUnit.pas | 28 + .../stacktrack/StackTrackDLLsExample.bdsproj | 175 + .../stacktrack/StackTrackDLLsExample.dof | 3 + .../stacktrack/StackTrackDLLsExample.dpr | 17 + .../stacktrack/StackTrackDLLsExample.res | Bin 0 -> 876 bytes .../StackTrackDLLsStaticLibrary.bdsproj | 175 + .../StackTrackDLLsStaticLibrary.dof | 3 + .../StackTrackDLLsStaticLibrary.dpr | 15 + .../StackTrackDLLsStaticLibrary.res | Bin 0 -> 876 bytes .../stacktrack/StackTrackDLLsStaticUnit.pas | 28 + .../debug/stacktrack/StackTrackDemoMain.dfm | 95 + .../debug/stacktrack/StackTrackDemoMain.pas | 110 + .../stacktrack/StackTrackExample.bdsproj | 175 + .../debug/stacktrack/StackTrackExample.dof | 3 + .../debug/stacktrack/StackTrackExample.dpr | 16 + .../debug/stacktrack/StackTrackExample.res | Bin 0 -> 876 bytes .../threadexcept/ThreadExceptDemoMain.dfm | 93 + .../threadexcept/ThreadExceptDemoMain.pas | 166 + .../threadexcept/ThreadExceptExample.dof | 4 + .../threadexcept/ThreadExceptExample.dpr | 18 + .../threadexcept/ThreadExceptExample.res | Bin 0 -> 876 bytes .../windows/delphitools/DelphiToolsGroup.bpg | 33 + .../examples/windows/delphitools/Readme.txt | 24 + .../windows/delphitools/common/About.dfm | 74 + .../windows/delphitools/common/About.pas | 180 + .../delphitools/common/D6MdiMsgFix.pas | 85 + .../windows/delphitools/common/FindDlg.dfm | 107 + .../windows/delphitools/common/FindDlg.pas | 202 + .../delphitools/common/SHDocVw_TLB.pas | 1931 + .../windows/delphitools/common/ToolsUtils.pas | 380 + .../dependencyviewer/DependView.dof | 134 + .../dependencyviewer/DependView.dpr | 24 + .../dependencyviewer/DependView.res | Bin 0 -> 1672 bytes .../dependencyviewer/DependViewMain.dfm | 1393 + .../dependencyviewer/DependViewMain.pas | 346 + .../dependencyviewer/FileViewer.dfm | 239 + .../dependencyviewer/FileViewer.pas | 667 + .../windows/delphitools/peviewer/PeDump.dfm | 499 + .../windows/delphitools/peviewer/PeDump.pas | 943 + .../windows/delphitools/peviewer/PeGenDef.dfm | 144 + .../windows/delphitools/peviewer/PeGenDef.pas | 365 + .../delphitools/peviewer/PeResView.dfm | 420 + .../delphitools/peviewer/PeResView.pas | 710 + .../delphitools/peviewer/PeResource.pas | 1541 + .../windows/delphitools/peviewer/PeSearch.dfm | 162 + .../windows/delphitools/peviewer/PeSearch.pas | 226 + .../windows/delphitools/peviewer/PeViewer.dof | 134 + .../windows/delphitools/peviewer/PeViewer.dpr | 33 + .../windows/delphitools/peviewer/PeViewer.res | Bin 0 -> 1636 bytes .../windows/delphitools/peviewer/PeViewer.tlb | Bin 0 -> 1672 bytes .../delphitools/peviewer/PeViewerControl.pas | 83 + .../delphitools/peviewer/PeViewerMain.dfm | 2179 ++ .../delphitools/peviewer/PeViewerMain.pas | 631 + .../delphitools/peviewer/PeViewer_TLB.pas | 117 + .../windows/delphitools/resfix/ResFix.dof | 137 + .../windows/delphitools/resfix/ResFix.dpr | 20 + .../windows/delphitools/resfix/ResFix.res | Bin 0 -> 1700 bytes .../windows/delphitools/resfix/ResFixMain.dfm | 1052 + .../windows/delphitools/resfix/ResFixMain.pas | 263 + .../windows/delphitools/screenjpg/Main.dfm | 901 + .../windows/delphitools/screenjpg/Main.pas | 285 + .../delphitools/screenjpg/ScreenJPG.dof | 134 + .../delphitools/screenjpg/ScreenJPG.dpr | 20 + .../delphitools/screenjpg/ScreenJPG.res | Bin 0 -> 1696 bytes .../toolhelpview/ChangePriority.dfm | 44 + .../toolhelpview/ChangePriority.pas | 114 + .../delphitools/toolhelpview/Global.dfm | 1081 + .../delphitools/toolhelpview/Global.pas | 132 + .../delphitools/toolhelpview/HeapDump.dfm | 235 + .../delphitools/toolhelpview/HeapDump.pas | 334 + .../windows/delphitools/toolhelpview/Main.dfm | 876 + .../windows/delphitools/toolhelpview/Main.pas | 936 + .../delphitools/toolhelpview/MemoryDump.dfm | 282 + .../delphitools/toolhelpview/MemoryDump.pas | 518 + .../delphitools/toolhelpview/ModulesDump.dfm | 180 + .../delphitools/toolhelpview/ModulesDump.pas | 245 + .../toolhelpview/ToolHelpViewer.dof | 134 + .../toolhelpview/ToolHelpViewer.dpr | 35 + .../toolhelpview/ToolHelpViewer.res | Bin 0 -> 1720 bytes .../delphitools/toolhelpview/ViewTemplate.dfm | 109 + .../delphitools/toolhelpview/ViewTemplate.pas | 155 + .../1.104/examples/windows/edisdk/Clean.bat | 18 + .../examples/windows/edisdk/EDICOMExample.dof | 2 + .../examples/windows/edisdk/EDICOMExample.dpr | 16 + .../examples/windows/edisdk/EDICOMExample.res | Bin 0 -> 876 bytes .../windows/edisdk/EDICOMExampleMain.dfm | 50 + .../windows/edisdk/EDICOMExampleMain.pas | 157 + .../examples/windows/edisdk/EDISDK_TLB.dcr | Bin 0 -> 3338 bytes .../examples/windows/edisdk/EDISDK_TLB.pas | 1021 + .../windows/edisdk/comserver/Clean.bat | 18 + .../windows/edisdk/comserver/EDISDK.dof | 13 + .../windows/edisdk/comserver/EDISDK.dpr | 23 + .../windows/edisdk/comserver/EDISDK.res | Bin 0 -> 1792 bytes .../windows/edisdk/comserver/EDISDK.tlb | Bin 0 -> 10488 bytes .../windows/edisdk/comserver/EDISDK_TLB.pas | 651 + .../edisdk/comserver/JclEDICOM_ANSIX12.pas | 1059 + .../windows/edisdk/comserver/sample.edi | 1 + .../1.104/examples/windows/edisdk/sample.edi | 1 + .../examples/windows/edisdk/vb5/Form1.frm | 164 + .../examples/windows/edisdk/vb5/Form1.frx | 1 + .../examples/windows/edisdk/vb5/Project1.vbp | 39 + .../examples/windows/edisdk/vb5/Project1.vbw | 1 + .../examples/windows/edisdk/vb5/sample.edi | 1 + .../filesummary/FileSummaryDemoMain.dfm | 56 + .../filesummary/FileSummaryDemoMain.pas | 309 + .../filesummary/FileSummaryExample.dof | 3 + .../filesummary/FileSummaryExample.dpr | 16 + .../filesummary/FileSummaryExample.res | Bin 0 -> 4396 bytes .../windows/fileversion/VerInfoDemoMain.dfm | 55 + .../windows/fileversion/VerInfoDemoMain.pas | 77 + .../windows/fileversion/VerInfoExample.dof | 82 + .../windows/fileversion/VerInfoExample.dpr | 16 + .../windows/fileversion/VerInfoExample.res | Bin 0 -> 876 bytes .../windows/lanman/LanManDemoMain.dfm | 271 + .../windows/lanman/LanManDemoMain.pas | 124 + .../examples/windows/lanman/LanManExample.dof | 3 + .../examples/windows/lanman/LanManExample.dpr | 16 + .../examples/windows/lanman/LanManExample.res | Bin 0 -> 876 bytes .../windows/locales/LocalesDemoMain.dfm | 306 + .../windows/locales/LocalesDemoMain.pas | 290 + .../windows/locales/LocalesExample.dof | 3 + .../windows/locales/LocalesExample.dpr | 16 + .../windows/locales/LocalesExample.res | Bin 0 -> 876 bytes .../examples/windows/mapi/MapiDemoMain.dfm | 257 + .../examples/windows/mapi/MapiDemoMain.pas | 207 + .../examples/windows/mapi/MapiExample.dof | 3 + .../examples/windows/mapi/MapiExample.dpr | 16 + .../examples/windows/mapi/MapiExample.res | Bin 0 -> 876 bytes .../windows/mapi/ReadMailDemoMain.dfm | 91 + .../windows/mapi/ReadMailDemoMain.pas | 124 + .../examples/windows/mapi/ReadMailExample.dof | 3 + .../examples/windows/mapi/ReadMailExample.dpr | 16 + .../examples/windows/mapi/ReadMailExample.res | Bin 0 -> 876 bytes .../windows/multimedia/MultiMediaExample.dof | 3 + .../windows/multimedia/MultiMediaExample.dpr | 16 + .../windows/multimedia/MultiMediaExample.res | Bin 0 -> 876 bytes .../windows/multimedia/MultimediaDemoMain.dfm | 215 + .../windows/multimedia/MultimediaDemoMain.pas | 555 + .../examples/windows/ntfs/JEDISoftLinks.dof | 4 + .../examples/windows/ntfs/JEDISoftLinks.dpr | 16 + .../examples/windows/ntfs/JEDISoftLinks.tlb | Bin 0 -> 1044 bytes .../windows/ntfs/JEDISoftLinks_TLB.pas | 49 + .../windows/ntfs/SoftLinkDragDropHandler.pas | 229 + .../windows/ntservice/NtSvcDemoDependent.dfm | 63 + .../windows/ntservice/NtSvcDemoDependent.pas | 88 + .../windows/ntservice/NtSvcDemoGroups.dfm | 35 + .../windows/ntservice/NtSvcDemoGroups.pas | 76 + .../windows/ntservice/NtSvcDemoMain.dfm | 275 + .../windows/ntservice/NtSvcDemoMain.pas | 416 + .../windows/ntservice/NtSvcExample.dof | 3 + .../windows/ntservice/NtSvcExample.dpr | 18 + .../windows/ntservice/NtSvcExample.res | Bin 0 -> 876 bytes .../windows/peimage/ApiHookDemoMain.dfm | 53 + .../windows/peimage/ApiHookDemoMain.pas | 82 + .../windows/peimage/ApiHookExample.dof | 3 + .../windows/peimage/ApiHookExample.dpr | 16 + .../windows/peimage/ApiHookExample.res | Bin 0 -> 876 bytes .../windows/peimage/PeFuncDemoMain.dfm | 165 + .../windows/peimage/PeFuncDemoMain.pas | 124 + .../windows/peimage/PeFuncExample.dof | 3 + .../windows/peimage/PeFuncExample.dpr | 16 + .../windows/peimage/PeFuncExample.res | Bin 0 -> 876 bytes .../windows/peimage/UnmangleNameDemoMain.dfm | 111 + .../windows/peimage/UnmangleNameDemoMain.pas | 228 + .../windows/peimage/UnmangleNameExample.dof | 3 + .../windows/peimage/UnmangleNameExample.dpr | 16 + .../windows/peimage/UnmangleNameExample.res | Bin 0 -> 876 bytes .../windows/registry/RegistryDemoMain.dfm | 53 + .../windows/registry/RegistryDemoMain.pas | 174 + .../windows/registry/RegistryExample.dof | 3 + .../windows/registry/RegistryExample.dpr | 16 + .../windows/registry/RegistryExample.res | Bin 0 -> 876 bytes .../windows/structstorage/HexDump.pas | 535 + .../windows/structstorage/PropsFrm.dfm | 221 + .../windows/structstorage/PropsFrm.pas | 172 + .../structstorage/StructStorageExample.dof | 2 + .../structstorage/StructStorageExample.dpr | 19 + .../structstorage/StructStorageExample.res | Bin 0 -> 876 bytes .../StructStorageExampleMain.dfm | 548 + .../StructStorageExampleMain.pas | 938 + .../windows/sysinfo/SysInfoDemoMain.dfm | 1010 + .../windows/sysinfo/SysInfoDemoMain.pas | 310 + .../windows/sysinfo/SysInfoExample.dof | 3 + .../windows/sysinfo/SysInfoExample.dpr | 16 + .../windows/sysinfo/SysInfoExample.res | Bin 0 -> 876 bytes .../1.104/examples/windows/tasks/TaskDemo.dof | 3 + .../1.104/examples/windows/tasks/TaskDemo.dpr | 18 + .../1.104/examples/windows/tasks/TaskDemo.res | Bin 0 -> 876 bytes .../windows/tasks/TaskDemoDataModule.dfm | 475 + .../windows/tasks/TaskDemoDataModule.pas | 164 + .../examples/windows/tasks/TaskDemoMain.dfm | 217 + .../examples/windows/tasks/TaskDemoMain.pas | 244 + .../windows/widestring/WideStringDemoMain.dfm | 154 + .../windows/widestring/WideStringDemoMain.pas | 192 + .../windows/widestring/WideStringExample.dpr | 14 + .../windows/widestring/WideStringExample.res | Bin 0 -> 7776 bytes .../1.104/experts/common/JclConfigure.ico | Bin 0 -> 318 bytes official/1.104/experts/common/JclImages.rc | 2 + official/1.104/experts/common/JclImages.res | Bin 0 -> 2572 bytes .../common/JclOtaActionConfigureSheet.dfm | 68 + .../common/JclOtaActionConfigureSheet.pas | 169 + .../common/JclOtaConfigurationForm.dfm | 111 + .../common/JclOtaConfigurationForm.pas | 257 + .../1.104/experts/common/JclOtaConsts.pas | 169 + .../experts/common/JclOtaExceptionForm.dfm | 63 + .../experts/common/JclOtaExceptionForm.pas | 154 + .../1.104/experts/common/JclOtaResources.pas | 387 + .../common/JclOtaUnitVersioningSheet.dfm | 47 + .../common/JclOtaUnitVersioningSheet.pas | 133 + official/1.104/experts/common/JclOtaUtils.pas | 1695 + .../1.104/experts/common/JclOtaWizardForm.dfm | 123 + .../1.104/experts/common/JclOtaWizardForm.pas | 256 + .../experts/common/JclOtaWizardFrame.dfm | 8 + .../experts/common/JclOtaWizardFrame.pas | 112 + official/1.104/experts/common/JclSplash.bmp | Bin 0 -> 2102 bytes official/1.104/experts/debug/Howto.txt | 91 + .../1.104/experts/debug/JclDebugThread.pas | 208 + .../converter/JclDebugIdeConfigFrame.dfm | 48 + .../converter/JclDebugIdeConfigFrame.pas | 244 + .../debug/converter/JclDebugIdeIcon.res | Bin 0 -> 2344 bytes .../debug/converter/JclDebugIdeImpl.pas | 1720 + .../debug/converter/JclDebugIdeResult.dfm | 228 + .../debug/converter/JclDebugIdeResult.pas | 226 + .../experts/debug/dialog/ClxExceptDlg.ico | Bin 0 -> 766 bytes .../experts/debug/dialog/ClxExceptDlg.pas | 756 + .../experts/debug/dialog/ClxExceptDlg.xfm | 203 + .../experts/debug/dialog/CreateStdDialogs.dpr | 116 + .../debug/dialog/ExceptDlg.CBuilder32.cpp | 1 + .../debug/dialog/ExceptDlg.CBuilder32.dfm | 1 + .../debug/dialog/ExceptDlg.CBuilder32.h | 1 + .../debug/dialog/ExceptDlg.Delphi32.dfm | 106 + .../debug/dialog/ExceptDlg.Delphi32.pas | 762 + .../1.104/experts/debug/dialog/ExceptDlg.dfm | 95 + .../1.104/experts/debug/dialog/ExceptDlg.ico | Bin 0 -> 766 bytes .../1.104/experts/debug/dialog/ExceptDlg.pas | 706 + .../experts/debug/dialog/ExceptDlgCpp.ico | Bin 0 -> 766 bytes .../experts/debug/dialog/ExceptDlgMail.dfm | 106 + .../experts/debug/dialog/ExceptDlgMail.ico | Bin 0 -> 766 bytes .../experts/debug/dialog/ExceptDlgMail.pas | 726 + .../experts/debug/simdview/JclSIMDCpuInfo.dfm | 198 + .../experts/debug/simdview/JclSIMDCpuInfo.pas | 130 + .../experts/debug/simdview/JclSIMDIcon.dcr | Bin 0 -> 428 bytes .../debug/simdview/JclSIMDModifyForm.dfm | 115 + .../debug/simdview/JclSIMDModifyForm.pas | 556 + .../experts/debug/simdview/JclSIMDTestBCB.cpp | 105 + .../debug/simdview/JclSIMDTestBCBProject.bpf | 5 + .../debug/simdview/JclSIMDTestBCBProject.bpr | 58 + .../debug/simdview/JclSIMDTestDelphi.dof | 2 + .../debug/simdview/JclSIMDTestDelphi.dpr | 92 + .../experts/debug/simdview/JclSIMDUtils.pas | 913 + .../experts/debug/simdview/JclSIMDView.pas | 639 + .../debug/simdview/JclSIMDViewForm.dfm | 184 + .../debug/simdview/JclSIMDViewForm.pas | 976 + .../debug/threadnames/JclIdeThreadStatus.pas | 196 + .../threadnames/ThreadExpertSharedNames.pas | 359 + .../debug/threadnames/ThreadExpertUnit.pas | 408 + .../1.104/experts/debug/tools/MakeJclDbg.dof | 3 + .../1.104/experts/debug/tools/MakeJclDbg.dpr | 136 + .../1.104/experts/debug/tools/MapToJdbg.dof | 3 + .../1.104/experts/debug/tools/MapToJdbg.dpr | 43 + .../1.104/experts/debug/tools/MapToJdbg.res | Bin 0 -> 1812 bytes .../experts/debug/tools/MapToJdbgMain.dfm | 577 + .../experts/debug/tools/MapToJdbgMain.pas | 228 + .../1.104/experts/debug/tools/TlbToMap.dof | 3 + .../1.104/experts/debug/tools/TlbToMap.dpr | 43 + .../1.104/experts/debug/tools/TlbToMap.res | Bin 0 -> 1776 bytes .../experts/debug/tools/TlbToMapMain.dfm | 592 + .../experts/debug/tools/TlbToMapMain.pas | 391 + official/1.104/experts/debug/tools/Tools.bpg | 26 + .../1.104/experts/debug/tools/makejcldbg.res | Bin 0 -> 1792 bytes official/1.104/experts/favfolders/FavDlg.rc | 5 + official/1.104/experts/favfolders/FavDlg.res | Bin 0 -> 144 bytes .../favfolders/IdeOpenDlgFavoriteUnit.pas | 166 + .../experts/favfolders/OpenDlgFavAdapter.pas | 557 + .../projectanalyzer/ProjAnalyzerFrm.dfm | 893 + .../projectanalyzer/ProjAnalyzerFrm.pas | 721 + .../projectanalyzer/ProjAnalyzerIcon.res | Bin 0 -> 320 bytes .../projectanalyzer/ProjAnalyzerImpl.pas | 431 + .../repository/JclOtaExcDlgFileFrame.dfm | 79 + .../repository/JclOtaExcDlgFileFrame.pas | 226 + .../repository/JclOtaExcDlgFormFrame.dfm | 65 + .../repository/JclOtaExcDlgFormFrame.pas | 165 + .../experts/repository/JclOtaExcDlgIcons.RES | Bin 0 -> 1728 bytes .../experts/repository/JclOtaExcDlgIcons.rc | 2 + .../repository/JclOtaExcDlgIgnoreFrame.dfm | 34 + .../repository/JclOtaExcDlgIgnoreFrame.pas | 145 + .../repository/JclOtaExcDlgRepository.pas | 198 + .../repository/JclOtaExcDlgSystemFrame.dfm | 82 + .../repository/JclOtaExcDlgSystemFrame.pas | 178 + .../repository/JclOtaExcDlgTraceFrame.dfm | 83 + .../repository/JclOtaExcDlgTraceFrame.pas | 241 + .../experts/repository/JclOtaExcDlgWizard.dfm | 5 + .../experts/repository/JclOtaExcDlgWizard.pas | 130 + .../repository/JclOtaRepositoryReg.pas | 361 + .../repository/JclOtaRepositoryUtils.pas | 590 + .../experts/repository/JclOtaTemplates.pas | 343 + official/1.104/experts/repository/dirinfo.txt | 1 + .../1.104/experts/useswizard/Hardlinks.txt | 6 + official/1.104/experts/useswizard/History.txt | 25 + .../experts/useswizard/IdentifierList.dpr | 156 + .../experts/useswizard/JCLOptionsFrame.dfm | 59 + .../experts/useswizard/JCLOptionsFrame.pas | 151 + .../experts/useswizard/JCLUsesWizard.pas | 996 + official/1.104/experts/useswizard/Jcl8087.txt | 20 + .../useswizard/JclAbstractContainers.txt | 2 + .../experts/useswizard/JclAlgorithms.txt | 43 + .../experts/useswizard/JclAnsiStrings.txt | 167 + .../1.104/experts/useswizard/JclAppInst.txt | 12 + .../experts/useswizard/JclArrayLists.txt | 3 + .../1.104/experts/useswizard/JclArraySets.txt | 3 + official/1.104/experts/useswizard/JclBase.txt | 53 + .../experts/useswizard/JclBinaryTrees.txt | 10 + .../experts/useswizard/JclBorlandTools.txt | 118 + official/1.104/experts/useswizard/JclCIL.txt | 11 + official/1.104/experts/useswizard/JclCLR.txt | 38 + official/1.104/experts/useswizard/JclCOM.txt | 24 + .../1.104/experts/useswizard/JclComplex.txt | 8 + .../experts/useswizard/JclCompression.txt | 13 + .../1.104/experts/useswizard/JclConsole.txt | 25 + .../experts/useswizard/JclContainerIntf.txt | 44 + .../1.104/experts/useswizard/JclCounter.txt | 5 + .../1.104/experts/useswizard/JclDateTime.txt | 71 + .../1.104/experts/useswizard/JclDebug.txt | 123 + .../1.104/experts/useswizard/JclDotNet.txt | 57 + official/1.104/experts/useswizard/JclEDI.txt | 39 + .../1.104/experts/useswizard/JclEDISEF.txt | 136 + .../experts/useswizard/JclEDITranslators.txt | 2 + .../1.104/experts/useswizard/JclEDIXML.txt | 46 + .../experts/useswizard/JclEDI_ANSIX12.txt | 48 + .../experts/useswizard/JclEDI_ANSIX12_Ext.txt | 1 + .../experts/useswizard/JclEDI_UNEDIFACT.txt | 26 + .../useswizard/JclEDI_UNEDIFACT_Ext.txt | 2 + .../1.104/experts/useswizard/JclExprEval.txt | 54 + .../1.104/experts/useswizard/JclFileUtils.txt | 181 + .../experts/useswizard/JclGraphUtils.txt | 4 + .../1.104/experts/useswizard/JclGraphics.txt | 29 + .../1.104/experts/useswizard/JclHashMaps.txt | 31 + .../1.104/experts/useswizard/JclHashSets.txt | 3 + .../experts/useswizard/JclHookExcept.txt | 17 + .../1.104/experts/useswizard/JclIniFiles.txt | 8 + .../1.104/experts/useswizard/JclLANMan.txt | 23 + .../experts/useswizard/JclLinkedLists.txt | 9 + .../1.104/experts/useswizard/JclLocales.txt | 11 + .../1.104/experts/useswizard/JclLogic.txt | 185 + official/1.104/experts/useswizard/JclMIDI.txt | 119 + official/1.104/experts/useswizard/JclMapi.txt | 21 + official/1.104/experts/useswizard/JclMath.txt | 213 + .../1.104/experts/useswizard/JclMetadata.txt | 163 + official/1.104/experts/useswizard/JclMime.txt | 34 + .../1.104/experts/useswizard/JclMiscel.txt | 23 + .../1.104/experts/useswizard/JclMsdosSys.txt | 2 + .../experts/useswizard/JclMultimedia.txt | 31 + official/1.104/experts/useswizard/JclNTFS.txt | 48 + official/1.104/experts/useswizard/JclPCRE.txt | 10 + .../1.104/experts/useswizard/JclParseUses.pas | 907 + .../1.104/experts/useswizard/JclPeImage.txt | 94 + .../1.104/experts/useswizard/JclPrint.txt | 16 + .../experts/useswizard/JclQGraphUtils.txt | 129 + .../1.104/experts/useswizard/JclQGraphics.txt | 31 + .../1.104/experts/useswizard/JclQueues.txt | 3 + official/1.104/experts/useswizard/JclRTF.txt | 2 + official/1.104/experts/useswizard/JclRTTI.txt | 39 + .../1.104/experts/useswizard/JclRegistry.txt | 102 + .../1.104/experts/useswizard/JclResources.txt | 1441 + .../1.104/experts/useswizard/JclSchedule.txt | 21 + .../1.104/experts/useswizard/JclSecurity.txt | 13 + .../1.104/experts/useswizard/JclShell.txt | 72 + .../1.104/experts/useswizard/JclStacks.txt | 3 + .../experts/useswizard/JclStatistics.txt | 26 + .../experts/useswizard/JclStrHashMap.txt | 21 + .../1.104/experts/useswizard/JclStreams.txt | 14 + .../1.104/experts/useswizard/JclStrings.txt | 138 + .../experts/useswizard/JclStructStorage.txt | 6 + .../1.104/experts/useswizard/JclSvcCtrl.txt | 33 + .../1.104/experts/useswizard/JclSynch.txt | 50 + .../1.104/experts/useswizard/JclSysInfo.txt | 647 + .../1.104/experts/useswizard/JclSysUtils.txt | 122 + official/1.104/experts/useswizard/JclTD32.txt | 96 + official/1.104/experts/useswizard/JclTask.txt | 14 + .../1.104/experts/useswizard/JclUnicode.txt | 211 + .../1.104/experts/useswizard/JclUnitConv.txt | 135 + .../experts/useswizard/JclUnitVersioning.txt | 10 + .../useswizard/JclUnitVersioningProviders.txt | 4 + .../experts/useswizard/JclUsesDialog.dfm | 199 + .../experts/useswizard/JclUsesDialog.pas | 217 + .../experts/useswizard/JclValidation.txt | 1 + .../1.104/experts/useswizard/JclVectors.txt | 3 + .../experts/useswizard/JclWideFormat.txt | 1 + .../experts/useswizard/JclWideStrings.txt | 20 + .../1.104/experts/useswizard/JclWin32.txt | 1598 + .../1.104/experts/useswizard/JclWin32Ex.txt | 19 + .../1.104/experts/useswizard/JclWinMIDI.txt | 6 + .../experts/useswizard/JediUsesWizard.ini | 89 + official/1.104/experts/useswizard/ReadMe.txt | 23 + official/1.104/experts/useswizard/pcre.txt | 167 + .../versioncontrol/JclVersionControlImpl.pas | 1212 + .../JclVersionCtrlCommonOptions.dfm | 190 + .../JclVersionCtrlCommonOptions.pas | 593 + .../versioncontrol/JclVersionCtrlIcons.RES | Bin 0 -> 46136 bytes .../versioncontrol/JclVersionCtrlIcons.rc | 37 + .../versioncontrol/icons/ContextMenu.ico | Bin 0 -> 1406 bytes .../experts/versioncontrol/icons/Explore.ico | Bin 0 -> 1406 bytes .../experts/versioncontrol/icons/FileAdd.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/FileBlame.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/FileBranch.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/FileCommit.ico | Bin 0 -> 1406 bytes .../experts/versioncontrol/icons/FileDiff.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/FileGraph.ico | Bin 0 -> 1406 bytes .../experts/versioncontrol/icons/FileLock.ico | Bin 0 -> 1406 bytes .../experts/versioncontrol/icons/FileLog.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/FileMerge.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/FileRename.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/FileRevert.ico | Bin 0 -> 1406 bytes .../experts/versioncontrol/icons/FileTag.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/FileUnlock.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/FileUpdate.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/Properties.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/RepoBrowser.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/SandboxAdd.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/SandboxBranch.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/SandboxCheckout.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/SandboxCommit.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/SandboxLock.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/SandboxLog.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/SandboxMerge.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/SandboxRename.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/SandboxRevert.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/SandboxTag.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/SandboxUnlock.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/SandboxUpdate.ico | Bin 0 -> 1406 bytes .../experts/versioncontrol/icons/Status.ico | Bin 0 -> 1406 bytes .../versioncontrol/icons/copyright.txt | 36 + .../experts/versioncontrol/icons/dirinfo.txt | 1 + official/1.104/include/zconf.h | 332 + official/1.104/include/zlib.h | 1357 + official/1.104/include/zutil.h | 269 + official/1.104/install.sh | 17 + official/1.104/install/BCB5-dcc32.cfg.mak | 26 + .../1.104/install/ClxGui/QJediGUIInstall.xfm | 98 + .../1.104/install/ClxGui/QJediGUIMain.xfm | 588 + .../1.104/install/ClxGui/QJediGUIReadme.xfm | 16 + official/1.104/install/HeaderTest/jcl_a2z.cpp | 314 + official/1.104/install/HeaderTest/jcl_z2a.cpp | 314 + official/1.104/install/JclInstall.pas | 3960 ++ official/1.104/install/JediInstall.pas | 596 + .../1.104/install/JediInstallConfigIni.pas | 246 + official/1.104/install/JediInstaller.bdsproj | 174 + official/1.104/install/JediInstaller.dof | 15 + official/1.104/install/JediInstaller.dpr | 36 + official/1.104/install/JediInstaller.res | Bin 0 -> 876 bytes official/1.104/install/JediProfiles.pas | 296 + official/1.104/install/JediRegInfo.pas | 248 + official/1.104/install/QJediInstaller.conf | 35 + official/1.104/install/QJediInstaller.dof | 15 + official/1.104/install/QJediInstaller.dpr | 28 + official/1.104/install/QJediInstaller.kof | 61 + official/1.104/install/QJediInstaller.res | Bin 0 -> 1756 bytes official/1.104/install/RegHelper.dof | 4 + official/1.104/install/RegHelper.dpr | 337 + official/1.104/install/RegHelper.rc | 23 + official/1.104/install/RegHelper.res | Bin 0 -> 780 bytes official/1.104/install/VclGui/FrmCompile.dfm | 211 + official/1.104/install/VclGui/FrmCompile.pas | 289 + .../1.104/install/VclGui/JediGUIInstall.dfm | 104 + .../1.104/install/VclGui/JediGUIInstall.pas | 788 + official/1.104/install/VclGui/JediGUIMain.dfm | 627 + official/1.104/install/VclGui/JediGUIMain.pas | 493 + .../1.104/install/VclGui/JediGUIProfiles.dfm | 27 + .../1.104/install/VclGui/JediGUIProfiles.pas | 103 + .../1.104/install/VclGui/JediGUIReadme.dfm | 16 + .../1.104/install/VclGui/JediGUIReadme.pas | 112 + official/1.104/install/build/dcc32ex.dpr | 949 + official/1.104/install/build/dcc32ex.exe | Bin 0 -> 46592 bytes official/1.104/install/dcc32.cfg | 6 + official/1.104/install/dcc32_command.cmd | 1 + official/1.104/install/prototypes.sh | 18 + .../install/prototypes/JediGUIInstall.pas | 886 + .../1.104/install/prototypes/JediGUIMain.pas | 525 + .../install/prototypes/JediGUIReadme.pas | 132 + official/1.104/lib/c5/debug/dirinfo.txt | 1 + official/1.104/lib/c5/dirinfo.txt | 3 + official/1.104/lib/c6/debug/dirinfo.txt | 1 + official/1.104/lib/c6/dirinfo.txt | 3 + official/1.104/lib/cs1/dirinfo.txt | 1 + official/1.104/lib/d10.net/common.exc | 23 + official/1.104/lib/d10.net/debug/dirinfo.txt | 1 + official/1.104/lib/d10.net/dirinfo.txt | 1 + official/1.104/lib/d10.net/vcl.exc | 3 + official/1.104/lib/d10.net/windows.exc | 35 + official/1.104/lib/d10/debug/dirinfo.txt | 1 + official/1.104/lib/d10/dirinfo.txt | 1 + official/1.104/lib/d11.net/common.exc | 23 + official/1.104/lib/d11.net/debug/dirinfo.txt | 1 + official/1.104/lib/d11.net/dirinfo.txt | 1 + official/1.104/lib/d11.net/vcl.exc | 3 + official/1.104/lib/d11.net/windows.exc | 35 + official/1.104/lib/d11/debug/dirinfo.txt | 1 + official/1.104/lib/d11/dirinfo.txt | 1 + official/1.104/lib/d12/Hardlinks.dcu | Bin 0 -> 9809 bytes official/1.104/lib/d12/Jcl.dcp | Bin 0 -> 4566939 bytes official/1.104/lib/d12/Jcl.dcu | Bin 0 -> 6564 bytes official/1.104/lib/d12/Jcl120.bpl | Bin 0 -> 2466304 bytes official/1.104/lib/d12/Jcl8087.dcu | Bin 0 -> 3735 bytes .../1.104/lib/d12/JclAbstractContainers.dcu | Bin 0 -> 103472 bytes official/1.104/lib/d12/JclAlgorithms.dcu | Bin 0 -> 43988 bytes official/1.104/lib/d12/JclAnsiStrings.dcu | Bin 0 -> 50813 bytes official/1.104/lib/d12/JclAppInst.dcu | Bin 0 -> 13913 bytes official/1.104/lib/d12/JclArrayLists.dcu | Bin 0 -> 308135 bytes official/1.104/lib/d12/JclArraySets.dcu | Bin 0 -> 178855 bytes official/1.104/lib/d12/JclBase.dcu | Bin 0 -> 18897 bytes official/1.104/lib/d12/JclBinaryTrees.dcu | Bin 0 -> 511091 bytes official/1.104/lib/d12/JclBorlandTools.dcu | Bin 0 -> 168814 bytes official/1.104/lib/d12/JclCIL.dcu | Bin 0 -> 63835 bytes official/1.104/lib/d12/JclCLR.dcu | Bin 0 -> 48482 bytes official/1.104/lib/d12/JclCOM.dcu | Bin 0 -> 12977 bytes official/1.104/lib/d12/JclCommCtrlAdmin.res | Bin 0 -> 920 bytes .../1.104/lib/d12/JclCommCtrlAsInvoker.res | Bin 0 -> 908 bytes official/1.104/lib/d12/JclComplex.dcu | Bin 0 -> 37402 bytes official/1.104/lib/d12/JclCompression.dcu | Bin 0 -> 208804 bytes official/1.104/lib/d12/JclConsole.dcu | Bin 0 -> 42129 bytes official/1.104/lib/d12/JclContainerIntf.dcu | Bin 0 -> 192781 bytes official/1.104/lib/d12/JclContainers.dcp | Bin 0 -> 4131217 bytes official/1.104/lib/d12/JclContainers.dcu | Bin 0 -> 3399 bytes official/1.104/lib/d12/JclContainers120.bpl | Bin 0 -> 2205184 bytes official/1.104/lib/d12/JclCounter.dcu | Bin 0 -> 4554 bytes official/1.104/lib/d12/JclDateTime.dcu | Bin 0 -> 20665 bytes official/1.104/lib/d12/JclDebug.dcu | Bin 0 -> 109620 bytes official/1.104/lib/d12/JclDotNet.dcu | Bin 0 -> 33831 bytes official/1.104/lib/d12/JclEDI.dcu | Bin 0 -> 36119 bytes official/1.104/lib/d12/JclEDISEF.dcu | Bin 0 -> 98217 bytes official/1.104/lib/d12/JclEDITranslators.dcu | Bin 0 -> 11476 bytes official/1.104/lib/d12/JclEDIXML.dcu | Bin 0 -> 63647 bytes official/1.104/lib/d12/JclEDI_ANSIX12.dcu | Bin 0 -> 81539 bytes official/1.104/lib/d12/JclEDI_ANSIX12_Ext.dcu | Bin 0 -> 7556 bytes official/1.104/lib/d12/JclEDI_UNEDIFACT.dcu | Bin 0 -> 54995 bytes .../1.104/lib/d12/JclEDI_UNEDIFACT_Ext.dcu | Bin 0 -> 7605 bytes official/1.104/lib/d12/JclExprEval.dcu | Bin 0 -> 131167 bytes official/1.104/lib/d12/JclFileUtils.dcu | Bin 0 -> 131497 bytes official/1.104/lib/d12/JclFont.dcu | Bin 0 -> 2029 bytes official/1.104/lib/d12/JclGraphUtils.dcu | Bin 0 -> 30658 bytes official/1.104/lib/d12/JclGraphics.dcu | Bin 0 -> 103432 bytes official/1.104/lib/d12/JclHashMaps.dcu | Bin 0 -> 714646 bytes official/1.104/lib/d12/JclHashSets.dcu | Bin 0 -> 329767 bytes official/1.104/lib/d12/JclHookExcept.dcu | Bin 0 -> 9153 bytes official/1.104/lib/d12/JclIniFiles.dcu | Bin 0 -> 3471 bytes official/1.104/lib/d12/JclLANMan.dcu | Bin 0 -> 10841 bytes official/1.104/lib/d12/JclLinkedLists.dcu | Bin 0 -> 339410 bytes official/1.104/lib/d12/JclLocales.dcu | Bin 0 -> 32183 bytes official/1.104/lib/d12/JclLogic.dcu | Bin 0 -> 18396 bytes official/1.104/lib/d12/JclMIDI.dcu | Bin 0 -> 24904 bytes official/1.104/lib/d12/JclMapi.dcu | Bin 0 -> 40711 bytes official/1.104/lib/d12/JclMath.dcu | Bin 0 -> 67005 bytes official/1.104/lib/d12/JclMetadata.dcu | Bin 0 -> 154176 bytes official/1.104/lib/d12/JclMime.dcu | Bin 0 -> 8144 bytes official/1.104/lib/d12/JclMiscel.dcu | Bin 0 -> 12041 bytes official/1.104/lib/d12/JclMsdosSys.dcu | Bin 0 -> 20461 bytes official/1.104/lib/d12/JclMultimedia.dcu | Bin 0 -> 36111 bytes official/1.104/lib/d12/JclNTFS.dcu | Bin 0 -> 52854 bytes official/1.104/lib/d12/JclNoDepAdmin.res | Bin 0 -> 608 bytes official/1.104/lib/d12/JclNoDepAsInvoker.res | Bin 0 -> 596 bytes official/1.104/lib/d12/JclPCRE.dcu | Bin 0 -> 20528 bytes official/1.104/lib/d12/JclPeImage.dcu | Bin 0 -> 149210 bytes official/1.104/lib/d12/JclPrint.dcu | Bin 0 -> 28657 bytes official/1.104/lib/d12/JclQueues.dcu | Bin 0 -> 131043 bytes official/1.104/lib/d12/JclRTTI.dcu | Bin 0 -> 72876 bytes official/1.104/lib/d12/JclRegistry.dcu | Bin 0 -> 43755 bytes official/1.104/lib/d12/JclResources.dcu | Bin 0 -> 191203 bytes official/1.104/lib/d12/JclSchedule.dcu | Bin 0 -> 33087 bytes official/1.104/lib/d12/JclSecurity.dcu | Bin 0 -> 13884 bytes official/1.104/lib/d12/JclShell.dcu | Bin 0 -> 29023 bytes official/1.104/lib/d12/JclSimpleXml.dcu | Bin 0 -> 86466 bytes official/1.104/lib/d12/JclSortedMaps.dcu | Bin 0 -> 728518 bytes official/1.104/lib/d12/JclStacks.dcu | Bin 0 -> 113757 bytes official/1.104/lib/d12/JclStatistics.dcu | Bin 0 -> 8132 bytes official/1.104/lib/d12/JclStrHashMap.dcu | Bin 0 -> 13766 bytes official/1.104/lib/d12/JclStreams.dcu | Bin 0 -> 60382 bytes .../1.104/lib/d12/JclStringConversions.dcu | Bin 0 -> 32182 bytes official/1.104/lib/d12/JclStringLists.dcu | Bin 0 -> 42226 bytes official/1.104/lib/d12/JclStrings.dcu | Bin 0 -> 93499 bytes official/1.104/lib/d12/JclStructStorage.dcu | Bin 0 -> 15687 bytes official/1.104/lib/d12/JclSvcCtrl.dcu | Bin 0 -> 32388 bytes official/1.104/lib/d12/JclSynch.dcu | Bin 0 -> 32732 bytes official/1.104/lib/d12/JclSysInfo.dcu | Bin 0 -> 97411 bytes official/1.104/lib/d12/JclSysUtils.dcu | Bin 0 -> 55926 bytes official/1.104/lib/d12/JclTD32.dcu | Bin 0 -> 34820 bytes official/1.104/lib/d12/JclTask.dcu | Bin 0 -> 28538 bytes official/1.104/lib/d12/JclTrees.dcu | Bin 0 -> 501069 bytes official/1.104/lib/d12/JclUnicode.dcu | Bin 0 -> 116402 bytes official/1.104/lib/d12/JclUnicode.res | Bin 0 -> 148608 bytes official/1.104/lib/d12/JclUnicodeBZip2.res | Bin 0 -> 40404 bytes official/1.104/lib/d12/JclUnicodeZLib.res | Bin 0 -> 39584 bytes official/1.104/lib/d12/JclUnitConv.dcu | Bin 0 -> 17917 bytes official/1.104/lib/d12/JclUnitVersioning.dcu | Bin 0 -> 15547 bytes .../lib/d12/JclUnitVersioningProviders.dcu | Bin 0 -> 10427 bytes official/1.104/lib/d12/JclValidation.dcu | Bin 0 -> 3020 bytes official/1.104/lib/d12/JclVcl.dcp | Bin 0 -> 182921 bytes official/1.104/lib/d12/JclVcl.dcu | Bin 0 -> 3995 bytes official/1.104/lib/d12/JclVcl120.bpl | Bin 0 -> 160256 bytes official/1.104/lib/d12/JclVectors.dcu | Bin 0 -> 292304 bytes official/1.104/lib/d12/JclVersionControl.dcu | Bin 0 -> 25836 bytes .../1.104/lib/d12/JclVersionCtrlCVSImpl.dcu | Bin 0 -> 11252 bytes .../1.104/lib/d12/JclVersionCtrlSVNImpl.dcu | Bin 0 -> 12481 bytes official/1.104/lib/d12/JclWideFormat.dcu | Bin 0 -> 12397 bytes official/1.104/lib/d12/JclWideStrings.dcu | Bin 0 -> 12786 bytes official/1.104/lib/d12/JclWin32.dcu | Bin 0 -> 143044 bytes official/1.104/lib/d12/JclWin32Ex.dcu | Bin 0 -> 8369 bytes official/1.104/lib/d12/JclWinMIDI.dcu | Bin 0 -> 10830 bytes official/1.104/lib/d12/MSHelpServices_TLB.dcu | Bin 0 -> 47659 bytes official/1.104/lib/d12/MSTask.dcu | Bin 0 -> 11068 bytes official/1.104/lib/d12/Snmp.dcu | Bin 0 -> 13366 bytes official/1.104/lib/d12/bzip2.dcu | Bin 0 -> 43727 bytes official/1.104/lib/d12/debug/Hardlinks.dcu | Bin 0 -> 12375 bytes official/1.104/lib/d12/debug/Jcl8087.dcu | Bin 0 -> 4914 bytes .../lib/d12/debug/JclAbstractContainers.dcu | Bin 0 -> 128321 bytes .../1.104/lib/d12/debug/JclAlgorithms.dcu | Bin 0 -> 70550 bytes .../1.104/lib/d12/debug/JclAnsiStrings.dcu | Bin 0 -> 81089 bytes official/1.104/lib/d12/debug/JclAppInst.dcu | Bin 0 -> 19812 bytes .../1.104/lib/d12/debug/JclArrayLists.dcu | Bin 0 -> 399943 bytes official/1.104/lib/d12/debug/JclArraySets.dcu | Bin 0 -> 203058 bytes official/1.104/lib/d12/debug/JclBase.dcu | Bin 0 -> 27724 bytes .../1.104/lib/d12/debug/JclBinaryTrees.dcu | Bin 0 -> 663593 bytes .../1.104/lib/d12/debug/JclBorlandTools.dcu | Bin 0 -> 215486 bytes official/1.104/lib/d12/debug/JclCIL.dcu | Bin 0 -> 76320 bytes official/1.104/lib/d12/debug/JclCLR.dcu | Bin 0 -> 67189 bytes official/1.104/lib/d12/debug/JclCOM.dcu | Bin 0 -> 16802 bytes .../1.104/lib/d12/debug/JclCommCtrlAdmin.res | Bin 0 -> 920 bytes .../lib/d12/debug/JclCommCtrlAsInvoker.res | Bin 0 -> 908 bytes official/1.104/lib/d12/debug/JclComplex.dcu | Bin 0 -> 51911 bytes .../1.104/lib/d12/debug/JclCompression.dcu | Bin 0 -> 274923 bytes official/1.104/lib/d12/debug/JclConsole.dcu | Bin 0 -> 57735 bytes .../1.104/lib/d12/debug/JclContainerIntf.dcu | Bin 0 -> 222587 bytes official/1.104/lib/d12/debug/JclCounter.dcu | Bin 0 -> 5700 bytes official/1.104/lib/d12/debug/JclDateTime.dcu | Bin 0 -> 33528 bytes official/1.104/lib/d12/debug/JclDebug.dcu | Bin 0 -> 151858 bytes official/1.104/lib/d12/debug/JclDotNet.dcu | Bin 0 -> 45301 bytes official/1.104/lib/d12/debug/JclEDI.dcu | Bin 0 -> 50210 bytes official/1.104/lib/d12/debug/JclEDISEF.dcu | Bin 0 -> 141301 bytes .../1.104/lib/d12/debug/JclEDITranslators.dcu | Bin 0 -> 15325 bytes official/1.104/lib/d12/debug/JclEDIXML.dcu | Bin 0 -> 88772 bytes .../1.104/lib/d12/debug/JclEDI_ANSIX12.dcu | Bin 0 -> 109301 bytes .../lib/d12/debug/JclEDI_ANSIX12_Ext.dcu | Bin 0 -> 9769 bytes .../1.104/lib/d12/debug/JclEDI_UNEDIFACT.dcu | Bin 0 -> 77823 bytes .../lib/d12/debug/JclEDI_UNEDIFACT_Ext.dcu | Bin 0 -> 9830 bytes official/1.104/lib/d12/debug/JclExprEval.dcu | Bin 0 -> 172531 bytes official/1.104/lib/d12/debug/JclFileUtils.dcu | Bin 0 -> 184120 bytes official/1.104/lib/d12/debug/JclFont.dcu | Bin 0 -> 2437 bytes .../1.104/lib/d12/debug/JclGraphUtils.dcu | Bin 0 -> 52651 bytes official/1.104/lib/d12/debug/JclGraphics.dcu | Bin 0 -> 165913 bytes official/1.104/lib/d12/debug/JclHashMaps.dcu | Bin 0 -> 995823 bytes official/1.104/lib/d12/debug/JclHashSets.dcu | Bin 0 -> 389016 bytes .../1.104/lib/d12/debug/JclHookExcept.dcu | Bin 0 -> 12723 bytes official/1.104/lib/d12/debug/JclIniFiles.dcu | Bin 0 -> 4658 bytes official/1.104/lib/d12/debug/JclLANMan.dcu | Bin 0 -> 14650 bytes .../1.104/lib/d12/debug/JclLinkedLists.dcu | Bin 0 -> 444209 bytes official/1.104/lib/d12/debug/JclLocales.dcu | Bin 0 -> 42544 bytes official/1.104/lib/d12/debug/JclLogic.dcu | Bin 0 -> 34264 bytes official/1.104/lib/d12/debug/JclMIDI.dcu | Bin 0 -> 33074 bytes official/1.104/lib/d12/debug/JclMapi.dcu | Bin 0 -> 54655 bytes official/1.104/lib/d12/debug/JclMath.dcu | Bin 0 -> 99501 bytes official/1.104/lib/d12/debug/JclMetadata.dcu | Bin 0 -> 199419 bytes official/1.104/lib/d12/debug/JclMime.dcu | Bin 0 -> 12919 bytes official/1.104/lib/d12/debug/JclMiscel.dcu | Bin 0 -> 15734 bytes official/1.104/lib/d12/debug/JclMsdosSys.dcu | Bin 0 -> 26599 bytes .../1.104/lib/d12/debug/JclMultimedia.dcu | Bin 0 -> 49852 bytes official/1.104/lib/d12/debug/JclNTFS.dcu | Bin 0 -> 71699 bytes .../1.104/lib/d12/debug/JclNoDepAdmin.res | Bin 0 -> 608 bytes .../1.104/lib/d12/debug/JclNoDepAsInvoker.res | Bin 0 -> 596 bytes official/1.104/lib/d12/debug/JclPCRE.dcu | Bin 0 -> 27332 bytes official/1.104/lib/d12/debug/JclPeImage.dcu | Bin 0 -> 210588 bytes official/1.104/lib/d12/debug/JclPrint.dcu | Bin 0 -> 39904 bytes official/1.104/lib/d12/debug/JclQueues.dcu | Bin 0 -> 162479 bytes official/1.104/lib/d12/debug/JclRTTI.dcu | Bin 0 -> 95912 bytes official/1.104/lib/d12/debug/JclRegistry.dcu | Bin 0 -> 63046 bytes official/1.104/lib/d12/debug/JclResources.dcu | Bin 0 -> 203237 bytes official/1.104/lib/d12/debug/JclSchedule.dcu | Bin 0 -> 45409 bytes official/1.104/lib/d12/debug/JclSecurity.dcu | Bin 0 -> 20055 bytes official/1.104/lib/d12/debug/JclShell.dcu | Bin 0 -> 42010 bytes official/1.104/lib/d12/debug/JclSimpleXml.dcu | Bin 0 -> 121299 bytes .../1.104/lib/d12/debug/JclSortedMaps.dcu | Bin 0 -> 997681 bytes official/1.104/lib/d12/debug/JclStacks.dcu | Bin 0 -> 137195 bytes .../1.104/lib/d12/debug/JclStatistics.dcu | Bin 0 -> 13333 bytes .../1.104/lib/d12/debug/JclStrHashMap.dcu | Bin 0 -> 20423 bytes official/1.104/lib/d12/debug/JclStreams.dcu | Bin 0 -> 84974 bytes .../lib/d12/debug/JclStringConversions.dcu | Bin 0 -> 52559 bytes .../1.104/lib/d12/debug/JclStringLists.dcu | Bin 0 -> 55654 bytes official/1.104/lib/d12/debug/JclStrings.dcu | Bin 0 -> 142423 bytes .../1.104/lib/d12/debug/JclStructStorage.dcu | Bin 0 -> 20910 bytes official/1.104/lib/d12/debug/JclSvcCtrl.dcu | Bin 0 -> 46335 bytes official/1.104/lib/d12/debug/JclSynch.dcu | Bin 0 -> 44733 bytes official/1.104/lib/d12/debug/JclSysInfo.dcu | Bin 0 -> 137555 bytes official/1.104/lib/d12/debug/JclSysUtils.dcu | Bin 0 -> 82461 bytes official/1.104/lib/d12/debug/JclTD32.dcu | Bin 0 -> 49014 bytes official/1.104/lib/d12/debug/JclTask.dcu | Bin 0 -> 37247 bytes official/1.104/lib/d12/debug/JclTrees.dcu | Bin 0 -> 649306 bytes official/1.104/lib/d12/debug/JclUnicode.dcu | Bin 0 -> 184723 bytes official/1.104/lib/d12/debug/JclUnicode.res | Bin 0 -> 148608 bytes .../1.104/lib/d12/debug/JclUnicodeBZip2.res | Bin 0 -> 40404 bytes .../1.104/lib/d12/debug/JclUnicodeZLib.res | Bin 0 -> 39584 bytes official/1.104/lib/d12/debug/JclUnitConv.dcu | Bin 0 -> 24752 bytes .../1.104/lib/d12/debug/JclUnitVersioning.dcu | Bin 0 -> 21822 bytes .../d12/debug/JclUnitVersioningProviders.dcu | Bin 0 -> 13414 bytes .../1.104/lib/d12/debug/JclValidation.dcu | Bin 0 -> 4162 bytes official/1.104/lib/d12/debug/JclVectors.dcu | Bin 0 -> 377393 bytes .../1.104/lib/d12/debug/JclVersionControl.dcu | Bin 0 -> 31783 bytes .../lib/d12/debug/JclVersionCtrlCVSImpl.dcu | Bin 0 -> 13723 bytes .../lib/d12/debug/JclVersionCtrlSVNImpl.dcu | Bin 0 -> 15161 bytes .../1.104/lib/d12/debug/JclWideFormat.dcu | Bin 0 -> 19462 bytes .../1.104/lib/d12/debug/JclWideStrings.dcu | Bin 0 -> 21520 bytes official/1.104/lib/d12/debug/JclWin32.dcu | Bin 0 -> 174857 bytes official/1.104/lib/d12/debug/JclWin32Ex.dcu | Bin 0 -> 11399 bytes official/1.104/lib/d12/debug/JclWinMIDI.dcu | Bin 0 -> 13922 bytes .../lib/d12/debug/MSHelpServices_TLB.dcu | Bin 0 -> 55394 bytes official/1.104/lib/d12/debug/MSTask.dcu | Bin 0 -> 12978 bytes official/1.104/lib/d12/debug/Snmp.dcu | Bin 0 -> 16172 bytes official/1.104/lib/d12/debug/bzip2.dcu | Bin 0 -> 44624 bytes official/1.104/lib/d12/debug/dirinfo.txt | 1 + official/1.104/lib/d12/debug/mscoree_TLB.dcu | Bin 0 -> 14433 bytes official/1.104/lib/d12/debug/mscorlib_TLB.dcu | Bin 0 -> 1116385 bytes official/1.104/lib/d12/debug/pcre.dcu | Bin 0 -> 146125 bytes official/1.104/lib/d12/debug/sevenzip.dcu | Bin 0 -> 22941 bytes official/1.104/lib/d12/debug/zlibh.dcu | Bin 0 -> 63945 bytes official/1.104/lib/d12/dirinfo.txt | 1 + official/1.104/lib/d12/jcl.inc | 347 + official/1.104/lib/d12/mscoree_TLB.dcu | Bin 0 -> 12388 bytes official/1.104/lib/d12/mscorlib_TLB.dcu | Bin 0 -> 944638 bytes official/1.104/lib/d12/pcre.dcu | Bin 0 -> 142907 bytes official/1.104/lib/d12/sevenzip.dcu | Bin 0 -> 19393 bytes official/1.104/lib/d12/zlibh.dcu | Bin 0 -> 61624 bytes official/1.104/lib/d5/debug/dirinfo.txt | 1 + official/1.104/lib/d5/dirinfo.txt | 3 + official/1.104/lib/d6/debug/dirinfo.txt | 1 + official/1.104/lib/d6/dirinfo.txt | 1 + official/1.104/lib/d7/debug/dirinfo.txt | 1 + official/1.104/lib/d7/dirinfo.txt | 1 + official/1.104/lib/d8/dirinfo.txt | 1 + official/1.104/lib/d9.net/common.exc | 23 + official/1.104/lib/d9.net/debug/dirinfo.txt | 1 + official/1.104/lib/d9.net/dirinfo.txt | 1 + official/1.104/lib/d9.net/vcl.exc | 3 + official/1.104/lib/d9.net/windows.exc | 35 + official/1.104/lib/d9/debug/dirinfo.txt | 1 + official/1.104/lib/d9/dirinfo.txt | 1 + official/1.104/lib/dirinfo.txt | 1 + official/1.104/lib/k3/debug/dirinfo.txt | 1 + official/1.104/lib/k3/dirinfo.txt | 1 + official/1.104/packages/BCB.bmk | 224 + .../packages/JclNetPackagesD100.bdsgroup | 19 + .../packages/JclNetPackagesD110.groupproj | 43 + .../1.104/packages/JclNetPackagesD90.bdsgroup | 19 + official/1.104/packages/JclPackagesC50.bpg | 69 + official/1.104/packages/JclPackagesC60.bpg | 73 + official/1.104/packages/JclPackagesCK3.bpg | 29 + .../1.104/packages/JclPackagesD100.bdsgroup | 26 + .../1.104/packages/JclPackagesD110.groupproj | 112 + .../1.104/packages/JclPackagesD120.groupproj | 143 + official/1.104/packages/JclPackagesD50.bpg | 57 + official/1.104/packages/JclPackagesD60.bpg | 60 + official/1.104/packages/JclPackagesD70.bpg | 56 + .../1.104/packages/JclPackagesD90.bdsgroup | 28 + official/1.104/packages/JclPackagesDK3.bpg | 24 + official/1.104/packages/bcb.gmk | 187 + .../1.104/packages/c5/JclBaseExpertC50.bpk | 89 + .../1.104/packages/c5/JclBaseExpertC50.cpp | 36 + .../1.104/packages/c5/JclBaseExpertC50.dof | 5 + .../1.104/packages/c5/JclBaseExpertC50.dpk | 55 + .../1.104/packages/c5/JclBaseExpertC50.rc | 32 + .../1.104/packages/c5/JclBaseExpertC50.res | Bin 0 -> 956 bytes official/1.104/packages/c5/JclC50.bpk | 149 + official/1.104/packages/c5/JclC50.cpp | 102 + official/1.104/packages/c5/JclC50.dof | 5 + official/1.104/packages/c5/JclC50.dpk | 121 + official/1.104/packages/c5/JclC50.rc | 32 + official/1.104/packages/c5/JclC50.res | Bin 0 -> 872 bytes .../1.104/packages/c5/JclContainersC50.bpk | 87 + .../1.104/packages/c5/JclContainersC50.cpp | 40 + .../1.104/packages/c5/JclContainersC50.dof | 5 + .../1.104/packages/c5/JclContainersC50.dpk | 59 + .../1.104/packages/c5/JclContainersC50.rc | 32 + .../1.104/packages/c5/JclContainersC50.res | Bin 0 -> 928 bytes .../1.104/packages/c5/JclDebugExpertC50.RES | Bin 0 -> 904 bytes .../1.104/packages/c5/JclDebugExpertC50.bpk | 80 + .../1.104/packages/c5/JclDebugExpertC50.cpp | 31 + .../1.104/packages/c5/JclDebugExpertC50.dof | 5 + .../1.104/packages/c5/JclDebugExpertC50.dpk | 50 + .../1.104/packages/c5/JclDebugExpertC50.rc | 32 + .../packages/c5/JclDebugExpertDLLC50.bpf | 6 + .../packages/c5/JclDebugExpertDLLC50.bpr | 78 + .../packages/c5/JclDebugExpertDLLC50.cpp | 31 + .../packages/c5/JclDebugExpertDLLC50.dof | 9 + .../1.104/packages/c5/JclDebugExpertDLLC50.rc | 32 + .../packages/c5/JclDebugExpertDLLC50.res | Bin 0 -> 916 bytes .../c5/JclFavoriteFoldersExpertC50.bpk | 77 + .../c5/JclFavoriteFoldersExpertC50.cpp | 30 + .../c5/JclFavoriteFoldersExpertC50.dof | 5 + .../c5/JclFavoriteFoldersExpertC50.dpk | 49 + .../c5/JclFavoriteFoldersExpertC50.rc | 32 + .../c5/JclFavoriteFoldersExpertC50.res | Bin 0 -> 1000 bytes .../c5/JclFavoriteFoldersExpertDLLC50.bpf | 5 + .../c5/JclFavoriteFoldersExpertDLLC50.bpr | 75 + .../c5/JclFavoriteFoldersExpertDLLC50.cpp | 30 + .../c5/JclFavoriteFoldersExpertDLLC50.dof | 9 + .../c5/JclFavoriteFoldersExpertDLLC50.rc | 32 + .../c5/JclFavoriteFoldersExpertDLLC50.res | Bin 0 -> 1012 bytes .../c5/JclProjectAnalysisExpertC50.RES | Bin 0 -> 940 bytes .../c5/JclProjectAnalysisExpertC50.bpk | 78 + .../c5/JclProjectAnalysisExpertC50.cpp | 30 + .../c5/JclProjectAnalysisExpertC50.dof | 5 + .../c5/JclProjectAnalysisExpertC50.dpk | 49 + .../c5/JclProjectAnalysisExpertC50.rc | 32 + .../c5/JclProjectAnalysisExpertDLLC50.bpf | 5 + .../c5/JclProjectAnalysisExpertDLLC50.bpr | 76 + .../c5/JclProjectAnalysisExpertDLLC50.cpp | 30 + .../c5/JclProjectAnalysisExpertDLLC50.dof | 9 + .../c5/JclProjectAnalysisExpertDLLC50.rc | 32 + .../c5/JclProjectAnalysisExpertDLLC50.res | Bin 0 -> 952 bytes .../packages/c5/JclRepositoryExpertC50.bpk | 91 + .../packages/c5/JclRepositoryExpertC50.cpp | 38 + .../packages/c5/JclRepositoryExpertC50.dof | 5 + .../packages/c5/JclRepositoryExpertC50.dpk | 57 + .../packages/c5/JclRepositoryExpertC50.rc | 32 + .../packages/c5/JclRepositoryExpertC50.res | Bin 0 -> 960 bytes .../packages/c5/JclRepositoryExpertDLLC50.bpf | 13 + .../packages/c5/JclRepositoryExpertDLLC50.bpr | 89 + .../packages/c5/JclRepositoryExpertDLLC50.cpp | 38 + .../packages/c5/JclRepositoryExpertDLLC50.dof | 9 + .../packages/c5/JclRepositoryExpertDLLC50.rc | 32 + .../packages/c5/JclRepositoryExpertDLLC50.res | Bin 0 -> 972 bytes .../packages/c5/JclSIMDViewExpertC50.bpk | 83 + .../packages/c5/JclSIMDViewExpertC50.cpp | 33 + .../packages/c5/JclSIMDViewExpertC50.dof | 5 + .../packages/c5/JclSIMDViewExpertC50.dpk | 52 + .../1.104/packages/c5/JclSIMDViewExpertC50.rc | 32 + .../packages/c5/JclSIMDViewExpertC50.res | Bin 0 -> 936 bytes .../packages/c5/JclSIMDViewExpertDLLC50.bpf | 8 + .../packages/c5/JclSIMDViewExpertDLLC50.bpr | 81 + .../packages/c5/JclSIMDViewExpertDLLC50.cpp | 33 + .../packages/c5/JclSIMDViewExpertDLLC50.dof | 9 + .../packages/c5/JclSIMDViewExpertDLLC50.rc | 32 + .../packages/c5/JclSIMDViewExpertDLLC50.res | Bin 0 -> 948 bytes .../packages/c5/JclThreadNameExpertC50.RES | Bin 0 -> 932 bytes .../packages/c5/JclThreadNameExpertC50.bpk | 77 + .../packages/c5/JclThreadNameExpertC50.cpp | 30 + .../packages/c5/JclThreadNameExpertC50.dof | 5 + .../packages/c5/JclThreadNameExpertC50.dpk | 49 + .../packages/c5/JclThreadNameExpertC50.rc | 32 + .../packages/c5/JclThreadNameExpertDLLC50.bpf | 5 + .../packages/c5/JclThreadNameExpertDLLC50.bpr | 75 + .../packages/c5/JclThreadNameExpertDLLC50.cpp | 30 + .../packages/c5/JclThreadNameExpertDLLC50.dof | 9 + .../packages/c5/JclThreadNameExpertDLLC50.rc | 32 + .../packages/c5/JclThreadNameExpertDLLC50.res | Bin 0 -> 944 bytes .../1.104/packages/c5/JclUsesExpertC50.RES | Bin 0 -> 884 bytes .../1.104/packages/c5/JclUsesExpertC50.bpk | 81 + .../1.104/packages/c5/JclUsesExpertC50.cpp | 32 + .../1.104/packages/c5/JclUsesExpertC50.dof | 5 + .../1.104/packages/c5/JclUsesExpertC50.dpk | 51 + .../1.104/packages/c5/JclUsesExpertC50.rc | 32 + .../1.104/packages/c5/JclUsesExpertDLLC50.bpf | 7 + .../1.104/packages/c5/JclUsesExpertDLLC50.bpr | 79 + .../1.104/packages/c5/JclUsesExpertDLLC50.cpp | 32 + .../1.104/packages/c5/JclUsesExpertDLLC50.dof | 9 + .../1.104/packages/c5/JclUsesExpertDLLC50.rc | 32 + .../1.104/packages/c5/JclUsesExpertDLLC50.res | Bin 0 -> 896 bytes official/1.104/packages/c5/JclVclC50.bpk | 81 + official/1.104/packages/c5/JclVclC50.cpp | 34 + official/1.104/packages/c5/JclVclC50.dof | 5 + official/1.104/packages/c5/JclVclC50.dpk | 53 + official/1.104/packages/c5/JclVclC50.rc | 32 + official/1.104/packages/c5/JclVclC50.res | Bin 0 -> 884 bytes .../c5/JclVersionControlExpertC50.bpk | 79 + .../c5/JclVersionControlExpertC50.cpp | 31 + .../c5/JclVersionControlExpertC50.dof | 5 + .../c5/JclVersionControlExpertC50.dpk | 50 + .../packages/c5/JclVersionControlExpertC50.rc | 32 + .../c5/JclVersionControlExpertC50.res | Bin 0 -> 1000 bytes .../c5/JclVersionControlExpertDLLC50.bpf | 5 + .../c5/JclVersionControlExpertDLLC50.bpr | 77 + .../c5/JclVersionControlExpertDLLC50.cpp | 31 + .../c5/JclVersionControlExpertDLLC50.dof | 9 + .../c5/JclVersionControlExpertDLLC50.rc | 32 + .../c5/JclVersionControlExpertDLLC50.res | Bin 0 -> 1012 bytes official/1.104/packages/c5/dirinfo.txt | 1 + official/1.104/packages/c5/template.bpf | 20 + official/1.104/packages/c5/template.bpk | 89 + official/1.104/packages/c5/template.bpr | 90 + official/1.104/packages/c5/template.cpp | 68 + official/1.104/packages/c5/template.dof | 11 + official/1.104/packages/c5/template.dpk | 55 + official/1.104/packages/c5/template.rc | 32 + official/1.104/packages/c6/Jcl.RES | Bin 0 -> 860 bytes official/1.104/packages/c6/Jcl.bpk | 232 + official/1.104/packages/c6/Jcl.cpp | 25 + official/1.104/packages/c6/Jcl.dof | 5 + official/1.104/packages/c6/Jcl.dpk | 120 + official/1.104/packages/c6/Jcl.rc | 32 + official/1.104/packages/c6/JclBaseExpert.bpk | 108 + official/1.104/packages/c6/JclBaseExpert.cpp | 31 + official/1.104/packages/c6/JclBaseExpert.dof | 5 + official/1.104/packages/c6/JclBaseExpert.dpk | 55 + official/1.104/packages/c6/JclBaseExpert.rc | 32 + official/1.104/packages/c6/JclBaseExpert.res | Bin 0 -> 944 bytes official/1.104/packages/c6/JclContainers.bpk | 108 + official/1.104/packages/c6/JclContainers.cpp | 25 + official/1.104/packages/c6/JclContainers.dof | 5 + official/1.104/packages/c6/JclContainers.dpk | 58 + official/1.104/packages/c6/JclContainers.rc | 32 + official/1.104/packages/c6/JclContainers.res | Bin 0 -> 916 bytes official/1.104/packages/c6/JclDebugExpert.RES | Bin 0 -> 892 bytes official/1.104/packages/c6/JclDebugExpert.bpk | 94 + official/1.104/packages/c6/JclDebugExpert.cpp | 27 + official/1.104/packages/c6/JclDebugExpert.dof | 5 + official/1.104/packages/c6/JclDebugExpert.dpk | 50 + official/1.104/packages/c6/JclDebugExpert.rc | 32 + .../1.104/packages/c6/JclDebugExpertDLL.bpf | 6 + .../1.104/packages/c6/JclDebugExpertDLL.bpr | 92 + .../1.104/packages/c6/JclDebugExpertDLL.cpp | 27 + .../1.104/packages/c6/JclDebugExpertDLL.dof | 9 + .../1.104/packages/c6/JclDebugExpertDLL.rc | 32 + .../1.104/packages/c6/JclDebugExpertDLL.res | Bin 0 -> 904 bytes .../packages/c6/JclFavoriteFoldersExpert.RES | Bin 0 -> 988 bytes .../packages/c6/JclFavoriteFoldersExpert.bpk | 90 + .../packages/c6/JclFavoriteFoldersExpert.cpp | 25 + .../packages/c6/JclFavoriteFoldersExpert.dof | 5 + .../packages/c6/JclFavoriteFoldersExpert.dpk | 49 + .../packages/c6/JclFavoriteFoldersExpert.rc | 32 + .../c6/JclFavoriteFoldersExpertDLL.bpf | 5 + .../c6/JclFavoriteFoldersExpertDLL.bpr | 88 + .../c6/JclFavoriteFoldersExpertDLL.cpp | 25 + .../c6/JclFavoriteFoldersExpertDLL.dof | 9 + .../c6/JclFavoriteFoldersExpertDLL.rc | 32 + .../c6/JclFavoriteFoldersExpertDLL.res | Bin 0 -> 1000 bytes .../packages/c6/JclProjectAnalysisExpert.RES | Bin 0 -> 928 bytes .../packages/c6/JclProjectAnalysisExpert.bpk | 91 + .../packages/c6/JclProjectAnalysisExpert.cpp | 26 + .../packages/c6/JclProjectAnalysisExpert.dof | 5 + .../packages/c6/JclProjectAnalysisExpert.dpk | 49 + .../packages/c6/JclProjectAnalysisExpert.rc | 32 + .../c6/JclProjectAnalysisExpertDLL.bpf | 5 + .../c6/JclProjectAnalysisExpertDLL.bpr | 89 + .../c6/JclProjectAnalysisExpertDLL.cpp | 26 + .../c6/JclProjectAnalysisExpertDLL.dof | 9 + .../c6/JclProjectAnalysisExpertDLL.rc | 32 + .../c6/JclProjectAnalysisExpertDLL.res | Bin 0 -> 940 bytes .../1.104/packages/c6/JclRepositoryExpert.bpk | 112 + .../1.104/packages/c6/JclRepositoryExpert.cpp | 31 + .../1.104/packages/c6/JclRepositoryExpert.dof | 5 + .../1.104/packages/c6/JclRepositoryExpert.dpk | 57 + .../1.104/packages/c6/JclRepositoryExpert.rc | 32 + .../1.104/packages/c6/JclRepositoryExpert.res | Bin 0 -> 948 bytes .../packages/c6/JclRepositoryExpertDLL.bpf | 13 + .../packages/c6/JclRepositoryExpertDLL.bpr | 110 + .../packages/c6/JclRepositoryExpertDLL.cpp | 31 + .../packages/c6/JclRepositoryExpertDLL.dof | 9 + .../packages/c6/JclRepositoryExpertDLL.rc | 32 + .../packages/c6/JclRepositoryExpertDLL.res | Bin 0 -> 960 bytes .../1.104/packages/c6/JclSIMDViewExpert.bpk | 99 + .../1.104/packages/c6/JclSIMDViewExpert.cpp | 28 + .../1.104/packages/c6/JclSIMDViewExpert.dof | 5 + .../1.104/packages/c6/JclSIMDViewExpert.dpk | 52 + .../1.104/packages/c6/JclSIMDViewExpert.rc | 32 + .../1.104/packages/c6/JclSIMDViewExpert.res | Bin 0 -> 924 bytes .../packages/c6/JclSIMDViewExpertDLL.bpf | 8 + .../packages/c6/JclSIMDViewExpertDLL.bpr | 97 + .../packages/c6/JclSIMDViewExpertDLL.cpp | 28 + .../packages/c6/JclSIMDViewExpertDLL.dof | 9 + .../1.104/packages/c6/JclSIMDViewExpertDLL.rc | 32 + .../packages/c6/JclSIMDViewExpertDLL.res | Bin 0 -> 936 bytes .../1.104/packages/c6/JclThreadNameExpert.RES | Bin 0 -> 920 bytes .../1.104/packages/c6/JclThreadNameExpert.bpk | 90 + .../1.104/packages/c6/JclThreadNameExpert.cpp | 25 + .../1.104/packages/c6/JclThreadNameExpert.dof | 5 + .../1.104/packages/c6/JclThreadNameExpert.dpk | 49 + .../1.104/packages/c6/JclThreadNameExpert.rc | 32 + .../packages/c6/JclThreadNameExpertDLL.bpf | 5 + .../packages/c6/JclThreadNameExpertDLL.bpr | 88 + .../packages/c6/JclThreadNameExpertDLL.cpp | 25 + .../packages/c6/JclThreadNameExpertDLL.dof | 9 + .../packages/c6/JclThreadNameExpertDLL.rc | 32 + .../packages/c6/JclThreadNameExpertDLL.res | Bin 0 -> 932 bytes official/1.104/packages/c6/JclUsesExpert.RES | Bin 0 -> 872 bytes official/1.104/packages/c6/JclUsesExpert.bpk | 96 + official/1.104/packages/c6/JclUsesExpert.cpp | 27 + official/1.104/packages/c6/JclUsesExpert.dof | 5 + official/1.104/packages/c6/JclUsesExpert.dpk | 51 + official/1.104/packages/c6/JclUsesExpert.rc | 32 + .../1.104/packages/c6/JclUsesExpertDLL.bpf | 7 + .../1.104/packages/c6/JclUsesExpertDLL.bpr | 94 + .../1.104/packages/c6/JclUsesExpertDLL.cpp | 27 + .../1.104/packages/c6/JclUsesExpertDLL.dof | 9 + .../1.104/packages/c6/JclUsesExpertDLL.rc | 32 + .../1.104/packages/c6/JclUsesExpertDLL.res | Bin 0 -> 884 bytes official/1.104/packages/c6/JclVClx.RES | Bin 0 -> 888 bytes official/1.104/packages/c6/JclVClx.bpk | 86 + official/1.104/packages/c6/JclVClx.cpp | 25 + official/1.104/packages/c6/JclVClx.dof | 5 + official/1.104/packages/c6/JclVClx.dpk | 47 + official/1.104/packages/c6/JclVClx.rc | 32 + official/1.104/packages/c6/JclVcl.RES | Bin 0 -> 872 bytes official/1.104/packages/c6/JclVcl.bpk | 98 + official/1.104/packages/c6/JclVcl.cpp | 25 + official/1.104/packages/c6/JclVcl.dof | 5 + official/1.104/packages/c6/JclVcl.dpk | 53 + official/1.104/packages/c6/JclVcl.rc | 32 + .../packages/c6/JclVersionControlExpert.bpk | 93 + .../packages/c6/JclVersionControlExpert.cpp | 26 + .../packages/c6/JclVersionControlExpert.dof | 5 + .../packages/c6/JclVersionControlExpert.dpk | 50 + .../packages/c6/JclVersionControlExpert.rc | 32 + .../packages/c6/JclVersionControlExpert.res | Bin 0 -> 988 bytes .../c6/JclVersionControlExpertDLL.bpf | 5 + .../c6/JclVersionControlExpertDLL.bpr | 91 + .../c6/JclVersionControlExpertDLL.cpp | 26 + .../c6/JclVersionControlExpertDLL.dof | 9 + .../packages/c6/JclVersionControlExpertDLL.rc | 32 + .../c6/JclVersionControlExpertDLL.res | Bin 0 -> 1000 bytes official/1.104/packages/c6/dirinfo.txt | 1 + official/1.104/packages/c6/template.bpf | 20 + official/1.104/packages/c6/template.bpk | 103 + official/1.104/packages/c6/template.bpr | 104 + official/1.104/packages/c6/template.cpp | 66 + official/1.104/packages/c6/template.dof | 11 + official/1.104/packages/c6/template.dpk | 54 + official/1.104/packages/c6/template.rc | 32 + official/1.104/packages/cs1/Jcl.RES | Bin 0 -> 856 bytes official/1.104/packages/cs1/Jcl.bdsproj | 174 + official/1.104/packages/cs1/Jcl.dpk | 122 + official/1.104/packages/cs1/Jcl.rc | 32 + official/1.104/packages/cs1/JclBaseExpert.RES | Bin 0 -> 940 bytes .../1.104/packages/cs1/JclBaseExpert.bdsproj | 174 + official/1.104/packages/cs1/JclBaseExpert.dpk | 57 + official/1.104/packages/cs1/JclBaseExpert.rc | 32 + .../1.104/packages/cs1/JclContainers.bdsproj | 174 + official/1.104/packages/cs1/JclContainers.dpk | 60 + official/1.104/packages/cs1/JclContainers.rc | 32 + official/1.104/packages/cs1/JclContainers.res | Bin 0 -> 912 bytes .../cs1/JclFavoriteFoldersExpertDLL.RES | Bin 0 -> 996 bytes .../cs1/JclFavoriteFoldersExpertDLL.bdsproj | 174 + .../cs1/JclFavoriteFoldersExpertDLL.dpr | 46 + .../cs1/JclFavoriteFoldersExpertDLL.rc | 32 + .../cs1/JclVersionControlExpertDLL.bdsproj | 174 + .../cs1/JclVersionControlExpertDLL.dpr | 46 + .../cs1/JclVersionControlExpertDLL.rc | 32 + .../cs1/JclVersionControlExpertDLL.res | Bin 0 -> 1000 bytes official/1.104/packages/cs1/template.bdsproj | 174 + official/1.104/packages/cs1/template.dpk | 56 + official/1.104/packages/cs1/template.dpr | 60 + official/1.104/packages/cs1/template.rc | 32 + .../1.104/packages/d10.net/Jedi.Jcl.bdsproj | 207 + official/1.104/packages/d10.net/Jedi.Jcl.dpk | 90 + .../d10.net/Jedi.JclContainers.bdsproj | 199 + .../packages/d10.net/Jedi.JclContainers.dpk | 82 + .../1.104/packages/d10.net/template.bdsproj | 188 + official/1.104/packages/d10.net/template.dpk | 77 + official/1.104/packages/d10/Jcl.bdsproj | 163 + official/1.104/packages/d10/Jcl.dpk | 126 + official/1.104/packages/d10/Jcl.rc | 32 + official/1.104/packages/d10/Jcl.res | Bin 0 -> 860 bytes .../1.104/packages/d10/JclBaseExpert.bdsproj | 163 + official/1.104/packages/d10/JclBaseExpert.dpk | 57 + official/1.104/packages/d10/JclBaseExpert.rc | 32 + official/1.104/packages/d10/JclBaseExpert.res | Bin 0 -> 944 bytes .../1.104/packages/d10/JclContainers.bdsproj | 163 + official/1.104/packages/d10/JclContainers.dpk | 60 + official/1.104/packages/d10/JclContainers.rc | 32 + official/1.104/packages/d10/JclContainers.res | Bin 0 -> 916 bytes .../1.104/packages/d10/JclDebugExpert.bdsproj | 163 + .../1.104/packages/d10/JclDebugExpert.dpk | 52 + official/1.104/packages/d10/JclDebugExpert.rc | 32 + .../1.104/packages/d10/JclDebugExpert.res | Bin 0 -> 892 bytes .../packages/d10/JclDebugExpertDLL.bdsproj | 163 + .../1.104/packages/d10/JclDebugExpertDLL.dpr | 47 + .../1.104/packages/d10/JclDebugExpertDLL.rc | 32 + .../1.104/packages/d10/JclDebugExpertDLL.res | Bin 0 -> 904 bytes .../1.104/packages/d10/JclExperts.bdsgroup | 22 + .../d10/JclFavoriteFoldersExpert.bdsproj | 163 + .../packages/d10/JclFavoriteFoldersExpert.dpk | 51 + .../packages/d10/JclFavoriteFoldersExpert.rc | 32 + .../packages/d10/JclFavoriteFoldersExpert.res | Bin 0 -> 988 bytes .../d10/JclFavoriteFoldersExpertDLL.bdsproj | 163 + .../d10/JclFavoriteFoldersExpertDLL.dpr | 46 + .../d10/JclFavoriteFoldersExpertDLL.rc | 32 + .../d10/JclFavoriteFoldersExpertDLL.res | Bin 0 -> 1000 bytes .../packages/d10/JclProjectAnalysisExpert.RES | Bin 0 -> 928 bytes .../d10/JclProjectAnalysisExpert.bdsproj | 163 + .../packages/d10/JclProjectAnalysisExpert.dpk | 51 + .../packages/d10/JclProjectAnalysisExpert.rc | 32 + .../d10/JclProjectAnalysisExpertDLL.bdsproj | 163 + .../d10/JclProjectAnalysisExpertDLL.dpr | 46 + .../d10/JclProjectAnalysisExpertDLL.rc | 32 + .../d10/JclProjectAnalysisExpertDLL.res | Bin 0 -> 940 bytes .../packages/d10/JclRepositoryExpert.bdsproj | 163 + .../packages/d10/JclRepositoryExpert.dpk | 59 + .../1.104/packages/d10/JclRepositoryExpert.rc | 32 + .../packages/d10/JclRepositoryExpert.res | Bin 0 -> 948 bytes .../d10/JclRepositoryExpertDLL.bdsproj | 163 + .../packages/d10/JclRepositoryExpertDLL.dpr | 54 + .../packages/d10/JclRepositoryExpertDLL.rc | 32 + .../packages/d10/JclRepositoryExpertDLL.res | Bin 0 -> 960 bytes .../packages/d10/JclSIMDViewExpert.bdsproj | 163 + .../1.104/packages/d10/JclSIMDViewExpert.dpk | 54 + .../1.104/packages/d10/JclSIMDViewExpert.rc | 32 + .../1.104/packages/d10/JclSIMDViewExpert.res | Bin 0 -> 924 bytes .../packages/d10/JclSIMDViewExpertDLL.bdsproj | 163 + .../packages/d10/JclSIMDViewExpertDLL.dpr | 49 + .../packages/d10/JclSIMDViewExpertDLL.rc | 32 + .../packages/d10/JclSIMDViewExpertDLL.res | Bin 0 -> 936 bytes official/1.104/packages/d10/JclVcl.bdsproj | 163 + official/1.104/packages/d10/JclVcl.dpk | 55 + official/1.104/packages/d10/JclVcl.rc | 32 + official/1.104/packages/d10/JclVcl.res | Bin 0 -> 872 bytes .../d10/JclVersionControlExpert.bdsproj | 163 + .../packages/d10/JclVersionControlExpert.dpk | 52 + .../packages/d10/JclVersionControlExpert.rc | 32 + .../packages/d10/JclVersionControlExpert.res | Bin 0 -> 988 bytes .../d10/JclVersionControlExpertDLL.bdsproj | 163 + .../d10/JclVersionControlExpertDLL.dpr | 46 + .../d10/JclVersionControlExpertDLL.rc | 32 + .../d10/JclVersionControlExpertDLL.res | Bin 0 -> 1000 bytes official/1.104/packages/d10/template.bdsproj | 163 + official/1.104/packages/d10/template.dpk | 56 + official/1.104/packages/d10/template.dpr | 58 + official/1.104/packages/d10/template.rc | 32 + official/1.104/packages/d11.net/Jedi.Jcl.dpk | 89 + .../1.104/packages/d11.net/Jedi.Jcl.dproj | 139 + .../packages/d11.net/Jedi.JclContainers.dpk | 81 + .../packages/d11.net/Jedi.JclContainers.dproj | 137 + official/1.104/packages/d11.net/template.dpk | 76 + .../1.104/packages/d11.net/template.dproj | 130 + official/1.104/packages/d11/Jcl.dpk | 126 + official/1.104/packages/d11/Jcl.dproj | 171 + official/1.104/packages/d11/Jcl.rc | 32 + official/1.104/packages/d11/Jcl.res | Bin 0 -> 860 bytes official/1.104/packages/d11/JclBaseExpert.dpk | 57 + .../1.104/packages/d11/JclBaseExpert.dproj | 102 + official/1.104/packages/d11/JclBaseExpert.rc | 32 + official/1.104/packages/d11/JclBaseExpert.res | Bin 0 -> 944 bytes official/1.104/packages/d11/JclContainers.dpk | 60 + .../1.104/packages/d11/JclContainers.dproj | 105 + official/1.104/packages/d11/JclContainers.rc | 32 + official/1.104/packages/d11/JclContainers.res | Bin 0 -> 916 bytes .../1.104/packages/d11/JclDebugExpert.dpk | 52 + .../1.104/packages/d11/JclDebugExpert.dproj | 97 + official/1.104/packages/d11/JclDebugExpert.rc | 32 + .../1.104/packages/d11/JclDebugExpert.res | Bin 0 -> 892 bytes .../1.104/packages/d11/JclDebugExpertDLL.dpr | 47 + .../packages/d11/JclDebugExpertDLL.dproj | 97 + .../1.104/packages/d11/JclDebugExpertDLL.rc | 32 + .../1.104/packages/d11/JclDebugExpertDLL.res | Bin 0 -> 904 bytes .../packages/d11/JclFavoriteFoldersExpert.dpk | 51 + .../d11/JclFavoriteFoldersExpert.dproj | 96 + .../packages/d11/JclFavoriteFoldersExpert.rc | 32 + .../packages/d11/JclFavoriteFoldersExpert.res | Bin 0 -> 988 bytes .../d11/JclFavoriteFoldersExpertDLL.dpr | 46 + .../d11/JclFavoriteFoldersExpertDLL.dproj | 96 + .../d11/JclFavoriteFoldersExpertDLL.rc | 32 + .../d11/JclFavoriteFoldersExpertDLL.res | Bin 0 -> 1000 bytes .../packages/d11/JclProjectAnalysisExpert.dpk | 51 + .../d11/JclProjectAnalysisExpert.dproj | 96 + .../packages/d11/JclProjectAnalysisExpert.rc | 32 + .../packages/d11/JclProjectAnalysisExpert.res | Bin 0 -> 928 bytes .../d11/JclProjectAnalysisExpertDLL.dpr | 46 + .../d11/JclProjectAnalysisExpertDLL.dproj | 96 + .../d11/JclProjectAnalysisExpertDLL.rc | 32 + .../d11/JclProjectAnalysisExpertDLL.res | Bin 0 -> 940 bytes .../packages/d11/JclRepositoryExpert.dpk | 59 + .../packages/d11/JclRepositoryExpert.dproj | 104 + .../1.104/packages/d11/JclRepositoryExpert.rc | 32 + .../packages/d11/JclRepositoryExpert.res | Bin 0 -> 948 bytes .../packages/d11/JclRepositoryExpertDLL.dpr | 54 + .../packages/d11/JclRepositoryExpertDLL.dproj | 104 + .../packages/d11/JclRepositoryExpertDLL.rc | 32 + .../packages/d11/JclRepositoryExpertDLL.res | Bin 0 -> 960 bytes .../1.104/packages/d11/JclSIMDViewExpert.dpk | 54 + .../packages/d11/JclSIMDViewExpert.dproj | 99 + .../1.104/packages/d11/JclSIMDViewExpert.rc | 32 + .../1.104/packages/d11/JclSIMDViewExpert.res | Bin 0 -> 924 bytes .../packages/d11/JclSIMDViewExpertDLL.dpr | 49 + .../packages/d11/JclSIMDViewExpertDLL.dproj | 99 + .../packages/d11/JclSIMDViewExpertDLL.rc | 32 + .../packages/d11/JclSIMDViewExpertDLL.res | Bin 0 -> 936 bytes official/1.104/packages/d11/JclVcl.dpk | 55 + official/1.104/packages/d11/JclVcl.dproj | 100 + official/1.104/packages/d11/JclVcl.rc | 32 + official/1.104/packages/d11/JclVcl.res | Bin 0 -> 872 bytes .../packages/d11/JclVersionControlExpert.dpk | 52 + .../d11/JclVersionControlExpert.dproj | 97 + .../packages/d11/JclVersionControlExpert.rc | 32 + .../packages/d11/JclVersionControlExpert.res | Bin 0 -> 988 bytes .../d11/JclVersionControlExpertDLL.dpr | 46 + .../d11/JclVersionControlExpertDLL.dproj | 97 + .../d11/JclVersionControlExpertDLL.rc | 32 + .../d11/JclVersionControlExpertDLL.res | Bin 0 -> 1000 bytes official/1.104/packages/d11/template.dpk | 56 + official/1.104/packages/d11/template.dpr | 58 + official/1.104/packages/d11/template.dproj | 95 + official/1.104/packages/d11/template.rc | 32 + official/1.104/packages/d12/Jcl.dpk | 126 + official/1.104/packages/d12/Jcl.dproj | 220 + official/1.104/packages/d12/Jcl.rc | 32 + official/1.104/packages/d12/Jcl.res | Bin 0 -> 860 bytes official/1.104/packages/d12/JclBaseExpert.dpk | 57 + .../1.104/packages/d12/JclBaseExpert.dproj | 151 + official/1.104/packages/d12/JclBaseExpert.rc | 32 + official/1.104/packages/d12/JclBaseExpert.res | Bin 0 -> 944 bytes official/1.104/packages/d12/JclContainers.dpk | 60 + .../1.104/packages/d12/JclContainers.dproj | 154 + official/1.104/packages/d12/JclContainers.rc | 32 + official/1.104/packages/d12/JclContainers.res | Bin 0 -> 916 bytes .../1.104/packages/d12/JclDebugExpert.dpk | 52 + .../1.104/packages/d12/JclDebugExpert.dproj | 146 + official/1.104/packages/d12/JclDebugExpert.rc | 32 + .../1.104/packages/d12/JclDebugExpert.res | Bin 0 -> 892 bytes .../1.104/packages/d12/JclDebugExpertDLL.dpr | 47 + .../packages/d12/JclDebugExpertDLL.dproj | 146 + .../1.104/packages/d12/JclDebugExpertDLL.rc | 32 + .../1.104/packages/d12/JclDebugExpertDLL.res | Bin 0 -> 904 bytes .../packages/d12/JclFavoriteFoldersExpert.dpk | 51 + .../d12/JclFavoriteFoldersExpert.dproj | 145 + .../packages/d12/JclFavoriteFoldersExpert.rc | 32 + .../packages/d12/JclFavoriteFoldersExpert.res | Bin 0 -> 988 bytes .../d12/JclFavoriteFoldersExpertDLL.dpr | 46 + .../d12/JclFavoriteFoldersExpertDLL.dproj | 145 + .../d12/JclFavoriteFoldersExpertDLL.rc | 32 + .../d12/JclFavoriteFoldersExpertDLL.res | Bin 0 -> 1000 bytes .../packages/d12/JclProjectAnalysisExpert.dpk | 51 + .../d12/JclProjectAnalysisExpert.dproj | 145 + .../packages/d12/JclProjectAnalysisExpert.rc | 32 + .../packages/d12/JclProjectAnalysisExpert.res | Bin 0 -> 928 bytes .../d12/JclProjectAnalysisExpertDLL.dpr | 46 + .../d12/JclProjectAnalysisExpertDLL.dproj | 145 + .../d12/JclProjectAnalysisExpertDLL.rc | 32 + .../d12/JclProjectAnalysisExpertDLL.res | Bin 0 -> 940 bytes .../packages/d12/JclRepositoryExpert.dpk | 59 + .../packages/d12/JclRepositoryExpert.dproj | 153 + .../1.104/packages/d12/JclRepositoryExpert.rc | 32 + .../packages/d12/JclRepositoryExpert.res | Bin 0 -> 948 bytes .../packages/d12/JclRepositoryExpertDLL.dpr | 54 + .../packages/d12/JclRepositoryExpertDLL.dproj | 153 + .../packages/d12/JclRepositoryExpertDLL.rc | 32 + .../packages/d12/JclRepositoryExpertDLL.res | Bin 0 -> 960 bytes .../1.104/packages/d12/JclSIMDViewExpert.dpk | 54 + .../packages/d12/JclSIMDViewExpert.dproj | 148 + .../1.104/packages/d12/JclSIMDViewExpert.rc | 32 + .../1.104/packages/d12/JclSIMDViewExpert.res | Bin 0 -> 924 bytes .../packages/d12/JclSIMDViewExpertDLL.dpr | 49 + .../packages/d12/JclSIMDViewExpertDLL.dproj | 148 + .../packages/d12/JclSIMDViewExpertDLL.rc | 32 + .../packages/d12/JclSIMDViewExpertDLL.res | Bin 0 -> 936 bytes official/1.104/packages/d12/JclVcl.dpk | 55 + official/1.104/packages/d12/JclVcl.dproj | 149 + official/1.104/packages/d12/JclVcl.rc | 32 + official/1.104/packages/d12/JclVcl.res | Bin 0 -> 872 bytes .../packages/d12/JclVersionControlExpert.dpk | 52 + .../d12/JclVersionControlExpert.dproj | 146 + .../packages/d12/JclVersionControlExpert.rc | 32 + .../packages/d12/JclVersionControlExpert.res | Bin 0 -> 988 bytes .../d12/JclVersionControlExpertDLL.dpr | 46 + .../d12/JclVersionControlExpertDLL.dproj | 146 + .../d12/JclVersionControlExpertDLL.rc | 32 + .../d12/JclVersionControlExpertDLL.res | Bin 0 -> 1000 bytes official/1.104/packages/d12/template.dpk | 56 + official/1.104/packages/d12/template.dpr | 58 + official/1.104/packages/d12/template.dproj | 144 + official/1.104/packages/d12/template.rc | 32 + .../1.104/packages/d5/JclBaseExpertD50.dof | 4 + .../1.104/packages/d5/JclBaseExpertD50.dpk | 55 + .../1.104/packages/d5/JclBaseExpertD50.rc | 32 + .../1.104/packages/d5/JclBaseExpertD50.res | Bin 0 -> 956 bytes .../1.104/packages/d5/JclContainersD50.dof | 4 + .../1.104/packages/d5/JclContainersD50.dpk | 59 + .../1.104/packages/d5/JclContainersD50.rc | 32 + .../1.104/packages/d5/JclContainersD50.res | Bin 0 -> 928 bytes official/1.104/packages/d5/JclD50.RES | Bin 0 -> 872 bytes official/1.104/packages/d5/JclD50.dof | 4 + official/1.104/packages/d5/JclD50.dpk | 125 + official/1.104/packages/d5/JclD50.rc | 32 + .../1.104/packages/d5/JclDebugExpertD50.RES | Bin 0 -> 904 bytes .../1.104/packages/d5/JclDebugExpertD50.dof | 4 + .../1.104/packages/d5/JclDebugExpertD50.dpk | 50 + .../1.104/packages/d5/JclDebugExpertD50.rc | 32 + .../packages/d5/JclDebugExpertDLLD50.RES | Bin 0 -> 916 bytes .../packages/d5/JclDebugExpertDLLD50.dof | 8 + .../packages/d5/JclDebugExpertDLLD50.dpr | 46 + .../1.104/packages/d5/JclDebugExpertDLLD50.rc | 32 + .../d5/JclFavoriteFoldersExpertD50.RES | Bin 0 -> 1000 bytes .../d5/JclFavoriteFoldersExpertD50.dof | 4 + .../d5/JclFavoriteFoldersExpertD50.dpk | 49 + .../d5/JclFavoriteFoldersExpertD50.rc | 32 + .../d5/JclFavoriteFoldersExpertDLLD50.RES | Bin 0 -> 1012 bytes .../d5/JclFavoriteFoldersExpertDLLD50.dof | 8 + .../d5/JclFavoriteFoldersExpertDLLD50.dpr | 45 + .../d5/JclFavoriteFoldersExpertDLLD50.rc | 32 + .../d5/JclProjectAnalysisExpertD50.RES | Bin 0 -> 940 bytes .../d5/JclProjectAnalysisExpertD50.dof | 4 + .../d5/JclProjectAnalysisExpertD50.dpk | 49 + .../d5/JclProjectAnalysisExpertD50.rc | 32 + .../d5/JclProjectAnalysisExpertDLLD50.RES | Bin 0 -> 952 bytes .../d5/JclProjectAnalysisExpertDLLD50.dof | 8 + .../d5/JclProjectAnalysisExpertDLLD50.dpr | 45 + .../d5/JclProjectAnalysisExpertDLLD50.rc | 32 + .../packages/d5/JclRepositoryExpertD50.dof | 4 + .../packages/d5/JclRepositoryExpertD50.dpk | 57 + .../packages/d5/JclRepositoryExpertD50.rc | 32 + .../packages/d5/JclRepositoryExpertD50.res | Bin 0 -> 960 bytes .../packages/d5/JclRepositoryExpertDLLD50.dof | 8 + .../packages/d5/JclRepositoryExpertDLLD50.dpr | 53 + .../packages/d5/JclRepositoryExpertDLLD50.rc | 32 + .../packages/d5/JclRepositoryExpertDLLD50.res | Bin 0 -> 972 bytes .../packages/d5/JclSIMDViewExpertD50.RES | Bin 0 -> 936 bytes .../packages/d5/JclSIMDViewExpertD50.dof | 4 + .../packages/d5/JclSIMDViewExpertD50.dpk | 52 + .../1.104/packages/d5/JclSIMDViewExpertD50.rc | 32 + .../packages/d5/JclSIMDViewExpertDLLD50.RES | Bin 0 -> 948 bytes .../packages/d5/JclSIMDViewExpertDLLD50.dof | 8 + .../packages/d5/JclSIMDViewExpertDLLD50.dpr | 48 + .../packages/d5/JclSIMDViewExpertDLLD50.rc | 32 + .../packages/d5/JclThreadNameExpertD50.RES | Bin 0 -> 932 bytes .../packages/d5/JclThreadNameExpertD50.dof | 4 + .../packages/d5/JclThreadNameExpertD50.dpk | 49 + .../packages/d5/JclThreadNameExpertD50.rc | 32 + .../packages/d5/JclThreadNameExpertDLLD50.RES | Bin 0 -> 944 bytes .../packages/d5/JclThreadNameExpertDLLD50.dof | 8 + .../packages/d5/JclThreadNameExpertDLLD50.dpr | 45 + .../packages/d5/JclThreadNameExpertDLLD50.rc | 32 + .../1.104/packages/d5/JclUsesExpertD50.RES | Bin 0 -> 884 bytes .../1.104/packages/d5/JclUsesExpertD50.dof | 4 + .../1.104/packages/d5/JclUsesExpertD50.dpk | 51 + .../1.104/packages/d5/JclUsesExpertD50.rc | 32 + .../1.104/packages/d5/JclUsesExpertDLLD50.RES | Bin 0 -> 896 bytes .../1.104/packages/d5/JclUsesExpertDLLD50.dof | 8 + .../1.104/packages/d5/JclUsesExpertDLLD50.dpr | 47 + .../1.104/packages/d5/JclUsesExpertDLLD50.rc | 32 + official/1.104/packages/d5/JclVclD50.dof | 4 + official/1.104/packages/d5/JclVclD50.dpk | 53 + official/1.104/packages/d5/JclVclD50.rc | 32 + official/1.104/packages/d5/JclVclD50.res | Bin 0 -> 884 bytes .../d5/JclVersionControlExpertD50.dof | 4 + .../d5/JclVersionControlExpertD50.dpk | 50 + .../packages/d5/JclVersionControlExpertD50.rc | 32 + .../d5/JclVersionControlExpertD50.res | Bin 0 -> 1000 bytes .../d5/JclVersionControlExpertDLLD50.dof | 8 + .../d5/JclVersionControlExpertDLLD50.dpr | 45 + .../d5/JclVersionControlExpertDLLD50.rc | 32 + .../d5/JclVersionControlExpertDLLD50.res | Bin 0 -> 1012 bytes official/1.104/packages/d5/dirinfo.txt | 1 + official/1.104/packages/d5/template.dof | 10 + official/1.104/packages/d5/template.dpk | 55 + official/1.104/packages/d5/template.dpr | 57 + official/1.104/packages/d5/template.rc | 32 + official/1.104/packages/d6/Jcl.dof | 4 + official/1.104/packages/d6/Jcl.dpk | 126 + official/1.104/packages/d6/Jcl.rc | 32 + official/1.104/packages/d6/Jcl.res | Bin 0 -> 860 bytes official/1.104/packages/d6/JclBaseExpert.dof | 4 + official/1.104/packages/d6/JclBaseExpert.dpk | 57 + official/1.104/packages/d6/JclBaseExpert.rc | 32 + official/1.104/packages/d6/JclBaseExpert.res | Bin 0 -> 944 bytes official/1.104/packages/d6/JclContainers.dof | 4 + official/1.104/packages/d6/JclContainers.dpk | 60 + official/1.104/packages/d6/JclContainers.rc | 32 + official/1.104/packages/d6/JclContainers.res | Bin 0 -> 916 bytes official/1.104/packages/d6/JclDebugExpert.dof | 4 + official/1.104/packages/d6/JclDebugExpert.dpk | 52 + official/1.104/packages/d6/JclDebugExpert.rc | 32 + official/1.104/packages/d6/JclDebugExpert.res | Bin 0 -> 892 bytes .../1.104/packages/d6/JclDebugExpertDLL.RES | Bin 0 -> 904 bytes .../1.104/packages/d6/JclDebugExpertDLL.dof | 8 + .../1.104/packages/d6/JclDebugExpertDLL.dpr | 47 + .../1.104/packages/d6/JclDebugExpertDLL.rc | 32 + .../packages/d6/JclFavoriteFoldersExpert.dof | 4 + .../packages/d6/JclFavoriteFoldersExpert.dpk | 51 + .../packages/d6/JclFavoriteFoldersExpert.rc | 32 + .../packages/d6/JclFavoriteFoldersExpert.res | Bin 0 -> 988 bytes .../d6/JclFavoriteFoldersExpertDLL.RES | Bin 0 -> 1000 bytes .../d6/JclFavoriteFoldersExpertDLL.dof | 8 + .../d6/JclFavoriteFoldersExpertDLL.dpr | 46 + .../d6/JclFavoriteFoldersExpertDLL.rc | 32 + .../packages/d6/JclProjectAnalysisExpert.RES | Bin 0 -> 928 bytes .../packages/d6/JclProjectAnalysisExpert.dof | 4 + .../packages/d6/JclProjectAnalysisExpert.dpk | 51 + .../packages/d6/JclProjectAnalysisExpert.rc | 32 + .../d6/JclProjectAnalysisExpertDLL.RES | Bin 0 -> 940 bytes .../d6/JclProjectAnalysisExpertDLL.dof | 8 + .../d6/JclProjectAnalysisExpertDLL.dpr | 46 + .../d6/JclProjectAnalysisExpertDLL.rc | 32 + .../1.104/packages/d6/JclRepositoryExpert.dof | 4 + .../1.104/packages/d6/JclRepositoryExpert.dpk | 59 + .../1.104/packages/d6/JclRepositoryExpert.rc | 32 + .../1.104/packages/d6/JclRepositoryExpert.res | Bin 0 -> 948 bytes .../packages/d6/JclRepositoryExpertDLL.dof | 8 + .../packages/d6/JclRepositoryExpertDLL.dpr | 54 + .../packages/d6/JclRepositoryExpertDLL.rc | 32 + .../packages/d6/JclRepositoryExpertDLL.res | Bin 0 -> 960 bytes .../1.104/packages/d6/JclSIMDViewExpert.dof | 4 + .../1.104/packages/d6/JclSIMDViewExpert.dpk | 54 + .../1.104/packages/d6/JclSIMDViewExpert.rc | 32 + .../1.104/packages/d6/JclSIMDViewExpert.res | Bin 0 -> 924 bytes .../packages/d6/JclSIMDViewExpertDLL.RES | Bin 0 -> 936 bytes .../packages/d6/JclSIMDViewExpertDLL.dof | 8 + .../packages/d6/JclSIMDViewExpertDLL.dpr | 49 + .../1.104/packages/d6/JclSIMDViewExpertDLL.rc | 32 + .../1.104/packages/d6/JclThreadNameExpert.dof | 4 + .../1.104/packages/d6/JclThreadNameExpert.dpk | 51 + .../1.104/packages/d6/JclThreadNameExpert.rc | 32 + .../1.104/packages/d6/JclThreadNameExpert.res | Bin 0 -> 920 bytes .../packages/d6/JclThreadNameExpertDLL.RES | Bin 0 -> 932 bytes .../packages/d6/JclThreadNameExpertDLL.dof | 8 + .../packages/d6/JclThreadNameExpertDLL.dpr | 46 + .../packages/d6/JclThreadNameExpertDLL.rc | 32 + official/1.104/packages/d6/JclUsesExpert.dof | 4 + official/1.104/packages/d6/JclUsesExpert.dpk | 53 + official/1.104/packages/d6/JclUsesExpert.rc | 32 + official/1.104/packages/d6/JclUsesExpert.res | Bin 0 -> 872 bytes .../1.104/packages/d6/JclUsesExpertDLL.RES | Bin 0 -> 884 bytes .../1.104/packages/d6/JclUsesExpertDLL.dof | 8 + .../1.104/packages/d6/JclUsesExpertDLL.dpr | 48 + .../1.104/packages/d6/JclUsesExpertDLL.rc | 32 + official/1.104/packages/d6/JclVClx.dof | 4 + official/1.104/packages/d6/JclVClx.dpk | 49 + official/1.104/packages/d6/JclVClx.rc | 32 + official/1.104/packages/d6/JclVClx.res | Bin 0 -> 888 bytes official/1.104/packages/d6/JclVcl.dof | 4 + official/1.104/packages/d6/JclVcl.dpk | 55 + official/1.104/packages/d6/JclVcl.rc | 32 + official/1.104/packages/d6/JclVcl.res | Bin 0 -> 872 bytes .../packages/d6/JclVersionControlExpert.dof | 4 + .../packages/d6/JclVersionControlExpert.dpk | 52 + .../packages/d6/JclVersionControlExpert.rc | 32 + .../packages/d6/JclVersionControlExpert.res | Bin 0 -> 988 bytes .../d6/JclVersionControlExpertDLL.dof | 8 + .../d6/JclVersionControlExpertDLL.dpr | 46 + .../packages/d6/JclVersionControlExpertDLL.rc | 32 + .../d6/JclVersionControlExpertDLL.res | Bin 0 -> 1000 bytes official/1.104/packages/d6/dirinfo.txt | 1 + official/1.104/packages/d6/template.dof | 10 + official/1.104/packages/d6/template.dpk | 56 + official/1.104/packages/d6/template.dpr | 58 + official/1.104/packages/d6/template.rc | 32 + official/1.104/packages/d7/Jcl.dof | 4 + official/1.104/packages/d7/Jcl.dpk | 126 + official/1.104/packages/d7/Jcl.rc | 32 + official/1.104/packages/d7/Jcl.res | Bin 0 -> 856 bytes official/1.104/packages/d7/JclBaseExpert.dof | 4 + official/1.104/packages/d7/JclBaseExpert.dpk | 57 + official/1.104/packages/d7/JclBaseExpert.rc | 32 + official/1.104/packages/d7/JclBaseExpert.res | Bin 0 -> 940 bytes official/1.104/packages/d7/JclContainers.dof | 4 + official/1.104/packages/d7/JclContainers.dpk | 60 + official/1.104/packages/d7/JclContainers.rc | 32 + official/1.104/packages/d7/JclContainers.res | Bin 0 -> 912 bytes official/1.104/packages/d7/JclDebugExpert.dof | 4 + official/1.104/packages/d7/JclDebugExpert.dpk | 52 + official/1.104/packages/d7/JclDebugExpert.rc | 32 + official/1.104/packages/d7/JclDebugExpert.res | Bin 0 -> 892 bytes .../1.104/packages/d7/JclDebugExpertDLL.RES | Bin 0 -> 900 bytes .../1.104/packages/d7/JclDebugExpertDLL.dof | 8 + .../1.104/packages/d7/JclDebugExpertDLL.dpr | 47 + .../1.104/packages/d7/JclDebugExpertDLL.rc | 32 + .../packages/d7/JclFavoriteFoldersExpert.dof | 4 + .../packages/d7/JclFavoriteFoldersExpert.dpk | 51 + .../packages/d7/JclFavoriteFoldersExpert.rc | 32 + .../packages/d7/JclFavoriteFoldersExpert.res | Bin 0 -> 988 bytes .../d7/JclFavoriteFoldersExpertDLL.RES | Bin 0 -> 996 bytes .../d7/JclFavoriteFoldersExpertDLL.dof | 8 + .../d7/JclFavoriteFoldersExpertDLL.dpr | 46 + .../d7/JclFavoriteFoldersExpertDLL.rc | 32 + .../packages/d7/JclProjectAnalysisExpert.RES | Bin 0 -> 928 bytes .../packages/d7/JclProjectAnalysisExpert.dof | 4 + .../packages/d7/JclProjectAnalysisExpert.dpk | 51 + .../packages/d7/JclProjectAnalysisExpert.rc | 32 + .../d7/JclProjectAnalysisExpertDLL.RES | Bin 0 -> 936 bytes .../d7/JclProjectAnalysisExpertDLL.dof | 8 + .../d7/JclProjectAnalysisExpertDLL.dpr | 46 + .../d7/JclProjectAnalysisExpertDLL.rc | 32 + .../1.104/packages/d7/JclRepositoryExpert.dof | 4 + .../1.104/packages/d7/JclRepositoryExpert.dpk | 59 + .../1.104/packages/d7/JclRepositoryExpert.rc | 32 + .../1.104/packages/d7/JclRepositoryExpert.res | Bin 0 -> 944 bytes .../packages/d7/JclRepositoryExpertDLL.dof | 8 + .../packages/d7/JclRepositoryExpertDLL.dpr | 54 + .../packages/d7/JclRepositoryExpertDLL.rc | 32 + .../packages/d7/JclRepositoryExpertDLL.res | Bin 0 -> 960 bytes .../1.104/packages/d7/JclSIMDViewExpert.dof | 4 + .../1.104/packages/d7/JclSIMDViewExpert.dpk | 54 + .../1.104/packages/d7/JclSIMDViewExpert.rc | 32 + .../1.104/packages/d7/JclSIMDViewExpert.res | Bin 0 -> 920 bytes .../packages/d7/JclSIMDViewExpertDLL.RES | Bin 0 -> 936 bytes .../packages/d7/JclSIMDViewExpertDLL.dof | 8 + .../packages/d7/JclSIMDViewExpertDLL.dpr | 49 + .../1.104/packages/d7/JclSIMDViewExpertDLL.rc | 32 + official/1.104/packages/d7/JclUsesExpert.dof | 4 + official/1.104/packages/d7/JclUsesExpert.dpk | 53 + official/1.104/packages/d7/JclUsesExpert.rc | 32 + official/1.104/packages/d7/JclUsesExpert.res | Bin 0 -> 868 bytes .../1.104/packages/d7/JclUsesExpertDLL.RES | Bin 0 -> 884 bytes .../1.104/packages/d7/JclUsesExpertDLL.dof | 8 + .../1.104/packages/d7/JclUsesExpertDLL.dpr | 48 + .../1.104/packages/d7/JclUsesExpertDLL.rc | 32 + official/1.104/packages/d7/JclVClx.dof | 4 + official/1.104/packages/d7/JclVClx.dpk | 49 + official/1.104/packages/d7/JclVClx.rc | 32 + official/1.104/packages/d7/JclVClx.res | Bin 0 -> 884 bytes official/1.104/packages/d7/JclVcl.dof | 4 + official/1.104/packages/d7/JclVcl.dpk | 55 + official/1.104/packages/d7/JclVcl.rc | 32 + official/1.104/packages/d7/JclVcl.res | Bin 0 -> 872 bytes .../packages/d7/JclVersionControlExpert.dof | 4 + .../packages/d7/JclVersionControlExpert.dpk | 52 + .../packages/d7/JclVersionControlExpert.rc | 32 + .../packages/d7/JclVersionControlExpert.res | Bin 0 -> 984 bytes .../d7/JclVersionControlExpertDLL.dof | 8 + .../d7/JclVersionControlExpertDLL.dpr | 46 + .../packages/d7/JclVersionControlExpertDLL.rc | 32 + .../d7/JclVersionControlExpertDLL.res | Bin 0 -> 1000 bytes official/1.104/packages/d7/dirinfo.txt | 1 + official/1.104/packages/d7/template.dof | 10 + official/1.104/packages/d7/template.dpk | 56 + official/1.104/packages/d7/template.dpr | 58 + official/1.104/packages/d7/template.rc | 32 + official/1.104/packages/d8/Jcl.RES | Bin 0 -> 856 bytes official/1.104/packages/d8/Jcl.bdsproj | 174 + official/1.104/packages/d8/Jcl.dpk | 126 + official/1.104/packages/d8/Jcl.rc | 32 + official/1.104/packages/d8/JclBaseExpert.RES | Bin 0 -> 940 bytes .../1.104/packages/d8/JclBaseExpert.bdsproj | 174 + official/1.104/packages/d8/JclBaseExpert.dpk | 57 + official/1.104/packages/d8/JclBaseExpert.rc | 32 + .../1.104/packages/d8/JclContainers.bdsproj | 174 + official/1.104/packages/d8/JclContainers.dpk | 60 + official/1.104/packages/d8/JclContainers.rc | 32 + official/1.104/packages/d8/JclContainers.res | Bin 0 -> 912 bytes .../d8/JclFavoriteFoldersExpertDLL.RES | Bin 0 -> 996 bytes .../d8/JclFavoriteFoldersExpertDLL.bdsproj | 174 + .../d8/JclFavoriteFoldersExpertDLL.dpr | 46 + .../d8/JclFavoriteFoldersExpertDLL.rc | 32 + .../d8/JclVersionControlExpertDLL.bdsproj | 174 + .../d8/JclVersionControlExpertDLL.dpr | 46 + .../packages/d8/JclVersionControlExpertDLL.rc | 32 + .../d8/JclVersionControlExpertDLL.res | Bin 0 -> 1000 bytes official/1.104/packages/d8/template.bdsproj | 174 + official/1.104/packages/d8/template.dpk | 56 + official/1.104/packages/d8/template.dpr | 60 + official/1.104/packages/d8/template.rc | 32 + .../1.104/packages/d9.net/Jedi.Jcl.bdsproj | 207 + official/1.104/packages/d9.net/Jedi.Jcl.dpk | 90 + .../d9.net/Jedi.JclContainers.bdsproj | 199 + .../packages/d9.net/Jedi.JclContainers.dpk | 82 + .../1.104/packages/d9.net/template.bdsproj | 188 + official/1.104/packages/d9.net/template.dpk | 77 + official/1.104/packages/d9/Jcl.RES | Bin 0 -> 856 bytes official/1.104/packages/d9/Jcl.bdsproj | 174 + official/1.104/packages/d9/Jcl.dpk | 126 + official/1.104/packages/d9/Jcl.rc | 32 + .../1.104/packages/d9/JclBaseExpert.bdsproj | 174 + official/1.104/packages/d9/JclBaseExpert.dpk | 57 + official/1.104/packages/d9/JclBaseExpert.rc | 32 + official/1.104/packages/d9/JclBaseExpert.res | Bin 0 -> 940 bytes .../1.104/packages/d9/JclContainers.bdsproj | 174 + official/1.104/packages/d9/JclContainers.dpk | 60 + official/1.104/packages/d9/JclContainers.rc | 32 + official/1.104/packages/d9/JclContainers.res | Bin 0 -> 912 bytes official/1.104/packages/d9/JclDebugExpert.RES | Bin 0 -> 892 bytes .../1.104/packages/d9/JclDebugExpert.bdsproj | 174 + official/1.104/packages/d9/JclDebugExpert.dpk | 52 + official/1.104/packages/d9/JclDebugExpert.rc | 32 + .../1.104/packages/d9/JclDebugExpertDLL.RES | Bin 0 -> 900 bytes .../packages/d9/JclDebugExpertDLL.bdsproj | 174 + .../1.104/packages/d9/JclDebugExpertDLL.dpr | 47 + .../1.104/packages/d9/JclDebugExpertDLL.rc | 32 + .../1.104/packages/d9/JclExperts.bdsgroup | 22 + .../d9/JclFavoriteFoldersExpert.bdsproj | 174 + .../packages/d9/JclFavoriteFoldersExpert.dpk | 51 + .../packages/d9/JclFavoriteFoldersExpert.rc | 32 + .../packages/d9/JclFavoriteFoldersExpert.res | Bin 0 -> 988 bytes .../d9/JclFavoriteFoldersExpertDLL.RES | Bin 0 -> 996 bytes .../d9/JclFavoriteFoldersExpertDLL.bdsproj | 174 + .../d9/JclFavoriteFoldersExpertDLL.dpr | 46 + .../d9/JclFavoriteFoldersExpertDLL.rc | 32 + .../packages/d9/JclProjectAnalysisExpert.RES | Bin 0 -> 928 bytes .../d9/JclProjectAnalysisExpert.bdsproj | 174 + .../packages/d9/JclProjectAnalysisExpert.dpk | 51 + .../packages/d9/JclProjectAnalysisExpert.rc | 32 + .../d9/JclProjectAnalysisExpertDLL.RES | Bin 0 -> 936 bytes .../d9/JclProjectAnalysisExpertDLL.bdsproj | 174 + .../d9/JclProjectAnalysisExpertDLL.dpr | 46 + .../d9/JclProjectAnalysisExpertDLL.rc | 32 + .../packages/d9/JclRepositoryExpert.bdsproj | 174 + .../1.104/packages/d9/JclRepositoryExpert.dpk | 59 + .../1.104/packages/d9/JclRepositoryExpert.rc | 32 + .../1.104/packages/d9/JclRepositoryExpert.res | Bin 0 -> 944 bytes .../d9/JclRepositoryExpertDLL.bdsproj | 174 + .../packages/d9/JclRepositoryExpertDLL.dpr | 54 + .../packages/d9/JclRepositoryExpertDLL.rc | 32 + .../packages/d9/JclRepositoryExpertDLL.res | Bin 0 -> 960 bytes .../packages/d9/JclSIMDViewExpert.bdsproj | 174 + .../1.104/packages/d9/JclSIMDViewExpert.dpk | 54 + .../1.104/packages/d9/JclSIMDViewExpert.rc | 32 + .../packages/d9/JclSIMDViewExpertDLL.RES | Bin 0 -> 936 bytes .../packages/d9/JclSIMDViewExpertDLL.bdsproj | 174 + .../packages/d9/JclSIMDViewExpertDLL.dpr | 49 + .../1.104/packages/d9/JclSIMDViewExpertDLL.rc | 32 + .../1.104/packages/d9/JclSimdViewExpert.RES | Bin 0 -> 920 bytes official/1.104/packages/d9/JclVcl.RES | Bin 0 -> 872 bytes official/1.104/packages/d9/JclVcl.bdsproj | 174 + official/1.104/packages/d9/JclVcl.dpk | 55 + official/1.104/packages/d9/JclVcl.rc | 32 + .../d9/JclVersionControlExpert.bdsproj | 174 + .../packages/d9/JclVersionControlExpert.dpk | 52 + .../packages/d9/JclVersionControlExpert.rc | 32 + .../packages/d9/JclVersionControlExpert.res | Bin 0 -> 984 bytes .../d9/JclVersionControlExpertDLL.bdsproj | 174 + .../d9/JclVersionControlExpertDLL.dpr | 46 + .../packages/d9/JclVersionControlExpertDLL.rc | 32 + .../d9/JclVersionControlExpertDLL.res | Bin 0 -> 1000 bytes official/1.104/packages/d9/template.bdsproj | 174 + official/1.104/packages/d9/template.dpk | 56 + official/1.104/packages/d9/template.dpr | 58 + official/1.104/packages/d9/template.rc | 32 + official/1.104/packages/dirinfo.txt | 12 + official/1.104/packages/k3/Jcl.bpf | 5 + official/1.104/packages/k3/Jcl.bpk | 172 + official/1.104/packages/k3/Jcl.dpk | 92 + official/1.104/packages/k3/Jcl.kof | 3 + official/1.104/packages/k3/Jcl.rc | 32 + official/1.104/packages/k3/Jcl.res | Bin 0 -> 876 bytes official/1.104/packages/k3/JclContainers.bpf | 5 + official/1.104/packages/k3/JclContainers.bpk | 111 + official/1.104/packages/k3/JclContainers.dpk | 61 + official/1.104/packages/k3/JclContainers.kof | 3 + official/1.104/packages/k3/JclContainers.rc | 32 + official/1.104/packages/k3/JclContainers.res | Bin 0 -> 932 bytes official/1.104/packages/k3/JclVClx.bpf | 5 + official/1.104/packages/k3/JclVClx.bpk | 90 + official/1.104/packages/k3/JclVClx.dpk | 50 + official/1.104/packages/k3/JclVClx.kof | 3 + official/1.104/packages/k3/JclVClx.rc | 32 + official/1.104/packages/k3/JclVClx.res | Bin 0 -> 904 bytes official/1.104/packages/k3/dirinfo.txt | 1 + official/1.104/packages/k3/template.bpf | 5 + official/1.104/packages/k3/template.bpk | 98 + official/1.104/packages/k3/template.dpk | 51 + official/1.104/packages/k3/template.kof | 3 + official/1.104/packages/k3/template.rc | 32 + official/1.104/packages/resources.mak | 201 + official/1.104/packages/xml/Jcl-R.xml | 103 + .../1.104/packages/xml/JclBaseExpert-D.xml | 29 + .../1.104/packages/xml/JclContainers-R.xml | 38 + .../1.104/packages/xml/JclDebugExpert-D.xml | 24 + .../packages/xml/JclDebugExpertDLL-L.xml | 24 + .../xml/JclFavoriteFoldersExpert-D.xml | 23 + .../xml/JclFavoriteFoldersExpertDLL-L.xml | 23 + .../xml/JclProjectAnalysisExpert-D.xml | 23 + .../xml/JclProjectAnalysisExpertDLL-L.xml | 23 + .../packages/xml/JclRepositoryExpert-D.xml | 31 + .../packages/xml/JclRepositoryExpertDLL-L.xml | 31 + .../packages/xml/JclSIMDViewExpert-D.xml | 26 + .../packages/xml/JclSIMDViewExpertDLL-L.xml | 26 + .../packages/xml/JclThreadNameExpert-D.xml | 23 + .../packages/xml/JclThreadNameExpertDLL-L.xml | 23 + .../1.104/packages/xml/JclUsesExpert-D.xml | 25 + .../1.104/packages/xml/JclUsesExpertDLL-L.xml | 25 + official/1.104/packages/xml/JclVClx-R.xml | 19 + official/1.104/packages/xml/JclVcl-R.xml | 28 + .../xml/JclVersionControlExpert-D.xml | 24 + .../xml/JclVersionControlExpertDLL-L.xml | 24 + official/1.104/source/Makefile.fpc | 13 + official/1.104/source/common/Jcl8087.pas | 252 + .../source/common/JclAbstractContainers.pas | 2689 ++ .../1.104/source/common/JclAlgorithms.pas | 2941 ++ .../1.104/source/common/JclAnsiStrings.pas | 4047 ++ .../1.104/source/common/JclArrayLists.pas | 11349 ++++++ official/1.104/source/common/JclArraySets.pas | 2358 ++ official/1.104/source/common/JclBase.pas | 1504 + .../1.104/source/common/JclBinaryTrees.pas | 20063 ++++++++++ .../1.104/source/common/JclBorlandTools.pas | 5730 +++ official/1.104/source/common/JclComplex.pas | 1592 + .../1.104/source/common/JclCompression.pas | 7709 ++++ .../1.104/source/common/JclContainerIntf.pas | 4486 +++ official/1.104/source/common/JclCounter.pas | 242 + official/1.104/source/common/JclDITs-1.92.int | 114 + official/1.104/source/common/JclDateTime.pas | 1509 + official/1.104/source/common/JclEDI.pas | 1686 + official/1.104/source/common/JclEDISEF.pas | 4783 +++ .../1.104/source/common/JclEDITranslators.pas | 430 + official/1.104/source/common/JclEDIXML.pas | 2727 ++ .../1.104/source/common/JclEDI_ANSIX12.pas | 3177 ++ .../source/common/JclEDI_ANSIX12_Ext.pas | 292 + .../1.104/source/common/JclEDI_UNEDIFACT.pas | 2379 ++ .../source/common/JclEDI_UNEDIFACT_Ext.pas | 297 + official/1.104/source/common/JclExprEval.pas | 4386 +++ official/1.104/source/common/JclFileUtils.pas | 7162 ++++ official/1.104/source/common/JclHashMaps.pas | 29553 ++++++++++++++ official/1.104/source/common/JclHashSets.pas | 5470 +++ .../1.104/source/common/JclIniFiles-1.92.int | 55 + official/1.104/source/common/JclIniFiles.pas | 199 + .../1.104/source/common/JclLinkedLists.pas | 15953 ++++++++ official/1.104/source/common/JclLogic.pas | 1954 + official/1.104/source/common/JclMIDI.pas | 818 + official/1.104/source/common/JclMath.pas | 4614 +++ official/1.104/source/common/JclMime.pas | 991 + official/1.104/source/common/JclPCRE.pas | 753 + official/1.104/source/common/JclQueues.pas | 4250 ++ official/1.104/source/common/JclRTTI.pas | 3068 ++ official/1.104/source/common/JclResources.pas | 2085 + official/1.104/source/common/JclSchedule.pas | 1332 + official/1.104/source/common/JclSimpleXml.pas | 3940 ++ .../1.104/source/common/JclSortedMaps.pas | 31527 +++++++++++++++ official/1.104/source/common/JclStacks.pas | 2977 ++ .../1.104/source/common/JclStatistics.pas | 527 + .../1.104/source/common/JclStrHashMap.pas | 893 + official/1.104/source/common/JclStreams.pas | 3173 ++ .../source/common/JclStringConversions.pas | 2529 ++ .../1.104/source/common/JclStringLists.pas | 1508 + official/1.104/source/common/JclStrings.pas | 6370 +++ official/1.104/source/common/JclSynch.pas | 1712 + official/1.104/source/common/JclSysInfo.fpc | 95 + official/1.104/source/common/JclSysInfo.pas | 5609 +++ official/1.104/source/common/JclSysUtils.pas | 3290 ++ official/1.104/source/common/JclTrees.pas | 18125 +++++++++ official/1.104/source/common/JclUnicode.pas | 7547 ++++ official/1.104/source/common/JclUnicode.rc | 4672 +++ official/1.104/source/common/JclUnicode.res | Bin 0 -> 148608 bytes .../1.104/source/common/JclUnicodeBZip2.res | Bin 0 -> 40404 bytes .../1.104/source/common/JclUnicodeBzip2.rc | 1292 + .../1.104/source/common/JclUnicodeZLib.rc | 1266 + .../1.104/source/common/JclUnicodeZLib.res | Bin 0 -> 39584 bytes official/1.104/source/common/JclUnitConv.pas | 1029 + .../1.104/source/common/JclUnitVersioning.pas | 812 + .../common/JclUnitVersioningProviders.pas | 406 + .../1.104/source/common/JclValidation.pas | 192 + official/1.104/source/common/JclVectors.pas | 10538 +++++ .../1.104/source/common/JclWideStrings.pas | 2166 ++ official/1.104/source/common/JclZLib.int | 349 + official/1.104/source/common/bzip2.pas | 501 + official/1.104/source/common/dirinfo.txt | 1 + official/1.104/source/common/pcre.pas | 1127 + official/1.104/source/common/zlibh.pas | 2357 ++ official/1.104/source/fpctest.bat | 14 + official/1.104/source/fpctestunit.bat | 15 + .../1.104/source/include/crossplatform.inc | 35 + official/1.104/source/include/jcl.inc | 347 + .../1.104/source/include/jcl.template.inc | 130 + official/1.104/source/include/jcld12.inc | 130 + official/1.104/source/include/jedi.inc | 1203 + official/1.104/source/include/kylix.inc | 30 + official/1.104/source/include/unixonly.inc | 51 + official/1.104/source/include/windowsonly.inc | 54 + .../1.104/source/prototypes/Hardlinks.pas | 891 + .../1.104/source/prototypes/JclAlgorithms.pas | 949 + .../1.104/source/prototypes/JclArrayLists.pas | 453 + .../1.104/source/prototypes/JclArraySets.pas | 393 + .../source/prototypes/JclBinaryTrees.pas | 483 + .../source/prototypes/JclContainerIntf.pas | 1788 + .../1.104/source/prototypes/JclGraphUtils.pas | 3 + .../1.104/source/prototypes/JclGraphics.pas | 4 + .../1.104/source/prototypes/JclHashMaps.pas | 2798 ++ .../1.104/source/prototypes/JclHashSets.pas | 685 + .../source/prototypes/JclLinkedLists.pas | 475 + .../source/prototypes/JclQGraphUtils.pas | 4 + .../1.104/source/prototypes/JclQGraphics.pas | 4 + .../1.104/source/prototypes/JclQueues.pas | 373 + .../1.104/source/prototypes/JclSortedMaps.pas | 2793 ++ .../1.104/source/prototypes/JclStacks.pas | 362 + official/1.104/source/prototypes/JclTrees.pas | 468 + .../1.104/source/prototypes/JclVectors.pas | 435 + official/1.104/source/prototypes/JclWin32.pas | 284 + official/1.104/source/prototypes/Makefile.mak | 137 + .../1.104/source/prototypes/_GraphUtils.pas | 2657 ++ .../1.104/source/prototypes/_Graphics.pas | 5735 +++ .../prototypes/containers/JclAlgorithms.imp | 168 + .../prototypes/containers/JclAlgorithms.int | 29 + .../prototypes/containers/JclArrayLists.imp | 590 + .../prototypes/containers/JclArrayLists.int | 77 + .../prototypes/containers/JclArraySets.imp | 96 + .../prototypes/containers/JclArraySets.int | 21 + .../prototypes/containers/JclBinaryTrees.imp | 1136 + .../prototypes/containers/JclBinaryTrees.int | 128 + .../containers/JclContainerCommon.imp | 44 + .../containers/JclContainerIntf.int | 211 + .../prototypes/containers/JclHashMaps.imp | 441 + .../prototypes/containers/JclHashMaps.int | 46 + .../prototypes/containers/JclHashSets.imp | 268 + .../prototypes/containers/JclHashSets.int | 56 + .../prototypes/containers/JclLinkedLists.imp | 885 + .../prototypes/containers/JclLinkedLists.int | 80 + .../prototypes/containers/JclQueues.imp | 187 + .../prototypes/containers/JclQueues.int | 26 + .../prototypes/containers/JclSortedMaps.imp | 444 + .../prototypes/containers/JclSortedMaps.int | 44 + .../prototypes/containers/JclStacks.imp | 122 + .../prototypes/containers/JclStacks.int | 23 + .../source/prototypes/containers/JclTrees.imp | 951 + .../source/prototypes/containers/JclTrees.int | 126 + .../prototypes/containers/JclVectors.imp | 529 + .../prototypes/containers/JclVectors.int | 78 + .../supplement/create_JCL_Hardlinks.pas.cmd | 13 + .../create_nonJCL_Hardlinks.pas.cmd | 4 + .../source/prototypes/supplement/simple_pp.pl | 60 + .../source/prototypes/win32api/AclApi.imp | 21 + .../source/prototypes/win32api/AclApi.int | 12 + .../source/prototypes/win32api/BaseTsd.int | 18 + .../source/prototypes/win32api/DelayImp.int | 51 + .../source/prototypes/win32api/ImageHlp.imp | 206 + .../source/prototypes/win32api/ImageHlp.int | 296 + .../source/prototypes/win32api/ImgGuids.int | 9 + .../source/prototypes/win32api/LmAccess.imp | 408 + .../source/prototypes/win32api/LmAccess.int | 466 + .../source/prototypes/win32api/LmApiBuf.imp | 20 + .../source/prototypes/win32api/LmApiBuf.int | 8 + .../source/prototypes/win32api/LmCons.int | 278 + .../source/prototypes/win32api/LmErr.int | 891 + .../source/prototypes/win32api/MsiDefs.int | 12 + .../source/prototypes/win32api/NTDef.int | 27 + .../1.104/source/prototypes/win32api/Nb30.imp | 20 + .../1.104/source/prototypes/win32api/Nb30.int | 430 + .../source/prototypes/win32api/NtSecApi.imp | 77 + .../source/prototypes/win32api/NtSecApi.int | 172 + .../source/prototypes/win32api/ObjBase.imp | 36 + .../source/prototypes/win32api/ObjBase.int | 48 + .../source/prototypes/win32api/PropIdl.int | 135 + .../source/prototypes/win32api/RasDlg.int | 18 + .../source/prototypes/win32api/Reason.int | 125 + .../source/prototypes/win32api/ShlGuid.int | 192 + .../source/prototypes/win32api/ShlObj.int | 44 + .../source/prototypes/win32api/ShlWApi.int | 22 + .../source/prototypes/win32api/WinBase.imp | 170 + .../source/prototypes/win32api/WinBase.int | 146 + .../source/prototypes/win32api/WinDef.int | 9 + .../source/prototypes/win32api/WinError.int | 228 + .../source/prototypes/win32api/WinIoctl.int | 601 + .../source/prototypes/win32api/WinNLS.imp | 46 + .../source/prototypes/win32api/WinNLS.int | 141 + .../source/prototypes/win32api/WinNT.imp | 108 + .../source/prototypes/win32api/WinNT.int | 2680 ++ .../source/prototypes/win32api/WinUser.imp | 26 + .../source/prototypes/win32api/WinUser.int | 106 + .../source/prototypes/win32api/dirinfo.txt | 12 + .../source/prototypes/win32api/powrprof.imp | 58 + .../source/prototypes/win32api/powrprof.int | 8 + official/1.104/source/unix/dirinfo.txt | 1 + official/1.104/source/vcl/JclFont.pas | 118 + official/1.104/source/vcl/JclGraphUtils.pas | 2609 ++ official/1.104/source/vcl/JclGraphics.pas | 5655 +++ official/1.104/source/vcl/JclPrint.pas | 1207 + .../1.104/source/vcl/JclVersionControl.pas | 817 + .../source/vcl/JclVersionCtrlCVSImpl.pas | 325 + .../source/vcl/JclVersionCtrlSVNImpl.pas | 369 + official/1.104/source/vcl/dirinfo.txt | 1 + .../1.104/source/visclx/JclQGraphUtils.pas | 2532 ++ official/1.104/source/visclx/JclQGraphics.pas | 1513 + official/1.104/source/visclx/dirinfo.txt | 1 + official/1.104/source/windows/Hardlinks.pas | 683 + official/1.104/source/windows/JclAppInst.pas | 639 + official/1.104/source/windows/JclCIL.pas | 1031 + official/1.104/source/windows/JclCLR.pas | 1780 + official/1.104/source/windows/JclCOM.pas | 676 + .../source/windows/JclCommCtrlAdmin.manifest | 28 + .../1.104/source/windows/JclCommCtrlAdmin.rc | 7 + .../1.104/source/windows/JclCommCtrlAdmin.res | Bin 0 -> 920 bytes .../windows/JclCommCtrlAsInvoker.manifest | 28 + .../source/windows/JclCommCtrlAsInvoker.rc | 7 + .../source/windows/JclCommCtrlAsInvoker.res | Bin 0 -> 908 bytes official/1.104/source/windows/JclConsole.pas | 1570 + official/1.104/source/windows/JclDebug.pas | 5282 +++ official/1.104/source/windows/JclDotNet.pas | 1266 + .../1.104/source/windows/JclHookExcept.pas | 648 + official/1.104/source/windows/JclLANMan.pas | 459 + official/1.104/source/windows/JclLocales.pas | 1028 + official/1.104/source/windows/JclMapi.pas | 1413 + official/1.104/source/windows/JclMetadata.pas | 4836 +++ official/1.104/source/windows/JclMiscel.pas | 518 + official/1.104/source/windows/JclMsdosSys.pas | 653 + .../1.104/source/windows/JclMultimedia.pas | 1369 + official/1.104/source/windows/JclNTFS.pas | 2307 ++ .../source/windows/JclNoDepAdmin.manifest | 17 + .../1.104/source/windows/JclNoDepAdmin.rc | 7 + .../1.104/source/windows/JclNoDepAdmin.res | Bin 0 -> 608 bytes .../source/windows/JclNoDepAsInvoker.manifest | 17 + .../1.104/source/windows/JclNoDepAsInvoker.rc | 7 + .../source/windows/JclNoDepAsInvoker.res | Bin 0 -> 596 bytes official/1.104/source/windows/JclPeImage.pas | 6632 ++++ official/1.104/source/windows/JclRegistry.pas | 1977 + official/1.104/source/windows/JclSecurity.pas | 696 + official/1.104/source/windows/JclShell.pas | 1548 + .../1.104/source/windows/JclStructStorage.pas | 795 + official/1.104/source/windows/JclSvcCtrl.pas | 1473 + official/1.104/source/windows/JclTD32.pas | 1702 + official/1.104/source/windows/JclTask.pas | 924 + .../1.104/source/windows/JclWideFormat.pas | 916 + official/1.104/source/windows/JclWin32.pas | 8524 ++++ official/1.104/source/windows/JclWin32Ex.pas | 401 + official/1.104/source/windows/JclWinMIDI.pas | 298 + .../source/windows/MSHelpServices_TLB.pas | 1629 + official/1.104/source/windows/MSTask.pas | 656 + official/1.104/source/windows/Snmp.pas | 899 + official/1.104/source/windows/dirinfo.txt | 1 + official/1.104/source/windows/mscoree_TLB.pas | 447 + .../1.104/source/windows/mscorlib_TLB.pas | 32333 ++++++++++++++++ .../source/windows/obj/bzip2/blocksort.obj | Bin 0 -> 12448 bytes .../1.104/source/windows/obj/bzip2/bzlib.obj | Bin 0 -> 13002 bytes .../source/windows/obj/bzip2/compress.obj | Bin 0 -> 14762 bytes .../source/windows/obj/bzip2/crctable.obj | Bin 0 -> 6446 bytes .../source/windows/obj/bzip2/decompress.obj | Bin 0 -> 16733 bytes .../source/windows/obj/bzip2/dirinfo.txt | 1 + .../source/windows/obj/bzip2/huffman.obj | Bin 0 -> 6912 bytes .../source/windows/obj/bzip2/makefile.mak | 106 + .../source/windows/obj/bzip2/randtable.obj | Bin 0 -> 7475 bytes official/1.104/source/windows/obj/dirinfo.txt | 1 + .../1.104/source/windows/obj/pcre/dirinfo.txt | 1 + .../source/windows/obj/pcre/makefile.mak | 130 + .../source/windows/obj/pcre/pcre_compile.obj | Bin 0 -> 34129 bytes .../source/windows/obj/pcre/pcre_config.obj | Bin 0 -> 1958 bytes .../windows/obj/pcre/pcre_default_tables.obj | Bin 0 -> 2845 bytes .../source/windows/obj/pcre/pcre_dfa_exec.obj | Bin 0 -> 26093 bytes .../source/windows/obj/pcre/pcre_exec.obj | Bin 0 -> 40959 bytes .../source/windows/obj/pcre/pcre_fullinfo.obj | Bin 0 -> 2372 bytes .../source/windows/obj/pcre/pcre_get.obj | Bin 0 -> 3783 bytes .../source/windows/obj/pcre/pcre_globals.obj | Bin 0 -> 2044 bytes .../source/windows/obj/pcre/pcre_info.obj | Bin 0 -> 1922 bytes .../windows/obj/pcre/pcre_maketables.obj | Bin 0 -> 2777 bytes .../source/windows/obj/pcre/pcre_newline.obj | Bin 0 -> 2620 bytes .../source/windows/obj/pcre/pcre_ord2utf8.obj | Bin 0 -> 1934 bytes .../source/windows/obj/pcre/pcre_refcount.obj | Bin 0 -> 1861 bytes .../source/windows/obj/pcre/pcre_study.obj | Bin 0 -> 4171 bytes .../source/windows/obj/pcre/pcre_tables.obj | Bin 0 -> 3541 bytes .../windows/obj/pcre/pcre_try_flipped.obj | Bin 0 -> 2162 bytes .../windows/obj/pcre/pcre_ucp_searchfuncs.obj | Bin 0 -> 27228 bytes .../windows/obj/pcre/pcre_valid_utf8.obj | Bin 0 -> 2107 bytes .../source/windows/obj/pcre/pcre_version.obj | Bin 0 -> 1869 bytes .../source/windows/obj/pcre/pcre_xclass.obj | Bin 0 -> 2596 bytes .../1.104/source/windows/obj/zlib/adler32.obj | Bin 0 -> 1132 bytes .../source/windows/obj/zlib/compress.obj | Bin 0 -> 658 bytes .../1.104/source/windows/obj/zlib/crc32.obj | Bin 0 -> 12172 bytes .../1.104/source/windows/obj/zlib/deflate.obj | Bin 0 -> 10101 bytes .../1.104/source/windows/obj/zlib/dirinfo.txt | 1 + .../1.104/source/windows/obj/zlib/gzio.obj | Bin 0 -> 6330 bytes .../1.104/source/windows/obj/zlib/infback.obj | Bin 0 -> 8101 bytes .../1.104/source/windows/obj/zlib/inffast.obj | Bin 0 -> 2664 bytes .../1.104/source/windows/obj/zlib/inflate.obj | Bin 0 -> 11884 bytes .../source/windows/obj/zlib/inftrees.obj | Bin 0 -> 2700 bytes .../source/windows/obj/zlib/makefile.mak | 109 + .../1.104/source/windows/obj/zlib/trees.obj | Bin 0 -> 12141 bytes .../1.104/source/windows/obj/zlib/uncompr.obj | Bin 0 -> 596 bytes .../1.104/source/windows/obj/zlib/zutil.obj | Bin 0 -> 1673 bytes official/1.104/source/windows/sevenzip.pas | 693 + 2167 files changed, 573926 insertions(+) create mode 100644 official/1.104/Install multiple profiles.bat create mode 100644 official/1.104/Install turbo delphi.bat create mode 100644 official/1.104/Install.bat create mode 100644 official/1.104/Install.txt create mode 100644 official/1.104/LICENSE-BZIP2.txt create mode 100644 official/1.104/LICENSE-DRYICONS.txt create mode 100644 official/1.104/LICENSE-PCRE.txt create mode 100644 official/1.104/LICENSE-SEVENZIP.txt create mode 100644 official/1.104/LICENSE-ZLIB.txt create mode 100644 official/1.104/LICENSE.txt create mode 100644 official/1.104/bin/JCL-install.ini create mode 100644 official/1.104/bin/JediInstaller.exe create mode 100644 official/1.104/bin/RAD Studio 2009.log create mode 100644 official/1.104/bin/dirinfo.txt create mode 100644 official/1.104/clean.bat create mode 100644 official/1.104/clean.sh create mode 100644 official/1.104/devtools/included_files.bat create mode 100644 official/1.104/devtools/included_files.sh create mode 100644 official/1.104/devtools/jpp create mode 100644 official/1.104/devtools/jpp.exe create mode 100644 official/1.104/devtools/pgEdit.exe create mode 100644 official/1.104/devtools/pgEdit.xml create mode 100644 official/1.104/docs/Contacting authors.html create mode 100644 official/1.104/docs/Contributors.html create mode 100644 official/1.104/docs/Contributors.txt create mode 100644 official/1.104/docs/Experts.html create mode 100644 official/1.104/docs/MPL FAQ.html create mode 100644 official/1.104/docs/MPL-1.1.txt create mode 100644 official/1.104/docs/Readme.html create mode 100644 official/1.104/docs/Readme.txt create mode 100644 official/1.104/docs/ThreadSafe.txt create mode 100644 official/1.104/docs/cps.html create mode 100644 official/1.104/docs/cps_files/strucv1.jpg create mode 100644 official/1.104/docs/cps_files/test.css create mode 100644 official/1.104/docs/styles/default.css create mode 100644 official/1.104/examples/C10.exc create mode 100644 official/1.104/examples/C5.exc create mode 100644 official/1.104/examples/C6.exc create mode 100644 official/1.104/examples/D10.exc create mode 100644 official/1.104/examples/D11.exc create mode 100644 official/1.104/examples/D5.exc create mode 100644 official/1.104/examples/D6.exc create mode 100644 official/1.104/examples/D7.exc create mode 100644 official/1.104/examples/D9.exc create mode 100644 official/1.104/examples/ExtraRequirements.exc create mode 100644 official/1.104/examples/JclDebugExamples.bdsgroup create mode 100644 official/1.104/examples/JclDebugExamples.bpg create mode 100644 official/1.104/examples/common/containers/algorithms/AlgorithmsExample.dof create mode 100644 official/1.104/examples/common/containers/algorithms/AlgorithmsExample.dpr create mode 100644 official/1.104/examples/common/containers/algorithms/AlgorithmsExample.res create mode 100644 official/1.104/examples/common/containers/algorithms/AlgorithmsExampleMain.dfm create mode 100644 official/1.104/examples/common/containers/algorithms/AlgorithmsExampleMain.pas create mode 100644 official/1.104/examples/common/containers/hashing/HashingExample.dof create mode 100644 official/1.104/examples/common/containers/hashing/HashingExample.dpr create mode 100644 official/1.104/examples/common/containers/hashing/HashingExample.res create mode 100644 official/1.104/examples/common/containers/hashing/HashingExampleMain.dfm create mode 100644 official/1.104/examples/common/containers/hashing/HashingExampleMain.pas create mode 100644 official/1.104/examples/common/containers/lists/ListExample.dof create mode 100644 official/1.104/examples/common/containers/lists/ListExample.dpr create mode 100644 official/1.104/examples/common/containers/lists/ListExample.res create mode 100644 official/1.104/examples/common/containers/lists/ListExampleMain.dfm create mode 100644 official/1.104/examples/common/containers/lists/ListExampleMain.pas create mode 100644 official/1.104/examples/common/containers/lists/MyObjectList.pas create mode 100644 official/1.104/examples/common/containers/performance/ContainerPerformance.dof create mode 100644 official/1.104/examples/common/containers/performance/ContainerPerformance.dpr create mode 100644 official/1.104/examples/common/containers/performance/ContainerPerformance.res create mode 100644 official/1.104/examples/common/containers/performance/ContainerPerformanceMain.dfm create mode 100644 official/1.104/examples/common/containers/performance/ContainerPerformanceMain.pas create mode 100644 official/1.104/examples/common/containers/performance/ContainerPerformanceTests.pas create mode 100644 official/1.104/examples/common/containers/trees/TreeExample.dof create mode 100644 official/1.104/examples/common/containers/trees/TreeExample.dpr create mode 100644 official/1.104/examples/common/containers/trees/TreeExample.res create mode 100644 official/1.104/examples/common/containers/trees/TreeExampleMain.dfm create mode 100644 official/1.104/examples/common/containers/trees/TreeExampleMain.pas create mode 100644 official/1.104/examples/common/containers/trees/TreeStructure.dof create mode 100644 official/1.104/examples/common/containers/trees/TreeStructure.dpr create mode 100644 official/1.104/examples/common/containers/trees/TreeStructure.res create mode 100644 official/1.104/examples/common/containers/trees/TreeStructureMain.dfm create mode 100644 official/1.104/examples/common/containers/trees/TreeStructureMain.pas create mode 100644 official/1.104/examples/common/expreval/ExprEvalExample.dof create mode 100644 official/1.104/examples/common/expreval/ExprEvalExample.dpr create mode 100644 official/1.104/examples/common/expreval/ExprEvalExample.res create mode 100644 official/1.104/examples/common/expreval/ExprEvalExampleLogic.pas create mode 100644 official/1.104/examples/common/expreval/ExprEvalExampleMain.dfm create mode 100644 official/1.104/examples/common/expreval/ExprEvalExampleMain.pas create mode 100644 official/1.104/examples/common/filesearch/FileSearchDemo.dof create mode 100644 official/1.104/examples/common/filesearch/FileSearchDemo.dpr create mode 100644 official/1.104/examples/common/filesearch/FileSearchDemo.res create mode 100644 official/1.104/examples/common/filesearch/FileSearchDemoMain.dfm create mode 100644 official/1.104/examples/common/filesearch/FileSearchDemoMain.pas create mode 100644 official/1.104/examples/common/graphics/ClipLineDemo.dof create mode 100644 official/1.104/examples/common/graphics/ClipLineDemo.dpr create mode 100644 official/1.104/examples/common/graphics/ClipLineDemo.res create mode 100644 official/1.104/examples/common/graphics/ClipLineDemoMain.dfm create mode 100644 official/1.104/examples/common/graphics/ClipLineDemoMain.pas create mode 100644 official/1.104/examples/common/graphics/StretchGraphicDemoMain.dfm create mode 100644 official/1.104/examples/common/graphics/StretchGraphicDemoMain.pas create mode 100644 official/1.104/examples/common/graphics/StretchGraphicExample.dof create mode 100644 official/1.104/examples/common/graphics/StretchGraphicExample.dpr create mode 100644 official/1.104/examples/common/graphics/StretchGraphicExample.res create mode 100644 official/1.104/examples/common/multimedia/MidiOutExample.dof create mode 100644 official/1.104/examples/common/multimedia/MidiOutExample.dpr create mode 100644 official/1.104/examples/common/multimedia/MidiOutExample.res create mode 100644 official/1.104/examples/common/multimedia/MidiOutExampleMain.dfm create mode 100644 official/1.104/examples/common/multimedia/MidiOutExampleMain.pas create mode 100644 official/1.104/examples/common/multimedia/MidiOutExampleTuningDlg.dfm create mode 100644 official/1.104/examples/common/multimedia/MidiOutExampleTuningDlg.pas create mode 100644 official/1.104/examples/common/numformat/NumFormatExample.dof create mode 100644 official/1.104/examples/common/numformat/NumFormatExample.dpr create mode 100644 official/1.104/examples/common/numformat/NumFormatExample.res create mode 100644 official/1.104/examples/common/numformat/NumFormatExampleMain.dfm create mode 100644 official/1.104/examples/common/numformat/NumFormatExampleMain.pas create mode 100644 official/1.104/examples/common/pcre/PCREDemo.dof create mode 100644 official/1.104/examples/common/pcre/PCREDemo.dpr create mode 100644 official/1.104/examples/common/pcre/PCREDemo.res create mode 100644 official/1.104/examples/common/pcre/PCREDemoMain.dfm create mode 100644 official/1.104/examples/common/pcre/PCREDemoMain.pas create mode 100644 official/1.104/examples/common/rtti/RTTIDemoMain.dfm create mode 100644 official/1.104/examples/common/rtti/RTTIDemoMain.pas create mode 100644 official/1.104/examples/common/rtti/RTTIExample.dof create mode 100644 official/1.104/examples/common/rtti/RTTIExample.dpr create mode 100644 official/1.104/examples/common/rtti/RTTIExample.res create mode 100644 official/1.104/examples/common/sysinfo/EnvironmentExample.dof create mode 100644 official/1.104/examples/common/sysinfo/EnvironmentExample.dpr create mode 100644 official/1.104/examples/common/sysinfo/EnvironmentExample.res create mode 100644 official/1.104/examples/common/sysinfo/EnvironmentExampleMain.dfm create mode 100644 official/1.104/examples/common/sysinfo/EnvironmentExampleMain.pas create mode 100644 official/1.104/examples/common/textconverter/TextConverter.dof create mode 100644 official/1.104/examples/common/textconverter/TextConverter.dpr create mode 100644 official/1.104/examples/common/textconverter/TextConverter.res create mode 100644 official/1.104/examples/common/textconverter/TextConverterMain.dfm create mode 100644 official/1.104/examples/common/textconverter/TextConverterMain.pas create mode 100644 official/1.104/examples/common/textreader/TextReaderDemoMain.dfm create mode 100644 official/1.104/examples/common/textreader/TextReaderDemoMain.pas create mode 100644 official/1.104/examples/common/textreader/TextReaderExample.dof create mode 100644 official/1.104/examples/common/textreader/TextReaderExample.dpr create mode 100644 official/1.104/examples/common/textreader/TextReaderExample.res create mode 100644 official/1.104/examples/common/unitversioning/UnitVersioningTest.dof create mode 100644 official/1.104/examples/common/unitversioning/UnitVersioningTest.dpr create mode 100644 official/1.104/examples/common/unitversioning/UnitVersioningTest.res create mode 100644 official/1.104/examples/common/unitversioning/UnitVersioningTestDLL.dof create mode 100644 official/1.104/examples/common/unitversioning/UnitVersioningTestDLL.dpr create mode 100644 official/1.104/examples/common/unitversioning/UnitVersioningTestMain.dfm create mode 100644 official/1.104/examples/common/unitversioning/UnitVersioningTestMain.pas create mode 100644 official/1.104/examples/dotnet/JCLNetDemo/AssemblyInfo.cs create mode 100644 official/1.104/examples/dotnet/JCLNetDemo/JCLNet.FrmMain.resources create mode 100644 official/1.104/examples/dotnet/JCLNetDemo/JCLNet.WinForm.resources create mode 100644 official/1.104/examples/dotnet/JCLNetDemo/JCLNet.bdsproj create mode 100644 official/1.104/examples/dotnet/JCLNetDemo/WinForm.cs create mode 100644 official/1.104/examples/dotnet/JCLNetDemo/WinForm.resx create mode 100644 official/1.104/examples/windows/ConsoleExamples.dof create mode 100644 official/1.104/examples/windows/ConsoleExamples.dpr create mode 100644 official/1.104/examples/windows/appinst/AppInstDemoMain.dfm create mode 100644 official/1.104/examples/windows/appinst/AppInstDemoMain.pas create mode 100644 official/1.104/examples/windows/appinst/AppInstExample.dof create mode 100644 official/1.104/examples/windows/appinst/AppInstExample.dpr create mode 100644 official/1.104/examples/windows/appinst/AppInstExample.res create mode 100644 official/1.104/examples/windows/appinst/SingleInstDemoMain.dfm create mode 100644 official/1.104/examples/windows/appinst/SingleInstDemoMain.pas create mode 100644 official/1.104/examples/windows/appinst/SingleInstExample.dof create mode 100644 official/1.104/examples/windows/appinst/SingleInstExample.dpr create mode 100644 official/1.104/examples/windows/appinst/SingleInstExample.res create mode 100644 official/1.104/examples/windows/asuser/CreateProcAsUserDemoMain.dfm create mode 100644 official/1.104/examples/windows/asuser/CreateProcAsUserDemoMain.pas create mode 100644 official/1.104/examples/windows/asuser/CreateProcAsUserExample.dof create mode 100644 official/1.104/examples/windows/asuser/CreateProcAsUserExample.dpr create mode 100644 official/1.104/examples/windows/asuser/CreateProcAsUserExample.res create mode 100644 official/1.104/examples/windows/clr/ClrDemo.dof create mode 100644 official/1.104/examples/windows/clr/ClrDemo.dpr create mode 100644 official/1.104/examples/windows/clr/ClrDemo.res create mode 100644 official/1.104/examples/windows/clr/ClrDemoAbstractFrame.dfm create mode 100644 official/1.104/examples/windows/clr/ClrDemoAbstractFrame.pas create mode 100644 official/1.104/examples/windows/clr/ClrDemoBlobForm.dfm create mode 100644 official/1.104/examples/windows/clr/ClrDemoBlobForm.pas create mode 100644 official/1.104/examples/windows/clr/ClrDemoCLRFrame.dfm create mode 100644 official/1.104/examples/windows/clr/ClrDemoCLRFrame.pas create mode 100644 official/1.104/examples/windows/clr/ClrDemoGuidForm.dfm create mode 100644 official/1.104/examples/windows/clr/ClrDemoGuidForm.pas create mode 100644 official/1.104/examples/windows/clr/ClrDemoMain.dfm create mode 100644 official/1.104/examples/windows/clr/ClrDemoMain.pas create mode 100644 official/1.104/examples/windows/clr/ClrDemoMetaDataFrame.dfm create mode 100644 official/1.104/examples/windows/clr/ClrDemoMetaDataFrame.pas create mode 100644 official/1.104/examples/windows/clr/ClrDemoStringsForm.dfm create mode 100644 official/1.104/examples/windows/clr/ClrDemoStringsForm.pas create mode 100644 official/1.104/examples/windows/clr/ClrDemoTableForm.dfm create mode 100644 official/1.104/examples/windows/clr/ClrDemoTableForm.pas create mode 100644 official/1.104/examples/windows/clr/ClrDemoUserStringsForm.dfm create mode 100644 official/1.104/examples/windows/clr/ClrDemoUserStringsForm.pas create mode 100644 official/1.104/examples/windows/compression/archive/ArchiveDemo.dof create mode 100644 official/1.104/examples/windows/compression/archive/ArchiveDemo.dpr create mode 100644 official/1.104/examples/windows/compression/archive/ArchiveDemo.res create mode 100644 official/1.104/examples/windows/compression/archive/UMain.dfm create mode 100644 official/1.104/examples/windows/compression/archive/UMain.pas create mode 100644 official/1.104/examples/windows/compression/archive/UProperties.dfm create mode 100644 official/1.104/examples/windows/compression/archive/UProperties.pas create mode 100644 official/1.104/examples/windows/debug/framestrack/FramesTrackDemoMain.dfm create mode 100644 official/1.104/examples/windows/debug/framestrack/FramesTrackDemoMain.pas create mode 100644 official/1.104/examples/windows/debug/framestrack/FramesTrackExample.dof create mode 100644 official/1.104/examples/windows/debug/framestrack/FramesTrackExample.dpr create mode 100644 official/1.104/examples/windows/debug/framestrack/FramesTrackExample.res create mode 100644 official/1.104/examples/windows/debug/reportconverter/ExceptionReportConverter.dpr create mode 100644 official/1.104/examples/windows/debug/reportconverter/ExceptionReportConverter.res create mode 100644 official/1.104/examples/windows/debug/reportconverter/formConverter.dfm create mode 100644 official/1.104/examples/windows/debug/reportconverter/formConverter.pas create mode 100644 official/1.104/examples/windows/debug/sourceloc/SourceLocDemoMain.dfm create mode 100644 official/1.104/examples/windows/debug/sourceloc/SourceLocDemoMain.pas create mode 100644 official/1.104/examples/windows/debug/sourceloc/SourceLocExample.dof create mode 100644 official/1.104/examples/windows/debug/sourceloc/SourceLocExample.dpr create mode 100644 official/1.104/examples/windows/debug/sourceloc/SourceLocExample.res create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.bdsproj create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.dof create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.dpr create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.res create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.tlb create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary_TLB.pas create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComUnit.pas create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDemoMain.dfm create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDemoMain.pas create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.bdsproj create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.dof create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.dpr create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.res create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicUnit.pas create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.bdsproj create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.dof create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.dpr create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.res create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.bdsproj create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.dof create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.dpr create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.res create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticUnit.pas create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDemoMain.dfm create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackDemoMain.pas create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackExample.bdsproj create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackExample.dof create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackExample.dpr create mode 100644 official/1.104/examples/windows/debug/stacktrack/StackTrackExample.res create mode 100644 official/1.104/examples/windows/debug/threadexcept/ThreadExceptDemoMain.dfm create mode 100644 official/1.104/examples/windows/debug/threadexcept/ThreadExceptDemoMain.pas create mode 100644 official/1.104/examples/windows/debug/threadexcept/ThreadExceptExample.dof create mode 100644 official/1.104/examples/windows/debug/threadexcept/ThreadExceptExample.dpr create mode 100644 official/1.104/examples/windows/debug/threadexcept/ThreadExceptExample.res create mode 100644 official/1.104/examples/windows/delphitools/DelphiToolsGroup.bpg create mode 100644 official/1.104/examples/windows/delphitools/Readme.txt create mode 100644 official/1.104/examples/windows/delphitools/common/About.dfm create mode 100644 official/1.104/examples/windows/delphitools/common/About.pas create mode 100644 official/1.104/examples/windows/delphitools/common/D6MdiMsgFix.pas create mode 100644 official/1.104/examples/windows/delphitools/common/FindDlg.dfm create mode 100644 official/1.104/examples/windows/delphitools/common/FindDlg.pas create mode 100644 official/1.104/examples/windows/delphitools/common/SHDocVw_TLB.pas create mode 100644 official/1.104/examples/windows/delphitools/common/ToolsUtils.pas create mode 100644 official/1.104/examples/windows/delphitools/dependencyviewer/DependView.dof create mode 100644 official/1.104/examples/windows/delphitools/dependencyviewer/DependView.dpr create mode 100644 official/1.104/examples/windows/delphitools/dependencyviewer/DependView.res create mode 100644 official/1.104/examples/windows/delphitools/dependencyviewer/DependViewMain.dfm create mode 100644 official/1.104/examples/windows/delphitools/dependencyviewer/DependViewMain.pas create mode 100644 official/1.104/examples/windows/delphitools/dependencyviewer/FileViewer.dfm create mode 100644 official/1.104/examples/windows/delphitools/dependencyviewer/FileViewer.pas create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeDump.dfm create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeDump.pas create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeGenDef.dfm create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeGenDef.pas create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeResView.dfm create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeResView.pas create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeResource.pas create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeSearch.dfm create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeSearch.pas create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeViewer.dof create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeViewer.dpr create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeViewer.res create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeViewer.tlb create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeViewerControl.pas create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeViewerMain.dfm create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeViewerMain.pas create mode 100644 official/1.104/examples/windows/delphitools/peviewer/PeViewer_TLB.pas create mode 100644 official/1.104/examples/windows/delphitools/resfix/ResFix.dof create mode 100644 official/1.104/examples/windows/delphitools/resfix/ResFix.dpr create mode 100644 official/1.104/examples/windows/delphitools/resfix/ResFix.res create mode 100644 official/1.104/examples/windows/delphitools/resfix/ResFixMain.dfm create mode 100644 official/1.104/examples/windows/delphitools/resfix/ResFixMain.pas create mode 100644 official/1.104/examples/windows/delphitools/screenjpg/Main.dfm create mode 100644 official/1.104/examples/windows/delphitools/screenjpg/Main.pas create mode 100644 official/1.104/examples/windows/delphitools/screenjpg/ScreenJPG.dof create mode 100644 official/1.104/examples/windows/delphitools/screenjpg/ScreenJPG.dpr create mode 100644 official/1.104/examples/windows/delphitools/screenjpg/ScreenJPG.res create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/ChangePriority.dfm create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/ChangePriority.pas create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/Global.dfm create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/Global.pas create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/HeapDump.dfm create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/HeapDump.pas create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/Main.dfm create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/Main.pas create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/MemoryDump.dfm create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/MemoryDump.pas create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/ModulesDump.dfm create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/ModulesDump.pas create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/ToolHelpViewer.dof create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/ToolHelpViewer.dpr create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/ToolHelpViewer.res create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/ViewTemplate.dfm create mode 100644 official/1.104/examples/windows/delphitools/toolhelpview/ViewTemplate.pas create mode 100644 official/1.104/examples/windows/edisdk/Clean.bat create mode 100644 official/1.104/examples/windows/edisdk/EDICOMExample.dof create mode 100644 official/1.104/examples/windows/edisdk/EDICOMExample.dpr create mode 100644 official/1.104/examples/windows/edisdk/EDICOMExample.res create mode 100644 official/1.104/examples/windows/edisdk/EDICOMExampleMain.dfm create mode 100644 official/1.104/examples/windows/edisdk/EDICOMExampleMain.pas create mode 100644 official/1.104/examples/windows/edisdk/EDISDK_TLB.dcr create mode 100644 official/1.104/examples/windows/edisdk/EDISDK_TLB.pas create mode 100644 official/1.104/examples/windows/edisdk/comserver/Clean.bat create mode 100644 official/1.104/examples/windows/edisdk/comserver/EDISDK.dof create mode 100644 official/1.104/examples/windows/edisdk/comserver/EDISDK.dpr create mode 100644 official/1.104/examples/windows/edisdk/comserver/EDISDK.res create mode 100644 official/1.104/examples/windows/edisdk/comserver/EDISDK.tlb create mode 100644 official/1.104/examples/windows/edisdk/comserver/EDISDK_TLB.pas create mode 100644 official/1.104/examples/windows/edisdk/comserver/JclEDICOM_ANSIX12.pas create mode 100644 official/1.104/examples/windows/edisdk/comserver/sample.edi create mode 100644 official/1.104/examples/windows/edisdk/sample.edi create mode 100644 official/1.104/examples/windows/edisdk/vb5/Form1.frm create mode 100644 official/1.104/examples/windows/edisdk/vb5/Form1.frx create mode 100644 official/1.104/examples/windows/edisdk/vb5/Project1.vbp create mode 100644 official/1.104/examples/windows/edisdk/vb5/Project1.vbw create mode 100644 official/1.104/examples/windows/edisdk/vb5/sample.edi create mode 100644 official/1.104/examples/windows/filesummary/FileSummaryDemoMain.dfm create mode 100644 official/1.104/examples/windows/filesummary/FileSummaryDemoMain.pas create mode 100644 official/1.104/examples/windows/filesummary/FileSummaryExample.dof create mode 100644 official/1.104/examples/windows/filesummary/FileSummaryExample.dpr create mode 100644 official/1.104/examples/windows/filesummary/FileSummaryExample.res create mode 100644 official/1.104/examples/windows/fileversion/VerInfoDemoMain.dfm create mode 100644 official/1.104/examples/windows/fileversion/VerInfoDemoMain.pas create mode 100644 official/1.104/examples/windows/fileversion/VerInfoExample.dof create mode 100644 official/1.104/examples/windows/fileversion/VerInfoExample.dpr create mode 100644 official/1.104/examples/windows/fileversion/VerInfoExample.res create mode 100644 official/1.104/examples/windows/lanman/LanManDemoMain.dfm create mode 100644 official/1.104/examples/windows/lanman/LanManDemoMain.pas create mode 100644 official/1.104/examples/windows/lanman/LanManExample.dof create mode 100644 official/1.104/examples/windows/lanman/LanManExample.dpr create mode 100644 official/1.104/examples/windows/lanman/LanManExample.res create mode 100644 official/1.104/examples/windows/locales/LocalesDemoMain.dfm create mode 100644 official/1.104/examples/windows/locales/LocalesDemoMain.pas create mode 100644 official/1.104/examples/windows/locales/LocalesExample.dof create mode 100644 official/1.104/examples/windows/locales/LocalesExample.dpr create mode 100644 official/1.104/examples/windows/locales/LocalesExample.res create mode 100644 official/1.104/examples/windows/mapi/MapiDemoMain.dfm create mode 100644 official/1.104/examples/windows/mapi/MapiDemoMain.pas create mode 100644 official/1.104/examples/windows/mapi/MapiExample.dof create mode 100644 official/1.104/examples/windows/mapi/MapiExample.dpr create mode 100644 official/1.104/examples/windows/mapi/MapiExample.res create mode 100644 official/1.104/examples/windows/mapi/ReadMailDemoMain.dfm create mode 100644 official/1.104/examples/windows/mapi/ReadMailDemoMain.pas create mode 100644 official/1.104/examples/windows/mapi/ReadMailExample.dof create mode 100644 official/1.104/examples/windows/mapi/ReadMailExample.dpr create mode 100644 official/1.104/examples/windows/mapi/ReadMailExample.res create mode 100644 official/1.104/examples/windows/multimedia/MultiMediaExample.dof create mode 100644 official/1.104/examples/windows/multimedia/MultiMediaExample.dpr create mode 100644 official/1.104/examples/windows/multimedia/MultiMediaExample.res create mode 100644 official/1.104/examples/windows/multimedia/MultimediaDemoMain.dfm create mode 100644 official/1.104/examples/windows/multimedia/MultimediaDemoMain.pas create mode 100644 official/1.104/examples/windows/ntfs/JEDISoftLinks.dof create mode 100644 official/1.104/examples/windows/ntfs/JEDISoftLinks.dpr create mode 100644 official/1.104/examples/windows/ntfs/JEDISoftLinks.tlb create mode 100644 official/1.104/examples/windows/ntfs/JEDISoftLinks_TLB.pas create mode 100644 official/1.104/examples/windows/ntfs/SoftLinkDragDropHandler.pas create mode 100644 official/1.104/examples/windows/ntservice/NtSvcDemoDependent.dfm create mode 100644 official/1.104/examples/windows/ntservice/NtSvcDemoDependent.pas create mode 100644 official/1.104/examples/windows/ntservice/NtSvcDemoGroups.dfm create mode 100644 official/1.104/examples/windows/ntservice/NtSvcDemoGroups.pas create mode 100644 official/1.104/examples/windows/ntservice/NtSvcDemoMain.dfm create mode 100644 official/1.104/examples/windows/ntservice/NtSvcDemoMain.pas create mode 100644 official/1.104/examples/windows/ntservice/NtSvcExample.dof create mode 100644 official/1.104/examples/windows/ntservice/NtSvcExample.dpr create mode 100644 official/1.104/examples/windows/ntservice/NtSvcExample.res create mode 100644 official/1.104/examples/windows/peimage/ApiHookDemoMain.dfm create mode 100644 official/1.104/examples/windows/peimage/ApiHookDemoMain.pas create mode 100644 official/1.104/examples/windows/peimage/ApiHookExample.dof create mode 100644 official/1.104/examples/windows/peimage/ApiHookExample.dpr create mode 100644 official/1.104/examples/windows/peimage/ApiHookExample.res create mode 100644 official/1.104/examples/windows/peimage/PeFuncDemoMain.dfm create mode 100644 official/1.104/examples/windows/peimage/PeFuncDemoMain.pas create mode 100644 official/1.104/examples/windows/peimage/PeFuncExample.dof create mode 100644 official/1.104/examples/windows/peimage/PeFuncExample.dpr create mode 100644 official/1.104/examples/windows/peimage/PeFuncExample.res create mode 100644 official/1.104/examples/windows/peimage/UnmangleNameDemoMain.dfm create mode 100644 official/1.104/examples/windows/peimage/UnmangleNameDemoMain.pas create mode 100644 official/1.104/examples/windows/peimage/UnmangleNameExample.dof create mode 100644 official/1.104/examples/windows/peimage/UnmangleNameExample.dpr create mode 100644 official/1.104/examples/windows/peimage/UnmangleNameExample.res create mode 100644 official/1.104/examples/windows/registry/RegistryDemoMain.dfm create mode 100644 official/1.104/examples/windows/registry/RegistryDemoMain.pas create mode 100644 official/1.104/examples/windows/registry/RegistryExample.dof create mode 100644 official/1.104/examples/windows/registry/RegistryExample.dpr create mode 100644 official/1.104/examples/windows/registry/RegistryExample.res create mode 100644 official/1.104/examples/windows/structstorage/HexDump.pas create mode 100644 official/1.104/examples/windows/structstorage/PropsFrm.dfm create mode 100644 official/1.104/examples/windows/structstorage/PropsFrm.pas create mode 100644 official/1.104/examples/windows/structstorage/StructStorageExample.dof create mode 100644 official/1.104/examples/windows/structstorage/StructStorageExample.dpr create mode 100644 official/1.104/examples/windows/structstorage/StructStorageExample.res create mode 100644 official/1.104/examples/windows/structstorage/StructStorageExampleMain.dfm create mode 100644 official/1.104/examples/windows/structstorage/StructStorageExampleMain.pas create mode 100644 official/1.104/examples/windows/sysinfo/SysInfoDemoMain.dfm create mode 100644 official/1.104/examples/windows/sysinfo/SysInfoDemoMain.pas create mode 100644 official/1.104/examples/windows/sysinfo/SysInfoExample.dof create mode 100644 official/1.104/examples/windows/sysinfo/SysInfoExample.dpr create mode 100644 official/1.104/examples/windows/sysinfo/SysInfoExample.res create mode 100644 official/1.104/examples/windows/tasks/TaskDemo.dof create mode 100644 official/1.104/examples/windows/tasks/TaskDemo.dpr create mode 100644 official/1.104/examples/windows/tasks/TaskDemo.res create mode 100644 official/1.104/examples/windows/tasks/TaskDemoDataModule.dfm create mode 100644 official/1.104/examples/windows/tasks/TaskDemoDataModule.pas create mode 100644 official/1.104/examples/windows/tasks/TaskDemoMain.dfm create mode 100644 official/1.104/examples/windows/tasks/TaskDemoMain.pas create mode 100644 official/1.104/examples/windows/widestring/WideStringDemoMain.dfm create mode 100644 official/1.104/examples/windows/widestring/WideStringDemoMain.pas create mode 100644 official/1.104/examples/windows/widestring/WideStringExample.dpr create mode 100644 official/1.104/examples/windows/widestring/WideStringExample.res create mode 100644 official/1.104/experts/common/JclConfigure.ico create mode 100644 official/1.104/experts/common/JclImages.rc create mode 100644 official/1.104/experts/common/JclImages.res create mode 100644 official/1.104/experts/common/JclOtaActionConfigureSheet.dfm create mode 100644 official/1.104/experts/common/JclOtaActionConfigureSheet.pas create mode 100644 official/1.104/experts/common/JclOtaConfigurationForm.dfm create mode 100644 official/1.104/experts/common/JclOtaConfigurationForm.pas create mode 100644 official/1.104/experts/common/JclOtaConsts.pas create mode 100644 official/1.104/experts/common/JclOtaExceptionForm.dfm create mode 100644 official/1.104/experts/common/JclOtaExceptionForm.pas create mode 100644 official/1.104/experts/common/JclOtaResources.pas create mode 100644 official/1.104/experts/common/JclOtaUnitVersioningSheet.dfm create mode 100644 official/1.104/experts/common/JclOtaUnitVersioningSheet.pas create mode 100644 official/1.104/experts/common/JclOtaUtils.pas create mode 100644 official/1.104/experts/common/JclOtaWizardForm.dfm create mode 100644 official/1.104/experts/common/JclOtaWizardForm.pas create mode 100644 official/1.104/experts/common/JclOtaWizardFrame.dfm create mode 100644 official/1.104/experts/common/JclOtaWizardFrame.pas create mode 100644 official/1.104/experts/common/JclSplash.bmp create mode 100644 official/1.104/experts/debug/Howto.txt create mode 100644 official/1.104/experts/debug/JclDebugThread.pas create mode 100644 official/1.104/experts/debug/converter/JclDebugIdeConfigFrame.dfm create mode 100644 official/1.104/experts/debug/converter/JclDebugIdeConfigFrame.pas create mode 100644 official/1.104/experts/debug/converter/JclDebugIdeIcon.res create mode 100644 official/1.104/experts/debug/converter/JclDebugIdeImpl.pas create mode 100644 official/1.104/experts/debug/converter/JclDebugIdeResult.dfm create mode 100644 official/1.104/experts/debug/converter/JclDebugIdeResult.pas create mode 100644 official/1.104/experts/debug/dialog/ClxExceptDlg.ico create mode 100644 official/1.104/experts/debug/dialog/ClxExceptDlg.pas create mode 100644 official/1.104/experts/debug/dialog/ClxExceptDlg.xfm create mode 100644 official/1.104/experts/debug/dialog/CreateStdDialogs.dpr create mode 100644 official/1.104/experts/debug/dialog/ExceptDlg.CBuilder32.cpp create mode 100644 official/1.104/experts/debug/dialog/ExceptDlg.CBuilder32.dfm create mode 100644 official/1.104/experts/debug/dialog/ExceptDlg.CBuilder32.h create mode 100644 official/1.104/experts/debug/dialog/ExceptDlg.Delphi32.dfm create mode 100644 official/1.104/experts/debug/dialog/ExceptDlg.Delphi32.pas create mode 100644 official/1.104/experts/debug/dialog/ExceptDlg.dfm create mode 100644 official/1.104/experts/debug/dialog/ExceptDlg.ico create mode 100644 official/1.104/experts/debug/dialog/ExceptDlg.pas create mode 100644 official/1.104/experts/debug/dialog/ExceptDlgCpp.ico create mode 100644 official/1.104/experts/debug/dialog/ExceptDlgMail.dfm create mode 100644 official/1.104/experts/debug/dialog/ExceptDlgMail.ico create mode 100644 official/1.104/experts/debug/dialog/ExceptDlgMail.pas create mode 100644 official/1.104/experts/debug/simdview/JclSIMDCpuInfo.dfm create mode 100644 official/1.104/experts/debug/simdview/JclSIMDCpuInfo.pas create mode 100644 official/1.104/experts/debug/simdview/JclSIMDIcon.dcr create mode 100644 official/1.104/experts/debug/simdview/JclSIMDModifyForm.dfm create mode 100644 official/1.104/experts/debug/simdview/JclSIMDModifyForm.pas create mode 100644 official/1.104/experts/debug/simdview/JclSIMDTestBCB.cpp create mode 100644 official/1.104/experts/debug/simdview/JclSIMDTestBCBProject.bpf create mode 100644 official/1.104/experts/debug/simdview/JclSIMDTestBCBProject.bpr create mode 100644 official/1.104/experts/debug/simdview/JclSIMDTestDelphi.dof create mode 100644 official/1.104/experts/debug/simdview/JclSIMDTestDelphi.dpr create mode 100644 official/1.104/experts/debug/simdview/JclSIMDUtils.pas create mode 100644 official/1.104/experts/debug/simdview/JclSIMDView.pas create mode 100644 official/1.104/experts/debug/simdview/JclSIMDViewForm.dfm create mode 100644 official/1.104/experts/debug/simdview/JclSIMDViewForm.pas create mode 100644 official/1.104/experts/debug/threadnames/JclIdeThreadStatus.pas create mode 100644 official/1.104/experts/debug/threadnames/ThreadExpertSharedNames.pas create mode 100644 official/1.104/experts/debug/threadnames/ThreadExpertUnit.pas create mode 100644 official/1.104/experts/debug/tools/MakeJclDbg.dof create mode 100644 official/1.104/experts/debug/tools/MakeJclDbg.dpr create mode 100644 official/1.104/experts/debug/tools/MapToJdbg.dof create mode 100644 official/1.104/experts/debug/tools/MapToJdbg.dpr create mode 100644 official/1.104/experts/debug/tools/MapToJdbg.res create mode 100644 official/1.104/experts/debug/tools/MapToJdbgMain.dfm create mode 100644 official/1.104/experts/debug/tools/MapToJdbgMain.pas create mode 100644 official/1.104/experts/debug/tools/TlbToMap.dof create mode 100644 official/1.104/experts/debug/tools/TlbToMap.dpr create mode 100644 official/1.104/experts/debug/tools/TlbToMap.res create mode 100644 official/1.104/experts/debug/tools/TlbToMapMain.dfm create mode 100644 official/1.104/experts/debug/tools/TlbToMapMain.pas create mode 100644 official/1.104/experts/debug/tools/Tools.bpg create mode 100644 official/1.104/experts/debug/tools/makejcldbg.res create mode 100644 official/1.104/experts/favfolders/FavDlg.rc create mode 100644 official/1.104/experts/favfolders/FavDlg.res create mode 100644 official/1.104/experts/favfolders/IdeOpenDlgFavoriteUnit.pas create mode 100644 official/1.104/experts/favfolders/OpenDlgFavAdapter.pas create mode 100644 official/1.104/experts/projectanalyzer/ProjAnalyzerFrm.dfm create mode 100644 official/1.104/experts/projectanalyzer/ProjAnalyzerFrm.pas create mode 100644 official/1.104/experts/projectanalyzer/ProjAnalyzerIcon.res create mode 100644 official/1.104/experts/projectanalyzer/ProjAnalyzerImpl.pas create mode 100644 official/1.104/experts/repository/JclOtaExcDlgFileFrame.dfm create mode 100644 official/1.104/experts/repository/JclOtaExcDlgFileFrame.pas create mode 100644 official/1.104/experts/repository/JclOtaExcDlgFormFrame.dfm create mode 100644 official/1.104/experts/repository/JclOtaExcDlgFormFrame.pas create mode 100644 official/1.104/experts/repository/JclOtaExcDlgIcons.RES create mode 100644 official/1.104/experts/repository/JclOtaExcDlgIcons.rc create mode 100644 official/1.104/experts/repository/JclOtaExcDlgIgnoreFrame.dfm create mode 100644 official/1.104/experts/repository/JclOtaExcDlgIgnoreFrame.pas create mode 100644 official/1.104/experts/repository/JclOtaExcDlgRepository.pas create mode 100644 official/1.104/experts/repository/JclOtaExcDlgSystemFrame.dfm create mode 100644 official/1.104/experts/repository/JclOtaExcDlgSystemFrame.pas create mode 100644 official/1.104/experts/repository/JclOtaExcDlgTraceFrame.dfm create mode 100644 official/1.104/experts/repository/JclOtaExcDlgTraceFrame.pas create mode 100644 official/1.104/experts/repository/JclOtaExcDlgWizard.dfm create mode 100644 official/1.104/experts/repository/JclOtaExcDlgWizard.pas create mode 100644 official/1.104/experts/repository/JclOtaRepositoryReg.pas create mode 100644 official/1.104/experts/repository/JclOtaRepositoryUtils.pas create mode 100644 official/1.104/experts/repository/JclOtaTemplates.pas create mode 100644 official/1.104/experts/repository/dirinfo.txt create mode 100644 official/1.104/experts/useswizard/Hardlinks.txt create mode 100644 official/1.104/experts/useswizard/History.txt create mode 100644 official/1.104/experts/useswizard/IdentifierList.dpr create mode 100644 official/1.104/experts/useswizard/JCLOptionsFrame.dfm create mode 100644 official/1.104/experts/useswizard/JCLOptionsFrame.pas create mode 100644 official/1.104/experts/useswizard/JCLUsesWizard.pas create mode 100644 official/1.104/experts/useswizard/Jcl8087.txt create mode 100644 official/1.104/experts/useswizard/JclAbstractContainers.txt create mode 100644 official/1.104/experts/useswizard/JclAlgorithms.txt create mode 100644 official/1.104/experts/useswizard/JclAnsiStrings.txt create mode 100644 official/1.104/experts/useswizard/JclAppInst.txt create mode 100644 official/1.104/experts/useswizard/JclArrayLists.txt create mode 100644 official/1.104/experts/useswizard/JclArraySets.txt create mode 100644 official/1.104/experts/useswizard/JclBase.txt create mode 100644 official/1.104/experts/useswizard/JclBinaryTrees.txt create mode 100644 official/1.104/experts/useswizard/JclBorlandTools.txt create mode 100644 official/1.104/experts/useswizard/JclCIL.txt create mode 100644 official/1.104/experts/useswizard/JclCLR.txt create mode 100644 official/1.104/experts/useswizard/JclCOM.txt create mode 100644 official/1.104/experts/useswizard/JclComplex.txt create mode 100644 official/1.104/experts/useswizard/JclCompression.txt create mode 100644 official/1.104/experts/useswizard/JclConsole.txt create mode 100644 official/1.104/experts/useswizard/JclContainerIntf.txt create mode 100644 official/1.104/experts/useswizard/JclCounter.txt create mode 100644 official/1.104/experts/useswizard/JclDateTime.txt create mode 100644 official/1.104/experts/useswizard/JclDebug.txt create mode 100644 official/1.104/experts/useswizard/JclDotNet.txt create mode 100644 official/1.104/experts/useswizard/JclEDI.txt create mode 100644 official/1.104/experts/useswizard/JclEDISEF.txt create mode 100644 official/1.104/experts/useswizard/JclEDITranslators.txt create mode 100644 official/1.104/experts/useswizard/JclEDIXML.txt create mode 100644 official/1.104/experts/useswizard/JclEDI_ANSIX12.txt create mode 100644 official/1.104/experts/useswizard/JclEDI_ANSIX12_Ext.txt create mode 100644 official/1.104/experts/useswizard/JclEDI_UNEDIFACT.txt create mode 100644 official/1.104/experts/useswizard/JclEDI_UNEDIFACT_Ext.txt create mode 100644 official/1.104/experts/useswizard/JclExprEval.txt create mode 100644 official/1.104/experts/useswizard/JclFileUtils.txt create mode 100644 official/1.104/experts/useswizard/JclGraphUtils.txt create mode 100644 official/1.104/experts/useswizard/JclGraphics.txt create mode 100644 official/1.104/experts/useswizard/JclHashMaps.txt create mode 100644 official/1.104/experts/useswizard/JclHashSets.txt create mode 100644 official/1.104/experts/useswizard/JclHookExcept.txt create mode 100644 official/1.104/experts/useswizard/JclIniFiles.txt create mode 100644 official/1.104/experts/useswizard/JclLANMan.txt create mode 100644 official/1.104/experts/useswizard/JclLinkedLists.txt create mode 100644 official/1.104/experts/useswizard/JclLocales.txt create mode 100644 official/1.104/experts/useswizard/JclLogic.txt create mode 100644 official/1.104/experts/useswizard/JclMIDI.txt create mode 100644 official/1.104/experts/useswizard/JclMapi.txt create mode 100644 official/1.104/experts/useswizard/JclMath.txt create mode 100644 official/1.104/experts/useswizard/JclMetadata.txt create mode 100644 official/1.104/experts/useswizard/JclMime.txt create mode 100644 official/1.104/experts/useswizard/JclMiscel.txt create mode 100644 official/1.104/experts/useswizard/JclMsdosSys.txt create mode 100644 official/1.104/experts/useswizard/JclMultimedia.txt create mode 100644 official/1.104/experts/useswizard/JclNTFS.txt create mode 100644 official/1.104/experts/useswizard/JclPCRE.txt create mode 100644 official/1.104/experts/useswizard/JclParseUses.pas create mode 100644 official/1.104/experts/useswizard/JclPeImage.txt create mode 100644 official/1.104/experts/useswizard/JclPrint.txt create mode 100644 official/1.104/experts/useswizard/JclQGraphUtils.txt create mode 100644 official/1.104/experts/useswizard/JclQGraphics.txt create mode 100644 official/1.104/experts/useswizard/JclQueues.txt create mode 100644 official/1.104/experts/useswizard/JclRTF.txt create mode 100644 official/1.104/experts/useswizard/JclRTTI.txt create mode 100644 official/1.104/experts/useswizard/JclRegistry.txt create mode 100644 official/1.104/experts/useswizard/JclResources.txt create mode 100644 official/1.104/experts/useswizard/JclSchedule.txt create mode 100644 official/1.104/experts/useswizard/JclSecurity.txt create mode 100644 official/1.104/experts/useswizard/JclShell.txt create mode 100644 official/1.104/experts/useswizard/JclStacks.txt create mode 100644 official/1.104/experts/useswizard/JclStatistics.txt create mode 100644 official/1.104/experts/useswizard/JclStrHashMap.txt create mode 100644 official/1.104/experts/useswizard/JclStreams.txt create mode 100644 official/1.104/experts/useswizard/JclStrings.txt create mode 100644 official/1.104/experts/useswizard/JclStructStorage.txt create mode 100644 official/1.104/experts/useswizard/JclSvcCtrl.txt create mode 100644 official/1.104/experts/useswizard/JclSynch.txt create mode 100644 official/1.104/experts/useswizard/JclSysInfo.txt create mode 100644 official/1.104/experts/useswizard/JclSysUtils.txt create mode 100644 official/1.104/experts/useswizard/JclTD32.txt create mode 100644 official/1.104/experts/useswizard/JclTask.txt create mode 100644 official/1.104/experts/useswizard/JclUnicode.txt create mode 100644 official/1.104/experts/useswizard/JclUnitConv.txt create mode 100644 official/1.104/experts/useswizard/JclUnitVersioning.txt create mode 100644 official/1.104/experts/useswizard/JclUnitVersioningProviders.txt create mode 100644 official/1.104/experts/useswizard/JclUsesDialog.dfm create mode 100644 official/1.104/experts/useswizard/JclUsesDialog.pas create mode 100644 official/1.104/experts/useswizard/JclValidation.txt create mode 100644 official/1.104/experts/useswizard/JclVectors.txt create mode 100644 official/1.104/experts/useswizard/JclWideFormat.txt create mode 100644 official/1.104/experts/useswizard/JclWideStrings.txt create mode 100644 official/1.104/experts/useswizard/JclWin32.txt create mode 100644 official/1.104/experts/useswizard/JclWin32Ex.txt create mode 100644 official/1.104/experts/useswizard/JclWinMIDI.txt create mode 100644 official/1.104/experts/useswizard/JediUsesWizard.ini create mode 100644 official/1.104/experts/useswizard/ReadMe.txt create mode 100644 official/1.104/experts/useswizard/pcre.txt create mode 100644 official/1.104/experts/versioncontrol/JclVersionControlImpl.pas create mode 100644 official/1.104/experts/versioncontrol/JclVersionCtrlCommonOptions.dfm create mode 100644 official/1.104/experts/versioncontrol/JclVersionCtrlCommonOptions.pas create mode 100644 official/1.104/experts/versioncontrol/JclVersionCtrlIcons.RES create mode 100644 official/1.104/experts/versioncontrol/JclVersionCtrlIcons.rc create mode 100644 official/1.104/experts/versioncontrol/icons/ContextMenu.ico create mode 100644 official/1.104/experts/versioncontrol/icons/Explore.ico create mode 100644 official/1.104/experts/versioncontrol/icons/FileAdd.ico create mode 100644 official/1.104/experts/versioncontrol/icons/FileBlame.ico create mode 100644 official/1.104/experts/versioncontrol/icons/FileBranch.ico create mode 100644 official/1.104/experts/versioncontrol/icons/FileCommit.ico create mode 100644 official/1.104/experts/versioncontrol/icons/FileDiff.ico create mode 100644 official/1.104/experts/versioncontrol/icons/FileGraph.ico create mode 100644 official/1.104/experts/versioncontrol/icons/FileLock.ico create mode 100644 official/1.104/experts/versioncontrol/icons/FileLog.ico create mode 100644 official/1.104/experts/versioncontrol/icons/FileMerge.ico create mode 100644 official/1.104/experts/versioncontrol/icons/FileRename.ico create mode 100644 official/1.104/experts/versioncontrol/icons/FileRevert.ico create mode 100644 official/1.104/experts/versioncontrol/icons/FileTag.ico create mode 100644 official/1.104/experts/versioncontrol/icons/FileUnlock.ico create mode 100644 official/1.104/experts/versioncontrol/icons/FileUpdate.ico create mode 100644 official/1.104/experts/versioncontrol/icons/Properties.ico create mode 100644 official/1.104/experts/versioncontrol/icons/RepoBrowser.ico create mode 100644 official/1.104/experts/versioncontrol/icons/SandboxAdd.ico create mode 100644 official/1.104/experts/versioncontrol/icons/SandboxBranch.ico create mode 100644 official/1.104/experts/versioncontrol/icons/SandboxCheckout.ico create mode 100644 official/1.104/experts/versioncontrol/icons/SandboxCommit.ico create mode 100644 official/1.104/experts/versioncontrol/icons/SandboxLock.ico create mode 100644 official/1.104/experts/versioncontrol/icons/SandboxLog.ico create mode 100644 official/1.104/experts/versioncontrol/icons/SandboxMerge.ico create mode 100644 official/1.104/experts/versioncontrol/icons/SandboxRename.ico create mode 100644 official/1.104/experts/versioncontrol/icons/SandboxRevert.ico create mode 100644 official/1.104/experts/versioncontrol/icons/SandboxTag.ico create mode 100644 official/1.104/experts/versioncontrol/icons/SandboxUnlock.ico create mode 100644 official/1.104/experts/versioncontrol/icons/SandboxUpdate.ico create mode 100644 official/1.104/experts/versioncontrol/icons/Status.ico create mode 100644 official/1.104/experts/versioncontrol/icons/copyright.txt create mode 100644 official/1.104/experts/versioncontrol/icons/dirinfo.txt create mode 100644 official/1.104/include/zconf.h create mode 100644 official/1.104/include/zlib.h create mode 100644 official/1.104/include/zutil.h create mode 100644 official/1.104/install.sh create mode 100644 official/1.104/install/BCB5-dcc32.cfg.mak create mode 100644 official/1.104/install/ClxGui/QJediGUIInstall.xfm create mode 100644 official/1.104/install/ClxGui/QJediGUIMain.xfm create mode 100644 official/1.104/install/ClxGui/QJediGUIReadme.xfm create mode 100644 official/1.104/install/HeaderTest/jcl_a2z.cpp create mode 100644 official/1.104/install/HeaderTest/jcl_z2a.cpp create mode 100644 official/1.104/install/JclInstall.pas create mode 100644 official/1.104/install/JediInstall.pas create mode 100644 official/1.104/install/JediInstallConfigIni.pas create mode 100644 official/1.104/install/JediInstaller.bdsproj create mode 100644 official/1.104/install/JediInstaller.dof create mode 100644 official/1.104/install/JediInstaller.dpr create mode 100644 official/1.104/install/JediInstaller.res create mode 100644 official/1.104/install/JediProfiles.pas create mode 100644 official/1.104/install/JediRegInfo.pas create mode 100644 official/1.104/install/QJediInstaller.conf create mode 100644 official/1.104/install/QJediInstaller.dof create mode 100644 official/1.104/install/QJediInstaller.dpr create mode 100644 official/1.104/install/QJediInstaller.kof create mode 100644 official/1.104/install/QJediInstaller.res create mode 100644 official/1.104/install/RegHelper.dof create mode 100644 official/1.104/install/RegHelper.dpr create mode 100644 official/1.104/install/RegHelper.rc create mode 100644 official/1.104/install/RegHelper.res create mode 100644 official/1.104/install/VclGui/FrmCompile.dfm create mode 100644 official/1.104/install/VclGui/FrmCompile.pas create mode 100644 official/1.104/install/VclGui/JediGUIInstall.dfm create mode 100644 official/1.104/install/VclGui/JediGUIInstall.pas create mode 100644 official/1.104/install/VclGui/JediGUIMain.dfm create mode 100644 official/1.104/install/VclGui/JediGUIMain.pas create mode 100644 official/1.104/install/VclGui/JediGUIProfiles.dfm create mode 100644 official/1.104/install/VclGui/JediGUIProfiles.pas create mode 100644 official/1.104/install/VclGui/JediGUIReadme.dfm create mode 100644 official/1.104/install/VclGui/JediGUIReadme.pas create mode 100644 official/1.104/install/build/dcc32ex.dpr create mode 100644 official/1.104/install/build/dcc32ex.exe create mode 100644 official/1.104/install/dcc32.cfg create mode 100644 official/1.104/install/dcc32_command.cmd create mode 100644 official/1.104/install/prototypes.sh create mode 100644 official/1.104/install/prototypes/JediGUIInstall.pas create mode 100644 official/1.104/install/prototypes/JediGUIMain.pas create mode 100644 official/1.104/install/prototypes/JediGUIReadme.pas create mode 100644 official/1.104/lib/c5/debug/dirinfo.txt create mode 100644 official/1.104/lib/c5/dirinfo.txt create mode 100644 official/1.104/lib/c6/debug/dirinfo.txt create mode 100644 official/1.104/lib/c6/dirinfo.txt create mode 100644 official/1.104/lib/cs1/dirinfo.txt create mode 100644 official/1.104/lib/d10.net/common.exc create mode 100644 official/1.104/lib/d10.net/debug/dirinfo.txt create mode 100644 official/1.104/lib/d10.net/dirinfo.txt create mode 100644 official/1.104/lib/d10.net/vcl.exc create mode 100644 official/1.104/lib/d10.net/windows.exc create mode 100644 official/1.104/lib/d10/debug/dirinfo.txt create mode 100644 official/1.104/lib/d10/dirinfo.txt create mode 100644 official/1.104/lib/d11.net/common.exc create mode 100644 official/1.104/lib/d11.net/debug/dirinfo.txt create mode 100644 official/1.104/lib/d11.net/dirinfo.txt create mode 100644 official/1.104/lib/d11.net/vcl.exc create mode 100644 official/1.104/lib/d11.net/windows.exc create mode 100644 official/1.104/lib/d11/debug/dirinfo.txt create mode 100644 official/1.104/lib/d11/dirinfo.txt create mode 100644 official/1.104/lib/d12/Hardlinks.dcu create mode 100644 official/1.104/lib/d12/Jcl.dcp create mode 100644 official/1.104/lib/d12/Jcl.dcu create mode 100644 official/1.104/lib/d12/Jcl120.bpl create mode 100644 official/1.104/lib/d12/Jcl8087.dcu create mode 100644 official/1.104/lib/d12/JclAbstractContainers.dcu create mode 100644 official/1.104/lib/d12/JclAlgorithms.dcu create mode 100644 official/1.104/lib/d12/JclAnsiStrings.dcu create mode 100644 official/1.104/lib/d12/JclAppInst.dcu create mode 100644 official/1.104/lib/d12/JclArrayLists.dcu create mode 100644 official/1.104/lib/d12/JclArraySets.dcu create mode 100644 official/1.104/lib/d12/JclBase.dcu create mode 100644 official/1.104/lib/d12/JclBinaryTrees.dcu create mode 100644 official/1.104/lib/d12/JclBorlandTools.dcu create mode 100644 official/1.104/lib/d12/JclCIL.dcu create mode 100644 official/1.104/lib/d12/JclCLR.dcu create mode 100644 official/1.104/lib/d12/JclCOM.dcu create mode 100644 official/1.104/lib/d12/JclCommCtrlAdmin.res create mode 100644 official/1.104/lib/d12/JclCommCtrlAsInvoker.res create mode 100644 official/1.104/lib/d12/JclComplex.dcu create mode 100644 official/1.104/lib/d12/JclCompression.dcu create mode 100644 official/1.104/lib/d12/JclConsole.dcu create mode 100644 official/1.104/lib/d12/JclContainerIntf.dcu create mode 100644 official/1.104/lib/d12/JclContainers.dcp create mode 100644 official/1.104/lib/d12/JclContainers.dcu create mode 100644 official/1.104/lib/d12/JclContainers120.bpl create mode 100644 official/1.104/lib/d12/JclCounter.dcu create mode 100644 official/1.104/lib/d12/JclDateTime.dcu create mode 100644 official/1.104/lib/d12/JclDebug.dcu create mode 100644 official/1.104/lib/d12/JclDotNet.dcu create mode 100644 official/1.104/lib/d12/JclEDI.dcu create mode 100644 official/1.104/lib/d12/JclEDISEF.dcu create mode 100644 official/1.104/lib/d12/JclEDITranslators.dcu create mode 100644 official/1.104/lib/d12/JclEDIXML.dcu create mode 100644 official/1.104/lib/d12/JclEDI_ANSIX12.dcu create mode 100644 official/1.104/lib/d12/JclEDI_ANSIX12_Ext.dcu create mode 100644 official/1.104/lib/d12/JclEDI_UNEDIFACT.dcu create mode 100644 official/1.104/lib/d12/JclEDI_UNEDIFACT_Ext.dcu create mode 100644 official/1.104/lib/d12/JclExprEval.dcu create mode 100644 official/1.104/lib/d12/JclFileUtils.dcu create mode 100644 official/1.104/lib/d12/JclFont.dcu create mode 100644 official/1.104/lib/d12/JclGraphUtils.dcu create mode 100644 official/1.104/lib/d12/JclGraphics.dcu create mode 100644 official/1.104/lib/d12/JclHashMaps.dcu create mode 100644 official/1.104/lib/d12/JclHashSets.dcu create mode 100644 official/1.104/lib/d12/JclHookExcept.dcu create mode 100644 official/1.104/lib/d12/JclIniFiles.dcu create mode 100644 official/1.104/lib/d12/JclLANMan.dcu create mode 100644 official/1.104/lib/d12/JclLinkedLists.dcu create mode 100644 official/1.104/lib/d12/JclLocales.dcu create mode 100644 official/1.104/lib/d12/JclLogic.dcu create mode 100644 official/1.104/lib/d12/JclMIDI.dcu create mode 100644 official/1.104/lib/d12/JclMapi.dcu create mode 100644 official/1.104/lib/d12/JclMath.dcu create mode 100644 official/1.104/lib/d12/JclMetadata.dcu create mode 100644 official/1.104/lib/d12/JclMime.dcu create mode 100644 official/1.104/lib/d12/JclMiscel.dcu create mode 100644 official/1.104/lib/d12/JclMsdosSys.dcu create mode 100644 official/1.104/lib/d12/JclMultimedia.dcu create mode 100644 official/1.104/lib/d12/JclNTFS.dcu create mode 100644 official/1.104/lib/d12/JclNoDepAdmin.res create mode 100644 official/1.104/lib/d12/JclNoDepAsInvoker.res create mode 100644 official/1.104/lib/d12/JclPCRE.dcu create mode 100644 official/1.104/lib/d12/JclPeImage.dcu create mode 100644 official/1.104/lib/d12/JclPrint.dcu create mode 100644 official/1.104/lib/d12/JclQueues.dcu create mode 100644 official/1.104/lib/d12/JclRTTI.dcu create mode 100644 official/1.104/lib/d12/JclRegistry.dcu create mode 100644 official/1.104/lib/d12/JclResources.dcu create mode 100644 official/1.104/lib/d12/JclSchedule.dcu create mode 100644 official/1.104/lib/d12/JclSecurity.dcu create mode 100644 official/1.104/lib/d12/JclShell.dcu create mode 100644 official/1.104/lib/d12/JclSimpleXml.dcu create mode 100644 official/1.104/lib/d12/JclSortedMaps.dcu create mode 100644 official/1.104/lib/d12/JclStacks.dcu create mode 100644 official/1.104/lib/d12/JclStatistics.dcu create mode 100644 official/1.104/lib/d12/JclStrHashMap.dcu create mode 100644 official/1.104/lib/d12/JclStreams.dcu create mode 100644 official/1.104/lib/d12/JclStringConversions.dcu create mode 100644 official/1.104/lib/d12/JclStringLists.dcu create mode 100644 official/1.104/lib/d12/JclStrings.dcu create mode 100644 official/1.104/lib/d12/JclStructStorage.dcu create mode 100644 official/1.104/lib/d12/JclSvcCtrl.dcu create mode 100644 official/1.104/lib/d12/JclSynch.dcu create mode 100644 official/1.104/lib/d12/JclSysInfo.dcu create mode 100644 official/1.104/lib/d12/JclSysUtils.dcu create mode 100644 official/1.104/lib/d12/JclTD32.dcu create mode 100644 official/1.104/lib/d12/JclTask.dcu create mode 100644 official/1.104/lib/d12/JclTrees.dcu create mode 100644 official/1.104/lib/d12/JclUnicode.dcu create mode 100644 official/1.104/lib/d12/JclUnicode.res create mode 100644 official/1.104/lib/d12/JclUnicodeBZip2.res create mode 100644 official/1.104/lib/d12/JclUnicodeZLib.res create mode 100644 official/1.104/lib/d12/JclUnitConv.dcu create mode 100644 official/1.104/lib/d12/JclUnitVersioning.dcu create mode 100644 official/1.104/lib/d12/JclUnitVersioningProviders.dcu create mode 100644 official/1.104/lib/d12/JclValidation.dcu create mode 100644 official/1.104/lib/d12/JclVcl.dcp create mode 100644 official/1.104/lib/d12/JclVcl.dcu create mode 100644 official/1.104/lib/d12/JclVcl120.bpl create mode 100644 official/1.104/lib/d12/JclVectors.dcu create mode 100644 official/1.104/lib/d12/JclVersionControl.dcu create mode 100644 official/1.104/lib/d12/JclVersionCtrlCVSImpl.dcu create mode 100644 official/1.104/lib/d12/JclVersionCtrlSVNImpl.dcu create mode 100644 official/1.104/lib/d12/JclWideFormat.dcu create mode 100644 official/1.104/lib/d12/JclWideStrings.dcu create mode 100644 official/1.104/lib/d12/JclWin32.dcu create mode 100644 official/1.104/lib/d12/JclWin32Ex.dcu create mode 100644 official/1.104/lib/d12/JclWinMIDI.dcu create mode 100644 official/1.104/lib/d12/MSHelpServices_TLB.dcu create mode 100644 official/1.104/lib/d12/MSTask.dcu create mode 100644 official/1.104/lib/d12/Snmp.dcu create mode 100644 official/1.104/lib/d12/bzip2.dcu create mode 100644 official/1.104/lib/d12/debug/Hardlinks.dcu create mode 100644 official/1.104/lib/d12/debug/Jcl8087.dcu create mode 100644 official/1.104/lib/d12/debug/JclAbstractContainers.dcu create mode 100644 official/1.104/lib/d12/debug/JclAlgorithms.dcu create mode 100644 official/1.104/lib/d12/debug/JclAnsiStrings.dcu create mode 100644 official/1.104/lib/d12/debug/JclAppInst.dcu create mode 100644 official/1.104/lib/d12/debug/JclArrayLists.dcu create mode 100644 official/1.104/lib/d12/debug/JclArraySets.dcu create mode 100644 official/1.104/lib/d12/debug/JclBase.dcu create mode 100644 official/1.104/lib/d12/debug/JclBinaryTrees.dcu create mode 100644 official/1.104/lib/d12/debug/JclBorlandTools.dcu create mode 100644 official/1.104/lib/d12/debug/JclCIL.dcu create mode 100644 official/1.104/lib/d12/debug/JclCLR.dcu create mode 100644 official/1.104/lib/d12/debug/JclCOM.dcu create mode 100644 official/1.104/lib/d12/debug/JclCommCtrlAdmin.res create mode 100644 official/1.104/lib/d12/debug/JclCommCtrlAsInvoker.res create mode 100644 official/1.104/lib/d12/debug/JclComplex.dcu create mode 100644 official/1.104/lib/d12/debug/JclCompression.dcu create mode 100644 official/1.104/lib/d12/debug/JclConsole.dcu create mode 100644 official/1.104/lib/d12/debug/JclContainerIntf.dcu create mode 100644 official/1.104/lib/d12/debug/JclCounter.dcu create mode 100644 official/1.104/lib/d12/debug/JclDateTime.dcu create mode 100644 official/1.104/lib/d12/debug/JclDebug.dcu create mode 100644 official/1.104/lib/d12/debug/JclDotNet.dcu create mode 100644 official/1.104/lib/d12/debug/JclEDI.dcu create mode 100644 official/1.104/lib/d12/debug/JclEDISEF.dcu create mode 100644 official/1.104/lib/d12/debug/JclEDITranslators.dcu create mode 100644 official/1.104/lib/d12/debug/JclEDIXML.dcu create mode 100644 official/1.104/lib/d12/debug/JclEDI_ANSIX12.dcu create mode 100644 official/1.104/lib/d12/debug/JclEDI_ANSIX12_Ext.dcu create mode 100644 official/1.104/lib/d12/debug/JclEDI_UNEDIFACT.dcu create mode 100644 official/1.104/lib/d12/debug/JclEDI_UNEDIFACT_Ext.dcu create mode 100644 official/1.104/lib/d12/debug/JclExprEval.dcu create mode 100644 official/1.104/lib/d12/debug/JclFileUtils.dcu create mode 100644 official/1.104/lib/d12/debug/JclFont.dcu create mode 100644 official/1.104/lib/d12/debug/JclGraphUtils.dcu create mode 100644 official/1.104/lib/d12/debug/JclGraphics.dcu create mode 100644 official/1.104/lib/d12/debug/JclHashMaps.dcu create mode 100644 official/1.104/lib/d12/debug/JclHashSets.dcu create mode 100644 official/1.104/lib/d12/debug/JclHookExcept.dcu create mode 100644 official/1.104/lib/d12/debug/JclIniFiles.dcu create mode 100644 official/1.104/lib/d12/debug/JclLANMan.dcu create mode 100644 official/1.104/lib/d12/debug/JclLinkedLists.dcu create mode 100644 official/1.104/lib/d12/debug/JclLocales.dcu create mode 100644 official/1.104/lib/d12/debug/JclLogic.dcu create mode 100644 official/1.104/lib/d12/debug/JclMIDI.dcu create mode 100644 official/1.104/lib/d12/debug/JclMapi.dcu create mode 100644 official/1.104/lib/d12/debug/JclMath.dcu create mode 100644 official/1.104/lib/d12/debug/JclMetadata.dcu create mode 100644 official/1.104/lib/d12/debug/JclMime.dcu create mode 100644 official/1.104/lib/d12/debug/JclMiscel.dcu create mode 100644 official/1.104/lib/d12/debug/JclMsdosSys.dcu create mode 100644 official/1.104/lib/d12/debug/JclMultimedia.dcu create mode 100644 official/1.104/lib/d12/debug/JclNTFS.dcu create mode 100644 official/1.104/lib/d12/debug/JclNoDepAdmin.res create mode 100644 official/1.104/lib/d12/debug/JclNoDepAsInvoker.res create mode 100644 official/1.104/lib/d12/debug/JclPCRE.dcu create mode 100644 official/1.104/lib/d12/debug/JclPeImage.dcu create mode 100644 official/1.104/lib/d12/debug/JclPrint.dcu create mode 100644 official/1.104/lib/d12/debug/JclQueues.dcu create mode 100644 official/1.104/lib/d12/debug/JclRTTI.dcu create mode 100644 official/1.104/lib/d12/debug/JclRegistry.dcu create mode 100644 official/1.104/lib/d12/debug/JclResources.dcu create mode 100644 official/1.104/lib/d12/debug/JclSchedule.dcu create mode 100644 official/1.104/lib/d12/debug/JclSecurity.dcu create mode 100644 official/1.104/lib/d12/debug/JclShell.dcu create mode 100644 official/1.104/lib/d12/debug/JclSimpleXml.dcu create mode 100644 official/1.104/lib/d12/debug/JclSortedMaps.dcu create mode 100644 official/1.104/lib/d12/debug/JclStacks.dcu create mode 100644 official/1.104/lib/d12/debug/JclStatistics.dcu create mode 100644 official/1.104/lib/d12/debug/JclStrHashMap.dcu create mode 100644 official/1.104/lib/d12/debug/JclStreams.dcu create mode 100644 official/1.104/lib/d12/debug/JclStringConversions.dcu create mode 100644 official/1.104/lib/d12/debug/JclStringLists.dcu create mode 100644 official/1.104/lib/d12/debug/JclStrings.dcu create mode 100644 official/1.104/lib/d12/debug/JclStructStorage.dcu create mode 100644 official/1.104/lib/d12/debug/JclSvcCtrl.dcu create mode 100644 official/1.104/lib/d12/debug/JclSynch.dcu create mode 100644 official/1.104/lib/d12/debug/JclSysInfo.dcu create mode 100644 official/1.104/lib/d12/debug/JclSysUtils.dcu create mode 100644 official/1.104/lib/d12/debug/JclTD32.dcu create mode 100644 official/1.104/lib/d12/debug/JclTask.dcu create mode 100644 official/1.104/lib/d12/debug/JclTrees.dcu create mode 100644 official/1.104/lib/d12/debug/JclUnicode.dcu create mode 100644 official/1.104/lib/d12/debug/JclUnicode.res create mode 100644 official/1.104/lib/d12/debug/JclUnicodeBZip2.res create mode 100644 official/1.104/lib/d12/debug/JclUnicodeZLib.res create mode 100644 official/1.104/lib/d12/debug/JclUnitConv.dcu create mode 100644 official/1.104/lib/d12/debug/JclUnitVersioning.dcu create mode 100644 official/1.104/lib/d12/debug/JclUnitVersioningProviders.dcu create mode 100644 official/1.104/lib/d12/debug/JclValidation.dcu create mode 100644 official/1.104/lib/d12/debug/JclVectors.dcu create mode 100644 official/1.104/lib/d12/debug/JclVersionControl.dcu create mode 100644 official/1.104/lib/d12/debug/JclVersionCtrlCVSImpl.dcu create mode 100644 official/1.104/lib/d12/debug/JclVersionCtrlSVNImpl.dcu create mode 100644 official/1.104/lib/d12/debug/JclWideFormat.dcu create mode 100644 official/1.104/lib/d12/debug/JclWideStrings.dcu create mode 100644 official/1.104/lib/d12/debug/JclWin32.dcu create mode 100644 official/1.104/lib/d12/debug/JclWin32Ex.dcu create mode 100644 official/1.104/lib/d12/debug/JclWinMIDI.dcu create mode 100644 official/1.104/lib/d12/debug/MSHelpServices_TLB.dcu create mode 100644 official/1.104/lib/d12/debug/MSTask.dcu create mode 100644 official/1.104/lib/d12/debug/Snmp.dcu create mode 100644 official/1.104/lib/d12/debug/bzip2.dcu create mode 100644 official/1.104/lib/d12/debug/dirinfo.txt create mode 100644 official/1.104/lib/d12/debug/mscoree_TLB.dcu create mode 100644 official/1.104/lib/d12/debug/mscorlib_TLB.dcu create mode 100644 official/1.104/lib/d12/debug/pcre.dcu create mode 100644 official/1.104/lib/d12/debug/sevenzip.dcu create mode 100644 official/1.104/lib/d12/debug/zlibh.dcu create mode 100644 official/1.104/lib/d12/dirinfo.txt create mode 100644 official/1.104/lib/d12/jcl.inc create mode 100644 official/1.104/lib/d12/mscoree_TLB.dcu create mode 100644 official/1.104/lib/d12/mscorlib_TLB.dcu create mode 100644 official/1.104/lib/d12/pcre.dcu create mode 100644 official/1.104/lib/d12/sevenzip.dcu create mode 100644 official/1.104/lib/d12/zlibh.dcu create mode 100644 official/1.104/lib/d5/debug/dirinfo.txt create mode 100644 official/1.104/lib/d5/dirinfo.txt create mode 100644 official/1.104/lib/d6/debug/dirinfo.txt create mode 100644 official/1.104/lib/d6/dirinfo.txt create mode 100644 official/1.104/lib/d7/debug/dirinfo.txt create mode 100644 official/1.104/lib/d7/dirinfo.txt create mode 100644 official/1.104/lib/d8/dirinfo.txt create mode 100644 official/1.104/lib/d9.net/common.exc create mode 100644 official/1.104/lib/d9.net/debug/dirinfo.txt create mode 100644 official/1.104/lib/d9.net/dirinfo.txt create mode 100644 official/1.104/lib/d9.net/vcl.exc create mode 100644 official/1.104/lib/d9.net/windows.exc create mode 100644 official/1.104/lib/d9/debug/dirinfo.txt create mode 100644 official/1.104/lib/d9/dirinfo.txt create mode 100644 official/1.104/lib/dirinfo.txt create mode 100644 official/1.104/lib/k3/debug/dirinfo.txt create mode 100644 official/1.104/lib/k3/dirinfo.txt create mode 100644 official/1.104/packages/BCB.bmk create mode 100644 official/1.104/packages/JclNetPackagesD100.bdsgroup create mode 100644 official/1.104/packages/JclNetPackagesD110.groupproj create mode 100644 official/1.104/packages/JclNetPackagesD90.bdsgroup create mode 100644 official/1.104/packages/JclPackagesC50.bpg create mode 100644 official/1.104/packages/JclPackagesC60.bpg create mode 100644 official/1.104/packages/JclPackagesCK3.bpg create mode 100644 official/1.104/packages/JclPackagesD100.bdsgroup create mode 100644 official/1.104/packages/JclPackagesD110.groupproj create mode 100644 official/1.104/packages/JclPackagesD120.groupproj create mode 100644 official/1.104/packages/JclPackagesD50.bpg create mode 100644 official/1.104/packages/JclPackagesD60.bpg create mode 100644 official/1.104/packages/JclPackagesD70.bpg create mode 100644 official/1.104/packages/JclPackagesD90.bdsgroup create mode 100644 official/1.104/packages/JclPackagesDK3.bpg create mode 100644 official/1.104/packages/bcb.gmk create mode 100644 official/1.104/packages/c5/JclBaseExpertC50.bpk create mode 100644 official/1.104/packages/c5/JclBaseExpertC50.cpp create mode 100644 official/1.104/packages/c5/JclBaseExpertC50.dof create mode 100644 official/1.104/packages/c5/JclBaseExpertC50.dpk create mode 100644 official/1.104/packages/c5/JclBaseExpertC50.rc create mode 100644 official/1.104/packages/c5/JclBaseExpertC50.res create mode 100644 official/1.104/packages/c5/JclC50.bpk create mode 100644 official/1.104/packages/c5/JclC50.cpp create mode 100644 official/1.104/packages/c5/JclC50.dof create mode 100644 official/1.104/packages/c5/JclC50.dpk create mode 100644 official/1.104/packages/c5/JclC50.rc create mode 100644 official/1.104/packages/c5/JclC50.res create mode 100644 official/1.104/packages/c5/JclContainersC50.bpk create mode 100644 official/1.104/packages/c5/JclContainersC50.cpp create mode 100644 official/1.104/packages/c5/JclContainersC50.dof create mode 100644 official/1.104/packages/c5/JclContainersC50.dpk create mode 100644 official/1.104/packages/c5/JclContainersC50.rc create mode 100644 official/1.104/packages/c5/JclContainersC50.res create mode 100644 official/1.104/packages/c5/JclDebugExpertC50.RES create mode 100644 official/1.104/packages/c5/JclDebugExpertC50.bpk create mode 100644 official/1.104/packages/c5/JclDebugExpertC50.cpp create mode 100644 official/1.104/packages/c5/JclDebugExpertC50.dof create mode 100644 official/1.104/packages/c5/JclDebugExpertC50.dpk create mode 100644 official/1.104/packages/c5/JclDebugExpertC50.rc create mode 100644 official/1.104/packages/c5/JclDebugExpertDLLC50.bpf create mode 100644 official/1.104/packages/c5/JclDebugExpertDLLC50.bpr create mode 100644 official/1.104/packages/c5/JclDebugExpertDLLC50.cpp create mode 100644 official/1.104/packages/c5/JclDebugExpertDLLC50.dof create mode 100644 official/1.104/packages/c5/JclDebugExpertDLLC50.rc create mode 100644 official/1.104/packages/c5/JclDebugExpertDLLC50.res create mode 100644 official/1.104/packages/c5/JclFavoriteFoldersExpertC50.bpk create mode 100644 official/1.104/packages/c5/JclFavoriteFoldersExpertC50.cpp create mode 100644 official/1.104/packages/c5/JclFavoriteFoldersExpertC50.dof create mode 100644 official/1.104/packages/c5/JclFavoriteFoldersExpertC50.dpk create mode 100644 official/1.104/packages/c5/JclFavoriteFoldersExpertC50.rc create mode 100644 official/1.104/packages/c5/JclFavoriteFoldersExpertC50.res create mode 100644 official/1.104/packages/c5/JclFavoriteFoldersExpertDLLC50.bpf create mode 100644 official/1.104/packages/c5/JclFavoriteFoldersExpertDLLC50.bpr create mode 100644 official/1.104/packages/c5/JclFavoriteFoldersExpertDLLC50.cpp create mode 100644 official/1.104/packages/c5/JclFavoriteFoldersExpertDLLC50.dof create mode 100644 official/1.104/packages/c5/JclFavoriteFoldersExpertDLLC50.rc create mode 100644 official/1.104/packages/c5/JclFavoriteFoldersExpertDLLC50.res create mode 100644 official/1.104/packages/c5/JclProjectAnalysisExpertC50.RES create mode 100644 official/1.104/packages/c5/JclProjectAnalysisExpertC50.bpk create mode 100644 official/1.104/packages/c5/JclProjectAnalysisExpertC50.cpp create mode 100644 official/1.104/packages/c5/JclProjectAnalysisExpertC50.dof create mode 100644 official/1.104/packages/c5/JclProjectAnalysisExpertC50.dpk create mode 100644 official/1.104/packages/c5/JclProjectAnalysisExpertC50.rc create mode 100644 official/1.104/packages/c5/JclProjectAnalysisExpertDLLC50.bpf create mode 100644 official/1.104/packages/c5/JclProjectAnalysisExpertDLLC50.bpr create mode 100644 official/1.104/packages/c5/JclProjectAnalysisExpertDLLC50.cpp create mode 100644 official/1.104/packages/c5/JclProjectAnalysisExpertDLLC50.dof create mode 100644 official/1.104/packages/c5/JclProjectAnalysisExpertDLLC50.rc create mode 100644 official/1.104/packages/c5/JclProjectAnalysisExpertDLLC50.res create mode 100644 official/1.104/packages/c5/JclRepositoryExpertC50.bpk create mode 100644 official/1.104/packages/c5/JclRepositoryExpertC50.cpp create mode 100644 official/1.104/packages/c5/JclRepositoryExpertC50.dof create mode 100644 official/1.104/packages/c5/JclRepositoryExpertC50.dpk create mode 100644 official/1.104/packages/c5/JclRepositoryExpertC50.rc create mode 100644 official/1.104/packages/c5/JclRepositoryExpertC50.res create mode 100644 official/1.104/packages/c5/JclRepositoryExpertDLLC50.bpf create mode 100644 official/1.104/packages/c5/JclRepositoryExpertDLLC50.bpr create mode 100644 official/1.104/packages/c5/JclRepositoryExpertDLLC50.cpp create mode 100644 official/1.104/packages/c5/JclRepositoryExpertDLLC50.dof create mode 100644 official/1.104/packages/c5/JclRepositoryExpertDLLC50.rc create mode 100644 official/1.104/packages/c5/JclRepositoryExpertDLLC50.res create mode 100644 official/1.104/packages/c5/JclSIMDViewExpertC50.bpk create mode 100644 official/1.104/packages/c5/JclSIMDViewExpertC50.cpp create mode 100644 official/1.104/packages/c5/JclSIMDViewExpertC50.dof create mode 100644 official/1.104/packages/c5/JclSIMDViewExpertC50.dpk create mode 100644 official/1.104/packages/c5/JclSIMDViewExpertC50.rc create mode 100644 official/1.104/packages/c5/JclSIMDViewExpertC50.res create mode 100644 official/1.104/packages/c5/JclSIMDViewExpertDLLC50.bpf create mode 100644 official/1.104/packages/c5/JclSIMDViewExpertDLLC50.bpr create mode 100644 official/1.104/packages/c5/JclSIMDViewExpertDLLC50.cpp create mode 100644 official/1.104/packages/c5/JclSIMDViewExpertDLLC50.dof create mode 100644 official/1.104/packages/c5/JclSIMDViewExpertDLLC50.rc create mode 100644 official/1.104/packages/c5/JclSIMDViewExpertDLLC50.res create mode 100644 official/1.104/packages/c5/JclThreadNameExpertC50.RES create mode 100644 official/1.104/packages/c5/JclThreadNameExpertC50.bpk create mode 100644 official/1.104/packages/c5/JclThreadNameExpertC50.cpp create mode 100644 official/1.104/packages/c5/JclThreadNameExpertC50.dof create mode 100644 official/1.104/packages/c5/JclThreadNameExpertC50.dpk create mode 100644 official/1.104/packages/c5/JclThreadNameExpertC50.rc create mode 100644 official/1.104/packages/c5/JclThreadNameExpertDLLC50.bpf create mode 100644 official/1.104/packages/c5/JclThreadNameExpertDLLC50.bpr create mode 100644 official/1.104/packages/c5/JclThreadNameExpertDLLC50.cpp create mode 100644 official/1.104/packages/c5/JclThreadNameExpertDLLC50.dof create mode 100644 official/1.104/packages/c5/JclThreadNameExpertDLLC50.rc create mode 100644 official/1.104/packages/c5/JclThreadNameExpertDLLC50.res create mode 100644 official/1.104/packages/c5/JclUsesExpertC50.RES create mode 100644 official/1.104/packages/c5/JclUsesExpertC50.bpk create mode 100644 official/1.104/packages/c5/JclUsesExpertC50.cpp create mode 100644 official/1.104/packages/c5/JclUsesExpertC50.dof create mode 100644 official/1.104/packages/c5/JclUsesExpertC50.dpk create mode 100644 official/1.104/packages/c5/JclUsesExpertC50.rc create mode 100644 official/1.104/packages/c5/JclUsesExpertDLLC50.bpf create mode 100644 official/1.104/packages/c5/JclUsesExpertDLLC50.bpr create mode 100644 official/1.104/packages/c5/JclUsesExpertDLLC50.cpp create mode 100644 official/1.104/packages/c5/JclUsesExpertDLLC50.dof create mode 100644 official/1.104/packages/c5/JclUsesExpertDLLC50.rc create mode 100644 official/1.104/packages/c5/JclUsesExpertDLLC50.res create mode 100644 official/1.104/packages/c5/JclVclC50.bpk create mode 100644 official/1.104/packages/c5/JclVclC50.cpp create mode 100644 official/1.104/packages/c5/JclVclC50.dof create mode 100644 official/1.104/packages/c5/JclVclC50.dpk create mode 100644 official/1.104/packages/c5/JclVclC50.rc create mode 100644 official/1.104/packages/c5/JclVclC50.res create mode 100644 official/1.104/packages/c5/JclVersionControlExpertC50.bpk create mode 100644 official/1.104/packages/c5/JclVersionControlExpertC50.cpp create mode 100644 official/1.104/packages/c5/JclVersionControlExpertC50.dof create mode 100644 official/1.104/packages/c5/JclVersionControlExpertC50.dpk create mode 100644 official/1.104/packages/c5/JclVersionControlExpertC50.rc create mode 100644 official/1.104/packages/c5/JclVersionControlExpertC50.res create mode 100644 official/1.104/packages/c5/JclVersionControlExpertDLLC50.bpf create mode 100644 official/1.104/packages/c5/JclVersionControlExpertDLLC50.bpr create mode 100644 official/1.104/packages/c5/JclVersionControlExpertDLLC50.cpp create mode 100644 official/1.104/packages/c5/JclVersionControlExpertDLLC50.dof create mode 100644 official/1.104/packages/c5/JclVersionControlExpertDLLC50.rc create mode 100644 official/1.104/packages/c5/JclVersionControlExpertDLLC50.res create mode 100644 official/1.104/packages/c5/dirinfo.txt create mode 100644 official/1.104/packages/c5/template.bpf create mode 100644 official/1.104/packages/c5/template.bpk create mode 100644 official/1.104/packages/c5/template.bpr create mode 100644 official/1.104/packages/c5/template.cpp create mode 100644 official/1.104/packages/c5/template.dof create mode 100644 official/1.104/packages/c5/template.dpk create mode 100644 official/1.104/packages/c5/template.rc create mode 100644 official/1.104/packages/c6/Jcl.RES create mode 100644 official/1.104/packages/c6/Jcl.bpk create mode 100644 official/1.104/packages/c6/Jcl.cpp create mode 100644 official/1.104/packages/c6/Jcl.dof create mode 100644 official/1.104/packages/c6/Jcl.dpk create mode 100644 official/1.104/packages/c6/Jcl.rc create mode 100644 official/1.104/packages/c6/JclBaseExpert.bpk create mode 100644 official/1.104/packages/c6/JclBaseExpert.cpp create mode 100644 official/1.104/packages/c6/JclBaseExpert.dof create mode 100644 official/1.104/packages/c6/JclBaseExpert.dpk create mode 100644 official/1.104/packages/c6/JclBaseExpert.rc create mode 100644 official/1.104/packages/c6/JclBaseExpert.res create mode 100644 official/1.104/packages/c6/JclContainers.bpk create mode 100644 official/1.104/packages/c6/JclContainers.cpp create mode 100644 official/1.104/packages/c6/JclContainers.dof create mode 100644 official/1.104/packages/c6/JclContainers.dpk create mode 100644 official/1.104/packages/c6/JclContainers.rc create mode 100644 official/1.104/packages/c6/JclContainers.res create mode 100644 official/1.104/packages/c6/JclDebugExpert.RES create mode 100644 official/1.104/packages/c6/JclDebugExpert.bpk create mode 100644 official/1.104/packages/c6/JclDebugExpert.cpp create mode 100644 official/1.104/packages/c6/JclDebugExpert.dof create mode 100644 official/1.104/packages/c6/JclDebugExpert.dpk create mode 100644 official/1.104/packages/c6/JclDebugExpert.rc create mode 100644 official/1.104/packages/c6/JclDebugExpertDLL.bpf create mode 100644 official/1.104/packages/c6/JclDebugExpertDLL.bpr create mode 100644 official/1.104/packages/c6/JclDebugExpertDLL.cpp create mode 100644 official/1.104/packages/c6/JclDebugExpertDLL.dof create mode 100644 official/1.104/packages/c6/JclDebugExpertDLL.rc create mode 100644 official/1.104/packages/c6/JclDebugExpertDLL.res create mode 100644 official/1.104/packages/c6/JclFavoriteFoldersExpert.RES create mode 100644 official/1.104/packages/c6/JclFavoriteFoldersExpert.bpk create mode 100644 official/1.104/packages/c6/JclFavoriteFoldersExpert.cpp create mode 100644 official/1.104/packages/c6/JclFavoriteFoldersExpert.dof create mode 100644 official/1.104/packages/c6/JclFavoriteFoldersExpert.dpk create mode 100644 official/1.104/packages/c6/JclFavoriteFoldersExpert.rc create mode 100644 official/1.104/packages/c6/JclFavoriteFoldersExpertDLL.bpf create mode 100644 official/1.104/packages/c6/JclFavoriteFoldersExpertDLL.bpr create mode 100644 official/1.104/packages/c6/JclFavoriteFoldersExpertDLL.cpp create mode 100644 official/1.104/packages/c6/JclFavoriteFoldersExpertDLL.dof create mode 100644 official/1.104/packages/c6/JclFavoriteFoldersExpertDLL.rc create mode 100644 official/1.104/packages/c6/JclFavoriteFoldersExpertDLL.res create mode 100644 official/1.104/packages/c6/JclProjectAnalysisExpert.RES create mode 100644 official/1.104/packages/c6/JclProjectAnalysisExpert.bpk create mode 100644 official/1.104/packages/c6/JclProjectAnalysisExpert.cpp create mode 100644 official/1.104/packages/c6/JclProjectAnalysisExpert.dof create mode 100644 official/1.104/packages/c6/JclProjectAnalysisExpert.dpk create mode 100644 official/1.104/packages/c6/JclProjectAnalysisExpert.rc create mode 100644 official/1.104/packages/c6/JclProjectAnalysisExpertDLL.bpf create mode 100644 official/1.104/packages/c6/JclProjectAnalysisExpertDLL.bpr create mode 100644 official/1.104/packages/c6/JclProjectAnalysisExpertDLL.cpp create mode 100644 official/1.104/packages/c6/JclProjectAnalysisExpertDLL.dof create mode 100644 official/1.104/packages/c6/JclProjectAnalysisExpertDLL.rc create mode 100644 official/1.104/packages/c6/JclProjectAnalysisExpertDLL.res create mode 100644 official/1.104/packages/c6/JclRepositoryExpert.bpk create mode 100644 official/1.104/packages/c6/JclRepositoryExpert.cpp create mode 100644 official/1.104/packages/c6/JclRepositoryExpert.dof create mode 100644 official/1.104/packages/c6/JclRepositoryExpert.dpk create mode 100644 official/1.104/packages/c6/JclRepositoryExpert.rc create mode 100644 official/1.104/packages/c6/JclRepositoryExpert.res create mode 100644 official/1.104/packages/c6/JclRepositoryExpertDLL.bpf create mode 100644 official/1.104/packages/c6/JclRepositoryExpertDLL.bpr create mode 100644 official/1.104/packages/c6/JclRepositoryExpertDLL.cpp create mode 100644 official/1.104/packages/c6/JclRepositoryExpertDLL.dof create mode 100644 official/1.104/packages/c6/JclRepositoryExpertDLL.rc create mode 100644 official/1.104/packages/c6/JclRepositoryExpertDLL.res create mode 100644 official/1.104/packages/c6/JclSIMDViewExpert.bpk create mode 100644 official/1.104/packages/c6/JclSIMDViewExpert.cpp create mode 100644 official/1.104/packages/c6/JclSIMDViewExpert.dof create mode 100644 official/1.104/packages/c6/JclSIMDViewExpert.dpk create mode 100644 official/1.104/packages/c6/JclSIMDViewExpert.rc create mode 100644 official/1.104/packages/c6/JclSIMDViewExpert.res create mode 100644 official/1.104/packages/c6/JclSIMDViewExpertDLL.bpf create mode 100644 official/1.104/packages/c6/JclSIMDViewExpertDLL.bpr create mode 100644 official/1.104/packages/c6/JclSIMDViewExpertDLL.cpp create mode 100644 official/1.104/packages/c6/JclSIMDViewExpertDLL.dof create mode 100644 official/1.104/packages/c6/JclSIMDViewExpertDLL.rc create mode 100644 official/1.104/packages/c6/JclSIMDViewExpertDLL.res create mode 100644 official/1.104/packages/c6/JclThreadNameExpert.RES create mode 100644 official/1.104/packages/c6/JclThreadNameExpert.bpk create mode 100644 official/1.104/packages/c6/JclThreadNameExpert.cpp create mode 100644 official/1.104/packages/c6/JclThreadNameExpert.dof create mode 100644 official/1.104/packages/c6/JclThreadNameExpert.dpk create mode 100644 official/1.104/packages/c6/JclThreadNameExpert.rc create mode 100644 official/1.104/packages/c6/JclThreadNameExpertDLL.bpf create mode 100644 official/1.104/packages/c6/JclThreadNameExpertDLL.bpr create mode 100644 official/1.104/packages/c6/JclThreadNameExpertDLL.cpp create mode 100644 official/1.104/packages/c6/JclThreadNameExpertDLL.dof create mode 100644 official/1.104/packages/c6/JclThreadNameExpertDLL.rc create mode 100644 official/1.104/packages/c6/JclThreadNameExpertDLL.res create mode 100644 official/1.104/packages/c6/JclUsesExpert.RES create mode 100644 official/1.104/packages/c6/JclUsesExpert.bpk create mode 100644 official/1.104/packages/c6/JclUsesExpert.cpp create mode 100644 official/1.104/packages/c6/JclUsesExpert.dof create mode 100644 official/1.104/packages/c6/JclUsesExpert.dpk create mode 100644 official/1.104/packages/c6/JclUsesExpert.rc create mode 100644 official/1.104/packages/c6/JclUsesExpertDLL.bpf create mode 100644 official/1.104/packages/c6/JclUsesExpertDLL.bpr create mode 100644 official/1.104/packages/c6/JclUsesExpertDLL.cpp create mode 100644 official/1.104/packages/c6/JclUsesExpertDLL.dof create mode 100644 official/1.104/packages/c6/JclUsesExpertDLL.rc create mode 100644 official/1.104/packages/c6/JclUsesExpertDLL.res create mode 100644 official/1.104/packages/c6/JclVClx.RES create mode 100644 official/1.104/packages/c6/JclVClx.bpk create mode 100644 official/1.104/packages/c6/JclVClx.cpp create mode 100644 official/1.104/packages/c6/JclVClx.dof create mode 100644 official/1.104/packages/c6/JclVClx.dpk create mode 100644 official/1.104/packages/c6/JclVClx.rc create mode 100644 official/1.104/packages/c6/JclVcl.RES create mode 100644 official/1.104/packages/c6/JclVcl.bpk create mode 100644 official/1.104/packages/c6/JclVcl.cpp create mode 100644 official/1.104/packages/c6/JclVcl.dof create mode 100644 official/1.104/packages/c6/JclVcl.dpk create mode 100644 official/1.104/packages/c6/JclVcl.rc create mode 100644 official/1.104/packages/c6/JclVersionControlExpert.bpk create mode 100644 official/1.104/packages/c6/JclVersionControlExpert.cpp create mode 100644 official/1.104/packages/c6/JclVersionControlExpert.dof create mode 100644 official/1.104/packages/c6/JclVersionControlExpert.dpk create mode 100644 official/1.104/packages/c6/JclVersionControlExpert.rc create mode 100644 official/1.104/packages/c6/JclVersionControlExpert.res create mode 100644 official/1.104/packages/c6/JclVersionControlExpertDLL.bpf create mode 100644 official/1.104/packages/c6/JclVersionControlExpertDLL.bpr create mode 100644 official/1.104/packages/c6/JclVersionControlExpertDLL.cpp create mode 100644 official/1.104/packages/c6/JclVersionControlExpertDLL.dof create mode 100644 official/1.104/packages/c6/JclVersionControlExpertDLL.rc create mode 100644 official/1.104/packages/c6/JclVersionControlExpertDLL.res create mode 100644 official/1.104/packages/c6/dirinfo.txt create mode 100644 official/1.104/packages/c6/template.bpf create mode 100644 official/1.104/packages/c6/template.bpk create mode 100644 official/1.104/packages/c6/template.bpr create mode 100644 official/1.104/packages/c6/template.cpp create mode 100644 official/1.104/packages/c6/template.dof create mode 100644 official/1.104/packages/c6/template.dpk create mode 100644 official/1.104/packages/c6/template.rc create mode 100644 official/1.104/packages/cs1/Jcl.RES create mode 100644 official/1.104/packages/cs1/Jcl.bdsproj create mode 100644 official/1.104/packages/cs1/Jcl.dpk create mode 100644 official/1.104/packages/cs1/Jcl.rc create mode 100644 official/1.104/packages/cs1/JclBaseExpert.RES create mode 100644 official/1.104/packages/cs1/JclBaseExpert.bdsproj create mode 100644 official/1.104/packages/cs1/JclBaseExpert.dpk create mode 100644 official/1.104/packages/cs1/JclBaseExpert.rc create mode 100644 official/1.104/packages/cs1/JclContainers.bdsproj create mode 100644 official/1.104/packages/cs1/JclContainers.dpk create mode 100644 official/1.104/packages/cs1/JclContainers.rc create mode 100644 official/1.104/packages/cs1/JclContainers.res create mode 100644 official/1.104/packages/cs1/JclFavoriteFoldersExpertDLL.RES create mode 100644 official/1.104/packages/cs1/JclFavoriteFoldersExpertDLL.bdsproj create mode 100644 official/1.104/packages/cs1/JclFavoriteFoldersExpertDLL.dpr create mode 100644 official/1.104/packages/cs1/JclFavoriteFoldersExpertDLL.rc create mode 100644 official/1.104/packages/cs1/JclVersionControlExpertDLL.bdsproj create mode 100644 official/1.104/packages/cs1/JclVersionControlExpertDLL.dpr create mode 100644 official/1.104/packages/cs1/JclVersionControlExpertDLL.rc create mode 100644 official/1.104/packages/cs1/JclVersionControlExpertDLL.res create mode 100644 official/1.104/packages/cs1/template.bdsproj create mode 100644 official/1.104/packages/cs1/template.dpk create mode 100644 official/1.104/packages/cs1/template.dpr create mode 100644 official/1.104/packages/cs1/template.rc create mode 100644 official/1.104/packages/d10.net/Jedi.Jcl.bdsproj create mode 100644 official/1.104/packages/d10.net/Jedi.Jcl.dpk create mode 100644 official/1.104/packages/d10.net/Jedi.JclContainers.bdsproj create mode 100644 official/1.104/packages/d10.net/Jedi.JclContainers.dpk create mode 100644 official/1.104/packages/d10.net/template.bdsproj create mode 100644 official/1.104/packages/d10.net/template.dpk create mode 100644 official/1.104/packages/d10/Jcl.bdsproj create mode 100644 official/1.104/packages/d10/Jcl.dpk create mode 100644 official/1.104/packages/d10/Jcl.rc create mode 100644 official/1.104/packages/d10/Jcl.res create mode 100644 official/1.104/packages/d10/JclBaseExpert.bdsproj create mode 100644 official/1.104/packages/d10/JclBaseExpert.dpk create mode 100644 official/1.104/packages/d10/JclBaseExpert.rc create mode 100644 official/1.104/packages/d10/JclBaseExpert.res create mode 100644 official/1.104/packages/d10/JclContainers.bdsproj create mode 100644 official/1.104/packages/d10/JclContainers.dpk create mode 100644 official/1.104/packages/d10/JclContainers.rc create mode 100644 official/1.104/packages/d10/JclContainers.res create mode 100644 official/1.104/packages/d10/JclDebugExpert.bdsproj create mode 100644 official/1.104/packages/d10/JclDebugExpert.dpk create mode 100644 official/1.104/packages/d10/JclDebugExpert.rc create mode 100644 official/1.104/packages/d10/JclDebugExpert.res create mode 100644 official/1.104/packages/d10/JclDebugExpertDLL.bdsproj create mode 100644 official/1.104/packages/d10/JclDebugExpertDLL.dpr create mode 100644 official/1.104/packages/d10/JclDebugExpertDLL.rc create mode 100644 official/1.104/packages/d10/JclDebugExpertDLL.res create mode 100644 official/1.104/packages/d10/JclExperts.bdsgroup create mode 100644 official/1.104/packages/d10/JclFavoriteFoldersExpert.bdsproj create mode 100644 official/1.104/packages/d10/JclFavoriteFoldersExpert.dpk create mode 100644 official/1.104/packages/d10/JclFavoriteFoldersExpert.rc create mode 100644 official/1.104/packages/d10/JclFavoriteFoldersExpert.res create mode 100644 official/1.104/packages/d10/JclFavoriteFoldersExpertDLL.bdsproj create mode 100644 official/1.104/packages/d10/JclFavoriteFoldersExpertDLL.dpr create mode 100644 official/1.104/packages/d10/JclFavoriteFoldersExpertDLL.rc create mode 100644 official/1.104/packages/d10/JclFavoriteFoldersExpertDLL.res create mode 100644 official/1.104/packages/d10/JclProjectAnalysisExpert.RES create mode 100644 official/1.104/packages/d10/JclProjectAnalysisExpert.bdsproj create mode 100644 official/1.104/packages/d10/JclProjectAnalysisExpert.dpk create mode 100644 official/1.104/packages/d10/JclProjectAnalysisExpert.rc create mode 100644 official/1.104/packages/d10/JclProjectAnalysisExpertDLL.bdsproj create mode 100644 official/1.104/packages/d10/JclProjectAnalysisExpertDLL.dpr create mode 100644 official/1.104/packages/d10/JclProjectAnalysisExpertDLL.rc create mode 100644 official/1.104/packages/d10/JclProjectAnalysisExpertDLL.res create mode 100644 official/1.104/packages/d10/JclRepositoryExpert.bdsproj create mode 100644 official/1.104/packages/d10/JclRepositoryExpert.dpk create mode 100644 official/1.104/packages/d10/JclRepositoryExpert.rc create mode 100644 official/1.104/packages/d10/JclRepositoryExpert.res create mode 100644 official/1.104/packages/d10/JclRepositoryExpertDLL.bdsproj create mode 100644 official/1.104/packages/d10/JclRepositoryExpertDLL.dpr create mode 100644 official/1.104/packages/d10/JclRepositoryExpertDLL.rc create mode 100644 official/1.104/packages/d10/JclRepositoryExpertDLL.res create mode 100644 official/1.104/packages/d10/JclSIMDViewExpert.bdsproj create mode 100644 official/1.104/packages/d10/JclSIMDViewExpert.dpk create mode 100644 official/1.104/packages/d10/JclSIMDViewExpert.rc create mode 100644 official/1.104/packages/d10/JclSIMDViewExpert.res create mode 100644 official/1.104/packages/d10/JclSIMDViewExpertDLL.bdsproj create mode 100644 official/1.104/packages/d10/JclSIMDViewExpertDLL.dpr create mode 100644 official/1.104/packages/d10/JclSIMDViewExpertDLL.rc create mode 100644 official/1.104/packages/d10/JclSIMDViewExpertDLL.res create mode 100644 official/1.104/packages/d10/JclVcl.bdsproj create mode 100644 official/1.104/packages/d10/JclVcl.dpk create mode 100644 official/1.104/packages/d10/JclVcl.rc create mode 100644 official/1.104/packages/d10/JclVcl.res create mode 100644 official/1.104/packages/d10/JclVersionControlExpert.bdsproj create mode 100644 official/1.104/packages/d10/JclVersionControlExpert.dpk create mode 100644 official/1.104/packages/d10/JclVersionControlExpert.rc create mode 100644 official/1.104/packages/d10/JclVersionControlExpert.res create mode 100644 official/1.104/packages/d10/JclVersionControlExpertDLL.bdsproj create mode 100644 official/1.104/packages/d10/JclVersionControlExpertDLL.dpr create mode 100644 official/1.104/packages/d10/JclVersionControlExpertDLL.rc create mode 100644 official/1.104/packages/d10/JclVersionControlExpertDLL.res create mode 100644 official/1.104/packages/d10/template.bdsproj create mode 100644 official/1.104/packages/d10/template.dpk create mode 100644 official/1.104/packages/d10/template.dpr create mode 100644 official/1.104/packages/d10/template.rc create mode 100644 official/1.104/packages/d11.net/Jedi.Jcl.dpk create mode 100644 official/1.104/packages/d11.net/Jedi.Jcl.dproj create mode 100644 official/1.104/packages/d11.net/Jedi.JclContainers.dpk create mode 100644 official/1.104/packages/d11.net/Jedi.JclContainers.dproj create mode 100644 official/1.104/packages/d11.net/template.dpk create mode 100644 official/1.104/packages/d11.net/template.dproj create mode 100644 official/1.104/packages/d11/Jcl.dpk create mode 100644 official/1.104/packages/d11/Jcl.dproj create mode 100644 official/1.104/packages/d11/Jcl.rc create mode 100644 official/1.104/packages/d11/Jcl.res create mode 100644 official/1.104/packages/d11/JclBaseExpert.dpk create mode 100644 official/1.104/packages/d11/JclBaseExpert.dproj create mode 100644 official/1.104/packages/d11/JclBaseExpert.rc create mode 100644 official/1.104/packages/d11/JclBaseExpert.res create mode 100644 official/1.104/packages/d11/JclContainers.dpk create mode 100644 official/1.104/packages/d11/JclContainers.dproj create mode 100644 official/1.104/packages/d11/JclContainers.rc create mode 100644 official/1.104/packages/d11/JclContainers.res create mode 100644 official/1.104/packages/d11/JclDebugExpert.dpk create mode 100644 official/1.104/packages/d11/JclDebugExpert.dproj create mode 100644 official/1.104/packages/d11/JclDebugExpert.rc create mode 100644 official/1.104/packages/d11/JclDebugExpert.res create mode 100644 official/1.104/packages/d11/JclDebugExpertDLL.dpr create mode 100644 official/1.104/packages/d11/JclDebugExpertDLL.dproj create mode 100644 official/1.104/packages/d11/JclDebugExpertDLL.rc create mode 100644 official/1.104/packages/d11/JclDebugExpertDLL.res create mode 100644 official/1.104/packages/d11/JclFavoriteFoldersExpert.dpk create mode 100644 official/1.104/packages/d11/JclFavoriteFoldersExpert.dproj create mode 100644 official/1.104/packages/d11/JclFavoriteFoldersExpert.rc create mode 100644 official/1.104/packages/d11/JclFavoriteFoldersExpert.res create mode 100644 official/1.104/packages/d11/JclFavoriteFoldersExpertDLL.dpr create mode 100644 official/1.104/packages/d11/JclFavoriteFoldersExpertDLL.dproj create mode 100644 official/1.104/packages/d11/JclFavoriteFoldersExpertDLL.rc create mode 100644 official/1.104/packages/d11/JclFavoriteFoldersExpertDLL.res create mode 100644 official/1.104/packages/d11/JclProjectAnalysisExpert.dpk create mode 100644 official/1.104/packages/d11/JclProjectAnalysisExpert.dproj create mode 100644 official/1.104/packages/d11/JclProjectAnalysisExpert.rc create mode 100644 official/1.104/packages/d11/JclProjectAnalysisExpert.res create mode 100644 official/1.104/packages/d11/JclProjectAnalysisExpertDLL.dpr create mode 100644 official/1.104/packages/d11/JclProjectAnalysisExpertDLL.dproj create mode 100644 official/1.104/packages/d11/JclProjectAnalysisExpertDLL.rc create mode 100644 official/1.104/packages/d11/JclProjectAnalysisExpertDLL.res create mode 100644 official/1.104/packages/d11/JclRepositoryExpert.dpk create mode 100644 official/1.104/packages/d11/JclRepositoryExpert.dproj create mode 100644 official/1.104/packages/d11/JclRepositoryExpert.rc create mode 100644 official/1.104/packages/d11/JclRepositoryExpert.res create mode 100644 official/1.104/packages/d11/JclRepositoryExpertDLL.dpr create mode 100644 official/1.104/packages/d11/JclRepositoryExpertDLL.dproj create mode 100644 official/1.104/packages/d11/JclRepositoryExpertDLL.rc create mode 100644 official/1.104/packages/d11/JclRepositoryExpertDLL.res create mode 100644 official/1.104/packages/d11/JclSIMDViewExpert.dpk create mode 100644 official/1.104/packages/d11/JclSIMDViewExpert.dproj create mode 100644 official/1.104/packages/d11/JclSIMDViewExpert.rc create mode 100644 official/1.104/packages/d11/JclSIMDViewExpert.res create mode 100644 official/1.104/packages/d11/JclSIMDViewExpertDLL.dpr create mode 100644 official/1.104/packages/d11/JclSIMDViewExpertDLL.dproj create mode 100644 official/1.104/packages/d11/JclSIMDViewExpertDLL.rc create mode 100644 official/1.104/packages/d11/JclSIMDViewExpertDLL.res create mode 100644 official/1.104/packages/d11/JclVcl.dpk create mode 100644 official/1.104/packages/d11/JclVcl.dproj create mode 100644 official/1.104/packages/d11/JclVcl.rc create mode 100644 official/1.104/packages/d11/JclVcl.res create mode 100644 official/1.104/packages/d11/JclVersionControlExpert.dpk create mode 100644 official/1.104/packages/d11/JclVersionControlExpert.dproj create mode 100644 official/1.104/packages/d11/JclVersionControlExpert.rc create mode 100644 official/1.104/packages/d11/JclVersionControlExpert.res create mode 100644 official/1.104/packages/d11/JclVersionControlExpertDLL.dpr create mode 100644 official/1.104/packages/d11/JclVersionControlExpertDLL.dproj create mode 100644 official/1.104/packages/d11/JclVersionControlExpertDLL.rc create mode 100644 official/1.104/packages/d11/JclVersionControlExpertDLL.res create mode 100644 official/1.104/packages/d11/template.dpk create mode 100644 official/1.104/packages/d11/template.dpr create mode 100644 official/1.104/packages/d11/template.dproj create mode 100644 official/1.104/packages/d11/template.rc create mode 100644 official/1.104/packages/d12/Jcl.dpk create mode 100644 official/1.104/packages/d12/Jcl.dproj create mode 100644 official/1.104/packages/d12/Jcl.rc create mode 100644 official/1.104/packages/d12/Jcl.res create mode 100644 official/1.104/packages/d12/JclBaseExpert.dpk create mode 100644 official/1.104/packages/d12/JclBaseExpert.dproj create mode 100644 official/1.104/packages/d12/JclBaseExpert.rc create mode 100644 official/1.104/packages/d12/JclBaseExpert.res create mode 100644 official/1.104/packages/d12/JclContainers.dpk create mode 100644 official/1.104/packages/d12/JclContainers.dproj create mode 100644 official/1.104/packages/d12/JclContainers.rc create mode 100644 official/1.104/packages/d12/JclContainers.res create mode 100644 official/1.104/packages/d12/JclDebugExpert.dpk create mode 100644 official/1.104/packages/d12/JclDebugExpert.dproj create mode 100644 official/1.104/packages/d12/JclDebugExpert.rc create mode 100644 official/1.104/packages/d12/JclDebugExpert.res create mode 100644 official/1.104/packages/d12/JclDebugExpertDLL.dpr create mode 100644 official/1.104/packages/d12/JclDebugExpertDLL.dproj create mode 100644 official/1.104/packages/d12/JclDebugExpertDLL.rc create mode 100644 official/1.104/packages/d12/JclDebugExpertDLL.res create mode 100644 official/1.104/packages/d12/JclFavoriteFoldersExpert.dpk create mode 100644 official/1.104/packages/d12/JclFavoriteFoldersExpert.dproj create mode 100644 official/1.104/packages/d12/JclFavoriteFoldersExpert.rc create mode 100644 official/1.104/packages/d12/JclFavoriteFoldersExpert.res create mode 100644 official/1.104/packages/d12/JclFavoriteFoldersExpertDLL.dpr create mode 100644 official/1.104/packages/d12/JclFavoriteFoldersExpertDLL.dproj create mode 100644 official/1.104/packages/d12/JclFavoriteFoldersExpertDLL.rc create mode 100644 official/1.104/packages/d12/JclFavoriteFoldersExpertDLL.res create mode 100644 official/1.104/packages/d12/JclProjectAnalysisExpert.dpk create mode 100644 official/1.104/packages/d12/JclProjectAnalysisExpert.dproj create mode 100644 official/1.104/packages/d12/JclProjectAnalysisExpert.rc create mode 100644 official/1.104/packages/d12/JclProjectAnalysisExpert.res create mode 100644 official/1.104/packages/d12/JclProjectAnalysisExpertDLL.dpr create mode 100644 official/1.104/packages/d12/JclProjectAnalysisExpertDLL.dproj create mode 100644 official/1.104/packages/d12/JclProjectAnalysisExpertDLL.rc create mode 100644 official/1.104/packages/d12/JclProjectAnalysisExpertDLL.res create mode 100644 official/1.104/packages/d12/JclRepositoryExpert.dpk create mode 100644 official/1.104/packages/d12/JclRepositoryExpert.dproj create mode 100644 official/1.104/packages/d12/JclRepositoryExpert.rc create mode 100644 official/1.104/packages/d12/JclRepositoryExpert.res create mode 100644 official/1.104/packages/d12/JclRepositoryExpertDLL.dpr create mode 100644 official/1.104/packages/d12/JclRepositoryExpertDLL.dproj create mode 100644 official/1.104/packages/d12/JclRepositoryExpertDLL.rc create mode 100644 official/1.104/packages/d12/JclRepositoryExpertDLL.res create mode 100644 official/1.104/packages/d12/JclSIMDViewExpert.dpk create mode 100644 official/1.104/packages/d12/JclSIMDViewExpert.dproj create mode 100644 official/1.104/packages/d12/JclSIMDViewExpert.rc create mode 100644 official/1.104/packages/d12/JclSIMDViewExpert.res create mode 100644 official/1.104/packages/d12/JclSIMDViewExpertDLL.dpr create mode 100644 official/1.104/packages/d12/JclSIMDViewExpertDLL.dproj create mode 100644 official/1.104/packages/d12/JclSIMDViewExpertDLL.rc create mode 100644 official/1.104/packages/d12/JclSIMDViewExpertDLL.res create mode 100644 official/1.104/packages/d12/JclVcl.dpk create mode 100644 official/1.104/packages/d12/JclVcl.dproj create mode 100644 official/1.104/packages/d12/JclVcl.rc create mode 100644 official/1.104/packages/d12/JclVcl.res create mode 100644 official/1.104/packages/d12/JclVersionControlExpert.dpk create mode 100644 official/1.104/packages/d12/JclVersionControlExpert.dproj create mode 100644 official/1.104/packages/d12/JclVersionControlExpert.rc create mode 100644 official/1.104/packages/d12/JclVersionControlExpert.res create mode 100644 official/1.104/packages/d12/JclVersionControlExpertDLL.dpr create mode 100644 official/1.104/packages/d12/JclVersionControlExpertDLL.dproj create mode 100644 official/1.104/packages/d12/JclVersionControlExpertDLL.rc create mode 100644 official/1.104/packages/d12/JclVersionControlExpertDLL.res create mode 100644 official/1.104/packages/d12/template.dpk create mode 100644 official/1.104/packages/d12/template.dpr create mode 100644 official/1.104/packages/d12/template.dproj create mode 100644 official/1.104/packages/d12/template.rc create mode 100644 official/1.104/packages/d5/JclBaseExpertD50.dof create mode 100644 official/1.104/packages/d5/JclBaseExpertD50.dpk create mode 100644 official/1.104/packages/d5/JclBaseExpertD50.rc create mode 100644 official/1.104/packages/d5/JclBaseExpertD50.res create mode 100644 official/1.104/packages/d5/JclContainersD50.dof create mode 100644 official/1.104/packages/d5/JclContainersD50.dpk create mode 100644 official/1.104/packages/d5/JclContainersD50.rc create mode 100644 official/1.104/packages/d5/JclContainersD50.res create mode 100644 official/1.104/packages/d5/JclD50.RES create mode 100644 official/1.104/packages/d5/JclD50.dof create mode 100644 official/1.104/packages/d5/JclD50.dpk create mode 100644 official/1.104/packages/d5/JclD50.rc create mode 100644 official/1.104/packages/d5/JclDebugExpertD50.RES create mode 100644 official/1.104/packages/d5/JclDebugExpertD50.dof create mode 100644 official/1.104/packages/d5/JclDebugExpertD50.dpk create mode 100644 official/1.104/packages/d5/JclDebugExpertD50.rc create mode 100644 official/1.104/packages/d5/JclDebugExpertDLLD50.RES create mode 100644 official/1.104/packages/d5/JclDebugExpertDLLD50.dof create mode 100644 official/1.104/packages/d5/JclDebugExpertDLLD50.dpr create mode 100644 official/1.104/packages/d5/JclDebugExpertDLLD50.rc create mode 100644 official/1.104/packages/d5/JclFavoriteFoldersExpertD50.RES create mode 100644 official/1.104/packages/d5/JclFavoriteFoldersExpertD50.dof create mode 100644 official/1.104/packages/d5/JclFavoriteFoldersExpertD50.dpk create mode 100644 official/1.104/packages/d5/JclFavoriteFoldersExpertD50.rc create mode 100644 official/1.104/packages/d5/JclFavoriteFoldersExpertDLLD50.RES create mode 100644 official/1.104/packages/d5/JclFavoriteFoldersExpertDLLD50.dof create mode 100644 official/1.104/packages/d5/JclFavoriteFoldersExpertDLLD50.dpr create mode 100644 official/1.104/packages/d5/JclFavoriteFoldersExpertDLLD50.rc create mode 100644 official/1.104/packages/d5/JclProjectAnalysisExpertD50.RES create mode 100644 official/1.104/packages/d5/JclProjectAnalysisExpertD50.dof create mode 100644 official/1.104/packages/d5/JclProjectAnalysisExpertD50.dpk create mode 100644 official/1.104/packages/d5/JclProjectAnalysisExpertD50.rc create mode 100644 official/1.104/packages/d5/JclProjectAnalysisExpertDLLD50.RES create mode 100644 official/1.104/packages/d5/JclProjectAnalysisExpertDLLD50.dof create mode 100644 official/1.104/packages/d5/JclProjectAnalysisExpertDLLD50.dpr create mode 100644 official/1.104/packages/d5/JclProjectAnalysisExpertDLLD50.rc create mode 100644 official/1.104/packages/d5/JclRepositoryExpertD50.dof create mode 100644 official/1.104/packages/d5/JclRepositoryExpertD50.dpk create mode 100644 official/1.104/packages/d5/JclRepositoryExpertD50.rc create mode 100644 official/1.104/packages/d5/JclRepositoryExpertD50.res create mode 100644 official/1.104/packages/d5/JclRepositoryExpertDLLD50.dof create mode 100644 official/1.104/packages/d5/JclRepositoryExpertDLLD50.dpr create mode 100644 official/1.104/packages/d5/JclRepositoryExpertDLLD50.rc create mode 100644 official/1.104/packages/d5/JclRepositoryExpertDLLD50.res create mode 100644 official/1.104/packages/d5/JclSIMDViewExpertD50.RES create mode 100644 official/1.104/packages/d5/JclSIMDViewExpertD50.dof create mode 100644 official/1.104/packages/d5/JclSIMDViewExpertD50.dpk create mode 100644 official/1.104/packages/d5/JclSIMDViewExpertD50.rc create mode 100644 official/1.104/packages/d5/JclSIMDViewExpertDLLD50.RES create mode 100644 official/1.104/packages/d5/JclSIMDViewExpertDLLD50.dof create mode 100644 official/1.104/packages/d5/JclSIMDViewExpertDLLD50.dpr create mode 100644 official/1.104/packages/d5/JclSIMDViewExpertDLLD50.rc create mode 100644 official/1.104/packages/d5/JclThreadNameExpertD50.RES create mode 100644 official/1.104/packages/d5/JclThreadNameExpertD50.dof create mode 100644 official/1.104/packages/d5/JclThreadNameExpertD50.dpk create mode 100644 official/1.104/packages/d5/JclThreadNameExpertD50.rc create mode 100644 official/1.104/packages/d5/JclThreadNameExpertDLLD50.RES create mode 100644 official/1.104/packages/d5/JclThreadNameExpertDLLD50.dof create mode 100644 official/1.104/packages/d5/JclThreadNameExpertDLLD50.dpr create mode 100644 official/1.104/packages/d5/JclThreadNameExpertDLLD50.rc create mode 100644 official/1.104/packages/d5/JclUsesExpertD50.RES create mode 100644 official/1.104/packages/d5/JclUsesExpertD50.dof create mode 100644 official/1.104/packages/d5/JclUsesExpertD50.dpk create mode 100644 official/1.104/packages/d5/JclUsesExpertD50.rc create mode 100644 official/1.104/packages/d5/JclUsesExpertDLLD50.RES create mode 100644 official/1.104/packages/d5/JclUsesExpertDLLD50.dof create mode 100644 official/1.104/packages/d5/JclUsesExpertDLLD50.dpr create mode 100644 official/1.104/packages/d5/JclUsesExpertDLLD50.rc create mode 100644 official/1.104/packages/d5/JclVclD50.dof create mode 100644 official/1.104/packages/d5/JclVclD50.dpk create mode 100644 official/1.104/packages/d5/JclVclD50.rc create mode 100644 official/1.104/packages/d5/JclVclD50.res create mode 100644 official/1.104/packages/d5/JclVersionControlExpertD50.dof create mode 100644 official/1.104/packages/d5/JclVersionControlExpertD50.dpk create mode 100644 official/1.104/packages/d5/JclVersionControlExpertD50.rc create mode 100644 official/1.104/packages/d5/JclVersionControlExpertD50.res create mode 100644 official/1.104/packages/d5/JclVersionControlExpertDLLD50.dof create mode 100644 official/1.104/packages/d5/JclVersionControlExpertDLLD50.dpr create mode 100644 official/1.104/packages/d5/JclVersionControlExpertDLLD50.rc create mode 100644 official/1.104/packages/d5/JclVersionControlExpertDLLD50.res create mode 100644 official/1.104/packages/d5/dirinfo.txt create mode 100644 official/1.104/packages/d5/template.dof create mode 100644 official/1.104/packages/d5/template.dpk create mode 100644 official/1.104/packages/d5/template.dpr create mode 100644 official/1.104/packages/d5/template.rc create mode 100644 official/1.104/packages/d6/Jcl.dof create mode 100644 official/1.104/packages/d6/Jcl.dpk create mode 100644 official/1.104/packages/d6/Jcl.rc create mode 100644 official/1.104/packages/d6/Jcl.res create mode 100644 official/1.104/packages/d6/JclBaseExpert.dof create mode 100644 official/1.104/packages/d6/JclBaseExpert.dpk create mode 100644 official/1.104/packages/d6/JclBaseExpert.rc create mode 100644 official/1.104/packages/d6/JclBaseExpert.res create mode 100644 official/1.104/packages/d6/JclContainers.dof create mode 100644 official/1.104/packages/d6/JclContainers.dpk create mode 100644 official/1.104/packages/d6/JclContainers.rc create mode 100644 official/1.104/packages/d6/JclContainers.res create mode 100644 official/1.104/packages/d6/JclDebugExpert.dof create mode 100644 official/1.104/packages/d6/JclDebugExpert.dpk create mode 100644 official/1.104/packages/d6/JclDebugExpert.rc create mode 100644 official/1.104/packages/d6/JclDebugExpert.res create mode 100644 official/1.104/packages/d6/JclDebugExpertDLL.RES create mode 100644 official/1.104/packages/d6/JclDebugExpertDLL.dof create mode 100644 official/1.104/packages/d6/JclDebugExpertDLL.dpr create mode 100644 official/1.104/packages/d6/JclDebugExpertDLL.rc create mode 100644 official/1.104/packages/d6/JclFavoriteFoldersExpert.dof create mode 100644 official/1.104/packages/d6/JclFavoriteFoldersExpert.dpk create mode 100644 official/1.104/packages/d6/JclFavoriteFoldersExpert.rc create mode 100644 official/1.104/packages/d6/JclFavoriteFoldersExpert.res create mode 100644 official/1.104/packages/d6/JclFavoriteFoldersExpertDLL.RES create mode 100644 official/1.104/packages/d6/JclFavoriteFoldersExpertDLL.dof create mode 100644 official/1.104/packages/d6/JclFavoriteFoldersExpertDLL.dpr create mode 100644 official/1.104/packages/d6/JclFavoriteFoldersExpertDLL.rc create mode 100644 official/1.104/packages/d6/JclProjectAnalysisExpert.RES create mode 100644 official/1.104/packages/d6/JclProjectAnalysisExpert.dof create mode 100644 official/1.104/packages/d6/JclProjectAnalysisExpert.dpk create mode 100644 official/1.104/packages/d6/JclProjectAnalysisExpert.rc create mode 100644 official/1.104/packages/d6/JclProjectAnalysisExpertDLL.RES create mode 100644 official/1.104/packages/d6/JclProjectAnalysisExpertDLL.dof create mode 100644 official/1.104/packages/d6/JclProjectAnalysisExpertDLL.dpr create mode 100644 official/1.104/packages/d6/JclProjectAnalysisExpertDLL.rc create mode 100644 official/1.104/packages/d6/JclRepositoryExpert.dof create mode 100644 official/1.104/packages/d6/JclRepositoryExpert.dpk create mode 100644 official/1.104/packages/d6/JclRepositoryExpert.rc create mode 100644 official/1.104/packages/d6/JclRepositoryExpert.res create mode 100644 official/1.104/packages/d6/JclRepositoryExpertDLL.dof create mode 100644 official/1.104/packages/d6/JclRepositoryExpertDLL.dpr create mode 100644 official/1.104/packages/d6/JclRepositoryExpertDLL.rc create mode 100644 official/1.104/packages/d6/JclRepositoryExpertDLL.res create mode 100644 official/1.104/packages/d6/JclSIMDViewExpert.dof create mode 100644 official/1.104/packages/d6/JclSIMDViewExpert.dpk create mode 100644 official/1.104/packages/d6/JclSIMDViewExpert.rc create mode 100644 official/1.104/packages/d6/JclSIMDViewExpert.res create mode 100644 official/1.104/packages/d6/JclSIMDViewExpertDLL.RES create mode 100644 official/1.104/packages/d6/JclSIMDViewExpertDLL.dof create mode 100644 official/1.104/packages/d6/JclSIMDViewExpertDLL.dpr create mode 100644 official/1.104/packages/d6/JclSIMDViewExpertDLL.rc create mode 100644 official/1.104/packages/d6/JclThreadNameExpert.dof create mode 100644 official/1.104/packages/d6/JclThreadNameExpert.dpk create mode 100644 official/1.104/packages/d6/JclThreadNameExpert.rc create mode 100644 official/1.104/packages/d6/JclThreadNameExpert.res create mode 100644 official/1.104/packages/d6/JclThreadNameExpertDLL.RES create mode 100644 official/1.104/packages/d6/JclThreadNameExpertDLL.dof create mode 100644 official/1.104/packages/d6/JclThreadNameExpertDLL.dpr create mode 100644 official/1.104/packages/d6/JclThreadNameExpertDLL.rc create mode 100644 official/1.104/packages/d6/JclUsesExpert.dof create mode 100644 official/1.104/packages/d6/JclUsesExpert.dpk create mode 100644 official/1.104/packages/d6/JclUsesExpert.rc create mode 100644 official/1.104/packages/d6/JclUsesExpert.res create mode 100644 official/1.104/packages/d6/JclUsesExpertDLL.RES create mode 100644 official/1.104/packages/d6/JclUsesExpertDLL.dof create mode 100644 official/1.104/packages/d6/JclUsesExpertDLL.dpr create mode 100644 official/1.104/packages/d6/JclUsesExpertDLL.rc create mode 100644 official/1.104/packages/d6/JclVClx.dof create mode 100644 official/1.104/packages/d6/JclVClx.dpk create mode 100644 official/1.104/packages/d6/JclVClx.rc create mode 100644 official/1.104/packages/d6/JclVClx.res create mode 100644 official/1.104/packages/d6/JclVcl.dof create mode 100644 official/1.104/packages/d6/JclVcl.dpk create mode 100644 official/1.104/packages/d6/JclVcl.rc create mode 100644 official/1.104/packages/d6/JclVcl.res create mode 100644 official/1.104/packages/d6/JclVersionControlExpert.dof create mode 100644 official/1.104/packages/d6/JclVersionControlExpert.dpk create mode 100644 official/1.104/packages/d6/JclVersionControlExpert.rc create mode 100644 official/1.104/packages/d6/JclVersionControlExpert.res create mode 100644 official/1.104/packages/d6/JclVersionControlExpertDLL.dof create mode 100644 official/1.104/packages/d6/JclVersionControlExpertDLL.dpr create mode 100644 official/1.104/packages/d6/JclVersionControlExpertDLL.rc create mode 100644 official/1.104/packages/d6/JclVersionControlExpertDLL.res create mode 100644 official/1.104/packages/d6/dirinfo.txt create mode 100644 official/1.104/packages/d6/template.dof create mode 100644 official/1.104/packages/d6/template.dpk create mode 100644 official/1.104/packages/d6/template.dpr create mode 100644 official/1.104/packages/d6/template.rc create mode 100644 official/1.104/packages/d7/Jcl.dof create mode 100644 official/1.104/packages/d7/Jcl.dpk create mode 100644 official/1.104/packages/d7/Jcl.rc create mode 100644 official/1.104/packages/d7/Jcl.res create mode 100644 official/1.104/packages/d7/JclBaseExpert.dof create mode 100644 official/1.104/packages/d7/JclBaseExpert.dpk create mode 100644 official/1.104/packages/d7/JclBaseExpert.rc create mode 100644 official/1.104/packages/d7/JclBaseExpert.res create mode 100644 official/1.104/packages/d7/JclContainers.dof create mode 100644 official/1.104/packages/d7/JclContainers.dpk create mode 100644 official/1.104/packages/d7/JclContainers.rc create mode 100644 official/1.104/packages/d7/JclContainers.res create mode 100644 official/1.104/packages/d7/JclDebugExpert.dof create mode 100644 official/1.104/packages/d7/JclDebugExpert.dpk create mode 100644 official/1.104/packages/d7/JclDebugExpert.rc create mode 100644 official/1.104/packages/d7/JclDebugExpert.res create mode 100644 official/1.104/packages/d7/JclDebugExpertDLL.RES create mode 100644 official/1.104/packages/d7/JclDebugExpertDLL.dof create mode 100644 official/1.104/packages/d7/JclDebugExpertDLL.dpr create mode 100644 official/1.104/packages/d7/JclDebugExpertDLL.rc create mode 100644 official/1.104/packages/d7/JclFavoriteFoldersExpert.dof create mode 100644 official/1.104/packages/d7/JclFavoriteFoldersExpert.dpk create mode 100644 official/1.104/packages/d7/JclFavoriteFoldersExpert.rc create mode 100644 official/1.104/packages/d7/JclFavoriteFoldersExpert.res create mode 100644 official/1.104/packages/d7/JclFavoriteFoldersExpertDLL.RES create mode 100644 official/1.104/packages/d7/JclFavoriteFoldersExpertDLL.dof create mode 100644 official/1.104/packages/d7/JclFavoriteFoldersExpertDLL.dpr create mode 100644 official/1.104/packages/d7/JclFavoriteFoldersExpertDLL.rc create mode 100644 official/1.104/packages/d7/JclProjectAnalysisExpert.RES create mode 100644 official/1.104/packages/d7/JclProjectAnalysisExpert.dof create mode 100644 official/1.104/packages/d7/JclProjectAnalysisExpert.dpk create mode 100644 official/1.104/packages/d7/JclProjectAnalysisExpert.rc create mode 100644 official/1.104/packages/d7/JclProjectAnalysisExpertDLL.RES create mode 100644 official/1.104/packages/d7/JclProjectAnalysisExpertDLL.dof create mode 100644 official/1.104/packages/d7/JclProjectAnalysisExpertDLL.dpr create mode 100644 official/1.104/packages/d7/JclProjectAnalysisExpertDLL.rc create mode 100644 official/1.104/packages/d7/JclRepositoryExpert.dof create mode 100644 official/1.104/packages/d7/JclRepositoryExpert.dpk create mode 100644 official/1.104/packages/d7/JclRepositoryExpert.rc create mode 100644 official/1.104/packages/d7/JclRepositoryExpert.res create mode 100644 official/1.104/packages/d7/JclRepositoryExpertDLL.dof create mode 100644 official/1.104/packages/d7/JclRepositoryExpertDLL.dpr create mode 100644 official/1.104/packages/d7/JclRepositoryExpertDLL.rc create mode 100644 official/1.104/packages/d7/JclRepositoryExpertDLL.res create mode 100644 official/1.104/packages/d7/JclSIMDViewExpert.dof create mode 100644 official/1.104/packages/d7/JclSIMDViewExpert.dpk create mode 100644 official/1.104/packages/d7/JclSIMDViewExpert.rc create mode 100644 official/1.104/packages/d7/JclSIMDViewExpert.res create mode 100644 official/1.104/packages/d7/JclSIMDViewExpertDLL.RES create mode 100644 official/1.104/packages/d7/JclSIMDViewExpertDLL.dof create mode 100644 official/1.104/packages/d7/JclSIMDViewExpertDLL.dpr create mode 100644 official/1.104/packages/d7/JclSIMDViewExpertDLL.rc create mode 100644 official/1.104/packages/d7/JclUsesExpert.dof create mode 100644 official/1.104/packages/d7/JclUsesExpert.dpk create mode 100644 official/1.104/packages/d7/JclUsesExpert.rc create mode 100644 official/1.104/packages/d7/JclUsesExpert.res create mode 100644 official/1.104/packages/d7/JclUsesExpertDLL.RES create mode 100644 official/1.104/packages/d7/JclUsesExpertDLL.dof create mode 100644 official/1.104/packages/d7/JclUsesExpertDLL.dpr create mode 100644 official/1.104/packages/d7/JclUsesExpertDLL.rc create mode 100644 official/1.104/packages/d7/JclVClx.dof create mode 100644 official/1.104/packages/d7/JclVClx.dpk create mode 100644 official/1.104/packages/d7/JclVClx.rc create mode 100644 official/1.104/packages/d7/JclVClx.res create mode 100644 official/1.104/packages/d7/JclVcl.dof create mode 100644 official/1.104/packages/d7/JclVcl.dpk create mode 100644 official/1.104/packages/d7/JclVcl.rc create mode 100644 official/1.104/packages/d7/JclVcl.res create mode 100644 official/1.104/packages/d7/JclVersionControlExpert.dof create mode 100644 official/1.104/packages/d7/JclVersionControlExpert.dpk create mode 100644 official/1.104/packages/d7/JclVersionControlExpert.rc create mode 100644 official/1.104/packages/d7/JclVersionControlExpert.res create mode 100644 official/1.104/packages/d7/JclVersionControlExpertDLL.dof create mode 100644 official/1.104/packages/d7/JclVersionControlExpertDLL.dpr create mode 100644 official/1.104/packages/d7/JclVersionControlExpertDLL.rc create mode 100644 official/1.104/packages/d7/JclVersionControlExpertDLL.res create mode 100644 official/1.104/packages/d7/dirinfo.txt create mode 100644 official/1.104/packages/d7/template.dof create mode 100644 official/1.104/packages/d7/template.dpk create mode 100644 official/1.104/packages/d7/template.dpr create mode 100644 official/1.104/packages/d7/template.rc create mode 100644 official/1.104/packages/d8/Jcl.RES create mode 100644 official/1.104/packages/d8/Jcl.bdsproj create mode 100644 official/1.104/packages/d8/Jcl.dpk create mode 100644 official/1.104/packages/d8/Jcl.rc create mode 100644 official/1.104/packages/d8/JclBaseExpert.RES create mode 100644 official/1.104/packages/d8/JclBaseExpert.bdsproj create mode 100644 official/1.104/packages/d8/JclBaseExpert.dpk create mode 100644 official/1.104/packages/d8/JclBaseExpert.rc create mode 100644 official/1.104/packages/d8/JclContainers.bdsproj create mode 100644 official/1.104/packages/d8/JclContainers.dpk create mode 100644 official/1.104/packages/d8/JclContainers.rc create mode 100644 official/1.104/packages/d8/JclContainers.res create mode 100644 official/1.104/packages/d8/JclFavoriteFoldersExpertDLL.RES create mode 100644 official/1.104/packages/d8/JclFavoriteFoldersExpertDLL.bdsproj create mode 100644 official/1.104/packages/d8/JclFavoriteFoldersExpertDLL.dpr create mode 100644 official/1.104/packages/d8/JclFavoriteFoldersExpertDLL.rc create mode 100644 official/1.104/packages/d8/JclVersionControlExpertDLL.bdsproj create mode 100644 official/1.104/packages/d8/JclVersionControlExpertDLL.dpr create mode 100644 official/1.104/packages/d8/JclVersionControlExpertDLL.rc create mode 100644 official/1.104/packages/d8/JclVersionControlExpertDLL.res create mode 100644 official/1.104/packages/d8/template.bdsproj create mode 100644 official/1.104/packages/d8/template.dpk create mode 100644 official/1.104/packages/d8/template.dpr create mode 100644 official/1.104/packages/d8/template.rc create mode 100644 official/1.104/packages/d9.net/Jedi.Jcl.bdsproj create mode 100644 official/1.104/packages/d9.net/Jedi.Jcl.dpk create mode 100644 official/1.104/packages/d9.net/Jedi.JclContainers.bdsproj create mode 100644 official/1.104/packages/d9.net/Jedi.JclContainers.dpk create mode 100644 official/1.104/packages/d9.net/template.bdsproj create mode 100644 official/1.104/packages/d9.net/template.dpk create mode 100644 official/1.104/packages/d9/Jcl.RES create mode 100644 official/1.104/packages/d9/Jcl.bdsproj create mode 100644 official/1.104/packages/d9/Jcl.dpk create mode 100644 official/1.104/packages/d9/Jcl.rc create mode 100644 official/1.104/packages/d9/JclBaseExpert.bdsproj create mode 100644 official/1.104/packages/d9/JclBaseExpert.dpk create mode 100644 official/1.104/packages/d9/JclBaseExpert.rc create mode 100644 official/1.104/packages/d9/JclBaseExpert.res create mode 100644 official/1.104/packages/d9/JclContainers.bdsproj create mode 100644 official/1.104/packages/d9/JclContainers.dpk create mode 100644 official/1.104/packages/d9/JclContainers.rc create mode 100644 official/1.104/packages/d9/JclContainers.res create mode 100644 official/1.104/packages/d9/JclDebugExpert.RES create mode 100644 official/1.104/packages/d9/JclDebugExpert.bdsproj create mode 100644 official/1.104/packages/d9/JclDebugExpert.dpk create mode 100644 official/1.104/packages/d9/JclDebugExpert.rc create mode 100644 official/1.104/packages/d9/JclDebugExpertDLL.RES create mode 100644 official/1.104/packages/d9/JclDebugExpertDLL.bdsproj create mode 100644 official/1.104/packages/d9/JclDebugExpertDLL.dpr create mode 100644 official/1.104/packages/d9/JclDebugExpertDLL.rc create mode 100644 official/1.104/packages/d9/JclExperts.bdsgroup create mode 100644 official/1.104/packages/d9/JclFavoriteFoldersExpert.bdsproj create mode 100644 official/1.104/packages/d9/JclFavoriteFoldersExpert.dpk create mode 100644 official/1.104/packages/d9/JclFavoriteFoldersExpert.rc create mode 100644 official/1.104/packages/d9/JclFavoriteFoldersExpert.res create mode 100644 official/1.104/packages/d9/JclFavoriteFoldersExpertDLL.RES create mode 100644 official/1.104/packages/d9/JclFavoriteFoldersExpertDLL.bdsproj create mode 100644 official/1.104/packages/d9/JclFavoriteFoldersExpertDLL.dpr create mode 100644 official/1.104/packages/d9/JclFavoriteFoldersExpertDLL.rc create mode 100644 official/1.104/packages/d9/JclProjectAnalysisExpert.RES create mode 100644 official/1.104/packages/d9/JclProjectAnalysisExpert.bdsproj create mode 100644 official/1.104/packages/d9/JclProjectAnalysisExpert.dpk create mode 100644 official/1.104/packages/d9/JclProjectAnalysisExpert.rc create mode 100644 official/1.104/packages/d9/JclProjectAnalysisExpertDLL.RES create mode 100644 official/1.104/packages/d9/JclProjectAnalysisExpertDLL.bdsproj create mode 100644 official/1.104/packages/d9/JclProjectAnalysisExpertDLL.dpr create mode 100644 official/1.104/packages/d9/JclProjectAnalysisExpertDLL.rc create mode 100644 official/1.104/packages/d9/JclRepositoryExpert.bdsproj create mode 100644 official/1.104/packages/d9/JclRepositoryExpert.dpk create mode 100644 official/1.104/packages/d9/JclRepositoryExpert.rc create mode 100644 official/1.104/packages/d9/JclRepositoryExpert.res create mode 100644 official/1.104/packages/d9/JclRepositoryExpertDLL.bdsproj create mode 100644 official/1.104/packages/d9/JclRepositoryExpertDLL.dpr create mode 100644 official/1.104/packages/d9/JclRepositoryExpertDLL.rc create mode 100644 official/1.104/packages/d9/JclRepositoryExpertDLL.res create mode 100644 official/1.104/packages/d9/JclSIMDViewExpert.bdsproj create mode 100644 official/1.104/packages/d9/JclSIMDViewExpert.dpk create mode 100644 official/1.104/packages/d9/JclSIMDViewExpert.rc create mode 100644 official/1.104/packages/d9/JclSIMDViewExpertDLL.RES create mode 100644 official/1.104/packages/d9/JclSIMDViewExpertDLL.bdsproj create mode 100644 official/1.104/packages/d9/JclSIMDViewExpertDLL.dpr create mode 100644 official/1.104/packages/d9/JclSIMDViewExpertDLL.rc create mode 100644 official/1.104/packages/d9/JclSimdViewExpert.RES create mode 100644 official/1.104/packages/d9/JclVcl.RES create mode 100644 official/1.104/packages/d9/JclVcl.bdsproj create mode 100644 official/1.104/packages/d9/JclVcl.dpk create mode 100644 official/1.104/packages/d9/JclVcl.rc create mode 100644 official/1.104/packages/d9/JclVersionControlExpert.bdsproj create mode 100644 official/1.104/packages/d9/JclVersionControlExpert.dpk create mode 100644 official/1.104/packages/d9/JclVersionControlExpert.rc create mode 100644 official/1.104/packages/d9/JclVersionControlExpert.res create mode 100644 official/1.104/packages/d9/JclVersionControlExpertDLL.bdsproj create mode 100644 official/1.104/packages/d9/JclVersionControlExpertDLL.dpr create mode 100644 official/1.104/packages/d9/JclVersionControlExpertDLL.rc create mode 100644 official/1.104/packages/d9/JclVersionControlExpertDLL.res create mode 100644 official/1.104/packages/d9/template.bdsproj create mode 100644 official/1.104/packages/d9/template.dpk create mode 100644 official/1.104/packages/d9/template.dpr create mode 100644 official/1.104/packages/d9/template.rc create mode 100644 official/1.104/packages/dirinfo.txt create mode 100644 official/1.104/packages/k3/Jcl.bpf create mode 100644 official/1.104/packages/k3/Jcl.bpk create mode 100644 official/1.104/packages/k3/Jcl.dpk create mode 100644 official/1.104/packages/k3/Jcl.kof create mode 100644 official/1.104/packages/k3/Jcl.rc create mode 100644 official/1.104/packages/k3/Jcl.res create mode 100644 official/1.104/packages/k3/JclContainers.bpf create mode 100644 official/1.104/packages/k3/JclContainers.bpk create mode 100644 official/1.104/packages/k3/JclContainers.dpk create mode 100644 official/1.104/packages/k3/JclContainers.kof create mode 100644 official/1.104/packages/k3/JclContainers.rc create mode 100644 official/1.104/packages/k3/JclContainers.res create mode 100644 official/1.104/packages/k3/JclVClx.bpf create mode 100644 official/1.104/packages/k3/JclVClx.bpk create mode 100644 official/1.104/packages/k3/JclVClx.dpk create mode 100644 official/1.104/packages/k3/JclVClx.kof create mode 100644 official/1.104/packages/k3/JclVClx.rc create mode 100644 official/1.104/packages/k3/JclVClx.res create mode 100644 official/1.104/packages/k3/dirinfo.txt create mode 100644 official/1.104/packages/k3/template.bpf create mode 100644 official/1.104/packages/k3/template.bpk create mode 100644 official/1.104/packages/k3/template.dpk create mode 100644 official/1.104/packages/k3/template.kof create mode 100644 official/1.104/packages/k3/template.rc create mode 100644 official/1.104/packages/resources.mak create mode 100644 official/1.104/packages/xml/Jcl-R.xml create mode 100644 official/1.104/packages/xml/JclBaseExpert-D.xml create mode 100644 official/1.104/packages/xml/JclContainers-R.xml create mode 100644 official/1.104/packages/xml/JclDebugExpert-D.xml create mode 100644 official/1.104/packages/xml/JclDebugExpertDLL-L.xml create mode 100644 official/1.104/packages/xml/JclFavoriteFoldersExpert-D.xml create mode 100644 official/1.104/packages/xml/JclFavoriteFoldersExpertDLL-L.xml create mode 100644 official/1.104/packages/xml/JclProjectAnalysisExpert-D.xml create mode 100644 official/1.104/packages/xml/JclProjectAnalysisExpertDLL-L.xml create mode 100644 official/1.104/packages/xml/JclRepositoryExpert-D.xml create mode 100644 official/1.104/packages/xml/JclRepositoryExpertDLL-L.xml create mode 100644 official/1.104/packages/xml/JclSIMDViewExpert-D.xml create mode 100644 official/1.104/packages/xml/JclSIMDViewExpertDLL-L.xml create mode 100644 official/1.104/packages/xml/JclThreadNameExpert-D.xml create mode 100644 official/1.104/packages/xml/JclThreadNameExpertDLL-L.xml create mode 100644 official/1.104/packages/xml/JclUsesExpert-D.xml create mode 100644 official/1.104/packages/xml/JclUsesExpertDLL-L.xml create mode 100644 official/1.104/packages/xml/JclVClx-R.xml create mode 100644 official/1.104/packages/xml/JclVcl-R.xml create mode 100644 official/1.104/packages/xml/JclVersionControlExpert-D.xml create mode 100644 official/1.104/packages/xml/JclVersionControlExpertDLL-L.xml create mode 100644 official/1.104/source/Makefile.fpc create mode 100644 official/1.104/source/common/Jcl8087.pas create mode 100644 official/1.104/source/common/JclAbstractContainers.pas create mode 100644 official/1.104/source/common/JclAlgorithms.pas create mode 100644 official/1.104/source/common/JclAnsiStrings.pas create mode 100644 official/1.104/source/common/JclArrayLists.pas create mode 100644 official/1.104/source/common/JclArraySets.pas create mode 100644 official/1.104/source/common/JclBase.pas create mode 100644 official/1.104/source/common/JclBinaryTrees.pas create mode 100644 official/1.104/source/common/JclBorlandTools.pas create mode 100644 official/1.104/source/common/JclComplex.pas create mode 100644 official/1.104/source/common/JclCompression.pas create mode 100644 official/1.104/source/common/JclContainerIntf.pas create mode 100644 official/1.104/source/common/JclCounter.pas create mode 100644 official/1.104/source/common/JclDITs-1.92.int create mode 100644 official/1.104/source/common/JclDateTime.pas create mode 100644 official/1.104/source/common/JclEDI.pas create mode 100644 official/1.104/source/common/JclEDISEF.pas create mode 100644 official/1.104/source/common/JclEDITranslators.pas create mode 100644 official/1.104/source/common/JclEDIXML.pas create mode 100644 official/1.104/source/common/JclEDI_ANSIX12.pas create mode 100644 official/1.104/source/common/JclEDI_ANSIX12_Ext.pas create mode 100644 official/1.104/source/common/JclEDI_UNEDIFACT.pas create mode 100644 official/1.104/source/common/JclEDI_UNEDIFACT_Ext.pas create mode 100644 official/1.104/source/common/JclExprEval.pas create mode 100644 official/1.104/source/common/JclFileUtils.pas create mode 100644 official/1.104/source/common/JclHashMaps.pas create mode 100644 official/1.104/source/common/JclHashSets.pas create mode 100644 official/1.104/source/common/JclIniFiles-1.92.int create mode 100644 official/1.104/source/common/JclIniFiles.pas create mode 100644 official/1.104/source/common/JclLinkedLists.pas create mode 100644 official/1.104/source/common/JclLogic.pas create mode 100644 official/1.104/source/common/JclMIDI.pas create mode 100644 official/1.104/source/common/JclMath.pas create mode 100644 official/1.104/source/common/JclMime.pas create mode 100644 official/1.104/source/common/JclPCRE.pas create mode 100644 official/1.104/source/common/JclQueues.pas create mode 100644 official/1.104/source/common/JclRTTI.pas create mode 100644 official/1.104/source/common/JclResources.pas create mode 100644 official/1.104/source/common/JclSchedule.pas create mode 100644 official/1.104/source/common/JclSimpleXml.pas create mode 100644 official/1.104/source/common/JclSortedMaps.pas create mode 100644 official/1.104/source/common/JclStacks.pas create mode 100644 official/1.104/source/common/JclStatistics.pas create mode 100644 official/1.104/source/common/JclStrHashMap.pas create mode 100644 official/1.104/source/common/JclStreams.pas create mode 100644 official/1.104/source/common/JclStringConversions.pas create mode 100644 official/1.104/source/common/JclStringLists.pas create mode 100644 official/1.104/source/common/JclStrings.pas create mode 100644 official/1.104/source/common/JclSynch.pas create mode 100644 official/1.104/source/common/JclSysInfo.fpc create mode 100644 official/1.104/source/common/JclSysInfo.pas create mode 100644 official/1.104/source/common/JclSysUtils.pas create mode 100644 official/1.104/source/common/JclTrees.pas create mode 100644 official/1.104/source/common/JclUnicode.pas create mode 100644 official/1.104/source/common/JclUnicode.rc create mode 100644 official/1.104/source/common/JclUnicode.res create mode 100644 official/1.104/source/common/JclUnicodeBZip2.res create mode 100644 official/1.104/source/common/JclUnicodeBzip2.rc create mode 100644 official/1.104/source/common/JclUnicodeZLib.rc create mode 100644 official/1.104/source/common/JclUnicodeZLib.res create mode 100644 official/1.104/source/common/JclUnitConv.pas create mode 100644 official/1.104/source/common/JclUnitVersioning.pas create mode 100644 official/1.104/source/common/JclUnitVersioningProviders.pas create mode 100644 official/1.104/source/common/JclValidation.pas create mode 100644 official/1.104/source/common/JclVectors.pas create mode 100644 official/1.104/source/common/JclWideStrings.pas create mode 100644 official/1.104/source/common/JclZLib.int create mode 100644 official/1.104/source/common/bzip2.pas create mode 100644 official/1.104/source/common/dirinfo.txt create mode 100644 official/1.104/source/common/pcre.pas create mode 100644 official/1.104/source/common/zlibh.pas create mode 100644 official/1.104/source/fpctest.bat create mode 100644 official/1.104/source/fpctestunit.bat create mode 100644 official/1.104/source/include/crossplatform.inc create mode 100644 official/1.104/source/include/jcl.inc create mode 100644 official/1.104/source/include/jcl.template.inc create mode 100644 official/1.104/source/include/jcld12.inc create mode 100644 official/1.104/source/include/jedi.inc create mode 100644 official/1.104/source/include/kylix.inc create mode 100644 official/1.104/source/include/unixonly.inc create mode 100644 official/1.104/source/include/windowsonly.inc create mode 100644 official/1.104/source/prototypes/Hardlinks.pas create mode 100644 official/1.104/source/prototypes/JclAlgorithms.pas create mode 100644 official/1.104/source/prototypes/JclArrayLists.pas create mode 100644 official/1.104/source/prototypes/JclArraySets.pas create mode 100644 official/1.104/source/prototypes/JclBinaryTrees.pas create mode 100644 official/1.104/source/prototypes/JclContainerIntf.pas create mode 100644 official/1.104/source/prototypes/JclGraphUtils.pas create mode 100644 official/1.104/source/prototypes/JclGraphics.pas create mode 100644 official/1.104/source/prototypes/JclHashMaps.pas create mode 100644 official/1.104/source/prototypes/JclHashSets.pas create mode 100644 official/1.104/source/prototypes/JclLinkedLists.pas create mode 100644 official/1.104/source/prototypes/JclQGraphUtils.pas create mode 100644 official/1.104/source/prototypes/JclQGraphics.pas create mode 100644 official/1.104/source/prototypes/JclQueues.pas create mode 100644 official/1.104/source/prototypes/JclSortedMaps.pas create mode 100644 official/1.104/source/prototypes/JclStacks.pas create mode 100644 official/1.104/source/prototypes/JclTrees.pas create mode 100644 official/1.104/source/prototypes/JclVectors.pas create mode 100644 official/1.104/source/prototypes/JclWin32.pas create mode 100644 official/1.104/source/prototypes/Makefile.mak create mode 100644 official/1.104/source/prototypes/_GraphUtils.pas create mode 100644 official/1.104/source/prototypes/_Graphics.pas create mode 100644 official/1.104/source/prototypes/containers/JclAlgorithms.imp create mode 100644 official/1.104/source/prototypes/containers/JclAlgorithms.int create mode 100644 official/1.104/source/prototypes/containers/JclArrayLists.imp create mode 100644 official/1.104/source/prototypes/containers/JclArrayLists.int create mode 100644 official/1.104/source/prototypes/containers/JclArraySets.imp create mode 100644 official/1.104/source/prototypes/containers/JclArraySets.int create mode 100644 official/1.104/source/prototypes/containers/JclBinaryTrees.imp create mode 100644 official/1.104/source/prototypes/containers/JclBinaryTrees.int create mode 100644 official/1.104/source/prototypes/containers/JclContainerCommon.imp create mode 100644 official/1.104/source/prototypes/containers/JclContainerIntf.int create mode 100644 official/1.104/source/prototypes/containers/JclHashMaps.imp create mode 100644 official/1.104/source/prototypes/containers/JclHashMaps.int create mode 100644 official/1.104/source/prototypes/containers/JclHashSets.imp create mode 100644 official/1.104/source/prototypes/containers/JclHashSets.int create mode 100644 official/1.104/source/prototypes/containers/JclLinkedLists.imp create mode 100644 official/1.104/source/prototypes/containers/JclLinkedLists.int create mode 100644 official/1.104/source/prototypes/containers/JclQueues.imp create mode 100644 official/1.104/source/prototypes/containers/JclQueues.int create mode 100644 official/1.104/source/prototypes/containers/JclSortedMaps.imp create mode 100644 official/1.104/source/prototypes/containers/JclSortedMaps.int create mode 100644 official/1.104/source/prototypes/containers/JclStacks.imp create mode 100644 official/1.104/source/prototypes/containers/JclStacks.int create mode 100644 official/1.104/source/prototypes/containers/JclTrees.imp create mode 100644 official/1.104/source/prototypes/containers/JclTrees.int create mode 100644 official/1.104/source/prototypes/containers/JclVectors.imp create mode 100644 official/1.104/source/prototypes/containers/JclVectors.int create mode 100644 official/1.104/source/prototypes/supplement/create_JCL_Hardlinks.pas.cmd create mode 100644 official/1.104/source/prototypes/supplement/create_nonJCL_Hardlinks.pas.cmd create mode 100644 official/1.104/source/prototypes/supplement/simple_pp.pl create mode 100644 official/1.104/source/prototypes/win32api/AclApi.imp create mode 100644 official/1.104/source/prototypes/win32api/AclApi.int create mode 100644 official/1.104/source/prototypes/win32api/BaseTsd.int create mode 100644 official/1.104/source/prototypes/win32api/DelayImp.int create mode 100644 official/1.104/source/prototypes/win32api/ImageHlp.imp create mode 100644 official/1.104/source/prototypes/win32api/ImageHlp.int create mode 100644 official/1.104/source/prototypes/win32api/ImgGuids.int create mode 100644 official/1.104/source/prototypes/win32api/LmAccess.imp create mode 100644 official/1.104/source/prototypes/win32api/LmAccess.int create mode 100644 official/1.104/source/prototypes/win32api/LmApiBuf.imp create mode 100644 official/1.104/source/prototypes/win32api/LmApiBuf.int create mode 100644 official/1.104/source/prototypes/win32api/LmCons.int create mode 100644 official/1.104/source/prototypes/win32api/LmErr.int create mode 100644 official/1.104/source/prototypes/win32api/MsiDefs.int create mode 100644 official/1.104/source/prototypes/win32api/NTDef.int create mode 100644 official/1.104/source/prototypes/win32api/Nb30.imp create mode 100644 official/1.104/source/prototypes/win32api/Nb30.int create mode 100644 official/1.104/source/prototypes/win32api/NtSecApi.imp create mode 100644 official/1.104/source/prototypes/win32api/NtSecApi.int create mode 100644 official/1.104/source/prototypes/win32api/ObjBase.imp create mode 100644 official/1.104/source/prototypes/win32api/ObjBase.int create mode 100644 official/1.104/source/prototypes/win32api/PropIdl.int create mode 100644 official/1.104/source/prototypes/win32api/RasDlg.int create mode 100644 official/1.104/source/prototypes/win32api/Reason.int create mode 100644 official/1.104/source/prototypes/win32api/ShlGuid.int create mode 100644 official/1.104/source/prototypes/win32api/ShlObj.int create mode 100644 official/1.104/source/prototypes/win32api/ShlWApi.int create mode 100644 official/1.104/source/prototypes/win32api/WinBase.imp create mode 100644 official/1.104/source/prototypes/win32api/WinBase.int create mode 100644 official/1.104/source/prototypes/win32api/WinDef.int create mode 100644 official/1.104/source/prototypes/win32api/WinError.int create mode 100644 official/1.104/source/prototypes/win32api/WinIoctl.int create mode 100644 official/1.104/source/prototypes/win32api/WinNLS.imp create mode 100644 official/1.104/source/prototypes/win32api/WinNLS.int create mode 100644 official/1.104/source/prototypes/win32api/WinNT.imp create mode 100644 official/1.104/source/prototypes/win32api/WinNT.int create mode 100644 official/1.104/source/prototypes/win32api/WinUser.imp create mode 100644 official/1.104/source/prototypes/win32api/WinUser.int create mode 100644 official/1.104/source/prototypes/win32api/dirinfo.txt create mode 100644 official/1.104/source/prototypes/win32api/powrprof.imp create mode 100644 official/1.104/source/prototypes/win32api/powrprof.int create mode 100644 official/1.104/source/unix/dirinfo.txt create mode 100644 official/1.104/source/vcl/JclFont.pas create mode 100644 official/1.104/source/vcl/JclGraphUtils.pas create mode 100644 official/1.104/source/vcl/JclGraphics.pas create mode 100644 official/1.104/source/vcl/JclPrint.pas create mode 100644 official/1.104/source/vcl/JclVersionControl.pas create mode 100644 official/1.104/source/vcl/JclVersionCtrlCVSImpl.pas create mode 100644 official/1.104/source/vcl/JclVersionCtrlSVNImpl.pas create mode 100644 official/1.104/source/vcl/dirinfo.txt create mode 100644 official/1.104/source/visclx/JclQGraphUtils.pas create mode 100644 official/1.104/source/visclx/JclQGraphics.pas create mode 100644 official/1.104/source/visclx/dirinfo.txt create mode 100644 official/1.104/source/windows/Hardlinks.pas create mode 100644 official/1.104/source/windows/JclAppInst.pas create mode 100644 official/1.104/source/windows/JclCIL.pas create mode 100644 official/1.104/source/windows/JclCLR.pas create mode 100644 official/1.104/source/windows/JclCOM.pas create mode 100644 official/1.104/source/windows/JclCommCtrlAdmin.manifest create mode 100644 official/1.104/source/windows/JclCommCtrlAdmin.rc create mode 100644 official/1.104/source/windows/JclCommCtrlAdmin.res create mode 100644 official/1.104/source/windows/JclCommCtrlAsInvoker.manifest create mode 100644 official/1.104/source/windows/JclCommCtrlAsInvoker.rc create mode 100644 official/1.104/source/windows/JclCommCtrlAsInvoker.res create mode 100644 official/1.104/source/windows/JclConsole.pas create mode 100644 official/1.104/source/windows/JclDebug.pas create mode 100644 official/1.104/source/windows/JclDotNet.pas create mode 100644 official/1.104/source/windows/JclHookExcept.pas create mode 100644 official/1.104/source/windows/JclLANMan.pas create mode 100644 official/1.104/source/windows/JclLocales.pas create mode 100644 official/1.104/source/windows/JclMapi.pas create mode 100644 official/1.104/source/windows/JclMetadata.pas create mode 100644 official/1.104/source/windows/JclMiscel.pas create mode 100644 official/1.104/source/windows/JclMsdosSys.pas create mode 100644 official/1.104/source/windows/JclMultimedia.pas create mode 100644 official/1.104/source/windows/JclNTFS.pas create mode 100644 official/1.104/source/windows/JclNoDepAdmin.manifest create mode 100644 official/1.104/source/windows/JclNoDepAdmin.rc create mode 100644 official/1.104/source/windows/JclNoDepAdmin.res create mode 100644 official/1.104/source/windows/JclNoDepAsInvoker.manifest create mode 100644 official/1.104/source/windows/JclNoDepAsInvoker.rc create mode 100644 official/1.104/source/windows/JclNoDepAsInvoker.res create mode 100644 official/1.104/source/windows/JclPeImage.pas create mode 100644 official/1.104/source/windows/JclRegistry.pas create mode 100644 official/1.104/source/windows/JclSecurity.pas create mode 100644 official/1.104/source/windows/JclShell.pas create mode 100644 official/1.104/source/windows/JclStructStorage.pas create mode 100644 official/1.104/source/windows/JclSvcCtrl.pas create mode 100644 official/1.104/source/windows/JclTD32.pas create mode 100644 official/1.104/source/windows/JclTask.pas create mode 100644 official/1.104/source/windows/JclWideFormat.pas create mode 100644 official/1.104/source/windows/JclWin32.pas create mode 100644 official/1.104/source/windows/JclWin32Ex.pas create mode 100644 official/1.104/source/windows/JclWinMIDI.pas create mode 100644 official/1.104/source/windows/MSHelpServices_TLB.pas create mode 100644 official/1.104/source/windows/MSTask.pas create mode 100644 official/1.104/source/windows/Snmp.pas create mode 100644 official/1.104/source/windows/dirinfo.txt create mode 100644 official/1.104/source/windows/mscoree_TLB.pas create mode 100644 official/1.104/source/windows/mscorlib_TLB.pas create mode 100644 official/1.104/source/windows/obj/bzip2/blocksort.obj create mode 100644 official/1.104/source/windows/obj/bzip2/bzlib.obj create mode 100644 official/1.104/source/windows/obj/bzip2/compress.obj create mode 100644 official/1.104/source/windows/obj/bzip2/crctable.obj create mode 100644 official/1.104/source/windows/obj/bzip2/decompress.obj create mode 100644 official/1.104/source/windows/obj/bzip2/dirinfo.txt create mode 100644 official/1.104/source/windows/obj/bzip2/huffman.obj create mode 100644 official/1.104/source/windows/obj/bzip2/makefile.mak create mode 100644 official/1.104/source/windows/obj/bzip2/randtable.obj create mode 100644 official/1.104/source/windows/obj/dirinfo.txt create mode 100644 official/1.104/source/windows/obj/pcre/dirinfo.txt create mode 100644 official/1.104/source/windows/obj/pcre/makefile.mak create mode 100644 official/1.104/source/windows/obj/pcre/pcre_compile.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_config.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_default_tables.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_dfa_exec.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_exec.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_fullinfo.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_get.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_globals.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_info.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_maketables.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_newline.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_ord2utf8.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_refcount.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_study.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_tables.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_try_flipped.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_ucp_searchfuncs.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_valid_utf8.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_version.obj create mode 100644 official/1.104/source/windows/obj/pcre/pcre_xclass.obj create mode 100644 official/1.104/source/windows/obj/zlib/adler32.obj create mode 100644 official/1.104/source/windows/obj/zlib/compress.obj create mode 100644 official/1.104/source/windows/obj/zlib/crc32.obj create mode 100644 official/1.104/source/windows/obj/zlib/deflate.obj create mode 100644 official/1.104/source/windows/obj/zlib/dirinfo.txt create mode 100644 official/1.104/source/windows/obj/zlib/gzio.obj create mode 100644 official/1.104/source/windows/obj/zlib/infback.obj create mode 100644 official/1.104/source/windows/obj/zlib/inffast.obj create mode 100644 official/1.104/source/windows/obj/zlib/inflate.obj create mode 100644 official/1.104/source/windows/obj/zlib/inftrees.obj create mode 100644 official/1.104/source/windows/obj/zlib/makefile.mak create mode 100644 official/1.104/source/windows/obj/zlib/trees.obj create mode 100644 official/1.104/source/windows/obj/zlib/uncompr.obj create mode 100644 official/1.104/source/windows/obj/zlib/zutil.obj create mode 100644 official/1.104/source/windows/sevenzip.pas diff --git a/official/1.104/Install multiple profiles.bat b/official/1.104/Install multiple profiles.bat new file mode 100644 index 0000000..4a0506e --- /dev/null +++ b/official/1.104/Install multiple profiles.bat @@ -0,0 +1 @@ +Install Latest /MultipleProfiles \ No newline at end of file diff --git a/official/1.104/Install turbo delphi.bat b/official/1.104/Install turbo delphi.bat new file mode 100644 index 0000000..640538a --- /dev/null +++ b/official/1.104/Install turbo delphi.bat @@ -0,0 +1,20 @@ +@echo off + +echo Launching JCL installer... + +start .\bin\JediInstaller.exe %2 %3 %4 %5 %6 %7 %8 %9 +if ERRORLEVEL 1 goto FailStart +goto FINI + +:FailStart +.\bin\JediInstaller.exe %2 %3 %4 %5 %6 %7 %8 %9 +goto FINI + +:FailedCompile +echo. +echo. +echo An error occured while compiling the installer. Installation aborted. +echo. +pause + +:FINI diff --git a/official/1.104/Install.bat b/official/1.104/Install.bat new file mode 100644 index 0000000..1feda50 --- /dev/null +++ b/official/1.104/Install.bat @@ -0,0 +1,42 @@ +@echo off + +SET DELPHIVERSION=%1 + +cd install + +::jpp prototypes + +..\devtools\jpp.exe -c -dVCL -dMSWINDOWS -uVisualCLX -uUnix -uKYLIX -xVclGui\ prototypes\JediGUIMain.pas +if ERRORLEVEL 1 goto FailedCompile +..\devtools\jpp.exe -c -dVCL -dMSWINDOWS -uVisualCLX -uUnix -uKYLIX -xVclGui\ prototypes\JediGUIReadme.pas +if ERRORLEVEL 1 goto FailedCompile +..\devtools\jpp.exe -c -dVCL -dMSWINDOWS -uVisualCLX -uUnix -uKYLIX -xVclGui\ prototypes\JediGUIInstall.pas +if ERRORLEVEL 1 goto FailedCompile + + +:: compile installer + +build\dcc32ex.exe --runtime-package-rtl --runtime-package-vcl --preserve-config -q -w -dJCLINSTALL -E..\bin -I..\source\include -U..\source\common;..\source\windows JediInstaller.dpr +if ERRORLEVEL 1 goto FailedCompile + + +echo Launching JCL installer... + +start ..\bin\JediInstaller.exe %2 %3 %4 %5 %6 %7 %8 %9 +if ERRORLEVEL 1 goto FailStart +goto FINI + +:FailStart +..\bin\JediInstaller.exe %2 %3 %4 %5 %6 %7 %8 %9 +goto FINI + +:FailedCompile +echo. +echo. +echo An error occured while compiling the installer. Installation aborted. +echo. +pause + +:FINI +cd .. +SET DELPHIVERSION= diff --git a/official/1.104/Install.txt b/official/1.104/Install.txt new file mode 100644 index 0000000..116d935 --- /dev/null +++ b/official/1.104/Install.txt @@ -0,0 +1,71 @@ +JEDI Code Library v 1.104 Installation + +Supported development tools versions: + +- Delphi 2009 and C++Builder 2009 +- CodeGear RAD Studio 2007 (also known as Delphi 2007 for Win32, C++Builder 2007) +- Borland Developer Studio 2006 (also known as Delphi 2006, C++Builder 2006) +- Borland Kylix 3 +- Borland Delphi 7 +- Borland Delphi 6 Update Pack #2 (including Personal Edition) +- Borland Delphi 5 Update Pack #1 +- Borland C++ Builder 6 +- Borland C++ Builder 5 + +For more detailed information, see docs\Readme.html. + +Please make sure you have installed latest update packs. You can download them +from CodeGear Support web page: + +Delphi: http://support.codegear.com/delphi +C++Builder: http://support.codegear.com/cppbuilder + +******************************* IMPORTANT ************************************** +* * +* If you have installed any previous version of the JCL/JVCL you have to * +* delete them. * +* * +* * +* It is also necessary to remove all installed JCL/JVCL packages from the IDE. * +* Do not mix files or compiled packages from older versions of the JCL with * +* current version. * +* * +******************************************************************************** + +JEDI INSTALLER +============== + +Helps you to integrate JCL with Delphi/BCB IDE. Currently it assists with: + +- Compiling library units (release and debug versions) +- Compiling packages and installing design-time packages to the IDE +- Adding sample JCL Debug extension dialogs to Object Repository +- Adding JCL directories to Library Path / Browsing Path in Environment Options +- Adding JCL debug .dcu directory to Debug DCU Path in Debugger Options +- Integrating JCL help file to the IDE. +- in undoing above changes to the IDE settings ("Uninstall", new in 1.94 final). + +To execute for + +1) Win32 +- click on "Install.bat" file in the JCL root directory. + + Note: If you have Delphi 8 for Microsoft .NET installed, you probably will have + to specify the root directory of the make.exe to use for JCL installation; + on the commandline, type (for example): + + >install "C:\Program Files\Borland\Delphi5" + + or + + >install d5 + +2) Kylix 3 +- open a shell window +- cd into JCL root directory +- at the command prompt, type "sh ./install.sh", then press "Enter". + You'll also need to do a "source kylixpath" first (see the README of your + Kylix 3 installation) in case your system is not set up to do that at startup. + +-------------------------------- +Document last updated 2009-01-21 diff --git a/official/1.104/LICENSE-BZIP2.txt b/official/1.104/LICENSE-BZIP2.txt new file mode 100644 index 0000000..75a3c9f --- /dev/null +++ b/official/1.104/LICENSE-BZIP2.txt @@ -0,0 +1,42 @@ + +-------------------------------------------------------------------------- + +This program, "bzip2", the associated library "libbzip2", and all +documentation, are copyright (C) 1996-2007 Julian R Seward. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. 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. + +3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Julian Seward, jseward@bzip.org +bzip2/libbzip2 version 1.0.5 of 10 December 2007 + +-------------------------------------------------------------------------- diff --git a/official/1.104/LICENSE-DRYICONS.txt b/official/1.104/LICENSE-DRYICONS.txt new file mode 100644 index 0000000..a00cb60 --- /dev/null +++ b/official/1.104/LICENSE-DRYICONS.txt @@ -0,0 +1,34 @@ +DryIcons Free License Agreement + +Read Full Legal Code + +DryIcons is a service provided by our team of enthusiastic graphic and web designers and programmers. The purpose of this service is to provide only high-quality, free icons and free icon sets, as well as free vector graphics to the general public, with a specific target to designers, software and web developers. +All DryIcons' Works (meaning "icons, icon sets and graphics") are free of charge, but please read further under what Terms and Conditions. +All DryIcons Works are licensed under a DryIcons Free License. This means that you can use our icons, icon sets and graphics in any publicly accessible web site, web application or any form of presentation publicly accessible through the World Wide Web only according to the DryIcons Free License Terms and Conditions: + + * You must put a back link with credits to http://dryicons.com on every page where DryIcons' Works are used (example: Icons by DryIcons); + * You must include the correct back link to DryIcons website, which is: http://dryicons.com; + * You must place the link on an easy-to-see, recognizable place, so there is no confusion about the Original Author of the Works (DryIcons); + * When copying, or paraphrasing description text (or title) on one of the Works, you must make sure there are no spelling mistakes; + * Do not try to take credit or imply in any way that you and not DryIcons is the Original Author of the Licensed Material (icons, icon sets and graphics). + +What you CAN DO: + + 1. All DryIcons' Works are being provided to You under the Terms of this agreement, which allows for use of our Works but does not transfer ownership. All DryIcons' Works remain property of DryIcons; + 2. You may use DryIcons' Works in any personal or commercial project unlimited number of times according to the DryIcons Free License Terms and Conditions; + 3. You may use DryIcons' Works in any Open Source project and application according to the DryIcons Free License Terms and Conditions; + 4. Your rights to DryIcons' Works are worldwide and for the duration of DryIcons' rights in the Works; + 5. Any uses other than the ones mentioned above must be approved by DryIcons in writing; + 6. Unauthorized use will result in immediate termination of this License, and with it, your rights to use DryIcons' Works. + +What you CAN NOT DO: + + 1. You may not alter, crop, modify, manipulate and create derivative works of DryIcons' Works. All Works must be used "AS IS"; + 2. You may not redistribute, license, sell, lease, assign, convey or transfer DryIcons' Works, or offer free downloads in their present form or in a modified form to any third party; + 3. You may not distribute the DryIcons' Works (icons, icon sets and graphics) online in a downloadable format or enable them to be distributed via mobile devices. You may link to http://dryicons.com instead; + 4. You may not incorporate DryIcons' Works into a logo, trademark or service mark; + 5. You may not use DryIcons' Works directly from dryicons.com or any other location hosted on the dryicons.com domain or any other domain owned by DryIcons. + +Copyright + + 1. DryIcons.com reserves the copyrights and ownership rights of all DryIcons' Works downloaded from this website. We reserve the right to change parts of this License without notice and at our sole discretion. diff --git a/official/1.104/LICENSE-PCRE.txt b/official/1.104/LICENSE-PCRE.txt new file mode 100644 index 0000000..afe9b6a --- /dev/null +++ b/official/1.104/LICENSE-PCRE.txt @@ -0,0 +1,68 @@ +PCRE LICENCE +------------ + +PCRE is a library of functions to support regular expressions whose syntax +and semantics are as close as possible to those of the Perl 5 language. + +Release 7 of PCRE is distributed under the terms of the "BSD" licence, as +specified below. The documentation for PCRE, supplied in the "doc" +directory, is distributed under the same terms as the software itself. + +The basic library functions are written in C and are freestanding. Also +included in the distribution is a set of C++ wrapper functions. + + +THE BASIC LIBRARY FUNCTIONS +--------------------------- + +Written by: Philip Hazel +Email local part: ph10 +Email domain: cam.ac.uk + +University of Cambridge Computing Service, +Cambridge, England. + +Copyright (c) 1997-2008 University of Cambridge +All rights reserved. + + +THE C++ WRAPPER FUNCTIONS +------------------------- + +Contributed by: Google Inc. + +Copyright (c) 2007-2008, Google Inc. +All rights reserved. + + +THE "BSD" LICENCE +----------------- + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the name of Google + Inc. nor the names of their contributors may be used to endorse or + promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +End diff --git a/official/1.104/LICENSE-SEVENZIP.txt b/official/1.104/LICENSE-SEVENZIP.txt new file mode 100644 index 0000000..984332e --- /dev/null +++ b/official/1.104/LICENSE-SEVENZIP.txt @@ -0,0 +1,57 @@ + 7-Zip + ~~~~~ + License for use and distribution + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + 7-Zip Copyright (C) 1999-2008 Igor Pavlov. + + Licenses for files are: + + 1) 7z.dll: GNU LGPL + unRAR restriction + 2) All other files: GNU LGPL + + The GNU LGPL + unRAR restriction means that you must follow both + GNU LGPL rules and unRAR restriction rules. + + + Note: + You can use 7-Zip on any computer, including a computer in a commercial + organization. You don't need to register or pay for 7-Zip. + + + GNU LGPL information + -------------------- + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + unRAR restriction + ----------------- + + The decompression engine for RAR archives was developed using source + code of unRAR program. + All copyrights to original unRAR code are owned by Alexander Roshal. + + The license for original unRAR code has the following restriction: + + The unRAR sources cannot be used to re-create the RAR compression algorithm, + which is proprietary. Distribution of modified unRAR sources in separate form + or as a part of other software is permitted, provided that it is clearly + stated in the documentation and source comments that the code may + not be used to develop a RAR (WinRAR) compatible archiver. + + + -- + Igor Pavlov diff --git a/official/1.104/LICENSE-ZLIB.txt b/official/1.104/LICENSE-ZLIB.txt new file mode 100644 index 0000000..91ed849 --- /dev/null +++ b/official/1.104/LICENSE-ZLIB.txt @@ -0,0 +1,25 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.3, July 18th, 2005 + + Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors 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. + + Jean-loup Gailly jloup@gzip.org + Mark Adler madler@alumni.caltech.edu + +*/ diff --git a/official/1.104/LICENSE.txt b/official/1.104/LICENSE.txt new file mode 100644 index 0000000..7a45bfe --- /dev/null +++ b/official/1.104/LICENSE.txt @@ -0,0 +1,470 @@ + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + diff --git a/official/1.104/bin/JCL-install.ini b/official/1.104/bin/JCL-install.ini new file mode 100644 index 0000000..f1e29e5 --- /dev/null +++ b/official/1.104/bin/JCL-install.ini @@ -0,0 +1,152 @@ +[RAD Studio 2009] +JclJediCodeLibrary=1 +JclJCLDef=1 +JclJCLDefMath=1 +JclJCLDefDebug=0 +JclJCLDefEDI=0 +JclJCLDefPCRE=1 +JclJCLDefBZip2=1 +JclJCLDefZLib=1 +JclJCLDefUnicode=1 +JclJCLDefContainer=1 +JclJCLDef7z=1 +JclJCLDefThreadSafe=1 +JclJCLDefDropObsoleteCode=1 +JclJCLDefUnitVersioning=1 +JclJCLDefMathPrecSingle=0 +JclJCLDefMathPrecDouble=0 +JclJCLDefMathPrecExtended=1 +JclJCLDefMathExtremeValues=1 +JclJCLDefHookDllExceptions=0 +JclJCLDefDebugNoBinary=0 +JclJCLDefDebugNoTD32=0 +JclJCLDefDebugNoMap=0 +JclJCLDefDebugNoExports=0 +JclJCLDefDebugNoSymbols=0 +JclJCLDefEDIWeakPackageUnits=0 +JclJCLDefPCREStaticLink=1 +JclJCLDefPCRELinkDLL=0 +JclJCLDefPCRELinkOnRequest=0 +JclJCLDefBZip2StaticLink=1 +JclJCLDefBZip2LinkDLL=0 +JclJCLDefBZip2LinkOnRequest=0 +JclJCLDefZLibStaticLink=1 +JclJCLDefZLibLinkDLL=0 +JclJCLDefZLibLinkOnRequest=0 +JclJCLDefUnicodeSilentFailure=1 +JclJCLDefUnicodeRawData=1 +JclJCLDefUnicodeZLibData=0 +JclJCLDefUnicodeBZip2Data=0 +JclJCLDefContainerAnsiStr=0 +JclJCLDefContainerWideStr=0 +JclJCLDefContainerUnicodeStr=1 +JclJCLDefContainerNoStr=0 +JclJCLDef7zLinkDLL=0 +JclJCLDef7zLinkOnRequest=1 +JclJCLEnvironment=0 +JclJCLEnvLibPath=0 +JclJCLEnvBrowsingPath=0 +JclJCLEnvDebugDCUPath=0 +JclJCLMake=1 +JclJCLMakeRelease=1 +JclJCLMakeReleaseVClx=0 +JclJCLMakeReleaseVCL=1 +JclJCLMakeDebug=1 +JclJCLMakeDebugVClx=0 +JclJCLMakeDebugVCL=1 +JclJCLCopyHppFiles=0 +JclJCLCheckHppFiles=0 +JclJCLPackages=1 +JclJCLVclPackage=1 +JclJCLClxPackage=0 +JclJCLDualPackages=0 +JclJCLCopyPackagesHppFiles=0 +JclJCLPdbCreate=0 +JclJCLMapCreate=0 +JclJCLJdbgCreate=0 +JclJCLJdbgInsert=0 +JclJCLMapDelete=0 +JclJCLExperts=0 +JclJCLExpertsDsgnPackages=1 +JclJCLExpertsDLL=0 +JclJCLExpertDebug=0 +JclJCLExpertAnalyzer=0 +JclJCLExpertFavorite=0 +JclJCLExpertRepository=0 +JclJCLExpertThreadNames=0 +JclJCLExpertUses=0 +JclJCLExpertSimdView=0 +JclJCLExpertVersionControl=0 +JclJCLExceptDlg=0 +JclJCLExceptDlgVCL=0 +JclJCLExceptDlgVCLSnd=0 +JclJCLExceptDlgCLX=0 +JclJCLHelp=0 +JclJCLHelpHlp=0 +JclJCLHelpChm=0 +JclJCLHelpHxS=0 +JclJCLHelpHxSPlugin=0 +JclJCLMakeDemos=0 +BPL-Path=C:\jcl\lib\d12\ +DCP-Path=C:\jcl\lib\d12\ + +[RAD Studio 2009 demos] +examples\common\containers\algorithms\AlgorithmsExample.dpr=0 +examples\windows\peimage\ApiHookExample.dpr=0 +examples\windows\appinst\AppInstExample.dpr=0 +examples\windows\compression\archive\ArchiveDemo.dpr=0 +examples\common\graphics\ClipLineDemo.dpr=0 +examples\windows\clr\ClrDemo.dpr=0 +examples\windows\ConsoleExamples.dpr=0 +examples\common\containers\performance\ContainerPerformance.dpr=0 +examples\windows\asuser\CreateProcAsUserExample.dpr=0 +examples\windows\delphitools\dependencyviewer\DependView.dpr=0 +examples\windows\edisdk\EDICOMExample.dpr=0 +examples\windows\edisdk\comserver\EDISDK.dpr=0 +examples\common\sysinfo\EnvironmentExample.dpr=0 +examples\windows\debug\reportconverter\ExceptionReportConverter.dpr=0 +examples\common\expreval\ExprEvalExample.dpr=0 +examples\common\filesearch\FileSearchDemo.dpr=0 +examples\windows\filesummary\FileSummaryExample.dpr=0 +examples\windows\debug\framestrack\FramesTrackExample.dpr=0 +examples\common\containers\hashing\HashingExample.dpr=0 +examples\windows\ntfs\JEDISoftLinks.dpr=0 +examples\windows\lanman\LanManExample.dpr=0 +examples\common\containers\lists\ListExample.dpr=0 +examples\windows\locales\LocalesExample.dpr=0 +examples\windows\mapi\MapiExample.dpr=0 +examples\common\multimedia\MidiOutExample.dpr=0 +examples\windows\multimedia\MultiMediaExample.dpr=0 +examples\windows\ntservice\NtSvcExample.dpr=0 +examples\common\numformat\NumFormatExample.dpr=0 +examples\common\pcre\PCREDemo.dpr=0 +examples\windows\peimage\PeFuncExample.dpr=0 +examples\windows\delphitools\peviewer\PeViewer.dpr=0 +examples\windows\mapi\ReadMailExample.dpr=0 +examples\windows\registry\RegistryExample.dpr=0 +examples\windows\delphitools\resfix\ResFix.dpr=0 +examples\common\rtti\RTTIExample.dpr=0 +examples\windows\delphitools\screenjpg\ScreenJPG.dpr=0 +examples\windows\appinst\SingleInstExample.dpr=0 +examples\windows\debug\sourceloc\SourceLocExample.dpr=0 +examples\windows\debug\stacktrack\StackTrackDLLsComLibrary.dpr=0 +examples\windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.dpr=0 +examples\windows\debug\stacktrack\StackTrackDLLsExample.dpr=0 +examples\windows\debug\stacktrack\StackTrackDLLsStaticLibrary.dpr=0 +examples\windows\debug\stacktrack\StackTrackExample.dpr=0 +examples\common\graphics\StretchGraphicExample.dpr=0 +examples\windows\structstorage\StructStorageExample.dpr=0 +examples\windows\sysinfo\SysInfoExample.dpr=0 +examples\windows\tasks\TaskDemo.dpr=0 +examples\common\textconverter\TextConverter.dpr=0 +examples\common\textreader\TextReaderExample.dpr=0 +examples\windows\debug\threadexcept\ThreadExceptExample.dpr=0 +examples\windows\delphitools\toolhelpview\ToolHelpViewer.dpr=0 +examples\common\containers\trees\TreeExample.dpr=0 +examples\common\containers\trees\TreeStructure.dpr=0 +examples\common\unitversioning\UnitVersioningTest.dpr=0 +examples\common\unitversioning\UnitVersioningTestDLL.dpr=0 +examples\windows\peimage\UnmangleNameExample.dpr=0 +examples\windows\fileversion\VerInfoExample.dpr=0 +examples\windows\widestring\WideStringExample.dpr=0 + diff --git a/official/1.104/bin/JediInstaller.exe b/official/1.104/bin/JediInstaller.exe new file mode 100644 index 0000000000000000000000000000000000000000..45dae5f23c449a496e0bc585498265a74159b113 GIT binary patch literal 580096 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�>T2C9K#+H{no2( z@8LqK&emqDLJoJ=Ay)h33;!d@;GHm}BOK4l*i~KB?T+>nC)r{yr1wx!{kS~ys7TbE zH?}7p;C;)upr-az-CyQ&@vU!>mT2wfV!DN46f!#iCu3=#qljRiX|LkEs;>A*3Icc) z>#WVaEl~l*y!{k)ae)P%2Aa%oY7C)ACSBmD7*ubdwFGb;M$4w zR-W=aGXzPPGkMMB`55SEzMz{NNt(4cD-W7uNZ*1`%0Kepp?XbhNe~B^O_Gg2^L{Do z;la8xdZyEFD>$;*Oc5)QT0W+9zZ0#3m!YQ?S#L>a#=>uhw9Bk?ccceoX!TF|(hkZN z4ayy!g0uyuYx*4v_MAkRxV^zpkU8pVH3~NdOynXaGq0f-eYyw~ev#InVTvHJR>NvD zqV3*wo4LALvDVuEB51`cYQrdR=5Bsq;R?@nQ_OF9vJzsWzbrVzyn77B>e%9443eo< z{XUQYr|I2G4SFZP8H4{%Bx+KyO&$;su!;G$aL+LI1wK$;eT~RO>nwf#jHfH`d9V0q z4=WK{{wX@@@=;&6*I&B5!DipvNL8bX2(a7Mpr_day&5i-&QC>nI=^#(A_e@pl#^)v zX92b1Qi^e@8%;xpjjvkb-bp*RCV*Nh>)~FbPs#q-^SvH=BG5GH=1sTuo;amy?t(>A z=GI($`K5CgUo>^Xm~H{^z-gbp@161el(~zgM6<;d_5R#qaw(=oWptyA>IKou#=D=s z`uPxK^XZ!TS))PqU;kS~`hTJuERb%ndhYnEW?wefKTH4m=hV5=t8-A%7uO9|^(zZ3 z;jgT?EHItteEtrXX3(p9%&zLjc?|=Pl0ccUP9nd^peuex_U|RFzF?=l=5#0 z(6fkep$kpLl0^$^B9+mrFO^DijmdzAOrQGKPWo_SS3;97sweH}Hu_Vv_*Csuiqik) z=cMV8`R)Vq4bqDV911utxcJZG)ck#k#&82gNJ@uQ6`u#dHpY5cpJq`u` z&*}>Y)GqAT%n7D(&#cpbkB~lqz#3rqqO^ZK^l94n^)TnoSs!~_|Blb8e;4T*d;cl! zA-Ddqb1#Wrriy2FN#i{~<6U@vgYYW;7V&;4ZN9qq=s?jCqXUEZtKvPar{95fyfp7( zH~Tubk~Y83=)hqvOqMU~JOBp4;s0wVEjJgKhzRojMcZNMQE7NujvVdPelf9C{ejM{ zeayld3jqCa5p^8w-)hp!$nc-;*>n_-PWhto_!C~wB5-_nwusdXaphb+{$ zTg)QK1=kgNP9n}B`2fkxmCG`U=$k6S7H~^96_8gyuE+`ZH@`fL8E72WTosug@yabu z@o_tplH_pO&Ry zlAvVG0;Ga*N^<4MJE{5rXlHGLE%y%7bSC56s24n9H9`O&A5G!oqOUgS(JGM7tQ{;qk4?-FZ5>&yCw)=%y~ za8qJUMjUjUT$mZ>R0Ri~6RdkY+SUA#4>7*kNE!dIWw@&rXIj3XJdD!OuX%SVkxtF@ z)9;#>Y+mF{cR$)cWquq?-<5D&MZyEF=7&8~E#!V?L)dUUsC7eHOEQ43QZ^iGXe0JN z@<2Uh!|`3a2j%Hj?Fz)V&%bBC3b&a1Gb(I0($ulWxzLo`3ej;MW^dS%{xhTgwVCx7 z*!sWS)vX^=YoTRvUhdJyU;Ug#9&5?-JZkI5JCMRFPnO2~5?b78whNbmWXb4oXkpkZ zFh_eI)>oF8SD>)JAQ;>uwIFya*Qa&uk|FFz*De_(pJ+=42llfqmH$bdT$UZJ{Jw`V ze%L9@!t<;0{ibkkV6>X)SPMzUznxCb*;hLhZ#@i1E1tq*T293_yi?l9af-wNNHI5S zth|EUPGv#7yuVz7loiIy@e5MyRQIRE_vwnd^;6*z!hf~l9X4D{_<0-NZo@@1|IhP5 zRizYR1ru5wqG&8(wr;^$nRBU(T z^X4o2mwU1;cc-~7RqoNY+-8g?u+=e>Y`M)C+t`Q>GsKpK4+1v-ropma=S{fG%PH?K zz0Z>@sRBq)=I6+5zH72AWI6|Z+r+#0IupiibG{7E#PRA*WNnB853 zsJHUC#zNO&#uJ%n{Tr*lPYjCg_|PX>+(qW#j_B&ViEym^ zK+@oCU;1e%J{Y6&=Y^hVSxXOH1+sY!%*+mF(ptC)!}Nt3J+h_Ljc8 zY-86mhK1fNcDhD@L4$1QF<8WLD{PEg4BNHB)-lV+unXR?6!Te z`3Q>mZ9kDbUfXvki`({Aw`$KrSQ{qSnH$Qh@cdT_d=Ac7_OFY+F3&ecV<>UY5R@|C zfpwf&(aCMfin@#_9QC-yX!4I3nPN{y`IZnBQhNRbrhtzPx3pn$>#9#NI6>jE)4Z-! zdrrcrzj_7tv<2_71#e5Ss_j4tt1{cbi2IL`uce^eby3<^tKWV-NlVR_cYLV%vOx2t zbXwkgxfkI)qsiR)Qao)Jz+O}coxjt~oyLBwkDi*>m@Ctmrx3DY+ym$BQ%oqyYwYMX zS}9MU-iG-d50k+xBp+{UjEx2GMTM*Jb6^IcxO3W)qw4h)x(?lFxzYDTE4_00{K!W zd@kYajH@5?fS}B1E_1~471w(x}AOfNA`7^6A2=on^DLkZr{b;?UQ|O-`!%) zBU#luO_GaJGN8NTZF}yY5BGa6!xOIo=GU~EtRj%Vx;B^1$!>iB?CfineuG&O7u~FP zZ>3T~U1Lp!#-TrG_U`9QE_7%8$BB_Xe4{|_7a!B#>AIz?n4T$4Kvjw>ak|E*4+yO< z&sAtB&2}<7(`-I>jV~ImpFyPcRoaN%oAFWHw7cb~Ca2%3F(U=cC;)S&RL85UoUZ0t zdY035-Xn~%5ELM0JL;8G=l?s10v~g%;N<>8ph~n(B$PCe$kWk#Hk;NWz|v=5;Q{n{ zR-N#R(WiDx27RtnOYKLWUy3e3bdR9@!t^;o?ep)@XByP-=<_aH*U+a4nI%P^E-bP| zpZ|w+Bl`Rrs1mJ%31!m9-rX!A7ECJIZ5R9rh1uQa(Q^BY)U&FYYo7&XmVH*6uzgN2 z6YX=ll{@OoXPQwqJl}kkXYCDK3?v3r;PQrU^$2$+=UA24A43CeshP;f`%uNt2{e}n zQO7$?=TDtnyCj(P;Ze^|cFIaPi$?YfCC{+;dqY7W+RMs@tI@ESKOq~&kuJ&$?6{UE zY1#KC%-!@rIN12my7IaEwu1Q9NWbJzoLD$h1~?NoEs6K!cWL~*VDe-ya`h(ZDTrUa zX|-NRvR?6-MJj{IZai}Bt2>4*Ea;+LSk_2RJ>mnwGQlaI;K5?;uq_X|iPlA^cox9K zfmMX&Qw!;C`T~%4amq{F1I6$st)szpW*~Z|xOKL;>oFRv!%O0eFXj}Ij<4V&lw#xM z7i(R8F{Z?@uY3`ug9$!fKGP|mY1h=0Cw{0&TYC^wbuSx-T|tK1Z18)?K^U7*6z_Up zmOzs{%m;7Lwg2S62Ki_v;Oy;$4{c!;Fo<4;wZpSaex%9*-}M(b#e!XX!_+`D0^R2f z%8vAe?&t7#EPr21e%He6N`@QVl7SO2Kci#?pEu?1n{jy3j0x*x%GB?1N9S?V>CG6dFLP5Fcqee!VpYYv zVlnKMh3Ve4%igssAG@L&P6PrbwX%9(iO*In*BcHvFXMz)2#{6gmu=1M=9eA>@pf^7 z6ZlPTr>W#)fblZf=~IB7^AB0y#aQFKUD9bNPP$Jw?k&Uy&3i}$uKX4(siwd2H=x=q z(-td~XSKp$Jy*R!Zk8Ntzdy24Uf>}IeXPit%JfffC~~R`kVbQyYQ)fdrz*cRzvQ~Z zN()PBa_xeqYbW2F7kyfS0MohVTn2O?lAFVdcT?huz+{%bjBP5frSjB#sE*3;l@zxL zy`R@+$dWIcDhLo-`E$XMu&i!9_ovs}q`RPoT(;4rhut z3ns`Z#`q8|S8cjs8i5phGK4TkGYD6e&#k>-ZXi+wFOs+QKS-RTGCJ8gRF*uE_?+ai z=4S|Ga!JvpDw3DXCo((Po!=nNw9Dso;lo`hHB!9%aS#y?f0iN=t(U7H+2WxcfhKdZ zbQqRCOKx%{k|5#Hm!&KCs=ji8xr3#NCsVH@i^q?qU2r}E;}-KZmA%ExgyX=OX7YOZUSird z7<91r<21%_N37MuB{l?6$=awZyr^Kwh5>%uG%v2{covl77IBENd+mxvTu=hz!JE#i zao1cZhC{Pu%5!4_)38^az|NSoi0L#mES$R@O`5jy#<6QW9$Sk_&UdHtpp-Zu&m_WA z$vKI9!lmKGW+)J(ERNJW+q66#M?5`)*Y*(2a)o`P~p8 z%J8@S3k+LjW+T<*v2;yu52A=%8H+IAt+r$v*17G7D{#5^*9)8^4v#0LVL3T@ArY6r zk!fr0;K-CeMl!<8UsT`A#(FGjNscA+^`DtJq|EobnR6_Ok`$LIj=ariG;7Ggg6;VD z$P8&_O@=h{ta4qUa;D%Ty1?9mA(S(%AZJQG`w7kFZV4633!M)($SU}QpUv=eCQgqf z8IsRUD&#~8(cHlbP8S5@X}%(_xvUd|F;;X48hHc9?20vI>wwDSyg1J0T)JDQZf(P) zhvJTr`e3comxCoan__0D)83hjd$x7l1s=BD@{QzBg^OzUmPK{Ix!SCz9cQ>TGzW$x zrShY)RYiPQk=I$)jvjM)S0`6@RXhf3_x#e}B@HdYIwdbw))ur$ zJDUS~0S9G8?)T~vcDf;luXol~Wo04rC|5FPRw7WcWKju((t4V%JS#7jXtM~mJ2|x@ z%A!R!=UZ8wImsSQ4wyN8S7mqR0IdS1w~OZA1*o-)k_4hc-g2qL+H;ayZ!^~^b`4;Q zOt9MO|7OUdIIs5XKr~0uBHN&n(8?IV4C)`MTglVOEmLe(P41u*B0cb;XHjSlbV*+B z?BQA*!)SG}AbgAXRJ(7ifwrq|@cwgkia&yrWd!el4mwBx=o%Hi`V-Q6Hbmq3s zfNrU*0LX1zDcT9>bTHdC5wweKZgKr>?1<0W9-sAkd{zsW+xR^B?5xvB^Q?1<_dh=w&zvJUenc z2b_{$!ppdvj31@DUHitG_9@Vl+ao!WgIraS%+@6($t)eS3DvEGs+|>W*u5g92Uz2o zPQidl(m#2+D`930v~ZzyecAzg6&L4J=8B}+80#{!0j}=ieE+X#*yH@%~o!{MTBmR)l)RsVb2A_3h}7dVrGN1q#cEJ zm~uj?xn(C%@u9m(alS2OyBl~Alkr4rCBMl(vv-@c^1XYM$JZB0C*tWv;uG1mLcu3# z`RFemXFJ7je_ftK|HtiuDRd`7=E0Cn|n^@t2fggEFWVuP!%(YV#r@xiG(3vR+LDwrD$H!>5Rvs70?=RA(QRSl4vz63t)VK1aQpy`&D4LoP&) z*&Z~J>CAKL4=VlLkeH_pp$zkI}2Z_GNyclHrhRMAIMBdJ=+kVGB+s#LBDcoUhB#i%aLP@4hMwM1(m*ZV%Hu}oBcraRkRfcq!3;3^p zzPy{y`@!;sIqM`pOqXIADL+T@qolK0SD_1CNLgv`MDV~bnD+weyq9J>*uS-;7n9*o z>_|HJ=3)M;=AsL~4C=Rx1s}WNlY58#tFzU&-;!{t|lJ-QU4v$e8LS z6-(c0j`lvZ`R7Z5@~+HSN+I52rj=KlKh{K{QzY^@P4@i-iEvKSodXVzx6)rpye%ZFS~zUrB9`PH@-bVv(6ryixtg6mN5**qK? zsGcd-+AEC}^}YT%^=&6zefm)96a5yP=2`Ykx&Eq47A~+ftoq8qX*hv&;kJ@Gzo>1I z>Z&?@v}e&)v+&Z4`Wil`zK6Z~+Ww9D`q_3{$bhKcuhKyS502wd(uL!{Q>VR>YTSZ_ zmmF9r?Rf9!)Vr2+je|p_?T8Vh-FvzwU2?^Fv#*+)Ca=>}H0a>C_9y+{Y0u&_y!ISB zJ2E?6;hI&SQ{QT@z9w)zl>VdoERUP8e}(OzQ(wn_THm<+>zhCL;PhNTy6E}u;OE+$ zMlV@#dBzCQ`2UHkhY4V3zAIQx>h3(^%n z{5kbCk^b-WQA2&!mK0wLizBnIj-;zxGxX$x<2ao3f2Yotk)s2>#CO7TGOBZ$?*5$m z?)^9G+d9e{`_tw{s%K|5qtjG4^x!xSB7FdT^-$)G!m`nUp<}Rj#Wn+*kPw?CaIoXvv_XJn%h4IhWk7i9tQs}$`1|(gXIxE3{x(hef8CIYxw2u;66)Tu`LYq*;qQ%G&p z!}6v#nYH#RLz~nQA5-9OOMF*rDa8Q8E^PPYr|Uwj6Y-MJMkBGhW4+eq%v_V3Gm8#$ zL$=J^P8o-;d+Y&M2hTh3oZiN8VgHu=(Bu$=C|pvw%T_{vGq=UMUN?jZUH zw-Wh_9(z-+trz{1>b39rd}Ys3hs;~A??;4+4tGTc9sG6If2%!N$Ake+3n11prWfl* ze;M<~*HX)vua557sTQ>~Aw7>JI{=Hr;IQ^@%;97pnWL1SBTVWec zVWzeP;}-;NuTHN&|9f<>_DOM!z^&aSs!uH9xTkYqNV z#inz!`G?}U(NSJ+VtccepW-^fcvjJ6%Dnhk_oHk3c^}C~#(n9pdX-O%-lZg6Rvly) zry#VBkZ*fr?R)$|SN|$RO!LPUk@!WHD-9*ABh0&`+QInFE9_9Nugu2s9*c8p$9ySi z2aLr8qvF5a2jK-7`;ET?ZqF4Bs-VIRZwkN7pw>``EN?=>{uwY#7}nOZW2_z!hhJ9r zkE60K!^XKFWjeT+qB8Jh3xRFO|22FcY1tp&cZKh7K((Pm_#P{AxcIiC2o%0~7E>%i z^HP|`Ddba_{%^JGOE2$_XNT~-lch_;PJYbkB7=)(frn?l@T@L~Pbq-IWMcdODC$$# z{;##`KVI4&-|lFK8&|WeXn36;Gfw1i@hxV9N9|f9OocBS3;DA1^-W-ZO;P{z`0oDG z{`eLN-w4Z$hRyt#3q%eV-=W&P2VdL1`?u^y3i%YK|6BdI=K*-0C_Lw|v}t&dAG1)& zE}m67DBzA)+BN9&r}U_O;l!guUh;Cm}S<`yNp_|C^P!|TV)Ka5-EANW*y z{`uhf&%pM7t$oh|$V_}E3E#WV2H!S*%#TU7v+a+b+ozj`Zr3fc-{lbHJi60T~`RAqZM1sCtcmMI+7L{WZALye0=p?qo#X!G)D&dswHdRwebW^&?w;k@Li z{lW#w!I|O1F|N$~JcwavX1K63SaM#d?yHi~W!1L?m*@Q~vem3S%^SHceOg(=;I}c~ zt}_1He1`Q=nBxbhI?)oUi7*QrdFe+pc{qHYZxUIB&&i*l2LzhoupEM(n#Zmh(o= zpS83dmBW7Iicz7JJ8867d$$!wg;xGduO=t7vL_j>k!C7Put^6VBM6c!1 zdK}SRI*`p`?Oj9PI-HO?L^*mg{?6gA5IvXv8hL-p3uhCymcSRYSz&r(f5-YMSmKoR zXLt25P;7mQvTcqRm7@)#<%}GyaNE{j`8g(_7&njDGFor*BZs2JHs8UZ)M;<6^&{_A zV70hN)L+eYWtvGqyu(zGauY)-s#Fl3VuI)d?(f5UH0hzTN zALe`2U1(NNM8%}&i=MsC{%iLFv&5}|wL8K!Yj@UQ8GHGzno2wQQ!4zOd{{C@_e(Te zU~;g_JIC=9!CAXF7>sL3Hqp&4PW-X~jTy0d`)Sgw2RVngl)b@)lqgf;^Y~Po+%MT@ zhnYsEL~F~FY+3uJ#QW(R3e9Ggey+Zu(9<{gx`_T}J51M2>+kC#u*2HUn8=H3VGdD( zCACY6>C@j=Ckd7qPC9kkBdm2ql*PxE6kuAcy}|%oD_=Q)MTTxy=SvAN9VI~h$giPt z#1myhc2=~US7&TPuoV7t-Dw;=Dzv(QzG}s>CHBgGATv_9l8da%S zE~6|cV%h&|jFa;_CzKRKSD|HK(XZ9NlZb6DPK|qOQ)cY=em{*#WRYORszq2Vy;K3u^lFTe#ST&wdkk;gd3>XxzEc zr)4}1eEHE|0iD%N04MMjWx{tpm#w|!wAZd+u09I}98n?GVtZ(6%HgEm7Bh~7c#f09 z5~tME^l%Q(8B;b~?yECa*9!VQ07?rCfr z$6QxdrLprkUF@}-4`ZL?U3<2}&7TMoaVkXYrum&0sre7IEat<mJrOaz)qYaeL6LzM=EaXqa)N~3)^CQjdY1m~eDA=@Q}mI9S^W44v5t7>vtu7b;Wip+`ZWjHmbhOLWB5;tujZbk9d%36LWukKJ zRxFraA%L^`Wr~`dePi75x$b04fkw-?t#!jn73TQomdY&pavpI!u(LHL7l+J zbNNa|2L})1rz6)?Fyzf;ROcRn@m$8$P^$RjSr(3_X5g@f`ka0Z2HduC5A-}`t9+S; zp{+t3gHc<-LCgSZv<)OaYK>xlwG9{&MxvXwAy?OFtN;Egb^B)1V0-_nAFbqxvDo3M zgrk`2SAA2_wU6jG5Si@UtdE#^%GjjBE}3#$;y+rgEQssTQz@=Of#n>&Ink-y|1{05 zuKlTXzdVTnZQgoppX+bK^N%K5Q{em?;0jKsr8#Ent&gb&b0y!@#{_`6m{->xM|@(3 zbtu8z4e_qE%dZJUE(DBePav@@$;*mPBru+UgVzKzznNGae#his)Y-$tXOjC+(i+| z7_gXo2K)o}Xsez8EQ@0uC3z=nF3Qt1)kjyp%G^4iJmz%Z#u?;0sX@A${B9W&Nay}9 zG9=$=u%%9hu88`s|K=&NB?SQnL<^_Yp9`&)kd`|R4#v|2^$El z3-6f>1DPy$lh_^hLxM?GHdpM%rj&zYmU=^6>hZ7 z_hm(g-njSAAHUr*Iw02BHOeK-h1kHARuo2y%#Q)28h=4}Ea0b%Te-~|$qp5T)fY^g z(%Gj3nyN`R6$CacqVC2beoCLXHm`Ksb-~iD*XeY}eOa<4XPt}>O>G`_1XA~mU+1E7 z1gPlnJrwR!ou=?EXOTUK{}uP>JW}cH@Oyk4l!iN^z05;+nBk6Kyd~~3w~$bNUi1~c ze~!7SRv{DZk7RoF$O zCt6>iUe71s!$chHpVDQEaVT~QpJg9da{j^V8BV&6(Eq1?^sF63+JeveF1!14>VBB? z;zPu7`z*Y3$+qq@{+5!~M|LQqFIgO^nSE(w;_OAPNruzZLS4OjpQ%)0JtK)BXPzP& z>mMUdcF2J|GFT^Q^!NP9pZU$Hb}jKQzA5|cZ-yQ0o5*K>GhB9?`uAC|t^Mq8zIw2F zhE7TMg$Wt&ZY_bpa^k88R6(mRYL}w+Sa2CSqO0&(cID{6o&3$bVss#Q`RKr|dA^S~ zWct91l&YSV2js;(NAfJ;xrpZgp7-(`#MAm+OScj2U@~A0PEF%LX8W%%an-!FP{J35 zyZ!oq4fkr&biU8M2}Zu@L>1e!#$0~2?H%LhVq-Hqvan_-b@%FL`<0)T?p*(}F`TCP z2l?(_cQB`ER|fu>?-pEsdWKypA2Q#t1)v)W459}0yg58&@n)@y4#3T68bCcg3w&c! z`KFTrl-g61q5N6;&pa=zk*4@!p4@-L_Xqp;6zL-0q2jS5j;@kFpFddWZIcN;*U)&x zw1d}OMY^E*HwrNszGn^Pl zLoYZu-esh##pfJC-9zisbzgilej5qzPjkA??3(L;^Eq`tO!}eXefKTty7Rs_I&j|_ z;8&MS;q5w7T@3DnrXL*lk)$7L{ngaz(|y&gqXV^s_iuAq!Z}TAKd0^n($&`wh3=Z` z{klu;939ws`+>N-hM&THz>I_AK7w>{-b3l{Ek6PG1AOUP+^0llUwWnQN!Mw*_jBr2 zy12%nj`MU~8rO0Z>ogTycyK(6NuNqx+o1Os9a~TR@?dzXZg*U-{+zm%uKsnXc-p0y zyUwbt!Onfx=hPGYn(GVrP;mULwzOk7qh4XD^-_F$V$CT{bDRJ=syR*{GkEFc9rZbeL~bo(1matBh?w4&$WsAz@UI@1yM8 zXZ4$jENT02RrjO~Hc<%YJH3Pcsdc-&a>yNBA6;g9bXza3+&hX(o>qQabxsL#`#`gi zdRVd1caqn#MqjB7&{H1PdcxidbjeJA{c2u&1eCV%5zE72)mp@KuxQ71MT^$8{ZYRH z3vt$E#Wq$J%|;RpO4fg-Rsfe%oW4K%K`ka8=Qrh_LHkG6gPuVFyUC1F4V;X-b`<3_ zH4)%`^~g{_oWr8Pyz>CSw8R(Z$8QMc?3;u;yjpx~ao4E);K^sgiF}VIJQQc$SmHcp zCbE!r5-Gi_r&~{$x<;#7w>D_(ML=ToE9jVJ+4bgeE>@2jG%KCXOQqHMHQh_A^A>j@ zOEL&*f301{in~yby`nwA`6a62pnRu_2$s0jIZfurM4{NlIVK);yhR;6$=f55Qf-;d z!AU;p`Q0_9ZxZ(n;c89d>^|uS_Y;&6sxGQ}VyV@!9DYTyRpD3_%Qxmwf67*P0$*qJ zsf@GS<_r~VZ6opj$HLCvtG$C7eE)xB@%L&(Gt{86-_0=+W=Tk$<9#1t=;?O$e7T&glR3Z04F(LyKm*=kt6-&0g)4w{Dhy}$Ng$R zBwx|r!=W$wzohf*z-Oq0gY$!_#IBr!$Wgu?M?g)np2=$XP3w2qFU7mXTu$s=M*Mt2 z=`;=A%yWI2WtC$YEo?j+uw9Ma^&I}!kiI_*N~^{@+a=V0IriI`@Tsm#IJ2mKep&wt$NxX; z5bdXd_X6OWn^Cv;{RC@sJ~vPdo>6<6axPdcCOprcv?NOkR+Te`*eH2LSsw?{%cX?U zYQS2xq|^1?Jg-GW4~-#vy1XOF8Fcpq`UG@Ju+27KhxVy-+yl_f*z4oG_d|@x8L2b% z>UDT-3+I)NX%Bs`$)4|b<2dCUTHoaKF|Ujb><*3zGKRhL?XFiO?zYT}HFr2?0f#;C zUxZH6_UbqK*y>uHo&%p1=X}{*@CVzg|!kIis~r5o)BE|s{t&)0p@3b9RU)@-Ny znOV_xr~ByIGe$+*V%e_Wh1h1PVzptjlUrxxbJ$fluej8o%$h4c2qdQqB%Lol-&Uzx zpE}GZ%m>4EqtxbBFsY@3_emFd!F_PYmeRdTb-7b_XKy8nveLHY+*gM#?t|K89|WxP z1MVqfdrD3Ms?Aot(V2c|Lyc~TGwMpaSfSLU_)WkP7^nW;-8=dUPyC3}oy1+-#QL%88jx!v1}`rvoc*M;ZLo8x0=>!|YT7sShLjP`A2NFDwPMVpb-!j1sV zv;`?b$sd-Q>*xQ;rq7b7Sy?Xn`nLPH=v0VZIF~w-p(g%Z8J0Ck}V&7^K2NJeAS_| zmH`^WgcmjoxHFVy4L3A!q};s{CtJ-3#V<`x1yd=1sHqSR7XDGsEv9jYUI&9ul9uCH%xiz>2f1e$~1nz13hD}#}##sAtxM6Fm z-fw%9zBYNet@j;U_5t-?<<|RkuipF0%`klyHXVu)0QXHa#couq8wDg6d^RN0f?=~% zNr19C+|ZH&rBh!*g7V~P7L-eEbq9d*ZNEm-&KAoIA&B=0VK^->Y)ZUx9}PE{RJp%! z%MGo36wd0EZE0~Jd55IRzVpDc^TTGV;(+2wNHDMH6GVCunge#9Vrz}J_)hS!TOQcQUwE&8{p=}3)|g*GdVjxwLM5Q zZ%CV817~MS|M=LCaf?Ilc2e=Y%v(NhczEOu(~|Z=xqyt&m3CDl_=WQk{PINwTw!3y zbJcq5=;tUroZDo{g>QeT*LDo$~Q7zk2?yD|M$ zsGey3{aSGam+`Sl#lRn!ona3k+lLlhfrCjO*n{s#TsxyvugKc4ngSc8OK{4I&75z^ zrmHh@Qhi~Wb8c~I^yvtbB9ev|tGD-~Bmlu1@E#0v>8W?D9T1u5V zQ-;P3g!4MfhuVWWu^UDNA{RO3gUq9JWXIH3 zs8k0;lUy^59NASU?yn|P)w;Pu=QDq6Gph~#0FGN}pG{R57S z6ZSmTJe}pkW1C$E>P}OIX3k49Zp!a0FLPV1j8;oAWUITN4|<%@WyO*!7z&Ru z60W;6M*kmVUcHfY+y9Gg{~u)ge__}SI8)&skJI^o{jT3VG#|5u!ax+M4-xe8 zpSqH6?m~Y?WSCJ~FXGKeey|Tsu*E(@ugpqH`|u~E72CAB=a(P(h@CMjIyithv~%RI zBH6=#wJN8)@|2u$g*JP@6Y)t)aD%^ai#Jlv$ zO@r~fWWDa#tDnuK92y2zIlfi7)Bw*gA5lQ7W}Ncom3?-SyKD?gnkMI&*qb@A)~uTD zk-yUSvb|=U%c{foh!~=@?&Mv}(P$PB2pDF8sO0+p z@5XDY`96Z)Zb9bpyUA?{>B<%x74`*zMhj3D0L`_6iN)Cx38%g!6Mp3hed4z0YCXRK)(ciV?fftJ@0CtJ`(S>$_;o#!SDOE30DW*qXUjgXNC7W>)f|QQGQQHlWLm4B5dq zvLRhl6>HiRGubt8lV|lD5o>yGa4`VY3`q{{5_pk(Z2(eJ9BX=aaOW?0>)R#p7h<=e zT&n3FYuY}zCxu&6*X&_U2-;;xjp~h0f{gA~!n9-p%{Tu=NXEU%%xb1T)pthC{2fGL zmZop`!HIJIhIRf#H8Xk(AM5KvR5)(Be3v;5!O$~9*vNq@J*s`5j(Jswhvy)kq zl=-6{k$I*vw+)Q$)Zq}|4PXURU!Ij?hX})e%)ZdNZLyC>FAK%q%Bndow&}UpTit7p zP7aK1dNlUdk!VTY3Pz5MZQ7?mPkAR#_8xR{vge@FlHCW5Oy=HqHvRc*EHD3>qXN1| zdYltE?wrV}$Y6;o*;f14oQ;3Y&FhCEvq|G6MD&r)HWVp-T(BgExLn;Ql-E_* z&V(G`=Da+xV2q37&7hL%+K-BI_(gl~E_K~q=6Vvf3V+jvJIs586RnF0C0krp&AhWC zm?crNQ{7L0nPGyiPN8jzGz##`@ch9M^=O%I!E7co=q6+5Db2{2$gFwUv)~*~J`sDV zt#sd=Vw3o!O^=<7^-M?FoU|&M8ZZ+(8s`&YdMiVi^)4Y=Glls%pCy(Iniyawr1H~& zSUFfbK~^c*HaOM|Vr`xd#y)0e1yS$Xf@Jn`RMNZ542q*e`hJir_FBgUn5I(TSas3+ z;GJNqynR|}0$!WV1JKcC87|lD9@bwGz+_wg|3vCMi*+h-5{d8^bGg?Zvw3p=5m~Jw zXK!ly^mUrjSq{O);2bozm$_|mK1xeW^swNopVh&=>BPEM!uawhI{_`w>WOzxc*6`;Jx=P$1s?S;MB>|BakRgvyZA6it}%>zFal%oVC9vdqChYFVB$t3VC6VTs?+usqa(9EgjP zfNg0rv*0u+2M35P;ew_?%@uptRcg0h%TK5e?+|OK|EJnv2kkJ>&FYlV4)RX9Cs4a= z4~n6E^k%k$BHFR~%N;2j!#i!g>c8sEOHv`)nIUDK7Ppl%_@Mdz&pSIuW`*jOQV>;o zolCIt?)5C&(QNM3KLa57Z!Fx<)D`Re*D1MS==Jp03n3tIE~GenKStq(P5Wm!gA9!q zla*Z8kc*w5zQWn>IA%NGw+;~)dvR)zTV-z;legHMcIPiRtDo0dnJdYraR6;-?!TS- z#^vXX<5r=3XW9r|7cm(=>5MDP8HbC2LTB1YoVA;?6z96nZ>$xd;}Mm&l$Vqti|Q0s zKqnLJ6P`#hs2~s1Crnk9>OIO(V9P2n@3UNGO`la+>?|%IZQxL}Gl*+Yk}C-cb-G4m zs~#&FYaZ1+XB-ry%MXXyyTUg~eMveu`nJ~?n&;dm^+}QJ+4^hHQ!ATIy!i3+e+s!( zb{8TOt+()-aT#(Gi8u;1ZO}2%T4NLG%6q&4CsjadAK`f358XeGc6=^j-{CUGtM4Hv zUFH|{k>ihh?PZ)}y{?bNulkrk82{?}=ksQpUOr)L#h9>7V5~9Fe8toiKcM~XexN(N z?XKWxPC@vi;koZK8pe&SA6Laj*-oetTfs2viqY}kn4&#*8N(^%U+fDWrwZ)8;8^np zD+zyJ@bSN~(eN4`hnvkiRN?Ona_+Cqsk8$|yf-h_ethVAiDXXbE@^`YJ6Df&mIa;1 zEUVs@^Rn|S=Q4K3uQ|GT^l@3GFJId&r)z9Wu=M5Y_QXdY?IiqjH{h&W6s6k<&p+h` zpP4WKrO{pr>e`Qa$-QL5-j^YLKJJmtH^jKP*1H2ZPeWV9ECt8e3B;x!nCb8Z;nxXk z{wfi&+uToQm}@Q5w?#im;iwKrCPQ9bFSuLVE#;|BIRda$#>JGCX#My$bxQ5Rc>6c# z>SNmx_G9fUuI)3%*;@PNirU9(S54^i@kYZ8wc@(un35H%#`gKxR-nnKe&Sv(m3R-1 zCuO*|2ZR=b4Ao9zV6K6Cpe;T|J0b3VK$=ENm-;j!_q@_Y?}t|YfIg+bmNF?6TjM0bIw*p%MgqTza}@}<99jZrRaHXUg`T$ZDZ);c=h|>SY03d8ahE|@-AmG zYtv1x-{f6R072}dH&uE^@;W zOOY~0W|4BRCFSpL%^+oZoM|7koVx`yYV^+^Pnt)^XQbG<>2}RcNHw>|!*|BRcgMr` z#=~n_mLXWwM|agPW1~Mj|BM@bqRrb<0g?P6bo2K#p|lgU77@oXJF*DX7opS__ghnl z4srjAj^?s2XK$(a-8o~&jBBpAAJ!hPc(S?TS@d?{wN9>6R%I@lC@QTrCrHU3=L*R1 z@02ihgE*4;M8zm*9^x%t@qkL$uAkQxJ;3ybFs`Y^mE~KQUnIG8Whvj+nLGd$;3o5~ z%0>4-E*WISg!~d!f#k%;Gr~xdTUWyiFt{RWx))s z&Sk#+6sR0T1=M?0n69mP#U--`5f`et;Lfpx(gu+aEV?@v*gs^MxBd*U;hhar=_%%D zDvVd`h%MWZ#f^Xf@}hpWCFc`^7qBq1t?4DKQYq&_hC8dBi95zO0wLpdr)i=$Iu&;s zqdg2VlH+!}a~b+BOsz(#TM?F6Gwd|C+Pt@$huyr}=zy;~6)&3mR0#oi$u{#-1t4Fj zPUl2D5}u<-mxQM?X~ZiYO_Na3#pZUEZOwhcpQ2o`rQ8)NgGL^jZscO0YC|jpDUvBZ zPi@)P115UE2gpW&?gH{VxJkT%OKgxYG&*$j_EqA5tSh&EzHB3{bYUJMntYslR6ceH z&6`k1Gg1qyf#?f1e%Ry8mXcWZAAKuqk)Dj-mv)l~`omj9^$zo0o{84}9Nb94GrUY? zWTF)s#d=KbcQlvmG>dp9THhys@^7x}k@jh)wj5%+Q|4U$Bh`_%?deC*T8NDc#;?;+ z|F_$O2x5OP6Vr zBa0075ao-cT*^8lhm)hF`=Y1BI?I-I<){|gik{Avx~A(n;GMIvJv*oUg8K3TSCZ=^ z`)G3q=%Qt``nv-50#Fz-KIGxAAim(HyvkJZL5gPqwrbh|1x$Afz=eTpv*zN0;>_MK zRQGq`;$os-4Ij=iXJXX@*pGFwYIVr%Ay$y8`P;P5r?8EtBlABO<3bN(S%RBi&6&!~YakvQN)y-ZasEH*-UmLa;_Cn3kN`n~8#UOdSR=*1 zAflk60fmGOsG!jhK?N%c7!(CbR#8Esfl9i@qSe+~ZKYBl`lyvE)fllw7XxZ)siHdA`5j>l6f=z^)E6mGjerC`oANiGt%ewJHtM_0NlaG3?Z~p+(~NC>?g@`X{n6ATKb*aQ2iXh&AL& zEaA1)XzX2cD`PKlC$~pW+9}aRbvpGsiveY6>7$4?ovO2SX5J+a8AW%1#kY9D2~9{%Qz~}Xws%z_CPju09`#izK~5Y zdr5J7_?h@zza2CXXFI?dT9u`M?D%QQj}wJ2uIbBLw!oL4iYo+%Vti;dXW60Y%o-i{ zj+)h|@eEfO#K3yi-mAN%#NACCW9^TT=Y6V*ti@>nOd$O^fA5IHWQpA)#~yT(*6TF0 zsyh?|nE1gOHDL7FwTEjkQLv8r=Br?CE=vhI(v`Q7T^`%On@|<}0qxqq)o$@Yui``9 zQOd7$1);~YJID1ktb;Y?zkO|9q`}s&-fR-r`#SOYJfBpF9Xaply4CNn5wZK_TUmDZ zFESgp)Tbkh%K{Y?f@$mgA^)*(i0be4`IXcsg6Lt;n!iFeuFv04*J$Cg#rAkkBx4yJ zJ~TgMf;T^H`#VQO06-1)G0QS7)E3+KIRi)BObOM)W4DvCeL@SKKHI~qV^ubvtG_tb zmCUlWWTV~>HO0?kLCN+#21iX4RDRwr2*(Sn!%a04S^oAV_1+xmhGiP| zTbdIEpNK_Xdi4X`8$^4qtPD3*pLEk{l)gxYbbxaE{>V7vXjbvEgEyJ12m*6VWmxc1_=WPDPh%mzo6ep^8q64~l&4(X%XSCsVZ2`|=Tz zRPbnmX~aLXosGe7wy0f0qTV#2tk5!c2fMOb;=#F&@Mr65Zb5??m%(SytmQo^!V^3a z-y<1j{JD-d4lK^NX}hfC@qkb@GV_Ho+%B>Y^N_8j$e*7v33xzZ-u{Ga!6IL|?Xd{{ zUTA31PV4e4(s*ZPFSloAZHW0LOfvHK$I{yI9N}!@4)|$e#ISy&TiVdx_VU%7_%T{v zeiPk35%PoBUerSR(e*z;`RvPw$>l%J+y07BI?UN|sjttG*9;KK7_j7{iZKy)0{TGz z1oSCTMSfWZmx9Tdn*1?qM%|D8U2hJiy$M$cSLk5svEKYtQw-mz+Lte~oqm?l>(dEl z@?RlBqmjM?)L?&sAnnT8017knm+-|s!H3et8@;|}F|M~Yqu14%xVTv>l4EXNHBxOD z2v4K!ty{1g$ozn9*S?LMPjU@XL%k{iE+&uXyt=Rn&8N4ZrA-h^qd26CiwFttp#XjuI z;!T>F?*w)iw1B?;#l!CF|l+M+Txlsvt06>Zcd{cYJW}gnlrg3 zQeZCMLN^s=*G%BX7kzKjQb4KEMeOCI7o2gj^D*A(!@dh-ZO3lhW^LEQkNObqps zs+iwv<}FVG`{NFUnU$Oo=$NF*dJF7}U-Xx*@f;`f90=^TFOOPvTbtlyiHILPK|S|9ov=bC)dT_*E(Etm)I(pusHWj6Gz3_38k2OW3_k<~?6 z@lotmK>!a6V-a~<-JN7NMzbpjV8xk)ivV&tCz13;an4Yio8r=lE4Vx@a+bXQ-78JM zl*J%OgHcndJ&Hr@meIl5B*OQHZ5Zk4=6KBA5DQw8?3Qwa(M6P=*lE6mzSh##xjdt> zO*g42v`Q$NPSVrv)`Wd}V-^9uCHIP;x9b4q^NbUiN%(a3W@UoTib&$DcBO-7-CDUQY8>-fAq?SWB zdsnLIZZ&oullI@+?nqMDr<&rU1{13S1cIwv4tx-R2chlGeV>TZ<6cBUL1eMpB8*#e94o z`mh^%&DohGtIPN~L*RHHt3I8viXUy!`Rw{c4SoX2*|7H%mRbWD$5&j+sAT64L$Z#SwP9LL2KtoA#+G-8l4x z$>v^3*3vC%zFrg_-%I9y!6k@}BuDy)4o}?vwwY>6Q+>%k+f0;aG#0v%yqjqx-^|`0 zZ_-&u@q;}z+N*(eNrd?e)}&m0S)M7UlJ(}FH}MG{{Vl=hO<4D4nzO6WtMS;l2wM** z(_U6;Bx;I&J+&{4uy-04%YcG5fvkHRl)xbjx8mjA&& zt0!6{;SH7SAQj3z3Eylbd`hOzZ6-uXrg@x9k_{=bv$zaRbQ9jG;gUgmyTYKa!7V?8yaP$qCin^})I!^uZ}V0j~N$ zD+hm1wuJ4Gb1I1}WGLUgm}cwJJ{WFcwbkYpB%Zy? zZ(sz1-2&(b_x5z=-zFkim7LI8w}o%i(0%_2Xs1Mb_jw;Dn-erHe5}}u$FW9eMpBu( z(Ms(t5Her&BlB>;qWd2(rFIY*5|?dDX}1Se41wKlP*dH?|0!Fb8;DFuoMtK+ja{x3 zo)LA&b;x|01|9M#mgTGhd3yLuUkV?4w_owfkvUR;D|#X?J{9X4nXT{Ol6S@2>dk3L zEbb*#qTmw;>rweBax}R33F6VBm?_Q&kE)TYF}G*GzJBiD1DOvK1zIq#rZF;XJ67>2Z?b>q7v!C z>&=DnQHjhaR*mduGasYO8_BHIseqYkA#60I7Q(R(f>JsN=r#RuGo=1|l$3TPaZ3+Y*Tyx^UD%6t-=1`+Lj2)Vb|Otgspi`2)M1-UyL~p+$(5P8 znWCeyw)tYDyXrL%LqPQA^VJ~lKjy^cME)-coFACL{`c9O5d1MG8g(*#TuRylQqt;v z@`>#Gol9P&3w=v|5%c3|9>G@ZYjROPsp=p#gKbzUdMD&7Y`uNds&y;4b-Q}%%Ic{r zs;53&J#}^U)K%3}Ykg~8@tS?^^~Z*(M=Y`OQ#EoJFd^>u!L)W8+j6Gi8pSjzeV=>$ z^mU42b;tah4&u2!us<2}GAdgR>ojR^<`encjOj%iza1bf;6ixqsHLGVWc5;UF$7jU zxu5t6YdqOCrL{1gKVvZ);SGD5wRz@iI>N>`R~Kj1ggC#}RP~%&bvBC>SGuYuwAu`! z3nQV`5K`51nNJ0VfO_{xitOz5YjK+jQmlbxp_Wa=5BPbp^a*buZ~$-G`}ey*$B|KI~ODt7COnAaVTa zVm`V*ct=WC)UfY5&?a1&TH&0Z?owf6_M=A8*fCT)&ON%$+Nk1^s*&SV^$HHqt*OhQ zHs%P3YJF&p-fj00(WySlfp)!kv8_Bkwyql2h3X|#o(<+^;iitHqjKVx*#4bTHFAtC zhZ|fsx^n&ssjUxfOetq$r*f2oWsE!vtTCkw_SRC%NDSv(2${`bvy!T+X= z%05?_Jo{X2?zhicb2rau>_Ae-H=rtgVW%$WG{}&f)=j}ST_W_A>bvw>eb>eMA3Qfg$Q({xiZ2fU zX_SS;{4%xZGdmOw6Wzb7;(d!kJGBf(mMow!km`;ZZZazNF4d|UIo#Fp6(6EUu30h^LNsDYL8N4^K_jQLUb+;{+-eS)w3QP|-yllSN2nTGdEF zLaFhDez=#fIt=hwutKcp(S_5Nw!(e9futVOv?Jv{H5tHt+r7u`j^oogaX$+`1hWD< z#Xl=>y***S`?yI!mA?huk35#N70B_qHvb$T=?uP$EBTfQr`Z*^3BZ_6DJoAjmFEHdrQ+XJ8bNYt#*>?``YiBgL6`o{XWq+);Lp+IF!Pe6KQ|F>&X=7o8*r~K&jgOS z-lRy>^GW71e#lA*j{D|0E0?>B6wfcRpwqHzt2GHi_CAP`TUr53F4#sdL zi94+?S1zW}f5IFYMXrh|vpEalUR{)9{>Tt}`=Z=mdk1vSCTViR#h$ih-E6c6U}n{g z{R0(v6NwZJXg@E{pN^jav+}0nJxPg*IQ@aqB9-0#DINtXa3{9N-`A(oeDYZTLhjCB z>oH3Hh3wvDYl*p+>bv^_X(4kWIJueW%j9#*r18C}f7C?bvF2a1HN$7oVMl@&zeYl3 zO}D&vD&S<_UHWz9`xrvEnN4KVqUMbl`L&rJ5^Xnbv^Q`426>0BstX6KFU%YEdk5=L zGC9Y#^H%t1fWi<;XEBNM+JGvgA!I1cVv_vaj!>3*GeJpS<+}wTkihXepeWCeNfeDe zMVf>^AlnWymC?-HIy>-`Q$|4=_-N&R>f4&FsVhga2g5%Ai^-YBP zf2r?&*f!#&5AKN{t>F)*`g3d>k9SHSSbvU=0-fK|a?xONtnIv<24bwS3Nro(1oZD% z@Y1rlyF9*`*iOSsds**!nQB-dzfUto_CfB_bi-TkI+=KHfIY}-${fu3xLw{t-?2aJ zPkMUWKFlC##=3=M=IsBnZI}`HS3Kja!ti@l z-?Uf!Ao7_@y|+t!&>XIPDGYz=`P}mO%F+q#Y|w@?9a?ghvoy5RedO7XZ?N#*+x+4& z#7gti7N_*8m*75MImBdH zr_!v{^{qXBbl^{EcVJ)oNUIcnQo674{j!xf~x0d=oqWH7cN$LLqP!lWl{4q^Xd5hl{buW zpN5Wz>(Zzz)Jy(FdY6zpWi(osDpQ}!!5;-}&#*j$c#Y*q(J*Q7=IEIW&GSY$Y^H&Y zKR(}Nx5FEsJ;) zvJJ$FFGwz{A2lj%Y4K{(GoI>%l@ z&G`$PgH_Mzn*)Yi=aC^ZpYuk@!1f__nPnSnm)Xx7$AN}=QvxqVW-I{PcKAoS7H0}_ zBUnyiY{RPrWB&ZiYwWuF{7kLXv-47KE~G)o*9W)*Wpsquj%^=exh7@(KnI9rW3f4| z{oov-g_kWf;T=Cpzj0i3zBVx9{USx<(${l(X+Pjbp%>X44yN+jO@%VQW^71ISz55J z5tu7SN{%eZf9{$?d;bqGk>vOJbSj zE*60-xpIJfICK)nb;uA7gP4Xtip+;Z3WqrA8OKL_FYT*E&0Nr9F;#QgsDaWXcYEE0 z8iV;uc#B0>`bgEfEpV$yvn#dUe2LJgyb&S{T2c-!{<*MejPFx*qb+i(iYyuuxoAkF zXpkg-y?NPATW{=RHO99^>rsw~gtnk;${n-0=u#@u9v`fG4Ag+?dXPCNKOer9J`j5d z?C|s3L*TlF=qJHdMw3%p%X{5)qr-Qd8&`XoS1z%QQZ&qKaW{5U12hc{y}it%E(ty{ z)JWOpp+{^Zncv#y@JKoBH7K$(fBiKF4_xos&6Ja;x^P&eWEdMh6WYuTd;^d8!f}z3 z;prQzONK`Z$E6hxqFe@u< zYhStM;HLL!#`c@OQVWMAJl6-bjU7wZ=zl}8?X8M!&kpCnl9z*I&ak3;y}i33wuBTnF>T@h_V$TT znxyA?s}99yN9t8%yNc}VMQE2KUg9DwF3ZCEaIHXwmAdN#Hkv;1(YezHs6iAz=%#G} zm9#T(Pog9n(M=a;IQ@a$sVAmEGn>udd8Dk5z}kxmehrhWD9Jqg?vm$h@^qCWnMb-&=W@c}Gv_<<$?to| zd_}AWT?M|g`F9<$tY;+Y;mwOW(8IaSFtclqgdRqb&ZCFtNwW(*Xm6d9%)=mPPBPyk zw%lxG^>69Hq;D)cA8qBfHJK+mb>(F|{=gSSI6LVuHw7H}xtX~V7>)6~{A-U~kP8tZ zEzMU94ha@J{j7$PiXsQeRZwF5m34odZY^zdpeK=>^?&fSo2PJ6-OS1mnz}dG~t+V^eoIhhz83%+G)jzKGQI$~kz*Su3)ZbCz84k!9 z0CAJ-SHR1g-8$RJ0lw|z%ZwVGTIBrVR6AYmVU++`QNHW5m9jUf=hIR-13R4&0!U80&;5tZJAk7=C~=8UfQx;+3f+$QNHb9 zc!Uc~ItCsH%Gv{e-9-#PR$j=G$t0_9gim!9uf#mJ7rJF);oxu= zo+kB_!gcUvs3E}ac?*{y#j zCO(5w8p~GlUSj^GkJjp)AePbodOW+V!3MuUaDHR(m)00H5V!&kGLP{$gV8rMa6EQk z;u^E*D4lyO=RBl;I{7l2vY6EJ8SDJY;)9vD3iemEj(TZg9o6?LYi$8ElD>JuC%5+Q zgJ>`ucu|1q&ycAdr76osCYH5!ov&VRcJj1FZ+1fSnBMF<;Yz(_iG+TmH#;=$)SC## z{8Vq2z$$rLF5_5p#`}~Z!vHggj&yTMCr#!_>g%6)4Ar zse!8$XubZuOwZT0DO$>c2mN-U6N4t>NnKJi_yWkORr8*U`Tn-QGU6robl;c1_E&qz zs6ZpW>6`hr@(b)UDqwh4@>|O9e&Sd0Tgh+V&>5G`E}3=Z+}SfGPZ%GXH*e0oWt&pU zOnvw9_}nXVPu73zy*L(tYTnh|6e!)!bAJMx;(2rCUR?X_^`B0>a_$K(_kO_o6+e4l zPKVOUmn{HZ&n_Z_M<%pDNy!Ggk}-guoAK1Q?G=RGgu zIcN`Y%zg{M7jJTRKqGhE@Eiv{>$ib$cVA3r`jQqRdedzpX@Q_knOPK`J^L(N`MWC& z668-4)3(C1=dLlTj;gv>M-te}r{?z7E#3vrfj}jN@yk#d3zQFqUcWTL`K#0~EzpCT zk!D;~;bGSfh8+@g3-nU{lDX3^oiRu?*zDRf6-auZcVXGA+0)Al=Y+4SSVnKG=pt1{ zpu4VTD4!1%uj?YddtfgOwi)v(X3Z$iqo~CsTG6RGJp!4hUsZA5wAtYqLr9WEl2(4H z*z^qaDws28woTKIG?R%R-w8}+V6URtbEY{!syZFSB&uW8dj+~%Aj>XZ20YWT4pTaPkKp@%T89B2bA!_tyRF0QY31d!E~O4CyQ@051j4lII+#v4_xnr7 zItBRtpVndiH@bzY!1lxbyYRlkG1DrhEmOHYcM~ZbyTqP)uk3{HmQLSm{}=EdlvWV9 zxSPY@?rbDvi&*8v8S^V5YgKN~t|NtFm*`LbYqG5u@V+|bTVvuEd=LK*#y~}SL0||! z@zFp=L7=v$!`<;wX84w~saG{jwZr&>U3z8QjA_$n%;QcaaOk?(OQf>+l^j=hBJS&7A>_sO&DrhL=E?c3FvK8P9gC!|+bu z{rLW$)?rjuL11`rcVnZZY{ra=Wh%Fev0)>HW0%-d?{z8oHl)0(KlHbau-QEKM8~@G zmC=DQuX0yC&m=wR9yi3GrKd4G`*ffuyFRmynZ3R2*fWWi6Mg(2HdU8y^;RNpDt1dY zE1&o03$pR4I-5z=HlnzfWoqO4(3UjdV+4ySta*cAeC6Nv19XGGx^T|JkRkYF#r&PY zC+n+Pk63g-aPf)6Rhj-3hp|K%T>Lu##Qw-Is4^phi|@B_-GYk`CM5Pt{=)}e-8yhE z*?^Zryns-+R46dP+>&0OA8NeuNBQB#1-&En!AC=lxB=1fdSg1P)w0hOY9oZ&=fT@5 z09YN~^cRO+i&=e^^}#rIC&qTI<}3j%-Gbxe@w|n$6tz#-6mE>2X0d3l+bS%6O6kl> z&GqCoZ}YJSSUf>;Vev1DuMThYuxK`eJ7BRvKs#cw5iFh}lMLxwg++$NVuxv&pgHcI zVKKzRqRe8^;9;@DtOOSRD805Q*cFQguo!BwFm*ZgU~waO%f|mIVet<>_Mk2Po8)SX z_v!xX@CFYHWBPZ%VvT@yY>N$G@rWh5rn*7GqLmyvk!Hq&#hH7C#Q=-NjTcvk*LfH; znfrm0Y=={J#b8~yF+Ld56XEUGiO^oP$h4Ytmu+Tsg{7piIAPI^0aXjPq~Wfxbjul{ zw+Bhg+9sRLW+1PL+3BNnF*T~w60+${@hW?QNxJ&-jw&2e$A|ldbX4QhpI}Z;oIo^_0YjLEdC; z&h*$TB)6u?iJYg}oXvGplrxmfd7_{5RG0H^o0H>OJ?!BM%FM7ichprVXK$BNH*&Yp zZ5G=jl(Tz$8p9m6?rp!*)>XSm?Ts@?HIh``mG{T7E{zm~l_ zTKc~9;=}ni+Utszt*lzTJ6SbhYjx=sPh7nM-df)Jy1}PGiK|WH;0Y&DF^Q{9>qCtq zM=KLHnIj37xYD+JLR>vShNQR}u_(`3F-u$xwc=_O0LBFu9}A$^ndGc8rv?`vgM{dQ z$GbSnorocD@a6~jjvYg+gjeq0=-d*}lkh4OLJ#sGR@o@wwMoKjlPA13;rB_xYmZhQ&wZRa?xrSoosDm>C_gXeU)CED#;B zLW@OHU8S(dw^%fpfx_Z8W%&MdahZq3zah!$@Y;j`dpDHY7T4{H#agg<#tww7#i(V~ zq1E-FTJ}a(4}GEbZeev;iP~nXxeG|971Z_stACJu$>$QOYdnm$nh6~+`cMEn_Rbn7 zQX4fK5UCx=zmnvVmaAMgPoy?Vq@H0#YNHjYjaHnwyRErwbNi8;5 z@WAPYj7jBmNx9h-AM*Lv?)c!h@wGkWkwWqCz>nA^Jd8bn<9T+J(U6Z_bF{oswv#&1 z#CwcQ4`R_DiabYok7sO_4Xl+Z+vt)>dnci|l9yFiM@ zZY)UlSi=6xDj?1+2K)Cu?tQ}hg1|x{upa`rc;{XL{Bqma5e0p?Q?uS&>_ui2?7)es3lfT8mqyiJFN+#zd_~TWc^O?F*pC(Y83ceHRTE~ZLv*pc!11Rq1KF;Q@c=P z(w*`IfKx1h9d!>2!004^<5K{P@BpO8KB0n`BDVcj-O78xN z+{1u7*~LV9M;6inDa8A zv196P<<(3c1t90u@DadtwhOT96+U0pAkX8U{xD)(;&9*wtZXw{GpeHD=44HlJlo>8 zM?w|ONAVdXP1qKvdYe0mWf8Zn{&``R%y{IHd;|g`ejovv6?lDUV@`5Bo4wc%zzx+a|y9*-@v}Mu^wGq;_6!2GGZe8r?-gCD@O= z(b#?b-|=jK?&k2kJr!kJ(~ta>PzC z#TXQG4rEIEd6VsV^8Iyw5JJcDQWqLy-H7Yp_SVQnwbkYiyDtCE4yR9>^wK zW`fWrlyYFCs2}C*%Xz?l=5X=44I+J!jkSg-9By(@KiqqEM1~z*Wc&!8mdr>&iE|Q( z-dk@1=-6239Et}XoRckIAlsTYGBSZvH;4+J=QF;4nXLAbX&PM`HP7bP{cd)|RBwKi z+A!}EEim;bt6_?%yH8A3SHh+hJ;A$C6N0}aP|???lPa>{IjcVOv2K>;__ckvv~>)7 zppKDLex1&B-m+t!oB<{D;FlX8q`qtcj_vm+s|BYyZu?!Kw%?EYsSCCJu24%kKXPeR zvFICq83=Fn`*6>E=9kpZ3mTLdG%u2xK=aOU)w2xLRBAYdyWj1xp8xPd&$L#GKNv>%7q{6&%ua}pp3SO3VfZn2mA0ZZs!#8snH_9Qv@dmF;J6 z3|JXNOp&#e#W{wzxEfs^=FiR41?T@z(|j5^53loP5CXC$#GME^<~^E&5wi`H%#1!H zX+3*M`+}3l;*PN1Y!srenrR9jg~3m~`HKrV+lJs<=XvumAs3u)e$^Y#(PxKWB+d1L zwGg@KU|r~7O?Nr3Q@De5t_!)05Yr9q;IXvx+q3a+2Z)ng)OaP{h<`iviV#0U;W-1$ z$IR_1ZKZdP!rIK0XJHH3gQYaaCk-TfUA@vE8pFPw=4c8^vD2(O5pg*-16kKdZ$;{> z$7YfdZ^?PpWAo^gv7GzRAzyO<`8vyF;F?~7hq*jybp*&Zx6bxFh4wFb{3p!8eEK(kV^0(y)Z zj)x>=-(N{A0sIO0asLeLL9_M$al%^0J)#K2| ztOWoc2|G=c=zzQwA_qq0n4{5iZTsS*_ZdY+F3OTwAn4#dFE9>Y`Uj4xj@q+jw2H#a z%ix)AxF|jzdEWDJj72s>V-ttYOfwMic(gYSipN--PR``N%*}%a;6PQh&0(R-+b_p~ zRF3&Q3|NWe02UhIasCBS>=JcJZg?Nts(I|d+wrDrK?(sNyG32#>BVPCDO-Yn4_x>_ zG{i@WGr89#GxD6l+gW=QO7ML1(rC7yOUq8(lIVyD_)ev+1FhQIR>Nt_Wi)kyErdv^ zUbuq5XzZh5>IG|v?)mKl8S%4UBmf4V3}qL$hqKzlnaa1>gG;*%PlbD*2X{XU_bv+; z`}XIu0#3j3;KmYglOQKc_>{KQ0P=$qQc!L7K&~Y)8Y@VE#O_%9LG(2_hU60?pdt*^RGZpq}=mO zQm~4=W+w0k2dsCt)9&^Q`t28bVDICDq4RTEFRdb0rM^T1u zb9qT_sTi9G;}MafT$1!x2pnZ%q!nH#uZ=~ymhW?*guF9hiIxS|n}Yx&^x2OTPo)XU zGpYG-H_&q&gX=$bD0clEx3MtHwa44+HsHwi(g8(hhu>2qjCf3>Ja@O*9SUZ6B71Hm znLXELPx_rs@UyE)p2E+zAIFf8-MM92(~0cNv@HE|0xJm5Y0O2bm?T-wSs^Po%*lf1 z@iQ2LIH-;+ZfAB~2ElrvRo?8D`#^jxpK zb*8W{U7OP0aPwotdPzkm(JNDQGwt5EPS=?)g786_=RnyZ?mDh(Ko7&K&cDF*mmSAp z9TJE*_V zBF*uOA~$3(8YVFgp5pABO^uteM|l5yR90HWsdA6|8oc6D(R?#oVmAE|q_1}A`^n|) zLO=c9e)_0Q&+W*LS8_MSG%+Ttqv;Hg=i5(?{i>&O&EgK3SG$YC?*3@oTGYw%dK_FlU-A`|YLutt+E+7DGHxU1vCcOy!W3gxa7V41y|ZH> zvdpYnxP3%;zsJ)69(=NNyLkxkv4O`l{EiNf#Hdj z3u9EGUc7)>jgw2vV(eE;o32T1){WlsRVj+%_*jeiL@i4~Jb}L~#fb0`41A_wE#^?L ziY-WmWEs|D780uywwmjP&@iQ2#i{qP4I1mVOO8q}hgy9B>G2%)Hkb?5ibFc0S!$C$ zo~CYz)q2%ir|P{##tK?)TUz|^E}Qg2+oT`rP}_%c*SM{6;kG~p7cOqGh#q7S-6BNG z^h&ce32r$b;rT~ci9H&o;M$G z9{-!GZp=tw{uh8rb&&?j0_mR*4Fs`9JKx|SB;tol(bV6pGMrz3{awPQcUn2|6SwwWDe-Gc5U2aEYHdHy>IU#k2nj~l{|8d?c|ZPGs&Z) zSUPj^DAOFwdq;Wnu03KTd8G7`M_+Qc9h=-uk!YIT5KxQY=Js9xOlqv%J%*F-s@?> z#b@z~OR>@|%eTrgZ5ADdwT{|xCL8kgp~hY{6E;Cnk0NPfK@z({r%>qsn~m+u*~*0< z+Qvp8CmP$yTpIfWFHnvBf%R_O56^YBiSIa4EwoXb;ay&>&Z8DSC43;%4<9j;33j6Q zEG2jg8Kwjy!#yAG7Hi5gG~u1}@r>B-NU5G_a6L1R4vmyH?AkMZ5gf5F ziCxb;hZ~tL3;3rk;GY!mPjt319#%(G^b~Ua!v}bfxfV~O`R7MKKk2c9JtQ_Pzqb+c z_{dg%!>&jylZY&okf zX9PH(T$|1AlIczPC|dUkWN4jj`CNkVHmI%f8N9}BN)-3l*d|Tc@?V)@cnm#Sf_|U9KZ#07T2{3DqZ|>l{YDZ@bg; zQta8T5QJB+*2i zoj)~b{)C_7E%q++#FaUJ|5pOFsCkmvR-~CyRC*n)jePEQ?{olMk&SLUt}#ekcT}*IV*koe`KJ)efCdDBf0L}J3Aa?4yPBgS zMVX_<82d~qmrNs>2K}bxO>Z)o2hiS;(oM>UoKu$}=NcHvW4Y)nHq3+h|DGz5Ix&|j zfwYr!+b&h&!%iY^yQG^Fc}O>yI@A8uhpJsRh%VD0t=Q3Q&@2Bb;XI^7Kr#+*)@`PO zbguI+=Pi~_vMxITK}silKqq{_zOeQnDYHpoo}}X@m37NEzD}3iPI<6*`rsjUBV((a zI=AcEL#iCBIGXVwe46rneBR;>7;ostbLMF%%Shcz0j6pk8{XH;@HokkZ)bQBr-pSW zkRaWYfV9j(x>Ar>czDB{3GYEL?@t~{4~z9?+hA)c@iUxn#J)m9>arnHB~ft6t0Z&y z^aP3Ly{}Wlxxo2`+Pm^Le`L#hkZ9|Mx3qToMiK92Dl=584x3qB>WH_rfn}wOn5sld z*8rqU$Xw~e4KA**FjjK|!72yiM;6AaU11z(VXOwm0Kqtlj9pgfJ=?SI(X;O{yt;Ws zX-syHwZJFwyh~{-U1@(-Q-)UVTH3=_-+Y+Tp4didPm|GammaZ4ESMF5x!-}g%7VFn zS1>aym=%DTBQQGk&?VAaEz(;-daG6b-t~sZsZiy+l?&fx?TM|}fJnXK!uD`;*#KBw zdl)uvzC5j_^zP-Gq#nI|h+^+9w)?3|>qECXIk2ogbmu-b z6PB_9Xg>S^rD8PsNn>7N-U5i@1!A!S5wRc^e;bGufS{(YQB$LP3CH0>7YReqa|FSA z-yks3*RGqbJIE>~iz{4$H35``m{P2IYFQln6ULJClTJy8riB-#fN%-=S~c zv3>h?3hR5ja^c%HaElix*0-f{;T9XX*$X^{z|EBlHwP*Xs0mey%FK#>G*4-z_~9qK z#t*K!YXRDX8~g97?d&%#_&L{zYXJ=ZAZ1P&JW4u{wPv_cty^y{rQ@s;%zbRU%I$=d zVD_A(@g4wt7U)^vG<)-EFR?p7`SH#*;cWnD*V=wf;wzyXWJ94fON5l8&==`(UE#|9 zZooWaKQ@_1?6bKJ&J{2#`H05)A4qlTeXY~i8|ZzzH;8T}>F@vZ17TOCcuKLnf z0g`)=w-Ux4q%;(`0e%%IC*E6Zl}*S(KI}Hr6tu$&koq*l-n^d8tD6n%(;nVYcCTP) zytO$Pw_3#8Oxpn{Nk8TzsU+2#avB;CJ7{?}si>}C3)GTqcE(_Lf&qrncNLwNlWudL*B ztJs&1{rQL#kC8>{hh(2bP!x9)oa-`?3CQRjW*h(`Tw(V5WOH>K%RO!Kou)?avKF$$ zGY5MJ)#QRuGhkC|kpV)iFZG1P?|UnS0>ic)j2TCI&~Zdo$VW8x%nxYS zmF`m4c}1wl22SN(2VKU{F&_qa2|X7^&wB2$O41>$b3PHI56#XSHfr909q~qvNpP^w zUao{qaU0VJnRrRfJ)+I0aXJjPT1lfkEyU|XpCKZ+OLcJxpQ#2#uZbg|*|wfEp%1{Z85zeH_&O_>LID=djDxOB^448i17xKMRC^z$Hn`i!~RYVUuqp`64AB z3j=L4jr%j@kP&C_J=v+YV#ddGRMu{-W=4PJJSVmu} zyV>WCN!k)!YX8CCKk(^SC)Z@pseg(~rO`CvwA*0mPIp_1?mR;C`RVX)QfTd|iG0E9 z%}+d>cIGe~r}2?G9K)B2p>b^|9-(qfVKNqn#r0+qvFd}_fHL*eMxFSC;2e-lsVT5I zhLqm0u75qHl};n4GF?q(*1z|oLF5#edobCN@aw(1_7FF5?che@_Z@Q&wWqWLV=jxr zJB_(ZY0uO#H%)BLjk$ll23hO4i5+vjb~EPslc0731$7v6S%iL%G4}x#b7O9p2yqMe zY0M?T?RLz4v>D_cBzvvtT=p_T{V{huedLX~MZCtZ?UbA`H(g^c8;=J5nA=I`q>j1s z$arRaWT%{N%$=;vc{VfCUk3TJHZy0hya9UvnXBU6+!(C*u^WRAbr^$dr0l+D5!D#{ z8foB-!HEE~V=#h_(rFCdzbS>f9-|F(8Hm+L_9vIdU=RCjGduSc$yM&t^%(rFJ-#ej z(;th;=hVPdJ1Uc7nGPo``7K$ZRQmh2vD!rAIr~W3?5P0W88lYk0%r}EbHUpDnUB=5 z`U1_E9IL-f#@ey^5V30hJV2QPJve&_&XviOcC6k+N^h(l_-aaP#%+IMPfDg}Y;1Oy zWA(e*O=H%zQew=e=zmzT*^RlcB{$x5QJ}&osbf7?kVJHy6Bu zo>FfvgGNxS`tUl1SJaq1{}PU+p)cbD8G2t~Bru}l*qYL>&}F`!qBd!PLccPHPyiaT zT6Z?DF2Ot!Fn3xHz}^nF&bS0biZqq<>dJ**!W^|gOU86mY6hz8yH=@rdRwi#%{;&d z1Y2+35|DN*!mY?yZ~py{l=huWm8IHb8K zHRfJ;#Bi-<34t4T(2H}-K!8x)acB#k-Z_%jghtFw+pT3sl2!C!<>~ca>DwvSOyDC) zXUO%bbj9bWX!Yi+jVbtNTL|8U`^up3?k~K(1J*Ef{(PRUO8WW}(#qP6$<=Tf+?6HM zzFB`oq+HQQ&5!-V&fpVck6c=KWDTxeCk-+s0Iw+=5}7o_jN=u7k#fhuPsn7cNDY1z z!ltHZNZlrIGyRmUXi%NeN05*Dq9d8n+P&h7$(6EKTo1?uu4`iu-wA<}c{`3!Z*5b;T9nO(roXnSg=4$6+1|tNCQt0((NL>ai)Yd-sf(D~;Z+hl zZReY7{|;v_QhaAsPc8@0__PHSJB$Ri{qTk2i=9@fdO<>=eQrj2ne%LlO-eDzrI@P}Pbx)d zQ{A2Vc#br|JJ&8PI+9e!sc`KIXL|M9xZKun3B<`JTMEj%t=}(@DzO)+OYKU)cW7JL zq;%P~pWC+m95woL)M!l-)wT_;>|VC)h7@qSE&D*qju)q-)P)O(SsYi77sL$?;*(UF zMb(sayM?#`uCBqq-h4I5N#2!g*2}r2wBL13`@PJ<(@N=05&{}b{nXt4h0i@`2sX`} zJB7O5>a}L`-#nwSL3^ceE9&i!dGY=cfzvp9sXe1)xQ5C#>?O@(Jk7E@P02XzAIKM@ z_MxU*PpX#@l8o0ll%H7LgEO7~XWRTUI;7F~y$&elDfv=$={#_fF1@QfmLH@n;X$lh|NB&pemHlj)684Ubb6Vi-=dX2 z@#^XuA5asL?%iTSHd?y3xkJ$$Ww|iiL#d{+#n8gQ{O)t z&$8kCM?~iRXj=a z_l~&cDM=!Y##HM3eHU8qdhLjvZ*SqKe(z3%?&}b-PK5m+Jjc@^hOU;C)iJI>a4>b}8pN>JV3u%;^x7T5>s*mX!{X1h*ThwB8*5H;@~& zYuP!_-c=k1VfFP@wAR9e7~ito7V#H41LfiS6!G^4UyNttj;urV_E3yBy0Qyw*^RYH zaJ#Ku31uV3lPNoi@l6h5GepH2RZ6o+HTJIh~ttk5lz_QauVVlw#D0KPbX@v=p>%@l#A`2!!x5zJcL8k&T< zoCxpCVSe3VlHYUUlu0sn7SuGEj447de)Z@|Fp&* z7acq<}y#rj3VwuDw)tRbd{oIZqr*(5rb+V-&&Oe7+g_9OM5@rK+zoX~^}Nv6uLQ zt!>*yf~Oi41edHJ8G>`$i17Y@;Z>cCY~5yJv`p+4LNMG}zCyF6W9fQ~{k0yv4yGQv zoJbC-X}0vS#ARIrH86*Qc16bHY4HJF7Vg{W1)rGOWUmJIZS=R9Yt?IRxqO{ofw)5u z|ISCamyX(6twiBjIfOr{@cpg30c(c;17rZ$#N=*Ei3TXq9ZIyHP4w_uCf@(9w~6A{ zD8)pjn43&tr{=fnrh<@(PgIJzN^w>)h0)~wj~ zTa;IGZreB5zH8k^fR7Z!=ChW3zF<%hCfK^F@K6Q0MVtq}hL31bPT{?5;qgI*XNBLe z)}s%`xj8s?*EP? zz8}&5ssH-@Tu%x{OxQpWh~eS4!9w{N@C%<^MeT+pU|(K3ABC7Ie#u zpGRZmJSb;;r!a*~P6?Bap}R3=vNoeXKfeo~p9mjzz_*VH#p4h?(8fKKoqd`Iaz+I* z`T2J`Wb?i>8{g#o^5jj|jfIJLVL$z<@``D*XHV0RIQx>zXIv^D=BvJ=Y{jeWEx84I zRJOfKma=D0yK4H`b7x#NZpQ4n{SHjlGxZ(t_OFQe0le)=S#!@Q@cap@RhKcQMTNyY zh4m($xjb|5S1qoRtrig~$4{7c)wIiI%v-i91*g<^65GG$h!=!C!6|vSMH)HfD_b~O zC*LW(F@1(QWynFvHn9bE`cLtD+9sRMEeIUYsqd%HD4urd6;!!AvbGqQ!TnCBDdfwZ z4jMn}DvL}8sHXKgGyVRG`}b*Fyf83i@oz$R1RW8nBZY8zCijs=)|&6YyP5d^2_MfD zAMb>oy^RE#ZKzs{$+m9dx+P;kl#kenuyH+)_nt-GbKg-m+$PTS6Q7_+MD&)}U%&XK z-Mu}Nczc?+hK7c-`xOMv=XWW;KKu^k*Pq|f{Ep{$3cs=Z)We-yY%byIGyP>Bj6Ze0 z_1BO0&VPdm8${rq&{w|;3j&Q76appjK(F`JX`LF8_FK^f9;tY( z@^GpJ@9)cRgwx$WE(mPoC!Bg&31om$=i;?)LwT3*K01%Zph;5e@! z&~~j?<``Gz((fqq&i}AXwR`gdSI6GAj&tY1Os;7Cj`A`N`OoU8^456e1yg#JB4^A7 zrvI1v?uXq-d>$WrLR)PMJJXZ+sP&Schoo*DY&K!J#oPiI0!Nfrl2@ z)r&px6@UMdg22|>fc3M2K;^Q6z^J7Kfn^ce;emp{>S#e={QdO7UkUvHwA$$PXpr@++lEML7?GoX!Aa3<=%q8+9!eaOVaS%aStn)JllTF zeE_xGeL$K(6=?{+^C6!6cJRx6xFFDadqJS-!GgfJ^@RPtAW&S-^NxZ*%LOUdQ4$Ks`AuCn|<3~!;kj7P4A};|C=_0QtuG>M7$0j6-j!B&rw2_gCZ{?S@qacvY z@4NbT8EM4Nj{Nld@w2@53j&+oDhRmoGNvT8V{;Bq_G@Ze`tOR*;$u%_#4_+Y$diX% zaK7?kz}!1Hv0zNec{ApfGvhh^s+n^n%F_9Xh3ZdFO&jzS0-6tHbVI+zOBSD^73*7NowG6>}MSp&{@}6w1U6NtRv?q2*>&h04uF{^=A#D=I$sNKS z3}KSk14wujG-t=ZVUe@djOD47o_`$Suk>j7?)2@fD?Y3wY=7csSD*LsncujGvsP{9 zC~ zRJ%rfj&<$Z$-burtT7k}wPIw2uej=L;k)`MA79qy7t1|kpXP5^I<wZs%8lny-JF1Byhi(!sky$jyji~h7Xgzk`Yk7nyel5-qbrkR^RBVTD- z?MC36Kd=b8cx^>r096eSgt;-jwQh$ZvILV<8AtO`)kUg2MQo$)N;O;`n0^V?$?`6& z_I<(7zJmm3LscxpZmp`J&#>4w)s!0ZK#|s~4TYL}fn;lUhTs(o9!4e}ye$^qb%M7= zB?7OHJzpYtUnwNCg++E_eUWQ@y~T_tv_;+dwh=!N^M{(8p#o$b0%^me)s|bxj$Q3^0sV%YTwcv3vknu|=RdcIli;nj6^egb zkSX-WvDkQ0V5>Pu1>R^29QaaA3C?R<&2RNt+TybOx1S}4igR=A>2*{La%wU2ZL+r7 z#e!VrB@5oRBc(ded;s)3MS0a3!+WASjUB3Exm5=7$?6Q|Yd6(dp+ff-WL4(|zdGYp z;G@*Z6-fK&ox0R2{X622j(%XTI434QlZiFf-p;~6L8SyLO!sL3NXnO}_k7*<(R z!vsS&0;HC4IN#R3#J5n^lT8ojYRUOzyzp3m(D>|qFuc!W@5dz~Q`tK^$Bd&)#!-aY zr?UGS_=YCyMRFZj{qtb58&?0zj|BsmCy1%er$o~Pm~r95EY?tP{MfNp^gNLPD0kuN&pD_ZIUE<>1{NPz?fg zkpbml7!ETzF(LbaOhpC}+|C;+1~d@8YR`I@$3E=DBd)vn-tP*c~k-^gH>k z_-Xy|ok>Id&11H|OhhJ`t?fpSH0ILssVw(mzTruhG*TGvzR>b+7;h6Lm^YQJQGkMr z*MfFu7Tk;GG_#e+<5|miPw=cRSa31%mS<%Q1^o4V?S^ONDES>vMrVTT?l5-Mf^3u!3!Kwwlp;r)qPRe!R_|%8`Gn^dEtA zWP`_%vu%dv+Dc_O$Y!u);c;XfxutOAf0A=a`;Ck-2qVq$<`ztO6Qk@m(13XJUhim> z-O2wcqwH@)CU|ozm?U^}oDb}Ol-%RZ8fuC0^Zy5bR{6)k%cYCy&mW`T!nZrAhz@_r)-Oa9STNCXX3GUCs$=F3xel!qIY1z?a8_)|%2!v5;x`QpQ$0czfj+NWbt7 znE?+{`lw@5V`;P4<6u@d#)I+<`lX;q^xjTeMmFlIk$UqCmm{DV^LC2`WdPM4Zt(%_ zRI^`MH^qZ;t%H({L-dy%DmUT(CqBNe!b@GS^_}(>=dyFDKfmu>_$7qT?jl_2JN9)l{qEqn^v)*K$>-;3 zCC_w>6FX5eoYtaM>b4SY4zg-#qMi+eNzyb?k7#V>W{noj`KCrY9uai2~t3}|c*8sxJ8&+#f)GM1X)$4v*kMlp@QI@OMF!Jo3J+WxkRnyO%QC?Cp zZC=H>GcJ`DCrwTJq59KP6yW*1Y?k%O!kqOXEK1nq>uElxEcC8OD2us%Howebb2K_b zq?t>_7C%7F^K95p(My=KEWVwPVzXGP3=%51_@+dP`w9Dpu?A;&$VL0dRI_|W@X4W7 z(Qe#S!{uK2q2>jrQRelODFdZf&AMYS8D1McI{4)4IEpvbir{&^p7?aDk8DVP0rE?0 z)VShuhIn5B)7PeRp1D5FFJ#`YX;zF~a8LSNw)N3nwT^n~j2B)J5OR^eL)7NIX|&r^ju>e!Hh)Lv zBzp5*lG)H0q0v|g*vCJnK@h{Hh(Zzx`+!Ljzj6wV#tu{J?arubSuP3o2~L_deMU*e zyjfRWHhSK?Y1gSc)vfAkJv(pTvc^?x^PMtr{G4eb4(MX=DaR?F{-hu3a``UuEhXRH zy;HI!$cYI3jpr#ilmV?*t=lSk3g_T@!XqhlQpmK1q~Z~GJw7Rzp6sbA}p?`xsFD~8UE!~r`ya0 zVHtOugK0lFWv_NGS5}H4P8AA5*(p%B~5$!wEO>Fmv)IM&w=u6knchHlivNo4xrTlhSw4 z%>O_VvZ)srFZ&aM~s`U`B z@kyNUcwcbWCX!refvx4(mVnh*VC&4Y_xZrqBvKw{fvpiIzevD9UA20j8oHB;D?!<^ z7*cE^6kbbxyhe1cx5a0w6TKc;*r+Q*O4Uc9%t(MPs?z{87m?eBL^4*HUq10Mnm%9OwTr!H1UH{w3jXtC9TfRrQFHbIzrYC9-3wP9pi6 zB$xL@t=O5*=%XavJ_=}6{|!Q;vGWD!HIFrmZR}2mv17#dw~n**E%ta)iUIT3(|pqM z7Yx2(T+(oAu7eYiLYUR5zg=SchP(cZ7xINYET25q{IQH>o!bvu$S%n_Tg))Fm|Bfv zWzE<{Gb%V^_1cAO29mexIsjlGVHW>GO}Y0gG-Yy0_ADY3R=M+NW;OaH zJfpED(#QXaukw#w!=r{J+Fg48NPfN}=w+m>9+$;u(A>#;(%jv%DYthz;={4oy1v(a zMQZS?M)|!VA{j;F*kj#gx&q4!(ITg_mp#c_f^jKdPcFDOn>1Hr*Mm z4BT8c*dtXV{Q|60(&6w`Gf|lu>+-0EJ||chDOfCUbJ!CIPqbwigcBDy7SfdXzu8DL z`L|d@f9E`Ffj=5P zW_)^`QD?JeK+S9 z{DCq--2o+B__F%-1O87LD8C>Qe|K)|olc*_{M}OO2>aoU%46+EvrE>Wk7(>(0b1Af zI1(=#jMeH@ozCruD5tQJb~dZ169bc2M?II7wJCuK*2Z-n_NO}gK9gKih@D0L>DDH- zobPe$hsY9He?Fh=&HE{=#_1&QY^-KwPwf1HCeuhoJB2k{LAxRmn~c}Cr-Px~^Su-! zt=X73AJ?b8zMOP1H1w6y zvK1k5mgA>a_m51@ilnzMTMBq?|H!B~JU+DQhT&ki1g|AR&uRE^BA-FC9xOz(9Q9dH5e_3PU}Oruo%4)AG$h<^AsaajP0@1 zIm$!8mT>6~_-O1FVCj}6cNIi}PGx^B>PlMDC+QC|us!S3w5A`IKr@%{v~AM0jQK~A z&vJbc(6x-QCn&~Psf`Y6<-n_{GUh(1`cB5&%qucxKX(J8mz2%paq$d<@L%m!g}RNy ze4;!_5wqQb*j2>5LU@7;HG*$K#B8OR*#CZ!#_~ms&S;(UlokPZBV!&J=T}%VrhzZI z;+HDA-c0;?QpSw4@4LvDV`yh5W2(sG$(Z@P`XZtMuI7n|S&5=x_Q)NH2)Eu9U|1WsC9Z#%%h{v@0O5Q{3ziCfg4&6d4yOll832|Q%3!XLHn)qYY z5MO1J>@(M#&66wL*abf|GIw&-&K`JVEbLd8cLse_rK%sR&4cQ&$2yv!nu&_L7X2S} zj(=4}^aK*6 zRL#1|N$^j}@QGk5Jj>A!+^Hd77IH*PtILOwD8G3DEIykflMHK}pfZ|Im{t%3t7Rpu zUKM9?BiK{3DLyhP`wm$YaQzrrefpFYMV_gGeFV7Sn3cSdT7o(@cCKdQSzkKEuOqcm4WoN8Ek|Yu!z|Z4qw2 zXIi-1cH7|LX26R3pQBy1oAl2~b{t+|b=1okgR`LZ4sEErm~>YF#$avk^!lu`{3hfU zd%IYTUk`9~)AYlvz;9uyx87V!>mpCII1`|a!rkG0R-(U?puf2Q(}vP0i|2FCS*8(6}7vhS;tHx+gSYlKhiv3?9lyG8quVCm$~tR z=9_cJxG`F@l%#H;j_L~Y@W)|V{$Tq@zA+PP;?9Kua@2~;$bBq=B9j7F7q>_jVN%Eg z$V_@gB*d-03Dz)*TLC>iM^`{3U_MN*#NsEZ@^TMiB}~6gd*lsi>b5$$Zclxcu5KGt zw|Z82yRX|CuWnhkZnxK^tJ`k*LYjJ=cUcn7j!s*z(Eyp#_gJrifCy)^!B#B(*&ou? zYqvZhO}+k{T(8A!+qUn^Ce`b1mI1rR*LJU7+rbp_Z`yk813%zi6JL1w=0knu=hP28MKhzd7=6nFz~?Fe&sl)nFhH#bfNOsM9<~5I z!T|Sr06i^0r3L6I0IKq~)DynkQcNvFlRI(?+n-iOFcG4B8KVQplZ^4@7X9`xpW5G^ zCeE)fYb^VHAZvWZt1oMez08fg`pjM(EZ6vyb<|jINWEM;c@$%rW8az7ET5WXKb_g@ zN=6YAzdwd#6MrdlzJCT*b6E)*gNdA&bzZ(CZ?r3?igG-T5q+h0OQ@W;;9F_R5#2@5 zGq^Lh<;>)1^F1@E{=G&g>R*{Y-$PRBf3dY%%CmEFYCE{VIPjO@99wWjsoS%1R%zn$ za3tIxNz{3s(w!&)ONS57rNhkvm?>IcXMJ#k{b&*8$INZiBw$}#Nz2sYHY^N17K=~X zz`w(&BmD<9=Pc#yoF`d70yaw$ zkw;fkSrXi*%iK>3DX%5_>8pBMx%4?$7%n1pA)vQR=008|wU=ox#-hWSO6$!kfS?*n zyHz^m-gq|nZCsq$6b%+16Up_4EvoUYun<1I9*p|a@`J> zUH$iBLH~TvN3$qRBGe$z7mLSgeIzE?DEue%^`DF>A694cCHc%{#7(kt+T@IM)a%2i z8%OkslT*S{NRr>!xQjiX-$h<%A@**`IsGfX3R#r~-#MErhR_OXsoMMnDJZo=<9=7`t=jS0qU zZ_Ioo{fBi@`S>!wg)OuL_7ZAg9VPfJJj}KbcVx7%c|^sdK?{Eg5QD}swrtzNs%N|w ze&Myy@85lyTP#13{fXrKaC?7zWpaD%b=+S6wrg(>(*P$7+WQ3(lxy!FmxkN>7xi?| zqw6TaZ|{j<$T|W{ZSTDR1?@eSzKq51eR?;k`2^SNEamsHNANmWA; zWUN!&E`WuE326$@Rs8!Ymsq-r8kRA>yfB_{PdD)buTEY_8b_Yeug^Fi&3>`9utU#5 z)PX_dHQ4vJvX6`oau|W;H}cNRUUGs4<*r8Tf*nkIAuc;#%}D!Z>~%oGZ~SoWY`%_4 zwD9o`HY@F9?Vl%WITW?6W+TlEh^-q%DgLMHh4>(4#i=Rym=$I2585`R^2Q@G%FmQe*xrAPg$N4U zmikC5W{oY@tTET=k(M7t{STx5X5EvaK6%7d%yhAJT1Hf3vt5>Xwqyo9BSYDQbVgTQ z6<}71BFr^orh$5+NahMjA{X95iEg7&lN{94y+8|$ZTy(OF;$wI$oGmXoews5(!maK zWTgRD2gra5?2W^C-)fBx?TVBHV)Ds7dT8}%z|2(M7uVg~LyWD{l-lDtr=xWPL>V*p zg*)ZDKnGlEJ~7XJ;|dmk;zs-k*DU8@Rvj{j3u#_|OJnnXbX{}Lbd7}k}9r!Xw7eT2l?X0`4O zaFnEj)HaCrfJ&_Qp~PvhtO@o^XW^V#a$Ymi`gWSDBl7B`@L5hN1pG6d`qd_-es%uS z$@!HVH+yr_z`(z(Xz5|A=R|UT9FOIP3*wyc`t#cqb8j zWT!c2F6fNx%zpZ?-jx2utH-0pjqF@f*cI^#N_;@5kL;u`%{)Zw+5rHW5x0;AIF=<0ojZCQ&%X9!oCGO9ErEy ziDEmDzsbCr5+z(_FYOHYMVlf!Ksfo@n!Pih*rFZgvzt^e{1evZlv1BAUIEU9s@V=y z?Epm_vluvQXL=08s#~=xBKBg6@7nV<9GBEC6GkU?qsX$at@V*@FptfSc@!&`OeRl^ z-=br(%&ojGuDj)AcemvgHdEaNB+VP~nqaQ7AlY|Zs33G{s?2O<(?Lz6GF*LyOX;nJs@XtYip1zzy|<~FBghq<`zNsoC0)_pCvuqB(Q~mS^NzJZmi&j39fGl zu0?RguH3T)FCpSyC=4{}#*K>_% z&HCfNx0;7?-nEb7yrN70;KR!oSn8foA<)`G+MO>j$$IiF=I?Ev zPKoJLB+3!X3a1%D?&X|@lDD>fNw2*t*Dha+GM`f%YG;MD5b@h1KB~PO*^x;5pXvwR zpW7DL87@&j$?HQ%nV)err?lo$uVify(E-j>7aw*AIIh6DrGm0%+kX>q4o`lbGi`lF zk+a*eE3+kN?CBZ?jg?>~ZhhZ`zhb{<-j` zf5M37hvtLaYc(HOKa5uf8F=$SlR0SygD%prehmY}D*wmSmpT*(s7XL40OZ^1&V#*}ZxLn02P`{ZFxeWI8gmrEn8f!}#CDq$ zHf~Nq6vlAk0JaZA@ zwgC<1N@e+)nWf0>HVZYN%vLFT(Kd&dB7h2QD~ip%@O`ft*^AaIUXxi?ZJA2%=bCaT zb5CU*yPCP?U|JJjmH=BWumc=ejs?pS*hjyl(bK%F)(hqXBs{RCYXo^vrRC6 z48!CK<^jR@*liWe&mGJ`TKW${dBd7xNynk^;%~ydcp{w+lFdbrio^bye?z>ulE^@Y zJev|?@!tv}z3xI|<#eRA$?yrCElS6Svw=y^6=l1o5tbOE8e1dDDKRP&aoWWi!Kj>( z!UJSGkv{)KTEV!TMK=>@R8J$HF#i{SkS|E_$}ksm=@NN~FYS$YIUdqphwk%c?Q^u} z&GI&>8YRk7z0>hvLBVtUeaXvEiTNvwYo>=8&Jw=R-A+fK7sKg2OAP00T}+a_=o2zw z&4CQMwFfJfr4TBIb0mWf4Dyi0a&uwLDgtUZDla5~er+5{ZeEt3WsZh21kqGzBWp|; zqG=g}>+4@Q2;)KI%n0RSWL5Hp2hmViGl0n22_Xm$EHC8KL?}m>&*;bjW~(*J1-LE* zShRB)O71(zDiA6za&<8i9~KQa@^6UBuOpJ2oTM?5WLgV;m)}_YkAjrM@pZ~Rqv%ia zhHNzT=lA8l(8K>F{p~C5h@O*Y?h(}8w*^hqU$iP(oWZ!8W_8bV)V!d5@K5XY#&7T5 zXj^00FU7Z2vGXIl%~H8=z=dNjoNjT)TrlTviGCV=6HOF75L<^Ap3)*eDqK8nBY%X>a8X_MBHgB-`37EH&`{e;6@qep z$=0Ji>XOI)d~JU(^e#g6J;eL2v{1V;xGOEfDFA6)w$(?rvt-#O6Dgp~XxlVJwwej} z1HV!Vq5<5WNq}}#_!^?SL+Z^ZST-e0$S z9o~*1IvVbR`9_%G)HC|Ruha?b6RIb(q-pRB9ljz>Fzr4|(_`@gt3UuAlAQ8Jwi^Dv z_va6gi+@K!jqbU(dv{$umCHv&r>I;Qf0`mbV~~lo3MfFs>z+A&P0`vaoFdISA}d=u zI&Vk{J(tial>_=_Fa82lDC9&!vY#2)(X6~*FLjl5zpHG?$^PN%#AiRfu;x1Mi0QTX z1%8B3o{kxv_*ehmMv-q4@exmd-k&q_tSfYod4r>YSVtw1vid(vV*GneP#DH^{s5_wBUS&l=)e` z`*T9;wvzV1Im#`|=C+^BZU2faFQ5Hf{eqr)fJ!TyZsZw@-$iv~qi8qvt?si%YZA|l zS36bi^q#PtRpDbBT}x$M9_(iab)nmNd(*z{GS~M@9NahuE{OQ4w7)D5r8N--rB%9H zS3z^YD<(%fHbo3Y!;qRyF97VWm-F#&kBYRK&smy_iK!#FQ6{ntb3N`uqzUGC6p#Oi zf`({O!(fq!>JyD@<6MY2t5vVtIha)2izb+7GNtw38PfW@eOT+DVW($b%_+Jq=0uhp zy2q#h{>2`^mD&T?syzS;r9A)?wJswRxOe=V+QWw6FX(mF)<@Q%j9$aZmj=&gP^%eY zYqh2-vc5i2P3*(kKTxH}#%$8fIFW~|A{*)>b#T?S)@HrBzv}!oqItAvqu9%Abs3iO zt6VwD>mw_i;{Klc$V!qeclx8zO19A^Tcu>@k&Kg_Z3R2B7o%8C2pa3?8WrDip9tc% zl_H2`k)^VW<2LW_lPp@aRGsp^(Yhlbq-+WR&TNJZsg2vgh}n;g?sD>{?T5FI_)9)w z@e`Ci$DUL6*yzwCzNNK)LT{bmRX(5d*ZzTC+v;N%s>v5qPCI?<nlA``rFJ8r0G;$9U+hb5cc0z$88bbVv?$BYqHJMfXUCr4lE@c9 zC(IBy^}3JR#NyBWOq~}*{)|YfXilOjs{AqbH_IH(Z!CU~fKkduybVwE;Ystz>GXk* zZ*jQctX}k&92T)*;4-j1akd~r;V+;lVPo?RVH6sKVQ0*LzuwqqHpH6)sFX&T)^kd9 zUyz7q=Zf^gC@kn|(J}dR!e6Ov0T!sgvF*suN4obhjI<-a6w zB^pB7D@0N$^C{>N(&F|v%e=>LEM6jDA?<5N!641YhiEvAGkps?3EVi%eA_%98`Sjz z)zvnP4c&yj376V-t(;ewxu6>`-GQm?F`qg+VM@k^=C(8J;-~gPh12Hu$tRRWhl<(S z^#kw<02%*mSnaAF4zOt%VHeiL=BKnsB(%X_+7bgnp*67GZ|YbW@%XjH{+ zR?tE}C_wLigs5BXmgW;6jQbz&0d0-Rc8^+9=&o*AZS`e*O4H{wTL~Hy4#V<`vYf?w zUD{F~?~>>HLY+n2Sg4a^XQ%k7lsxa^=dd!K&KK)n%P-am9Y;{X-SCTPKqvNZ68(tv zk)#)h^x5zGeOY;PZ;bpI;bVH6dRiNQm|`rMtJl~Y+vWDg#EMU%NC{LZ)V7j=Iq6vu ztgNpZNXfQYt3vw;s%3Fo#leJhy^)Y(ypWp@9~JFnHVbz1X|F6B+kvl-UCN$<`fMwi+dZ;;?x1igeqfm95#=80Xr;hqd_>IM9+)elS zo)G01Kac;^cf$9al$#=n4*Ev@cYeyZ&glAmr}(_kxA^|`)^n-6m-e?iXx}0%3HO1m zS@#7#_BBwKOZ;X-xZVu4g7~i50mPffX@U64d;-;FpMe6;q9|rIh~`6lg^gEn*@HeK z_?6mWq~|NTldqUrF4!;%C+jGNu^lTnVB+#g_o3jTw;bZuj_^Uuh?`ZUKPs$DZSz8jkKAF99>0#brX&^h7KlAI`xm5fZ{i!>H^EX}tI~TVu3t3k#x+O%sjf_-x z+uzY#{pzjICP~7Sv76XVp|v=0uVZUgk=P5c*0hnHg*DZwVR?l$TT{b&6xNv3u-w9$ zjD;!r&mfcF(EIQc*a)#@Ha{#uCcYy~d)l)OhX3 z`S%0)Ix9c#g8^3j6zW_7zjk|dH*ku({oYV^JJ@=p?J=;2Y&O(EB6$_cMl;) zO#`pp=8q(we=LC&daf8B4I-)9qBhtn25h)1pjj9gJ7boyPJXb{WXZHs z0P;{PT`!ujp*c0X$WG=i1KPTC&XhUC^rsdT*J-vw9Jp(kOtiM?b*UAC?W*;%h{m-1 z-n5#EAF;&UzMPSb!?@;RbJ;FUbxqpq8be}hbhgWUZR{@0ks9Mj{Y~z(i>~r~>veY+g7x{f-nf^!s(AJ|SoI$D4m+7#zQus$%bXDbNA|V~HDPJe@ z7dCdPx{>Xtu5633&1Jr&RhfN#oO1={G(P>#zKxa<2^sbI6L}`_lyJ7F2i&Emfts4Jsui6V9b;9RnF}wS+`-20s>xbR z{JA!Mm$^0(-_gc5*Ys9=cN^bqE=|O<9Y_96HNzDD1z6U8*J+7(_Th*(HD!u_-NqZ! zB@v%v;~Q$0DE=86-(VVxg8JnJ{r@B_kYiPGAk!JhSp1fy;*-H-Sf(U+ zX%9g+uFqvgck`vZF(mUx$#&`NqI^E3_;l;^_VLMbxgWnfS;UXuliYy~>ij5JwsZ7w zbGFueL-R~u``go;Xn%W|qwVhibC~_T&>UochnUXxcbNG%0=nk*f7##u=I{15(|jPo z-Md7!>h@r+|D4y*T#vF%ry4W@X8*t+0oICBjAtB-03tqS;x}zicF+*tq|gaLN8UgZ z@rv{4u2}qcWG%g(WuDgGjk^=u%YSS8{3pBopPi7De_4?K>t6nEfTvjedwb5m-w)f> zf4a;6s^t7<2l<~%64hV*5Q~3Zm0JJGjns?&_v7IUJvP0kxk)|t69`gf9 z@#6C}SGnWG=cSgPhm}OT@67$4os4XkDl<5Q8II>ts7Ht)51Z{Qm(oT>WwQhZyO)G=k?m1;GiTtCn zi~8hW+|A4fnJ=6-Ap-|#MH^Mn)0kI9@p^_3l2co($}yS-Bs^znp9tSN;Bt+?e`vwi zSa82;-KknMvbHL+u0FCJW~AiVuJZR|p|Vp>{qiH172UIX zy{=k+T9_%iNBMl6$Cg5mWkoAiH_)kOrHxsknD>YYGVLKOM^-q*e(^(kJF?0g3oxo` z^RE3~W3uh{TJwtit}~nL??&^5r~?l~ouN}xYXch`)&ItRcp9Nqe8l2Ms=_N60{^gE zWXN|upVq{3y0cn_jNDV1zlm)WmY54ofB4s=^GAo+bUbW-t9+H?z|8V0; zA8tJLBa85OT29aS<7q9)Q^wOH1!>3A6qXsmcv_>%?QuMvYr%u@WUIF66BV2?p1$*r z0^5zJt!m4MNYUD|^~TftP((D6W;}KLMKGQ&J!*I3=^4b&Jwki!W&*{5eu~rvtzno6 zE_D7mW_2Q*4!Wdvrw23F!EiV@1al}L&cVC9RIt6g%Z`KMkQmp6wY2%g&6-g>%Z=ZX zqo$hdFuwboDR23@3NKj{ek=Kb>T_=&(pT~=XWKyxsE2(ZXi%?mR#Jv%{esa z(%Nkv%q?kQutG`K=&)D&!@;h3{H9Q&A0|sRx+@(Si{C+1a-);m=Csu`Kj`B`o1HGs z_OrF0W-r-Pjc=$LkEhor=ktYwX=>s<7VAZ2zgXepf#a^IVw@(2GlK)ICP&p;2B?-I z(vZ2cz=Q0$MC)1ATcKbw2rok3F6+fOaaXV0YO_ERX*G9TZWlWEi)pt0V*V6#_-`m* zwu5SeIh2xAVkdrM@x=>3#QShux5iIeH`)_;U4G)%UD~Zy^t}Ys7W0qvEYfd5&Mz~p z{>SSRF#V3b`LV$KrV^#5?Ejw?-)4JDbGpa(<_?aODEqb z!>{8W^#?jvN4Y&+xg9BY;N5#Dcah3H)-QMX(Ug1L^D37u*Pbcm?oMywoqH2|$ZETD zCpC4t1Rn=^t}dC>Wy_xG(t=QH?)tum1Kmz(E_+jT$&2RarKw9g9S!vF>lZAYob}Tb zIvGwt?Lz)Zp_5-97owB%i5Hz*4`O2RmihZiC;3pye@G|x%-}T{V`?_2V#cc&ZoR-^ zsLy?U_#`yvQz=8|Ib_f5_ITWh51&5NPtvnHSo!>%X|4P`-1rVM#^2+khGEi&i9Pyq z?L5LvGrXwsI~f(M-`Kv(HHBx0A22)AR4e*ZdMFsflL--~h7%ZzzdTQvvL;-iy8GvJ z5_Dy2 z376+5(mp$K=fHq_ZoiaWh;Li{j@*%W`WZqc^D;Badsg0qR4yoI%&%0K-ShXk`9p05D9fM_v68bq7Ja<=-&V#0j^rTvepwA zi=Si5vV7UKDe3;H;9gF9m5W;1cE8_J@XadNtR5n*(?3)yYuc)cgh$$96GvXx#vi^j zp&T{vyAMvijE$oE8632HM5+fqu1HROTyc!KiUVp z)sWtdrlNbq+bus%#@o7dc*_vEbx|CPZH|xO!+U)j^8-BCt3RtG^BZbWsDWR@m!sYx483bn^hSVG`ZEdHX)l z&8?(2J*j6h-E>bHZo?S4VJ@}%;r4)`mL>&ca}s0`kj)YH!y}une8l2E zn9+`G_K9!5{ctMY?07p@RceQ~Gqvioe0wU=O%mQ7tl9^>T}*n@Fn!N>%VFe(@wWTn z_G4P^@U|UYXMnc`niSye6Yvt??LGV9;cXiqvG@pTlfvB{-aH>*=tMl9Sa!2=%_9N2 z7&e>CGc5FKHxsC7{AY+-kU*|Kjyy&3g=l$(*Y5OyD$)b>4^%-`x{-)4J#bhR)P)6; z`Ng%NDf_qNsoArGZAv9k$*Q1W{qJ->`=|@@&lQB*z3Laq?fwI;sI4PV?S7CYLYj8> zvF+aO0o{}ys8{-SH-~1oL&33m?3z%!A0hl=F8<#jCKkUTsrX5L_;y?_(-!nd$hj z5Zqv8Q{BOOBvYak-Wv3Q2fZ&}1lPEa*a7mlug;Ya^q|eh^SzUNT>}KkT@hRH!oz%C zSED($*xY7I*g*-^)U}a&us4ud_3G)8Rf=q8)!0{rD>c$4*+7!TBoUQ=@Vx4Q1H4nX z$zk;_nPwcRq+IJzZzce=@MiqGoNTo{W(nms9);z=>ZPjir}RaXOM~joxvD_NCp!d8 z`fjkcEV8cFYH}~8w*roRq5bgW@iXj)M_I@7!Tmo|psbAvhhaW#Il9-%R+qo!2O zyC$QYy@F`|^tMrD@(s3UoyOk~L(NU(Vs#pOhJ9MFm+c$u?SegV-(as2?3a_hI@qy> z&svQoyYjr6PGp+Y9cA9hA@0`6DnIs{&E@?YuO3xZA%A#~a*M7#Sqmq48cDWsXmUi0 zB7UxjzR~(&oHdEncKr=O9YrBWj;gHRuYEo<0k>AvN&2SAXaFYDM?NiyPn4t$n`_VG z)1DgXcf2iO9W~_${Y}=c>xthcD6A#gol771-&_ycxMKASogUo`6RT#3E;K8V5$SzX z2%^lB0@+^qb*Gz0zzKlKerEKQUzyPgMlH8-gPm@^CHOqxr&KN|Zaux?czx%1-{17Z z#5h92A;n)+ntsvlRfCHg_mA$6Bf`Ss=>E}S{;4W1bvyM1wf1W+sy0dl*O*E}`$n0cIVV*ll^Fo7QbIl@PbvX^$AKJ`{h^GXD<9Yvw{+QazkC% zo7|_`+_%&YQ0}MN7H#1~a6d_wAa9^^DYL)%E^whOt?%RRbr=1gK^DDi7FbX3GVd|q ze<%H#I(WLWJeevDtB9zNrca`eUn$|%((O0($JWSpaPF0+oSFh<8q6UY^NqV)_fGi7+yBLL}9PmGVpV_~fTMl(-`J@MO5Lyngw^~=f9oP^WZEKwG>+Cd`{r^>$f^aVr_2JpS;egGt=ylYC*9=n zHAg@-t2C@$q=|c_jc6eK--rmv;Uy|5V`xqNriCWzJe>HLY2*X{&sWpx#Hr+}bTD&&m z9VCI*Zaors?M6MoOT7-JI=rrKhu87S-A>96kxvM(Lu`cbdOHyTUQeWw0bW$0%_AhzsJPaa@%QiTrHlvLmoeQhqknQ435)Yz zdS&cy%cx3IhP?w^K7TOguoqd&$*`7re|y?*liarJ_H2CJ>Be4eJ^a0m)2)a8*5~PP z8zB78W9=vR;OvS@(2zgsCiB&wp$7M1;BJlf)41u<+r!)xX`m@uFNqYm!k1HgU3Jk8 zXl2@(_cl&^TH5gOxfOM#x^kGjyK~d`r4=t?@KMOk(;3fb+1+HuJtunFsm;tI=)ZuV zHd1%RH(fzIr;8f+jm2kP3HrH>*s~al14Mr26)>hg+Qe@xez66Tia*8Y4XYMw!#?Wr zn%*j&?cLG(m3g2x+x_`28@R;&`G2?9P8mzRGS;OlL-YK9v*&2n+1`HCRn>mqBYaoo zmtihgl|P+r$d2WQv{iI%t6=^#jdX^&{n55IyOEj*zxo}*=eY2k@*WOelo~U=biNoX zM2voVkt#2g+lk8ULQ(~NP)a3)`$~)Zmx?t$G!x6G@#Qtki4~r!^_z<4|8bwupWXdm zH_K!BX~#uPfSXwKb@O|X5y#mHH4~u^IZ3&dE^z*ShO>^bj(>8UpT=u&x!Xdlqi}g1 z`YT*4`{~Y^wSzNQ*t582dmdcXn~h?oTIr*g2WK4HllyY3ny=0U+Po-%AE~_46{b+j zBx|mCI@M{5w2Z8{pG@;yraKFxoof2=UOQ0fPO!i`>5dKn2k4H|0+IX<5G|Fvl?h(A zAJ9L)(EnKa;4N>5-=}E_61_5dt5F$Bk)J%x9T5kF4vk|6zWnM z?{Pb$Z&70>!zDKGxw8Al!p`NFIGP%V%Pz>Iwnc4wlzK`V@jeP6w)#$%LMmozEJ%w3 zS!6-5Id>qQ%jeLn`ZqE{My|CI(rYw17B3t_!#OUdW3>$Dpx%;goks?po-VN(h2;AG z;&*=i7v9(}qkMcczp%27HCM;EmxmfO)HUT!t(#~{9f`~iN>)>PBsJv|3)131YAi^L z`PVVK*%$r|83j%0VwvJ3Y7E%(L zl3lAOOZ+_AqB&JM>n>T?N@oR_c0lE~p*$WWx{9VfnNMl|b4OLpH zC}s}7fu!C%d*^nlZbjk)ZIJ2v2{=Tvk|z=I9wEpI8}AStkop#?jAq4r3N8Y1qKS`K zde}zXI1Q`zhmR#)KpOMfDC?xLs1f%K^`?A|R>ki6xvcB8qtcjBahRBa zy{g!lTi}1_(BVkF=<{*s)oy5&Duj;<=3Jz9mCCg8{>SJr!N}3bkqzs&h zuWT}}*(E)$fQZ(V`m7b>nu*z9V_Ivs*qA2su#J&2>_HpTQrqCg+-_sEOdDJcFq)JgxUXeS4NvF?{W0S5DQBF^O3AJ_FRKaBg=g!KAdI`~5`?i6!q~C;LNzy2%|%^X zRgrMdS8Tqq((g`?&>!5;ADtm`M;HzaPhhEpaXk1mzrV~923HvteMGV=XNxk7_GZl| zxXE33(?^yv&@PHHs;PK7%8>H$pC7AJ5UjFHHEy~f201INH?JS4k1b{EX%7k~*C8XI zN9_&M|4LTSRJ(;}>7O3fyk$x4K^xOr+hAjix!uNyGM3nwmfBV?X10wHWz4jd*t|Md z!}kqa$Yz3%MR^iX#?Ngs3LWtSd^bCiNaB^@GYHur()?;(Zg-5z*l z2NVkdubi$*SYG)A!2z;csIqwFbKo)H3w3c2xb}Z3;cZSpQ%1@zT zd*-Yne1@|TsohoRI4MBb|A3xd`yCjANJAog1|}PvnO}`?yz(EGSN6MBjg;etgR?kw z=Ij>CtBeyJB^1|$?$UA1^2;3d-}*=yY}dG0g-bsi`YV-}`Tcbo>IbjCnmY#lHISwR{k0qlasBlT2XEA0 z#YC&WK9o2w*}^m^rf8evL?gj?lv#6=`3boPgX3hIsn=h>rayxIy5D|y{dFfFv3M7n zxyLzbpZY7ky+KZW&{4MX7txH`J_JgFJQY!l4QSlqw)ltE2C}m}tagY8a6o&20m0Vu zZtV;nq73t$OG8VD?&PNx+r6|j7C(w8PirDe%JzIW*~g2UUvXDG{D zesQSXoyb$|{tYdT#m^w>e{Z*&Ed%}iGKxsn-}i)rBZ&xVK7o1!8@;7qGFY+|^AU@`dJ%0&sO0^92uT(J zu4)o(@pQ+{@X-KQS`mbnxOKL~R?`fYV(~f3KTvO`$JOE&QgM}`7M%;S+vDm?E76OI zPJPefYTQ`kWRzTwMrg2v=|02;u4kA_813r5*vU&ZGJPuKL)v{9@?darHr> zEgr5ma=B@ME6pn*Ts7GeIlBgyV)3EMe=oRt{KZsUO%PdhQH$EqRcF>Oj;=0{557&N z-zyeZKVQaAGF`nu3mvX<01e^laT_6AeerGxSJl)bz|}!iKfqOnZOiu~X>gTrO?MX2 zb|W5hPixa~mET6ZHw$c+v+AG+g}8RG5u zpZRi#m!sz=W?Bsbg7XRYGEweqm(`zO0$>f}S5lUz{$U?_3n^8-$9Um?&U}E2SZ&5jsAit0ok?e?+}xEoH|k*f2=?c@hxO*a4mzLmX7n$sTctPn zfck#V+ha)d#iRKteR0QAwl7vvg!;nkfaQRt>j3H79xcD%J#6=|t{>=RuOF(l3pU>N zo6l<#E4oCV96H#)+ML~z%&h^U+;BlZ{v_zqnahnwQ2uc!x~lTabty->Q0*V|hkN`${-Z0Dnz8O!a40NM%+0c3B1C|uahL)SRwY2d4V66|v*C*di z9bcZg;H`i53Fq^nrJ3c&OA}mguBPRT9(KvPvA^n^Vbz;^@dY9G`N1GtLShZF-rzYF z{}p9uZn8|yzqec*T-z4$wB_6ol=I8O66O3mwVYTe^C|Al}2u(HRggG?he63lUQkhXB_4o0s1 z@U}Dd=OY%sm6X<)J@p=FH{QZ`BIPkY^?*QwFqlv1i1H5~By)!5uO2D*w#-6W(n@OZTG)V2Vs@4tIV>Y$4 zs)=o~Vzb7kmR9v0{B1R|%ivIy>9hnrGME9lcd>XehmkUzQ|If z_K}3hSm!*m{FK2HEvf_R?Z1M6e#?qBIL|CM+lUQBY*Ylb-oYsFYh6d~rsRSUeRZQy z?1CLh{n4VyJEF7Ret6pWNBQ9XV^W4R9bE%HD(akSzWXBQ<>&xf?Y6DI`xjbRZyp{m z#?a2oQFxs8C5_oUAnawQjMB}w=?34+&Y8S3n8eEqVV*Dlp3LRp=)C(a-w8Y%y>ulJ z*qLzu01H$K4(|U=^>8#2tU50{Kf%#hBR1}yhof_BguLu5P(;pH*%oT^Wd?l~zL24S zN(O#+7ScW1O0hjS*M78`5`JUx56-0>VV_4@Tljsau@dsT8&Z)9(k4Jr84- zdCmd)r*HW=jn~<&aOt^sk_ilkSFM&uq>2Sk5iTpS$IQ#pY^=C`zT$+UQq<6 zUzCf3;p-Wg-YurBZ}~M8NjUSWK9F;5HMz)Q>RZ4DJ=bZ63w)%%I_-?J>9l6rQ#k;i z7=NT}IhU;7PD<|j(See-id|)`HlyZcnG4(cFJ6Z|c3H1?)c@5^Zu*Lzk4CD`dj3lD z!>bsXk-BIOS(+yZUlv)9CCmyl0{lcHEAanl4sF!yJynsF^^sNZ-Q~bWu{Zx%!ON>6 z57$T5Fn@C1Wi9s_=Vnu-x;=GG?o}(cEW4jk(MIdV<#-e8l2eAgl37kv5AU{(M^2`XV2? zEx>ZCkkvUP{Q6NP&;NsEFp@-WB*T>QKl{d&zamZfw|V8CZp&YH zX8ZEBt_|A(?xE~2+LwL3S9Z?M_HF;hEBgsr9gFu*Q?_gnll@jDO80#?&2zq+vT$s& zghF=f*yKVad-HlfhO2Zb4JSYYKUpqa%Dia)yxsb4k~Sgf&JDL0@Ar1E_k3*o6XpJz zD358xV$6Cbdiq202hEHF0X1XQ!6(_7aTl65&aQE(&}d>Hli#An(oV5v#y_w~325Xr z;1CHb5ii7S&3&RF9L}pdt~4hWBg1^t`6k$m`uPwuTwT)}k+E%dW?3r+}Zp|9v!S6Gust#;uz_6Zq3Oabbnbog*_YvGe(8`YbW8`eSNu z^Ka$H2b6cdq&%y!tEULpBq~L?ub1|$WM8DE!8XZ5tUS=J;6VtsV7E$Q=4411dNwca zl6dK_b3$v%SII&1**i2f7N2k$4Mvlw-4Z7Q2RtU{L)#0w?h$5UIpQ~PMBb^I->zid zlIrm(!CO-Dp6>F#DwOw+p_=5pMZXEYn9OAoIs5zu`igS=iN#;uT{b5tyBl|&o1@!- zE2&8z1vs>8r~T#*+=EXkWY}ot;x)*y&bt)yr{`U20r{9SSjsf^C%sc7+_{uWTU~

MQX=ERS`VWD78uFeXeoO$&NYFtsv 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

Nj_l&JR3Q}s?YlvlU;g)8xSbV+t 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 literal 0 HcmV?d00001 diff --git a/official/1.104/bin/RAD Studio 2009.log b/official/1.104/bin/RAD Studio 2009.log new file mode 100644 index 0000000..86f9fb3 --- /dev/null +++ b/official/1.104/bin/RAD Studio 2009.log @@ -0,0 +1,77 @@ +================================================================================ +JCL 1.104 Release Build 3248 +==========RAD Studio 2009======================================================= +Installed personalities : +32 bit Delphi +================================================================================ +Single profile installation +================================================================================ +Saving conditional defines... +Loaded template for include file C:\jcl\source\include\jcl.template.inc +Saved include file C:\jcl\source\include\jcld12.inc +Making common library units for RAD Studio 2009 +Compiling .dcu files... +"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" bzip2 Jcl8087 JclAbstractContainers JclAlgorithms JclAnsiStrings JclArrayLists JclArraySets JclBase JclBinaryTrees JclBorlandTools JclComplex JclCompression JclContainerIntf JclCounter JclDateTime JclEDI JclEDISEF JclEDITranslators JclEDIXML JclEDI_ANSIX12 JclEDI_ANSIX12_Ext JclEDI_UNEDIFACT JclEDI_UNEDIFACT_Ext JclExprEval JclFileUtils JclHashMaps JclHashSets JclIniFiles JclLinkedLists JclLogic JclMath JclMIDI JclMime JclPCRE JclQueues JclResources JclRTTI JclSchedule JclSimpleXml JclSortedMaps JclStacks JclStatistics JclStreams JclStrHashMap JclStringConversions JclStringLists JclStrings JclSynch JclSysInfo JclSysUtils JclTrees JclUnicode JclUnitConv JclUnitVersioning JclUnitVersioningProviders JclValidation JclVectors JclWideStrings pcre zlibh --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C- -$D- -$I- -$L- -$O+ -$Q- -$R- -$W- -$Y- -N"..\..\lib\d12" -I"..\include" -U".;..\windows;..\vcl;..\visclx" -R".;..\windows;..\vcl;..\visclx" +CodeGear Delphi for Win32 compiler version 20.0 +Copyright (c) 1983,2008 CodeGear +539425 lines, 4.86 seconds, 50250 bytes code, 16736 bytes data. +Making windows library units for RAD Studio 2009 +Compiling .dcu files... +"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" Hardlinks JclAppInst JclCIL JclCLR JclCOM JclConsole JclDebug JclDotNet JclHookExcept JclLANMan JclLocales JclMapi JclMetadata JclMiscel JclMsdosSys JclMultimedia JclNTFS JclPeImage JclRegistry JclSecurity JclShell JclStructStorage JclSvcCtrl JclTask JclTD32 JclWideFormat JclWin32 JclWin32Ex JclWinMIDI mscoree_TLB mscorlib_TLB MSHelpServices_TLB MSTask sevenzip Snmp --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C- -$D- -$I- -$L- -$O+ -$Q- -$R- -$W- -$Y- -N"..\..\lib\d12" -I"..\include" -U"..\common;.;..\vcl;..\visclx" -R"..\common;.;..\vcl;..\visclx" +CodeGear Delphi for Win32 compiler version 20.0 +Copyright (c) 1983,2008 CodeGear +189148 lines, 1.88 seconds, 2448 bytes code, 164 bytes data. +Making vcl library units for RAD Studio 2009 +Compiling .dcu files... +"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" JclFont JclGraphics JclGraphUtils JclPrint JclVersionControl JclVersionCtrlCVSImpl JclVersionCtrlSVNImpl --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C- -$D- -$I- -$L- -$O+ -$Q- -$R- -$W- -$Y- -N"..\..\lib\d12" -I"..\include" -U"..\common;..\windows;.;..\visclx" -R"..\common;..\windows;.;..\visclx" +CodeGear Delphi for Win32 compiler version 20.0 +Copyright (c) 1983,2008 CodeGear +25539 lines, 0.69 seconds, 4364 bytes code, 36 bytes data. +Making common library debug units for RAD Studio 2009 +Compiling .dcu files... +"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" bzip2 Jcl8087 JclAbstractContainers JclAlgorithms JclAnsiStrings JclArrayLists JclArraySets JclBase JclBinaryTrees JclBorlandTools JclComplex JclCompression JclContainerIntf JclCounter JclDateTime JclEDI JclEDISEF JclEDITranslators JclEDIXML JclEDI_ANSIX12 JclEDI_ANSIX12_Ext JclEDI_UNEDIFACT JclEDI_UNEDIFACT_Ext JclExprEval JclFileUtils JclHashMaps JclHashSets JclIniFiles JclLinkedLists JclLogic JclMath JclMIDI JclMime JclPCRE JclQueues JclResources JclRTTI JclSchedule JclSimpleXml JclSortedMaps JclStacks JclStatistics JclStreams JclStrHashMap JclStringConversions JclStringLists JclStrings JclSynch JclSysInfo JclSysUtils JclTrees JclUnicode JclUnitConv JclUnitVersioning JclUnitVersioningProviders JclValidation JclVectors JclWideStrings pcre zlibh --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C+ -$D+ -$I+ -$L+ -$O- -$Q+ -$R+ -$W+ -$Y+ -N"..\..\lib\d12\debug" -I"..\include" -U".;..\windows;..\vcl;..\visclx" -R".;..\windows;..\vcl;..\visclx" +CodeGear Delphi for Win32 compiler version 20.0 +Copyright (c) 1983,2008 CodeGear +540180 lines, 5.01 seconds, 50418 bytes code, 16736 bytes data. +Making windows library debug units for RAD Studio 2009 +Compiling .dcu files... +"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" Hardlinks JclAppInst JclCIL JclCLR JclCOM JclConsole JclDebug JclDotNet JclHookExcept JclLANMan JclLocales JclMapi JclMetadata JclMiscel JclMsdosSys JclMultimedia JclNTFS JclPeImage JclRegistry JclSecurity JclShell JclStructStorage JclSvcCtrl JclTask JclTD32 JclWideFormat JclWin32 JclWin32Ex JclWinMIDI mscoree_TLB mscorlib_TLB MSHelpServices_TLB MSTask sevenzip Snmp --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C+ -$D+ -$I+ -$L+ -$O- -$Q+ -$R+ -$W+ -$Y+ -N"..\..\lib\d12\debug" -I"..\include" -U"..\common;.;..\vcl;..\visclx" -R"..\common;.;..\vcl;..\visclx" +CodeGear Delphi for Win32 compiler version 20.0 +Copyright (c) 1983,2008 CodeGear +189148 lines, 2.06 seconds, 2585 bytes code, 164 bytes data. +Making vcl library debug units for RAD Studio 2009 +Compiling .dcu files... +"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" JclFont JclGraphics JclGraphUtils JclPrint JclVersionControl JclVersionCtrlCVSImpl JclVersionCtrlSVNImpl --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C+ -$D+ -$I+ -$L+ -$O- -$Q+ -$R+ -$W+ -$Y+ -N"..\..\lib\d12\debug" -I"..\include" -U"..\common;..\windows;.;..\visclx" -R"..\common;..\windows;.;..\visclx" +CodeGear Delphi for Win32 compiler version 20.0 +Copyright (c) 1983,2008 CodeGear +25539 lines, 0.61 seconds, 4650 bytes code, 36 bytes data. +Compiling package C:\jcl\packages\d12\Jcl.dpk... +Cleaning package cache for Jcl120.bpl +Cleaning ok +Compiling package C:\jcl\packages\d12\Jcl.dpk +"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" "C:\jcl\packages\d12\Jcl.dpk" --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -N"..\..\lib\d12" -I"..\..\lib\d12;..\..\source\include" -R"..\..\lib\d12;..\..\source\include" -DRELEASE;$(DCC_Define) -U"..\..\lib\d12;..\..\..\DOCUME~1\ALLUSE~1\DOCUME~1\RADSTU~1\6.0\dcp;..\..\lib\d12;..\..\source\include" -LN"..\..\lib\d12" -LE"..\..\lib\d12" +CodeGear Delphi for Win32 compiler version 20.0 +Copyright (c) 1983,2008 CodeGear +128 lines, 0.67 seconds, 1358076 bytes code, 675596 bytes data. +Compilation success +...done. +Compiling package C:\jcl\packages\d12\JclContainers.dpk... +Cleaning package cache for JclContainers120.bpl +Cleaning ok +Compiling package C:\jcl\packages\d12\JclContainers.dpk +"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" "C:\jcl\packages\d12\JclContainers.dpk" --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -N"..\..\lib\d12" -I"..\..\lib\d12;..\..\source\include" -R"..\..\lib\d12;..\..\source\include" -DRELEASE;$(DCC_Define) -U"..\..\lib\d12;..\..\..\DOCUME~1\ALLUSE~1\DOCUME~1\RADSTU~1\6.0\dcp;..\..\lib\d12;..\..\source\include" -LN"..\..\lib\d12" -LE"..\..\lib\d12" +CodeGear Delphi for Win32 compiler version 20.0 +Copyright (c) 1983,2008 CodeGear +62 lines, 0.78 seconds, 1460836 bytes code, 816 bytes data. +Compilation success +...done. +Compiling package C:\jcl\packages\d12\JclVcl.dpk... +Cleaning package cache for JclVcl120.bpl +Cleaning ok +Compiling package C:\jcl\packages\d12\JclVcl.dpk +"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" "C:\jcl\packages\d12\JclVcl.dpk" --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -N"..\..\lib\d12" -I"..\..\lib\d12;..\..\source\include" -R"..\..\lib\d12;..\..\source\include" -DRELEASE;$(DCC_Define) -U"..\..\lib\d12;..\..\..\DOCUME~1\ALLUSE~1\DOCUME~1\RADSTU~1\6.0\dcp;..\..\lib\d12;..\..\source\include" -LN"..\..\lib\d12" -LE"..\..\lib\d12" +CodeGear Delphi for Win32 compiler version 20.0 +Copyright (c) 1983,2008 CodeGear +57 lines, 0.25 seconds, 90620 bytes code, 1612 bytes data. +Compilation success +...done. diff --git a/official/1.104/bin/dirinfo.txt b/official/1.104/bin/dirinfo.txt new file mode 100644 index 0000000..38bc9b2 --- /dev/null +++ b/official/1.104/bin/dirinfo.txt @@ -0,0 +1 @@ +This directory is intended as a common place for sample application's EXE files \ No newline at end of file diff --git a/official/1.104/clean.bat b/official/1.104/clean.bat new file mode 100644 index 0000000..b9af953 --- /dev/null +++ b/official/1.104/clean.bat @@ -0,0 +1,16 @@ +@echo cleaning... +@REM do not delete precompiled installer +@for %%f in (bin\*.exe) do @if not %%f==bin\JediInstaller.exe if not %%f==bin\QJediInstaller.exe (del %%f) +@del /f /s *.~* *.bk bin\*.dll *.a *.bpi *.dcp *.dcu *.dpu *.hpp *.jdbg *.map *.o +@cd lib +@del /f /s *.obj *.res *.lib *.bpi +@cd .. +@cd examples +@del /f /s *.cfg +@cd .. +@cd experts +@del /f /s *.cfg +@cd .. +@cd packages +@del /f /s *.cfg *.local *.identcache *.rsp +@cd.. \ No newline at end of file diff --git a/official/1.104/clean.sh b/official/1.104/clean.sh new file mode 100644 index 0000000..a74b87f --- /dev/null +++ b/official/1.104/clean.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +rm -f `find -name \*~` +rm -f `find -name *.~*` +rm -f `find -name *.a` +rm -f `find -name *.bpi` +rm -f `find -name *.dcp` +rm -f `find -name *.dcu` +rm -f `find -name *.dpu` +rm -f `find -name *.hpp` +rm -f `find -name *.o` +rm -f packages/k?/*.mak \ No newline at end of file diff --git a/official/1.104/devtools/included_files.bat b/official/1.104/devtools/included_files.bat new file mode 100644 index 0000000..bda4a9c --- /dev/null +++ b/official/1.104/devtools/included_files.bat @@ -0,0 +1,19 @@ +rem shell script to create templates + +copy ..\source\include\jcl.template.inc ..\source\include\jclc5.inc +copy ..\source\include\jcl.template.inc ..\source\include\jclc6.inc +copy ..\source\include\jcl.template.inc ..\source\include\jclkc3.inc +copy ..\source\include\jcl.template.inc ..\source\include\jclkd3.inc +copy ..\source\include\jcl.template.inc ..\source\include\jcld5.inc +copy ..\source\include\jcl.template.inc ..\source\include\jcld6.inc +copy ..\source\include\jcl.template.inc ..\source\include\jcld7.inc +copy ..\source\include\jcl.template.inc ..\source\include\jclcs1.inc +copy ..\source\include\jcl.template.inc ..\source\include\jcld8.inc +copy ..\source\include\jcl.template.inc ..\source\include\jcld9.inc +copy ..\source\include\jcl.template.inc ..\source\include\jcld9.net.inc +copy ..\source\include\jcl.template.inc ..\source\include\jcld10.inc +copy ..\source\include\jcl.template.inc ..\source\include\jcld10.net.inc +copy ..\source\include\jcl.template.inc ..\source\include\jcld11.inc +copy ..\source\include\jcl.template.inc ..\source\include\jcld11.net.inc +copy ..\source\include\jcl.template.inc ..\source\include\jcld12.inc + diff --git a/official/1.104/devtools/included_files.sh b/official/1.104/devtools/included_files.sh new file mode 100644 index 0000000..912953e --- /dev/null +++ b/official/1.104/devtools/included_files.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# +# shell script to create templates + +cp ../source/include/jcl.template.inc ../source/include/jclc5.inc +cp ../source/include/jcl.template.inc ../source/include/jclc6.inc +cp ../source/include/jcl.template.inc ../source/include/jclkc3.inc +cp ../source/include/jcl.template.inc ../source/include/jclkd3.inc +cp ../source/include/jcl.template.inc ../source/include/jcld5.inc +cp ../source/include/jcl.template.inc ../source/include/jcld6.inc +cp ../source/include/jcl.template.inc ../source/include/jcld7.inc +cp ../source/include/jcl.template.inc ../source/include/jclcs1.inc +cp ../source/include/jcl.template.inc ../source/include/jcld8.inc +cp ../source/include/jcl.template.inc ../source/include/jcld9.inc +cp ../source/include/jcl.template.inc ../source/include/jcld9.net.inc +cp ../source/include/jcl.template.inc ../source/include/jcld10.inc +cp ../source/include/jcl.template.inc ../source/include/jcld10.net.inc +cp ../source/include/jcl.template.inc ../source/include/jcld11.inc +cp ../source/include/jcl.template.inc ../source/include/jcld11.net.inc +cp ../source/include/jcl.template.inc ../source/include/jcld12.inc + diff --git a/official/1.104/devtools/jpp b/official/1.104/devtools/jpp new file mode 100644 index 0000000000000000000000000000000000000000..b03f3d55c9957fae0091b299765a040bd5772086 GIT binary patch literal 248908 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 literal 0 HcmV?d00001 diff --git a/official/1.104/devtools/jpp.exe b/official/1.104/devtools/jpp.exe new file mode 100644 index 0000000000000000000000000000000000000000..8af9cf0b4d237cdb50d8923897a704a84fdb01ae GIT binary patch literal 205312 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%0AZk@DkY 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%0D0Q{lw6I!3n%q0>?Q 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

1`E38Sk0OQ0&lP+L~)s`f91$*ZcEkrjdR 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 S9 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 qxa1rIR;%fN+h|j8*g(|`< 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


LAoUb>2)w|SCByh8Q>KDx1$jRm! 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

BVEhYAEoC5zj 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 T)nv1m{OFjg?Hy@gV*o$^nYT@?APCI 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 literal 0 HcmV?d00001 diff --git a/official/1.104/devtools/pgEdit.xml b/official/1.104/devtools/pgEdit.xml new file mode 100644 index 0000000..0614b73 --- /dev/null +++ b/official/1.104/devtools/pgEdit.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/official/1.104/docs/Contacting authors.html b/official/1.104/docs/Contacting authors.html new file mode 100644 index 0000000..ca21885 --- /dev/null +++ b/official/1.104/docs/Contacting authors.html @@ -0,0 +1,33 @@ + + + +Contacting authors + +

Contacting authors

+

+The JEDI Code Library is built upon donations by various individuals. In the +documentation for each subroutine or class you will find who the author of that +particular code is by looking in the "Quick Info" section. The author's e-mail +is not listed there. It is listed in the contributors page elsewhere in this +document. Therefore if you really need to contact an author it is possible. However, +generically speaking, you should never contact an author regarding code included +in this library. There are various reasons for this with the two most prominent +being that some authors explicitly requested this and because "author" means +different things in different context. Usually "author" means that the described +code was donated to the JCL by that individual and included after reformatting and +only minor modifications. However, sometimes code was significantly altered, +rewritten several times or 'merely' based upon or inspired by code from that +individual. Consequently there exist several routines which in no way resemble +the original code as it was donated by the "author". Nevertheless, the individual +that orginally donated the code is still documented as the author. +

+In general, if you like some routine very much and it has proven to work correctly: +be grateful to the author (in thought, not by sending him or her an e-mail). On +the other hand, if some routine turns out to be buggy, incorrect or for whatever +reason is not to your liking: complain to me. It was most likely we who screwed +it up and introduced those bugs into code that was working perfectly until we got +our hands on it! To report bugs, use Project JEDI's +Issue Tracker. + +

+ \ No newline at end of file diff --git a/official/1.104/docs/Contributors.html b/official/1.104/docs/Contributors.html new file mode 100644 index 0000000..4e52f9d --- /dev/null +++ b/official/1.104/docs/Contributors.html @@ -0,0 +1,398 @@ + + + + + + + + JCL Contributors (code donators) + + + + +

Contributors

+ + +

+ Following is a list of all people that donated, or gave permission to use their, + code in the JEDI Code Library. Be sure that you read the Contacting Authors page + in the JCL helpfile before contacting these people. Note that JCL is continously + in development and by far not all donations have been processed yet. We're not + even half way! Therefore it is very well possible that you donated code but it's + not in the JCL yet. However, if you're name is not in the list below then it's + likely that something has gone wrong. In that event, please + contact us. +

+ + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aaAlan LloydAlex DenissovAlex Konshin
Alexander RadchenkoAlexei KoudinovAllan LyonsAnders Melander
Andr SnepvangersAndreas HausladenAndreas JakobscheAngus Johnson
Anthony SteeleAzret BotashBarry KellyBender Heri
Bernhard BergerBryan CoutchCarl ClarkCenon Del Rosario
Charlie CalvertChris MorrisChristoph LindemanClayton Collie
Corrie EngelbrechtCybertron_549672Daniel MllerDavid Butler
David HervieuxDeian IvanovDewald HessDick Maley (Advanced Delphi Systems)
Dylan ThomasEarl F. GlynnEric S. FisherErnesto Benestante
ESB ConsultancyFelipe de Toledo FariasFlier LuFlorent Ouchet
Hallvard VassbotnHeinz ZastrauHelen BorrieHeri Bender
Huanlin TsaiIvo BauerJack BombeeckJack N.A. Bakker
James AzarjaJean DebordJean-Fabien ConnaultJean-Philippe BEMPEL
Jeroen SpeldekampJohannes BergJohn C MolyneuxJud McCranie
Julien FerraroKevin S. GallagherLasse Vgsther KarlsenLeonard Wennekers
Liran ShaharLloyd KinsellaLucjan LukasikM.H. Avegaart
Malcolm EdgarManlio LaschenaMarc ConventsMarcel Bestebroer
Marcel van BrakelMarcin WieczorekMarco KlemmMario R. Carro
Marius le RouxMark VaughanMartin KimmingsMartin Kubecka
Massimo Maria GhisalbertiMatt HamiltonMatthias ThomaMichael Rynn
Michael SchnellMichael TsaiMichael WinterMike Lischke
Nick HodgesNils HaeckOliver SchneiderOlivier Sannier
Patrick van LaakePavel CisarPelle LiljendalPeter Friese
Peter McMahonPeter PaninoPeter ThrnquistPetr Vones
PythonRalf JunkerRaymond AlexanderRik Barker
Robert LeeRobert MarquardtRobert R. MarshRobert Rossmair
Rudy VelthuisScott PriceSouthEasterStefan Kirschner
Stephane FillonSterling ButtsTheo BebekisTim Yates
Tom HahnUwe SchusterWim De CleenYaniv Golan
Your name here?
+ +

+ + +

+

+ + + +

+ + \ No newline at end of file diff --git a/official/1.104/docs/Contributors.txt b/official/1.104/docs/Contributors.txt new file mode 100644 index 0000000..fcb7bf7 --- /dev/null +++ b/official/1.104/docs/Contributors.txt @@ -0,0 +1,116 @@ +aa=aa@bitsmart.com +Alan Lloyd=alanglloyd@aol.com +Alex Denissov=denisso@uwindsor.ca +Alex Konshin=alexk@mtgroup.ru +Alexander Radchenko=ravnvt@chat.ru +Alexei Koudinov= +Allan Lyons= +Anders Melander= +Andr Snepvangers=asnepvangers@users.sourceforge.net +Andreas Hausladen=ahuser@users.sourceforge.net +Andreas Jakobsche=Jakobsche@addcom.de +Angus Johnson=ajohnson@rpi.net.au +Anthony Steele=asteele@iafrica.com +Azret Botash=azret@attglobal.net +Barry Kelly=barry.j.kelly@gmail.com +Bender Heri=HBender@Ergonomics.ch +Bernhard Berger=bernhardberger@yahoo.de +Bryan Coutch=oracle@bmts.com +Carl Clark=carl@caztec.co.za +Cenon Del Rosario=cenon@mail.com +Charlie Calvert=ccalvert@inprise.com +Chris Morris= +Christoph Lindeman=christoph@lindemann.nu +Clayton Collie= +Corrie Engelbrecht=sahfs@iafrica.com +Cybertron_549672=Cybertron_549672@yahoo.com +Daniel Mller=dj@sguft.com +David Butler=david@e.co.za +David Hervieux=dhervieux@Pirel.com +Deian Ivanov=deian@datecs.bg +Dewald Hess=dewaldh@emsoft.co.za +Dick Maley (Advanced Delphi Systems)=rmaley@fenix2.dol-esa.gov +Dylan Thomas=dylan@intelnet.net.gt +Earl F. Glynn=EarlGlynn@att.net +Eric S. Fisher= +Ernesto Benestante= +ESB Consultancy= +Felipe de Toledo Farias=ftfarias@dialdata.com.br +Flier Lu=flier@users.sourceforge.net +Florent Ouchet=ouchet.florent@laposte.net +Hallvard Vassbotn=hallvard.vassbotn@c2i.net +Heinz Zastrau=heinzz@users.sourceforge.net +Helen Borrie=helebor@wr.com.au +Heri Bender= +Huanlin Tsai= +Ivo Bauer=bauer@ozm.cz +Jack Bombeeck=Jack.Bombeeck@Onstream.com +Jack N.A. Bakker=jackb@europdonor.nl +James Azarja=support@jazarsoft.cjb.net +Jean Debord= +Jean-Fabien Connault=cycocrew@orange.fr +Jean-Philippe BEMPEL=rdm_30@users.sourceforge.net +Jeroen Speldekamp= +Johannes Berg=johannes.berg@gmx.net +John C Molyneux=jaymol@hotmail.com +Jud McCranie=jud.mccranie@mindspring.com +Julien Ferraro=j.ferraro@netcourrier.com +Kevin S. Gallagher=gallaghe@teleport.com +Lasse Vgsther Karlsen=lasse@cintra.no +Leonard Wennekers= +Liran Shahar=liran_shahar@hotmail.com +Lloyd Kinsella=lloydk@iname.com +Lucjan Lukasik=lucjanl@usa.net +M.H. Avegaart=mavegaart@csstelecom.nl +Malcolm Edgar=edgar@ccis.adisys.com.au +Manlio Laschena=manlio@users.sourceforge.net +Marc Convents= +Marcel Bestebroer=marcelb@zeelandnet.nl +Marcel van Brakel=brakelm@bart.nl +Marcin Wieczorek=wieczor@polbox.com +Marco Klemm=DonLuigi@gmx.net +Mario R. Carro=ochnap2@yahoo.com.ar +Marius le Roux=marius@caddie.co.za +Mark Vaughan= +Martin Kimmings= +Martin Kubecka= +Massimo Maria Ghisalberti=nissl@dada.it +Matt Hamilton=MHamilton@bunge.com.au +Matthias Thoma=mthoma@users.sourceforge.net +Michael Rynn=michrynn@ozemail.com.au +Michael Schnell=mschnell@bschnell.de +Michael Tsai=easyman@ms2.seeder.net +Michael Winter= +Mike Lischke=public@lischke-online.de +Nick Hodges=nhodges@icss.net +Nils Haeck=n.haeck@simdesign.nl +Oliver Schneider=assarbad@users.sourceforge.net +Olivier Sannier=obones@users.sourceforge.net +Patrick van Laake=patrick.vanlaake@ieee.org +Pavel Cisar=pcisar@atlas.cz +Pelle F. S. Liljendal=pelle.liljendal@firstconcern.com +Peter Friese=freter@gmx.net +Peter McMahon=fmcmp02@kc.kzn.school.za +Peter Panino=peter-panino@aon.at +Peter Thrnquist=peter3@users.sourceforge.net +Petr Vones=pvones@users.sourceforge.net +Python= +Ralf Junker=ralfjunker@gmx.de +Raymond Alexander=rayspostbox3@users.sourceforge.net +Rik Barker=rikbarker@users.sourceforge.net +Robert Lee=rhlee@nwu.edu +Robert Marquardt=marquardt@users.sourceforge.net +Robert R. Marsh=robmarsh@koit.fanz.net +Robert Rossmair=Robert.Rossmair@users.sourceforge.net +Rudy Velthuis=rvelthuis@gmx.de +Scott Price=scottprice@users.sourceforge.net +SouthEaster=anthony@southeaster.com +Stefan Kirschner=stefan_kirschner@01019freenet.de +Stephane Fillon=sfillon@ifrance.com +Sterling Butts=SterlingButts@Bigfoot.com +Theo Bebekis=bebekis@otenet.gr +Tim Yates=tim@things.demon.co.uk +Tom Hahn=tomhahn@users.sourceforge.net +Uwe Schuster=uschuster@users.sourceforge.net +Wim De Cleen=jones-jr@skynet.be +Yaniv Golan=ygolan@netvision.net.il diff --git a/official/1.104/docs/Experts.html b/official/1.104/docs/Experts.html new file mode 100644 index 0000000..98d5c52 --- /dev/null +++ b/official/1.104/docs/Experts.html @@ -0,0 +1,160 @@ + + + + JEDI Code Library Release 1.103 + + + + + + +

+

JEDI Code Library

+

Release 1.104
+Build 3248
+21-January-2009

+

+

Content of this file

+ +

+

About experts

+

For Delphi 5, Delphi 6, Delphi 7, C++Builder 5 and C++Builder 6, experts can +be installed as design time packages or dll experts. For C#Builder 1 and Delphi 8, +experts are installed as dll experts (those products don't load design time +packages). For Delphi 2005, Borland Developer Studio 2006 and Turbo Delphi Professional, +experts are installed as design time packages.

+

Debug Extension for JclDebug unit

+

The experts\debug folder contains an IDE expert which +assists to insert JCL Debug information into executable files. This can be +useful when use source location routines from JclDebug unit. These routines +need some kind of special information to be able provide source location for +given address in the process. Currently there are four options to get it work:

+
    +
  1. Generate and deploy MAP file with your executable file. The file +is generated by the linker. It needs to be set in Project|Options +dialog -> Linker page, Detailed checkbox.
  2. +
  3. Generate and deploy JDBG file file with your executable file. +This is binary file based on MAP file but its size is typically about +12% of original MAP file. You can generate it by MapToJdbg tool in jcl\examples\windows\tools +folder. The advantage over MAP file is smaller size and better security +of the file content because it is not a plain text file and it also +contains a checksum. The IDE expert can automatically create this file +when the project is compiled (see below).
  4. +
  5. Insert JCL Debug info into executable file. The +size of added data is similar to JDBG file but it will be inserted +directly into the executable file. This is probably best option because +it combines small size of included data and no requirement of deploying +additional files. The IDE expert can automatically insert these informations +when the project is compiled (see below).
  6. +
  7. Generate Borland TD32 debug symbols. These symbols are stored +directly in the executable file but usually adds several megabytes so +the file is very large. The advantage is you don't have to deploy any +other file and it is easy to generate it by checking Include TD32 debug +info in Linker option page.
  8. +
+

+The IDE expert will add new item to IDE Project menu. For +Delphi 5, 6 and 7 it adds 'Insert JCL Debug data' check item at the end +of the Project menu. When the item is checked, everytime the project is +compiled by one of following commands: Compile, Build, Compile All Projects, +Build All Projects or Run necessary JCL debug data are automatically created +from the detailled MAP file. The behavior of this conversion can be customized in +the JCL options dialog (in the Tools menu of the IDE): the debug informations can +be exported as .jdbg files or inserted in the binary file. The expert outputs a +message in the IDE message view to display details about the data being generated.

+

+You can generate those debug data for packages and libraries as well +using the expert. Each executable file in the project can use different option +from those listed above. It is not necessary to generate any debug data for +Borland runtime packages because the source location code can use names of exported +functions to get procedure or method name. To get line number information for +Borland RTL and VCL/CLX units you have to check Use Debug DCUs checkbox in +Project|Options dialog -> Compiler tab. Unfortunately it is not +possible to get line number information for Borland runtime packages +because Borland does not provide detailed MAP files for them so you get +procedure or method name only.

+

In case you have more than one data source for an executable file by +an accident the best one is chosen in following order:

+
    +
  1. JCL Debug data in the executable file
  2. +
  3. JDBG file
  4. +
  5. Borland TD32 symbols
  6. +
  7. MAP file
  8. +
  9. DBG and PDB debug informations (for system DLLs)
  10. +
  11. Library or Borland package export tables
  12. +
+

It is also possible to create JCL debug data programmatically from a MAP file +by using MakeJclDbg command line tool in jcl\examples\windows\delphitools folder. +This utility can either export data as a separate .jdbg file or insert them in the +executable. You can study included makefiles which uses this tool for building +delphitools examples.

+

To help using JclDebug exceptional stack tracking in application +simple dialog is provided in jcl\experts\debug\dialogfolder. The dialog +replaces standard dialog displayed by VCL or CLX application when an unhandled +exception occurs. It has additional Detailed button showing the stack, list of +loaded modules and other system information. By adding the dialog to the +application exceptional stack tracking code is automatically initialized so you +don't have to care about it. You can also turn on logging to text file by setting +the Tag property of the dialog to '1'. There is also version for CLX +(ClxExceptDlg) but it works on Windows only. These dialogs are intended to be added to +Object Repository.

+

Short description of getting the JclDebug functionality in your +project:

+
    +
  1. Close all running instances of Delphi +
  2. +
  3. Install JCL and IDE experts by the JCL Installer +
  4. +
  5. Run Delphi IDE and open your project +
  6. +
  7. Remove any TApplication.OnException handlers from your project(if any). +
  8. +
  9. Add new Exception Dialog by selecting File | New | Other ... | +Delphi Projects | Delphi Files, Select 'JCL Exception Dialog for XXX' (where XXX is +either Delphi or C++Builder depending on your project). A wizard will appear to +configure the options for this dialog. +
  10. +
  11. Check "Project" | "Insert JCL Debug data" menu item +
  12. +
  13. Do Project | Build
  14. +
+

+

Version control expert

+

A new expert integrating version control systems in the IDE was added. +It provides an integration of TortoiseCVS and TortoiseSVN inside the IDE, items +are added in the IDE menu and buttons can be placed in IDE toolbars via the +customize dialog, see below.

+

A dialog-box provides configuration options for JCL experts in the Tools menu.

+

It wraps TortoiseCVS  +and TortoiseSVN commands in +actions that can be placed on IDE toolbars and in IDE menu.

+

This expert requires TortoiseCVS  +or/and TortoiseSVN installed on the +system to properly work. Please refer to these products documentations for help +about using version control systems.

+

The structure of the "Jcl Version" menu can be customized in the JCL options +dialog (in the "Tools" menu).

+

+

XMM debug window

+

This dialog provides enhancement to the debugger of Delphi and C++Builder regarding +XMM registers. These registers were introduced in SSE instructions (and are still +used in SSE2, SSE3 and SSSE3 instructions). This dialog can be displayed by clicking +on menu View | Debug Windows | SIMD (keyboard shortcut Ctrl+Alt+D). +It is divided in to panes following the style of the FPU window: the left pane +displays content of registers and the right pane displays MXCSR flags. The format +of the registers can be modified from the context. All registers and flags can be +modified and changes will be applied to the debugged process.

+

+

Favorite combobox in Open/Save dialogs

+

This expert modifies the IDE Open/Save dialogs and add a combobox to store your +favorite directories. Items can be added and deleted using the button at the right +of the combobox.

+ + + diff --git a/official/1.104/docs/MPL FAQ.html b/official/1.104/docs/MPL FAQ.html new file mode 100644 index 0000000..90cc6c2 --- /dev/null +++ b/official/1.104/docs/MPL FAQ.html @@ -0,0 +1,131 @@ + + + +MPL FAQ + + +

+ Mozilla Public License FAQ
+ Draft 1.0, 4/10/2000 +

+


+Please email Comments to Michael Beck
+For additional information, please also check the Official FAQ from Mozilla + +

Author perspective

+
    +
  1. Q: Do I retain copyright once I publish source under the MPL?
    + A: Absolutely. You still retain all your copyrights. +
  2. Q: Can I release the code under a different (possibly commercial type) license?
    + A: Yes. Since you have the original copyright, you can do it, but you can do + it only for your own code, and not for any contributions from others. +
  3. Q: In two years Acme, Inc. comes with a great new license, which I would love + to use. Am I always bound to MPL for my released code?
    + A: You can use a Dual License approach, i.e. you keep the code under MPL, and + you add another license, e.g. GPL. The user will have then the option to use + the one s/he prefers.
    + Or, as the Initial Contributor, with the original copyright, you can release + it under the other license. Please note: even if you release the code under + new license, users of your original MPL-released code can continue to use + under MPL as before. +
  4. Q: I think, JEDI could benefit from having cryptographic functions. I would + like to donate some (DES, Tripple DES etc.), which are covered by patent + rights (RSA, for example)? How should I do it?
    + A: All contributions are "Subject to third party intellectual property (IP) + claims." Thus, if you are aware of any patents infringements, before + submitting make sure that you: +
      +
    • secure the rights to use the IP in your contribution (e.g. by paying + a fee) +
    • modify the code so it doesn't infringe (in our case, provide other, + non-patented cryptographic functions) +
    • in a worst case scenario, if the two above are not possible, do not + submit the code +
    + Please note: different countries may have different patents laws. Therefore + in some countries it could be legal to use patented IP (e.g. because the + patent expired), while in others not. Check with your local Patent Office. +
+ +

User perspective

+
    +
  1. Q: Can I use the MPL code in commercial software? If yes, am I obligated to + credit the author?
    + A: Yes, you can use the MPL code in any commercial software. Since you have + to include the MPL code, the credit is included in the license header. + While not required, it is also customary to credit the author in "AboutBox". +
  2. Q: Must I release the source code of used components?
    + A: Only of those covered by MPL, together with any modifications to them. +
  3. Q: Must I publish my apps under MPL if I used MPL licensed code (the viral aspect) ?
    + A: No. That's the big advantage over GPL - you can use different code, mix MPL + and commercial code, but you don't have to release either the application, + nor the non-MPL code under MPL. Basically, what is MPL, will stay MPL, + but it doesn't have any impact on the non-MPL code. +
  4. Q: If a bug in MPL licensed code renders my clients machine unbootable, who + can I hold responsible for that?
    + A: Nobody. You use MPL licensed code at your own risk. Since it is provided + to you in a source code form, you can inspect it, test it, making sure that + it does, what you want it to do. +
  5. Q: Must I publish modifications to MPL licensed code?
    + A: Yes. This is one of the MPL requirements. You are getting a free source + code, but you have to publish all modifications to the code, unless you + have done the changes for your internal use. +
  6. Q: Must I publish code based on MPL licensed code under MPL?
    + A: Yes. You cannot change the license terms. Only the Initial Developer can + add an additional license (see dual license) +
  7. Q: If I subclass the MPL code, do I still have to publish the new code? After + all I didn't modify the code at all!
    + A: That's a tricky one. By the letter of the law, since you didn't touch the + original code, you might claim that it is a "new" code, therefore no need + for MPL. However, by the 'spirit of the law', Inheritance (or subclassing) + is a modification of the functionality of a given class, and as such a + "derived work", so even if you didn't touch the original code, you are + still making changes. +
  8. Q: I am proposing a modification to a JEDI-VCL component, which has a dual + license (MPL and GPL). This new file also needs to include a new class. + Should the source files for the new class be put in JEDI-VCL using MPL + with GPL dual-license or can it be put in another location and use only + the MPL?
    + A: The license of a file can't be changed without the consent of the copyright + owner. And a new file derived from an existing file inherits the licensing + from the existing file. In the case of this component, it has to stay MPL/GPL. +
  9. I am considering using an XML parser that has being covered by the MPL v1.1 + (or alternatively the GPL) in a commercial product. I will simply use the + DLL libraries without modification, including the necessary header files + in my own code. When I distribute (sell) my own product I would, of course, + need to distribute the DLL libraries as well. My questions are: +
      +
    1. Q1: Am I correct in assuming that simply including unmodified header + files and linking with a library covered by the MPL does not + place any legal restrictions or obligations on my commercial + product and its source code?
      + A1: It places no obligations on the code YOU wrote, but there are + still obligations for the code you included. These include + source distribution (for included MPL code, not YOUR code), + and some notification requirements. +
    2. Q2: Am I obligated to distribute the (unmodified) source code that + produced the libraries with which I link?
      + A2: Yes. Since you are shipping the DLL libraries with your product, + you have to make source available for the MPL code you ship.
      + Note that the license also allows you to meet the distribution requirement + by making the source available via electronic means rather than having to + physically ship them with your product (as long as you tell your users + where to get it). If you are using unmodified source code you could probably + just point at the code author's server. If you did that you'd have to + specify how users could get the exact version of the source you used, + such as a CVS date stamp or something.
      + This might be tricky -- you are responsible to make sure the source is + available for 12 months after you ship, and there's no way of knowing + how long the author will keep old versions around. The CVS repository + is more of a sure bet. You could, of course, host the source on your + own servers to be sure it'll stick around.
      + +
    3. Q3: Am I obligated to make my use of the particular libraries known + to users of my product?
      + A3: Yes, it's spelled out in the license. You need to credit the + source of copyrighted code that is not yours in both the product + and its documentation. +
    +
+ + diff --git a/official/1.104/docs/MPL-1.1.txt b/official/1.104/docs/MPL-1.1.txt new file mode 100644 index 0000000..7a45bfe --- /dev/null +++ b/official/1.104/docs/MPL-1.1.txt @@ -0,0 +1,470 @@ + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + diff --git a/official/1.104/docs/Readme.html b/official/1.104/docs/Readme.html new file mode 100644 index 0000000..0540ad3 --- /dev/null +++ b/official/1.104/docs/Readme.html @@ -0,0 +1,406 @@ + + + + JEDI Code Library Beta 1.103 + + + + + + + + + + + + +

+ +

JEDI Code Library

+ +

Release 1.104
+Build 3248 +21-January-2009

+ +

+ +

Content of this file

+ + + +

+ +

About this release

+

JCL release 1.104 provides an updated support for all targets (including Delphi 2009 and C++Builder 2009).

+ +

As always, multiple bugs have been fixed; for detailed change logs, +use the facilities of our Subversion repository at Sourceforge.net  +http://sourceforge.net/projects/jcl/ +, see below.

+ +

Head changes: +

+ +
    + +
  • improved Unicode support for Delphi 2009 and C++Builder 2009;
  • +
  • support for late and static binding to ZLib code;
  • +
  • version control actions for CVS and SVN added to JCL runtime;
  • +
  • the polynomial of CRC computations can be customized;
  • +
  • speed improvement of TJclBufferedStream during write operations;
  • +
  • new archive compression format provided with 7-zip: lzma, pe, elf, macho, udf, xar, mub, hfs, dmg; the wrapper has previous support for the compression and the decompression of zip, bzip2, gzip, 7z, tar and for the decompression of rar, iso, chm, deb, cab...
  • +
  • new string conversion functions with failure detection.
  • + +
+ +

Important: +

+ +
    + +
  • +

    Note that the package naming has changed: the same package name is used by +all versions of the compiler supporting suffixes (C++Builder 6, Delphi 6, +Delphi 7, C#Builder 1, Delphi 8, Delphi 2005, BDS 2006, RAD Studio 2007, Delphi 2009 and C++Builder 2009); a different suffix +is added for each target to the BPL file name (for Delphi and C++Builder 2009, the library file is named jcl120.bpl). +The installer tries to remove old packages. 3rd party packages requiring old DJcl* resp. CJcl* packages need to be changed +to accomodate the new naming scheme or they will cause conflicts in the IDE at load time.

    +
  • + +
  • +

    DCP files are now created in the lib\target subdirectory of the JCL +installation. 3rd party packages requiring JCL packages need to have this path +in their "browse path" option to compile.

    +
  • + +
+ +

(Windows only) Installation options:

+ +

Packages compiled by the JCL installer don't contain any debug +informations to keep their size as small as possible.

+ +

The JEDI Code Library packages are required by some 3rd party packages +(including the JEDI Visual Component Library - JVCL), the installer generates +them if the "Packages" node is checked.

+ +

The installer can generate MAP informations for each package. These informations +can be linked into binaries to become JCL debug data or be converted to .jdbg files. +Once linked MAP files could be deleted. These options are subnodes of the "Packages" node.

+ +

For BDS 2006, RAD Studio 2007 and C++Builder 2009, the compiler introduced a new option to make the same packages +available in C++, by checking the "Dual packages" option of the "Packages" node, you will be able +to call functions of the JCL from C++ code.

+ +

.net Framework support:

+ +

A subset of JCL units was worked over to support Delphi.Net (Delphi 2005, BDS 2006 and RAD +Studio 2007). The packages belong to the Jedi.Jcl namespace.

+ +

+ +

Supported Tools

+ +

The JEDI Code Library can be compiled and installed in the following environments

+ +

Only runtime support:

+ + + + +

Only design-time support (only experts):

+ + + +

Both supports (run time and design time):

+ +
    + +
  • Delphi version 5, 6, 7;
  • + +
  • C++Builder version 5 & 6;
  • + +
  • Delphi 2005 (Delphi.net personality);
  • + +
  • Borland Developer Studio 2006 (Delphi for Win32, C++Builder Win32, Delphi.net and C#Builder personalities);
  • + +
  • Turbo Delphi (explorer and professional - cf Installation notes);
  • + +
  • CodeGear RAD Studio 2007 (Delphi for Win32 and C++Builder for Win32 personalities);
  • + +
  • Delphi 2009 and C++Builder 2009.
  • + +
+ +

+ +

Installation notes

+ +
    + +
  • Not every unit supports all tools. Look out for *.exc + files in the tool-specific lib/subdirectories for a list of units + excluded from compilation.
  • + +
  • Kylix 3 Delphi/C++ installation is back but specific code has not been tested with the latest + versions of the kernel. Please ensure you use the flavor of the JCL with Unix EOL.
  • + +
  • Free Pascal (http://www.freepascal.org/) + support has not been updated for this release; most units from + source/common should work with FP 2.0, as tests with a 2.0 beta (1.9.8) + indicated, but this has not been verified. Note that there are no plans + to support FP versions from the 1.0 branch.
  • + +
+ +

Installation for Turbo Delphi

+ +

The JEDI Code Library can be compiled targetting Turbo Delphi Explorer and Turbo Delphi Professional. +Turbo Delphi Professional is recognized as BDS 2006, you have to download its command line compiler from +CodeGear website at http://www.codegear.com/Default.aspx?tabid=160  +to install the full JCL on this tool.

+ +

To install the JCL targetting Turbo Delphi Explorer, consider the following checks:

+ +
    + +
  • If you have an other supported version of Delphi/C++Builder on this computer, it should automatically be + detected and the installer will process as usual.
  • + +
  • If you only have Turbo Delphi Explorer (and no other tools) on the computer, the installer cannot be + compiled. You have to use the Turbo Explorer flavor of the JCL that contains a precompiled installer. However, + you will not be able to install any experts.
  • + +
+ +

Installation on C#Builder 1 and Delphi 8:

+ +
    + +
  • These products cannot be used to build the JCL installer, you need an + other supported product to install JCL experts on these products.
  • + +
  • These products are not able to use the JCL library as a runtime library. + You cannot write managed applications and managed packages based on the JCL.
  • + +
  • These products are not shipped with their native compilers, you have to + download it from codecentral (http://cc.codegear.com/). + The item (http://codecentral.codegear.com/Download.aspx?id=21333) +  contains the native compiler to be installed in Delphi 8. + The item (http://codecentral.codegear.com/Download.aspx?id=21334) +  contains the native compiler to be installed in C#Builder 1. + These zip files have to be extracted in the products directory using the standard pattern:
  • + +
+ +
		   Executable files (exe and dll)      - BDS\X.0\bin
Compiler files (dcp and dcu) - BDS\X.0\lib
Toolsapi source files - BDS\X.0\source\ToolsAPI
+ +

Default installation

+ +

For all others versions of Delphi, C++Builder and BDS, simply launch Install.bat +and the installer window will let you configure options and install the library.

+ +

+ +

Manual Installation

+ +

Although it is not recommended, a manual installation is possible. You will have +to manually configure options for the library. That is done by modifying an included +file. +

+

+

+

For each tool you want to install the JCL in, repeat the following steps:

+ +
    + +
  1. Open and edit included file to customize options:
  2. +
      + +
    • For Kylix 3 (Delphi): source\include\jclkd3.inc
    • + +
    • For Kylix 3 (C++Builder): source\include\jclkc3.inc
    • + +
    • For C++Builder 5: source\include\jclc5.inc
    • + +
    • For C++Builder 6: source\include\jclc6.inc
    • + +
    • For Delphi 5: source\include\jcld5.inc
    • + +
    • For Delphi 6: source\include\jcld6.inc
    • + +
    • For Delphi 7: source\include\jcld7.inc
    • + +
    • For Delphi 2005: source\include\jcld9.inc
    • + +
    • For Delphi.net 2005: source\include\jcld9.net.inc
    • + +
    • For BDS 2006 (Delphi and C++Builder): source\include\jcld10.inc
    • + +
    • For Delphi.net 2006: source\include\jcld10.net.inc
    • + +
    • For CodeGear RAD Studio 2007 (Delphi for Win32 and C++Builder): source\include\jcld11.inc
    • + +
    • For Delphi.net 2007: source\include\jcld11.net.inc
    • + +
    • For Delphi 2009 and C++Builder 2009: source\include\jcld12.inc
    • +
    + +
  3. In the IDE, open and compile package Jcl.dpk (or Jcl.bpk for C++Builder) + located in a subdirectory of the "packages" directory matching your version of + the IDE. This package doesn't have to be installed since it doesn't provide + any components.
  4. + +
  5. If you want to install experts, open package JclBaseExpert.dpk and compile it, + then you can install all the experts you want (packages are located in the same + directory).
  6. + +
+ +

+ +

Distribution content

+ +
Install.bat                   - Compile and run VCL version of the JCL Installer (Win32)
QInstall.bat - Compile and run CLX version of JCL Installer (Win32)
install.sh - Compile and run JCL Installer (Linux)
bin - Common place for sample application EXE files
lib - Common place for compiled units.
docs - Readme (this file) and other documents
docs\Readme.html - This file
docs\Experts.html - Readme file about the experts
docs\MPL-1.1.txt - The Mozilla Public Licence (MPL) version 1.1
docs\MPL FAQ.html - Frequently Asked Questions about the MPL
docs\cps.html - Cross Platform Strategy
experts - JCL IDE experts source code
experts\debug - JCL Debug IDE expert for using JclDebug unit
experts\debug\dialog - Application exception dialog replacement
experts\debug\simdview - Low-level debug window for XMM registers
experts\debug\threadnames - IDE expert showing class names for debugged threads
experts\debug\tools - Tools for creating files with JCL debug information
experts\favfolders - Favorite folders combobox in IDE open/save file dialogs
experts\projectanalyzer - Project Analyzer IDE expert
experts\useswizard - JCL uses wizard
experts\versioncontrol - Integration of TortoiseCVS and TortoiseSVN in the IDE
examples - JCL example applications
examples\common - CLX and Win32 example applications in Delphi
examples\dotnet - JCL example applications for Delphi.net
examples\windows - JCL example applications for Delphi.Win32
examples\windows\delphitools - Collection of system tools using JCL
help - Help file (distributed in a separate archive)
install - Installer source code
packages - JCL package sources
source - JCL source code
+ +

+ +

Giving your feedback

+ +If you have any comments or suggestions we would appreciate it if you +drop us a note. There are several ways to get in contact with us: + + +
+

Reporting bugs

+ +

The general rule is: If you want to get a +bug fixed you need to log it!

+ +

An issue tracking tool can be accessed via ('Code Library' category): +http://homepages.codegear.com/jedi/issuetracker/

+ +

Please be aware that you are allowed there to enter feature request and code donations as well.

+ +

The JEDI issue tracker is based up on the Mantis BugTracker Open +Source project. More background information about it is available on its homepage  +http://mantisbt.sourceforge.net

+ +

+ +

Downloads of stable sources

+ +

These sources are official JCL releases and file status can be considered as +stable for use in final applications. During the past years, there have been around 2 +or 3 releases per year.

+ +

JEDI Code Library: File List on SourceForge:  +http://sourceforge.net/project/showfiles.php?group_id=47514 +

+ +

+ +

Development sources

+ +

These files are under active development and may cause some incompatibilities +and some conflicts with existing code. You should not use these files in final +applications. The JCL development team provides these files for testing and +feedback from users.

+ +

You can download snapshots of the Subversion repository updated every day in the JCL daily page + http://jcl.sourceforge.net/daily/

+ +

To always have access to the most recent changes in the JCL, you +should install a Subversion client (we recommend TortoiseSVN http://tortoisesvn.tigris.org/ +and RapidSVN http://rapidsvn.tigris.org/) and download the +SVN repository files to your computer as explained in the repository page of the JEDI Wiki at +http://homepages.codegear.com/jedi/wiki/index.php?title=Repository  +With the SVN client, you can update your local repository at any time. +You can also view the repository online via the web interface at http://jcl.svn.sourceforge.net/

+ +

+ +

Getting involved in JCL development

+ +If you want to help out making JCL better or bigger or just plain +cooler, there are several ways in which you can help out. Here are some of the +things we need your help on: +
    + +
  • Donate source code
  • + +
  • Donate time writing help
  • + +
  • Donate time writing demos
  • + +
  • Donate time fixing bugs
  • + +
  • Share your experience by helping users in newsgroups and mailing lists
  • + +
+ +

JCL accepts donations from developers as long as the source fullfills the +requirements set up by the JEDI and JCL teams. To read more about these +requirements, visit the page http://homepages.codegear.com/jedi/jcl

+ +

You can also donate your time by writing help for the source already +in JCL. We currently use Doc-o-Matic to create the finished help files but +the actual help sources are plain text files in a simple to understand format. +We can provide you with auto-generated templates with all classes, properties, +types etc already inserted. The "only" thing left to do is fill in the actual +help text for the help items. If you are interested in writing help, contact us.

+ +

If you want to help fix bugs in JCL, go to Mantis and check the bug report +there. You can post replies as well as fixes directly in the bug report. One of the +JCL developers will pick up the report/fix and update the Subversion repository if the fi +is satisfactory. If you report and fix a lot of bugs, you might even get developer +access to SVN so you can update the JCL files directly.

+ + + diff --git a/official/1.104/docs/Readme.txt b/official/1.104/docs/Readme.txt new file mode 100644 index 0000000..690771c --- /dev/null +++ b/official/1.104/docs/Readme.txt @@ -0,0 +1,323 @@ +-------------------------------------------------------------------------------- + +JEDI Code Library +Release 1.104 +Build 3248 +21-January-2009 + +-------------------------------------------------------------------------------- + +Content of this file +About this release +Supported tools +Installation notes +Manual installation +Distribution content +Giving your feedback +Reporting bugs +Downloads of stable sources +Development sources +Getting involved in JCL development + +-------------------------------------------------------------------------------- + +About this release +JCL release 1.104 provides an updated support for all targets +(including Delphi 2009 and C++Builder 2009). + +As always, multiple bugs have been fixed; for detailed change logs, use the +facilities of our Subversion repository at Sourceforge.net +http://sourceforge.net/projects/jcl/, see below. + +Head changes: + + - improved Unicode support for Delphi 2009 and C++Builder 2009; + - support for late and static binding to ZLib code; + - version control actions for CVS and SVN added to JCL runtime; + - the polyniomal of CRC computations can be customized; + - speed improvement of TJclBufferedStream during write operations; + - new archive compression format provided with 7-zip: lzma, pe, elf, macho, + udf, xar, mub, hfs, dmg; the wrapper has previous support for the compression + and the decompression of zip, bzip2, gzip, 7z, tar and for the decompression + of rar, iso, chm, deb, cab... + - new string conversion functions with failure detection. + +Important: + + - Note that the package naming has changed: the same package name is used by + all versions of the compiler supporting suffixes (C++Builder 6, Delphi 6, + Delphi 7, C#Builder 1, Delphi 8, Delphi 2005, BDS 2006, RAD Studio 2007, + Delphi 2009 and C++Builder 2009); a different suffix is added for each target + to the BPL file name (for Delphi 2009, the library file is named jcl120.bpl). + The installer tries to remove old packages. 3rd party packages requiring old + DJcl* resp. CJcl* packages need to be changed to accomodate the new naming + scheme or they will cause conflicts in the IDE at load time. + + - DCP files are now created in the lib\target subdirectory of the JCL + installation. 3rd party packages requiring JCL packages need to have this + path in their "browse path" option to compile. + +(Windows only) Installation options: + + Packages compiled by the JCL installer don't contain any debug informations to +keep their size as small as possible. + + The JEDI Code Library packages are required by some 3rd party packages +(including the JEDI Visual Component Library - JVCL), the installer generates +them if the "Packages" node is checked. + + The installer can generate MAP informations for each package. These +informations can be linked into binaries to become JCL debug data or be +converted to .jdbg files. Once linked MAP files could be deleted. These options +are subnodes of the "Packages" node. + + For BDS 2006, RAD Studio 2007 and C++Builder 2009, the compiler introduced +a new option to make the same packages available in C++, by checking the +"Dual packages" option of the "Packages" node, you will be able to call functions +of the JCL from C++ code. + +.net Framework support: + + A subset of JCL units was worked over to support Delphi.Net (Delphi 2005, BDS 2006 +and RAD Studio 2007). The packages belong to the Jedi.Jcl namespace. + +-------------------------------------------------------------------------------- + +Supported Tools +The JCL can be compiled and installed in the following environments + +Only runtime support: + - Kylix 3 (cf Installation notes) + +Only design-time support (only experts): + - C#Builder 1 (cf Installation notes); + - Delphi 8.net (cf Installation notes). + +Both supports (run time and design time): + - Delphi version 5, 6, 7; + - C++Builder version 5 & 6; + - Delphi 2005 (Delphi.net personality); + - Borland Developer Studio 2006 (Delphi for Win32, C++Builder for Win32, + Delphi.net and C#Builder personalities); + - Turbo Delphi (explorer and professional - cf Installation notes); + - CodeGear RAD Studio 2007 (Delphi for Win32 and C++Builder for Win32 + personalities); + - CodeGear Delphi 2009 and C++Builder 2009. + +-------------------------------------------------------------------------------- + +Installation notes + + - Not every unit supports all tools. Look out for *.exc files in the tool- + specific lib/subdirectories for a list of units excluded from compilation. + + - Kylix 3 Delphi/C++ installation is back but specific code has not been tested + with the latest versions of the kernel. Please ensure you use the flavor of + the JCL with Unix EOL. + + - Free Pascal (http://www.freepascal.org/) support has not been updated for + this release; most units fromsource/common should work with FP 2.0, as tests + with a 2.0 beta (1.9.8)indicated, but this has not been verified. Note that + there are no plans to support FP versions from the 1.0 branch. + +Installation for Turbo Delphi + +The JEDI Code Library can be compiled targetting Turbo Delphi Explorer and Turbo +Delphi Professional. Turbo Delphi Professional is recognized as BDS 2006, you +have to download its command line compiler from CodeGear website at +http://www.codegear.com/Default.aspx?tabid=160 to install the full JCL on this +tool. + +To install the JCL targetting Turbo Delphi Explorer, consider the following +checks: + + - If you have an other supported version of Delphi/C++Builder on this computer, + it should automatically be detected and the installer will process as usual. + - If you only have Turbo Delphi Explorer (and no other tools) on the computer, + the installer cannot becompiled. You have to use the Turbo Explorer flavor of + the JCL that contains a precompiled installer. However, you will not be able + to install any experts. + +Installation on C#Builder 1 and Delphi 8: + + - These products cannot be used to build the JCL installer, you need an other + supported product to install JCL experts on these products. + - These products are not able to use the JCL library as a runtime library. You + cannot write managed applications and managed packages based on the JCL. + - These products are not shipped with their native compilers, you have to + download it from codecentral (http://cc.codegear.com/). The item + (http://codecentral.codegear.com/Download.aspx?id=21333) contains the native + compiler to be installed in Delphi 8. The item + (http://codecentral.codegear.com/Download.aspx?id=21334) contains the native + compiler to be installed in C#Builder 1. These zip files have to be extracted + in the products directory using the standard pattern: + Executable files (exe and dll) - BDS\X.0\bin + Compiler files (dcp and dcu) - BDS\X.0\lib + Toolsapi source files - BDS\X.0\source\ToolsAPI + +Default installation + +For all others versions of Delphi, C++Builder and BDS, simply launch Install.bat +and the installer window will let you configure options and install the library. + +-------------------------------------------------------------------------------- + +Manual Installation +Although it is not recommended, a manual installation is possible. You will have +to manually configure options for the library. That is done by modifying an +included file. + +For each tool you want to install the JCL in, repeat the following steps: + +1. Open and edit included file to customize options: + - For Kylix 3 (Delphi): source\include\jclkd3.inc + - For Kylix 3 (C++Builder): source\include\jclkc3.inc + - For C++Builder 5: source\include\jclc5.inc + - For C++Builder 6: source\include\jclc6.inc + - For Delphi 5: source\include\jcld5.inc + - For Delphi 6: source\include\jcld6.inc + - For Delphi 7: source\include\jcld7.inc + - For Delphi 2005: source\include\jcld9.inc + - For Delphi.net 2005: source\include\jcld9.net.inc + - For BDS 2006 (Delphi and C++Builder): source\include\jcld10.inc + - For Delphi.net 2006: source\include\jcld10.net.inc + - For CodeGear Delphi 2007 for Win32 and C++Builder 2007: source\include\jcld11.inc + - For Delphi.net 2007: source\include\jcld11.net.inc + - For Delphi 2009 and C++Builder 2009: source\include\include\jcld12.inc + +2. In the IDE, open and compile package Jcl.dpk (or Jcl.bpk for C++Builder) +located in a subdirectory of the "packages" directory matching your version of +the IDE. This package doesn't have to be installed since it doesn't provide any +components. + +3. If you want to install experts, open package JclBaseExpert.dpk and compile +it, then you can install all the experts you want (packages are located in the +same directory). + +-------------------------------------------------------------------------------- + +Distribution content +Install.bat - Compile and run VCL version of the JCL Installer (Win32) +QInstall.bat - Compile and run CLX version of JCL Installer (Win32) +install.sh - Compile and run JCL Installer (Linux) +bin - Common place for sample application EXE files +lib - Common place for compiled units. +docs - Readme (this file) and other documents +docs\Readme.html - This file +docs\Experts.html - Readme file about the experts +docs\MPL-1.1.txt - The Mozilla Public Licence (MPL) version 1.1 +docs\MPL FAQ.html - Frequently Asked Questions about the MPL +docs\cps.html - Cross Platform Strategy +experts - JCL IDE experts source code +experts\debug - JCL Debug IDE expert for using JclDebug unit +experts\debug\dialog - Application exception dialog replacement +experts\debug\simdview - Low-level debug window for XMM registers +experts\debug\threadnames - IDE expert showing class names for debugged threads +experts\debug\tools - Tools for creating files with JCL debug information +experts\favfolders - Favorite folders combobox in IDE open/save file dialogs +experts\projectanalyzer - Project Analyzer IDE expert +experts\repository - Repository expert +experts\useswizard - JCL uses wizard +experts\versioncontrol - Integration of TortoiseCVS and TortoiseSVN in the IDE +examples - JCL example applications +examples\common - CLX and Win32 example applications in Delphi +examples\dotnet - JCL example applications for Delphi.net +examples\windows - JCL example applications for Delphi.Win32 +examples\windows\delphitools - Collection of system tools using JCL +help - Help file (distributed in a separate archive) +install - Installer source code +packages - JCL package sources +source - JCL source code + +-------------------------------------------------------------------------------- + +Giving your feedback + +If you have any comments or suggestions we would appreciate it if you drop us a +note. There are several ways to get in contact with us: + - Newsgroup is the recommended way to contact other JCL users and the team + itself. They are hosted at news://forums.talkto.net/jedi.jcl. + - Write to jcl@delphi-jedi.org or to jcl-testing@delphi-jedi.org This email + account should not be used for support requests. If you need support please + use either the newsgroups or the mailing list. + - If you want to keep up to date about JCL then you can join the JCL mailing + list by going to http://tech.groups.yahoo.com/group/JEDI-JCL/You can also use + this list to voice your opinion, comments or suggestions. + +-------------------------------------------------------------------------------- + +Reporting bugs + +The general rule is: If you want to get a bug fixed you need to log it! + +An issue tracking tool can be accessed via ('Code Library' category): +http://homepages.codegear.com/jedi/issuetracker/ + +Please be aware that you are allowed there to enter feature request and code +donations as well. + +The JEDI issue tracker is based up on the Mantis BugTracker Open Source project. +More background information about it is available on its homepage +http://mantisbt.sourceforge.net + +-------------------------------------------------------------------------------- + +Downloads of stable sources + +These sources are official JCL releases and file status can be considered as +stable for use in final applications. During the past years, there have been +around 2 or 3 releases per year. + +JEDI Code Library: File List on SourceForge: +http://sourceforge.net/project/showfiles.php?group_id=47514 + +-------------------------------------------------------------------------------- + +Development sources + +These files are under active development and may cause some incompatibilities +and some conflicts with existing code. You should not use these files in final +applications. The JCL development team provides these files for testing and +feedback from users. + +You can download snapshots of the Subversion repository updated every day in the +JCL daily page http://jcl.sourceforge.net/daily/ + +To always have access to the most recent changes in the JCL, you should install +a Subversion client (we recommend TortoiseSVN http://tortoisesvn.tigris.org/and +RapidSVN http://rapidsvn.tigris.org/) and download the SVN repository files to +your computer as explained in the repository page of the JEDI Wiki at +http://homepages.codegear.com/jedi/wiki/index.php?title=Repository With the SVN +client, you can update your local repository at any time. You can also view the +repository online via the web interface at http://jcl.svn.sourceforge.net/ + +-------------------------------------------------------------------------------- + +Getting involved in JCL development + +If you want to help out making JCL better or bigger or just plain cooler, there +are several ways in which you can help out. Here are some of the things we need +your help on: + - Donate source code + - Donate time writing help + - Donate time writing demos + - Donate time fixing bugs + - Share your experience by helping users in newsgroups and mailing lists + + JCL accepts donations from developers as long as the source fullfills the +requirements set up by the JEDI and JCL teams. To read more about these +requirements, visit the page http://homepages.codegear.com/jedi/jcl + + You can also donate your time by writing help for the source already in JCL. +We currently use Doc-o-Matic to create the finished help files but the actual +help sources are plain text files in a simple to understand format. We can +provide you with auto-generated templates with all classes, properties, +types etc already inserted. The "only" thing left to do is fill in the actual +help text for the help items. If you are interested in writing help, contact us. + +If you want to help fix bugs in JCL, go to Mantis and check the bug report +there. You can post replies as well as fixes directly in the bug report. One of +the JCL developers will pick up the report/fix and update the Subversion +repository if the fi is satisfactory. If you report and fix a lot of bugs, you +might even get developer access to SVN so you can update the JCL files directly. + diff --git a/official/1.104/docs/ThreadSafe.txt b/official/1.104/docs/ThreadSafe.txt new file mode 100644 index 0000000..2e7359f --- /dev/null +++ b/official/1.104/docs/ThreadSafe.txt @@ -0,0 +1,28 @@ +------------------------------------------------------------------------------ +JEDI Code Library +HomePage: http://jcl.sourceforge.net/ +------------------------------------------------------------------------------ + +Thread safe support + +Some pieces of code can handle read/write accesses from multiples threads +without writing specific code. +This support can be enabled: +- by defining the THREADSAFE compiler symbol {$DEFINE THREADSAFE} when JCL + units are part of a project. +- by checking the Enable thread safe code node in the installer options + +Presently only the following units have some pieces of code that implicitly +handles thread safe accesses: +source\common\JclAbstractContainers.pas +source\common\JclArrayLists.pas +source\common\JclArraySets.pas +source\common\JclBinaryTrees.pas +source\common\JclHashMaps.pas +source\common\JclLinkedLists.pas +source\common\JclQueues.pas +source\common\JclStacks.pas + +This support is made using critical sections, if you want other piece of code +to be thread safe, please create a feature request in the Code Library category +of the mantiss at http://homepages.borland.com/jedi/issuetracker/ diff --git a/official/1.104/docs/cps.html b/official/1.104/docs/cps.html new file mode 100644 index 0000000..ecdcf7d --- /dev/null +++ b/official/1.104/docs/cps.html @@ -0,0 +1,655 @@ + + + + + JEDI Code Library - Cross Platform Strategy + + +

JEDI Code Library - Cross Platform Strategy

+

+This paper presents the JCL teams strategy for cross platform +compliance of the +JEDI Code Library. It is based up on the discussions within the JCL +newsgroup +and JCL developer mailing lists. This document is currently work in +progress +and subject to changes with or without notice. +

+

+Version history:
+    0.1 Initial release +

+

+

+

Background

+

+The main objective is to make the JEDI Code Library VisualCLX (Kylix +for Delphi/Delphi) and Delphi.NET compatible. For a detailed +explanation of the currently used terminology, see the following +article +Overview of the VCL for .NET.

+

+We have to cope with nearly all aspects of cross platform progamming, +like different APIs, different operating system concepts etc. Since we +want to be as crossplatform compatible as possible interface +compatability is the most important +issue for us. JEDI Code Library users should have to opportunity the +use the JCL +on whatever platform they like. Figure 1 shows the three basic layers +we have to deal with: +

+
    +
  • Platform independent layer: Units which are not (or only very +minor) +platform specific and do not depend on a specific component set. This +doesn't mean that units in this layer have to consist of no platform +dependent code, but they have to +be nearly 100% interface compatible and all functionality must have +been ported to all +supported platforms.
  • +
  • Platform dependent layer: Units which depend on a specific +platform (e.g. JclCLI)
  • +
  • Component set dependent layer: Units which depend on a specific +component set
  • +
+

+
+Fig 1: The JEDI Code Library crossplatform layer structure +

+

+The JEDI Code Library currently targets the following platforms: +

+
    +
  • Kylix for Delphi (Kylix 3) / Linux
  • +
  • Delphi (Version 5,6,7) / Microsoft Windows
  • +
+and is trying to support the following platforms as soon as possible: +
    +
  • Delphi .NET / .NET (Micrsoft Windows)
  • +
+

+As a mid or long term perspective we are hoping to get the JCL +FreePascal compatible. +This involves the possibilty to have the JCL running on DOS, OS/2, +FreeBSD and +AmigaOS.

+

Common platform independent layer

+

+This layer consists of all files which are not platform dependent or +need only very minor adjustations. Furthermore all units in this layer +do not depend on a +specific component set. Examples for common platform independent units +are JclBase, JclDateTime, JclFileUtils and JclMath. The units have been +ported to all platforms and are the crossplatform "core" of the Jedi +Code Library. As a general rule a unit in this layer should have no +platform specific ifdefs in its +interface section. +

+

Platform dependent layer

+

+Furthermore we do not have to differentiate between VCL and VisualCLX +units only (the so called component set dependent layer), but also +between UNIX, Windows and .NET dependent units. The platform dependent +units doesn't need to be interface compatible (if there is an +equivalent in one of the other suported platforms at all!). +An example for a platform dependent unit is JclCLI. Nonetheless if +there are equivalents in all other supported platforms as well it might +be considerable to write a more general class and include that unit +into the common platform indepedant layer. +

+

Component set dependent layer

+

+When it comes to sharing code between VCL and VisualCLX-applications, +some facts need to be stated: +

+

+

+
  • A unit is called VCL-dependent, when it uses some +VCL-unit(s), e.g. Graphics. +
  • +
  • A unit is called VisualCLX-dependent, when it uses some +VisualCLX-unit(s), e.g. QGraphics.
  • +

    +When a unit contains neither VCL- nor VisualCLX-specific code, there is +no problem: It can be used by either type of application. +

    +

    +While it is basically possible to create VCL-dependent and +VisualCLX-dependent +variants of the same unit by means of conditional compilation - and use +them in +VCL- and VisualCLX-applications respectively -, this method fails at +design time: +One and the same unit cannot be installed twice in the IDE, not even as +part of +different packages. We would have to rename one of the variants, +effectively +creating a new unit. Therefor we will use a preprocessor to resolve the +conditional compilation symbols related to VCL/VisualCLX-specific code +and create +VCL/VisualCLX units from a common codebase. +

    +

    +Component dependent units should be largely "interface compatible" - +interface +adjustments for specific component sets are unavoidable - nonetheless +similar +interfaces are desirable. +

    +

    Preprocessor

    +

    +The preprocessor jpp is a modified version of Barry Kelly's ppp tool. +In contrast to ppp, which resolves all conditional compilation +directives without exception, with jpp symbols not only can be defined +but also undefined. Those symbols which are neither defined nor +explicitely undefined are considered +as of unknown status and it and its related source code remains +untouched. +

    +

    +The usage of jpp is not too hard. It is called via +

    +
    jpp [options] <input files>...
    +Possible options are +
      -i       Process includes
    -c Process conditional directives
    -C Strip comments
    -pxxx Add xxx to include path
    -dxxx Define xxx as a preprocessor conditional symbol
    -uxxx Assume preprocessor conditional symbol xxx as not defined
    -x[n:]yyy Strip first n characters from file name; precede filename by prefix yyy
    +

    +The example command line below generates a file JclQGraphics.pas in +subdirectory +CLX from file Graphics.cb located in the current directory. Symbols +"VisualCLX" +and "COMPILER6_UP" are specified as defined, "Bitmap32" and "VCL" as +undefined. +

    +
      jpp -c -dVisualCLX -dCOMPILER6_UP -uBitmap32 -uVCL -xCLX\JclQ Graphics.cb
    +

    Generating Jcl[Q]Graphics.pas and Jcl[Q]GraphUtils.pas

    +

    +First compile Preprocessor\jpp.exe from Preprocessor\jpp.dpr. +Then change to the "Source" directory and type "make" at the command +line. +This will create the units
    +VCL\JclGraphics.pas
    +VCL\JclGraphUtils.pas
    +CLX\JclQGraphics.pas
    +CLX\JclQGraphUtils.pas
    +

    +

    +from their prototypes _Graphics.pas and _GraphUtils.pas. +

    +

    Minimizing VCL dependencies

    +

    +To reduce VCL dependencies in JCL, the following changes have been +made: +

    + +
    +
    JclFileUtils
    +
    PathCompactPath is an overloaded function. The variant which +takes a TCanvas as argument (and thus creates a dependency on VCL unit +Graphics) has been removed.
    +
    +
    +
    +
    JclShell
    +
    ShellLinkGetIcon has been removed. It could get part of some +genuine VCL-dependent unit (e.g. JclGraphUtils), but for now it is left +out.
    +
    +
    +
    +
    JclPEImage
    +
    +
     Replace "uses Consts," by

    uses
    {$IFDEF COMPILER6_UP}
    RtlConsts, // VisualCLX-package compatible (part of rtlxx.bpl)
    {$ELSE}
    Consts, // not VisualCLX-package compatible (part of vclxx.bpl)
    {$ENDIF COMPILER6_UP}
    +
    +
    +
    +

    +Note that the first two changes have enormous impact, since many JCL +units use JclFileUtils and JclSysInfo (which both use JclShell). This +leaves JclGraphics and JclGraphUtils as sole units with genuine +VCL/VisualCLX-dependencies. +JclPrint is the only remaining pure VCL-dependent units.

    +

    New directory structure

    +

    +With the new JCL release we introduce a more appropriate source file +directory +structure. The files are now grouped according their respective layers. +

    +
    Source/
    Common
    DotNet
    Unix
    VCL
    VisCLX
    Windows
    +

    Status - Platforms

    +

    +This table gives a short overview of which units are already working +under four different Delphi language compilers/platforms. There are +four status levels possible: +

    +

    + + + + + + + + + + + + + + + + + + + +
    +
    +
      the unit has been ported to that platform
    -  the unit has not been ported to that platform
     (+) +
    +
      the unit compiles, but not all of its functionality +has been ported to that platform.
     platform +
    +
      the unit is platform dependent and will not be ported.
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameDelphi +(Windows)Kylix +for DelphiDelphi.NETFree +Pascal
    Jcl8087++-?
    JclAppInst+--?
    JclCil+--?
    JclClr+--?
    JclCom+--?
    JclComplex++-?
    JclConsole+--?
    JclCounter++-?
    JclDateTime+(+)-?
    JclDebug+--?
    JclDotNet+--?
    JclEDI++-?
    JclEDISEF++-?
    JclEDIXML++-?
    JclEDI_ANSIX12++-?
    JclEDI_UNEDIFACT++-?
    JclFileUtils+(+)-?
    JclExprEval++
    +
    -?
    JclHookExcept+--?
    JclIniFiles++
    +
    -?
    JclLanMan+--?
    JclLocales+--?
    JclLogic++-?
    JclMapi+--?
    JclMath++-?
    JclMetaData+--?
    JclMidi+--?
    JclMime++-?
    JclMiscel+--?
    JclMultimedia+--?
    JclNTFS+--?
    JclPEImage+--?
    JclPrint+--?
    JclStrHashMap++
    +
    -?
    JclStatistics++-?
    JclShell+--?
    JclSecurity+--?
    JclSchedule++-?
    JclRTTI+--?
    JclResources+--?
    JclRegistry+--?
    JclStrings++-?
    Jclsvcctrl+--?
    Jclsynch+--?
    JclTaskplatform--?
    JclSysUtils+(+)
    +
    -?
    JclSysInfo+(+)
    +
    -?
    JclTD32+--?
    JclUnicode+--?
    JclUnitConv++-?
    JclWin32platform --?
    JclWinMidiplatform --?
    +

    Assembler

    +

    +For crossplatform compatability it is absolutely necessary to reduce +the amount +of inline assembler code used. Therefore as a general rule every line +of assembler +must have a pure pascal pendant. Please use assembler only if it +really has a noticeable impact on the libraries performance.

    +
    {$IFNDEF PUREPASCAL}
    // assembler code here
    {$ELSE}
    // Delphi equivalent here
    {$ENDIF}
    +

    Packages

    + + diff --git a/official/1.104/docs/cps_files/strucv1.jpg b/official/1.104/docs/cps_files/strucv1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c2fddc232b5c7156166c1451cc41e49271f5c2e GIT binary patch literal 33442 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 f$D}lpuhFQtQF8Dm75;uA + + + + + + + + + + + + windows\debug\stacktrack\StackTrackDLLsExample.bdsproj + windows\debug\stacktrack\StackTrackDLLsStaticLibrary.bdsproj + windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.bdsproj + windows\debug\stacktrack\StackTrackDLLsComLibrary.bdsproj + windows\debug\stacktrack\StackTrackExample.bdsproj + StackTrackDLLsExample.exe StackTrackDLLsStaticLibrary.dll StackTrackDLLsDynamicLibrary.dll StackTrackDLLsComLibrary.dll StackTrackExample.exe + + + + diff --git a/official/1.104/examples/JclDebugExamples.bpg b/official/1.104/examples/JclDebugExamples.bpg new file mode 100644 index 0000000..fbf9f71 --- /dev/null +++ b/official/1.104/examples/JclDebugExamples.bpg @@ -0,0 +1,33 @@ +#------------------------------------------------------------------------------ +VERSION = BWS.01 +#------------------------------------------------------------------------------ +!ifndef ROOT +ROOT = $(MAKEDIR)\.. +!endif +#------------------------------------------------------------------------------ +MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** +DCC = $(ROOT)\bin\dcc32.exe $** +BRCC = $(ROOT)\bin\brcc32.exe $** +#------------------------------------------------------------------------------ +PROJECTS = StackTrackDLLsExample.exe StackTrackDLLsStaticLibrary.dll \ + StackTrackDLLsDynamicLibrary.dll StackTrackDLLsComLibrary.dll StackTrackExample.exe +#------------------------------------------------------------------------------ +default: $(PROJECTS) +#------------------------------------------------------------------------------ + +StackTrackDLLsExample.exe: windows\debug\stacktrack\StackTrackDLLsExample.dpr + $(DCC) + +StackTrackDLLsStaticLibrary.dll: windows\debug\stacktrack\StackTrackDLLsStaticLibrary.dpr + $(DCC) + +StackTrackDLLsDynamicLibrary.dll: windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.dpr + $(DCC) + +StackTrackDLLsComLibrary.dll: windows\debug\stacktrack\StackTrackDLLsComLibrary.dpr + $(DCC) + +StackTrackExample.exe: windows\debug\stacktrack\StackTrackExample.dpr + $(DCC) + + diff --git a/official/1.104/examples/common/containers/algorithms/AlgorithmsExample.dof b/official/1.104/examples/common/containers/algorithms/AlgorithmsExample.dof new file mode 100644 index 0000000..c22fe7f --- /dev/null +++ b/official/1.104/examples/common/containers/algorithms/AlgorithmsExample.dof @@ -0,0 +1,2 @@ +[Directories] +OutputDir=..\..\..\..\bin diff --git a/official/1.104/examples/common/containers/algorithms/AlgorithmsExample.dpr b/official/1.104/examples/common/containers/algorithms/AlgorithmsExample.dpr new file mode 100644 index 0000000..6777a41 --- /dev/null +++ b/official/1.104/examples/common/containers/algorithms/AlgorithmsExample.dpr @@ -0,0 +1,21 @@ +program AlgorithmsExample; + +{$I jcl.inc} + +uses + {$IFDEF MSWINDOWS} + Forms, + {$ENDIF MSWINDOWS} + {$IFDEF LINUX} + QForms, + {$ENDIF LINUX} + AlgorithmsExampleMain in 'AlgorithmsExampleMain.pas' {MainForm}; + +{$R *.res} +{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/official/1.104/examples/common/containers/algorithms/AlgorithmsExample.res b/official/1.104/examples/common/containers/algorithms/AlgorithmsExample.res new file mode 100644 index 0000000000000000000000000000000000000000..b111060100a5f025f8352346a52aa105dda315dc GIT binary patch literal 876 zcmaJ=Jxc>Y5Pj=~+s-6tVP#TUMl38+L=gfOYT+L^n{Cnvf+wW#s%rxNnLu)|%~k%6 zl$I$|i0j+gyL{lskhe2$=FRS8xdnhO;amX29sAg;>k&0dYOR)T)S?pxUE+dJsM75D z-7YQoTL`ZNskJunM9$J{ZiL4pI|=o`jj8rCvcaPY5Pj=~+s-6tVP#TUMl38+L=gfOYT+L^n{Cnvf+wW#s%rxNnLu)|%~k%6 zl$I$|i0j+gyL{lskhe2$=FRS8xdnhO;amX29sAg;>k&0dYOR)T)S?pxUE+dJsM75D z-7YQoTL`ZNskJunM9$J{ZiL4pI|=o`jj8rCvcaPY5Pj=~+s-6tVP#TUMl38+L=gfOYT+L^n{Cnvf+wW#s%rxNnLu)|%~k%6 zl$I$|i0j+gyL{lskhe2$=FRS8xdnhO;amX29sAg;>k&0dYOR)T)S?pxUE+dJsM75D z-7YQoTL`ZNskJunM9$J{ZiL4pI|=o`jj8rCvcaPY5Pj=~+s-6tVP#TUMl38+L=gfOYT+L^n{Cnvf+wW#s%rxNnLu)|%~k%6 zl$I$|i0j+gyL{lskhe2$=FRS8xdnhO;amX29sAg;>k&0dYOR)T)S?pxUE+dJsM75D z-7YQoTL`ZNskJunM9$J{ZiL4pI|=o`jj8rCvcaPH zw}#sXE`7EbIFDpIb#6}v9yjfDlBP%o19|49(ZGhr6B!J(*nuV@^2z&n=roW6tsUr%_nXEYDeJ+zJ}zBDJ*ENaTCN`(QK!U-XoBWO_1g$cV)PRiHYe3snuv z@IsfH(B%fcE@K@2G61`V`!)PwP8=He_cHA2`NgGHdad1ksNI)9Z(cs8^oR(FbD|@D p5IH zw}#sXE`7EbIFDpIb#6}v9yjfDlBP%o19|49(ZGhr6B!J(*nuV@^2z&n=roW6tsUr%_nXEYDeJ+zJ}zBDJ*ENaTCN`(QK!U-XoBWO_1g$cV)PRiHYe3snuv z@IsfH(B%fcE@K@2G61`V`!)PwP8=He_cHA2`NgGHdad1ksNI)9Z(cs8^oR(FbD|@D p5I 0 do + begin + (AIterator as IJclWideStrTreeIterator).AddChild(GenerateItem); + Dec(Count); + end; + end; + + procedure GenerateRandom(Count: Integer); + begin + while Count > 0 do + begin + FTree.Add(GenerateItem); + Dec(Count); + end; + end; +var + Index1, Index2: Integer; + Iterator0, Iterator1, Iterator2: IJclWideStrTreeIterator; +begin + CurrentItem := 0; + FTree.Clear; + + if ActionGeneralPurposeTree.Checked then + begin + // general purpose tree + GenerateRandom(5); + Iterator0 := FTree.Root; + for Index1 := 0 to Iterator0.ChildrenCount - 1 do + begin + Iterator1 := (Iterator0 as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator; + Iterator1.GetChild(Index1); + GenerateRandomChild(Iterator1, 5); + for Index2 := 0 to Iterator1.ChildrenCount - 1 do + begin + Iterator2 := (Iterator1 as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator; + Iterator2.GetChild(Index2); + GenerateRandomChild(Iterator2, 5); + end; + end; + end + else + begin + // binary tree + GenerateRandom(100); + end; + PrintTree; +end; + +procedure TForm1.ActionIgnoreDuplicatesUpdate(Sender: TObject); +begin + (Sender as TAction).Enabled := not CheckBoxAllowDuplicates.Checked; +end; + +procedure TForm1.ActionPackExecute(Sender: TObject); +begin + (FTree as IJclPackable).Pack; + PrintTree; +end; + +procedure TForm1.ActionRemoveSelectedExecute(Sender: TObject); +begin + GetSelectedIterator.Remove; + PrintTree; +end; + +procedure TForm1.ActionRemoveSelectedUpdate(Sender: TObject); +begin + (Sender as TAction).Enabled := TreeViewResults.Selected <> nil; +end; + +procedure TForm1.ActionRemoveSingleExecute(Sender: TObject); +begin + FTree.RemoveSingleElement := (Sender as TAction).Checked; +end; + +procedure TForm1.ActionTestTreeExecute(Sender: TObject); + procedure CheckNode(const AIterator: IJclWideStrTreeIterator); + var + Index: Integer; + ChildIterator, ParentIterator: IJclWideStrTreeIterator; + begin + for Index := 0 to AIterator.ChildrenCount - 1 do + begin + ChildIterator := (AIterator as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator; + ChildIterator.GetChild(Index); + + try + ParentIterator := (ChildIterator as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator; + ParentIterator.Parent; + + if not AIterator.IteratorEquals(ParentIterator) then + ShowMessage('difference at parent of node ' + string(ChildIterator.GetString)); + except + ShowMessage('error at parent of node ' + string(ChildIterator.GetString)); + end; + + CheckNode(ChildIterator); + end; + end; +var + ARootIterator: IJclWideStrTreeIterator; +begin + ARootIterator := FTree.Root; + ARootIterator.Next; // unlock + CheckNode(ARootIterator); + ShowMessage('end of test'); +end; + +procedure TForm1.ActionAddNewChildExecute(Sender: TObject); +begin + if GetSelectedIterator.AddChild(EditNewItem.Text) then + ShowMessage('Success') + else + ShowMessage('Duplicate'); + PrintTree; +end; + +procedure TForm1.ActionAddNewChildUpdate(Sender: TObject); +begin + (Sender as TAction).Enabled := ActionGeneralPurposeTree.Checked and (TreeViewResults.Selected <> nil); +end; + +procedure TForm1.ActionAddNewExecute(Sender: TObject); +begin + if FTree.Add(EditNewItem.Text) then + ShowMessage('Success') + else + ShowMessage('Duplicate'); + PrintTree; +end; + +procedure TForm1.ActionAllowDefaultExecute(Sender: TObject); +begin + FTree.AllowDefaultElements := (Sender as TAction).Checked; +end; + +procedure TForm1.ActionDuplicatesExecute(Sender: TObject); +begin + if ActionAllowDuplicates.Checked then + FTree.Duplicates := dupAccept + else + if ActionIgnoreDuplicates.Checked then + FTree.Duplicates := dupIgnore + else + FTree.Duplicates := dupError; +end; + +procedure TForm1.ActionAlwaysEnabled(Sender: TObject); +begin + (Sender as TAction).Enabled := True; +end; + +procedure TForm1.FormCreate(Sender: TObject); +begin + Randomize; + ActionGeneralPurposeTreeExecute(ActionGeneralPurposeTree); +end; + +function TForm1.GetSelectedIterator: IJclWideStrTreeIterator; +var + Indexes: array of Integer; + I: Integer; + ANode: TTreeNode; +begin + Result := nil; + ANode := TreeViewResults.Selected; + if ANode <> nil then + begin + while ANode.Parent <> nil do + begin + SetLength(Indexes, Length(Indexes) + 1); + Indexes[High(Indexes)] := ANode.Index; + ANode := ANode.Parent; + end; + Result := FTree.Root; + for I := High(Indexes) downto Low(Indexes) do + Result.GetChild(Indexes[I]); + Result.Next; + end; +end; + +procedure TForm1.PrintTree; + procedure ProcessNode(const AIterator: IJclWideStrTreeIterator; ANode: TTreeNode); + var + Index: Integer; + ChildIterator: IJclWideStrTreeIterator; + ChildNode: TTreeNode; + begin + ANode.Text := string(AIterator.GetString); + for Index := 0 to AIterator.ChildrenCount - 1 do + begin + ChildIterator := (AIterator as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator; + ChildIterator.GetChild(Index); + ChildNode := TreeViewResults.Items.AddChild(ANode, ''); + ProcessNode(ChildIterator, ChildNode); + end; + end; +var + ARootIterator: IJclWideStrTreeIterator; + ARootNode: TTreeNode; +begin + TreeViewResults.Items.Clear; + if FTree.Size > 0 then + begin + ARootIterator := FTree.Root; + ARootIterator.Next; // unlock + ARootNode := TreeViewResults.Items.Add(nil, ''); + ProcessNode(ARootIterator, ARootNode); + ARootNode.Expand(True); + ARootNode.MakeVisible; + end; +end; + +end. diff --git a/official/1.104/examples/common/expreval/ExprEvalExample.dof b/official/1.104/examples/common/expreval/ExprEvalExample.dof new file mode 100644 index 0000000..4a388e0 --- /dev/null +++ b/official/1.104/examples/common/expreval/ExprEvalExample.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\bin + diff --git a/official/1.104/examples/common/expreval/ExprEvalExample.dpr b/official/1.104/examples/common/expreval/ExprEvalExample.dpr new file mode 100644 index 0000000..b5d8c0a --- /dev/null +++ b/official/1.104/examples/common/expreval/ExprEvalExample.dpr @@ -0,0 +1,19 @@ +program ExprEvalExample; + +{$I jcl.inc} + +uses + Forms, + ExprEvalExampleMain in 'ExprEvalExampleMain.pas' {Form1}, + JclExprEval in '..\..\..\source\common\JclExprEval.pas', + JclStrHashMap in '..\..\..\source\common\JclStrHashMap.pas', + ExprEvalExampleLogic in 'ExprEvalExampleLogic.pas'; + +{$R *.RES} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/official/1.104/examples/common/expreval/ExprEvalExample.res b/official/1.104/examples/common/expreval/ExprEvalExample.res new file mode 100644 index 0000000000000000000000000000000000000000..ff24fa70c6a61f1121dd5a43dd91ace8c388f935 GIT binary patch literal 876 zcmd^8F%H5o47>nR7X%&H>Bz_r05LHDU&_DIp?mWPMn*;kq;R%dg$f2H7OY;JyR+3O ztpT7SQZjHmi0i2L$EwrQkA)>9T!WhzT)=oT+ik~|6g)` zBHp6jpWOz9kh$H7a;eE7f5rpY+=1l{mW1 literal 0 HcmV?d00001 diff --git a/official/1.104/examples/common/expreval/ExprEvalExampleLogic.pas b/official/1.104/examples/common/expreval/ExprEvalExampleLogic.pas new file mode 100644 index 0000000..7c258ec --- /dev/null +++ b/official/1.104/examples/common/expreval/ExprEvalExampleLogic.pas @@ -0,0 +1,105 @@ +unit ExprEvalExampleLogic; + +interface + +uses + SysUtils, Classes, JclExprEval; + +procedure Init(Evaluator: TEasyEvaluator; FuncList: TStrings); +function ResultAsText(Evaluator: TEvaluator; const Input: string): string; + +implementation + +uses + JclMath; + +procedure Init(Evaluator: TEasyEvaluator; FuncList: TStrings); +begin + with Evaluator do + begin + // Constants + AddConst('Pi', Pi); + + // Functions + AddFunc('LogBase10', LogBase10); + AddFunc('LogBase2', LogBase2); + AddFunc('LogBaseN', LogBaseN); + AddFunc('ArcCos', ArcCos); + AddFunc('ArcCot', ArcCot); + AddFunc('ArcCsc', ArcCsc); + AddFunc('ArcSec', ArcSec); + AddFunc('ArcSin', ArcSin); + AddFunc('ArcTan', ArcTan); + AddFunc('ArcTan2', ArcTan2); + AddFunc('Cos', Cos); + AddFunc('Cot', Cot); + AddFunc('Coversine', Coversine); + AddFunc('Csc', Csc); + AddFunc('Exsecans', Exsecans); + AddFunc('Haversine', Haversine); + AddFunc('Sec', Sec); + AddFunc('Sin', Sin); + AddFunc('Tan', Tan); + AddFunc('Versine', Versine); + AddFunc('ArcCosH', ArcCosH); + AddFunc('ArcCotH', ArcCotH); + AddFunc('ArcCscH', ArcCscH); + AddFunc('ArcSecH', ArcSecH); + AddFunc('ArcSinH', ArcSinH); + AddFunc('ArcTanH', ArcTanH); + AddFunc('CosH', CosH); + AddFunc('CotH', CotH); + AddFunc('CscH', CscH); + AddFunc('SecH', SecH); + AddFunc('SinH', SinH); + AddFunc('TanH', TanH); + end; + with FuncList do + begin + Add('LogBase10'); + Add('LogBase2'); + Add('LogBaseN'); + Add('ArcCos'); + Add('ArcCot'); + Add('ArcCsc'); + Add('ArcSec'); + Add('ArcSin'); + Add('ArcTan'); + Add('ArcTan2'); + Add('Cos'); + Add('Cot'); + Add('Coversine'); + Add('Csc'); + Add('Exsecans'); + Add('Haversine'); + Add('Sec'); + Add('Sin'); + Add('Tan'); + Add('Versine'); + Add('ArcCosH'); + Add('ArcCotH'); + Add('ArcCscH'); + Add('ArcSecH'); + Add('ArcSinH'); + Add('ArcTanH'); + Add('CosH'); + Add('CotH'); + Add('CscH'); + Add('SecH'); + Add('SinH'); + Add('TanH'); + end; +end; + +function ResultAsText(Evaluator: TEvaluator; const Input: string): string; +begin + try + Result := FloatToStr(Evaluator.Evaluate(Input)); + except + on E: Exception do + Result := E.Message; + end; +end; + + +end. diff --git a/official/1.104/examples/common/expreval/ExprEvalExampleMain.dfm b/official/1.104/examples/common/expreval/ExprEvalExampleMain.dfm new file mode 100644 index 0000000..7b67763 --- /dev/null +++ b/official/1.104/examples/common/expreval/ExprEvalExampleMain.dfm @@ -0,0 +1,71 @@ +object Form1: TForm1 + Left = 222 + Top = 107 + ClientWidth = 479 + ClientHeight = 321 + Caption = 'JclExprEval Example' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 12 + Top = 12 + Width = 54 + Height = 13 + Caption = 'E&xpression:' + FocusControl = ExpressionInput + end + object Label2: TLabel + Left = 12 + Top = 40 + Width = 49 + Height = 13 + Caption = 'Functions:' + end + object ExpressionInput: TEdit + Left = 80 + Top = 8 + Width = 305 + Height = 21 + Anchors = [akLeft, akTop, akRight] + TabOrder = 0 + end + object Memo1: TMemo + Left = 0 + Top = 60 + Width = 479 + Height = 270 + Anchors = [akLeft, akTop, akRight, akBottom] + TabOrder = 1 + end + object EnterButton: TButton + Left = 396 + Top = 8 + Width = 75 + Height = 25 + Anchors = [akTop, akRight] + Caption = 'Evaluate' + Default = True + TabOrder = 2 + OnClick = EnterButtonClick + end + object FuncList: TComboBox + Left = 80 + Top = 36 + Width = 145 + Height = 21 + Style = csDropDownList + ItemHeight = 13 + Sorted = True + TabOrder = 3 + OnClick = FuncListClick + end +end diff --git a/official/1.104/examples/common/expreval/ExprEvalExampleMain.pas b/official/1.104/examples/common/expreval/ExprEvalExampleMain.pas new file mode 100644 index 0000000..ec090c4 --- /dev/null +++ b/official/1.104/examples/common/expreval/ExprEvalExampleMain.pas @@ -0,0 +1,67 @@ +unit ExprEvalExampleMain; + +interface + +uses + Windows, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls, + JclExprEval; + +type + TForm1 = class(TForm) + ExpressionInput: TEdit; + Memo1: TMemo; + Label1: TLabel; + EnterButton: TButton; + FuncList: TComboBox; + Label2: TLabel; + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure EnterButtonClick(Sender: TObject); + procedure FuncListClick(Sender: TObject); + private + { Private declarations } + FEvaluator: TEasyEvaluator; + FX: Extended; + FY: Extended; + FZ: Extended; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +uses + ExprEvalExampleLogic; + +procedure TForm1.FormCreate(Sender: TObject); +begin + FEvaluator := TEvaluator.Create; + FEvaluator.AddVar('X', FX); + FEvaluator.AddVar('Y', FY); + FEvaluator.AddVar('Z', FZ); + Init(FEvaluator, FuncList.Items); +end; + +procedure TForm1.FormDestroy(Sender: TObject); +begin + FEvaluator.Free; +end; + +procedure TForm1.EnterButtonClick(Sender: TObject); +begin + Memo1.Lines.Add(ResultAsText(FEvaluator as TEvaluator, ExpressionInput.Text)); +end; + +procedure TForm1.FuncListClick(Sender: TObject); +begin + ExpressionInput.Text := ExpressionInput.Text + FuncList.Text; + ActiveControl := ExpressionInput; + ExpressionInput.SelStart := Length(ExpressionInput.Text); +end; + +end. diff --git a/official/1.104/examples/common/filesearch/FileSearchDemo.dof b/official/1.104/examples/common/filesearch/FileSearchDemo.dof new file mode 100644 index 0000000..d447a0b --- /dev/null +++ b/official/1.104/examples/common/filesearch/FileSearchDemo.dof @@ -0,0 +1,2 @@ +[Directories] +OutputDir=../../../bin diff --git a/official/1.104/examples/common/filesearch/FileSearchDemo.dpr b/official/1.104/examples/common/filesearch/FileSearchDemo.dpr new file mode 100644 index 0000000..3375e92 --- /dev/null +++ b/official/1.104/examples/common/filesearch/FileSearchDemo.dpr @@ -0,0 +1,16 @@ +program FileSearchDemo; + +{$I jcl.inc} + +uses + Forms, + FileSearchDemoMain in 'FileSearchDemoMain.pas' {FileSearchForm}; + +{$R *.res} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TFileSearchForm, FileSearchForm); + Application.Run; +end. diff --git a/official/1.104/examples/common/filesearch/FileSearchDemo.res b/official/1.104/examples/common/filesearch/FileSearchDemo.res new file mode 100644 index 0000000000000000000000000000000000000000..ff24fa70c6a61f1121dd5a43dd91ace8c388f935 GIT binary patch literal 876 zcmd^8F%H5o47>nR7X%&H>Bz_r05LHDU&_DIp?mWPMn*;kq;R%dg$f2H7OY;JyR+3O ztpT7SQZjHmi0i2L$EwrQkA)>9T!WhzT)=oT+ik~|6g)` zBHp6jpWOz9kh$H7a;eE7f5rpY+=1l{mW1 literal 0 HcmV?d00001 diff --git a/official/1.104/examples/common/filesearch/FileSearchDemoMain.dfm b/official/1.104/examples/common/filesearch/FileSearchDemoMain.dfm new file mode 100644 index 0000000..a322ab6 --- /dev/null +++ b/official/1.104/examples/common/filesearch/FileSearchDemoMain.dfm @@ -0,0 +1,364 @@ +object FileSearchForm: TFileSearchForm + Left = 258 + Top = 301 + Width = 855 + Height = 509 + HorzScrollBar.Range = 378 + VertScrollBar.Range = 252 + ActiveControl = StartBtn + Caption = 'File Search Demo (TJclFileEnumerator)' + Color = clBtnFace + Constraints.MinHeight = 279 + Constraints.MinWidth = 647 + Font.Charset = DEFAULT_CHARSET + Font.Color = clBlack + Font.Height = 12 + Font.Name = 'MS Sans Serif' + Font.Pitch = fpVariable + Font.Style = [] + OldCreateOrder = True + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object StatusBar: TStatusBar + Left = 0 + Top = 461 + Width = 847 + Height = 21 + Panels = < + item + Alignment = taRightJustify + Width = 100 + end + item + Alignment = taRightJustify + Width = 100 + end + item + Width = 50 + end> + end + object FileList: TListView + Left = 0 + Top = 181 + Width = 847 + Height = 280 + Align = alClient + Columns = < + item + Caption = 'File' + Width = 360 + end + item + Alignment = taRightJustify + AutoSize = True + Caption = 'Size' + end + item + Alignment = taCenter + AutoSize = True + Caption = 'Time' + end + item + Caption = 'Attr.' + Width = 60 + end> + ReadOnly = True + TabOrder = 1 + ViewStyle = vsReport + end + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 847 + Height = 49 + Align = alTop + BevelOuter = bvNone + TabOrder = 2 + object Label1: TLabel + Left = 14 + Top = 14 + Width = 16 + Height = 13 + Caption = 'List' + end + object Label2: TLabel + Left = 216 + Top = 14 + Width = 29 + Height = 13 + Caption = 'files in' + end + object RootDirInput: TEdit + Left = 256 + Top = 10 + Width = 248 + Height = 21 + TabOrder = 1 + end + object StartBtn: TButton + Left = 524 + Top = 10 + Width = 61 + Height = 25 + Caption = 'Start' + TabOrder = 2 + OnClick = StartBtnClick + end + object StopBtn: TButton + Left = 596 + Top = 10 + Width = 61 + Height = 25 + Caption = 'Stop' + Enabled = False + TabOrder = 3 + OnClick = StopBtnClick + end + object DetailsBtn: TButton + Left = 668 + Top = 10 + Width = 77 + Height = 25 + Caption = 'More >>' + TabOrder = 4 + OnClick = DetailsBtnClick + end + object FileMaskInput: TEdit + Left = 40 + Top = 10 + Width = 169 + Height = 21 + TabOrder = 0 + Text = '*' + end + object SaveBtn: TButton + Left = 760 + Top = 8 + Width = 75 + Height = 25 + Caption = 'Save' + TabOrder = 5 + OnClick = SaveBtnClick + end + end + object DetailsPanel: TPanel + Left = 0 + Top = 49 + Width = 847 + Height = 132 + Align = alTop + BevelOuter = bvNone + TabOrder = 3 + Visible = False + object GroupBox1: TGroupBox + Left = 256 + Top = 0 + Width = 249 + Height = 121 + Caption = 'File attributes' + TabOrder = 0 + object cbReadOnly: TCheckBox + Tag = 1 + Left = 16 + Top = 16 + Width = 89 + Height = 21 + AllowGrayed = True + Caption = 'Read only' + State = cbGrayed + TabOrder = 0 + OnClick = cbFileAttributeClick + end + object cbHidden: TCheckBox + Tag = 2 + Left = 16 + Top = 40 + Width = 89 + Height = 21 + AllowGrayed = True + Caption = 'Hidden' + TabOrder = 1 + OnClick = cbFileAttributeClick + end + object cbSystem: TCheckBox + Tag = 4 + Left = 16 + Top = 64 + Width = 89 + Height = 21 + AllowGrayed = True + Caption = 'System' + TabOrder = 2 + OnClick = cbFileAttributeClick + end + object cbDirectory: TCheckBox + Tag = 16 + Left = 16 + Top = 88 + Width = 89 + Height = 21 + AllowGrayed = True + Caption = 'Directory' + TabOrder = 3 + OnClick = cbFileAttributeClick + end + object cbSymLink: TCheckBox + Tag = 64 + Left = 136 + Top = 16 + Width = 101 + Height = 21 + AllowGrayed = True + Caption = 'Symbolic link' + State = cbGrayed + TabOrder = 4 + OnClick = cbFileAttributeClick + end + object cbNormal: TCheckBox + Tag = 128 + Left = 136 + Top = 88 + Width = 89 + Height = 21 + AllowGrayed = True + Caption = 'Normal' + State = cbGrayed + TabOrder = 7 + OnClick = cbFileAttributeClick + end + object cbArchive: TCheckBox + Tag = 32 + Left = 136 + Top = 16 + Width = 89 + Height = 21 + AllowGrayed = True + Caption = 'Archive' + State = cbGrayed + TabOrder = 5 + OnClick = cbFileAttributeClick + end + object cbVolumeID: TCheckBox + Tag = 8 + Left = 136 + Top = 40 + Width = 89 + Height = 21 + AllowGrayed = True + Caption = 'Volume ID' + TabOrder = 6 + OnClick = cbFileAttributeClick + end + end + object cbLastChangeAfter: TCheckBox + Left = 524 + Top = 12 + Width = 131 + Height = 30 + Caption = 'Last change after' + TabOrder = 1 + end + object edLastChangeAfter: TEdit + Left = 656 + Top = 16 + Width = 113 + Height = 21 + MaxLength = 10 + TabOrder = 2 + end + object cbLastChangeBefore: TCheckBox + Left = 524 + Top = 36 + Width = 131 + Height = 30 + Caption = 'Last change before' + TabOrder = 3 + end + object edLastChangeBefore: TEdit + Left = 656 + Top = 40 + Width = 113 + Height = 21 + MaxLength = 10 + TabOrder = 4 + end + object cbFileSizeMax: TCheckBox + Left = 524 + Top = 60 + Width = 131 + Height = 30 + Caption = 'Maximum size' + TabOrder = 5 + end + object edFileSizeMax: TEdit + Left = 656 + Top = 64 + Width = 113 + Height = 21 + TabOrder = 6 + Text = '$7FFFFFFFFFFFFFFF' + end + object cbFileSizeMin: TCheckBox + Left = 524 + Top = 84 + Width = 131 + Height = 30 + Caption = 'Minimum size' + TabOrder = 7 + end + object edFileSizeMin: TEdit + Left = 656 + Top = 88 + Width = 113 + Height = 21 + TabOrder = 8 + Text = '0' + end + object IncludeSubDirectories: TCheckBox + Left = 40 + Top = 18 + Width = 157 + Height = 17 + Caption = 'Include sub directories' + Checked = True + State = cbChecked + TabOrder = 9 + OnClick = UpdateIncludeHiddenSubDirs + end + object IncludeHiddenSubDirs: TCheckBox + Left = 40 + Top = 42 + Width = 201 + Height = 17 + Caption = 'Include hidden sub directories' + TabOrder = 10 + OnClick = IncludeHiddenSubDirsClick + end + object cbDisplayLiveUpdate: TCheckBox + Left = 40 + Top = 90 + Width = 189 + Height = 17 + Caption = '&Display live update' + Checked = True + State = cbChecked + TabOrder = 12 + end + object cbCaseInsensitiveSearch: TCheckBox + Left = 40 + Top = 66 + Width = 177 + Height = 17 + Caption = 'Case insensitive search' + TabOrder = 11 + end + end + object SaveDialog: TSaveDialog + DefaultExt = '*.txt' + Filter = 'Text files (*.txt)|*.txt|All files (*.*)|*.*' + Left = 216 + Top = 96 + end +end diff --git a/official/1.104/examples/common/filesearch/FileSearchDemoMain.pas b/official/1.104/examples/common/filesearch/FileSearchDemoMain.pas new file mode 100644 index 0000000..35e9cca --- /dev/null +++ b/official/1.104/examples/common/filesearch/FileSearchDemoMain.pas @@ -0,0 +1,260 @@ +// +// Robert Rossmair, 2003 +// +unit FileSearchDemoMain; + +{$INCLUDE jcl.inc} + +interface + +uses + SysUtils, Classes, + Graphics, StdCtrls, Controls, ExtCtrls, ComCtrls, Forms, Dialogs, + JclStrings, JclFileUtils; + +type + TFileSearchForm = class(TForm) + StatusBar: TStatusBar; + FileList: TListView; + Panel1: TPanel; + Label1: TLabel; + RootDirInput: TEdit; + StartBtn: TButton; + StopBtn: TButton; + Label2: TLabel; + DetailsPanel: TPanel; + GroupBox1: TGroupBox; + cbReadOnly: TCheckBox; + cbHidden: TCheckBox; + cbSystem: TCheckBox; + cbDirectory: TCheckBox; + cbSymLink: TCheckBox; + cbNormal: TCheckBox; + cbArchive: TCheckBox; + DetailsBtn: TButton; + FileMaskInput: TEdit; + cbLastChangeAfter: TCheckBox; + edLastChangeAfter: TEdit; + cbLastChangeBefore: TCheckBox; + edLastChangeBefore: TEdit; + cbFileSizeMax: TCheckBox; + edFileSizeMax: TEdit; + cbFileSizeMin: TCheckBox; + edFileSizeMin: TEdit; + IncludeSubDirectories: TCheckBox; + IncludeHiddenSubDirs: TCheckBox; + cbDisplayLiveUpdate: TCheckBox; + cbCaseInsensitiveSearch: TCheckBox; + SaveBtn: TButton; + SaveDialog: TSaveDialog; + procedure StartBtnClick(Sender: TObject); + procedure StopBtnClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure cbFileAttributeClick(Sender: TObject); + procedure UpdateIncludeHiddenSubDirs(Sender: TObject); + procedure IncludeHiddenSubDirsClick(Sender: TObject); + procedure DetailsBtnClick(Sender: TObject); + procedure SaveBtnClick(Sender: TObject); + private + { Private declarations } + FFileEnumerator: TJclFileEnumerator; + FDirCount: Integer; + FTaskID: TFileSearchTaskID; + FT0: TDateTime; + FFileListLiveUpdate: Boolean; + procedure DirectoryEntered(const Directory: string); + procedure AddFile(const Directory: string; const FileInfo: TSearchRec); + procedure TaskDone(const ID: TFileSearchTaskID; const Aborted: Boolean); + end; + +var + FileSearchForm: TFileSearchForm; + +implementation + +{$R *.dfm} + +procedure TFileSearchForm.FormCreate(Sender: TObject); +begin + FFileEnumerator := TJclFileEnumerator.Create; + FFileEnumerator.OnEnterDirectory := DirectoryEntered; + FFileEnumerator.OnTerminateTask := TaskDone; + FileMaskInput.Text := '*.pas;*.dfm;*.xfm;*.dpr;*.dpk*'; + RootDirInput.Text := ExpandFileName(FFileEnumerator.RootDirectory); + edLastChangeAfter.Text := FFileEnumerator.LastChangeAfterAsString; + edLastChangeBefore.Text := FFileEnumerator.LastChangeBeforeAsString; + cbCaseInsensitiveSearch.Checked := not FFileEnumerator.CaseSensitiveSearch; + {$IFDEF MSWINDOWS} + cbSymLink.Visible := False; + {$ENDIF MSWINDOWS} + {$IFDEF UNIX} + FileList.Columns.Add.Caption := 'Link'; + cbArchive.Visible := False; + {$ENDIF UNIX} +end; + +procedure TFileSearchForm.FormDestroy(Sender: TObject); +begin + FFileEnumerator.Free; + { + FileList.Items.BeginUpdate; + FileList.Items.Clear; + FileList.Items.EndUpdate; + } +end; + +procedure TFileSearchForm.DirectoryEntered(const Directory: string); +begin + Inc(FDirCount); + StatusBar.Panels[0].Text := Format('%d files', [FileList.Items.Count]); + StatusBar.Panels[1].Text := Format('%d directories', [FDirCount]); + StatusBar.Panels[2].Text := Format('Processing %s...', [Directory]); +end; + +procedure TFileSearchForm.AddFile(const Directory: string; const FileInfo: TSearchRec); +var + ListItem: TListItem; +begin + ListItem := FileList.Items.Add; + with ListItem do + begin + Caption := Directory + FileInfo.Name; + SubItems.Add(IntToStr(GetSizeOfFile(FileInfo))); + SubItems.Add(FormatDateTime(' yyyy-mm-dd hh:nn:ss ', FileDateToDateTime(FileInfo.Time))); + SubItems.Add(FileAttributesStr(FileInfo)); + {$IFDEF UNIX} + if (FileInfo.Attr and faSymLink) <> 0 then + SubItems.Add(SymbolicLinkTarget(Caption)); + {$ENDIF UNIX} + SubItems.Add(FileGetOwnerName(Caption)); + SubItems.Add(FileGetGroupName(Caption)); + end; +end; + +procedure TFileSearchForm.TaskDone(const ID: TFileSearchTaskID; const Aborted: Boolean); +begin + if not FFileListLiveUpdate then + FileList.Items.EndUpdate; + StatusBar.Panels[0].Text := Format('%d files', [FileList.Items.Count]); + if Aborted then + StatusBar.Panels[2].Text := 'Prematurely aborted.' + else + StatusBar.Panels[2].Text := Format('...finished (%f seconds).', [(Now - FT0) * SecsPerDay]); + StartBtn.Enabled := True; + SaveBtn.Enabled := True; + StopBtn.Enabled := False; + ActiveControl := StartBtn; +end; + +procedure TFileSearchForm.StartBtnClick(Sender: TObject); +begin + RootDirInput.Text := PathCanonicalize(RootDirInput.Text); + + FFileEnumerator.SearchOption[fsLastChangeAfter] := cbLastChangeAfter.Checked; + FFileEnumerator.SearchOption[fsLastChangeBefore] := cbLastChangeBefore.Checked; + if FFileEnumerator.SearchOption[fsLastChangeAfter] then + FFileEnumerator.LastChangeAfterAsString := edLastChangeAfter.Text; + if FFileEnumerator.SearchOption[fsLastChangeBefore] then + FFileEnumerator.LastChangeBeforeAsString := edLastChangeBefore.Text; + FFileEnumerator.RootDirectory := RootDirInput.Text; + FFileEnumerator.FileMask := FileMaskInput.Text; + FFileEnumerator.SearchOption[fsMinSize] := cbFileSizeMin.Checked; + FFileEnumerator.SearchOption[fsMaxSize] := cbFileSizeMax.Checked; + FFileEnumerator.FileSizeMin := StrToInt64(edFileSizeMin.Text); + FFileEnumerator.FileSizeMax := StrToInt64(edFileSizeMax.Text); + FFileEnumerator.IncludeSubDirectories := IncludeSubDirectories.Checked; + FFileEnumerator.IncludeHiddenSubDirectories := IncludeHiddenSubDirs.Checked; + FFileEnumerator.CaseSensitiveSearch := not cbCaseInsensitiveSearch.Checked; + FDirCount := 0; + + StartBtn.Enabled := False; + StopBtn.Enabled := True; + SaveBtn.Enabled := False; + ActiveControl := StopBtn; + + FFileListLiveUpdate := cbDisplayLiveUpdate.Checked; + + FileList.Items.Clear; + if not FFileListLiveUpdate then + FileList.Items.BeginUpdate; + + FT0 := Now; + FTaskID := FFileEnumerator.ForEach(AddFile); +end; + +procedure TFileSearchForm.StopBtnClick(Sender: TObject); +begin + FFileEnumerator.StopTask(FTaskID); +end; + +procedure TFileSearchForm.cbFileAttributeClick(Sender: TObject); +const + Interest: array[TCheckBoxState] of TAttributeInterest = (aiRejected, aiRequired, aiIgnored); + CBState: array[TAttributeInterest] of TCheckBoxState = (cbGrayed, cbUnchecked, cbChecked); +begin + with FFileEnumerator.AttributeMask do + begin + with Sender as TCheckBox do + Attribute[Tag] := Interest[State]; + cbReadOnly.State := CBState[ReadOnly]; + cbHidden.State := CBState[Hidden]; + cbSystem.State := CBState[System]; + cbDirectory.State := CBState[Directory]; + cbNormal.State := CBState[Normal]; +{$IFDEF UNIX} + cbSymLink.State := CBState[SymLink]; +{$ENDIF def UNIX} +{$IFDEF MSWINDOWS} + cbArchive.State := CBState[Archive]; +{$ENDIF def MSWINDOWS} + end; +end; + +procedure TFileSearchForm.UpdateIncludeHiddenSubDirs(Sender: TObject); +begin + IncludeHiddenSubDirs.AllowGrayed := not IncludeSubDirectories.Checked; + if IncludeSubDirectories.Checked then + begin + if IncludeHiddenSubDirs.State = cbGrayed then + IncludeHiddenSubDirs.State := cbChecked; + end + else + begin + if IncludeHiddenSubDirs.State = cbChecked then + IncludeHiddenSubDirs.State := cbGrayed; + end; +end; + +procedure TFileSearchForm.IncludeHiddenSubDirsClick(Sender: TObject); +begin + if not IncludeSubDirectories.Checked then + if IncludeHiddenSubDirs.State = cbChecked then + IncludeHiddenSubDirs.State := cbUnchecked; +end; + +procedure TFileSearchForm.DetailsBtnClick(Sender: TObject); +const + DetailsBtnCaptions: array[Boolean] of string = ('More >>', 'Less <<'); +begin + DetailsPanel.Visible := not DetailsPanel.Visible; + DetailsBtn.Caption := DetailsBtnCaptions[DetailsPanel.Visible]; +end; + +procedure TFileSearchForm.SaveBtnClick(Sender: TObject); +var + I: Integer; +begin + if SaveDialog.Execute then + with TStringList.Create do + try + for I := 0 to FileList.Items.Count - 1 do + Add(FileList.Items[I].Caption); + SaveToFile(SaveDialog.FileName); + finally + Free; + end; +end; + +end. + diff --git a/official/1.104/examples/common/graphics/ClipLineDemo.dof b/official/1.104/examples/common/graphics/ClipLineDemo.dof new file mode 100644 index 0000000..b13ef5f --- /dev/null +++ b/official/1.104/examples/common/graphics/ClipLineDemo.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=../../../bin + diff --git a/official/1.104/examples/common/graphics/ClipLineDemo.dpr b/official/1.104/examples/common/graphics/ClipLineDemo.dpr new file mode 100644 index 0000000..b74227a --- /dev/null +++ b/official/1.104/examples/common/graphics/ClipLineDemo.dpr @@ -0,0 +1,16 @@ +program ClipLineDemo; + +{$I jcl.inc} + +uses + Forms, + ClipLineDemoMain in 'ClipLineDemoMain.pas' {Form1}; + +{$R *.res} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/official/1.104/examples/common/graphics/ClipLineDemo.res b/official/1.104/examples/common/graphics/ClipLineDemo.res new file mode 100644 index 0000000000000000000000000000000000000000..093026528930ea46204ac34ba193dc8155a7cef9 GIT binary patch literal 876 zcmd^8F%H5o47>tT7X%&H$;ikL05LHDU&_DIp?mWPMn*;kq;R%dg$f2H7OY;JyR+3O ztpUIhDH*sO#C6pBW7ZVvRaH6Zi&oq?VoMY-*|X+uqINP;fNg$I1ziCnfrL13z>!j L&Q&@UGDQWRn6_4} literal 0 HcmV?d00001 diff --git a/official/1.104/examples/common/graphics/ClipLineDemoMain.dfm b/official/1.104/examples/common/graphics/ClipLineDemoMain.dfm new file mode 100644 index 0000000..3cada53 --- /dev/null +++ b/official/1.104/examples/common/graphics/ClipLineDemoMain.dfm @@ -0,0 +1,17 @@ +object Form1: TForm1 + Left = 198 + Top = 147 + Width = 400 + Height = 400 + Caption = 'ClipLine Demo' + Color = 15790320 + OnCreate = FormCreate + OnPaint = FormPaint + PixelsPerInch = 96 + TextHeight = 13 + object Timer1: TTimer + Enabled = False + Left = 32 + Top = 24 + end +end diff --git a/official/1.104/examples/common/graphics/ClipLineDemoMain.pas b/official/1.104/examples/common/graphics/ClipLineDemoMain.pas new file mode 100644 index 0000000..3711ce0 --- /dev/null +++ b/official/1.104/examples/common/graphics/ClipLineDemoMain.pas @@ -0,0 +1,85 @@ +unit ClipLineDemoMain; + +{$I jcl.inc} + +interface + +uses + SysUtils, Classes, +{$IFDEF MSWINDOWS} + Windows, +{$ENDIF} + Graphics, ExtCtrls, Forms, JclGraphUtils, + JclBase; + +type + TForm1 = class(TForm) + Timer1: TTimer; + procedure FormCreate(Sender: TObject); + procedure FormPaint(Sender: TObject); + procedure Timer1Timer(Sender: TObject); + private + { Private declarations } + R: TRect; + P: TPointArray; + FPenColor: TColor; + FPenColorLight: TColor; + procedure InitLines; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + Randomize; + R.Left := 100; + R.Top := 100; + R.Right := 300; + R.Bottom := 300; + SetLength(P, 50); + InitLines; +end; + +procedure TForm1.FormPaint(Sender: TObject); +begin + Canvas.Brush.Color := clWhite; + Canvas.FillRect(R); + Canvas.Pen.Color := FPenColorLight; + Canvas.PolyLine(P); + Canvas.Pen.Color := FPenColor; + DrawPolyLine(Canvas, P, R); +end; + +procedure TForm1.InitLines; +var + i: Integer; + H, S, L: Single; +begin + for i := 0 to Length(P)-1 do + begin + P[i].X := Random(Width); + P[i].Y := Random(Height); + end; + H := Random; + S := Random; + L := 0.4 * Random; + + FPenColor := WinColor(HSLToRGB(H, S, L)); + FPenColorLight := WinColor(HSLToRGB(H, S, 1 - 0.2 * (1 - L))); +end; + +procedure TForm1.Timer1Timer(Sender: TObject); +begin + InitLines; + Refresh; +end; + +end. + diff --git a/official/1.104/examples/common/graphics/StretchGraphicDemoMain.dfm b/official/1.104/examples/common/graphics/StretchGraphicDemoMain.dfm new file mode 100644 index 0000000..8a55a35 --- /dev/null +++ b/official/1.104/examples/common/graphics/StretchGraphicDemoMain.dfm @@ -0,0 +1,217 @@ +object StretchDemoForm: TStretchDemoForm + Left = 255 + Top = 208 + ClientWidth = 780 + ClientHeight = 583 + VertScrollBar.Range = 19 + ActiveControl = PageControl + AutoScroll = False + Caption = 'JCL Picture Viewer' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = 12 + Font.Name = 'MS Sans Serif' + Font.Pitch = fpVariable + Font.Style = [] + KeyPreview = True + Menu = MainMenu + OldCreateOrder = True + ShowHint = True + OnCreate = FormCreate + OnKeyDown = FormKeyDown + PixelsPerInch = 96 + TextHeight = 13 + object PageControl: TPageControl + Left = 0 + Top = 0 + Width = 780 + Height = 544 + ActivePage = OriginalPage + Align = alClient + TabOrder = 0 + OnChanging = PageControlChanging + object OriginalPage: TTabSheet + Caption = 'Original' + object ScrollBox: TScrollBox + Left = 0 + Top = 0 + Width = 772 + Height = 516 + HorzScrollBar.Tracking = True + VertScrollBar.Tracking = True + Align = alClient + Color = clGray + ParentColor = False + TabOrder = 0 + object OriginalImage: TImage + Left = 0 + Top = 0 + Width = 768 + Height = 512 + AutoSize = True + end + end + end + object StretchedPage: TTabSheet + Caption = 'Resized' + ImageIndex = 1 + OnResize = StretchedPageResize + OnShow = StretchedPageShow + object Bevel1: TBevel + Left = 0 + Top = 0 + Width = 772 + Height = 516 + Align = alClient + end + object StretchedImage: TImage + Left = 1 + Top = 1 + Width = 770 + Height = 513 + Anchors = [akLeft, akTop, akRight, akBottom] + end + end + object FilesPage: TTabSheet + Caption = 'Files' + ImageIndex = 2 + object FileListView: TListView + Left = 0 + Top = 0 + Width = 772 + Height = 516 + Align = alClient + Columns = < + item + AutoSize = True + Caption = 'File' + MaxWidth = 800 + MinWidth = 300 + end + item + Caption = 'Size' + end> + HideSelection = False + TabOrder = 0 + ViewStyle = vsReport + OnClick = FileListViewClick + OnKeyDown = FileListViewKeyDown + end + end + end + object StatusBar: TStatusBar + Left = 0 + Top = 544 + Width = 780 + Height = 19 + Panels = < + item + Width = 120 + end + item + Width = 120 + end + item + Width = 120 + end> + SimplePanel = False + end + object OpenDialog: TOpenDialog + Filter = + 'All (*.jpg;*.jpeg;*.bmp)|*.jpg;*.jpeg;*.bmp|JPEG Image File (*.j' + + 'pg)|*.jpg|JPEG Image File (*.jpeg)|*.jpeg|Bitmaps (*.bmp)|*.bmp' + FilterIndex = 0 + Title = 'Open' + Left = 240 + Top = 68 + end + object MainMenu: TMainMenu + Left = 208 + Top = 68 + object Fil1: TMenuItem + Caption = '&File' + object Open1: TMenuItem + Caption = 'Open...' + OnClick = OpenFile + end + object N1: TMenuItem + Caption = '-' + end + object ExitItem: TMenuItem + Caption = 'E&xit' + OnClick = ExitApp + end + end + object Filter1: TMenuItem + Caption = '&Resampling Filter' + object Box1: TMenuItem + Caption = 'Bo&x' + GroupIndex = 1 + RadioItem = True + OnClick = SelectFilter + end + object Triangle1: TMenuItem + Tag = 1 + Caption = '&Triangle' + GroupIndex = 1 + RadioItem = True + OnClick = SelectFilter + end + object Hermite1: TMenuItem + Tag = 2 + Caption = '&Hermite' + GroupIndex = 1 + RadioItem = True + OnClick = SelectFilter + end + object Bell1: TMenuItem + Tag = 3 + Caption = '&Bell' + GroupIndex = 1 + RadioItem = True + OnClick = SelectFilter + end + object Spline1: TMenuItem + Tag = 4 + Caption = '&Spline' + Checked = True + GroupIndex = 1 + RadioItem = True + OnClick = SelectFilter + end + object Lanczos31: TMenuItem + Tag = 5 + Caption = '&Lanczos 3' + GroupIndex = 1 + RadioItem = True + OnClick = SelectFilter + end + object Mitchell1: TMenuItem + Tag = 6 + Caption = '&Mitchell' + GroupIndex = 1 + RadioItem = True + OnClick = SelectFilter + end + end + object Options1: TMenuItem + Caption = '&Options' + object PreserveAspectRatio1: TMenuItem + Caption = 'Preserve Aspect Ratio' + Checked = True + OnClick = PreserveAspectRatio1Click + end + end + object PrevItem: TMenuItem + Caption = ' &<< ' + Hint = 'Previous file in directory' + OnClick = PrevFile + end + object NextItem: TMenuItem + Caption = ' &>> ' + Hint = 'Next file in directory' + OnClick = NextFile + end + end +end diff --git a/official/1.104/examples/common/graphics/StretchGraphicDemoMain.pas b/official/1.104/examples/common/graphics/StretchGraphicDemoMain.pas new file mode 100644 index 0000000..ac7cc23 --- /dev/null +++ b/official/1.104/examples/common/graphics/StretchGraphicDemoMain.pas @@ -0,0 +1,503 @@ +// +// Robert Rossmair, 2002-09-22 +// revised 2005-06-26 +// + +{$I jcl.inc} + +{$IFDEF RTL140_UP} + {$IFDEF VCL} + {$DEFINE HasShellCtrls} // $(Delphi)\Demos\ShellControls\ShellCtrls.pas + {$ENDIF VCL} +{$ENDIF RTL140_UP} + +unit StretchGraphicDemoMain; + +interface + +uses + SysUtils, Classes, + {$IFDEF MSWINDOWS} + Windows, Messages, JPEG, ShellAPI, + {$ENDIF MSWINDOWS} + Graphics, Controls, Forms, + Dialogs, ComCtrls, StdCtrls, Menus, ExtCtrls, ExtDlgs, + JclGraphics, + {$IFDEF HasShellCtrls} + {$WARN UNIT_PLATFORM OFF} + ShellCtrls, + {$ENDIF HasShellCtrls} + JclFileUtils; + +type + TStretchDemoForm = class(TForm) + PageControl: TPageControl; + OriginalPage: TTabSheet; + StretchedPage: TTabSheet; + StretchedImage: TImage; + MainMenu: TMainMenu; + Fil1: TMenuItem; + Open1: TMenuItem; + N1: TMenuItem; + ExitItem: TMenuItem; + Filter1: TMenuItem; + Box1: TMenuItem; + Triangle1: TMenuItem; + Hermite1: TMenuItem; + Bell1: TMenuItem; + Spline1: TMenuItem; + Lanczos31: TMenuItem; + Mitchell1: TMenuItem; + Options1: TMenuItem; + PreserveAspectRatio1: TMenuItem; + PrevItem: TMenuItem; + NextItem: TMenuItem; + FilesPage: TTabSheet; + ScrollBox: TScrollBox; + StatusBar: TStatusBar; + Bevel1: TBevel; + OpenDialog: TOpenDialog; + FileListView: TListView; + OriginalImage: TImage; + procedure FormCreate(Sender: TObject); + {$IFDEF VCL} + procedure FormDestroy(Sender: TObject); + {$ENDIF VCL} + procedure OpenFile(Sender: TObject); + procedure SelectFilter(Sender: TObject); + procedure PreserveAspectRatio1Click(Sender: TObject); + procedure ExitApp(Sender: TObject); + procedure PrevFile(Sender: TObject); + procedure NextFile(Sender: TObject); + procedure FileListViewClick(Sender: TObject); + procedure LoadSelected; + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure StretchedPageShow(Sender: TObject); + procedure StretchedPageResize(Sender: TObject); + procedure PageControlChanging(Sender: TObject; + var AllowChange: Boolean); + procedure FileListViewKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + {$IFDEF HasShellCtrls} + procedure ShellChange; + private + FShellChangeNotifier: TShellChangeNotifier; + {$ELSE} + private + {$ENDIF HasShellCtrls} + FLastImagePage: TTabSheet; + FFileName: string; + FDir: string; + FWidth: Integer; + FHeight: Integer; + FStretchTime: LongWord; + FPreserveAspectRatio: Boolean; + FResamplingFilter: TResamplingFilter; + procedure AddToFileList(const Directory: string; const FileInfo: TSearchRec); + procedure FileSearchTerminated(const ID: TFileSearchTaskID; const Aborted: Boolean); + function ChangeDirectory: Boolean; + procedure DoStretch; + procedure LoadFile(const AFileName: string); + procedure InvalidateStretched; + procedure UpdateCaption; + procedure UpdateFileList; + procedure UpdateNavButtons; + procedure UpdateStretched; + function GetFileListIndex: Integer; + procedure SetFileListIndex(const Value: Integer); + procedure SetFileName(const Value: string); + {$IFDEF VCL} + procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DropFiles; + {$ENDIF VCL} + protected + property FileListIndex: Integer read GetFileListIndex write SetFileListIndex; + property FileName: string read FFileName write SetFileName; + end; + +var + StretchDemoForm: TStretchDemoForm; + +implementation + +{$IFDEF VCL} +{$R *.dfm} +{$ENDIF} +{$IFDEF VisualCLX} +{$R *.xfm} +{$ENDIF VisualCLX} + +var + FileMask: string; + +{$IFDEF MSWINDOWS} +type + TWMDropFilesCallback = procedure (const FileName: string) of object; + +procedure ProcessWMDropFiles(var Msg: TWMDropFiles; Callback: TWMDropFilesCallback; DropPoint: PPoint = nil); overload; +var + i: Integer; + FileName: array[0..MAX_PATH] of Char; +begin + try + // in case DropPoint is evaluated by callback method, get it first + if DropPoint <> nil then + DragQueryPoint(Msg.Drop, DropPoint^); + if Assigned(Callback) then + for i := 0 to DragQueryFile(Msg.Drop, $FFFFFFFF, nil, 0) - 1 do + begin + DragQueryFile(Msg.Drop, i, FileName, MAX_PATH); + Callback(FileName); + end; + Msg.Result := 0; + finally + DragFinish(Msg.Drop); + end; +end; + +procedure ProcessWMDropFiles(var Msg: TWMDropFiles; FileNames: TStrings; DropPoint: PPoint = nil); overload; +begin + ProcessWMDropFiles(Msg, FileNames.Append, DropPoint); +end; +{$ENDIF MSWINDOWS} + +function IsGraphicFile(const FileName: string): Boolean; overload; +var + Ext: string; +begin + Ext := AnsiLowerCase(ExtractFileExt(FileName)); + Result := (Pos(Ext, FileMask) > 0); +end; + +function IsGraphicFile(const Attr: Integer; const FileInfo: TSearchRec): Boolean; overload; +begin + Result := IsGraphicFile(FileInfo.Name); +end; + +procedure TStretchDemoForm.FormCreate(Sender: TObject); +begin + StretchedPage.Brush.Color := clGray; + {$IFDEF VCL} + ScrollBox.DoubleBuffered := True; + StretchedPage.DoubleBuffered := True; + {$ENDIF VCL} + FileMask := GraphicFileMask(TGraphic); + //Format('%s;%s', [GraphicFileMask(TJPEGImage), GraphicFileMask(TBitmap)]); + OpenDialog.Filter := GraphicFilter(TGraphic); + FResamplingFilter := rfSpline; // rfLanczos3; + FPreserveAspectRatio := True; + UpdateNavButtons; + {$IFDEF HasShellCtrls} + FShellChangeNotifier := TShellChangeNotifier.Create(Self); + with FShellChangeNotifier do + begin + WatchSubTree := False; + OnChange := ShellChange; + NotifyFilters := [ + nfFileNameChange, + nfDirNameChange, + //nfSizeChange, + nfWriteChange, + nfSecurityChange]; + end; + {$ENDIF HasShellCtrls} + {$IFDEF VCL} + DragAcceptFiles(Handle, True); + {$ENDIF VCL} + if ParamCount > 0 then + with OpenDialog do + begin + FileName := ParamStr(1); + InitialDir := ExtractFileDir(FileName); + LoadFile(FileName); + end; +end; + +{$IFDEF VCL} +procedure TStretchDemoForm.FormDestroy(Sender: TObject); +begin + DragAcceptFiles(Handle, False); +end; +{$ENDIF VCL} + +procedure TStretchDemoForm.ExitApp(Sender: TObject); +begin + Close; +end; + +function TStretchDemoForm.ChangeDirectory: Boolean; +var + Dir, D: string; +begin + D := ExtractFileDir(FileName); + Dir := PathAddSeparator(D); + Result := (Dir <> FDir) and (Pos(FDir, Dir) <> 1); + if Result then + begin + FDir := Dir; + FilesPage.Caption := Format('Files in %s', [D]); + OpenDialog.InitialDir := D; + {$IFDEF HasShellCtrls} + FShellChangeNotifier.Root := D; + {$ELSE} + UpdateFileList; + {$ENDIF HasShellCtrls} + end; +end; + +procedure TStretchDemoForm.AddToFileList(const Directory: string; const FileInfo: TSearchRec); +begin + with FileListView.Items.Add do + begin + Caption := Directory + FileInfo.Name; + end; +end; + +procedure TStretchDemoForm.FileSearchTerminated(const ID: TFileSearchTaskID; const Aborted: Boolean); +begin + with FileListView do + Selected := FindCaption(0, FileName, False, True, False); + StatusBar.Panels[0].Text := Format('%d files', [FileListView.Items.Count]); + UpdateNavButtons; +end; + +procedure TStretchDemoForm.UpdateFileList; +begin + FileListView.Items.Clear; + with FileSearch do + begin + FileMask := GraphicFileMask(TGraphic); + RootDirectory := FDir; + OnTerminateTask := FileSearchTerminated; + ForEach(AddToFileList); + end; +end; + +procedure TStretchDemoForm.LoadFile(const AFileName: string); +begin + if not IsGraphicFile(AFileName) then + Exit; + FileName := AFileName; + OriginalImage.Picture.LoadFromFile(FileName); + if not ChangeDirectory then + UpdateNavButtons; + + UpdateCaption; + with FileListView do + Selected := FindCaption(0, FileName, False, True, False); + + StretchedImage.Picture.Graphic := nil; + InvalidateStretched; + if PageControl.ActivePage = FilesPage then + begin + {$IFDEF VCL} + if OriginalImage.Picture.Graphic is TMetaFile then + PageControl.ActivePage := OriginalPage + else + {$ENDIF VCL} + PageControl.ActivePage := FLastImagePage; + FocusControl(PageControl); + end; +end; + +procedure TStretchDemoForm.OpenFile(Sender: TObject); +begin + if OpenDialog.Execute then + LoadFile(OpenDialog.FileName); +end; + +procedure TStretchDemoForm.SelectFilter(Sender: TObject); +begin + with Sender as TMenuItem do + begin + Checked := True; + FResamplingFilter := TResamplingFilter(Tag); + InvalidateStretched; + end; +end; + +procedure TStretchDemoForm.DoStretch; +var + W, H: Integer; + T: LongWord; +begin + with OriginalImage.Picture do + if (Graphic = nil) {$IFDEF VCL} or (Graphic is TMetafile) {$ENDIF} then + Exit; + W := StretchedPage.Width-2; + H := StretchedPage.Height-2; + if FPreserveAspectRatio then + with OriginalImage.Picture.Graphic do + begin + if W * Height > H * Width then + W := H * Width div Height + else + H := W * Height div Width; + end; + if (FWidth <> W) or (FHeight <> H) then + begin + T := GetTickCount; + StretchedImage.Picture.Graphic := nil; + JclGraphics.Stretch(W, H, FResamplingFilter, 0, OriginalImage.Picture.Graphic, + StretchedImage.Picture.Bitmap); + with OriginalImage.Picture do + StatusBar.Panels[0].Text := Format('Original: %d x %d', [Width, Height]); + with StretchedImage.Picture do + StatusBar.Panels[1].Text := Format('Resized: %d x %d', [Width, Height]); + FWidth := W; + FHeight := H; + FStretchTime := GetTickCount - T; + with StretchedImage.Picture do + StatusBar.Panels[2].Text := Format('Resize time: %d msec', [FStretchTime]); + end; +end; + +procedure TStretchDemoForm.PreserveAspectRatio1Click(Sender: TObject); +begin + with Sender as TMenuItem do + begin + Checked := not Checked; + FPreserveAspectRatio := Checked; + InvalidateStretched; + end; +end; + +procedure TStretchDemoForm.LoadSelected; +begin + with FileListView do + if Selected <> nil then + LoadFile(Selected.Caption); +end; + +procedure TStretchDemoForm.PrevFile(Sender: TObject); +begin + if FileListIndex > 0 then + FileListIndex := FileListIndex - 1; + LoadSelected; +end; + +procedure TStretchDemoForm.NextFile(Sender: TObject); +begin + if FileListIndex < FileListView.Items.Count - 1 then + FileListIndex := FileListIndex + 1; + LoadSelected; +end; + +procedure TStretchDemoForm.UpdateCaption; +begin + if FileName <> '' then + Caption := Format('JCL Picture Viewer - %s', [FileName]); +end; + +procedure TStretchDemoForm.UpdateNavButtons; +begin + PrevItem.Enabled := FileListIndex > 0; + NextItem.Enabled := FileListIndex < FileListView.Items.Count - 1; + PrevItem.Enabled := FileListIndex > 0; + NextItem.Enabled := FileListIndex < FileListView.Items.Count - 1; +end; + +procedure TStretchDemoForm.FileListViewClick(Sender: TObject); +begin + LoadSelected; +end; + +procedure TStretchDemoForm.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +{$IFDEF VCL} +const + Key_Prior = VK_PRIOR; + Key_Next = VK_NEXT; +{$ENDIF VCL} +begin + case Key of + Key_Prior: + begin + PrevFile(Self); + Key := 0; + end; + Key_Next: + begin + NextFile(Self); + Key := 0; + end; + end; +end; + +procedure TStretchDemoForm.StretchedPageShow(Sender: TObject); +begin + UpdateStretched; +end; + +procedure TStretchDemoForm.UpdateStretched; +begin + if StretchedPage.Visible then + DoStretch; +end; + +procedure TStretchDemoForm.StretchedPageResize(Sender: TObject); +begin + UpdateStretched; +end; + +procedure TStretchDemoForm.InvalidateStretched; +begin + FWidth := 0; + FHeight := 0; + UpdateStretched; +end; + +{$IFDEF VCL} +procedure TStretchDemoForm.WMDropFiles(var Msg: TWMDropFiles); +begin + ProcessWMDropFiles(Msg, LoadFile); +end; +{$ENDIF VCL} + +procedure TStretchDemoForm.PageControlChanging(Sender: TObject; + var AllowChange: Boolean); +begin + if PageControl.ActivePage <> FilesPage then + FLastImagePage := PageControl.ActivePage; +end; + +{$IFDEF HasShellCtrls} +procedure TStretchDemoForm.ShellChange; +begin + UpdateFileList; +end; +{$ENDIF HasShellCtrls} + +function TStretchDemoForm.GetFileListIndex: Integer; +begin + Result := -1; + if FileListView.Selected <> nil then + Result := FileListView.Selected.Index; +end; + +procedure TStretchDemoForm.SetFileListIndex(const Value: Integer); +begin + if Value < 0 then + begin + if FileListView.Selected <> nil then + begin + FileListView.Selected.Selected := False; + end; + end + else + FileListView.Items[Value].Selected := True; +end; + +procedure TStretchDemoForm.FileListViewKeyDown(Sender: TObject; + var Key: Word; Shift: TShiftState); +begin + if Key = VK_RETURN then + LoadSelected; +end; + +procedure TStretchDemoForm.SetFileName(const Value: string); +begin + FFileName := PathGetLongName(Value); +end; + +end. diff --git a/official/1.104/examples/common/graphics/StretchGraphicExample.dof b/official/1.104/examples/common/graphics/StretchGraphicExample.dof new file mode 100644 index 0000000..4a388e0 --- /dev/null +++ b/official/1.104/examples/common/graphics/StretchGraphicExample.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\bin + diff --git a/official/1.104/examples/common/graphics/StretchGraphicExample.dpr b/official/1.104/examples/common/graphics/StretchGraphicExample.dpr new file mode 100644 index 0000000..491af7b --- /dev/null +++ b/official/1.104/examples/common/graphics/StretchGraphicExample.dpr @@ -0,0 +1,16 @@ +program StretchGraphicExample; + +{$I jcl.inc} + +uses + Forms, + StretchGraphicDemoMain in 'StretchGraphicDemoMain.pas' {StretchDemoForm}; + +{$R *.res} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TStretchDemoForm, StretchDemoForm); + Application.Run; +end. diff --git a/official/1.104/examples/common/graphics/StretchGraphicExample.res b/official/1.104/examples/common/graphics/StretchGraphicExample.res new file mode 100644 index 0000000000000000000000000000000000000000..093026528930ea46204ac34ba193dc8155a7cef9 GIT binary patch literal 876 zcmd^8F%H5o47>tT7X%&H$;ikL05LHDU&_DIp?mWPMn*;kq;R%dg$f2H7OY;JyR+3O ztpUIhDH*sO#C6pBW7ZVvRaH6Zi&oq?VoMY-*|X+uqINP;fNg$I1ziCnfrL13z>!j L&Q&@UGDQWRn6_4} literal 0 HcmV?d00001 diff --git a/official/1.104/examples/common/multimedia/MidiOutExample.dof b/official/1.104/examples/common/multimedia/MidiOutExample.dof new file mode 100644 index 0000000..4a388e0 --- /dev/null +++ b/official/1.104/examples/common/multimedia/MidiOutExample.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\bin + diff --git a/official/1.104/examples/common/multimedia/MidiOutExample.dpr b/official/1.104/examples/common/multimedia/MidiOutExample.dpr new file mode 100644 index 0000000..c45a25f --- /dev/null +++ b/official/1.104/examples/common/multimedia/MidiOutExample.dpr @@ -0,0 +1,16 @@ +program MidiOutExample; + +uses + Forms, + MidiOutExampleMain in 'MidiOutExampleMain.pas' {Keyboard}, + MidiOutExampleTuningDlg in 'MidiOutExampleTuningDlg.pas' {TuningDialog}; + +{$R *.RES} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TKeyboard, Keyboard); + Application.CreateForm(TTuningDialog, TuningDialog); + Application.Run; +end. diff --git a/official/1.104/examples/common/multimedia/MidiOutExample.res b/official/1.104/examples/common/multimedia/MidiOutExample.res new file mode 100644 index 0000000000000000000000000000000000000000..472f2e47297a46cf06bb2ce0c8024f600e93445f GIT binary patch literal 876 zcmb7Dv2N5r5S`;9xg)W{DJ54@#)?ixq5woi0mwzzd`4C)-)wZn8KKjRL~&IVegsim z<4;MMl8!BqmN)jD1QHD+KkvSIvoqseFA>ok$aw^&f7!#MgFZ#fWYA7dilal&Gfd{d zD_}xo0Hra(u1-$Sq_Y{=t)_t=*?Vay!e$CjOQd&(lrSF0Tls2mP+KZU0$}{QB){?Cac-k=ge)P zs@#gmop0R8g}oxl?IPC5q$+ilyo8%O(__-l!GrVd4Js^S-iEqTry#JnP8vd!s;FDl zq;Z||>|&v=4zWd2S?5$WWh!|QKY>F}P3_f(5WOWpd|j7mcHv`Ne;>F+kC;*qx`@}N zI@2b!D425=SVC0ra{+0Ysaf8YfGz8My5jwi7&srkpXp z9NZS0rZ02XvDWFgVg)9vo;QjnQKSDp@U9?#Ex_7v>500o()q z9vw!*|5}IN*3c784fkjixsOrfDQdkOu0=o1Pl)Io$oVn7qu2D7-UDyw1IB~>c`xiX POlUqo8g7N%q6z&5v1T5M literal 0 HcmV?d00001 diff --git a/official/1.104/examples/common/multimedia/MidiOutExampleMain.dfm b/official/1.104/examples/common/multimedia/MidiOutExampleMain.dfm new file mode 100644 index 0000000..4a2b7cc --- /dev/null +++ b/official/1.104/examples/common/multimedia/MidiOutExampleMain.dfm @@ -0,0 +1,488 @@ +object Keyboard: TKeyboard + Left = 145 + Top = 347 + ClientWidth = 520 + ClientHeight = 223 + HorzScrollBar.Range = 517 + VertScrollBar.Range = 209 + ActiveControl = MidiProgramNum + AutoScroll = False + Caption = 'MIDI Example' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = 11 + Font.Name = 'MS Sans Serif' + Font.Pitch = fpVariable + Font.Style = [] + OldCreateOrder = True + ShowHint = True + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object Key48: TSpeedButton + Tag = 48 + Left = 4 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 48 + OnMouseDown = KeyMouseDown + end + object Key50: TSpeedButton + Tag = 50 + Left = 24 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 50 + OnMouseDown = KeyMouseDown + end + object Key52: TSpeedButton + Tag = 52 + Left = 44 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 52 + OnMouseDown = KeyMouseDown + end + object Key53: TSpeedButton + Tag = 53 + Left = 64 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 53 + OnMouseDown = KeyMouseDown + end + object Key49: TSpeedButton + Tag = 49 + Left = 18 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 49 + OnMouseDown = KeyMouseDown + end + object Key51: TSpeedButton + Tag = 51 + Left = 38 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 51 + OnMouseDown = KeyMouseDown + end + object Key55: TSpeedButton + Tag = 55 + Left = 84 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 55 + OnMouseDown = KeyMouseDown + end + object Key57: TSpeedButton + Tag = 57 + Left = 104 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 57 + OnMouseDown = KeyMouseDown + end + object Key59: TSpeedButton + Tag = 59 + Left = 124 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 59 + OnMouseDown = KeyMouseDown + end + object Key54: TSpeedButton + Tag = 54 + Left = 78 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 54 + OnMouseDown = KeyMouseDown + end + object Key56: TSpeedButton + Tag = 56 + Left = 98 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 56 + OnMouseDown = KeyMouseDown + end + object Key58: TSpeedButton + Tag = 58 + Left = 118 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 58 + OnMouseDown = KeyMouseDown + end + object Key60: TSpeedButton + Tag = 60 + Left = 144 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 60 + OnMouseDown = KeyMouseDown + end + object Key62: TSpeedButton + Tag = 62 + Left = 164 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 62 + OnMouseDown = KeyMouseDown + end + object Key64: TSpeedButton + Tag = 64 + Left = 184 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 64 + OnMouseDown = KeyMouseDown + end + object Key65: TSpeedButton + Tag = 65 + Left = 204 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 65 + OnMouseDown = KeyMouseDown + end + object Key61: TSpeedButton + Tag = 61 + Left = 158 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 61 + OnMouseDown = KeyMouseDown + end + object Key63: TSpeedButton + Tag = 63 + Left = 178 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 63 + OnMouseDown = KeyMouseDown + end + object Key67: TSpeedButton + Tag = 67 + Left = 224 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 67 + OnMouseDown = KeyMouseDown + end + object Key69: TSpeedButton + Tag = 69 + Left = 244 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 69 + OnMouseDown = KeyMouseDown + end + object Key71: TSpeedButton + Tag = 71 + Left = 264 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 71 + OnMouseDown = KeyMouseDown + end + object Key66: TSpeedButton + Tag = 66 + Left = 218 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 66 + OnMouseDown = KeyMouseDown + end + object Key68: TSpeedButton + Tag = 68 + Left = 238 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 68 + OnMouseDown = KeyMouseDown + end + object Key70: TSpeedButton + Tag = 70 + Left = 258 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 70 + OnMouseDown = KeyMouseDown + end + object Key72: TSpeedButton + Tag = 72 + Left = 284 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 72 + OnMouseDown = KeyMouseDown + end + object Key74: TSpeedButton + Tag = 74 + Left = 304 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 74 + OnMouseDown = KeyMouseDown + end + object Key76: TSpeedButton + Tag = 76 + Left = 324 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 76 + OnMouseDown = KeyMouseDown + end + object Key77: TSpeedButton + Tag = 77 + Left = 344 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 77 + OnMouseDown = KeyMouseDown + end + object Key73: TSpeedButton + Tag = 73 + Left = 298 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 73 + OnMouseDown = KeyMouseDown + end + object Key75: TSpeedButton + Tag = 75 + Left = 318 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 75 + OnMouseDown = KeyMouseDown + end + object Key79: TSpeedButton + Tag = 79 + Left = 364 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 79 + OnMouseDown = KeyMouseDown + end + object Key81: TSpeedButton + Tag = 81 + Left = 384 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 81 + OnMouseDown = KeyMouseDown + end + object Key83: TSpeedButton + Tag = 83 + Left = 404 + Top = 36 + Width = 21 + Height = 97 + AllowAllUp = True + GroupIndex = 83 + OnMouseDown = KeyMouseDown + end + object Key78: TSpeedButton + Tag = 78 + Left = 358 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 78 + OnMouseDown = KeyMouseDown + end + object Key80: TSpeedButton + Tag = 80 + Left = 378 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 80 + OnMouseDown = KeyMouseDown + end + object Key82: TSpeedButton + Tag = 82 + Left = 398 + Top = 36 + Width = 13 + Height = 61 + AllowAllUp = True + GroupIndex = 82 + OnMouseDown = KeyMouseDown + end + object Label1: TLabel + Left = 440 + Top = 36 + Width = 75 + Height = 13 + Caption = 'MIDI Program #' + end + object Label2: TLabel + Left = 8 + Top = 12 + Width = 43 + Height = 13 + Caption = 'MIDI Out' + end + object Label3: TLabel + Left = 8 + Top = 144 + Width = 58 + Height = 13 + Caption = 'Pitch Wheel' + FocusControl = PitchBender + end + object Label4: TLabel + Left = 8 + Top = 184 + Width = 58 + Height = 13 + Caption = 'Mod. Wheel' + FocusControl = ModWheel + end + object MidiProgramNum: TSpinEdit + Left = 440 + Top = 60 + Width = 77 + Height = 22 + MaxValue = 127 + MinValue = 0 + TabOrder = 0 + Value = 0 + OnChange = MidiProgramNumChange + end + object PitchBender: TTrackBar + Left = 72 + Top = 136 + Width = 441 + Height = 33 + Hint = 'Pitch bender' + Max = 8191 + Min = -8192 + Orientation = trHorizontal + PageSize = 256 + Frequency = 2048 + Position = 0 + SelEnd = 0 + SelStart = 0 + TabOrder = 1 + TickMarks = tmBottomRight + TickStyle = tsAuto + OnChange = PitchBenderChange + end + object btnAllNotesOff: TButton + Left = 440 + Top = 104 + Width = 75 + Height = 25 + Caption = '&All Notes Off' + TabOrder = 2 + OnClick = btnAllNotesOffClick + end + object cbMidiOutSelect: TComboBox + Left = 68 + Top = 8 + Width = 253 + Height = 21 + Style = csDropDownList + ItemHeight = 13 + TabOrder = 3 + OnChange = cbMidiOutSelectChange + end + object ModWheel: TTrackBar + Left = 73 + Top = 176 + Width = 440 + Height = 33 + Hint = 'Pitch bender' + Max = 16383 + Orientation = trHorizontal + PageSize = 256 + Frequency = 2048 + Position = 0 + SelEnd = 0 + SelStart = 0 + TabOrder = 4 + TickMarks = tmBottomRight + TickStyle = tsAuto + OnChange = ModWheelChange + end + object KeyMenu: TPopupMenu + Left = 336 + Top = 8 + object TuningItem: TMenuItem + Caption = 'Tuning...' + OnClick = TuningItemClick + end + end +end diff --git a/official/1.104/examples/common/multimedia/MidiOutExampleMain.pas b/official/1.104/examples/common/multimedia/MidiOutExampleMain.pas new file mode 100644 index 0000000..ed0e4a8 --- /dev/null +++ b/official/1.104/examples/common/multimedia/MidiOutExampleMain.pas @@ -0,0 +1,194 @@ +// +// by Robert Rossmair, June 5 2002 +// +unit MidiOutExampleMain; + +interface + +uses + SysUtils, Classes, Controls, Forms, Menus, StdCtrls, ComCtrls, Buttons, Spin, + JclMIDI; + +type + TKeyboard = class(TForm) + Key48: TSpeedButton; + Key49: TSpeedButton; + Key51: TSpeedButton; + Key50: TSpeedButton; + Key55: TSpeedButton; + Key54: TSpeedButton; + Key53: TSpeedButton; + Key52: TSpeedButton; + Key58: TSpeedButton; + Key56: TSpeedButton; + Key59: TSpeedButton; + Key57: TSpeedButton; + MidiProgramNum: TSpinEdit; + Label1: TLabel; + KeyMenu: TPopupMenu; + TuningItem: TMenuItem; + Key72: TSpeedButton; + Key74: TSpeedButton; + Key76: TSpeedButton; + Key77: TSpeedButton; + Key73: TSpeedButton; + Key75: TSpeedButton; + Key79: TSpeedButton; + Key81: TSpeedButton; + Key83: TSpeedButton; + Key78: TSpeedButton; + Key80: TSpeedButton; + Key82: TSpeedButton; + Key60: TSpeedButton; + Key62: TSpeedButton; + Key64: TSpeedButton; + Key65: TSpeedButton; + Key61: TSpeedButton; + Key63: TSpeedButton; + Key67: TSpeedButton; + Key69: TSpeedButton; + Key71: TSpeedButton; + Key66: TSpeedButton; + Key68: TSpeedButton; + Key70: TSpeedButton; + PitchBender: TTrackBar; + btnAllNotesOff: TButton; + cbMidiOutSelect: TComboBox; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + ModWheel: TTrackBar; + procedure FormCreate(Sender: TObject); + procedure KeyMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure KeyMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure MidiProgramNumChange(Sender: TObject); + procedure TuningItemClick(Sender: TObject); + procedure PitchBenderChange(Sender: TObject); + procedure KeyClick(Sender: TObject); + procedure btnAllNotesOffClick(Sender: TObject); + procedure cbMidiOutSelectChange(Sender: TObject); + procedure ModWheelChange(Sender: TObject); + private + FMidiOut: IJclMidiOut; + FChannel: TMidiChannel; + Keys: array[TMidiNote] of TSpeedButton; + procedure InitKeyboard; + procedure AllNotesOff; + end; + +var + Keyboard: TKeyboard; + +implementation + +uses MidiOutExampleTuningDlg; + +{$R *.dfm} + +procedure TKeyboard.FormCreate(Sender: TObject); +begin + FChannel := 1; + GetMidiOutputs(cbMidiOutSelect.Items); + cbMidiOutSelect.ItemIndex := 0; + cbMidiOutSelectChange(Self); + InitKeyboard; +end; + +procedure TKeyboard.InitKeyboard; +var + Note: TMidiNote; +begin + for Note := Low(Keys) to High(Keys) do + begin + Keys[Note] := FindComponent(Format('Key%d', [Note])) as TSpeedButton; + if Keys[Note] <> nil then + with Keys[Note] do + begin + PopupMenu := KeyMenu; + Hint := Format('MIDI Note #%d'#13#10'%s', [Tag, MidiNoteToStr(Tag)]); + end; + end; +end; + +procedure TKeyboard.AllNotesOff; +var + Note: TMidiNote; +begin + if Assigned(FMidiOut) then + FMidiOut.SwitchAllNotesOff(FChannel); + for Note := Low(Note) to High(Note) do + if Assigned(Keys[Note]) then + Keys[Note].Down := False; +end; + +procedure TKeyboard.KeyMouseDown(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Integer); +begin + if Button = mbLeft then + if (Sender as TSpeedButton).Down then + FMidiOut.SendNoteOff(FChannel, TComponent(Sender).Tag, 127) + else + FMidiOut.SendNoteOn(FChannel, TComponent(Sender).Tag, 127); +end; + +procedure TKeyboard.KeyMouseUp( + Sender: TObject; + Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if Button = mbLeft then + FMidiOut.SendNoteOff(FChannel, TComponent(Sender).Tag, 127); +end; + +procedure TKeyboard.MidiProgramNumChange(Sender: TObject); +begin + FMidiOut.SendProgramChange(FChannel, MidiProgramNum.Value); +end; + +procedure TKeyboard.TuningItemClick(Sender: TObject); +begin + with TuningDialog do + begin + MIDIKey.Value := KeyMenu.PopupComponent.Tag; + if ShowModal = mrOK then + FMidiOut.SendSingleNoteTuningChange(0, 0, [MidiSingleNoteTuningData(MIDIKey.Value, MIDIFrequency)]); + end; +end; + +procedure TKeyboard.PitchBenderChange(Sender: TObject); +begin + FMidiOut.SendPitchWheelChange(FChannel, PitchBender.Position + MidiPitchWheelCenter); +end; + +procedure TKeyboard.ModWheelChange(Sender: TObject); +begin + FMidiOut.SendModulationWheelChangeHR(FChannel, ModWheel.Position); +end; + +procedure TKeyboard.KeyClick(Sender: TObject); +begin + with Sender as TSpeedButton do + begin + if Down then + FMidiOut.SendNoteOn(FChannel, TComponent(Sender).Tag, 127) + else + FMidiOut.SendNoteOff(FChannel, TComponent(Sender).Tag, 127); + end; +end; + +procedure TKeyboard.btnAllNotesOffClick(Sender: TObject); +begin + AllNotesOff; +end; + +procedure TKeyboard.cbMidiOutSelectChange(Sender: TObject); +begin + AllNotesOff; + FMidiOut := MidiOut(cbMidiOutSelect.ItemIndex); + FMidiOut.SendProgramChange(FChannel, MidiProgramNum.Value); +end; + +end. + diff --git a/official/1.104/examples/common/multimedia/MidiOutExampleTuningDlg.dfm b/official/1.104/examples/common/multimedia/MidiOutExampleTuningDlg.dfm new file mode 100644 index 0000000..f35bbc4 --- /dev/null +++ b/official/1.104/examples/common/multimedia/MidiOutExampleTuningDlg.dfm @@ -0,0 +1,102 @@ +object TuningDialog: TTuningDialog + Left = 245 + Top = 108 + BorderStyle = bsDialog + Caption = 'Tuning' + ClientHeight = 177 + ClientWidth = 313 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = True + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 13 + object Bevel1: TBevel + Left = 8 + Top = 8 + Width = 297 + Height = 117 + Shape = bsFrame + end + object MIDIFreqLabel: TLabel + Left = 36 + Top = 56 + Width = 110 + Height = 13 + Caption = '&MIDI relative frequency' + end + object FreqLabel: TLabel + Left = 36 + Top = 84 + Width = 84 + Height = 13 + Caption = 'Frequency [Hertz]' + end + object MIDIKeyLabel: TLabel + Left = 36 + Top = 28 + Width = 81 + Height = 13 + Caption = 'MIDI key number' + end + object NoteLabel: TLabel + Left = 224 + Top = 28 + Width = 49 + Height = 13 + Caption = 'NoteLabel' + end + object OKBtn: TButton + Left = 79 + Top = 140 + Width = 75 + Height = 25 + Caption = 'OK' + Default = True + ModalResult = 1 + TabOrder = 0 + end + object CancelBtn: TButton + Left = 159 + Top = 140 + Width = 75 + Height = 25 + Cancel = True + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 1 + end + object MIDIFreq: TEdit + Left = 156 + Top = 52 + Width = 121 + Height = 21 + TabOrder = 2 + OnChange = MIDIFreqChange + OnExit = MIDIFreqExit + end + object FreqHertz: TEdit + Left = 156 + Top = 80 + Width = 121 + Height = 21 + TabOrder = 3 + OnChange = FreqHertzChange + OnExit = FreqHertzExit + end + object MIDIKey: TSpinEdit + Left = 156 + Top = 24 + Width = 53 + Height = 22 + MaxValue = 127 + MinValue = 0 + TabOrder = 4 + Value = 0 + OnChange = MIDIKeyChange + end +end diff --git a/official/1.104/examples/common/multimedia/MidiOutExampleTuningDlg.pas b/official/1.104/examples/common/multimedia/MidiOutExampleTuningDlg.pas new file mode 100644 index 0000000..7de83f5 --- /dev/null +++ b/official/1.104/examples/common/multimedia/MidiOutExampleTuningDlg.pas @@ -0,0 +1,170 @@ +// +// Robert Rossmair, 2002 +// +unit MidiOutExampleTuningDlg; + +{$I jcl.inc} + +interface + +uses + Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, + Buttons, ExtCtrls, Spin, + JclMath, JclMidi; + +type + TTuningDialog = class(TForm) + OKBtn: TButton; + CancelBtn: TButton; + Bevel1: TBevel; + MIDIFreq: TEdit; + FreqHertz: TEdit; + MIDIFreqLabel: TLabel; + FreqLabel: TLabel; + MIDIKey: TSpinEdit; + MIDIKeyLabel: TLabel; + NoteLabel: TLabel; + procedure MIDIKeyChange(Sender: TObject); + procedure MIDIFreqChange(Sender: TObject); + procedure FreqHertzChange(Sender: TObject); + procedure MIDIFreqExit(Sender: TObject); + procedure FreqHertzExit(Sender: TObject); + private + FInMIDIFreqChange: Boolean; + FInFreqHertzChange: Boolean; + FChangingFrequency: Boolean; + FChangingMidiFrequency: Boolean; + FFrequency: Single; + FMidiFrequency: Single; + procedure SetFrequency(Value: Single); + procedure SetMidiFrequency(Value: Single); + public + property Frequency: Single read FFrequency write SetFrequency; // Hertz + property MidiFrequency: Single read FMidiFrequency write SetMidiFrequency; + end; + +var + TuningDialog: TTuningDialog; + +implementation + +{$R *.dfm} + +const + HalftonesPerOctave = 12; + MiddleA = 440.0; // Hertz + MidiMiddleA = 69; // A3 = 440 Hertz + Digits = 6; + MIDIFreqMax = 127.99993896; + FreqHertzMin = 8.17579892; + FreqHertzMax = 13289.70346552; + +function Hertz(MIDINote: Extended): Extended; +begin + Hertz := TwoToY((MIDINote - MidiMiddleA) / HalftonesPerOctave) * MiddleA; +end; + +function MIDINote(Hertz: Extended): Extended; +begin + if Hertz < 1.0 then + MIDINote := Low(Integer) + else + MIDINote := LogBase2(Hertz / MiddleA) * HalftonesPerOctave + MidiMiddleA; +end; + +procedure TTuningDialog.MIDIKeyChange(Sender: TObject); +begin + MIDIFrequency := MIDIKey.Value; + NoteLabel.Caption := MidiNoteToStr(MIDIKey.Value); +end; + +procedure TTuningDialog.MIDIFreqChange(Sender: TObject); +var + F: Extended; +begin + if FInFreqHertzChange or (MIDIFreq.Text = '') then + Exit; + FInMIDIFreqChange := True; + try + {$IFDEF COMPILER6_UP} + if TryStrToFloat(MidiFreq.Text, F) then + {$ELSE} + if TextToFloat(PChar(MidiFreq.Text), F, fvExtended) then + {$ENDIF COMPILER6_UP} + MidiFrequency := F; + finally + FInMIDIFreqChange := False; + end; +end; + +procedure TTuningDialog.FreqHertzChange(Sender: TObject); +var + F: Extended; +begin + if FInMIDIFreqChange or (FreqHertz.Text = '') then + Exit; + FInFreqHertzChange := True; + try + {$IFDEF COMPILER6_UP} + if TryStrToFloat(FreqHertz.Text, F) then + {$ELSE} + if TextToFloat(PChar(FreqHertz.Text), F, fvExtended) then + {$ENDIF COMPILER6_UP} + Frequency := F; + finally + FInFreqHertzChange := False; + end; +end; + +procedure TTuningDialog.SetFrequency(Value: Single); +begin + if FChangingFrequency or (Value = Frequency) then + Exit; + FChangingFrequency := True; + try + if Value < FreqHertzMin then + Value := FreqHertzMin + else + if Value > FreqHertzMax then + Value := FreqHertzMax; + FFrequency := Value; + if not FInFreqHertzChange then + FreqHertz.Text := FloatToStrF(Value, ffFixed, 9, Digits); + MidiFrequency := MIDINote(Value); + finally + FChangingFrequency := False; + end; +end; + +procedure TTuningDialog.SetMidiFrequency(Value: Single); +begin + if FChangingMidiFrequency then + // or (Value = MidiFrequency) then + Exit; + if Value < 0 then + Value := 0 + else + if Value > MidiFreqMax then + Value := MidiFreqMax; + FChangingMidiFrequency := True; + try + FMidiFrequency := Value; + if not FInMidiFreqChange then + MIDIFreq.Text := FloatToStrF(Value, ffFixed, 9, Digits); + Frequency := Hertz(Value); + finally + FChangingMidiFrequency := False; + end; +end; + +procedure TTuningDialog.MIDIFreqExit(Sender: TObject); +begin + MIDIFreq.Text := FloatToStrF(MidiFrequency, ffFixed, 9, Digits); +end; + +procedure TTuningDialog.FreqHertzExit(Sender: TObject); +begin + FreqHertz.Text := FloatToStrF(Frequency, ffFixed, 9, Digits); +end; + +end. diff --git a/official/1.104/examples/common/numformat/NumFormatExample.dof b/official/1.104/examples/common/numformat/NumFormatExample.dof new file mode 100644 index 0000000..d447a0b --- /dev/null +++ b/official/1.104/examples/common/numformat/NumFormatExample.dof @@ -0,0 +1,2 @@ +[Directories] +OutputDir=../../../bin diff --git a/official/1.104/examples/common/numformat/NumFormatExample.dpr b/official/1.104/examples/common/numformat/NumFormatExample.dpr new file mode 100644 index 0000000..7b7e548 --- /dev/null +++ b/official/1.104/examples/common/numformat/NumFormatExample.dpr @@ -0,0 +1,16 @@ +program NumFormatExample; + +{$I jcl.inc} + +uses + Forms, + NumFormatExampleMain in 'NumFormatExampleMain.pas' {MainForm}; + +{$R *.res} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/official/1.104/examples/common/numformat/NumFormatExample.res b/official/1.104/examples/common/numformat/NumFormatExample.res new file mode 100644 index 0000000000000000000000000000000000000000..ff24fa70c6a61f1121dd5a43dd91ace8c388f935 GIT binary patch literal 876 zcmd^8F%H5o47>nR7X%&H>Bz_r05LHDU&_DIp?mWPMn*;kq;R%dg$f2H7OY;JyR+3O ztpT7SQZjHmi0i2L$EwrQkA)>9T!WhzT)=oT+ik~|6g)` zBHp6jpWOz9kh$H7a;eE7f5rpY+=1l{mW1 literal 0 HcmV?d00001 diff --git a/official/1.104/examples/common/numformat/NumFormatExampleMain.dfm b/official/1.104/examples/common/numformat/NumFormatExampleMain.dfm new file mode 100644 index 0000000..dc8d155 --- /dev/null +++ b/official/1.104/examples/common/numformat/NumFormatExampleMain.dfm @@ -0,0 +1,208 @@ +object MainForm: TMainForm + Left = 234 + Top = 223 + Width = 800 + Height = 581 + ActiveControl = ValueEdit + Caption = 'TJclNumericFormat Example' + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + object Label1: TLabel + Left = 8 + Top = 12 + Width = 78 + Height = 15 + Caption = 'Decimal value' + end + object Label2: TLabel + Left = 320 + Top = 12 + Width = 52 + Height = 15 + Caption = 'Precision' + end + object ValueEdit: TEdit + Left = 100 + Top = 8 + Width = 149 + Height = 23 + TabOrder = 0 + Text = '123456789' + OnChange = ValueEditChange + end + object EvalBtn: TButton + Left = 704 + Top = 8 + Width = 75 + Height = 25 + Caption = 'Evaluate' + TabOrder = 8 + OnClick = EvalBtnClick + end + object RandBtn: TButton + Left = 704 + Top = 36 + Width = 75 + Height = 25 + Caption = 'Random' + TabOrder = 9 + OnClick = RandBtnClick + end + object PrecisionEdit: TSpinEdit + Left = 380 + Top = 8 + Width = 81 + Height = 23 + MaxValue = 64 + MinValue = 1 + TabOrder = 1 + Value = 9 + OnChange = PrecisionEditChange + end + object Output: TMemo + Left = 0 + Top = 120 + Width = 800 + Height = 461 + Align = alBottom + Anchors = [akLeft, akTop, akRight, akBottom] + Font.Color = clBlack + Font.Height = 16 + Font.Name = 'Courier' + ParentFont = False + ScrollBars = ssAutoBoth + TabOrder = 12 + WordWrap = False + end + object BlockSeparatorSelector: TComboBox + Left = 632 + Top = 36 + Width = 57 + Height = 23 + Style = csDropDownList + ItemHeight = 17 + Items.Strings = ( + ',' + ' ' + '|') + ItemIndex = 0 + TabOrder = 13 + Text = ',' + OnChange = BlockSeparatorSelectorChange + end + object Label3: TLabel + Left = 504 + Top = 40 + Width = 109 + Height = 15 + Caption = 'DigitBlockSeparator' + end + object Label4: TLabel + Left = 504 + Top = 68 + Width = 78 + Height = 15 + Caption = 'DigitBlockSize' + end + object BlockSizeEdit: TSpinEdit + Left = 632 + Top = 64 + Width = 57 + Height = 23 + TabOrder = 7 + Value = 3 + OnChange = BlockSizeEditChange + end + object cbShowPlusSign: TCheckBox + Left = 100 + Top = 32 + Width = 149 + Height = 31 + Caption = 'Show plus sign' + TabOrder = 10 + OnClick = cbShowPlusSignClick + end + object Label5: TLabel + Left = 276 + Top = 68 + Width = 95 + Height = 15 + Caption = 'ExponentDivision' + end + object ExpDivisionEdit: TSpinEdit + Left = 380 + Top = 64 + Width = 81 + Height = 23 + MaxValue = 12 + MinValue = 1 + TabOrder = 3 + Value = 3 + OnChange = ExpDivisionEditChange + end + object WidthEdit: TSpinEdit + Left = 380 + Top = 92 + Width = 81 + Height = 23 + TabOrder = 4 + Value = 4 + OnChange = WidthEditChange + end + object Label6: TLabel + Left = 340 + Top = 96 + Width = 31 + Height = 15 + Caption = 'Width' + end + object cbZeroPadding: TCheckBox + Left = 100 + Top = 64 + Width = 149 + Height = 30 + Caption = 'Zero padding' + TabOrder = 11 + OnClick = cbZeroPaddingClick + end + object Label7: TLabel + Left = 504 + Top = 12 + Width = 49 + Height = 15 + Caption = 'Multiplier' + end + object MultiplierSelector: TComboBox + Left = 632 + Top = 8 + Width = 57 + Height = 23 + Style = csDropDownList + ItemHeight = 17 + Items.Strings = ( + #215 + '*') + ItemIndex = 0 + TabOrder = 18 + Text = #215 + OnChange = MultiplierSelectorChange + end + object Label8: TLabel + Left = 260 + Top = 40 + Width = 111 + Height = 15 + Caption = 'Fractional part digits' + end + object FractionDigitsEdit: TSpinEdit + Left = 380 + Top = 36 + Width = 81 + Height = 23 + MaxValue = 64 + TabOrder = 2 + Value = 6 + OnChange = FractionDigitsEditChange + end +end diff --git a/official/1.104/examples/common/numformat/NumFormatExampleMain.pas b/official/1.104/examples/common/numformat/NumFormatExampleMain.pas new file mode 100644 index 0000000..60721ff --- /dev/null +++ b/official/1.104/examples/common/numformat/NumFormatExampleMain.pas @@ -0,0 +1,221 @@ +unit NumFormatExampleMain; + +interface + +uses + Math, SysUtils, Classes, + Windows, Graphics, Controls, Forms, StdCtrls, ComCtrls, Spin, + JclSysUtils; + +type + TMainForm = class(TForm) + ValueEdit: TEdit; + EvalBtn: TButton; + Label1: TLabel; + RandBtn: TButton; + PrecisionEdit: TSpinEdit; + Label2: TLabel; + Output: TMemo; + BlockSeparatorSelector: TComboBox; + Label3: TLabel; + Label4: TLabel; + BlockSizeEdit: TSpinEdit; + cbShowPlusSign: TCheckBox; + Label5: TLabel; + ExpDivisionEdit: TSpinEdit; + WidthEdit: TSpinEdit; + Label6: TLabel; + cbZeroPadding: TCheckBox; + Label7: TLabel; + MultiplierSelector: TComboBox; + Label8: TLabel; + FractionDigitsEdit: TSpinEdit; + procedure EvalBtnClick(Sender: TObject); + procedure RandBtnClick(Sender: TObject); + procedure ValueEditChange(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure BlockSizeEditChange(Sender: TObject; NewValue: Integer); + procedure BlockSeparatorSelectorChange(Sender: TObject); + procedure PrecisionEditChange(Sender: TObject; NewValue: Integer); + procedure cbShowPlusSignClick(Sender: TObject); + procedure ExpDivisionEditChange(Sender: TObject; NewValue: Integer); + procedure WidthEditChange(Sender: TObject; NewValue: Integer); + procedure cbZeroPaddingClick(Sender: TObject); + procedure MultiplierSelectorChange(Sender: TObject); + procedure FractionDigitsEditChange(Sender: TObject; + NewValue: Integer); + private + { Private declarations } + FNumFormat: TJclNumericFormat; + procedure Display; + public + { Public declarations } + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.dfm} + +procedure TMainForm.FormCreate(Sender: TObject); +begin + FNumFormat := TJclNumericFormat.Create; + FNumFormat.ExponentDivision := ExpDivisionEdit.Value; + FNumFormat.NumberOfFractionalDigits := FractionDigitsEdit.Value; + FNumFormat.Width := WidthEdit.Value; + FNumFormat.DigitBlockSize := BlockSizeEdit.Value; + BlockSeparatorSelector.Items[0] := FNumFormat.DigitBlockSeparator; + Display; +end; + +procedure TMainForm.FormDestroy(Sender: TObject); +begin + FNumFormat.Free; +end; + +procedure TMainForm.Display; +var + Base: TNumericSystemBase; + S, Mantissa: string; + Exponent: Integer; + X: Extended; + {$IFDEF COMPILER6_UP} + C: TPoint; + {$ENDIF COMPILER6_UP} +begin + if not Assigned(FNumFormat) then + Exit; + X := StrToFloat(ValueEdit.Text); + FNumFormat.Precision := PrecisionEdit.Value; + Output.Lines.BeginUpdate; + try + Output.Lines.Clear; + for Base := Low(TNumericSystemBase) to High(TNumericSystemBase) do + begin + FNumFormat.Base := Base; + FNumFormat.GetMantissaExp(X, Mantissa, Exponent); + if Exponent = 0 then + S := Mantissa + else + S := Format('%s %s %d^%d', [Mantissa, FNumFormat.Multiplier, Base, Exponent]); + Output.Lines.Add(Format('Base %2d: %s', [Base, S])); + end; + {$IFDEF COMPILER6_UP} + C.X := 0; + C.Y := 0; + Output.CaretPos := C; + {$ENDIF COMPILER6_UP} + finally + Output.Lines.EndUpdate; + end; +end; + +procedure TMainForm.EvalBtnClick(Sender: TObject); +begin + Display; +end; + +procedure TMainForm.RandBtnClick(Sender: TObject); +begin + ValueEdit.Text := FloatToStr(Power(Random * 4 -2, Random(400))); + EvalBtn.Enabled := False; + Display; +end; + +procedure TMainForm.ValueEditChange(Sender: TObject); +begin + EvalBtn.Enabled := True; +end; + +procedure TMainForm.BlockSizeEditChange(Sender: TObject; NewValue: Integer); +begin + if Assigned(FNumFormat) then + begin + FNumFormat.DigitBlockSize := BlockSizeEdit.Value; + Display; + end; +end; + +procedure TMainForm.BlockSeparatorSelectorChange(Sender: TObject); +begin + if Assigned(FNumFormat) then + begin + FNumFormat.DigitBlockSeparator := Char(BlockSeparatorSelector.Text[1]); + Display; + end; +end; + +procedure TMainForm.PrecisionEditChange(Sender: TObject; NewValue: Integer); +begin + if Assigned(FNumFormat) then + begin + FNumFormat.Precision := PrecisionEdit.Value; + Display; + end; +end; + +procedure TMainForm.cbShowPlusSignClick(Sender: TObject); +begin + if Assigned(FNumFormat) then + begin + FNumFormat.ShowPositiveSign := cbShowPlusSign.Checked; + Display; + end; +end; + +procedure TMainForm.ExpDivisionEditChange(Sender: TObject; + NewValue: Integer); +begin + if Assigned(FNumFormat) then + begin + FNumFormat.ExponentDivision := ExpDivisionEdit.Value; + Display; + end; +end; + +procedure TMainForm.WidthEditChange(Sender: TObject; NewValue: Integer); +begin + if Assigned(FNumFormat) then + begin + FNumFormat.Width := WidthEdit.Value; + Display; + end; +end; + +procedure TMainForm.cbZeroPaddingClick(Sender: TObject); +begin + if Assigned(FNumFormat) then + begin + if cbZeroPadding.Checked then + FNumFormat.PaddingChar := '0' + else + FNumFormat.PaddingChar := ' '; + Display; + end; +end; + +procedure TMainForm.MultiplierSelectorChange(Sender: TObject); +begin + if Assigned(FNumFormat) then + begin + FNumFormat.Multiplier := MultiplierSelector.Text; + Display; + end; +end; + +procedure TMainForm.FractionDigitsEditChange(Sender: TObject; + NewValue: Integer); +begin + if Assigned(FNumFormat) then + begin + FNumFormat.NumberOfFractionalDigits := FractionDigitsEdit.Value; + Display; + end; +end; + +initialization + Randomize; +end. diff --git a/official/1.104/examples/common/pcre/PCREDemo.dof b/official/1.104/examples/common/pcre/PCREDemo.dof new file mode 100644 index 0000000..abe45c2 --- /dev/null +++ b/official/1.104/examples/common/pcre/PCREDemo.dof @@ -0,0 +1,2 @@ +[Directories] +OutputDir=..\..\..\bin diff --git a/official/1.104/examples/common/pcre/PCREDemo.dpr b/official/1.104/examples/common/pcre/PCREDemo.dpr new file mode 100644 index 0000000..94dfc52 --- /dev/null +++ b/official/1.104/examples/common/pcre/PCREDemo.dpr @@ -0,0 +1,17 @@ +program PCREDemo; + +{$I jcl.inc} + +uses + Forms, + PCREDemoMain in 'PCREDemoMain.pas' {frmMain}; + +{$R *.res} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.Title := 'JclPCRE Demo'; + Application.CreateForm(TfrmMain, frmMain); + Application.Run; +end. diff --git a/official/1.104/examples/common/pcre/PCREDemo.res b/official/1.104/examples/common/pcre/PCREDemo.res new file mode 100644 index 0000000000000000000000000000000000000000..ff24fa70c6a61f1121dd5a43dd91ace8c388f935 GIT binary patch literal 876 zcmd^8F%H5o47>nR7X%&H>Bz_r05LHDU&_DIp?mWPMn*;kq;R%dg$f2H7OY;JyR+3O ztpT7SQZjHmi0i2L$EwrQkA)>9T!WhzT)=oT+ik~|6g)` zBHp6jpWOz9kh$H7a;eE7f5rpY+=1l{mW1 literal 0 HcmV?d00001 diff --git a/official/1.104/examples/common/pcre/PCREDemoMain.dfm b/official/1.104/examples/common/pcre/PCREDemoMain.dfm new file mode 100644 index 0000000..6fae74a --- /dev/null +++ b/official/1.104/examples/common/pcre/PCREDemoMain.dfm @@ -0,0 +1,233 @@ +object frmMain: TfrmMain + Left = 300 + Top = 115 + ClientWidth = 462 + ClientHeight = 334 + Caption = 'JclPCRE Demo' + Color = clBtnFace + Constraints.MinHeight = 370 + Constraints.MinWidth = 470 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Shell Dlg 2' + Font.Style = [] + OldCreateOrder = False + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 12 + Top = 10 + Width = 96 + Height = 13 + Caption = 'Reg&ular Expression:' + FocusControl = edRegExpr + end + object edRegExpr: TEdit + Left = 12 + Top = 24 + Width = 271 + Height = 21 + Anchors = [akLeft, akTop, akRight] + TabOrder = 0 + OnChange = edRegExprChange + end + object btnFind: TButton + Left = 292 + Top = 24 + Width = 75 + Height = 25 + Action = acFind + Anchors = [akTop, akRight] + TabOrder = 1 + end + object btnFindNext: TButton + Left = 370 + Top = 24 + Width = 75 + Height = 25 + Action = acFindNext + Anchors = [akTop, akRight] + TabOrder = 2 + end + object reFile: TMemo + Left = 12 + Top = 54 + Width = 437 + Height = 180 + Anchors = [akLeft, akTop, akRight, akBottom] + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Courier New' + Font.Style = [] + HideSelection = False + ParentFont = False + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 3 + WantReturns = False + WordWrap = False + end + object btnOpen: TButton + Left = 364 + Top = 294 + Width = 75 + Height = 25 + Action = acOpen + Anchors = [akRight, akBottom] + TabOrder = 4 + end + object chkIgnoreCase: TCheckBox + Left = 18 + Top = 244 + Width = 97 + Height = 17 + Anchors = [akLeft, akBottom] + Caption = '&Ignore Case' + Checked = True + State = cbChecked + TabOrder = 5 + end + object chkMultiLine: TCheckBox + Left = 18 + Top = 262 + Width = 97 + Height = 17 + Anchors = [akLeft, akBottom] + Caption = '&Multi Line' + Checked = True + State = cbChecked + TabOrder = 6 + end + object chkDotAll: TCheckBox + Left = 18 + Top = 280 + Width = 97 + Height = 17 + Anchors = [akLeft, akBottom] + Caption = '&Dot All' + TabOrder = 7 + end + object chkExtended: TCheckBox + Left = 18 + Top = 298 + Width = 97 + Height = 17 + Anchors = [akLeft, akBottom] + Caption = '&Extended' + TabOrder = 8 + end + object chkAnchored: TCheckBox + Left = 132 + Top = 244 + Width = 97 + Height = 17 + Anchors = [akLeft, akBottom] + Caption = '&Anchored' + TabOrder = 9 + end + object chkDollarEndOnly: TCheckBox + Left = 132 + Top = 262 + Width = 97 + Height = 17 + Anchors = [akLeft, akBottom] + Caption = 'Dollar End Onl&y' + TabOrder = 10 + end + object chkExtra: TCheckBox + Left = 132 + Top = 280 + Width = 97 + Height = 17 + Anchors = [akLeft, akBottom] + Caption = 'Ex&tra' + TabOrder = 11 + end + object chkNotBOL: TCheckBox + Left = 132 + Top = 298 + Width = 97 + Height = 17 + Anchors = [akLeft, akBottom] + Caption = 'Not &BOL' + TabOrder = 12 + end + object chkNotEOL: TCheckBox + Left = 246 + Top = 244 + Width = 97 + Height = 17 + Anchors = [akLeft, akBottom] + Caption = 'Not EO&L' + TabOrder = 13 + end + object chkUnGreedy: TCheckBox + Left = 246 + Top = 262 + Width = 97 + Height = 17 + Anchors = [akLeft, akBottom] + Caption = '&Ungreedy' + Checked = True + State = cbChecked + TabOrder = 14 + end + object chkNotEmpty: TCheckBox + Left = 246 + Top = 280 + Width = 97 + Height = 17 + Anchors = [akLeft, akBottom] + Caption = 'Not Em&pty' + Checked = True + State = cbChecked + TabOrder = 15 + end + object chkUTF8: TCheckBox + Left = 246 + Top = 298 + Width = 97 + Height = 17 + Anchors = [akLeft, akBottom] + Caption = 'UTF&8' + TabOrder = 16 + end + object sbMain: TStatusBar + Left = 0 + Top = 324 + Width = 462 + Height = 19 + Panels = < + item + Width = 50 + end> + SimplePanel = False + end + object alMain: TActionList + Left = 144 + Top = 102 + object acFind: TAction + Caption = '&Find' + ShortCut = 16454 + OnExecute = acFindExecute + end + object acFindNext: TAction + Caption = 'Find &Next' + ShortCut = 114 + OnExecute = acFindNextExecute + end + object acOpen: TAction + Caption = '&Open...' + ShortCut = 16463 + OnExecute = acOpenExecute + end + end + object odOpen: TOpenDialog + Left = 240 + Top = 120 + end +end diff --git a/official/1.104/examples/common/pcre/PCREDemoMain.pas b/official/1.104/examples/common/pcre/PCREDemoMain.pas new file mode 100644 index 0000000..ed0f523 --- /dev/null +++ b/official/1.104/examples/common/pcre/PCREDemoMain.pas @@ -0,0 +1,200 @@ +unit PCREDemoMain; + +interface + +uses + Windows, Messages, + SysUtils, Classes, Forms, Dialogs, ActnList, ComCtrls, StdCtrls, Controls, + JclPCRE; + +type + TfrmMain = class(TForm) + edRegExpr: TEdit; + btnFind: TButton; + btnFindNext: TButton; + Label1: TLabel; + reFile: TMemo; + btnOpen: TButton; + alMain: TActionList; + acFind: TAction; + acFindNext: TAction; + acOpen: TAction; + odOpen: TOpenDialog; + chkIgnoreCase: TCheckBox; + chkMultiLine: TCheckBox; + chkDotAll: TCheckBox; + chkExtended: TCheckBox; + chkAnchored: TCheckBox; + chkDollarEndOnly: TCheckBox; + chkExtra: TCheckBox; + chkNotBOL: TCheckBox; + chkNotEOL: TCheckBox; + chkUnGreedy: TCheckBox; + chkNotEmpty: TCheckBox; + chkUTF8: TCheckBox; + sbMain: TStatusBar; + procedure acOpenExecute(Sender: TObject); + procedure acFindExecute(Sender: TObject); + procedure acFindNextExecute(Sender: TObject); + procedure edRegExprChange(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure FormCreate(Sender: TObject); + + private + { Private declarations } + RE: TJclRegEx; + FMatchIndex: integer; + procedure SelectText(Range: TJclCaptureRange); + procedure Match; + function GetUIOptions: TJclRegExOptions; + procedure UpdateUIOptions; + procedure LoadFromFile(const Filename:string); + protected + procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES; + public + { Public declarations } + end; + +var + frmMain: TfrmMain; + +implementation +uses + ShellAPI; + +{$R *.dfm} + +procedure TfrmMain.acOpenExecute(Sender: TObject); +begin + if odOpen.Execute then + LoadFromFile(odOpen.Filename); +end; + +procedure TfrmMain.acFindExecute(Sender: TObject); +begin + FreeAndNil(RE); + RE := TJclRegEx.Create; + RE.Options := GetUIOptions; + RE.Compile(edRegExpr.Text, false, false); + FMatchIndex := 1; + Match; +end; + +procedure TfrmMain.acFindNextExecute(Sender: TObject); +begin + if RE = nil then + acFind.Execute + else + Match; +end; + +procedure TfrmMain.SelectText(Range: TJclCaptureRange); +begin + reFile.SelStart := Range.FirstPos - 1; + reFile.SelLength := Range.LastPos - Range.FirstPos + 1; +end; + +procedure TfrmMain.Match; +begin + RE.Options := GetUIOptions; + if not RE.Match(reFile.Lines.Text, FMatchIndex) then + begin + FreeAndNil(RE); + MessageDlg('No matches found', mtInformation, [mbOK], 0); + end + else + begin + SelectText(RE.CaptureRanges[0]); + FMatchIndex := RE.CaptureRanges[0].LastPos + 1; + end; + UpdateUIOptions; +end; + +function TfrmMain.GetUIOptions: TJclRegExOptions; +begin + Result := []; + if chkIgnoreCase.Checked then + Include(Result, roIgnoreCase); + if chkMultiLine.Checked then + Include(Result, roMultiLine); + if chkDotAll.Checked then + Include(Result, roDotAll); + if chkExtended.Checked then + Include(Result, roExtended); + if chkAnchored.Checked then + Include(Result, roAnchored); + if chkDollarEndOnly.Checked then + Include(Result, roDollarEndOnly); + if chkExtra.Checked then + Include(Result, roExtra); + if chkNotBOL.Checked then + Include(Result, roNotBOL); + if chkNotEOL.Checked then + Include(Result, roNotEOL); + if chkUngreedy.Checked then + Include(Result, roUnGreedy); + if chkNotEmpty.Checked then + Include(Result, roNotEmpty); + if chkUTF8.Checked then + Include(Result, roUTF8); +end; + +procedure TfrmMain.UpdateUIOptions; +var + Options: TJclRegExOptions; +begin + if RE = nil then Exit; + Options := RE.Options; + chkIgnoreCase.Checked := roIgnoreCase in Options; + chkMultiLine.Checked := roMultiLine in Options; + chkDotAll.Checked := roDotAll in Options; + chkExtended.Checked := roExtended in Options; + chkAnchored.Checked := roAnchored in Options; + chkDollarEndOnly.Checked := roDollarEndOnly in Options; + chkExtra.Checked := roExtra in Options; + chkNotBOL.Checked := roNotBOL in Options; + chkNotEOL.Checked := roNotEOL in Options; + chkUngreedy.Checked := roUnGreedy in Options; + chkNotEmpty.Checked := roNotEmpty in Options; + chkUTF8.Checked := roUTF8 in Options; +end; + +procedure TfrmMain.edRegExprChange(Sender: TObject); +begin + FreeAndNil(RE); +end; + +procedure TfrmMain.FormDestroy(Sender: TObject); +begin + FreeAndNil(RE); +end; + +procedure TfrmMain.FormCreate(Sender: TObject); +begin + DragAcceptFiles(Handle, True); +end; + +procedure TfrmMain.WMDropFiles(var Message: TWMDropFiles); +var + i:integer; + buf:array [0..MAX_PATH] of char; +begin + i := DragQueryFile(Message.Drop, $FFFFFFFF, nil, 0); + if i > 0 then + try + DragQueryFile(Message.Drop, 0, buf, sizeof(buf)); + if FileExists(buf) then + LoadFromFile(buf); + finally + DragFinish(Message.Drop); + end; +end; + +procedure TfrmMain.LoadFromFile(const Filename: string); +begin + reFile.Lines.LoadFromFile(Filename); + sbMain.Panels[0].Text := ' ' + Filename; +end; + +end. + diff --git a/official/1.104/examples/common/rtti/RTTIDemoMain.dfm b/official/1.104/examples/common/rtti/RTTIDemoMain.dfm new file mode 100644 index 0000000..dd998b3 --- /dev/null +++ b/official/1.104/examples/common/rtti/RTTIDemoMain.dfm @@ -0,0 +1,71 @@ +object Form1: TForm1 + Left = 98 + Top = 153 + ClientWidth = 967 + ClientHeight = 440 + Caption = 'Form1' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object mmResult: TMemo + Left = 0 + Top = 0 + Width = 967 + Height = 411 + Anchors = [akLeft, akTop, akRight, akBottom] + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Lucida Console' + Font.Style = [] + ParentFont = False + ScrollBars = ssVertical + TabOrder = 0 + end + object Button1: TButton + Left = 0 + Top = 414 + Width = 75 + Height = 25 + Anchors = [akLeft, akBottom] + Caption = 'Type info' + TabOrder = 1 + OnClick = Button1Click + end + object Button2: TButton + Left = 80 + Top = 414 + Width = 75 + Height = 25 + Anchors = [akLeft, akBottom] + Caption = 'Conversions' + TabOrder = 2 + OnClick = Button2Click + end + object Button3: TButton + Left = 160 + Top = 414 + Width = 75 + Height = 25 + Anchors = [akLeft, akBottom] + Caption = 'Declarations' + TabOrder = 3 + OnClick = Button3Click + end + object Button4: TButton + Left = 240 + Top = 414 + Width = 75 + Height = 25 + Anchors = [akLeft, akBottom] + Caption = 'Custom types' + TabOrder = 4 + OnClick = Button4Click + end +end diff --git a/official/1.104/examples/common/rtti/RTTIDemoMain.pas b/official/1.104/examples/common/rtti/RTTIDemoMain.pas new file mode 100644 index 0000000..d87c17f --- /dev/null +++ b/official/1.104/examples/common/rtti/RTTIDemoMain.pas @@ -0,0 +1,331 @@ +unit RTTIDemoMain; + +interface + +{$I jcl.inc} + +uses + SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; + +type + TForm1 = class(TForm) + mmResult: TMemo; + Button1: TButton; + Button2: TButton; + Button3: TButton; + Button4: TButton; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +uses + JclSysUtils, JclRTTI, TypInfo; + +type + TDifficultEvent = procedure(const Sender: TObject; var I: Integer; out Stuff; + IntArr: array of Integer; const VarArray: array of const) of object; + + TLargeEnum = ( + le001, le002, le003, le004, le005, le006, le007, le008, le009, le010, + le011, le012, le013, le014, le015, le016, le017, le018, le019, le020, + le021, le022, le023, le024, le025, le026, le027, le028, le029, le030, + le031, le032, le033, le034, le035, le036, le037, le038, le039, le040, + le041, le042, le043, le044, le045, le046, le047, le048, le049, le050, + le051, le052, le053, le054, le055, le056, le057, le058, le059, le060, + le061, le062, le063, le064, le065, le066, le067, le068, le069, le070, + le071, le072, le073, le074, le075, le076, le077, le078, le079, le080, + le081, le082, le083, le084, le085, le086, le087, le088, le089, le090, + le091, le092, le093, le094, le095, le096, le097, le098, le099, le100, + le101, le102, le103, le104, le105, le106, le107, le108, le109, le110, + le111, le112, le113, le114, le115, le116, le117, le118, le119, le120, + le121, le122, le123, le124, le125, le126, le127, le128, le129, le130, + le131, le132, le133, le134, le135, le136, le137, le138, le139, le140, + le141, le142, le143, le144, le145, le146, le147, le148, le149, le150, + le151, le152, le153, le154, le155, le156, le157, le158, le159, le160); + + TLargeSet = set of TLargeEnum; + TLargeSubEnum = le019 .. le150; + TLargeSubSet = set of TLargeSubEnum; + + TIntRange = 0 .. 112; + + TSetNoEnum = set of (st01, st02, st03, st04); + TSetOfByte = set of Byte; + TInt2Range = 4..11; + TSetOfIntRange = set of TInt2Range; + + TUpcaseRange = 'A' .. 'Z'; + + TMyDouble = Double; + TMyDouble2 = type Double; + + TIntArray = array of Integer; + TIntArray2 = array of array of Integer; + TEnumArray = array of (ar1, ar2, ar3); + TRecArray = array of record x1: Integer; x2: Integer; end; + TSetArray = array of set of (ars1, ars2, ars3); + TSetArray2 = array of array of array of TSetNoEnum; + TWideStrArray = array of Widestring; + +var + MyEnum: PTypeInfo; + MySubRange: PTypeInfo; + MySet: PTypeInfo; + MyCutLowerEnum: PTypeInfo; + +procedure TForm1.Button1Click(Sender: TObject); +var + Writer: IJclInfoWriter; + +begin + mmResult.Lines.Clear; + Writer := TJclInfoStringsWriter.Create(mmResult.Lines, 72); + JclTypeInfo(TypeInfo(Word)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TIntRange)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TLargeEnum)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TLargeSubEnum)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TLargeSet)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TLargeSubSet)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TSetNoEnum)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TSetOfByte)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TSetOfIntRange)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(Single)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(Double)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(Extended)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(Comp)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(Currency)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(Real)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TDateTime)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TMyDouble)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TMyDouble2)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(ShortString)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TScrollingWinControl)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TDifficultEvent)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(IJclOrdinalRangeTypeInfo)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(Int64)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(Longword)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TIntArray)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TIntArray2)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TEnumArray)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TRecArray)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TSetArray)).WriteTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TSetArray2)).WriteTo(Writer); +end; + +procedure TForm1.Button2Click(Sender: TObject); +var + Writer: IJclInfoWriter; + LargeSubSet: TLargeSubSet; + GUID: TGUID; + +begin + mmResult.Lines.Clear; + Writer := TJclInfoStringsWriter.Create(mmResult.Lines, 72); + Writer.Writeln('Set conversions:'); + Writer.Indent; + try + Writer.Writeln('StrToSet with string=''[le019..le023, le033, le045..le049]'''); + JclStrToSet(TypeInfo(TLargeSubSet), LargeSubSet, '[le019..le023, le033, le045..le049]'); + Writer.Writeln('SetToStr of StrToSet = ''' + JclSetToStr(TypeInfo(TLargeSubSet), LargeSubSet, True, True) + ''', with WantRanges=True'); + Writer.Writeln('SetToStr of StrToSet = ''' + JclSetToStr(TypeInfo(TLargeSubSet), LargeSubSet, True, False) + ''', with WantRanges=False'); + Writer.Writeln(''); + Writer.Writeln('StrToSet with string='''''); + JclStrToSet(TypeInfo(TLargeSubSet), LargeSubSet, ''); + Writer.Writeln('SetToStr of StrToSet = ''' + JclSetToStr(TypeInfo(TLargeSubSet), LargeSubSet, True, True) + ''', with WantRanges=True'); + Writer.Writeln('SetToStr of StrToSet = ''' + JclSetToStr(TypeInfo(TLargeSubSet), LargeSubSet, True, False) + ''', with WantRanges=False'); + Writer.Writeln(''); + Writer.Writeln('StrToSet with string=''le019 .. le023,le033 , le045 .. le049 '''); + JclStrToSet(TypeInfo(TLargeSubSet), LargeSubSet, 'le019 .. le023,le033 , le045 .. le049 '); + Writer.Writeln('SetToStr of StrToSet = ''' + JclSetToStr(TypeInfo(TLargeSubSet), LargeSubSet, True, True) + ''', with WantRanges=True'); + Writer.Writeln('SetToStr of StrToSet = ''' + JclSetToStr(TypeInfo(TLargeSubSet), LargeSubSet, True, False) + ''', with WantRanges=False'); + Writer.Writeln(''); + finally + Writer.Outdent; + end; + Writer.Writeln('GUID conversions:'); + Writer.Indent; + try + Writer.Writeln('GUIDToStr: ' + JclGUIDToString(IJclTypeInfo)); + GUID := JclStringToGUID(JclGUIDToString(IJclTypeInfo)); + Writer.Writeln('StrToGUID: ' + JclGUIDToString(GUID)); + finally + Writer.Outdent; + end; + {$IFDEF COMPILER5_UP} + Writer.Writeln(''); + Writer.Writeln('Integer conversions:'); + Writer.Indent; + try + Writer.Writeln('TypedIntToStr: ' + JclTypedIntToStr(crArrow, TypeInfo(TCursor))); + Writer.Writeln('StrToTypedInt: ' + IntToStr(JclStrToTypedInt('crArrow', TypeInfo(TCursor))) + ' (should be ' + IntToStr(crArrow) + ')'); + Writer.Writeln(''); + Writer.Writeln('TypedIntToStr: ' + JclTypedIntToStr(1, TypeInfo(TCursor))); + Writer.Writeln('StrToTypedInt: ' + IntToStr(JclStrToTypedInt('1', TypeInfo(TCursor))) + ' (should be 1)'); + finally + Writer.Outdent; + end; + {$ENDIF} +end; + +procedure TForm1.Button3Click(Sender: TObject); +var + Writer: IJclInfoWriter; + +begin + mmResult.Lines.Clear; + Writer := TJclInfoStringsWriter.Create(mmResult.Lines, 80); + Writer.Writeln('Declarations:'); + Writer.Indent; + try + JclTypeInfo(TypeInfo(TLargeEnum)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TLargeSubEnum)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TLargeSet)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TSetNoEnum)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(Byte)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TSetOfByte)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(Char)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TUpcaseRange)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TDifficultEvent)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(IJclBaseInfo)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(IJclTypeInfo)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TDateTime)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TMyDouble)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TMyDouble2)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TScrollingWinControl)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TJclInfoWriter)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TPersistent)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TIntArray)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TIntArray2)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TEnumArray)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TRecArray)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TSetArray)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TSetArray2)).DeclarationTo(Writer); + Writer.Writeln(''); + JclTypeInfo(TypeInfo(TWideStrArray)).DeclarationTo(Writer); + finally + Writer.Outdent; + end; +end; + +procedure TForm1.Button4Click(Sender: TObject); +var + Writer: IJclInfoWriter; + +begin + mmResult.Lines.Clear; + Writer := TJclInfoStringsWriter.Create(mmResult.Lines, 80); + Writer.Writeln('JclGenerateEnumType with literals:'); + Writer.Indent; + try + JclTypeInfo(MyEnum).WriteTo(Writer); + Writer.Writeln; + JclTypeInfo(MyEnum).DeclarationTo(Writer); + finally + Writer.Outdent; + end; + Writer.Writeln; + Writer.Writeln('JclGenerateSubRange:'); + Writer.Indent; + try + JclTypeInfo(MySubRange).WriteTo(Writer); + Writer.Writeln; + JclTypeInfo(MySubRange).DeclarationTo(Writer); + finally + Writer.Outdent; + end; + Writer.Writeln; + Writer.Writeln('JclGenerateSetType:'); + Writer.Indent; + try + JclTypeInfo(MySet).WriteTo(Writer); + Writer.Writeln; + JclTypeInfo(MySet).DeclarationTo(Writer); + finally + Writer.Outdent; + end; + Writer.Writeln; + Writer.Writeln('JclGenerateEnumType based on TLargeEnum:'); + Writer.Indent; + try + JclTypeInfo(MyCutLowerEnum).WriteTo(Writer); + Writer.Writeln; + JclTypeInfo(MyCutLowerEnum).DeclarationTo(Writer); + finally + Writer.Outdent; + end; +end; + +initialization + //JclHookIs(JclIsClassByName); + MyEnum := JclGenerateEnumType('MyEnum', ['First value', 'Second value', + 'Third value', 'Fourth value', 'Fifth value']); + MySubRange := JclGenerateSubRange(MyEnum, 'MySubRange', 1, 3); + MySet := JclGenerateSetType(MyEnum, 'MySet'); + MyCutLowerEnum := JclGenerateEnumTypeBasedOn('MyCutLower', TypeInfo(TLargeEnum), + PREFIX_CUT_LOWERCASE); + +end. diff --git a/official/1.104/examples/common/rtti/RTTIExample.dof b/official/1.104/examples/common/rtti/RTTIExample.dof new file mode 100644 index 0000000..4a388e0 --- /dev/null +++ b/official/1.104/examples/common/rtti/RTTIExample.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\bin + diff --git a/official/1.104/examples/common/rtti/RTTIExample.dpr b/official/1.104/examples/common/rtti/RTTIExample.dpr new file mode 100644 index 0000000..5981f58 --- /dev/null +++ b/official/1.104/examples/common/rtti/RTTIExample.dpr @@ -0,0 +1,16 @@ +program RTTIExample; + +{$I jcl.inc} + +uses + Forms, + RTTIDemoMain in 'RTTIDemoMain.pas' {Form1}; + +{$R *.RES} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/official/1.104/examples/common/rtti/RTTIExample.res b/official/1.104/examples/common/rtti/RTTIExample.res new file mode 100644 index 0000000000000000000000000000000000000000..472f2e47297a46cf06bb2ce0c8024f600e93445f GIT binary patch literal 876 zcmb7Dv2N5r5S`;9xg)W{DJ54@#)?ixq5woi0mwzzd`4C)-)wZn8KKjRL~&IVegsim z<4;MMl8!BqmN)jD1QHD+KkvSIvoqseFA>ok$aw^&f7!#MgFZ#fWYA7dilal&Gfd{d zD_}xo0Hra(u1-$Sq_Y{=t)_t=*?Vay!e$CjOQd&(lrSF0Tls2mP+KZU0$}{QB){?Cac-k=ge)P zs@#gmop0R8g}oxl?IPC5q$+ilyo8%O(__-l!GrVd4Js^S-iEqTry#JnP8vd!s;FDl zq;Z||>|&v=4zWd2S?5$WWh!|QKY>F}P3_f(5WOWpd|j7mcHv`Ne;>F+kC;*qx`@}N zI@2b!D425=SVC0ra{+0Ysaf8YfGz8My5jwi7&srkpXp z9NZS0rZ02XvDWFgVg)9vo;QjnQKSDp@U9?#Ex_7v>500o()q z9vw!*|5}IN*3c784fkjixsOrfDQdkOu0=o1Pl)Io$oVn7qu2D7-UDyw1IB~>c`xiX POlUqo8g7N%q6z&5v1T5M literal 0 HcmV?d00001 diff --git a/official/1.104/examples/common/sysinfo/EnvironmentExample.dof b/official/1.104/examples/common/sysinfo/EnvironmentExample.dof new file mode 100644 index 0000000..b13ef5f --- /dev/null +++ b/official/1.104/examples/common/sysinfo/EnvironmentExample.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=../../../bin + diff --git a/official/1.104/examples/common/sysinfo/EnvironmentExample.dpr b/official/1.104/examples/common/sysinfo/EnvironmentExample.dpr new file mode 100644 index 0000000..825d34c --- /dev/null +++ b/official/1.104/examples/common/sysinfo/EnvironmentExample.dpr @@ -0,0 +1,16 @@ +program EnvironmentExample; + +{$I jcl.inc} + +uses + Forms, + EnvironmentExampleMain in 'EnvironmentExampleMain.pas' {Form1}; + +{$R *.res} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/official/1.104/examples/common/sysinfo/EnvironmentExample.res b/official/1.104/examples/common/sysinfo/EnvironmentExample.res new file mode 100644 index 0000000000000000000000000000000000000000..093026528930ea46204ac34ba193dc8155a7cef9 GIT binary patch literal 876 zcmd^8F%H5o47>tT7X%&H$;ikL05LHDU&_DIp?mWPMn*;kq;R%dg$f2H7OY;JyR+3O ztpUIhDH*sO#C6pBW7ZVvRaH6Zi&oq?VoMY-*|X+uqINP;fNg$I1ziCnfrL13z>!j L&Q&@UGDQWRn6_4} literal 0 HcmV?d00001 diff --git a/official/1.104/examples/common/sysinfo/EnvironmentExampleMain.dfm b/official/1.104/examples/common/sysinfo/EnvironmentExampleMain.dfm new file mode 100644 index 0000000..5c38237 --- /dev/null +++ b/official/1.104/examples/common/sysinfo/EnvironmentExampleMain.dfm @@ -0,0 +1,34 @@ +object Form1: TForm1 + Left = 228 + Top = 165 + Width = 729 + Height = 540 + ActiveControl = EnvironmentView + Caption = 'Environment Variables' + OnCreate = FormCreate + PixelsPerInch = 96 + object EnvironmentView: TListView + Left = 0 + Top = 0 + Width = 729 + Height = 540 + Align = alClient + Columns = < + item + AutoSize = True + Caption = 'Environment variable' + Tag = 0 + Width = 200 + end + item + AutoSize = True + Caption = 'Value' + Tag = 0 + Width = 500 + end> + RowSelect = True + ReadOnly = True + TabOrder = 0 + ViewStyle = vsReport + end +end diff --git a/official/1.104/examples/common/sysinfo/EnvironmentExampleMain.pas b/official/1.104/examples/common/sysinfo/EnvironmentExampleMain.pas new file mode 100644 index 0000000..e5e5ce5 --- /dev/null +++ b/official/1.104/examples/common/sysinfo/EnvironmentExampleMain.pas @@ -0,0 +1,76 @@ +unit EnvironmentExampleMain; + +interface + +uses + SysUtils, Classes, Controls, Forms, ComCtrls, + JclSysInfo; + +type + TForm1 = class(TForm) + EnvironmentView: TListView; + procedure FormCreate(Sender: TObject); + procedure EnvironmentGridSetEditText(Sender: TObject; ACol, + ARow: Integer; const Value: WideString); + procedure RefreshBtnClick(Sender: TObject); + private + { Private declarations } + procedure GetEnvironment; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + GetEnvironment; +end; + +procedure TForm1.EnvironmentGridSetEditText(Sender: TObject; ACol, + ARow: Integer; const Value: WideString); +var + Key: string; +begin + with EnvironmentView.Items[ARow] do + begin + Key := Caption; + SetEnvironmentVar(Caption, SubItems[0]); + end; +end; + +procedure TForm1.RefreshBtnClick(Sender: TObject); +begin + GetEnvironment; +end; + +procedure TForm1.GetEnvironment; +var + I: Integer; + Key: string; + S: TStringList; +begin + S := TStringList.Create; + try + GetEnvironmentVars(S); + for I := 0 to S.Count - 1 do + begin + Key := S.Names[I]; + with EnvironmentView.Items.Add do + begin + Caption := Key; + SubItems.Add(S.Values[Key]); + end; + end; + finally + S.Free; + end; +end; + +end. + diff --git a/official/1.104/examples/common/textconverter/TextConverter.dof b/official/1.104/examples/common/textconverter/TextConverter.dof new file mode 100644 index 0000000..b13ef5f --- /dev/null +++ b/official/1.104/examples/common/textconverter/TextConverter.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=../../../bin + diff --git a/official/1.104/examples/common/textconverter/TextConverter.dpr b/official/1.104/examples/common/textconverter/TextConverter.dpr new file mode 100644 index 0000000..88a82e0 --- /dev/null +++ b/official/1.104/examples/common/textconverter/TextConverter.dpr @@ -0,0 +1,13 @@ +program TextConverter; + +uses + Forms, + TextConverterMain in 'TextConverterMain.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/official/1.104/examples/common/textconverter/TextConverter.res b/official/1.104/examples/common/textconverter/TextConverter.res new file mode 100644 index 0000000000000000000000000000000000000000..b5c859fdc0b29167507682b9093701c8541f877a GIT binary patch literal 876 zcmaJ=Jxc>Y5Pj=~+eS=+7FH&uWyHcFg^CccPz(RS*=&<05J-d+UUf~tKNE-t+g#=E zNNH(l5wgCWy~_uF40${AX5Q>hmRkU56V3%N+_8_nsvc3Jq}FKc*DBE|gEnzRD3odT z{B9}0AJQ~9t_+D3MNzQehw#n?$2H95lfjzJMiq+xpGS}RU|YW7TGAUn=>TJR9vbuv zQKv^fLP$_BH=di&s%NpygeRq7WOL!AU~H`oJdv~Xnj7J9-%dk4aAV5-jBGG4rXS8T z#&1Awg!ePy@tV(f_@tlj=qJ`@+x_IZ=P3K1ZEocskt@zKp3bKiEbG`L>hS!nd7PP< z*YiLohG%h>ba`1aP@aA!Bu=2+E0lZZSF-?KK7q>;Epm@~@dtdZ0(&$OeF0BP;A;i7bZNA5i@Ni6 j1fWAWcYr%w;}-YC4Ibz#+kO}RH7K;(HF*{O6)AiJ?QX?H literal 0 HcmV?d00001 diff --git a/official/1.104/examples/common/textconverter/TextConverterMain.dfm b/official/1.104/examples/common/textconverter/TextConverterMain.dfm new file mode 100644 index 0000000..80873f2 --- /dev/null +++ b/official/1.104/examples/common/textconverter/TextConverterMain.dfm @@ -0,0 +1,141 @@ +object Form1: TForm1 + Left = 438 + Top = 259 + BorderStyle = bsDialog + Caption = 'Form1' + ClientHeight = 173 + ClientWidth = 375 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object ButtonAnsiToAnsi: TButton + Left = 16 + Top = 16 + Width = 105 + Height = 25 + Caption = 'Ansi --> Ansi' + Enabled = False + TabOrder = 0 + end + object ButtonAnsiToUTF8: TButton + Left = 136 + Top = 16 + Width = 105 + Height = 25 + Caption = 'Ansi --> UTF8' + TabOrder = 1 + OnClick = ButtonAnsiToUTF8Click + end + object ButtonAnsiToUTF16: TButton + Left = 256 + Top = 16 + Width = 105 + Height = 25 + Caption = 'Ansi --> UTF16' + TabOrder = 2 + OnClick = ButtonAnsiToUTF16Click + end + object ButtonUTF8ToAnsi: TButton + Left = 16 + Top = 56 + Width = 105 + Height = 25 + Caption = 'UTF8 --> Ansi' + TabOrder = 3 + OnClick = ButtonUTF8ToAnsiClick + end + object ButtonUTF8ToUTF8: TButton + Left = 136 + Top = 56 + Width = 105 + Height = 25 + Caption = 'UTF8 --> UTF8' + Enabled = False + TabOrder = 4 + end + object ButtonUTF8ToUTF16: TButton + Left = 256 + Top = 56 + Width = 105 + Height = 25 + Caption = 'UTF8 --> UTF16' + TabOrder = 5 + OnClick = ButtonUTF8ToUTF16Click + end + object ButtonUTF16ToAnsi: TButton + Left = 16 + Top = 96 + Width = 105 + Height = 25 + Caption = 'UTF16 --> Ansi' + TabOrder = 6 + OnClick = ButtonUTF16ToAnsiClick + end + object ButtonUTF16ToUTF8: TButton + Left = 136 + Top = 96 + Width = 105 + Height = 25 + Caption = 'UTF16 --> UTF8' + TabOrder = 7 + OnClick = ButtonUTF16ToUTF8Click + end + object ButtonUTF16ToUTF16: TButton + Left = 256 + Top = 96 + Width = 105 + Height = 25 + Caption = 'UTF16 --> UTF16' + Enabled = False + TabOrder = 8 + end + object ButtonAutoToAnsi: TButton + Left = 16 + Top = 136 + Width = 105 + Height = 25 + Caption = 'Auto --> Ansi' + TabOrder = 9 + OnClick = ButtonAutoToAnsiClick + end + object ButtonAutoToUTF8: TButton + Left = 136 + Top = 136 + Width = 105 + Height = 25 + Caption = 'Auto --> UTF8' + TabOrder = 10 + OnClick = ButtonAutoToUTF8Click + end + object ButtonAutoToUTF16: TButton + Left = 256 + Top = 136 + Width = 105 + Height = 25 + Caption = 'Auto --> UTF16' + TabOrder = 11 + OnClick = ButtonAutoToUTF16Click + end + object OpenDialogTxt: TOpenDialog + DefaultExt = 'txt' + Filter = 'Text files (*.txt)|*.txt|All files (*.*)|*.*' + Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] + Title = 'Text file to convert...' + Left = 88 + Top = 48 + end + object SaveDialogTxt: TSaveDialog + DefaultExt = 'txt' + Filter = 'Text files (*.txt)|*.txt|All files (*.*)|*.*' + Options = [ofOverwritePrompt, ofHideReadOnly, ofPathMustExist, ofEnableSizing] + Title = 'Save result as...' + Left = 128 + Top = 48 + end +end diff --git a/official/1.104/examples/common/textconverter/TextConverterMain.pas b/official/1.104/examples/common/textconverter/TextConverterMain.pas new file mode 100644 index 0000000..ab2b027 --- /dev/null +++ b/official/1.104/examples/common/textconverter/TextConverterMain.pas @@ -0,0 +1,146 @@ +unit TextConverterMain; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, + JclStreams; + +type + TForm1 = class(TForm) + ButtonAnsiToAnsi: TButton; + ButtonAnsiToUTF8: TButton; + ButtonAnsiToUTF16: TButton; + ButtonUTF8ToAnsi: TButton; + ButtonUTF8ToUTF8: TButton; + ButtonUTF8ToUTF16: TButton; + ButtonUTF16ToAnsi: TButton; + ButtonUTF16ToUTF8: TButton; + ButtonUTF16ToUTF16: TButton; + OpenDialogTxt: TOpenDialog; + SaveDialogTxt: TSaveDialog; + ButtonAutoToAnsi: TButton; + ButtonAutoToUTF8: TButton; + ButtonAutoToUTF16: TButton; + procedure ButtonAnsiToUTF8Click(Sender: TObject); + procedure ButtonAnsiToUTF16Click(Sender: TObject); + procedure ButtonUTF8ToAnsiClick(Sender: TObject); + procedure ButtonUTF8ToUTF16Click(Sender: TObject); + procedure ButtonUTF16ToAnsiClick(Sender: TObject); + procedure ButtonUTF16ToUTF8Click(Sender: TObject); + procedure ButtonAutoToAnsiClick(Sender: TObject); + procedure ButtonAutoToUTF8Click(Sender: TObject); + procedure ButtonAutoToUTF16Click(Sender: TObject); + private + public + procedure ConvertFile(ReaderClass, WriterClass: TJclStringStreamClass); + end; + +var + Form1: TForm1; + +implementation + +uses + JclStrings, JclFileUtils; + +{$R *.dfm} + +procedure TForm1.ButtonAnsiToUTF8Click(Sender: TObject); +begin + ConvertFile(TJclAnsiStream, TJclUTF8Stream); +end; + +procedure TForm1.ButtonAutoToAnsiClick(Sender: TObject); +begin + ConvertFile(TJclAutoStream, TJclAnsiStream); +end; + +procedure TForm1.ButtonAutoToUTF16Click(Sender: TObject); +begin + ConvertFile(TJclAutoStream, TJclUTF16Stream); +end; + +procedure TForm1.ButtonAutoToUTF8Click(Sender: TObject); +begin + ConvertFile(TJclAutoStream, TJclUTF8Stream); +end; + +procedure TForm1.ButtonAnsiToUTF16Click(Sender: TObject); +begin + ConvertFile(TJclAnsiStream, TJclUTF16Stream); +end; + +procedure TForm1.ButtonUTF8ToAnsiClick(Sender: TObject); +begin + ConvertFile(TJclUTF8Stream, TJclAnsiStream); +end; + +procedure TForm1.ButtonUTF8ToUTF16Click(Sender: TObject); +begin + ConvertFile(TJclUTF8Stream, TJclUTF16Stream); +end; + +procedure TForm1.ButtonUTF16ToAnsiClick(Sender: TObject); +begin + ConvertFile(TJclUTF16Stream, TJclAnsiStream); +end; + +procedure TForm1.ButtonUTF16ToUTF8Click(Sender: TObject); +begin + ConvertFile(TJclUTF16Stream, TJclUTF8Stream); +end; + +procedure TForm1.ConvertFile(ReaderClass, + WriterClass: TJclStringStreamClass); + procedure ConvertFiles(const SourceFileName, DestFileName: TFileName); + var + SourceStream, DestStream: TStream; + Reader, Writer: TJclStringStream; + begin + SourceStream := TFileStream.Create(SourceFileName, fmOpenRead or fmShareDenyWrite); + try + DestStream := TFileStream.Create(DestFileName, fmCreate or fmShareExclusive); + try + Reader := ReaderClass.Create(SourceStream, False); + try + Writer := WriterClass.Create(DestStream, False); + try + Reader.SkipBOM; + Writer.WriteBOM; + JclStreams.WideStringStreamCopy(Reader, Writer); + Writer.Flush; + finally + Writer.Free; + end; + finally + Reader.Free; + end; + finally + DestStream.Free; + end; + finally + SourceStream.Free; + end; + end; +var + SourceFileName, DestFileName, TmpFileName: TFileName; +begin + if OpenDialogTxt.Execute and SaveDialogTxt.Execute then + begin + SourceFileName := OpenDialogTxt.FileName; + DestFileName := SaveDialogTxt.FileName; + if StrSame(SourceFileName, DestFileName) then + begin + // in place conversion + TmpFileName := FileGetTempName(''); + ConvertFiles(SourceFileName, TmpFileName); + FileMove(TmpFileName, DestFileName, True); + end + else + ConvertFiles(SourceFileName, DestFileName); + end; +end; + +end. diff --git a/official/1.104/examples/common/textreader/TextReaderDemoMain.dfm b/official/1.104/examples/common/textreader/TextReaderDemoMain.dfm new file mode 100644 index 0000000..02ce337 --- /dev/null +++ b/official/1.104/examples/common/textreader/TextReaderDemoMain.dfm @@ -0,0 +1,94 @@ +object MainForm: TMainForm + Left = 275 + Top = 163 + ClientWidth = 763 + ClientHeight = 605 + Caption = 'TJclMappedTextReader class demo' + Color = clBtnFace + Constraints.MinHeight = 200 + Constraints.MinWidth = 200 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object ReadLnLabel: TLabel + Left = 200 + Top = 16 + Width = 64 + Height = 13 + Caption = 'ReadLnLabel' + end + object TextListView: TListView + Left = 0 + Top = 40 + Width = 763 + Height = 555 + Anchors = [akLeft, akTop, akRight, akBottom] + Columns = < + item + Caption = 'Text' + Width = 750 + end> + ColumnClick = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Courier New' + Font.Style = [] + HotTrackStyles = [] + OwnerData = True + ReadOnly = True + RowSelect = True + ParentFont = False + TabOrder = 0 + ViewStyle = vsReport + OnData = TextListViewData + end + object OpenBtn: TButton + Left = 8 + Top = 8 + Width = 75 + Height = 25 + Caption = 'Open file' + TabOrder = 1 + OnClick = OpenBtnClick + end + object StatusBar: TStatusBar + Left = 0 + Top = 595 + Width = 763 + Height = 19 + Panels = < + item + Width = 210 + end + item + Width = 210 + end + item + Width = 50 + end> + SimplePanel = False + end + object ReadLnBtn: TButton + Left = 112 + Top = 8 + Width = 75 + Height = 25 + Caption = 'ReadLn test' + TabOrder = 3 + OnClick = ReadLnBtnClick + end + object OpenDialog: TOpenDialog + Filter = 'Text files (*.txt)|*.txt|All files (*.*)|*.*' + Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] + Left = 8 + Top = 552 + end +end diff --git a/official/1.104/examples/common/textreader/TextReaderDemoMain.pas b/official/1.104/examples/common/textreader/TextReaderDemoMain.pas new file mode 100644 index 0000000..2ec2788 --- /dev/null +++ b/official/1.104/examples/common/textreader/TextReaderDemoMain.pas @@ -0,0 +1,152 @@ +unit TextReaderDemoMain; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, ComCtrls, StdCtrls, JclFileUtils; + +type + TMainForm = class(TForm) + TextListView: TListView; + OpenDialog: TOpenDialog; + OpenBtn: TButton; + StatusBar: TStatusBar; + ReadLnBtn: TButton; + ReadLnLabel: TLabel; + procedure FormDestroy(Sender: TObject); + procedure TextListViewData(Sender: TObject; Item: TListItem); + procedure OpenBtnClick(Sender: TObject); + procedure ReadLnBtnClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + private + FFileName: string; + FTextReader: TJclAnsiMappedTextReader; + public + procedure ClearLabels; + procedure OpenFile(const FileName: string); + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.dfm} + +uses + JclCounter, JclSysUtils; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + ClearLabels; +end; + +procedure TMainForm.FormDestroy(Sender: TObject); +begin + FreeAndNil(FTextReader); +end; + +procedure TMainForm.ClearLabels; +begin + ReadLnLabel.Caption := ''; +end; + +procedure TMainForm.OpenFile(const FileName: string); +var + C: TJclCounter; + LineCount: Integer; + LineCountTime: Extended; +begin + FreeAndNil(FTextReader); + FFileName := ''; + TextListView.Items.Count := 0; + StatusBar.Panels[0].Text := ''; + StatusBar.Panels[1].Text := ''; + ClearLabels; + FTextReader := TJclAnsiMappedTextReader.Create(FileName); + FFileName := FileName; + StartCount(C); + LineCount := FTextReader.LineCount; + LineCountTime := StopCount(C); + TextListView.Items.Count := LineCount; + TextListView.Invalidate; + StatusBar.Panels[0].Text := ExtractFileName(FileName); + StatusBar.Panels[1].Text := Format('Lines: %d, Counting time: %.2f ms', [LineCount, LineCountTime * 1000]); +end; + +procedure TMainForm.TextListViewData(Sender: TObject; Item: TListItem); +begin + Item.Caption := string(FTextReader.Lines[Item.Index]); +end; + +procedure TMainForm.OpenBtnClick(Sender: TObject); +begin + with OpenDialog do + begin + FileName := ''; + if Execute then + OpenFile(FileName); + end; +end; + +procedure TMainForm.ReadLnBtnClick(Sender: TObject); +var + C: TJclCounter; + TotalTime, StringListTotalTime, AssignFileTotalTime: Extended; + LineCount, I: Integer; + S: string; + Reader: TJclAnsiMappedTextReader; + SL: TStringList; + T: TextFile; +begin + if FFileName = '' then + Exit; + Screen.Cursor := crHourGlass; + try + ClearLabels; + // TJclAnsiMappedTextReader + LineCount := 0; + StartCount(C); + Reader := TJclAnsiMappedTextReader.Create(FFileName); + try + Reader.GoBegin; + while not Reader.Eof do + begin + S := string(Reader.ReadLn); + Inc(LineCount); + end; + TotalTime := StopCount(C); + finally + Reader.Free; + end; + // TStringList + SL := TStringList.Create; + try + StartCount(C); + SL.LoadFromFile(FFileName); + for I := 0 to SL.Count - 1 do + S := SL[I]; + StringListTotalTime := StopCount(C); + finally + SL.Free; + end; + // AssignFile + StartCount(C); + AssignFile(T, FFileName); + Reset(T); + while not Eof(T) do + ReadLn(T, S); + AssignFileTotalTime := StopCount(C); + CloseFile(T); + + ReadLnLabel.Caption := Format('Lines: %d, TJclAnsiMappedTextReader: %.2f ms, TStringList: %.2f ms, AssignFile: %.2f ms', + [LineCount, TotalTime * 1000, StringListTotalTime * 1000, AssignFileTotalTime * 1000]); + finally + Screen.Cursor := crDefault; + end; +end; + + + +end. diff --git a/official/1.104/examples/common/textreader/TextReaderExample.dof b/official/1.104/examples/common/textreader/TextReaderExample.dof new file mode 100644 index 0000000..4a388e0 --- /dev/null +++ b/official/1.104/examples/common/textreader/TextReaderExample.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\bin + diff --git a/official/1.104/examples/common/textreader/TextReaderExample.dpr b/official/1.104/examples/common/textreader/TextReaderExample.dpr new file mode 100644 index 0000000..e4ec087 --- /dev/null +++ b/official/1.104/examples/common/textreader/TextReaderExample.dpr @@ -0,0 +1,16 @@ +program TextReaderExample; + +{$I jcl.inc} + +uses + Forms, + TextReaderDemoMain in 'TextReaderDemoMain.pas' {MainForm}; + +{$R *.res} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/official/1.104/examples/common/textreader/TextReaderExample.res b/official/1.104/examples/common/textreader/TextReaderExample.res new file mode 100644 index 0000000000000000000000000000000000000000..472f2e47297a46cf06bb2ce0c8024f600e93445f GIT binary patch literal 876 zcmb7Dv2N5r5S`;9xg)W{DJ54@#)?ixq5woi0mwzzd`4C)-)wZn8KKjRL~&IVegsim z<4;MMl8!BqmN)jD1QHD+KkvSIvoqseFA>ok$aw^&f7!#MgFZ#fWYA7dilal&Gfd{d zD_}xo0Hra(u1-$Sq_Y{=t)_t=*?Vay!e$CjOQd&(lrSF0Tls2mP+KZU0$}{QB){?Cac-k=ge)P zs@#gmop0R8g}oxl?IPC5q$+ilyo8%O(__-l!GrVd4Js^S-iEqTry#JnP8vd!s;FDl zq;Z||>|&v=4zWd2S?5$WWh!|QKY>F}P3_f(5WOWpd|j7mcHv`Ne;>F+kC;*qx`@}N zI@2b!D425=SVC0ra{+0Ysaf8YfGz8My5jwi7&srkpXp z9NZS0rZ02XvDWFgVg)9vo;QjnQKSDp@U9?#Ex_7v>500o()q z9vw!*|5}IN*3c784fkjixsOrfDQdkOu0=o1Pl)Io$oVn7qu2D7-UDyw1IB~>c`xiX POlUqo8g7N%q6z&5v1T5M literal 0 HcmV?d00001 diff --git a/official/1.104/examples/common/unitversioning/UnitVersioningTest.dof b/official/1.104/examples/common/unitversioning/UnitVersioningTest.dof new file mode 100644 index 0000000..a45efdc --- /dev/null +++ b/official/1.104/examples/common/unitversioning/UnitVersioningTest.dof @@ -0,0 +1,2 @@ +[Directories] +OutputDir=..\..\..\bin \ No newline at end of file diff --git a/official/1.104/examples/common/unitversioning/UnitVersioningTest.dpr b/official/1.104/examples/common/unitversioning/UnitVersioningTest.dpr new file mode 100644 index 0000000..fe79e66 --- /dev/null +++ b/official/1.104/examples/common/unitversioning/UnitVersioningTest.dpr @@ -0,0 +1,46 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is UnitVersioningTest.dpr. } +{ } +{ The Initial Developer of the Original Code is Uwe Schuster. } +{ Portions created by Uwe Schuster are Copyright (C) Uwe Schuster. All rights reserved. } +{ } +{ Contributor(s): } +{ Uwe Schuster (uschuster) } +{ } +{**************************************************************************************************} +{ } +{ sample for TUnitVersioning } +{ } +{ Unit owner: Uwe Schuster } +{ } +{**************************************************************************************************} + +// Last modified: $Date: 2007-04-18 19:27:51 +0200 (mer., 18 avr. 2007) $ + +program UnitVersioningTest; + +{$I jcl.inc} + +uses + Forms, + UnitVersioningTestMain in 'UnitVersioningTestMain.pas' {frmUnitVersioningTestMain}; + +{$R *.res} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmUnitVersioningTestMain, frmUnitVersioningTestMain); + Application.Run; +end. diff --git a/official/1.104/examples/common/unitversioning/UnitVersioningTest.res b/official/1.104/examples/common/unitversioning/UnitVersioningTest.res new file mode 100644 index 0000000000000000000000000000000000000000..b111060100a5f025f8352346a52aa105dda315dc GIT binary patch literal 876 zcmaJ=Jxc>Y5Pj=~+s-6tVP#TUMl38+L=gfOYT+L^n{Cnvf+wW#s%rxNnLu)|%~k%6 zl$I$|i0j+gyL{lskhe2$=FRS8xdnhO;amX29sAg;>k&0dYOR)T)S?pxUE+dJsM75D z-7YQoTL`ZNskJunM9$J{ZiL4pI|=o`jj8rCvcaP 0 then + begin + if FreeLibrary(TestDLLHandle) then + TestDLLHandle := 0; + end; +end; + +procedure TfrmUnitVersioningTestMain.btnTestFindMethodsClick(Sender: TObject); +const MaxCnt = 1000; +var + UnitVersioning: TUnitVersioning; + I, Idx: Integer; + UnitVersionInfoPtr: PUnitVersionInfo; +begin + UnitVersioning := GetUnitVersioning; + for I := 1 to MaxCnt do + begin + New(UnitVersionInfoPtr); + with UnitVersionInfoPtr^ do + begin + RCSfile := Format('unit%d.pas', [I]); + Revision := ''; + Date := ''; + LogPath := ''; + Extra := ''; + Data := nil; + end; + FFindMethodsInfoPtrs.Add(UnitVersionInfoPtr); + RegisterUnitVersion(HInstance, UnitVersionInfoPtr^); + end; + if MaxCnt >= 500 then + begin + Idx := UnitVersioning.IndexOf('unit500.pas'); + if Idx <> -1 then + ShowMessage(Format('IndexOf %s = %d', [UnitVersioning.Items[Idx].RCSfile, Idx])) + else + ShowMessage('IndexOf failed'); + end; + if MaxCnt >= 600 then + begin + if Assigned(UnitVersioning.FindUnit('unit600.pas')) then + ShowMessage('FindUnit ' + UnitVersioning.FindUnit('unit600.pas').RCSfile) + else + ShowMessage('FindUnit failed'); + end; +end; + +type + TDummyUnitVersioningProvider = class(TCustomUnitVersioningProvider) + private + FUV: PUnitVersionInfo; + public + constructor Create; override; + destructor Destroy; override; + procedure LoadModuleUnitVersioningInfo(Instance: THandle); override; + end; + +constructor TDummyUnitVersioningProvider.Create; +begin + inherited Create; + FUV := nil; +end; + +destructor TDummyUnitVersioningProvider.Destroy; +begin + if Assigned(FUV) then + Dispose(FUV); + inherited Destroy; +end; + +procedure TDummyUnitVersioningProvider.LoadModuleUnitVersioningInfo(Instance: THandle); +begin + if (Instance = HInstance) and not Assigned(FUV) then + begin + New(FUV); + FUV^.RCSfile := 'DummyUnit.pas'; + FUV^.Revision := '0.12'; + FUV^.Date := ''; + FUV^.LogPath := ''; + FUV^.Extra := ''; + FUV^.Data := nil; + RegisterUnitVersion(Instance, FUV^); + end; +end; + +procedure TfrmUnitVersioningTestMain.btnTestDummyProviderClick(Sender: TObject); +var + UnitVersioning: TUnitVersioning; + Idx: Integer; +begin + UnitVersioning := GetUnitVersioning; + UnitVersioning.RegisterProvider(TDummyUnitVersioningProvider); + UnitVersioning.LoadModuleUnitVersioningInfo(HInstance); + Idx := UnitVersioning.IndexOf('DummyUnit.pas'); + if Idx <> -1 then + ShowMessage(Format('IndexOf %s=%d Revision=%s', [UnitVersioning.Items[Idx].RCSfile, + Idx, UnitVersioning.Items[Idx].Revision])) + else + ShowMessage('DummyProvider Test failed'); +end; + +procedure TfrmUnitVersioningTestMain.btnTestGetLocationInfoStrClick(Sender: TObject); +var + S: string; +begin + S := GetLocationInfoStr(@TUnitVersioning.LoadModuleUnitVersioningInfo, + False, True, True, False); + ShowMessage(S); +end; + +procedure TfrmUnitVersioningTestMain.btnShowUVContentClick(Sender: TObject); +var + I, J: Integer; + UnitVersioning: TUnitVersioning; + tnModule: TTreeNode; + LongFileName: string; +begin + UnitVersioning := GetUnitVersioning; + UnitVersioning.RegisterProvider(TJclDefaultUnitVersioningProvider); + for I := 0 to Pred(UnitVersioning.ModuleCount) do + UnitVersioning.LoadModuleUnitVersioningInfo(UnitVersioning.Modules[I].Instance); + tv.Items.BeginUpdate; + try + tv.Items.Clear; + for I := 0 to Pred(UnitVersioning.ModuleCount) do + begin + tnModule := tv.Items.Add(nil, Format('%s [%d units]', + [GetModulePath(UnitVersioning.Modules[I].Instance), UnitVersioning.Modules[I].Count])); + for J := 0 to Pred(UnitVersioning.Modules[I].Count) do + with UnitVersioning.Modules[I][J] do + begin + LongFileName := LogPath; + if LongFileName <> '' then + LongFileName := PathAddSeparator(LongFileName); + LongFileName := LongFileName + RCSfile; + tv.Items.AddChild(tnModule, Format('%s %s %s', [LongFileName, Revision, Date])); + end; + end; + finally + tv.Items.EndUpdate; + end; +end; + +procedure TfrmUnitVersioningTestMain.btnLoadDLLClick(Sender: TObject); +begin + if TestDLLHandle = 0 then + begin + TestDLLHandle := LoadLibrary(TestDLLFileName); + if TestDLLHandle = 0 then + ShowMessage(Format('Could not load %s', [TestDLLFileName])); + end; +end; + +procedure TfrmUnitVersioningTestMain.btnInsertSectionClick(Sender: TObject); +var + TestStream: TMemoryStream; + UnitList: TJclUnitVersioningList; + UnitVersionInfo: TUnitVersionInfo; + I: Integer; +begin + FreeTestDLL; + if TestDLLHandle = 0 then + begin + TestStream := TMemoryStream.Create; + try + UnitList := TJclUnitVersioningList.Create; + try + for I := 1 to 20 do + begin + with UnitVersionInfo do + begin + RCSfile := Format('unit%d.pas', [I]); + Revision := Format('0.%d', [I]); + Date := ''; + LogPath := ''; + Extra := ''; + Data := nil; + end; + UnitList.Add(UnitVersionInfo); + end; + if not InsertUnitVersioningSection(TestDLLFileName, UnitList) then + ShowMessage(Format('Inserting UnitVersion information section into %s failed', + [TestDLLFileName])); + finally + UnitList.Free; + end; + finally + TestStream.Free; + end; + end + else + ShowMessage('Can''t insert section - DLL still loaded and unload failed...'); +end; + +end. diff --git a/official/1.104/examples/dotnet/JCLNetDemo/AssemblyInfo.cs b/official/1.104/examples/dotnet/JCLNetDemo/AssemblyInfo.cs new file mode 100644 index 0000000..b67641b --- /dev/null +++ b/official/1.104/examples/dotnet/JCLNetDemo/AssemblyInfo.cs @@ -0,0 +1,67 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// +// Die allgemeinen Assemblierungsinformationen werden durch die folgenden +// Attribute gesteuert. ndern Sie die Attributwerte, um die zu einer +// Assemblierung gehrenden Informationen zu modifizieren. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Die Versionsinformation einer Assemblierung enthlt die folgenden vier Werte: +// Hauptversion +// Nebenversion +// Build-Nummer +// Revision +// Sie knnen alle vier Werte festlegen oder fr Revision und Build-Nummer die +// Standardwerte mit '*' - wie nachfolgend gezeigt - verwenden: + +[assembly: AssemblyVersion("1.0.*")] + +// +// Zum Signieren einer Assemblierung mssen Sie einen Schlssel angeben. Weitere Informationen +// ber das Signieren von Assemblierungen finden Sie in der Microsoft .NET Framework-Dokumentation. +// Mit den folgenden Attributen steuern Sie, welcher Schlssel fr die Signatur verwendet wird. +// Hinweise: +// (*) Wenn kein Schlssel angegeben wird, ist die Assemblierung nicht signiert. +// (*) KeyName verweist auf einen Schlssel, der im Crypto Service Provider +// (CSP) auf Ihrem Rechner installiert wurde. KeyFile verweist auf eine +// Datei, die einen Schlssel enthlt. +// (*) Wenn sowohl der KeyFile- als auch der KeyName-Wert angegeben ist, wird +// die folgende Verarbeitung durchgefhrt: +// (1) Wenn KeyName in dem CSP gefunden wird, wird dieser Schlssel verwendet. +// (2) Wenn KeyName nicht, aber KeyFile vorhanden ist, wird der Schlssel +// in KeyFile im CSP installiert und verwendet. +// (*) Ein KeyFile knnen Sie mit dem Utility sn.exe (Starker Name) erzeugen. +// Der Speicherort von KeyFile sollte relativ zum Projektausgabeverzeichnis +// %Projektverzeichnis%\bin\ angegeben werden. Wenn sich Ihr +// KeyFile z.B. im Projektverzeichnis befindet, wrden Sie das Attribut +// AssemblyKeyFile folgendermaen festlegen: +// [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Verzgerte Signatur ist eine erweiterte Option; nhere Informationen +// dazu finden Sie in der Microsoft .NET Framework-Dokumentation. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] + +// +// Verwenden Sie die folgenden Attribute zur Steuerung der COM-Sichtbarkeit Ihrer Assemblierung. +// Standardmig ist die gesamte Assemblierung fr COM sichtbar. Die Einstellung false fr ComVisible +// ist die fr Ihre Assemblierung empfohlene Vorgabe. Um dann eine Klasse und ein Interface fr COM +// bereitzustellen, setzen Sie jeweils ComVisible auf true. Es wird auch empfohlen das Attribut +// Guid hinzuzufgen. +// + +[assembly: ComVisible(false)] +//[assembly: Guid("")] +//[assembly: TypeLibVersion(1, 0)] + diff --git a/official/1.104/examples/dotnet/JCLNetDemo/JCLNet.FrmMain.resources b/official/1.104/examples/dotnet/JCLNetDemo/JCLNet.FrmMain.resources new file mode 100644 index 0000000000000000000000000000000000000000..791098b2b00d4f8209663980d309b85e426551a8 GIT binary patch literal 7154 zcmeHMTWl0n7(UaMz4Qi!ZrdnmK@g;6-BJn#tx4GpWwn%rT{RNIGP`@aopdhETuPUC zOR(PJg$ENv5+9U^KA0#*0x?0OJ{W>ZOiVOt6oSS;g7QRS;^jNDGwtromdipAO(!{f z&iv>5ujfDK{L_AM?6;#FA>>uGJK{M_r&4e;)f7WbQ*C0jnerK`wzo=JT2VzIrMZ!Y ztP2vgS>sfnM7Os-Kvhjp*03S!hDv*6YUnC2wztNNlqjU{qq&4K zOy!=`s#Sbfx@%>}>dqB3)V-Qnxd3ej+BQr7T162lFJEg_f+aqp@;d}M8;lD(X?tri zu}r5zor7J2s|GtdGF>6QlOM5!_K8Z07loa?jxYtS&_v}yX%RdviYkYzl)zc zeD=XFKUuLYQPH=3eaqLGk9r1&4gIsRbCrY~KxW1&2sw}bXY@}aWuL{EJtr`pi?+Lp zkUGrmLVFuLY0RxfYX*H7Z9c|Jk>anTjiDXK`%S=ogSn01e+w-RdKk1rkg*Q*chNY| zRM7VOp=Tk{$q*5UMuH?lRKk-Tqz}D7G7#qg*b{L~?~#+AuVp$Fs3r(15CCSPR5~vCnF>QS++&zouGv2OOC9E3<0(b z!Oz8BLT)dVWP_O5s%dZ()+vzR4rnk19+~umU&AN{2s57IO*4Okm}8W@ohh)axHQWK zuw)=|5RF2lMqUQv+&tqZL{5ONV#(b;M9~Rw%aH-=&cose4~1od8R`gn)qK~XoUJYM zp;$*flHr~!VRq|}Ktzy*PlOi|BFAFS!&&BL2lTmFPG5{=c}bQhs*&{~5+@8z68tm} zFQ#Dtx+IK>{aRQ`jw2(1HA-@+MWX$-nbuX6w2Y{wArGRd^p;|&#ie!{r z`TCpy>)n^n>elV4gHJkqx>O#&0pQZ9fNr_p1Kz45*CL3$gf%I3k~~~r0%Y%9`!qQS z&|Iga!X5U|OzZu2jPJGAf!_Poi6MH5W#Ru zEOcXS1CF6mAh#=HfG#NoE#*$jY<6Jd&?kT6VLf}Q*r49JZLK1Rk-SoJlot(3IIf0s zan<6!API}hs%^@=iXCOl45oZev1GGqVj5@c5Hk9ZXNU^fA)OGPj}dXKnXRV6Wv1zz zU2RQS7~#Yq9w{mF60Me!8D8h3s9hVRq@mIKHL7kLrK&1qs6U;rGoz7ODJf{IlHDka zxtg>hjqoaEHI`4OV>%mnWkX_pEyU3T%2{(Z&5Kmd@TwX7O7{3TA2)@8lTznd;VAYX zVX0bFa(2LA1=Bi3m3Y&j#U)V@%eqNiXtDcrfdKOBvCt&p;{WKvnHVlqpcVY|!_HCQp2KgC+rNy)qtUd~1%fFsZowpTHO zFE4Dj0yzt7iCFfjiZR0KcWrjsP*p0YbCaZo5sJ?oS)ZiTjwqU-3!^kHWaV0!W>Jvm zUz+mrA~Y>XycnlQ9$r_}#zHkVv8h;VKtP9gR7L_8;@6md2$YeLwvHc#@)yqq63 z*%l%<1zFH@7TLD7nA~i6=+qb}^4vDC&Z6c;*5hr1Ac{2qTCmIJ6vZMUWCdLd*gjaQ z^3-OV8nfaW<8_^?@&tXr3b92G-on@uQR_=E%cNKCaD!B8hOzJnR_bf*zC{ zglqSp9$+1AUq-~$Nh&_xU+ux&M=A&S0S|5>;V5;wGwlZGx;!h@tdA*__EI0VmUX}Y7s;gP68$Ieb zx_#yC`)RNKja;8zEBh;r)chYa@IUkIIh}}hB64L_YSRmS)&JGHnwp`U^yO;)0dx{m A3jhEB literal 0 HcmV?d00001 diff --git a/official/1.104/examples/dotnet/JCLNetDemo/JCLNet.WinForm.resources b/official/1.104/examples/dotnet/JCLNetDemo/JCLNet.WinForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..35b057487727be154d1e7eb5d3115396f5d442f6 GIT binary patch literal 3602 zcmd5;&2Jk;6rW9;^=Fc%iIYk+szEIk)U}+tY0^qLq_zkKCvj`T31N-b6KB-jS!+KM z90`Gh!q=~K%Ayn5JEnO{#>nVJIu)4Wwz;B8nX{(cNuLlE1NNF&9rphw1+ue;c$ZmqBZ99 zxU-p8nPqcRtSsd6xy5`wpUY=6MOSxRi>(OeIu_NlnX22=x%M*a*3ElNtTdOF=%TiG zW8r4uI?FHLM3gD$W6)oh_HUb}&ZszTQ(USqS#+0+cCNO4 zYcWp?v?G1LDae2+R1rko5-S!|i7?b>V7U|BeYYp1Q;kjjf@iPxq#_tl3Vy!VIp(I>_4zy9IQm0S1UZMGlHe^HA(b?3W@ zU(?GoAJ2a__vf4Yh1iepRNjYc^cCEo$Iw57j_o|qG#GC~{}$#?!}t*TCd?yn-OgVm z4%sH0*d#|v#3GdJk~J7PX#rb^A=s$F_8wv6Mwp=j@`AL93u7A?eg}qU`b|`b33w>c zJq?sJVaCY5O31lkwtKMEB0s@qrhl^rCMfBUI_L@zJq|O~Jzu)yMbNUk; zN{s+ZT}sK^al)$}N)uyfe0or`mzB`s*e-85+v+ys?QMsUSPY5i7WU-G5KPaxAe$YT zcoHD28Vx}WmM|JE>d-ROhAE@r+UymZS(`h|vUrQdH9wD+ODUtlZLAcVLhmLu)96r( zVGfHq>f_#786>xN1Ey|_>B-wkCN(`Hh1_AtMRr-3D$;!=Pzb`eI=%GgX%Q~mxns0 zHPde?Lxxz= z)4t{qbyngEDGA6S?itBF03^|S`olRQ4M~%?;5k*PWwTX#!@D|jA!=|U(P&f|Y;fIr zE!NkNEsj5gaVTxXo2i)flq+f+hpQ^4F(s!aamcFp{|LjlPn>{ZLg4?H|U0X z1}3rKgw-in#jgg-II4=HB6S8n$|W@o!|0>8zriPjFBp5!yksU9NQY{nOd?X;h~ZP6 zM92p#(2Mi`R)okClv0wTRRH)TVMc~R;#Js+pR`X{SwlaOUS+)?%fM0pt#~p~ukbe- Q#4E4x8* + + + + + + + + + + + + Debug + + + + 4 + False + + JCLNet + False + True + False + False + False + TRACE + + Windows + + 285212672 + False + bin\Release + + + + False + + + + + False + + False + False + + IIS + + + + + + + + 4 + True + + JCLNet + True + False + False + False + False + TRACE;DEBUG + + Windows + + 285212672 + False + bin\Debug + + + + False + + + + + False + + False + False + + IIS + + + + + + + + + + + + + + + + + + diff --git a/official/1.104/examples/dotnet/JCLNetDemo/WinForm.cs b/official/1.104/examples/dotnet/JCLNetDemo/WinForm.cs new file mode 100644 index 0000000..4d5c6b7 --- /dev/null +++ b/official/1.104/examples/dotnet/JCLNetDemo/WinForm.cs @@ -0,0 +1,254 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.Data; + +using Jedi.Jcl; +using Jedi.Jcl.Units; + +using Borland.Delphi; +using Borland.Delphi.Units; + +using Borland.Vcl; +using Borland.Vcl.Units; + +namespace JCLNet +{ + /// + /// Zusammenfassende Beschreibung fr FrmMain. + /// + public class FrmMain : System.Windows.Forms.Form + { + /// + /// Erforderliche Designer-Variable. + /// + private System.ComponentModel.Container components = null; + private System.Windows.Forms.TabControl tcDemos; + private System.Windows.Forms.TabPage tpSysInfo; + private System.Windows.Forms.Button btnListProcesses; + private System.Windows.Forms.TextBox tbProcesses; + private System.Windows.Forms.ListView lvSpecialDirectories; + private System.Windows.Forms.Button btnSpecialDirectories; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.Label lbIpAddress; + private System.Windows.Forms.Label lbComputerName; + private System.Windows.Forms.Button btnQuit; + + public FrmMain() + { + // + // Erforderlich fr die Untersttzung des Windows-Form-Designer + // + InitializeComponent(); + + // + // TODO: Konstruktorcode nach dem Aufruf von InitializeComponent hinzufgen + // + } + + /// + /// Ressourcen nach der Verwendung bereinigen + /// + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (components != null) + { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + #region Vom Windows Form-Designer erzeugter Code + /// + /// Erforderliche Methode zur Untersttzung des Designers - + /// ndern Sie die Methode nicht mit dem Quelltext-Editor + /// + private void InitializeComponent() + { + this.tcDemos = new System.Windows.Forms.TabControl(); + this.tpSysInfo = new System.Windows.Forms.TabPage(); + this.lbComputerName = new System.Windows.Forms.Label(); + this.lbIpAddress = new System.Windows.Forms.Label(); + this.btnSpecialDirectories = new System.Windows.Forms.Button(); + this.lvSpecialDirectories = new System.Windows.Forms.ListView(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.tbProcesses = new System.Windows.Forms.TextBox(); + this.btnListProcesses = new System.Windows.Forms.Button(); + this.btnQuit = new System.Windows.Forms.Button(); + this.tcDemos.SuspendLayout(); + this.tpSysInfo.SuspendLayout(); + this.SuspendLayout(); + // + // tcDemos + // + this.tcDemos.Controls.Add(this.tpSysInfo); + this.tcDemos.Location = new System.Drawing.Point(8, 8); + this.tcDemos.Name = "tcDemos"; + this.tcDemos.SelectedIndex = 0; + this.tcDemos.Size = new System.Drawing.Size(712, 520); + this.tcDemos.TabIndex = 2; + // + // tpSysInfo + // + this.tpSysInfo.Controls.Add(this.lbComputerName); + this.tpSysInfo.Controls.Add(this.lbIpAddress); + this.tpSysInfo.Controls.Add(this.btnSpecialDirectories); + this.tpSysInfo.Controls.Add(this.lvSpecialDirectories); + this.tpSysInfo.Controls.Add(this.tbProcesses); + this.tpSysInfo.Controls.Add(this.btnListProcesses); + this.tpSysInfo.Location = new System.Drawing.Point(4, 22); + this.tpSysInfo.Name = "tpSysInfo"; + this.tpSysInfo.Size = new System.Drawing.Size(704, 494); + this.tpSysInfo.TabIndex = 0; + this.tpSysInfo.Text = "Jedi.Jcl.JclSysInfo"; + // + // lbComputerName + // + this.lbComputerName.Location = new System.Drawing.Point(16, 384); + this.lbComputerName.Name = "lbComputerName"; + this.lbComputerName.Size = new System.Drawing.Size(208, 16); + this.lbComputerName.TabIndex = 7; + this.lbComputerName.Text = "ComputerName"; + // + // lbIpAddress + // + this.lbIpAddress.Location = new System.Drawing.Point(16, 360); + this.lbIpAddress.Name = "lbIpAddress"; + this.lbIpAddress.Size = new System.Drawing.Size(136, 16); + this.lbIpAddress.TabIndex = 6; + this.lbIpAddress.Text = "IPAddress"; + // + // btnSpecialDirectories + // + this.btnSpecialDirectories.Location = new System.Drawing.Point(560, 152); + this.btnSpecialDirectories.Name = "btnSpecialDirectories"; + this.btnSpecialDirectories.Size = new System.Drawing.Size(136, 23); + this.btnSpecialDirectories.TabIndex = 5; + this.btnSpecialDirectories.Text = "Show Special Directories"; + this.btnSpecialDirectories.Click += new System.EventHandler(this.btnSpecialDirectories_Click); + // + // lvSpecialDirectories + // + this.lvSpecialDirectories.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1, + this.columnHeader2}); + this.lvSpecialDirectories.Location = new System.Drawing.Point(8, 16); + this.lvSpecialDirectories.Name = "lvSpecialDirectories"; + this.lvSpecialDirectories.Size = new System.Drawing.Size(688, 136); + this.lvSpecialDirectories.TabIndex = 4; + this.lvSpecialDirectories.View = System.Windows.Forms.View.Details; + // + // columnHeader1 + // + this.columnHeader1.Text = "Name"; + this.columnHeader1.Width = 100; + // + // columnHeader2 + // + this.columnHeader2.Text = "Directory"; + this.columnHeader2.Width = 450; + // + // tbProcesses + // + this.tbProcesses.Location = new System.Drawing.Point(8, 184); + this.tbProcesses.Multiline = true; + this.tbProcesses.Name = "tbProcesses"; + this.tbProcesses.Size = new System.Drawing.Size(688, 168); + this.tbProcesses.TabIndex = 3; + this.tbProcesses.Text = ""; + // + // btnListProcesses + // + this.btnListProcesses.Location = new System.Drawing.Point(560, 352); + this.btnListProcesses.Name = "btnListProcesses"; + this.btnListProcesses.Size = new System.Drawing.Size(136, 23); + this.btnListProcesses.TabIndex = 2; + this.btnListProcesses.Text = "List Processes"; + this.btnListProcesses.Click += new System.EventHandler(this.btnListProcesses_Click); + // + // btnQuit + // + this.btnQuit.Location = new System.Drawing.Point(640, 536); + this.btnQuit.Name = "btnQuit"; + this.btnQuit.TabIndex = 3; + this.btnQuit.Text = "&Quit"; + this.btnQuit.Click += new System.EventHandler(this.btnQuit_Click); + // + // FrmMain + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(728, 566); + this.Controls.Add(this.btnQuit); + this.Controls.Add(this.tcDemos); + this.Name = "FrmMain"; + this.Text = "JCL.NET Demo application"; + this.Load += new System.EventHandler(this.FrmMain_Load); + this.tcDemos.ResumeLayout(false); + this.tpSysInfo.ResumeLayout(false); + this.ResumeLayout(false); + } + #endregion + + /// + /// Der Haupteintrittspunkt fr die Anwendung. + /// + [STAThread] + static void Main() + { + Application.Run(new FrmMain()); + } + + private void btnListProcesses_Click(object sender, System.EventArgs e) + { + TStrings list = new TStringList(); + JclSysInfo.RunningProcessesList(list, true); + tbProcesses.Lines = JclStrings.ArrayOf(list); + } + + private void btnSpecialDirectories_Click(object sender, System.EventArgs e) + { + lvSpecialDirectories.Items.Clear(); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"AppdataFolder", JclSysInfo.GetAppdataFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"CommonAppdataFolder", JclSysInfo.GetCommonAppdataFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"CommonDesktopdirectoryFolder", JclSysInfo.GetCommonDesktopdirectoryFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"CommonFavoritesFolder", JclSysInfo.GetCommonFavoritesFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"CommonProgramsFolder", JclSysInfo.GetCommonProgramsFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"CookiesFolder", JclSysInfo.GetCookiesFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"CurrentFolder", JclSysInfo.GetCurrentFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"DesktopDirectoryFolder", JclSysInfo.GetDesktopDirectoryFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"DesktopFolder", JclSysInfo.GetDesktopFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"FavoritesFolder", JclSysInfo.GetFavoritesFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"HistoryFolder", JclSysInfo.GetHistoryFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"InternetCacheFolder", JclSysInfo.GetInternetCacheFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"PersonalFolder", JclSysInfo.GetPersonalFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"ProgramFilesFolder", JclSysInfo.GetProgramFilesFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"ProgramsFolder", JclSysInfo.GetProgramsFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"RecentFolder", JclSysInfo.GetRecentFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"SendToFolder", JclSysInfo.GetSendToFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"StartmenuFolder", JclSysInfo.GetStartmenuFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"StartupFolder", JclSysInfo.GetStartupFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"TemplatesFolder", JclSysInfo.GetTemplatesFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"WindowsSystemFolder", JclSysInfo.GetWindowsSystemFolder()})); + lvSpecialDirectories.Items.Add(new ListViewItem(new string[] {"WindowsTempFolder", JclSysInfo.GetWindowsTempFolder()})); + } + + private void FrmMain_Load(object sender, System.EventArgs e) + { + lbIpAddress.Text = "IP: " + JclSysInfo.GetIPAddress(JclSysInfo.GetLocalComputerName()); + lbComputerName.Text = "Machine Name: " + JclSysInfo.GetLocalComputerName(); + } + + private void btnQuit_Click(object sender, System.EventArgs e) + { + Application.Exit(); + } + + } +} diff --git a/official/1.104/examples/dotnet/JCLNetDemo/WinForm.resx b/official/1.104/examples/dotnet/JCLNetDemo/WinForm.resx new file mode 100644 index 0000000..d42084d --- /dev/null +++ b/official/1.104/examples/dotnet/JCLNetDemo/WinForm.resx @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + False + + + True + + + Private + + + 8, 8 + + + False + + + True + + + True + + + Private + + + 8, 8 + + + False + + + Private + + + False + + + Private + + + False + + + Private + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + True + + diff --git a/official/1.104/examples/windows/ConsoleExamples.dof b/official/1.104/examples/windows/ConsoleExamples.dof new file mode 100644 index 0000000..27cbb59 --- /dev/null +++ b/official/1.104/examples/windows/ConsoleExamples.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\bin +SearchPath=$(DELPHI)\Lib\Debug; diff --git a/official/1.104/examples/windows/ConsoleExamples.dpr b/official/1.104/examples/windows/ConsoleExamples.dpr new file mode 100644 index 0000000..f21652b --- /dev/null +++ b/official/1.104/examples/windows/ConsoleExamples.dpr @@ -0,0 +1,409 @@ +program ConsoleExamples; + +{$APPTYPE CONSOLE} + +{$I jcl.inc} +{$IFDEF SUPPORTS_PLATFORM_WARNINGS} + {$WARN SYMBOL_PLATFORM OFF} +{$ENDIF SUPPORTS_PLATFORM_WARNINGS} + +uses + SysUtils, + Windows, + TypInfo, + JclConsole; + +{$R ..\..\source\windows\JclNoDepAsInvoker.res} + +type + TCPInfoEx = packed record + MaxCharSize: DWORD; + DefaultChar: array[0..MAX_DEFAULTCHAR-1] of Byte; + LeadByte: array[0..MAX_LEADBYTES-1] of Byte; + UnicodeDefaultChar: WideChar; + CodePage: DWORD; + CodePageName: array[0..MAX_PATH-1] of Char; + end; + +function GetCPInfoEx(CodePage, dwFlags: DWORD; var lpCPInfoEx: TCPInfoEx): BOOL; stdcall; + external 'kernel32.dll' name 'GetCPInfoExA'; + +procedure ShowConsoleInfo(const Console: TJclConsole); + function CodePageToName(CodePage: DWORD): string; + var + CpInfo: TCPInfoEx; + begin + Win32Check(GetCPInfoEx(CodePage, 0, CpInfo)); + Result := CpInfo.CodePageName; + end; +begin + Assert(TJclConsole.IsConsole(GetModuleHandle(nil))); + Assert(TJclConsole.IsConsole(ParamStr(0))); + + Console.ActiveScreen.WriteLn('Old Windows Title : ' + Console.Title); + Console.Title := 'Information of the Default Output Screen Buffer'; + Console.ActiveScreen.WriteLn('New Windows Title : ' + Console.Title); + Console.ActiveScreen.WriteLn(Format('Input Code Page : %s', [CodePageToName(Console.InputCodePage)])); + Console.ActiveScreen.WriteLn(Format('Output Code Page : %s', [CodePageToName(Console.OutputCodePage)])); +end; + +procedure ShowScreenInfo(const ScrBuf: TJclScreenBuffer); + function ModeToString: string; + var + AMode: TJclConsoleOutputMode; + begin + for AMode:=Low(TJclConsoleOutputMode) to High(TJclConsoleOutputMode) do + begin + if AMode in ScrBuf.Mode then + begin + if Result <> '' then + Result := Result + ', '; + Result := Result + GetEnumName(TypeInfo(TJclConsoleOutputMode), Integer(AMode)); + end; + end; + end; +var + OldMode: TJclConsoleOutputModes; + Attr: IJclScreenTextAttribute; +begin + ScrBuf.WriteLn; + ScrBuf.WriteLn(Format('Handle: 0x%.8x', [ScrBuf.Handle])); + ScrBuf.Writeln('Old Mode : ' + ModeToString); + OldMode := ScrBuf.Mode; + ScrBuf.Mode := ScrBuf.Mode - [omWrapAtEol]; + ScrBuf.Write('New Mode : ' + ModeToString); + Readln; + ScrBuf.Mode := OldMode; + + ScrBuf.WriteLn(Format('Old Size: (%d, %d)', [ScrBuf.Width, ScrBuf.Height])); + ScrBuf.Width := ScrBuf.Width * 2; + ScrBuf.Write(Format('New Size: (%d, %d)', [ScrBuf.Width, ScrBuf.Height])); + Readln; + ScrBuf.Width := ScrBuf.Width div 2; + + Attr := TJclScreenTextAttribute.Create(fclYellow, bclBlue, True, False, + [fsGridHorizontal, fsUnderscore]); + + ScrBuf.Write('Top', thaCenter, tvaTop, Attr); + ScrBuf.Write('Bottom', thaCenter, tvaBottom, Attr); + ScrBuf.Write('Left', thaLeft, tvaCenter, Attr); + ScrBuf.Write('Right', thaRight, tvaCenter, Attr); + ScrBuf.Write('Center', thaCenter, tvaCenter, Attr); +end; + +procedure ShowCursorInfo(const ScrBuf: TJclScreenBuffer); +const + BoolName: array[Boolean] of string = ('Hide', 'Show'); +var + OldPos: TCoord; + OldSize: TJclScreenCursorSize; +begin + ScrBuf.WriteLn; + ScrBuf.WriteLn(Format('Cursor Position: (%d, %d)', [ScrBuf.Cursor.Position.X, ScrBuf.Cursor.Position.Y])); + OldPos := ScrBuf.Cursor.Position; + ScrBuf.Cursor.MoveTo(ScrBuf.Window.Left, ScrBuf.Window.Top); + ScrBuf.Write(Format('(%d, %d)', [ScrBuf.Cursor.Position.X, ScrBuf.Cursor.Position.Y])); + ScrBuf.Cursor.Position := OldPos; + Readln; + ScrBuf.WriteLn('Left-Top corner :' + ScrBuf.ReadLn(0, 0)); + + ScrBuf.WriteLn(Format('Old Cursor Size: %d', [ScrBuf.Cursor.Size])); + OldSize := ScrBuf.Cursor.Size; ScrBuf.Cursor.Size := 100; + ScrBuf.Write(Format('New Cursor Size: %d', [ScrBuf.Cursor.Size])); + Readln; + ScrBuf.Cursor.Size := OldSize; + + ScrBuf.WriteLn('Visible of Cursor: ' + BoolName[ScrBuf.Cursor.Visible]); + ScrBuf.Cursor.Visible := False; + ScrBuf.Write('Hidden Cursor: ' + BoolName[ScrBuf.Cursor.Visible]); + Readln; + ScrBuf.Cursor.Visible := True; +end; + +procedure ShowWindowInfo(const ScrBuf: TJclScreenBuffer); +var + OldPos, OldSize: TCoord; +begin + ScrBuf.WriteLn; + ScrBuf.WriteLn(Format('Largest Console Size : (%d, %d)', + [ScrBuf.Window.MaxConsoleWindowSize.X, ScrBuf.Window.MaxConsoleWindowSize.Y])); + ScrBuf.WriteLn(Format('Largest Window Size : (%d, %d)', + [ScrBuf.Window.MaxWindow.X, ScrBuf.Window.MaxWindow.Y])); + + ScrBuf.WriteLn(Format('Old Window Position : (%d, %d)', [ScrBuf.Window.Left, ScrBuf.Window.Top])); + OldPos := ScrBuf.Window.Position; + ScrBuf.Window.Left := 0; + ScrBuf.Window.Top := 0; + ScrBuf.Write(Format('New Window Position : (%d, %d)', [ScrBuf.Window.Left, ScrBuf.Window.Top])); + Readln; + ScrBuf.Window.Position := OldPos; + + ScrBuf.WriteLn(Format('Old Window Size : (%d, %d)', [ScrBuf.Window.Width, ScrBuf.Window.Height])); + OldSize := ScrBuf.Window.Size; + ScrBuf.Window.Width := ScrBuf.Window.Width div 2; + ScrBuf.Window.Height := ScrBuf.Window.Height div 2; + ScrBuf.Write(Format('New Window Size : (%d, %d)', [ScrBuf.Window.Width, ScrBuf.Window.Height])); + Readln; + ScrBuf.Window.Size := OldSize; + + ScrBuf.Write(Format('Scroll up %d line: ', [ScrBuf.Window.Top])); + Readln; + OldPos := ScrBuf.Window.Position; + ScrBuf.Window.Scroll(0, -ScrBuf.Window.Top); + Readln; + ScrBuf.Window.Position := OldPos; +end; + +procedure ShowTextAttributeInfo(const ScrBuf: TJclScreenBuffer); + function StyleToString: string; + var + AStyle: TJclScreenFontStyle; + begin + for AStyle:=Low(TJclScreenFontStyle) to High(TJclScreenFontStyle) do + begin + if AStyle in ScrBuf.Font.Style then + begin + if Result <> '' then + Result := Result + ', '; + Result := Result + GetEnumName(TypeInfo(TJclScreenFontStyle), Integer(AStyle)); + end; + end; + end; +const + HighlightName: array[Boolean] of string = ('', ' [Highlight]'); +var + OldTextAttribute: Word; +begin + ScrBuf.WriteLn('Old Font Color : ' + + GetEnumName(TypeInfo(TJclScreenFontColor), Integer(ScrBuf.Font.Color)) + + HighlightName[ScrBuf.Font.Highlight]); + ScrBuf.WriteLn('Old Back Color : ' + + GetEnumName(TypeInfo(TJclScreenBackColor), Integer(ScrBuf.Font.BgColor)) + + HighlightName[ScrBuf.Font.BgHighlight]); + ScrBuf.Writeln('Old Font Style : ' + StyleToString); + OldTextAttribute := ScrBuf.Font.TextAttribute; + ScrBuf.Font.Color := fclYellow; + ScrBuf.Font.Highlight := True; + ScrBuf.Font.BgColor := bclBlue; + ScrBuf.Font.Style := ScrBuf.Font.Style + [fsUnderscore]; + ScrBuf.WriteLn('New Font Color : ' + + GetEnumName(TypeInfo(TJclScreenFontColor), Integer(ScrBuf.Font.Color)) + + HighlightName[ScrBuf.Font.Highlight]); + ScrBuf.WriteLn('New Back Color : ' + + GetEnumName(TypeInfo(TJclScreenBackColor), Integer(ScrBuf.Font.BgColor)) + + HighlightName[ScrBuf.Font.BgHighlight]); + ScrBuf.Write('New Font Style : ' + StyleToString); + ScrBuf.Font.TextAttribute := OldTextAttribute; + ScrBuf.Writeln; +end; + +{ TCtrlEventHandler } + +type + TCtrlEventHandler = class + private + FConsole: TJclConsole; + FTerminated: Boolean; + protected + procedure OnCtrlC(Sender: TObject); + procedure OnCtrlBreak(Sender: TObject); + procedure OnClose(Sender: TObject); + procedure OnLogOff(Sender: TObject); + procedure OnShutdown(Sender: TObject); + + procedure Terminate; + public + constructor Create(AConsole: TJclConsole); + + property Console: TJclConsole read FConsole; + property Terminated: Boolean read FTerminated; + end; + +constructor TCtrlEventHandler.Create(AConsole: TJclConsole); +begin + FConsole := AConsole; + FTerminated := False; + + Console.OnCtrlC := OnCtrlC; + Console.OnCtrlBreak := OnCtrlBreak; + Console.OnClose := OnClose; + Console.OnLogOff := OnLogOff; + Console.OnShutdown := OnShutdown; +end; + +procedure TCtrlEventHandler.Terminate; +var + Evt: TInputRecord; +begin + Sleep(1000); + + FTerminated := True; + + Evt.EventType := FOCUS_EVENT; + Evt.Event.FocusEvent.bSetFocus := False; + FConsole.Input.PutEvent(Evt); +end; + +procedure TCtrlEventHandler.OnCtrlC(Sender: TObject); +begin + Console.ActiveScreen.Writeln('Ctrl Event: Ctrl-C'); +end; + +procedure TCtrlEventHandler.OnCtrlBreak(Sender: TObject); +begin + Console.ActiveScreen.Writeln('Ctrl Event: Ctrl-Break'); +end; + +procedure TCtrlEventHandler.OnClose(Sender: TObject); +begin + Console.ActiveScreen.Writeln('Ctrl Event: Close'); + Terminate; +end; + +procedure TCtrlEventHandler.OnLogOff(Sender: TObject); +begin + Console.ActiveScreen.Writeln('Ctrl Event: Logoff'); + Terminate; +end; + +procedure TCtrlEventHandler.OnShutdown(Sender: TObject); +begin + Console.ActiveScreen.Writeln('Ctrl Event: Shutdown'); + Terminate; +end; + +procedure ShowInputInfo(const InputBuf: TJclInputBuffer); + function ModeToString: string; + var + AMode: TJclConsoleInputMode; + begin + for AMode:=Low(TJclConsoleInputMode) to High(TJclConsoleInputMode) do + begin + if AMode in InputBuf.Mode then + begin + if Result <> '' then + Result := Result + ', '; + Result := Result + GetEnumName(TypeInfo(TJclConsoleInputMode), Integer(AMode)); + end; + end; + end; + + procedure AddEvent; + var + ir: TInputRecord; + begin + ir.EventType := MENU_EVENT; + ir.Event.MenuEvent.dwCommandId := 111; + InputBuf.PutEvent(ir); + end; +const + MOUSE_CLICKED = 0; + MOUSE_WHEELED = 3; + KeyDownBoolName: array[Boolean] of string = ('released', 'pressed'); + SetFocusBoolName: array[Boolean] of string = ('deactivated', 'activated'); +var + I: DWORD; + OldPos: TCoord; + CtrlEvt: TCtrlEventHandler; + ScrBuf: TJclScreenBuffer; +begin + ScrBuf := InputBuf.Console.ActiveScreen; + ScrBuf.WriteLn(Format('Input Event Count : %d', [InputBuf.EventCount])); + + InputBuf.Mode := [imProcessed, imWindow, imMouse]; + ScrBuf.Writeln('Input Mode : ' + ModeToString); + + InputBuf.Clear; + + AddEvent; + + CtrlEvt := TCtrlEventHandler.Create(InputBuf.Console); + try + ScrBuf.WriteLn('Press [q] to break the loop...'); + while not CtrlEvt.Terminated and InputBuf.WaitEvent do + begin + with InputBuf.GetEvent do + case EventType of + KEY_EVENT: + begin + ScrBuf.WriteLn(Format('Key (%s)$%.2x is %s %d times', + [Event.KeyEvent.AsciiChar, Event.KeyEvent.wVirtualKeyCode, + KeyDownBoolName[Event.KeyEvent.bKeyDown], Event.KeyEvent.wRepeatCount])); + + if Event.KeyEvent.AsciiChar = 'q' then + Break; + end; + _MOUSE_EVENT: + begin + case Event.MouseEvent.dwEventFlags of + MOUSE_CLICKED: + begin + for I:= 1 to TJclConsole.MouseButtonCount do + if (Event.MouseEvent.dwButtonState and (1 shl (I - 1))) <> 0 then + begin + ScrBuf.Write(Format('Mouse %d button click at', [I])); + Break; + end; + if I > TJclConsole.MouseButtonCount then + ScrBuf.Write('Mouse button released at'); + end; + DOUBLE_CLICK: + ScrBuf.Write('Mouse double-click at'); + MOUSE_MOVED: + begin + if (OldPos.X <> Event.MouseEvent.dwMousePosition.X) or + (OldPos.Y <> Event.MouseEvent.dwMousePosition.Y) then + begin + ScrBuf.Write('Mouse move to'); + OldPos := Event.MouseEvent.dwMousePosition; + end + else + Continue; + end; + MOUSE_WHEELED: + ScrBuf.Write('Mouse wheeled at'); + else + ScrBuf.Write('Mouse unknown action at'); + end; + + ScrBuf.WriteLn(Format(' (%d, %d) ', [Event.MouseEvent.dwMousePosition.X, Event.MouseEvent.dwMousePosition.Y])); + end; + WINDOW_BUFFER_SIZE_EVENT: + ScrBuf.WriteLn(Format('Screen buffer size is change to (%d, %d)', + [Event.WindowBufferSizeEvent.dwSize.X, Event.WindowBufferSizeEvent.dwSize.Y])); + MENU_EVENT: + ScrBuf.WriteLn(Format('Menu command %d is selected', [Event.MenuEvent.dwCommandId])); + FOCUS_EVENT: + ScrBuf.Writeln('Console window is ' + SetFocusBoolName[Event.FocusEvent.bSetFocus]); + else + ScrBuf.WriteLn(Format('Unknown event - %d', [EventType])); + end; + end; + finally + FreeAndNil(CtrlEvt); + end; +end; + +var + ScrBuf, NewScrBuf: TJclScreenBuffer; +begin + ShowConsoleInfo(TJclConsole.Default); + + ScrBuf := TJclConsole.Default.ActiveScreen; + + ShowScreenInfo(ScrBuf); + ShowCursorInfo(ScrBuf); + ShowWindowInfo(ScrBuf); + + ScrBuf.Clear; + + NewScrBuf := TJclConsole.Default.Add; + ShowTextAttributeInfo(NewScrBuf); + TJclConsole.Default.ActiveScreen := NewScrBuf; + + ShowInputInfo(TJclConsole.Default.Input); + + NewScrBuf.Clear; + + TJclConsole.Default.ActiveScreen := ScrBuf; +end. diff --git a/official/1.104/examples/windows/appinst/AppInstDemoMain.dfm b/official/1.104/examples/windows/appinst/AppInstDemoMain.dfm new file mode 100644 index 0000000..5a11a5c --- /dev/null +++ b/official/1.104/examples/windows/appinst/AppInstDemoMain.dfm @@ -0,0 +1,131 @@ +object Form1: TForm1 + Left = 204 + Top = 125 + BorderIcons = [biSystemMenu, biMinimize] + BorderStyle = bsSingle + Caption = 'JclAppInst demo' + ClientHeight = 365 + ClientWidth = 329 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poDefaultPosOnly + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 256 + Top = 8 + Width = 65 + Height = 97 + Alignment = taCenter + AutoSize = False + Caption = '0' + Font.Charset = EASTEUROPE_CHARSET + Font.Color = clWindowText + Font.Height = -96 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + end + object InstancesListView: TListView + Left = 0 + Top = 0 + Width = 241 + Height = 177 + Columns = < + item + Caption = 'Number' + end + item + Alignment = taRightJustify + Caption = 'ProcessID' + Width = 70 + end + item + Alignment = taRightJustify + Caption = 'Application HWND' + Width = 110 + end> + ColumnClick = False + HideSelection = False + ReadOnly = True + RowSelect = True + TabOrder = 0 + ViewStyle = vsReport + OnDblClick = SwitchBtnClick + end + object SwitchBtn: TButton + Left = 248 + Top = 120 + Width = 75 + Height = 25 + Caption = 'Switch to' + TabOrder = 1 + OnClick = SwitchBtnClick + end + object MsgBtn: TButton + Left = 248 + Top = 152 + Width = 75 + Height = 25 + Caption = 'Message' + TabOrder = 2 + OnClick = MsgBtnClick + end + object Memo1: TMemo + Left = 0 + Top = 184 + Width = 241 + Height = 177 + Lines.Strings = ( + 'Enter a text') + TabOrder = 3 + OnChange = Memo1Change + end + object SendBtn: TButton + Left = 248 + Top = 336 + Width = 75 + Height = 25 + Caption = 'Send' + TabOrder = 4 + OnClick = SendBtnClick + end + object AutoUpdateCheckBox: TCheckBox + Left = 248 + Top = 304 + Width = 97 + Height = 17 + Caption = 'Auto update' + TabOrder = 5 + end + object ColorDialog1: TColorDialog + Ctl3D = True + CustomColors.Strings = ( + 'ColorA=FFFFFFFF' + 'ColorB=FFFFFFFF' + 'ColorC=FFFFFFFF' + 'ColorD=FFFFFFFF' + 'ColorE=FFFFFFFF' + 'ColorF=FFFFFFFF' + 'ColorG=FFFFFFFF' + 'ColorH=FFFFFFFF' + 'ColorI=FFFFFFFF' + 'ColorJ=FFFFFFFF' + 'ColorK=FFFFFFFF' + 'ColorL=FFFFFFFF' + 'ColorM=FFFFFFFF' + 'ColorN=FFFFFFFF' + 'ColorO=FFFFFFFF' + 'ColorP=FFFFFFFF') + Options = [cdPreventFullOpen] + Left = 8 + Top = 144 + end +end diff --git a/official/1.104/examples/windows/appinst/AppInstDemoMain.pas b/official/1.104/examples/windows/appinst/AppInstDemoMain.pas new file mode 100644 index 0000000..422071b --- /dev/null +++ b/official/1.104/examples/windows/appinst/AppInstDemoMain.pas @@ -0,0 +1,169 @@ +unit AppInstDemoMain; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + JclAppInst, ComCtrls, StdCtrls; + +type + TForm1 = class(TForm) + InstancesListView: TListView; + Label1: TLabel; + SwitchBtn: TButton; + MsgBtn: TButton; + ColorDialog1: TColorDialog; + Memo1: TMemo; + SendBtn: TButton; + AutoUpdateCheckBox: TCheckBox; + procedure FormCreate(Sender: TObject); + procedure SwitchBtnClick(Sender: TObject); + procedure MsgBtnClick(Sender: TObject); + procedure SendBtnClick(Sender: TObject); + procedure Memo1Change(Sender: TObject); + private + procedure BuildInstancesList; + procedure ApplicationEvents1Message(var Msg: TMsg; var Handled: Boolean); + public + procedure WndProc(var Message: TMessage); override; + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +const + MaxAllowedInstances = 3; + + MyDataKind = 1; + +{ TForm1 } + +procedure TForm1.BuildInstancesList; +var + I, CurrIndex: Integer; +begin + with InstancesListView, JclAppInstances do + begin + Items.BeginUpdate; + Items.Clear; + for I := 0 to InstanceCount -1 do + with Items.Add do + begin + Caption := IntToStr(I + 1); + SubItems.Add(Format('%.8x', [ProcessIDs[I]])); + SubItems.Add(Format('%.8x', [AppWnds[I]])); + end; + CurrIndex := InstanceIndex[GetCurrentProcessId]; + Selected := Items[CurrIndex]; + Items.EndUpdate; + end; + Label1.Caption := IntToStr(CurrIndex + 1); +end; + +procedure TForm1.FormCreate(Sender: TObject); +begin + Application.OnMessage := ApplicationEvents1Message; + BuildInstancesList; +end; + +procedure TForm1.ApplicationEvents1Message(var Msg: TMsg; var Handled: Boolean); +begin + // AI_* messages handler. These messages are automatically send to all instances + // of the application. + with Msg do + if (hwnd = 0) and (message = JclAppInstances.MessageID) then + begin + case wParam of + AI_INSTANCECREATED, AI_INSTANCEDESTROYED: + BuildInstancesList; + AI_USERMSG: + Label1.Font.Color := TColor(lParam); + end; + Handled := True; + end; +end; + +procedure TForm1.SwitchBtnClick(Sender: TObject); +begin + JclAppInstances.SwitchTo(InstancesListView.Selected.Index); +end; + +procedure TForm1.MsgBtnClick(Sender: TObject); +begin + with ColorDialog1 do + begin + Color := Label1.Font.Color; + if Execute then + JclAppInstances.UserNotify(Color); + end; +end; + +procedure TForm1.SendBtnClick(Sender: TObject); +begin + // TForm.ClassName matches window class name. It sends the data to all windows + // belonging instances of this application. The last parameter identifies the + // 'TForm1' (ClassName) window of this instance. + JclAppInstances.SendStrings(ClassName, MyDataKind, Memo1.Lines, Handle); +end; + +var + MemoChanging: Boolean; + +procedure TForm1.WndProc(var Message: TMessage); +begin + // Interprocess communication handler. + + // First check whether we can safely read TForm.Handle property ... + if HandleAllocated and not (csDestroying in ComponentState) then + begin + // ... then whether it is our message. The last paramter tells to ignore the + // message sent from window of this instance + case ReadMessageCheck(Message, Handle) of + MyDataKind: // It is our data + begin + MemoChanging := True; // prevent deadlock, TMemo.OnChange is also fired now + Memo1.Lines.BeginUpdate; + try + // Read TStrings from the message + ReadMessageStrings(Message, Memo1.Lines) + finally + Memo1.Lines.EndUpdate; + MemoChanging := False; + end; + end; + else + inherited; + end; + end + else + inherited; +end; + +procedure TForm1.Memo1Change(Sender: TObject); +begin + if not MemoChanging and AutoUpdateCheckBox.Checked then + SendBtnClick(nil); +end; + +initialization + + with JclAppInstances do + // CheckInstance returns False if current instance number is greater than + // MaxAllowedInstances constant + if not CheckInstance(MaxAllowedInstances) then + begin + // Switch to the first instance of the application + SwitchTo(0); + // Close this instance + KillInstance; + end; + + // Note: For preventing more than one instance of the application you can put + // simple JclAppInstances.CheckSingleInstance line to initialization section + // instead of code above + +end. diff --git a/official/1.104/examples/windows/appinst/AppInstExample.dof b/official/1.104/examples/windows/appinst/AppInstExample.dof new file mode 100644 index 0000000..4a388e0 --- /dev/null +++ b/official/1.104/examples/windows/appinst/AppInstExample.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\bin + diff --git a/official/1.104/examples/windows/appinst/AppInstExample.dpr b/official/1.104/examples/windows/appinst/AppInstExample.dpr new file mode 100644 index 0000000..039499b --- /dev/null +++ b/official/1.104/examples/windows/appinst/AppInstExample.dpr @@ -0,0 +1,16 @@ +program AppInstExample; + +{$I jcl.inc} + +uses + Forms, + AppInstDemoMain in 'AppInstDemoMain.pas' {Form1}; + +{$R *.RES} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/official/1.104/examples/windows/appinst/AppInstExample.res b/official/1.104/examples/windows/appinst/AppInstExample.res new file mode 100644 index 0000000000000000000000000000000000000000..472f2e47297a46cf06bb2ce0c8024f600e93445f GIT binary patch literal 876 zcmb7Dv2N5r5S`;9xg)W{DJ54@#)?ixq5woi0mwzzd`4C)-)wZn8KKjRL~&IVegsim z<4;MMl8!BqmN)jD1QHD+KkvSIvoqseFA>ok$aw^&f7!#MgFZ#fWYA7dilal&Gfd{d zD_}xo0Hra(u1-$Sq_Y{=t)_t=*?Vay!e$CjOQd&(lrSF0Tls2mP+KZU0$}{QB){?Cac-k=ge)P zs@#gmop0R8g}oxl?IPC5q$+ilyo8%O(__-l!GrVd4Js^S-iEqTry#JnP8vd!s;FDl zq;Z||>|&v=4zWd2S?5$WWh!|QKY>F}P3_f(5WOWpd|j7mcHv`Ne;>F+kC;*qx`@}N zI@2b!D425=SVC0ra{+0Ysaf8YfGz8My5jwi7&srkpXp z9NZS0rZ02XvDWFgVg)9vo;QjnQKSDp@U9?#Ex_7v>500o()q z9vw!*|5}IN*3c784fkjixsOrfDQdkOu0=o1Pl)Io$oVn7qu2D7-UDyw1IB~>c`xiX POlUqo8g7N%q6z&5v1T5M literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/appinst/SingleInstDemoMain.dfm b/official/1.104/examples/windows/appinst/SingleInstDemoMain.dfm new file mode 100644 index 0000000..b61255e --- /dev/null +++ b/official/1.104/examples/windows/appinst/SingleInstDemoMain.dfm @@ -0,0 +1,25 @@ +object Form1: TForm1 + Left = 194 + Top = 107 + ClientWidth = 270 + ClientHeight = 145 + Caption = 'Single application instance only' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object DialogBtn: TButton + Left = 72 + Top = 48 + Width = 113 + Height = 25 + Caption = 'Show modal dialog' + TabOrder = 0 + OnClick = DialogBtnClick + end +end diff --git a/official/1.104/examples/windows/appinst/SingleInstDemoMain.pas b/official/1.104/examples/windows/appinst/SingleInstDemoMain.pas new file mode 100644 index 0000000..1344a63 --- /dev/null +++ b/official/1.104/examples/windows/appinst/SingleInstDemoMain.pas @@ -0,0 +1,34 @@ +unit SingleInstDemoMain; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls; + +type + TForm1 = class(TForm) + DialogBtn: TButton; + procedure DialogBtnClick(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +// See Project file source (SingleInstExample.dpr) for added single instance +// checking code. + +procedure TForm1.DialogBtnClick(Sender: TObject); +begin + ShowMessage('This is a modal dialog.'); +end; + +end. diff --git a/official/1.104/examples/windows/appinst/SingleInstExample.dof b/official/1.104/examples/windows/appinst/SingleInstExample.dof new file mode 100644 index 0000000..4a388e0 --- /dev/null +++ b/official/1.104/examples/windows/appinst/SingleInstExample.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\bin + diff --git a/official/1.104/examples/windows/appinst/SingleInstExample.dpr b/official/1.104/examples/windows/appinst/SingleInstExample.dpr new file mode 100644 index 0000000..1160492 --- /dev/null +++ b/official/1.104/examples/windows/appinst/SingleInstExample.dpr @@ -0,0 +1,18 @@ +program SingleInstExample; + +{$I jcl.inc} + +uses + JclAppInst, // Added JclAppInst unit + Forms, + SingleInstDemoMain in 'SingleInstDemoMain.pas' {Form1}; + +{$R *.RES} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + JclAppInstances.CheckSingleInstance; // Added instance checking + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/official/1.104/examples/windows/appinst/SingleInstExample.res b/official/1.104/examples/windows/appinst/SingleInstExample.res new file mode 100644 index 0000000000000000000000000000000000000000..472f2e47297a46cf06bb2ce0c8024f600e93445f GIT binary patch literal 876 zcmb7Dv2N5r5S`;9xg)W{DJ54@#)?ixq5woi0mwzzd`4C)-)wZn8KKjRL~&IVegsim z<4;MMl8!BqmN)jD1QHD+KkvSIvoqseFA>ok$aw^&f7!#MgFZ#fWYA7dilal&Gfd{d zD_}xo0Hra(u1-$Sq_Y{=t)_t=*?Vay!e$CjOQd&(lrSF0Tls2mP+KZU0$}{QB){?Cac-k=ge)P zs@#gmop0R8g}oxl?IPC5q$+ilyo8%O(__-l!GrVd4Js^S-iEqTry#JnP8vd!s;FDl zq;Z||>|&v=4zWd2S?5$WWh!|QKY>F}P3_f(5WOWpd|j7mcHv`Ne;>F+kC;*qx`@}N zI@2b!D425=SVC0ra{+0Ysaf8YfGz8My5jwi7&srkpXp z9NZS0rZ02XvDWFgVg)9vo;QjnQKSDp@U9?#Ex_7v>500o()q z9vw!*|5}IN*3c784fkjixsOrfDQdkOu0=o1Pl)Io$oVn7qu2D7-UDyw1IB~>c`xiX POlUqo8g7N%q6z&5v1T5M literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/asuser/CreateProcAsUserDemoMain.dfm b/official/1.104/examples/windows/asuser/CreateProcAsUserDemoMain.dfm new file mode 100644 index 0000000..99ef677 --- /dev/null +++ b/official/1.104/examples/windows/asuser/CreateProcAsUserDemoMain.dfm @@ -0,0 +1,194 @@ +object Form1: TForm1 + Left = 386 + Top = 230 + ClientWidth = 390 + ClientHeight = 344 + Caption = 'CreateProcAsUser Demo' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 8 + Top = 8 + Width = 47 + Height = 13 + Caption = 'Domain:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object Label2: TLabel + Left = 136 + Top = 8 + Width = 61 + Height = 13 + Caption = 'Username:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object Label3: TLabel + Left = 264 + Top = 8 + Width = 59 + Height = 13 + Caption = 'Password:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object Label4: TLabel + Left = 8 + Top = 52 + Width = 83 + Height = 13 + Caption = 'Command line:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object Label5: TLabel + Left = 8 + Top = 104 + Width = 75 + Height = 13 + Caption = 'Environment:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object edtDomain: TEdit + Left = 8 + Top = 24 + Width = 121 + Height = 21 + TabOrder = 0 + end + object edtUserName: TEdit + Left = 136 + Top = 24 + Width = 121 + Height = 21 + TabOrder = 1 + end + object edtPassword: TEdit + Left = 264 + Top = 24 + Width = 121 + Height = 21 + TabOrder = 2 + end + object edtCommandLine: TEdit + Left = 8 + Top = 68 + Width = 377 + Height = 21 + TabOrder = 3 + end + object btnCreateProcAsUser: TButton + Left = 8 + Top = 312 + Width = 129 + Height = 25 + Caption = 'Create Process As User' + Default = True + TabOrder = 4 + OnClick = btnCreateProcAsUserClick + end + object btnCreateProcAsUserEx: TButton + Left = 148 + Top = 312 + Width = 145 + Height = 25 + Caption = 'Create Process As User Ex' + TabOrder = 5 + OnClick = btnCreateProcAsUserExClick + end + object lbEnvironment: TListBox + Left = 8 + Top = 120 + Width = 193 + Height = 141 + ItemHeight = 13 + TabOrder = 6 + end + object edtEnvString: TEdit + Left = 216 + Top = 120 + Width = 165 + Height = 21 + TabOrder = 7 + end + object btnAddEnvString: TButton + Left = 216 + Top = 148 + Width = 75 + Height = 25 + Caption = 'Add' + TabOrder = 8 + OnClick = btnAddEnvStringClick + end + object btnRemoveEnvString: TButton + Left = 216 + Top = 176 + Width = 75 + Height = 25 + Caption = 'Remove' + TabOrder = 9 + OnClick = btnRemoveEnvStringClick + end + object btnClearEnvStrings: TButton + Left = 216 + Top = 204 + Width = 75 + Height = 25 + Caption = 'Clear' + TabOrder = 10 + OnClick = btnClearEnvStringsClick + end + object chkEnvAdditional: TCheckBox + Left = 216 + Top = 236 + Width = 97 + Height = 17 + Caption = 'Additional' + TabOrder = 11 + end + object chkEnvCurrentUser: TCheckBox + Left = 216 + Top = 256 + Width = 97 + Height = 17 + Caption = 'Current User' + TabOrder = 12 + end + object chkEnvLocalMachine: TCheckBox + Left = 216 + Top = 276 + Width = 97 + Height = 17 + Caption = 'Local Machine' + TabOrder = 13 + end +end diff --git a/official/1.104/examples/windows/asuser/CreateProcAsUserDemoMain.pas b/official/1.104/examples/windows/asuser/CreateProcAsUserDemoMain.pas new file mode 100644 index 0000000..1b84f54 --- /dev/null +++ b/official/1.104/examples/windows/asuser/CreateProcAsUserDemoMain.pas @@ -0,0 +1,93 @@ +unit CreateProcAsUserDemoMain; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls; + +type + TForm1 = class(TForm) + edtDomain: TEdit; + Label1: TLabel; + edtUserName: TEdit; + Label2: TLabel; + edtPassword: TEdit; + Label3: TLabel; + edtCommandLine: TEdit; + Label4: TLabel; + btnCreateProcAsUser: TButton; + btnCreateProcAsUserEx: TButton; + lbEnvironment: TListBox; + Label5: TLabel; + edtEnvString: TEdit; + btnAddEnvString: TButton; + btnRemoveEnvString: TButton; + btnClearEnvStrings: TButton; + chkEnvAdditional: TCheckBox; + chkEnvCurrentUser: TCheckBox; + chkEnvLocalMachine: TCheckBox; + procedure btnAddEnvStringClick(Sender: TObject); + procedure btnClearEnvStringsClick(Sender: TObject); + procedure btnRemoveEnvStringClick(Sender: TObject); + procedure btnCreateProcAsUserClick(Sender: TObject); + procedure btnCreateProcAsUserExClick(Sender: TObject); + private + public + end; + +var + Form1: TForm1; + +implementation + +uses + JclMiscel, JclStrings, JclSysInfo; + +{$R *.dfm} + +procedure TForm1.btnAddEnvStringClick(Sender: TObject); +begin + lbEnvironment.Items.Add(edtEnvString.Text); +end; + +procedure TForm1.btnClearEnvStringsClick(Sender: TObject); +begin + lbEnvironment.Items.Clear; +end; + +procedure TForm1.btnRemoveEnvStringClick(Sender: TObject); +var + I: Integer; +begin + for I := lbEnvironment.Items.Count - 1 downto 0 do + if lbEnvironment.Selected[I] then + lbEnvironment.Items.Delete(I); +end; + +procedure TForm1.btnCreateProcAsUserClick(Sender: TObject); +begin + CreateProcAsUser(edtDomain.Text, edtUserName.Text, + edtPassWord.Text, edtCommandline.Text); +end; + +procedure TForm1.btnCreateProcAsUserExClick(Sender: TObject); +var + Env: PChar; + EnvOptions: TEnvironmentOptions; +begin + EnvOptions := []; + if chkEnvAdditional.Checked then + EnvOptions := EnvOptions + [eoAdditional]; + if chkEnvCurrentUser.Checked then + EnvOptions := EnvOptions + [eoCurrentUser]; + if chkEnvLocalMachine.Checked then + EnvOptions := EnvOptions + [eoLocalMachine]; + + Env := CreateEnvironmentBlock(EnvOptions, lbEnvironment.Items); + CreateProcAsUserEx(edtDomain.Text, edtUserName.Text, + edtPassWord.Text, edtCommandline.Text, Env); + DestroyEnvironmentBlock(Env); +end; + +end. diff --git a/official/1.104/examples/windows/asuser/CreateProcAsUserExample.dof b/official/1.104/examples/windows/asuser/CreateProcAsUserExample.dof new file mode 100644 index 0000000..4a388e0 --- /dev/null +++ b/official/1.104/examples/windows/asuser/CreateProcAsUserExample.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\bin + diff --git a/official/1.104/examples/windows/asuser/CreateProcAsUserExample.dpr b/official/1.104/examples/windows/asuser/CreateProcAsUserExample.dpr new file mode 100644 index 0000000..d78c9e5 --- /dev/null +++ b/official/1.104/examples/windows/asuser/CreateProcAsUserExample.dpr @@ -0,0 +1,17 @@ +program CreateProcAsUserExample; + + +{$I jcl.inc} + +uses + Forms, + CreateProcAsUserDemoMain in 'CreateProcAsUserDemoMain.pas' {Form1}; + +{$R *.RES} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/official/1.104/examples/windows/asuser/CreateProcAsUserExample.res b/official/1.104/examples/windows/asuser/CreateProcAsUserExample.res new file mode 100644 index 0000000000000000000000000000000000000000..472f2e47297a46cf06bb2ce0c8024f600e93445f GIT binary patch literal 876 zcmb7Dv2N5r5S`;9xg)W{DJ54@#)?ixq5woi0mwzzd`4C)-)wZn8KKjRL~&IVegsim z<4;MMl8!BqmN)jD1QHD+KkvSIvoqseFA>ok$aw^&f7!#MgFZ#fWYA7dilal&Gfd{d zD_}xo0Hra(u1-$Sq_Y{=t)_t=*?Vay!e$CjOQd&(lrSF0Tls2mP+KZU0$}{QB){?Cac-k=ge)P zs@#gmop0R8g}oxl?IPC5q$+ilyo8%O(__-l!GrVd4Js^S-iEqTry#JnP8vd!s;FDl zq;Z||>|&v=4zWd2S?5$WWh!|QKY>F}P3_f(5WOWpd|j7mcHv`Ne;>F+kC;*qx`@}N zI@2b!D425=SVC0ra{+0Ysaf8YfGz8My5jwi7&srkpXp z9NZS0rZ02XvDWFgVg)9vo;QjnQKSDp@U9?#Ex_7v>500o()q z9vw!*|5}IN*3c784fkjixsOrfDQdkOu0=o1Pl)Io$oVn7qu2D7-UDyw1IB~>c`xiX POlUqo8g7N%q6z&5v1T5M literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/clr/ClrDemo.dof b/official/1.104/examples/windows/clr/ClrDemo.dof new file mode 100644 index 0000000..4a388e0 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemo.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\bin + diff --git a/official/1.104/examples/windows/clr/ClrDemo.dpr b/official/1.104/examples/windows/clr/ClrDemo.dpr new file mode 100644 index 0000000..8ec09f3 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemo.dpr @@ -0,0 +1,24 @@ +program ClrDemo; + +{$I jcl.inc} + +uses + Forms, + ClrDemoMain in 'ClrDemoMain.pas' {frmMain}, + ClrDemoAbstractFrame in 'ClrDemoAbstractFrame.pas' {frmAbstract: TFrame}, + ClrDemoMetaDataFrame in 'ClrDemoMetaDataFrame.pas' {frmMetadata: TFrame}, + ClrDemoStringsForm in 'ClrDemoStringsForm.pas' {frmStrings}, + ClrDemoGuidForm in 'ClrDemoGuidForm.pas' {frmGuid}, + ClrDemoBlobForm in 'ClrDemoBlobForm.pas' {frmBlobs}, + ClrDemoTableForm in 'ClrDemoTableForm.pas' {frmTable}, + ClrDemoUserStringsForm in 'ClrDemoUserStringsForm.pas' {frmUserStrings}, + ClrDemoCLRFrame in 'ClrDemoCLRFrame.pas' {frmCLR: TFrame}; + +{$R *.RES} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmMain, frmMain); + Application.Run; +end. diff --git a/official/1.104/examples/windows/clr/ClrDemo.res b/official/1.104/examples/windows/clr/ClrDemo.res new file mode 100644 index 0000000000000000000000000000000000000000..82939cc191c05fe6fd6dd859ecac1882ea6c6860 GIT binary patch literal 1128 zcmd^8Jxjw-6g|;E9g1dfa5IC0V}^o@P(>|t(1Mk&C4)*qBB(zg|0@-;_x*$p4i0WQ zI*8A6?@frM4o)s!dhWaT+)rNm03as3H_%*=mz6rc%A7!BQPc|Sq+J>@aXx&YJ6iWUqYJoE8k`}`7BJ>Pt=|^3V7Hy6?dD8?YgG z0$P8CO#lhu{W?x@h(6AUBMf-f^8H=NYX}g>k-iFfMFHkaj0x`}qJB%^T3tU!hvo=F zjHyp>POGmI#yYP@TjVi({gi$NVXRkIOiD-?qpqrb)k8es4ijX!MvvzWF4;N56>b^d s(wu}_B-kT5+(9-vR(^z(waZn&j!wK_G-a=Qc1<~F!k(E{w!-J|3)TO2LI3~& literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/clr/ClrDemoAbstractFrame.dfm b/official/1.104/examples/windows/clr/ClrDemoAbstractFrame.dfm new file mode 100644 index 0000000..8252c1c --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoAbstractFrame.dfm @@ -0,0 +1,7 @@ +object frmAbstract: TfrmAbstract + Left = 0 + Top = 0 + Width = 320 + Height = 240 + TabOrder = 0 +end diff --git a/official/1.104/examples/windows/clr/ClrDemoAbstractFrame.pas b/official/1.104/examples/windows/clr/ClrDemoAbstractFrame.pas new file mode 100644 index 0000000..2c49099 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoAbstractFrame.pas @@ -0,0 +1,105 @@ +unit ClrDemoAbstractFrame; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, JclCLR; + +type + TfrmAbstract = class(TFrame) + public + procedure ShowInfo(const ACLR: TJclCLRHeaderEx); virtual; abstract; + + class procedure DumpBuf(const Ptr: Pointer; const Size: Integer; + const memDump: TMemo; const Base: DWORD = 0; + const AutoClear: Boolean = True); overload; + class procedure DumpBuf(const Blob: TJclCLRBlobRecord; const memDump: TMemo; + const AutoClear: Boolean = False); overload; + end; + +implementation + +{$R *.DFM} + +uses + JclStrings; + +{ TfrmAbstract } + +class procedure TfrmAbstract.DumpBuf(const Ptr: Pointer; const Size: Integer; + const memDump: TMemo; const Base: DWORD; const AutoClear: Boolean); +const + WIDE_LINE_WIDTH = 76; + THIN_LINE_WIDTH = 44; +var + I, ByteCount, LineWidth: Integer; + pch: PChar; + DumpStr: string; +begin + if AutoClear then memDump.Clear; + + ByteCount := 0; + pch := Ptr; + + with TCanvas.Create do + try + Handle := GetDC(memDump.Handle); + Font.Name := 'Fixedsys'; + Font.Size := 12; + if (TextWidth('?')*WIDE_LINE_WIDTH) < memDump.ClientWidth then + LineWidth := 16 + else if (TextWidth('?')*THIN_LINE_WIDTH) < memDump.ClientWidth then + LineWidth := 8 + else + LineWidth := 4; + finally + Free; + end; + + with memDump.Lines do + try + BeginUpdate; + + while ByteCount < Size do + begin + DumpStr := IntToHex(Base + DWord(ByteCount), 8) + ': '; + for I:=0 to LineWidth-1 do + begin + if ((Size - ByteCount) > LineWidth) or ((Size - ByteCount) > I) then + DumpStr := DumpStr + IntToHex(Integer(pch[ByteCount+I]), 2) + ' ' + else + DumpStr := DumpStr + ' '; + end; + + DumpStr := DumpStr + '; '; + + for I:=0 to LineWidth-1 do + begin + if ((Size - ByteCount) > LineWidth) or ((Size - ByteCount) > I) then + begin + if CharIsAlphaNum(Char(pch[ByteCount+I])) then + DumpStr := DumpStr + pch[ByteCount+I] + else + DumpStr := DumpStr + '.' + end + else + DumpStr := DumpStr + ' '; + end; + + Add(DumpStr); + Inc(ByteCount, LineWidth); + end; + finally + EndUpdate; + end; + memDump.Perform(WM_VSCROLL, SB_TOP, 0); +end; + +class procedure TfrmAbstract.DumpBuf(const Blob: TJclCLRBlobRecord; + const memDump: TMemo; const AutoClear: Boolean); +begin + TfrmAbstract.DumpBuf(Blob.Memory, Blob.Size, memDump, Blob.Offset, AutoClear); +end; + +end. diff --git a/official/1.104/examples/windows/clr/ClrDemoBlobForm.dfm b/official/1.104/examples/windows/clr/ClrDemoBlobForm.dfm new file mode 100644 index 0000000..cd4bb39 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoBlobForm.dfm @@ -0,0 +1,71 @@ +object frmBlobs: TfrmBlobs + Left = 414 + Top = 406 + BorderStyle = bsDialog + Caption = 'Blob Stream' + ClientHeight = 273 + ClientWidth = 392 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poMainFormCenter + PixelsPerInch = 96 + TextHeight = 13 + object btnOK: TBitBtn + Left = 159 + Top = 240 + Width = 75 + Height = 25 + TabOrder = 0 + Kind = bkOK + end + object lstBlobs: TListView + Left = 8 + Top = 8 + Width = 377 + Height = 105 + Columns = < + item + Caption = 'Index' + Width = 40 + end + item + Alignment = taCenter + Caption = 'Offset' + Width = 80 + end + item + Caption = 'Size' + Width = 64 + end> + GridLines = True + OwnerData = True + ReadOnly = True + RowSelect = True + TabOrder = 1 + ViewStyle = vsReport + OnData = lstBlobsData + OnSelectItem = lstBlobsSelectItem + end + object memDump: TMemo + Left = 8 + Top = 120 + Width = 377 + Height = 113 + Color = clInactiveBorder + Font.Charset = GB2312_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Fixedsys' + Font.Style = [] + ImeName = #32043#20809#25340#38899#36755#20837#27861'2.2'#29256 + ParentFont = False + ReadOnly = True + ScrollBars = ssVertical + TabOrder = 2 + end +end diff --git a/official/1.104/examples/windows/clr/ClrDemoBlobForm.pas b/official/1.104/examples/windows/clr/ClrDemoBlobForm.pas new file mode 100644 index 0000000..ef8bf69 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoBlobForm.pas @@ -0,0 +1,71 @@ +unit ClrDemoBlobForm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + JclCLR, StdCtrls, Buttons, ComCtrls; + +type + TfrmBlobs = class(TForm) + btnOK: TBitBtn; + lstBlobs: TListView; + memDump: TMemo; + procedure lstBlobsSelectItem(Sender: TObject; Item: TListItem; + Selected: Boolean); + procedure lstBlobsData(Sender: TObject; Item: TListItem); + private + FStream: TJclCLRBlobStream; + procedure ShowBlobs(const AStream: TJclCLRBlobStream); + public + class procedure Execute(const AStream: TJclCLRBlobStream); + end; + +var + frmBlobs: TfrmBlobs; + +implementation + +uses ClrDemoAbstractFrame; + +{$R *.DFM} + +{ TfrmBlobs } + +class procedure TfrmBlobs.Execute(const AStream: TJclCLRBlobStream); +begin + with TfrmBlobs.Create(nil) do + try + ShowBlobs(AStream); + ShowModal; + finally + Free; + end; +end; + +procedure TfrmBlobs.ShowBlobs(const AStream: TJclCLRBlobStream); +begin + FStream := AStream; + lstBlobs.Items.Count := FStream.BlobCount; +end; + +procedure TfrmBlobs.lstBlobsSelectItem(Sender: TObject; Item: TListItem; + Selected: Boolean); +begin + if Selected then + with TJclCLRBlobRecord(Item.Data) do + TfrmAbstract.DumpBuf(Memory, Size, memDump, + FStream.Offset + DWORD(Memory) - DWORD(FStream.Data)); +end; + +procedure TfrmBlobs.lstBlobsData(Sender: TObject; Item: TListItem); +begin + Item.Caption := IntToStr(Item.Index); + Item.Data := FStream.Blobs[Item.Index]; + + Item.SubItems.Add('$' + + IntToHex(FStream.Blobs[Item.Index].Offset, 8)); + Item.SubItems.Add(IntToStr(FStream.Blobs[Item.Index].Size)); +end; + +end. diff --git a/official/1.104/examples/windows/clr/ClrDemoCLRFrame.dfm b/official/1.104/examples/windows/clr/ClrDemoCLRFrame.dfm new file mode 100644 index 0000000..99dd6f2 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoCLRFrame.dfm @@ -0,0 +1,184 @@ +inherited frmCLR: TfrmCLR + Width = 422 + Height = 325 + object PC: TPageControl + Left = 0 + Top = 89 + Width = 422 + Height = 236 + ActivePage = tsStrongNameSign + Align = alClient + TabOrder = 0 + object tsStrongNameSign: TTabSheet + Caption = 'Strong Name Signature' + object memStrongNameSign: TMemo + Left = 0 + Top = 0 + Width = 414 + Height = 208 + TabStop = False + Align = alClient + Color = clInactiveBorder + Font.Charset = GB2312_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Fixedsys' + Font.Style = [] + ParentFont = False + ReadOnly = True + ScrollBars = ssVertical + TabOrder = 0 + end + end + object tsResources: TTabSheet + Caption = 'Resources' + ImageIndex = 1 + object memResources: TMemo + Left = 0 + Top = 105 + Width = 414 + Height = 103 + TabStop = False + Align = alClient + Color = clInactiveBorder + Font.Charset = GB2312_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Fixedsys' + Font.Style = [] + ParentFont = False + ReadOnly = True + ScrollBars = ssVertical + TabOrder = 0 + end + object lstResources: TListView + Left = 0 + Top = 0 + Width = 414 + Height = 105 + Align = alTop + Columns = < + item + Caption = 'Index' + Width = 40 + end + item + Alignment = taCenter + Caption = 'Offset' + Width = 80 + end + item + Alignment = taCenter + Caption = 'RVA' + Width = 80 + end + item + Caption = 'Size' + Width = 64 + end> + ReadOnly = True + RowSelect = True + TabOrder = 1 + ViewStyle = vsReport + OnSelectItem = lstResourcesSelectItem + end + end + object tsVTableFixup: TTabSheet + Caption = 'VTable Fixups' + ImageIndex = 2 + object lstVTableFixups: TListView + Left = 0 + Top = 0 + Width = 414 + Height = 208 + Align = alClient + Columns = < + item + Caption = 'Index' + Width = 40 + end + item + Alignment = taCenter + Caption = 'Offset' + Width = 80 + end + item + Caption = 'Count' + Width = 40 + end + item + Caption = 'Flags' + Width = 200 + end> + ReadOnly = True + RowSelect = True + TabOrder = 0 + ViewStyle = vsReport + end + end + end + object pnlTop: TPanel + Left = 0 + Top = 0 + Width = 422 + Height = 89 + Align = alTop + BevelOuter = bvNone + TabOrder = 1 + object lblVer: TLabel + Left = 8 + Top = 16 + Width = 108 + Height = 13 + Caption = 'Required CLR Version:' + end + object lblEntryPointToken: TLabel + Left = 8 + Top = 56 + Width = 88 + Height = 13 + Caption = 'Entry Point Token:' + end + object edtVer: TEdit + Left = 120 + Top = 12 + Width = 121 + Height = 21 + Color = clInactiveBorder + ReadOnly = True + TabOrder = 0 + end + object boxFlags: TGroupBox + Left = 256 + Top = 0 + Width = 145 + Height = 81 + Caption = 'Image Runtime Flags' + TabOrder = 1 + object lstFlags: TCheckListBox + Left = 8 + Top = 16 + Width = 129 + Height = 57 + TabStop = False + Color = clInactiveBorder + ItemHeight = 13 + Items.Strings = ( + 'IL Only' + '32bit Required' + 'Strong Name Signed' + 'Track Debug Data') + TabOrder = 0 + end + end + object edtEntryPointToken: TEdit + Left = 120 + Top = 52 + Width = 121 + Height = 21 + Color = clInactiveBorder + ReadOnly = True + TabOrder = 2 + end + end +end diff --git a/official/1.104/examples/windows/clr/ClrDemoCLRFrame.pas b/official/1.104/examples/windows/clr/ClrDemoCLRFrame.pas new file mode 100644 index 0000000..38da0e0 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoCLRFrame.pas @@ -0,0 +1,183 @@ +unit ClrDemoCLRFrame; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ClrDemoAbstractFrame, StdCtrls, JclCLR, CheckLst, ExtCtrls, ComCtrls; + +type + TfrmCLR = class (TfrmAbstract) + boxFlags: TGroupBox; + edtEntryPointToken: TEdit; + edtVer: TEdit; + lblEntryPointToken: TLabel; + lblVer: TLabel; + lstFlags: TCheckListBox; + lstResources: TListView; + lstVTableFixups: TListView; + memResources: TMemo; + memStrongNameSign: TMemo; + PC: TPageControl; + pnlTop: TPanel; + tsResources: TTabSheet; + tsStrongNameSign: TTabSheet; + tsVTableFixup: TTabSheet; + procedure lstResourcesSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); + private + FCLR: TJclClrHeaderEx; + public + procedure ShowInfo(const ACLR: TJclCLRHeaderEx); override; + end; + +var + frmCLR: TfrmCLR; + +implementation + +{$R *.DFM} + +uses + Math, TypInfo, JclMetadata; + +{ TfrmCLR } + +{ +*********************************** TfrmCLR ************************************ +} +procedure TfrmCLR.lstResourcesSelectItem(Sender: TObject; Item: TListItem; + Selected: Boolean); +begin + if Selected then + with TJclCLRResourceRecord(Item.Data) do + DumpBuf(Memory, Size, memResources, RVA); +end; + +procedure TfrmCLR.ShowInfo(const ACLR: TJclCLRHeaderEx); + + procedure UpdateFlags; + var + AFlag: TJclClrImageFlag; + begin + for AFlag:=Low(TJclClrImageFlag) to High(TJclClrImageFlag) do + begin + lstFlags.Checked[Integer(AFlag)] := AFlag in ACLR.Flags; + lstFlags.ItemEnabled[Integer(AFlag)] := False; + end; + end; + + procedure UpdateEntryPointToken; + var + AMethod: TJclCLRTableMethodDefRow; + ATypeDef: TJclCLRTableTypeDefRow; + begin + if Assigned(ACLR.EntryPointToken) then + begin + if ACLR.EntryPointToken is TJclCLRTableMethodDefRow then + begin + AMethod := ACLR.EntryPointToken as TJclCLRTableMethodDefRow; + if AMethod.ParentToken is TJclCLRTableTypeDefRow then + begin + ATypeDef := AMethod.ParentToken as TJclCLRTableTypeDefRow; + edtEntryPointToken.Text := ATypeDef.Namespace + '.' + ATypeDef.Name + '.' + AMethod.Name; + end + else + edtEntryPointToken.Text := AMethod.Name; + end + else if ACLR.EntryPointToken is TJclCLRTableFileRow then + edtEntryPointToken.Text := 'External file' + else + edtEntryPointToken.Text := '$' + IntToHex(ACLR.Header.EntryPointToken, 8); + end + else + edtEntryPointToken.Text := '(none)'; + end; + + procedure UpdateStrongNameSign; + begin + if ACLR.HasStrongNameSignature then + with ACLR.StrongNameSignature, ACLR.Header.StrongNameSignature do + DumpBuf(Memory, Size, memStrongNameSign, + VirtualAddress-ACLR.Image.RvaToSection(VirtualAddress).PointerToRawData) + else + memStrongNameSign.Clear; + end; + + procedure UpdateResources; + var + I: Integer; + begin + with lstResources.Items do + try + BeginUpdate; + Clear; + + if ACLR.HasResources then + for I:=0 to ACLR.ResourceCount-1 do + with Add do + begin + Caption := IntToStr(I); + Data := ACLR.Resources[I]; + with ACLR.Resources[I] do + begin + SubItems.Add('$' + IntToHex(Offset, 8)); + SubItems.Add('$' + IntToHex(RVA, 8)); + SubItems.Add(IntToStr(Size)); + end; + end + else + memResources.Clear; + finally + EndUpdate; + end; + end; + + function FormatVTableKinds(const Kinds: TJclClrVTableKinds): string; + var + AKind: TJclClrVTableKind; + begin + Result := ''; + for AKind:=Low(TJclClrVTableKind) to High(TJclClrVTableKind) do + if AKind in Kinds then + Result := Result + GetEnumName(TypeInfo(TJclClrVTableKind), Integer(AKind)) + ' '; + end; + + procedure UpdateVTableFixups; + var + I: Integer; + begin + with lstVTableFixups.Items do + try + BeginUpdate; + Clear; + if ACLR.HasVTableFixup then + for I:=0 to ACLR.VTableFixupCount-1 do + with Add do + begin + Caption := IntToStr(I); + Data := ACLR.VTableFixups[I]; + with ACLR.VTableFixups[I] do + begin + SubItems.Add('$' + IntToHex(RVA, 8)); + SubItems.Add(IntToStr(Count)); + SubItems.Add(FormatVTableKinds(Kinds)); + end; + end; + finally + EndUpdate; + end; + end; + +begin + FCLR := ACLR; + + edtVer.Text := ACLR.VersionString; + UpdateEntryPointToken; + UpdateFlags; + UpdateStrongNameSign; + UpdateResources; + UpdateVTableFixups; +end; + +end. + diff --git a/official/1.104/examples/windows/clr/ClrDemoGuidForm.dfm b/official/1.104/examples/windows/clr/ClrDemoGuidForm.dfm new file mode 100644 index 0000000..252c632 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoGuidForm.dfm @@ -0,0 +1,48 @@ +object frmGuid: TfrmGuid + Left = 339 + Top = 225 + BorderStyle = bsDialog + Caption = 'Guid Stream' + ClientHeight = 273 + ClientWidth = 392 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poMainFormCenter + PixelsPerInch = 96 + TextHeight = 13 + object btnOK: TBitBtn + Left = 159 + Top = 240 + Width = 75 + Height = 25 + TabOrder = 0 + Kind = bkOK + end + object lstGuids: TListView + Left = 8 + Top = 8 + Width = 377 + Height = 225 + Columns = < + item + Caption = 'Index' + Width = 40 + end + item + Caption = 'GUID' + Width = 320 + end> + GridLines = True + OwnerData = True + ReadOnly = True + RowSelect = True + TabOrder = 1 + ViewStyle = vsReport + OnData = lstGuidsData + end +end diff --git a/official/1.104/examples/windows/clr/ClrDemoGuidForm.pas b/official/1.104/examples/windows/clr/ClrDemoGuidForm.pas new file mode 100644 index 0000000..0814a97 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoGuidForm.pas @@ -0,0 +1,53 @@ +unit ClrDemoGuidForm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ComCtrls, StdCtrls, Buttons, JclCLR; + +type + TfrmGuid = class(TForm) + btnOK: TBitBtn; + lstGuids: TListView; + procedure lstGuidsData(Sender: TObject; Item: TListItem); + private + FStream: TJclCLRGuidStream; + procedure ShowGuids(const AStream: TJclCLRGuidStream); + public + class procedure Execute(const AStream: TJclCLRGuidStream); + end; + +implementation + +{$R *.DFM} + +uses + ComObj; + +{ TfrmGuid } + +class procedure TfrmGuid.Execute(const AStream: TJclCLRGuidStream); +begin + with TfrmGuid.Create(nil) do + try + ShowGuids(AStream); + ShowModal; + finally + Free; + end; +end; + +procedure TfrmGuid.ShowGuids(const AStream: TJclCLRGuidStream); +begin + FStream := AStream; + lstGuids.Items.Count := FStream.GuidCount; +end; + +procedure TfrmGuid.lstGuidsData(Sender: TObject; Item: TListItem); +begin + Item.Caption := IntToStr(Item.Index); + Item.SubItems.Add(GUIDToString(FStream.Guids[Item.Index])); +end; + +end. diff --git a/official/1.104/examples/windows/clr/ClrDemoMain.dfm b/official/1.104/examples/windows/clr/ClrDemoMain.dfm new file mode 100644 index 0000000..4566ad1 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoMain.dfm @@ -0,0 +1,171 @@ +object frmMain: TfrmMain + Left = 274 + Top = 241 + Width = 696 + Height = 480 + Caption = 'Microsoft .Net Framework CLR Demo' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Menu = mnuMain + OldCreateOrder = False + Position = poDesktopCenter + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object barStatus: TStatusBar + Left = 0 + Top = 415 + Width = 688 + Height = 19 + Panels = <> + end + object PC: TPageControl + Left = 0 + Top = 0 + Width = 688 + Height = 415 + ActivePage = tsCLR + Align = alClient + TabOrder = 1 + OnChange = PCChange + object tsCLR: TTabSheet + Caption = 'CLR' + inline frmCLR: TfrmCLR + Left = 0 + Top = 0 + Width = 680 + Height = 387 + Align = alClient + TabOrder = 0 + inherited PC: TPageControl + Width = 680 + Height = 298 + inherited tsStrongNameSign: TTabSheet + inherited memStrongNameSign: TMemo + Width = 672 + Height = 270 + end + end + end + inherited pnlTop: TPanel + Width = 680 + end + end + end + object tsMetadata: TTabSheet + Caption = 'Metadata' + ImageIndex = 1 + inline frmMetadata: TfrmMetadata + Left = 0 + Top = 0 + Width = 680 + Height = 387 + Align = alClient + TabOrder = 0 + inherited pnlVer: TPanel + Width = 680 + end + inherited lstStream: TListView + Width = 680 + Height = 355 + PopupMenu = popMetadataStream + OnDblClick = frmMetadatalstStreamDblClick + end + end + end + end + object lstActions: TActionList + Left = 24 + Top = 144 + object actFileExit: TAction + Category = 'File' + Caption = 'E&xit' + ShortCut = 32883 + OnExecute = actFileExitExecute + end + object actFileOpen: TAction + Category = 'File' + Caption = '&Open' + ShortCut = 16463 + OnExecute = actFileOpenExecute + end + object actHelpAbout: TAction + Category = 'Help' + Caption = '&About' + ShortCut = 112 + OnExecute = actHelpAboutExecute + end + object actViewStreamData: TAction + Category = 'View' + Caption = 'Stream &Data' + OnExecute = actViewStreamDataExecute + OnUpdate = actViewStreamDataUpdate + end + object actFileDump: TAction + Category = 'File' + Caption = 'Dump IL...' + ShortCut = 16452 + OnExecute = actFileDumpExecute + OnUpdate = actFileDumpUpdate + end + end + object mnuMain: TMainMenu + Left = 88 + Top = 144 + object mnuFile: TMenuItem + Caption = '&File' + object mnuFileOpen: TMenuItem + Action = actFileOpen + end + object mnuFileDump: TMenuItem + Action = actFileDump + end + object mnuFileLine0: TMenuItem + Caption = '-' + end + object mnuFileExit: TMenuItem + Action = actFileExit + end + end + object mnuView: TMenuItem + Caption = '&View' + object mnuViewStreamData: TMenuItem + Action = actViewStreamData + end + end + object mnuHelp: TMenuItem + Caption = '&Help' + object mnuFileAbout: TMenuItem + Action = actHelpAbout + end + end + end + object dlgOpen: TOpenDialog + Filter = 'Executable Files (*.exe;*.dll)|*.exe;*.dll|All Files (*.*)|*.*' + Title = 'Select a file to browse' + Left = 152 + Top = 144 + end + object popMetadataStream: TPopupMenu + Left = 236 + Top = 144 + object popViewStreamData: TMenuItem + Action = actViewStreamData + end + end + object dlgSave: TSaveDialog + DefaultExt = '.il' + Filter = + 'IL Source Files (*.il)|*.il|Text Files (*.txt)|*.txt|All Files (' + + '*.*)|*.*' + Options = [ofHideReadOnly, ofPathMustExist, ofEnableSizing] + Title = 'Dump Metadata to IL Source File' + Left = 320 + Top = 144 + end +end diff --git a/official/1.104/examples/windows/clr/ClrDemoMain.pas b/official/1.104/examples/windows/clr/ClrDemoMain.pas new file mode 100644 index 0000000..a0687c3 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoMain.pas @@ -0,0 +1,195 @@ +unit ClrDemoMain; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ActnList, Menus, ComCtrls, ClrDemoAbstractFrame, + JclPeImage, JclCLR, ClrDemoMetaDataFrame, ClrDemoCLRFrame; + +type + TfrmMain = class(TForm) + lstActions: TActionList; + actFileExit: TAction; + actFileOpen: TAction; + actHelpAbout: TAction; + mnuMain: TMainMenu; + mnuFile: TMenuItem; + mnuFileOpen: TMenuItem; + mnuFileLine0: TMenuItem; + mnuFileExit: TMenuItem; + mnuHelp: TMenuItem; + mnuFileAbout: TMenuItem; + dlgOpen: TOpenDialog; + barStatus: TStatusBar; + PC: TPageControl; + tsMetadata: TTabSheet; + frmMetadata: TfrmMetadata; + popMetadataStream: TPopupMenu; + actViewStreamData: TAction; + popViewStreamData: TMenuItem; + mnuView: TMenuItem; + mnuViewStreamData: TMenuItem; + tsCLR: TTabSheet; + frmCLR: TfrmCLR; + actFileDump: TAction; + dlgSave: TSaveDialog; + mnuFileDump: TMenuItem; + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure actFileExitExecute(Sender: TObject); + procedure actHelpAboutExecute(Sender: TObject); + procedure actFileOpenExecute(Sender: TObject); + procedure PCChange(Sender: TObject); + procedure actViewStreamDataUpdate(Sender: TObject); + procedure actViewStreamDataExecute(Sender: TObject); + procedure frmMetadatalstStreamDblClick(Sender: TObject); + procedure actFileDumpExecute(Sender: TObject); + procedure actFileDumpUpdate(Sender: TObject); + private + m_Image: TJclPeImage; + m_CLR: TJclCLRHeaderEx; + + function GetActiveFrame: TfrmAbstract; + public + { Public declarations } + end; + +var + frmMain: TfrmMain; + +implementation + +{$R *.DFM} + +uses + ShellApi, ClrDemoStringsForm, ClrDemoGuidForm, ClrDemoBlobForm, + ClrDemoTableForm, ClrDemoUserStringsForm; + +const + CRLF = #10#13; + +procedure TfrmMain.FormCreate(Sender: TObject); +begin + m_Image := nil; + m_CLR := nil; +end; + +procedure TfrmMain.FormDestroy(Sender: TObject); +begin + FreeAndNil(m_CLR); + FreeAndNil(m_Image); +end; + +function TfrmMain.GetActiveFrame: TfrmAbstract; +var + I: Integer; +begin + if Assigned(PC.ActivePage) then + with PC.ActivePage do + for I:=0 to ControlCount-1 do + if Controls[0].InheritsFrom(TfrmAbstract) then + begin + Result := TfrmAbstract(Controls[0]); + Exit; + end; + + raise Exception.Create('No frame was active!'); +end; + +procedure TfrmMain.actFileExitExecute(Sender: TObject); +begin + Close; +end; + +procedure TfrmMain.actHelpAboutExecute(Sender: TObject); +begin + ShellAbout(Handle, PChar(Caption), + PChar('JEDI Code Library (JCL)' + CRLF + 'http://delphi-jedi.org/'), + Application.Icon.Handle); +end; + +procedure TfrmMain.actFileOpenExecute(Sender: TObject); +var + Img: TJclPeImage; +begin + if dlgOpen.Execute then + begin + Img := TJclPeImage.Create; + Img.FileName := dlgOpen.FileName; + + if Img.IsCLR then + begin + FreeAndNil(m_Image); + m_Image := Img; + + FreeAndNil(m_CLR); + m_CLR := TJclCLRHeaderEx.Create(m_Image); + GetActiveFrame.ShowInfo(m_CLR); + end + else + begin + FreeAndNil(Img); + MessageDlg(Format('The file %s is not a CLR file', [dlgOpen.FileName]), mtWarning, [mbOK], 0); + end; + end; +end; + +procedure TfrmMain.PCChange(Sender: TObject); +begin + if Assigned(m_CLR) then + GetActiveFrame.ShowInfo(m_CLR); +end; + +procedure TfrmMain.actViewStreamDataUpdate(Sender: TObject); +begin + with frmMetadata.lstStream do + TAction(Sender).Enabled := Assigned(Selected) and + ((TObject(Selected.Data).ClassType = TJclCLRStringsStream) or + (TObject(Selected.Data).ClassType = TJclCLRGuidStream) or + (TObject(Selected.Data).ClassType = TJclCLRUserStringStream) or + (TObject(Selected.Data).ClassType = TJclCLRBlobStream) or + (TObject(Selected.Data).ClassType = TJclCLRTableStream)); +end; + +procedure TfrmMain.actViewStreamDataExecute(Sender: TObject); +begin + with frmMetadata.lstStream do + if TObject(Selected.Data).ClassType = TJclCLRStringsStream then + TfrmStrings.Execute(Selected.Data) + else if TObject(Selected.Data).ClassType = TJclCLRGuidStream then + TfrmGuid.Execute(Selected.Data) + else if TObject(Selected.Data).ClassType = TJclCLRUserStringStream then + TfrmUserStrings.Execute(Selected.Data) + else if TObject(Selected.Data).ClassType = TJclCLRBlobStream then + TfrmBlobs.Execute(Selected.Data) + else if TObject(Selected.Data).ClassType = TJclCLRTableStream then + TfrmTable.Execute(Selected.Data); +end; + +procedure TfrmMain.frmMetadatalstStreamDblClick(Sender: TObject); +begin + if actViewStreamData.Enabled then + actViewStreamDataExecute(Sender); +end; + +procedure TfrmMain.actFileDumpExecute(Sender: TObject); +begin + dlgSave.InitialDir := ExtractFilePath(m_Image.FileName); + dlgSave.FileName := ExtractFileName(ChangeFileExt(m_Image.FileName, '.il')); + if dlgSave.Execute then + with TStringList.Create do + try + Text := m_CLR.DumpIL; + SaveToFile(dlgSave.FileName); + finally + Free; + end; +end; + +procedure TfrmMain.actFileDumpUpdate(Sender: TObject); +begin + TAction(Sender).Enabled := Assigned(m_CLR); +end; + +end. diff --git a/official/1.104/examples/windows/clr/ClrDemoMetaDataFrame.dfm b/official/1.104/examples/windows/clr/ClrDemoMetaDataFrame.dfm new file mode 100644 index 0000000..da945dc --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoMetaDataFrame.dfm @@ -0,0 +1,70 @@ +inherited frmMetadata: TfrmMetadata + Width = 374 + Height = 276 + object pnlVer: TPanel + Left = 0 + Top = 0 + Width = 374 + Height = 32 + Align = alTop + BevelOuter = bvNone + TabOrder = 0 + object lblVer: TLabel + Left = 8 + Top = 8 + Width = 38 + Height = 13 + Caption = 'Version:' + end + object lblVerStr: TLabel + Left = 160 + Top = 8 + Width = 68 + Height = 13 + Caption = 'Version String:' + end + object edtVer: TEdit + Left = 56 + Top = 4 + Width = 89 + Height = 21 + Color = clInactiveBorder + ReadOnly = True + TabOrder = 0 + end + object edtVerStr: TEdit + Left = 240 + Top = 4 + Width = 89 + Height = 21 + Color = clInactiveBorder + ReadOnly = True + TabOrder = 1 + end + end + object lstStream: TListView + Left = 0 + Top = 32 + Width = 374 + Height = 244 + Align = alClient + Columns = < + item + AutoSize = True + Caption = 'Name' + end + item + AutoSize = True + Caption = 'Offset' + end + item + AutoSize = True + Caption = 'Size' + end> + GridLines = True + ReadOnly = True + RowSelect = True + TabOrder = 1 + ViewStyle = vsReport + end +end diff --git a/official/1.104/examples/windows/clr/ClrDemoMetaDataFrame.pas b/official/1.104/examples/windows/clr/ClrDemoMetaDataFrame.pas new file mode 100644 index 0000000..e1e4264 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoMetaDataFrame.pas @@ -0,0 +1,56 @@ +unit ClrDemoMetaDataFrame; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ClrDemoAbstractFrame, JclCLR, StdCtrls, ComCtrls, ExtCtrls, Menus; + +type + TfrmMetadata = class(TfrmAbstract) + pnlVer: TPanel; + lblVer: TLabel; + edtVer: TEdit; + edtVerStr: TEdit; + lblVerStr: TLabel; + lstStream: TListView; + private + { Private declarations } + public + procedure ShowInfo(const ACLR: TJclCLRHeaderEx); override; + end; + +var + frmMetadata: TfrmMetadata; + +implementation + +{$R *.DFM} + +{ TfrmMetadata } + +procedure TfrmMetadata.ShowInfo(const ACLR: TJclCLRHeaderEx); +var + I: Integer; +begin + with ACLR.Metadata do + begin + edtVer.Text := Version; + edtVerStr.Text := VersionString; + + with lstStream.Items do + begin + Clear; + for I:=0 to StreamCount-1 do + with Add do + begin + Caption := Streams[I].Name; + Data := Streams[I]; + SubItems.Add('$' + IntToHex(Streams[I].Offset, 8)); + SubItems.Add(IntToStr(Streams[I].Size)); + end; + end; + end; +end; + +end. diff --git a/official/1.104/examples/windows/clr/ClrDemoStringsForm.dfm b/official/1.104/examples/windows/clr/ClrDemoStringsForm.dfm new file mode 100644 index 0000000..6803682 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoStringsForm.dfm @@ -0,0 +1,52 @@ +object frmStrings: TfrmStrings + Left = 291 + Top = 205 + BorderStyle = bsDialog + Caption = 'Strings Stream' + ClientHeight = 273 + ClientWidth = 392 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poMainFormCenter + PixelsPerInch = 96 + TextHeight = 13 + object lstStrings: TListView + Left = 8 + Top = 8 + Width = 377 + Height = 225 + Columns = < + item + Caption = 'Index' + Width = 40 + end + item + Caption = 'Offset' + Width = 64 + end + item + Caption = 'String' + Width = 315 + end> + GridLines = True + OwnerData = True + ReadOnly = True + RowSelect = True + TabOrder = 0 + ViewStyle = vsReport + OnData = lstStringsData + end + object btnOK: TBitBtn + Left = 158 + Top = 240 + Width = 75 + Height = 25 + TabOrder = 1 + Kind = bkOK + end +end diff --git a/official/1.104/examples/windows/clr/ClrDemoStringsForm.pas b/official/1.104/examples/windows/clr/ClrDemoStringsForm.pas new file mode 100644 index 0000000..a9364bf --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoStringsForm.pas @@ -0,0 +1,54 @@ +unit ClrDemoStringsForm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, Buttons, ComCtrls, JclCLR; + +type + TfrmStrings = class(TForm) + lstStrings: TListView; + btnOK: TBitBtn; + procedure lstStringsData(Sender: TObject; Item: TListItem); + private + FStream: TJclCLRStringsStream; + procedure ShowStrings(const AStream: TJclCLRStringsStream); + public + class procedure Execute(const AStream: TJclCLRStringsStream); + end; + +implementation + +{$R *.DFM} + +uses + JclUnicode; + +{ TfrmStrings } + +class procedure TfrmStrings.Execute(const AStream: TJclCLRStringsStream); +begin + with TfrmStrings.Create(nil) do + try + ShowStrings(AStream); + ShowModal; + finally + Free; + end; +end; + +procedure TfrmStrings.ShowStrings(const AStream: TJclCLRStringsStream); +begin + FStream := AStream; + lstStrings.Items.Count := FStream.StringCount; +end; + +procedure TfrmStrings.lstStringsData(Sender: TObject; Item: TListItem); +begin + Item.Caption := IntToStr(Item.Index); + Item.SubItems.Add(IntToHex(FStream.Offsets[Item.Index], 8)); + Item.SubItems.Add(FStream.Strings[Item.Index]); +end; + +end. diff --git a/official/1.104/examples/windows/clr/ClrDemoTableForm.dfm b/official/1.104/examples/windows/clr/ClrDemoTableForm.dfm new file mode 100644 index 0000000..1106400 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoTableForm.dfm @@ -0,0 +1,102 @@ +object frmTable: TfrmTable + Left = 384 + Top = 245 + BorderStyle = bsDialog + Caption = 'Table Stream' + ClientHeight = 453 + ClientWidth = 632 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poMainFormCenter + PixelsPerInch = 96 + TextHeight = 13 + object lblVer: TLabel + Left = 8 + Top = 8 + Width = 119 + Height = 13 + Caption = 'Table Schemata Version:' + end + object edtVer: TEdit + Left = 136 + Top = 4 + Width = 57 + Height = 21 + Color = clInactiveBorder + ReadOnly = True + TabOrder = 0 + end + object btnOK: TBitBtn + Left = 278 + Top = 424 + Width = 75 + Height = 25 + TabOrder = 1 + Kind = bkOK + end + object lstTables: TListView + Left = 8 + Top = 32 + Width = 617 + Height = 193 + Columns = < + item + Caption = 'Index' + Width = 40 + end + item + Alignment = taCenter + Caption = 'Rows' + Width = 40 + end + item + Alignment = taCenter + Caption = 'Offset' + Width = 76 + end + item + Caption = 'Size' + Width = 40 + end + item + Caption = 'Type' + Width = 200 + end> + GridLines = True + ReadOnly = True + RowSelect = True + TabOrder = 2 + ViewStyle = vsReport + OnSelectItem = lstTablesSelectItem + end + object memDump: TMemo + Left = 8 + Top = 232 + Width = 617 + Height = 185 + Color = clInactiveBorder + Font.Charset = GB2312_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Fixedsys' + Font.Style = [] + ParentFont = False + ReadOnly = True + ScrollBars = ssVertical + TabOrder = 3 + end + object btnDumpIL: TButton + Left = 200 + Top = 4 + Width = 75 + Height = 25 + Caption = 'Dump IL' + TabOrder = 4 + OnClick = btnDumpILClick + end +end diff --git a/official/1.104/examples/windows/clr/ClrDemoTableForm.pas b/official/1.104/examples/windows/clr/ClrDemoTableForm.pas new file mode 100644 index 0000000..65f384f --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoTableForm.pas @@ -0,0 +1,598 @@ +unit ClrDemoTableForm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, Buttons, ComCtrls, JclClr, JclMetadata; + +type + TDumpLineKind = (lkWide, lkThin, lkEmpty); + + TfrmTable = class(TForm) + lblVer: TLabel; + edtVer: TEdit; + btnOK: TBitBtn; + lstTables: TListView; + memDump: TMemo; + btnDumpIL: TButton; + procedure lstTablesSelectItem(Sender: TObject; Item: TListItem; + Selected: Boolean); + procedure btnDumpILClick(Sender: TObject); + private + FStream: TJclClrTableStream; + + procedure Dump(const Msg: string); overload; + procedure Dump(const FmtMsg: string; const Args: array of const); overload; + procedure Dump(const Msg: string; const Blob: TJclClrBlobRecord); overload; + procedure Dump(const LineKind: TDumpLineKind); overload; + procedure ShowTables(const AStream: TJclClrTableStream); + procedure DumpTable(const ATable: TJclClrTableAssembly); overload; + procedure DumpTable(const ATable: TJclClrTableAssemblyRef); overload; + procedure DumpTable(const ATable: TJclClrTableAssemblyOS); overload; + procedure DumpTable(const ATable: TJclClrTableAssemblyProcessor); overload; + procedure DumpTable(const ATable: TJclClrTableModule); overload; + procedure DumpTable(const ATable: TJclClrTableModuleRef); overload; + procedure DumpTable(const ATable: TJclClrTableFieldDef); overload; + procedure DumpTable(const ATable: TJclClrTableMemberRef); overload; + procedure DumpTable(const ATable: TJclClrTableCustomAttribute); overload; + procedure DumpTable(const ATable: TJclClrTableMethodDef); overload; + procedure DumpTable(const ATable: TJclClrTableTypeDef); overload; + procedure DumpTable(const ATable: TJclClrTableTypeRef); overload; + procedure DumpTable(const ATable: TJclClrTablePropertyDef); overload; + procedure DumpTable(const ATable: TJclClrTableManifestResource); overload; + procedure DumpTable(const ATable: TJclClrTableFile); overload; + procedure DumpTable(const ATable: TJclClrTableParamDef); overload; + procedure DumpTable(const ATable: TJclClrTableExportedType); overload; + public + class procedure Execute(const AStream: TJclClrTableStream); + end; + +implementation + +{$R *.DFM} + +{.$DEFINE USE_JWA} + +uses + ComObj, TypInfo, ClrDemoAbstractFrame, +{$IFDEF USE_JWA} + JwaWinCrypt, JwaWinNT, +{$ENDIF} + JclStrings, JclSysUtils, ClrDemoMain; + +{ TfrmTable } + +class procedure TfrmTable.Execute(const AStream: TJclClrTableStream); +begin + with TfrmTable.Create(nil) do + try + ShowTables(AStream); + ShowModal; + finally + Free; + end; +end; + +procedure TfrmTable.Dump(const Msg: string); +begin + memDump.Lines.Add(Msg); +end; + +procedure TfrmTable.Dump(const FmtMsg: string; const Args: array of const); +begin + Dump(Format(FmtMsg, Args)); +end; + +procedure TfrmTable.Dump(const Msg: string; const Blob: TJclClrBlobRecord); +begin + Dump(Msg); + TfrmAbstract.DumpBuf(Blob, memDump); +end; + +procedure TfrmTable.Dump(const LineKind: TDumpLineKind); +begin + case LineKind of + lkWide: Dump('========================================'); + lkThin: Dump('----------------------------------------'); + lkEmpty: Dump(''); + end; +end; + +procedure TfrmTable.ShowTables(const AStream: TJclClrTableStream); +var + AKind: TJclClrTableKind; +begin + FStream := AStream; + edtVer.Text := AStream.VersionString; + with lstTables.Items do + begin + BeginUpdate; + try + Clear; + for AKind:=Low(TJclClrTableKind) to High(TJclClrTableKind) do + if Assigned(AStream.Tables[AKind]) then + with AStream.Tables[AKind], Add do + begin + Caption := IntToStr(Count); + Data := AStream.Tables[AKind]; + SubItems.Add(IntToStr(RowCount)); + SubItems.Add('$' + IntToHex(Offset, 8)); + SubItems.Add(IntToStr(Size)); + SubItems.Add(Copy(AStream.Tables[AKind].ClassName, StrLen('TJclClrTable')+1, MaxWord)); + end; + finally + EndUpdate; + end; + end; +end; + +procedure TfrmTable.lstTablesSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); +var + ATable: TJclClrTable; +begin + if Selected then + begin + ATable := TJclClrTable(Item.Data); + memDump.Clear; + + if ATable.ClassType = TJclClrTableAssembly then + DumpTable(TJclClrTableAssembly(ATable)) + else if ATable.ClassType = TJclClrTableAssemblyRef then + DumpTable(TJclClrTableAssemblyRef(ATable)) + else if ATable.ClassType = TJclClrTableAssemblyOS then + DumpTable(TJclClrTableAssemblyOS(ATable)) + else if ATable.ClassType = TJclClrTableAssemblyProcessor then + DumpTable(TJclClrTableAssemblyProcessor(ATable)) + else if ATable.ClassType = TJclClrTableModule then + DumpTable(TJclClrTableModule(ATable)) + else if ATable.ClassType = TJclClrTableModuleRef then + DumpTable(TJclClrTableModuleRef(ATable)) + else if ATable.ClassType = TJclClrTableTypeDef then + DumpTable(TJclClrTableTypeDef(ATable)) + else if ATable.ClassType = TJclClrTableTypeRef then + DumpTable(TJclClrTableTypeRef(ATable)) + else if ATable.ClassType = TJclClrTableMethodDef then + DumpTable(TJclClrTableMethodDef(ATable)) + else if ATable.ClassType = TJclClrTableFieldDef then + DumpTable(TJclClrTableFieldDef(ATable)) + else if ATable.ClassType = TJclClrTableMemberRef then + DumpTable(TJclClrTableMemberRef(ATable)) + else if ATable.ClassType = TJclClrTableCustomAttribute then + DumpTable(TJclClrTableCustomAttribute(ATable)) + else if ATable.ClassType = TJclClrTableParamDef then + DumpTable(TJclClrTableParamDef(ATable)) + else if ATable.ClassType = TJclClrTablePropertyDef then + DumpTable(TJclClrTablePropertyDef(ATable)) + else if ATable.ClassType = TJclClrTableFile then + DumpTable(TJclClrTableFile(ATable)) + else if ATable.ClassType = TJclClrTableManifestResource then + DumpTable(TJclClrTableManifestResource(ATable)) + else if ATable.ClassType = TJclClrTableExportedType then + DumpTable(TJclClrTableExportedType(ATable)); + + memDump.Perform(WM_VSCROLL, SB_TOP, 0); + end; +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableAssembly); + function GetHashAlgName(const HashAlgId: DWORD): string; + begin + {$IFDEF USE_JWA} + case HashAlgId of + CALG_MD2: Result := 'MD2'; + CALG_MD4: Result := 'MD4'; + CALG_MD5: Result := 'MD5'; + CALG_SHA1: Result := 'SHA1'; + CALG_MAC: Result := 'MAC'; + else + Result := IntToHex(HashAlgId, 8); + end; + {$ELSE} + Result := IntToHex(HashAlgId, 8); + {$ENDIF} + end; +var + AFlag: TJclClrAssemblyFlag; + FlagMsg: string; +begin + Assert(ATable.RowCount = 1); + with ATable[0] do + begin + Dump('Name: ' + Name); + Dump('Version: ' + Version); + FlagMsg := 'Flag: '; + for AFlag := Low(TJclClrAssemblyFlag) to High(TJclClrAssemblyFlag) do + if AFlag in Flags then + FlagMsg := FlagMsg + + GetEnumName(TypeInfo(TJclClrAssemblyFlag), Integer(AFlag)) + ' '; + Dump(FlagMsg); + if CultureOffset <> 0 then + Dump('Culture: ' + Culture); + Dump('Hash Algorithm: ' + GetHashAlgName(HashAlgId)); + if Assigned(PublicKey) then + Dump('Public Key: ', PublicKey); + end; +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableAssemblyRef); +var + I: Integer; + AFlag: TJclClrAssemblyFlag; + FlagMsg: string; + Assembly: TJclClrTableAssemblyRefRow; +begin + for I:=0 to ATable.RowCount-1 do + begin + Assembly := ATable[I]; + Dump('Name: ' + Assembly.Name); + Dump('Version: ' + Assembly.Version); + FlagMsg := 'Flag: '; + for AFlag := Low(TJclClrAssemblyFlag) to High(TJclClrAssemblyFlag) do + if AFlag in Assembly.Flags then + FlagMsg := FlagMsg + + GetEnumName(TypeInfo(TJclClrAssemblyFlag), Integer(AFlag)) + ' '; + Dump(FlagMsg); + if Assembly.CultureOffset <> 0 then + Dump('Culture: ' + Assembly.Culture); + if Assigned(Assembly.PublicKeyOrToken) then + Dump('Public Key or Token: ', Assembly.PublicKeyOrToken); + if Assigned(Assembly.HashValue) then + Dump('Hash Value: ', Assembly.HashValue); + Dump(lkWide); + end; +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableAssemblyOS); + function GetOSName(const PlatformID: DWORD): string; + begin + case PlatformID of + VER_PLATFORM_WIN32s: Result := 'Win32s'; + VER_PLATFORM_WIN32_WINDOWS: Result := 'Windows'; + VER_PLATFORM_WIN32_NT: Result := 'WinNT'; + else + Result := IntToHex(PlatformID, 8); + end; + end; +var + I: Integer; +begin + for I:=0 to ATable.RowCount-1 do + begin + Dump('OS : ' + GetOSName(ATable[I].PlatformID)); + Dump('Version: ' + ATable[I].Version); + end; +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableAssemblyProcessor); + function GetProcessName(const Processor: DWORD): string; + begin + {$IFDEF USE_JWA} + case Processor of + PROCESSOR_INTEL_386: Result := 'Intel 386'; + PROCESSOR_INTEL_486: Result := 'Intel 486'; + PROCESSOR_INTEL_PENTIUM: Result := 'Intel Pentium'; + PROCESSOR_INTEL_IA64: Result := 'Intel IA64'; + PROCESSOR_MIPS_R4000: Result := 'MIPS R4000'; + PROCESSOR_ALPHA_21064: Result := 'Alpha 21064'; + PROCESSOR_PPC_601: Result := 'Power PC 601'; + PROCESSOR_PPC_603: Result := 'Power PC 603'; + PROCESSOR_PPC_604: Result := 'Power PC 604'; + PROCESSOR_PPC_620: Result := 'Power PC 620'; + PROCESSOR_OPTIL: Result := 'MS IL'; + else + Result := IntToStr(Processor) + ' [' + IntToHex(Processor, 8) + ']'; + end; + {$ELSE} + Result := IntToStr(Processor) + ' [' + IntToHex(Processor, 8) + ']'; + {$ENDIF} + end; +var + I: Integer; +begin + for I:=0 to ATable.RowCount-1 do + begin + Dump('Processor : ' + GetProcessName(ATable[I].Processor)); + end; +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableModule); +begin + Assert(ATable.RowCount = 1); + with ATable[0] do + begin + Dump('Name : %s', [Name]); + Dump('Mvid : %s', [GUIDToString(Mvid)]); + if HasEncId then + Dump('EncId : %s', [GUIDToString(EncId)]); + if HasEncBaseId then + Dump('EncBaseId: %s', [GUIDToString(EncBaseId)]); + end; +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableModuleRef); +var + I: Integer; +begin + for I:=0 to ATable.RowCount-1 do + Dump('Name : ' + ATable[I].Name); +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableTypeDef); +const + ClassSemanticsNames: array[TJclClrClassSemantics] of string = + ('.class', 'interface'); + TypeVisibilityNames: array[TJclClrTypeVisibility] of string = + ('private', 'public', 'nested public', 'nested private', 'nested family', + 'nested assembly', 'nested famandassem', 'nested famorassem'); + AbstractNames: array[Boolean] of string = ('', 'abstract '); + ClassLayoutNames: array[TJclClrClassLayout] of string = + ('auto', 'sequential', 'explicit'); + StringFormattingNames: array[TJclClrStringFormatting] of string = + ('ansi', 'unicode', 'autochar'); + ImportNames: array[Boolean] of string = ('', 'import '); + SerializableNames: array[Boolean] of string = ('', 'serializable'); + SealedNames: array[Boolean] of string = ('', 'sealed '); + SpecialNameNames: array[Boolean] of string = ('', 'specialname '); + BeforeFieldInitNames: array[Boolean] of string = ('', 'beforefieldinit '); + RTSpecialNameNames: array[Boolean] of string = ('', 'rtspecialname '); + HasSecurityNames: array[Boolean] of string = ('', 'HasSecurity '); +var + I, J: Integer; +begin + for I:=0 to ATable.RowCount-1 do + with ATable.Rows[I] do + begin + Dump('%s %s %s%s %s %s%s%s%s%s%s%s%s', + [ClassSemanticsNames[ClassSemantics], + TypeVisibilityNames[Visibility], + AbstractNames[taAbstract in Attributes], + ClassLayoutNames[ClassLayout], + StringFormattingNames[StringFormatting], + ImportNames[taImport in Attributes], + SerializableNames[taSerializable in Attributes], + SealedNames[taSealed in Attributes], + SpecialNameNames[taSpecialName in Attributes], + BeforeFieldInitNames[taBeforeFieldInit in Attributes], + RTSpecialNameNames[taRTSpecialName in Attributes], + HasSecurityNames[taHasSecurity in Attributes], + FullName]); + + if HasField then + for J:=0 to FieldCount-1 do + Dump(' .field %s', [Fields[J].Name]); + + if HasMethod then + for J:=0 to MethodCount-1 do + Dump(' .method %s', [Methods[J].Name]); + end; +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableTypeRef); +var + I: Integer; +begin + for I:=0 to ATable.RowCount-1 do + Dump('%s.%s', [ATable.Rows[I].Namespace, ATable.Rows[I].Name]) +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableMethodDef); +var + I, J: Integer; + AttrStr, ParamStr: string; +begin + for I:=0 to ATable.RowCount-1 do + with ATable.Rows[I] do + begin + if HasParam then + begin + ParamStr := ''; + for J:=0 to ParamCount-1 do + begin + if ParamStr <> '' then + ParamStr := ParamStr + ', '; + if Params[J].Flags <> [] then + begin + AttrStr := ''; + if pkIn in Params[J].Flags then + AttrStr := AttrStr + 'In'; + if pkOut in Params[J].Flags then + begin + if AttrStr <> '' then + AttrStr := AttrStr + ', '; + AttrStr := AttrStr + 'Out'; + end; + if pkOptional in Params[J].Flags then + begin + if AttrStr <> '' then + AttrStr := AttrStr + ', '; + AttrStr := AttrStr + 'Opt'; + end; + if pkHasDefault in Params[J].Flags then + begin + if AttrStr <> '' then + AttrStr := AttrStr + ', '; + AttrStr := AttrStr + 'Default'; + end; + if pkHasFieldMarshal in Params[J].Flags then + begin + if AttrStr <> '' then + AttrStr := AttrStr + ', '; + AttrStr := AttrStr + 'Marshal'; + end; + ParamStr := ParamStr + '[' + AttrStr + '] '; + end; + ParamStr := ParamStr + Params[J].Name; + end; + end; + if Assigned(MethodBody) then + begin + Dump('%s.%s::%s(%s) @ %p:%d', [ParentToken.Namespace, ParentToken.Name, Name, ParamStr, Pointer(RVA), MethodBody.Size]); + TfrmAbstract.DumpBuf(MethodBody.Code, MethodBody.Size, memDump, DWORD(MethodBody.Code), False); + end + else + begin + Dump('%s.%s::%s(%s)', [ParentToken.Namespace, ParentToken.Name, Name, ParamStr]); + end; + end; +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableFieldDef); +var + I: Integer; +begin + for I:=0 to ATable.RowCount-1 do + Dump('%s', [ATable.Rows[I].Name]) +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableMemberRef); +var + I: Integer; +begin + for I:=0 to ATable.RowCount-1 do + Dump('%s', [ATable.Rows[I].Name]) +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableCustomAttribute); + function GetParent(const Attr: TJclClrTableCustomAttributeRow): string; + var + ARow: TJclClrTableRow; + begin + ARow := Attr.Parent; + if ARow is TJclClrTableAssemblyRow then + with ARow as TJclClrTableAssemblyRow do + Result := Name + else if ARow is TJclClrTableTypeDefRow then + with ARow as TJclClrTableTypeDefRow do + Result := Namespace + '.' + Name + else if ARow is TJclClrTableTypeRefRow then + with ARow as TJclClrTableTypeRefRow do + Result := Namespace + '.' + Name + else if ARow is TJclClrTableMethodDefRow then + with ARow as TJclClrTableMethodDefRow do + Result := Name + else if ARow is TJclClrTableParamDefRow then + with ARow as TJclClrTableParamDefRow do + Result := Method.ParentToken.Namespace + '.' + Method.ParentToken.Name + '::' + + Method.Name + '(..., ' + Name + ', ...)' + else + Result := 'Unknown Parent'; + + Result := Result + ' <' + Copy(ARow.ClassName, Length('TJclClrTable')+1, + Length(ARow.ClassName)-Length('TJclClrTable')-Length('Row')) + + '> [' + IntToHex(Attr.ParentIdx, 8) + ']'; + end; + function GetMethod(const Attr: TJclClrTableCustomAttributeRow): string; + function GetParentClassName(const ParentClass: TJclClrTableRow): string; + begin + if ParentClass is TJclClrTableTypeRefRow then + with ParentClass as TJclClrTableTypeRefRow do + Result := Namespace + '.' + Name + else if ParentClass is TJclClrTableModuleRefRow then + with ParentClass as TJclClrTableModuleRefRow do + Result := Name + else if ParentClass is TJclClrTableMethodDefRow then + with ParentClass as TJclClrTableMethodDefRow do + Result := Name + else if ParentClass is TJclClrTableTypeSpecRow then + Result := '' + else if ParentClass is TJclClrTableTypeDefRow then + with ParentClass as TJclClrTableTypeDefRow do + Result := Namespace + '.' + Name + else + Result := 'Unknown Class - ' + ParentClass.ClassName; + end; + var + AMethod: TJclClrTableRow; + begin + AMethod := Attr.Method; + if AMethod is TJclClrTableMethodDefRow then + with AMethod as TJclClrTableMethodDefRow do + Result := ParentToken.Namespace + '.' + ParentToken.Name + ' :: ' + Name + else if AMethod is TJclClrTableMemberRefRow then + with AMethod as TJclClrTableMemberRefRow do + Result := GetParentClassName(ParentClass) + '::' + Name + else + Result := 'Unknown method type - ' + IntToHex(Attr.ParentIdx, 8); + + Result := Result + ' <' + Copy(AMethod.ClassName, Length('TJclClrTable')+1, + Length(AMethod.ClassName)-Length('TJclClrTable')-Length('Row')) + + '> [' + IntToHex(Attr.TypeIdx, 8) + ']'; + end; +var + I: Integer; +begin + for I:=0 to ATable.RowCount-1 do + begin + Dump('Parent: ' + GetParent(ATable[I])); + Dump('Method: ' + GetMethod(ATable[I])); + Dump('Value: ', ATable[I].Value); + Dump(lkWide); + end; +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableParamDef); +var + I: Integer; + Attr: string; +begin + for I:=0 to ATable.RowCount-1 do + begin + Attr := ''; + if pkIn in ATable.Rows[I].Flags then + Attr := Attr + 'In '; + if pkOut in ATable.Rows[I].Flags then + Attr := Attr + 'Out '; + if pkOptional in ATable.Rows[I].Flags then + Attr := Attr + 'Opt '; + if pkHasDefault in ATable.Rows[I].Flags then + Attr := Attr + 'Default '; + if pkHasFieldMarshal in ATable.Rows[I].Flags then + Attr := Attr + 'Marshal '; + + Dump('%s %s', [ATable.Rows[I].Name, Attr]); + end; +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTablePropertyDef); +var + I: Integer; +begin + for I:=0 to ATable.RowCount-1 do + Dump('%s', [ATable.Rows[I].Name]) +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableManifestResource); +var + I: Integer; +begin + for I:=0 to ATable.RowCount-1 do + Dump('%s', [ATable.Rows[I].Name]) +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableFile); +var + I: Integer; +begin + for I:=0 to ATable.RowCount-1 do + begin + Dump('File Name: ' + ATable[I].Name); + Dump('Contains Metadata: ' + BooleanToStr(ATable[I].ContainsMetadata)); + Dump('Hash Value: ', ATable[I].HashValue); + end; +end; + +procedure TfrmTable.DumpTable(const ATable: TJclClrTableExportedType); +var + I: Integer; +begin + for I:=0 to ATable.RowCount-1 do + Dump(ATable[I].TypeNamespace + '.' + ATable[I].TypeName); +end; + +procedure TfrmTable.btnDumpILClick(Sender: TObject); +begin + frmMain.actFileDump.Execute; +end; + +end. diff --git a/official/1.104/examples/windows/clr/ClrDemoUserStringsForm.dfm b/official/1.104/examples/windows/clr/ClrDemoUserStringsForm.dfm new file mode 100644 index 0000000..9630d9b --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoUserStringsForm.dfm @@ -0,0 +1,52 @@ +object frmUserStrings: TfrmUserStrings + Left = 299 + Top = 296 + BorderStyle = bsDialog + Caption = 'User String Stream' + ClientHeight = 273 + ClientWidth = 392 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = True + Position = poMainFormCenter + PixelsPerInch = 96 + TextHeight = 13 + object lstStrings: TListView + Left = 8 + Top = 8 + Width = 377 + Height = 225 + Columns = < + item + Caption = 'Index' + Width = 40 + end + item + Caption = 'Offset' + Width = 64 + end + item + Caption = 'String' + Width = 315 + end> + GridLines = True + OwnerData = True + ReadOnly = True + RowSelect = True + TabOrder = 0 + ViewStyle = vsReport + OnData = lstStringsData + end + object btnOK: TBitBtn + Left = 158 + Top = 240 + Width = 75 + Height = 25 + TabOrder = 1 + Kind = bkOK + end +end diff --git a/official/1.104/examples/windows/clr/ClrDemoUserStringsForm.pas b/official/1.104/examples/windows/clr/ClrDemoUserStringsForm.pas new file mode 100644 index 0000000..8bde438 --- /dev/null +++ b/official/1.104/examples/windows/clr/ClrDemoUserStringsForm.pas @@ -0,0 +1,54 @@ +unit ClrDemoUserStringsForm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ClrDemoStringsForm, StdCtrls, Buttons, ComCtrls, JclCLR; + +type + TfrmUserStrings = class(TForm) + lstStrings: TListView; + btnOK: TBitBtn; + procedure lstStringsData(Sender: TObject; Item: TListItem); + private + FStream: TJclCLRUserStringStream; + procedure ShowStrings(const AStream: TJclCLRUserStringStream); + public + class procedure Execute(const AStream: TJclCLRUserStringStream); + end; + +var + frmUserStrings: TfrmUserStrings; + +implementation + +{$R *.DFM} + +{ TfrmUserStrings } + +class procedure TfrmUserStrings.Execute(const AStream: TJclCLRUserStringStream); +begin + with TfrmUserStrings.Create(nil) do + try + ShowStrings(AStream); + ShowModal; + finally + Free; + end; +end; + +procedure TfrmUserStrings.ShowStrings(const AStream: TJclCLRUserStringStream); +begin + FStream := AStream; + lstStrings.Items.Count := FStream.StringCount; +end; + +procedure TfrmUserStrings.lstStringsData(Sender: TObject; Item: TListItem); +begin + Item.Caption := IntToStr(Item.Index); + Item.SubItems.Add(IntToHex(FStream.Offsets[Item.Index], 8)); + Item.SubItems.Add(FStream.Strings[Item.Index]); +end; + +end. diff --git a/official/1.104/examples/windows/compression/archive/ArchiveDemo.dof b/official/1.104/examples/windows/compression/archive/ArchiveDemo.dof new file mode 100644 index 0000000..e957ac9 --- /dev/null +++ b/official/1.104/examples/windows/compression/archive/ArchiveDemo.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\..\bin + diff --git a/official/1.104/examples/windows/compression/archive/ArchiveDemo.dpr b/official/1.104/examples/windows/compression/archive/ArchiveDemo.dpr new file mode 100644 index 0000000..251bbc1 --- /dev/null +++ b/official/1.104/examples/windows/compression/archive/ArchiveDemo.dpr @@ -0,0 +1,15 @@ +program ArchiveDemo; + +uses + Forms, + UMain in 'UMain.pas' {FormMain}, + UProperties in 'UProperties.pas' {FormArchiveSettings}; + +{$R *.res} +{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TFormMain, FormMain); + Application.Run; +end. diff --git a/official/1.104/examples/windows/compression/archive/ArchiveDemo.res b/official/1.104/examples/windows/compression/archive/ArchiveDemo.res new file mode 100644 index 0000000000000000000000000000000000000000..119d1715757829c5b46aea563ff8d007487dd4d0 GIT binary patch literal 4396 zcmbW5y^ice5QS^CNF)e0AfFAiE(S{o$&3%L$5+F6_ ztLm~nvz}%5S}Ik$ySmP)pYE~7%ek+?BU%R{e>Weh`PJ?^N50V=n zX`nry`}9L^kB^TwmExLl%I_aOSl{)AP3VWscsrl#tNuSeU?g^G=90%WPQG5nYbw1> z;;0z_S%yeee;W-|6Mu2+D*J8h)9~Q75&N@ZSKP!8hf!MoE+70OV3Xq|&l)EO z*Lrt5{K=2!-}jLJhlK|*dX1EWNw#os9;cV_lT&& z}Zn$UI;=sGs5}#P{jdmV$iyfbu>xYQj zZRVJR1Mk$|u}5Ja;3+*wAJ`Z1TiM1AzJ#?x&BM>9zy1ggb8zr8TjWP#1NiE(r@CPB z4p+w?WrOV?-Gz`Jk6->g-VqKO&%#EuKXYGCs@ME%$pKDa1~z^hzU=6GFzJIBljFwo zAl+%-5FCgR46lFU&W(fmlQqw2tp*1l>wGXz4xIzo$RX+(Pqy zZLHjDA2^)h1zY~2rY-*D(5>;4bCX}23R8kd7O%a_-@#h*3uI+17DfZp*=E25?k9Y9d@A>Y;PXd<^^`E$L zp5qRP_`Ns4As<7l(TI)mUx>AF&^Yl!@5k@?moLX0sBMTTe%A8N@f>L_`d(Vt89%)r z_0eANC19qo&Y1IemitzR=sWH&IEF9$5x>`8W8(EZ4e~EL*4^hESiY{kc{j3_=Yg@m zmwo)`Y2t3R!@uHBeD~e(13T8I()w3^Bmd&2xx_;Ajet(U=VcDO24lP5h@s&}{`Icf znsG)mH*waM`oOJ|o%VWtq`e=9b|%Fkf7{t}iSO^a>-@JPF%Ikf=l!R5a)Q8*`wL&h zMeNQ^v6I7$HSdM^hFbHmi?3dYdyV)Nk8toGF-HFoAKyTnbD!5c_tesx;)M+y zXWq|rN8Ay6o?Xrv*b9deV{);5Sm#{5#$oCC0~m1G>T_&zyxy~nR}NrZKFlF|XCXOJ zBW(Ph=@M_%@w?Y>)DQU`nL7L3eOwaIJM&25UDc=fEulAvk-Tvy@(xGuCCzWY<-Gna z2RqQq)WU%tqu1UdvUN=LB;OART>N|3b>sx!Z+Vi#YyI$o7kn2UPwh;?;eFW2FFBw+ zwm0O#?dFyX#Z7I}Px^hY&i!ce@hX?6Ctt@d_q`YIntl3vtG?#va=sqTswV%H{3H1! z`6xLyd6Y)p`#kDz2jpmWi+nWuQog?t#z9z}Fl#;D)^E-1dr7Td+b{N`{cOKVezM=B X^V$Bd!M_>$KjZ%1|JC4MkQ@6C&37VX literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/compression/archive/UMain.dfm b/official/1.104/examples/windows/compression/archive/UMain.dfm new file mode 100644 index 0000000..6bdf66f --- /dev/null +++ b/official/1.104/examples/windows/compression/archive/UMain.dfm @@ -0,0 +1,359 @@ +object FormMain: TFormMain + Left = 0 + Top = 0 + Caption = 'FormMain' + ClientHeight = 301 + ClientWidth = 771 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object ListView1: TListView + Left = 0 + Top = 81 + Width = 771 + Height = 204 + Align = alClient + Columns = < + item + Caption = 'Local name' + Width = 150 + end + item + Caption = 'Archive name' + Width = 150 + end + item + Caption = 'Size' + Width = 30 + end + item + Caption = 'Compressed' + Width = 30 + end + item + Caption = 'Creation' + end + item + Caption = 'Last access' + end + item + Caption = 'Last write' + end + item + Caption = 'Comment' + Width = 30 + end + item + Caption = 'OS' + Width = 20 + end + item + Caption = 'FS' + Width = 20 + end + item + Caption = 'User' + Width = 20 + end + item + Caption = 'Group' + Width = 20 + end + item + Caption = 'CRC' + end> + MultiSelect = True + OwnerData = True + RowSelect = True + TabOrder = 0 + ViewStyle = vsReport + OnData = ListView1Data + end + object ProgressBar1: TProgressBar + Left = 0 + Top = 285 + Width = 771 + Height = 16 + Align = alBottom + TabOrder = 1 + end + object PageControl1: TPageControl + Left = 0 + Top = 0 + Width = 771 + Height = 81 + ActivePage = TabSheetReadOnly + Align = alTop + TabOrder = 2 + object TabSheetReadOnly: TTabSheet + Caption = 'Read-only' + object ButtonOpen: TButton + Left = 16 + Top = 16 + Width = 75 + Height = 25 + Action = ActionOpenRO + TabOrder = 0 + end + object ButtonExtractSelected: TButton + Left = 97 + Top = 16 + Width = 96 + Height = 25 + Action = ActionExtractSelectedRO + TabOrder = 1 + end + object ButtonExtractAll: TButton + Left = 199 + Top = 16 + Width = 75 + Height = 25 + Action = ActionExtractAllRO + TabOrder = 2 + end + object ButtonROProperties: TButton + Left = 280 + Top = 16 + Width = 75 + Height = 25 + Action = ActionProperties + TabOrder = 3 + end + end + object TabSheetWriteOnly: TTabSheet + Caption = 'Write-only' + ImageIndex = 1 + object ButtonNew: TButton + Left = 16 + Top = 16 + Width = 75 + Height = 25 + Action = ActionNewWO + TabOrder = 0 + end + object ButtonAddFile: TButton + Left = 97 + Top = 16 + Width = 75 + Height = 25 + Action = ActionAddFile + TabOrder = 1 + end + object ButtonAddDirectory: TButton + Left = 178 + Top = 16 + Width = 75 + Height = 25 + Action = ActionAddDirectory + TabOrder = 2 + end + object ButtonSave: TButton + Left = 259 + Top = 16 + Width = 75 + Height = 25 + Action = ActionSave + TabOrder = 3 + end + object ButtonPropertiesWO: TButton + Left = 340 + Top = 16 + Width = 75 + Height = 25 + Action = ActionProperties + TabOrder = 4 + end + end + object TabSheetReadWrite: TTabSheet + Caption = 'Read and write' + ImageIndex = 2 + object ButtonNewRW: TButton + Left = 16 + Top = 16 + Width = 75 + Height = 25 + Action = ActionNewRW + TabOrder = 0 + end + object ButtonOpenRW: TButton + Left = 97 + Top = 16 + Width = 75 + Height = 25 + Action = ActionOpenRW + TabOrder = 1 + end + object ButtonDeleteRW: TButton + Left = 178 + Top = 16 + Width = 75 + Height = 25 + Action = ActionDeleteRW + TabOrder = 2 + end + object ButtonAddFileRW: TButton + Left = 259 + Top = 16 + Width = 75 + Height = 25 + Action = ActionAddFile + TabOrder = 3 + end + object ButtonAddDirectoryRW: TButton + Left = 340 + Top = 16 + Width = 75 + Height = 25 + Action = ActionAddDirectory + TabOrder = 4 + end + object ButtonExtractSelectedRW: TButton + Left = 421 + Top = 16 + Width = 92 + Height = 25 + Action = ActionExtractSelectedRO + TabOrder = 5 + end + object ButtonExtractAllRW: TButton + Left = 519 + Top = 16 + Width = 75 + Height = 25 + Action = ActionExtractAllRO + TabOrder = 6 + end + object ButtonSaveRW: TButton + Left = 600 + Top = 16 + Width = 75 + Height = 25 + Action = ActionSave + TabOrder = 7 + end + object ButtonPropertiesRW: TButton + Left = 681 + Top = 16 + Width = 75 + Height = 25 + Action = ActionProperties + TabOrder = 8 + end + end + end + object ActionList1: TActionList + Left = 64 + Top = 152 + object ActionOpenRO: TAction + Category = 'ReadOnly' + Caption = '&Open' + OnExecute = ActionOpenROExecute + OnUpdate = ActionAlwaysEnabled + end + object ActionExtractSelectedRO: TAction + Category = 'ReadOnly' + Caption = '&Extract selected' + OnExecute = ActionExtractSelectedROExecute + OnUpdate = ActionExtractSelectedROUpdate + end + object ActionExtractAllRO: TAction + Category = 'ReadOnly' + Caption = 'Extract &all' + OnExecute = ActionExtractAllROExecute + OnUpdate = ActionExtractAllROUpdate + end + object ActionNewWO: TAction + Category = 'WriteOnly' + Caption = '&New' + OnExecute = ActionNewWOExecute + OnUpdate = ActionAlwaysEnabled + end + object ActionAddFile: TAction + Category = 'Write' + Caption = 'Add &file' + OnExecute = ActionAddFileExecute + OnUpdate = ActionAddFileUpdate + end + object ActionAddDirectory: TAction + Category = 'Write' + Caption = 'Add &directory' + OnExecute = ActionAddDirectoryExecute + OnUpdate = ActionAddDirectoryUpdate + end + object ActionSave: TAction + Category = 'Write' + Caption = '&Save' + OnExecute = ActionSaveExecute + OnUpdate = ActionSaveUpdate + end + object ActionDeleteRW: TAction + Category = 'ReadWrite' + Caption = '&Delete' + OnExecute = ActionDeleteRWExecute + OnUpdate = ActionDeleteRWUpdate + end + object ActionNewRW: TAction + Category = 'ReadWrite' + Caption = '&New' + OnExecute = ActionNewRWExecute + OnUpdate = ActionAlwaysEnabled + end + object ActionOpenRW: TAction + Category = 'ReadWrite' + Caption = '&Open' + OnExecute = ActionOpenRWExecute + OnUpdate = ActionAlwaysEnabled + end + object ActionProperties: TAction + Category = 'ReadWrite' + Caption = '&Properties' + OnExecute = ActionPropertiesExecute + OnUpdate = ActionPropertiesUpdate + end + end + object OpenDialogArchiveRO: TOpenDialog + FilterIndex = 0 + Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] + Title = 'Open an archive for extraction' + Left = 104 + Top = 152 + end + object SaveDialogArchiveWO: TSaveDialog + DefaultExt = '*.zip' + FilterIndex = 0 + Options = [ofOverwritePrompt, ofHideReadOnly, ofPathMustExist, ofCreatePrompt, ofNoReadOnlyReturn, ofEnableSizing] + Title = 'Create a new archive' + Left = 144 + Top = 152 + end + object OpenDialogFile: TOpenDialog + Filter = 'All files (*.*)|*.*' + FilterIndex = 0 + Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] + Left = 184 + Top = 152 + end + object OpenDialogArchiveRW: TOpenDialog + FilterIndex = 0 + Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] + Title = 'Open an archive for modification' + Left = 104 + Top = 184 + end + object SaveDialogArchiveRW: TSaveDialog + DefaultExt = '*.zip' + FilterIndex = 0 + Options = [ofOverwritePrompt, ofHideReadOnly, ofPathMustExist, ofCreatePrompt, ofNoReadOnlyReturn, ofEnableSizing] + Title = 'Create a new archive' + Left = 144 + Top = 184 + end +end diff --git a/official/1.104/examples/windows/compression/archive/UMain.pas b/official/1.104/examples/windows/compression/archive/UMain.pas new file mode 100644 index 0000000..10975f6 --- /dev/null +++ b/official/1.104/examples/windows/compression/archive/UMain.pas @@ -0,0 +1,568 @@ +unit UMain; + +{$I jcl.inc} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ExtCtrls, ActnList, ComCtrls, ImgList, JclCompression; + +type + TFormMain = class(TForm) + ActionList1: TActionList; + ActionOpenRO: TAction; + ActionExtractSelectedRO: TAction; + ActionExtractAllRO: TAction; + ActionNewWO: TAction; + ActionAddFile: TAction; + ActionAddDirectory: TAction; + ActionSave: TAction; + ListView1: TListView; + OpenDialogArchiveRO: TOpenDialog; + SaveDialogArchiveWO: TSaveDialog; + OpenDialogFile: TOpenDialog; + ProgressBar1: TProgressBar; + PageControl1: TPageControl; + TabSheetReadOnly: TTabSheet; + TabSheetWriteOnly: TTabSheet; + TabSheetReadWrite: TTabSheet; + ButtonOpen: TButton; + ButtonExtractSelected: TButton; + ButtonExtractAll: TButton; + ButtonNew: TButton; + ButtonAddFile: TButton; + ButtonAddDirectory: TButton; + ButtonSave: TButton; + ActionDeleteRW: TAction; + ActionNewRW: TAction; + ActionOpenRW: TAction; + ButtonNewRW: TButton; + ButtonOpenRW: TButton; + ButtonDeleteRW: TButton; + ButtonAddFileRW: TButton; + ButtonAddDirectoryRW: TButton; + ButtonExtractSelectedRW: TButton; + ButtonExtractAllRW: TButton; + ButtonSaveRW: TButton; + OpenDialogArchiveRW: TOpenDialog; + SaveDialogArchiveRW: TSaveDialog; + ButtonROProperties: TButton; + ActionProperties: TAction; + ButtonPropertiesWO: TButton; + ButtonPropertiesRW: TButton; + procedure ActionAlwaysEnabled(Sender: TObject); + procedure ActionExtractSelectedROUpdate(Sender: TObject); + procedure ActionExtractAllROUpdate(Sender: TObject); + procedure ActionAddFileUpdate(Sender: TObject); + procedure ActionAddDirectoryUpdate(Sender: TObject); + procedure ActionSaveUpdate(Sender: TObject); + procedure ActionNewWOExecute(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure ActionAddFileExecute(Sender: TObject); + procedure ActionAddDirectoryExecute(Sender: TObject); + procedure ActionSaveExecute(Sender: TObject); + procedure ActionOpenROExecute(Sender: TObject); + procedure ListView1Data(Sender: TObject; Item: TListItem); + procedure ActionExtractAllROExecute(Sender: TObject); + procedure ActionExtractSelectedROExecute(Sender: TObject); + procedure ActionDeleteRWUpdate(Sender: TObject); + procedure ActionDeleteRWExecute(Sender: TObject); + procedure ActionNewRWExecute(Sender: TObject); + procedure ActionOpenRWExecute(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure ActionPropertiesUpdate(Sender: TObject); + procedure ActionPropertiesExecute(Sender: TObject); + private + FArchive: TJclCompressionArchive; + FArchiveReference: IUnknown; + procedure CloseArchive; + procedure ArchiveProgress(Sender: TObject; const Value, MaxValue: Int64); + public + end; + +var + FormMain: TFormMain; + +implementation + +{$R *.dfm} + +uses + JclAnsiStrings, Sevenzip, FileCtrl, + UProperties; + +function FileTimeToString(const FileTime: TFileTime): string; +var + LocalFileTime: TFileTime; + SystemTime: TSystemTime; +begin + if FileTimeToLocalFileTime(FileTime, LocalFileTime) + and FileTimeToSystemTime(LocalFileTime, SystemTime) then + Result := DateTimeToStr(EncodeDate(SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay) + + EncodeTime(SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond, SystemTime.wMilliseconds)) + else + Result := ''; +end; + +procedure TFormMain.ActionAddDirectoryExecute(Sender: TObject); +var + Directory: string; +begin + if FileCtrl.SelectDirectory('Select directory', '', Directory {$IFDEF COMPILER9_UP} , [sdNewUI], Self {$ENDIF}) then + begin + (FArchive as TJclCompressArchive).AddDirectory(ExtractFileName(Directory), Directory, True, True); + ListView1.Items.BeginUpdate; + try + while ListView1.Items.Count < FArchive.ItemCount do + ListView1.Items.Add; + finally + ListView1.Items.EndUpdate; + end; + end; +end; + +procedure TFormMain.ActionAddDirectoryUpdate(Sender: TObject); +begin + (Sender as TAction).Enabled := (FArchive is TJclCompressArchive) and FArchive.MultipleItemContainer; +end; + +procedure TFormMain.ActionAddFileExecute(Sender: TObject); +begin + if OpenDialogFile.Execute then + begin + (FArchive as TJclCompressArchive).AddFile(ExtractFileName(OpenDialogFile.FileName), OpenDialogFile.FileName); + ListView1.Items.Add; + end; +end; + +procedure TFormMain.ActionAddFileUpdate(Sender: TObject); +begin + (Sender as TAction).Enabled := (FArchive is TJclCompressArchive) + and (FArchive.MultipleItemContainer or (ListView1.Items.Count = 0)); +end; + +procedure TFormMain.ActionAlwaysEnabled(Sender: TObject); +begin + (Sender as TAction).Enabled := True; +end; + +procedure TFormMain.ActionDeleteRWExecute(Sender: TObject); +var + Index: Integer; +begin + for Index := ListView1.Items.Count - 1 downto 0 do + if ListView1.Items[Index].Selected then + begin + (FArchive as TJclUpdateArchive).DeleteItem(Index); + Break; + end; + + ListView1.Items.Count := FArchive.ItemCount; +end; + +procedure TFormMain.ActionDeleteRWUpdate(Sender: TObject); +begin + (Sender as TAction).Enabled := (FArchive is TJclUpdateArchive) and (ListView1.SelCount = 1); +end; + +procedure TFormMain.ActionExtractAllROExecute(Sender: TObject); +var + Directory: string; +begin + if FileCtrl.SelectDirectory('Target directory', '', Directory {$IFDEF COMPILER9_UP} , [sdNewUI], Self {$ENDIF}) then + begin + if FArchive is TJclDecompressArchive then + TJclDecompressArchive(FArchive).ExtractAll(Directory, True) + else + if FArchive is TJclUpdateArchive then + TJclUpdateArchive(FArchive).ExtractAll(Directory, True); + end; +end; + +procedure TFormMain.ActionExtractAllROUpdate(Sender: TObject); +begin + (Sender as TAction).Enabled := (FArchive is TJclDecompressArchive) or (FArchive is TJclUpdateArchive); +end; + +procedure TFormMain.ActionExtractSelectedROExecute(Sender: TObject); +var + Directory: string; + Index: Integer; +begin + if FileCtrl.SelectDirectory('Target directory', '', Directory {$IFDEF COMPILER9_UP} , [sdNewUI], Self {$ENDIF}) then + begin + for Index := 0 to ListView1.Items.Count - 1 do + FArchive.Items[Index].Selected := ListView1.Items.Item[Index].Selected; + + if FArchive is TJclDecompressArchive then + TJclDecompressArchive(FArchive).ExtractSelected(Directory, True) + else + if FArchive is TJclUpdateArchive then + TJclUpdateArchive(FArchive).ExtractSelected(Directory, True); + end; +end; + +procedure TFormMain.ActionExtractSelectedROUpdate(Sender: TObject); +begin + (Sender as TAction).Enabled := ((FArchive is TJclDecompressArchive) or (FArchive is TJclUpdateArchive)) + and (ListView1.SelCount > 0); +end; + +procedure TFormMain.ActionNewWOExecute(Sender: TObject); +var + ArchiveFileName, VolumeSizeStr, Password: string; + AFormat: TJclCompressArchiveClass; + VolumeSize: Int64; + Code: Integer; +begin + if SaveDialogArchiveWO.Execute then + begin + CloseArchive; + + ArchiveFileName := SaveDialogArchiveWO.FileName; + + AFormat := GetArchiveFormats.FindCompressFormat(ArchiveFileName); + + if AFormat <> nil then + begin + VolumeSizeStr := '0'; + repeat + if InputQuery('Split archive?', 'Volume size in byte:', VolumeSizeStr) then + Val(VolumeSizeStr, VolumeSize, Code) + else + begin + VolumeSize := 0; + Code := 0; + end; + until Code = 0; + + InputQuery('Archive password', 'Value', Password); + + if VolumeSize <> 0 then + ArchiveFileName := ArchiveFileName + '.%.3d'; + + FArchive := AFormat.Create(ArchiveFileName, VolumeSize, VolumeSize <> 0); + FArchiveReference := FArchive; + FArchive.Password := Password; + FArchive.OnProgress := ArchiveProgress; + end + else + ShowMessage('not a supported format'); + end; +end; + +procedure TFormMain.ActionNewRWExecute(Sender: TObject); +var + ArchiveFileName, VolumeSizeStr, Password: string; + AFormat: TJclUpdateArchiveClass; + VolumeSize: Int64; + Code: Integer; +begin + if SaveDialogArchiveRW.Execute then + begin + CloseArchive; + + ArchiveFileName := SaveDialogArchiveRW.FileName; + + AFormat := GetArchiveFormats.FindUpdateFormat(ArchiveFileName); + + if AFormat <> nil then + begin + VolumeSizeStr := '0'; + repeat + if InputQuery('Split archive?', 'Volume size in byte:', VolumeSizeStr) then + Val(VolumeSizeStr, VolumeSize, Code) + else + begin + VolumeSize := 0; + Code := 0; + end; + until Code = 0; + + InputQuery('Archive password', 'Value', Password); + + if VolumeSize <> 0 then + ArchiveFileName := ArchiveFileName + '.%.3d'; + + FArchive := AFormat.Create(ArchiveFileName, VolumeSize, VolumeSize <> 0); + FArchiveReference := FArchive; + FArchive.Password := Password; + FArchive.OnProgress := ArchiveProgress; + end + else + ShowMessage('not a supported format'); + end; +end; + +procedure TFormMain.ActionOpenROExecute(Sender: TObject); +var + ArchiveFileName, Password: string; + AFormat: TJclDecompressArchiveClass; + SplitArchive: Boolean; +begin + if OpenDialogArchiveRO.Execute then + begin + CloseArchive; + + ArchiveFileName := OpenDialogArchiveRO.FileName; + SplitArchive := AnsiSameText(ExtractFileExt(ArchiveFileName), '.001'); + if SplitArchive then + ArchiveFileName := ChangeFileExt(ArchiveFileName, ''); + + AFormat := GetArchiveFormats.FindDecompressFormat(ArchiveFileName); + + if AFormat <> nil then + begin + if SplitArchive then + ArchiveFileName := ArchiveFileName + '.%.3d'; + + InputQuery('Archive password', 'Value', Password); + + FArchive := AFormat.Create(ArchiveFileName, 0, SplitArchive); + FArchiveReference := FArchive; + FArchive.Password := Password; + FArchive.OnProgress := ArchiveProgress; + + if FArchive is TJclDecompressArchive then + TJclDecompressArchive(FArchive).ListFiles + else + if FArchive is TJclUpdateArchive then + TJclUpdateArchive(FArchive).ListFiles; + + ListView1.Items.BeginUpdate; + try + while ListView1.Items.Count < FArchive.ItemCount do + ListView1.Items.Add; + finally + ListView1.Items.EndUpdate; + end; + end + else + ShowMessage('not a supported format'); + end; +end; + +procedure TFormMain.ActionOpenRWExecute(Sender: TObject); +var + ArchiveFileName, Password: string; + AFormat: TJclUpdateArchiveClass; + SplitArchive: Boolean; +begin + if OpenDialogArchiveRW.Execute then + begin + CloseArchive; + + ArchiveFileName := OpenDialogArchiveRW.FileName; + SplitArchive := AnsiSameText(ExtractFileExt(ArchiveFileName), '.001'); + if SplitArchive then + ArchiveFileName := ChangeFileExt(ArchiveFileName, ''); + + AFormat := GetArchiveFormats.FindUpdateFormat(ArchiveFileName); + + if AFormat <> nil then + begin + if SplitArchive then + ArchiveFileName := ArchiveFileName + '.%.3d'; + + InputQuery('Archive password', 'Value', Password); + + FArchive := AFormat.Create(ArchiveFileName, 0, SplitArchive); + FArchiveReference := FArchive; + FArchive.Password := Password; + FArchive.OnProgress := ArchiveProgress; + + if FArchive is TJclDecompressArchive then + TJclDecompressArchive(FArchive).ListFiles + else + if FArchive is TJclUpdateArchive then + TJclUpdateArchive(FArchive).ListFiles; + + ListView1.Items.BeginUpdate; + try + while ListView1.Items.Count < FArchive.ItemCount do + ListView1.Items.Add; + finally + ListView1.Items.EndUpdate; + end; + end + else + ShowMessage('not a supported format'); + end; +end; + +procedure TFormMain.ActionPropertiesExecute(Sender: TObject); +begin + TFormArchiveSettings.Execute(FArchive); +end; + +procedure TFormMain.ActionPropertiesUpdate(Sender: TObject); +begin + (Sender as TAction).Enabled := Assigned(FArchive); +end; + +procedure TFormMain.ActionSaveExecute(Sender: TObject); +begin + (FArchive as TJclCompressArchive).Compress; + CloseArchive; +end; + +procedure TFormMain.ActionSaveUpdate(Sender: TObject); +begin + (Sender as TAction).Enabled := (FArchive is TJclCompressArchive) and (ListView1.Items.Count > 0); +end; + +procedure TFormMain.ArchiveProgress(Sender: TObject; const Value, MaxValue: Int64); +var + MyValue, MyMaxValue: Int64; +begin + MyValue := Value; + MyMaxValue := MaxValue; + + while MyMaxValue > High(Word) do + begin + MyMaxValue := MyMaxValue shr 8; + MyValue := MyValue shr 8; + end; + ProgressBar1.Max := MyMaxValue; + ProgressBar1.Position := MyValue; +end; + +procedure TFormMain.CloseArchive; +begin + FArchiveReference := nil; // free + FArchive := nil; + ListView1.Items.Clear; +end; + +procedure TFormMain.FormCreate(Sender: TObject); + procedure MergeFilters(var AFilter, AllExtensions: string; AFormat: TJclCompressionArchiveClass); + var + AName, AExtensions: string; + begin + AName := AFormat.ArchiveName; + AExtensions := AFormat.ArchiveExtensions; + if AFilter = '' then + AFilter := Format('%0:s (%1:s)|%1:s', [AName, AExtensions]) + else + AFilter := Format('%0:s|%1:s (%2:s)|%2:s', [AFilter, AName, AExtensions]); + if AllExtensions = '' then + AllExtensions := AExtensions + else + AllExtensions := Format('%s;%s', [AllExtensions, AExtensions]); + end; + function AddStandardFilters(const AFilter, AllExtensions: string): string; + begin + if AFilter = '' then + Result := '' + else + Result := Format('All supported formats|(%0:s)|%1:s', [AllExtensions, AFilter]); + end; +var + AFilter, AllExtensions: string; + AFormats: TJclCompressionArchiveFormats; + Index: Integer; +begin + AFormats := GetArchiveFormats; + + AFilter := ''; + AllExtensions := ''; + for Index := 0 to AFormats.CompressFormatCount - 1 do + MergeFilters(AFilter, AllExtensions, AFormats.CompressFormats[Index]); + SaveDialogArchiveWO.Filter := AFilter; + + AFilter := ''; + AllExtensions := ''; + for Index := 0 to AFormats.UpdateFormatCount - 1 do + MergeFilters(AFilter, AllExtensions, AFormats.UpdateFormats[Index]); + SaveDialogArchiveRW.Filter := AFilter; + + AFilter := ''; + AllExtensions := ''; + for Index := 0 to AFormats.DecompressFormatCount - 1 do + MergeFilters(AFilter, AllExtensions, AFormats.DecompressFormats[Index]); + OpenDialogArchiveRO.Filter := AddStandardFilters(AFilter, AllExtensions); + + AFilter := ''; + AllExtensions := ''; + for Index := 0 to AFormats.UpdateFormatCount - 1 do + MergeFilters(AFilter, AllExtensions, AFormats.UpdateFormats[Index]); + OpenDialogArchiveRW.Filter := AddStandardFilters(AFilter, AllExtensions); +end; + +procedure TFormMain.FormDestroy(Sender: TObject); +begin + CloseArchive; +end; + +procedure TFormMain.ListView1Data(Sender: TObject; Item: TListItem); +var + CompressionItem: TJclCompressionItem; +begin + if not Assigned(FArchive) then + begin + Item.Caption := ''; + Item.SubItems.Clear; + Exit; + end; + + CompressionItem := FArchive.Items[Item.Index]; + + Item.Caption := CompressionItem.FileName; + Item.SubItems.Clear; + if ipPackedName in CompressionItem.ValidProperties then + Item.SubItems.Add(CompressionItem.PackedName) + else + Item.SubItems.Add(''); + if ipFileSize in CompressionItem.ValidProperties then + Item.SubItems.Add(IntToStr(CompressionItem.FileSize)) + else + Item.SubItems.Add(''); + if ipPackedSize in CompressionItem.ValidProperties then + Item.SubItems.Add(IntToStr(CompressionItem.PackedSize)) + else + Item.SubItems.Add(''); + if ipCreationTime in CompressionItem.ValidProperties then + Item.SubItems.Add(FileTimeToString(CompressionItem.CreationTime)) + else + Item.SubItems.Add(''); + if ipLastAccessTime in CompressionItem.ValidProperties then + Item.SubItems.Add(FileTimeToString(CompressionItem.LastAccessTime)) + else + Item.SubItems.Add(''); + if ipLastWriteTime in CompressionItem.ValidProperties then + Item.SubItems.Add(FileTimeToString(CompressionItem.LastWriteTime)) + else + Item.SubItems.Add(''); + if ipComment in CompressionItem.ValidProperties then + Item.SubItems.Add(CompressionItem.Comment) + else + Item.SubItems.Add(''); + if ipHostOS in CompressionItem.ValidProperties then + Item.SubItems.Add(CompressionItem.HostOS) + else + Item.SubItems.Add(''); + if ipHostFS in CompressionItem.ValidProperties then + Item.SubItems.Add(CompressionItem.HostFS) + else + Item.SubItems.Add(''); + if ipUser in CompressionItem.ValidProperties then + Item.SubItems.Add(CompressionItem.User) + else + Item.SubItems.Add(''); + if ipGroup in CompressionItem.ValidProperties then + Item.SubItems.Add(CompressionItem.Group) + else + Item.SubItems.Add(''); + if ipCRC in CompressionItem.ValidProperties then + Item.SubItems.Add(IntToHex(CompressionItem.CRC, 8)) + else + Item.SubItems.Add(''); +end; + +initialization + + if not Load7Zip then + raise EJclCompressionError.Create('Cannot load sevenzip library'); + +end. diff --git a/official/1.104/examples/windows/compression/archive/UProperties.dfm b/official/1.104/examples/windows/compression/archive/UProperties.dfm new file mode 100644 index 0000000..582d1db --- /dev/null +++ b/official/1.104/examples/windows/compression/archive/UProperties.dfm @@ -0,0 +1,243 @@ +object FormArchiveSettings: TFormArchiveSettings + Left = 0 + Top = 0 + BorderStyle = bsDialog + Caption = 'Archive settings' + ClientHeight = 311 + ClientWidth = 493 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poMainFormCenter + PixelsPerInch = 96 + TextHeight = 13 + object GroupBoxGeneralSettings: TGroupBox + Left = 8 + Top = 8 + Width = 273 + Height = 97 + Caption = 'General settings:' + TabOrder = 0 + object LabelPassword: TLabel + Left = 16 + Top = 27 + Width = 50 + Height = 13 + Caption = '&Password:' + FocusControl = EditPassword + end + object LabelNumberOfThreads: TLabel + Left = 16 + Top = 62 + Width = 94 + Height = 13 + Caption = 'Number of &threads:' + FocusControl = EditNumberOfThreads + end + object EditPassword: TEdit + Left = 88 + Top = 24 + Width = 169 + Height = 21 + TabOrder = 0 + OnExit = EditPasswordExit + end + object EditNumberOfThreads: TEdit + Left = 128 + Top = 59 + Width = 129 + Height = 21 + BiDiMode = bdRightToLeft + ParentBiDiMode = False + TabOrder = 1 + Text = '1' + OnExit = EditNumberOfThreadsExit + end + end + object GroupBoxCompressionProperties: TGroupBox + Left = 8 + Top = 111 + Width = 273 + Height = 193 + Caption = 'Compression properties:' + TabOrder = 1 + object LabelCompressionLevel: TLabel + Left = 16 + Top = 27 + Width = 176 + Height = 13 + Caption = 'Compression &level (from %d to %d):' + FocusControl = EditCompressionLevel + end + object LabelCompressionMethod: TLabel + Left = 16 + Top = 58 + Width = 104 + Height = 13 + Caption = '&Compression method:' + FocusControl = ComboBoxCompressionMethod + end + object LabelEncryptionMethod: TLabel + Left = 16 + Top = 90 + Width = 94 + Height = 13 + Caption = '&Encryption method:' + FocusControl = ComboBoxEncryptionMethod + end + object LabelDictionarySize: TLabel + Left = 16 + Top = 123 + Width = 73 + Height = 13 + Caption = '&Dictionary size:' + FocusControl = EditDictionarySize + end + object LabelNumberOfPasses: TLabel + Left = 16 + Top = 158 + Width = 90 + Height = 13 + Caption = '&Number of passes:' + FocusControl = EditNumberOfPasses + end + object EditCompressionLevel: TEdit + Left = 216 + Top = 24 + Width = 41 + Height = 21 + BiDiMode = bdRightToLeft + ParentBiDiMode = False + TabOrder = 0 + Text = '6' + OnExit = EditCompressionLevelExit + end + object ComboBoxCompressionMethod: TComboBox + Left = 136 + Top = 55 + Width = 121 + Height = 21 + Style = csDropDownList + ItemHeight = 13 + TabOrder = 1 + OnExit = ComboBoxCompressionMethodExit + end + object ComboBoxEncryptionMethod: TComboBox + Left = 136 + Top = 88 + Width = 121 + Height = 21 + Style = csDropDownList + ItemHeight = 13 + TabOrder = 2 + OnChange = ComboBoxEncryptionMethodChange + end + object EditDictionarySize: TEdit + Left = 136 + Top = 122 + Width = 121 + Height = 21 + BiDiMode = bdRightToLeft + ParentBiDiMode = False + TabOrder = 3 + Text = '0' + OnExit = EditDictionarySizeExit + end + object EditNumberOfPasses: TEdit + Left = 136 + Top = 156 + Width = 121 + Height = 21 + BiDiMode = bdRightToLeft + ParentBiDiMode = False + TabOrder = 4 + Text = '0' + OnExit = EditNumberOfPassesExit + end + end + object GroupBox1: TGroupBox + Left = 296 + Top = 8 + Width = 185 + Height = 207 + Caption = 'Content:' + TabOrder = 2 + object CheckBoxRemoveSfxBlock: TCheckBox + Left = 16 + Top = 24 + Width = 153 + Height = 17 + Caption = '&Remove Sfx block' + TabOrder = 0 + OnExit = CheckBoxRemoveSfxBlockExit + end + object CheckBoxCompressHeader: TCheckBox + Left = 16 + Top = 48 + Width = 153 + Height = 17 + Caption = 'Compress &header' + TabOrder = 1 + OnExit = CheckBoxCompressHeaderExit + end + object CheckBoxCompressHeaderFull: TCheckBox + Left = 32 + Top = 72 + Width = 137 + Height = 17 + Caption = 'Compress header &full' + TabOrder = 2 + OnExit = CheckBoxCompressHeaderFullExit + end + object CheckBoxEncryptHeader: TCheckBox + Left = 16 + Top = 96 + Width = 153 + Height = 17 + Caption = 'Encr&ypt header' + TabOrder = 3 + OnExit = CheckBoxEncryptHeaderExit + end + object CheckBoxSaveCreationDateTime: TCheckBox + Left = 16 + Top = 120 + Width = 153 + Height = 17 + Caption = 'Save cr&eation date-time' + TabOrder = 4 + OnExit = CheckBoxSaveCreationDateTimeExit + end + object CheckBoxSaveLastAccessDateTime: TCheckBox + Left = 16 + Top = 144 + Width = 153 + Height = 17 + Caption = 'Save last &access date-time' + TabOrder = 5 + OnExit = CheckBoxSaveLastAccessDateTimeExit + end + object CheckBoxSaveLastSaveDateTime: TCheckBox + Left = 16 + Top = 167 + Width = 153 + Height = 17 + Caption = 'Save last &write date-time' + TabOrder = 6 + OnExit = CheckBoxSaveLastSaveDateTimeExit + end + end + object ButtonClose: TButton + Left = 328 + Top = 243 + Width = 121 + Height = 25 + Caption = 'Close' + Default = True + ModalResult = 1 + TabOrder = 3 + end +end diff --git a/official/1.104/examples/windows/compression/archive/UProperties.pas b/official/1.104/examples/windows/compression/archive/UProperties.pas new file mode 100644 index 0000000..c89bf95 --- /dev/null +++ b/official/1.104/examples/windows/compression/archive/UProperties.pas @@ -0,0 +1,262 @@ +unit UProperties; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, JclCompression, ActnList; + +type + TFormArchiveSettings = class(TForm) + GroupBoxGeneralSettings: TGroupBox; + EditPassword: TEdit; + LabelPassword: TLabel; + EditNumberOfThreads: TEdit; + LabelNumberOfThreads: TLabel; + GroupBoxCompressionProperties: TGroupBox; + EditCompressionLevel: TEdit; + LabelCompressionLevel: TLabel; + ComboBoxCompressionMethod: TComboBox; + LabelCompressionMethod: TLabel; + ComboBoxEncryptionMethod: TComboBox; + LabelEncryptionMethod: TLabel; + EditDictionarySize: TEdit; + LabelDictionarySize: TLabel; + EditNumberOfPasses: TEdit; + LabelNumberOfPasses: TLabel; + GroupBox1: TGroupBox; + CheckBoxRemoveSfxBlock: TCheckBox; + CheckBoxCompressHeader: TCheckBox; + CheckBoxCompressHeaderFull: TCheckBox; + CheckBoxEncryptHeader: TCheckBox; + CheckBoxSaveCreationDateTime: TCheckBox; + CheckBoxSaveLastAccessDateTime: TCheckBox; + CheckBoxSaveLastSaveDateTime: TCheckBox; + ButtonClose: TButton; + procedure EditPasswordExit(Sender: TObject); + procedure EditNumberOfThreadsExit(Sender: TObject); + procedure EditCompressionLevelExit(Sender: TObject); + procedure ComboBoxCompressionMethodExit(Sender: TObject); + procedure ComboBoxEncryptionMethodChange(Sender: TObject); + procedure EditDictionarySizeExit(Sender: TObject); + procedure EditNumberOfPassesExit(Sender: TObject); + procedure CheckBoxRemoveSfxBlockExit(Sender: TObject); + procedure CheckBoxCompressHeaderExit(Sender: TObject); + procedure CheckBoxCompressHeaderFullExit(Sender: TObject); + procedure CheckBoxEncryptHeaderExit(Sender: TObject); + procedure CheckBoxSaveCreationDateTimeExit(Sender: TObject); + procedure CheckBoxSaveLastAccessDateTimeExit(Sender: TObject); + procedure CheckBoxSaveLastSaveDateTimeExit(Sender: TObject); + protected + FArchive: TJclCompressionArchive; + FNumberOfThreads: IJclArchiveNumberOfThreads; + FCompressionLevel: IJclArchiveCompressionLevel; + FCompressionMethod: IJclArchiveCompressionMethod; + FEncryptionMethod: IJclArchiveEncryptionMethod; + FDictionarySize: IJclArchiveDictionarySize; + FNumberOfPasses: IJclArchiveNumberOfPasses; + FRemoveSfxBlock: IJclArchiveRemoveSfxBlock; + FCompressHeader: IJclArchiveCompressHeader; + FEncryptHeader: IJclArchiveEncryptHeader; + FSaveCreationDateTime: IJclArchiveSaveCreationDateTime; + FSaveLastAccessDateTime: IJclArchiveSaveLastAccessDateTime; + FSaveLastWriteDateTime: IJclArchiveSaveLastWriteDateTime; + FAlgoritm: IJclArchiveAlgorithm; + public + class procedure Execute(Archive: TJclCompressionArchive); + procedure RefreshValues; + end; + +implementation + +{$R *.dfm} + +uses + TypInfo; + +procedure TFormArchiveSettings.CheckBoxCompressHeaderExit(Sender: TObject); +begin + FCompressHeader.CompressHeader := CheckBoxCompressHeader.Checked; + RefreshValues; +end; + +procedure TFormArchiveSettings.CheckBoxCompressHeaderFullExit(Sender: TObject); +begin + FCompressHeader.CompressHeaderFull := CheckBoxCompressHeaderFull.Checked; + RefreshValues; +end; + +procedure TFormArchiveSettings.CheckBoxEncryptHeaderExit(Sender: TObject); +begin + FEncryptHeader.EncryptHeader := CheckBoxEncryptHeader.Checked; + RefreshValues; +end; + +procedure TFormArchiveSettings.CheckBoxRemoveSfxBlockExit(Sender: TObject); +begin + FRemoveSfxBlock.RemoveSfxBlock := CheckBoxRemoveSfxBlock.Checked; + RefreshValues; +end; + +procedure TFormArchiveSettings.CheckBoxSaveCreationDateTimeExit(Sender: TObject); +begin + FSaveCreationDateTime.SaveCreationDateTime := CheckBoxSaveCreationDateTime.Checked; + RefreshValues; +end; + +procedure TFormArchiveSettings.CheckBoxSaveLastAccessDateTimeExit(Sender: TObject); +begin + FSaveLastAccessDateTime.SaveLastAccessDateTime := CheckBoxSaveLastAccessDateTime.Checked; + RefreshValues; +end; + +procedure TFormArchiveSettings.CheckBoxSaveLastSaveDateTimeExit(Sender: TObject); +begin + FSaveLastWriteDateTime.SaveLastWriteDateTime := CheckBoxSaveLastSaveDateTime.Checked; + RefreshValues; +end; + +procedure TFormArchiveSettings.ComboBoxCompressionMethodExit(Sender: TObject); +begin + FCompressionMethod.CompressionMethod := TJclCompressionMethod(GetEnumValue(TypeInfo(TJclCompressionMethod),ComboBoxCompressionMethod.Text)); + RefreshValues; +end; + +procedure TFormArchiveSettings.ComboBoxEncryptionMethodChange(Sender: TObject); +begin + FEncryptionMethod.EncryptionMethod := TJclEncryptionMethod(GetEnumValue(TypeInfo(TJclEncryptionMethod),ComboBoxEncryptionMethod.Text)); + RefreshValues; +end; + +procedure TFormArchiveSettings.EditCompressionLevelExit(Sender: TObject); +begin + FCompressionLevel.CompressionLevel := StrToInt(EditCompressionLevel.Text); + RefreshValues; +end; + +procedure TFormArchiveSettings.EditDictionarySizeExit(Sender: TObject); +begin + FDictionarySize.DictionarySize := StrToInt(EditDictionarySize.Text); + RefreshValues; +end; + +procedure TFormArchiveSettings.EditNumberOfPassesExit(Sender: TObject); +begin + FNumberOfPasses.NumberOfPasses := StrToInt(EditNumberOfPasses.Text); + RefreshValues; +end; + +procedure TFormArchiveSettings.EditNumberOfThreadsExit(Sender: TObject); +begin + FNumberOfThreads.NumberOfThreads := StrToInt(EditNumberOfThreads.Text); + RefreshValues; +end; + +procedure TFormArchiveSettings.EditPasswordExit(Sender: TObject); +begin + FArchive.Password := EditPassword.Text; + RefreshValues; +end; + +class procedure TFormArchiveSettings.Execute(Archive: TJclCompressionArchive); +var + AFormSettings: TFormArchiveSettings; + CompressionMethod: TJclCompressionMethod; + EncryptionMethod: TJclEncryptionMethod; +begin + AFormSettings := TFormArchiveSettings.Create(Application); + try + Supports(IUnknown(Archive),IJclArchiveNumberOfThreads,AFormSettings.FNumberOfThreads); + Supports(IUnknown(Archive),IJclArchiveCompressionLevel,AFormSettings.FCompressionLevel); + Supports(IUnknown(Archive),IJclArchiveCompressionMethod,AFormSettings.FCompressionMethod); + Supports(IUnknown(Archive),IJclArchiveEncryptionMethod,AFormSettings.FEncryptionMethod); + Supports(IUnknown(Archive),IJclArchiveDictionarySize,AFormSettings.FDictionarySize); + Supports(IUnknown(Archive),IJclArchiveNumberOfPasses,AFormSettings.FNumberOfPasses); + Supports(IUnknown(Archive),IJclArchiveRemoveSfxBlock,AFormSettings.FRemoveSfxBlock); + Supports(IUnknown(Archive),IJclArchiveCompressHeader,AFormSettings.FCompressHeader); + Supports(IUnknown(Archive),IJclArchiveEncryptHeader,AFormSettings.FEncryptHeader); + Supports(IUnknown(Archive),IJclArchiveSaveCreationDateTime,AFormSettings.FSaveCreationDateTime); + Supports(IUnknown(Archive),IJclArchiveSaveLastAccessDateTime,AFormSettings.FSaveLastAccessDateTime); + Supports(IUnknown(Archive),IJclArchiveSaveLastWriteDateTime,AFormSettings.FSaveLastWriteDateTime); + AFormSettings.FArchive := Archive; + + if Assigned(AFormSettings.FCompressionLevel) then + AFormSettings.LabelCompressionLevel.Caption := Format(AFormSettings.LabelCompressionLevel.Caption, + [AFormSettings.FCompressionLevel.CompressionLevelMin,AFormSettings.FCompressionLevel.CompressionLevelMax]) + else + AFormSettings.LabelCompressionLevel.Caption := Format(AFormSettings.LabelCompressionLevel.Caption,[0,0]); + + if Assigned(AFormSettings.FCompressionMethod) then + for CompressionMethod := Low(TJclCompressionMethod) to High(TJclCompressionMethod) do + if CompressionMethod in AFormSettings.FCompressionMethod.SupportedCompressionMethods then + AFormSettings.ComboBoxCompressionMethod.Items.Add(GetEnumName(TypeInfo(TJclCompressionMethod),Integer(CompressionMethod))); + + if Assigned(AFormSettings.FEncryptionMethod) then + for EncryptionMethod := Low(TJclEncryptionMethod) to High(TJclEncryptionMethod) do + if EncryptionMethod in AFormSettings.FEncryptionMethod.SupportedEncryptionMethods then + AFormSettings.ComboBoxEncryptionMethod.Items.Add(GetEnumName(TypeInfo(TJclEncryptionMethod),Integer(EncryptionMethod))); + + AFormSettings.RefreshValues; + AFormSettings.ShowModal; + finally + AFormSettings.Free; + end; +end; + +procedure TFormArchiveSettings.RefreshValues; +begin + // password + EditPassword.Text := FArchive.Password; + // number of threads + EditNumberOfThreads.Enabled := Assigned(FNumberOfThreads); + if Assigned(FNumberOfThreads) then + EditNumberOfThreads.Text := IntToStr(FNumberOfThreads.NumberOfThreads); + // compression level + EditCompressionLevel.Enabled := Assigned(FCompressionLevel); + if Assigned(FCompressionLevel) then + EditCompressionLevel.Text := IntToStr(FCompressionLevel.CompressionLevel); + // compression method + if Assigned(FCompressionMethod) then + ComboBoxCompressionMethod.ItemIndex := ComboBoxCompressionMethod.Items.IndexOf(GetEnumName(TypeInfo(TJclCompressionMethod),Integer(FCompressionMethod.CompressionMethod))) + else + ComboBoxCompressionMethod.Enabled := False; + // encryption method + if Assigned(FEncryptionMethod) then + ComboBoxEncryptionMethod.ItemIndex := ComboBoxEncryptionMethod.Items.IndexOf(GetEnumName(TypeInfo(TJclEncryptionMethod),Integer(FEncryptionMethod.EncryptionMethod))) + else + ComboBoxEncryptionMethod.Enabled := False; + // dictionary size + if Assigned(FDictionarySize) then + EditDictionarySize.Text := IntToStr(FDictionarySize.DictionarySize) + else + EditDictionarySize.Enabled := False; + // number of passes + if Assigned(FNumberOfPasses) then + EditNumberOfPasses.Text := IntToStr(FNumberOfPasses.NumberOfPasses) + else + EditNumberOfPasses.Enabled := False; + // remove sfx + CheckBoxRemoveSfxBlock.Enabled := Assigned(FRemoveSfxBlock); + CheckBoxRemoveSfxBlock.Checked := Assigned(FRemoveSfxBlock) and FRemoveSfxBlock.RemoveSfxBlock; + // compress header + CheckBoxCompressHeader.Enabled := Assigned(FCompressHeader); + CheckBoxCompressHeader.Checked := Assigned(FCompressHeader) and FCompressHeader.CompressHeader; + // compress header full + CheckBoxCompressHeaderFull.Enabled := Assigned(FCompressHeader); + CheckBoxCompressHeaderFull.Checked := Assigned(FCompressHeader) and FCompressHeader.CompressHeaderFull; + // encrypt header + CheckBoxEncryptHeader.Enabled := Assigned(FEncryptHeader); + CheckBoxEncryptHeader.Checked := Assigned(FEncryptHeader) and FEncryptHeader.EncryptHeader; + // save creation date time + CheckBoxSaveCreationDateTime.Enabled := Assigned(FSaveCreationDateTime); + CheckBoxSaveCreationDateTime.Checked := Assigned(FSaveCreationDateTime) and FSaveCreationDateTime.SaveCreationDateTime; + // save last access date time + CheckBoxSaveLastAccessDateTime.Enabled := Assigned(FSaveLastAccessDateTime); + CheckBoxSaveLastAccessDateTime.Checked := Assigned(FSaveLastAccessDateTime) and FSaveLastAccessDateTime.SaveLastAccessDateTime; + // save last write date time + CheckBoxSaveLastSaveDateTime.Enabled := Assigned(FSaveLastWriteDateTime); + CheckBoxSaveLastSaveDateTime.Checked := Assigned(FSaveLastWriteDateTime) and FSaveLastWriteDateTime.SaveLastWriteDateTime; +end; + +end. + diff --git a/official/1.104/examples/windows/debug/framestrack/FramesTrackDemoMain.dfm b/official/1.104/examples/windows/debug/framestrack/FramesTrackDemoMain.dfm new file mode 100644 index 0000000..3215e5b --- /dev/null +++ b/official/1.104/examples/windows/debug/framestrack/FramesTrackDemoMain.dfm @@ -0,0 +1,91 @@ +object Form1: TForm1 + Left = 192 + Top = 136 + ClientWidth = 782 + ClientHeight = 474 + Caption = 'Exception frame tracking example' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object mmLog: TMemo + Left = 172 + Top = 32 + Width = 610 + Height = 441 + Anchors = [akLeft, akTop, akRight, akBottom] + ScrollBars = ssBoth + TabOrder = 0 + WordWrap = False + end + object Button1: TButton + Left = 4 + Top = 32 + Width = 165 + Height = 25 + Caption = 'Assign to PChar(nil)' + TabOrder = 1 + OnClick = Button1Click + end + object Button2: TButton + Left = 4 + Top = 60 + Width = 165 + Height = 25 + Caption = 'try ... except' + TabOrder = 2 + OnClick = Button2Click + end + object Button3: TButton + Left = 4 + Top = 88 + Width = 165 + Height = 25 + Caption = 'try except on.... else' + TabOrder = 3 + OnClick = Button3Click + end + object Button4: TButton + Left = 4 + Top = 116 + Width = 165 + Height = 25 + Caption = 'try ... finally' + TabOrder = 4 + OnClick = Button4Click + end + object Button5: TButton + Left = 4 + Top = 144 + Width = 165 + Height = 25 + Caption = 'try try ... finally except' + TabOrder = 5 + OnClick = Button5Click + end + object chkShowAllFrames: TCheckBox + Left = 180 + Top = 8 + Width = 145 + Height = 17 + Caption = 'Show all exception frames' + TabOrder = 6 + end + object Button6: TButton + Left = 704 + Top = 4 + Width = 75 + Height = 25 + Anchors = [akTop, akRight] + Caption = 'Clear' + TabOrder = 7 + OnClick = Button6Click + end +end diff --git a/official/1.104/examples/windows/debug/framestrack/FramesTrackDemoMain.pas b/official/1.104/examples/windows/debug/framestrack/FramesTrackDemoMain.pas new file mode 100644 index 0000000..f7f4966 --- /dev/null +++ b/official/1.104/examples/windows/debug/framestrack/FramesTrackDemoMain.pas @@ -0,0 +1,186 @@ +unit FramesTrackDemoMain; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls; + +type + TForm1 = class(TForm) + mmLog: TMemo; + Button1: TButton; + Button2: TButton; + Button3: TButton; + Button4: TButton; + Button5: TButton; + chkShowAllFrames: TCheckBox; + Button6: TButton; + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button6Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + procedure Button5Click(Sender: TObject); + private + { Private declarations } + procedure LogException(ExceptObj: TObject; ExceptAddr: Pointer; IsOS: Boolean); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +uses + JclDebug, JclHookExcept, TypInfo; + +procedure TForm1.LogException(ExceptObj: TObject; ExceptAddr: Pointer; IsOS: Boolean); +var + TmpS: string; + ModInfo: TJclLocationInfo; + I: Integer; + ExceptionHandled: Boolean; + HandlerLocation: Pointer; + ExceptFrame: TJclExceptFrame; + +begin + TmpS := 'Exception ' + ExceptObj.ClassName; + if ExceptObj is Exception then + TmpS := TmpS + ': ' + Exception(ExceptObj).Message; + if IsOS then + TmpS := TmpS + ' (OS Exception)'; + mmLog.Lines.Add(TmpS); + ModInfo := GetLocationInfo(ExceptAddr); + mmLog.Lines.Add(Format( + ' Exception occured at $%p (Module "%s", Procedure "%s", Unit "%s", Line %d)', + [ModInfo.Address, + ModInfo.UnitName, + ModInfo.ProcedureName, + ModInfo.SourceName, + ModInfo.LineNumber])); + if stExceptFrame in JclStackTrackingOptions then + begin + mmLog.Lines.Add(' Except frame-dump:'); + I := 0; + ExceptionHandled := False; + while (chkShowAllFrames.Checked or not ExceptionHandled) and + (I < JclLastExceptFrameList.Count) do + begin + ExceptFrame := JclLastExceptFrameList.Items[I]; + ExceptionHandled := ExceptFrame.HandlerInfo(ExceptObj, HandlerLocation); + if (ExceptFrame.FrameKind = efkFinally) or + (ExceptFrame.FrameKind = efkUnknown) or + not ExceptionHandled then + HandlerLocation := ExceptFrame.CodeLocation; + ModInfo := GetLocationInfo(HandlerLocation); + TmpS := Format( + ' Frame at $%p (type: %s', + [ExceptFrame.ExcFrame, + GetEnumName(TypeInfo(TExceptFrameKind), Ord(ExceptFrame.FrameKind))]); + if ExceptionHandled then + TmpS := TmpS + ', handles exception)' + else + TmpS := TmpS + ')'; + mmLog.Lines.Add(TmpS); + if ExceptionHandled then + mmLog.Lines.Add(Format( + ' Handler at $%p', + [HandlerLocation])) + else + mmLog.Lines.Add(Format( + ' Code at $%p', + [HandlerLocation])); + mmLog.Lines.Add(Format( + ' Module "%s", Procedure "%s", Unit "%s", Line %d', + [ModInfo.UnitName, + ModInfo.ProcedureName, + ModInfo.SourceName, + ModInfo.LineNumber])); + Inc(I); + end; + end; + mmLog.Lines.Add(''); +end; + +procedure TForm1.FormCreate(Sender: TObject); +begin + JclAddExceptNotifier(Form1.LogException); +end; + +procedure TForm1.FormDestroy(Sender: TObject); +begin + JclRemoveExceptNotifier(Form1.LogException); +end; + +procedure TForm1.Button1Click(Sender: TObject); +begin + mmLog.Lines.Add(TButton(Sender).Caption); + PChar(nil)^ := 'a'; +end; + +procedure TForm1.Button6Click(Sender: TObject); +begin + mmLog.Lines.Clear; +end; + +procedure TForm1.Button2Click(Sender: TObject); +begin + mmLog.Lines.Add(TButton(Sender).Caption); + try + PChar(nil)^ := 'a'; + except + end; +end; + +procedure TForm1.Button3Click(Sender: TObject); +begin + mmLog.Lines.Add(TButton(Sender).Caption); + try + PChar(nil)^ := 'a'; + except + on E: EConvertError do + ShowMessage('EConvertError or descendant'); + on E: ERangeError do + ShowMessage('ERangeError or descendant'); + else + ShowMessage('Not EConvertError and not ERangeError') + end; +end; + +procedure TForm1.Button4Click(Sender: TObject); +begin + mmLog.Lines.Add(TButton(Sender).Caption); + try + PChar(nil)^ := 'a'; + finally + ShowMessage('finally!'); + end; +end; + +procedure TForm1.Button5Click(Sender: TObject); +begin + mmLog.Lines.Add(TButton(Sender).Caption); + try + try + PChar(nil)^ := 'a'; + finally + ShowMessage('Finally!'); + end; + except + ShowMessage('Except!'); + end; +end; + +initialization + + JclStackTrackingOptions := JclStackTrackingOptions + [stExceptFrame]; + JclStartExceptionTracking; + +end. diff --git a/official/1.104/examples/windows/debug/framestrack/FramesTrackExample.dof b/official/1.104/examples/windows/debug/framestrack/FramesTrackExample.dof new file mode 100644 index 0000000..e957ac9 --- /dev/null +++ b/official/1.104/examples/windows/debug/framestrack/FramesTrackExample.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\..\bin + diff --git a/official/1.104/examples/windows/debug/framestrack/FramesTrackExample.dpr b/official/1.104/examples/windows/debug/framestrack/FramesTrackExample.dpr new file mode 100644 index 0000000..dd6c45c --- /dev/null +++ b/official/1.104/examples/windows/debug/framestrack/FramesTrackExample.dpr @@ -0,0 +1,16 @@ +program FramesTrackExample; + +{$I jcl.inc} + +uses + Forms, + FramesTrackDemoMain in 'FramesTrackDemoMain.pas' {Form1}; + +{$R *.RES} +{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/official/1.104/examples/windows/debug/framestrack/FramesTrackExample.res b/official/1.104/examples/windows/debug/framestrack/FramesTrackExample.res new file mode 100644 index 0000000000000000000000000000000000000000..472f2e47297a46cf06bb2ce0c8024f600e93445f GIT binary patch literal 876 zcmb7Dv2N5r5S`;9xg)W{DJ54@#)?ixq5woi0mwzzd`4C)-)wZn8KKjRL~&IVegsim z<4;MMl8!BqmN)jD1QHD+KkvSIvoqseFA>ok$aw^&f7!#MgFZ#fWYA7dilal&Gfd{d zD_}xo0Hra(u1-$Sq_Y{=t)_t=*?Vay!e$CjOQd&(lrSF0Tls2mP+KZU0$}{QB){?Cac-k=ge)P zs@#gmop0R8g}oxl?IPC5q$+ilyo8%O(__-l!GrVd4Js^S-iEqTry#JnP8vd!s;FDl zq;Z||>|&v=4zWd2S?5$WWh!|QKY>F}P3_f(5WOWpd|j7mcHv`Ne;>F+kC;*qx`@}N zI@2b!D425=SVC0ra{+0Ysaf8YfGz8My5jwi7&srkpXp z9NZS0rZ02XvDWFgVg)9vo;QjnQKSDp@U9?#Ex_7v>500o()q z9vw!*|5}IN*3c784fkjixsOrfDQdkOu0=o1Pl)Io$oVn7qu2D7-UDyw1IB~>c`xiX POlUqo8g7N%q6z&5v1T5M literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/debug/reportconverter/ExceptionReportConverter.dpr b/official/1.104/examples/windows/debug/reportconverter/ExceptionReportConverter.dpr new file mode 100644 index 0000000..97cad84 --- /dev/null +++ b/official/1.104/examples/windows/debug/reportconverter/ExceptionReportConverter.dpr @@ -0,0 +1,18 @@ +program ExceptionReportConverter; + +{$I jcl.inc} + +uses + Forms, + formConverter in 'formConverter.pas' {frmConverter}, + ExceptDlgMail in '..\..\..\..\EXPERTS\DEBUG\DIALOG\EXCEPTDLGMAIL.pas' {ExceptionDialogMail}; + +{$R *.res} +{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.Title := 'Exception Report Converter'; + Application.CreateForm(TfrmConverter, frmConverter); + Application.Run; +end. diff --git a/official/1.104/examples/windows/debug/reportconverter/ExceptionReportConverter.res b/official/1.104/examples/windows/debug/reportconverter/ExceptionReportConverter.res new file mode 100644 index 0000000000000000000000000000000000000000..d8a552809ed6777a882d682ecdbd46969240e34e GIT binary patch literal 876 zcmZuw!D`h&6g_zf7)hzGAhf$aLTTM;$WpKsi^YZZABr?vc}QlbDP0)IqQCM=Hp1Pc zD}O_9WIIp@v{GZ_Gw5vo0y{u4hZqaM-|cx^g;xG|cZFqsiY zM1Y7bgEjw;3gCyT>N~bfi3(lUQLs%|r+vq^-y+-u9EQbN|3@1f#ULJWz-L%%kV7bHd+I z&uzl(1D8Hs44g-@ojSKC1CN__I!RL`gMmEr(rDm>#uFI~wb+3sBJ#oec<3~c1FaqJ zbI-Xh;IAW>Hm6Zo&n(YbXxs`K<|4JUHj&8JhWEi}2EOPi@5uCI+>jBA1*$-GL>Hp}XHFa%_xh_4YA$@r+R2#9O??8@wZ4;gtOt>+ix|Lx9;V@~^^PQGh?X=+Sln literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/debug/reportconverter/formConverter.dfm b/official/1.104/examples/windows/debug/reportconverter/formConverter.dfm new file mode 100644 index 0000000..c1895f6 --- /dev/null +++ b/official/1.104/examples/windows/debug/reportconverter/formConverter.dfm @@ -0,0 +1,65 @@ +object frmConverter: TfrmConverter + Left = 227 + Top = 119 + ClientWidth = 454 + ClientHeight = 80 + Caption = 'Exception Report Converter' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 13 + object btnConvert: TButton + Left = 368 + Top = 9 + Width = 75 + Height = 25 + Caption = '&Convert' + TabOrder = 2 + OnClick = btnConvertClick + end + object txtReportFile: TEdit + Left = 8 + Top = 11 + Width = 313 + Height = 21 + TabOrder = 0 + Text = 'txtReportFile' + end + object txtMapFile: TEdit + Left = 8 + Top = 51 + Width = 313 + Height = 21 + TabOrder = 1 + Text = 'txtMapFile' + end + object btnReportFile: TButton + Left = 328 + Top = 9 + Width = 22 + Height = 25 + Caption = '...' + TabOrder = 3 + OnClick = btnReportFileClick + end + object btnMapFile: TButton + Left = 328 + Top = 49 + Width = 22 + Height = 25 + Caption = '...' + TabOrder = 4 + OnClick = btnMapFileClick + end + object dlgOpen: TOpenDialog + Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] + Left = 392 + Top = 51 + end +end diff --git a/official/1.104/examples/windows/debug/reportconverter/formConverter.pas b/official/1.104/examples/windows/debug/reportconverter/formConverter.pas new file mode 100644 index 0000000..d154500 --- /dev/null +++ b/official/1.104/examples/windows/debug/reportconverter/formConverter.pas @@ -0,0 +1,194 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is formConverter.pas. } +{ } +{ The Initial Developer of the Original Code is Elahn Ientile } +{ Portions created by Elahn Ientile are Copyright (C) Elahn Ientile. } +{ } +{**************************************************************************************************} +{ } +{ Converts a report send by TExceptionDialogMail where no Debug Info or Map file was present into } +{ a report equivalent to one where Debug Info or Map file was present, i.e. inc. line numbers, etc } +{ } +{ Note: to generate a Map file on compile, add "-GD" to [project name].cfg } +{ the map file used must be the one generated when that copy of the program was compiled } +{ } +{ Unit owner: Elahn Ientile } +{ Last modified: $Date: 2006-09-03 11:36:16 +0200 (dim., 03 sept. 2006) $ } +{ } +{**************************************************************************************************} + +unit formConverter; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, JclDebug; + +type + TfrmConverter = class(TForm) + btnConvert: TButton; + txtReportFile: TEdit; + txtMapFile: TEdit; + btnReportFile: TButton; + btnMapFile: TButton; + dlgOpen: TOpenDialog; + procedure btnConvertClick(Sender: TObject); + procedure btnReportFileClick(Sender: TObject); + procedure btnMapFileClick(Sender: TObject); + private + FScanner: TJclMapScanner; + public + procedure ConvertFile(AMap, AInput, AOutput: TFileName); + function FormatInfo(var Info: TJclLocationInfo; + IncludeAddressOffset: Boolean = True; + IncludeStartProcLineOffset: Boolean = True): string; + function GetVALocationInfo(const VA: DWORD; var Info: TJclLocationInfo): Boolean; + end; + +var + frmConverter: TfrmConverter; + +implementation + +{$R *.dfm} + +procedure TfrmConverter.btnConvertClick(Sender: TObject); +var + lStr, lExt: string; +begin + if not FileExists(txtReportFile.Text) then + ShowMessage('Report File does not exist.') + else if not FileExists(txtMapFile.Text) then + ShowMessage('Map File does not exist.') + else + begin + lStr := txtReportFile.Text; + lExt := ExtractFileExt(lStr); + Insert('.converted', lStr, Length(lStr) + 1 - Length(lExt)); + ConvertFile(txtMapFile.Text, txtReportFile.Text, lStr); + end; +end; + +procedure TfrmConverter.ConvertFile(AMap, AInput, AOutput: TFileName); +var + ls: TStringList; + i: Integer; + lInStackList: Boolean; + s: string; + VA: DWORD; + Info: TJclLocationInfo; +begin + FScanner := TJclMapScanner.Create(AMap); + ls := TStringList.Create; + try + ls.LoadFromFile(AInput); + if ls.Count = 0 then + Exit; + lInStackList := False; + i := 0; + while i < ls.Count do + begin + if (Copy(ls[i], 1, 3) = '---') then + if lInStackList then + Break + else if Copy(ls[i+1], 1, 10) = 'Stack list' then + begin + lInStackList := True; + Inc(i, 2); + end; + if lInStackList and (Copy(ls[i], 1, 1) = '(') then + begin + s := '$' + Copy(ls[i], 2, 8); + VA := DWORD(StrToInt64(s)); + if GetVALocationInfo(VA, Info) then + ls[i] := ls[i] + FormatInfo(Info); + end; + Inc(i); + end; + ls.SaveToFile(AOutput); + ShowMessage('Successfully converted. Output filename:' + #13#10#13#10 + AOutput); + finally + ls.Free; + end; +end; + +function TfrmConverter.FormatInfo(var Info: TJclLocationInfo; + IncludeAddressOffset, IncludeStartProcLineOffset: Boolean): string; +var + StartProcInfo: TJclLocationInfo; + OffsetStr, StartProcOffsetStr: string; +begin + OffsetStr := ''; + with Info do + begin + if LineNumber > 0 then + begin + if IncludeStartProcLineOffset and GetVALocationInfo(DWORD(Cardinal(Info.Address) - + Cardinal(Info.OffsetFromProcName)), StartProcInfo) and (StartProcInfo.LineNumber > 0) then + StartProcOffsetStr := Format(' + %d', [LineNumber - StartProcInfo.LineNumber]) + else + StartProcOffsetStr := ''; + if IncludeAddressOffset then + begin + if OffsetFromLineNumber >= 0 then + OffsetStr := Format(' + $%x', [OffsetFromLineNumber]) + else + OffsetStr := Format(' - $%x', [-OffsetFromLineNumber]) + end; + Result := Format(' %s.%s (Line %u, "%s"%s)%s', [UnitName, ProcedureName, LineNumber, + SourceName, StartProcOffsetStr, OffsetStr]); + end + else + begin + if IncludeAddressOffset then + OffsetStr := Format(' + $%x', [OffsetFromProcName]); + if UnitName <> '' then + Result := Format(' %s.%s%s', [UnitName, ProcedureName, OffsetStr]) + else + Result := Format(' %s%s', [ProcedureName, OffsetStr]); + end; + end; +end; + +function TfrmConverter.GetVALocationInfo(const VA: DWORD; var Info: TJclLocationInfo): Boolean; +begin + with FScanner do + begin + Info.UnitName := ModuleNameFromAddr(VA); + Result := (Info.UnitName <> ''); + if Result then + begin + Info.Address := Pointer(VA); + Info.ProcedureName := ProcNameFromAddr(VA, Info.OffsetFromProcName); + Info.LineNumber := LineNumberFromAddr(VA, Info.OffsetFromLineNumber); + Info.SourceName := SourceNameFromAddr(VA); + Info.DebugInfo := nil; + end; + end; +end; + +procedure TfrmConverter.btnReportFileClick(Sender: TObject); +begin + if dlgOpen.Execute then + txtReportFile.Text := dlgOpen.FileName; +end; + +procedure TfrmConverter.btnMapFileClick(Sender: TObject); +begin + if dlgOpen.Execute then + txtMapFile.Text := dlgOpen.FileName; +end; + +end. diff --git a/official/1.104/examples/windows/debug/sourceloc/SourceLocDemoMain.dfm b/official/1.104/examples/windows/debug/sourceloc/SourceLocDemoMain.dfm new file mode 100644 index 0000000..30fdc88 --- /dev/null +++ b/official/1.104/examples/windows/debug/sourceloc/SourceLocDemoMain.dfm @@ -0,0 +1,134 @@ +object Form1: TForm1 + Left = 192 + Top = 107 + ClientWidth = 638 + ClientHeight = 485 + Caption = 'JclDebug Source location example' + Color = clBtnFace + Constraints.MinHeight = 300 + Constraints.MinWidth = 600 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 16 + Top = 40 + Width = 29 + Height = 13 + Caption = 'Level:' + FocusControl = LevelSpinEdit + end + object Label2: TLabel + Left = 136 + Top = 40 + Width = 67 + Height = 13 + Caption = 'Address (hex):' + FocusControl = AddrEdit + end + object Memo1: TMemo + Left = 0 + Top = 88 + Width = 638 + Height = 396 + Anchors = [akLeft, akTop, akRight, akBottom] + Font.Charset = EASTEUROPE_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Courier New' + Font.Style = [] + ParentFont = False + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 0 + WordWrap = False + end + object CallerBtn: TButton + Left = 16 + Top = 8 + Width = 89 + Height = 25 + Caption = 'Caller()' + TabOrder = 1 + OnClick = CallerBtnClick + end + object LevelSpinEdit: TSpinEdit + Left = 16 + Top = 56 + Width = 89 + Height = 22 + MaxValue = 20 + MinValue = 0 + TabOrder = 2 + Value = 0 + end + object AddrBtn: TButton + Left = 136 + Top = 8 + Width = 89 + Height = 25 + Caption = 'Address lookup' + TabOrder = 3 + OnClick = AddrBtnClick + end + object AddrEdit: TEdit + Left = 136 + Top = 56 + Width = 89 + Height = 21 + CharCase = ecUpperCase + MaxLength = 8 + TabOrder = 4 + Text = 'ADDREDIT' + end + object StackBtn: TButton + Left = 256 + Top = 8 + Width = 89 + Height = 25 + Caption = 'Stack dump' + TabOrder = 5 + OnClick = StackBtnClick + end + object TraceLocBtn: TButton + Left = 368 + Top = 8 + Width = 89 + Height = 25 + Caption = 'TraceLoc("text")' + TabOrder = 6 + OnClick = TraceLocBtnClick + end + object ProcBtn: TButton + Left = 480 + Top = 8 + Width = 81 + Height = 25 + Caption = '__PROC__' + TabOrder = 8 + OnClick = ProcBtnClick + end + object ModuleBtn: TButton + Left = 480 + Top = 48 + Width = 81 + Height = 25 + Caption = '__MODULE__' + TabOrder = 9 + OnClick = ModuleBtnClick + end + object RawCheckBox: TCheckBox + Left = 256 + Top = 40 + Width = 89 + Height = 17 + Caption = 'Raw' + TabOrder = 7 + end +end diff --git a/official/1.104/examples/windows/debug/sourceloc/SourceLocDemoMain.pas b/official/1.104/examples/windows/debug/sourceloc/SourceLocDemoMain.pas new file mode 100644 index 0000000..5b5c14b --- /dev/null +++ b/official/1.104/examples/windows/debug/sourceloc/SourceLocDemoMain.pas @@ -0,0 +1,124 @@ +unit SourceLocDemoMain; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, Spin; + +type + TForm1 = class(TForm) + Memo1: TMemo; + CallerBtn: TButton; + LevelSpinEdit: TSpinEdit; + AddrBtn: TButton; + AddrEdit: TEdit; + StackBtn: TButton; + Label1: TLabel; + Label2: TLabel; + TraceLocBtn: TButton; + ProcBtn: TButton; + ModuleBtn: TButton; + RawCheckBox: TCheckBox; + procedure CallerBtnClick(Sender: TObject); + procedure AddrBtnClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure StackBtnClick(Sender: TObject); + procedure TraceLocBtnClick(Sender: TObject); + procedure ProcBtnClick(Sender: TObject); + procedure ModuleBtnClick(Sender: TObject); + private + { Private declarations } + public + procedure ReportLocation(Addr: Pointer); + procedure ReportTime(T: Extended); + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +uses + JclCounter, JclDebug; + +procedure TForm1.FormCreate(Sender: TObject); +var + P: Pointer; +begin + P := @TForm1.AddrBtnClick; + AddrEdit.Text := IntToHex(Integer(P), 8); +end; + +procedure TForm1.ReportLocation(Addr: Pointer); +var + C: TJclCounter; + S: string; + T: Extended; +begin + StartCount(C); + S := GetLocationInfoStr(Addr, False, True, True); + T := StopCount(C); + Memo1.Lines.Add(S); + ReportTime(T); +end; + +procedure TForm1.ReportTime(T: Extended); +begin + Memo1.Lines.Add(Format('Time: %4.3f ms'#13#10, [T * 1000])); +end; + +procedure TForm1.CallerBtnClick(Sender: TObject); +begin + ReportLocation(Caller(LevelSpinEdit.Value)); +end; + +procedure TForm1.AddrBtnClick(Sender: TObject); +var + Addr: Pointer; +begin + Addr := Pointer(StrToInt('$' + Trim(AddrEdit.Text))); + ReportLocation(Addr); +end; + +procedure TForm1.StackBtnClick(Sender: TObject); +var + C: TJclCounter; + T: Extended; + SL: TStringList; +begin + SL := TStringList.Create; + try + StartCount(C); + with TJclStackInfoList.Create(RawCheckBox.Checked, 0, nil) do + try + AddToStrings(SL, False, True, True); + T := StopCount(C); + Memo1.Lines.AddStrings(SL); + ReportTime(T); + finally + Free; + end; + finally + SL.Free; + end; +end; + +procedure TForm1.TraceLocBtnClick(Sender: TObject); +begin + TraceLoc('text'); +end; + +procedure TForm1.ProcBtnClick(Sender: TObject); +begin + ShowMessage(ProcByLevel); +end; + +procedure TForm1.ModuleBtnClick(Sender: TObject); +begin + ShowMessage(ModuleByLevel); +end; + +end. diff --git a/official/1.104/examples/windows/debug/sourceloc/SourceLocExample.dof b/official/1.104/examples/windows/debug/sourceloc/SourceLocExample.dof new file mode 100644 index 0000000..e957ac9 --- /dev/null +++ b/official/1.104/examples/windows/debug/sourceloc/SourceLocExample.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\..\bin + diff --git a/official/1.104/examples/windows/debug/sourceloc/SourceLocExample.dpr b/official/1.104/examples/windows/debug/sourceloc/SourceLocExample.dpr new file mode 100644 index 0000000..d266117 --- /dev/null +++ b/official/1.104/examples/windows/debug/sourceloc/SourceLocExample.dpr @@ -0,0 +1,16 @@ +program SourceLocExample; + +{$I jcl.inc} + +uses + Forms, + SourceLocDemoMain in 'SourceLocDemoMain.pas' {Form1}; + +{$R *.RES} +{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/official/1.104/examples/windows/debug/sourceloc/SourceLocExample.res b/official/1.104/examples/windows/debug/sourceloc/SourceLocExample.res new file mode 100644 index 0000000000000000000000000000000000000000..472f2e47297a46cf06bb2ce0c8024f600e93445f GIT binary patch literal 876 zcmb7Dv2N5r5S`;9xg)W{DJ54@#)?ixq5woi0mwzzd`4C)-)wZn8KKjRL~&IVegsim z<4;MMl8!BqmN)jD1QHD+KkvSIvoqseFA>ok$aw^&f7!#MgFZ#fWYA7dilal&Gfd{d zD_}xo0Hra(u1-$Sq_Y{=t)_t=*?Vay!e$CjOQd&(lrSF0Tls2mP+KZU0$}{QB){?Cac-k=ge)P zs@#gmop0R8g}oxl?IPC5q$+ilyo8%O(__-l!GrVd4Js^S-iEqTry#JnP8vd!s;FDl zq;Z||>|&v=4zWd2S?5$WWh!|QKY>F}P3_f(5WOWpd|j7mcHv`Ne;>F+kC;*qx`@}N zI@2b!D425=SVC0ra{+0Ysaf8YfGz8My5jwi7&srkpXp z9NZS0rZ02XvDWFgVg)9vo;QjnQKSDp@U9?#Ex_7v>500o()q z9vw!*|5}IN*3c784fkjixsOrfDQdkOu0=o1Pl)Io$oVn7qu2D7-UDyw1IB~>c`xiX POlUqo8g7N%q6z&5v1T5M literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.bdsproj b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.bdsproj new file mode 100644 index 0000000..32e0e8f --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + StackTrackDLLsComLibrary.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + ..\..\..\..\bin + + + + + + HOOK_DLL_EXCEPTIONS + + False + + + + + + False + + + True + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1031 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.dof b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.dof new file mode 100644 index 0000000..18ab99a --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\..\bin +Conditionals=HOOK_DLL_EXCEPTIONS diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.dpr b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.dpr new file mode 100644 index 0000000..965f9da --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.dpr @@ -0,0 +1,21 @@ +library StackTrackDLLsComLibrary; + +uses + ComServ, + JclHookExcept, + StackTrackDLLsComLibrary_TLB in 'StackTrackDLLsComLibrary_TLB.pas', + StackTrackDLLsComUnit in 'StackTrackDLLsComUnit.pas' {StackTrackDllsTest: CoClass}; + +exports + DllGetClassObject, + DllCanUnloadNow, + DllRegisterServer, + DllUnregisterServer; + +{$R *.TLB} + +{$R *.RES} + +begin + JclInitializeLibrariesHookExcept; +end. diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.res b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.res new file mode 100644 index 0000000000000000000000000000000000000000..472f2e47297a46cf06bb2ce0c8024f600e93445f GIT binary patch literal 876 zcmb7Dv2N5r5S`;9xg)W{DJ54@#)?ixq5woi0mwzzd`4C)-)wZn8KKjRL~&IVegsim z<4;MMl8!BqmN)jD1QHD+KkvSIvoqseFA>ok$aw^&f7!#MgFZ#fWYA7dilal&Gfd{d zD_}xo0Hra(u1-$Sq_Y{=t)_t=*?Vay!e$CjOQd&(lrSF0Tls2mP+KZU0$}{QB){?Cac-k=ge)P zs@#gmop0R8g}oxl?IPC5q$+ilyo8%O(__-l!GrVd4Js^S-iEqTry#JnP8vd!s;FDl zq;Z||>|&v=4zWd2S?5$WWh!|QKY>F}P3_f(5WOWpd|j7mcHv`Ne;>F+kC;*qx`@}N zI@2b!D425=SVC0ra{+0Ysaf8YfGz8My5jwi7&srkpXp z9NZS0rZ02XvDWFgVg)9vo;QjnQKSDp@U9?#Ex_7v>500o()q z9vw!*|5}IN*3c784fkjixsOrfDQdkOu0=o1Pl)Io$oVn7qu2D7-UDyw1IB~>c`xiX POlUqo8g7N%q6z&5v1T5M literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.tlb b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary.tlb new file mode 100644 index 0000000000000000000000000000000000000000..ce1f5db14ce9b56e6c7cead68a0305cf21b7c955 GIT binary patch literal 1668 zcmd5-&r2IY6n>kgfr7L_MH1*?)B5A064M@nC#AYgAfjmkb0|uFt)M2RZWh#A3O)Ab zMZEUhgY?j=J++jA7xCb~V4(j&^nE)!GLf{GB;bRYH{bW>&HM70*{tNOe1HssJqdb_ zvJ53d6p+;2{Fqm1AKmz7GH&t!L>@dls_&x3+N zr$M6>P0i?u(vh!!yNMr$l_YhBKa$%tlidSoi4X?cgj^nq$aK;QZ+)BM_ zCuZGhNeF?x55=Id7cICez2x^ZcYJ_aa7Wa)q+gmN^yPcbEtYrk4o^#&OyfQ*< QJYJOi{^0GXzJtRVw+94&KmY&$ literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary_TLB.pas b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary_TLB.pas new file mode 100644 index 0000000..d440ef8 --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComLibrary_TLB.pas @@ -0,0 +1,97 @@ +unit StackTrackDLLsComLibrary_TLB; + +// ************************************************************************ // +// WARNING +// ------- +// The types declared in this file were generated from data read from a +// Type Library. If this type library is explicitly or indirectly (via +// another type library referring to this type library) re-imported, or the +// 'Refresh' command of the Type Library Editor activated while editing the +// Type Library, the contents of this file will be regenerated and all +// manual modifications will be lost. +// ************************************************************************ // + +// PASTLWTR : $Revision: 1658 $ +// File generated on 1.8.2005 02:48:29 from Type Library described below. + +// ************************************************************************ // +// Type Lib: D:\Quellen\jedi\jcl\examples\vcl\debug\stacktrack\StackTrackDLLsComLibrary.tlb (1) +// IID\LCID: {D4935E5D-790E-48CA-B360-0165C1305153}\0 +// Helpfile: +// DepndLst: +// (1) v2.0 stdole, (F:\WINNT\system32\stdole2.tlb) +// (2) v4.0 StdVCL, (F:\WINNT\system32\STDVCL40.DLL) +// ************************************************************************ // +{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. +interface + +uses Windows, ActiveX, Classes, Graphics, OleServer, OleCtrls, StdVCL; + +// *********************************************************************// +// GUIDS declared in the TypeLibrary. Following prefixes are used: +// Type Libraries : LIBID_xxxx +// CoClasses : CLASS_xxxx +// DISPInterfaces : DIID_xxxx +// Non-DISP interfaces: IID_xxxx +// *********************************************************************// +const + // TypeLibrary Major and minor versions + StackTrackDLLsComLibraryMajorVersion = 1; + StackTrackDLLsComLibraryMinorVersion = 0; + + LIBID_StackTrackDLLsComLibrary: TGUID = '{D4935E5D-790E-48CA-B360-0165C1305153}'; + + IID_IStackTrackDllsTest: TGUID = '{26473046-CCEB-4671-9AB1-2216EF4D2164}'; + CLASS_StackTrackDllsTest: TGUID = '{DA3AEC52-1481-4119-B140-2157C7ADEC5B}'; +type + +// *********************************************************************// +// Forward declaration of types defined in TypeLibrary +// *********************************************************************// + IStackTrackDllsTest = interface; + +// *********************************************************************// +// Declaration of CoClasses defined in Type Library +// (NOTE: Here we map each CoClass to its Default Interface) +// *********************************************************************// + StackTrackDllsTest = IStackTrackDllsTest; + + +// *********************************************************************// +// Interface: IStackTrackDllsTest +// Flags: (256) OleAutomation +// GUID: {26473046-CCEB-4671-9AB1-2216EF4D2164} +// *********************************************************************// + IStackTrackDllsTest = interface(IUnknown) + ['{26473046-CCEB-4671-9AB1-2216EF4D2164}'] + function Error1: HResult; stdcall; + function Error2: HResult; stdcall; + end; + +// *********************************************************************// +// The Class CoStackTrackDllsTest provides a Create and CreateRemote method to +// create instances of the default interface IStackTrackDllsTest exposed by +// the CoClass StackTrackDllsTest. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoStackTrackDllsTest = class + class function Create: IStackTrackDllsTest; + class function CreateRemote(const MachineName: string): IStackTrackDllsTest; + end; + +implementation + +uses ComObj; + +class function CoStackTrackDllsTest.Create: IStackTrackDllsTest; +begin + Result := CreateComObject(CLASS_StackTrackDllsTest) as IStackTrackDllsTest; +end; + +class function CoStackTrackDllsTest.CreateRemote(const MachineName: string): IStackTrackDllsTest; +begin + Result := CreateRemoteComObject(MachineName, CLASS_StackTrackDllsTest) as IStackTrackDllsTest; +end; + +end. diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComUnit.pas b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComUnit.pas new file mode 100644 index 0000000..d4c37f9 --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsComUnit.pas @@ -0,0 +1,38 @@ +unit StackTrackDLLsComUnit; + +interface + +uses + Windows, ActiveX, Classes, ComObj, StackTrackDLLsComLibrary_TLB, StdVcl; + +type + TStackTrackDllsTest = class(TTypedComObject, IStackTrackDllsTest) + protected + function Error1: HResult; stdcall; + function Error2: HResult; stdcall; + end; + +implementation + +uses ComServ, SysUtils; + +procedure Error1_1; +begin + StrToInt('x'); +end; + +function TStackTrackDllsTest.Error1: HResult; +begin + Error1_1; + Result := S_FALSE; +end; + +function TStackTrackDllsTest.Error2: HResult; +begin + raise Exception.Create('Exception from IDllExceptTestObject.Error2'); +end; + +initialization + TTypedComObjectFactory.Create(ComServer, TStackTrackDllsTest, Class_StackTrackDllsTest, + ciMultiInstance, tmApartment); +end. diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDemoMain.dfm b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDemoMain.dfm new file mode 100644 index 0000000..bf364b7 --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDemoMain.dfm @@ -0,0 +1,115 @@ +object MainForm: TMainForm + Left = 555 + Top = 318 + BorderIcons = [biSystemMenu, biMinimize] + BorderStyle = bsSingle + Caption = 'Exceptions in DLLs example' + ClientHeight = 296 + ClientWidth = 235 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object StaticLibGroupBox: TGroupBox + Left = 8 + Top = 8 + Width = 217 + Height = 65 + Caption = 'Statically linked library' + TabOrder = 0 + object StaticLibError1Btn: TButton + Left = 23 + Top = 24 + Width = 75 + Height = 25 + Caption = 'Error1' + TabOrder = 0 + OnClick = StaticLibError1BtnClick + end + object StaticLibError2Btn: TButton + Left = 119 + Top = 24 + Width = 75 + Height = 25 + Caption = 'Error2' + TabOrder = 1 + OnClick = StaticLibError2BtnClick + end + end + object ComObjGroupBox: TGroupBox + Left = 8 + Top = 216 + Width = 217 + Height = 65 + Caption = 'COM object' + TabOrder = 1 + object ComObjErr1Btn: TButton + Left = 23 + Top = 24 + Width = 75 + Height = 25 + Caption = 'Error1' + TabOrder = 0 + OnClick = ComObjErr1BtnClick + end + object ComObjErr2Btn: TButton + Left = 119 + Top = 24 + Width = 75 + Height = 25 + Caption = 'Error2' + TabOrder = 1 + OnClick = ComObjErr2BtnClick + end + end + object DynLibGroupBox: TGroupBox + Left = 8 + Top = 88 + Width = 217 + Height = 113 + Caption = 'Dynamically linked library' + TabOrder = 2 + object DynamicLibError1Btn: TButton + Left = 23 + Top = 64 + Width = 75 + Height = 25 + Caption = 'Error1' + TabOrder = 0 + OnClick = DynamicLibError1BtnClick + end + object DynamicLibError2Btn: TButton + Left = 119 + Top = 64 + Width = 75 + Height = 25 + Caption = 'Error2' + TabOrder = 1 + OnClick = DynamicLibError2BtnClick + end + object LoadLibBtn: TButton + Left = 23 + Top = 24 + Width = 75 + Height = 25 + Caption = 'Load' + TabOrder = 2 + OnClick = LoadLibBtnClick + end + object FreeLibBtn: TButton + Left = 119 + Top = 24 + Width = 75 + Height = 25 + Caption = 'Free' + TabOrder = 3 + OnClick = FreeLibBtnClick + end + end +end diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDemoMain.pas b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDemoMain.pas new file mode 100644 index 0000000..cde7fe8 --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDemoMain.pas @@ -0,0 +1,130 @@ +unit StackTrackDLLsDemoMain; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls; + +type + TMainForm = class(TForm) + StaticLibError1Btn: TButton; + StaticLibError2Btn: TButton; + StaticLibGroupBox: TGroupBox; + ComObjGroupBox: TGroupBox; + ComObjErr1Btn: TButton; + ComObjErr2Btn: TButton; + DynLibGroupBox: TGroupBox; + DynamicLibError1Btn: TButton; + DynamicLibError2Btn: TButton; + LoadLibBtn: TButton; + FreeLibBtn: TButton; + procedure StaticLibError1BtnClick(Sender: TObject); + procedure StaticLibError2BtnClick(Sender: TObject); + procedure ComObjErr1BtnClick(Sender: TObject); + procedure ComObjErr2BtnClick(Sender: TObject); + procedure DynamicLibError1BtnClick(Sender: TObject); + procedure DynamicLibError2BtnClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure LoadLibBtnClick(Sender: TObject); + procedure FreeLibBtnClick(Sender: TObject); + private + FLibHandle: THandle; + public + procedure UpdateButtons; + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.dfm} + +uses + JclBase, StackTrackDLLsComLibrary_TLB; + +const + StaticLibrary = 'StackTrackDLLsStaticLibrary.dll'; + DynamicLibrary = 'StackTrackDLLsDynamicLibrary.dll'; + +procedure Error1; stdcall; external StaticLibrary; +procedure Error2; stdcall; external StaticLibrary; + +{ TMainForm } + +procedure TMainForm.FormCreate(Sender: TObject); +begin + UpdateButtons; +end; + +procedure TMainForm.StaticLibError1BtnClick(Sender: TObject); +begin + Error1; +end; + +procedure TMainForm.StaticLibError2BtnClick(Sender: TObject); +begin + Error2; +end; + +procedure TMainForm.ComObjErr1BtnClick(Sender: TObject); +var + I: IStackTrackDllsTest; +begin + I := CoStackTrackDllsTest.Create; + I.Error1; +end; + +procedure TMainForm.ComObjErr2BtnClick(Sender: TObject); +var + I: IStackTrackDllsTest; +begin + I := CoStackTrackDllsTest.Create; + I.Error2; +end; + +procedure TMainForm.LoadLibBtnClick(Sender: TObject); +begin + FLibHandle := LoadLibrary(DynamicLibrary); + UpdateButtons; + if FLibHandle = 0 then + RaiseLastOSError; +end; + +procedure TMainForm.FreeLibBtnClick(Sender: TObject); +begin + FreeLibrary(FLibHandle); + FLibHandle := 0; + UpdateButtons; +end; + +procedure TMainForm.DynamicLibError1BtnClick(Sender: TObject); +var + _Error1: procedure; stdcall; +begin + @_Error1 := GetProcAddress(FLibHandle, 'Error1'); + if not Assigned(_Error1) then + RaiseLastOSError; + _Error1; +end; + +procedure TMainForm.DynamicLibError2BtnClick(Sender: TObject); +var + _Error2: procedure; stdcall; +begin + @_Error2 := GetProcAddress(FLibHandle, 'Error2'); + if not Assigned(_Error2) then + RaiseLastOSError; + _Error2; +end; + +procedure TMainForm.UpdateButtons; +begin + LoadLibBtn.Enabled := (FLibHandle = 0); + FreeLibBtn.Enabled := (FLibHandle <> 0); + DynamicLibError1Btn.Enabled := (FLibHandle <> 0); + DynamicLibError2Btn.Enabled := (FLibHandle <> 0); +end; + +end. diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.bdsproj b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.bdsproj new file mode 100644 index 0000000..dcc7f08 --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + StackTrackDLLsDynamicLibrary.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + ..\..\..\..\bin + + + + + + HOOK_DLL_EXCEPTIONS + + False + + + + + + False + + + True + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1031 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.dof b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.dof new file mode 100644 index 0000000..18ab99a --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\..\bin +Conditionals=HOOK_DLL_EXCEPTIONS diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.dpr b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.dpr new file mode 100644 index 0000000..6470da7 --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.dpr @@ -0,0 +1,15 @@ +library StackTrackDLLsDynamicLibrary; + +uses + SysUtils, + JclHookExcept, + StackTrackDLLsDynamicUnit in 'StackTrackDLLsDynamicUnit.pas'; + +{$R *.res} + +exports + Error1, Error2; + +begin + JclInitializeLibrariesHookExcept; +end. diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.res b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicLibrary.res new file mode 100644 index 0000000000000000000000000000000000000000..472f2e47297a46cf06bb2ce0c8024f600e93445f GIT binary patch literal 876 zcmb7Dv2N5r5S`;9xg)W{DJ54@#)?ixq5woi0mwzzd`4C)-)wZn8KKjRL~&IVegsim z<4;MMl8!BqmN)jD1QHD+KkvSIvoqseFA>ok$aw^&f7!#MgFZ#fWYA7dilal&Gfd{d zD_}xo0Hra(u1-$Sq_Y{=t)_t=*?Vay!e$CjOQd&(lrSF0Tls2mP+KZU0$}{QB){?Cac-k=ge)P zs@#gmop0R8g}oxl?IPC5q$+ilyo8%O(__-l!GrVd4Js^S-iEqTry#JnP8vd!s;FDl zq;Z||>|&v=4zWd2S?5$WWh!|QKY>F}P3_f(5WOWpd|j7mcHv`Ne;>F+kC;*qx`@}N zI@2b!D425=SVC0ra{+0Ysaf8YfGz8My5jwi7&srkpXp z9NZS0rZ02XvDWFgVg)9vo;QjnQKSDp@U9?#Ex_7v>500o()q z9vw!*|5}IN*3c784fkjixsOrfDQdkOu0=o1Pl)Io$oVn7qu2D7-UDyw1IB~>c`xiX POlUqo8g7N%q6z&5v1T5M literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicUnit.pas b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicUnit.pas new file mode 100644 index 0000000..2b92f16 --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsDynamicUnit.pas @@ -0,0 +1,28 @@ +unit StackTrackDLLsDynamicUnit; + +interface + +procedure Error1; stdcall; +procedure Error2; stdcall; + +implementation + +uses + SysUtils; + +procedure Error1_1; +begin + StrToInt('x'); +end; + +procedure Error1; stdcall; +begin + Error1_1; +end; + +procedure Error2; stdcall; +begin + raise Exception.Create('Exception from StaticLibrary.dll'); +end; + +end. diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.bdsproj b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.bdsproj new file mode 100644 index 0000000..ef3bf94 --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + StackTrackDLLsExample.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + ..\..\..\..\bin + + + + + + HOOK_DLL_EXCEPTIONS + + False + + + + + + False + + + True + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1031 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.dof b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.dof new file mode 100644 index 0000000..18ab99a --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\..\bin +Conditionals=HOOK_DLL_EXCEPTIONS diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.dpr b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.dpr new file mode 100644 index 0000000..a034fb8 --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.dpr @@ -0,0 +1,17 @@ +program StackTrackDLLsExample; + +{$I jcl.inc} + +uses + Forms, + StackTrackDLLsDemoMain in 'StackTrackDLLsDemoMain.pas' {MainForm}, + ExceptDlg in '..\..\..\..\experts\debug\dialog\ExceptDlg.pas' {ExceptionDialog}; + +{$R *.res} +{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.res b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsExample.res new file mode 100644 index 0000000000000000000000000000000000000000..472f2e47297a46cf06bb2ce0c8024f600e93445f GIT binary patch literal 876 zcmb7Dv2N5r5S`;9xg)W{DJ54@#)?ixq5woi0mwzzd`4C)-)wZn8KKjRL~&IVegsim z<4;MMl8!BqmN)jD1QHD+KkvSIvoqseFA>ok$aw^&f7!#MgFZ#fWYA7dilal&Gfd{d zD_}xo0Hra(u1-$Sq_Y{=t)_t=*?Vay!e$CjOQd&(lrSF0Tls2mP+KZU0$}{QB){?Cac-k=ge)P zs@#gmop0R8g}oxl?IPC5q$+ilyo8%O(__-l!GrVd4Js^S-iEqTry#JnP8vd!s;FDl zq;Z||>|&v=4zWd2S?5$WWh!|QKY>F}P3_f(5WOWpd|j7mcHv`Ne;>F+kC;*qx`@}N zI@2b!D425=SVC0ra{+0Ysaf8YfGz8My5jwi7&srkpXp z9NZS0rZ02XvDWFgVg)9vo;QjnQKSDp@U9?#Ex_7v>500o()q z9vw!*|5}IN*3c784fkjixsOrfDQdkOu0=o1Pl)Io$oVn7qu2D7-UDyw1IB~>c`xiX POlUqo8g7N%q6z&5v1T5M literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.bdsproj b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.bdsproj new file mode 100644 index 0000000..cbba2ac --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + StackTrackDLLsStaticLibrary.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + ..\..\..\..\bin + + + + + + HOOK_DLL_EXCEPTIONS + + False + + + + + + False + + + True + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1031 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.dof b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.dof new file mode 100644 index 0000000..18ab99a --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\..\bin +Conditionals=HOOK_DLL_EXCEPTIONS diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.dpr b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.dpr new file mode 100644 index 0000000..2584a09 --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.dpr @@ -0,0 +1,15 @@ +library StackTrackDLLsStaticLibrary; + +uses + SysUtils, + JclHookExcept, + StackTrackDLLsStaticUnit in 'StackTrackDLLsStaticUnit.pas'; + +{$R *.res} + +exports + Error1, Error2; + +begin + JclInitializeLibrariesHookExcept; +end. diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.res b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticLibrary.res new file mode 100644 index 0000000000000000000000000000000000000000..472f2e47297a46cf06bb2ce0c8024f600e93445f GIT binary patch literal 876 zcmb7Dv2N5r5S`;9xg)W{DJ54@#)?ixq5woi0mwzzd`4C)-)wZn8KKjRL~&IVegsim z<4;MMl8!BqmN)jD1QHD+KkvSIvoqseFA>ok$aw^&f7!#MgFZ#fWYA7dilal&Gfd{d zD_}xo0Hra(u1-$Sq_Y{=t)_t=*?Vay!e$CjOQd&(lrSF0Tls2mP+KZU0$}{QB){?Cac-k=ge)P zs@#gmop0R8g}oxl?IPC5q$+ilyo8%O(__-l!GrVd4Js^S-iEqTry#JnP8vd!s;FDl zq;Z||>|&v=4zWd2S?5$WWh!|QKY>F}P3_f(5WOWpd|j7mcHv`Ne;>F+kC;*qx`@}N zI@2b!D425=SVC0ra{+0Ysaf8YfGz8My5jwi7&srkpXp z9NZS0rZ02XvDWFgVg)9vo;QjnQKSDp@U9?#Ex_7v>500o()q z9vw!*|5}IN*3c784fkjixsOrfDQdkOu0=o1Pl)Io$oVn7qu2D7-UDyw1IB~>c`xiX POlUqo8g7N%q6z&5v1T5M literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticUnit.pas b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticUnit.pas new file mode 100644 index 0000000..3b3922e --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDLLsStaticUnit.pas @@ -0,0 +1,28 @@ +unit StackTrackDLLsStaticUnit; + +interface + +procedure Error1; stdcall; +procedure Error2; stdcall; + +implementation + +uses + SysUtils; + +procedure Error1_1; +begin + StrToInt('x'); +end; + +procedure Error1; stdcall; +begin + Error1_1; +end; + +procedure Error2; stdcall; +begin + raise Exception.Create('Exception from StaticLibrary.dll'); +end; + +end. diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDemoMain.dfm b/official/1.104/examples/windows/debug/stacktrack/StackTrackDemoMain.dfm new file mode 100644 index 0000000..d1ffa55 --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDemoMain.dfm @@ -0,0 +1,95 @@ +object MainForm: TMainForm + Left = 342 + Top = 197 + ClientWidth = 606 + ClientHeight = 497 + Caption = 'Tracking unhandled exceptions in VCL application' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 0 + Top = 64 + Width = 64 + Height = 13 + Caption = '&Exception log' + FocusControl = ExceptionLogMemo + end + object ExceptionLogMemo: TMemo + Left = 0 + Top = 80 + Width = 606 + Height = 416 + Anchors = [akLeft, akTop, akRight, akBottom] + Font.Charset = EASTEUROPE_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Courier New' + Font.Style = [] + ParentFont = False + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 0 + WordWrap = False + end + object Button1: TButton + Left = 8 + Top = 8 + Width = 75 + Height = 25 + Caption = 'Error1' + TabOrder = 1 + OnClick = Button1Click + end + object Button2: TButton + Left = 88 + Top = 8 + Width = 75 + Height = 25 + Caption = 'Error2' + TabOrder = 2 + OnClick = Button2Click + end + object Button3: TButton + Left = 168 + Top = 8 + Width = 75 + Height = 25 + Caption = 'Error3' + TabOrder = 3 + OnClick = Button3Click + end + object ListBox1: TListBox + Left = 472 + Top = 8 + Width = 73 + Height = 49 + ItemHeight = 13 + TabOrder = 4 + Visible = False + end + object Button4: TButton + Left = 248 + Top = 8 + Width = 75 + Height = 25 + Caption = 'Error4' + TabOrder = 5 + OnClick = Button4Click + end + object ApplicationEvents: TApplicationEvents + OnException = ApplicationEventsException + Left = 8 + Top = 440 + end + object ActionList1: TActionList + Left = 440 + Top = 8 + end +end diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackDemoMain.pas b/official/1.104/examples/windows/debug/stacktrack/StackTrackDemoMain.pas new file mode 100644 index 0000000..93cec82 --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackDemoMain.pas @@ -0,0 +1,110 @@ +unit StackTrackDemoMain; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, AppEvnts, ActnList; + +type + TMainForm = class(TForm) + ExceptionLogMemo: TMemo; + Button1: TButton; + Button2: TButton; + Button3: TButton; + ListBox1: TListBox; + Button4: TButton; + ApplicationEvents: TApplicationEvents; + Label1: TLabel; + ActionList1: TActionList; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + procedure ApplicationEventsException(Sender: TObject; E: Exception); + private + { Private declarations } + public + { Public declarations } + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.DFM} + +uses + JclDebug; + +{ TMainForm } + +//-------------------------------------------------------------------------------------------------- +// Simulation of various unhandled exceptions +//-------------------------------------------------------------------------------------------------- + +procedure TMainForm.Button1Click(Sender: TObject); +begin + PInteger(nil)^ := 0; +end; + +procedure TMainForm.Button2Click(Sender: TObject); +begin + ListBox1.Items[1] := 'a'; +end; + +procedure AAA; +begin + PInteger(nil)^ := 0; +end; + +procedure TMainForm.Button3Click(Sender: TObject); +begin + AAA; +end; + +procedure TMainForm.Button4Click(Sender: TObject); +begin + ActionList1.Actions[0].Execute; +end; + +//-------------------------------------------------------------------------------------------------- +// Simple VCL application unhandled exception handler using JclDebug +//-------------------------------------------------------------------------------------------------- + +procedure TMainForm.ApplicationEventsException(Sender: TObject; E: Exception); +begin + // Log time stamp + ExceptionLogMemo.Lines.Add(DateTimeToStr(Now)); + + // Log unhandled exception stack info to ExceptionLogMemo + JclLastExceptStackListToStrings(ExceptionLogMemo.Lines, False, True, True, False); + + // Insert empty line + ExceptionLogMemo.Lines.Add(''); + + // Display default VCL unhandled exception dialog + Application.ShowException(E); +end; + +//-------------------------------------------------------------------------------------------------- +// JclDebug initialization and finalization for VCL application +//-------------------------------------------------------------------------------------------------- + +initialization + + // Enable raw mode (default mode uses stack frames which aren't always generated by the compiler) + Include(JclStackTrackingOptions, stRawMode); + // Disable stack tracking in dynamically loaded modules (it makes stack tracking code a bit faster) + Include(JclStackTrackingOptions, stStaticModuleList); + + // Initialize Exception tracking + JclStartExceptionTracking; + +finalization + + // Uninitialize Exception tracking + JclStopExceptionTracking; + +end. diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackExample.bdsproj b/official/1.104/examples/windows/debug/stacktrack/StackTrackExample.bdsproj new file mode 100644 index 0000000..c75588d --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackExample.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + StackTrackExample.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + ..\..\..\..\bin + + + + + + HOOK_DLL_EXCEPTIONS + + False + + + + + + False + + + True + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1031 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackExample.dof b/official/1.104/examples/windows/debug/stacktrack/StackTrackExample.dof new file mode 100644 index 0000000..18ab99a --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackExample.dof @@ -0,0 +1,3 @@ +[Directories] +OutputDir=..\..\..\..\bin +Conditionals=HOOK_DLL_EXCEPTIONS diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackExample.dpr b/official/1.104/examples/windows/debug/stacktrack/StackTrackExample.dpr new file mode 100644 index 0000000..26cacb4 --- /dev/null +++ b/official/1.104/examples/windows/debug/stacktrack/StackTrackExample.dpr @@ -0,0 +1,16 @@ +program StackTrackExample; + +{$I jcl.inc} + +uses + Forms, + StackTrackDemoMain in 'StackTrackDemoMain.pas' {MainForm}; + +{$R *.RES} +{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/official/1.104/examples/windows/debug/stacktrack/StackTrackExample.res b/official/1.104/examples/windows/debug/stacktrack/StackTrackExample.res new file mode 100644 index 0000000000000000000000000000000000000000..472f2e47297a46cf06bb2ce0c8024f600e93445f GIT binary patch literal 876 zcmb7Dv2N5r5S`;9xg)W{DJ54@#)?ixq5woi0mwzzd`4C)-)wZn8KKjRL~&IVegsim z<4;MMl8!BqmN)jD1QHD+KkvSIvoqseFA>ok$aw^&f7!#MgFZ#fWYA7dilal&Gfd{d zD_}xo0Hra(u1-$Sq_Y{=t)_t=*?Vay!e$CjOQd&(lrSF0Tls2mP+KZU0$}{QB){?Cac-k=ge)P zs@#gmop0R8g}oxl?IPC5q$+ilyo8%O(__-l!GrVd4Js^S-iEqTry#JnP8vd!s;FDl zq;Z||>|&v=4zWd2S?5$WWh!|QKY>F}P3_f(5WOWpd|j7mcHv`Ne;>F+kC;*qx`@}N zI@2b!D425=SVC0ra{+0Ysaf8YfGz8My5jwi7&srkpXp z9NZS0rZ02XvDWFgVg)9vo;QjnQKSDp@U9?#Ex_7v>500o()q z9vw!*|5}IN*3c784fkjixsOrfDQdkOu0=o1Pl)Io$oVn7qu2D7-UDyw1IB~>c`xiX POlUqo8g7N%q6z&5v1T5M literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/debug/threadexcept/ThreadExceptDemoMain.dfm b/official/1.104/examples/windows/debug/threadexcept/ThreadExceptDemoMain.dfm new file mode 100644 index 0000000..6e7b376 --- /dev/null +++ b/official/1.104/examples/windows/debug/threadexcept/ThreadExceptDemoMain.dfm @@ -0,0 +1,93 @@ +object MainForm: TMainForm + Left = 286 + Top = 169 + Caption = + 'Exception tracking in threads and IDE Thread Status window exten' + + 'sion demo' + ClientHeight = 557 + ClientWidth = 715 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 8 + Top = 8 + Width = 63 + Height = 13 + Caption = 'Thread name' + FocusControl = ThreadNameEdit + end + object Label2: TLabel + Left = 8 + Top = 248 + Width = 55 + Height = 13 + Caption = 'Exceprtions' + end + object MessageRichEdit: TRichEdit + Left = 8 + Top = 264 + Width = 697 + Height = 289 + Anchors = [akLeft, akTop, akRight, akBottom] + Font.Charset = EASTEUROPE_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Courier New' + Font.Style = [] + ParentFont = False + PlainText = True + ReadOnly = True + TabOrder = 0 + WordWrap = False + end + object ThreadsRichEdit: TRichEdit + Left = 168 + Top = 8 + Width = 537 + Height = 249 + Anchors = [akLeft, akTop, akRight] + Font.Charset = EASTEUROPE_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Courier New' + Font.Style = [] + ParentFont = False + PlainText = True + ReadOnly = True + TabOrder = 1 + WordWrap = False + end + object CreateThreadBtn: TButton + Left = 8 + Top = 56 + Width = 75 + Height = 25 + Caption = 'Create Thread' + TabOrder = 2 + OnClick = CreateThreadBtnClick + end + object ThreadNameEdit: TEdit + Left = 8 + Top = 24 + Width = 121 + Height = 21 + TabOrder = 3 + end + object ListThreadsBtn: TButton + Left = 8 + Top = 96 + Width = 75 + Height = 25 + Caption = 'List Threads' + TabOrder = 4 + OnClick = ListThreadsBtnClick + end +end diff --git a/official/1.104/examples/windows/debug/threadexcept/ThreadExceptDemoMain.pas b/official/1.104/examples/windows/debug/threadexcept/ThreadExceptDemoMain.pas new file mode 100644 index 0000000..10b523e --- /dev/null +++ b/official/1.104/examples/windows/debug/threadexcept/ThreadExceptDemoMain.pas @@ -0,0 +1,166 @@ +unit ThreadExceptDemoMain; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ComCtrls, JclDebug; + +type + TDemoThread = class(TJclDebugThread) + private + procedure SomeErrorHere; + protected + procedure Execute; override; + end; + + TMainForm = class(TForm) + MessageRichEdit: TRichEdit; + ThreadsRichEdit: TRichEdit; + CreateThreadBtn: TButton; + ThreadNameEdit: TEdit; + ListThreadsBtn: TButton; + Label1: TLabel; + Label2: TLabel; + procedure FormCreate(Sender: TObject); + procedure CreateThreadBtnClick(Sender: TObject); + procedure ListThreadsBtnClick(Sender: TObject); + private + procedure DoThreadSyncException(Thread: TJclDebugThread); + procedure DoThreadRegistered(ThreadID: DWORD); + procedure DoThreadUnregistered(ThreadID: DWORD); + public + ThreadCnt: Integer; + function GetNewThreadName: string; + procedure ScrollDownRichEdit(RichEdit: TRichEdit); + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.dfm} + +{ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! } +{ } +{ You have to install ThreadNameExpert package located in "\experts\debug\threadnames" } +{ } +{ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! } + +{$DEFINE IdeThreadStatusWindowExtension} + +{$IFDEF IdeThreadStatusWindowExtension} +uses + JclIdeThreadStatus; +{$ENDIF} + +{ TDemoThread } + +procedure TDemoThread.Execute; +var + I: Integer; +begin + try + I := 0; + while not Terminated and (I < 5) do + begin + Sleep(2000); + MessageBeep(0); + try + SomeErrorHere; + except + HandleException; + end; + Inc(I); + {$IFDEF IdeThreadStatusWindowExtension} + // You can change Thread Name displayed in Thread Status Window in code. This does not change + // TDemoThread.ThreadName property value + // ChangeThreadName(Self, Format('I = %d', [I])); + {$ENDIF} + end; + except + HandleException; + end; +end; + +procedure TDemoThread.SomeErrorHere; +begin + // Set Breakpoint on "begin", uncheck "Break" and check "Ingore subsequent exceptions" in + // dialog advanced breakpoint actions + StrToInt('x'); +end; + +{ TMainForm } + +procedure TMainForm.DoThreadRegistered(ThreadID: DWORD); +begin + ThreadsRichEdit.Lines.Add(Format('Thread registered: %s', [JclDebugThreadList.ThreadInfos[ThreadID]])); + ScrollDownRichEdit(ThreadsRichEdit); +end; + +procedure TMainForm.DoThreadSyncException(Thread: TJclDebugThread); +begin + MessageRichEdit.Lines.Add(Format('Exception in thread: %s', [Thread.ThreadInfo])); + // Note: JclLastExceptStackList always returns list for *current* thread ID. To simplify getting the + // stack of thread where an exception occured JclLastExceptStackList returns stack of the thread instead + // of current thread when called *within* the JclDebugThreadList.OnSyncException handler. This is the + // *only* exception to the behavior of JclLastExceptStackList described above. + JclLastExceptStackList.AddToStrings(MessageRichEdit.Lines, False, True, True); + ScrollDownRichEdit(MessageRichEdit); +end; + +procedure TMainForm.DoThreadUnregistered(ThreadID: DWORD); +begin + ThreadsRichEdit.Lines.Add(Format('Thread unregistered: %s', [JclDebugThreadList.ThreadInfos[ThreadID]])); + ScrollDownRichEdit(ThreadsRichEdit); +end; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + with JclDebugThreadList do + begin + OnSyncException := DoThreadSyncException; + OnThreadRegistered := DoThreadRegistered; + OnThreadUnregistered := DoThreadUnregistered; + end; + ThreadNameEdit.Text := GetNewThreadName; +end; + +function TMainForm.GetNewThreadName: string; +begin + Inc(ThreadCnt); + Result := Format('Thread%d', [ThreadCnt]); +end; + +procedure TMainForm.CreateThreadBtnClick(Sender: TObject); +var + DemoThread: TDemoThread; +begin + DemoThread := TDemoThread.Create(True, ThreadNameEdit.Text); + DemoThread.FreeOnTerminate := True; + DemoThread.Resume; + ThreadNameEdit.Text := GetNewThreadName; +end; + +procedure TMainForm.ListThreadsBtnClick(Sender: TObject); +var + I: Integer; +begin + ThreadsRichEdit.Lines.Add('List of registered threads:'); + with JclDebugThreadList do + for I := 0 to ThreadIDCount - 1 do + ThreadsRichEdit.Lines.Add(ThreadInfos[ThreadIDs[I]]); + ScrollDownRichEdit(ThreadsRichEdit); +end; + +procedure TMainForm.ScrollDownRichEdit(RichEdit: TRichEdit); +begin + SendMessage(RichEdit.Handle, EM_SCROLLCARET, 0, 0); +end; + +initialization + Include(JclStackTrackingOptions, stRawMode); + JclStartExceptionTracking; + +end. diff --git a/official/1.104/examples/windows/debug/threadexcept/ThreadExceptExample.dof b/official/1.104/examples/windows/debug/threadexcept/ThreadExceptExample.dof new file mode 100644 index 0000000..9acd2cf --- /dev/null +++ b/official/1.104/examples/windows/debug/threadexcept/ThreadExceptExample.dof @@ -0,0 +1,4 @@ +[Directories] +OutputDir=../../../../bin + + diff --git a/official/1.104/examples/windows/debug/threadexcept/ThreadExceptExample.dpr b/official/1.104/examples/windows/debug/threadexcept/ThreadExceptExample.dpr new file mode 100644 index 0000000..9efd090 --- /dev/null +++ b/official/1.104/examples/windows/debug/threadexcept/ThreadExceptExample.dpr @@ -0,0 +1,18 @@ +program ThreadExceptExample; + +{$I jcl.inc} + +uses + Forms, + JclIdeThreadStatus in '..\..\..\..\experts\debug\threadnames\JclIdeThreadStatus.pas', + ThreadExpertSharedNames in '..\..\..\..\experts\debug\threadnames\ThreadExpertSharedNames.pas', + ThreadExceptDemoMain in 'ThreadExceptDemoMain.pas' {MainForm}; + +{$R *.res} +{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/official/1.104/examples/windows/debug/threadexcept/ThreadExceptExample.res b/official/1.104/examples/windows/debug/threadexcept/ThreadExceptExample.res new file mode 100644 index 0000000000000000000000000000000000000000..472f2e47297a46cf06bb2ce0c8024f600e93445f GIT binary patch literal 876 zcmb7Dv2N5r5S`;9xg)W{DJ54@#)?ixq5woi0mwzzd`4C)-)wZn8KKjRL~&IVegsim z<4;MMl8!BqmN)jD1QHD+KkvSIvoqseFA>ok$aw^&f7!#MgFZ#fWYA7dilal&Gfd{d zD_}xo0Hra(u1-$Sq_Y{=t)_t=*?Vay!e$CjOQd&(lrSF0Tls2mP+KZU0$}{QB){?Cac-k=ge)P zs@#gmop0R8g}oxl?IPC5q$+ilyo8%O(__-l!GrVd4Js^S-iEqTry#JnP8vd!s;FDl zq;Z||>|&v=4zWd2S?5$WWh!|QKY>F}P3_f(5WOWpd|j7mcHv`Ne;>F+kC;*qx`@}N zI@2b!D425=SVC0ra{+0Ysaf8YfGz8My5jwi7&srkpXp z9NZS0rZ02XvDWFgVg)9vo;QjnQKSDp@U9?#Ex_7v>500o()q z9vw!*|5}IN*3c784fkjixsOrfDQdkOu0=o1Pl)Io$oVn7qu2D7-UDyw1IB~>c`xiX POlUqo8g7N%q6z&5v1T5M literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/delphitools/DelphiToolsGroup.bpg b/official/1.104/examples/windows/delphitools/DelphiToolsGroup.bpg new file mode 100644 index 0000000..7a36fb3 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/DelphiToolsGroup.bpg @@ -0,0 +1,33 @@ +#------------------------------------------------------------------------------ +VERSION = BWS.01 +#------------------------------------------------------------------------------ +!ifndef ROOT +ROOT = $(MAKEDIR)\.. +!endif +#------------------------------------------------------------------------------ +MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** +DCC = $(ROOT)\bin\dcc32.exe $** +BRCC = $(ROOT)\bin\brcc32.exe $** +#------------------------------------------------------------------------------ +PROJECTS = DependView.exe PeViewer.exe ToolHelpViewer.exe ResFix.exe \ + ScreenJPG.exe +#------------------------------------------------------------------------------ +default: $(PROJECTS) +#------------------------------------------------------------------------------ + +DependView.exe: DependencyViewer\DependView.dpr + $(DCC) + +PeViewer.exe: PeViewer\PeViewer.dpr + $(DCC) + +ToolHelpViewer.exe: ToolHelpView\ToolHelpViewer.dpr + $(DCC) + +ResFix.exe: ResFix\ResFix.dpr + $(DCC) + +ScreenJPG.exe: ScreenJPG\ScreenJPG.dpr + $(DCC) + + diff --git a/official/1.104/examples/windows/delphitools/Readme.txt b/official/1.104/examples/windows/delphitools/Readme.txt new file mode 100644 index 0000000..ad67294 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/Readme.txt @@ -0,0 +1,24 @@ +------------------------------------------------------------------------------- +* DELPHI OPEN SOURCE TOOLS 0.5.4 * +------------------------------------------------------------------------------- + +License: +-------- + +Mozilla Public License Ver. 1.1 +You may obtain a copy of the License at http://www.mozilla.org/MPL/ + +Software distributed under the License is distributed on an "AS IS" basis, +WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for +the specific language governing rights and limitations under the License. + + +Source code: +------------ + +The source code of these tools is intended for Delphi 5.01 (Update Pack #1 is +*required* due some fixes in the VCL) or Delphi 6.02. You will also need JEDI +Code Libary: + +Delphi Tools : http://www.volweb.cz/pvones/delphi +JEDI Code Library: http://delphi-jedi.org/Jedi:CODELIBJCL diff --git a/official/1.104/examples/windows/delphitools/common/About.dfm b/official/1.104/examples/windows/delphitools/common/About.dfm new file mode 100644 index 0000000..b4ca5ee --- /dev/null +++ b/official/1.104/examples/windows/delphitools/common/About.dfm @@ -0,0 +1,74 @@ +object AboutBox: TAboutBox + Left = 306 + Top = 208 + BorderStyle = bsDialog + Caption = 'About ...' + ClientHeight = 164 + ClientWidth = 258 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + ShowHint = True + OnCreate = FormCreate + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object IconPaintBox: TPaintBox + Left = 8 + Top = 8 + Width = 32 + Height = 32 + OnPaint = IconPaintBoxPaint + end + object Bevel1: TBevel + Left = 56 + Top = 121 + Width = 193 + Height = 14 + Anchors = [akLeft, akRight, akBottom] + Shape = bsTopLine + end + object ProductNameLabel: TLabel + Left = 56 + Top = 16 + Width = 108 + Height = 13 + Caption = 'ProductNameLabel' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object VersionLabel: TLabel + Left = 56 + Top = 40 + Width = 61 + Height = 13 + Caption = 'VersionLabel' + end + object CompanyLabel: TLabel + Left = 56 + Top = 64 + Width = 70 + Height = 13 + Caption = 'CompanyLabel' + end + object OkBtn: TButton + Left = 174 + Top = 133 + Width = 75 + Height = 25 + Anchors = [akRight, akBottom] + Caption = 'OK' + Default = True + ModalResult = 1 + TabOrder = 0 + end +end diff --git a/official/1.104/examples/windows/delphitools/common/About.pas b/official/1.104/examples/windows/delphitools/common/About.pas new file mode 100644 index 0000000..1c21e43 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/common/About.pas @@ -0,0 +1,180 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is About.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2006-05-30 00:02:45 +0200 (mar., 30 mai 2006) $ } +{ } +{**************************************************************************************************} + +unit About; + +{$I JCL.INC} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, ExtCtrls; + +type + TAboutBox = class(TForm) + IconPaintBox: TPaintBox; + OkBtn: TButton; + Bevel1: TBevel; + ProductNameLabel: TLabel; + VersionLabel: TLabel; + CompanyLabel: TLabel; + procedure FormCreate(Sender: TObject); + procedure IconPaintBoxPaint(Sender: TObject); + procedure FormShow(Sender: TObject); + private + FLinks: array of string; + FURLSpacing: Integer; + procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; + procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; + function GetLinkCaption(Index: Integer): string; + function GetLinkURL(Index: Integer): string; + procedure OpenURL(const UrlName: String); + procedure UpdateLinkLabel(L: LPARAM; Activate: Boolean); + procedure UrlLinkLabelClick(Sender: TObject); + end; + +procedure ShowAbout(const Links: array of string; Spacing: Integer = 20); + +var + AboutBox: TAboutBox; + +implementation + +{$R *.DFM} + +uses + ShellAPI, JclFileUtils; + +procedure ShowAbout(const Links: array of string; Spacing: Integer); +var + I: Integer; +begin + with TAboutBox.Create(Application) do + try + SetLength(FLinks, High(Links) + 1); + for I := Low(Links) to High(Links) do + FLinks[I] := Links[I]; + FURLSpacing := Spacing; + ShowModal; + finally + Free; + end; +end; + +{ TAboutBox } + +procedure TAboutBox.CMMouseEnter(var Message: TMessage); +begin + inherited; + UpdateLinkLabel(Message.LParam, True); +end; + +procedure TAboutBox.CMMouseLeave(var Message: TMessage); +begin + inherited; + UpdateLinkLabel(Message.LParam, False); +end; + +procedure TAboutBox.FormCreate(Sender: TObject); +begin + with IconPaintBox do + begin + Width := GetSystemMetrics(SM_CXICON); + Height := GetSystemMetrics(SM_CYICON); + end; + with TJclFileVersionInfo.Create(Application.ExeName) do + try + ProductNameLabel.Caption := ProductName; + VersionLabel.Caption := Format('Version: %s', [ProductVersion]); + CompanyLabel.Caption := LegalCopyright; + finally + Free; + end; +end; + +procedure TAboutBox.FormShow(Sender: TObject); +var + I: Integer; +begin + I := Length(FLinks) * FURLSpacing - 20; + if I > 0 then Height := Height + I; + for I := 0 to Length(FLinks) - 1 do + with TLabel.Create(Self) do + begin + Parent := Self; + SetBounds(CompanyLabel.Left, I * FURLSpacing + CompanyLabel.Top + 25, 0, 0); + Caption := GetLinkCaption(I); + Cursor := crHandPoint; + Font.Color := clBlue; + Font.Style := [fsUnderline]; + Hint := GetLinkURL(I); + Tag := I + 1; + OnClick := UrlLinkLabelClick; + end; +end; + +function TAboutBox.GetLinkCaption(Index: Integer): string; +begin + Result := FLinks[Index]; + Result := Copy(Result, 1, Pos(';', Result) - 1); +end; + +function TAboutBox.GetLinkURL(Index: Integer): string; +begin + Result := FLinks[Index]; + Delete(Result, 1, Pos(';', Result)); +end; + +procedure TAboutBox.IconPaintBoxPaint(Sender: TObject); +begin + IconPaintBox.Canvas.Draw(0, 0, Application.Icon); +end; + +procedure TAboutBox.OpenURL(const UrlName: String); +var + Sei: TShellExecuteInfo; +begin + ZeroMemory(@Sei, Sizeof(Sei)); + Sei.cbSize := Sizeof(Sei); + Sei.Wnd := Application.Handle; + Sei.lpFile := PChar(UrlName); + Sei.nShow := SW_SHOWNORMAL; + ShellExecuteEx(@Sei); +end; + +procedure TAboutBox.UpdateLinkLabel(L: LPARAM; Activate: Boolean); +begin + if (TObject(L) is TLabel) and (TLabel(L).Tag > 0) then + with TLabel(L).Font do + if Activate then Color := clPurple else Color := clBlue; +end; + +procedure TAboutBox.UrlLinkLabelClick(Sender: TObject); +begin + OpenURL(GetLinkURL(TLabel(Sender).Tag - 1)); +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/common/D6MdiMsgFix.pas b/official/1.104/examples/windows/delphitools/common/D6MdiMsgFix.pas new file mode 100644 index 0000000..665734a --- /dev/null +++ b/official/1.104/examples/windows/delphitools/common/D6MdiMsgFix.pas @@ -0,0 +1,85 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is D6MdiMsgFix.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2006-05-30 00:02:45 +0200 (mar., 30 mai 2006) $ } +{ } +{**************************************************************************************************} + +unit D6MdiMsgFix; + +interface + +{$I jcl.inc} + +implementation + +{$IFDEF DELPHI6} + +uses + Windows, Classes, SysUtils, Forms, AppEvnts; + +type + TFixApplicationEvents = class(TCustomApplicationEvents) + protected + procedure ApplicationEventsMessage(var Msg: TMsg; var Handled: Boolean); + public + constructor Create(AOwner: TComponent); override; + end; + + TApplicationAccess = class(TApplication); + +var + FixApplicationEvents: TFixApplicationEvents; + +{ TFixApplicationEvents } + +procedure TFixApplicationEvents.ApplicationEventsMessage(var Msg: TMsg; var Handled: Boolean); +begin + with Application do + if Assigned(MainForm) and (MainForm.FormStyle = fsMDIForm) and + Assigned(Screen.ActiveForm) and (Screen.ActiveForm.FormStyle <> fsMdiChild) then + begin + Handled := True; + with TApplicationAccess(Application) do + if not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then + begin + // prevent to call buggy TApplication.IsMDIMsg method, handle message here + TranslateMessage(Msg); + DispatchMessage(Msg); + end; + end; +end; + +constructor TFixApplicationEvents.Create(AOwner: TComponent); +begin + inherited; + OnMessage := ApplicationEventsMessage; +end; + +initialization + FixApplicationEvents := TFixApplicationEvents.Create(nil); + +finalization + FreeAndNil(FixApplicationEvents); + +{$ENDIF DELPHI6} + +end. diff --git a/official/1.104/examples/windows/delphitools/common/FindDlg.dfm b/official/1.104/examples/windows/delphitools/common/FindDlg.dfm new file mode 100644 index 0000000..ad3da51 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/common/FindDlg.dfm @@ -0,0 +1,107 @@ +object FindTextForm: TFindTextForm + Left = 305 + Top = 226 + ActiveControl = SearchTextEdit + BorderStyle = bsDialog + Caption = 'Find text' + ClientHeight = 110 + ClientWidth = 346 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 13 + object FindBtn: TButton + Left = 264 + Top = 8 + Width = 75 + Height = 25 + Caption = '&Find' + Default = True + TabOrder = 0 + OnClick = FindBtnClick + end + object CancelBtn: TButton + Left = 264 + Top = 40 + Width = 75 + Height = 25 + Cancel = True + Caption = '&Cancel' + ModalResult = 2 + TabOrder = 1 + end + object ProgressBar1: TProgressBar + Left = 8 + Top = 96 + Width = 329 + Height = 9 + Min = 0 + Max = 100 + Step = 20 + TabOrder = 2 + Visible = False + end + object GroupBox1: TGroupBox + Left = 8 + Top = 0 + Width = 249 + Height = 89 + TabOrder = 3 + object Label1: TLabel + Left = 8 + Top = 20 + Width = 56 + Height = 13 + Caption = '&Text to find:' + FocusControl = SearchTextEdit + end + object Label2: TLabel + Left = 8 + Top = 44 + Width = 38 + Height = 13 + Caption = 'C&olumn:' + FocusControl = ColumnComboBox + end + object SearchTextEdit: TEdit + Left = 72 + Top = 16 + Width = 169 + Height = 21 + TabOrder = 0 + end + object ColumnComboBox: TComboBox + Left = 72 + Top = 40 + Width = 169 + Height = 21 + Style = csDropDownList + ItemHeight = 13 + TabOrder = 1 + end + object CaseCheckBox: TCheckBox + Left = 72 + Top = 64 + Width = 81 + Height = 17 + Caption = '&Ignore case' + Checked = True + State = cbChecked + TabOrder = 2 + end + object ExactCheckBox: TCheckBox + Left = 160 + Top = 64 + Width = 81 + Height = 17 + Caption = '&Exact match' + TabOrder = 3 + end + end +end diff --git a/official/1.104/examples/windows/delphitools/common/FindDlg.pas b/official/1.104/examples/windows/delphitools/common/FindDlg.pas new file mode 100644 index 0000000..2d97cb7 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/common/FindDlg.pas @@ -0,0 +1,202 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is D6MdiMsgFix.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2006-05-30 00:02:45 +0200 (mar., 30 mai 2006) $ } +{ } +{**************************************************************************************************} + +unit FindDlg; + +{$I JCL.INC} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, ComCtrls; + +type + TFindTextForm = class(TForm) + FindBtn: TButton; + CancelBtn: TButton; + ProgressBar1: TProgressBar; + GroupBox1: TGroupBox; + Label1: TLabel; + SearchTextEdit: TEdit; + ColumnComboBox: TComboBox; + Label2: TLabel; + CaseCheckBox: TCheckBox; + ExactCheckBox: TCheckBox; + procedure FindBtnClick(Sender: TObject); + private + FListView: TListView; + procedure SetListView(const Value: TListView); + public + function Find: Boolean; + class function CanExecuteFind: Boolean; + property ListView: TListView read FListView write SetListView; + end; + +function ShowFindDialog(AListView: TListView): Boolean; + +var + FindTextForm: TFindTextForm; + +implementation + +{$R *.DFM} + +resourcestring + RsAllColumns = '[all columns]'; + +function ShowFindDialog(AListView: TListView): Boolean; +begin + with TFindTextForm.Create(Application) do + try + ListView := AListView; + Result := ShowModal = mrOk; + finally + Free; + end; +end; + +{ TFindForm } + +function TFindTextForm.Find: Boolean; +var + R, C, FindColumn, ColCount, FoundRow: Integer; + IgnoreCase, ExactMatch: Boolean; + SearchText: string; + + + function CompareColumnText(ColumnIndex: Integer): Boolean; + var + Text: string; + begin + with FListView.Items[R] do + if ColumnIndex = 0 then + Text := Caption + else + Text := SubItems[ColumnIndex - 1]; + if IgnoreCase then + Text := AnsiUpperCase(Text); + if ExactMatch then + Result := (SearchText = Text) + else + Result := (Pos(SearchText, Text) > 0); + if Result then + FoundRow := R; + end; + +begin + SearchTextEdit.Enabled := False; + ColumnComboBox.Enabled := False; + CaseCheckBox.Enabled := False; + ExactCheckBox.Enabled := False; + GroupBox1.Enabled := False; + FindBtn.Enabled := False; + CancelBtn.Enabled := False; + Update; + Result := False; + with FListView do + begin + if ItemFocused = nil then + begin + ItemFocused := Items[0]; + ItemFocused.MakeVisible(False); + end; + ProgressBar1.Max := Items.Count; + ProgressBar1.Min := ItemFocused.Index; + ProgressBar1.Position := ItemFocused.Index; + ProgressBar1.Visible := True; + FindColumn := ColumnComboBox.ItemIndex - 1; + ColCount := Columns.Count; + FoundRow := -1; + IgnoreCase := CaseCheckBox.Checked; + ExactMatch := ExactCheckBox.Checked; + if IgnoreCase then + SearchText := AnsiUpperCase(SearchTextEdit.Text) + else + SearchText := SearchTextEdit.Text; + for R := ItemFocused.Index + 1 to Items.Count - 1 do + begin + if FindColumn = -1 then + for C := 0 to ColCount - 1 do + CompareColumnText(C) + else + CompareColumnText(FindColumn); + if R mod ProgressBar1.Step = 0 then + ProgressBar1.StepIt; + if FoundRow > -1 then + begin + Result := True; + if Selected <> nil then + Selected.Selected := False; + ItemFocused := Items[FoundRow]; + Selected := ItemFocused; + ItemFocused.MakeVisible(False); + Break; + end; + end; + end; + SearchTextEdit.Enabled := True; + ColumnComboBox.Enabled := True; + CaseCheckBox.Enabled := True; + ExactCheckBox.Enabled := True; + GroupBox1.Enabled := True; + ProgressBar1.Visible := False; + FindBtn.Enabled := True; + CancelBtn.Enabled := True; + SearchTextEdit.SetFocus; +end; + +procedure TFindTextForm.SetListView(const Value: TListView); +var + I: Integer; +begin + FListView := Value; + ColumnComboBox.Items.BeginUpdate; + ColumnComboBox.Items.Clear; + ColumnComboBox.Items.Add(RsAllColumns); + for I := 0 to FListView.Columns.Count - 1 do + ColumnComboBox.Items.Add(FListView.Columns[I].Caption); + ColumnComboBox.Items.EndUpdate; + ColumnComboBox.ItemIndex := 0; +end; + +procedure TFindTextForm.FindBtnClick(Sender: TObject); +begin + Find; +end; + +class function TFindTextForm.CanExecuteFind: Boolean; +var + LV: TListView; +begin + Result := (Screen.Activecontrol is TListView); + if Result then + begin + LV := TListView(Screen.Activecontrol); + Result := (LV.Items.Count > 0) and not LV.HideSelection; + end; +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/common/SHDocVw_TLB.pas b/official/1.104/examples/windows/delphitools/common/SHDocVw_TLB.pas new file mode 100644 index 0000000..c214a5f --- /dev/null +++ b/official/1.104/examples/windows/delphitools/common/SHDocVw_TLB.pas @@ -0,0 +1,1931 @@ +unit SHDocVw_TLB; + +// ************************************************************************ // +// WARNING +// ------- +// The types declared in this file were generated from data read from a +// Type Library. If this type library is explicitly or indirectly (via +// another type library referring to this type library) re-imported, or the +// 'Refresh' command of the Type Library Editor activated while editing the +// Type Library, the contents of this file will be regenerated and all +// manual modifications will be lost. +// ************************************************************************ // + +// PASTLWTR : $Revision: 1658 $ +// File generated on 12.3.2002 14:05:12 from Type Library described below. + +// ************************************************************************ // +// Type Lib: C:\WINDOWS\SYSTEM\SHDOCVW.DLL (1) +// LIBID: {EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B} +// LCID: 0 +// Helpfile: +// DepndLst: +// (1) v2.0 stdole, (C:\WINDOWS\SYSTEM\stdole2.tlb) +// (2) v4.0 StdVCL, (C:\WINDOWS\SYSTEM\stdvcl40.dll) +// Errors: +// Hint: Member 'Type' of 'IWebBrowser' changed to 'Type_' +// Hint: Parameter 'Type' of IWebBrowser.Type changed to 'Type_' +// Hint: Parameter 'Property' of DWebBrowserEvents.PropertyChange changed to 'Property_' +// Hint: Parameter 'Property' of IWebBrowserApp.PutProperty changed to 'Property_' +// Hint: Parameter 'Property' of IWebBrowserApp.GetProperty changed to 'Property_' +// Hint: Parameter 'Type' of IShellUIHelper.AddDesktopComponent changed to 'Type_' +// Hint: Parameter 'var' of IShellNameSpace.Expand changed to 'var_' +// ************************************************************************ // +{$I jcl.inc} +{$I windowsonly.inc} + +{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. +{$WRITEABLECONST ON} + +interface + +{$IFDEF DELPHI6_UP} + {$VARPROPSETTER ON} +{$ENDIF} + +uses + Windows, ActiveX, Classes, Graphics, OleCtrls, + {$IFDEF DELPHI5_UP} + OleServer, + {$ENDIF} + {$IFDEF DELPHI6_UP} + Variants, + {$ENDIF} + StdVCL; + + + +// *********************************************************************// +// GUIDS declared in the TypeLibrary. Following prefixes are used: +// Type Libraries : LIBID_xxxx +// CoClasses : CLASS_xxxx +// DISPInterfaces : DIID_xxxx +// Non-DISP interfaces: IID_xxxx +// *********************************************************************// +const + // TypeLibrary Major and minor versions + SHDocVwMajorVersion = 1; + SHDocVwMinorVersion = 1; + + LIBID_SHDocVw: TGUID = '{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}'; + + IID_IWebBrowser: TGUID = '{EAB22AC1-30C1-11CF-A7EB-0000C05BAE0B}'; + DIID_DWebBrowserEvents: TGUID = '{EAB22AC2-30C1-11CF-A7EB-0000C05BAE0B}'; + IID_IWebBrowserApp: TGUID = '{0002DF05-0000-0000-C000-000000000046}'; + IID_IWebBrowser2: TGUID = '{D30C1661-CDAF-11D0-8A3E-00C04FC9E26E}'; + DIID_DWebBrowserEvents2: TGUID = '{34A715A0-6587-11D0-924A-0020AFC7AC4D}'; + CLASS_WebBrowser_V1: TGUID = '{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B}'; + CLASS_WebBrowser: TGUID = '{8856F961-340A-11D0-A96B-00C04FD705A2}'; + CLASS_InternetExplorer: TGUID = '{0002DF01-0000-0000-C000-000000000046}'; + CLASS_ShellBrowserWindow: TGUID = '{C08AFD90-F2A1-11D1-8455-00A0C91F3880}'; + DIID_DShellWindowsEvents: TGUID = '{FE4106E0-399A-11D0-A48C-00A0C90A8F39}'; + IID_IShellWindows: TGUID = '{85CB6900-4D95-11CF-960C-0080C7F4EE85}'; + CLASS_ShellWindows: TGUID = '{9BA05972-F6A8-11CF-A442-00A0C90A8F39}'; + IID_IShellUIHelper: TGUID = '{729FE2F8-1EA8-11D1-8F85-00C04FC2FBE1}'; + CLASS_ShellUIHelper: TGUID = '{64AB4BB7-111E-11D1-8F79-00C04FC2FBE1}'; + DIID_DShellNameSpaceEvents: TGUID = '{55136806-B2DE-11D1-B9F2-00A0C98BC547}'; + IID_IShellFavoritesNameSpace: TGUID = '{55136804-B2DE-11D1-B9F2-00A0C98BC547}'; + IID_IShellNameSpace: TGUID = '{E572D3C9-37BE-4AE2-825D-D521763E3108}'; + CLASS_ShellNameSpace: TGUID = '{55136805-B2DE-11D1-B9F2-00A0C98BC547}'; + IID_IScriptErrorList: TGUID = '{F3470F24-15FD-11D2-BB2E-00805FF7EFCA}'; + CLASS_CScriptErrorList: TGUID = '{EFD01300-160F-11D2-BB2E-00805FF7EFCA}'; + IID_ISearch: TGUID = '{BA9239A4-3DD5-11D2-BF8B-00C04FB93661}'; + IID_ISearches: TGUID = '{47C922A2-3DD5-11D2-BF8B-00C04FB93661}'; + IID_ISearchAssistantOC: TGUID = '{72423E8F-8011-11D2-BE79-00A0C9A83DA1}'; + IID_ISearchAssistantOC2: TGUID = '{72423E8F-8011-11D2-BE79-00A0C9A83DA2}'; + DIID__SearchAssistantEvents: TGUID = '{1611FDDA-445B-11D2-85DE-00C04FA35C89}'; + CLASS_SearchAssistantOC: TGUID = '{B45FF030-4447-11D2-85DE-00C04FA35C89}'; + +// *********************************************************************// +// Declaration of Enumerations defined in Type Library +// *********************************************************************// +// Constants for enum CommandStateChangeConstants +type + CommandStateChangeConstants = TOleEnum; +const + CSC_UPDATECOMMANDS = $FFFFFFFF; + CSC_NAVIGATEFORWARD = $00000001; + CSC_NAVIGATEBACK = $00000002; + +// Constants for enum OLECMDID +type + OLECMDID = TOleEnum; +const + OLECMDID_OPEN = $00000001; + OLECMDID_NEW = $00000002; + OLECMDID_SAVE = $00000003; + OLECMDID_SAVEAS = $00000004; + OLECMDID_SAVECOPYAS = $00000005; + OLECMDID_PRINT = $00000006; + OLECMDID_PRINTPREVIEW = $00000007; + OLECMDID_PAGESETUP = $00000008; + OLECMDID_SPELL = $00000009; + OLECMDID_PROPERTIES = $0000000A; + OLECMDID_CUT = $0000000B; + OLECMDID_COPY = $0000000C; + OLECMDID_PASTE = $0000000D; + OLECMDID_PASTESPECIAL = $0000000E; + OLECMDID_UNDO = $0000000F; + OLECMDID_REDO = $00000010; + OLECMDID_SELECTALL = $00000011; + OLECMDID_CLEARSELECTION = $00000012; + OLECMDID_ZOOM = $00000013; + OLECMDID_GETZOOMRANGE = $00000014; + OLECMDID_UPDATECOMMANDS = $00000015; + OLECMDID_REFRESH = $00000016; + OLECMDID_STOP = $00000017; + OLECMDID_HIDETOOLBARS = $00000018; + OLECMDID_SETPROGRESSMAX = $00000019; + OLECMDID_SETPROGRESSPOS = $0000001A; + OLECMDID_SETPROGRESSTEXT = $0000001B; + OLECMDID_SETTITLE = $0000001C; + OLECMDID_SETDOWNLOADSTATE = $0000001D; + OLECMDID_STOPDOWNLOAD = $0000001E; + OLECMDID_ONTOOLBARACTIVATED = $0000001F; + OLECMDID_FIND = $00000020; + OLECMDID_DELETE = $00000021; + OLECMDID_HTTPEQUIV = $00000022; + OLECMDID_HTTPEQUIV_DONE = $00000023; + OLECMDID_ENABLE_INTERACTION = $00000024; + OLECMDID_ONUNLOAD = $00000025; + OLECMDID_PROPERTYBAG2 = $00000026; + OLECMDID_PREREFRESH = $00000027; + OLECMDID_SHOWSCRIPTERROR = $00000028; + OLECMDID_SHOWMESSAGE = $00000029; + OLECMDID_SHOWFIND = $0000002A; + OLECMDID_SHOWPAGESETUP = $0000002B; + OLECMDID_SHOWPRINT = $0000002C; + OLECMDID_CLOSE = $0000002D; + OLECMDID_ALLOWUILESSSAVEAS = $0000002E; + OLECMDID_DONTDOWNLOADCSS = $0000002F; + OLECMDID_UPDATEPAGESTATUS = $00000030; + +// Constants for enum OLECMDF +type + OLECMDF = TOleEnum; +const + OLECMDF_SUPPORTED = $00000001; + OLECMDF_ENABLED = $00000002; + OLECMDF_LATCHED = $00000004; + OLECMDF_NINCHED = $00000008; + OLECMDF_INVISIBLE = $00000010; + OLECMDF_DEFHIDEONCTXTMENU = $00000020; + +// Constants for enum OLECMDEXECOPT +type + OLECMDEXECOPT = TOleEnum; +const + OLECMDEXECOPT_DODEFAULT = $00000000; + OLECMDEXECOPT_PROMPTUSER = $00000001; + OLECMDEXECOPT_DONTPROMPTUSER = $00000002; + OLECMDEXECOPT_SHOWHELP = $00000003; + +// Constants for enum tagREADYSTATE +type + tagREADYSTATE = TOleEnum; +const + READYSTATE_UNINITIALIZED = $00000000; + READYSTATE_LOADING = $00000001; + READYSTATE_LOADED = $00000002; + READYSTATE_INTERACTIVE = $00000003; + READYSTATE_COMPLETE = $00000004; + +// Constants for enum SecureLockIconConstants +type + SecureLockIconConstants = TOleEnum; +const + secureLockIconUnsecure = $00000000; + secureLockIconMixed = $00000001; + secureLockIconSecureUnknownBits = $00000002; + secureLockIconSecure40Bit = $00000003; + secureLockIconSecure56Bit = $00000004; + secureLockIconSecureFortezza = $00000005; + secureLockIconSecure128Bit = $00000006; + +// Constants for enum ShellWindowTypeConstants +type + ShellWindowTypeConstants = TOleEnum; +const + SWC_EXPLORER = $00000000; + SWC_BROWSER = $00000001; + SWC_3RDPARTY = $00000002; + SWC_CALLBACK = $00000004; + +// Constants for enum ShellWindowFindWindowOptions +type + ShellWindowFindWindowOptions = TOleEnum; +const + SWFO_NEEDDISPATCH = $00000001; + SWFO_INCLUDEPENDING = $00000002; + SWFO_COOKIEPASSED = $00000004; + +type + +// *********************************************************************// +// Forward declaration of types defined in TypeLibrary +// *********************************************************************// + IWebBrowser = interface; + IWebBrowserDisp = dispinterface; + DWebBrowserEvents = dispinterface; + IWebBrowserApp = interface; + IWebBrowserAppDisp = dispinterface; + IWebBrowser2 = interface; + IWebBrowser2Disp = dispinterface; + DWebBrowserEvents2 = dispinterface; + DShellWindowsEvents = dispinterface; + IShellWindows = interface; + IShellWindowsDisp = dispinterface; + IShellUIHelper = interface; + IShellUIHelperDisp = dispinterface; + DShellNameSpaceEvents = dispinterface; + IShellFavoritesNameSpace = interface; + IShellFavoritesNameSpaceDisp = dispinterface; + IShellNameSpace = interface; + IShellNameSpaceDisp = dispinterface; + IScriptErrorList = interface; + IScriptErrorListDisp = dispinterface; + ISearch = interface; + ISearchDisp = dispinterface; + ISearches = interface; + ISearchesDisp = dispinterface; + ISearchAssistantOC = interface; + ISearchAssistantOCDisp = dispinterface; + ISearchAssistantOC2 = interface; + ISearchAssistantOC2Disp = dispinterface; + _SearchAssistantEvents = dispinterface; + +// *********************************************************************// +// Declaration of CoClasses defined in Type Library +// (NOTE: Here we map each CoClass to its Default Interface) +// *********************************************************************// + WebBrowser_V1 = IWebBrowser; + WebBrowser = IWebBrowser2; + InternetExplorer = IWebBrowser2; + ShellBrowserWindow = IWebBrowser2; + ShellWindows = IShellWindows; + ShellUIHelper = IShellUIHelper; + ShellNameSpace = IShellNameSpace; + CScriptErrorList = IScriptErrorList; + SearchAssistantOC = ISearchAssistantOC2; + + +// *********************************************************************// +// Declaration of structures, unions and aliases. +// *********************************************************************// + POleVariant1 = ^OleVariant; {*} + + +// *********************************************************************// +// Interface: IWebBrowser +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {EAB22AC1-30C1-11CF-A7EB-0000C05BAE0B} +// *********************************************************************// + IWebBrowser = interface(IDispatch) + ['{EAB22AC1-30C1-11CF-A7EB-0000C05BAE0B}'] + procedure GoBack; safecall; + procedure GoForward; safecall; + procedure GoHome; safecall; + procedure GoSearch; safecall; + procedure Navigate(const URL: WideString; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant; + var Headers: OleVariant); safecall; + procedure Refresh; safecall; + procedure Refresh2(var Level: OleVariant); safecall; + procedure Stop; safecall; + function Get_Application: IDispatch; safecall; + function Get_Parent: IDispatch; safecall; + function Get_Container: IDispatch; safecall; + function Get_Document: IDispatch; safecall; + function Get_TopLevelContainer: WordBool; safecall; + function Get_Type_: WideString; safecall; + function Get_Left: Integer; safecall; + procedure Set_Left(pl: Integer); safecall; + function Get_Top: Integer; safecall; + procedure Set_Top(pl: Integer); safecall; + function Get_Width: Integer; safecall; + procedure Set_Width(pl: Integer); safecall; + function Get_Height: Integer; safecall; + procedure Set_Height(pl: Integer); safecall; + function Get_LocationName: WideString; safecall; + function Get_LocationURL: WideString; safecall; + function Get_Busy: WordBool; safecall; + property Application: IDispatch read Get_Application; + property Parent: IDispatch read Get_Parent; + property Container: IDispatch read Get_Container; + property Document: IDispatch read Get_Document; + property TopLevelContainer: WordBool read Get_TopLevelContainer; + property Type_: WideString read Get_Type_; + property Left: Integer read Get_Left write Set_Left; + property Top: Integer read Get_Top write Set_Top; + property Width: Integer read Get_Width write Set_Width; + property Height: Integer read Get_Height write Set_Height; + property LocationName: WideString read Get_LocationName; + property LocationURL: WideString read Get_LocationURL; + property Busy: WordBool read Get_Busy; + end; + +// *********************************************************************// +// DispIntf: IWebBrowserDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {EAB22AC1-30C1-11CF-A7EB-0000C05BAE0B} +// *********************************************************************// + IWebBrowserDisp = dispinterface + ['{EAB22AC1-30C1-11CF-A7EB-0000C05BAE0B}'] + procedure GoBack; dispid 100; + procedure GoForward; dispid 101; + procedure GoHome; dispid 102; + procedure GoSearch; dispid 103; + procedure Navigate(const URL: WideString; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant; + var Headers: OleVariant); dispid 104; + procedure Refresh; dispid -550; + procedure Refresh2(var Level: OleVariant); dispid 105; + procedure Stop; dispid 106; + property Application: IDispatch readonly dispid 200; + property Parent: IDispatch readonly dispid 201; + property Container: IDispatch readonly dispid 202; + property Document: IDispatch readonly dispid 203; + property TopLevelContainer: WordBool readonly dispid 204; + property Type_: WideString readonly dispid 205; + property Left: Integer dispid 206; + property Top: Integer dispid 207; + property Width: Integer dispid 208; + property Height: Integer dispid 209; + property LocationName: WideString readonly dispid 210; + property LocationURL: WideString readonly dispid 211; + property Busy: WordBool readonly dispid 212; + end; + +// *********************************************************************// +// DispIntf: DWebBrowserEvents +// Flags: (4112) Hidden Dispatchable +// GUID: {EAB22AC2-30C1-11CF-A7EB-0000C05BAE0B} +// *********************************************************************// + DWebBrowserEvents = dispinterface + ['{EAB22AC2-30C1-11CF-A7EB-0000C05BAE0B}'] + procedure BeforeNavigate(const URL: WideString; Flags: Integer; + const TargetFrameName: WideString; var PostData: OleVariant; + const Headers: WideString; var Cancel: WordBool); dispid 100; + procedure NavigateComplete(const URL: WideString); dispid 101; + procedure StatusTextChange(const Text: WideString); dispid 102; + procedure ProgressChange(Progress: Integer; ProgressMax: Integer); dispid 108; + procedure DownloadComplete; dispid 104; + procedure CommandStateChange(Command: Integer; Enable: WordBool); dispid 105; + procedure DownloadBegin; dispid 106; + procedure NewWindow(const URL: WideString; Flags: Integer; const TargetFrameName: WideString; + var PostData: OleVariant; const Headers: WideString; var Processed: WordBool); dispid 107; + procedure TitleChange(const Text: WideString); dispid 113; + procedure FrameBeforeNavigate(const URL: WideString; Flags: Integer; + const TargetFrameName: WideString; var PostData: OleVariant; + const Headers: WideString; var Cancel: WordBool); dispid 200; + procedure FrameNavigateComplete(const URL: WideString); dispid 201; + procedure FrameNewWindow(const URL: WideString; Flags: Integer; + const TargetFrameName: WideString; var PostData: OleVariant; + const Headers: WideString; var Processed: WordBool); dispid 204; + procedure Quit(var Cancel: WordBool); dispid 103; + procedure WindowMove; dispid 109; + procedure WindowResize; dispid 110; + procedure WindowActivate; dispid 111; + procedure PropertyChange(const Property_: WideString); dispid 112; + end; + +// *********************************************************************// +// Interface: IWebBrowserApp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {0002DF05-0000-0000-C000-000000000046} +// *********************************************************************// + IWebBrowserApp = interface(IWebBrowser) + ['{0002DF05-0000-0000-C000-000000000046}'] + procedure Quit; safecall; + procedure ClientToWindow(var pcx: SYSINT; var pcy: SYSINT); safecall; + procedure PutProperty(const Property_: WideString; vtValue: OleVariant); safecall; + function GetProperty(const Property_: WideString): OleVariant; safecall; + function Get_Name: WideString; safecall; + function Get_HWND: Integer; safecall; + function Get_FullName: WideString; safecall; + function Get_Path: WideString; safecall; + function Get_Visible: WordBool; safecall; + procedure Set_Visible(pBool: WordBool); safecall; + function Get_StatusBar: WordBool; safecall; + procedure Set_StatusBar(pBool: WordBool); safecall; + function Get_StatusText: WideString; safecall; + procedure Set_StatusText(const StatusText: WideString); safecall; + function Get_ToolBar: SYSINT; safecall; + procedure Set_ToolBar(Value: SYSINT); safecall; + function Get_MenuBar: WordBool; safecall; + procedure Set_MenuBar(Value: WordBool); safecall; + function Get_FullScreen: WordBool; safecall; + procedure Set_FullScreen(pbFullScreen: WordBool); safecall; + property Name: WideString read Get_Name; + property HWND: Integer read Get_HWND; + property FullName: WideString read Get_FullName; + property Path: WideString read Get_Path; + property Visible: WordBool read Get_Visible write Set_Visible; + property StatusBar: WordBool read Get_StatusBar write Set_StatusBar; + property StatusText: WideString read Get_StatusText write Set_StatusText; + property ToolBar: SYSINT read Get_ToolBar write Set_ToolBar; + property MenuBar: WordBool read Get_MenuBar write Set_MenuBar; + property FullScreen: WordBool read Get_FullScreen write Set_FullScreen; + end; + +// *********************************************************************// +// DispIntf: IWebBrowserAppDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {0002DF05-0000-0000-C000-000000000046} +// *********************************************************************// + IWebBrowserAppDisp = dispinterface + ['{0002DF05-0000-0000-C000-000000000046}'] + procedure Quit; dispid 300; + procedure ClientToWindow(var pcx: SYSINT; var pcy: SYSINT); dispid 301; + procedure PutProperty(const Property_: WideString; vtValue: OleVariant); dispid 302; + function GetProperty(const Property_: WideString): OleVariant; dispid 303; + property Name: WideString readonly dispid 0; + property HWND: Integer readonly dispid -515; + property FullName: WideString readonly dispid 400; + property Path: WideString readonly dispid 401; + property Visible: WordBool dispid 402; + property StatusBar: WordBool dispid 403; + property StatusText: WideString dispid 404; + property ToolBar: SYSINT dispid 405; + property MenuBar: WordBool dispid 406; + property FullScreen: WordBool dispid 407; + procedure GoBack; dispid 100; + procedure GoForward; dispid 101; + procedure GoHome; dispid 102; + procedure GoSearch; dispid 103; + procedure Navigate(const URL: WideString; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant; + var Headers: OleVariant); dispid 104; + procedure Refresh; dispid -550; + procedure Refresh2(var Level: OleVariant); dispid 105; + procedure Stop; dispid 106; + property Application: IDispatch readonly dispid 200; + property Parent: IDispatch readonly dispid 201; + property Container: IDispatch readonly dispid 202; + property Document: IDispatch readonly dispid 203; + property TopLevelContainer: WordBool readonly dispid 204; + property Type_: WideString readonly dispid 205; + property Left: Integer dispid 206; + property Top: Integer dispid 207; + property Width: Integer dispid 208; + property Height: Integer dispid 209; + property LocationName: WideString readonly dispid 210; + property LocationURL: WideString readonly dispid 211; + property Busy: WordBool readonly dispid 212; + end; + +// *********************************************************************// +// Interface: IWebBrowser2 +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {D30C1661-CDAF-11D0-8A3E-00C04FC9E26E} +// *********************************************************************// + IWebBrowser2 = interface(IWebBrowserApp) + ['{D30C1661-CDAF-11D0-8A3E-00C04FC9E26E}'] + procedure Navigate2(var URL: OleVariant; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant; + var Headers: OleVariant); safecall; + function QueryStatusWB(cmdID: OLECMDID): OLECMDF; safecall; + procedure ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT; var pvaIn: OleVariant; + var pvaOut: OleVariant); safecall; + procedure ShowBrowserBar(var pvaClsid: OleVariant; var pvarShow: OleVariant; + var pvarSize: OleVariant); safecall; + function Get_ReadyState: tagREADYSTATE; safecall; + function Get_Offline: WordBool; safecall; + procedure Set_Offline(pbOffline: WordBool); safecall; + function Get_Silent: WordBool; safecall; + procedure Set_Silent(pbSilent: WordBool); safecall; + function Get_RegisterAsBrowser: WordBool; safecall; + procedure Set_RegisterAsBrowser(pbRegister: WordBool); safecall; + function Get_RegisterAsDropTarget: WordBool; safecall; + procedure Set_RegisterAsDropTarget(pbRegister: WordBool); safecall; + function Get_TheaterMode: WordBool; safecall; + procedure Set_TheaterMode(pbRegister: WordBool); safecall; + function Get_AddressBar: WordBool; safecall; + procedure Set_AddressBar(Value: WordBool); safecall; + function Get_Resizable: WordBool; safecall; + procedure Set_Resizable(Value: WordBool); safecall; + property ReadyState: tagREADYSTATE read Get_ReadyState; + property Offline: WordBool read Get_Offline write Set_Offline; + property Silent: WordBool read Get_Silent write Set_Silent; + property RegisterAsBrowser: WordBool read Get_RegisterAsBrowser write Set_RegisterAsBrowser; + property RegisterAsDropTarget: WordBool read Get_RegisterAsDropTarget write Set_RegisterAsDropTarget; + property TheaterMode: WordBool read Get_TheaterMode write Set_TheaterMode; + property AddressBar: WordBool read Get_AddressBar write Set_AddressBar; + property Resizable: WordBool read Get_Resizable write Set_Resizable; + end; + +// *********************************************************************// +// DispIntf: IWebBrowser2Disp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {D30C1661-CDAF-11D0-8A3E-00C04FC9E26E} +// *********************************************************************// + IWebBrowser2Disp = dispinterface + ['{D30C1661-CDAF-11D0-8A3E-00C04FC9E26E}'] + procedure Navigate2(var URL: OleVariant; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant; + var Headers: OleVariant); dispid 500; + function QueryStatusWB(cmdID: OLECMDID): OLECMDF; dispid 501; + procedure ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT; var pvaIn: OleVariant; + var pvaOut: OleVariant); dispid 502; + procedure ShowBrowserBar(var pvaClsid: OleVariant; var pvarShow: OleVariant; + var pvarSize: OleVariant); dispid 503; + property ReadyState: tagREADYSTATE readonly dispid -525; + property Offline: WordBool dispid 550; + property Silent: WordBool dispid 551; + property RegisterAsBrowser: WordBool dispid 552; + property RegisterAsDropTarget: WordBool dispid 553; + property TheaterMode: WordBool dispid 554; + property AddressBar: WordBool dispid 555; + property Resizable: WordBool dispid 556; + procedure Quit; dispid 300; + procedure ClientToWindow(var pcx: SYSINT; var pcy: SYSINT); dispid 301; + procedure PutProperty(const Property_: WideString; vtValue: OleVariant); dispid 302; + function GetProperty(const Property_: WideString): OleVariant; dispid 303; + property Name: WideString readonly dispid 0; + property HWND: Integer readonly dispid -515; + property FullName: WideString readonly dispid 400; + property Path: WideString readonly dispid 401; + property Visible: WordBool dispid 402; + property StatusBar: WordBool dispid 403; + property StatusText: WideString dispid 404; + property ToolBar: SYSINT dispid 405; + property MenuBar: WordBool dispid 406; + property FullScreen: WordBool dispid 407; + procedure GoBack; dispid 100; + procedure GoForward; dispid 101; + procedure GoHome; dispid 102; + procedure GoSearch; dispid 103; + procedure Navigate(const URL: WideString; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant; + var Headers: OleVariant); dispid 104; + procedure Refresh; dispid -550; + procedure Refresh2(var Level: OleVariant); dispid 105; + procedure Stop; dispid 106; + property Application: IDispatch readonly dispid 200; + property Parent: IDispatch readonly dispid 201; + property Container: IDispatch readonly dispid 202; + property Document: IDispatch readonly dispid 203; + property TopLevelContainer: WordBool readonly dispid 204; + property Type_: WideString readonly dispid 205; + property Left: Integer dispid 206; + property Top: Integer dispid 207; + property Width: Integer dispid 208; + property Height: Integer dispid 209; + property LocationName: WideString readonly dispid 210; + property LocationURL: WideString readonly dispid 211; + property Busy: WordBool readonly dispid 212; + end; + +// *********************************************************************// +// DispIntf: DWebBrowserEvents2 +// Flags: (4112) Hidden Dispatchable +// GUID: {34A715A0-6587-11D0-924A-0020AFC7AC4D} +// *********************************************************************// + DWebBrowserEvents2 = dispinterface + ['{34A715A0-6587-11D0-924A-0020AFC7AC4D}'] + procedure StatusTextChange(const Text: WideString); dispid 102; + procedure ProgressChange(Progress: Integer; ProgressMax: Integer); dispid 108; + procedure CommandStateChange(Command: Integer; Enable: WordBool); dispid 105; + procedure DownloadBegin; dispid 106; + procedure DownloadComplete; dispid 104; + procedure TitleChange(const Text: WideString); dispid 113; + procedure PropertyChange(const szProperty: WideString); dispid 112; + procedure BeforeNavigate2(const pDisp: IDispatch; var URL: OleVariant; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant; + var Headers: OleVariant; var Cancel: WordBool); dispid 250; + procedure NewWindow2(var ppDisp: IDispatch; var Cancel: WordBool); dispid 251; + procedure NavigateComplete2(const pDisp: IDispatch; var URL: OleVariant); dispid 252; + procedure DocumentComplete(const pDisp: IDispatch; var URL: OleVariant); dispid 259; + procedure OnQuit; dispid 253; + procedure OnVisible(Visible: WordBool); dispid 254; + procedure OnToolBar(ToolBar: WordBool); dispid 255; + procedure OnMenuBar(MenuBar: WordBool); dispid 256; + procedure OnStatusBar(StatusBar: WordBool); dispid 257; + procedure OnFullScreen(FullScreen: WordBool); dispid 258; + procedure OnTheaterMode(TheaterMode: WordBool); dispid 260; + procedure WindowSetResizable(Resizable: WordBool); dispid 262; + procedure WindowSetLeft(Left: Integer); dispid 264; + procedure WindowSetTop(Top: Integer); dispid 265; + procedure WindowSetWidth(Width: Integer); dispid 266; + procedure WindowSetHeight(Height: Integer); dispid 267; + procedure WindowClosing(IsChildWindow: WordBool; var Cancel: WordBool); dispid 263; + procedure ClientToHostWindow(var CX: Integer; var CY: Integer); dispid 268; + procedure SetSecureLockIcon(SecureLockIcon: Integer); dispid 269; + procedure FileDownload(var Cancel: WordBool); dispid 270; + end; + +// *********************************************************************// +// DispIntf: DShellWindowsEvents +// Flags: (4096) Dispatchable +// GUID: {FE4106E0-399A-11D0-A48C-00A0C90A8F39} +// *********************************************************************// + DShellWindowsEvents = dispinterface + ['{FE4106E0-399A-11D0-A48C-00A0C90A8F39}'] + procedure WindowRegistered(lCookie: Integer); dispid 200; + procedure WindowRevoked(lCookie: Integer); dispid 201; + end; + +// *********************************************************************// +// Interface: IShellWindows +// Flags: (4416) Dual OleAutomation Dispatchable +// GUID: {85CB6900-4D95-11CF-960C-0080C7F4EE85} +// *********************************************************************// + IShellWindows = interface(IDispatch) + ['{85CB6900-4D95-11CF-960C-0080C7F4EE85}'] + function Get_Count: Integer; safecall; + function Item(index: OleVariant): IDispatch; safecall; + function _NewEnum: IUnknown; safecall; + procedure Register(const pid: IDispatch; HWND: Integer; swClass: SYSINT; out plCookie: Integer); safecall; + procedure RegisterPending(lThreadId: Integer; var pvarloc: OleVariant; + var pvarlocRoot: OleVariant; swClass: SYSINT; out plCookie: Integer); safecall; + procedure Revoke(lCookie: Integer); safecall; + procedure OnNavigate(lCookie: Integer; var pvarloc: OleVariant); safecall; + procedure OnActivated(lCookie: Integer; fActive: WordBool); safecall; + function FindWindowSW(var pvarloc: OleVariant; var pvarlocRoot: OleVariant; swClass: SYSINT; + out pHWND: Integer; swfwOptions: SYSINT): IDispatch; safecall; + procedure OnCreated(lCookie: Integer; const punk: IUnknown); safecall; + procedure ProcessAttachDetach(fAttach: WordBool); safecall; + property Count: Integer read Get_Count; + end; + +// *********************************************************************// +// DispIntf: IShellWindowsDisp +// Flags: (4416) Dual OleAutomation Dispatchable +// GUID: {85CB6900-4D95-11CF-960C-0080C7F4EE85} +// *********************************************************************// + IShellWindowsDisp = dispinterface + ['{85CB6900-4D95-11CF-960C-0080C7F4EE85}'] + property Count: Integer readonly dispid 1610743808; + function Item(index: OleVariant): IDispatch; dispid 0; + function _NewEnum: IUnknown; dispid -4; + procedure Register(const pid: IDispatch; HWND: Integer; swClass: SYSINT; out plCookie: Integer); dispid 1610743811; + procedure RegisterPending(lThreadId: Integer; var pvarloc: OleVariant; + var pvarlocRoot: OleVariant; swClass: SYSINT; out plCookie: Integer); dispid 1610743812; + procedure Revoke(lCookie: Integer); dispid 1610743813; + procedure OnNavigate(lCookie: Integer; var pvarloc: OleVariant); dispid 1610743814; + procedure OnActivated(lCookie: Integer; fActive: WordBool); dispid 1610743815; + function FindWindowSW(var pvarloc: OleVariant; var pvarlocRoot: OleVariant; swClass: SYSINT; + out pHWND: Integer; swfwOptions: SYSINT): IDispatch; dispid 1610743816; + procedure OnCreated(lCookie: Integer; const punk: IUnknown); dispid 1610743817; + procedure ProcessAttachDetach(fAttach: WordBool); dispid 1610743818; + end; + +// *********************************************************************// +// Interface: IShellUIHelper +// Flags: (4416) Dual OleAutomation Dispatchable +// GUID: {729FE2F8-1EA8-11D1-8F85-00C04FC2FBE1} +// *********************************************************************// + IShellUIHelper = interface(IDispatch) + ['{729FE2F8-1EA8-11D1-8F85-00C04FC2FBE1}'] + procedure ResetFirstBootMode; safecall; + procedure ResetSafeMode; safecall; + procedure RefreshOfflineDesktop; safecall; + procedure AddFavorite(const URL: WideString; var Title: OleVariant); safecall; + procedure AddChannel(const URL: WideString); safecall; + procedure AddDesktopComponent(const URL: WideString; const Type_: WideString; + var Left: OleVariant; var Top: OleVariant; var Width: OleVariant; + var Height: OleVariant); safecall; + function IsSubscribed(const URL: WideString): WordBool; safecall; + procedure NavigateAndFind(const URL: WideString; const strQuery: WideString; + var varTargetFrame: OleVariant); safecall; + procedure ImportExportFavorites(fImport: WordBool; const strImpExpPath: WideString); safecall; + procedure AutoCompleteSaveForm(var Form: OleVariant); safecall; + procedure AutoScan(const strSearch: WideString; const strFailureUrl: WideString; + var pvarTargetFrame: OleVariant); safecall; + procedure AutoCompleteAttach(var Reserved: OleVariant); safecall; + function ShowBrowserUI(const bstrName: WideString; var pvarIn: OleVariant): OleVariant; safecall; + end; + +// *********************************************************************// +// DispIntf: IShellUIHelperDisp +// Flags: (4416) Dual OleAutomation Dispatchable +// GUID: {729FE2F8-1EA8-11D1-8F85-00C04FC2FBE1} +// *********************************************************************// + IShellUIHelperDisp = dispinterface + ['{729FE2F8-1EA8-11D1-8F85-00C04FC2FBE1}'] + procedure ResetFirstBootMode; dispid 1; + procedure ResetSafeMode; dispid 2; + procedure RefreshOfflineDesktop; dispid 3; + procedure AddFavorite(const URL: WideString; var Title: OleVariant); dispid 4; + procedure AddChannel(const URL: WideString); dispid 5; + procedure AddDesktopComponent(const URL: WideString; const Type_: WideString; + var Left: OleVariant; var Top: OleVariant; var Width: OleVariant; + var Height: OleVariant); dispid 6; + function IsSubscribed(const URL: WideString): WordBool; dispid 7; + procedure NavigateAndFind(const URL: WideString; const strQuery: WideString; + var varTargetFrame: OleVariant); dispid 8; + procedure ImportExportFavorites(fImport: WordBool; const strImpExpPath: WideString); dispid 9; + procedure AutoCompleteSaveForm(var Form: OleVariant); dispid 10; + procedure AutoScan(const strSearch: WideString; const strFailureUrl: WideString; + var pvarTargetFrame: OleVariant); dispid 11; + procedure AutoCompleteAttach(var Reserved: OleVariant); dispid 12; + function ShowBrowserUI(const bstrName: WideString; var pvarIn: OleVariant): OleVariant; dispid 13; + end; + +// *********************************************************************// +// DispIntf: DShellNameSpaceEvents +// Flags: (4096) Dispatchable +// GUID: {55136806-B2DE-11D1-B9F2-00A0C98BC547} +// *********************************************************************// + DShellNameSpaceEvents = dispinterface + ['{55136806-B2DE-11D1-B9F2-00A0C98BC547}'] + procedure FavoritesSelectionChange(cItems: Integer; hItem: Integer; const strName: WideString; + const strUrl: WideString; cVisits: Integer; + const strDate: WideString; fAvailableOffline: Integer); dispid 1; + procedure SelectionChange; dispid 2; + procedure DoubleClick; dispid 3; + procedure Initialized; dispid 4; + end; + +// *********************************************************************// +// Interface: IShellFavoritesNameSpace +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {55136804-B2DE-11D1-B9F2-00A0C98BC547} +// *********************************************************************// + IShellFavoritesNameSpace = interface(IDispatch) + ['{55136804-B2DE-11D1-B9F2-00A0C98BC547}'] + procedure MoveSelectionUp; safecall; + procedure MoveSelectionDown; safecall; + procedure ResetSort; safecall; + procedure NewFolder; safecall; + procedure Synchronize; safecall; + procedure Import; safecall; + procedure Export; safecall; + procedure InvokeContextMenuCommand(const strCommand: WideString); safecall; + procedure MoveSelectionTo; safecall; + function Get_SubscriptionsEnabled: WordBool; safecall; + function CreateSubscriptionForSelection: WordBool; safecall; + function DeleteSubscriptionForSelection: WordBool; safecall; + procedure SetRoot(const bstrFullPath: WideString); safecall; + property SubscriptionsEnabled: WordBool read Get_SubscriptionsEnabled; + end; + +// *********************************************************************// +// DispIntf: IShellFavoritesNameSpaceDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {55136804-B2DE-11D1-B9F2-00A0C98BC547} +// *********************************************************************// + IShellFavoritesNameSpaceDisp = dispinterface + ['{55136804-B2DE-11D1-B9F2-00A0C98BC547}'] + procedure MoveSelectionUp; dispid 1; + procedure MoveSelectionDown; dispid 2; + procedure ResetSort; dispid 3; + procedure NewFolder; dispid 4; + procedure Synchronize; dispid 5; + procedure Import; dispid 6; + procedure Export; dispid 7; + procedure InvokeContextMenuCommand(const strCommand: WideString); dispid 8; + procedure MoveSelectionTo; dispid 9; + property SubscriptionsEnabled: WordBool readonly dispid 10; + function CreateSubscriptionForSelection: WordBool; dispid 11; + function DeleteSubscriptionForSelection: WordBool; dispid 12; + procedure SetRoot(const bstrFullPath: WideString); dispid 13; + end; + +// *********************************************************************// +// Interface: IShellNameSpace +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {E572D3C9-37BE-4AE2-825D-D521763E3108} +// *********************************************************************// + IShellNameSpace = interface(IShellFavoritesNameSpace) + ['{E572D3C9-37BE-4AE2-825D-D521763E3108}'] + function Get_EnumOptions: Integer; safecall; + procedure Set_EnumOptions(pgrfEnumFlags: Integer); safecall; + function Get_SelectedItem: IDispatch; safecall; + procedure Set_SelectedItem(const pItem: IDispatch); safecall; + function Get_Root: OleVariant; safecall; + procedure Set_Root(pvar: OleVariant); safecall; + function Get_Depth: SYSINT; safecall; + procedure Set_Depth(piDepth: SYSINT); safecall; + function Get_Mode: SYSUINT; safecall; + procedure Set_Mode(puMode: SYSUINT); safecall; + function Get_Flags: LongWord; safecall; + procedure Set_Flags(pdwFlags: LongWord); safecall; + procedure Set_TVFlags(dwFlags: LongWord); safecall; + function Get_TVFlags: LongWord; safecall; + function Get_Columns: WideString; safecall; + procedure Set_Columns(const bstrColumns: WideString); safecall; + function Get_CountViewTypes: SYSINT; safecall; + procedure SetViewType(iType: SYSINT); safecall; + function SelectedItems: IDispatch; safecall; + procedure Expand(var_: OleVariant; iDepth: SYSINT); safecall; + procedure UnselectAll; safecall; + property EnumOptions: Integer read Get_EnumOptions write Set_EnumOptions; + property SelectedItem: IDispatch read Get_SelectedItem write Set_SelectedItem; + property Root: OleVariant read Get_Root write Set_Root; + property Depth: SYSINT read Get_Depth write Set_Depth; + property Mode: SYSUINT read Get_Mode write Set_Mode; + property Flags: LongWord read Get_Flags write Set_Flags; + property TVFlags: LongWord read Get_TVFlags write Set_TVFlags; + property Columns: WideString read Get_Columns write Set_Columns; + property CountViewTypes: SYSINT read Get_CountViewTypes; + end; + +// *********************************************************************// +// DispIntf: IShellNameSpaceDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {E572D3C9-37BE-4AE2-825D-D521763E3108} +// *********************************************************************// + IShellNameSpaceDisp = dispinterface + ['{E572D3C9-37BE-4AE2-825D-D521763E3108}'] + property EnumOptions: Integer dispid 14; + property SelectedItem: IDispatch dispid 15; + property Root: OleVariant dispid 16; + property Depth: SYSINT dispid 17; + property Mode: SYSUINT dispid 18; + property Flags: LongWord dispid 19; + property TVFlags: LongWord dispid 20; + property Columns: WideString dispid 21; + property CountViewTypes: SYSINT readonly dispid 22; + procedure SetViewType(iType: SYSINT); dispid 23; + function SelectedItems: IDispatch; dispid 24; + procedure Expand(var_: OleVariant; iDepth: SYSINT); dispid 25; + procedure UnselectAll; dispid 26; + procedure MoveSelectionUp; dispid 1; + procedure MoveSelectionDown; dispid 2; + procedure ResetSort; dispid 3; + procedure NewFolder; dispid 4; + procedure Synchronize; dispid 5; + procedure Import; dispid 6; + procedure Export; dispid 7; + procedure InvokeContextMenuCommand(const strCommand: WideString); dispid 8; + procedure MoveSelectionTo; dispid 9; + property SubscriptionsEnabled: WordBool readonly dispid 10; + function CreateSubscriptionForSelection: WordBool; dispid 11; + function DeleteSubscriptionForSelection: WordBool; dispid 12; + procedure SetRoot(const bstrFullPath: WideString); dispid 13; + end; + +// *********************************************************************// +// Interface: IScriptErrorList +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {F3470F24-15FD-11D2-BB2E-00805FF7EFCA} +// *********************************************************************// + IScriptErrorList = interface(IDispatch) + ['{F3470F24-15FD-11D2-BB2E-00805FF7EFCA}'] + procedure advanceError; safecall; + procedure retreatError; safecall; + function canAdvanceError: Integer; safecall; + function canRetreatError: Integer; safecall; + function getErrorLine: Integer; safecall; + function getErrorChar: Integer; safecall; + function getErrorCode: Integer; safecall; + function getErrorMsg: WideString; safecall; + function getErrorUrl: WideString; safecall; + function getAlwaysShowLockState: Integer; safecall; + function getDetailsPaneOpen: Integer; safecall; + procedure setDetailsPaneOpen(fDetailsPaneOpen: Integer); safecall; + function getPerErrorDisplay: Integer; safecall; + procedure setPerErrorDisplay(fPerErrorDisplay: Integer); safecall; + end; + +// *********************************************************************// +// DispIntf: IScriptErrorListDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {F3470F24-15FD-11D2-BB2E-00805FF7EFCA} +// *********************************************************************// + IScriptErrorListDisp = dispinterface + ['{F3470F24-15FD-11D2-BB2E-00805FF7EFCA}'] + procedure advanceError; dispid 10; + procedure retreatError; dispid 11; + function canAdvanceError: Integer; dispid 12; + function canRetreatError: Integer; dispid 13; + function getErrorLine: Integer; dispid 14; + function getErrorChar: Integer; dispid 15; + function getErrorCode: Integer; dispid 16; + function getErrorMsg: WideString; dispid 17; + function getErrorUrl: WideString; dispid 18; + function getAlwaysShowLockState: Integer; dispid 23; + function getDetailsPaneOpen: Integer; dispid 19; + procedure setDetailsPaneOpen(fDetailsPaneOpen: Integer); dispid 20; + function getPerErrorDisplay: Integer; dispid 21; + procedure setPerErrorDisplay(fPerErrorDisplay: Integer); dispid 22; + end; + +// *********************************************************************// +// Interface: ISearch +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {BA9239A4-3DD5-11D2-BF8B-00C04FB93661} +// *********************************************************************// + ISearch = interface(IDispatch) + ['{BA9239A4-3DD5-11D2-BF8B-00C04FB93661}'] + function Get_Title: WideString; safecall; + function Get_Id: WideString; safecall; + function Get_URL: WideString; safecall; + property Title: WideString read Get_Title; + property Id: WideString read Get_Id; + property URL: WideString read Get_URL; + end; + +// *********************************************************************// +// DispIntf: ISearchDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {BA9239A4-3DD5-11D2-BF8B-00C04FB93661} +// *********************************************************************// + ISearchDisp = dispinterface + ['{BA9239A4-3DD5-11D2-BF8B-00C04FB93661}'] + property Title: WideString readonly dispid 1610743808; + property Id: WideString readonly dispid 1610743809; + property URL: WideString readonly dispid 1610743810; + end; + +// *********************************************************************// +// Interface: ISearches +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {47C922A2-3DD5-11D2-BF8B-00C04FB93661} +// *********************************************************************// + ISearches = interface(IDispatch) + ['{47C922A2-3DD5-11D2-BF8B-00C04FB93661}'] + function Get_Count: Integer; safecall; + function Get_Default: WideString; safecall; + function Item(index: OleVariant): ISearch; safecall; + function _NewEnum: IUnknown; safecall; + property Count: Integer read Get_Count; + property Default: WideString read Get_Default; + end; + +// *********************************************************************// +// DispIntf: ISearchesDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {47C922A2-3DD5-11D2-BF8B-00C04FB93661} +// *********************************************************************// + ISearchesDisp = dispinterface + ['{47C922A2-3DD5-11D2-BF8B-00C04FB93661}'] + property Count: Integer readonly dispid 1610743808; + property Default: WideString readonly dispid 1610743809; + function Item(index: OleVariant): ISearch; dispid 1610743810; + function _NewEnum: IUnknown; dispid -4; + end; + +// *********************************************************************// +// Interface: ISearchAssistantOC +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {72423E8F-8011-11D2-BE79-00A0C9A83DA1} +// *********************************************************************// + ISearchAssistantOC = interface(IDispatch) + ['{72423E8F-8011-11D2-BE79-00A0C9A83DA1}'] + procedure AddNextMenuItem(const bstrText: WideString; idItem: Integer); safecall; + procedure SetDefaultSearchUrl(const bstrUrl: WideString); safecall; + procedure NavigateToDefaultSearch; safecall; + function IsRestricted(const bstrGuid: WideString): WordBool; safecall; + function Get_ShellFeaturesEnabled: WordBool; safecall; + function Get_SearchAssistantDefault: WordBool; safecall; + function Get_Searches: ISearches; safecall; + function Get_InWebFolder: WordBool; safecall; + procedure PutProperty(bPerLocale: WordBool; const bstrName: WideString; + const bstrValue: WideString); safecall; + function GetProperty(bPerLocale: WordBool; const bstrName: WideString): WideString; safecall; + procedure Set_EventHandled(Param1: WordBool); safecall; + procedure ResetNextMenu; safecall; + procedure FindOnWeb; safecall; + procedure FindFilesOrFolders; safecall; + procedure FindComputer; safecall; + procedure FindPrinter; safecall; + procedure FindPeople; safecall; + function GetSearchAssistantURL(bSubstitute: WordBool; bCustomize: WordBool): WideString; safecall; + procedure NotifySearchSettingsChanged; safecall; + procedure Set_ASProvider(const pProvider: WideString); safecall; + function Get_ASProvider: WideString; safecall; + procedure Set_ASSetting(pSetting: SYSINT); safecall; + function Get_ASSetting: SYSINT; safecall; + procedure NETDetectNextNavigate; safecall; + procedure PutFindText(const FindText: WideString); safecall; + function Get_Version: SYSINT; safecall; + function EncodeString(const bstrValue: WideString; const bstrCharSet: WideString; + bUseUTF8: WordBool): WideString; safecall; + property ShellFeaturesEnabled: WordBool read Get_ShellFeaturesEnabled; + property SearchAssistantDefault: WordBool read Get_SearchAssistantDefault; + property Searches: ISearches read Get_Searches; + property InWebFolder: WordBool read Get_InWebFolder; + property EventHandled: WordBool write Set_EventHandled; + property ASProvider: WideString read Get_ASProvider write Set_ASProvider; + property ASSetting: SYSINT read Get_ASSetting write Set_ASSetting; + property Version: SYSINT read Get_Version; + end; + +// *********************************************************************// +// DispIntf: ISearchAssistantOCDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {72423E8F-8011-11D2-BE79-00A0C9A83DA1} +// *********************************************************************// + ISearchAssistantOCDisp = dispinterface + ['{72423E8F-8011-11D2-BE79-00A0C9A83DA1}'] + procedure AddNextMenuItem(const bstrText: WideString; idItem: Integer); dispid 1; + procedure SetDefaultSearchUrl(const bstrUrl: WideString); dispid 2; + procedure NavigateToDefaultSearch; dispid 3; + function IsRestricted(const bstrGuid: WideString): WordBool; dispid 4; + property ShellFeaturesEnabled: WordBool readonly dispid 5; + property SearchAssistantDefault: WordBool readonly dispid 6; + property Searches: ISearches readonly dispid 7; + property InWebFolder: WordBool readonly dispid 8; + procedure PutProperty(bPerLocale: WordBool; const bstrName: WideString; + const bstrValue: WideString); dispid 9; + function GetProperty(bPerLocale: WordBool; const bstrName: WideString): WideString; dispid 10; + property EventHandled: WordBool writeonly dispid 11; + procedure ResetNextMenu; dispid 12; + procedure FindOnWeb; dispid 13; + procedure FindFilesOrFolders; dispid 14; + procedure FindComputer; dispid 15; + procedure FindPrinter; dispid 16; + procedure FindPeople; dispid 17; + function GetSearchAssistantURL(bSubstitute: WordBool; bCustomize: WordBool): WideString; dispid 18; + procedure NotifySearchSettingsChanged; dispid 19; + property ASProvider: WideString dispid 20; + property ASSetting: SYSINT dispid 21; + procedure NETDetectNextNavigate; dispid 22; + procedure PutFindText(const FindText: WideString); dispid 23; + property Version: SYSINT readonly dispid 24; + function EncodeString(const bstrValue: WideString; const bstrCharSet: WideString; + bUseUTF8: WordBool): WideString; dispid 25; + end; + +// *********************************************************************// +// Interface: ISearchAssistantOC2 +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {72423E8F-8011-11D2-BE79-00A0C9A83DA2} +// *********************************************************************// + ISearchAssistantOC2 = interface(ISearchAssistantOC) + ['{72423E8F-8011-11D2-BE79-00A0C9A83DA2}'] + function Get_ShowFindPrinter: WordBool; safecall; + property ShowFindPrinter: WordBool read Get_ShowFindPrinter; + end; + +// *********************************************************************// +// DispIntf: ISearchAssistantOC2Disp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {72423E8F-8011-11D2-BE79-00A0C9A83DA2} +// *********************************************************************// + ISearchAssistantOC2Disp = dispinterface + ['{72423E8F-8011-11D2-BE79-00A0C9A83DA2}'] + property ShowFindPrinter: WordBool readonly dispid 26; + procedure AddNextMenuItem(const bstrText: WideString; idItem: Integer); dispid 1; + procedure SetDefaultSearchUrl(const bstrUrl: WideString); dispid 2; + procedure NavigateToDefaultSearch; dispid 3; + function IsRestricted(const bstrGuid: WideString): WordBool; dispid 4; + property ShellFeaturesEnabled: WordBool readonly dispid 5; + property SearchAssistantDefault: WordBool readonly dispid 6; + property Searches: ISearches readonly dispid 7; + property InWebFolder: WordBool readonly dispid 8; + procedure PutProperty(bPerLocale: WordBool; const bstrName: WideString; + const bstrValue: WideString); dispid 9; + function GetProperty(bPerLocale: WordBool; const bstrName: WideString): WideString; dispid 10; + property EventHandled: WordBool writeonly dispid 11; + procedure ResetNextMenu; dispid 12; + procedure FindOnWeb; dispid 13; + procedure FindFilesOrFolders; dispid 14; + procedure FindComputer; dispid 15; + procedure FindPrinter; dispid 16; + procedure FindPeople; dispid 17; + function GetSearchAssistantURL(bSubstitute: WordBool; bCustomize: WordBool): WideString; dispid 18; + procedure NotifySearchSettingsChanged; dispid 19; + property ASProvider: WideString dispid 20; + property ASSetting: SYSINT dispid 21; + procedure NETDetectNextNavigate; dispid 22; + procedure PutFindText(const FindText: WideString); dispid 23; + property Version: SYSINT readonly dispid 24; + function EncodeString(const bstrValue: WideString; const bstrCharSet: WideString; + bUseUTF8: WordBool): WideString; dispid 25; + end; + +// *********************************************************************// +// DispIntf: _SearchAssistantEvents +// Flags: (4112) Hidden Dispatchable +// GUID: {1611FDDA-445B-11D2-85DE-00C04FA35C89} +// *********************************************************************// + _SearchAssistantEvents = dispinterface + ['{1611FDDA-445B-11D2-85DE-00C04FA35C89}'] + procedure OnNextMenuSelect(idItem: Integer); dispid 1; + procedure OnNewSearch; dispid 2; + end; + + +// *********************************************************************// +// OLE Control Proxy class declaration +// Control Name : TWebBrowser_V1 +// Help String : WebBrowser Control +// Default Interface: IWebBrowser +// Def. Intf. DISP? : No +// Event Interface: DWebBrowserEvents +// TypeFlags : (34) CanCreate Control +// *********************************************************************// + TWebBrowser_V1BeforeNavigate = procedure(Sender: TObject; const URL: WideString; Flags: Integer; + const TargetFrameName: WideString; + var PostData: OleVariant; + const Headers: WideString; + var Cancel: WordBool) of object; + TWebBrowser_V1NavigateComplete = procedure(Sender: TObject; const URL: WideString) of object; + TWebBrowser_V1StatusTextChange = procedure(Sender: TObject; const Text: WideString) of object; + TWebBrowser_V1ProgressChange = procedure(Sender: TObject; Progress: Integer; ProgressMax: Integer) of object; + TWebBrowser_V1CommandStateChange = procedure(Sender: TObject; Command: Integer; Enable: WordBool) of object; + TWebBrowser_V1NewWindow = procedure(Sender: TObject; const URL: WideString; Flags: Integer; + const TargetFrameName: WideString; + var PostData: OleVariant; + const Headers: WideString; + var Processed: WordBool) of object; + TWebBrowser_V1TitleChange = procedure(Sender: TObject; const Text: WideString) of object; + TWebBrowser_V1FrameBeforeNavigate = procedure(Sender: TObject; const URL: WideString; + Flags: Integer; + const TargetFrameName: WideString; + var PostData: OleVariant; + const Headers: WideString; + var Cancel: WordBool) of object; + TWebBrowser_V1FrameNavigateComplete = procedure(Sender: TObject; const URL: WideString) of object; + TWebBrowser_V1FrameNewWindow = procedure(Sender: TObject; const URL: WideString; Flags: Integer; + const TargetFrameName: WideString; + var PostData: OleVariant; + const Headers: WideString; + var Processed: WordBool) of object; + TWebBrowser_V1Quit = procedure(Sender: TObject; var Cancel: WordBool) of object; + TWebBrowser_V1PropertyChange = procedure(Sender: TObject; const Property_: WideString) of object; + + TWebBrowser_V1 = class(TOleControl) + private + FOnBeforeNavigate: TWebBrowser_V1BeforeNavigate; + FOnNavigateComplete: TWebBrowser_V1NavigateComplete; + FOnStatusTextChange: TWebBrowser_V1StatusTextChange; + FOnProgressChange: TWebBrowser_V1ProgressChange; + FOnDownloadComplete: TNotifyEvent; + FOnCommandStateChange: TWebBrowser_V1CommandStateChange; + FOnDownloadBegin: TNotifyEvent; + FOnNewWindow: TWebBrowser_V1NewWindow; + FOnTitleChange: TWebBrowser_V1TitleChange; + FOnFrameBeforeNavigate: TWebBrowser_V1FrameBeforeNavigate; + FOnFrameNavigateComplete: TWebBrowser_V1FrameNavigateComplete; + FOnFrameNewWindow: TWebBrowser_V1FrameNewWindow; + FOnQuit: TWebBrowser_V1Quit; + FOnWindowMove: TNotifyEvent; + FOnWindowResize: TNotifyEvent; + FOnWindowActivate: TNotifyEvent; + FOnPropertyChange: TWebBrowser_V1PropertyChange; + FIntf: IWebBrowser; + function GetControlInterface: IWebBrowser; + protected + procedure CreateControl; + procedure InitControlData; override; + function Get_Application: IDispatch; + function Get_Parent: IDispatch; + function Get_Container: IDispatch; + function Get_Document: IDispatch; + public + procedure GoBack; + procedure GoForward; + procedure GoHome; + procedure GoSearch; + procedure Navigate(const URL: WideString); overload; + procedure Navigate(const URL: WideString; var Flags: OleVariant); overload; + procedure Navigate(const URL: WideString; var Flags: OleVariant; var TargetFrameName: OleVariant); overload; + procedure Navigate(const URL: WideString; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant); overload; + procedure Navigate(const URL: WideString; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant; + var Headers: OleVariant); overload; + procedure Refresh; + procedure Refresh2; overload; + procedure Refresh2(var Level: OleVariant); overload; + procedure Stop; + property ControlInterface: IWebBrowser read GetControlInterface; + property DefaultInterface: IWebBrowser read GetControlInterface; + property Application: IDispatch index 200 read GetIDispatchProp; + property Parent: IDispatch index 201 read GetIDispatchProp; + property Container: IDispatch index 202 read GetIDispatchProp; + property Document: IDispatch index 203 read GetIDispatchProp; + property TopLevelContainer: WordBool index 204 read GetWordBoolProp; + property Type_: WideString index 205 read GetWideStringProp; + property LocationName: WideString index 210 read GetWideStringProp; + property LocationURL: WideString index 211 read GetWideStringProp; + property Busy: WordBool index 212 read GetWordBoolProp; + published + property TabStop; + property Align; + property DragCursor; + property DragMode; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property TabOrder; + property Visible; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnStartDrag; + property OnBeforeNavigate: TWebBrowser_V1BeforeNavigate read FOnBeforeNavigate write FOnBeforeNavigate; + property OnNavigateComplete: TWebBrowser_V1NavigateComplete read FOnNavigateComplete write FOnNavigateComplete; + property OnStatusTextChange: TWebBrowser_V1StatusTextChange read FOnStatusTextChange write FOnStatusTextChange; + property OnProgressChange: TWebBrowser_V1ProgressChange read FOnProgressChange write FOnProgressChange; + property OnDownloadComplete: TNotifyEvent read FOnDownloadComplete write FOnDownloadComplete; + property OnCommandStateChange: TWebBrowser_V1CommandStateChange read FOnCommandStateChange write FOnCommandStateChange; + property OnDownloadBegin: TNotifyEvent read FOnDownloadBegin write FOnDownloadBegin; + property OnNewWindow: TWebBrowser_V1NewWindow read FOnNewWindow write FOnNewWindow; + property OnTitleChange: TWebBrowser_V1TitleChange read FOnTitleChange write FOnTitleChange; + property OnFrameBeforeNavigate: TWebBrowser_V1FrameBeforeNavigate read FOnFrameBeforeNavigate write FOnFrameBeforeNavigate; + property OnFrameNavigateComplete: TWebBrowser_V1FrameNavigateComplete read FOnFrameNavigateComplete write FOnFrameNavigateComplete; + property OnFrameNewWindow: TWebBrowser_V1FrameNewWindow read FOnFrameNewWindow write FOnFrameNewWindow; + property OnQuit: TWebBrowser_V1Quit read FOnQuit write FOnQuit; + property OnWindowMove: TNotifyEvent read FOnWindowMove write FOnWindowMove; + property OnWindowResize: TNotifyEvent read FOnWindowResize write FOnWindowResize; + property OnWindowActivate: TNotifyEvent read FOnWindowActivate write FOnWindowActivate; + property OnPropertyChange: TWebBrowser_V1PropertyChange read FOnPropertyChange write FOnPropertyChange; + end; + + +// *********************************************************************// +// OLE Control Proxy class declaration +// Control Name : TWebBrowser +// Help String : WebBrowser Control +// Default Interface: IWebBrowser2 +// Def. Intf. DISP? : No +// Event Interface: DWebBrowserEvents2 +// TypeFlags : (34) CanCreate Control +// *********************************************************************// + TWebBrowserStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object; + TWebBrowserProgressChange = procedure(Sender: TObject; Progress: Integer; ProgressMax: Integer) of object; + TWebBrowserCommandStateChange = procedure(Sender: TObject; Command: Integer; Enable: WordBool) of object; + TWebBrowserTitleChange = procedure(Sender: TObject; const Text: WideString) of object; + TWebBrowserPropertyChange = procedure(Sender: TObject; const szProperty: WideString) of object; + TWebBrowserBeforeNavigate2 = procedure(Sender: TObject; const pDisp: IDispatch; + var URL: OleVariant; + var Flags: OleVariant; + var TargetFrameName: OleVariant; + var PostData: OleVariant; + var Headers: OleVariant; + var Cancel: WordBool) of object; + TWebBrowserNewWindow2 = procedure(Sender: TObject; var ppDisp: IDispatch; var Cancel: WordBool) of object; + TWebBrowserNavigateComplete2 = procedure(Sender: TObject; const pDisp: IDispatch; + var URL: OleVariant) of object; + TWebBrowserDocumentComplete = procedure(Sender: TObject; const pDisp: IDispatch; + var URL: OleVariant) of object; + TWebBrowserOnVisible = procedure(Sender: TObject; Visible: WordBool) of object; + TWebBrowserOnToolBar = procedure(Sender: TObject; ToolBar: WordBool) of object; + TWebBrowserOnMenuBar = procedure(Sender: TObject; MenuBar: WordBool) of object; + TWebBrowserOnStatusBar = procedure(Sender: TObject; StatusBar: WordBool) of object; + TWebBrowserOnFullScreen = procedure(Sender: TObject; FullScreen: WordBool) of object; + TWebBrowserOnTheaterMode = procedure(Sender: TObject; TheaterMode: WordBool) of object; + TWebBrowserWindowSetResizable = procedure(Sender: TObject; Resizable: WordBool) of object; + TWebBrowserWindowSetLeft = procedure(Sender: TObject; Left: Integer) of object; + TWebBrowserWindowSetTop = procedure(Sender: TObject; Top: Integer) of object; + TWebBrowserWindowSetWidth = procedure(Sender: TObject; Width: Integer) of object; + TWebBrowserWindowSetHeight = procedure(Sender: TObject; Height: Integer) of object; + TWebBrowserWindowClosing = procedure(Sender: TObject; IsChildWindow: WordBool; + var Cancel: WordBool) of object; + TWebBrowserClientToHostWindow = procedure(Sender: TObject; var CX: Integer; var CY: Integer) of object; + TWebBrowserSetSecureLockIcon = procedure(Sender: TObject; SecureLockIcon: Integer) of object; + TWebBrowserFileDownload = procedure(Sender: TObject; var Cancel: WordBool) of object; + + TWebBrowser = class(TOleControl) + private + FOnStatusTextChange: TWebBrowserStatusTextChange; + FOnProgressChange: TWebBrowserProgressChange; + FOnCommandStateChange: TWebBrowserCommandStateChange; + FOnDownloadBegin: TNotifyEvent; + FOnDownloadComplete: TNotifyEvent; + FOnTitleChange: TWebBrowserTitleChange; + FOnPropertyChange: TWebBrowserPropertyChange; + FOnBeforeNavigate2: TWebBrowserBeforeNavigate2; + FOnNewWindow2: TWebBrowserNewWindow2; + FOnNavigateComplete2: TWebBrowserNavigateComplete2; + FOnDocumentComplete: TWebBrowserDocumentComplete; + FOnQuit: TNotifyEvent; + FOnVisible: TWebBrowserOnVisible; + FOnToolBar: TWebBrowserOnToolBar; + FOnMenuBar: TWebBrowserOnMenuBar; + FOnStatusBar: TWebBrowserOnStatusBar; + FOnFullScreen: TWebBrowserOnFullScreen; + FOnTheaterMode: TWebBrowserOnTheaterMode; + FOnWindowSetResizable: TWebBrowserWindowSetResizable; + FOnWindowSetLeft: TWebBrowserWindowSetLeft; + FOnWindowSetTop: TWebBrowserWindowSetTop; + FOnWindowSetWidth: TWebBrowserWindowSetWidth; + FOnWindowSetHeight: TWebBrowserWindowSetHeight; + FOnWindowClosing: TWebBrowserWindowClosing; + FOnClientToHostWindow: TWebBrowserClientToHostWindow; + FOnSetSecureLockIcon: TWebBrowserSetSecureLockIcon; + FOnFileDownload: TWebBrowserFileDownload; + FIntf: IWebBrowser2; + function GetControlInterface: IWebBrowser2; + protected + procedure CreateControl; + procedure InitControlData; override; + function Get_Application: IDispatch; + function Get_Parent: IDispatch; + function Get_Container: IDispatch; + function Get_Document: IDispatch; + public + procedure GoBack; + procedure GoForward; + procedure GoHome; + procedure GoSearch; + procedure Navigate(const URL: WideString); overload; + procedure Navigate(const URL: WideString; var Flags: OleVariant); overload; + procedure Navigate(const URL: WideString; var Flags: OleVariant; var TargetFrameName: OleVariant); overload; + procedure Navigate(const URL: WideString; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant); overload; + procedure Navigate(const URL: WideString; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant; + var Headers: OleVariant); overload; + procedure Refresh; + procedure Refresh2; overload; + procedure Refresh2(var Level: OleVariant); overload; + procedure Stop; + procedure Quit; + procedure ClientToWindow(var pcx: SYSINT; var pcy: SYSINT); + procedure PutProperty(const Property_: WideString; vtValue: OleVariant); + function GetProperty(const Property_: WideString): OleVariant; + procedure Navigate2(var URL: OleVariant); overload; + procedure Navigate2(var URL: OleVariant; var Flags: OleVariant); overload; + procedure Navigate2(var URL: OleVariant; var Flags: OleVariant; var TargetFrameName: OleVariant); overload; + procedure Navigate2(var URL: OleVariant; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant); overload; + procedure Navigate2(var URL: OleVariant; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant; + var Headers: OleVariant); overload; + function QueryStatusWB(cmdID: OLECMDID): OLECMDF; + procedure ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT); overload; + procedure ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT; var pvaIn: OleVariant); overload; + procedure ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT; var pvaIn: OleVariant; + var pvaOut: OleVariant); overload; + procedure ShowBrowserBar(var pvaClsid: OleVariant); overload; + procedure ShowBrowserBar(var pvaClsid: OleVariant; var pvarShow: OleVariant); overload; + procedure ShowBrowserBar(var pvaClsid: OleVariant; var pvarShow: OleVariant; + var pvarSize: OleVariant); overload; + property ControlInterface: IWebBrowser2 read GetControlInterface; + property DefaultInterface: IWebBrowser2 read GetControlInterface; + property Application: IDispatch index 200 read GetIDispatchProp; + property Parent: IDispatch index 201 read GetIDispatchProp; + property Container: IDispatch index 202 read GetIDispatchProp; + property Document: IDispatch index 203 read GetIDispatchProp; + property TopLevelContainer: WordBool index 204 read GetWordBoolProp; + property Type_: WideString index 205 read GetWideStringProp; + property LocationName: WideString index 210 read GetWideStringProp; + property LocationURL: WideString index 211 read GetWideStringProp; + property Busy: WordBool index 212 read GetWordBoolProp; + property Name: WideString index 0 read GetWideStringProp; + property HWND: Integer index -515 read GetIntegerProp; + property FullName: WideString index 400 read GetWideStringProp; + property Path: WideString index 401 read GetWideStringProp; + property ReadyState: TOleEnum index -525 read GetTOleEnumProp; + published + property TabStop; + property Align; + property DragCursor; + property DragMode; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property TabOrder; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnStartDrag; + property Visible: WordBool index 402 read GetWordBoolProp write SetWordBoolProp stored False; + property StatusBar: WordBool index 403 read GetWordBoolProp write SetWordBoolProp stored False; + property StatusText: WideString index 404 read GetWideStringProp write SetWideStringProp stored False; + property ToolBar: Integer index 405 read GetIntegerProp write SetIntegerProp stored False; + property MenuBar: WordBool index 406 read GetWordBoolProp write SetWordBoolProp stored False; + property FullScreen: WordBool index 407 read GetWordBoolProp write SetWordBoolProp stored False; + property Offline: WordBool index 550 read GetWordBoolProp write SetWordBoolProp stored False; + property Silent: WordBool index 551 read GetWordBoolProp write SetWordBoolProp stored False; + property RegisterAsBrowser: WordBool index 552 read GetWordBoolProp write SetWordBoolProp stored False; + property RegisterAsDropTarget: WordBool index 553 read GetWordBoolProp write SetWordBoolProp stored False; + property TheaterMode: WordBool index 554 read GetWordBoolProp write SetWordBoolProp stored False; + property AddressBar: WordBool index 555 read GetWordBoolProp write SetWordBoolProp stored False; + property Resizable: WordBool index 556 read GetWordBoolProp write SetWordBoolProp stored False; + property OnStatusTextChange: TWebBrowserStatusTextChange read FOnStatusTextChange write FOnStatusTextChange; + property OnProgressChange: TWebBrowserProgressChange read FOnProgressChange write FOnProgressChange; + property OnCommandStateChange: TWebBrowserCommandStateChange read FOnCommandStateChange write FOnCommandStateChange; + property OnDownloadBegin: TNotifyEvent read FOnDownloadBegin write FOnDownloadBegin; + property OnDownloadComplete: TNotifyEvent read FOnDownloadComplete write FOnDownloadComplete; + property OnTitleChange: TWebBrowserTitleChange read FOnTitleChange write FOnTitleChange; + property OnPropertyChange: TWebBrowserPropertyChange read FOnPropertyChange write FOnPropertyChange; + property OnBeforeNavigate2: TWebBrowserBeforeNavigate2 read FOnBeforeNavigate2 write FOnBeforeNavigate2; + property OnNewWindow2: TWebBrowserNewWindow2 read FOnNewWindow2 write FOnNewWindow2; + property OnNavigateComplete2: TWebBrowserNavigateComplete2 read FOnNavigateComplete2 write FOnNavigateComplete2; + property OnDocumentComplete: TWebBrowserDocumentComplete read FOnDocumentComplete write FOnDocumentComplete; + property OnQuit: TNotifyEvent read FOnQuit write FOnQuit; + property OnVisible: TWebBrowserOnVisible read FOnVisible write FOnVisible; + property OnToolBar: TWebBrowserOnToolBar read FOnToolBar write FOnToolBar; + property OnMenuBar: TWebBrowserOnMenuBar read FOnMenuBar write FOnMenuBar; + property OnStatusBar: TWebBrowserOnStatusBar read FOnStatusBar write FOnStatusBar; + property OnFullScreen: TWebBrowserOnFullScreen read FOnFullScreen write FOnFullScreen; + property OnTheaterMode: TWebBrowserOnTheaterMode read FOnTheaterMode write FOnTheaterMode; + property OnWindowSetResizable: TWebBrowserWindowSetResizable read FOnWindowSetResizable write FOnWindowSetResizable; + property OnWindowSetLeft: TWebBrowserWindowSetLeft read FOnWindowSetLeft write FOnWindowSetLeft; + property OnWindowSetTop: TWebBrowserWindowSetTop read FOnWindowSetTop write FOnWindowSetTop; + property OnWindowSetWidth: TWebBrowserWindowSetWidth read FOnWindowSetWidth write FOnWindowSetWidth; + property OnWindowSetHeight: TWebBrowserWindowSetHeight read FOnWindowSetHeight write FOnWindowSetHeight; + property OnWindowClosing: TWebBrowserWindowClosing read FOnWindowClosing write FOnWindowClosing; + property OnClientToHostWindow: TWebBrowserClientToHostWindow read FOnClientToHostWindow write FOnClientToHostWindow; + property OnSetSecureLockIcon: TWebBrowserSetSecureLockIcon read FOnSetSecureLockIcon write FOnSetSecureLockIcon; + property OnFileDownload: TWebBrowserFileDownload read FOnFileDownload write FOnFileDownload; + end; + +// *********************************************************************// +// The Class CoInternetExplorer provides a Create and CreateRemote method to +// create instances of the default interface IWebBrowser2 exposed by +// the CoClass InternetExplorer. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoInternetExplorer = class + class function Create: IWebBrowser2; + class function CreateRemote(const MachineName: string): IWebBrowser2; + end; + +// *********************************************************************// +// The Class CoShellBrowserWindow provides a Create and CreateRemote method to +// create instances of the default interface IWebBrowser2 exposed by +// the CoClass ShellBrowserWindow. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoShellBrowserWindow = class + class function Create: IWebBrowser2; + class function CreateRemote(const MachineName: string): IWebBrowser2; + end; + +// *********************************************************************// +// The Class CoShellWindows provides a Create and CreateRemote method to +// create instances of the default interface IShellWindows exposed by +// the CoClass ShellWindows. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoShellWindows = class + class function Create: IShellWindows; + class function CreateRemote(const MachineName: string): IShellWindows; + end; + +// *********************************************************************// +// The Class CoShellUIHelper provides a Create and CreateRemote method to +// create instances of the default interface IShellUIHelper exposed by +// the CoClass ShellUIHelper. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoShellUIHelper = class + class function Create: IShellUIHelper; + class function CreateRemote(const MachineName: string): IShellUIHelper; + end; + +// *********************************************************************// +// The Class CoShellNameSpace provides a Create and CreateRemote method to +// create instances of the default interface IShellNameSpace exposed by +// the CoClass ShellNameSpace. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoShellNameSpace = class + class function Create: IShellNameSpace; + class function CreateRemote(const MachineName: string): IShellNameSpace; + end; + +// *********************************************************************// +// The Class CoCScriptErrorList provides a Create and CreateRemote method to +// create instances of the default interface IScriptErrorList exposed by +// the CoClass CScriptErrorList. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoCScriptErrorList = class + class function Create: IScriptErrorList; + class function CreateRemote(const MachineName: string): IScriptErrorList; + end; + +// *********************************************************************// +// The Class CoSearchAssistantOC provides a Create and CreateRemote method to +// create instances of the default interface ISearchAssistantOC2 exposed by +// the CoClass SearchAssistantOC. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoSearchAssistantOC = class + class function Create: ISearchAssistantOC2; + class function CreateRemote(const MachineName: string): ISearchAssistantOC2; + end; + +procedure Register; + +resourcestring + dtlServerPage = 'ActiveX'; + +implementation + +uses ComObj; + +procedure TWebBrowser_V1.InitControlData; +const + CEventDispIDs: array [0..16] of DWORD = ( + $00000064, $00000065, $00000066, $0000006C, $00000068, $00000069, + $0000006A, $0000006B, $00000071, $000000C8, $000000C9, $000000CC, + $00000067, $0000006D, $0000006E, $0000006F, $00000070); + CControlData: TControlData2 = ( + ClassID: '{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B}'; + EventIID: '{EAB22AC2-30C1-11CF-A7EB-0000C05BAE0B}'; + EventCount: 17; + EventDispIDs: @CEventDispIDs; + LicenseKey: nil (*HR:$80040154*); + Flags: $00000000; + Version: 401); +begin + ControlData := @CControlData; + TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnBeforeNavigate) - Cardinal(Self); +end; + +procedure TWebBrowser_V1.CreateControl; + + procedure DoCreate; + begin + FIntf := IUnknown(OleObject) as IWebBrowser; + end; + +begin + if FIntf = nil then DoCreate; +end; + +function TWebBrowser_V1.GetControlInterface: IWebBrowser; +begin + CreateControl; + Result := FIntf; +end; + +function TWebBrowser_V1.Get_Application: IDispatch; +begin + Result := DefaultInterface.Application; +end; + +function TWebBrowser_V1.Get_Parent: IDispatch; +begin + Result := DefaultInterface.Parent; +end; + +function TWebBrowser_V1.Get_Container: IDispatch; +begin + Result := DefaultInterface.Container; +end; + +function TWebBrowser_V1.Get_Document: IDispatch; +begin + Result := DefaultInterface.Document; +end; + +procedure TWebBrowser_V1.GoBack; +begin + DefaultInterface.GoBack; +end; + +procedure TWebBrowser_V1.GoForward; +begin + DefaultInterface.GoForward; +end; + +procedure TWebBrowser_V1.GoHome; +begin + DefaultInterface.GoHome; +end; + +procedure TWebBrowser_V1.GoSearch; +begin + DefaultInterface.GoSearch; +end; + +procedure TWebBrowser_V1.Navigate(const URL: WideString); +begin + DefaultInterface.Navigate(URL, EmptyParam, EmptyParam, EmptyParam, EmptyParam); +end; + +procedure TWebBrowser_V1.Navigate(const URL: WideString; var Flags: OleVariant); +begin + DefaultInterface.Navigate(URL, Flags, EmptyParam, EmptyParam, EmptyParam); +end; + +procedure TWebBrowser_V1.Navigate(const URL: WideString; var Flags: OleVariant; + var TargetFrameName: OleVariant); +begin + DefaultInterface.Navigate(URL, Flags, TargetFrameName, EmptyParam, EmptyParam); +end; + +procedure TWebBrowser_V1.Navigate(const URL: WideString; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant); +begin + DefaultInterface.Navigate(URL, Flags, TargetFrameName, PostData, EmptyParam); +end; + +procedure TWebBrowser_V1.Navigate(const URL: WideString; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant; + var Headers: OleVariant); +begin + DefaultInterface.Navigate(URL, Flags, TargetFrameName, PostData, Headers); +end; + +procedure TWebBrowser_V1.Refresh; +begin + DefaultInterface.Refresh; +end; + +procedure TWebBrowser_V1.Refresh2; +begin + DefaultInterface.Refresh2(EmptyParam); +end; + +procedure TWebBrowser_V1.Refresh2(var Level: OleVariant); +begin + DefaultInterface.Refresh2(Level); +end; + +procedure TWebBrowser_V1.Stop; +begin + DefaultInterface.Stop; +end; + +procedure TWebBrowser.InitControlData; +const + CEventDispIDs: array [0..26] of DWORD = ( + $00000066, $0000006C, $00000069, $0000006A, $00000068, $00000071, + $00000070, $000000FA, $000000FB, $000000FC, $00000103, $000000FD, + $000000FE, $000000FF, $00000100, $00000101, $00000102, $00000104, + $00000106, $00000108, $00000109, $0000010A, $0000010B, $00000107, + $0000010C, $0000010D, $0000010E); + CControlData: TControlData2 = ( + ClassID: '{8856F961-340A-11D0-A96B-00C04FD705A2}'; + EventIID: '{34A715A0-6587-11D0-924A-0020AFC7AC4D}'; + EventCount: 27; + EventDispIDs: @CEventDispIDs; + LicenseKey: nil (*HR:$80040154*); + Flags: $00000000; + Version: 401); +begin + ControlData := @CControlData; + TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnStatusTextChange) - Cardinal(Self); +end; + +procedure TWebBrowser.CreateControl; + + procedure DoCreate; + begin + FIntf := IUnknown(OleObject) as IWebBrowser2; + end; + +begin + if FIntf = nil then DoCreate; +end; + +function TWebBrowser.GetControlInterface: IWebBrowser2; +begin + CreateControl; + Result := FIntf; +end; + +function TWebBrowser.Get_Application: IDispatch; +begin + Result := DefaultInterface.Application; +end; + +function TWebBrowser.Get_Parent: IDispatch; +begin + Result := DefaultInterface.Parent; +end; + +function TWebBrowser.Get_Container: IDispatch; +begin + Result := DefaultInterface.Container; +end; + +function TWebBrowser.Get_Document: IDispatch; +begin + Result := DefaultInterface.Document; +end; + +procedure TWebBrowser.GoBack; +begin + DefaultInterface.GoBack; +end; + +procedure TWebBrowser.GoForward; +begin + DefaultInterface.GoForward; +end; + +procedure TWebBrowser.GoHome; +begin + DefaultInterface.GoHome; +end; + +procedure TWebBrowser.GoSearch; +begin + DefaultInterface.GoSearch; +end; + +procedure TWebBrowser.Navigate(const URL: WideString); +begin + DefaultInterface.Navigate(URL, EmptyParam, EmptyParam, EmptyParam, EmptyParam); +end; + +procedure TWebBrowser.Navigate(const URL: WideString; var Flags: OleVariant); +begin + DefaultInterface.Navigate(URL, Flags, EmptyParam, EmptyParam, EmptyParam); +end; + +procedure TWebBrowser.Navigate(const URL: WideString; var Flags: OleVariant; + var TargetFrameName: OleVariant); +begin + DefaultInterface.Navigate(URL, Flags, TargetFrameName, EmptyParam, EmptyParam); +end; + +procedure TWebBrowser.Navigate(const URL: WideString; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant); +begin + DefaultInterface.Navigate(URL, Flags, TargetFrameName, PostData, EmptyParam); +end; + +procedure TWebBrowser.Navigate(const URL: WideString; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant; + var Headers: OleVariant); +begin + DefaultInterface.Navigate(URL, Flags, TargetFrameName, PostData, Headers); +end; + +procedure TWebBrowser.Refresh; +begin + DefaultInterface.Refresh; +end; + +procedure TWebBrowser.Refresh2; +begin + DefaultInterface.Refresh2(EmptyParam); +end; + +procedure TWebBrowser.Refresh2(var Level: OleVariant); +begin + DefaultInterface.Refresh2(Level); +end; + +procedure TWebBrowser.Stop; +begin + DefaultInterface.Stop; +end; + +procedure TWebBrowser.Quit; +begin + DefaultInterface.Quit; +end; + +procedure TWebBrowser.ClientToWindow(var pcx: SYSINT; var pcy: SYSINT); +begin + DefaultInterface.ClientToWindow(pcx, pcy); +end; + +procedure TWebBrowser.PutProperty(const Property_: WideString; vtValue: OleVariant); +begin + DefaultInterface.PutProperty(Property_, vtValue); +end; + +function TWebBrowser.GetProperty(const Property_: WideString): OleVariant; +begin + Result := DefaultInterface.GetProperty(Property_); +end; + +procedure TWebBrowser.Navigate2(var URL: OleVariant); +begin + DefaultInterface.Navigate2(URL, EmptyParam, EmptyParam, EmptyParam, EmptyParam); +end; + +procedure TWebBrowser.Navigate2(var URL: OleVariant; var Flags: OleVariant); +begin + DefaultInterface.Navigate2(URL, Flags, EmptyParam, EmptyParam, EmptyParam); +end; + +procedure TWebBrowser.Navigate2(var URL: OleVariant; var Flags: OleVariant; + var TargetFrameName: OleVariant); +begin + DefaultInterface.Navigate2(URL, Flags, TargetFrameName, EmptyParam, EmptyParam); +end; + +procedure TWebBrowser.Navigate2(var URL: OleVariant; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant); +begin + DefaultInterface.Navigate2(URL, Flags, TargetFrameName, PostData, EmptyParam); +end; + +procedure TWebBrowser.Navigate2(var URL: OleVariant; var Flags: OleVariant; + var TargetFrameName: OleVariant; var PostData: OleVariant; + var Headers: OleVariant); +begin + DefaultInterface.Navigate2(URL, Flags, TargetFrameName, PostData, Headers); +end; + +function TWebBrowser.QueryStatusWB(cmdID: OLECMDID): OLECMDF; +begin + Result := DefaultInterface.QueryStatusWB(cmdID); +end; + +procedure TWebBrowser.ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT); +begin + DefaultInterface.ExecWB(cmdID, cmdexecopt, EmptyParam, EmptyParam); +end; + +procedure TWebBrowser.ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT; var pvaIn: OleVariant); +begin + DefaultInterface.ExecWB(cmdID, cmdexecopt, pvaIn, EmptyParam); +end; + +procedure TWebBrowser.ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT; var pvaIn: OleVariant; + var pvaOut: OleVariant); +begin + DefaultInterface.ExecWB(cmdID, cmdexecopt, pvaIn, pvaOut); +end; + +procedure TWebBrowser.ShowBrowserBar(var pvaClsid: OleVariant); +begin + DefaultInterface.ShowBrowserBar(pvaClsid, EmptyParam, EmptyParam); +end; + +procedure TWebBrowser.ShowBrowserBar(var pvaClsid: OleVariant; var pvarShow: OleVariant); +begin + DefaultInterface.ShowBrowserBar(pvaClsid, pvarShow, EmptyParam); +end; + +procedure TWebBrowser.ShowBrowserBar(var pvaClsid: OleVariant; var pvarShow: OleVariant; + var pvarSize: OleVariant); +begin + DefaultInterface.ShowBrowserBar(pvaClsid, pvarShow, pvarSize); +end; + +class function CoInternetExplorer.Create: IWebBrowser2; +begin + Result := CreateComObject(CLASS_InternetExplorer) as IWebBrowser2; +end; + +class function CoInternetExplorer.CreateRemote(const MachineName: string): IWebBrowser2; +begin + Result := CreateRemoteComObject(MachineName, CLASS_InternetExplorer) as IWebBrowser2; +end; + +class function CoShellBrowserWindow.Create: IWebBrowser2; +begin + Result := CreateComObject(CLASS_ShellBrowserWindow) as IWebBrowser2; +end; + +class function CoShellBrowserWindow.CreateRemote(const MachineName: string): IWebBrowser2; +begin + Result := CreateRemoteComObject(MachineName, CLASS_ShellBrowserWindow) as IWebBrowser2; +end; + +class function CoShellWindows.Create: IShellWindows; +begin + Result := CreateComObject(CLASS_ShellWindows) as IShellWindows; +end; + +class function CoShellWindows.CreateRemote(const MachineName: string): IShellWindows; +begin + Result := CreateRemoteComObject(MachineName, CLASS_ShellWindows) as IShellWindows; +end; + +class function CoShellUIHelper.Create: IShellUIHelper; +begin + Result := CreateComObject(CLASS_ShellUIHelper) as IShellUIHelper; +end; + +class function CoShellUIHelper.CreateRemote(const MachineName: string): IShellUIHelper; +begin + Result := CreateRemoteComObject(MachineName, CLASS_ShellUIHelper) as IShellUIHelper; +end; + +class function CoShellNameSpace.Create: IShellNameSpace; +begin + Result := CreateComObject(CLASS_ShellNameSpace) as IShellNameSpace; +end; + +class function CoShellNameSpace.CreateRemote(const MachineName: string): IShellNameSpace; +begin + Result := CreateRemoteComObject(MachineName, CLASS_ShellNameSpace) as IShellNameSpace; +end; + +class function CoCScriptErrorList.Create: IScriptErrorList; +begin + Result := CreateComObject(CLASS_CScriptErrorList) as IScriptErrorList; +end; + +class function CoCScriptErrorList.CreateRemote(const MachineName: string): IScriptErrorList; +begin + Result := CreateRemoteComObject(MachineName, CLASS_CScriptErrorList) as IScriptErrorList; +end; + +class function CoSearchAssistantOC.Create: ISearchAssistantOC2; +begin + Result := CreateComObject(CLASS_SearchAssistantOC) as ISearchAssistantOC2; +end; + +class function CoSearchAssistantOC.CreateRemote(const MachineName: string): ISearchAssistantOC2; +begin + Result := CreateRemoteComObject(MachineName, CLASS_SearchAssistantOC) as ISearchAssistantOC2; +end; + +procedure Register; +begin + RegisterComponents('ActiveX',[TWebBrowser_V1, TWebBrowser]); +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/common/ToolsUtils.pas b/official/1.104/examples/windows/delphitools/common/ToolsUtils.pas new file mode 100644 index 0000000..4eac6df --- /dev/null +++ b/official/1.104/examples/windows/delphitools/common/ToolsUtils.pas @@ -0,0 +1,380 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is ToolsUtils.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2008-09-09 21:32:17 +0200 (mar., 09 sept. 2008) $ } +{ } +{**************************************************************************************************} + +unit ToolsUtils; + +{$I JCL.INC} + +interface + +uses + Windows, Classes, SysUtils, ComCtrls, Math, ComObj, ActiveX, Controls, Forms, + ImageHlp, JclFileUtils, JclStrings, JclSysInfo, JclRegistry, JclShell; + +const + PeViewerClassName = 'PeViewer.PeViewerControl'; + +function CreateOrGetOleObject(const ClassName: string): IDispatch; + +function FmtStrToInt(S: string): Integer; + +function GetImageBase(const FileName: TFileName): DWORD; + +function IntToExtended(I: Integer): Extended; + +function InfoTipVersionString(const FileName: TFileName): string; + +function IsPeViewerRegistred: Boolean; + +procedure LVColumnClick(Column: TListColumn); + +procedure LVCompare(ListView: TListView; Item1, Item2: TListItem; var Compare: Integer); + +procedure ListViewFocusFirstItem(ListView: TListView); + +procedure ListViewSelectAll(ListView: TListView; Deselect: Boolean = False); + +procedure ListViewToStrings(ListView: TListView; Strings: TStrings; + SelectedOnly: Boolean = False; Headers: Boolean = True); + +function MessBox(const Text: string; Flags: Word): Integer; + +function MessBoxFmt(const Fmt: string; const Args: array of const; Flags: Word): Integer; + +function SafeSubItemString(Item: TListItem; SubItemIndex: Integer): string; + +procedure SendEmail; + +procedure ShowToolsAboutBox; + +function Win32HelpFileName: TFileName; + +procedure Fix_ListViewBeforeClose(Form: TForm); + +procedure D4FixCoolBarResizePaint(CoolBar: TObject); + +implementation + +uses + About, CommCtrl, JclPeImage, JclWin32; + +resourcestring + RsJCLLink = 'JEDI Code Library;http://delphi-jedi.org/Jedi:CODELIBJCL'; + RsEmailAddress = 'mailto:petr.v@mujmail.cz?subject=[Delphi Tools]'; + +function StrEmpty(const S: string): Boolean; +begin + Result := Length(Trim(S)) = 0; +end; + +function CreateOrGetOleObject(const ClassName: string): IDispatch; +var + ClassID: TCLSID; + Res: HResult; + Unknown: IUnknown; +begin + ClassID := ProgIDToClassID(ClassName); + Res := GetActiveObject(ClassID, nil, Unknown); + if Succeeded(Res) then + OleCheck(Unknown.QueryInterface(IDispatch, Result)) + else + begin + if Res <> MK_E_UNAVAILABLE then OleError(Res); + OleCheck(CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or + CLSCTX_LOCAL_SERVER, IDispatch, Result)); + end; +end; + +function FmtStrToInt(S: string): Integer; +var + I: Integer; +begin + I := 1; + while I <= Length(S) do + if (not CharIsDigit(S[I])) and (S[I] <> '-') then + Delete(S, I, 1) + else + Inc(I); + Result := StrToIntDef(S, 0); +end; + +function GetImageBase(const FileName: TFileName): DWORD; +var + NtHeaders32: TImageNtHeaders32; + NtHeaders64: TImageNtHeaders64; + ImageStream: TMemoryStream; + PETarget: TJclPeTarget; +begin + ImageStream := TMemoryStream.Create; + try + ImageStream.LoadFromFile(FileName); + PETarget := PeMapImgTarget(ImageStream.Memory); + finally + ImageStream.Free; + end; + if (PETarget = taWin32) and PeGetNtHeaders32(FileName, NtHeaders32) then + Result := NtHeaders32.OptionalHeader.ImageBase + else + if (PETarget = taWin64) and PeGetNtHeaders64(FileName, NtHeaders64) then + Result := NtHeaders64.OptionalHeader.ImageBase + else + Result := 0; +end; + +function IntToExtended(I: Integer): Extended; +begin + Result := I; +end; + +function InfoTipVersionString(const FileName: TFileName): string; +begin + Result := ''; + if VersionResourceAvailable(FileName) then + try + with TJclFileVersionInfo.Create(FileName) do + try + if not StrEmpty(FileVersion) then Result := FileVersion; + if not StrEmpty(FileDescription) then + Result := Format('%s'#13#10'%s', [Result, FileDescription]) + finally + Free; + end; + except + end; +end; + +function IsPeViewerRegistred: Boolean; +begin + Result := RegReadStringDef(HKEY_CLASSES_ROOT, PeViewerClassName, '', '') <> ''; +end; + +procedure LVColumnClick(Column: TListColumn); +var + ColIndex: Integer; + ListView: TListView; +begin + ListView := TListColumns(Column.Collection).Owner as TListView; + ColIndex := Column.Index; + with ListView do + begin + if Tag and $FF = ColIndex then + Tag := Tag xor $100 + else + Tag := ColIndex; + AlphaSort; + if Selected <> nil then Selected.MakeVisible(False); + end; +end; + +procedure LVCompare(ListView: TListView; Item1, Item2: TListItem; var Compare: Integer); +var + ColIndex: Integer; +begin + with ListView do + begin + ColIndex := Tag and $FF - 1; + if Columns[ColIndex + 1].Alignment = taLeftJustify then + begin + if ColIndex = -1 then + Compare := AnsiCompareText(Item1.Caption, Item2.Caption) + else + Compare := AnsiCompareText(Item1.SubItems[ColIndex], Item2.SubItems[ColIndex]); + end else + begin + if ColIndex = -1 then + Compare := FmtStrToInt(Item1.Caption) - FmtStrToInt(Item2.Caption) + else + Compare := FmtStrToInt(Item1.SubItems[ColIndex]) - FmtStrToInt(Item2.SubItems[ColIndex]); + end; + if Tag and $100 <> 0 then Compare := -Compare; + end; +end; + +procedure ListViewFocusFirstItem(ListView: TListView); +begin + with ListView do + if Items.Count > 0 then + begin + ItemFocused := Items[0]; + ItemFocused.Selected := True; + ItemFocused.MakeVisible(False); + end; +end; + +procedure ListViewSelectAll(ListView: TListView; Deselect: Boolean); +var + I: Integer; + H: THandle; + Data: Integer; + SaveOnSelectItem: TLVSelectItemEvent; +begin + with ListView do if MultiSelect then + begin + Items.BeginUpdate; + SaveOnSelectItem := OnSelectItem; + Screen.Cursor := crHourGlass; + try + H := Handle; + OnSelectItem := nil; + if Deselect then Data := 0 else Data := LVIS_SELECTED; + for I := 0 to Items.Count - 1 do + ListView_SetItemState(H, I, Data, LVIS_SELECTED); + finally + OnSelectItem := SaveOnSelectItem; + Items.EndUpdate; + Screen.Cursor := crDefault; + end; + end; +end; + +procedure ListViewToStrings(ListView: TListView; Strings: TStrings; + SelectedOnly: Boolean = False; Headers: Boolean = True); +var + R, C: Integer; + ColWidths: array of Word; + S: String; + + procedure AddLine; +begin + Strings.Add(TrimRight(S)); +end; + + function MakeCellStr(const Text: String; Index: Integer): String; +begin + with ListView.Columns[Index] do + if Alignment = taLeftJustify then + Result := StrPadRight(Text, ColWidths[Index] + 1) + else + Result := StrPadLeft(Text, ColWidths[Index]) + ' '; +end; + +begin + SetLength(S, 256); + with ListView do + begin + SetLength(ColWidths, Columns.Count); + if Headers then + for C := 0 to Columns.Count - 1 do + ColWidths[C] := Length(Trim(Columns[C].Caption)); + for R := 0 to Items.Count - 1 do + if not SelectedOnly or Items[R].Selected then + begin + ColWidths[0] := Max(ColWidths[0], Length(Trim(Items[R].Caption))); + for C := 0 to Items[R].SubItems.Count - 1 do + ColWidths[C + 1] := Max(ColWidths[C + 1], Length(Trim(Items[R].SubItems[C]))); + end; + Strings.BeginUpdate; + try + if Headers then + with Columns do + begin + S := ''; + for C := 0 to Count - 1 do + S := S + MakeCellStr(Items[C].Caption, C); + AddLine; + S := ''; + for C := 0 to Count - 1 do + S := S + StringOfChar('-', ColWidths[C]) + ' '; + AddLine; + end; + for R := 0 to Items.Count - 1 do + if not SelectedOnly or Items[R].Selected then + with Items[R] do + begin + S := MakeCellStr(Caption, 0); + for C := 0 to Min(SubItems.Count, Columns.Count - 1) - 1 do + S := S + MakeCellStr(SubItems[C], C + 1); + AddLine; + end; + finally + Strings.EndUpdate; + end; + end; +end; + +function MessBox(const Text: string; Flags: Word): Integer; +begin + with Application do Result := MessageBox(PChar(Text), PChar(Title), Flags); +end; + +function MessBoxFmt(const Fmt: string; const Args: array of const; Flags: Word): Integer; +begin + Result := MessBox(Format(Fmt, Args), Flags); +end; + +function SafeSubItemString(Item: TListItem; SubItemIndex: Integer): string; +begin + if Item.SubItems.Count > SubItemIndex then + Result := Item.SubItems[SubItemIndex] + else + Result := '' +end; + +procedure SendEmail; +begin + ShellExecEx(RsEmailAddress); +end; + +procedure ShowToolsAboutBox; +begin + ShowAbout([RsJCLLink], 18); +end; + +function Win32HelpFileName: TFileName; +begin + Result := RegReadStringDef(HKEY_LOCAL_MACHINE, + 'SOFTWARE\Borland\Borland Shared\MSHelp', 'RootDir', '') + '\Win32.hlp'; + if not FileExists(Result) then Result := ''; +end; + +procedure Fix_ListViewBeforeClose(Form: TForm); +var + I: Integer; +begin + with Form do + for I := 0 to ComponentCount - 1 do + if Components[I] is TListView then + with TListView(Components[I]) do + if OwnerData then Items.Count := 0; +end; + +procedure D4FixCoolBarResizePaint(CoolBar: TObject); +{$IFDEF DELPHI4} +var + R: TRect; +begin + with CoolBar as TCoolBar do + begin + R := ClientRect; + R.Left := R.Right - 8; + InvalidateRect(Handle, @R, True); + end; +end; +{$ELSE} +begin +end; +{$ENDIF} + +end. diff --git a/official/1.104/examples/windows/delphitools/dependencyviewer/DependView.dof b/official/1.104/examples/windows/delphitools/dependencyviewer/DependView.dof new file mode 100644 index 0000000..3b9e1ca --- /dev/null +++ b/official/1.104/examples/windows/delphitools/dependencyviewer/DependView.dof @@ -0,0 +1,134 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=0 +UnsafeCode=0 +UnsafeCast=0 +[Linker] +MapFile=0 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir=..\..\..\..\bin +UnitOutputDir= +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath=..\..\..\..\source\include;..\..\..\..\source\common;..\..\..\..\source\windows;..\..\..\..\source\vcl +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir= +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=0 +MinorVer=5 +Release=4 +Build=9 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1033 +CodePage=1252 +[Version Info Keys] +CompanyName=Petr Vones +FileDescription=Dependency Viewer +FileVersion=0.5.4.9 +InternalName=DEPENDVIEW +LegalCopyright=(c) 2002 Petr Vones +LegalTrademarks= +OriginalFilename=DEPENDVIEW.EXE +ProductName=Dependency Viewer +ProductVersion=0.5.4 diff --git a/official/1.104/examples/windows/delphitools/dependencyviewer/DependView.dpr b/official/1.104/examples/windows/delphitools/dependencyviewer/DependView.dpr new file mode 100644 index 0000000..a4fe8a4 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/dependencyviewer/DependView.dpr @@ -0,0 +1,24 @@ +program DependView; + +{$I jcl.inc} + +uses + Forms, + SysUtils, + D6MdiMsgFix in '..\Common\D6MdiMsgFix.pas', + DependViewMain in 'DependViewMain.pas' {MainForm}, + FileViewer in 'FileViewer.pas' {FileViewerChild}, + ToolsUtils in '..\Common\ToolsUtils.pas', + About in '..\Common\About.pas' {AboutBox}, + FindDlg in '..\Common\FindDlg.pas' {FindTextForm}, + ExceptDlg in '..\..\..\..\experts\debug\dialog\ExceptDlg.pas' {ExceptionDialog}; + +{$R *.RES} +{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.Title := 'Dependency Viewer'; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/official/1.104/examples/windows/delphitools/dependencyviewer/DependView.res b/official/1.104/examples/windows/delphitools/dependencyviewer/DependView.res new file mode 100644 index 0000000000000000000000000000000000000000..e3af7732026673895239e9ef31b2ad54e6db1b08 GIT binary patch literal 1672 zcmd^;!EX{#5XL|1*4o%uVtRKE9;%0i7&P`&O({teY>74K!K5LGNNj;njPb_*MNPPO z{|FBryy?*c5q~qwb{FN)lNTqbBf(V?ktv}#81Ovys>gbhZ>K^1dN1j(|BWzd71NXiDoj3MA2w8a+f>SqS1MD z;f}F6)-KKoy2I@#wIhpj+vA2x?btiBE##;x*>UX@&*i!M|E0|*Vv0V$cp5lHsU6S6 zZNsEu|BQ*W^HaL>Ls~ceBCY%@-H=p3r_)<{rl;E10lKS0_C&Jp!d^p8VVL(m$hXWr6sklddv6*<;)q+`}SJ?FIV6^^}LnX}2~;QKGjx6FA}!R5Z=QQ@)Zyu9`| zd8C2*YOAA`%IqgH>f4n1YIQx{Vg$V2mE=Ci!;3oT{ff_)m0Q$7*_!D!b(k zVcjL#)S3G$y3M_$PRacZuipdTcB}y{(nC9X<7RJ)nAx8SLq$QBg%3)TwZ% + Color = clBtnFace + ParentColor = False + OnResize = CoolBar1Resize + object ToolBar1: TToolBar + Left = 9 + Top = 0 + Width = 519 + Height = 22 + AutoSize = True + Caption = 'ToolBar1' + EdgeBorders = [] + Flat = True + Images = ToolbarImagesList + TabOrder = 0 + object ToolButton1: TToolButton + Left = 0 + Top = 0 + Action = Open1 + end + object ToolButton10: TToolButton + Left = 23 + Top = 0 + Width = 8 + Caption = 'ToolButton10' + ImageIndex = 18 + Style = tbsSeparator + end + object ToolButton8: TToolButton + Left = 31 + Top = 0 + Action = Copy1 + end + object ToolButton9: TToolButton + Left = 54 + Top = 0 + Action = Save1 + end + object ToolButton6: TToolButton + Left = 77 + Top = 0 + Action = Find1 + end + object ToolButton7: TToolButton + Left = 100 + Top = 0 + Width = 8 + Caption = 'ToolButton7' + ImageIndex = 19 + Style = tbsSeparator + end + object ToolButton2: TToolButton + Left = 108 + Top = 0 + Action = DumpPe1 + end + object ToolButton12: TToolButton + Left = 131 + Top = 0 + Action = Win32Help1 + end + object ToolButton11: TToolButton + Left = 154 + Top = 0 + Width = 8 + Caption = 'ToolButton11' + ImageIndex = 18 + Style = tbsSeparator + end + object ToolButton3: TToolButton + Left = 162 + Top = 0 + Action = WindowCascade1 + end + object ToolButton4: TToolButton + Left = 185 + Top = 0 + Action = WindowTileHorizontal1 + end + object ToolButton5: TToolButton + Left = 208 + Top = 0 + Action = WindowTileVertical1 + end + end + end + object StatusBar: TStatusBar + Left = 0 + Top = 302 + Width = 536 + Height = 19 + Panels = < + item + Width = 50 + end> + end + object MainMenu: TMainMenu + Images = ToolbarImagesList + Left = 8 + Top = 272 + object File1: TMenuItem + Caption = 'File' + object Open2: TMenuItem + Action = Open1 + end + object Save2: TMenuItem + Action = Save1 + end + object N3: TMenuItem + Caption = '-' + end + object DumpPEfile1: TMenuItem + Action = DumpPe1 + end + object N1: TMenuItem + Caption = '-' + end + object Exit2: TMenuItem + Action = Exit1 + end + end + object Edit1: TMenuItem + Caption = 'Edit' + object Copy2: TMenuItem + Action = Copy1 + end + object Selectall2: TMenuItem + Action = SelectAll1 + end + object N4: TMenuItem + Caption = '-' + end + object Findtext1: TMenuItem + Action = Find1 + end + end + object Window1: TMenuItem + Caption = 'Window' + object Cascade1: TMenuItem + Action = WindowCascade1 + end + object TileHorizontally1: TMenuItem + Action = WindowTileHorizontal1 + end + object TileVertically1: TMenuItem + Action = WindowTileVertical1 + end + end + object Help1: TMenuItem + Caption = 'Help' + object Win32helpkeyword1: TMenuItem + Action = Win32Help1 + end + object N2: TMenuItem + Caption = '-' + end + object Sendamessage1: TMenuItem + Action = SendMail1 + end + object About2: TMenuItem + Action = About1 + end + end + end + object ActionList1: TActionList + Images = ToolbarImagesList + Left = 40 + Top = 272 + object Exit1: TAction + Caption = 'Exit' + Hint = 'Exit application' + ImageIndex = 2 + OnExecute = Exit1Execute + end + object Open1: TAction + Caption = 'Open...' + Hint = 'Open a file' + ImageIndex = 0 + ShortCut = 16463 + OnExecute = Open1Execute + end + object WindowCascade1: TWindowCascade + Category = 'Window' + Caption = 'Cascade' + Hint = 'Cascade' + ImageIndex = 5 + end + object WindowTileHorizontal1: TWindowTileHorizontal + Category = 'Window' + Caption = 'Tile Horizontally' + Hint = 'Tile Horizontally' + ImageIndex = 6 + end + object WindowTileVertical1: TWindowTileVertical + Category = 'Window' + Caption = 'Tile Vertically' + Hint = 'Tile Vertically' + ImageIndex = 7 + end + object Copy1: TAction + Caption = 'Copy' + Hint = 'Copy to clipboard' + ImageIndex = 4 + ShortCut = 16451 + OnExecute = Copy1Execute + OnUpdate = Copy1Update + end + object Save1: TAction + Tag = 1 + Caption = 'Save...' + Hint = 'Save to text file' + ImageIndex = 3 + ShortCut = 16467 + OnExecute = Copy1Execute + OnUpdate = Copy1Update + end + object SelectAll1: TAction + Caption = 'Select all' + Hint = 'Select all rows' + ImageIndex = 8 + ShortCut = 16449 + OnExecute = SelectAll1Execute + OnUpdate = SelectAll1Update + end + object Win32Help1: TAction + Caption = 'Find in Win32 API help' + Hint = 'Find in Win32 API help' + ImageIndex = 1 + ShortCut = 112 + OnExecute = Win32Help1Execute + OnUpdate = Win32Help1Update + end + object DumpPe1: TAction + Caption = 'Dump PE file' + Hint = 'Dump PE file' + ImageIndex = 9 + ShortCut = 16452 + OnExecute = DumpPe1Execute + OnUpdate = DumpPe1Update + end + object About1: TAction + Caption = 'About...' + Hint = 'About' + OnExecute = About1Execute + end + object SendMail1: TAction + Caption = 'Support' + ImageIndex = 10 + OnExecute = SendMail1Execute + end + object Find1: TAction + Caption = 'Find text' + Hint = 'Find text' + ImageIndex = 11 + ShortCut = 16454 + OnExecute = Find1Execute + OnUpdate = Find1Update + end + end + object ToolbarImagesList: TImageList + ShareImages = True + Left = 72 + Top = 272 + Bitmap = { + 494C01010C000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000004000000001002000000000000040 + 000000000000000000000000000000000000FFFFFF40FFFFFF4000FFFF400000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF408000004080000040800000408000004080000040800000408000 + 004080000040800000408000004080000040FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF408000004080000040800000408000004080000040800000408000 + 004080000040800000408000004080000040FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF400000004000FF + FF407F7F7F40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4000FFFF400000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4000FFFF400000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4000FFFF400000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40000000400000004000000040000000400000004000000040000000400000 + 004000000040000000407F7F7F407F7F7F4000000040000000407F7F7F400000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF408000004000000040000000407F7F7F400000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40800000407F7F7F407F7F7F4000FFFF400000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFFFF40800000408000 + 0040800000408000004080000040800000408000004080000040FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF408000004080000040800000408000004080000040800000408000 + 004080000040800000408000004080000040FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF408000004080000040800000408000004080000040800000408000 + 004080000040800000408000004080000040FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF408000004080000040800000408000004080000040800000408000 + 004080000040800000408000004080000040FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF4000000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF400000004000000040000000407F7F7F4000FFFF4000FFFF400000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40800000407F7F7F4000FFFF4000FFFF400000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40800000400000FF4000000040000000407F7F + 7F40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF408000004080000040800000408000004080000040800000408000 + 004080000040800000408000004080000040FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF408000004080000040800000408000004080000040800000408000 + 004080000040800000408000004080000040FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF4000000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4000000040FFFFFF400000FF400000FF400000FF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF408000004080000040800000400000FF400000FF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF408000004080000040800000400000FF400000FF400000FF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40800000408000004080000040800000408000 + 0040800000408000004080000040FFFFFF4080000040FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408000004080000040800000408000 + 0040800000408000004080000040800000408000004080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF4000000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF400000FF400000FF400000FF400000FF400000FF400000FF400000 + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40800000400000FF400000FF400000FF400000 + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF4080000040000000400000FF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF408000004080000040800000408000004080000040800000408000 + 004080000040800000408000004080000040FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF408000004080000040800000408000004080000040800000408000 + 0040800000408000004080000040800000400000008000000000000000800000 + 0000000000800000000000000080000000000000008000000000000000000000 + 0000000000000000000000000080000000000000000000000000000000000000 + 00000000000000000000000000000000000000FFFF0000000000000000000000 + 000000000000000000000000000000FFFF0000000080000000000000000000FF + FF00008080000000000000000080000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000008000000000000000800000 + 00000000008000000000000000000000000000000080000000000000000000FF + FF0000FFFF0000FFFF0000000080000000000000000000FFFF0000FFFF000000 + 00007F7F7F3F7F7F7F007F7F7F0000FFFF0000FFFF3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F0000FFFF0000FFFF000000000000000080000000000000000000FF + FF0000808000000000000000008000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBF00000000000000000000000000000000000000 + 0000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF00000000000000000000000000000000000000 + 00000000000000000000FFFF00BFFFFF0000FFFF000000000000000000000000 + 00007F7F7F3F7F7F7F007F7F7F0000000000000000000000000000FFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000FFFF00000000000000000000000080000000000000000000FF + FF0000808000000000000000000000000000BFBFBFBFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF0000000080000000000000000000000000000000000000 + 0000000000BFFFFFFF000000000000000000000000BFFFFFFF00000000BFFFFF + FF000000000000000000FFFFFF0000000000000000000000FF000000FF000000 + FF000000003F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F0000000000FFFFFF00000000000000000000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF000000003F7F7F7F00000000000000000000000080000000000000000000FF + FF00008080000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000080000000000000000000000000000000000000 + 0000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF0000000000000000000000FF000000FF000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF000000003F7F7F7F0000000000000000000000008000000000000000000080 + 8000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000080000000000000000000000000000000000000 + 0000000000BFFFFFFF000000000000000000FFFFFF0000000000000000BFFFFF + FF000000000000000000FFFFFF0000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 0000FFFFFF0000000000000000BFFFFFFF000000000000000000000000BFFFFF + FF000000003F7F7F7F0000000000000000000000008000000000000000000000 + 00007F7F7FBFBFBFBF0000000000000000000000000000000000000000000000 + 00007F7F7F000000000000000080000000000000000000000000000000000000 + 0000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF0000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF000000003F7F7F7F00000000000000000000000000000000007F7F7FBFBFBF + BF00BFBFBFBFBFBFBF00000000000000000000000000000000007F7F7F3F7F7F + 7F007F7F7F000000000000000080000000000000000000000000000000000000 + 00000000000000000000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000000000 + 0000FFFFFF0000000000FFFFFF0000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF000000000000FFFF0000FFFF0000FFFF000000 + 0000FFFFFF00000000000000000000000000000000BFFFFFFF00000000BFFFFF + FF000000000000FFFF0000FFFF0000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF0000000000000000007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F000000000000000080000000000000000000000000000000000000 + 0000FFFFFF0000FFFF000000000000000000FFFFFF0000000000FFFFFF000000 + 0000FFFFFFBFFFFFFF00FFFFFF0000000000000000BFFFFFFF007F7F7F3F7F7F + 7F00FFFFFF3F7F7F7F007F7F7FBFFFFFFF007F7F7FBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000FFFF0000FFFF000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF000000000000FFFF0000FFFF0000FFFF00000000BFBFBFBF00BFBFBFBFBFBF + BF00000000BFBFBFBF000000003F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F000000000000000080000000000000000000000000000000BFFFFF + FF0000FFFF000000000000FFFFBFFFFFFF00000000BFFFFFFF0000FFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 0000FFFFFF0000000000000000BFFFFFFF000000000000000000000000000000 + 000000000000000000000000000000000000000000000000FF00BFBFBF000000 + FF00BFBFBFBFBFBFBF000000003F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F000000000000000080000000000000000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000000000FFFFFF0000FFFF00000000BFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF0000000000000000BFFFFFFF007F7F7F3F7F7F + 7F00FFFFFF3F7F7F7F007F7F7F3F7F7F7F00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000FF000000FF000000FFBFBFBF + BF00BFBFBFBFBFBFBF000000003F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F00000000000000008000000000000000000000000000FFFFBFFFFF + FF0000FFFFBFFFFFFF00000000BFFFFFFF0000FFFF0000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF0000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 0000FFFFFF0000000000BFBFBFBFFFFFFF00000000BFFFFFFF000000000000FF + FF0000000000000000000000000000000000000000000000FF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBF00000000007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F00000000800000000000000080000000000000000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00000000BFFFFFFF00FFFFFFBFFFFF + FF00000000000000000000000000000000000000000000000000FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000 + 0000FFFFFF000000000000000080000000000000000000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF0000000000000000000000000000FF + FF0000FFFF00000000000000000000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBFBFBFBFBF00BFBFBF0000000000000000000000 + 000000000080000000000000008000000000FFFF00000000000000FFFFBFFFFF + FF0000FFFFBFFFFFFF0000FFFF00000000000000000000000000FFFFFFBFFFFF + FF00000000BFFFFFFF00FFFFFF000000000000000000000000007F7F7F000000 + 00007F7F7F00000000007F7F7F00000000007F7F7F00000000007F7F7F000000 + 000000000000000000000000008000000000000000000000000000FFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000FFFF0000FFFF000000000000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBFBFBFBFBF000000003F7F7F7F00000000800000 + 000000000080000000000000008000000000FFFF00BFFFFF00000000000000FF + FF00FFFFFF0000FFFF000000000000FFFF00FFFFFF0000FFFF00000000BFFFFF + FF00000000BFFFFFFF0000000000000000007F7F7F00000000007F7F7F000000 + 00007F7F7F00000000007F7F7F00000000007F7F7F00000000007F7F7F000000 + 0000000000800000000000000080000000000000000000FFFF0000FFFF000000 + 000000000000000000000000000000FFFF0000FFFF0000000000000000000000 + 00000000000000FFFF0000FFFF00000000000000000000000000BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF000000003F7F7F7F000000008000000000000000800000 + 000000000080000000000000008000000000FFFF00BFFFFF0000FFFF00000000 + 000000FFFFBFFFFFFF0000FFFFBFFFFFFF000000000000000000FFFFFFBFFFFF + FF00000000000000000000000000000000000000008000000000000000800000 + 0000000000800000000000000080000000000000008000000000000000800000 + 00000000000000000000000000800000000000FFFF0000000000000000000000 + 000000000000000000000000000000FFFF000000000000000000000000000000 + 000000000000000000000000000000FFFF000000008000000000000000000000 + 00000000003F7F7F7F0000000080000000000000008000000000000000800000 + 000000000080000000000000008000000000FFFF00BFFFFF0000FFFF00BFFFFF + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000080000000800000008000000080000000800000008000 + 0000800000008000000080000000800000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00800000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00800000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00800000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F007F7F + 7F0000000000000000007F7F7F00000000000000000000000000000000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000080000000800000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 00007F7F7F007F7F7F0000FFFF00000000000000000000000000000000008000 + 0000FFFFFF00FFFFFF0080000000800000008000000080000000800000008000 + 00008000000080000000FFFFFF00800000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 00007F7F7F0000FFFF0000FFFF00000000000000000000000000000000008000 + 0000FFFFFF00FFFFFF0080000000800000008000000080000000800000008000 + 0000800000008000000080000000800000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF00000000000000000000000000FFFFFF0000000000000000000000 + 00000000FF0000000000000000007F7F7F000000000000000000000000008000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00800000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + FF000000FF000000FF0000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000000000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080000000000000000000000000000000FFFFFF00000000000000 + 00000000000000000000FFFFFF0000000000FFFFFF00000000000000FF000000 + FF000000FF000000FF000000FF00000000000000000080000000FFFFFF008000 + 000080000000800000008000000080000000800000008000000080000000FFFF + FF00800000000000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF000000000080000000FFFFFF008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000000000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00800000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 00008000000080000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000FFFFFF00FFFFFF000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000FFFFFF008000000000000000000000000000000080000000800000008000 + 00008000000080000000FFFFFF00800000008000000080000000800000008000 + 0000FFFFFF0080000000000000000000000000000000FFFFFF0000000000BFBF + BF00FFFFFF0000000000FFFFFF000000000000000000000000007F7F7F000000 + FF000000FF000000FF0000000000000000000000000080000000800000008000 + 00008000000080000000800000008000000080000000FFFFFF00800000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 00008000000080000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000FF000000FF000000FF000000 + FF000000FF000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F000000 + 00007F7F7F007F7F7F0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF007F7F7F000000FF007F7F7F00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF000000 + 0000BFBFBF00BFBFBF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000FF + FF00FFFFFF0000FFFF000000FF000000FF000000FF0000FFFF00FFFFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 7F0000007F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF00BFBF + BF00BFBFBF00BFBFBF0000000000000000000000000000000000008080000080 + 8000008080000080800000808000008080000080800000808000008080000000 + 000000000000000000000000000000000000000000000000000000FFFF00FFFF + FF0000FFFF00FFFFFF007F7F7F000000FF007F7F7F00FFFFFF0000FFFF00FFFF + FF0000FFFF000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF00000000000080 + 8000008080000080800000808000008080000080800000808000008080000080 + 8000000000000000000000000000000000000000000000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF0000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF0000FFFF000000 + 0000008080000080800000808000008080000080800000808000008080000080 + 80000080800000000000000000000000000000000000FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF000000FF0000FFFF00FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000FFFF00FFFFFF0000FF + FF00000000000080800000808000008080000080800000808000008080000080 + 800000808000008080000000000000000000FFFFFF0000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF000000FF007F7F7F0000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF00000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF0000FFFF00FFFF + FF0000FFFF000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000FFFF00FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF000000FF000000FF00FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF000000000000000000BFBFBF0000000000FF000000FF000000FF00 + 00000000FF00FF000000FF000000000000000000000000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00000000000000 + 000000000000000000000000000000000000FFFFFF0000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF000000FF000000FF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF00000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + FF000000FF000000FF00000000000000000000000000FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF00000000000000 + 00000000000000000000000000000000000000FFFF00FFFFFF0000FFFF00FFFF + FF007F7F7F007F7F7F0000FFFF00FFFFFF007F7F7F000000FF000000FF00FFFF + FF0000FFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00000000000000 + 00000000000000000000FFFFFF0000000000FFFFFF00000000000000FF000000 + FF000000FF000000FF000000FF00000000000000000000FFFF00FFFFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0000FFFF00FFFFFF0000FF + FF000000FF000000FF00FFFFFF0000FFFF007F7F7F000000FF000000FF0000FF + FF00FFFFFF0000FFFF00FFFFFF00000000000000000000000000000000000000 + 7F0000007F0000007F0000FFFF000000000000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF0000FFFF00FFFF + FF000000FF000000FF007F7F7F00FFFFFF007F7F7F000000FF000000FF00FFFF + FF0000FFFF00FFFFFF0000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF00FFFFFF0000FF + FF00FFFFFF000000FF000000FF000000FF000000FF000000FF00FFFFFF0000FF + FF00FFFFFF0000FFFF0000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000FFFFFF00FFFFFF000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000FFFF00FFFF + FF0000FFFF00FFFFFF000000FF000000FF000000FF00FFFFFF0000FFFF00FFFF + FF0000FFFF000000000000000000000000000000000000000000000000000000 + 7F00FFFF000000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF0000000000BFBF + BF00FFFFFF0000000000FFFFFF000000000000000000000000007F7F7F000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 7F00FFFF0000FFFF00000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000FF000000FF000000FF000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000400000000100010000000000000200000000000000000000 + 000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + FFFFFF00FFFFFF00000000000000000000000000000000000000000000000000 + 0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + FFFFFFBFFFFFFF00FFFFFFBFFFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFF00 + FFFFFFBFFFFFFF00FFFFFFBFFFFFFFBFFFE3FF7EC380F000FC419001C300F000 + 8800C003C201F0000000E003C003F0000000E003C003F0000000E003C003F000 + 0000E0030003F000000000010003E000000080000003C0000000E00700038000 + 0000E00F000380000000E00F000700000001E027000F00000001C073003F0001 + 000D9E7980FF0003D5537EFEC3FF0007FC00FC00FFFFFFFFFC00FC0080038003 + FC00FC0080038003FC00FC00800380030000E000800380030000E00080038003 + 0000E000800380030000E0078003800300238007800380030001800780038003 + 00008007800380030023801F800380030063801F8003800300C3801F80038003 + 0107801FFFFFFFFF03FFFFFFFFFFFFFFFFFFFFFFC007FF00FFFFF83FC007FF00 + 001FE00FC007FF00000FC007C007FF0000078003C007000000038003C0070000 + 00010001C007000000000001C0070000001F0001C0070023001F0001C0070001 + 001F0001C00700008FF18003C0070023FFF98003C0070063FF75C007C00700C3 + FF8FE00FC0070107FFFFF83FC00703FF00000000000000000000000000000000 + 000000000000} + end + object OpenFileDialog: TOpenDialog + Filter = + 'PE Exe files (*.exe;*.dll;*.bpl)|*.exe;*.dll;*.bpl|All files (*.' + + '*)|*.*' + Options = [ofHideReadOnly, ofAllowMultiSelect, ofPathMustExist, ofFileMustExist, ofEnableSizing] + Left = 136 + Top = 272 + end + object ViewImageList: TImageList + ShareImages = True + Left = 104 + Top = 272 + Bitmap = { + 494C01010D000E00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000004000000001002000000000000040 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000080808000FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000008080800080808000FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000808080000000000000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000080808000808080000000000000000000FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000008080800000000000000000000000000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000808080008080800000000000000000000000000000000000FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000808080008080800080808000808080008080800080808000808080008080 + 8000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000FF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000BFBFBF00BFBFBF007F7F7F007F7F7F007F7F7F00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000BFBFBF00BFBFBF007F7F7F007F7F7F007F7F7F00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BFBF + BF00BFBFBF007F7F7F000000000000000000000000007F7F7F007F7F7F007F7F + 7F0000000000000000000000000000000000000000000000000000000000BFBF + BF00BFBFBF007F7F7F000000000000000000000000007F7F7F007F7F7F007F7F + 7F000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF00BFBF + BF0000000000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF00000000007F7F + 7F007F7F7F000000000000000000000000000000000000000000BFBFBF00BFBF + BF0000000000FFFFFF000000FF00FFFFFF000000FF00FFFFFF00000000007F7F + 7F007F7F7F0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF00000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 00007F7F7F000000000000000000000000000000000000000000BFBFBF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 00007F7F7F0000000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF00000000000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000FF000000FF00000000000000 + 00000000000000000000000000000000000000000000BFBFBF007F7F7F00FFFF + FF00000000000000000000FF0000007F0000007F00000000000000000000FFFF + FF007F7F7F007F7F7F00000000000000000000000000BFBFBF007F7F7F00FFFF + FF0000000000000000000000FF0000007F0000007F000000000000000000FFFF + FF007F7F7F007F7F7F00000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000FF000000FF000000FF000000 + FF000000000000000000000000000000000000000000BFBFBF000000000000FF + 00000000000000FF0000007F000000FF0000007F0000007F00000000000000FF + 0000000000007F7F7F00000000000000000000000000BFBFBF00000000000000 + FF00000000000000FF0000007F000000FF0000007F0000007F00000000000000 + FF00000000007F7F7F00000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000FF000000 + FF0000000000000000000000000000000000000000000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF00000000000000000000000000FFFFFF0000000000FFFF + FF000000000000FF000000FF000000FF000000FF0000007F000000000000FFFF + FF00000000007F7F7F00000000000000000000000000FFFFFF0000000000FFFF + FF00000000000000FF000000FF000000FF000000FF0000007F0000000000FFFF + FF00000000007F7F7F00000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000FF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000FF000000FF000000FF000000 + FF000000000000000000000000000000000000000000FFFFFF000000000000FF + 000000000000FFFFFF0000FF000000FF0000007F000000FF00000000000000FF + 000000000000BFBFBF00000000000000000000000000FFFFFF00000000000000 + FF0000000000FFFFFF000000FF000000FF0000007F000000FF00000000000000 + FF0000000000BFBFBF00000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000FF000000FF00000000000000 + 00000000000000000000000000000000000000000000FFFFFF007F7F7F00FFFF + FF000000000000000000FFFFFF00FFFFFF0000FF00000000000000000000FFFF + FF007F7F7F00BFBFBF00000000000000000000000000FFFFFF007F7F7F00FFFF + FF000000000000000000FFFFFF00FFFFFF000000FF000000000000000000FFFF + FF007F7F7F00BFBFBF00000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 0000BFBFBF000000000000000000000000000000000000000000BFBFBF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 0000BFBFBF0000000000000000000000000000000000FFFFFF0000000000BFBF + BF00FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00BFBF + BF0000000000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000000000BFBF + BF00BFBFBF000000000000000000000000000000000000000000FFFFFF00BFBF + BF0000000000FFFFFF000000FF00FFFFFF000000FF00FFFFFF0000000000BFBF + BF00BFBFBF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00BFBFBF007F7F7F000000000000000000000000007F7F7F00BFBFBF00BFBF + BF0000000000000000000000000000000000000000000000000000000000FFFF + FF00BFBFBF007F7F7F000000000000000000000000007F7F7F00BFBFBF00BFBF + BF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00BFBFBF00BFBFBF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00BFBFBF00BFBFBF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000FF000000FF000000FF000000FF000000FF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000FF000000 + FF000000FF0000000000000000007F7F7F00000000007F7F7F00000000000000 + 00000000FF000000FF000000FF00000000000000000000000000000000000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000FFFF00BFBF + BF0000FFFF00BFBFBF0000FFFF00BFBFBF0000FFFF00BFBFBF0000FFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + FF000000FF000000FF00000000000000000000000000000000000000FF000000 + FF0000000000000000007F7F7F00000000007F7F7F00000000000000FF000000 + FF000000FF000000000000000000000000000000000000FFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF000000000000FF + FF00BFBFBF0000FFFF00BFBFBF0000FFFF00BFBFBF0000FFFF00BFBFBF0000FF + FF0000000000FFFFFF00FFFFFF00000000000000000000000000000000000000 + 00000000FF000000FF000000FF007F7F7F00000000007F7F7F000000FF000000 + FF000000FF00000000000000000000000000000000000000FF000000FF000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF000000000000000000000000000000000000000000FFFF + 0000000000000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF000000 + 00000000000000000000000000000000000000000000FFFFFF0000FFFF000000 + 000000FFFF00BFBFBF0000FFFF00BFBFBF0000FFFF00BFBFBF0000FFFF00BFBF + BF0000FFFF0000000000FFFFFF00000000000000000000000000000000000000 + 0000000000000000FF000000FF000000FF00000000000000FF000000FF000000 + FF0000000000000000000000000000000000000000000000FF00000000000000 + FF000000FF000000FF007F7F7F00000000007F7F7F0000000000000000000000 + 00000000FF000000FF000000000000000000000000000000000000000000FFFF + 00000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF00FFFFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00000000000000000000000000000000000000 + 000000000000000000000000FF000000FF00000000000000FF000000FF000000 + 0000000000000000000000000000000000000000FF000000FF00000000000000 + 00000000FF000000FF000000FF00000000000000000000000000000000000000 + 0000000000000000FF000000FF0000000000000000000000000000000000FFFF + 000000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF + FF000000000000000000000000000000000000000000FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 000000000000000000000000000000007F000000000000007F00000000000000 + 0000000000000000000000000000000000000000FF000000FF00000000000000 + 0000000000000000FF000000FF00000000000000000000000000000000000000 + 0000000000000000FF000000FF0000000000000000000000000000000000FFFF + 00000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF0000000000FFFFFF000000000000000000000000000000 + 00000000000000000000FFFFFF00000000000000000000000000000000000000 + 000000000000000000000000FF0000007F000000000000007F000000FF000000 + 0000000000000000000000000000000000000000FF000000FF00000000000000 + 000000000000000000007F7F7F00000000007F7F7F0000000000000000000000 + 0000000000000000FF000000FF0000000000000000000000000000000000FFFF + 000000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF000000000000000000FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000FF000000FF000000000000000000000000000000FF000000 + FF00000000000000000000000000000000000000FF000000FF00000000000000 + 0000000000000000000000007F000000000000007F000000FF00000000000000 + 0000000000000000FF000000FF0000000000000000000000000000000000FFFF + 00000000000000FFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF0000000000FFFFFF000000000000000000000000000000 + 00000000000000000000FFFFFF00000000000000000000000000000000000000 + 00000000FF000000FF000000FF000000000000000000000000000000FF000000 + FF000000FF000000000000000000000000000000FF000000FF00000000000000 + 000000000000000000000000000000000000000000000000FF000000FF000000 + 0000000000000000FF000000FF00000000000000000000000000000000000000 + 0000000000000000000000FFFF00FFFFFF0000FFFF0000000000000000000000 + 000000000000000000000000000000000000000000007F7F7F00000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + FF000000FF000000FF000000000000000000000000000000FF000000FF000000 + 000000000000000000000000000000000000000000000000FF000000FF000000 + FF00000000000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF000000000000000000FFFFFF00FFFF + FF000000000000000000000000000000000000000000000000000000FF000000 + FF000000FF0000000000000000007F7F7F00000000007F7F7F00000000000000 + 00000000FF000000FF000000FF0000000000000000000000FF000000FF000000 + FF000000000000000000000000000000000000000000000000000000FF000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000FF000000 + FF000000FF00000000007F7F7F00000000007F7F7F0000000000000000000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000FF000000FF000000FF000000FF000000FF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000FFFF000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF007F7F7F007F7F7F007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF007F7F7F007F7F7F007F7F7F007F7F7F0000FFFF0000FFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00000000000000000000000000000000000000000000000000FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000FFFF000000FF0000FFFF00FFFF + FF0000007F00FF000000FF000000000000000000000000000000000000000000 + 0000808080008080800000000000000000000000000000000000FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 00000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF007F7F7F007F7F + 7F007F7F7F00FFFFFF00FFFFFF00FFFFFF0000FFFF000000FF000000FF0000FF + FF00FF00000000007F00FF000000000000000000000000000000000000000000 + 0000000000008080800000000000000000000000000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00000000000000000000000000000000000000000000000000FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000000000FFFF + FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000FFFF000000FF0000FFFF0000FF + FF00FF00000000007F00FF000000000000000000000000000000000000000000 + 00000000000080808000808080000000000000000000FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 00000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF000000000000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007F7F7F007F7F7F0000FFFF000000FF000000FF000000 + FF0000FFFF000000000000000000000000000000000000000000000000000000 + 00000000000000000000808080000000000000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF0000000000FFFFFF0000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F00000000007F7F7F007F7F7F0000FFFF000000FF000000FF000000 + FF000000FF0000FFFF0000000000000000000000000000000000000000000000 + 000000000000000000008080800080808000FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000FFFF000000000000FFFF000000000000FFFF00000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F007F7F + 7F00000000007F7F7F007F7F7F0000FFFF000000FF000000FF0000FFFF0000FF + FF000000FF0000FFFF0000FFFF00000000000000000000000000000000000000 + 000000000000000000000000000080808000FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF000000000000000000FFFFFF00FFFFFF0000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF0000000000FFFFFF00000000000000 + 000000000000000000000000000000000000000000007F7F7F00000000007F7F + 7F00000000007F7F7F007F7F7F0000FFFF000000FF0000FFFF007F7F7F000000 + FF0000FFFF000000FF0000FFFF007F7F7F000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF00000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F000000 + 0000000000007F7F7F007F7F7F007F7F7F0000FFFF0000FFFF007F7F7F0000FF + FF0000FFFF0000FFFF0000FFFF007F7F7F000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00000000000000 + 000000000000000000000000000000000000000000007F7F7F00000000000000 + 0000000000007F7F7F007F7F7F007F7F7F0000FFFF0000FFFF007F7F7F007F7F + 7F007F7F7F0000FFFF000000FF0000FFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007F7F7F007F7F7F007F7F7F0000FFFF007F7F7F007F7F + 7F007F7F7F007F7F7F0000FFFF0000FFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000007F7F7F007F7F7F007F7F + 7F0000000000000000007F7F7F0000FFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000400000000100010000000000000200000000000000000000 + 000000000000000000000000FFFFFF00FFFF000000000000FFFF000000000000 + FFFF000000000000FFFF000000000000FE7F000000000000FC3F000000000000 + FDBF000000000000F99F000000000000FBDF000000000000F3CF000000000000 + F00F000000000000FFFF000000000000FFFF000000000000FFFF000000000000 + FFFF000000000000FFFF000000000000FFDFFFFFFFFFFFFFFFCFFFFFF83FF83F + FFC7FFFFE00FE00F0003FFFFC007C0070001FCFF800380030000FC3F80038003 + 0001FC0F0001000100030003000100010007000000010001000F000300010001 + 001FFC0F00010001007FFC3F8003800300FFFCFF8003800301FFFFFFC007C007 + 03FFFFFFE00FE00FFFFFFFFFF83FF83FFFFFFFFFFFFFFFFFFFFFF83FFFFF801F + C631E00F1FFF0000E223CC47041F0000F0078463000F0000F88FA073000F0000 + FC1F31F900070000FE3F38F900010000FC1F3C7900000000F80F3C3900018000 + F0073C19003F8000E2239C0BFC7FFC00C6318C43FFFFFC01FFFFC467FFFFFC03 + FFFFE00FFFFFFC07FFFFF83FFFFFFFFFFFFFE00F8000FFFFE007E00F0000FFFF + E007E00F0000FFFFE007F00F0000FFFFE007F00F0000F00FE007F80F0000F3CF + E007F0070000FBDFE007F0070000F99FE007F0070000FDBFE007F00FF403FC3F + E007F01FC801FE7FE00FF81FA800FFFFE01FFE1FD800FFFFE03FFF1FB800FFFF + FFFFFF1FFC00FFFFFFFFFFBFFF8CFFFF00000000000000000000000000000000 + 000000000000} + end + object SaveDialog: TSaveDialog + DefaultExt = 'txt' + Filter = 'Text files (*.txt)|*.txt|All files (*.*)|*.*' + Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing] + Left = 168 + Top = 272 + end +end diff --git a/official/1.104/examples/windows/delphitools/dependencyviewer/DependViewMain.pas b/official/1.104/examples/windows/delphitools/dependencyviewer/DependViewMain.pas new file mode 100644 index 0000000..69ed70a --- /dev/null +++ b/official/1.104/examples/windows/delphitools/dependencyviewer/DependViewMain.pas @@ -0,0 +1,346 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is DependView.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2008-09-09 21:32:17 +0200 (mar., 09 sept. 2008) $ } +{ } +{**************************************************************************************************} + +unit DependViewMain; + +{$I JCL.INC} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + Menus, ToolWin, ComCtrls, ImgList, ActnList, StdActns, ClipBrd, Registry, + ShellAPI; + +const + UM_CHECKPARAMSTR = WM_USER + $100; + +type + TMainForm = class(TForm) + MainMenu: TMainMenu; + CoolBar1: TCoolBar; + ToolBar1: TToolBar; + ToolButton1: TToolButton; + ActionList1: TActionList; + ToolbarImagesList: TImageList; + OpenFileDialog: TOpenDialog; + File1: TMenuItem; + Exit1: TAction; + Exit2: TMenuItem; + Open1: TAction; + Open2: TMenuItem; + N1: TMenuItem; + Window1: TMenuItem; + WindowCascade1: TWindowCascade; + WindowTileHorizontal1: TWindowTileHorizontal; + WindowTileVertical1: TWindowTileVertical; + Cascade1: TMenuItem; + TileHorizontally1: TMenuItem; + TileVertically1: TMenuItem; + ToolButton3: TToolButton; + ToolButton4: TToolButton; + ToolButton5: TToolButton; + ViewImageList: TImageList; + ToolButton7: TToolButton; + Copy1: TAction; + Save1: TAction; + Edit1: TMenuItem; + Copy2: TMenuItem; + Save2: TMenuItem; + ToolButton8: TToolButton; + ToolButton9: TToolButton; + ToolButton10: TToolButton; + SelectAll1: TAction; + Selectall2: TMenuItem; + SaveDialog: TSaveDialog; + Win32Help1: TAction; + ToolButton11: TToolButton; + ToolButton12: TToolButton; + Help1: TMenuItem; + Win32helpkeyword1: TMenuItem; + N2: TMenuItem; + About1: TAction; + About2: TMenuItem; + StatusBar: TStatusBar; + DumpPe1: TAction; + ToolButton2: TToolButton; + N3: TMenuItem; + DumpPEfile1: TMenuItem; + SendMail1: TAction; + Sendamessage1: TMenuItem; + Find1: TAction; + ToolButton6: TToolButton; + N4: TMenuItem; + Findtext1: TMenuItem; + procedure Exit1Execute(Sender: TObject); + procedure Open1Execute(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure SelectAll1Update(Sender: TObject); + procedure SelectAll1Execute(Sender: TObject); + procedure Copy1Update(Sender: TObject); + procedure Copy1Execute(Sender: TObject); + procedure Win32Help1Update(Sender: TObject); + procedure Win32Help1Execute(Sender: TObject); + procedure About1Execute(Sender: TObject); + procedure DumpPe1Update(Sender: TObject); + procedure DumpPe1Execute(Sender: TObject); + procedure SendMail1Execute(Sender: TObject); + procedure Find1Update(Sender: TObject); + procedure Find1Execute(Sender: TObject); + procedure CoolBar1Resize(Sender: TObject); + procedure FormShow(Sender: TObject); + private + FPeViewer: Variant; + FPeViewerRegistred: Boolean; + FWin32Help: string; + procedure InvokeWin32Help(const Name: string); + function IsFileViewerChildActive: Boolean; + function IsWin32Help: Boolean; + procedure OnActiveFormChange(Sender: TObject); + procedure UMCheckParamStr(var Message: TMessage); message UM_CHECKPARAMSTR; + procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES; + public + procedure OpenFile(const FileName: TFileName; CheckIfOpen: Boolean); + end; + +var + MainForm: TMainForm; + +implementation + +uses ToolsUtils, FileViewer, JclPeImage, JclRegistry, FindDlg, JclFileUtils; + +{$R *.DFM} + +resourcestring + sNotValidFile = 'This is not a valid PE EXE file'; + +procedure TMainForm.InvokeWin32Help(const Name: string); +var + S: string; +begin + S := PeStripFunctionAW(Name); + WinHelp(Application.Handle, PChar(FWin32Help), HELP_KEY, DWORD(S)); +end; + +procedure TMainForm.OpenFile(const FileName: TFileName; CheckIfOpen: Boolean); +var + I: Integer; +begin + if CheckIfOpen then + begin + for I := 0 to MDIChildCount - 1 do + if MDIChildren[I] is TFileViewerChild and (TFileViewerChild(MDIChildren[I]).FileName = FileName) then + begin + MDIChildren[I].BringToFront; + Exit; + end; + end; + Screen.Cursor := crHourGlass; + try +{ if IsPeExe(FileName) then + begin} + TFileViewerChild.Create(Self).FileName := FileName; + OnActiveFormChange(nil); +{ end else + MessBox(sNotValidFile, MB_ICONINFORMATION);} + finally + Screen.Cursor := crDefault; + end; +end; + +procedure TMainForm.Exit1Execute(Sender: TObject); +begin + Close; +end; + +procedure TMainForm.Open1Execute(Sender: TObject); +var + I: Integer; +begin + with OpenFileDialog do + begin + FileName := ''; + if Execute then + for I := 0 to Files.Count - 1 do OpenFile(Files[I], True); + end; +end; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + FWin32Help := Win32HelpFileName; + FPeViewerRegistred := IsPeViewerRegistred; + Screen.OnActiveFormChange := OnActiveFormChange; + DragAcceptFiles(Handle, True); +end; + +procedure TMainForm.FormDestroy(Sender: TObject); +begin + DragAcceptFiles(Handle, False); + Screen.OnActiveFormChange := nil; +end; + +procedure TMainForm.OnActiveFormChange(Sender: TObject); +begin + if IsFileViewerChildActive then + StatusBar.Panels[0].Text := TFileViewerChild(ActiveMDIChild).FileName + else + StatusBar.Panels[0].Text := ''; +end; + +procedure TMainForm.SelectAll1Update(Sender: TObject); +begin + TAction(Sender).Enabled := Screen.ActiveControl is TListView; +end; + +procedure TMainForm.SelectAll1Execute(Sender: TObject); +begin + ListViewSelectAll(Screen.ActiveControl as TListView); +end; + +procedure TMainForm.Copy1Update(Sender: TObject); +begin + TAction(Sender).Enabled := Screen.ActiveControl is TListView; +end; + +procedure TMainForm.Copy1Execute(Sender: TObject); +var + SL: TStringList; +begin + SL := TStringList.Create; + Screen.Cursor := crHourGlass; + try + SL.Capacity := 256; + ListViewToStrings(Screen.ActiveControl as TListView, SL, True); + case TAction(Sender).Tag of + 0: Clipboard.AsText := SL.Text; + 1: with SaveDialog do + begin + FileName := ''; + if Execute then SL.SaveToFile(FileName); + end; + end; + finally + Screen.Cursor := crDefault; + SL.Free; + end; +end; + +procedure TMainForm.Win32Help1Update(Sender: TObject); +begin + Win32Help1.Enabled := IsWin32Help and IsFileViewerChildActive and + (TFileViewerChild(ActiveMDIChild).GetWin32Function <> ''); +end; + +procedure TMainForm.Win32Help1Execute(Sender: TObject); +begin + InvokeWin32Help((ActiveMDIChild as TFileViewerChild).GetWin32Function); +end; + +procedure TMainForm.About1Execute(Sender: TObject); +begin + ShowToolsAboutBox; +end; + +function TMainForm.IsFileViewerChildActive: Boolean; +begin + Result := (ActiveMDIChild is TFileViewerChild); +end; + +function TMainForm.IsWin32Help: Boolean; +begin + Result := Length(FWin32Help) > 0; +end; + +procedure TMainForm.DumpPe1Update(Sender: TObject); +begin + DumpPe1.Enabled := FPeViewerRegistred and IsFileViewerChildActive and + (TFileViewerChild(ActiveMDIChild).SelectedFileName <> ''); +end; + +procedure TMainForm.DumpPe1Execute(Sender: TObject); +begin + FPeViewer := CreateOrGetOleObject(PeViewerClassName); + FPeViewer.OpenFile((ActiveMDIChild as TFileViewerChild).SelectedFileName); + FPeViewer.BringToFront; +end; + +procedure TMainForm.SendMail1Execute(Sender: TObject); +begin + SendEmail; +end; + +procedure TMainForm.Find1Update(Sender: TObject); +begin + TAction(Sender).Enabled := TFindTextForm.CanExecuteFind; +end; + +procedure TMainForm.Find1Execute(Sender: TObject); +begin + ShowFindDialog(Screen.ActiveControl as TListView); +end; + +procedure TMainForm.CoolBar1Resize(Sender: TObject); +begin + D4FixCoolBarResizePaint(Sender); +end; + +procedure TMainForm.FormShow(Sender: TObject); +begin + PostMessage(Handle, UM_CHECKPARAMSTR, 0, 0); +end; + +procedure TMainForm.UMCheckParamStr(var Message: TMessage); +var + I: Integer; + FileName: TFileName; +begin + for I := 1 to ParamCount do + begin + FileName := PathGetLongName(ParamStr(I)); + if (FileName <> '') and (FileName[1] <> '-') and (FileName[1] <> '/') then + OpenFile(FileName, False); + end; +end; + +procedure TMainForm.WMDropFiles(var Message: TWMDropFiles); +var + FilesCount, I: Integer; + FileName: array[0..MAX_PATH] of Char; +begin + FilesCount := DragQueryFile(Message.Drop, MAXDWORD, nil, 0); + for I := 0 to FilesCount - 1 do + begin + if (DragQueryFile(Message.Drop, I, @FileName, SizeOf(FileName)) > 0) and + IsValidPeFile(FileName) then + OpenFile(FileName, True); + end; + DragFinish(Message.Drop); + Message.Result := 0; + Application.BringToFront; +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/dependencyviewer/FileViewer.dfm b/official/1.104/examples/windows/delphitools/dependencyviewer/FileViewer.dfm new file mode 100644 index 0000000..1b9932a --- /dev/null +++ b/official/1.104/examples/windows/delphitools/dependencyviewer/FileViewer.dfm @@ -0,0 +1,239 @@ +object FileViewerChild: TFileViewerChild + Left = 205 + Top = 131 + ActiveControl = DependencyTreeView + AutoScroll = False + Caption = 'FileViewerChild' + ClientHeight = 354 + ClientWidth = 576 + Color = clBtnFace + Constraints.MinHeight = 100 + Constraints.MinWidth = 200 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + FormStyle = fsMDIChild + OldCreateOrder = False + PopupMenu = PopupMenu1 + Position = poDefault + ShowHint = True + Visible = True + OnClose = FormClose + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object Splitter1: TSplitter + Left = 134 + Top = 0 + Width = 3 + Height = 277 + Cursor = crHSplit + ResizeStyle = rsUpdate + end + object Splitter3: TSplitter + Left = 0 + Top = 277 + Width = 576 + Height = 3 + Cursor = crVSplit + Align = alBottom + ResizeStyle = rsUpdate + end + object DependencyTreeView: TTreeView + Left = 0 + Top = 0 + Width = 134 + Height = 277 + Align = alLeft + ChangeDelay = 50 + HideSelection = False + HotTrack = True + Images = MainForm.ViewImageList + Indent = 19 + ReadOnly = True + ShowRoot = False + StateImages = MainForm.ViewImageList + TabOrder = 0 + OnChange = DependencyTreeViewChange + OnDeletion = DependencyTreeViewDeletion + end + object ListViewsPanel: TPanel + Left = 137 + Top = 0 + Width = 439 + Height = 277 + Align = alClient + BevelOuter = bvNone + FullRepaint = False + TabOrder = 1 + object Splitter2: TSplitter + Left = 0 + Top = 150 + Width = 439 + Height = 3 + Cursor = crVSplit + Align = alTop + ResizeStyle = rsUpdate + end + object ImportListView: TListView + Left = 0 + Top = 153 + Width = 439 + Height = 124 + Align = alClient + Columns = < + item + Caption = 'Name' + Width = 250 + end + item + Alignment = taRightJustify + Caption = 'Ordinal' + Width = 60 + end + item + Alignment = taRightJustify + Caption = 'Hint' + end + item + Caption = 'Module' + end> + HideSelection = False + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.ViewImageList + TabOrder = 0 + ViewStyle = vsReport + OnColumnClick = ImportListViewColumnClick + OnData = ImportListViewData + OnDblClick = ExportListViewDblClick + end + object ExportListView: TListView + Left = 0 + Top = 0 + Width = 439 + Height = 150 + Align = alTop + Columns = < + item + Caption = 'Name' + Width = 250 + end + item + Alignment = taRightJustify + Caption = 'Ordinal' + end + item + Alignment = taRightJustify + Caption = 'Hint' + end + item + Caption = 'Address' + Width = 70 + end> + HideSelection = False + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.ViewImageList + TabOrder = 1 + ViewStyle = vsReport + OnColumnClick = ExportListViewColumnClick + OnData = ExportListViewData + OnDblClick = ExportListViewDblClick + end + end + object ModulesListView: TListView + Left = 0 + Top = 280 + Width = 576 + Height = 74 + Align = alBottom + Columns = < + item + Caption = 'Module' + Width = 100 + end + item + Caption = 'Date and time' + Width = 120 + end + item + Alignment = taRightJustify + Caption = 'Size' + Width = 70 + end + item + Caption = 'Subsystem' + Width = 65 + end + item + Caption = 'Base address' + Width = 80 + end + item + Caption = 'File version' + Width = 80 + end + item + Caption = 'Product version' + Width = 90 + end + item + Caption = 'Img ver.' + end + item + Caption = 'Linker' + end + item + Caption = 'OS' + end + item + Caption = 'Subsys ver.' + end + item + Caption = 'Description' + Width = 250 + end> + ColumnClick = False + GridLines = True + HideSelection = False + MultiSelect = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.ViewImageList + TabOrder = 2 + ViewStyle = vsReport + OnDblClick = ModulesListViewDblClick + OnInfoTip = ModulesListViewInfoTip + end + object PopupMenu1: TPopupMenu + Images = MainForm.ToolbarImagesList + Left = 8 + Top = 312 + object Copy1: TMenuItem + Action = MainForm.Copy1 + end + object Save1: TMenuItem + Action = MainForm.Save1 + end + object N1: TMenuItem + Caption = '-' + end + object Selectall1: TMenuItem + Action = MainForm.SelectAll1 + end + object DumpPEfile1: TMenuItem + Action = MainForm.DumpPe1 + end + object Win32helpkeyword1: TMenuItem + Action = MainForm.Win32Help1 + end + end +end diff --git a/official/1.104/examples/windows/delphitools/dependencyviewer/FileViewer.pas b/official/1.104/examples/windows/delphitools/dependencyviewer/FileViewer.pas new file mode 100644 index 0000000..1f46411 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/dependencyviewer/FileViewer.pas @@ -0,0 +1,667 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is FileViewer.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2008-08-07 23:54:09 +0200 (jeu., 07 août 2008) $ } +{ } +{**************************************************************************************************} + +unit FileViewer; + +{$I JCL.INC} + +{.$DEFINE UsePeImagesCache} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ComCtrls, ExtCtrls, Menus, JclPeImage; + +type + TFileViewerChild = class(TForm) + DependencyTreeView: TTreeView; + Splitter1: TSplitter; + ListViewsPanel: TPanel; + Splitter2: TSplitter; + ImportListView: TListView; + ExportListView: TListView; + PopupMenu1: TPopupMenu; + Copy1: TMenuItem; + Save1: TMenuItem; + N1: TMenuItem; + Selectall1: TMenuItem; + Win32helpkeyword1: TMenuItem; + ModulesListView: TListView; + Splitter3: TSplitter; + DumpPEfile1: TMenuItem; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormCreate(Sender: TObject); + procedure ExportListViewData(Sender: TObject; Item: TListItem); + procedure ImportListViewData(Sender: TObject; Item: TListItem); + procedure ExportListViewColumnClick(Sender: TObject; + Column: TListColumn); + procedure ImportListViewColumnClick(Sender: TObject; + Column: TListColumn); + procedure FormDestroy(Sender: TObject); + procedure DependencyTreeViewChange(Sender: TObject; Node: TTreeNode); + procedure DependencyTreeViewDeletion(Sender: TObject; Node: TTreeNode); + procedure ModulesListViewInfoTip(Sender: TObject; Item: TListItem; + var InfoTip: String); + procedure ExportListViewDblClick(Sender: TObject); + procedure ModulesListViewDblClick(Sender: TObject); + private + FAnyRootError: Boolean; + FBasePath: string; + FCurrentImportDirIndex: Integer; + FFileName: TFileName; + FModulesList: TStringList; + FExportViewImage, FParentImportViewImage: TJclPeImage; + FPeImagesCache: TJclPeImagesCache; + function GetModuleName: string; + procedure SetFileName(const Value: TFileName); + procedure ExportListViewSort; + function ModuleToFileName(const ModuleName: string): TFileName; + procedure ImportListViewSort; + procedure InitTree; + function IsListViewActiveAndFocused( ListView: TListView): Boolean; + procedure UpdateExportView(Node: TTreeNode); + procedure UpdateModulesView; + procedure UpdateParentImportView(Node: TTreeNode); + class procedure UpdateSortData(Column: TListColumn); + function GetSelectedFileName: TFileName; + public + function GetWin32Function: string; + property FileName: TFileName read FFileName write SetFileName; + property ModuleName: string read GetModuleName; + property SelectedFileName: TFileName read GetSelectedFileName; + end; + +var + FileViewerChild: TFileViewerChild; + +implementation + +uses + DependViewMain, ToolsUtils, + JclBase, JclSysInfo, JclStrings, JclFileUtils; + +{$R *.DFM} + +type + TPeModuleState = ( + modNoErrors, // Normal module with no errors. + modFwdNoErrors, // Forwarded module with no errors. + modDupNoErrors, // Duplicate module with no errors. + modDupFwdNoErrors, // Forwarded duplicate module with no errors. + modExportMissing, // Module with one or more missing export functions + modFwdExportMissing, // Forwarded module with one or more missing export functions + modDupExportMissing, // Duplicate module with one or more missing export functions + modDupFwdExportMissing, // Forwarded duplicate module with one or more missing export functions + modMissing, // Missing module. + modFwdMissing, // Missing forwarded module. + modInvalid, // Invalid module. + modFwdInvalid, // Invalid forwarded module. + modRoot // Root node. + ); + + TPeModuleImageInfo = record + ImageIndex, StateIndex: Integer; + end; + + PPeModuleNodeData = ^TPeModuleNodeData; + TPeModuleNodeData = record + State: TPeModuleState; + ImportDirectoryIndex: Integer; + end; + +const + imgModule = 0; + imgDupModule = 1; + imgModExportMissing = 2; + imgDupExportMissing = 3; + imgMissingModule = 4; + imgInvalidModule = 5; + imgForwardFlag = 6; + imgRoot = 7; + imgExport = 8; + imgFwdExport = 9; + imgImport = 10; + imgUnresolvedImport = 11; + imgSortAsceding = 12; + imgSortDesceding = 3; + + ErrorModules = [modMissing, modFwdMissing, modInvalid, modFwdInvalid]; + MissingExportModules = [modExportMissing, modFwdExportMissing, modDupExportMissing, + modDupFwdExportMissing, modMissing, modFwdMissing, modInvalid, modFwdInvalid]; + ForwardedModules = [modFwdNoErrors, modDupFwdNoErrors, modFwdExportMissing, + modDupFwdExportMissing]; + + ModuleImages: array[TPeModuleState] of TPeModuleImageInfo = ( + (ImageIndex: imgModule; StateIndex: -1), + (ImageIndex: imgModule; StateIndex: imgForwardFlag), + (ImageIndex: imgDupModule; StateIndex: -1), + (ImageIndex: imgDupModule; StateIndex: imgForwardFlag), + (ImageIndex: imgModExportMissing; StateIndex: -1), + (ImageIndex: imgModExportMissing; StateIndex: imgForwardFlag), + (ImageIndex: imgDupExportMissing; StateIndex: -1), + (ImageIndex: imgDupExportMissing; StateIndex: imgForwardFlag), + (ImageIndex: imgMissingModule; StateIndex: -1), + (ImageIndex: imgMissingModule; StateIndex: imgForwardFlag), + (ImageIndex: imgInvalidModule; StateIndex: -1), + (ImageIndex: imgInvalidModule; StateIndex: imgForwardFlag), + (ImageIndex: imgRoot; StateIndex: -1) + ); + +{ TFileViewerChild } + +procedure TFileViewerChild.FormCreate(Sender: TObject); +begin + FModulesList := TStringList.Create; + FModulesList.Sorted := True; + FModulesList.Duplicates := dupIgnore; + FExportViewImage := TJclPeImage.Create; + FPeImagesCache := TJclPeImagesCache.Create; +{$IFNDEF UsePeImagesCache} + FParentImportViewImage := TJclPeImage.Create; +{$ENDIF} + FCurrentImportDirIndex := -1; + ExportListView.Height := ListViewsPanel.ClientHeight div 2; + ImportListView.Tag := $100; + UpdateSortData(ImportListView.Columns[0]); + ExportListView.Tag := $100; + UpdateSortData(ExportListView.Columns[0]); + ModulesListView.Columns[0].Width := ColumnTextWidth; +end; + +procedure TFileViewerChild.FormDestroy(Sender: TObject); +begin + FModulesList.Free; + FExportViewImage.Free; + FPeImagesCache.Free; +{$IFNDEF UsePeImagesCache} + FParentImportViewImage.Free; +{$ENDIF} +end; + +procedure TFileViewerChild.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Fix_ListViewBeforeClose(Self); + Action := caFree; +end; + +function TFileViewerChild.GetModuleName: string; +begin + Result := ExtractFileName(FFileName); +end; + +procedure TFileViewerChild.InitTree; +var + RootNode: TTreeNode; + + procedure SetNodeState(Node: TTreeNode; State: TPeModuleState); +var + I: Integer; +begin + PPeModuleNodeData(Node.Data)^.State := State; + Node.ImageIndex := ModuleImages[State].ImageIndex; + Node.SelectedIndex := ModuleImages[State].ImageIndex; + Node.StateIndex := ModuleImages[State].StateIndex; + if State in (MissingExportModules + ErrorModules) then + begin + if Node.Parent = RootNode then FAnyRootError := True; + I := FModulesList.IndexOf(Node.Text); + Assert(I >= 0); + FModulesList.Objects[I] := Pointer(State); + end; +end; + + function AddNode(Node: TTreeNode; const Text: string; State: TPeModuleState): TTreeNode; +var + Data: PPeModuleNodeData; +begin + Result := DependencyTreeView.Items.AddChild(Node, Text); + New(Data); + Result.Data := Data; + SetNodeState(Result, State); +end; + + procedure ScanModule(const ModuleName: string; Node: TTreeNode; Forwarded, ErrorsOnly: Boolean); +var + ExeImage: TJclPeImage; + I, Found: Integer; + S: string; + TempNode: TTreeNode; + AddedNodes: array of TTreeNode; + AddedNodesCount: Integer; +begin + ExeImage := FPeImagesCache[ModuleToFilename(ModuleName)]; + case ExeImage.Status of + stOk: + if not ErrorsOnly then + begin + with ExeImage.ImportList do + begin + SetLength(AddedNodes, Count); + AddedNodesCount := 0; + CheckImports(FPeImagesCache); + SortList(ilName); + for I := 0 to Count - 1 do + begin + S := Items[I].Name; + Found := FModulesList.IndexOf(S); + if Found = -1 then + begin + Found := FModulesList.Add(S); + FModulesList.Objects[Found] := Pointer(modNoErrors); + if Items[I].TotalResolveCheck = icUnresolved then + TempNode := AddNode(Node, S, modExportMissing) + else + TempNode := AddNode(Node, S, modNoErrors); + AddedNodes[AddedNodesCount] := TempNode; + Inc(AddedNodesCount); + end else + begin + if Items[I].TotalResolveCheck = icUnresolved then + TempNode := AddNode(Node, S, modDupExportMissing) + else + TempNode := AddNode(Node, S, modDupNoErrors); + ScanModule(TempNode.Text, TempNode, False, True); // ! + end; + PPeModuleNodeData(TempNode.Data)^.ImportDirectoryIndex := Items[I].ImportDirectoryIndex; + end; + end; + for I := 0 to AddedNodesCount - 1 do + ScanModule(AddedNodes[I].Text, AddedNodes[I], False, False); + with ExeImage.ExportList do + begin + CheckForwards(FPeImagesCache); + for I := 0 to ForwardedLibsList.Count - 1 do + begin + S := ForwardedLibsList[I]; + Found := FModulesList.IndexOf(S); + if Found = -1 then + begin + Found := FModulesList.Add(S); + FModulesList.Objects[Found] := Pointer(modNoErrors); + if TJclPeResolveCheck(ForwardedLibsList.Objects[I]) = icUnresolved then + AddNode(Node, S, modFwdExportMissing) + else + AddNode(Node, S, modFwdNoErrors); + end else + begin + if TJclPeResolveCheck(ForwardedLibsList.Objects[I]) = icUnresolved then + TempNode := AddNode(Node, S, modDupFwdExportMissing) + else + TempNode := AddNode(Node, S, modDupFwdNoErrors); + ScanModule(TempNode.Text, TempNode, True, True); // ! + end; + end; + end; + end; + stNotFound: + if Forwarded then SetNodeState(Node, modFwdMissing) else SetNodeState(Node, modMissing); + else + if Forwarded then SetNodeState(Node, modFwdInvalid) else SetNodeState(Node, modInvalid); + end; +end; + +begin + with DependencyTreeView do + begin + Items.BeginUpdate; + try + Items.Clear; + Screen.Cursor := crHourGlass; + RootNode := AddNode(nil, ModuleName, modRoot); + FModulesList.AddObject(ModuleName, Pointer(modRoot)); + ScanModule(FFileName, RootNode, False, False); + RootNode.Expand(False); + Selected := RootNode; + finally + Items.EndUpdate; + Screen.Cursor := crDefault; + end; + end; + UpdateModulesView; +{$IFNDEF UsePeImagesCache} + FPeImagesCache.Clear; +{$ENDIF} +end; + +procedure TFileViewerChild.SetFileName(const Value: TFileName); +begin + FAnyRootError := False; + FFileName := Value; + FBasePath := ExtractFilePath(FFileName); + Caption := ModuleName; + InitTree; +end; + +class procedure TFileViewerChild.UpdateSortData(Column: TListColumn); +var + ListView: TListView; + I: Integer; +begin + ListView := TListView(TListColumns(Column.Collection).Owner); + ListView.Columns.BeginUpdate; + with ListView.Columns do + for I := 0 to Count - 1 do + Items[I].ImageIndex := -1; + if ListView.Tag and $FF = Column.Index then + ListView.Tag := ListView.Tag xor $100 + else + ListView.Tag := Column.Index; + if ListView.Tag and $100 = 0 then + Column.ImageIndex := imgSortAsceding + else + Column.ImageIndex := imgSortDesceding; + ListView.Columns.EndUpdate; +end; + +function TFileViewerChild.IsListViewActiveAndFocused( ListView: TListView): Boolean; +begin + Result := (ActiveControl = ListView) and (ListView.ItemFocused <> nil); +end; + +function TFileViewerChild.GetWin32Function: String; +const + BracketChars: array [0..1] of Char = ( '[', ']' ); +begin + Result := ''; + if IsListViewActiveAndFocused(ImportListView) then + Result := ImportListView.ItemFocused.Caption + else + if IsListViewActiveAndFocused(ExportListView) then + Result := ExportListView.ItemFocused.Caption + else + Result := ''; + if Pos('@', Result) > 0 then + Result := '' + else + Result := StrRemoveChars(Result, BracketChars); +end; + +procedure TFileViewerChild.ExportListViewData(Sender: TObject; + Item: TListItem); +begin + with Item, FExportViewImage.ExportList[Item.Index] do + begin + Caption := Name; + SubItems.Add(Format('%d', [Ordinal])); + SubItems.Add(Format('%d', [Hint])); + SubItems.Add(AddressOrForwardStr); + if IsForwarded then ImageIndex := imgFwdExport else ImageIndex := imgExport; + end; +end; + +procedure TFileViewerChild.ImportListViewData(Sender: TObject; Item: TListItem); +var + ViewItem: TJclPeImportFuncItem; +begin + if FCurrentImportDirIndex = -1 then + ViewItem := FParentImportViewImage.ImportList.AllItems[Item.Index] + else + ViewItem := FParentImportViewImage.ImportList[FCurrentImportDirIndex][Item.Index]; + with Item, ViewItem do + begin + if IndirectImportName then + Caption := Format('[%s]', [Name]) + else + Caption := Name; + if Ordinal <> 0 then + begin + SubItems.Add(Format('%d', [Ordinal])); + SubItems.Add(''); + end else + begin + SubItems.Add(''); + SubItems.Add(Format('%d', [Hint])); + end; + if FCurrentImportDirIndex = -1 then SubItems.Add(ImportLib.Name); + case ResolveCheck of + icUnresolved: ImageIndex := imgUnresolvedImport; + icResolved, icNotChecked: ImageIndex := imgImport; + end; + end; +end; + +procedure TFileViewerChild.ExportListViewColumnClick(Sender: TObject; Column: TListColumn); +begin + UpdateSortData(Column); + ExportListViewSort; +end; + +procedure TFileViewerChild.ImportListViewColumnClick(Sender: TObject; Column: TListColumn); +begin + UpdateSortData(Column); + ImportListViewSort; +end; + +procedure TFileViewerChild.UpdateExportView(Node: TTreeNode); +begin + with ExportListView.Items do + begin + BeginUpdate; + if PPeModuleNodeData(Node.Data)^.State in ErrorModules then + FExportViewImage.FileName := '' + else + FExportViewImage.FileName := ModuleToFilename(Node.Text); + Count := FExportViewImage.ExportList.Count; + ExportListViewSort; + EndUpdate; + end; +end; + +procedure TFileViewerChild.UpdateParentImportView(Node: TTreeNode); +var + ParentFileName: TFileName; + NodeState: TPeModuleState; + + procedure ShowModuleColumn(B: Boolean); +begin + with ImportListView do + if (B xor (Columns.Count <> 3)) then + begin + Columns.BeginUpdate; + if B then Columns.Add.Caption := 'Module' else + begin + Columns[3].Free; + if Tag and $FF = 3 then + begin + Tag := $100; + UpdateSortData(Columns[0]); + ImportListViewSort; + end; + end; + Columns.EndUpdate; + end; +end; + +begin + with ImportListView.Items do + begin + BeginUpdate; + if Node.Parent = nil then + ParentFileName := Node.Text + else + ParentFileName := Node.Parent.Text; + ParentFileName := ModuleToFilename(ParentFileName); + NodeState := PPeModuleNodeData(Node.Data)^.State; +{$IFDEF UsePeImagesCache} + FParentImportViewImage := FPeImagesCache[ParentFileName]; + FParentImportViewImage.ImportList.SortList(ilIndex); +{$ELSE} + FParentImportViewImage.FileName := ParentFileName; +{$ENDIF} + if (NodeState in MissingExportModules + ErrorModules) or FAnyRootError then + FParentImportViewImage.ImportList.CheckImports; + FParentImportViewImage.TryGetNamesForOrdinalImports; + if NodeState in ForwardedModules then + begin + ShowModuleColumn(False); + FCurrentImportDirIndex := -1; + FParentImportViewImage.ImportList.FilterModuleName := Node.Text; + Count := FParentImportViewImage.ImportList.AllItemCount; + end else + if Node.Parent = nil then + begin + ShowModuleColumn(True); + FCurrentImportDirIndex := -1; + FParentImportViewImage.ImportList.FilterModuleName := ''; + Count := FParentImportViewImage.ImportList.AllItemCount; + end else + begin + ShowModuleColumn(False); + FCurrentImportDirIndex := PPeModuleNodeData(Node.Data)^.ImportDirectoryIndex; + Count := FParentImportViewImage.ImportList[FCurrentImportDirIndex].Count; + end; + ImportListViewSort; + EndUpdate; + end; +end; + +procedure TFileViewerChild.DependencyTreeViewChange(Sender: TObject; Node: TTreeNode); +begin + UpdateExportView(Node); + UpdateParentImportView(Node); +end; + +procedure TFileViewerChild.DependencyTreeViewDeletion(Sender: TObject; Node: TTreeNode); +begin + Dispose(Node.Data); // PPeModuleNodeData +end; + +procedure TFileViewerChild.ImportListViewSort; +const + MapIndexToSortType: array[0..3] of TJclPeImportSort = (isName, isOrdinal, isHint, isLibImport); +begin + with ImportListView do + begin + if FCurrentImportDirIndex = -1 then + FParentImportViewImage.ImportList.SortAllItemsList(MapIndexToSortType[Tag and $FF], Tag and $100 <> 0) + else + FParentImportViewImage.ImportList[FCurrentImportDirIndex].SortList(MapIndexToSortType[Tag and $FF], Tag and $100 <> 0); + Invalidate; + end; +end; + +procedure TFileViewerChild.ExportListViewSort; +const + MapIndexToSortType: array[0..3] of TJclPeExportSort = + (esName, esOrdinal, esHint, esAddrOrFwd); +begin + with ExportListView do + begin + FExportViewImage.ExportList.SortList(MapIndexToSortType[Tag and $FF], Tag and $100 <> 0); + Invalidate; + end; +end; + +procedure TFileViewerChild.UpdateModulesView; +var + I: Integer; + ExeImage: TJclPeImage; + VI: TJclFileVersionInfo; +begin + with ModulesListView.Items do + begin + BeginUpdate; + try + Clear; + for I := 0 to FModulesList.Count - 1 do + with Add, FModulesList do + begin + ExeImage := FPeImagesCache.Images[ModuleToFilename(Strings[I])]; + Caption := ExtractFileName(ExeImage.FileName); + Data := Objects[I]; + if ExeImage.Status = stOk then + begin + VI := ExeImage.VersionInfo; + with ExeImage.FileProperties, SubItems do + begin + Add(FormatDateTime('ddddd tt', LastWriteTime)); + Add(Format('%.0n', [IntToExtended(Size)])); + end; + with ExeImage, SubItems do + begin + Add(HeaderValues[JclPeHeader_Subsystem]); + Add(HeaderValues[JclPeHeader_ImageBase]); + if Assigned(VI) then Add(VI.FileVersion) else Add(''); + if Assigned(VI) then Add(VI.ProductVersion) else Add(''); + Add(HeaderValues[JclPeHeader_ImageVersion]); + Add(HeaderValues[JclPeHeader_LinkerVersion]); + Add(HeaderValues[JclPeHeader_OperatingSystemVersion]); + Add(HeaderValues[JclPeHeader_SubsystemVersion]); + if Assigned(VI) then Add(VI.FileDescription) else Add(''); + end; + end; + ImageIndex := ModuleImages[TPeModuleState(Objects[I])].ImageIndex; + end; + finally + EndUpdate; + end; + end; +end; + +procedure TFileViewerChild.ModulesListViewInfoTip(Sender: TObject; Item: TListItem; var InfoTip: String); +begin + with Item.SubItems do + if Count > 10 then + InfoTip := Strings[5] + #13#10 + Strings[10] + else + InfoTip := ''; +end; + +function TFileViewerChild.ModuleToFileName(const ModuleName: string): TFileName; +begin + Result := TJclPeImage.ExpandBySearchPath(ModuleName, FBasePath); +end; + +function TFileViewerChild.GetSelectedFileName: TFileName; +var + S: string; +begin + S := ''; + if ActiveControl = DependencyTreeView then + begin + with DependencyTreeView do + if Selected <> nil then + if Selected.Level = 0 then S := FFileName else + S := Selected.Text; + end else + if Activecontrol = ModulesListView then + with ModulesListView do + if Selected <> nil then + S := Selected.Caption; + Result := ModuleToFileName(S); +end; + +procedure TFileViewerChild.ExportListViewDblClick(Sender: TObject); +begin + MainForm.Win32Help1.Execute; +end; + +procedure TFileViewerChild.ModulesListViewDblClick(Sender: TObject); +begin + MainForm.DumpPe1.Execute; +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeDump.dfm b/official/1.104/examples/windows/delphitools/peviewer/PeDump.dfm new file mode 100644 index 0000000..54f3017 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeDump.dfm @@ -0,0 +1,499 @@ +object PeDumpChild: TPeDumpChild + Left = 195 + Top = 152 + AutoScroll = False + Caption = 'PeDumpChild' + ClientHeight = 347 + ClientWidth = 592 + Color = clBtnFace + Constraints.MinHeight = 200 + Constraints.MinWidth = 250 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + FormStyle = fsMDIChild + OldCreateOrder = False + PopupMenu = PopupMenu1 + Position = poDefault + ShowHint = True + Visible = True + OnClose = FormClose + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object Splitter1: TSplitter + Left = 121 + Top = 0 + Width = 3 + Height = 347 + Cursor = crHSplit + ResizeStyle = rsUpdate + end + object SectionTreeView: TTreeView + Left = 0 + Top = 0 + Width = 121 + Height = 347 + Align = alLeft + HideSelection = False + HotTrack = True + Images = MainForm.IconImageList + Indent = 19 + ReadOnly = True + TabOrder = 0 + OnChange = SectionTreeViewChange + OnDblClick = SectionTreeViewDblClick + OnExpanding = SectionTreeViewExpanding + end + object PageControl1: TPageControl + Left = 124 + Top = 0 + Width = 468 + Height = 347 + ActivePage = ItemsTab + Align = alClient + TabOrder = 1 + TabStop = False + object ItemsTab: TTabSheet + Caption = 'ItemsTab' + object ItemsListView: TListView + Left = 0 + Top = 0 + Width = 460 + Height = 319 + Align = alClient + Columns = < + item + Caption = 'Item' + Width = 200 + end + item + Caption = 'Value' + Width = 100 + end> + ColumnClick = False + GridLines = True + HideSelection = False + HotTrackStyles = [] + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.IconImageList + TabOrder = 0 + ViewStyle = vsReport + OnData = ItemsListViewData + end + end + object DirectoryTab: TTabSheet + Caption = 'DirectoryTab' + ImageIndex = 1 + object DirectoryListView: TListView + Left = 0 + Top = 0 + Width = 460 + Height = 319 + Align = alClient + Columns = < + item + Caption = 'Directory' + Width = 120 + end + item + Caption = 'RVA' + Width = 80 + end + item + Alignment = taRightJustify + Caption = 'Size' + Width = 80 + end + item + Alignment = taRightJustify + Caption = 'Percent of file' + Width = 80 + end + item + Caption = 'Section' + Width = 70 + end> + ColumnClick = False + GridLines = True + HideSelection = False + HotTrackStyles = [] + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.IconImageList + TabOrder = 0 + ViewStyle = vsReport + OnCustomDrawItem = DirectoryListViewCustomDrawItem + OnData = DirectoryListViewData + end + end + object ImportTab: TTabSheet + Caption = 'ImportTab' + ImageIndex = 2 + object ImportListView: TListView + Left = 0 + Top = 0 + Width = 460 + Height = 300 + Align = alClient + Columns = < + item + Caption = 'Name' + Width = 230 + end + item + Caption = 'Ordinal' + Width = 60 + end + item + Caption = 'Hint' + end + item + Caption = 'Module' + Width = 90 + end> + HideSelection = False + HotTrackStyles = [] + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.IconImageList + TabOrder = 0 + ViewStyle = vsReport + OnColumnClick = ImportListViewColumnClick + OnData = ImportListViewData + OnDblClick = ImportListViewDblClick + end + object ImportStatusBar: TStatusBar + Left = 0 + Top = 300 + Width = 460 + Height = 19 + Panels = < + item + Width = 90 + end + item + Width = 90 + end + item + Width = 50 + end> + SimplePanel = False + end + end + object ExportTab: TTabSheet + Caption = 'ExportTab' + ImageIndex = 3 + object ExportListView: TListView + Left = 0 + Top = 0 + Width = 460 + Height = 300 + Align = alClient + Columns = < + item + Caption = 'Name' + Width = 250 + end + item + Alignment = taRightJustify + Caption = 'Ordinal' + end + item + Alignment = taRightJustify + Caption = 'Hint' + end + item + Caption = 'Address' + Width = 70 + end + item + Caption = 'Forwarded' + Width = 100 + end + item + Caption = 'Section' + end> + HideSelection = False + HotTrackStyles = [] + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.IconImageList + TabOrder = 0 + ViewStyle = vsReport + OnColumnClick = ExportListViewColumnClick + OnData = ExportListViewData + OnDblClick = ImportListViewDblClick + end + object ExportStatusBar: TStatusBar + Left = 0 + Top = 300 + Width = 460 + Height = 19 + Panels = < + item + Width = 90 + end + item + Width = 90 + end + item + Width = 100 + end + item + Width = 50 + end> + SimplePanel = False + end + end + object ResourceTab: TTabSheet + Caption = 'ResourceTab' + ImageIndex = 4 + object ResourceListView: TListView + Left = 0 + Top = 0 + Width = 460 + Height = 319 + Align = alClient + Columns = < + item + Caption = 'Names' + Width = 200 + end + item + Caption = 'Offset' + Width = 100 + end + item + Caption = 'Size' + end + item + Caption = 'Languages' + Width = 70 + end> + ColumnClick = False + GridLines = True + HideSelection = False + HotTrackStyles = [] + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.IconImageList + TabOrder = 0 + ViewStyle = vsReport + OnData = ResourceListViewData + end + end + object SectionTab: TTabSheet + Caption = 'SectionTab' + ImageIndex = 5 + object SectionListView: TListView + Left = 0 + Top = 0 + Width = 460 + Height = 319 + Align = alClient + Columns = < + item + Caption = 'Section' + Width = 70 + end + item + Caption = 'VirtSize' + Width = 70 + end + item + Caption = 'RVA' + Width = 70 + end + item + Caption = 'PhysSize' + Width = 70 + end + item + Caption = 'PhysOfs' + Width = 70 + end + item + Caption = 'Flags' + Width = 70 + end + item + Caption = 'Info' + end + item + Alignment = taRightJustify + Caption = 'Percent of file' + Width = 79 + end> + ColumnClick = False + GridLines = True + HideSelection = False + HotTrackStyles = [] + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.IconImageList + TabOrder = 0 + ViewStyle = vsReport + OnData = SectionListViewData + end + end + object ResourceDirTab: TTabSheet + Caption = 'ResourceDirTab' + ImageIndex = 6 + object ResourceDirListView: TListView + Left = 0 + Top = 0 + Width = 460 + Height = 319 + Align = alClient + Columns = < + item + Caption = 'Type' + Width = 200 + end + item + Caption = 'Count' + Width = 100 + end> + ColumnClick = False + GridLines = True + HideSelection = False + HotTrackStyles = [] + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.IconImageList + TabOrder = 0 + ViewStyle = vsReport + OnData = ResourceDirListViewData + end + end + object RelocTab: TTabSheet + Caption = 'RelocTab' + ImageIndex = 7 + object RelocListView: TListView + Left = 0 + Top = 0 + Width = 460 + Height = 300 + Align = alClient + Columns = < + item + Caption = 'Address' + Width = 200 + end + item + Caption = 'Type' + Width = 100 + end> + ColumnClick = False + GridLines = True + HideSelection = False + HotTrackStyles = [] + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.IconImageList + TabOrder = 0 + ViewStyle = vsReport + OnData = RelocListViewData + end + object RelocStatusBar: TStatusBar + Left = 0 + Top = 300 + Width = 460 + Height = 19 + Panels = < + item + Width = 100 + end + item + Width = 50 + end> + SimplePanel = False + end + end + object DebugTab: TTabSheet + Caption = 'DebugTab' + ImageIndex = 8 + object DebugListView: TListView + Left = 0 + Top = 0 + Width = 460 + Height = 319 + Align = alClient + Columns = < + item + Caption = 'Type' + Width = 100 + end + item + Caption = 'Size' + Width = 70 + end + item + Caption = 'RVA' + Width = 70 + end + item + Caption = 'FilePtr' + Width = 70 + end + item + Caption = 'Version' + end> + ColumnClick = False + GridLines = True + HideSelection = False + HotTrackStyles = [] + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.IconImageList + TabOrder = 0 + ViewStyle = vsReport + OnData = DebugListViewData + end + end + end + object PopupMenu1: TPopupMenu + Images = MainForm.ToolbarImagesList + Left = 16 + Top = 312 + object Copytoclipboard1: TMenuItem + Action = MainForm.Copy1 + end + object Selectall1: TMenuItem + Action = MainForm.SelectAll1 + end + object N1: TMenuItem + Caption = '-' + end + object Openlibrary1: TMenuItem + Action = MainForm.OpenLibrary1 + end + object FindinWin32APIhelp1: TMenuItem + Action = MainForm.InvokeHelp1 + Default = True + end + end +end diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeDump.pas b/official/1.104/examples/windows/delphitools/peviewer/PeDump.pas new file mode 100644 index 0000000..ad6f776 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeDump.pas @@ -0,0 +1,943 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is PeDump.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2007-02-04 19:37:27 +0100 (dim., 04 févr. 2007) $ } +{ } +{**************************************************************************************************} + +unit PeDump; + +{$I jcl.inc} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + JclPeImage, ComCtrls, ExtCtrls, Menus; + +type + TPeDumpViewCategory = (vcHeader, vcDirectory, vcSection, vcLoadConfig, + vcImport, vcExport, vcResource, vcRelocation, vcDebug); + + TPeDumpChild = class(TForm) + SectionTreeView: TTreeView; + Splitter1: TSplitter; + PageControl1: TPageControl; + ItemsTab: TTabSheet; + DirectoryTab: TTabSheet; + ItemsListView: TListView; + DirectoryListView: TListView; + ImportTab: TTabSheet; + ImportListView: TListView; + ExportTab: TTabSheet; + ExportListView: TListView; + PopupMenu1: TPopupMenu; + Copytoclipboard1: TMenuItem; + Selectall1: TMenuItem; + N1: TMenuItem; + Openlibrary1: TMenuItem; + FindinWin32APIhelp1: TMenuItem; + ResourceTab: TTabSheet; + ResourceListView: TListView; + SectionTab: TTabSheet; + SectionListView: TListView; + ResourceDirTab: TTabSheet; + ResourceDirListView: TListView; + ExportStatusBar: TStatusBar; + ImportStatusBar: TStatusBar; + RelocTab: TTabSheet; + RelocListView: TListView; + RelocStatusBar: TStatusBar; + DebugTab: TTabSheet; + DebugListView: TListView; + procedure FormCreate(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure ItemsListViewData(Sender: TObject; Item: TListItem); + procedure SectionTreeViewChange(Sender: TObject; Node: TTreeNode); + procedure DirectoryListViewData(Sender: TObject; Item: TListItem); + procedure ImportListViewColumnClick(Sender: TObject; + Column: TListColumn); + procedure ImportListViewData(Sender: TObject; Item: TListItem); + procedure FormDestroy(Sender: TObject); + procedure ExportListViewData(Sender: TObject; Item: TListItem); + procedure ExportListViewColumnClick(Sender: TObject; + Column: TListColumn); + procedure SectionTreeViewDblClick(Sender: TObject); + procedure SectionListViewData(Sender: TObject; Item: TListItem); + procedure ResourceListViewData(Sender: TObject; Item: TListItem); + procedure ResourceDirListViewData(Sender: TObject; Item: TListItem); + procedure ImportListViewDblClick(Sender: TObject); + procedure DirectoryListViewCustomDrawItem(Sender: TCustomListView; + Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); + procedure SectionTreeViewExpanding(Sender: TObject; Node: TTreeNode; + var AllowExpansion: Boolean); + procedure RelocListViewData(Sender: TObject; Item: TListItem); + procedure DebugListViewData(Sender: TObject; Item: TListItem); + procedure ItemsListViewInfoTip(Sender: TObject; Item: TListItem; + var InfoTip: String); + private + FCurrentResourceDirectory: TJclPeResourceItem; + FCurrentImportIndex: Integer; + FCurrentRelocationIndex: Integer; + FOriginalPageControlWndProc: TWndMethod; + FPeImage: TJclPeImage; + FGroupImports: Boolean; + FUpdatingView: Boolean; + FUnmangleNames: Boolean; + function GetFileName: TFileName; + function GetHasDirectory(const Directory: DWORD): Boolean; + function GetNodeCategory(Node: TTreeNode): TPeDumpViewCategory; + procedure ExportListViewSort; + procedure ImportListViewSort; + function IsListViewActiveAndFocused(ListView: TListView): Boolean; + procedure PageControlWndProc(var Message: TMessage); + procedure UpdateView; + procedure UpdateImportView(Node: TTreeNode); + procedure UpdateRelocationView(Node: TTreeNode); + procedure UpdateResourceDir; + procedure UpdateResourceView(Directory: TJclPeResourceItem); + class procedure UpdateSortData(Column: TListColumn); + procedure SetGroupImports(const Value: Boolean); + procedure SetUnmangleNames(const Value: Boolean); + function FunctionName(const Name: string): string; + function HeadersRemark(HeaderItem: TJclPeHeader): string; + public + constructor CreateEx(AOwner: TComponent; APeImage: TJclPeImage); + function ActiveLibName: string; + function ActiveWin32Function: string; + property FileName: TFileName read GetFileName; + property HasDirectory[const Directory: DWORD]: Boolean read GetHasDirectory; + property GroupImports: Boolean read FGroupImports write SetGroupImports; + property PeImage: TJclPeImage read FPeImage; + property UnmangleNames: Boolean read FUnmangleNames write SetUnmangleNames; + end; + +var + PeDumpChild: TPeDumpChild; + +implementation + +{$R *.DFM} + +uses + CommCtrl, PeViewerMain, ToolsUtils, PeResource, JclStrings, JclWin32; + +resourcestring + RsHeader = 'Header'; + RsDirectory = 'Directory'; + RsSection = 'Sections'; + RsLoadConfig = 'Load config'; + RsImport = 'Imports'; + RsExport = 'Exports'; + RsRelocation = 'Relocations'; + RsResource = 'Resources'; + RsDebug = 'Debug'; + RsNumberOfNames = 'Names: %d'; + RsNumberOfFunctions = 'Functions: %d'; + RsLinkerProducer = 'Linker: %s'; + RsOrdinalBase = 'Ordinal base: %d'; + RsAddresses = 'Addresses: %d'; + +function GetCategoryName(Category: TPeDumpViewCategory): string; +begin + case Category of + vcHeader: Result := RsHeader; + vcDirectory: Result := RsDirectory; + vcSection: Result := RsSection; + vcLoadConfig: Result := RsLoadConfig; + vcImport: Result := RsImport; + vcExport: Result := RsExport; + vcResource: Result := RsResource; + vcRelocation: Result := RsRelocation; + vcDebug: Result := RsDebug; + end; +end; + +function ImageIndexFromImportKind(Kind: TJclPeImportKind): Integer; +begin + case Kind of + ikImport: + Result := icoImports; + ikDelayImport: + Result := icoDelayImport; + ikBoundImport: + Result := icoBoundImport; + else + Result := 0; + end; +end; + +{ TPeDumpChild } + +function TPeDumpChild.ActiveLibName: string; +begin + with SectionTreeView do + if (Selected <> nil) and (Selected.Level = 1) and + (TPeDumpViewCategory(Selected.Parent.Data) = vcImport) then + Result := FPeImage.ExpandBySearchPath(Selected.Text, ExtractFilePath(FileName)) + else + Result := ''; +end; + +function TPeDumpChild.ActiveWin32Function: string; +begin + Result := ''; + if IsListViewActiveAndFocused(ImportListView) then + Result := ImportListView.ItemFocused.Caption + else + if IsListViewActiveAndFocused(ExportListView) then + Result := ExportListView.ItemFocused.Caption + else + Result := ''; + if Pos('@', Result) > 0 then + Result := '' + else + Result := StrRemoveChars(Result, ['[', ']']); +end; + +constructor TPeDumpChild.CreateEx(AOwner: TComponent; APeImage: TJclPeImage); +begin + inherited Create(AOwner); + FPeImage := APeImage; + Caption := ExtractFileName(FileName); + {$IFDEF COMPILER5_UP} + ItemsListView.OnInfoTip := ItemsListViewInfoTip; + {$ENDIF COMPILER5_UP} +end; + +function TPeDumpChild.GetFileName: TFileName; +begin + if FPeImage = nil then Result := '' else Result := FPeImage.FileName; +end; + +function TPeDumpChild.GetHasDirectory(const Directory: DWORD): Boolean; +begin + if FPeImage = nil then + Result := False + else + Result := FPeImage.DirectoryExists[Directory]; +end; + +procedure TPeDumpChild.PageControlWndProc(var Message: TMessage); +begin +// remove PageControl's border + FOriginalPageControlWndProc(Message); + with Message do + if (Msg = TCM_ADJUSTRECT) and (Message.WParam = 0) then + InflateRect(PRect(LParam)^, 4, 4); +end; + +procedure TPeDumpChild.FormCreate(Sender: TObject); +var + I: Integer; +begin + with PageControl1 do + begin + for I := 0 to PageCount - 1 do Pages[I].TabVisible := False; + FOriginalPageControlWndProc := WindowProc; + WindowProc := PageControlWndProc; + ActivePage := ItemsTab; + Realign; + end; + + ImportListView.Tag := $100; + UpdateSortData(ImportListView.Columns[0]); + ExportListView.Tag := $100; + UpdateSortData(ExportListView.Columns[0]); + + UpdateView; +end; + +procedure TPeDumpChild.FormClose(Sender: TObject; var Action: TCloseAction); +var + F: TForm; +begin + Fix_ListViewBeforeClose(Self); + F := MainForm.FindPeResourceView(FPeImage); + if F <> nil then F.Close; + Action := caFree; +end; + +procedure TPeDumpChild.UpdateView; + + procedure BuildImageTree; +var + Category: TPeDumpViewCategory; + TempNode: TTreeNode; + + function AddCategoryNode(ImageIndex: Integer): TTreeNode; +begin + Result := SectionTreeView.Items.AddChildObject(nil, GetCategoryName(Category), + Pointer(Category)); + Result.ImageIndex := ImageIndex; + Result.SelectedIndex := ImageIndex; +end; + +begin + FPeImage.TryGetNamesForOrdinalImports; + with SectionTreeView do + begin + Items.BeginUpdate; + try + Items.Clear; + for Category := Low(Category) to High(Category) do + case Category of + vcHeader: + AddCategoryNode(icoHeader); + vcDirectory: + AddCategoryNode(icoDirectory); + vcSection: + AddCategoryNode(icoSection); + vcLoadConfig: + if FPeImage.DirectoryExists[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG] then + AddCategoryNode(icoLoadConfig); + vcImport: + if FPeImage.DirectoryExists[IMAGE_DIRECTORY_ENTRY_IMPORT] then + begin + TempNode := AddCategoryNode(icoImports); + TempNode.HasChildren := True; + end; + vcExport: + if FPeImage.DirectoryExists[IMAGE_DIRECTORY_ENTRY_EXPORT] then + AddCategoryNode(icoExports); + vcRelocation: + if FPeImage.DirectoryExists[IMAGE_DIRECTORY_ENTRY_BASERELOC] then + begin + TempNode := AddCategoryNode(icoRelocation); + TempNode.HasChildren := True; + end; + vcResource: + if FPeImage.DirectoryExists[IMAGE_DIRECTORY_ENTRY_RESOURCE] then + begin + TempNode := AddCategoryNode(icoResources); + TempNode.HasChildren := True; + end; + vcDebug: + if FPeImage.DirectoryExists[IMAGE_DIRECTORY_ENTRY_DEBUG] then + AddCategoryNode(icoDebug); + end; + Selected := Items.GetFirstNode; + finally + Items.EndUpdate; + end; + end; +end; + +begin + BuildImageTree; + + with DirectoryListView do + begin + Items.Count := IMAGE_NUMBEROF_DIRECTORY_ENTRIES; + ItemFocused := Items[0]; + end; + with SectionListView do + begin + Items.Count := FPeImage.ImageSectionCount; + if Items.Count > 0 then ItemFocused := Items[0]; + end; + ExportListView.Items.Count := FPeImage.ExportList.Count; + UpdateResourceDir; + with ExportStatusBar, FPeImage.ExportList do + begin + Panels[0].Text := Format(RsNumberOfNames, [Count]); + Panels[1].Text := Format(RsNumberOfFunctions, [FunctionCount]); + Panels[2].Text := Format(RsOrdinalBase, [Base]); + end; +end; + +procedure TPeDumpChild.ItemsListViewData(Sender: TObject; Item: TListItem); +begin + with Item, FPeImage do + case TListView(Sender).Tag of + 0: begin + Caption := HeaderNames(TJclPeHeader(Index)); + SubItems.Add(HeaderValues[TJclPeHeader(Index)]); + end; + 1: begin + Caption := LoadConfigNames(TJclLoadConfig(Index)); + SubItems.Add(LoadConfigValues[TJclLoadConfig(Index)]); + end; + end; +end; + +procedure TPeDumpChild.SectionTreeViewExpanding(Sender: TObject; + Node: TTreeNode; var AllowExpansion: Boolean); +var + I: Integer; + TempNode: TTreeNode; + ResItem: TJclPeResourceItem; +begin + if Node.GetFirstChild = nil then with SectionTreeView do + begin + Items.BeginUpdate; + case GetNodeCategory(Node) of + vcImport: + if GroupImports then + begin + for I := 0 to FPeImage.ImportList.UniqueLibItemCount - 1 do + with Items.AddChild(Node, FPeImage.ImportList.UniqueLibNames[I]) do + begin + Data := Pointer(-1); + ImageIndex := ImageIndexFromImportKind(FPeImage.ImportList.UniqueLibItems[I].ImportKind); + SelectedIndex := ImageIndex; + end; + end else + begin +// FPeImage.ImportList.SortList(ilName); + for I := 0 to FPeImage.ImportList.Count - 1 do + with Items.AddChild(Node, FPeImage.ImportList[I].Name) do + begin + Data := Pointer(FPeImage.ImportList[I].ImportDirectoryIndex); + ImageIndex := ImageIndexFromImportKind(FPeImage.ImportList[I].ImportKind); + SelectedIndex := ImageIndex; + end; + end; + vcResource: + if Node.Level = 0 then + for I := 0 to FPeImage.ResourceList.Count - 1 do + begin + ResItem := FPeImage.ResourceList[I]; + TempNode := Items.AddChildObject(Node, ResItem.ResourceTypeStr, ResItem); + TempNode.ImageIndex := icoResources; + TempNode.SelectedIndex := TempNode.ImageIndex; + TempNode.HasChildren := True; + end + else + begin + ResItem := TJclPeResourceItem(Node.Data); + for I := 0 to ResItem.List.Count - 1 do + with Items.AddChildObject(Node, ResItem.List[I].Name, ResItem.List[I]) do + begin + ImageIndex := icoResources; + SelectedIndex := ImageIndex; + end; + end; + vcRelocation: + for I := 0 to FPeImage.RelocationList.Count - 1 do + with Items.AddChildObject(Node, + Format('%.8x', [FPeImage.RelocationList[I].VirtualAddress]), Pointer(I)) do + begin + ImageIndex := icoRelocation; + SelectedIndex := ImageIndex; + end; + end; + Items.EndUpdate; + end; +end; + +procedure TPeDumpChild.SectionTreeViewChange(Sender: TObject; Node: TTreeNode); +begin + if FUpdatingView then Exit; + case GetNodeCategory(Node) of + vcHeader: + begin + ItemsListView.Items.Count := Integer(High(TJclPeHeader)) + 1; + ItemsListView.Tag := 0; // Header items + ItemsListView.Invalidate; + PageControl1.ActivePage := ItemsTab; + end; + vcDirectory: PageControl1.ActivePage := DirectoryTab; + vcSection: PageControl1.ActivePage := SectionTab; + vcLoadConfig: + begin + ItemsListView.Items.Count := Integer(High(TJclLoadConfig)) + 1; + ItemsListView.Tag := 1; // Load config items + ItemsListView.Invalidate; + PageControl1.ActivePage := ItemsTab; + end; + vcImport: + begin + if Node.Level = 0 then UpdateImportView(nil) else UpdateImportView(Node); + PageControl1.ActivePage := ImportTab; + end; + vcExport: + PageControl1.ActivePage := ExportTab; + vcRelocation: + begin + UpdateRelocationView(Node); + PageControl1.ActivePage := RelocTab; + end; + vcResource: + if Node.Level = 0 then + begin + UpdateResourceDir; + PageControl1.ActivePage := ResourceDirTab; + end else + begin + UpdateResourceView(TJclPeResourceItem(Node.Data)); + PageControl1.ActivePage := ResourceTab; + end; + vcDebug: + begin + DebugListView.Items.Count := FPeImage.DebugList.Count; + PageControl1.ActivePage := DebugTab; + end; + end; +end; + +procedure TPeDumpChild.DirectoryListViewData(Sender: TObject; Item: TListItem); +const + DirectoryIcons: array[0..15] of Integer = + (icoExports, icoImports, icoResources, -1, -1, icoRelocation, icoDebug, + -1, -1, -1, icoLoadConfig, icoBoundImport, -1, icoDelayImport, -1, -1); +var + Percent: Single; +begin + if FPeImage.Target = taWin64 then + begin + with Item, FPeImage.OptionalHeader64 do + begin + Percent := DataDirectory[Index].Size * 100 / SizeOfImage; + Caption := FPeImage.DirectoryNames(Index); + Data := Pointer(DataDirectory[Index].Size); + if Integer(Data) <> 0 then ImageIndex := DirectoryIcons[Index]; + SubItems.Add(Format('%.8x', [DataDirectory[Index].VirtualAddress])); + SubItems.Add(Format('%.8x', [DataDirectory[Index].Size])); + SubItems.Add(Format('%3.1f%%', [Percent])); + SubItems.Add(FPeImage.ImageSectionNameFromRva[DataDirectory[Index].VirtualAddress]); + end; + end + else + begin + with Item, FPeImage.OptionalHeader32 do + begin + Percent := DataDirectory[Index].Size * 100 / SizeOfImage; + Caption := FPeImage.DirectoryNames(Index); + Data := Pointer(DataDirectory[Index].Size); + if Integer(Data) <> 0 then ImageIndex := DirectoryIcons[Index]; + SubItems.Add(Format('%.8x', [DataDirectory[Index].VirtualAddress])); + SubItems.Add(Format('%.8x', [DataDirectory[Index].Size])); + SubItems.Add(Format('%3.1f%%', [Percent])); + SubItems.Add(FPeImage.ImageSectionNameFromRva[DataDirectory[Index].VirtualAddress]); + end; + end; +end; + +class procedure TPeDumpChild.UpdateSortData(Column: TListColumn); +var + ListView: TListView; + I: Integer; +begin + ListView := TListView(TListColumns(Column.Collection).Owner); + ListView.Columns.BeginUpdate; + with ListView.Columns do + for I := 0 to Count - 1 do + Items[I].ImageIndex := -1; + if ListView.Tag and $FF = Column.Index then + ListView.Tag := ListView.Tag xor $100 + else + ListView.Tag := Column.Index; + if ListView.Tag and $100 = 0 then + Column.ImageIndex := icoSortDesc + else + Column.ImageIndex := icoSortAsc; + ListView.Columns.EndUpdate; +end; + +procedure TPeDumpChild.ImportListViewColumnClick(Sender: TObject; Column: TListColumn); +begin + UpdateSortData(Column); + ImportListViewSort; +end; + +procedure TPeDumpChild.UpdateImportView(Node: TTreeNode); +const + LinkerProducers: array[TJclPeLinkerProducer] of string = + ('Borland', 'Microsoft'); +begin + FCurrentImportIndex := -1; + if Node = nil then + begin + FPeImage.ImportList.FilterModuleName := ''; + ImportListView.Items.Count := FPeImage.ImportList.AllItemCount; + end else + if Integer(Node.Data) = -1 then + begin + FPeImage.ImportList.FilterModuleName := Node.Text; + ImportListView.Items.Count := FPeImage.ImportList.AllItemCount; + end else + begin + FCurrentImportIndex := Integer(Node.Data); + ImportListView.Items.Count := FPeImage.ImportList[FCurrentImportIndex].Count; + end; + ImportListViewSort; + ImportListView.Invalidate; + with ImportStatusBar, FPeImage.ImportList do + begin + Panels[0].Text := Format(RsNumberOfFunctions, [ImportListView.Items.Count]); + Panels[1].Text := Format(RsLinkerProducer, [LinkerProducers[LinkerProducer]]); + end; +end; + +procedure TPeDumpChild.ImportListViewData(Sender: TObject; Item: TListItem); +var + ViewItem: TJclPeImportFuncItem; +begin + if FCurrentImportIndex = -1 then + ViewItem := FPeImage.ImportList.AllItems[Item.Index] + else + ViewItem := FPeImage.ImportList[FCurrentImportIndex][Item.Index]; + with Item, ViewItem do + begin + if IndirectImportName then + Caption := Format('[%s]', [Name]) + else + Caption := FunctionName(Name); + if IsByOrdinal then + begin + SubItems.Add(Format('%d', [Ordinal])); + SubItems.Add(''); + end else + begin + SubItems.Add(''); + SubItems.Add(Format('%d', [Hint])); + end; + SubItems.Add(ImportLib.Name); + ImageIndex := ImageIndexFromImportKind(ImportLib.ImportKind); + end; +end; + +procedure TPeDumpChild.FormDestroy(Sender: TObject); +begin + FPeImage.Free; +end; + +procedure TPeDumpChild.ExportListViewData(Sender: TObject; Item: TListItem); +begin + with Item, FPeImage.ExportList[Item.Index] do + begin + Caption := FunctionName(Name); + SubItems.Add(Format('%d', [Ordinal])); + SubItems.Add(Format('%d', [Hint])); + SubItems.Add(Format('%.8x', [Address])); + SubItems.Add(ForwardedName); + SubItems.Add(SectionName); + ImageIndex := 3; + end; +end; + +procedure TPeDumpChild.ExportListViewColumnClick(Sender: TObject; + Column: TListColumn); +begin + UpdateSortData(Column); + ExportListViewSort; +end; + +function TPeDumpChild.IsListViewActiveAndFocused(ListView: TListView): Boolean; +begin + Result := (ActiveControl = ListView) and (ListView.ItemFocused <> nil); +end; + +procedure TPeDumpChild.SectionTreeViewDblClick(Sender: TObject); +begin + MainForm.OpenLibrary1.Execute; +end; + +procedure TPeDumpChild.SectionListViewData(Sender: TObject; Item: TListItem); +var + Percent: Single; +begin + with FPeImage, Item do + begin + Caption := ImageSectionNames[Item.Index]; + with ImageSectionHeaders[Item.Index] do + begin + if FPeImage.Target = taWin64 then + Percent := SizeOfRawData * 100 / OptionalHeader64.SizeOfImage + else + Percent := SizeOfRawData * 100 / OptionalHeader32.SizeOfImage; + SubItems.Add(Format('%.8x', [Misc.VirtualSize])); + SubItems.Add(Format('%.8x', [VirtualAddress])); + SubItems.Add(Format('%.8x', [SizeOfRawData])); + SubItems.Add(Format('%.8x', [PointerToRawData])); + SubItems.Add(Format('%.8x', [Characteristics])); + SubItems.Add(ShortSectionInfo(Characteristics)); + SubItems.Add(Format('%3.1f%%', [Percent])); + end; + end; +end; + +procedure TPeDumpChild.UpdateResourceView(Directory: TJclPeResourceItem); +begin + ResourceListView.Items.Count := 0; + FCurrentResourceDirectory := Directory; + ResourceListView.Items.Count := Directory.List.Count; + ResourceListView.Invalidate; +end; + +procedure TPeDumpChild.ResourceListViewData(Sender: TObject; Item: TListItem); +var + DirSize, I: Integer; +begin + with Item, FCurrentResourceDirectory.List[Item.Index] do + begin + if IsDirectory then + begin + Caption := Name; + if (List.Count = 1) and (StrToIntDef(List[0].Name, 0) = LANG_NEUTRAL) then + begin // only neutral language + DirSize := List[0].DataEntry^.Size; + SubItems.Add(Format('(%x)', [List[0].DataEntry^.OffsetToData])); + end else + begin + DirSize := 0; + for I := 0 to List.Count - 1 do + Inc(DirSize, List[I].DataEntry^.Size); + SubItems.Add(''); + end; + SubItems.Add(Format('%x', [DirSize])); + SubItems.Add(Format('%d', [List.Count])); + end else + begin + Caption := Format('%s (%s)', [ParentItem.Name, Name]); + SubItems.Add(Format('%x', [DataEntry^.OffsetToData])); + SubItems.Add(Format('%x', [DataEntry^.Size])); + SubItems.Add(LangNameFromName(Name)); + end; + end; +end; + +procedure TPeDumpChild.UpdateResourceDir; +begin + ResourceDirListView.Items.Count := FPeImage.ResourceList.Count; + ResourceDirListView.Invalidate; +end; + +procedure TPeDumpChild.ResourceDirListViewData(Sender: TObject; Item: TListItem); +begin + with Item, FPeImage.ResourceList[Item.Index] do + begin + Caption := ResourceTypeStr; + SubItems.Add(Format('%d', [List.Count])); + end; +end; + +procedure TPeDumpChild.UpdateRelocationView(Node: TTreeNode); +begin + if Node.Level = 0 then + begin + FCurrentRelocationIndex := -1; + RelocListView.Items.Count := FPeImage.RelocationList.AllItemCount; + end else + begin + FCurrentRelocationIndex := Integer(Node.Data); + RelocListView.Items.Count := FPeImage.RelocationList[FCurrentRelocationIndex].Count; + end; + RelocStatusBar.Panels[0].Text := Format(RsAddresses, [RelocListView.Items.Count]); + RelocListView.Invalidate; +end; + +procedure TPeDumpChild.RelocListViewData(Sender: TObject; Item: TListItem); +var + ViewItem: TJclPeRelocation; + + function RelocationTypeStr(RelocType: Byte): string; +begin + case RelocType of + IMAGE_REL_BASED_ABSOLUTE: Result := 'ABSOLUTE'; + IMAGE_REL_BASED_HIGHLOW: Result := 'HIGHLOW'; + else + Result := IntToStr(RelocType); + end; +end; + +begin + if FCurrentRelocationIndex = -1 then + ViewItem := FPeImage.RelocationList.AllItems[Item.Index] + else + ViewItem := FPeImage.RelocationList[FCurrentRelocationIndex][Item.Index]; + with Item, ViewItem do + begin + Caption := Format('%.8x', [VirtualAddress]); + SubItems.Add(RelocationTypeStr(RelocType)); + end; +end; + +procedure TPeDumpChild.DebugListViewData(Sender: TObject; Item: TListItem); +begin + with Item, FPeImage.DebugList[Item.Index] do + begin + Caption := FPeImage.DebugTypeNames(_Type); + SubItems.Add(Format('%.8x', [SizeOfData])); + SubItems.Add(Format('%.8x', [AddressOfRawData])); + SubItems.Add(Format('%.8x', [PointerToRawData])); + SubItems.Add(Format('%d.%.2d', [MajorVersion, MinorVersion])); + end; +end; + +procedure TPeDumpChild.ImportListViewDblClick(Sender: TObject); +begin + MainForm.InvokeHelp1.Execute; +end; + +procedure TPeDumpChild.DirectoryListViewCustomDrawItem(Sender: TCustomListView; + Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); +begin + if Integer(Item.Data) = 0 then Sender.Canvas.Font.Color := clGrayText; +end; + +procedure TPeDumpChild.SetGroupImports(const Value: Boolean); +var + NodeIndex: Integer; + TempNode: TTreeNode; + WasExpanded: Boolean; +begin + if FGroupImports <> Value then + begin + FGroupImports := Value; + with SectionTreeView do + begin + Items.BeginUpdate; + FUpdatingView := True; + try + if Assigned(Selected) then + begin + if Selected.Level > 0 then + begin + NodeIndex := Selected.Parent.Index; + WasExpanded := True; + end else + begin + NodeIndex := Selected.Index; + WasExpanded := Selected.Expanded; + end; + end else + begin + NodeIndex := 0; + WasExpanded := False; + end; + Self.UpdateView; + TempNode := Items.GetFirstNode; + while NodeIndex > 0 do + begin + TempNode := TempNode.GetNextSibling; + Dec(NodeIndex); + end; + FUpdatingView := False; + Selected := TempNode; + if WasExpanded then Selected.Expand(False); + finally + Items.EndUpdate; + end; + end; + end; +end; + +procedure TPeDumpChild.ImportListViewSort; +const + MapIndexToSortType: array[0..3] of TJclPeImportSort = (isName, isOrdinal, isHint, isLibImport); +begin + with ImportListView do + begin + if FCurrentImportIndex = -1 then + FPeImage.ImportList.SortAllItemsList(MapIndexToSortType[Tag and $FF], Tag and $100 <> 0) + else + FPeImage.ImportList[FCurrentImportIndex].SortList(MapIndexToSortType[Tag and $FF], Tag and $100 <> 0); + Invalidate; + end; +end; + +procedure TPeDumpChild.ExportListViewSort; +const + MapIndexToSortType: array[0..5] of TJclPeExportSort = + (esName, esOrdinal, esHint, esAddress, esForwarded, esSection); +begin + with ExportListView do + begin + FPeImage.ExportList.SortList(MapIndexToSortType[Tag and $FF], Tag and $100 <> 0); + Invalidate; + end; +end; + +function TPeDumpChild.GetNodeCategory(Node: TTreeNode): TPeDumpViewCategory; +begin + while Node.Parent <> nil do Node := Node.Parent; + Result := TPeDumpViewCategory(Node.Data); +end; + +procedure TPeDumpChild.SetUnmangleNames(const Value: Boolean); +begin + if FUnmangleNames <> Value then + begin + FUnmangleNames := Value; + ImportListView.Invalidate; + ExportListView.Invalidate; + end; +end; + +function TPeDumpChild.FunctionName(const Name: string): string; +begin + if FUnmangleNames then + PeUnmangleName(Name, Result) + else + Result := Name; +end; + +function TPeDumpChild.HeadersRemark(HeaderItem: TJclPeHeader): string; +const + ImageCharacteristicValues: array [1..14] of packed record + Value: Word; + Name: PChar; + end = ( + (Value: IMAGE_FILE_RELOCS_STRIPPED; Name: 'RELOCS_STRIPPED'), + (Value: IMAGE_FILE_EXECUTABLE_IMAGE; Name: 'EXECUTABLE_IMAGE'), + (Value: IMAGE_FILE_LINE_NUMS_STRIPPED; Name: 'LINE_NUMS_STRIPPED'), + (Value: IMAGE_FILE_LOCAL_SYMS_STRIPPED; Name: 'LOCAL_SYMS_STRIPPED'), + (Value: IMAGE_FILE_AGGRESIVE_WS_TRIM; Name: 'AGGRESIVE_WS_TRIM'), + (Value: IMAGE_FILE_BYTES_REVERSED_LO; Name: 'BYTES_REVERSED_LO'), + (Value: IMAGE_FILE_32BIT_MACHINE; Name: '32BIT_MACHINE'), + (Value: IMAGE_FILE_DEBUG_STRIPPED; Name: 'DEBUG_STRIPPED'), + (Value: IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP; Name: 'REMOVABLE_RUN_FROM_SWAP'), + (Value: IMAGE_FILE_NET_RUN_FROM_SWAP; Name: 'NET_RUN_FROM_SWAP'), + (Value: IMAGE_FILE_SYSTEM; Name: 'SYSTEM'), + (Value: IMAGE_FILE_DLL; Name: 'DLL'), + (Value: IMAGE_FILE_UP_SYSTEM_ONLY; Name: 'UP_SYSTEM_ONLY'), + (Value: IMAGE_FILE_BYTES_REVERSED_HI; Name: 'BYTES_REVERSED_HI') + ); +var + C: Word; + I: Integer; +begin + case HeaderItem of + JclPeHeader_Characteristics: + begin + Result := ''; + C := FPeImage.LoadedImage.FileHeader.FileHeader.Characteristics; + for I := Low(ImageCharacteristicValues) to High(ImageCharacteristicValues) do + if C and ImageCharacteristicValues[I].Value <> 0 then + Result := Result + #13#10 + ImageCharacteristicValues[I].Name; + Delete(Result, 1, 2); + end; + else + Result := ''; + end; +end; + +procedure TPeDumpChild.ItemsListViewInfoTip(Sender: TObject; + Item: TListItem; var InfoTip: String); +begin + case TListView(Sender).Tag of + 0: InfoTip := HeadersRemark(TJclPeHeader(Item.Index)); + end; +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeGenDef.dfm b/official/1.104/examples/windows/delphitools/peviewer/PeGenDef.dfm new file mode 100644 index 0000000..a157874 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeGenDef.dfm @@ -0,0 +1,144 @@ +object PeGenDefChild: TPeGenDefChild + Left = 278 + Top = 149 + ClientWidth = 401 + ClientHeight = 312 + Caption = 'Pascal unit generator' + Color = clBtnFace + Constraints.MinHeight = 230 + Constraints.MinWidth = 270 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + FormStyle = fsMDIChild + OldCreateOrder = False + Position = poDefaultPosOnly + Visible = True + OnClose = FormClose + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object PageControl1: TPageControl + Left = 0 + Top = 0 + Width = 401 + Height = 311 + ActivePage = TabSheet1 + Align = alClient + Style = tsFlatButtons + TabOrder = 0 + OnChange = PageControl1Change + object TabSheet1: TTabSheet + Caption = '&Options' + object FunctionsListView: TListView + Left = 0 + Top = 96 + Width = 393 + Height = 184 + Anchors = [akLeft, akTop, akRight, akBottom] + Columns = < + item + Caption = 'Original name' + Width = 140 + end + item + Caption = 'Function name' + Width = 140 + end + item + Caption = 'Address' + Width = 70 + end> + ColumnClick = False + HotTrackStyles = [] + OwnerData = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.IconImageList + TabOrder = 0 + ViewStyle = vsReport + OnCustomDrawItem = FunctionsListViewCustomDrawItem + OnData = FunctionsListViewData + end + object GroupBox1: TGroupBox + Left = 0 + Top = 0 + Width = 392 + Height = 81 + Anchors = [akLeft, akTop, akRight] + Caption = 'Code generation options' + TabOrder = 1 + object Label1: TLabel + Left = 8 + Top = 20 + Width = 107 + Height = 13 + Caption = '&Library constant name:' + FocusControl = LibConstNameEdit + end + object LibConstNameEdit: TEdit + Left = 132 + Top = 16 + Width = 116 + Height = 21 + MaxLength = 32 + TabOrder = 0 + end + object WrapSpinEdit: TSpinEdit + Left = 132 + Top = 47 + Width = 57 + Height = 22 + Enabled = False + MaxLength = 3 + MaxValue = 999 + MinValue = 1 + TabOrder = 1 + Value = 80 + end + object WrapCheckBox: TCheckBox + Left = 8 + Top = 48 + Width = 118 + Height = 17 + Caption = '&Wrap text at column:' + TabOrder = 2 + OnClick = WrapCheckBoxClick + end + end + end + object TabSheet2: TTabSheet + Caption = '&Unit source' + ImageIndex = 1 + object UnitRichEdit: TRichEdit + Left = 0 + Top = 0 + Width = 393 + Height = 280 + Align = alClient + Font.Charset = EASTEUROPE_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Courier New' + Font.Style = [] + HideScrollBars = False + ParentFont = False + PlainText = True + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 0 + WordWrap = False + end + end + end + object SaveDialog: TSaveDialog + DefaultExt = 'pas' + Filter = 'Pascal unit (*.pas)|*.pas|All files (*.*)|*.*' + Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing] + Left = 12 + Top = 195 + end +end diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeGenDef.pas b/official/1.104/examples/windows/delphitools/peviewer/PeGenDef.pas new file mode 100644 index 0000000..eb9ce0e --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeGenDef.pas @@ -0,0 +1,365 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is PeGenDef.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2008-09-09 21:32:17 +0200 (mar., 09 sept. 2008) $ } +{ } +{**************************************************************************************************} + +unit PeGenDef; + +{$I JCL.INC} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + JclPeImage, ComCtrls, StdCtrls, Spin; + +type + TPeUnitGenFlags = set of (ufDecorated, ufDuplicate, ufVariable); + + TPeUnitGenerator = class(TJclPeImage) + private + FUnitGenFlags: array of TPeUnitGenFlags; + function GetUnitGenFlags(Index: Integer): TPeUnitGenFlags; + public + procedure GenerateUnit(Strings: TStrings; const LibConst: string; WrapPos: Integer); + procedure ScanExports; + property UnitGenFlags[Index: Integer]: TPeUnitGenFlags read GetUnitGenFlags; + end; + + TPeGenDefChild = class(TForm) + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + FunctionsListView: TListView; + UnitRichEdit: TRichEdit; + GroupBox1: TGroupBox; + Label1: TLabel; + LibConstNameEdit: TEdit; + WrapSpinEdit: TSpinEdit; + WrapCheckBox: TCheckBox; + SaveDialog: TSaveDialog; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure FunctionsListViewData(Sender: TObject; Item: TListItem); + procedure FunctionsListViewCustomDrawItem(Sender: TCustomListView; + Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); + procedure PageControl1Change(Sender: TObject); + procedure WrapCheckBoxClick(Sender: TObject); + private + FPeUnitGenerator: TPeUnitGenerator; + procedure SetFileName(const Value: TFileName); + function GetFileName: TFileName; + procedure GenerateUnit; + public + function CanSave: Boolean; + procedure SaveUnit; + property FileName: TFileName read GetFileName write SetFileName; + end; + +var + PeGenDefChild: TPeGenDefChild; + +implementation + +uses PeViewerMain, JclFileUtils, ToolsUtils, JclSysUtils; + +{$R *.DFM} + +const + nfDecoratedName = $01; + nfAnsiUnicodePair = $02; + +function PascalizeName(const Name: string): string; + function CharIsValidLeadingChar(const C: Char): Boolean; + begin + case C of + 'A'..'Z', + 'a'..'z': + Result := True; + else + Result := False; + end; + end; + function CharIsStripLeadingChar(const C: Char): Boolean; + begin + Result := C = '_'; + end; + function CharIsValid(const C: Char): Boolean; + begin + case C of + 'A'..'Z', + 'a'..'z', + '0'..'9': + Result := True; + else + Result := False; + end; + end; +const + InvalidCharReplacement = '_'; + StopChar = '@'; +var + I: Integer; + C: Char; +begin + SetLength(Result, Length(Name)); + Result := ''; + for I := 1 to Length(Name) do + begin + C := Name[I]; + if I = 1 then + begin + if CharIsValidLeadingChar(C) then + Result := Result + C + else + if not CharIsStripLeadingChar(C) then + Break; // probably MS C++ or Borland name decoration + end else + begin + if CharIsValid(C) then + Result := Result + C + else + if C = StopChar then + Break + else + Result := Result + InvalidCharReplacement; + end; + end; + I := Length(Result); + while I > 0 do + if Result[I] = InvalidCharReplacement then + begin + Delete(Result, I, 1); + Dec(I); + end + else + Break; +end; + +function PossiblyAnsiUnicodePair(const Name1, Name2: AnsiString): Boolean; +const + AnsiUnicodeSuffixes = ['A', 'W']; +var + L1, L2: Integer; + Suffix1, Suffix2: AnsiChar; +begin + Result := False; + L1 := Length(Name1); + L2 := Length(Name2); + if (L1 = L2) and (L1 > 1) then + begin + Suffix1 := Name1[L1]; + Suffix2 := Name2[L2]; + Result := (Suffix1 in AnsiUnicodeSuffixes) and (Suffix2 in AnsiUnicodeSuffixes) and + (Suffix1 <> Suffix2) and (Copy(Name1, 1, L1 - 1) = Copy(Name2, 1, L2 - 1)); + end; +end; + +function IsDecoratedName(const Name: string): Boolean; +begin + Result := (Length(Name) > 1) and (Name[1] = '?') and (Name[1] = '@'); +end; + + +{ TPeUnitGenerator } + +procedure TPeUnitGenerator.GenerateUnit(Strings: TStrings; const LibConst: string; + WrapPos: Integer); +var + I: Integer; + S: string; +begin + Strings.Add('implementation'); + Strings.Add(''); + Strings.Add('const'); + Strings.Add(Format(' %s = ''%s'';', [LibConst, ExtractFileName(FileName)])); + Strings.Add(''); + for I := 0 to ExportList.Count - 1 do + with ExportList[I] do + if FUnitGenFlags[I] = [] then + begin + S := Format('function %s; external %s name ''%s'';', [PascalizeName(Name), LibConst, Name]); + if WrapPos > 0 then + S := WrapText(S, #13#10' ', [' '], WrapPos); + Strings.Add(S); + end; + Strings.Add(''); + Strings.Add('end.'); +end; + +function TPeUnitGenerator.GetUnitGenFlags(Index: Integer): TPeUnitGenFlags; +begin + Result := FUnitGenFlags[Index]; +end; + +procedure TPeUnitGenerator.ScanExports; +var + I: Integer; + PascalName, LastName, FirstSectionName: string; + LastAddress: DWORD; + Flags: TPeUnitGenFlags; +begin + SetLength(FUnitGenFlags, ExportList.Count); + ExportList.SortList(esName); + LastName := ''; + LastAddress := 0; + FirstSectionName := ImageSectionNames[0]; // The first section is code section + for I := 0 to ExportList.Count - 1 do + with ExportList[I] do + begin + Flags := []; + if SectionName <> FirstSectionName then + Include(Flags, ufVariable) + else + if IsDecoratedName(Name) then + Include(Flags, ufDecorated) + else + begin + PascalName := PascalizeName(Name); + if (LastAddress = Address) and (LastName = PascalName) then + Include(Flags, ufDuplicate); + LastName := PascalName; + LastAddress := Address; + end; + FUnitGenFlags[I] := Flags; + end; +end; + +{ TPeGenDefChild } + +procedure TPeGenDefChild.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Fix_ListViewBeforeClose(Self); + Action := caFree; +end; + +procedure TPeGenDefChild.FormCreate(Sender: TObject); +begin + FPeUnitGenerator := TPeUnitGenerator.Create; +end; + +procedure TPeGenDefChild.FormDestroy(Sender: TObject); +begin + FreeAndNil(FPeUnitGenerator); +end; + +function TPeGenDefChild.GetFileName: TFileName; +begin + Result := FPeUnitGenerator.FileName; +end; + +procedure TPeGenDefChild.SetFileName(const Value: TFileName); +begin + Screen.Cursor := crHourGlass; + try + FPeUnitGenerator.FileName := Value; + FPeUnitGenerator.ScanExports; + LibConstNameEdit.Text := PathExtractFileNameNoExt(Value) + 'Lib'; + FunctionsListView.Items.Count := FPeUnitGenerator.ExportList.Count; + FunctionsListView.Invalidate; + finally + Screen.Cursor := crDefault; + end; +end; + +procedure TPeGenDefChild.FunctionsListViewData(Sender: TObject; Item: TListItem); +var + Flags: TPeUnitGenFlags; +begin + Flags := FPeUnitGenerator.UnitGenFlags[Item.Index]; + with Item, FPeUnitGenerator.ExportList[Item.Index] do + begin + Caption := Name; + SubItems.Add(PascalizeName(Name)); + SubItems.Add(AddressOrForwardStr); + if ufDuplicate in Flags then + ImageIndex := icoWarning + else + if Flags * [ufDecorated, ufVariable] = [] then + ImageIndex := icoExports + else + ImageIndex := -1; + end; +end; + +procedure TPeGenDefChild.FunctionsListViewCustomDrawItem(Sender: TCustomListView; + Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); +var + Flags: TPeUnitGenFlags; +begin + Flags := FPeUnitGenerator.UnitGenFlags[Item.Index]; + if Flags * [ufDecorated, ufVariable] <> [] then + Sender.Canvas.Font.Style := [fsStrikeOut]; +end; + +procedure TPeGenDefChild.GenerateUnit; +var + SL: TStringList; + WrapColumn: Integer; +begin + Screen.Cursor := crHourGlass; + SL := TStringList.Create; + try + if WrapCheckBox.Checked then + WrapColumn := WrapSpinEdit.Value + else + WrapColumn := 0; + FPeUnitGenerator.GenerateUnit(SL, LibConstNameEdit.Text, WrapColumn); + UnitRichEdit.Text := SL.Text; + finally + SL.Free; + Screen.Cursor := crDefault; + end; +end; + +procedure TPeGenDefChild.PageControl1Change(Sender: TObject); +begin + if PageControl1.ActivePage = TabSheet1 then + LibConstNameEdit.SetFocus + else + if PageControl1.ActivePage = TabSheet2 then + GenerateUnit; +end; + +procedure TPeGenDefChild.WrapCheckBoxClick(Sender: TObject); +begin + WrapSpinEdit.Enabled := WrapCheckBox.Checked; +end; + +function TPeGenDefChild.CanSave: Boolean; +begin + Result := PageControl1.ActivePage = TabSheet2; +end; + +procedure TPeGenDefChild.SaveUnit; +begin + with SaveDialog do + begin + FileName := PathExtractFileNameNoExt(FPeUnitGenerator.FileName); + if Execute then + UnitRichEdit.Lines.SaveToFile(FileName); + end; +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeResView.dfm b/official/1.104/examples/windows/delphitools/peviewer/PeResView.dfm new file mode 100644 index 0000000..edb8b7c --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeResView.dfm @@ -0,0 +1,420 @@ +object PeResViewChild: TPeResViewChild + Left = 380 + Top = 203 + AutoScroll = False + Caption = 'PeResViewChild' + ClientHeight = 407 + ClientWidth = 597 + Color = clBtnFace + Constraints.MinHeight = 200 + Constraints.MinWidth = 250 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + FormStyle = fsMDIChild + OldCreateOrder = False + PopupMenu = PopupMenu1 + Position = poDefault + Visible = True + OnClose = FormClose + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object Splitter1: TSplitter + Left = 121 + Top = 0 + Width = 3 + Height = 407 + Cursor = crHSplit + ResizeStyle = rsUpdate + end + object ResourceTreeView: TTreeView + Left = 0 + Top = 0 + Width = 121 + Height = 407 + Align = alLeft + HideSelection = False + Images = MainForm.IconImageList + Indent = 19 + ReadOnly = True + TabOrder = 0 + OnChange = ResourceTreeViewChange + OnExpanding = ResourceTreeViewExpanding + end + object PageControl1: TPageControl + Left = 124 + Top = 0 + Width = 473 + Height = 407 + ActivePage = DirTab + Align = alClient + TabOrder = 1 + TabStop = False + object DirTab: TTabSheet + Caption = 'DirTab' + object DirListView: TListView + Left = 0 + Top = 0 + Width = 465 + Height = 379 + Align = alClient + Columns = < + item + Caption = 'Name' + Width = 150 + end + item + Caption = 'Offset' + Width = 70 + end + item + Caption = 'Size' + Width = 70 + end> + ColumnClick = False + GridLines = True + HideSelection = False + HotTrackStyles = [] + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.IconImageList + TabOrder = 0 + ViewStyle = vsReport + OnData = DirListViewData + end + end + object HexDumpTab: TTabSheet + Caption = 'HexDumpTab' + ImageIndex = 1 + object HexDumpListView: TListView + Left = 0 + Top = 0 + Width = 465 + Height = 379 + Align = alClient + Columns = < + item + Caption = 'Offset' + Width = 70 + end + item + Caption = 'Data' + Width = 250 + end + item + Caption = 'ASCII' + Width = 70 + end> + ColumnClick = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Courier New' + Font.Style = [] + GridLines = True + HideSelection = False + HotTrackStyles = [] + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + ParentFont = False + SmallImages = MainForm.IconImageList + TabOrder = 0 + ViewStyle = vsReport + OnData = HexDumpListViewData + end + end + object StringsTab: TTabSheet + Caption = 'StringsTab' + ImageIndex = 2 + object Splitter2: TSplitter + Left = 0 + Top = 341 + Width = 465 + Height = 3 + Cursor = crVSplit + Align = alBottom + ResizeStyle = rsUpdate + end + object StringsListView: TListView + Left = 0 + Top = 0 + Width = 465 + Height = 341 + Align = alClient + Columns = < + item + Caption = 'ID' + Width = 70 + end + item + Caption = 'Text' + Width = 300 + end> + ColumnClick = False + GridLines = True + HideSelection = False + HotTrackStyles = [] + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + SmallImages = MainForm.IconImageList + TabOrder = 0 + ViewStyle = vsReport + OnData = StringsListViewData + OnSelectItem = StringsListViewSelectItem + end + object DetailedStringMemo: TMemo + Left = 0 + Top = 344 + Width = 465 + Height = 35 + Align = alBottom + Color = clBtnFace + ReadOnly = True + ScrollBars = ssVertical + TabOrder = 1 + end + end + object GraphDirTab: TTabSheet + Caption = 'GraphDirTab' + ImageIndex = 3 + object GraphDrawGrid: TDrawGrid + Left = 0 + Top = 0 + Width = 465 + Height = 379 + Align = alClient + ColCount = 2 + DefaultDrawing = False + FixedCols = 0 + Options = [goVertLine, goHorzLine, goColSizing, goRowSelect, goThumbTracking] + TabOrder = 0 + OnDrawCell = GraphDrawGridDrawCell + ColWidths = ( + 147 + 277) + end + end + object TextTab: TTabSheet + Caption = 'TextTab' + ImageIndex = 4 + object TextRichEdit: TRichEdit + Left = 0 + Top = 0 + Width = 465 + Height = 379 + Align = alClient + Font.Charset = EASTEUROPE_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Courier New' + Font.Style = [] + HideScrollBars = False + ParentFont = False + PlainText = True + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 0 + WordWrap = False + end + end + object AviTab: TTabSheet + Caption = 'AviTab' + ImageIndex = 5 + PopupMenu = AviPopupMenu + object Bevel2: TBevel + Left = 0 + Top = 26 + Width = 465 + Height = 334 + Align = alClient + end + object Animate1: TAnimate + Left = 8 + Top = 40 + Width = 100 + Height = 80 + Active = False + Color = clBtnFace + ParentColor = False + OnOpen = Animate1Open + OnClose = Animate1Close + OnStop = Animate1Stop + end + object AviToolBar: TToolBar + Left = 0 + Top = 0 + Width = 465 + Height = 26 + AutoSize = True + ButtonWidth = 51 + Caption = 'AviToolBar' + EdgeBorders = [ebLeft, ebTop, ebRight, ebBottom] + Flat = True + Images = MainForm.ToolbarImagesList + List = True + ShowCaptions = True + TabOrder = 1 + object ToolButton1: TToolButton + Left = 0 + Top = 0 + Action = AviPlay1 + end + object ToolButton2: TToolButton + Left = 51 + Top = 0 + Action = AviStop1 + end + object ToolButton3: TToolButton + Left = 102 + Top = 0 + Action = AviBkColor1 + end + end + object AviStatusBar: TStatusBar + Left = 0 + Top = 360 + Width = 465 + Height = 19 + Panels = < + item + Width = 150 + end> + SimplePanel = False + end + end + object HTMLTab: TTabSheet + Caption = 'HTMLTab' + ImageIndex = 6 + end + object GraphTab: TTabSheet + Caption = 'GraphTab' + ImageIndex = 7 + object GraphImage: TImage + Left = 0 + Top = 0 + Width = 465 + Height = 360 + Align = alClient + AutoSize = True + Center = True + end + object Bevel1: TBevel + Left = 0 + Top = 0 + Width = 465 + Height = 360 + Align = alClient + end + object GraphStatusBar: TStatusBar + Left = 0 + Top = 360 + Width = 465 + Height = 19 + Panels = < + item + Width = 50 + end> + SimplePanel = False + end + end + object DialogTab: TTabSheet + Caption = 'DialogTab' + ImageIndex = 8 + object Bevel3: TBevel + Left = 0 + Top = 0 + Width = 465 + Height = 379 + Align = alClient + end + object DialogTestBtn: TButton + Left = 8 + Top = 8 + Width = 75 + Height = 25 + Caption = '&Show dialog' + TabOrder = 0 + OnClick = DialogTestBtnClick + end + end + end + object ActionList1: TActionList + Images = MainForm.ToolbarImagesList + Left = 136 + Top = 352 + object AviPlay1: TAction + Caption = 'Play' + ImageIndex = 16 + OnExecute = AviPlay1Execute + end + object AviStop1: TAction + Caption = 'Stop' + Enabled = False + ImageIndex = 17 + OnExecute = AviStop1Execute + end + object AviBkColor1: TAction + Caption = 'Color' + ImageIndex = 18 + OnExecute = AviBkColor1Execute + end + end + object ColorDialog1: TColorDialog + Ctl3D = True + Options = [cdPreventFullOpen, cdSolidColor] + Left = 168 + Top = 352 + end + object AviPopupMenu: TPopupMenu + Images = MainForm.ToolbarImagesList + Left = 200 + Top = 352 + object Play1: TMenuItem + Action = AviPlay1 + end + object Stop1: TMenuItem + Action = AviStop1 + end + object Color1: TMenuItem + Action = AviBkColor1 + end + end + object SaveDialog1: TSaveDialog + Options = [ofOverwritePrompt, ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] + Left = 232 + Top = 352 + end + object PopupMenu1: TPopupMenu + Images = MainForm.ToolbarImagesList + Left = 264 + Top = 352 + object Copytoclipboard1: TMenuItem + Action = MainForm.Copy1 + end + object Savetofile1: TMenuItem + Action = MainForm.Save1 + end + object Selectall1: TMenuItem + Action = MainForm.SelectAll1 + end + object N1: TMenuItem + Caption = '-' + end + object Viewdetails1: TMenuItem + Action = MainForm.ViewResDetails1 + end + object Viewashex1: TMenuItem + Action = MainForm.ViewResHex1 + end + end +end diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeResView.pas b/official/1.104/examples/windows/delphitools/peviewer/PeResView.pas new file mode 100644 index 0000000..c327618 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeResView.pas @@ -0,0 +1,710 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is PeResView.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2008-08-11 14:23:08 +0200 (lun., 11 août 2008) $ } +{ } +{**************************************************************************************************} + +unit PeResView; + +{$I JCL.INC} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + JclPeImage, PeResource, JclLogic, JclGraphUtils, ComCtrls, StdCtrls, + ExtCtrls, Grids, ToolWin, ActnList, OleCtrls, Menus, SHDocVw_TLB; + +type + TPeResViewChild = class(TForm) + ResourceTreeView: TTreeView; + PageControl1: TPageControl; + Splitter1: TSplitter; + DirTab: TTabSheet; + HexDumpTab: TTabSheet; + DirListView: TListView; + HexDumpListView: TListView; + StringsTab: TTabSheet; + StringsListView: TListView; + GraphDirTab: TTabSheet; + GraphDrawGrid: TDrawGrid; + TextTab: TTabSheet; + TextRichEdit: TRichEdit; + AviTab: TTabSheet; + Animate1: TAnimate; + AviToolBar: TToolBar; + ToolButton1: TToolButton; + ToolButton2: TToolButton; + ActionList1: TActionList; + AviPlay1: TAction; + AviStop1: TAction; + HTMLTab: TTabSheet; + GraphTab: TTabSheet; + GraphImage: TImage; + Bevel1: TBevel; + GraphStatusBar: TStatusBar; + DetailedStringMemo: TMemo; + Splitter2: TSplitter; + Bevel2: TBevel; + AviStatusBar: TStatusBar; + AviBkColor1: TAction; + ColorDialog1: TColorDialog; + ToolButton3: TToolButton; + AviPopupMenu: TPopupMenu; + Play1: TMenuItem; + Stop1: TMenuItem; + Color1: TMenuItem; + DialogTab: TTabSheet; + SaveDialog1: TSaveDialog; + DialogTestBtn: TButton; + Bevel3: TBevel; + PopupMenu1: TPopupMenu; + Copytoclipboard1: TMenuItem; + Savetofile1: TMenuItem; + N1: TMenuItem; + Viewdetails1: TMenuItem; + Viewashex1: TMenuItem; + Selectall1: TMenuItem; + procedure FormDestroy(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormCreate(Sender: TObject); + procedure ResourceTreeViewChange(Sender: TObject; Node: TTreeNode); + procedure DirListViewData(Sender: TObject; Item: TListItem); + procedure HexDumpListViewData(Sender: TObject; Item: TListItem); + procedure StringsListViewData(Sender: TObject; Item: TListItem); + procedure GraphDrawGridDrawCell(Sender: TObject; ACol, ARow: Integer; + Rect: TRect; State: TGridDrawState); + procedure AviPlay1Execute(Sender: TObject); + procedure AviStop1Execute(Sender: TObject); + procedure Animate1Stop(Sender: TObject); + procedure StringsListViewSelectItem(Sender: TObject; Item: TListItem; + Selected: Boolean); + procedure Animate1Open(Sender: TObject); + procedure Animate1Close(Sender: TObject); + procedure AviBkColor1Execute(Sender: TObject); + procedure ResourceTreeViewExpanding(Sender: TObject; Node: TTreeNode; + var AllowExpansion: Boolean); + procedure DialogTestBtnClick(Sender: TObject); + private + FCurrentDir: TPeResItem; + FOriginalPageControlWndProc: TWndMethod; + FResourceImage: TPeResImage; + FSelectedItem: TPeResItem; + FSelectedNode: TTreeNode; + FShowAsHexView: Boolean; + FStringsList: TStringList; + FShowSpecialDirView: Boolean; + FTempGraphic: TPicture; + WebBrowser1: TWebBrowser; + procedure CreateStringsList(Item: TPeResUnkStrings); + procedure CreateGraphicList(Item: TPeResItem); + function GetPeImage: TJclPeImage; + procedure PageControlWndProc(var Message: TMessage); + procedure UpdateSelected; + procedure UpdateView; + procedure SetShowAsHexView(const Value: Boolean); + procedure SetShowSpecialDirView(const Value: Boolean); + public + constructor CreateEx(AOwner: TComponent; APeImage: TJclPeImage); + function CanSaveResource: Boolean; + procedure SaveResource; + property PeImage: TJclPeImage read GetPeImage; + property ShowAsHexView: Boolean read FShowAsHexView write SetShowAsHexView; + property ShowSpecialDirView: Boolean read FShowSpecialDirView write SetShowSpecialDirView; + end; + +var + PeResViewChild: TPeResViewChild; + +implementation + +{$R *.DFM} + +uses + CommCtrl, PeViewerMain, ToolsUtils, JclStrings, JclSysUtils; + +resourcestring + RsAviStatus = 'Width: %u, Height: %u, Frames: %u'; + RsGraphicStatus = 'Width: %u, Height: %u, Bits per pixel: %u'; + RsTitle = 'Resources - %s'; + +const + MinGraphRowHeight = 18; + MaxGraphRowHeight = 150; + +{ TPeResViewChild } + +constructor TPeResViewChild.CreateEx(AOwner: TComponent; APeImage: TJclPeImage); +begin + inherited Create(AOwner); + FShowSpecialDirView := True; + FStringsList := TStringList.Create; + FTempGraphic := TPicture.Create; + FResourceImage := TPeResImage.Create; + FResourceImage.PeImage := APeImage; + Caption := Format(RsTitle, [ExtractFileName(FResourceImage.FileName)]); + WebBrowser1 := TWebBrowser.Create(Self); + TWinControl(WebBrowser1).Parent := HTMLTab; + WebBrowser1.Align := alClient; +end; + +procedure TPeResViewChild.PageControlWndProc(var Message: TMessage); +begin +// remove PageControl's border + FOriginalPageControlWndProc(Message); + with Message do + if (Msg = TCM_ADJUSTRECT) and (Message.WParam = 0) then + InflateRect(PRect(LParam)^, 4, 4); +end; + +procedure TPeResViewChild.FormCreate(Sender: TObject); +var + I: Integer; +begin + with PageControl1 do + begin + for I := 0 to PageCount - 1 do Pages[I].TabVisible := False; + FOriginalPageControlWndProc := WindowProc; + WindowProc := PageControlWndProc; + ActivePage := DirTab; + Realign; + end; + UpdateView; +end; + +procedure TPeResViewChild.FormDestroy(Sender: TObject); +begin + FreeAndNil(FTempGraphic); + FreeAndNil(FStringsList); + FreeAndNil(FResourceImage); +end; + +procedure TPeResViewChild.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Fix_ListViewBeforeClose(Self); + Action := caFree; +end; + +procedure TPeResViewChild.UpdateView; +var + I: Integer; +begin + with ResourceTreeView do + begin + Items.BeginUpdate; + try + Items.Clear; + for I := 0 to FResourceImage.Count - 1 do + with Items.AddObject(nil, FResourceImage[I].ResName, FResourceImage[I]) do + begin + ImageIndex := icoFolderShut; + SelectedIndex := icoFolderOpen; + HasChildren := True; + end; + finally + Items.EndUpdate; + end; + end; +end; + +function TPeResViewChild.GetPeImage: TJclPeImage; +begin + Result := FResourceImage.PeImage; +end; + +procedure TPeResViewChild.ResourceTreeViewChange(Sender: TObject; + Node: TTreeNode); +begin + DirListView.Items.Count := 0; + HexDumpListView.Items.Count := 0; + StringsListView.Items.Count := 0; + GraphDrawGrid.RowCount := 2; + FSelectedNode := Node; + UpdateSelected; +end; + +procedure TPeResViewChild.DirListViewData(Sender: TObject; + Item: TListItem); +begin + with Item, FCurrentDir[Item.Index] do + begin + Caption := ResName; + SubItems.Add(Format('%x', [Offset])); + SubItems.Add(Format('%x', [Size])); + end; +end; + +procedure TPeResViewChild.HexDumpListViewData(Sender: TObject; + Item: TListItem); +var + DumpData: PByte; + Address, EndAddress: Integer; + Hex, Ascii: string; + I: Integer; +begin + with Item do + begin + DumpData := PByte(DWORD(FSelectedItem.RawData) + DWORD(Index * 16)); + Address := FSelectedItem.Offset + Index * 16; + EndAddress := FSelectedItem.Offset + FSelectedItem.Size - 1; + SetLength(Hex, 3 * 16); + SetLength(Ascii, 3 * 16); + Hex := ''; + Ascii := ''; + for I := 0 to 15 do + begin + Hex := Hex + Format('%.2x ', [DumpData^]); + if DumpData^ >= 32 then + Ascii := Ascii + Chr(DumpData^) + else + Ascii := Ascii + '.'; + Inc(DumpData); + if Address + I >= EndAddress then Break; + end; + Item.Caption := Format('%x', [Address]); + Item.SubItems.Add(Hex); + Item.SubItems.Add(Ascii); + end; +end; + +procedure TPeResViewChild.SetShowAsHexView(const Value: Boolean); +begin + if FShowAsHexView <> Value then + begin + FShowAsHexView := Value; + UpdateSelected; + end; +end; + +procedure TPeResViewChild.SetShowSpecialDirView(const Value: Boolean); +begin + if FShowSpecialDirView <> Value then + begin + FShowSpecialDirView := Value; + UpdateSelected; + end; +end; + +procedure TPeResViewChild.CreateStringsList(Item: TPeResUnkStrings); +var + I: Integer; +begin + FStringsList.Clear; + DetailedStringMemo.Lines.Clear; + if not Item.IsList then + TPeResUnkStrings(Item).FillStrings(FStringsList) + else + for I := 0 to Item.ItemCount - 1 do + TPeResUnkStrings(Item[I]).FillStrings(FStringsList); + StringsListView.Items.Count := FStringsList.Count; + StringsListView.Invalidate; +end; + +procedure TPeResViewChild.StringsListViewData(Sender: TObject; Item: TListItem); +begin + with Item do + begin + Caption := Format('%u', [DWORD(FStringsList.Objects[Index])]); + SubItems.Add(StrRemoveChars(FStringsList[Index], CharIsReturn)); + end; +end; + +procedure TPeResViewChild.CreateGraphicList(Item: TPeResItem); +var + I, J, MaxRowHeight, TotalMaxRowHeight: Integer; + + procedure CalculateHeight(Item: TPeResItem); + var + H: Integer; + begin + case Item.Kind of + rkCursor: + H := GetSystemMetrics(SM_CYCURSOR); + rkIcon: + H := GetSystemMetrics(SM_CYICON); + rkBitmap: + H := TPeResUnkGraphic(Item).GraphicProperties.Height; + else + FTempGraphic.Assign(Item); + H := FTempGraphic.Height; + end; + MaxRowHeight := Max(MaxRowHeight, H); + end; + +begin + TotalMaxRowHeight := 0; + with GraphDrawGrid do + begin + SendMessage(Handle, WM_SETREDRAW, 0, 0); + try + RowCount := Item.ItemCount + 1; + RowHeights[0] := MinGraphRowHeight; + for I := 0 to Item.ItemCount - 1 do + begin + MaxRowHeight := 0; + if Item[I].IsList then + for J := 0 to Item[I].ItemCount - 1 do + CalculateHeight(Item[I][J]) + else + CalculateHeight(Item[I]); + RowHeights[I + 1] := Min(Max(MinGraphRowHeight, MaxRowHeight + 4), MaxGraphRowHeight); + TotalMaxRowHeight := Max(TotalMaxRowHeight, MaxRowHeight); + end; + finally + SendMessage(Handle, WM_SETREDRAW, 1, 0); + Invalidate; + end; + end; +end; + +procedure TPeResViewChild.GraphDrawGridDrawCell(Sender: TObject; ACol, + ARow: Integer; Rect: TRect; State: TGridDrawState); +var + Text: string; + Item: TPeResItem; + I, W: Integer; + DrawRect: TRect; +begin + with GraphDrawGrid do + begin + if ARow = 0 then + with Canvas do + begin + case ACol of + 0: Text := 'Name'; + 1: Text := 'Graphic'; + end; + Brush.Color := clBtnFace; + Font.Color := clBtnText; + Dec(Rect.Bottom, 2); + Dec(Rect.Right); + FillRect(Rect); + TextRect(Rect, Rect.Left + 6, Rect.Top + 2, Text); + DrawEdge(Handle, Rect, EDGE_ETCHED, BF_BOTTOMRIGHT or BF_FLAT); + Pen.Color := Color; + Polyline([Point(Rect.Right, Rect.Top), Point(Rect.Right, Rect.Bottom), + Point(Rect.Left, Rect.Bottom)]); + Inc(Rect.Bottom); + MoveTo(Rect.Left, Rect.Bottom); + LineTo(Rect.Right, Rect.Bottom); + Pen.Color := clBtnFace; + Inc(Rect.Bottom); + MoveTo(Rect.Left, Rect.Bottom); + LineTo(Rect.Right, Rect.Bottom); + end else + begin + if (gdSelected in State) and Focused then + begin + Canvas.Brush.Color := clHighlight; + Canvas.Font.Color := clHighlightText; + Canvas.FillRect(Rect); + DrawFocusRect(Canvas.Handle, Rect); + end else + begin + Canvas.Brush.Color := Color; + Canvas.Font.Color := Font.Color; + Canvas.FillRect(Rect); + end; + InflateRect(Rect, -1, -1); + Item := FCurrentDir[ARow - 1]; + case ACol of + 0:Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Item.ResName); + 1:begin + W := 0; + if not Item.IsList then + begin + FTempGraphic.Assign(Item); + with FTempGraphic do + SetRect(DrawRect, Rect.Left, Rect.Top, Rect.Left + Width, Rect.Top + Height); + if not RectIncludesRect(DrawRect, Rect) then + begin + DrawRect.Right := Min(DrawRect.Right, Rect.Right); + DrawRect.Bottom := Min(DrawRect.Bottom, Rect.Bottom); + Canvas.StretchDraw(DrawRect, FTempGraphic.Graphic); + end + else + Canvas.Draw(Rect.Left + 2, Rect.Top + 2, FTempGraphic.Graphic); + end else + for I := 0 to Item.ItemCount - 1 do + begin + FTempGraphic.Assign(Item[I]); + Canvas.Draw(Rect.Left + 2 + W, Rect.Top + 2, FTempGraphic.Graphic); + Inc(W, FTempGraphic.Width + 5); + end; + end; + end; + end; + end; +end; + +procedure TPeResViewChild.AviPlay1Execute(Sender: TObject); +begin + with Animate1 do + Play(1, FrameCount, 1); + AviStop1.Enabled := True; + AviPlay1.Enabled := False; +end; + +procedure TPeResViewChild.AviStop1Execute(Sender: TObject); +begin + Animate1.Stop; + AviStop1.Enabled := False; +end; + +procedure TPeResViewChild.Animate1Stop(Sender: TObject); +begin + AviPlay1.Enabled := True; + AviStop1.Enabled := False; +end; + +procedure TPeResViewChild.StringsListViewSelectItem(Sender: TObject; + Item: TListItem; Selected: Boolean); +begin + if Selected then DetailedStringMemo.Text := Item.SubItems[0]; +end; + +procedure TPeResViewChild.Animate1Open(Sender: TObject); +begin + with Animate1 do + AviStatusBar.Panels[0].Text := Format(RsAviStatus, [FrameWidth, FrameHeight, + FrameCount]); +end; + +procedure TPeResViewChild.Animate1Close(Sender: TObject); +begin + AviStatusBar.Panels[0].Text := ''; +end; + +procedure TPeResViewChild.AviBkColor1Execute(Sender: TObject); +begin + with ColorDialog1 do + begin + CustomColors.Values['ColorA'] := Format('%.6x', [ColorToRGB(clBtnFace)]); + Color := Animate1.Color; + if Execute then Animate1.Color := Color; + end; +end; + +procedure TPeResViewChild.UpdateSelected; + + function SpecialDirectoryView: Boolean; + begin + Result := True; + case FCurrentDir.Kind of + rkBitmap, rkCursor, rkIcon: + begin + CreateGraphicList(FCurrentDir); + PageControl1.ActivePage := GraphDirTab; + end; + rkString: + begin + CreateStringsList(TPeResString(FCurrentDir)); + PageControl1.ActivePage := StringsTab; + end; + else + Result := False; + end; + end; + + procedure DefaultDirectoryView; + begin + DirListView.Items.Count := FCurrentDir.ItemCount; + DirListView.Invalidate; + PageControl1.ActivePage := DirTab; + end; + + function SpecialDetailView: Boolean; + begin + Result := True; + case FSelectedItem.Kind of + rkAccelerator: + begin + TextRichEdit.Lines.Assign(TPeResAccelerator(FSelectedItem)); + PageControl1.ActivePage := TextTab; + end; + rkAvi: + begin + Animate1.Assign(FSelectedItem); + PageControl1.ActivePage := AviTab; + end; + rkBitmap, rkIcon, rkCursor: + begin + GraphImage.Picture.Assign(FSelectedItem); + if GraphImage.Picture.Graphic is TBitmap then + GraphImage.Picture.Bitmap.Transparent := True; + with TPeResUnkGraphic(FSelectedItem).GraphicProperties do + GraphStatusBar.Panels[0].Text := Format(RsGraphicStatus, [Width, Height, BitsPerPixel]); + PageControl1.ActivePage := GraphTab; + end; + rkString: + begin + CreateStringsList(TPeResString(FSelectedItem)); + PageControl1.ActivePage := StringsTab; + end; + rkHTML: + begin + WebBrowser1.Navigate(TPeResHTML(FSelectedItem).ResPath); + PageControl1.ActivePage := HTMLTab; + end; + rkData: + if TPeResRCData(FSelectedItem).DataKind <> dkUnknown then + begin + TextRichEdit.Lines.Assign(TPeResRCData(FSelectedItem)); + PageControl1.ActivePage := TextTab; + end else + Result := False; +{ rkDialog: + begin + DialogTestBtn.Enabled := TPeResDialog(FSelectedItem).CanShowDialog; + PageControl1.ActivePage := DialogTab; + end;} { TODO : Check for dialog templates } + rkMessageTable: + begin + CreateStringsList(TPeResUnkStrings(FSelectedItem)); + PageControl1.ActivePage := StringsTab; + end; + rkVersion: + begin + TextRichEdit.Lines.Assign(TPeResVersion(FSelectedItem)); + PageControl1.ActivePage := TextTab; + end; + else + Result := False; + end; + end; + + procedure DefaultDetailView; + begin + HexDumpListView.Items.Count := (FSelectedItem.Size - 1) div 16 + 1; + HexDumpListView.Invalidate; + PageControl1.ActivePage := HexDumpTab; + end; + +begin + FSelectedItem := TPeResItem(FSelectedNode.Data); + FCurrentDir := FSelectedItem; + if FSelectedNode.Level = 0 then + begin +// FCurrentDir := FSelectedItem; + if (not FShowSpecialDirView) or (not SpecialDirectoryView) then + DefaultDirectoryView; + end else + begin + if FSelectedItem.IsList then + begin +// FCurrentDir := FSelectedItem; + DefaultDirectoryView; + end else + begin + if FShowAsHexView or (not SpecialDetailView) then + DefaultDetailView; + end; + end; +end; + +function TPeResViewChild.CanSaveResource: Boolean; +begin + Result := Assigned(FSelectedItem) and not FSelectedItem.IsList and + ResourceTreeView.Focused; +end; + +procedure TPeResViewChild.ResourceTreeViewExpanding(Sender: TObject; + Node: TTreeNode; var AllowExpansion: Boolean); +var + N, L: Integer; + ListNode, ItemNode: TTreeNode; + Item, RootItem: TPeResItem; +begin + if Node.GetFirstChild = nil then with ResourceTreeView do + begin + Items.BeginUpdate; + try + RootItem := TPeResItem(Node.Data); + for N := 0 to RootItem.ItemCount - 1 do + begin + Item := RootItem[N]; + ListNode := Items.AddChildObject(Node, Item.ResName, Item); + if Item.IsList then + begin + ListNode.ImageIndex := icoFolderShut; + ListNode.SelectedIndex := icoFolderOpen; + for L := 0 to Item.ItemCount - 1 do + begin + ItemNode := Items.AddChildObject(ListNode, Item[L].ResName, Item[L]); + ItemNode.ImageIndex := icoResItem; + ItemNode.SelectedIndex := icoResItem; + end; + end else + begin + ListNode.ImageIndex := icoResItem; + ListNode.SelectedIndex := icoResItem; + end; + end; + finally + Items.EndUpdate; + end; + end; +end; + +procedure TPeResViewChild.SaveResource; +var + FileStream: TFileStream; +begin + with SaveDialog1, (FSelectedItem as TPeResUnknown) do + begin + Filter := Format('*.%s files|*.%s', [FileExt, FileExt]); + FileName := ResName + '.' + FileExt; + if Execute then + begin + FileStream := TFileStream.Create(FileName, fmCreate); + try + SaveToStream(FileStream); + finally + FileStream.Free; + end; + end; + end; +end; + +procedure TPeResViewChild.DialogTestBtnClick(Sender: TObject); +var + Res: Integer; +begin + with ResourceTreeView do + while True do + begin + with TPeResDialog(FSelectedItem) do + if CanShowDialog then + Res := ShowDialog(Application.Handle) + else + Res := 1; + if (Res = 1) and (Selected.GetNextSibling <> nil) then + begin + Selected := Selected.GetNextSibling; + Selected.MakeVisible; + ResourceTreeView.Update; + end else + Break; + end; +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeResource.pas b/official/1.104/examples/windows/delphitools/peviewer/PeResource.pas new file mode 100644 index 0000000..d967dd2 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeResource.pas @@ -0,0 +1,1541 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is PeResource.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2008-09-09 21:32:17 +0200 (mar., 09 sept. 2008) $ } +{ } +{**************************************************************************************************} + +unit PeResource; + +{$I JCL.INC} + +interface + +uses + Windows, Messages, Classes, SysUtils, Graphics, ComCtrls, Contnrs, + JclBase, JclFileUtils, JclPeImage, JclStrings; + +type + PAccelTableEntry = ^TAccelTableEntry; + ACCELTABLEENTRY = packed record + fFlags: Word; + wAnsi: Word; + wId: Word; + padding: Word; + end; + {$EXTERNALSYM ACCELTABLEENTRY} + TAccelTableEntry = ACCELTABLEENTRY; + + PCursorDir = ^TCursorDir; + CURSORDIR = packed record + Width: Word; + Height: Word; + end; + {$EXTERNALSYM CURSORDIR} + TCursorDir = CURSORDIR; + + PCursorShape = ^TCursorShape; + _CURSORSHAPE = packed record + xHotSpot: Integer; + yHotSpot: Integer; + cx: Integer; + cy: Integer; + cbWidth: Integer; + Planes: Byte; + BitsPixel: Byte; + end; + {$EXTERNALSYM _CURSORSHAPE} + TCursorShape = _CURSORSHAPE; + CURSORSHAPE = _CURSORSHAPE; + {$EXTERNALSYM CURSORSHAPE} + + PLocalHeader = ^TLocalHeader; + _LOCALHEADER = packed record + xHotSpot: Word; + yHotSpot: Word; + end; + {$EXTERNALSYM _LOCALHEADER} + TLocalHeader = _LOCALHEADER; + LOCALHEADER = _LOCALHEADER; + {$EXTERNALSYM LOCALHEADER} + + PNewHeader = ^TNewHeader; + _NEWHEADER = packed record + Reserved: Word; + ResType: Word; + ResCount: Word; + end; + {$EXTERNALSYM _NEWHEADER} + TNewHeader = _NEWHEADER; + NEWHEADER = _NEWHEADER; + {$EXTERNALSYM NEWHEADER} + + PIconResdir = ^TIconResdir; + ICONRESDIR = packed record + Width: Byte; + Height: Byte; + ColorCount: Byte; + Reserved: Byte; + end; + {$EXTERNALSYM ICONRESDIR} + TIconResdir = ICONRESDIR; + + TResInfo = packed record + case Integer of + 0: (Icon: TIconResdir); + 1: (Cursor: TCursorDir); + end; + {$NODEFINE TResInfo} + + PResDir = ^TResDir; + _RESDIR = packed record + ResInfo: TResInfo; + Planes: Word; + BitCount: Word; + BytesInRes: DWORD; + IconCursorId: Word; + end; + {$EXTERNALSYM _RESDIR} + TResDir = _RESDIR; + RESDIR = _RESDIR; + {$EXTERNALSYM RESDIR} + + PDlgTemplate = ^TDlgTemplate; + DLGTEMPLATE = packed record + style: DWORD; + dwExtendedStyle: DWORD; + cdit: Word; + x: ShortInt; // short + y: ShortInt; + cx: ShortInt; + cy: ShortInt; + end; + {$EXTERNALSYM DLGTEMPLATE} + TDlgTemplate = DLGTEMPLATE; + + PDlgItemTemplate = ^TDlgItemTemplate; + DLGITEMTEMPLATE = packed record + style: DWORD; + dwExtendedStyle: DWORD; + x: ShortInt; + y: ShortInt; + cx: ShortInt; + cy: ShortInt; + id: Word; + end; + {$EXTERNALSYM DLGITEMTEMPLATE} + TDlgItemTemplate = DLGITEMTEMPLATE; + + PMenuHeader = ^TMenuHeader; + MENUHEADER = packed record + wVersion: Word; + cbHeaderSize: Word; + end; + {$EXTERNALSYM MENUHEADER} + TMenuHeader = MENUHEADER; + + PMenuHelpID = ^TMenuHelpID; + MENUHELPID = packed record + helpID: DWORD; + end; + {$EXTERNALSYM MENUHELPID} + TMenuHelpID = MENUHELPID; + + PNormalMenuItem = ^TNormalMenuItem; + NORMALMENUITEM = packed record + resInfo: WORD; + menuText: Pointer; // szOrOrd + end; + {$EXTERNALSYM NORMALMENUITEM} + TNormalMenuItem = NORMALMENUITEM; + + PPopupMenuItem = ^TPopupMenuItem; + POPUPMENUITEM = packed record + type_: DWORD; + state: DWORD; + id: DWORD; + resInfo: Word; + menuText: Pointer; // szOrOrd + end; + {$EXTERNALSYM POPUPMENUITEM} + TPopupMenuItem = POPUPMENUITEM; + + PMenuExTemplateHeader = ^TMenuExTemplateHeader; + MENUEX_TEMPLATE_HEADER = packed record + wVersion: Word; + wOffset: Word; + dwHelpId: DWORD; + end; + {$EXTERNALSYM MENUEX_TEMPLATE_HEADER} + TMenuExTemplateHeader = MENUEX_TEMPLATE_HEADER; + + PMenuExTemplateItem = ^TMenuExTemplateItem; + MENUEX_TEMPLATE_ITEM = packed record + dwType: DWORD; + dwState: DWORD; + uId: UINT; + bResInfo: Word; + szText: array[0..0] of WideChar; + dwHelpId: DWORD; + end; + {$EXTERNALSYM MENUEX_TEMPLATE_ITEM} + TMenuExTemplateItem = MENUEX_TEMPLATE_ITEM; + + PMessageResourceBlock = ^TMessageResourceBlock; + _MESSAGE_RESOURCE_BLOCK = packed record + LowId: ULONG; + HighId: ULONG; + OffsetToEntries: ULONG; + end; + {$EXTERNALSYM _MESSAGE_RESOURCE_BLOCK} + TMessageResourceBlock = _MESSAGE_RESOURCE_BLOCK; + MESSAGE_RESOURCE_BLOCK = _MESSAGE_RESOURCE_BLOCK; + {$EXTERNALSYM MESSAGE_RESOURCE_BLOCK} + + PMessageResourceData = ^TMessageResourceData; + _MESSAGE_RESOURCE_DATA = packed record + NumberOfBlocks: ULONG; + // Blocks: array[0..0] of TMessageResourceBlock; + end; + {$EXTERNALSYM _MESSAGE_RESOURCE_DATA} + TMessageResourceData = _MESSAGE_RESOURCE_DATA; + MESSAGE_RESOURCE_DATA = _MESSAGE_RESOURCE_DATA; + {$EXTERNALSYM MESSAGE_RESOURCE_DATA} + + PMessageResourceEntry = ^TMessageResourceEntry; + _MESSAGE_RESOURCE_ENTRY = packed record + Length: Word; + Flags: Word; + // Text: array[0..0] of Char; + end; + {$EXTERNALSYM _MESSAGE_RESOURCE_ENTRY} + TMessageResourceEntry = _MESSAGE_RESOURCE_ENTRY; + MESSAGE_RESOURCE_ENTRY = _MESSAGE_RESOURCE_ENTRY; + {$EXTERNALSYM MESSAGE_RESOURCE_ENTRY} + +(* + +Value Meaning +0x0080 Button +0x0081 Edit +0x0082 Static +0x0083 List box +0x0084 Scroll bar +0x0085 Combo box} + + PDlgTemplateEx = ^TDlgTemplateEx; + DLGTEMPLATEEX = packed record + dlgVer: WORD; + signature: WORD; + helpID: DWORD; + exStyle: DWORD; + style: DWORD; + cDlgItems: WORD; + x: short; + y: short; + cx: short; + cy: short; + sz_Or_Ord menu; // name or ordinal of a menu resource + sz_Or_Ord windowClass; // name or ordinal of a window class + WCHAR title[titleLen]; // title string of the dialog box + short pointsize; // if DS_SETFONT or DS_SHELLFONT is set + short weight; // if DS_SETFONT or DS_SHELLFONT is set + short bItalic; // if DS_SETFONT or DS_SHELLFONT is set + WCHAR font[fontLen]; // if DS_SETFONT or DS_SHELLFONT is set +} DLGTEMPLATEEX; + + + typedef struct { + DWORD helpID; + DWORD exStyle; + DWORD style; + short x; + short y; + short cx; + short cy; + WORD id; + sz_Or_Ord windowClass; // name or ordinal of a window class + sz_Or_Ord title; // title string or ordinal of a resource + WORD extraCount; // bytes of following creation data +} DLGITEMTEMPLATEEX; + +struct FONTDIRENTRY { + WORD dfVersion; + DWORD dfSize; + char dfCopyright[60]; + WORD dfType; + WORD dfPoints; + WORD dfVertRes; + WORD dfHorizRes; + WORD dfAscent; + WORD dfInternalLeading; + WORD dfExternalLeading; + BYTE dfItalic; + BYTE dfUnderline; + BYTE dfStrikeOut; + WORD dfWeight; + BYTE dfCharSet; + WORD dfPixWidth; + WORD dfPixHeight; + BYTE dfPitchAndFamily; + WORD dfAvgWidth; + WORD dfMaxWidth; + BYTE dfFirstChar; + BYTE dfLastChar; + BYTE dfDefaultChar; + BYTE dfBreakChar; + WORD dfWidthBytes; + DWORD dfDevice; + DWORD dfFace; + DWORD dfReserved; + char szDeviceName[]; + char szFaceName[]; +}; + +struct FONTGROUPHDR { + WORD NumberOfFonts; + DIRENTRY DE [1]; +}; + +*) + +type + TPeResKind = (rkAccelerator, rkAvi, rkBitmap, rkCursor, rkData, rkDialog, + rkHTML, rkIcon, rkMenu, rkMessageTable, rkString, rkVersion, rkUnknown); + + TPeResImage = class; + + TPeResItem = class; + + TPeResItem = class(TPersistent) + private + FKind: TPeResKind; + FList: TObjectList; + FResImage: TPeResImage; + FResourceItem: TJclPeResourceItem; + FStream: TJclPeResourceRawStream; + function GetItems(Index: Integer): TPeResItem; + function GetItemCount: Integer; + function GetStream: TJclPeResourceRawStream; + protected + procedure CreateList; virtual; + public + constructor Create(AResImage: TPeResImage; AResourceItem: TJclPeResourceItem); virtual; + destructor Destroy; override; + function IsList: Boolean; virtual; + function Offset: Integer; + function RawData: Pointer; + function ResName: string; virtual; + function ResType: TJclPeResourceKind; + procedure SaveToStream(Stream: TStream); virtual; + function Size: Integer; + property ItemCount: Integer read GetItemCount; + property Items[Index: Integer]: TPeResItem read GetItems; default; + property Kind: TPeResKind read FKind; + property ResourceItem: TJclPeResourceItem read FResourceItem; + property Stream: TJclPeResourceRawStream read GetStream; + end; + + TJclReResItemClass = class of TPeResItem; + + TPeResUnknown = class(TPeResItem) + public + function FileExt: string; dynamic; + function IsList: Boolean; override; + function ResName: string; override; + end; + + TPeGraphicProperties = record + Width, Height, BitsPerPixel: Integer; + end; + + TPeResUnkGraphic = class(TPeResUnknown) + public + function GraphicProperties: TPeGraphicProperties; virtual; abstract; + end; + + TPeResUnkStrings = class(TPeResUnknown) + protected + procedure AssignTo(Dest: TPersistent); override; + public + function FileExt: string; override; + procedure FillStrings(Strings: TStrings; StripCrLf: Boolean = False); virtual; abstract; + end; + + TPeResAccelerator = class(TPeResUnkStrings) + public + procedure FillStrings(Strings: TStrings; StripCrLf: Boolean = False); override; + end; + + TPeResAvi = class(TPeResUnknown) + protected + procedure AssignTo(Dest: TPersistent); override; + public + function FileExt: string; override; + end; + + TPeResBitmap = class(TPeResUnkGraphic) + protected + procedure AssignTo(Dest: TPersistent); override; + public + function GraphicProperties: TPeGraphicProperties; override; + function FileExt: string; override; + procedure SaveToStream(Stream: TStream); override; + end; + + TPeResCursorItem = class(TPeResUnkGraphic) + private + FResInfo: PResDir; + protected + procedure AssignTo(Dest: TPersistent); override; + public + function FileExt: string; override; + function GraphicProperties: TPeGraphicProperties; override; + function ResName: string; override; + procedure SaveToStream(Stream: TStream); override; + end; + + TPeResCursor = class(TPeResUnknown) + private + function GetItems(Index: Integer): TPeResCursorItem; + protected + procedure CreateList; override; + public + function IsList: Boolean; override; + property Items[Index: Integer]: TPeResCursorItem read GetItems; default; + end; + + TPeResDialog = class(TPeResUnknown) + public + function CanShowDialog: Boolean; + function ShowDialog(ParentWnd: HWND): Integer; + end; + + TPeResDataKind = (dkUnknown, dkDFM, dkPackageDescription, dkPackageInfo); + + TPeResRCData = class(TPeResUnknown) + private + FDataKind: TPeResDataKind; + protected + procedure AssignTo(Dest: TPersistent); override; + procedure CheckFormat; + procedure DFMToStrings(Strings: TStrings); + procedure PackageInfoToStrings(Strings: TStrings); + public + constructor Create(AResImage: TPeResImage; AResourceItem: TJclPeResourceItem); override; + function FileExt: string; override; + property DataKind: TPeResDataKind read FDataKind; + end; + + TPeResHTML = class(TPeResUnknown) + public + function FileExt: string; override; + function ResPath: string; + end; + + TPeResIconItem = class(TPeResCursorItem) + public + function FileExt: string; override; + function GraphicProperties: TPeGraphicProperties; override; + end; + + TPeResIcon = class(TPeResCursor) + private + function GetItems(Index: Integer): TPeResIconItem; + public + property Items[Index: Integer]: TPeResIconItem read GetItems; default; + end; + + TPeResMenu = class(TPeResUnknown) + end; + + TPeMessageTable = class(TPeResUnkStrings) + public + procedure FillStrings(Strings: TStrings; StripCrLf: Boolean = False); override; + end; + + TPeResString = class(TPeResUnkStrings) + public + procedure FillStrings(Strings: TStrings; StripCrLf: Boolean = False); override; + end; + + TPeResVersion = class(TPeResUnkStrings) + public + procedure FillStrings(Strings: TStrings; StripCrLf: Boolean = False); override; + end; + + TPeResImage = class(TObjectList) + private + FCursorEntry: TJclPeResourceList; + FIconEntry: TJclPeResourceList; + FImageAttached: Boolean; + FLibHandle: THandle; + FPeImage: TJclPeImage; + function GetFileName: TFileName; + procedure SetFileName(const Value: TFileName); + procedure SetPeImage(const Value: TJclPeImage); + function GetItems(Index: Integer): TPeResItem; + function GetLibHandle: THandle; + protected + procedure CreateList; + procedure UnloadLib; + public + constructor Create; + destructor Destroy; override; + procedure Clear; override; + property ImageAttached: Boolean read FImageAttached; + property Items[Index: Integer]: TPeResItem read GetItems; default; + property LibHandle: THandle read GetLibHandle; + property FileName: TFileName read GetFileName write SetFileName; + property PeImage: TJclPeImage read FPeImage write SetPeImage; + end; + + function LangNameFromName(const Name: string; ShortName: Boolean = False): string; + +implementation + +uses + Consts, JclLocales, JclSysUtils, JclWin32; + +resourcestring + RsPeResAccelerator = 'Accel table'; + RsPeResAVI = 'AVI'; + RsPeResBitmap = 'Bitmap'; + RsPeResCursor = 'Cursor'; + RsPeResData = 'RCData'; + RsPeResDialog = 'Dialog'; + RsPeResHTML = 'HTML'; + RsPeResIcon = 'Icon'; + RsPeResMenu = 'Menu'; + RsPeResMessageTable = 'Message table'; + RsPeResString = 'String'; + RsPeResVersion = 'Version'; + RsNeutralLang = '[Neutral]'; + RsUnknownLang = '[Unknown]'; + + RsTranslations = 'Translations:'; + +var + JclLocalesList: TJclLocalesList; + +function VirtualKeyNameFromCode(KeyCode: Byte): string; +const + KN002F: array[$00..$2F] of PChar = ( + nil, + 'LBUTTON', + 'RBUTTON', + 'CANCEL', + 'MBUTTON', + nil, nil, nil, // 05..07 + 'BACK', + 'TAB', + nil, nil, // 0A..0B + 'CLEAR', + 'RETURN', + nil, nil, // 0E..0F + 'SHIFT ', + 'CONTROL', + 'MENU', + 'PAUSE', + 'CAPITAL', + 'KANA', + 'HANGUL', + 'JUNJA', + 'FINAL', + 'HANJA', + 'KANJI', + 'ESCAPE', + 'CONVERT', + 'NONCONVERT', + 'ACCEPT', + 'MODECHANGE', + 'SPACE', + 'PRIOR', + 'NEXT', + 'END', + 'HOME', + 'LEFT', + 'UP', + 'RIGHT', + 'DOWN', + 'SELECT', + 'PRINT', + 'EXECUTE', + 'SNAPSHOT', + 'INSERT', + 'DELETE', + 'HELP' + ); + KN5B5D: array[$5B..$5D] of PChar = ( + 'LWIN', + 'RWIN', + 'APPS' + ); + KN6A6F: array[$6A..$6F] of PChar = ( + 'MULTIPLY', + 'ADD', + 'SEPARATOR', + 'SUBTRACT', + 'DECIMAL', + 'DIVIDE' + ); + KNA0A5: array[$A0..$A5] of PChar = ( + 'LSHIFT', + 'RSHIFT', + 'LCONTROL', + 'RCONTROL', + 'LMENU', + 'RMENU' + ); + KNF6FE: array[$F6..$FE] of PChar = ( + 'ATTN', + 'CRSEL', + 'EXSEL', + 'EREOF', + 'PLAY', + 'ZOOM', + 'NONAME', + 'PA1', + 'OEM_CLEAR' + ); +begin + case KeyCode of + $00..$2F: + Result := KN002F[KeyCode]; + $30..$39, $41..$5A: + Result := Chr(KeyCode); + $5B..$5D: + Result := KN5B5D[KeyCode]; + $60..$69: + Result := Format('NUMPAD%d', [KeyCode - $60]); + $6A..$6F: + Result := KN6A6F[KeyCode]; + $70..$87: + Result := Format('F%d', [KeyCode - $6F]); + $90: + Result := 'NUMLOCK'; + $91: + Result := 'SCROLL'; + $A0..$A5: + Result := KNA0A5[KeyCode]; + $E5: + Result := 'PROCESSKEY'; + $F6..$FE: + Result := KNF6FE[KeyCode]; + else + Result := ''; + end; + if Result <> '' then Result := 'VK_' + Result; +end; + +function LangNameFromName(const Name: string; ShortName: Boolean): string; +var + LangID: Word; + Locale: TJclLocaleInfo; +begin + LangID := PRIMARYLANGID(StrToIntDef(Name, 0)); + if LangID = LANG_NEUTRAL then + if ShortName then Result := '' else Result := RsNeutralLang + else + begin + Locale := JclLocalesList.ItemFromLangIDPrimary[LangID]; + if Locale <> nil then + with Locale do if ShortName then + Result := AbbreviatedLangName else Result := EnglishLangName + else + Result := RsUnknownLang; + end; +end; + + +function GetResItemKind(Item: TJclPeResourceItem; var Kind: TPeResKind): Boolean; +begin + Result := True; + Kind := rkUnknown; + with Item do + case ResourceType of + rtAccelerators: + Kind := rkAccelerator; + rtCursorEntry, rtIconEntry, rtFont: + Result := False; + rtUserDefined: + begin + if Name = 'AVI' then Kind := rkAvi; + if Name = '2110' then Kind := rkHTML; + end; + rtBitmap: + Kind := rkBitmap; + rtMenu: + Kind := rkMenu; + rtDialog: + Kind := rkDialog; + rtString: + Kind := rkString; + rtRCData: + Kind := rkData; + rtMessageTable: + Kind := rkMessageTable; + rtCursor: + Kind := rkCursor; + rtIcon: + Kind := rkIcon; + rtVersion: + Kind := rkVersion; + rtHmtl: + Kind := rkHTML; + end; +end; + +const + ResItemClasses: array [TPeResKind] of TJclReResItemClass = ( + TPeResAccelerator, + TPeResAvi, + TPeResBitmap, + TPeResCursor, + TPeResRCData, + TPeResDialog, + TPeResHTML, + TPeResIcon, + TPeResMenu, + TPeMessageTable, + TPeResString, + TPeResVersion, + TPeResUnknown + ); + +function WideCharToStr(WStr: PWChar; Len: Integer): string; +begin + {$IFDEF SUPPORTS_UNICODE} + SetLength(Result, Len); + if Len > 0 then + Move(WStr^, Result[1], Len * SizeOf(WideChar)); + {$ELSE SUPPORTS_UNICODE} + if Len = 0 then Len := -1; + Len := WideCharToMultiByte(CP_ACP, 0, WStr, Len, nil, 0, nil, nil); + SetLength(Result, Len); + WideCharToMultiByte(CP_ACP, 0, WStr, Len, PChar(Result), Len, nil, nil); + {$ENDIF ~SUPPORTS_UNICODE} +end; + +{ TPeResItem } + +constructor TPeResItem.Create(AResImage: TPeResImage; AResourceItem: TJclPeResourceItem); +begin + FList := TObjectList.Create(True); + FResImage := AResImage; + FResourceItem := AResourceItem; +end; + +procedure TPeResItem.CreateList; +var + I, J: Integer; + Item: TPeResItem; + ResItem: TJclPeResourceItem; +begin + with FResourceItem.List do + for I := 0 to Count - 1 do + begin + ResItem := Items[I]; + for J := 0 to ResItem.List.Count - 1 do + begin + Item := ResItemClasses[Self.FKind].Create(FResImage, ResItem.List[J]); + Item.FKind := Self.FKind; + FList.Add(Item); + end; + end; +end; + +destructor TPeResItem.Destroy; +begin + FreeAndNil(FList); + FreeAndNil(FStream); + inherited; +end; + +function TPeResItem.GetItemCount: Integer; +begin + if IsList then + begin + if FList.Count = 0 then CreateList; + Result := FList.Count; + end else + Result := -1; +end; + +function TPeResItem.GetItems(Index: Integer): TPeResItem; +begin + Result := TPeResItem(FList[Index]); +end; + +function TPeResItem.GetStream: TJclPeResourceRawStream; +begin + if not Assigned(FStream) then + FStream := TJclPeResourceRawStream.Create(FResourceItem); + Result := FStream; +end; + +function TPeResItem.IsList: Boolean; +begin + Result := FResourceItem.IsDirectory; +end; + +function TPeResItem.Offset: Integer; +begin + if IsList then + Result := FResourceItem.Entry^.OffsetToData and not (IMAGE_RESOURCE_DATA_IS_DIRECTORY) + else + Result := FResourceItem.DataEntry^.OffsetToData +end; + +function TPeResItem.RawData: Pointer; +begin + Result := FResourceItem.RawEntryData; +end; + +function TPeResItem.ResName: string; +const + ResNames: array [TPeResKind] of PResStringRec = ( + @RsPeResAccelerator, + @RsPeResAVI, + @RsPeResBitmap, + @RsPeResCursor, + @RsPeResData, + @RsPeResDialog, + @RsPeResHTML, + @RsPeResIcon, + @RsPeResMenu, + @RsPeResMessageTable, + @RsPeResString, + @RsPeResVersion, + nil + ); +begin + if FKind = rkUnknown then + Result := FResourceItem.ResourceTypeStr + else + Result := LoadResString(ResNames[FKind]); +end; + +function TPeResItem.ResType: TJclPeResourceKind; +begin + Result := FResourceItem.ResourceType; +end; + +procedure TPeResItem.SaveToStream(Stream: TStream); +begin + if not IsList then + Stream.WriteBuffer(RawData^, Size); +end; + +function TPeResItem.Size: Integer; +begin + if IsList then + Result := 0 + else + Result := FResourceItem.DataEntry^.Size; +end; + +{ TPeResUnknown } + +function TPeResUnknown.FileExt: string; +begin + Result := 'bin'; +end; + +function TPeResUnknown.IsList: Boolean; +begin + Result := False; +end; + +function TPeResUnknown.ResName: string; +begin + if StrToIntDef(FResourceItem.Name, 0) = LANG_NEUTRAL then + Result := FResourceItem.ParentItem.Name + else + Result := Format('%s > %s', [FResourceItem.ParentItem.Name, LangNameFromName(FResourceItem.Name)]); +end; + +{ TPeResUnkStrings } + +procedure TPeResUnkStrings.AssignTo(Dest: TPersistent); +begin + if (Dest is TStrings) then + with TStrings(Dest) do + begin + BeginUpdate; + try + Clear; + FillStrings(TStrings(Dest)); + finally + EndUpdate; + end; + end + else + inherited; +end; + +function TPeResUnkStrings.FileExt: string; +begin + Result := 'txt'; +end; + +{ TPeResAccelTable } + +procedure TPeResAccelerator.FillStrings(Strings: TStrings; StripCrLf: Boolean); +var + TableEntry: PAccelTableEntry; + IsLast: Boolean; + S: string; + + function AnsiToChar(A: Word): string; + begin + if A >= 32 then Result := Chr(A) else Result := ''; + end; + +begin + Strings.BeginUpdate; + try + TableEntry := RawData; + repeat + with TableEntry^ do + begin + IsLast := fFlags and $80 <> 0; + if fFlags and FVIRTKEY <> 0 then + begin + S := Format('Virtual Key: %.2u "%s" ', [wAnsi, VirtualKeyNameFromCode(wAnsi)]); + if fFlags and FSHIFT <> 0 then S := S + 'SHIFT '; + if fFlags and FCONTROL <> 0 then S := S + 'CTRL '; + if fFlags and FALT <> 0 then S := S + 'ALT '; + end else + S := Format('ANSI character: %.2u "%s" ', [wAnsi, AnsiToChar(wAnsi)]); + if fFlags and FNOINVERT <> 0 then S := S + 'NOINVERT'; + end; + Strings.Add(TrimRight(S)); + Inc(TableEntry); + until IsLast; + finally + Strings.EndUpdate; + end; +end; + +{ TPeResAvi } + +{$HINTS OFF} +type + TDirtyComponent = class(TPersistent) + private + FOwner: TComponent; + FName: TComponentName; + FTag: Longint; + FComponents: TList; + FFreeNotifies: TList; + FDesignInfo: Longint; + FVCLComObject: Pointer; + FComponentState: TComponentState; + end; +{$HINTS ON} + +procedure TPeResAvi.AssignTo(Dest: TPersistent); +begin + if Dest is TAnimate then + begin + Include(TDirtyComponent(Dest).FComponentState, csLoading); + TAnimate(Dest).ResHandle := FResImage.LibHandle; + TAnimate(Dest).ResName := FResourceItem.ParentItem.ParameterName; + Exclude(TDirtyComponent(Dest).FComponentState, csLoading); + TAnimate(Dest).Reset; + end + else + inherited; +end; + +function TPeResAvi.FileExt: string; +begin + Result := 'avi'; +end; + +{ TPeResBitmap } + +procedure TPeResBitmap.AssignTo(Dest: TPersistent); +var + MemStream: TMemoryStream; + BitMap: TBitMap; +begin + if Dest is TPicture then + begin + BitMap := TPicture(Dest).Bitmap; + MemStream := TMemoryStream.Create; + try + SaveToStream(MemStream); + MemStream.Seek(0, soFromBeginning); + BitMap.LoadFromStream(MemStream); + finally + MemStream.Free; + end + end + else + inherited; +end; + +function TPeResBitmap.FileExt: string; +begin + Result := 'bmp'; +end; + +function TPeResBitmap.GraphicProperties: TPeGraphicProperties; +var + BI: PBitmapInfoHeader; + BC: PBitmapCoreHeader; +begin + BI := PBitmapInfoHeader(RawData); + if BI.biSize = SizeOf(TBitmapInfoHeader) then + begin + Result.Width := BI.biWidth; + Result.Height := BI.biHeight; + Result.BitsPerPixel := BI.biPlanes * BI.biBitCount; + end else + begin + BC := PBitmapCoreHeader(RawData); + Result.Width := BC.bcWidth; + Result.Height := BC.bcHeight; + Result.BitsPerPixel := BC.bcPlanes * BC.bcBitCount; + end; +end; + +procedure TPeResBitmap.SaveToStream(Stream: TStream); + + function GetDInColors(BitCount: Word): Integer; + begin + case BitCount of + 1, 4, 8: Result := 1 shl BitCount; + else + Result := 0; + end; + end; + +var + BH: TBitmapFileHeader; + BI: PBitmapInfoHeader; + BC: PBitmapCoreHeader; + ClrUsed: Integer; +begin + FillChar(BH, sizeof(BH), #0); + BH.bfType := $4D42; + BH.bfSize := Size + SizeOf(BH); + BI := PBitmapInfoHeader(RawData); + if BI.biSize = SizeOf(TBitmapInfoHeader) then + begin + ClrUsed := BI.biClrUsed; + if ClrUsed = 0 then ClrUsed := GetDInColors(BI.biBitCount); + BH.bfOffBits := ClrUsed * SizeOf(TRgbQuad) + SizeOf(TBitmapInfoHeader) + SizeOf(BH); + end + else + begin + BC := PBitmapCoreHeader(RawData); + ClrUsed := GetDInColors(BC.bcBitCount); + BH.bfOffBits := ClrUsed * SizeOf(TRGBTriple) + SizeOf(TBitmapCoreHeader) + SizeOf(BH); + end; + Stream.Write(BH, SizeOf(BH)); + Stream.Write(RawData^, Size); +end; + +{ TPeResCursorItem } + +procedure TPeResCursorItem.AssignTo(Dest: TPersistent); +begin + if Dest is TPicture then + TPicture(Dest).Icon.Handle := CreateIconFromResource(RawData, Size, ResType = rtIconEntry, $30000) + else + inherited; +end; + +function TPeResCursorItem.FileExt: string; +begin + Result := 'cur'; +end; + +function TPeResCursorItem.GraphicProperties: TPeGraphicProperties; +begin + with FResInfo^ do + begin + Result.Width := ResInfo.Cursor.Width; + Result.Height := ResInfo.Cursor.Height; + Result.BitsPerPixel := BitCount * Planes; + end; +end; + +function TPeResCursorItem.ResName: string; +begin + if FResInfo <> nil then + with GraphicProperties do + Result := Format('%d X %d %d bpp', [Width, Height, BitsPerPixel]) + else + Result := ''; +end; + +procedure TPeResCursorItem.SaveToStream(Stream: TStream); +begin + with TIcon.Create do + try + Handle := CreateIconFromResource(RawData, Self.Size, ResType = rtIconEntry, $30000); + SaveToStream(Stream); + finally + Free; + end; +end; +{ TODO : Saving monochrome icons and cursors doesn't work } + +{ TPeResCursor } + +procedure TPeResCursor.CreateList; +var + Item: TPeResItem; + I, J, Cnt: Integer; + ResData: PResDir; + ResOrd: DWORD; + ResList: TJclPeResourceList; + ItemClass: TJclReResItemClass; +begin + if ResType = rtCursor then + begin + ResList := FResImage.FCursorEntry; + ItemClass := TPeResCursorItem; + end else + begin + ResList := FResImage.FIconEntry; + ItemClass := TPeResIconItem; + end; + ResData := RawData; + Cnt := PNewHeader(ResData)^.ResCount; + Inc(PNewHeader(ResData)); + for I := 1 to Cnt do + begin + ResOrd := ResData^.IconCursorId; + for J := 0 to ResList.Count - 1 do + if ResOrd = ResList[J].Entry^.Name then + begin + Item := ItemClass.Create(FResImage, ResList[J].List[0]); + Item.FKind := Self.FKind; + TPeResCursorItem(Item).FResInfo := ResData; + FList.Add(Item); + end; + Inc(ResData); + end; +end; + +function TPeResCursor.GetItems(Index: Integer): TPeResCursorItem; +begin + Result := TPeResCursorItem(FList[Index]); +end; + +function TPeResCursor.IsList: Boolean; +begin + Result := True; +end; + +{ TPeResRCData } + +procedure TPeResRCData.AssignTo(Dest: TPersistent); +begin + if Dest is TStrings then + with TStrings(Dest) do + begin + BeginUpdate; + try + Clear; + case FDataKind of + dkDFM: + DFMToStrings(TStrings(Dest)); + dkPackageDescription: + Add(PWideChar(RawData)); + dkPackageInfo: + PackageInfoToStrings(TStrings(Dest)); + end; + finally + EndUpdate; + end; + end else + inherited; +end; + +procedure TPeResRCData.CheckFormat; +{$IFNDEF DELPHI5_UP} +const + FilerSignature: array[1..4] of Char = 'TPF0'; +var + Signature: Integer; +{$ENDIF DELPHI5_UP} +begin + FDataKind := dkUnknown; + if ResName = 'DESCRIPTION' then + FDataKind := dkPackageDescription + else + if ResName = 'PACKAGEINFO' then + FDataKind := dkPackageInfo + else + begin + Stream.Seek(0, soFromBeginning); + {$IFDEF DELPHI5_UP} + if TestStreamFormat(Stream) = sofBinary then + FDataKind := dkDFM; + {$ELSE DELPHI5_UP} + Signature := 0; + Stream.Read(Signature, SizeOf(Signature)); + if (Byte(Signature) = $FF) or (Signature = Integer(FilerSignature)) then + FDataKind := dkDFM; + {$ENDIF DELPHI5_UP} + end; +end; + +constructor TPeResRCData.Create(AResImage: TPeResImage; + AResourceItem: TJclPeResourceItem); +begin + inherited; + CheckFormat; +end; + +procedure TPeResRCData.DFMToStrings(Strings: TStrings); +var + MemStream: TMemoryStream; +begin + MemStream := TMemoryStream.Create; + try + Stream.Seek(0, soFromBeginning); + ObjectBinaryToText(Stream, MemStream); + MemStream.Seek(0, soFromBeginning); + Strings.LoadFromStream(MemStream); + finally + MemStream.Free; + end; +end; + +function TPeResRCData.FileExt: string; +begin + if DataKind = dkDFM then + Result := 'dfm' + else + Result := inherited FileExt; +end; + +procedure TPeResRCData.PackageInfoToStrings(Strings: TStrings); +var + I: Integer; +begin + with TJclPePackageInfo.Create(FResImage.LibHandle) do + try + Strings.Add('Contains'); + Strings.Add(StringOfChar('-', 80)); + for I := 0 to ContainsCount - 1 do + Strings.Add(Format(' %s [%s]', [ContainsNames[I], UnitInfoFlagsToString(ContainsFlags[I])])); + if RequiresCount > 0 then + begin + Strings.Add(''); + Strings.Add('Requires'); + Strings.Add(StringOfChar('-', 80)); + for I := 0 to RequiresCount - 1 do + Strings.Add(Format(' %s', [RequiresNames[I]])); + end; + Strings.Add(''); + Strings.Add('Package Info flags'); + Strings.Add(StringOfChar('-', 80)); + Strings.Add(Format('Options : %s', [PackageOptionsToString(Flags)])); + Strings.Add(Format('Module type: %s', [PackageModuleTypeToString(Flags)])); + Strings.Add(Format('Producer : %s', [ProducerToString(Flags)])); + finally + Free; + end; +end; + +{ TPeResDialog } + +function TPeResDialog.CanShowDialog: Boolean; +begin + Result := Windows.PDlgTemplate(RawData)^.style and DS_CONTROL = 0; +end; + +function TPeResDialog.ShowDialog(ParentWnd: HWND): Integer; +var + LastFocus: HWND; + MemHandle: THandle; + P: Windows.PDlgTemplate; + + function DialogProc(hwndDlg: HWND; uMsg: UINT; W: WPARAM; L: LPARAM): BOOL; stdcall; + begin + Result := False; + case uMsg of + WM_INITDIALOG: + Result := True; + WM_LBUTTONDBLCLK: + EndDialog(hwndDlg, 0); + WM_RBUTTONUP: + EndDialog(hwndDlg, 1); + WM_SYSCOMMAND: + if W and $FFF0 = SC_CLOSE then + EndDialog(hwndDlg, 0); + end; + end; + +begin + LastFocus := GetFocus; + MemHandle := GlobalAlloc(GMEM_ZEROINIT, Size); + P := GlobalLock(MemHandle); + Move(RawData^, P^, Size); + GlobalUnlock(MemHandle); + Result := DialogBoxIndirect(hinstance, Windows.PDlgTemplate(MemHandle)^, + ParentWnd, @DialogProc); + GlobalFree(MemHandle); + SetFocus(LastFocus); +end; + +{ TPeResHTML } + +function TPeResHTML.FileExt: string; +begin + Result := Copy(ExtractFileExt(FResourceItem.ParentItem.ParameterName), 2, 20); +end; + +function TPeResHTML.ResPath: string; +begin + Result := Format('res://%s/%s', [FResImage.FileName, FResourceItem.ParentItem.ParameterName]); +end; + +{ TPeResIconItem } + +function TPeResIconItem.FileExt: string; +begin + Result := 'ico'; +end; + +function TPeResIconItem.GraphicProperties: TPeGraphicProperties; +begin + with FResInfo^ do + begin + Result.Width := ResInfo.Icon.Width; + Result.Height := ResInfo.Icon.Height; + Result.BitsPerPixel := BitCount * Planes; + end; +end; + +{ TPeResIcon } + +function TPeResIcon.GetItems(Index: Integer): TPeResIconItem; +begin + Result := TPeResIconItem(FList[Index]); +end; + +{ TPeMessageTable } + +procedure TPeMessageTable.FillStrings(Strings: TStrings; StripCrLf: Boolean); +var + Count, I: Integer; + E: DWORD; + Block: PMessageResourceBlock; + Entry: PMessageResourceEntry; + S: string; + Text: PChar; + Data: Pointer; +begin + Data := RawData; + Count := PMessageResourceData(Data)^.NumberOfBlocks; + Block := Data; + Inc(PMessageResourceData(Block)); + for I := 1 to Count do + begin + Entry := PMessageResourceEntry(DWORD(Data) + Block^.OffsetToEntries); + for E := Block^.LowId to Block^.HighId do + begin + with Entry^ do + begin + Text := PChar(Entry) + Sizeof(TMessageResourceEntry); + if Flags = 1 then + S := WideCharToStr(PWideChar(Text), lstrlenW(PWideChar(Text))) + else + SetString(S, PAnsiChar(Text), StrLen(Text)); + if StripCrLf then S := StrRemoveChars(S, CharIsReturn); + Strings.AddObject(S, Pointer(E)); + end; + Entry := Pointer(PChar(Entry) + Entry^.Length); + end; + Inc(Block); + end; +end; + +{ TPeResString } + +procedure TPeResString.FillStrings(Strings: TStrings; StripCrLf: Boolean); +var + P: PWChar; + ID: Integer; + Cnt: Cardinal; + Len: Word; + S: string; +begin + P := RawData; + Cnt := 0; + while Cnt < 16 do + begin + Len := Word(P^); + if Len > 0 then + begin + Inc(P); + ID := ((FResourceItem.ParentItem.Entry^.Name - 1) shl 4) + Cnt; + S := WideCharToStr(P, Len); + if StripCrLf then S := StrRemoveChars(S, CharIsReturn); + Strings.AddObject(S, Pointer(ID)); + Inc(P, Len); + end else + Inc(P); + Inc(Cnt); + end; +end; + +{ TPeResVersion } + +procedure TPeResVersion.FillStrings(Strings: TStrings; StripCrLf: Boolean); +var + I: Integer; +begin + Strings.Clear; + with TJclFileVersionInfo.Attach(RawData, Size) do + try + for I := 0 to LanguageCount - 1 do + begin + LanguageIndex := I; + Strings.Add(Format('[%s] %s', [LanguageIds[I], LanguageNames[I]])); + Strings.Add(StringOfChar('-', 80)); + Strings.AddStrings(Items); + Strings.Add(BinFileVersion); + Strings.Add(OSIdentToString(FileOS)); + Strings.Add(OSFileTypeToString(FileType, FileSubType)); + Strings.Add(''); + end; + Strings.Add(RsTranslations); + for I := 0 to TranslationCount - 1 do + Strings.Add(VersionLanguageId(Translations[I])); + finally + Free; + end; +end; + +{ TPeResImage } + +procedure TPeResImage.Clear; +begin + inherited; + if Assigned(FPeImage) then + begin + if not FImageAttached then FreeAndNil(FPeImage) else FPeImage := nil; + end; +end; + +constructor TPeResImage.Create; +begin + inherited Create(True); +end; + +procedure TPeResImage.CreateList; +var + I: Integer; + Kind: TPeResKind; + Item: TJclPeResourceItem; + ResItem: TPeResItem; +begin + with FPeImage.ResourceList do + for I := 0 to Count - 1 do + begin + Item := Items[I]; + if GetResItemKind(Item, Kind) then + begin + ResItem := TPeResItem.Create(Self, Item); + ResItem.FKind := Kind; + Self.Add(ResItem); + end else + case Item.ResourceType of + rtCursorEntry: + FCursorEntry := Item.List; + rtIconEntry: + FIconEntry := Item.List; + end; + end; +end; + +destructor TPeResImage.Destroy; +begin + UnloadLib; + inherited; +end; + +function TPeResImage.GetFileName: TFileName; +begin + if Assigned(FPeImage) then Result := FPeImage.FileName else Result := ''; +end; + +function TPeResImage.GetItems(Index: Integer): TPeResItem; +begin + Result := TPeResItem(inherited Items[Index]); +end; + +function TPeResImage.GetLibHandle: THandle; +begin + if FLibHandle = 0 then + begin + FLibHandle := LoadLibraryEx(PChar(FileName), 0, LOAD_LIBRARY_AS_DATAFILE); + if FLibHandle = 0 then RaiseLastOSError; + end; + Result := FLibHandle; +end; + +procedure TPeResImage.SetFileName(const Value: TFileName); +begin + if FileName <> Value then + begin + Clear; + FImageAttached := False; + FPeImage := TJclPeImage.Create; + FPeImage.FileName := Value; + CreateList; + end; +end; + +procedure TPeResImage.SetPeImage(const Value: TJclPeImage); +begin + Clear; + FPeImage := Value; + FImageAttached := True; + CreateList; +end; + +procedure TPeResImage.UnloadLib; +begin + if FLibHandle <> 0 then + begin + FreeLibrary(FLibHandle); + FLibHandle := 0; + end; +end; + +initialization + JclLocalesList := TJclLocalesList.Create; + +finalization + FreeAndNil(JclLocalesList); + +end. diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeSearch.dfm b/official/1.104/examples/windows/delphitools/peviewer/PeSearch.dfm new file mode 100644 index 0000000..272339e --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeSearch.dfm @@ -0,0 +1,162 @@ +object PeSearchChild: TPeSearchChild + Left = 259 + Top = 176 + AutoScroll = False + Caption = 'Search function' + ClientHeight = 265 + ClientWidth = 397 + Color = clBtnFace + Constraints.MinHeight = 200 + Constraints.MinWidth = 300 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + FormStyle = fsMDIChild + OldCreateOrder = False + Position = poDefaultPosOnly + Visible = True + OnClose = FormClose + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object ProcessLabel: TLabel + Left = 8 + Top = 80 + Width = 64 + Height = 13 + Caption = 'ProcessLabel' + end + object Bevel1: TBevel + Left = 0 + Top = 56 + Width = 398 + Height = 18 + Anchors = [akLeft, akTop, akRight] + Shape = bsBottomLine + end + object CountLabel: TLabel + Left = 334 + Top = 81 + Width = 54 + Height = 13 + Alignment = taRightJustify + Anchors = [akTop, akRight] + Caption = 'CountLabel' + end + object Label1: TLabel + Left = 6 + Top = 12 + Width = 31 + Height = 13 + Caption = '&Name:' + FocusControl = FuncNameEdit + end + object Label2: TLabel + Left = 6 + Top = 44 + Width = 25 + Height = 13 + Caption = '&Path:' + FocusControl = PathEdit + end + object FuncNameEdit: TEdit + Left = 40 + Top = 8 + Width = 155 + Height = 21 + Anchors = [akLeft, akTop, akRight] + AutoSize = False + CharCase = ecUpperCase + TabOrder = 0 + OnChange = FuncNameEditChange + end + object ResultListView: TListView + Left = 0 + Top = 104 + Width = 397 + Height = 161 + Anchors = [akLeft, akTop, akRight, akBottom] + Columns = < + item + Caption = 'Name' + Width = 90 + end + item + Caption = 'Filename' + Width = 300 + end> + ColumnClick = False + MultiSelect = True + ReadOnly = True + RowSelect = True + TabOrder = 1 + ViewStyle = vsReport + OnDblClick = ResultListViewDblClick + end + object StartBtn: TButton + Left = 318 + Top = 8 + Width = 75 + Height = 25 + Anchors = [akTop, akRight] + Caption = 'Start' + Default = True + TabOrder = 2 + OnClick = StartBtnClick + end + object StopBtn: TButton + Left = 318 + Top = 40 + Width = 75 + Height = 25 + Anchors = [akTop, akRight] + Cancel = True + Caption = 'Stop' + Enabled = False + TabOrder = 3 + OnClick = StopBtnClick + end + object PathEdit: TEdit + Left = 40 + Top = 40 + Width = 251 + Height = 21 + Anchors = [akLeft, akTop, akRight] + AutoSize = False + CharCase = ecUpperCase + TabOrder = 4 + OnChange = FuncNameEditChange + end + object SelectDirBtn: TButton + Left = 295 + Top = 40 + Width = 13 + Height = 21 + Anchors = [akTop, akRight] + Caption = '...' + TabOrder = 5 + OnClick = SelectDirBtnClick + end + object ExportCheckBox: TCheckBox + Left = 203 + Top = 8 + Width = 49 + Height = 17 + Anchors = [akTop, akRight] + Caption = '&Export' + TabOrder = 6 + OnClick = FuncNameEditChange + end + object ImportCheckBox: TCheckBox + Left = 260 + Top = 8 + Width = 49 + Height = 17 + Anchors = [akTop, akRight] + Caption = '&Import' + TabOrder = 7 + OnClick = FuncNameEditChange + end +end diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeSearch.pas b/official/1.104/examples/windows/delphitools/peviewer/PeSearch.pas new file mode 100644 index 0000000..56cc4d0 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeSearch.pas @@ -0,0 +1,226 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is PeSearch.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2006-05-30 00:02:45 +0200 (mar., 30 mai 2006) $ } +{ } +{**************************************************************************************************} + +unit PeSearch; + +{$I JCL.INC} + +{$IFDEF COMPILER6_UP} + {$WARN UNIT_PLATFORM OFF} +{$ENDIF COMPILER6_UP} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, ComCtrls, JclPeImage, ExtCtrls; + +type + TPeSearchChild = class(TForm) + FuncNameEdit: TEdit; + ResultListView: TListView; + StartBtn: TButton; + ProcessLabel: TLabel; + StopBtn: TButton; + Bevel1: TBevel; + PathEdit: TEdit; + CountLabel: TLabel; + SelectDirBtn: TButton; + Label1: TLabel; + Label2: TLabel; + ExportCheckBox: TCheckBox; + ImportCheckBox: TCheckBox; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure StartBtnClick(Sender: TObject); + procedure StopBtnClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure SelectDirBtnClick(Sender: TObject); + procedure FuncNameEditChange(Sender: TObject); + procedure ResultListViewDblClick(Sender: TObject); + private + FSearchThread: TJclPeNameSearch; + procedure SearchDone(Sender: TObject); + procedure SearchFound(Sender: TObject; const FileName: TFileName; + const FunctionName: string; Option: TJclPeNameSearchOption); + procedure SearchProcessFile(Sender: TObject; PeImage: TJclPeImage; var Process: Boolean); + procedure UpdateCounter; + procedure UpdateButtons; + public + function ActiveLibName: string; + procedure ClearResults; + procedure StartSearch; + procedure StopSearch; + end; + +var + PeSearchChild: TPeSearchChild; + +implementation + +{$R *.DFM} + +uses + FileCtrl, JclSysInfo, PeViewerMain; + +procedure TPeSearchChild.FormClose(Sender: TObject; var Action: TCloseAction); +begin + if Assigned(FSearchThread) then + begin + FSearchThread.OnFound := nil; + FSearchThread.OnProcessFile := nil; + FSearchThread.OnTerminate := nil; + FSearchThread.Terminate; + end; + Action := caFree; +end; + +procedure TPeSearchChild.SearchDone(Sender: TObject); +begin + FSearchThread := nil; + UpdateButtons; + ProcessLabel.Caption := ''; +end; + +procedure TPeSearchChild.SearchFound(Sender: TObject; const FileName: TFileName; + const FunctionName: string; Option: TJclPeNameSearchOption); +begin + with ResultListView.Items.Add do + begin + Caption := FunctionName; + SubItems.Add(FileName); + case Option of + seImports: ImageIndex := icoImports; + seDelayImports: ImageIndex := icoDelayImport; + seBoundImports: ImageIndex := icoBoundImport; + seExports: ImageIndex := icoExports; + end; + end; + UpdateCounter; +end; + +procedure TPeSearchChild.SearchProcessFile(Sender: TObject; PeImage: TJclPeImage; var Process: Boolean); +begin + ProcessLabel.Caption := PeImage.FileName; +end; + +procedure TPeSearchChild.StartSearch; +var + Options: TJclPeNameSearchOptions; +begin + Options := []; + if ExportCheckBox.Checked then Include(Options, seExports); + if ImportCheckBox.Checked then Options := Options + [seImports, seDelayImports, seBoundImports]; + FSearchThread := TJclPeNameSearch.Create(Trim(FuncNameEdit.Text), + PathEdit.Text, Options); + FSearchThread.OnTerminate := SearchDone; + FSearchThread.OnFound := SearchFound; + FSearchThread.OnProcessFile := SearchProcessFile; + UpdateButtons; + ClearResults; + FSearchThread.Resume; +end; + +procedure TPeSearchChild.StopSearch; +begin + FSearchThread.Terminate; +end; + +procedure TPeSearchChild.StartBtnClick(Sender: TObject); +begin + StartSearch; +end; + +procedure TPeSearchChild.StopBtnClick(Sender: TObject); +begin + StopSearch; +end; + +procedure TPeSearchChild.FormCreate(Sender: TObject); +begin + ProcessLabel.Caption := ''; + PathEdit.Text := GetWindowsSystemFolder; + UpdateButtons; + UpdateCounter; +end; + +procedure TPeSearchChild.SelectDirBtnClick(Sender: TObject); +var + S: string; +begin + if SelectDirectory('', '', S) then PathEdit.Text := S; +end; + +procedure TPeSearchChild.ClearResults; +begin + with ResultListView.Items do + begin + BeginUpdate; + Clear; + EndUpdate; + end; + UpdateCounter; +end; + +procedure TPeSearchChild.UpdateCounter; +begin + with ResultListView.Items do + if Count = 0 then + CountLabel.Caption := '' + else + CountLabel.Caption := Format('%d', [Count]); +end; + +procedure TPeSearchChild.UpdateButtons; +begin + StartBtn.Enabled := (FuncNameEdit.Text <> '') and (PathEdit.Text <> '') and + (ImportCheckBox.Checked or ExportCheckBox.Checked) and + not Assigned(FSearchThread); + StopBtn.Enabled := Assigned(FSearchThread); + FuncNameEdit.Enabled := not Assigned(FSearchThread); + PathEdit.Enabled := not Assigned(FSearchThread); + SelectDirBtn.Enabled := not Assigned(FSearchThread); + ExportCheckBox.Enabled := not Assigned(FSearchThread); + ImportCheckBox.Enabled := not Assigned(FSearchThread); +end; + +procedure TPeSearchChild.FuncNameEditChange(Sender: TObject); +begin + UpdateButtons; +end; + +function TPeSearchChild.ActiveLibName: string; +begin + if ResultListView.Selected <> nil then + Result := ResultListView.Selected.SubItems[0] + else + Result := ''; +end; + +procedure TPeSearchChild.ResultListViewDblClick(Sender: TObject); +begin + MainForm.OpenLibrary1.Execute; +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeViewer.dof b/official/1.104/examples/windows/delphitools/peviewer/PeViewer.dof new file mode 100644 index 0000000..cbce52f --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeViewer.dof @@ -0,0 +1,134 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=0 +UnsafeCode=0 +UnsafeCast=0 +[Linker] +MapFile=0 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir=..\..\..\..\bin +UnitOutputDir= +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath=..\..\..\..\source\ignore;..\..\..\..\source\common;..\..\..\..\source\windows;..\..\..\..\source\vcl +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir= +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=0 +MinorVer=5 +Release=4 +Build=129 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1033 +CodePage=1252 +[Version Info Keys] +CompanyName=Petr Vones +FileDescription=PE Viewer +FileVersion=0.5.4.129 +InternalName=PEVIEWER +LegalCopyright=(c) 2002 Petr Vones +LegalTrademarks= +OriginalFilename=PEVIEWER.EXE +ProductName=PE Viewer +ProductVersion=0.5.4 diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeViewer.dpr b/official/1.104/examples/windows/delphitools/peviewer/PeViewer.dpr new file mode 100644 index 0000000..7a9b5a8 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeViewer.dpr @@ -0,0 +1,33 @@ +program PeViewer; + +{$I jcl.inc} + +uses + Forms, + SysUtils, + D6MdiMsgFix in '..\Common\D6MdiMsgFix.pas', + PeViewerMain in 'PeViewerMain.pas' {MainForm}, + PeDump in 'PeDump.pas' {PeDumpChild}, + PeSearch in 'PeSearch.pas' {PeSearchChild}, + PeViewer_TLB in 'PeViewer_TLB.pas', + PeViewerControl in 'PeViewerControl.pas' {PeViewerControl: CoClass}, + PeResource in 'PeResource.pas', + PeResView in 'PeResView.pas' {PeResViewChild}, + ToolsUtils in '..\Common\ToolsUtils.pas', + About in '..\Common\About.pas' {AboutBox}, + PeGenDef in 'PeGenDef.pas' {PeGenDefChild}, + FindDlg in '..\Common\FindDlg.pas' {FindTextForm}, + ExceptDlg in '..\..\..\..\experts\debug\dialog\ExceptDlg.pas' {ExceptionDialog}, + SHDocVw_TLB in '..\Common\SHDocVw_TLB.pas'; + +{$R *.TLB} + +{$R *.RES} +{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.Title := 'PE Viewer'; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeViewer.res b/official/1.104/examples/windows/delphitools/peviewer/PeViewer.res new file mode 100644 index 0000000000000000000000000000000000000000..26d12ee208fe5fd938fc6c0275c25dd389f3bc7a GIT binary patch literal 1636 zcmd^;yKWOv5QcvThbR!hg?qN32o#Zt3?dRzfLx?VfmjJLbdeQ|iEwPoF+z0axf~?- z*#}5TK|u#41;TtY$D3UT7gRKiJZH|#{BvC&Ns8dnC@|Lv`Z|;NFM-LquTYrFC!j?x z5&Q_wDVY1jOsBrYPyK!noLu3)hQlEaYr@1R2+q)#8ULhsOk+^aQ6HT#r*dHb2qsH&m(z>sU9Jqy9<{wNpI76Y>A0&L?7vzQ3>y41-h;J8|7G zDcL{cr?mP*y7^tYVfw2ok+R`(4O*_bhvhTuPLrzgt@K<54D5taY zw^YcyrP+KEe>PL*TGgKRIXAS+ZObd{d%aEWMxXNEep$X*?jMyum#gj-7V}Qh1Amiy z>Zz+kwbalivZ*?mTY9ZF@S=)SI!Zw<_mI;w&Hz|=Lgx)-S+EpJ5E zZM=0IyZxcA5SP?hcl&|Y?|?satN|<3vDiZp@8K@C@)o0(3nP8I)#UckFnTH7iTvkkuCXq&Rbe72>A-jGRJ)PZi(;W9fZaYl4J zZQ?s*%I11bmYQCHJwkT%cDxs>`$X5k?u_f$7qMQGU6~fPd$H#wI)4cpg&kGM(Wc5f xy6k19oxazSE>m|h=HhnK-Ae0Tsp|bF-KGB+>6ZW7!lW(cYl6&v+xh&L{BOou!B_wQ literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeViewer.tlb b/official/1.104/examples/windows/delphitools/peviewer/PeViewer.tlb new file mode 100644 index 0000000000000000000000000000000000000000..bd17d10457d6587bd3440c1af58d87d47bcb289e GIT binary patch literal 1672 zcmd^AO>5Lp6umQ!nnI;h5SdCBDULfUgA`iCh1fDop|vAcvk{rh%xg^@ladD1g^-QX zMZ0d7{sjL(K@h~f{U5q^p`MfEmNW>a;LZy-_nmXUUhaFDS$)`EuS!KIW3|M{1HhCK zsixG)^8!|j8Tyrp4ID$6LnRF(LuePomyDZ$wadFC zJBa5d*^~7<=SB8%{$t=LIjnor_|UJ5asKl73~$TAG+ad$C;HSZ)e+$2G4BIk4(7X4vf7Kgtmre z`?A;iTV@bBS59i2cHBYJCUi=sV)mcLFAD!R_{~^i#XVTA8+dArEpvz=oBH_uaE`p! H6xRC<_fvV# literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeViewerControl.pas b/official/1.104/examples/windows/delphitools/peviewer/PeViewerControl.pas new file mode 100644 index 0000000..3c252cf --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeViewerControl.pas @@ -0,0 +1,83 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is PeViewerControl.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2006-05-30 00:02:45 +0200 (mar., 30 mai 2006) $ } +{ } +{**************************************************************************************************} + +unit PeViewerControl; + +{$I JCL.INC} + +interface + +uses + ComObj, ActiveX, PeViewer_TLB, Forms, Windows, StdVcl; + +type + TPeViewerControl = class(TAutoObject, IPeViewerControl) + private + FROTHandle: Integer; + protected + procedure OpenFile(const FileName: WideString); safecall; + procedure BringToFront; safecall; + { Protected declarations } + public + destructor Destroy; override; + procedure Initialize; override; + end; + +implementation + +uses ComServ, PeViewerMain; + +procedure TPeViewerControl.OpenFile(const FileName: WideString); +begin + if Length(FileName) > 0 then MainForm.OpenFile(FileName, True); +end; + +procedure TPeViewerControl.BringToFront; +begin + Application.Restore; + SetForegroundWindow(Application.Handle); +end; + +procedure TPeViewerControl.Initialize; +begin + inherited; + OleCheck(RegisterActiveObject(Self as IUnknown, Class_PeViewerControl, + ACTIVEOBJECT_WEAK, FROTHandle)); + {$IFDEF COMPILER5_UP} + ComServer.UIInteractive := False; + {$ENDIF} +end; + +destructor TPeViewerControl.Destroy; +begin + OleCheck(RevokeActiveObject(FROTHandle, nil)); + inherited; +end; + +initialization + TAutoObjectFactory.Create(ComServer, TPeViewerControl, Class_PeViewerControl, + ciMultiInstance, tmApartment); + +end. diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeViewerMain.dfm b/official/1.104/examples/windows/delphitools/peviewer/PeViewerMain.dfm new file mode 100644 index 0000000..e5aa53f --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeViewerMain.dfm @@ -0,0 +1,2179 @@ +object MainForm: TMainForm + Left = 193 + Top = 108 + Width = 576 + Height = 403 + Caption = 'PE Viewer' + Color = clAppWorkSpace + Constraints.MinHeight = 150 + Constraints.MinWidth = 370 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + FormStyle = fsMDIForm + Menu = MainMenu1 + OldCreateOrder = False + Position = poDefault + ShowHint = True + Visible = True + WindowMenu = Window1 + OnCreate = FormCreate + OnDestroy = FormDestroy + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object StatusBar1: TStatusBar + Left = 0 + Top = 330 + Width = 568 + Height = 19 + Panels = < + item + Width = 50 + end> + end + object CoolBar1: TCoolBar + Left = 0 + Top = 0 + Width = 568 + Height = 26 + AutoSize = True + Bands = < + item + Break = False + Control = ToolBar1 + ImageIndex = -1 + MinHeight = 22 + Width = 564 + end> + Color = clBtnFace + ParentColor = False + OnResize = CoolBar1Resize + object ToolBar1: TToolBar + Left = 9 + Top = 0 + Width = 551 + Height = 22 + AutoSize = True + Caption = 'ToolBar1' + Color = clBtnFace + EdgeBorders = [] + Flat = True + Images = ToolbarImagesList + ParentColor = False + TabOrder = 0 + object ToolButton1: TToolButton + Left = 0 + Top = 0 + Action = FileOpen1 + end + object ToolButton3: TToolButton + Left = 23 + Top = 0 + Action = Copy1 + end + object ToolButton4: TToolButton + Left = 46 + Top = 0 + Action = Save1 + end + object ToolButton20: TToolButton + Left = 69 + Top = 0 + Action = Find1 + end + object ToolButton5: TToolButton + Left = 92 + Top = 0 + Width = 8 + Caption = 'ToolButton5' + ImageIndex = 3 + Style = tbsSeparator + end + object ToolButton7: TToolButton + Left = 100 + Top = 0 + Action = GroupImports1 + Style = tbsCheck + end + object ToolButton19: TToolButton + Left = 123 + Top = 0 + Action = UnmangleNames1 + Style = tbsCheck + end + object ToolButton2: TToolButton + Left = 146 + Top = 0 + Action = OpenLibrary1 + end + object ToolButton18: TToolButton + Left = 169 + Top = 0 + Action = ShowUnitGen1 + end + object ToolButton11: TToolButton + Left = 192 + Top = 0 + Action = InvokeHelp1 + end + object ToolButton15: TToolButton + Left = 215 + Top = 0 + Width = 8 + Caption = 'ToolButton15' + ImageIndex = 10 + Style = tbsSeparator + end + object ToolButton14: TToolButton + Left = 223 + Top = 0 + Action = ViewResources1 + end + object ToolButton16: TToolButton + Left = 246 + Top = 0 + Action = ViewResDetails1 + Style = tbsCheck + end + object ToolButton17: TToolButton + Left = 269 + Top = 0 + Action = ViewResHex1 + Style = tbsCheck + end + object ToolButton8: TToolButton + Left = 292 + Top = 0 + Width = 8 + Caption = 'ToolButton8' + ImageIndex = 4 + Style = tbsSeparator + end + object ToolButton6: TToolButton + Left = 300 + Top = 0 + Action = Search1 + end + object ToolButton10: TToolButton + Left = 323 + Top = 0 + Width = 8 + Caption = 'ToolButton10' + ImageIndex = 14 + Style = tbsSeparator + end + object ToolButton9: TToolButton + Left = 331 + Top = 0 + Action = WindowCascade1 + end + object ToolButton12: TToolButton + Left = 354 + Top = 0 + Action = WindowTileHorizontal1 + end + object ToolButton13: TToolButton + Left = 377 + Top = 0 + Action = WindowTileVertical1 + end + end + end + object MainMenu1: TMainMenu + Images = ToolbarImagesList + Left = 8 + Top = 304 + object File1: TMenuItem + Caption = 'File' + object Open1: TMenuItem + Action = FileOpen1 + end + object Savetofile1: TMenuItem + Action = Save1 + end + object N3: TMenuItem + Caption = '-' + end + object Exit2: TMenuItem + Action = Exit1 + end + end + object Edit1: TMenuItem + Caption = 'Edit' + object Copytoclipboard1: TMenuItem + Action = Copy1 + end + object Selectall2: TMenuItem + Action = SelectAll1 + end + object N4: TMenuItem + Caption = '-' + end + object Findtext1: TMenuItem + Action = Find1 + end + end + object View1: TMenuItem + Caption = 'View' + object Search2: TMenuItem + Action = Search1 + end + object Openlibrary2: TMenuItem + Action = OpenLibrary1 + end + object Groupimports2: TMenuItem + Action = GroupImports1 + end + object Pascalunitgenerator1: TMenuItem + Action = ShowUnitGen1 + end + object N2: TMenuItem + Caption = '-' + end + object Unmanglenames2: TMenuItem + Action = UnmangleNames1 + end + object Viewresources2: TMenuItem + Action = ViewResources1 + end + object Viewdetails1: TMenuItem + Action = ViewResDetails1 + end + object Viewashex1: TMenuItem + Action = ViewResHex1 + end + end + object Window1: TMenuItem + Caption = 'Window' + object Cascade1: TMenuItem + Action = WindowCascade1 + end + object TileHorizontally1: TMenuItem + Action = WindowTileHorizontal1 + end + object TileVertically1: TMenuItem + Action = WindowTileVertical1 + end + end + object Help1: TMenuItem + Caption = 'Help' + object FindinWin32APIhelp1: TMenuItem + Action = InvokeHelp1 + end + object N1: TMenuItem + Caption = '-' + end + object Support1: TMenuItem + Action = SendMail1 + end + object About2: TMenuItem + Action = About1 + end + end + end + object ActionList: TActionList + Images = ToolbarImagesList + Left = 40 + Top = 304 + object Exit1: TAction + Caption = 'Exit' + Hint = 'Exit' + ImageIndex = 0 + OnExecute = Exit1Execute + end + object FileOpen1: TAction + Caption = 'Open...' + Hint = 'Open' + ImageIndex = 6 + ShortCut = 16463 + OnExecute = FileOpen1Execute + end + object InvokeHelp1: TAction + Caption = 'Find in Win32 API help' + Hint = 'Win32API help' + ImageIndex = 5 + ShortCut = 112 + OnExecute = InvokeHelp1Execute + OnUpdate = InvokeHelp1Update + end + object Copy1: TAction + Caption = 'Copy to clipboard' + Hint = 'Copy to clipboard' + ImageIndex = 2 + ShortCut = 16451 + OnExecute = Copy1Execute + OnUpdate = Copy1Update + end + object Save1: TAction + Caption = 'Save to file...' + Hint = 'Save to file' + ImageIndex = 2 + ShortCut = 16468 + OnExecute = Save1Execute + OnUpdate = Save1Update + end + object WindowCascade1: TWindowCascade + Category = 'Window' + Caption = 'Cascade' + Hint = 'Cascade' + ImageIndex = 7 + end + object WindowTileHorizontal1: TWindowTileHorizontal + Category = 'Window' + Caption = 'Tile Horizontally' + Hint = 'Tile Horizontally' + ImageIndex = 8 + end + object WindowTileVertical1: TWindowTileVertical + Category = 'Window' + Caption = 'Tile Vertically' + Hint = 'Tile Vertically' + ImageIndex = 9 + end + object About1: TAction + Caption = 'About...' + Hint = 'About' + OnExecute = About1Execute + end + object OpenLibrary1: TAction + Caption = 'Open library' + Hint = 'Open library' + ImageIndex = 4 + ShortCut = 16460 + OnExecute = OpenLibrary1Execute + OnUpdate = OpenLibrary1Update + end + object SelectAll1: TAction + Caption = 'Select all' + Hint = 'Select all' + ImageIndex = 14 + ShortCut = 16449 + OnExecute = SelectAll1Execute + OnUpdate = SelectAll1Update + end + object GroupImports1: TAction + Caption = 'Group imports' + Hint = 'Group imports' + ImageIndex = 13 + ShortCut = 16455 + OnExecute = GroupImports1Execute + OnUpdate = GroupImports1Update + end + object Search1: TAction + Caption = 'Search' + Hint = 'Search' + ImageIndex = 12 + OnExecute = Search1Execute + end + object ViewResources1: TAction + Caption = 'View resources' + Hint = 'View resources' + ImageIndex = 15 + ShortCut = 16466 + OnExecute = ViewResources1Execute + OnUpdate = ViewResources1Update + end + object ViewResDetails1: TAction + Caption = 'View details' + ImageIndex = 19 + ShortCut = 16452 + OnExecute = ViewResDetails1Execute + OnUpdate = ViewResDetails1Update + end + object ViewResHex1: TAction + Caption = 'View as hex' + Hint = 'View as hex' + ImageIndex = 20 + ShortCut = 16456 + OnExecute = ViewResHex1Execute + OnUpdate = ViewResHex1Update + end + object SendMail1: TAction + Caption = 'Support' + Hint = 'Support' + ImageIndex = 21 + OnExecute = SendMail1Execute + end + object ShowUnitGen1: TAction + Caption = 'Pascal unit generator' + Hint = 'Pascal unit generator' + ImageIndex = 22 + OnExecute = ShowUnitGen1Execute + OnUpdate = ShowUnitGen1Update + end + object UnmangleNames1: TAction + Caption = 'Unmangle names' + Hint = 'Unmangle names' + ImageIndex = 23 + ShortCut = 16469 + OnExecute = UnmangleNames1Execute + OnUpdate = UnmangleNames1Update + end + object Find1: TAction + Caption = 'Find text' + Hint = 'Find text' + ImageIndex = 24 + ShortCut = 16454 + OnExecute = Find1Execute + OnUpdate = Find1Update + end + end + object OpenFileDialog: TOpenDialog + Filter = + 'PE Exe files (*.exe;*.dll;*.bpl)|*.exe;*.dll;*.bpl|All files (*.' + + '*)|*.*' + Options = [ofHideReadOnly, ofAllowMultiSelect, ofPathMustExist, ofFileMustExist, ofEnableSizing] + Left = 104 + Top = 304 + end + object ToolbarImagesList: TImageList + ShareImages = True + Left = 72 + Top = 304 + Bitmap = { + 494C010119001D00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000008000000001002000000000000080 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000FFFFFF000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000FF + FF0000FFFF0000FFFF0000000000000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + FF000000FF000000FF0000000000FFFFFF000000000000000000000000000000 + 00000000000000000000FFFF0000FFFF0000FFFF000000000000000000000000 + 00007F7F7F007F7F7F007F7F7F00000000000000003F7F7F7F0000FFFF3F7F7F + 7F000000000000000000000000BFFFFFFF000000000000000000FFFFFF000000 + 0000000000BFFFFFFF000000000000000000FFFF0000000000000000000000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + FF000000FF000000FF0000000000FFFFFF00000000000000FF000000FF000000 + FF00000000007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F + 7F007F7F7F0000000000FFFFFF00000000000000000000FFFF0000FFFF0000FF + FF000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF000000000000000000FFFF00000000000000FFFF00FFFF + FF0000FFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + FF000000FF000000FF0000000000FFFFFF00000000000000FF000000FF000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000FFFFFF00000000000000003F7F7F7F0000FFFF3F7F7F + 7F000000000000000000000000BFFFFFFF000000000000000000000000000000 + 0000FFFFFFBFFFFFFF000000000000000000FFFF000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF000000000000000000FFFF00000000000000FFFF00FFFF + FF0000FFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF000000000000000000FFFFFF000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF + FF0000000000000000000000FF000000FF000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFFBFFFFFFF000000000000000000FFFF00000000000000FFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FF000000FF0000000000FFFF0000FFFF0000FFFF + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF000000 + 00000000000000000000FFFFFF00FFFFFF0000000000FFFFFF007F7F7F007F7F + 7F00FFFFFF007F7F7F007F7F7F00FFFFFF007F7F7F00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF00000000BFBFBFBF00FFFFFF000000 + 0000FFFFFF0000000000000000000000000000000000000000000000000000FF + FF00FFFFFF0000FFFF0000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFF0000FFFF0000FFFF + 00000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000000000000000000000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000000000FF000000FF000000 + FF000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFF0000FFFF0000FFFF + 000000000000FFFF000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF007F7F7F007F7F + 7F00FFFFFF007F7F7F007F7F7F007F7F7F00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFF000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + 0000FFFF0000FFFF000000000000FFFF00000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF000000000000000000FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFF00000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF0000000000000000007F7F7F000000 + 00007F7F7F00000000007F7F7F00000000007F7F7F00000000007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFFF000000FF0000BFFF00 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFF0000FFFF0000FFFF00000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF007F7F7F00000000007F7F7F000000 + 00007F7F7F00000000007F7F7F00000000007F7F7F00000000007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FF0000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF00000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00000000000000000000000000000000000000 + 0000000000BFFFFFFF000000000000000000000000BFFFFFFF00000000BFFFFF + FF000000000000000000FFFFFF00000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00000000000000000000000000000000000000 + 0000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF00000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000BFFFFFFF000000000000000000FFFFFF0000000000000000BFFFFF + FF000000000000000000FFFFFF00000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF0000FFFF0000FFFF00000000000000 + 00000000000000000000000000000000000000000000FFFFFF00BFBFBF00FFFF + FF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFF + FF00BFBFBF00FFFFFF00BFBFBF00000000000000000000000000000000000000 + 0000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF00000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000808080008080800080808000000000000000 + 00000000000000000000000000000000000000000000BFBFBF00FFFFFF00BFBF + BF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBF + BF00FFFFFF000000FF00FFFFFF00000000000000000000000000000000000000 + 00000000000000000000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000000000 + 0000FFFFFF0000000000FFFFFF00000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00BFBFBF00FFFF + FF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFF + FF00BFBFBF00FFFFFF00BFBFBF00000000000000000000000000000000000000 + 0000FFFFFF0000FFFF000000000000000000FFFFFF0000000000FFFFFF000000 + 0000FFFFFFBFFFFFFF00FFFFFF00000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000BFFFFF + FF0000FFFF000000000000FFFFBFFFFFFF00000000BFFFFFFF0000FFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000000000FFFFFF0000FFFF00000000BFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF00000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00800000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000000000000000000000000000FFFFFF0000000000FFFF + FF0000000000000000000000000000000000000000000000000000FFFFBFFFFF + FF0000FFFFBFFFFFFF00000000BFFFFFFF0000FFFF0000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF00000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00000000BFFFFFFF00FFFFFFBFFFFF + FF00000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF000000000000000000FFFFFF000000000000000000000000000000 + 000000000000000000000000000000000000FFFF00000000000000FFFFBFFFFF + FF0000FFFFBFFFFFFF0000FFFF00000000000000000000000000FFFFFFBFFFFF + FF00000000BFFFFFFF00FFFFFF00000000000000000080000000800000008000 + 00008000000080000000FFFFFF00800000008000000080000000800000008000 + 0000FFFFFF008000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF000000000000000000000000000000000000000000FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF000000 + 000000000000000000000000000000000000FFFF00BFFFFF00000000000000FF + FF00FFFFFF0000FFFF000000000000FFFF00FFFFFF0000FFFF00000000BFFFFF + FF00000000BFFFFFFF0000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000BFBFBF00FFFFFF0000000000FFFFFF00000000000000 + 000000000000000000000000000000000000FFFF00BFFFFF0000FFFF00000000 + 000000FFFFBFFFFFFF0000FFFFBFFFFFFF000000000000000000FFFFFFBFFFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 000000000000000000000000000000000000FFFF00BFFFFF0000FFFF00BFFFFF + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000080000000000000000000FF + FF00008080000000000000000080000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000800000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFF0000000000000000000000000000000080000000000000000000FF + FF0000808000000000000000008000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBF0000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBFBFBFBFBF00BFBFBFBFBFBFBF00BFBFBFBFBFBF + BF00BFBFBF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFFBFFFFF + FF00000000BFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFF0000000000000000000000000000000080000000000000000000FF + FF0000808000000000000000000000000000BFBFBFBFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF000000008000000000000000BFBFBFBF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000BFBFBFBFBFBFBF0000000080000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000003F7F7F + 7F007F7F7F000000000000000000000000000000000000000000FFFFFFBFFFFF + FF00000000BFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFF0000000000000000000000000000000080000000000000000000FF + FF00008080000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000080000000000000000000000000BFBFBF000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000800000 + 0000000000BFBFBFBF00BFBFBF000000000000000000FF000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F3F7F7F + 7F00000000000000000000000000000000000000000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000BFFFFF + FF00FFFFFF000000000000000000000000000000008000000000000000000080 + 8000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000080000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF000000 + 0000FFFFFF0000000000BFBFBF0000000000FF00000000000000FF0000BFFF00 + 0000000000000000000000000000000000000000003F7F7F7F007F7F7F000000 + 0000000000000000000000000000000000000000000000000000FFFFFFBFFFFF + FF00FFFFFF0000000000FFFFFFBFFFFFFF00FFFFFF0000000000FFFFFFBFFFFF + FF00FFFFFF000000000000000000000000000000008000000000000000000000 + 00007F7F7FBFBFBFBF0000000000000000000000000000000000000000000000 + 00007F7F7F00000000000000008000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFF + FF000000000000000000BFBFBF0000000000FF00000000000000000000000000 + 0000FF0000000000000000000000000000007F7F7F3F7F7F7F00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF00000000000000000000000000FFFFFFBFFFFF + FF00FFFFFF0000000000FFFFFFBFFFFFFF00FFFFFF0000000000FFFFFFBFFFFF + FF00FFFFFF0000000000000000000000000000000000000000007F7F7FBFBFBF + BF00BFBFBFBFBFBFBF00000000000000000000000000000000007F7F7F3F7F7F + 7F007F7F7F000000000000000080000000000000000000000000FFFFFF000000 + 0000000000BFFFFFFF000000000000000000FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000BFBFBF0000000000FF0000BFFF000000000000000000 + 00000000000000000000000000BFFFFFFF007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F3F7F7F7F007F7F7F00000000000000000000000000FFFFFFBFFFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00000000000000000000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF0000000000000000007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F000000000000000080000000000000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000BFBFBF000000000000000000FF000000FF0000BFFF00 + 0000FF0000BFFF00000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00000000BFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFF + FF00FFFFFF00000000000000000000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00000000BFBFBFBF000000003F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F000000000000000080000000000000000000000000000000BFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF00000000000000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00000000BFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFF + FF00FFFFFF00000000000000000000000000000000000000FF00BFBFBF000000 + FF00BFBFBFBFBFBFBF000000003F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F00000000000000008000000000000000000000FF00000000000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 000000000000000000000000FF0000000000000000000000000000000000FF00 + 0000000000BFFF0000000000000000000000000000BFFFFFFF00000000000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFF000000000000000000000000000000FF000000FF000000FFBFBFBF + BF00BFBFBFBFBFBFBF000000003F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F00000000000000008000000000000000000000FF00000000BFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF0000000000000000000000FF00000000000000000000000000FF0000000000 + 000000000000FF0000000000000000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF00000000000000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000000000 + 000000000000000000000000000000000000000000000000FF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBF00000000007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F00000000800000000000000080000000000000000000000000000000BFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00000000BFFFFFFF0000000000000000000000000000000000FF0000000000 + 000000000000FF0000000000000000000000000000BFFFFFFF00000000BFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF00000000000000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFF + FF00FFFFFF00000000000000000000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBFBFBFBFBF00BFBFBF0000000000000000000000 + 0000000000800000000000000080000000000000000000000000000000BFFFFF + FF000000000000000000000000BFFFFFFF000000000000000000FFFFFFBFFFFF + FF00000000BFFFFFFF0000000080000000000000000000000000FF0000000000 + 000000000000000000000000000000000000000000BFFFFFFF00FFFFFFBFFFFF + FF000000000000000000000000000000000000000000000000000000FF000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF00000000BFFFFF + FF0000000000000000000000000000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBFBFBFBFBF000000003F7F7F7F00000000800000 + 0000000000800000000000000080000000000000000000000000000000BFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF0000000000000000000000008000000000000000000000000000000000FF00 + 0000FF0000BFFF0000000000000000000000000000BFFFFFFF00000000BFFFFF + FF00000000BFFFFFFF00FFFFFF00000000000000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF000000003F7F7F7F000000008000000000000000800000 + 0000000000800000000000000080000000000000000000000000000000BFFFFF + FF00FFFFFFBFFFFFFF0000000000000000000000000000000000000000000000 + 0000000000800000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00000000BFFFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000008000000000000000000000 + 00000000003F7F7F7F0000000080000000000000008000000000000000800000 + 0000000000800000000000000080000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF000000000000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF0000000000000000000000000000000000000000 + 00000000003F7F7F7F0000000000000000000000003F7F7F7F00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFF000000000000FFFF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFF0000000000000000000000000000000000000000 + 0000000000000000FF000000FF000000000000FFFF0000FFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF3F7F7F + 7F007F7F7F3F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF3F7F7F + 7F007F7F7F3F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F0000000000FFFF0000000000000000000000000000000000000000 + 00000000FF000000FF000000FF000000000000FFFF0000FFFF0000FFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000FFFF0000FFFF0000FFFF000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF0000000000000000000000000000000000000000 + FF000000FF000000FF000000FF000000000000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 00000000000000FFFF0000FFFF00000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF0000000000000000003F7F7F7F000000FF000000 + FF000000FF000000FF000000FF000000000000FFFF0000FFFF0000FFFF0000FF + FF0000FFFF3F7F7F7F0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF00000000000000000000000000000000FF000000 + FF000000FF000000FF000000FF000000000000FFFF0000FFFF0000FFFF0000FF + FF0000FFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF00000000000000000000000000000000FF000000 + FF000000FF000000FF000000FF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF00000000000000000000000000000000FF000000 + FF000000FF000000FF000000000000FF0000000000BFFF000000FF0000BFFF00 + 0000FF0000000000000000000000000000000000000000000000000000000000 + 00000000000000FFFF0000FFFF0000FFFF000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF0000000000000000003F7F7F7F000000FF000000 + FF000000FF000000000000FF000000FF000000FF000000000000FF0000BFFF00 + 0000FF00003F7F7F7F0000000000000000000000000000000000000000000000 + 00000000000000FFFF0000FFFF00000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF0000000000000000000000000000000000000000 + FF000000000000FF000000FF000000FF000000FF000000FF0000000000BFFF00 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF0000000000000000000000000000000000000000 + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF0000000000000000000000000000000000000000 + 00000000000000FF000000FF000000FF000000FF000000FF0000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFF0000000000FFFF000000000000FFFF000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFF0000000000FFFF0000000000000000000000000000000000000000 + 00000000003F7F7F7F0000000000000000000000003F7F7F7F00000000000000 + 0000000000000000000000000000000000000000000000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFF000000000000FFFF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFF0000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF0000FFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF000000000000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF0000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000FFFFFF000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000FF + FF0000FFFF0000FFFF0000000000000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + FF000000FF000000FF0000000000FFFFFF000000000000000000000000000000 + 00000000000000000000FFFF0000FFFF0000FFFF000000000000000000000000 + 00007F7F7F007F7F7F007F7F7F00000000000000003F7F7F7F0000FFFF3F7F7F + 7F000000000000000000000000BFFFFFFF000000000000000000FFFFFF000000 + 0000000000BFFFFFFF000000000000000000FFFF0000000000000000000000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + FF000000FF000000FF0000000000FFFFFF00000000000000FF000000FF000000 + FF00000000007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F + 7F007F7F7F0000000000FFFFFF00000000000000000000FFFF0000FFFF0000FF + FF000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF000000000000000000FFFF00000000000000FFFF00FFFF + FF0000FFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + FF000000FF000000FF0000000000FFFFFF00000000000000FF000000FF000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000FFFFFF00000000000000003F7F7F7F0000FFFF3F7F7F + 7F000000000000000000000000BFFFFFFF000000000000000000000000000000 + 0000FFFFFFBFFFFFFF000000000000000000FFFF000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF000000000000000000FFFF00000000000000FFFF00FFFF + FF0000FFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF000000000000000000FFFFFF000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF + FF0000000000000000000000FF000000FF000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFFBFFFFFFF000000000000000000FFFF00000000000000FFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FF000000FF0000000000FFFF0000FFFF0000FFFF + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF000000 + 00000000000000000000FFFFFF00FFFFFF0000000000FFFFFF007F7F7F007F7F + 7F00FFFFFF007F7F7F007F7F7F00FFFFFF007F7F7F00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF00000000BFBFBFBF00FFFFFF000000 + 0000FFFFFF0000000000000000000000000000000000000000000000000000FF + FF00FFFFFF0000FFFF0000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFF0000FFFF0000FFFF + 00000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000000000000000000000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000000000FF000000FF000000 + FF000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFF0000FFFF0000FFFF + 000000000000FFFF000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF007F7F7F007F7F + 7F00FFFFFF007F7F7F007F7F7F007F7F7F00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFF000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + 0000FFFF0000FFFF000000000000FFFF00000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF000000000000000000FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFF00000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF0000000000000000007F7F7F000000 + 00007F7F7F00000000007F7F7F00000000007F7F7F00000000007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFFF000000FF0000BFFF00 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFF0000FFFF0000FFFF00000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF007F7F7F00000000007F7F7F000000 + 00007F7F7F00000000007F7F7F00000000007F7F7F00000000007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FF0000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF0000FFFF0000FFFF00000000000000 + 00000000000000000000000000000000000000000000FFFFFF00BFBFBF00FFFF + FF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFF + FF00BFBFBF00FFFFFF00BFBFBF00000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000808080008080800080808000000000000000 + 00000000000000000000000000000000000000000000BFBFBF00FFFFFF00BFBF + BF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBF + BF00FFFFFF000000FF00FFFFFF00000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00BFBFBF00FFFF + FF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFF + FF00BFBFBF00FFFFFF00BFBFBF00000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00800000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000000000000000000000000000FFFFFF0000000000FFFF + FF00000000000000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF000000000000000000FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000FFFFFF008000000000000000000000000000000080000000800000008000 + 00008000000080000000FFFFFF00800000008000000080000000800000008000 + 0000FFFFFF008000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF000000000000000000000000000000000000000000FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000BFBFBF00FFFFFF0000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000080000000800000008000000080000000800000008000 + 0000800000008000000080000000800000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF007F7F7F000000FF007F7F7F00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000000000000000 + 000000000000FF000000FF000000FF000000FF000000FF000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000FF + FF00FFFFFF0000FFFF000000FF000000FF000000FF0000FFFF00FFFFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FF000000FF000000FF000000FF00 + 0000FF000000FF000000BFBFBF0000000000BFBFBF00FF000000FF000000FF00 + 0000FF000000FF000000FF00000000000000000000000000000000FFFF00FFFF + FF0000FFFF00FFFFFF007F7F7F000000FF007F7F7F00FFFFFF0000FFFF00FFFF + FF0000FFFF000000000000000000000000000000000000000000008080000080 + 8000008080000080800000808000008080000080800000808000008080000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000BFBFBF00BFBF + BF00BFBFBF00BFBFBF00000000007F7F7F0000000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF000000000000000000000000000000000000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF0000000000000000000000000000FFFF00000000000080 + 8000008080000080800000808000008080000080800000808000008080000080 + 8000000000000000000000000000000000000000000000000000000000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 00008000000080000000800000008000000000000000FFFFFF00000000007F7F + 7F007F7F7F0000000000FFFFFF007F7F7F00FFFFFF00000000007F7F7F007F7F + 7F0000000000FFFFFF00000000000000000000000000FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF000000FF0000FFFF00FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF00000000000000000000000000FFFFFF0000FFFF000000 + 0000008080000080800000808000008080000080800000808000008080000080 + 8000008080000000000000000000000000000000000000000000000000008000 + 0000FFFFFF00FFFFFF0080000000800000008000000080000000800000008000 + 00008000000080000000FFFFFF00800000007F7F7F0000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000007F7F7F0000000000FFFFFF0000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF000000FF007F7F7F0000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF00000000000000000000FFFF00FFFFFF0000FF + FF00000000000080800000808000008080000080800000808000008080000080 + 8000008080000080800000000000000000000000000000000000000000008000 + 0000FFFFFF00FFFFFF0080000000800000008000000080000000800000008000 + 0000800000008000000080000000800000007F7F7F0000000000FFFFFF000000 + 00000000000000000000FFFFFF007F7F7F00FFFFFF0000000000000000000000 + 0000FFFFFF00000000007F7F7F000000000000FFFF00FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF000000FF000000FF00FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF000000000000000000FFFFFF0000FFFF00FFFF + FF0000FFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00800000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000000000000000000000FFFFFF0000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF000000FF000000FF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF00000000000000000000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 000080000000000000000000000000000000000000007F7F7F0000000000FFFF + FF000000000000000000FFFFFF007F7F7F00FFFFFF000000000000000000FFFF + FF00000000007F7F7F00000000000000000000FFFF00FFFFFF0000FFFF00FFFF + FF007F7F7F007F7F7F0000FFFF00FFFFFF007F7F7F000000FF000000FF00FFFF + FF0000FFFF00FFFFFF0000FFFF000000000000000000FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000080000000FFFFFF008000 + 000080000000800000008000000080000000800000008000000080000000FFFF + FF0080000000000000000000000000000000000000007F7F7F0000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000007F7F7F000000000000000000FFFFFF0000FFFF00FFFFFF0000FF + FF000000FF000000FF00FFFFFF0000FFFF007F7F7F000000FF000000FF0000FF + FF00FFFFFF0000FFFF00FFFFFF00000000000000000000FFFF00FFFFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000FFFFFF008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 000080000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFFFF00FFFF + FF000000000000000000000000000000000000000000FFFFFF0000FFFF00FFFF + FF000000FF000000FF007F7F7F00FFFFFF007F7F7F000000FF000000FF00FFFF + FF0000FFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00800000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF00FFFFFF0000FF + FF00FFFFFF000000FF000000FF000000FF000000FF000000FF00FFFFFF0000FF + FF00FFFFFF0000FFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000FFFF00FFFF + FF0000FFFF00FFFFFF000000FF000000FF000000FF00FFFFFF0000FFFF00FFFF + FF0000FFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 00008000000080000000800000008000000080000000FFFFFF00800000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F000000 + 00007F7F7F007F7F7F0000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF000000 + 0000BFBFBF00BFBFBF0000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F0000007F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF00BFBF + BF00BFBFBF00BFBFBF0000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F007F7F + 7F0000000000000000007F7F7F00000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00BFBFBF00000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 00007F7F7F007F7F7F0000FFFF00000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 00007F7F7F0000FFFF0000FFFF00000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000FFFFFF00FFFFFF00000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF000000000000000000BFBFBF0000000000FF000000FF000000FF00 + 00000000FF00FF000000FF0000000000000000000000FFFFFF00000000000000 + 0000FFFFFF00000000000000000000000000FFFFFF0000000000000000000000 + 00000000FF0000000000000000007F7F7F000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + FF000000FF000000FF00000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + FF000000FF000000FF00000000000000000000000000FF000000FF000000FF00 + 0000FF000000FF00000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00000000000000 + 00000000000000000000FFFFFF0000000000FFFFFF00000000000000FF000000 + FF000000FF000000FF000000FF000000000000000000FFFFFF00000000000000 + 00000000000000000000FFFFFF0000000000FFFFFF00000000000000FF000000 + FF000000FF000000FF000000FF00000000000000000000000000FF000000FF00 + 0000FF0000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F0000FFFF000000000000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF00000000000000000000000000FF00 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF00000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 000000000000000000007F7F7F0000FFFF007F7F7F0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000FFFFFF00FFFFFF000000000000000000000000000000 + FF000000FF000000FF00000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000FFFFFF00FFFFFF000000000000000000000000000000 + FF000000FF000000FF000000000000000000000000000000FF000000FF000000 + FF00000000000000000000FFFF0000FFFF0000FFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F00FFFF000000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF0000000000BFBF + BF00FFFFFF0000000000FFFFFF000000000000000000000000007F7F7F000000 + FF000000FF000000FF00000000000000000000000000FFFFFF0000000000BFBF + BF00FFFFFF0000000000FFFFFF000000000000000000000000007F7F7F000000 + FF000000FF000000FF000000000000000000000000000000FF000000FF000000 + FF0000000000000000007F7F7F0000FFFF007F7F7F0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F00FFFF0000FFFF00000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000FF000000FF000000FF000000 + FF000000FF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000FF000000FF000000FF000000 + FF000000FF00000000000000000000000000000000000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000800000000100010000000000000400000000000000000000 + 000000000000000000000000FFFFFF0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000F000000000000000F000000000000000 + F000000000000000F000000000000000F000000000000000F000000000000000 + F000000000000000E000000000000000C0000000000000008000000000000000 + 8000000000000000000000000000000000000000000000000001000000000000 + 000300000000000000070000000000008003C3808007FFFF8003C3000003FFE7 + 8003C2010001FFC78003C00380108F8F8003C003000007008003C00300003200 + 80030003800000008003000380008000800300030000F900800300030000E100 + 800300030000C900800300070000C9008003000FC001C3008007003FC001E300 + 800F80FFC007FF01801FC3FFE3FFFF03FFFFFFFFFFFFBFFF00010001F83FBFFF + 000100011010B04900010001E00F807F1FF11FF1C007B07F1DF11FF18003B9FF + 1CF118318003BFFF1C7118318003B0491C3118318003807F1C7118318003B07F + 1CF11831C007B9FF1DF11FF1E00FBFFF1FF11FF13018048F00010001F83F07FF + 00010001FFFF07FF00010001FFFF9FFFFFFF8000FFE3FC01FFF88000FC418C01 + 20F8C00088000401007FE00000000401007CF00000000401003CF80000008C01 + 000FFC000000FC01000406000000FC01000C07000000040301FF018000000407 + E3FC01800000040FFFFC0060000007FFFFFFC06000010603FFF8C0600001FF07 + FFF8F044000DFF8FFFFFF07ED553FFDFFFFFFFFFFFFF800180038003C0070000 + 80038003BFEB00008003800300050000800380037E310000800380037E350000 + 8003800300060000800380037FEA0000800380038014E00780038003C00AE007 + 80038003E001E00780038003E007E00780038003F007E00F80038003F003E01F + FFFFFFFFF803E03FFFFFFFFFFFFFE07FFFFFFFFFFFFFFC00FFFFF83FFFFFFC00 + F83FE00F001FFC000001C007000FFC00000180030007E000000180030003E000 + 000100010001E000000100010000E00780030001001F800780030001001F8007 + 80030001001F8007C10780038FF1801FE38F8003FFF9801FFFFFC007FF75801F + FFFFE00FFF8F801FFFFFF83FFFFFFFFFC007FF00FC00FE7FC007FF00FC00FE1F + C007FF00FC00FC07C007FF00FC00FC01C00700000000F800C00700000000F800 + C007000000000000C007000000000000C007002300230001C007000100010032 + C00700000000003EC00700230023003EC00700630063003EC00700C300C3001D + C007010701070023C00703FF03FF003F00000000000000000000000000000000 + 000000000000} + end + object SaveDialog: TSaveDialog + DefaultExt = 'txt' + Filter = 'Text files (*.txt)|*.txt|All files (*.*)|*.*' + Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing] + Left = 136 + Top = 304 + end + object IconImageList: TImageList + ShareImages = True + Left = 168 + Top = 304 + Bitmap = { + 494C010111001300040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000005000000001002000000000000050 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000FF000000 + FF000000FF00000000000000003F7F7F7F000000003F7F7F7F00000000000000 + 00000000FF000000FF000000FF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FF000000FF000000FF3F7F7F7F000000003F7F7F7F000000FF000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000FF000000FF000000FF00000000000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FF000000FF00000000000000FF000000FF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000080000000000000008000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FF000000800000000000000080000000FF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000FF000000FF000000000000000000000000000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FF000000FF000000FF000000000000000000000000000000FF000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000FF000000 + FF000000FF00000000000000003F7F7F7F000000003F7F7F7F00000000000000 + 00000000FF000000FF000000FF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000008000000000000000800000 + 00000000000000000000FFFFFFBFFFFFFF000000008000000000000000000000 + FF00000080000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000003F7F7F7F00000000000000 + 0000000000BFFFFFFF00FFFFFF00000000000000008000000000000000000000 + FF00000080000000FF0000000000008080000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000008080808000C0C0C080C0C0 + C000C0C0C080C0C0C000C0C0C080C0C0C000C0C0C080C0C0C000C0C0C080C0C0 + C000C0C0C0000000000000000000000000007F7F7F0000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF0000000080000000000000008000000000000000000000 + FF00000080000000FF0000808000008080000000008080808000808080808080 + 8000808080808080800080808080808080008080808080808000808080808080 + 8000808080808080800080808000000000000000000000000000808080808080 + 8000808080808080800080808080808080008080808080808000808080808080 + 8000808080808080800000000000000000000000008080808000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00C0C0C000000000000000000000000000000000BFFFFFFF00000000000000 + 0000FFFFFFBFFFFFFF0000000080000000000000008000000000000000000000 + FF00000080000000FF0000808000008080000000008080808000FFFFFF0000FF + FF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FF + FF00C0C0C00000FFFF0080808000000000000000000000000000808080BFFFFF + FF0000FFFF80C0C0C00000FFFF80C0C0C00000FFFF80C0C0C00000FFFF80C0C0 + C00000FFFF808080800000000000000000000000008080808000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00C0C0C0000000000000000000000000000000000000000000000000800000 + 0000000000BFFFFFFF0000000080000000000000008000000000000000000000 + FF00000080000000FF0000808080000000000000008080808000FFFFFF80C0C0 + C00000FFFF80C0C0C00000FFFF80C0C0C00000FFFF80C0C0C00000FFFF80C0C0 + C00000FFFF80C0C0C00080808000000000000000008080808000FFFFFF0000FF + FF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FF + FF00C0C0C0000000000080808000000000000000008080808000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFF0000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00C0C0C0000000000000000000000000000000003F7F7F7F00000000800000 + 0000000000BFFFFFFF00000000800000000000000080000000000000FF000000 + FF000000FF000000FF000000FF80000000000000008080808000FFFFFF0000FF + FF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FF + FF00C0C0C00000FFFF0080808000000000000000008080808000FFFFFF80C0C0 + C00000FFFF80C0C0C00000FFFF80C0C0C00000FFFF80C0C0C00000FFFF80C0C0 + C000808080000000000080808000000000000000008080808000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF0000000080C0C0C000C0C0C00000000000FFFFFFBFFFFF + FF00C0C0C00000000000000000000000000000000080000000007F7F7F000000 + 0000FFFFFF00000000007F7F7F80000000000000000000000000000080000000 + 8000000080000000800000008080000000000000008080808000FFFFFF80C0C0 + C00000FFFF80C0C0C00000FFFF80C0C0C00000FFFF80C0C0C00000FFFF80C0C0 + C00000FFFF80C0C0C0008080800000000000808080BFFFFFFF00C0C0C00000FF + FF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FF + FF00000000808080800080808000000000000000008080808000FFFFFFBFFFFF + FF00FFFFFF8080808000FFFFFF00000000008080808080808000000000BFFFFF + FF00C0C0C0000000000000000000000000000000008000000000000000000000 + 00000000003F7F7F7F0000000080000000000000000000808000008080000080 + 8000000000800000000000000080000000000000008080808000FFFFFF0000FF + FF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FF + FF00C0C0C00000FFFF008080800000000000808080BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFF808080 + 800000000080C0C0C00080808000000000000000008080808000FFFFFFBFFFFF + FF0000000080C0C0C000000000BFFFFFFF008080800000000000FFFFFFBFFFFF + FF00C0C0C0000000000000000000000000000000008000000000000000800000 + 0000000000800000000000000000000000000080800000808000008080800000 + 0000000000800000000000000080000000000000008080808000FFFFFF80C0C0 + C00000FFFF80C0C0C00000FFFF80C0C0C00000FFFF80C0C0C00000FFFF80C0C0 + C00000FFFF80C0C0C00080808000000000008080808080808000808080808080 + 8000808080808080800080808080808080008080808080808000808080808080 + 80008080800000FFFF0080808000000000000000008080808000FFFFFF000000 + 000000FFFF00000000008080808080808000000000BFFFFFFF00FFFFFFBFFFFF + FF00C0C0C0000000000000000000000000000000008000000000000000000000 + 0000000000800000000000000000008080000080800000808000000000800000 + 0000000000800000000000000080000000000000008080808000FFFFFF0000FF + FF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FF + FF00C0C0C00000FFFF0080808000000000000000008080808000FFFFFF80C0C0 + C00000FFFF80C0C0C00000FFFF80C0C0C00000FFFF80C0C0C00000FFFF80C0C0 + C00000FFFF80C0C0C00080808000000000000000008080808000FFFFFFBFFFFF + FF000000000000FFFF000000000000000000FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00C0C0C0000000000000000000000000000000000000000000000000000000 + 0000000000000000000000808000008080000080808000000000000000800000 + 0000000000800000000000000080000000000000008080808000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF0080808000000000000000008080808000FFFFFF0000FF + FF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C0BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF0080808000000000000000008080808000FFFFFFBFFFFF + FF000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00C0C0C0000000000000000000000000000000008000000000000000000000 + 0000000000000080800000808000008080000000008000000000000000800000 + 0000000000800000000000000080000000000000008080808000C0C0C00000FF + FF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C08080808000808080808080 + 8000808080808080800080808000000000000000008080808000FFFFFF80C0C0 + C00000FFFF80C0C0C00000FFFF80C0C0C000FFFFFF8080808000808080808080 + 8000808080808080800080808000000000000000008080808000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000008080800000000000000080000000000000003F7F7F + 7F000000003F7F7F7F000000008000000000000000000000000080808080C0C0 + C00000FFFF80C0C0C00000FFFF80C0C0C0008080800000000000000000000000 + 0000000000000000000000000000000000000000000000000000808080BFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF008080800000000000000000000000 + 0000000000000000000000000000000000000000008080808000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00C0C0C0BFFFFF + FF00808080000000000000000000000000000000008000000000000000000000 + 00000000000000000000000000800000000000000080000000000000003F7F7F + 7F000000003F7F7F7F0000000080000000000000000000000000000000808080 + 8000808080808080800080808080808080000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000808080 + 8000808080808080800080808080808080000000000000000000000000000000 + 0000000000000000000000000000000000000000008080808000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00C0C0C0808080 + 8000000000000000000000000000000000000000008000000000008080000000 + 000000000000000000000000003F7F7F7F0000000080000000000000003F7F7F + 7F000000003F7F7F7F0000000080000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000008080808000808080808080 + 8000808080808080800080808080808080008080808080808000808080000000 + 0000000000000000000000000000000000000000008000000000008080000080 + 8000000000000000000000000000000000000000000000000000000000800000 + 0000000000800000000000000080000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF007F0000007F0000007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000000000 + 00000000000000000000000000BFFFFFFF007F7F7F007F0000007F0000007F00 + 00007F7F7F000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000BFBFBF00BFBFBF007F7F7F007F7F7F007F7F7F00000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000000000 + FF000000FF000000FF00000000BFFFFFFF00000000007F0000007F0000007F00 + 00007F0000007F0000007F7F7F00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000BFBF + BF00BFBFBF007F7F7F000000000000000000000000007F7F7F007F7F7F007F7F + 7F00000000000000000000000000000000000000000000000000000000BFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000000000 + FF000000FF000000FF00000000BFFFFFFF0000000000000000007F0000007F00 + 00007F0000007F0000007F0000007F0000007F7F7F0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF00BFBF + BF0000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF00000000007F7F + 7F007F7F7F000000000000000000000000000000000000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000000000 + FF000000FF000000FF00000000BFFFFFFF0000000000000000007F7F7F007F00 + 00007F0000007F0000007F0000007F0000007F0000007F0000007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 00007F7F7F000000000000000000000000000000000000000000000000000000 + 0000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000000000 + 00000000000000000000000000BFFFFFFF000000000000000000000000007F00 + 00007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00 + 00007F7F7F000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000FF000000FF00000000000000 + 00000000000000000000000000000000000000000000BFBFBF007F7F7F00FFFF + FF00000000000000000000FFFF00007F7F00007F7F000000000000000000FFFF + FF007F7F7F007F7F7F0000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF000000000000000000000000000000 + 00007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00 + 00007F0000007F0000007F7F7F00000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000FF000000FF000000FF000000 + FF000000000000000000000000000000000000000000BFBFBF000000000000FF + FF000000000000FFFF00007F7F0000FFFF00007F7F00007F7F000000000000FF + FF00000000007F7F7F0000000000000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00000000BFFFFFFF00FFFFFFBFFFFFFF000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF00000000000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF00000000000000000000000000FFFFFF0000000000FFFF + FF000000000000FFFF0000FFFF0000FFFF0000FFFF00007F7F0000000000FFFF + FF00000000007F7F7F0000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFFBFFFFFFF00FFFFFF000000 + 00000000000000000000FFFFFFBFFFFFFF000000000000000000000000000000 + 0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00 + 0000FF000000FF00000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000FF000000FF000000FF000000 + FF000000000000000000000000000000000000000000FFFFFF000000000000FF + FF0000000000FFFFFF0000FFFF0000FFFF00007F7F0000FFFF000000000000FF + FF0000000000BFBFBF0000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFFFFFFF00000000000000 + 00000000000000000000000000BFFFFFFF00000000000000000000000000FF00 + 0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000FF000000FF00000000000000 + 00000000000000000000000000000000000000000000FFFFFF007F7F7F00FFFF + FF000000000000000000FFFFFF00FFFFFF0000FFFF000000000000000000FFFF + FF007F7F7F00BFBFBF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FF00 + 0000FF000000FF000000FF000000FF000000FF000000FF000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 0000BFBFBF000000000000000000000000000000000000000000FFFF00BFFFFF + 0000FFFF00000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFFBFFFFFFF000000000000000000FF000000FF00 + 0000FF000000FF000000FF000000FF0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00BFBF + BF0000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000000000BFBF + BF00BFBFBF000000000000000000000000000000000000000000FFFF00BFFFFF + 0000FFFF00000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFFBFFFFFFF0000000000FF000000FF000000FF00 + 0000FF000000FF00000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00BFBFBF007F7F7F000000000000000000000000007F7F7F00BFBFBF00BFBF + BF00000000000000000000000000000000000000000000000000FFFF00BFFFFF + 0000FFFF00000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFFBFFFFFFF0000000000FF000000FF000000FF00 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00BFBFBF00BFBFBF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFFBFFFFFFF00FF000000FF000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FF000000FF000000FF000000FF000000FF000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FF000000FF000000FF000000FF00 + 0000FF000000FF000000BFBFBF0000000000BFBFBF00FF000000FF000000FF00 + 0000FF000000FF000000FF000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + 0000000000000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF000000 + 0000000000000000000000000000000000000000000000000000BFBFBF00BFBF + BF00BFBFBF00BFBFBF00000000007F7F7F0000000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000080808000FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000000000000000000000000000000000000000000000000000FFFF + 00000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00000000007F7F + 7F007F7F7F0000000000FFFFFF007F7F7F00FFFFFF00000000007F7F7F007F7F + 7F0000000000FFFFFF0000000000000000000000000000000000000000000000 + 000000000000000000008080800080808000FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000808080008080800000000000000000000000000000000000FFFFFF00FFFF + FF0000000000000000000000000000000000000000000000000000000000FFFF + 000000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF + FF00000000000000000000000000000000007F7F7F0000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000007F7F7F00000000000000000000000000000000000000 + 00000000000000000000808080000000000000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000008080800000000000000000000000000000000000FFFFFF000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + 00000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000007F7F7F0000000000FFFFFF000000 + 00000000000000000000FFFFFF007F7F7F00FFFFFF0000000000000000000000 + 0000FFFFFF00000000007F7F7F00000000000000000000000000000000000000 + 00000000000080808000808080000000000000000000FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000080808000808080000000000000000000FFFFFF00FFFFFF000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + 000000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF00000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000008080800000000000000000000000000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000808080000000000000000000FFFFFF00000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + 00000000000000FFFF00FFFFFF00000000000000000000000000000000000000 + 000000000000000000000000000000000000000000007F7F7F0000000000FFFF + FF000000000000000000FFFFFF007F7F7F00FFFFFF000000000000000000FFFF + FF00000000007F7F7F0000000000000000000000000000000000000000000000 + 0000808080008080800000000000000000000000000000000000FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000008080800080808000FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000FFFF00FFFFFF0000FFFF0000000000000000000000 + 000000000000000000000000000000000000000000007F7F7F0000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000007F7F7F0000000000000000000000000000000000000000000000 + 0000808080008080800080808000808080008080800080808000808080008080 + 8000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000080808000FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000FFFF000000 + 00007F7F7F007F7F7F000000000000000000000000000000000000000000007F + 7F00007F7F00007F7F00007F7F00000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000FF000000 + 000000000000000000000000000000000000000000000000000000FFFF000000 + 00007F7F7F0000000000BFBFBF00BFBFBF00BFBFBF00BFBFBF0000000000007F + 7F0000FFFF00007F7F0000FFFF00000000000000000000000000000000000000 + 000000000000FFFFFF0000000000FFFFFF000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000FF000000 + FF0000000000000000000000000000000000000000000000000000FFFF000000 + 00007F7F7F007F7F7F00000000000000000000000000000000000000000000FF + FF00007F7F0000FFFF00007F7F0000000000000000000000000000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 000000000000000000000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF00000000000000000000000000000000000000000000FFFF000000 + 00007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F000000000000FF + FF0000FFFF00007F7F0000FFFF000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF000000000000000000000000000000 + 00000000000000000000FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF000000000000000000FFFFFF000000 + 00000000000000000000FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF000000000000000000000000000000000000FFFF000000 + 00007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F000000000000FF + FF0000FFFF0000FFFF00007F7F000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF0000000000000000000000000000FFFF000000 + 00000000000000000000000000000000000000000000000000000000000000FF + FF0000FFFF0000FFFF0000FFFF000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF000000000000000000000000000000 + 00000000000000000000FFFFFF00000000000000000000000000000000000000 + FF00000000000000000000000000FFFFFF0000000000BFBFBF00000000000000 + 0000FFFFFF0000000000FFFFFF000000000000000000FFFFFF00000000000000 + 0000FFFFFF00000000000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF000000000000000000000000000000000000FFFF000000 + 000000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000000000FF + FF0000FFFF0000FFFF0000FFFF000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + FF000000FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF00000000000000000000000000000000000000000000FFFF000000 + 000000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000000000FF + FF0000FFFF0000FFFF0000FFFF000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF00000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000FF000000FF000000 + FF000000FF000000FF0000000000FFFFFF000000000000000000FFFFFF000000 + 00000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000FF000000 + FF0000000000000000000000000000000000000000000000000000FFFF000000 + 000000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000000000FF + FF0000FFFF0000FFFF0000FFFF000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000000000000000000000000000000000000000FF000000FF000000 + FF000000FF000000FF000000FF0000000000FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000FF000000 + 000000000000000000000000000000000000000000000000000000FFFF000000 + 00007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F000000000000FF + FF0000FFFF0000FFFF0000FFFF000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF000000000000000000FFFFFF00FFFF + FF0000000000FFFFFF000000000000000000000000000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF0000000000BFBFBF00FFFFFF000000 + 0000FFFFFF0000000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000FFFF000000 + 000000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000000000FF + FF0000FFFF0000FFFF0000FFFF000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000000000000000000000000000000000000000FF000000FF000000 + FF000000FF000000FF000000FF0000000000FFFFFF00FFFFFF00FFFFFF000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000007F + 7F0000FFFF0000FFFF0000FFFF000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000FF000000FF000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF0000000000BFBF + BF00FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000FF + FF00007F7F0000FFFF0000FFFF000000000000000000FFFFFF0000000000FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000007F + 7F0000FFFF00007F7F0000FFFF000000000000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000500000000100010000000000800200000000000000000000 + 000000000000000000000000FFFFFF00FFFF000000000000FFFF000000000000 + C631000000000000E223000000000000F007000000000000F88F000000000000 + FC1F000000000000FE3F000000000000FC1F000000000000F80F000000000000 + F007000000000000E223000000000000C631000000000000FFFF000000000000 + FFFF000000000000FFFF000000000000F862FFFFFFFF800380E0C000E0008003 + 01E08000C000800301E08000C000800331E180008000800331C1800080008003 + C181800000008003C307800000008003FE17800000009003CC37800080008203 + A877800080008C0340F780018001800301E3C07FC07F8007C1E3E0FFE0FF800F + C0E3FFFFFFFF801FC83FFFFFFFFFFFFFFFFFFFFFFFFF80001FFFFFFFF83F8000 + 07FFFFFFE00FC00081FFFFFFC007E000C07FFCFF8003F000C01FFC3F8003F800 + E007FC0F0001FC00F00100030001FE00000000000001FF00F00300030001FF80 + E00FFC0F00018380E03FFC3F800383E0C0FFFCFF800383E083FFFFFFC00783E0 + 8FFFFFFFE00F83843FFFFFFFF83FFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 1FFFF83FFFFFFFFF041F0001FFFFFFFF000F0001FE7FF00F000F0001FC3FF3CF + 00070001FDBFFBDF00010001F99FF99F00008003FBDFFDBF00018003F3CFFC3F + 003F8003F00FFE7FFC7FC107FFFFFFFFFFFFE38FFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FC0FC00FFFFFFDF8000F000FC00FFCF + 8000C000FC00FFC700000000FC00000380000000FC00000180000000EC000000 + 80000000E40000018A800000E00000038A800000000000078A8000000001000F + 800000010003001F8A8000030007007F8FC00007000F00FFFFC0001FE3FF01FF + FFC0007FE7FF03FFFFC001FFEFFFFFFF00000000000000000000000000000000 + 000000000000} + end +end diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeViewerMain.pas b/official/1.104/examples/windows/delphitools/peviewer/PeViewerMain.pas new file mode 100644 index 0000000..c67de68 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeViewerMain.pas @@ -0,0 +1,631 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is PeViewerMain.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2008-09-09 21:32:17 +0200 (mar., 09 sept. 2008) $ } +{ } +{**************************************************************************************************} + +unit PeViewerMain; + +{$I JCL.INC} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + Menus, ActnList, ToolWin, ComCtrls, StdActns, ImgList, ShellAPI, JclPeImage; + +const + UM_CHECKPARAMSTR = WM_USER + $100; + +type + TMainForm = class(TForm) + MainMenu1: TMainMenu; + ActionList: TActionList; + File1: TMenuItem; + StatusBar1: TStatusBar; + FileOpen1: TAction; + Edit1: TMenuItem; + Window1: TMenuItem; + Exit1: TAction; + Exit2: TMenuItem; + InvokeHelp1: TAction; + Copy1: TAction; + Save1: TAction; + Copytoclipboard1: TMenuItem; + OpenFileDialog: TOpenDialog; + WindowCascade1: TWindowCascade; + WindowTileHorizontal1: TWindowTileHorizontal; + WindowTileVertical1: TWindowTileVertical; + Cascade1: TMenuItem; + TileHorizontally1: TMenuItem; + TileVertically1: TMenuItem; + ToolbarImagesList: TImageList; + Savetofile1: TMenuItem; + Open1: TMenuItem; + Help1: TMenuItem; + About1: TAction; + About2: TMenuItem; + CoolBar1: TCoolBar; + ToolBar1: TToolBar; + ToolButton1: TToolButton; + ToolButton3: TToolButton; + ToolButton4: TToolButton; + ToolButton5: TToolButton; + ToolButton11: TToolButton; + N3: TMenuItem; + SaveDialog: TSaveDialog; + OpenLibrary1: TAction; + ToolButton2: TToolButton; + SelectAll1: TAction; + Selectall2: TMenuItem; + IconImageList: TImageList; + GroupImports1: TAction; + View1: TMenuItem; + Openlibrary2: TMenuItem; + FindinWin32APIhelp1: TMenuItem; + N1: TMenuItem; + Search1: TAction; + ToolButton6: TToolButton; + N2: TMenuItem; + Search2: TMenuItem; + ToolButton7: TToolButton; + ToolButton8: TToolButton; + Groupimports2: TMenuItem; + ToolButton9: TToolButton; + ToolButton10: TToolButton; + ToolButton12: TToolButton; + ToolButton13: TToolButton; + ViewResources1: TAction; + Viewresources2: TMenuItem; + ToolButton14: TToolButton; + ToolButton15: TToolButton; + ViewResDetails1: TAction; + ViewResHex1: TAction; + ToolButton16: TToolButton; + ToolButton17: TToolButton; + Viewdetails1: TMenuItem; + Viewashex1: TMenuItem; + SendMail1: TAction; + Support1: TMenuItem; + ShowUnitGen1: TAction; + ToolButton18: TToolButton; + Pascalunitgenerator1: TMenuItem; + UnmangleNames1: TAction; + ToolButton19: TToolButton; + Unmanglenames2: TMenuItem; + Find1: TAction; + ToolButton20: TToolButton; + N4: TMenuItem; + Findtext1: TMenuItem; + procedure Exit1Execute(Sender: TObject); + procedure InvokeHelp1Update(Sender: TObject); + procedure FileOpen1Execute(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure InvokeHelp1Execute(Sender: TObject); + procedure Save1Execute(Sender: TObject); + procedure OpenLibrary1Execute(Sender: TObject); + procedure Copy1Update(Sender: TObject); + procedure OpenLibrary1Update(Sender: TObject); + procedure Copy1Execute(Sender: TObject); + procedure SelectAll1Execute(Sender: TObject); + procedure GroupImports1Update(Sender: TObject); + procedure GroupImports1Execute(Sender: TObject); + procedure Search1Execute(Sender: TObject); + procedure ViewResources1Update(Sender: TObject); + procedure ViewResources1Execute(Sender: TObject); + procedure ViewResDetails1Update(Sender: TObject); + procedure ViewResDetails1Execute(Sender: TObject); + procedure ViewResHex1Update(Sender: TObject); + procedure ViewResHex1Execute(Sender: TObject); + procedure Save1Update(Sender: TObject); + procedure About1Execute(Sender: TObject); + procedure SendMail1Execute(Sender: TObject); + procedure ShowUnitGen1Update(Sender: TObject); + procedure ShowUnitGen1Execute(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure UnmangleNames1Update(Sender: TObject); + procedure UnmangleNames1Execute(Sender: TObject); + procedure SelectAll1Update(Sender: TObject); + procedure Find1Update(Sender: TObject); + procedure Find1Execute(Sender: TObject); + procedure CoolBar1Resize(Sender: TObject); + private + FWin32Help: string; + function ActiveListViewToStrings: TStrings; + function IsWin32Help: Boolean; + function IsPeDumpChildActive: Boolean; + function IsPeResChildActive: Boolean; + function IsSearchChildActive: Boolean; + function IsGenDefChildActive: Boolean; + procedure OnActiveFormChange(Sender: TObject); + procedure UMCheckParamStr(var Message: TMessage); message UM_CHECKPARAMSTR; + procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES; + public + function FindPeResourceView(APeImage: TJclPeImage): TForm; + procedure InvokeWin32Help(const Name: string); + procedure OpenFile(const FileName: TFileName; CheckIfOpen: Boolean); + end; + +var + MainForm: TMainForm; + +const + icoHeader = 0; + icoDirectory = 1; + icoImports = 2; + icoExports = 3; + icoResources = 4; + icoSection = 5; + icoSortAsc = 6; + icoSortDesc = 7; + icoDelayImport = 8; + icoBoundImport = 9; + icoLoadConfig = 10; + icoRelocation = 11; + icoDebug = 12; + icoFolderShut = 13; + icoFolderOpen = 14; + icoResItem = 15; + icoWarning = 16; + +implementation + +uses ActiveX, ClipBrd, ToolsUtils, JclFileUtils, JclSysUtils, + About, PeDump, PeSearch, PeResView, PeGenDef, FindDlg; + +{$R *.DFM} + +{ TMainForm } + +procedure TMainForm.Exit1Execute(Sender: TObject); +begin + Close; +end; + +function TMainForm.IsPeDumpChildActive: Boolean; +begin + Result := ActiveMDIChild is TPeDumpChild; +end; + +procedure TMainForm.InvokeHelp1Update(Sender: TObject); +begin + TAction(Sender).Enabled := IsWin32Help and IsPeDumpChildActive and + (TPeDumpChild(ActiveMDIChild).ActiveWin32Function <> ''); +end; + +procedure TMainForm.FileOpen1Execute(Sender: TObject); +var + I: Integer; +begin + with OpenFileDialog do + begin + FileName := ''; + if Execute then + for I := 0 to Files.Count - 1 do OpenFile(Files[I], False); + end; +end; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + FWin32Help := Win32HelpFileName; + Screen.OnActiveFormChange := OnActiveFormChange; + DragAcceptFiles(Handle, True); +end; + +procedure TMainForm.FormDestroy(Sender: TObject); +begin + Screen.OnActiveFormChange := nil; + WinHelp(Application.Handle, PChar(FWin32Help), HELP_QUIT, 0); + DragAcceptFiles(Handle, False); +end; + +procedure TMainForm.OnActiveFormChange(Sender: TObject); +begin + if IsPeDumpChildActive then + begin +// GroupImports1.Checked := TPeDumpChild(ActiveMDIChild).GroupImports; + StatusBar1.Panels[0].Text := TPeDumpChild(ActiveMDIChild).FileName; + end else + if IsPeResChildActive then + begin + StatusBar1.Panels[0].Text := TPeResViewChild(ActiveMDIChild).PeImage.FileName; + end else + if IsGenDefChildActive then + begin + StatusBar1.Panels[0].Text := TPeGenDefChild(ActiveMDIChild).FileName; + end else + StatusBar1.Panels[0].Text := ''; +end; + +procedure TMainForm.OpenFile(const FileName: TFileName; CheckIfOpen: Boolean); +var + EI: TJclPeImage; + I: Integer; +begin + if CheckIfOpen then + begin + for I := 0 to MDIChildCount - 1 do + if MDIChildren[I] is TPeDumpChild and (TPeDumpChild(MDIChildren[I]).FileName = FileName) then + begin + MDIChildren[I].BringToFront; + Exit; + end; + end; + Screen.Cursor := crHourGlass; + EI := TJclPeImage.Create; + try + try + EI.FileName := FileName; + TPeDumpChild.CreateEx(Self, EI); + except + EI.Free; + raise; + end; + finally + Screen.Cursor := crDefault; + end; +end; + +procedure TMainForm.InvokeHelp1Execute(Sender: TObject); +begin + InvokeWin32Help(TPeDumpChild(ActiveMDIChild).ActiveWin32Function); +end; + +procedure TMainForm.Save1Execute(Sender: TObject); +var + SL: TStrings; +begin + if IsPeResChildActive and TPeResViewChild(ActiveMDIChild).CanSaveResource then + TPeResViewChild(ActiveMDIChild).SaveResource + else + if IsGenDefChildActive then + TPeGenDefChild(ActiveMDIChild).SaveUnit + else + with SaveDialog do + begin + if IsPeDumpChildActive then + FileName := ChangeFileExt(TPeDumpChild(ActiveMDIChild).FileName, '.txt') + else + FileName := ''; + if Execute then + begin + SL := ActiveListViewToStrings; + try + SL.SaveToFile(FileName); + finally + SL.Free; + end; + end; + end; +end; + +function TMainForm.IsWin32Help: Boolean; +begin + Result := FWin32Help <> ''; +end; + +procedure TMainForm.InvokeWin32Help(const Name: string); +var + S: string; +begin + S := PeStripFunctionAW(Name); + WinHelp(Application.Handle, PChar(FWin32Help), HELP_KEY, DWORD(S)); +end; + +procedure TMainForm.OpenLibrary1Execute(Sender: TObject); +begin + if IsPeDumpChildActive then + OpenFile(TPeDumpChild(ActiveMDIChild).ActiveLibName, False) + else + OpenFile(TPeSearchChild(ActiveMDIChild).ActiveLibName, False); +end; + +procedure TMainForm.Copy1Update(Sender: TObject); +begin + TAction(Sender).Enabled := (Screen.ActiveControl is TListView) or + ((Screen.ActiveControl is TRichEdit) and ((Screen.ActiveControl as TRichEdit).SelLength > 0)); +end; + +procedure TMainForm.OpenLibrary1Update(Sender: TObject); +begin + OpenLibrary1.Enabled := + (IsPeDumpChildActive and (TPeDumpChild(ActiveMDIChild).ActiveLibName <> '')) or + (IsSearchChildActive and (TPeSearchChild(ActiveMDIChild).ActiveLibName <> '')); +end; + +function TMainForm.ActiveListViewToStrings: TStrings; +begin + Screen.Cursor := crHourGlass; + try + Result := TStringList.Create; + try + Result.Capacity := 256; + ListViewToStrings(Screen.ActiveControl as TListView, Result, True); + except + FreeAndNil(Result); + raise; + end; + finally + Screen.Cursor := crDefault; + end; +end; + +procedure TMainForm.Copy1Execute(Sender: TObject); +var + SL: TStrings; +begin + if Screen.ActiveControl is TRichEdit then + (Screen.ActiveControl as TRichEdit).CopyToClipboard + else + if Screen.ActiveControl is TListView then + begin + SL := ActiveListViewToStrings; + try + Clipboard.AsText := SL.Text; + finally + SL.Free; + end; + end; +end; + +procedure TMainForm.SelectAll1Execute(Sender: TObject); +begin + if Screen.ActiveControl is TRichEdit then + TRichEdit(Screen.ActiveControl).SelectAll + else + if Screen.ActiveControl is TListView then + ListViewSelectAll(TListView(Screen.ActiveControl)); +end; + +procedure TMainForm.GroupImports1Update(Sender: TObject); +begin + with TAction(Sender) do + begin + Enabled := IsPeDumpChildActive; + if Enabled then + Checked := TPeDumpChild(ActiveMDIChild).GroupImports + else + Checked := False; + end; +end; + +procedure TMainForm.GroupImports1Execute(Sender: TObject); +begin + with TPeDumpChild(ActiveMDIChild) do + begin + GroupImports := not GroupImports; + GroupImports1.Checked := GroupImports; + end; +end; + +procedure TMainForm.Search1Execute(Sender: TObject); +begin + TPeSearchChild.Create(Self); +end; + +function TMainForm.IsSearchChildActive: Boolean; +begin + Result := ActiveMDIChild is TPeSearchChild; +end; + +procedure TMainForm.ViewResources1Update(Sender: TObject); +begin + TAction(Sender).Enabled := IsPeDumpChildActive and + TPeDumpChild(ActiveMDIChild).HasDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE]; +end; + +procedure TMainForm.ViewResources1Execute(Sender: TObject); +var + F: TForm; +begin + with ActiveMDIChild as TPeDumpChild do + begin + F := FindPeResourceView(PeImage); + if F = nil then + TPeResViewChild.CreateEx(Self, PeImage) + else + F.BringToFront; + end; +end; + +function TMainForm.FindPeResourceView(APeImage: TJclPeImage): TForm; +var + I: Integer; +begin + Result := nil; + for I := 0 to MDIChildCount - 1 do + if (MDIChildren[I] is TPeResViewChild) and (TPeResViewChild(MDIChildren[I]).PeImage = APeImage) then + begin + Result := MDIChildren[I]; + Break; + end; +end; + +function TMainForm.IsPeResChildActive: Boolean; +begin + Result := ActiveMDIChild is TPeResViewChild; +end; + +procedure TMainForm.ViewResDetails1Update(Sender: TObject); +begin + with TAction(Sender) do + begin + Enabled := IsPeResChildActive; + if Enabled then + Checked := TPeResViewChild(ActiveMDIChild).ShowSpecialDirView + else + Checked := False; + end; +end; + +procedure TMainForm.ViewResDetails1Execute(Sender: TObject); +begin + with ViewResDetails1 do + begin + Checked := not Checked; + TPeResViewChild(ActiveMDIChild).ShowSpecialDirView := Checked; + end; +end; + +procedure TMainForm.ViewResHex1Update(Sender: TObject); +begin + with TAction(Sender) do + begin + Enabled := IsPeResChildActive; + if Enabled then + Checked := TPeResViewChild(ActiveMDIChild).ShowAsHexView + else + Checked := False; + end; +end; + +procedure TMainForm.ViewResHex1Execute(Sender: TObject); +begin + with ViewResHex1 do + begin + Checked := not Checked; + TPeResViewChild(ActiveMDIChild).ShowAsHexView := Checked; + end; +end; + +procedure TMainForm.Save1Update(Sender: TObject); +begin + TAction(Sender).Enabled := (Screen.ActiveControl is TListView) or + (IsPeResChildActive and TPeResViewChild(ActiveMDIChild).CanSaveResource) or + (IsGenDefChildActive and TPeGenDefChild(ActiveMDIChild).CanSave); +end; + +procedure TMainForm.About1Execute(Sender: TObject); +begin + ShowToolsAboutBox; +end; + +procedure TMainForm.SendMail1Execute(Sender: TObject); +begin + SendEmail; +end; + +procedure TMainForm.ShowUnitGen1Update(Sender: TObject); +begin + TAction(Sender).Enabled := IsPeDumpChildActive and + TPeDumpChild(ActiveMDIChild).HasDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]; +end; + +procedure TMainForm.ShowUnitGen1Execute(Sender: TObject); +var + CurrFileName: TFileName; +begin + CurrFileName := (ActiveMDIChild as TPeDumpChild).FileName; + with TPeGenDefChild.Create(Self) do + FileName := CurrFileName; +end; + +function TMainForm.IsGenDefChildActive: Boolean; +begin + Result := ActiveMDIChild is TPeGenDefChild; +end; + +procedure TMainForm.FormShow(Sender: TObject); +begin + PostMessage(Handle, UM_CHECKPARAMSTR, 0, 0); +end; + +procedure TMainForm.UMCheckParamStr(var Message: TMessage); +var + I: Integer; + FileName: TFileName; +begin + for I := 1 to ParamCount do + begin + FileName := PathGetLongName(ParamStr(I)); + if (FileName <> '') and (FileName[1] <> '-') and (FileName[1] <> '/') then + OpenFile(FileName, False); + end; +end; + +procedure TMainForm.WMDropFiles(var Message: TWMDropFiles); +var + FilesCount, I: Integer; + FileName: array[0..MAX_PATH] of Char; +begin + FilesCount := DragQueryFile(Message.Drop, MAXDWORD, nil, 0); + for I := 0 to FilesCount - 1 do + begin + if (DragQueryFile(Message.Drop, I, @FileName, SizeOf(FileName)) > 0) and + IsValidPeFile(FileName) then + OpenFile(FileName, True); + end; + DragFinish(Message.Drop); + Message.Result := 0; + Application.BringToFront; +end; + +procedure TMainForm.UnmangleNames1Update(Sender: TObject); +begin + with TAction(Sender) do + begin + Enabled := IsPeDumpChildActive; + if Enabled then + Checked := TPeDumpChild(ActiveMDIChild).UnmangleNames + else + Checked := False; + end; +end; + +procedure TMainForm.UnmangleNames1Execute(Sender: TObject); +begin + with TPeDumpChild(ActiveMDIChild) do + begin + UnmangleNames := not UnmangleNames; + UnmangleNames1.Checked := UnmangleNames; + end; +end; + +procedure TMainForm.SelectAll1Update(Sender: TObject); +begin + TAction(Sender).Enabled := (Screen.ActiveControl is TListView) or + (Screen.ActiveControl is TRichEdit); +end; + +procedure TMainForm.Find1Update(Sender: TObject); +begin + TAction(Sender).Enabled := TFindTextForm.CanExecuteFind; +end; + +procedure TMainForm.Find1Execute(Sender: TObject); +begin + ShowFindDialog(Screen.ActiveControl as TListView); +end; + +procedure TMainForm.CoolBar1Resize(Sender: TObject); +begin + D4FixCoolBarResizePaint(Sender); +end; + +initialization + OleInitialize(nil); + +finalization + OleUninitialize; + +end. diff --git a/official/1.104/examples/windows/delphitools/peviewer/PeViewer_TLB.pas b/official/1.104/examples/windows/delphitools/peviewer/PeViewer_TLB.pas new file mode 100644 index 0000000..0175573 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/peviewer/PeViewer_TLB.pas @@ -0,0 +1,117 @@ +unit PeViewer_TLB; + +// ************************************************************************ // +// WARNING +// ------- +// The types declared in this file were generated from data read from a +// Type Library. If this type library is explicitly or indirectly (via +// another type library referring to this type library) re-imported, or the +// 'Refresh' command of the Type Library Editor activated while editing the +// Type Library, the contents of this file will be regenerated and all +// manual modifications will be lost. +// ************************************************************************ // + +// PASTLWTR : $Revision: 1658 $ +// File generated on 4.6.2000 18:23:08 from Type Library described below. + +// ************************************************************************ // +// Type Lib: C:\Program Files\Borland\Delphi5\Projects\Tools\PeViewer\PeViewer.tlb (1) +// IID\LCID: {7DD35085-3A37-11D4-B06E-C61ABD372324}\0 +// Helpfile: +// DepndLst: +// (1) v2.0 stdole, (C:\WINDOWS\SYSTEM\StdOle2.Tlb) +// ************************************************************************ // + +{$I jcl.inc} + +{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. + +interface + +uses + Windows, ActiveX, Classes, Graphics, + {$IFDEF DELPHI5_UP} + OleServer, + {$ENDIF DELPHI5_UP} + OleCtrls, StdVCL; + +// *********************************************************************// +// GUIDS declared in the TypeLibrary. Following prefixes are used: +// Type Libraries : LIBID_xxxx +// CoClasses : CLASS_xxxx +// DISPInterfaces : DIID_xxxx +// Non-DISP interfaces: IID_xxxx +// *********************************************************************// +const + // TypeLibrary Major and minor versions + PeViewerMajorVersion = 1; + PeViewerMinorVersion = 0; + + LIBID_PeViewer: TGUID = '{7DD35085-3A37-11D4-B06E-C61ABD372324}'; + + IID_IPeViewerControl: TGUID = '{7DD35086-3A37-11D4-B06E-C61ABD372324}'; + CLASS_PeViewerControl: TGUID = '{7DD35088-3A37-11D4-B06E-C61ABD372324}'; +type + +// *********************************************************************// +// Forward declaration of types defined in TypeLibrary +// *********************************************************************// + IPeViewerControl = interface; + IPeViewerControlDisp = dispinterface; + +// *********************************************************************// +// Declaration of CoClasses defined in Type Library +// (NOTE: Here we map each CoClass to its Default Interface) +// *********************************************************************// + PeViewerControl = IPeViewerControl; + + +// *********************************************************************// +// Interface: IPeViewerControl +// Flags: (4416) Dual OleAutomation Dispatchable +// GUID: {7DD35086-3A37-11D4-B06E-C61ABD372324} +// *********************************************************************// + IPeViewerControl = interface(IDispatch) + ['{7DD35086-3A37-11D4-B06E-C61ABD372324}'] + procedure OpenFile(const FileName: WideString); safecall; + procedure BringToFront; safecall; + end; + +// *********************************************************************// +// DispIntf: IPeViewerControlDisp +// Flags: (4416) Dual OleAutomation Dispatchable +// GUID: {7DD35086-3A37-11D4-B06E-C61ABD372324} +// *********************************************************************// + IPeViewerControlDisp = dispinterface + ['{7DD35086-3A37-11D4-B06E-C61ABD372324}'] + procedure OpenFile(const FileName: WideString); dispid 1; + procedure BringToFront; dispid 2; + end; + +// *********************************************************************// +// The Class CoPeViewerControl provides a Create and CreateRemote method to +// create instances of the default interface IPeViewerControl exposed by +// the CoClass PeViewerControl. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoPeViewerControl = class + class function Create: IPeViewerControl; + class function CreateRemote(const MachineName: string): IPeViewerControl; + end; + +implementation + +uses ComObj; + +class function CoPeViewerControl.Create: IPeViewerControl; +begin + Result := CreateComObject(CLASS_PeViewerControl) as IPeViewerControl; +end; + +class function CoPeViewerControl.CreateRemote(const MachineName: string): IPeViewerControl; +begin + Result := CreateRemoteComObject(MachineName, CLASS_PeViewerControl) as IPeViewerControl; +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/resfix/ResFix.dof b/official/1.104/examples/windows/delphitools/resfix/ResFix.dof new file mode 100644 index 0000000..e6fdb31 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/resfix/ResFix.dof @@ -0,0 +1,137 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=1 +UnsafeCode=1 +UnsafeCast=1 +[Linker] +MapFile=0 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir=..\..\..\..\bin +UnitOutputDir= +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath=..\..\..\..\source\include;..\..\..\..\source\common;..\..\..\..\source\windows;..\..\..\..\source\vcl +Packages=vcl;rtl;vclx;indy;vclie;xmlrtl;inetdbbde;inet;inetdbxpress;dbrtl;soaprtl;dsnap;VclSmp;dbexpress;vcldb;dbxcds;inetdb;bdertl;vcldbx;adortl;teeui;teedb;tee;ibxpress;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;EasyNSED7;Jcl +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir= +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=0 +MinorVer=5 +Release=4 +Build=15 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1033 +CodePage=1252 +[Version Info Keys] +CompanyName=Petr Vones +FileDescription=ResFix utility +FileVersion=0.5.4.15 +InternalName=RESFIX +LegalCopyright=(c) 2002 Petr Vones +LegalTrademarks= +OriginalFilename=RESFIX.EXE +ProductName=ResFix utility for Win95 +ProductVersion=0.5.4 +Comments= + diff --git a/official/1.104/examples/windows/delphitools/resfix/ResFix.dpr b/official/1.104/examples/windows/delphitools/resfix/ResFix.dpr new file mode 100644 index 0000000..c829783 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/resfix/ResFix.dpr @@ -0,0 +1,20 @@ +program ResFix; + +{$I jcl.inc} + +uses + Forms, + ResFixMain in 'ResFixMain.pas' {MainForm}, + About in '..\Common\About.pas' {AboutBox}, + ToolsUtils in '..\Common\ToolsUtils.pas', + ExceptDlg in '..\..\..\..\experts\debug\dialog\ExceptDlg.pas' {ExceptionDialog}; + +{$R *.RES} +{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.Title := 'ResFix'; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/official/1.104/examples/windows/delphitools/resfix/ResFix.res b/official/1.104/examples/windows/delphitools/resfix/ResFix.res new file mode 100644 index 0000000000000000000000000000000000000000..ef1acfc479f99f346dd04f179ddd5546f3a459db GIT binary patch literal 1700 zcmd^8zfapx5dKUIQB+hiFhG}j=l~3nL7`HY(h7(ai2`y^%7!AE2Grn0X+Z7f|H~j{ z$A3fz2DWzWP}O{Q&&Cd*suK$*pWnN??|#1b0Kg%~v0-k<=z1cx7l^UcRxTIq6tuvN zLw-lLVAKJ99;N``hafNu|J;%Tj7B3GqzGAJv+!@~66Jl05=tyl6o#RyR52Ze=h3Aq zMxvO$Jf~3=Do2?diJjhR7gQ!2Z6b?FQU4{I+!>zEWByN4<`Hp^krOC>w?pDR?kZK8n#{x{)qSJw;&ny<#a(1rc;uf&_=eg^jKx~5i8Bi3;`(>K|` z5Ca^;M+Y^oU9=h5$7l2i_Y~uz%1+;qtE@pPdW~m{w@%Cn`e+gVon5ymwKd5uSBdMe z>K?6ad{upo)mgWBHdKG8`TN8lD^`G>TBM$DjB%>AE~O#!2(6%$i_;`}zzmtciwaiB zRq`@-LKPJ0BfSk3@3Y=+u4<3HHCS66`- + OnResize = CoolBar1Resize + object ToolBar1: TToolBar + Left = 9 + Top = 0 + Width = 408 + Height = 22 + AutoSize = True + Caption = 'ToolBar1' + EdgeBorders = [] + Flat = True + Images = ImageList1 + TabOrder = 0 + object ToolButton1: TToolButton + Left = 0 + Top = 0 + Action = Open1 + end + object ToolButton2: TToolButton + Left = 23 + Top = 0 + Width = 8 + Caption = 'ToolButton2' + ImageIndex = 2 + Style = tbsSeparator + end + object ToolButton3: TToolButton + Left = 31 + Top = 0 + Action = Description1 + end + end + end + object StatusBar: TStatusBar + Left = 0 + Top = 338 + Width = 425 + Height = 19 + Panels = < + item + Width = 90 + end + item + Width = 50 + end> + SimplePanel = False + end + object ResListView: TListView + Left = 0 + Top = 26 + Width = 425 + Height = 255 + Align = alClient + Columns = < + item + Caption = 'Resource type' + Width = 100 + end + item + Caption = 'Resource name' + Width = 100 + end + item + Alignment = taRightJustify + Caption = 'Size' + Width = 60 + end + item + Alignment = taRightJustify + Caption = 'Fixed size' + Width = 70 + end> + ColumnClick = False + HotTrackStyles = [] + ReadOnly = True + RowSelect = True + TabOrder = 2 + ViewStyle = vsReport + OnCustomDrawItem = ResListViewCustomDrawItem + end + object MainMenu1: TMainMenu + Images = ImageList1 + Left = 8 + Top = 248 + object File1: TMenuItem + Caption = 'File' + object Open2: TMenuItem + Action = Open1 + end + object N1: TMenuItem + Caption = '-' + end + object Exit2: TMenuItem + Action = Exit1 + end + end + object Help1: TMenuItem + Caption = 'Help' + object Descriptionofbug1: TMenuItem + Action = Description1 + end + object N2: TMenuItem + Caption = '-' + end + object Support1: TMenuItem + Action = SendMail1 + end + object About11: TMenuItem + Action = About1 + end + end + end + object ActionList1: TActionList + Images = ImageList1 + Left = 40 + Top = 248 + object Open1: TAction + Caption = 'Open ...' + Hint = 'Open a PE file' + ImageIndex = 1 + ShortCut = 16463 + OnExecute = Open1Execute + end + object Exit1: TAction + Caption = 'Exit' + ImageIndex = 0 + OnExecute = Exit1Execute + end + object About1: TAction + Caption = 'About ...' + Hint = 'About' + OnExecute = About1Execute + end + object Description1: TAction + Caption = 'More about the bug' + Hint = 'Learn more about the bug in MSDN article' + ImageIndex = 2 + OnExecute = Description1Execute + end + object SendMail1: TAction + Caption = 'Support' + ImageIndex = 21 + OnExecute = SendMail1Execute + end + end + object ImageList1: TImageList + Left = 72 + Top = 248 + Bitmap = { + 494C010116001800040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000006000000001002000000000000060 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000080000000000000000000FF + FF00008080000000000000000080000000000000000000000000000000000000 + 000000000000000000000000000000000000BFBFBF40FFFFFF40BFBFBF40FFFF + FF40BFBFBF40FFFFFF40BFBFBF40FFFFFF40BFBFBF40FFFFFF40BFBFBF400000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40BFBFBF40FFFFFF40BFBFBF40FFFF + FF40BFBFBF40FFFFFF40BFBFBF40FFFFFF40BFBFBF40FFFFFF40BFBFBF400000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF400000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFF0000000000000000000000000000000080000000000000000000FF + FF0000808000000000000000008000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBF0000000000FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF400000000000000000FFFFFFBFFFFF + FF00000000BFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFF0000000000000000000000000000000080000000000000000000FF + FF0000808000000000000000000000000000BFBFBFBFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF000000008000000000FFFFFF40FFFFFF40FFFFFF40FFFF + FF4000000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408080 + 80408080804080808040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF4000000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF408080 + 80408080804080808040FFFFFF40FFFFFF400000000000000000FFFFFFBFFFFF + FF00000000BFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFF0000000000000000000000000000000080000000000000000000FF + FF00008080000000000000000000000000000000000000000000000000000000 + 000000000000000000000000008000000000BFBFBF40FFFFFF40BFBFBF40FFFF + FF40BFBFBF40FFFFFF40BFBFBF40FFFFFF40BFBFBF40FFFFFF40BFBFBF400000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF40BFBFBF40FFFFFF40BFBFBF40FFFF + FF40BFBFBF40FFFFFF40BFBFBF40FFFFFF40BFBFBF40FFFFFF40BFBFBF400000 + 0040FFFFFF40FFFFFF40FFFFFF40FFFFFF400000000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000BFFFFF + FF00FFFFFF000000000000000000000000000000008000000000000000000080 + 8000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000008000000000FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF400000000000000000FFFFFFBFFFFF + FF00FFFFFF0000000000FFFFFFBFFFFFFF00FFFFFF0000000000FFFFFFBFFFFF + FF00FFFFFF000000000000000000000000000000008000000000000000000000 + 00007F7F7FBFBFBFBF0000000000000000000000000000000000000000000000 + 00007F7F7F00000000000000008000000000FFFFFF40FFFFFF40FFFFFF40FFFF + FF4000000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF4000000040FFFFFF40FFFFFF40FFFFFF40FFFF + FF4000000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40000000400000000000000000FFFFFFBFFFFF + FF00FFFFFF0000000000FFFFFFBFFFFFFF00FFFFFF0000000000FFFFFFBFFFFF + FF00FFFFFF0000000000000000000000000000000000000000007F7F7FBFBFBF + BF00BFBFBFBFBFBFBF00000000000000000000000000000000007F7F7F3F7F7F + 7F007F7F7F00000000000000008000000000FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4000000040FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4000000040FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF400000000000000000FFFFFFBFFFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00000000000000000000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF0000000000000000007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F00000000000000008000000000FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF400000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00000000BFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFF + FF00FFFFFF00000000000000000000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00000000BFBFBFBF000000003F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F00000000000000008000000000FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF4000000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF4000000040FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF4000000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40000000400000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00000000BFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFF + FF00FFFFFF00000000000000000000000000000000000000FF00BFBFBF000000 + FF00BFBFBFBFBFBFBF000000003F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F00000000000000008000000000FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4000000040FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4000000040FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF400000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFF000000000000000000000000000000FF000000FF000000FFBFBFBF + BF00BFBFBFBFBFBFBF000000003F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F00000000000000008000000000FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF40FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF4080000040FFFFFF40FFFFFF400000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000000000 + 000000000000000000000000000000000000000000000000FF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBF00000000007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F0000000080000000000000008000000000FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF4000000040FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF4000000040FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF400000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFF + FF00FFFFFF00000000000000000000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBFBFBFBFBF00BFBFBF0000000000000000000000 + 000000000080000000000000008000000000FFFFFF40FFFFFF40FFFFFF40FFFF + FF4000000040FFFFFF40FFFFFF4000000040FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF4000000040FFFFFF40FFFFFF4000000040FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4000000000000000000000FF000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF00000000BFFFFF + FF0000000000000000000000000000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBFBFBFBFBF000000003F7F7F7F00000000800000 + 000000000080000000000000008000000000FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40800000408000004080000040FFFFFF4080000040FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF408000004080000040800000400000000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF000000003F7F7F7F000000008000000000000000800000 + 000000000080000000000000008000000000FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4000000040FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF4000000040FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF400000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000008000000000000000000000 + 00000000003F7F7F7F0000000080000000000000008000000000000000800000 + 00000000008000000000000000800000000000000040FFFFFF40FFFFFF40FFFF + FF400000004000000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF400000004000000040FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFFFF40FFFF + FF40FFFFFF40FFFFFF40FFFFFF40FFFFFF400000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF000000000000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF0000000000000000000000000000000000000000 + 00000000003F7F7F7F0000000000000000000000003F7F7F7F00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFF000000000000FFFF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFF0000000000000000000000000000000000000000 + 0000000000000000FF000000FF000000000000FFFF0000FFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF3F7F7F + 7F007F7F7F3F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF3F7F7F + 7F007F7F7F3F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F0000000000FFFF0000000000000000000000000000000000000000 + 00000000FF000000FF000000FF000000000000FFFF0000FFFF0000FFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000FFFF0000FFFF0000FFFF000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF0000000000000000000000000000000000000000 + FF000000FF000000FF000000FF000000000000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 00000000000000FFFF0000FFFF00000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF0000000000000000003F7F7F7F000000FF000000 + FF000000FF000000FF000000FF000000000000FFFF0000FFFF0000FFFF0000FF + FF0000FFFF3F7F7F7F0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF00000000000000000000000000000000FF000000 + FF000000FF000000FF000000FF000000000000FFFF0000FFFF0000FFFF0000FF + FF0000FFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF00000000000000000000000000000000FF000000 + FF000000FF000000FF000000FF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF00000000000000000000000000000000FF000000 + FF000000FF000000FF000000000000FF0000000000BFFF000000FF0000BFFF00 + 0000FF0000000000000000000000000000000000000000000000000000000000 + 00000000000000FFFF0000FFFF0000FFFF000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF0000000000000000003F7F7F7F000000FF000000 + FF000000FF000000000000FF000000FF000000FF000000000000FF0000BFFF00 + 0000FF00003F7F7F7F0000000000000000000000000000000000000000000000 + 00000000000000FFFF0000FFFF00000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF0000000000000000000000000000000000000000 + FF000000000000FF000000FF000000FF000000FF000000FF0000000000BFFF00 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF0000000000000000000000000000000000000000 + 000000FF000000FF000000FF000000FF000000FF000000FF000000FF00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF000000000000FFFF000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F0000000000FFFF0000000000000000000000000000000000000000 + 00000000000000FF000000FF000000FF000000FF000000FF0000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFF0000000000FFFF000000000000FFFF000000000000FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFF0000000000FFFF0000000000000000000000000000000000000000 + 00000000003F7F7F7F0000000000000000000000003F7F7F7F00000000000000 + 0000000000000000000000000000000000000000000000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFF000000000000FFFF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFF0000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF0000FFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF000000000000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF0000FFFF00BFFFFF + 0000FFFF00BFFFFF0000FFFF0000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000FFFFFF000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000FF + FF0000FFFF0000FFFF0000000000000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + FF000000FF000000FF0000000000FFFFFF000000000000000000000000000000 + 00000000000000000000FFFF0000FFFF0000FFFF000000000000000000000000 + 00007F7F7F007F7F7F007F7F7F00000000000000003F7F7F7F0000FFFF3F7F7F + 7F000000000000000000000000BFFFFFFF000000000000000000FFFFFF000000 + 0000000000BFFFFFFF000000000000000000FFFF0000000000000000000000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + FF000000FF000000FF0000000000FFFFFF00000000000000FF000000FF000000 + FF00000000007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F + 7F007F7F7F0000000000FFFFFF00000000000000000000FFFF0000FFFF0000FF + FF000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF000000000000000000FFFF00000000000000FFFF00FFFF + FF0000FFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + FF000000FF000000FF0000000000FFFFFF00000000000000FF000000FF000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000FFFFFF00000000000000003F7F7F7F0000FFFF3F7F7F + 7F000000000000000000000000BFFFFFFF000000000000000000000000000000 + 0000FFFFFFBFFFFFFF000000000000000000FFFF000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF000000000000000000FFFF00000000000000FFFF00FFFF + FF0000FFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF000000000000000000FFFFFF000000 + 000000000000000000000000000000000000FFFF000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF + FF0000000000000000000000FF000000FF000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFFBFFFFFFF000000000000000000FFFF00000000000000FFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FF000000FF0000000000FFFF0000FFFF0000FFFF + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF000000 + 00000000000000000000FFFFFF00FFFFFF0000000000FFFFFF007F7F7F007F7F + 7F00FFFFFF007F7F7F007F7F7F00FFFFFF007F7F7F00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 00000000000000000000000000BFFFFFFF00000000BFBFBFBF00FFFFFF000000 + 0000FFFFFF0000000000000000000000000000000000000000000000000000FF + FF00FFFFFF0000FFFF0000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFF0000FFFF0000FFFF + 00000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000000000000000000000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000000000FF000000FF000000 + FF000000000000000000000000BFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFF0000FFFF0000FFFF + 000000000000FFFF000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF007F7F7F007F7F + 7F00FFFFFF007F7F7F007F7F7F007F7F7F00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFF000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + 0000FFFF0000FFFF000000000000FFFF00000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF000000000000000000FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFF00000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF0000000000000000007F7F7F000000 + 00007F7F7F00000000007F7F7F00000000007F7F7F00000000007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFFF000000FF0000BFFF00 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFF0000FFFF0000FFFF00000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF007F7F7F00000000007F7F7F000000 + 00007F7F7F00000000007F7F7F00000000007F7F7F00000000007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FF0000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF0000FFFF0000FFFF00000000000000 + 00000000000000000000000000000000000000000000FFFFFF00BFBFBF00FFFF + FF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFF + FF00BFBFBF00FFFFFF00BFBFBF00000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000808080008080800080808000000000000000 + 00000000000000000000000000000000000000000000BFBFBF00FFFFFF00BFBF + BF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBF + BF00FFFFFF000000FF00FFFFFF00000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00BFBFBF00FFFF + FF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFFFF00BFBFBF00FFFF + FF00BFBFBF00FFFFFF00BFBFBF00000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00800000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000000000000000000000000000FFFFFF0000000000FFFF + FF00000000000000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008000000000000000000000000000000000000000000000000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF000000000000000000FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000FFFFFF008000000000000000000000000000000080000000800000008000 + 00008000000080000000FFFFFF00800000008000000080000000800000008000 + 0000FFFFFF008000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF000000000000000000000000000000000000000000FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000BFBFBF00FFFFFF0000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000080000000800000008000000080000000800000008000 + 0000800000008000000080000000800000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF007F7F7F000000FF007F7F7F00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 00000000000000000000000000000000000000000000000000000000000000FF + FF00FFFFFF0000FFFF000000FF000000FF000000FF0000FFFF00FFFFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000000000000000000000000000000000000000FFFF00FFFF + FF0000FFFF00FFFFFF007F7F7F000000FF007F7F7F00FFFFFF0000FFFF00FFFF + FF0000FFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F007F7F + 7F0000000000000000007F7F7F00000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00BFBFBF00000000000000000000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF0000000000000000000000000000000000000000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 00008000000080000000800000008000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 00007F7F7F007F7F7F0000FFFF00000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF000000FF0000FFFF00FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000000000000000000000000000000000000000008000 + 0000FFFFFF00FFFFFF0080000000800000008000000080000000800000008000 + 00008000000080000000FFFFFF008000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 00007F7F7F0000FFFF0000FFFF00000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000FFFFFF00FFFFFF0000000000FFFFFF0000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF000000FF007F7F7F0000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF00000000000000000000000000000000008000 + 0000FFFFFF00FFFFFF0080000000800000008000000080000000800000008000 + 00008000000080000000800000008000000000000000FFFFFF00000000000000 + 0000FFFFFF00000000000000000000000000FFFFFF0000000000000000000000 + 00000000FF0000000000000000007F7F7F000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000FFFF00FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF000000FF000000FF00FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF00000000000000000000000000000000008000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF008000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + FF000000FF000000FF00000000000000000000000000FF000000FF000000FF00 + 0000FF000000FF00000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF000000000000000000FFFFFF0000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF000000FF000000FF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF00000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 00008000000000000000000000000000000000000000FFFFFF00000000000000 + 00000000000000000000FFFFFF0000000000FFFFFF00000000000000FF000000 + FF000000FF000000FF000000FF00000000000000000000000000FF000000FF00 + 0000FF0000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000FFFF00FFFFFF0000FFFF00FFFF + FF007F7F7F007F7F7F0000FFFF00FFFFFF007F7F7F000000FF000000FF00FFFF + FF0000FFFF00FFFFFF0000FFFF00000000000000000080000000FFFFFF008000 + 000080000000800000008000000080000000800000008000000080000000FFFF + FF008000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF00000000000000000000000000FF00 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0000FFFF00FFFFFF0000FF + FF000000FF000000FF00FFFFFF0000FFFF007F7F7F000000FF000000FF0000FF + FF00FFFFFF0000FFFF00FFFFFF00000000000000000080000000FFFFFF008000 + 0000800000008000000080000000800000008000000080000000800000008000 + 00008000000000000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 000000000000000000007F7F7F0000FFFF007F7F7F0000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF0000FFFF00FFFF + FF000000FF000000FF007F7F7F00FFFFFF007F7F7F000000FF000000FF00FFFF + FF0000FFFF00FFFFFF0000000000000000000000000080000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00800000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000FFFFFF00FFFFFF000000000000000000000000000000 + FF000000FF000000FF000000000000000000000000000000FF000000FF000000 + FF00000000000000000000FFFF0000FFFF0000FFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF00FFFFFF0000FF + FF00FFFFFF000000FF000000FF000000FF000000FF000000FF00FFFFFF0000FF + FF00FFFFFF0000FFFF0000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000000000 + 00000000000000000000000000000000000000000000FFFFFF0000000000BFBF + BF00FFFFFF0000000000FFFFFF000000000000000000000000007F7F7F000000 + FF000000FF000000FF000000000000000000000000000000FF000000FF000000 + FF0000000000000000007F7F7F0000FFFF007F7F7F0000000000000000000000 + 000000000000000000000000000000000000000000000000000000FFFF00FFFF + FF0000FFFF00FFFFFF000000FF000000FF000000FF00FFFFFF0000FFFF00FFFF + FF0000FFFF000000000000000000000000000000000080000000800000008000 + 00008000000080000000800000008000000080000000FFFFFF00800000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000FF000000FF000000FF000000 + FF000000FF00000000000000000000000000000000000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF + FF00000000000000000000000000000000000000000080000000800000008000 + 0000800000008000000080000000800000008000000080000000800000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F000000 + 00007F7F7F007F7F7F0000000000000000000000000000000000000000000000 + 7F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF000000 + 0000BFBFBF00BFBFBF0000000000000000000000000000000000000000000000 + 7F0000007F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FF000000FF000000FF000000FF000000FF000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF00BFBF + BF00BFBFBF00BFBFBF0000000000000000000000000000000000000000000000 + 7F0000007F0000007F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000008080000080 + 8000008080000080800000808000008080000080800000808000008080000000 + 000000000000000000000000000000000000FF000000FF000000FF000000FF00 + 0000FF000000FF000000BFBFBF0000000000BFBFBF00FF000000FF000000FF00 + 0000FF000000FF000000FF000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000FFFF00000000000080 + 8000008080000080800000808000008080000080800000808000008080000080 + 8000000000000000000000000000000000000000000000000000BFBFBF00BFBF + BF00BFBFBF00BFBFBF00000000007F7F7F0000000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF0000FFFF000000 + 0000008080000080800000808000008080000080800000808000008080000080 + 80000080800000000000000000000000000000000000FFFFFF00000000007F7F + 7F007F7F7F0000000000FFFFFF007F7F7F00FFFFFF00000000007F7F7F007F7F + 7F0000000000FFFFFF00000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000FFFF00FFFFFF0000FF + FF00000000000080800000808000008080000080800000808000008080000080 + 8000008080000080800000000000000000007F7F7F0000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000007F7F7F000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF0000FFFF00FFFF + FF0000FFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000007F7F7F0000000000FFFFFF000000 + 00000000000000000000FFFFFF007F7F7F00FFFFFF0000000000000000000000 + 0000FFFFFF00000000007F7F7F000000000000000000FFFFFF00000000000000 + 0000FFFFFF000000000000000000BFBFBF0000000000FF000000FF000000FF00 + 00000000FF00FF000000FF000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF00000000000000 + 000000000000000000000000000000000000000000007F7F7F0000000000FFFF + FF000000000000000000FFFFFF007F7F7F00FFFFFF000000000000000000FFFF + FF00000000007F7F7F00000000000000000000000000FFFFFF00000000000000 + 00000000000000000000FFFFFF0000000000FFFFFF00000000000000FF000000 + FF000000FF000000FF000000FF00000000000000000000000000000000000000 + 7F0000007F0000007F0000FFFF000000000000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000FFFF00FFFFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000007F7F7F0000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000007F7F7F00000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFFFF00FFFF + FF000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000FFFFFF00FFFFFF000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 7F00FFFF000000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF0000000000BFBF + BF00FFFFFF0000000000FFFFFF000000000000000000000000007F7F7F000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 7F00FFFF0000FFFF00000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000FF000000FF000000FF000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000600000000100010000000000000300000000000000000000 + 000000000000000000000000FFFFFF008003C3807F7F7F008003C3007F7F7F00 + 8003C2010000003F8003C0030000003F8003C003BFBFBF008003C003BFBFBF00 + 80030003BFBFBFBF80030003BFBFBFBF800300030000FF00800300030000FF00 + 80030003BFBFBF0080030007BFBFBF008003000F0000FF008007003F00000000 + 800F80FF00000000801FC3FF00000000FFFFFFFFFFFFBFFF00010001F83FBFFF + 000100011010B04900010001E00F807F1FF11FF1C007B07F1DF11FF18003B9FF + 1CF118318003BFFF1C7118318003B0491C3118318003807F1C7118318003B07F + 1CF11831C007B9FF1DF11FF1E00FBFFF1FF11FF13018048F00010001F83F07FF + 00010001FFFF07FF00010001FFFF9FFFFFFF8000FFE3FC01FFF88000FC418C01 + 20F8C00088000401007FE00000000401007CF00000000401003CF80000008C01 + 000FFC000000FC01000406000000FC01000C07000000040301FF018000000407 + E3FC01800000040FFFFC0060000007FFFFFFC06000010603FFF8C0600001FF07 + FFF8F044000DFF8FFFFFF07ED553FFDFFFFFFFFFFFFF800180038003C0070000 + 80038003BFEB00008003800300050000800380037E310000800380037E350000 + 8003800300060000800380037FEA0000800380038014E00780038003C00AE007 + 80038003E001E00780038003E007E00780038003F007E00F80038003F003E01F + FFFFFFFFF803E03FFFFFFFFFFFFFE07FFC00FE7FFFFFFC00FC00FE1FF83FFC00 + FC00FC07E00FFC00FC00FC01C007FC000000F8008003E0000000F8008003E000 + 000000000001E000000000000001E00700230001000180070001003200018007 + 0000003E000180070023003E8003801F0063003E8003801F00C3001DC007801F + 01070023E00F801F03FF003FF83FFFFFC007FFFFFFFFFF00C007FFFFFFFFFF00 + C007001FF83FFF00C007000F0001FF00C007000700010000C007000300010000 + C007000100010000C007000000010000C007001F80030023C007001F80030001 + C007001F80030000C0078FF1C1070023C007FFF9E38F0063C007FF75FFFF00C3 + C007FF8FFFFF0107C007FFFFFFFF03FF00000000000000000000000000000000 + 000000000000} + end + object OpenFileDialog: TOpenDialog + Filter = + 'PE Exe files (*.exe;*.dll;*.bpl)|*.exe;*.dll;*.bpl|All files (*.' + + '*)|*.*' + Options = [ofHideReadOnly, ofAllowMultiSelect, ofPathMustExist, ofFileMustExist, ofEnableSizing] + Left = 104 + Top = 248 + end +end diff --git a/official/1.104/examples/windows/delphitools/resfix/ResFixMain.pas b/official/1.104/examples/windows/delphitools/resfix/ResFixMain.pas new file mode 100644 index 0000000..d825f2d --- /dev/null +++ b/official/1.104/examples/windows/delphitools/resfix/ResFixMain.pas @@ -0,0 +1,263 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is ResFixMain.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2006-05-30 00:02:45 +0200 (mar., 30 mai 2006) $ } +{ } +{**************************************************************************************************} + +unit ResFixMain; + +{$I jcl.inc} +{$IFDEF SUPPORTS_PLATFORM_WARNINGS} + {$WARN SYMBOL_PLATFORM OFF} +{$ENDIF SUPPORTS_PLATFORM_WARNINGS} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ComCtrls, ToolWin, ImgList, ActnList, Menus, JclPeImage, StdCtrls, + ExtCtrls; + +type + TMainForm = class(TForm) + CoolBar1: TCoolBar; + ToolBar1: TToolBar; + ToolButton1: TToolButton; + MainMenu1: TMainMenu; + ActionList1: TActionList; + ImageList1: TImageList; + StatusBar: TStatusBar; + Open1: TAction; + Exit1: TAction; + About1: TAction; + File1: TMenuItem; + Open2: TMenuItem; + N1: TMenuItem; + Exit2: TMenuItem; + Help1: TMenuItem; + About11: TMenuItem; + Description1: TAction; + ToolButton2: TToolButton; + ToolButton3: TToolButton; + Descriptionofbug1: TMenuItem; + N2: TMenuItem; + OpenFileDialog: TOpenDialog; + ResListView: TListView; + Bevel1: TBevel; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + MinResLabel: TLabel; + MaxResLabel: TLabel; + FactorLabel: TLabel; + SendMail1: TAction; + Support1: TMenuItem; + procedure Exit1Execute(Sender: TObject); + procedure Description1Execute(Sender: TObject); + procedure About1Execute(Sender: TObject); + procedure Open1Execute(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure ResListViewCustomDrawItem(Sender: TCustomListView; + Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); + procedure SendMail1Execute(Sender: TObject); + procedure CoolBar1Resize(Sender: TObject); + private + FPeImage: TJclPeImage; + procedure OpenFile(const FileName: TFileName); + procedure ProcessFile; + public + { Public declarations } + end; + +var + MainForm: TMainForm; + +implementation + +uses About, ToolsUtils, JclLogic, JclShell, JclSysUtils; + +{$R *.DFM} + +resourcestring + RsCheckApp = 'It is recommended to check the application. Would you like to start it ?'; + RsDescriptionURL = 'http://support.microsoft.com/support/kb/articles/Q182/8/19.asp'; + RsFixed = 'File was fixed'; + RsNoFixes = 'Not fixes needed'; + +type + TJclPeImageHack = class(TJclPeImage); + +{ TMainForm } + +procedure TMainForm.FormCreate(Sender: TObject); +begin + FPeImage := TJclPeImage.Create; + TJclPeImageHack(FPeImage).ReadOnlyAccess := False; +end; + +procedure TMainForm.FormDestroy(Sender: TObject); +begin + FreeAndNil(FPeImage); +end; + +procedure TMainForm.Exit1Execute(Sender: TObject); +begin + Close; +end; + +procedure TMainForm.Description1Execute(Sender: TObject); +begin + Win32Check(ShellExecEx(RsDescriptionURL)); +end; + +procedure TMainForm.About1Execute(Sender: TObject); +begin + ShowToolsAboutBox; +end; + +procedure TMainForm.Open1Execute(Sender: TObject); +begin + with OpenFileDialog do + begin + FileName := ''; + if Execute then OpenFile(FileName); + end; +end; + +procedure TMainForm.OpenFile(const FileName: TFileName); +begin + FPeImage.FileName := FileName; + StatusBar.Panels[0].Text := ''; + StatusBar.Panels[1].Text := FileName; + ProcessFile; +end; + +procedure TMainForm.ProcessFile; +var + MinResSize, MaxResSize: Integer; + ScalingFactor: Integer; + NeedFix, AnyFixes: Boolean; + FileName: TFileName; + + procedure ScanResources(List: TJclPeResourceList); + var + I, Size: Integer; + Item: TJclPeResourceItem; + begin + for I := 0 to List.Count - 1 do + begin + Item := List[I]; + if Item.IsDirectory then + ScanResources(Item.List) + else + begin + Size := Item.DataEntry^.Size; + MinResSize := Min(MinResSize, Size); + MaxResSize := Max(MaxResSize, Size); + with ResListView.Items.Add do + begin + Caption := Item.ResourceTypeStr; + Data := Item; + SubItems.Add(Item.ParentItem.Name); + SubItems.Add(Format('%u', [Size])); + SubItems.Add(''); + end; + end; + end; + end; + + procedure FixResources(List: TJclPeResourceList); + var + I, Size: Integer; + Item: TJclPeResourceItem; + begin + for I := 0 to List.Count - 1 do + begin + Item := List[I]; + if Item.IsDirectory then + FixResources(Item.List) + else + if Item.ResourceType in [rtCursor, rtIcon, rtCursorEntry, rtIconEntry] then + begin + Size := Item.DataEntry^.Size; + if (Size mod ScalingFactor <> 0) or (Size < ScalingFactor * 2) then + begin + Size := Max((Size div ScalingFactor + 1) * ScalingFactor, ScalingFactor * 2); + Item.DataEntry^.Size := Size; + AnyFixes := True; + ResListView.FindData(0, Item, True, False).SubItems[2] := Format('%u', [Size]); + end; + end; + end; + end; + +begin + MinResSize := MaxInt; + MaxResSize := 0; + FileName := FPeImage.FileName; + ResListView.Items.BeginUpdate; + try + ResListView.Items.Clear; + ScanResources(FPeImage.ResourceList); + + ScalingFactor := ((MaxResSize div 65536) div 2 + 1) * 2; + MinResLabel.Caption := Format('%d', [MinResSize]); + MaxResLabel.Caption := Format('%d', [MaxResSize]); + FactorLabel.Caption := Format('%d', [ScalingFactor]); + + NeedFix := (MaxResSize >= 65536) and (MinResSize mod ScalingFactor <> 0); + AnyFixes := False; + if NeedFix then FixResources(FPeImage.ResourceList); + FPeImage.FileName := ''; + ListViewFocusFirstItem(ResListView); + finally + ResListView.Items.EndUpdate; + end; + with StatusBar.Panels[0] do + if AnyFixes then + begin + Text := RsFixed; + if MessBox(RsCheckApp, MB_YESNO or MB_ICONQUESTION) = ID_YES then + ShellExecEx(FileName); + end else + Text := RsNoFixes; +end; + +procedure TMainForm.ResListViewCustomDrawItem(Sender: TCustomListView; + Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); +begin + if Item.SubItems[2] <> '' then + Sender.Canvas.Font.Color := clRed; +end; + +procedure TMainForm.SendMail1Execute(Sender: TObject); +begin + SendEmail; +end; + +procedure TMainForm.CoolBar1Resize(Sender: TObject); +begin + D4FixCoolBarResizePaint(Sender); +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/screenjpg/Main.dfm b/official/1.104/examples/windows/delphitools/screenjpg/Main.dfm new file mode 100644 index 0000000..071988c --- /dev/null +++ b/official/1.104/examples/windows/delphitools/screenjpg/Main.dfm @@ -0,0 +1,901 @@ +object MainForm: TMainForm + Left = 192 + Top = 107 + Width = 561 + Height = 447 + Caption = 'ScreenJPG' + Color = clBtnFace + Constraints.MinHeight = 200 + Constraints.MinWidth = 300 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Menu = MainMenu1 + OldCreateOrder = False + Position = poDefaultPosOnly + ShowHint = True + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object CoolBar1: TCoolBar + Left = 0 + Top = 0 + Width = 553 + Height = 26 + AutoSize = True + Bands = < + item + Control = ToolBar1 + ImageIndex = -1 + MinHeight = 22 + Width = 549 + end> + OnResize = CoolBar1Resize + object ToolBar1: TToolBar + Left = 9 + Top = 0 + Width = 536 + Height = 22 + AutoSize = True + Caption = 'ToolBar1' + EdgeBorders = [] + Flat = True + Images = ImageList1 + TabOrder = 0 + object ToolButton1: TToolButton + Left = 0 + Top = 0 + Action = OpenFile1 + end + object ToolButton3: TToolButton + Left = 23 + Top = 0 + Action = SaveFile1 + end + object ToolButton4: TToolButton + Left = 46 + Top = 0 + Width = 8 + Caption = 'ToolButton4' + ImageIndex = 1 + Style = tbsSeparator + end + object ToolButton5: TToolButton + Left = 54 + Top = 0 + Action = Paste1 + end + object ToolButton6: TToolButton + Left = 77 + Top = 0 + Width = 8 + Caption = 'ToolButton6' + ImageIndex = 2 + Style = tbsSeparator + end + object RatioComboBox: TComboBox + Left = 85 + Top = 0 + Width = 58 + Height = 21 + Hint = 'Quality' + TabStop = False + Style = csDropDownList + Color = clBtnFace + Ctl3D = True + DropDownCount = 10 + Enabled = False + ItemHeight = 13 + ParentCtl3D = False + TabOrder = 0 + OnChange = RatioComboBoxChange + end + object ColorComboBox: TComboBox + Left = 143 + Top = 0 + Width = 58 + Height = 21 + Hint = 'Color' + TabStop = False + Style = csDropDownList + Color = clBtnFace + Ctl3D = True + Enabled = False + ItemHeight = 13 + Items.Strings = ( + 'B/W' + 'Color') + ParentCtl3D = False + TabOrder = 1 + OnChange = RatioComboBoxChange + end + end + end + object StatusBar1: TStatusBar + Left = 0 + Top = 382 + Width = 553 + Height = 19 + Panels = < + item + Width = 120 + end + item + Width = 50 + end> + SimplePanel = False + end + object ScrollBox: TScrollBox + Left = 0 + Top = 26 + Width = 553 + Height = 356 + HorzScrollBar.Tracking = True + VertScrollBar.Tracking = True + Align = alClient + TabOrder = 2 + object Image1: TImage + Left = 0 + Top = 0 + Width = 549 + Height = 352 + Align = alClient + AutoSize = True + end + end + object MainMenu1: TMainMenu + Images = ImageList1 + Left = 8 + Top = 344 + object File1: TMenuItem + Caption = 'File' + object Open1: TMenuItem + Action = OpenFile1 + end + object SaveAs1: TMenuItem + Action = SaveFile1 + end + object N1: TMenuItem + Caption = '-' + end + object Exit2: TMenuItem + Action = Exit1 + end + end + object Edit1: TMenuItem + Caption = 'Edit' + object Paste11: TMenuItem + Action = Paste1 + end + end + object Help1: TMenuItem + Caption = 'Help' + object About2: TMenuItem + Action = About1 + end + end + end + object ImageList1: TImageList + Left = 40 + Top = 344 + Bitmap = { + 494C010111001300040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000005000000001002000000000000050 + 00000000000000000000000000000000000000000000000000007F7F7F007F7F + 7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F + 7F007F7F7F00FFFFFF00000000000000000010C0000040AF60004FEF6000408F + 70001F8060000FC0100040EF6F00904F7F009F6F600090EF6F00608F6F00102F + 600090CF2F00A04F70000F6F60005F2F6F0070EF60004FC01000B0AF6000908F + 70009F6F600090EF6F00608F6F00102F600090CF2F00A04F70000F6F60005F2F + 6F0070EF60004FA000000F8F6F004FEF600070EF000040206000606F4000602F + 6F002FCF6F00A00F0F00A02F600010EF4F00804F5000000F0000000F00000010 + 00000F0010008000000030204F000010000000000000000000007F7F7F007F7F + 7F0000000000FFFFFF0000000000000000000000000000000000000000000000 + 00007F7F7F00FFFFFF0000000000000000009F8F70000F8F7000AF6F7000102F + 6000902F300020804F002FCF6000A04F000000600000A0EF6F00806F0000F02F + 00002FE050004F8F6000A00F6F001F202F0010C0000040AF60004FEF6000408F + 700010601000300050000FCF6F002F8F6F009FCF0F000FA00000BF2F6F00208F + 7000404F0000900000000FA00000BF2F6F00208F7000404F0000900000000060 + 0F009F2F6F006F0F700060AF6000802F600070AF6000600F0F00000000005080 + 50009F6F600090EF6F00608F6F0010EF6F0000000000000000007F7F7F00FFFF + FF007F7F7F0000000000FFFFFF00000000000000000000000000000000000000 + 00007F7F7F00FFFFFF0000000000000000002FAF00001F8F7000606F3000202F + 0F003FA04000702F6000108F6F002F8F600040400F004F8F70002FAF6F0040AF + 60004FEF6000408F700010A00F005F0050000F4F70002FCF6F00A06F4000A08F + 6F009F80400040000F00A02F600010EF4F00908F60002F4F70001020000040E0 + 4F00706F4000402F600070EF60002FEF00009F4050000F8F70004FEF6F001FEF + 6F006F4F60007F4F40007F0F7F001F0F6F000FCF6F003FAF60006F204F00A0AF + 60006F6F700070605000A04F70004FCF6F0000000000000000007F7F7F00FFFF + FF00000000007F7F7F0000000000FFFFFF000000000000000000000000000000 + 00007F7F7F00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000007F0F7F001F0F6F000FCF6F003FAF + 6000000000004F8050001FEF6F006F4F60007F4F40007F0F7F006F6040007F8F + 6F007F4F70001FEF6F006F4F60007F4F40007F0F7F0020804F002FCF6000A06F + 0000BF1000001F8050007F0F7000100000002FE050004F8F6000A00F6F001040 + 3F0030004F002F2F6F003F0F6F00A04F0000AFE00000A02F6000106F5000A0EF + 6F00800F0F002F605000A02F7F0060AF600000000000000000007F7F7F00FFFF + FF0000000000000000007F7F7F00FFFFFF000000000000000000000000000000 + 00007F7F7F00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F00FFFF + FF0000000000000000007F7F7F00FFFFFF000000000000000000000000000000 + 00007F7F7F00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F00FFFF + FF0000000000000000007F7F7F00FFFFFF000000000000000000000000000000 + 00007F7F7F00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F00FFFF + FF0000000000000000007F7F7F00FFFFFF000000000000000000000000000000 + 00007F7F7F00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F00FFFF + FF0000000000000000007F7F7F00FFFFFF000000000000000000000000000000 + 00007F7F7F00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F00FFFF + FF0000000000000000007F7F7F00FFFFFF00FFFFFF0000000000000000000000 + 00007F7F7F00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F00FFFF + FF0000000000000000007F7F7F007F7F7F000000000000000000000000000000 + 00007F7F7F00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F00FFFF + FF0000000000000000007F7F7F00FFFFFF000000000000000000000000000000 + 00007F7F7F00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F00FFFF + FF0000000000FFFFFF007F7F7F00FFFFFF000000000000000000000000000000 + 00007F7F7F00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F00FFFF + FF007F7F7F00FFFFFF007F7F7F00FFFFFF000000000000000000000000000000 + 00007F7F7F00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F00FFFF + FF007F7F7F007F7F7F007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF007F7F7F00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F007F7F + 7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F + 7F007F7F7F000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000008000000080000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000800000000000000000000000800000000000000000000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000800000000000000000000000800000000000000080000000000000000000 + 0000800000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000800000000000000000000000800000000000000080000000000000000000 + 0000800000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000008000000080000000800000000000000080000000000000000000 + 0000800000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000800000000000000080000000800000008000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000800000000000000080000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000800000008000000080000000800000008000 + 0000800000008000000080000000800000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000080000000FFFFFF0000000000000000000000 + 00000000000000000000FFFFFF00800000000000000000000000000000000000 + 000000000000000000000000000000FFFF0000FFFF0000FFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000000000000000 + 0000000000000000000000000000808080008080800080808000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000080000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF0000000000000000000000 + 00000000000000000000FFFFFF00800000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000800000008000 + 0000800000008000000080000000000000000000000000000000000000000000 + 000080000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000FFFFFF000000 + 000000000000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000800000008000 + 0000800000008000000000000000000000000000000000000000000000000000 + 000000000000800000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF000000000000000000FFFF + FF00800000008000000080000000800000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000800000008000 + 0000800000000000000000000000000000000000000000000000000000000000 + 000000000000800000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000FFFFFF000000 + 000000000000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF0080000000FFFFFF008000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000800000008000 + 0000000000008000000000000000000000000000000000000000000000000000 + 000000000000800000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0080000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00800000008000000000000000000000000000000000000000000000000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000800000000000 + 0000000000000000000080000000800000000000000000000000000000000000 + 000080000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000FFFFFF000000 + 000000000000FFFFFF0000000000800000008000000080000000800000008000 + 0000800000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008000000080000000800000008000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000000000FFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF000000000000000000000000000000000000000000FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000080000000800000008000000080000000800000008000 + 0000800000008000000080000000800000000000000000000000000000000000 + 7F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000008080000080 + 8000000000000000000000000000000000000000000000000000000000000000 + 0000000000000080800000000000000000000000000000000000000000000000 + 0000000000000000000080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000000000000000 + 7F0000007F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000008080000080 + 8000008080000080800000808000008080000080800000808000008080000000 + 0000000000000000000000000000000000000000000000000000008080000080 + 8000000000000000000000000000000000000000000000000000000000000000 + 0000000000000080800000000000000000000000000080808000008080008080 + 8000008080008080800080000000FFFFFF000000000000000000000000000000 + 00000000000000000000FFFFFF00800000000000000000000000000000000000 + 7F0000007F0000007F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000FFFF00000000000080 + 8000008080000080800000808000008080000080800000808000008080000080 + 8000000000000000000000000000000000000000000000000000008080000080 + 8000000000000000000000000000000000000000000000000000000000000000 + 0000000000000080800000000000000000000000000000808000808080000080 + 8000808080000080800080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00800000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF0000FFFF000000 + 0000008080000080800000808000008080000080800000808000008080000080 + 8000008080000000000000000000000000000000000000000000008080000080 + 8000000000000000000000000000000000000000000000000000000000000000 + 0000000000000080800000000000000000000000000080808000008080008080 + 8000008080008080800080000000FFFFFF00000000000000000000000000FFFF + FF00800000008000000080000000800000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000FFFF00FFFFFF0000FF + FF00000000000080800000808000008080000080800000808000008080000080 + 8000008080000080800000000000000000000000000000000000008080000080 + 8000008080000080800000808000008080000080800000808000008080000080 + 8000008080000080800000000000000000000000000000808000808080000080 + 8000808080000080800080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0080000000FFFFFF0080000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF0000FFFF00FFFF + FF0000FFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000008080000080 + 8000000000000000000000000000000000000000000000000000000000000000 + 0000008080000080800000000000000000000000000080808000008080008080 + 8000008080008080800080000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00800000008000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000FFFF00FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00000000000000 + 0000000000000000000000000000000000000000000000000000008080000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000080800000000000000000000000000000808000808080000080 + 8000808080000080800080000000800000008000000080000000800000008000 + 0000800000000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF000000000000000000000000000000000000000000FFFFFF0000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000008080000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000080800000000000000000000000000080808000008080008080 + 8000008080008080800000808000808080000080800080808000008080008080 + 8000008080000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000FFFF00FFFFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000008080000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000080800000000000000000000000000000808000808080000000 + 0000000000000000000000000000000000000000000000000000000000008080 + 8000808080000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F0000FFFF000000000000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000008080000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000080800000000000000000000000000080808000808080000000 + 0000000000000000000000000000000000000000000000000000000000008080 + 8000008080000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000008080000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000808000808080000080 + 80000000000000FFFF00000000000000000000FFFF0000000000808080000080 + 8000808080000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000008080000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000FFFF0000FFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F00FFFF000000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F00FFFF0000FFFF00000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000500000000100010000000000800200000000000000000000 + 000000000000000000000000FFFFFF00C00300780000E0FFCBF3000000000078 + C5F3000000000000CAF3000000001084CCF3000000000000CCF3108410840000 + CCF3008400000000CCF3000000000000CCF3000000000000CC73000000840000 + CCF3000000000000CCF3000000000000C8F3000000000000C0F3000000000000 + C003000000000000C007E0FFE0FFE0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF8FFFC007C007C0078C03FFFFFFFFFFFF8FFFC03FF83FF807FFFF + FFFFFFFFFFFFFFFFC007C007C0078FFFFFFFFFFFFFFF8C03C03FF01FF8078FFF + FFFFFFFFFFFFFFFFC007C007C007FFFFFFFFFFFFFFFF8FFFC03FF83FF8078C03 + FFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFFFFFFFFFFFFF + F6CFFFFFFFFFE00FF6B7FFFFFFFFFFFFF6B7F00F81FFF83FF8B7F8C7E3FFF39F + FE8FF8C7F1FFF39FFE3FF8C7F8FFF39FFF7FF80FFC7FF39FFE3FF8C7FE3FF39F + FEBFF8C7FF1FF39FFC9FF8C7FF8FF39FFDDFF00FFF03E10FFDDFFFFFFFFFFFFF + FDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC007FFFFFFFF + FE00BFEBFFFFC007FE000005FFFFC007FE007E31FFFFC00780007E35FFF7C007 + 80000006C1F7C00780007FEAC3FBC00780008014C7FBC0078001C00ACBFBC007 + 8003E001DCF7C0078007E007FF0FC007807FF007FFFFC00F80FFF003FFFFC01F + 81FFF803FFFFC03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFC007FFFFC001FC00C007 + 001F80318000C007000F80310000C007000780310000C007000380010000C007 + 000180010001C007000080010003C007001F8FF10003C007001F8FF10003C007 + 001F8FF10003C0078FF18FF10FC3C007FFF98FF10003C007FF758FF58007C007 + FF8F8001F87FC007FFFFFFFFFFFFC00700000000000000000000000000000000 + 000000000000} + end + object ActionList1: TActionList + Images = ImageList1 + Left = 72 + Top = 344 + object OpenFile1: TAction + Caption = 'Open ...' + Hint = 'Open a file' + ImageIndex = 0 + ShortCut = 16463 + OnExecute = OpenFile1Execute + end + object Exit1: TAction + Caption = 'Exit' + ImageIndex = 3 + OnExecute = Exit1Execute + end + object SaveFile1: TAction + Caption = 'Save As ...' + ImageIndex = 1 + ShortCut = 16467 + OnExecute = SaveFile1Execute + OnUpdate = SaveFile1Update + end + object Paste1: TAction + Caption = 'Paste picture' + Hint = 'Paste picture' + ImageIndex = 2 + ShortCut = 16470 + OnExecute = Paste1Execute + OnUpdate = Paste1Update + end + object About1: TAction + Caption = 'About...' + OnExecute = About1Execute + end + end + object SaveDialog1: TSaveDialog + DefaultExt = 'jpeg' + Filter = 'JPEG images|*.jpg;*.jpeg' + Options = [ofOverwritePrompt, ofHideReadOnly, ofPathMustExist, ofEnableSizing] + Left = 138 + Top = 348 + end + object OpenDialog1: TOpenPictureDialog + Filter = 'Bitmaps (*.bmp)|*.bmp||*.emf' + Left = 106 + Top = 348 + end +end diff --git a/official/1.104/examples/windows/delphitools/screenjpg/Main.pas b/official/1.104/examples/windows/delphitools/screenjpg/Main.pas new file mode 100644 index 0000000..bb8532c --- /dev/null +++ b/official/1.104/examples/windows/delphitools/screenjpg/Main.pas @@ -0,0 +1,285 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is Main.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2006-05-30 00:02:45 +0200 (mar., 30 mai 2006) $ } +{ } +{**************************************************************************************************} + +unit Main; + +{$I JCL.INC} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ComCtrls, ToolWin, ActnList, ImgList, Menus, ExtCtrls, StdCtrls, Jpeg, + ClipBrd, ExtDlgs; + +type + TMainForm = class(TForm) + CoolBar1: TCoolBar; + ToolBar1: TToolBar; + StatusBar1: TStatusBar; + MainMenu1: TMainMenu; + ImageList1: TImageList; + ActionList1: TActionList; + OpenFile1: TAction; + Exit1: TAction; + File1: TMenuItem; + Open1: TMenuItem; + N1: TMenuItem; + Exit2: TMenuItem; + ToolButton1: TToolButton; + ScrollBox: TScrollBox; + Image1: TImage; + RatioComboBox: TComboBox; + SaveFile1: TAction; + SaveAs1: TMenuItem; + ToolButton3: TToolButton; + SaveDialog1: TSaveDialog; + ColorComboBox: TComboBox; + Paste1: TAction; + ToolButton4: TToolButton; + ToolButton5: TToolButton; + ToolButton6: TToolButton; + Edit1: TMenuItem; + Paste11: TMenuItem; + Help1: TMenuItem; + OpenDialog1: TOpenPictureDialog; + About1: TAction; + About2: TMenuItem; + procedure Exit1Execute(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure OpenFile1Execute(Sender: TObject); + procedure RatioComboBoxChange(Sender: TObject); + procedure SaveFile1Execute(Sender: TObject); + procedure Paste1Execute(Sender: TObject); + procedure Paste1Update(Sender: TObject); + procedure SaveFile1Update(Sender: TObject); + procedure About1Execute(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure CoolBar1Resize(Sender: TObject); + private + FJpegImage: TJPEGImage; + FFileName: TFileName; + FModified: Boolean; + FOriginalPicture: TPicture; + procedure CompressPicture; + procedure FillCombos; + procedure EnableCombos; + public + function CheckSaved: Boolean; + procedure OpenFile; + function SaveFile: Boolean; + procedure UpdatePicture; + property Modified: Boolean read FModified; + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.DFM} + +uses + ToolsUtils, JclSysUtils; + +resourcestring + RsSaveImage = 'Save current image ?'; + RsJpegSize = 'JPEG Size: %.0n'; + +function TMainForm.CheckSaved: Boolean; +begin + Result := not Modified; + if not Result then + case MessBox(RsSaveImage, MB_ICONEXCLAMATION or MB_YESNOCANCEL) of + ID_YES: Result := SaveFile; + ID_NO: Result := True; + else + Result := False; + end; +end; + +procedure TMainForm.CompressPicture; +var + Ratio: Integer; +begin + with RatioComboBox do Ratio := Integer(Items.Objects[ItemIndex]); + FJpegImage.Grayscale := (ColorComboBox.ItemIndex = 0); + FJpegImage.CompressionQuality := Ratio; + FJpegImage.Assign(FOriginalPicture.Graphic); +end; + +procedure TMainForm.EnableCombos; +begin + RatioComboBox.Enabled := True; + RatioComboBox.Color := clWindow; + ColorComboBox.Enabled := True; + ColorComboBox.Color := clWindow; +end; + +procedure TMainForm.Exit1Execute(Sender: TObject); +begin + Close; +end; + +procedure TMainForm.OpenFile; +begin + if CheckSaved then + begin + with OpenDialog1 do + begin + FileName := ''; + if Execute then + begin + FFileName := FileName; + FOriginalPicture.LoadFromFile(FileName); + UpdatePicture; + end; + end; + end; +end; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + FJpegImage := TJPEGImage.Create; + FOriginalPicture := TPicture.Create; + Image1.Align := alNone; + FillCombos; +end; + +procedure TMainForm.FormDestroy(Sender: TObject); +begin + FreeAndNil(FOriginalPicture); + FreeAndNil(FJpegImage); +end; + +procedure TMainForm.UpdatePicture; +var + MemStream : TMemoryStream; +begin + Screen.Cursor := crHourGlass; + try + EnableCombos; + CompressPicture; + MemStream := TMemoryStream.Create; + try + FJpegImage.SaveToStream(MemStream); + StatusBar1.Panels[0].Text := Format(RsJpegSize, [IntToExtended(MemStream.Size)]); + MemStream.Position := 0; + FJpegImage.LoadFromStream(MemStream); + Image1.Picture.Assign(FJpegImage); + Image1.Update; + finally + MemStream.Free; + end; + finally + Screen.Cursor := crDefault; + end; +end; + +procedure TMainForm.OpenFile1Execute(Sender: TObject); +begin + OpenFile; +end; + +procedure TMainForm.FillCombos; +const + QualityTable: array [0..10] of TJPEGQualityRange = + (10, 20, 30, 40, 50, 60, 70, 80, 90, 95, 100); +var + I: Integer; +begin + with RatioComboBox do + begin + for I := Low(QualityTable) to High(QualityTable) do + Items.AddObject(Format('%d%%', [QualityTable[I]]), Pointer(QualityTable[I])); + ItemIndex := 8; + end; + ColorComboBox.ItemIndex := 1; +end; + +procedure TMainForm.RatioComboBoxChange(Sender: TObject); +begin + UpdatePicture; + FModified := True; +end; + +procedure TMainForm.SaveFile1Execute(Sender: TObject); +begin + SaveFile; +end; + +procedure TMainForm.Paste1Execute(Sender: TObject); +begin + if CheckSaved then + begin + FOriginalPicture.Assign(Clipboard); + FFileName := ''; + UpdatePicture; + FModified := True; + end; +end; + +procedure TMainForm.Paste1Update(Sender: TObject); +begin + Paste1.Enabled := Clipboard.HasFormat(CF_BITMAP); +end; + +procedure TMainForm.SaveFile1Update(Sender: TObject); +begin + SaveFile1.Enabled := Assigned(Image1.Picture.Graphic); +end; + +function TMainForm.SaveFile: Boolean; +begin + Result := False; + with SaveDialog1 do + begin + FileName := ChangeFileExt(FFileName, '.jpeg'); + if Execute then + begin + FJpegImage.SaveToFile(FileName); + Result := True; + FModified := False; + end; + end; +end; + +procedure TMainForm.About1Execute(Sender: TObject); +begin + ShowToolsAboutBox; +end; + +procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + CanClose := CheckSaved; +end; + +procedure TMainForm.CoolBar1Resize(Sender: TObject); +begin + D4FixCoolBarResizePaint(Sender); +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/screenjpg/ScreenJPG.dof b/official/1.104/examples/windows/delphitools/screenjpg/ScreenJPG.dof new file mode 100644 index 0000000..8f9e4b1 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/screenjpg/ScreenJPG.dof @@ -0,0 +1,134 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=0 +UnsafeCode=0 +UnsafeCast=0 +[Linker] +MapFile=0 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir=..\..\..\..\bin +UnitOutputDir= +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath=..\..\..\..\source\include;..\..\..\..\source\common;..\..\..\..\source\windows;..\..\..\..\source\vcl +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir= +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=0 +MinorVer=5 +Release=4 +Build=3 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1033 +CodePage=1252 +[Version Info Keys] +CompanyName=Petr Vones +FileDescription=Screen to JPEG convertor +FileVersion=0.5.4.3 +InternalName=PEVIEWER +LegalCopyright=(c) 2002 Petr Vones +LegalTrademarks= +OriginalFilename=SCREENJPG.EXE +ProductName=Screen to JPEG convertor +ProductVersion=0.5.4 diff --git a/official/1.104/examples/windows/delphitools/screenjpg/ScreenJPG.dpr b/official/1.104/examples/windows/delphitools/screenjpg/ScreenJPG.dpr new file mode 100644 index 0000000..ef7a5f8 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/screenjpg/ScreenJPG.dpr @@ -0,0 +1,20 @@ +program ScreenJPG; + +{$I jcl.inc} + +uses + Forms, + Main in 'Main.pas' {MainForm}, + About in '..\Common\About.pas' {AboutBox}, + ToolsUtils in '..\Common\ToolsUtils.pas', + ExceptDlg in '..\..\..\..\experts\debug\dialog\ExceptDlg.pas' {ExceptionDialog}; + +{$R *.RES} +{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.Title := 'ScreenJPG'; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/official/1.104/examples/windows/delphitools/screenjpg/ScreenJPG.res b/official/1.104/examples/windows/delphitools/screenjpg/ScreenJPG.res new file mode 100644 index 0000000000000000000000000000000000000000..0a04ff159d338f0cde01081cd55830003164c4f2 GIT binary patch literal 1696 zcmd^;y>1gx5QUHNh7b`27jCH7f+A2LD;OlI1SL)s6o_RbgJ>cv7!%>xmSd3U{9X={ z`|LwdP|!h1fiU09df7EefhcGgd-mR$Id^`}?v^V|lK5*hiWi=2(UB&T2?1-umTA23jQcX@d5LB+i$u|QJa(5mmZR}$ zbmoqUIhM~(3A)4WD77PtbK2vEO6}M?vn}MPKeFT6DW1b~=l@HaR|JdBU(5!Macak$ zxNVqJ?92Ert$&kle3h=5ev}sfl@=wH(CKtVkM&TydV+3hpEZ%}y|CMmQy3QfR@g1d zshHR7t`#zOX(33?7xQJd4b^qPv!WWiU9WK9^|slYdmC&zi_Xi? z?_^y=4RoZg+S+FAs72X?$sO!@#V(}Q(%UsuVu3FcURHNn4U>Lympi&R-H zZ%EfYqAi`c|Anq|E~&HS{zI?d2Y=*P1J-5U7QZezhWJB0QkCjE><%6Gj_AN+1J7O3 zl}zr2M^7?2OS+?bXc@iBi8U>Ow^@gd?b3fIGlf-a5U=PNTJsuvDspBIeB05+K%d!- z!M0wLNm`}9TXeYwUnQO)eP6`JZ8BwZJta$1FTozO4)kWmnHApB3fTQw9eZ2WYr>;h zG4plaNsVqR%wc@(Fl$B6QQSp=a 0 then + begin + Priority := GetPriorityClass(Handle); + CloseHandle(Handle); + end else Priority := 0; + I := PriorityRadioGroup.Items.IndexOfObject(Pointer(Priority)); + if I = -1 then I := 1; + PriorityRadioGroup.ItemIndex := I; +end; + +procedure TChangePriorityDlg.FormCreate(Sender: TObject); +begin + with PriorityRadioGroup.Items do + begin + BeginUpdate; + AddObject('&Idle', Pointer(IDLE_PRIORITY_CLASS)); + AddObject('&Normal', Pointer(NORMAL_PRIORITY_CLASS)); + AddObject('&High', Pointer(HIGH_PRIORITY_CLASS)); + AddObject('&Realtime', Pointer(REALTIME_PRIORITY_CLASS)); + EndUpdate; + end; +end; + +procedure TChangePriorityDlg.OKBtnClick(Sender: TObject); +var + Handle: THandle; + Priority: DWORD; + Res: Boolean; +begin + with PriorityRadioGroup do Priority := DWORD(Items.Objects[ItemIndex]); + Handle := OpenProcess(PROCESS_ALL_ACCESS{PROCESS_SET_INFORMATION}, False, FProcessID); + if Handle <> 0 then + begin + Res := SetPriorityClass(Handle, Priority); + CloseHandle(Handle); + end else Res := False; + if Res then + ModalResult := mrOk + else + MessBox(sCantChange, MB_ICONERROR); +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/Global.dfm b/official/1.104/examples/windows/delphitools/toolhelpview/Global.dfm new file mode 100644 index 0000000..7933378 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/toolhelpview/Global.dfm @@ -0,0 +1,1081 @@ +object GlobalModule: TGlobalModule + OldCreateOrder = False + OnCreate = DataModuleCreate + Left = 240 + Top = 203 + Height = 324 + Width = 481 + object ToolbarImagesList: TImageList + ShareImages = True + Left = 112 + Top = 8 + Bitmap = { + 494C01011A001D00040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000008000000001002000000000000080 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFFFF00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000FF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF000000003F7F7F7F0000000000000000000000000000000000000000000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + FF00FFFFFFFFFFFFFFFFFFFFFFF7F8EBC9CD72A0A7099DA4009DA4009DA4009D + A4009DA4009DA4009DA4009DA4009DA4009DA4009DA4009DA4009DA4009DA400 + 9DA4009DA4009DA400A3A90FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF000000FF00000000000000 + 00000000000000000000000000000000000000FFFF0000FFFF0000FFFF000000 + 0000FFFFFF00000000000000000000000000000000BFFFFFFF00000000BFFFFF + FF000000000000FFFF0000FFFF00000000000000000000000000000000000000 + FF00000000000000FF007F7F7F00000000000000003F7F7F7F000000FF000000 + 00000000FF00000000000000000000000000000000BFBFBFBF007F7F7FBFFFFF + FF00000000000000000000FF0000008000000080000000000000000000BFFFFF + FF007F7F7F3F7F7F7F00000000000000000000000000000000000000003F7F7F + 7F00000000000000FF0000000000000000000000FF000000FF00000000000000 + 0000000000000000000000000000000000000000000000FFFF0000FFFF000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF000000000000FFFF0000FFFF0000FFFF000000000000000000000000000000 + 000000000000000000000000FF000000FF000000FF000000FF00000000000000 + 000000000000000000000000000000000000000000BFBFBFBF000000000000FF + 00000000000000FF00000080000000FF000000800000008000000000000000FF + 00000000003F7F7F7F0000000000000000000000000000000000000000000000 + 00007F7F7F00000000000000FF000000FF000000FF000000FF000000FF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000000000BFFFFFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFFFFFFF00000000BFFFFF + FF000000000000FF000000FF000000FF000000FF000000800000000000BFFFFF + FF000000003F7F7F7F0000000000000000000000000000000000000000000000 + 000000000000000000000000FF000000FF000000FF000000FF000000FF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFFFFFFF000000000000FF + 0000000000BFFFFFFF0000FF000000FF00000080000000FF00000000000000FF + 0000000000BFBFBFBF0000000000000000000000000000000000000000000000 + 0000000000000000FF000000FF000000FF000000FF000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000BFBFBFBFFFFFFF00000000BFFFFFFF000000000000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000BFBFBFBF00BFBFBF3F7F7F7F007F7F7F3F7F7F7F00000000000000 + 000000000000000000000000000000000000000000BFFFFFFF007F7F7FBFFFFF + FF000000000000000000FFFFFFBFFFFFFF0000FF000000000000000000BFFFFF + FF007F7F7FBFBFBFBF00000000000000000000000000000000000000003F7F7F + 7F0000000000000000000000FF000000FF0000000000000000000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF0000000000000000000000000000FF + FF0000FFFF000000000000000000000000000000000000000000000000BFBFBF + BF00BFBFBF3F7F7F7F0000000000000000000000003F7F7F7F007F7F7F3F7F7F + 7F00000000000000000000000000000000000000000000000000BFBFBF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 0000BFBFBF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FF00000000000000000000000000000000000000000000FFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000FFFF0000FFFF0000000000000000000000000000000000BFBFBFBFBFBF + BF00000000BFFFFFFF000000FFBFFFFFFF000000FFBFFFFFFF000000003F7F7F + 7F007F7F7F000000000000000000000000000000000000000000FFFFFFBFBFBF + BF00000000BFFFFFFF0000FF00BFFFFFFF0000FF00BFFFFFFF00000000BFBFBF + BF00BFBFBF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF0000FFFF000000 + 000000000000000000000000000000FFFF0000FFFF0000000000000000000000 + 00000000000000FFFF0000FFFF00000000000000000000000000BFBFBF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 00007F7F7F000000000000000000000000000000000000000000000000BFFFFF + FF00BFBFBF3F7F7F7F0000000000000000000000003F7F7F7F00BFBFBFBFBFBF + BF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000FFFF0000000000000000000000 + 000000000000000000000000000000FFFF000000000000000000000000000000 + 000000000000000000000000000000FFFF00000000BFBFBFBF007F7F7FBFFFFF + FF0000000000000000000000FF00000080000000800000000000000000BFFFFF + FF007F7F7F3F7F7F7F0000000000000000000000000000000000000000000000 + 0000000000BFFFFFFF00FFFFFFBFFFFFFF00BFBFBFBFBFBFBF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000080000000000000000000FF + FF00008080000000000000000080000000000000000000000000000000000000 + 0000000000000000000000000000000000000000008000000000000000800000 + 0000000000800000000000000080000000000000008000000000000000800000 + 0000000000800000000000000080000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000080000000000000000000FF + FF0000808000000000000000008000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBF00000000000000008000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000800000 + 0000000000800000000000000080000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000008000000000000000800000 + 00000000008000000000000000800000000000000080000000000000000000FF + FF0000808000000000000000000000000000BFBFBFBFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF0000000080000000000000008000000000000000000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF00000000000000 + 0000000000800000000000000080000000007F7F7F3F7F7F7F00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000008000000000000000800000 + 00000000008000000000000000000000000000000080000000000000000000FF + FF00008080000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000800000000000000000000000000000FF000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF00000000000000 + 8000000000800000000000000080000000000000003F7F7F7F007F7F7F3F7F7F + 7F00000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF0000000000FFFFFF000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 00000000000000000000FFFF00BFFFFF00000000008000000000000000000080 + 8000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000080000000000000000000000000000080000000 + 8000000080000000800000008000000080000000800000008000000000000000 + 8000000080000000000000000080000000000000FFBFFFFFFF000000003F7F7F + 7F007F7F7F00000000000000000000000000000000000000000000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000FF000000FF000000 + FF000000003F7F7F7F007F7F7F3F7F7F7F000000008000000000000000000000 + 00007F7F7FBFBFBFBF0000000000000000000000000000000000000000000000 + 00007F7F7F000000000000000080000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000080000000800000000080000000000000000000000000FFFFFF000000 + 00007F7F7F0000000000000000000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF000000000000000000000000000000 + 00000000000000000000FFFFFF0000000000000000000000FF000000FF000000 + FF000000FF0000000000000000000000000000000000000000007F7F7FBFBFBF + BF00BFBFBFBFBFBFBF00000000000000000000000000000000007F7F7F3F7F7F + 7F007F7F7F0000000000000000800000000000000000000000007F7F7F000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFF + FF00000000000000800000008000000000000000003F7F7F7F00BFBFBFBFBFBF + BF007F7F7F3F7F7F7F00000000000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF0000000000000000007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F000000000000000080000000000000008000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFF + FF00FFFFFF00000000000000800000000000BFBFBFBFBFBFBF00000000000000 + 00000000000000000000000000000000000000000000FFFFFF0000000000FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F000000 + 00007F7F7F00000000007F7F7F0000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00000000BFBFBFBF000000003F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F000000000000000080000000000000008000000000000000000000 + 0000FFFFFFBFFFFFFF007F7F7F00000000000000000000000000000000BFBFBF + BF00BFBFBFBFFFFFFF0000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000007F7F7F00000000007F7F7F000000 + 00007F7F7F00000000007F7F7F0000000000000000000000FF00BFBFBF000000 + FF00BFBFBFBFBFBFBF000000003F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F000000000000000080000000000000008000000000000000800000 + 00000000000000000000000000BFBFBFBF00BFBFBFBFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFFFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000008000000000000000800000 + 0000000000800000000000000080000000000000FF000000FF000000FFBFBFBF + BF00BFBFBFBFBFBFBF000000003F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F000000000000000080000000000000008000000000000000800000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000BFFFFFFF000000008000000000000000000000000000000000007F + 7F00007F7F00007F7F00007F7F00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000FF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBF00000000007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F00000000800000000000000080000000000000008000000000000000800000 + 00000000000000000000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00000000BFFFFFFF000000008000000000BFBFBF00BFBFBF0000000000007F + 7F0000FFFF00007F7F0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000FFFF0000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBFBFBFBFBF00BFBFBF0000000000000000000000 + 0000000000800000000000000080000000000000008000000000000000800000 + 00000000000000000000FFFFFF00000000000000000000000000FFFFFFBFFFFF + FF000000000000000000000000800000000000000000000000000000000000FF + FF00007F7F0000FFFF00007F7F00000000000000000000000000000000000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF0000000000000000BFBFBFBF00BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF00BFBFBFBFBFBFBF000000003F7F7F7F00000000800000 + 0000000000800000000000000080000000000000008000000000000000800000 + 00000000000000000000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF00000000800000000000000080000000007F7F7F007F7F7F000000000000FF + FF0000FFFF00007F7F0000FFFF000000000000000000000000000000FF000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF00000000000000 + 7F00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000FFFF00000000000000000000000000BFBFBFBFBFBF + BF00BFBFBFBFBFBFBF000000003F7F7F7F000000008000000000000000800000 + 0000000000800000000000000080000000000000008000000000000000800000 + 00000000000000000000FFFFFFBFFFFFFF007F7F7F0000000000000000000000 + 0000000000800000000000000080000000007F7F7F007F7F7F000000000000FF + FF0000FFFF0000FFFF00007F7F0000000000000000000000000000007F000000 + 7F0000007F0000007F0000007F0000007F0000007F0000007F00000000000000 + 7F0000007F000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00000000000000008000000000000000000000 + 00000000003F7F7F7F0000000080000000000000008000000000000000800000 + 0000000000800000000000000080000000000000008000000000000000800000 + 0000000000800000000000000000000000000000008000000000000000800000 + 00000000008000000000000000800000000000000000000000000000000000FF + FF0000FFFF0000FFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000007F0000007F0000000000000000000000000000000000000000000000 + 0000000000000000000000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000FFFF0000000000000000000000 + 000000000000000000000000000000FFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF0000FFFF000000 + 00007F7F7F3F7F7F7F007F7F7F0000FFFF0000FFFF3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F0000FFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000BFBFBFBF00BFBFBF3F7F7F7F007F7F7F3F7F7F7F00000000000000 + 0000000000000000000000000000000000000000003F7F7F7F000000003F7F7F + 7F00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000FFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000FFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000BFBFBF + BF00BFBFBF3F7F7F7F0000000000000000000000003F7F7F7F007F7F7F3F7F7F + 7F000000000000000000000000000000000000000000000000000000FF000000 + 00007F7F7F000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF000000003F7F7F7F0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBFBFBFBF + BF00000000BFFFFFFF0000FF00BFFFFFFF0000FF00BFFFFFFF000000003F7F7F + 7F007F7F7F000000000000000000000000000000003F7F7F7F00000000000000 + FF000000003F7F7F7F0000000000000000000000003F7F7F7F00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF000000003F7F7F7F0000000000000000007F7F7F0000000000000000000000 + 00000000003F7F7F7F0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 00007F7F7F0000000000000000000000000000000000000000007F7F7F000000 + 00000000FF00000000007F7F7F00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000000000BFFFFFFF000000000000000000000000BFFFFF + FF000000003F7F7F7F0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFBFBFBF007F7F7FBFFFFF + FF00000000000000000000FF0000008000000080000000000000000000BFFFFF + FF007F7F7F3F7F7F7F00000000000000000000000000000000000000003F7F7F + 7F00000000000000FF0000000000000000000000FF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF000000003F7F7F7F0000000000000000000000000000000000000000000000 + 00007F7F7F000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFBFBFBF000000000000FF + 00000000000000FF00000080000000FF000000800000008000000000000000FF + 00000000003F7F7F7F0000000000000000000000000000000000000000000000 + 00007F7F7F00000000000000FF000000FF000000FF000000FF00000000000000 + 00000000000000000000000000000000000000FFFF0000FFFF0000FFFF000000 + 0000FFFFFF00000000000000000000000000000000BFFFFFFF00000000BFFFFF + FF000000000000FFFF0000FFFF00000000000000003F7F7F7F00000000000000 + 00007F7F7F000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFFFFFFF00000000BFFFFF + FF000000000000FF000000FF000000FF000000FF000000800000000000BFFFFF + FF000000003F7F7F7F0000000000000000000000000000000000000000000000 + 000000000000000000000000FF000000FF000000FF000000FF00000000000000 + 0000000000000000000000000000000000000000000000FFFF0000FFFF000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFF + FF000000000000FFFF0000FFFF0000FFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFFFFFFF000000000000FF + 0000000000BFFFFFFF0000FF000000FF00000080000000FF00000000000000FF + 0000000000BFBFBFBF0000000000000000000000000000000000000000000000 + 0000000000000000FF000000FF000000FF000000FF000000FF000000FF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000000000BFFFFFFF000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000003F7F7F + 7F00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000BFFFFFFF007F7F7FBFFFFF + FF000000000000000000FFFFFFBFFFFFFF0000FF000000000000000000BFFFFF + FF007F7F7FBFBFBFBF00000000000000000000000000000000000000003F7F7F + 7F0000000000000000000000FF000000FF000000FF000000FF000000FF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00000000BFFFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 0000BFBFBF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000FF000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000BFBFBFBFFFFFFF00000000BFFFFFFF000000000000FF + FF00000000000000000000000000000000000000000000000000000000000000 + FF007F7F7F0000000000000000000000000000000000000000000000003F7F7F + 7F000000FF000000000000000000000000000000000000000000FFFFFFBFBFBF + BF00000000BFFFFFFF0000FF00BFFFFFFF0000FF00BFFFFFFF00000000BFBFBF + BF00BFBFBF000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFFBFFFFFFF00FFFFFFBFFFFFFF0000000000000000000000000000FF + FF0000FFFF000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF00000000000000000000000000000000000000FF000000 + FF000000FF000000000000000000000000000000000000000000000000BFFFFF + FF00BFBFBF3F7F7F7F0000000000000000000000003F7F7F7F00BFBFBFBFBFBF + BF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FF00000000000000000000000000000000000000000000FFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000FFFF0000FFFF0000000000000000000000000000000000000000000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 0000000000BFFFFFFF00FFFFFFBFFFFFFF00BFBFBFBFBFBFBF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000FFFF0000FFFF000000 + 000000000000000000000000000000FFFF0000FFFF0000000000000000000000 + 00000000000000FFFF0000FFFF00000000000000000000000000000000000000 + FF00000000000000FF007F7F7F00000000000000003F7F7F7F000000FF000000 + 00000000FF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000FFFF0000000000000000000000 + 000000000000000000000000000000FFFF000000000000000000000000000000 + 000000000000000000000000000000FFFF000000000000000000000000000000 + 000000000000000000000000FF000000FF000000FF000000FF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000008000000000000000800000 + 0000000000800000000000000080000000000000008000000000000000000000 + 0000000000000000000000000080000000000000008000000000000000800000 + 0000000000800000000000000080000000000000008000000000000000800000 + 0000000000800000000000000080000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000008000000000000000800000 + 00000000008000000000000000000000000000000080000000000000000000FF + FF0000FFFF0000FFFF0000000080000000000000008000000000000000800000 + 0000000000000000000000000000000000000000000000000000000000800000 + 0000000000800000000000000080000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF0000000000FFFFFF000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 00000000000000000000FFFF00BFFFFF0000FFFF000000000000000000000000 + 00007F7F7F3F7F7F7F007F7F7F00000000000000008000000000000000000000 + 0000000000BFBFBFBF00BFBFBF3F7F7F7F007F7F7F3F7F7F7F00000000000000 + 0000000000800000000000000080000000000000000000000000000000000000 + 0000000000BFBFBFBF00BFBFBF3F7F7F7F007F7F7F3F7F7F7F00000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000FF000000FF000000 + FF000000003F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F7F007F7F7F3F7F7F + 7F007F7F7F0000000000FFFFFF00000000000000008000000000000000BFBFBF + BF00BFBFBF3F7F7F7F0000000000000000000000003F7F7F7F007F7F7F3F7F7F + 7F00000000800000000000000080000000000000000000000000000000BFBFBF + BF00BFBFBF3F7F7F7F0000000000000000000000003F7F7F7F007F7F7F3F7F7F + 7F000000000000000000000000000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF000000000000000000000000000000 + 00000000000000000000FFFFFF0000000000000000000000FF000000FF000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000BFBFBFBFBFBF + BF00000000BFFFFFFF0000FFFFBFFFFFFF0000FFFFBFFFFFFF000000003F7F7F + 7F007F7F7F000000000000000080000000000000000000000000BFBFBFBFBFBF + BF00000000BFFFFFFF000000FFBFFFFFFF000000FFBFFFFFFF000000003F7F7F + 7F007F7F7F0000000000000000000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000BFBFBF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 00007F7F7F000000000000000080000000000000000000000000BFBFBF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 00007F7F7F0000000000000000000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF000000000000000000000000000000 + 00000000000000000000FFFFFF0000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000BFBFBFBF007F7F7FBFFFFF + FF00000000000000000000FFFF00008080000080800000000000000000BFFFFF + FF007F7F7F3F7F7F7F000000008000000000000000BFBFBFBF007F7F7FBFFFFF + FF0000000000000000000000FF00000080000000800000000000000000BFFFFF + FF007F7F7F3F7F7F7F00000000000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000BFBFBFBF000000000000FF + FF000000000000FFFF000080800000FFFF0000808000008080000000000000FF + FF000000003F7F7F7F000000008000000000000000BFBFBFBF00000000000000 + FF00000000000000FF00000080000000FF000000800000008000000000000000 + FF000000003F7F7F7F00000000000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF00000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000000000BFFFFFFF007F7F7F3F7F7F + 7F00FFFFFF3F7F7F7F007F7F7FBFFFFFFF007F7F7FBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000BFFFFFFF00000000BFFFFF + FF000000000000FFFF0000FFFF0000FFFF0000FFFF0000808000000000BFFFFF + FF000000003F7F7F7F000000008000000000000000BFFFFFFF00000000BFFFFF + FF00000000000000FF000000FF000000FF000000FF0000008000000000BFFFFF + FF000000003F7F7F7F00000000000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000000000000000000000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000BFFFFFFF000000000000FF + FF00000000BFFFFFFF0000FFFF0000FFFF000080800000FFFF000000000000FF + FF00000000BFBFBFBF000000008000000000000000BFFFFFFF00000000000000 + FF00000000BFFFFFFF000000FF000000FF00000080000000FF00000000000000 + FF00000000BFBFBFBF00000000000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF000000000000000000FFFFFF00FFFF + FF0000000000FFFFFF000000000000000000000000BFFFFFFF007F7F7F3F7F7F + 7F00FFFFFF3F7F7F7F007F7F7F3F7F7F7F00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000000000BFFFFFFF007F7F7FBFFFFF + FF000000000000000000FFFFFFBFFFFFFF0000FFFF0000000000000000BFFFFF + FF007F7F7FBFBFBFBF000000008000000000000000BFFFFFFF007F7F7FBFFFFF + FF000000000000000000FFFFFFBFFFFFFF000000FF0000000000000000BFFFFF + FF007F7F7FBFBFBFBF00000000000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000000000000000000000000000000000BFFFFFFF00FFFFFFBFFFFF + FF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFFBFFFFFFF00FFFFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000BFBFBF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 0000BFBFBF000000000000000080000000000000000000000000BFBFBF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFFFF000000 + 0000BFBFBF0000000000000000000000000000000000FFFFFF0000000000FFFF + FF0000000000FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF000000 + 0000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000 + 0000FFFFFF000000000000000080000000000000000000000000FFFFFFBFBFBF + BF00000000BFFFFFFF0000FFFFBFFFFFFF0000FFFFBFFFFFFF00000000BFBFBF + BF00BFBFBF000000000000000080000000000000000000000000FFFFFFBFBFBF + BF00000000BFFFFFFF000000FFBFFFFFFF000000FFBFFFFFFF00000000BFBFBF + BF00BFBFBF0000000000000000000000000000000000FFFFFF0000000000FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F000000 + 00007F7F7F00000000007F7F7F00000000007F7F7F00000000007F7F7F000000 + 0000000000000000000000000080000000000000008000000000000000BFFFFF + FF00BFBFBF3F7F7F7F0000000000000000000000003F7F7F7F00BFBFBFBFBFBF + BF00000000800000000000000080000000000000000000000000000000BFFFFF + FF00BFBFBF3F7F7F7F0000000000000000000000003F7F7F7F00BFBFBFBFBFBF + BF000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000007F7F7F00000000007F7F7F000000 + 00007F7F7F00000000007F7F7F00000000007F7F7F00000000007F7F7F000000 + 0000000000800000000000000080000000000000008000000000000000000000 + 0000000000BFFFFFFF00FFFFFFBFFFFFFF00BFBFBFBFBFBFBF00000000000000 + 0000000000800000000000000080000000000000000000000000000000000000 + 0000000000BFFFFFFF00FFFFFFBFFFFFFF00BFBFBFBFBFBFBF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000008000000000000000800000 + 0000000000800000000000000080000000000000008000000000000000800000 + 0000000000000000000000000080000000000000008000000000000000800000 + 0000000000000000000000000000000000000000000000000000000000800000 + 0000000000800000000000000080000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000FF000000000000000000000000000000000000FFFF000000 + 00007F7F7F007F7F7F000000000000000000000000000000000000000000007F + 7F00007F7F00007F7F00007F7F00000000000000000000000000000000000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000BFBFBF0000000000000000000000 + 00000000FF00000000000000000000000000000000000000000000FFFF000000 + 00007F7F7F0000000000BFBFBF00BFBFBF00BFBFBF00BFBFBF0000000000007F + 7F0000FFFF00007F7F0000FFFF000000000000000000000000000000FF000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF00000000000000 + 7F00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000007F7F7F00000000007F7F7F00BFBFBF007F7F7F00000000000000 + 00000000000000000000000000000000FF00000000000000000000FFFF000000 + 00007F7F7F007F7F7F00000000000000000000000000000000000000000000FF + FF00007F7F0000FFFF00007F7F0000000000000000000000000000007F000000 + 7F0000007F0000007F0000007F0000007F0000007F0000007F00000000000000 + 7F0000007F000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF0000000000FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F007F7F7F0000000000BFBFBF00BFBFBF00BFBFBF00000000000000 + 000000000000000000000000FF0000000000000000000000000000FFFF000000 + 00007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F000000000000FF + FF0000FFFF00007F7F0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000007F0000007F0000000000000000000000000000000000000000000000 + 0000000000000000000000FFFF000000000000FFFF000000000000FFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F007F7F7F0000000000BFBFBF00BFBFBF00BFBFBF00000000000000 + 0000000000000000FF000000000000000000000000000000000000FFFF000000 + 00007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F000000000000FF + FF0000FFFF0000FFFF00007F7F000000000000000000000000007F7F7F000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFF + FF000000000000007F0000007F00000000000000000000000000000000000000 + 00000000000000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000007F7F + 7F007F7F7F007F7F7F000000000000000000BFBFBF00BFBFBF00000000000000 + 00000000FF00000000000000000000000000000000000000000000FFFF000000 + 00000000000000000000000000000000000000000000000000000000000000FF + FF0000FFFF0000FFFF0000FFFF00000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFF + FF00000000000000000000007F00000000000000000000000000000000000000 + 000000FFFF000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF000000 + 000000000000000000000000000000000000000000007F7F7F0000000000BFBF + BF00BFBFBF00BFBFBF0000000000BFBFBF0000000000BFBFBF007F7F7F000000 + 000000000000000000000000000000000000000000000000000000FFFF000000 + 000000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000000000FF + FF0000FFFF0000FFFF0000FFFF00000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF007F7F7F0000000000000000000000000000000000FFFF + FF0000000000FFFFFF0000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF000000 + 000000000000000000000000000000000000000000007F7F7F00000000007F7F + 7F007F7F7F007F7F7F0000000000BFBFBF0000000000BFBFBF007F7F7F000000 + 00000000FF000000FF000000FF000000FF00000000000000000000FFFF000000 + 000000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000000000FF + FF0000FFFF0000FFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000FFFFFF0000000000000000000000000000000000000000000000 + 000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF000000 + 00000000000000000000000000000000000000000000BFBFBF0000000000BFBF + BF00BFBFBF00BFBFBF0000000000BFBFBF0000000000BFBFBF007F7F7F000000 + 000000000000000000000000000000000000000000000000000000FFFF000000 + 000000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000000000FF + FF0000FFFF0000FFFF0000FFFF00000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF007F7F7F0000000000000000000000 + 000000000000FFFFFF0000000000000000000000000000000000000000000000 + 00000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00000000000000 + 000000000000000000000000000000000000000000000000000000000000BFBF + BF00BFBFBF00BFBFBF000000000000000000BFBFBF00BFBFBF00000000000000 + 00000000FF00000000000000000000000000000000000000000000FFFF000000 + 00007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F000000000000FF + FF0000FFFF0000FFFF0000FFFF00000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000BFBFBF00BFBFBF00000000007F7F7F00BFBFBF00BFBFBF00000000000000 + 0000000000000000FF000000000000000000000000000000000000FFFF000000 + 000000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000000000FF + FF0000FFFF0000FFFF0000FFFF00000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000BFBFBF00BFBFBF00000000007F7F7F007F7F7F00BFBFBF00000000000000 + 000000000000000000000000FF00000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000007F + 7F0000FFFF0000FFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000BFBFBF007F7F7F007F7F7F007F7F7F007F7F7F00000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000FF + FF00007F7F0000FFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000BFBFBF00000000007F7F7F0000000000000000000000 + 00000000FF000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000007F + 7F0000FFFF00007F7F0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000007F0000007F0000007F00 + 00007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00 + 00007F0000007F00000000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000007F000000FF000000FF00 + 0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00 + 0000FF0000007F00000000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000007F0000007F0000007F00 + 0000BFBFBF00BFBFBF0000007F0000FFFF0000007F00BFBFBF00BFBFBF007F00 + 00007F0000007F00000000000000000000000000000000000000000000000000 + 000000000000000000000000000000FFFF007F7F7F00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000FFFF0000000000FFFF0000000000000000000000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000BFBFBF00BFBFBF00BFBFBF0000007F00FFFFFF00FFFFFF007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F007F7F + 7F0000000000000000007F7F7F0000000000FFFF00000000000000FFFF00FFFF + FF0000FFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000BFBFBF00BFBFBF00BFBFBF0000FFFF00FFFFFF007F7F7F007F7F7F000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 00007F7F7F007F7F7F0000FFFF0000000000FFFF000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FF000000FF000000FF00000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000BFBFBF00BFBFBF0000007F00FFFFFF007F7F7F00000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 00007F7F7F0000FFFF0000FFFF0000000000FFFF00000000000000FFFF00FFFF + FF0000FFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000FF0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000BFBFBF0000FFFF007F7F7F0000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF00000000000000000000000000FFFFFF0000000000000000000000 + 00000000FF0000000000000000007F7F7F00FFFF000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF + FF0000000000000000000000FF000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000BFBFBF000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + FF000000FF000000FF000000000000000000FFFF00000000000000FFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FF000000FF000000000000000000000000000000 + 000000000000000000000000000000000000000000007F7F7F0000FFFF007F7F + 7F00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000007F00FFFFFF0000007F0000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00000000000000 + 00000000000000000000FFFFFF0000000000FFFFFF00000000000000FF000000 + FF000000FF000000FF000000FF000000000000000000000000000000000000FF + FF00FFFFFF0000FFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 00000000000000007F0000FFFF0000007F00FFFFFF0000007F00000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF000000000000000000000000007F7F7F0000FFFF007F7F + 7F00000000000000000000000000000000000000000000000000000000000000 + 0000BFBFBF00BFBFBF0000007F0000FFFF00FFFFFF0000FFFF007F7F7F000000 + 00000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000BFBFBF00BFBFBF00BFBFBF00BFBFBF0000007F00FFFFFF007F7F7F000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000FFFFFF00FFFFFF000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000007F0000007F0000007F00 + 0000BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF007F00 + 00007F0000007F000000000000000000000000000000FFFFFF0000000000BFBF + BF00FFFFFF0000000000FFFFFF000000000000000000000000007F7F7F000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000007F000000FF000000FF00 + 0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00 + 0000FF0000007F000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000FF000000FF000000FF000000 + FF000000FF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000007F0000007F0000007F00 + 00007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00 + 00007F0000007F00000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FF000000FF000000FF000000FF000000FF000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00000000000000000000000000FFFFFF0000000000FFFF + FF000000000000000000FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 000000000000000000000000000000000000FF000000FF000000FF000000FF00 + 0000FF000000FF000000BFBFBF0000000000BFBFBF00FF000000FF000000FF00 + 0000FF000000FF000000FF000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00BFBFBF00000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF00BFBF + BF00BFBFBF00BFBFBF00000000007F7F7F0000000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF000000000000000000000000000000000000000000000000000000 + 000000000000FFFFFF000000000000000000FFFFFF000000000000000000FFFF + FF000000000000000000FFFFFF00000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000000000007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F00000000000000 + 00000000000000000000000000000000000000000000FFFFFF00000000007F7F + 7F007F7F7F0000000000FFFFFF007F7F7F00FFFFFF00000000007F7F7F007F7F + 7F0000000000FFFFFF0000000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000FFFFFF00FFFFFF00000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000007F7F7F0000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000007F7F7F00000000000000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00000000000000 + 0000000000000000000000000000000000007F7F7F0000000000FFFFFF000000 + 00000000000000000000FFFFFF007F7F7F00FFFFFF0000000000000000000000 + 0000FFFFFF00000000007F7F7F00000000000000000000000000000000000000 + 0000FFFFFF0000FFFF000000000000000000FFFFFF0000000000FFFFFF000000 + 0000FFFFFF00FFFFFF00FFFFFF000000000000000000FF000000FF000000FF00 + 0000FF000000FF00000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00000000000000000000000000000000000000000000000000FFFF + FF0000FFFF000000000000FFFF00FFFFFF0000000000FFFFFF0000FFFF000000 + 0000FFFFFF0000000000FFFFFF00000000000000000000000000FF000000FF00 + 0000FF0000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000007F7F7F000000000000000000000000007F7F7F0000000000FFFF + FF000000000000000000FFFFFF007F7F7F00FFFFFF000000000000000000FFFF + FF00000000007F7F7F0000000000000000000000000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000000000FFFFFF0000FFFF0000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000000000000000FF00 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007F7F7F0000000000000000007F7F7F0000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000007F7F7F000000000000000000000000000000000000FFFF00FFFF + FF0000FFFF00FFFFFF0000000000FFFFFF0000FFFF0000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 000000000000000000007F7F7F0000FFFF007F7F7F0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000FFFFFF0000FF + FF00FFFFFF0000FFFF00FFFFFF0000FFFF0000000000FFFFFF00FFFFFF00FFFF + FF0000000000000000000000000000000000000000000000FF000000FF000000 + FF00000000000000000000FFFF0000FFFF0000FFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000007F7F7F00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF00000000000000FFFF00FFFF + FF0000FFFF00FFFFFF0000FFFF00000000000000000000000000FFFFFF00FFFF + FF0000000000FFFFFF00FFFFFF0000000000000000000000FF000000FF000000 + FF0000000000000000007F7F7F0000FFFF007F7F7F0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007F7F7F000000000000000000000000007F7F7F000000 + 000000000000000000007F7F7F00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF0000FFFF00000000000000FF + FF00FFFFFF0000FFFF000000000000FFFF00FFFFFF0000FFFF0000000000FFFF + FF0000000000FFFFFF000000000000000000000000000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000007F7F7F0000000000000000000000000000000000000000000000 + 0000000000007F7F7F0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF0000FFFF0000FFFF00000000 + 000000FFFF00FFFFFF0000FFFF00FFFFFF000000000000000000FFFFFF00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F000000 + 00007F7F7F007F7F7F0000000000000000000000000000000000000000000000 + 7F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF000000 + 0000BFBFBF00BFBFBF0000000000000000000000000000000000000000000000 + 7F0000007F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000BFBFBF0000000000BFBFBF00000000007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF00BFBF + BF00BFBFBF00BFBFBF0000000000000000000000000000000000000000000000 + 7F0000007F0000007F0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000BFBFBF00000000007F7F7F00000000007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FF000000FF000000FF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000BFBFBF0000000000BFBFBF00000000007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FF000000FF000000FF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000BFBFBF00000000007F7F7F00000000007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF000000FF000000FF000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000BFBFBF0000000000BFBFBF00000000007F7F7F000000 + 00000000000000000000000000000000000000000000000000000000FF000000 + FF000000FF000000FF000000FF000000FF000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000BFBFBF00000000007F7F7F00000000007F7F7F000000 + 000000000000000000000000000000000000000000007F7F7F000000FF000000 + FF0000000000000000000000FF000000FF000000FF0000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF000000000000000000BFBFBF0000000000FF000000FF000000FF00 + 00000000FF00FF000000FF000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000BFBFBF0000000000BFBFBF00000000007F7F7F000000 + 0000000000000000000000000000000000007F7F7F000000FF00000000000000 + 00000000000000000000000000000000FF000000FF0000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF0000000000BFBFBF00000000007F7F7F00000000007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000FF000000FF00000000000000 + 00000000000000000000000000000000000000000000FFFFFF00000000000000 + 00000000000000000000FFFFFF0000000000FFFFFF00000000000000FF000000 + FF000000FF000000FF000000FF00000000000000000000000000000000000000 + 7F0000007F0000007F0000FFFF000000000000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 00007F7F7F00000000007F7F7F00000000007F7F7F00000000007F7F7F000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000FF000000FF00000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000FF000000FF000000 + 00000000000000000000000000000000000000000000FFFFFF00000000000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 7F0000007F0000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF0000000000000000000000000000000000000000000000000000000000FFFF + FF00BFBFBF00BFBFBF00BFBFBF007F7F7F007F7F7F007F7F7F007F7F7F007F7F + 7F00000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007F7F7F000000 + FF000000000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000000000FFFFFF00FFFFFF000000000000000000000000000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 7F00FFFF000000007F000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000007F7F + 7F000000FF0000000000000000000000000000000000FFFFFF0000000000BFBF + BF00FFFFFF0000000000FFFFFF000000000000000000000000007F7F7F000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 7F00FFFF0000FFFF00000000000000FFFF0000FFFF0000FFFF0000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007F7F7F007F7F7F007F7F7F0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000FF000000FF000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000FF000000FF000000FF000000 + FF000000FF000000000000000000000000000000004000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000800000000100010000000000000400000000000000000000 + 000000000000000000000000FFFFFF0000000000000000000000000000000000 + 0000000000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF00 + 0000000000FFFF0000007F0000007F000000000000007F000000000000000000 + FFFFFF40FFFFFF40FFFFFF40FFFFFF4000000040FFFFFF400000FF400000FF40 + FFFFFF400000FF40FFFFFF40FFFFFF40C380FFFFFFFFFF40C300E01FFFFFFF40 + C201C00F00000000C003800700000000C003000300000000C00300010000FF00 + 00038000000000000003C000000000000003E000000000000003F00000000000 + 0003F801000000000007F80100000000000FF80100000000003FF80700000000 + 80FFF80700000000C3FFFC7F00000000FFFFFFFFFF7EFFFFF83FFFFF9001FFFF + E00F8FFFC0032020C00787FFE0037271800383BFE00303038003C13FE003A723 + 0001E03FE003A7A70001F01F000187870001F81F8000CF8F0001F00FE007CFCF + 0001E00FE00FFFFF8003FC07E00FE7E78003FF07E027E3C7C007FFC3C073E7E7 + E00FFFF39E79E997F83FFFFF7EFEFC3FFC00FFE3FFFFFFFFF000FC41F83FF83F + C0008800E00FE00F00000000C007C00700000000800380030000000080038003 + 0000000000010001000000000001000100000000000100010000000000010001 + 000100000001000100030000800380030007000180038003001F0001C007C007 + 007F000DE00FE00F01FFD553F83FF83FFFFFFDFFFFFF8FC0E01FF8FFFC7B8000 + C00FF8FFF83780008007F87FF03E00000003F81FE01D80000001F80FE01B8000 + 8000F00F80178000C000E00F001F8A80E000E00F00108A80F000E00F001F8A80 + F801F01F80178000FC01F00FE01B8A80FE01F00FE01D8FC0FF1FF007F03EFFC0 + FFFFF007F837FFC0FFFFF007FC7BFFC0FFFFFC00FFFFFFFF8003FC00FFF8F83F + 8003FC0020F8E7CF8003FC00007FDFF7E00F0000007CB01BE00F0000003CB83B + F01F0000000F7C7DF83F000000047E8DFC7F0023000C4105F83F000101FF4105 + F01F0000E3FC4105E00F0023FFFC818BE00F0063FFFF81FB800300C3FFF8DFF7 + 80030107FFF8E7CF800303FFFFFFF83FFE7FFC7FFFFFF000FE1FF83FFFFFF000 + FC07F01FF83FF000FC01F01F0001F000F800F01F0001F000F800F01F0001F000 + 0000F01F0001F0000000F01F0001E0000001F83F8003C0000032FEC380038000 + 003EFEB980038000003EFF7DC1070000003EFF3DE38F0000001DFC99FFFF0001 + 0023F9C3FFFF0003003FF3FFFFFF0007C007E00FFFFFFF00C007E00FFFFFFF00 + C007E00FF9FFFF00C007E00FF0FFFF00C007E00FF0FF0000C007E00FE07F0000 + C007E00FC07F0000C007A00B843F0000C007C0071E3F0023C007E00FFE1F0001 + C007E00FFF1F0000C007C007FF8F0023C007C007FFC70063C007C007FFE300C3 + C007F83FFFF80107C007F83FFFFF03FF} + end + object SaveDialog: TSaveDialog + DefaultExt = 'txt' + Filter = 'Text file (*.txt)|*.txt' + Left = 24 + Top = 8 + end +end diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/Global.pas b/official/1.104/examples/windows/delphitools/toolhelpview/Global.pas new file mode 100644 index 0000000..2495496 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/toolhelpview/Global.pas @@ -0,0 +1,132 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is Global.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2006-05-30 00:02:45 +0200 (mar., 30 mai 2006) $ } +{ } +{**************************************************************************************************} + +unit Global; + +{$I JCL.INC} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ComCtrls, ImgList; + +type + TGlobalModule = class(TDataModule) + ToolbarImagesList: TImageList; + SaveDialog: TSaveDialog; + procedure DataModuleCreate(Sender: TObject); + private + FPeViewer: Variant; + FPeViewerRegistred: Boolean; + public + function ExecuteSaveDialog(var FileName: TFileName): Boolean; + procedure ListViewToClipboard(ListView: TListView); + procedure ListViewToFile(ListView: TListView; const FileName: TFileName); + procedure ViewPE(const FileName: TFileName); + property PeViewerRegistred: Boolean read FPeViewerRegistred; + end; + +var + GlobalModule: TGlobalModule; + +implementation + +{$R *.DFM} + +uses + ClipBrd, ToolsUtils, JclSysInfo; + +resourcestring + sWrongWindowsVersion = 'This application is intended for Windows 95/98/2000 only'; + +procedure CheckWindowsVersion; +begin + if IsWinNT4 then + begin + MessageBox(0, PChar(sWrongWindowsVersion), nil, MB_OK or MB_ICONERROR); + Halt(0); + end; +end; + +{ TGlobalModule } + +procedure TGlobalModule.ListViewToClipboard(ListView: TListView); +var + S: TStringList; +begin + S := TStringList.Create; + Screen.Cursor := crHourGlass; + try + ListViewToStrings(ListView, S, ListView.MultiSelect); + Clipboard.AsText := S.Text; + finally + S.Free; + Screen.Cursor := crDefault; + end; +end; + +procedure TGlobalModule.ListViewToFile(ListView: TListView; const FileName: TFileName); +var + S: TStringList; +begin + SaveDialog.FileName := ChangeFileExt(FileName, ''); + if SaveDialog.Execute then + begin + S := TStringList.Create; + Screen.Cursor := crHourGlass; + try + ListViewToStrings(ListView, S, ListView.MultiSelect); + S.SaveToFile(SaveDialog.FileName); + finally + S.Free; + Screen.Cursor := crDefault; + end; + end; +end; + +function TGlobalModule.ExecuteSaveDialog(var FileName: TFileName): Boolean; +begin + SaveDialog.FileName := ChangeFileExt(FileName, ''); + Result := SaveDialog.Execute; + if Result then FileName := SaveDialog.FileName; +end; + +procedure TGlobalModule.DataModuleCreate(Sender: TObject); +begin + FPeViewerRegistred := IsPeViewerRegistred; +end; + +procedure TGlobalModule.ViewPE(const FileName: TFileName); +begin + FPeViewer := CreateOrGetOleObject(PeViewerClassName); + FPeViewer.OpenFile(FileName); + FPeViewer.BringToFront; +end; + +initialization + CheckWindowsVersion; + +end. diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/HeapDump.dfm b/official/1.104/examples/windows/delphitools/toolhelpview/HeapDump.dfm new file mode 100644 index 0000000..8707fd7 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/toolhelpview/HeapDump.dfm @@ -0,0 +1,235 @@ +inherited HeapDumpForm: THeapDumpForm + Left = 239 + Top = 152 + Width = 482 + Height = 380 + Caption = 'HeapDumpForm' + OldCreateOrder = True + PixelsPerInch = 96 + TextHeight = 13 + object Splitter2: TSplitter [0] + Left = 0 + Top = 281 + Width = 474 + Height = 3 + Cursor = crVSplit + Align = alBottom + AutoSnap = False + ResizeStyle = rsUpdate + end + object StatusBar: TStatusBar [1] + Left = 0 + Top = 334 + Width = 474 + Height = 19 + Panels = < + item + Width = 90 + end + item + Width = 90 + end + item + Width = 90 + end + item + Width = 90 + end> + SimplePanel = False + OnResize = StatusBarResize + end + object Panel1: TPanel [2] + Left = 0 + Top = 26 + Width = 474 + Height = 255 + Align = alClient + BevelOuter = bvNone + FullRepaint = False + TabOrder = 1 + object Splitter1: TSplitter + Left = 137 + Top = 0 + Width = 3 + Height = 255 + Cursor = crHSplit + AutoSnap = False + ResizeStyle = rsUpdate + end + object HeapListView: TListView + Tag = 1 + Left = 0 + Top = 0 + Width = 137 + Height = 255 + Align = alLeft + AllocBy = 16 + Columns = < + item + Caption = 'HID' + Width = 70 + end + item + Caption = 'Flags' + Width = 60 + end> + HideSelection = False + ReadOnly = True + RowSelect = True + PopupMenu = PopupMenu + TabOrder = 0 + ViewStyle = vsReport + OnColumnClick = HeapListViewColumnClick + OnCompare = HeapListViewCompare + OnSelectItem = HeapListViewSelectItem + end + object HeapEntryListView: TListView + Left = 140 + Top = 0 + Width = 334 + Height = 255 + Align = alClient + AllocBy = 128 + Columns = < + item + Caption = 'Handle' + Width = 70 + end + item + Caption = 'Start Adress' + Width = 70 + end + item + Alignment = taRightJustify + Caption = 'BlockSize' + Width = 70 + end + item + Caption = 'End Adress' + Width = 70 + end + item + Caption = 'Flags' + Width = 65 + end + item + Alignment = taRightJustify + Caption = 'Lock Count' + Width = 70 + end> + ColumnClick = False + HideSelection = False + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + PopupMenu = PopupMenu + TabOrder = 1 + ViewStyle = vsReport + OnData = HeapEntryListViewData + OnSelectItem = HeapEntryListViewSelectItem + end + end + object HeapEntryMemo: TMemo [3] + Left = 0 + Top = 284 + Width = 474 + Height = 50 + Align = alBottom + PopupMenu = PopupMenu + ReadOnly = True + ScrollBars = ssVertical + TabOrder = 2 + end + inherited CoolBar: TCoolBar + Width = 474 + Bands = < + item + Control = ToolBar + ImageIndex = -1 + MinHeight = 22 + Width = 470 + end> + inherited ToolBar: TToolBar + Width = 457 + object ToolButton5: TToolButton + Left = 0 + Top = 0 + Action = Refresh1 + end + object ToolButton6: TToolButton + Left = 23 + Top = 0 + Width = 8 + Caption = 'ToolButton6' + ImageIndex = 1 + Style = tbsSeparator + end + object ToolButton7: TToolButton + Left = 31 + Top = 0 + Action = Copy1 + end + object ToolButton8: TToolButton + Left = 54 + Top = 0 + Action = SaveToFile1 + end + object ToolButton3: TToolButton + Left = 77 + Top = 0 + Action = Find1 + end + object ToolButton1: TToolButton + Left = 100 + Top = 0 + Width = 8 + Caption = 'ToolButton1' + ImageIndex = 4 + Style = tbsSeparator + end + object ToolButton2: TToolButton + Left = 108 + Top = 0 + Action = SelectAll1 + end + end + end + inherited ActionList: TActionList + Top = 296 + inherited Refresh1: TAction + OnExecute = Refresh1Execute + end + end + inherited PopupMenu: TPopupMenu + Top = 296 + object Refresh2: TMenuItem + Caption = 'Refresh' + Hint = 'Refresh HeapList' + ImageIndex = 2 + ShortCut = 116 + OnClick = Refresh1Execute + end + object N1: TMenuItem + Caption = '-' + end + object Copy2: TMenuItem + Caption = 'Copy' + Hint = 'Copy to clipboard' + ImageIndex = 9 + ShortCut = 16451 + end + object Save1: TMenuItem + Caption = 'Save' + Hint = 'Save to text file' + ImageIndex = 3 + ShortCut = 16467 + end + object N2: TMenuItem + Caption = '-' + end + object Selectall2: TMenuItem + Action = SelectAll1 + end + end +end diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/HeapDump.pas b/official/1.104/examples/windows/delphitools/toolhelpview/HeapDump.pas new file mode 100644 index 0000000..88f6be3 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/toolhelpview/HeapDump.pas @@ -0,0 +1,334 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is HeadDump.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2006-05-30 00:02:45 +0200 (mar., 30 mai 2006) $ } +{ } +{**************************************************************************************************} + +unit HeapDump; + +{$I JCL.INC} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ComCtrls, ExtCtrls, StdCtrls, ToolWin, ActnList, ClipBrd, Menus, + TLHelp32, ViewTemplate; + +type + THeapDumpForm = class(TViewForm) + StatusBar: TStatusBar; + Panel1: TPanel; + HeapListView: TListView; + Splitter1: TSplitter; + HeapEntryListView: TListView; + Splitter2: TSplitter; + HeapEntryMemo: TMemo; + ToolButton5: TToolButton; + ToolButton6: TToolButton; + ToolButton7: TToolButton; + ToolButton8: TToolButton; + Refresh2: TMenuItem; + N1: TMenuItem; + Copy2: TMenuItem; + Save1: TMenuItem; + ToolButton1: TToolButton; + ToolButton2: TToolButton; + N2: TMenuItem; + Selectall2: TMenuItem; + ToolButton3: TToolButton; + procedure HeapListViewColumnClick(Sender: TObject; + Column: TListColumn); + procedure HeapListViewCompare(Sender: TObject; Item1, Item2: TListItem; + Data: Integer; var Compare: Integer); + procedure StatusBarResize(Sender: TObject); + procedure Refresh1Execute(Sender: TObject); + procedure HeapEntryListViewData(Sender: TObject; Item: TListItem); + procedure HeapEntryListViewSelectItem(Sender: TObject; Item: TListItem; + Selected: Boolean); + procedure HeapListViewSelectItem(Sender: TObject; Item: TListItem; + Selected: Boolean); + private + FProcessID: DWORD; + FFileName: TFileName; + FreeSum, FixedSum, MoveableSum: Integer; + FHeapEntries: array of THeapEntry32; + procedure BuildHeapList; + procedure BuildHeapEntriesList(HeapID: DWORD); + procedure UpdateStatusLine; + procedure ReadHeapEntry(Item: TListItem); + public + procedure BuildContent; override; + procedure SetParams(ProcessID: DWORD; const FileName: TFileName); + end; + +var + HeapDumpForm: THeapDumpForm; + +implementation + +{$R *.DFM} + +uses + Global, Main, ToolsUtils; + +resourcestring + sCaption = 'HeapList - %s'; + sCountStatus = 'Heap Entries: %d'; + sFixedStatus = 'Fixed: %0.n'; + sFreeStatus = 'Free: %0.n'; + sMoveableStatus = 'Moveable: %0.n'; + sPressEscape = 'Press to cancel enumerating heap items ...'; + +{ THeapDumpForm } + +procedure THeapDumpForm.BuildHeapEntriesList(HeapID: DWORD); +var + Next: Boolean; + HeapEntry: THeapEntry32; + EntriesCount: Integer; +begin + with HeapEntryListView do + begin + Items.BeginUpdate; + Screen.Cursor := crHourGlass; + try + HeapEntryMemo.Font.Style := [fsBold]; + HeapEntryMemo.Text := sPressEscape; + Items.Count := 0; + EntriesCount := 0; + SetLength(FHeapEntries, 0); + FreeSum := 0; + FixedSum := 0; + MoveableSum := 0; + HeapEntry.dwSize := Sizeof(HeapEntry); + Next := Heap32First(HeapEntry, FProcessID, HeapID); + while Next do + begin + SetLength(FHeapEntries, EntriesCount + 1); + FHeapEntries[EntriesCount] := HeapEntry; + with HeapEntry do + case dwFlags of + LF32_FIXED: + Inc(FixedSum, dwBlockSize); + LF32_FREE: + Inc(FreeSum, dwBlockSize); + LF32_MOVEABLE: + Inc(MoveableSum, dwBlockSize); + end; + Inc(EntriesCount); + if EntriesCount mod 200 = 0 then + begin + UpdateStatusLine; + if GetAsyncKeyState(VK_ESCAPE) and $8000 <> 0 then Break; + end; + Next := Heap32Next(HeapEntry); + end; + Items.Count := EntriesCount; + if Items.Count > 0 then + begin + AlphaSort; + ItemFocused := Items[0]; + ItemFocused.Selected := True; + end; + UpdateStatusLine; + HeapEntryMemo.ParentFont := True; + finally + Items.EndUpdate; + Screen.Cursor := crDefault; + end; + end; +end; + +procedure THeapDumpForm.BuildHeapList; +var + SnapProcHandle: THandle; + HeapList: THeapList32; + Next: Boolean; +begin + with HeapListView do + begin + Items.BeginUpdate; + try + Items.Clear; + SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST, FProcessID); + if SnapProcHandle <> THandle(-1) then + begin + HeapList.dwSize := Sizeof(HeapList); + Next := Heap32ListFirst(SnapProcHandle, HeapList); + while Next do + begin + with Items.Add do + begin + Caption := Format('%.8x', [HeapList.th32HeapID]); + Data := Pointer(HeapList.th32HeapID); + case HeapList.dwFlags of + HF32_DEFAULT: + SubItems.Add('Default'); + HF32_SHARED: + SubItems.Add('Shared'); + else + SubItems.Add('Normal'); + end; + end; + Next := Heap32ListNext(SnapProcHandle, HeapList); + end; + CloseHandle(SnapProcHandle); + end; + if Items.Count > 0 then + begin + AlphaSort; + ItemFocused := Items[0]; + ItemFocused.Selected := True; + end else + begin + BuildHeapEntriesList(0); + HeapEntryMemo.Lines.Clear; + end; + finally + Items.EndUpdate; + end; + end; +end; + +procedure THeapDumpForm.SetParams(ProcessID: DWORD; const FileName: TFileName); +begin + FProcessID := ProcessID; + FFileName := FileName; + Caption := Format(sCaption, [FFileName]); + PostBuildContentMessage; +end; + +procedure THeapDumpForm.HeapListViewColumnClick(Sender: TObject; + Column: TListColumn); +begin + LVColumnClick(Column); +end; + +procedure THeapDumpForm.HeapListViewCompare(Sender: TObject; Item1, + Item2: TListItem; Data: Integer; var Compare: Integer); +begin + LVCompare(TListView(Sender), Item1, Item2, Compare); +end; + +procedure THeapDumpForm.UpdateStatusLine; +begin + with StatusBar.Panels do + begin + BeginUpdate; + Items[0].Text := Format(sCountStatus, [High(FHeapEntries) + 1]); + Items[1].Text := Format(sFixedStatus, [IntToExtended(FixedSum)]); + Items[2].Text := Format(sMoveableStatus, [IntToExtended(MoveableSum)]); + Items[3].Text := Format(sFreeStatus, [IntToExtended(FreeSum)]); + EndUpdate; + Update; + end; +end; + +procedure THeapDumpForm.StatusBarResize(Sender: TObject); +var + I: Integer; +begin + with StatusBar do + for I := 0 to Panels.Count - 1 do Panels[I].Width := Width div 4; +end; + +procedure THeapDumpForm.ReadHeapEntry(Item: TListItem); +var + BlockSize, BytesRead: DWORD; + Buffer, BufferEnd, P: PChar; +begin + with HeapEntryMemo do {if DWORD(Item.SubItems.Objects[2]) <> LF32_FREE then} + begin + BlockSize := DWORD(Item.SubItems.Objects[1]); + if BlockSize > 32768 then BlockSize := 32768; + GetMem(Buffer, BlockSize); + Lines.BeginUpdate; + try + Lines.Clear; + if Toolhelp32ReadProcessMemory(FProcessID, Item.SubItems.Objects[0], + Buffer^, BlockSize - 1, BytesRead) then + begin + P := Buffer; + BufferEnd := Buffer + BytesRead - 1; + while P < BufferEnd do + begin + case P^ of + #0: P^ := '|'; + #1..#31: P^ := '.'; + end; + Inc(P); + end; + Buffer[BytesRead] := #0; + SetTextBuf(Buffer); + end; + finally + FreeMem(Buffer); + Lines.EndUpdate; + end; + end; +end; + +procedure THeapDumpForm.Refresh1Execute(Sender: TObject); +begin + BuildHeapList; +end; + +procedure THeapDumpForm.HeapEntryListViewData(Sender: TObject; + Item: TListItem); +begin + with Item, FHeapEntries[Item.Index] do + begin + Caption := Format('%.8x', [hHandle]); + SubItems.AddObject(Format('%.8x', [dwAddress]), Pointer(dwAddress)); + SubItems.AddObject(Format('%.0n', [IntToExtended(dwBlockSize)]), Pointer(dwBlockSize)); + SubItems.AddObject(Format('%.8x', [dwAddress + dwBlockSize]), Pointer(dwAddress + dwBlockSize)); + case dwFlags of + LF32_FIXED: + SubItems.AddObject('Fixed', Pointer(dwFlags)); + LF32_FREE: + SubItems.AddObject('Free', Pointer(dwFlags)); + LF32_MOVEABLE: + SubItems.AddObject('Moveable', Pointer(dwFlags)); + end; + SubItems.AddObject(Format('%d', [dwLockCount]), Pointer(dwLockCount)); + end; +end; + +procedure THeapDumpForm.HeapEntryListViewSelectItem(Sender: TObject; + Item: TListItem; Selected: Boolean); +begin + if Selected then ReadHeapEntry(Item); +end; + +procedure THeapDumpForm.HeapListViewSelectItem(Sender: TObject; + Item: TListItem; Selected: Boolean); +begin + if Selected then BuildHeapEntriesList(DWORD(Item.Data)); +end; + +procedure THeapDumpForm.BuildContent; +begin + BuildHeapList; +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/Main.dfm b/official/1.104/examples/windows/delphitools/toolhelpview/Main.dfm new file mode 100644 index 0000000..02526b3 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/toolhelpview/Main.dfm @@ -0,0 +1,876 @@ +object MainForm: TMainForm + Left = 191 + Top = 107 + ActiveControl = ProcessListView + AutoScroll = False + Caption = 'ToolHelp Viewer' + ClientHeight = 404 + ClientWidth = 587 + Color = clBtnFace + Constraints.MinHeight = 300 + Constraints.MinWidth = 400 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Menu = MainMenu + OldCreateOrder = False + Position = poDefault + ShowHint = True + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object Splitter1: TSplitter + Left = 0 + Top = 234 + Width = 587 + Height = 3 + Cursor = crVSplit + Align = alBottom + MinSize = 70 + ResizeStyle = rsUpdate + end + object ProcessListView: TListView + Left = 0 + Top = 26 + Width = 587 + Height = 208 + Align = alClient + AllocBy = 32 + Columns = < + item + Caption = 'Process' + Width = 110 + end + item + Caption = 'PID' + MaxWidth = 65 + Width = 65 + end + item + Alignment = taRightJustify + Caption = 'Priority' + MaxWidth = 50 + end + item + Alignment = taRightJustify + Caption = 'Threads' + MaxWidth = 51 + Width = 51 + end + item + Caption = 'ExeType' + MaxWidth = 55 + Width = 55 + end + item + Caption = 'FileName' + Width = 250 + end + item + Caption = 'Parent Process' + Width = 90 + end> + GridLines = True + HideSelection = False + HotTrackStyles = [] + ReadOnly = True + RowSelect = True + PopupMenu = PopupMenu + StateImages = PriorityImagesList + TabOrder = 0 + ViewStyle = vsReport + OnColumnClick = ProcessListViewColumnClick + OnCompare = ProcessListViewCompare + OnDblClick = ProcessListViewDblClick + OnEnter = ProcessListViewEnter + OnSelectItem = ProcessListViewSelectItem + end + object StatusBar: TStatusBar + Left = 0 + Top = 385 + Width = 587 + Height = 19 + Panels = < + item + Width = 85 + end + item + Width = 400 + end + item + Width = 165 + end> + SimplePanel = False + OnResize = StatusBarResize + end + object BottomPanel: TPanel + Left = 0 + Top = 237 + Width = 587 + Height = 148 + Align = alBottom + BevelOuter = bvNone + FullRepaint = False + TabOrder = 2 + object Splitter2: TSplitter + Left = 470 + Top = 0 + Width = 3 + Height = 148 + Cursor = crHSplit + Align = alRight + MinSize = 70 + ResizeStyle = rsUpdate + end + object ModulesListView: TListView + Left = 0 + Top = 0 + Width = 470 + Height = 148 + Align = alClient + AllocBy = 32 + Columns = < + item + Caption = 'Module' + Width = 70 + end + item + Caption = 'MID' + MaxWidth = 65 + Width = 65 + end + item + Caption = 'ImageBase' + Width = 70 + end + item + Caption = 'Base' + Width = 70 + end + item + Alignment = taRightJustify + Caption = 'Size' + MaxWidth = 80 + Width = 70 + end + item + Alignment = taRightJustify + Caption = 'Global #' + MaxWidth = 55 + Width = 55 + end + item + Alignment = taRightJustify + Caption = 'Process #' + MaxWidth = 60 + Width = 60 + end + item + Caption = 'Handle' + MaxWidth = 70 + Width = 70 + end + item + Caption = 'FileName' + Width = 200 + end> + HotTrackStyles = [] + ReadOnly = True + RowSelect = True + PopupMenu = PopupMenu + TabOrder = 0 + ViewStyle = vsReport + OnColumnClick = ProcessListViewColumnClick + OnCompare = ProcessListViewCompare + OnCustomDrawItem = ModulesListViewCustomDrawItem + OnDblClick = ProcessListViewDblClick + OnEnter = ProcessListViewEnter + OnSelectItem = ModulesListViewSelectItem + end + object ThreadsListView: TListView + Left = 473 + Top = 0 + Width = 114 + Height = 148 + Align = alRight + AllocBy = 4 + Columns = < + item + Caption = 'TID' + Width = 65 + end + item + Caption = 'Priority' + Width = 45 + end> + HotTrackStyles = [] + ReadOnly = True + RowSelect = True + TabOrder = 1 + ViewStyle = vsReport + OnColumnClick = ProcessListViewColumnClick + OnCompare = ProcessListViewCompare + OnEnter = ProcessListViewEnter + end + end + object CoolBar1: TCoolBar + Left = 0 + Top = 0 + Width = 587 + Height = 26 + AutoSize = True + BandMaximize = bmNone + Bands = < + item + Control = ToolBar1 + ImageIndex = -1 + MinHeight = 22 + Width = 583 + end> + FixedSize = True + OnResize = CoolBar1Resize + object ToolBar1: TToolBar + Left = 9 + Top = 0 + Width = 570 + Height = 22 + AutoSize = True + Caption = 'ToolBar1' + EdgeBorders = [] + Flat = True + Images = GlobalModule.ToolbarImagesList + TabOrder = 0 + Wrapable = False + object RefreshButton: TToolButton + Left = 0 + Top = 0 + Action = Refresh1 + end + object ToolButton7: TToolButton + Left = 23 + Top = 0 + Width = 8 + Caption = 'ToolButton7' + ImageIndex = 6 + Style = tbsSeparator + end + object CopyButton: TToolButton + Left = 31 + Top = 0 + Action = Copy1 + end + object SaveButton: TToolButton + Left = 54 + Top = 0 + Action = SaveToFile1 + end + object ToolButton3: TToolButton + Left = 77 + Top = 0 + Width = 8 + Caption = 'ToolButton3' + ImageIndex = 5 + Style = tbsSeparator + end + object ToolButton1: TToolButton + Left = 85 + Top = 0 + Action = DumpHeap1 + end + object ToolButton2: TToolButton + Left = 108 + Top = 0 + Action = DumpMemory1 + end + object ToolButton6: TToolButton + Left = 131 + Top = 0 + Action = DumpModules1 + end + object ToolButton10: TToolButton + Left = 154 + Top = 0 + Action = DumpPE1 + end + object ToolButton4: TToolButton + Left = 177 + Top = 0 + Width = 8 + Caption = 'ToolButton4' + ImageIndex = 5 + Style = tbsSeparator + end + object ChangePriButton: TToolButton + Left = 185 + Top = 0 + Action = ChangePriority1 + end + object KillButton: TToolButton + Left = 208 + Top = 0 + Action = Terminate1 + end + object PropertyButton: TToolButton + Left = 231 + Top = 0 + Action = FileProperties1 + end + object ToolButton5: TToolButton + Left = 254 + Top = 0 + Width = 8 + Caption = 'ToolButton5' + ImageIndex = 5 + Style = tbsSeparator + end + object HottrackButton: TToolButton + Left = 262 + Top = 0 + Action = HotTrack1 + Style = tbsCheck + end + object ToolButton8: TToolButton + Left = 285 + Top = 0 + Action = InfoTip1 + Style = tbsCheck + end + object ToolButton9: TToolButton + Left = 308 + Top = 0 + Action = BeepOnChange1 + Style = tbsCheck + end + object ToolButton11: TToolButton + Left = 331 + Top = 0 + Action = CheckImageBase1 + Style = tbsCheck + end + end + end + object PriorityImagesList: TImageList + Left = 104 + Top = 312 + Bitmap = { + 494C010103000500040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000002000000001002000000000000020 + 000000000000000000000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF007F00 + 00007F0000007F0000007F000000BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F0000007F0000007F0000007F00 + 00007F0000007F0000007F0000007F0000007F000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF007F0000007F00 + 0000BFBFBF00BFBFBF007F0000007F000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF0000007F0000007F0000007F00BFBFBF007F000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007F000000BFBFBF00BFBFBF00BFBF + BF0000007F0000007F0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF0000007F0000007F0000007F00BFBFBF000000000000000000000000000000 + 000000000000000000000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF0000007F0000007F0000007F00BFBFBF00BFBFBF00BFBFBF007F0000007F00 + 0000BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000 + 7F0000007F0000007F0000007F0000007F007F000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007F000000BFBFBF00BFBFBF000000 + 7F0000007F0000007F0000007F0000007F00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000 + 7F0000007F0000007F0000007F0000007F0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000BFBFBF00BFBFBF00BFBFBF000000 + 7F0000007F0000007F0000007F0000007F00BFBFBF00BFBFBF007F0000007F00 + 00007F0000007F0000007F0000007F000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007F000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF007F0000007F00 + 0000BFBFBF00BFBFBF007F0000007F000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007F000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F0000007F0000007F0000007F00 + 00007F0000007F0000007F0000007F0000007F00000000000000BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000007F0000007F0000007F000000BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF007F00 + 00007F0000007F0000007F000000BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007F000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F000000FFFFFF00BFBFBF00FFFF + FF00BFBFBF00FFFFFF00BFBFBF00BFBFBF007F00000000000000BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000000000FFFF00FFFFFF007F000000BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007F000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F000000BFBFBF00FFFFFF000000 + 7F00FFFFFF0000007F0000007F00BFBFBF007F00000000000000BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF0000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF0000FFFF007F000000BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007F000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F000000FFFFFF00BFBFBF000000 + 7F00BFBFBF0000007F00BFBFBF00FFFFFF007F00000000000000BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF0000000000FFFFFF00FFFFFF00FFFF + FF000000000000000000000000000000000000FFFF00FFFFFF007F000000BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF007F00 + 00007F0000007F0000007F0000007F000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F0000007F0000007F0000007F00 + 00007F0000007F0000007F0000007F0000007F000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F000000BFBFBF0000007F000000 + 7F00FFFFFF00BFBFBF0000007F00BFBFBF007F00000000000000BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF0000000000FFFFFF00FFFFFF00FFFF + FF0000000000FFFFFF000000000000FFFF00FFFFFF0000FFFF007F000000BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF007F0000007F00 + 0000BFBFBF00BFBFBF007F0000007F000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F000000FFFFFF00BFBFBF000000 + 7F00BFBFBF0000007F0000007F00FFFFFF007F00000000000000BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF0000000000FFFFFF00FFFFFF00FFFF + FF00000000000000000000FFFF00FFFFFF0000FFFF00FFFFFF007F000000BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF007F0000007F00 + 0000BFBFBF00BFBFBF007F0000007F000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF007F0000007F0000007F0000007F000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F000000BFBFBF00FFFFFF00BFBF + BF00FFFFFF00BFBFBF00FFFFFF00BFBFBF007F00000000000000BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF000000000000000000000000000000 + 00000000000000FFFF00FFFFFF007F0000007F0000007F0000007F000000BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF007F00 + 00007F0000007F0000007F0000007F000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF007F000000FFFFFF00FFFFFF007F000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F0000007F0000007F0000007F00 + 00007F0000007F0000007F0000007F0000007F00000000000000BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF007F00 + 000000FFFF00FFFFFF0000FFFF007F00000000FFFF007F000000BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF007F0000007F000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF007F000000FFFFFF00FFFFFF007F000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F0000007F0000007F0000007F00 + 00007F0000007F0000007F0000007F0000007F00000000000000BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF007F00 + 0000FFFFFF0000FFFF00FFFFFF007F0000007F000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF007F00 + 00007F0000007F0000007F000000BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF007F0000007F0000007F0000007F000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF007F0000007F0000007F0000007F00 + 00007F0000007F0000007F0000007F0000007F000000BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF007F00 + 00007F0000007F0000007F0000007F000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF0000007F00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000FFFF0000FFFF0000FFFF0000000000000000000000 + 0000000000000000000000000000000000007F000000BFBFBF00BFBFBF000000 + 0000000000000000000000000000BFBFBF00000000000000000000000000BFBF + BF00000000000000000000000000BFBFBF000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000FFFF0000FFFF0000FFFF0000000000000000000000 + 0000000000000000000000000000000000007F000000BFBFBF00BFBFBF000000 + 0000000000000000000000000000BFBFBF00000000000000000000000000BFBF + BF00000000000000000000000000BFBFBF000000000000000000000000000000 + 000000000000000000000000FF000000FF000000FF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000000000000000000000000000 + 000000000000000000000000FF000000FF000000FF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00000000000000 + 0000000000000000000000000000000000007F000000BFBFBF00BFBFBF000000 + 0000000000000000000000000000BFBFBF00000000000000000000000000BFBF + BF00000000000000000000000000BFBFBF000000000000000000000000000000 + 0000000000000000FF000000FF000000FF000000FF000000FF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000FFFF0000FFFF00FFFFFF00FFFFFF00FFFFFF0000FFFF0000FFFF000000 + 000000000000000000000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000000000000000000000000000 + 0000000000000000FF000000FF000000FF000000FF000000FF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000FFFF000000 + 0000000000000000000000000000000000007F000000BFBFBF00BFBFBF000000 + 0000000000000000000000000000BFBFBF00000000000000000000000000BFBF + BF00000000000000000000000000BFBFBF000000000000000000000000000000 + 00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000FF000000FF000000FF000000FF000000FF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000FFFF00FFFFFF00FFFFFF00000000007F7F7F007F7F7F0000FFFF000000 + 000000000000000000000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000FF000000FF000000FF000000FF000000FF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000FFFF00FFFFFF00FFFFFF007F7F7F00FFFFFF00FFFFFF0000FFFF000000 + 0000000000000000000000000000000000007F000000BFBFBF00BFBFBF000000 + 0000000000000000000000000000BFBFBF00000000000000000000000000BFBF + BF00000000000000000000000000BFBFBF000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FF000000FF000000FF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000FFFF0000FFFF00FFFFFF007F7F7F00FFFFFF0000FFFF0000FFFF000000 + 000000000000000000000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FF000000FF000000FF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000FFFF0000FFFF007F7F7F0000FFFF0000FFFF00000000000000 + 0000000000000000000000000000000000007F0000007F0000007F0000007F00 + 00007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00 + 00007F0000007F0000007F0000007F0000000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000FFFF0000FFFF0000FFFF0000000000000000000000 + 000000000000000000000000000000000000BFBFBF00BFBFBF00BFBFBF000000 + 0000000000000000000000000000BFBFBF00000000000000000000000000BFBF + BF00000000000000000000000000BFBFBF000000000000000000000000000000 + 00000000000000000000000000000000FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000FFFF0000FFFF0000FFFF0000000000000000000000 + 000000000000000000000000000000000000BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00BFBF + BF00BFBFBF00BFBFBF00BFBFBF00BFBFBF00424D3E000000000000003E000000 + 2800000040000000200000000100010000000000000100000000000000000000 + 000000000000000000000000FFFFFF0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000FF000000000000FF0000FF0000FF + 000000000000FF0000FFBFBFBF00000000FF0000FFFFFF00FF0000FF0000FF00 + 000000000000000000000000FF0000FFFEFFFC7FF83F0000FEFFFC7FF83FBFBF + FC7FFC7FF83FFFFFFC7FFC7FF83F0000F83FFC7FF01F0000F83FFC7FE00F0000 + F01FE00FE00FBFBFF01FE00FC007FFFFE00FF01FC00B0000E00FF01FC00700FF + FC7FF83FE00FFF00FC7FF83FE00F0000FC7FFC7FF01FFF00FC7FFC7FF83FFF00 + FC7FFEFFF83F0000FC7FFEFFF83F00FF00000000000000000000000000000000 + 000000000000} + end + object MainMenu: TMainMenu + Images = GlobalModule.ToolbarImagesList + Left = 8 + Top = 312 + object File1: TMenuItem + Caption = '&File' + object CopyItem: TMenuItem + Action = Copy1 + end + object SaveItem: TMenuItem + Action = SaveToFile1 + end + object N2: TMenuItem + Caption = '-' + end + object ExitItem: TMenuItem + Action = Exit1 + end + end + object Tools1: TMenuItem + Caption = '&Tools' + object RefreshItem: TMenuItem + Action = Refresh1 + end + object N1: TMenuItem + Caption = '-' + end + object ChangePriorityItem: TMenuItem + Action = ChangePriority1 + end + object DumpHeapItem: TMenuItem + Action = DumpHeap1 + end + object DumpMemory11: TMenuItem + Action = DumpMemory1 + end + object Moduleslist1: TMenuItem + Action = DumpModules1 + end + object DumpPEfile1: TMenuItem + Action = DumpPE1 + end + object N4: TMenuItem + Caption = '-' + end + object FilePropItem: TMenuItem + Action = FileProperties1 + end + object TerminateItem: TMenuItem + Action = Terminate1 + end + end + object Options1: TMenuItem + Caption = '&Options' + object Beeponchange2: TMenuItem + Action = BeepOnChange1 + end + object CheckImageBase2: TMenuItem + Action = CheckImageBase1 + end + object HotTrackItem: TMenuItem + Action = HotTrack1 + end + object InfoTip2: TMenuItem + Action = InfoTip1 + end + end + object Views1: TMenuItem + Caption = '&Views' + Visible = False + end + object Help1: TMenuItem + Caption = '&Help' + object Support1: TMenuItem + Action = SendMail1 + end + object AboutItem: TMenuItem + Action = About1 + end + end + end + object ActionList1: TActionList + Images = GlobalModule.ToolbarImagesList + Left = 40 + Top = 312 + object Exit1: TAction + Caption = 'Exit' + Hint = 'Exit application' + ImageIndex = 0 + OnExecute = Exit1Execute + end + object Terminate1: TAction + Caption = 'Terminate Process' + Hint = 'Terminate process' + ImageIndex = 1 + ShortCut = 16468 + OnExecute = Terminate1Execute + OnUpdate = Terminate1Update + end + object Refresh1: TAction + Caption = 'Refresh' + Hint = 'Refresh' + ImageIndex = 2 + ShortCut = 116 + OnExecute = Refresh1Execute + end + object About1: TAction + Caption = 'About...' + Hint = 'About' + OnExecute = About1Execute + end + object HotTrack1: TAction + Caption = 'HotTrack' + Hint = 'ListView hottrack' + ImageIndex = 5 + OnExecute = HotTrack1Execute + end + object SaveToFile1: TAction + Caption = 'Save as ...' + Hint = 'Save to text file' + ImageIndex = 3 + ShortCut = 16467 + OnExecute = SaveToFile1Execute + OnUpdate = SaveToFile1Update + end + object FileProperties1: TAction + Caption = 'File Properties' + Hint = 'File properties' + ImageIndex = 4 + ShortCut = 32781 + OnExecute = FileProperties1Execute + OnUpdate = FileProperties1Update + end + object ChangePriority1: TAction + Caption = 'Change Process Priority' + Hint = 'Change process priority' + ImageIndex = 8 + ShortCut = 16464 + OnExecute = ChangePriority1Execute + OnUpdate = Terminate1Update + end + object Copy1: TAction + Caption = 'Copy' + Hint = 'Copy to clipboard' + ImageIndex = 9 + ShortCut = 16451 + OnExecute = Copy1Execute + OnUpdate = SaveToFile1Update + end + object DumpHeap1: TAction + Caption = 'Heap List' + Hint = 'Heap list ' + ImageIndex = 11 + ShortCut = 16456 + OnExecute = DumpHeap1Execute + OnUpdate = Terminate1Update + end + object DumpMemory1: TAction + Caption = 'Memory List' + Hint = 'Virtual Memory list' + ImageIndex = 12 + ShortCut = 16461 + OnExecute = DumpMemory1Execute + OnUpdate = Terminate1Update + end + object DumpModules1: TAction + Caption = 'Modules list' + Hint = 'Lists all mapped modules' + ImageIndex = 7 + ShortCut = 16460 + OnExecute = DumpModules1Execute + end + object InfoTip1: TAction + Caption = 'InfoTip' + Hint = 'Listview infotips' + ImageIndex = 13 + OnExecute = InfoTip1Execute + end + object BeepOnChange1: TAction + Caption = 'Beep on change' + Hint = 'Beep on change in process list' + ImageIndex = 14 + OnExecute = BeepOnChange1Execute + end + object CheckImageBase1: TAction + Caption = 'Check ImageBase' + Hint = 'Check ImageBase' + ImageIndex = 16 + OnExecute = CheckImageBase1Execute + end + object DumpPE1: TAction + Caption = 'Dump PE file' + Hint = 'Dump PE file' + ImageIndex = 22 + ShortCut = 16452 + OnExecute = DumpPE1Execute + OnUpdate = DumpPE1Update + end + object SendMail1: TAction + Caption = 'Support' + ImageIndex = 24 + OnExecute = SendMail1Execute + end + end + object PopupMenu: TPopupMenu + Images = GlobalModule.ToolbarImagesList + Left = 72 + Top = 312 + object RefreshItemP: TMenuItem + Action = Refresh1 + end + object N5: TMenuItem + Caption = '-' + end + object CopyItemP: TMenuItem + Action = Copy1 + end + object SaveItemP: TMenuItem + Action = SaveToFile1 + end + object ChangePriorityItemP: TMenuItem + Action = ChangePriority1 + end + object DumpHeapItemP: TMenuItem + Action = DumpHeap1 + end + object MemoryList1: TMenuItem + Action = DumpMemory1 + end + object Moduleslist2: TMenuItem + Action = DumpModules1 + end + object DumpPEfile2: TMenuItem + Action = DumpPE1 + Default = True + end + object TerminateItemP: TMenuItem + Action = Terminate1 + end + object N3: TMenuItem + Caption = '-' + end + object PropertyItemP: TMenuItem + Action = FileProperties1 + end + end +end diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/Main.pas b/official/1.104/examples/windows/delphitools/toolhelpview/Main.pas new file mode 100644 index 0000000..b8cf640 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/toolhelpview/Main.pas @@ -0,0 +1,936 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is Main.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2006-05-30 00:02:45 +0200 (mar., 30 mai 2006) $ } +{ } +{**************************************************************************************************} + +unit Main; + +{$I jcl.inc} +{$IFDEF SUPPORTS_PLATFORM_WARNINGS} + {$WARN SYMBOL_PLATFORM OFF} +{$ENDIF SUPPORTS_PLATFORM_WARNINGS} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ComCtrls, ImgList, StdCtrls, ToolWin, Menus, ActnList, ExtCtrls, IniFiles; + +const + UM_ACTIVATEMAINFORM = WM_USER + $100; + +type + TMainForm = class(TForm) + ProcessListView: TListView; + PriorityImagesList: TImageList; + MainMenu: TMainMenu; + ActionList1: TActionList; + Exit1: TAction; + ExitItem: TMenuItem; + File1: TMenuItem; + StatusBar: TStatusBar; + Tools1: TMenuItem; + Terminate1: TAction; + TerminateItem: TMenuItem; + Refresh1: TAction; + RefreshItem: TMenuItem; + About1: TAction; + Help1: TMenuItem; + AboutItem: TMenuItem; + HotTrack1: TAction; + HotTrackItem: TMenuItem; + SaveToFile1: TAction; + SaveItem: TMenuItem; + N2: TMenuItem; + FileProperties1: TAction; + FilePropItem: TMenuItem; + PopupMenu: TPopupMenu; + RefreshItemP: TMenuItem; + SaveItemP: TMenuItem; + TerminateItemP: TMenuItem; + PropertyItemP: TMenuItem; + N3: TMenuItem; + ChangePriority1: TAction; + ChangePriorityItem: TMenuItem; + N5: TMenuItem; + ChangePriorityItemP: TMenuItem; + BottomPanel: TPanel; + ModulesListView: TListView; + ThreadsListView: TListView; + Splitter2: TSplitter; + Splitter1: TSplitter; + Views1: TMenuItem; + N1: TMenuItem; + Copy1: TAction; + CopyItem: TMenuItem; + CopyItemP: TMenuItem; + DumpHeap1: TAction; + DumpHeapItem: TMenuItem; + DumpHeapItemP: TMenuItem; + DumpMemory1: TAction; + DumpMemory11: TMenuItem; + MemoryList1: TMenuItem; + Options1: TMenuItem; + CoolBar1: TCoolBar; + ToolBar1: TToolBar; + RefreshButton: TToolButton; + HottrackButton: TToolButton; + ToolButton7: TToolButton; + CopyButton: TToolButton; + SaveButton: TToolButton; + ToolButton3: TToolButton; + ToolButton1: TToolButton; + ToolButton2: TToolButton; + ToolButton4: TToolButton; + ChangePriButton: TToolButton; + KillButton: TToolButton; + PropertyButton: TToolButton; + ToolButton5: TToolButton; + InfoTip1: TAction; + ToolButton8: TToolButton; + InfoTip2: TMenuItem; + BeepOnChange1: TAction; + ToolButton9: TToolButton; + Beeponchange2: TMenuItem; + CheckImageBase1: TAction; + ToolButton11: TToolButton; + CheckImageBase2: TMenuItem; + DumpModules1: TAction; + ToolButton6: TToolButton; + Moduleslist1: TMenuItem; + N4: TMenuItem; + Moduleslist2: TMenuItem; + DumpPE1: TAction; + DumpPEfile1: TMenuItem; + ToolButton10: TToolButton; + DumpPEfile2: TMenuItem; + SendMail1: TAction; + Support1: TMenuItem; + procedure FormCreate(Sender: TObject); + procedure ProcessListViewCompare(Sender: TObject; Item1, + Item2: TListItem; Data: Integer; var Compare: Integer); + procedure ProcessListViewColumnClick(Sender: TObject; + Column: TListColumn); + procedure Exit1Execute(Sender: TObject); + procedure Terminate1Execute(Sender: TObject); + procedure Refresh1Execute(Sender: TObject); + procedure About1Execute(Sender: TObject); + procedure Terminate1Update(Sender: TObject); + procedure HotTrack1Execute(Sender: TObject); + procedure SaveToFile1Update(Sender: TObject); + procedure SaveToFile1Execute(Sender: TObject); + procedure FileProperties1Update(Sender: TObject); + procedure FileProperties1Execute(Sender: TObject); + procedure ProcessListViewEnter(Sender: TObject); + procedure ChangePriority1Execute(Sender: TObject); + procedure Copy1Execute(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure StatusBarResize(Sender: TObject); + procedure DumpHeap1Execute(Sender: TObject); + procedure DumpMemory1Execute(Sender: TObject); + procedure ProcessListViewSelectItem(Sender: TObject; Item: TListItem; + Selected: Boolean); + procedure ModulesListViewSelectItem(Sender: TObject; Item: TListItem; + Selected: Boolean); + procedure ProcessListViewInfoTip(Sender: TObject; Item: TListItem; + var InfoTip: string); + procedure ModulesListViewInfoTip(Sender: TObject; Item: TListItem; + var InfoTip: string); + procedure InfoTip1Execute(Sender: TObject); + procedure BeepOnChange1Execute(Sender: TObject); + procedure CheckImageBase1Execute(Sender: TObject); + procedure ModulesListViewCustomDrawItem(Sender: TCustomListView; + Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); + procedure DumpModules1Execute(Sender: TObject); + procedure DumpPE1Update(Sender: TObject); + procedure ProcessListViewDblClick(Sender: TObject); + procedure DumpPE1Execute(Sender: TObject); + procedure SendMail1Execute(Sender: TObject); + procedure CoolBar1Resize(Sender: TObject); + private + FDisableUpdate: Boolean; + FProcess_Cnt, FThreads_Cnt, FModules_Cnt, FModules_Size: LongWord; + FIniFile: TIniFile; + procedure BuildModulesList(ProcessID: DWORD); + procedure BuildProcessList(Rebuild: Boolean = False); + procedure BuildThreadsList(ProcessID: DWORD); + function CheckProcessesChange: Boolean; + function FocusedFileName: TFileName; + procedure KillProcess(ProcessID: DWORD); + procedure LoadSettings; + procedure RebuildViewsMenuHotKeys; + procedure SaveSettings; + function SummaryInfo: string; + procedure TimerRefresh; + procedure UpdateListViewsOptions; + procedure UpdateStatusLine(SummaryOnly: Boolean = False); + procedure ViewsMenuClick(Sender: TObject); + procedure WMTimer(var Msg: TWMTimer); message WM_TIMER; + procedure WMMenuChar(var Msg: TWMMenuChar); message WM_MENUCHAR; + procedure UMActivateMainForm(var Msg: TMessage); message UM_ACTIVATEMAINFORM; + public + procedure AddToViewsMenu(AForm: TForm; const ACaption: string); + procedure DeleteFromViewsMenu(AForm: TForm); + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.DFM} + +uses + TLHelp32, About, ShellAPI, ChangePriority, HeapDump, MemoryDump, Global, + CommCtrl, JclShell, JclSysInfo, JclFileUtils, JclAppInst, ModulesDump, + ToolsUtils, FindDlg, PsApi; + +resourcestring + sCantOpenForTerminate = 'Can''t open this process for terminate.'; + sKill = 'Do you really want to kill process "%s" ?'; + sNotFound = 'Not found'; + sSaveProcessesList = 'ToolHelp process list'; + sSaveModulesList = 'Modules used by process %s'; + sSaveThreadsList = 'Threads created by process %s'; + sWaitTimeout = 'Timeout.'; + sProcessesSummary = 'Processes: %d, Threads: %d'; + sModulesSummary = 'Cnt: %d, Tot.Size: %.0n'; + sNotRelocated = '[base]'; + +const + PROCESS_CLASS_IDLE = 4; + PROCESS_CLASS_NORMAL = 8; + PROCESS_CLASS_HIGH = 13; + PROCESS_CLASS_TIMECRITICAL = 24; + +function GetPriorityIconIndex(Priority: DWORD): Integer; +begin + case Priority of + PROCESS_CLASS_IDLE: Result := 0; + PROCESS_CLASS_HIGH: Result := 1; + PROCESS_CLASS_TIMECRITICAL: Result := 2; + else + Result := -1; + end; +end; + +function GetProcessVersion(Version: DWORD): string; +var + C: array[0..2] of Char; +begin + C[0] := Chr(Lo(LOWORD(Version))); + C[1] := Chr(Hi(LOWORD(Version))); + if C[0] < #32 then C[0] := '_'; + if C[1] < #32 then C[1] := '_'; + C[2] := #0; + Result := Format('%s %d.%d', [C, Hi(HIWORD(Version)), Lo(HIWORD(Version))]); +end; + +{ TMainForm } + +procedure TMainForm.FormCreate(Sender: TObject); +var + FileInfo: TSHFileInfo; + ImageListHandle: THandle; +begin + {$IFDEF COMPILER5_UP} + ProcessListView.OnInfoTip := ProcessListViewInfoTip; + ModulesListView.OnInfoTip := ModulesListViewInfoTip; + {$ELSE COMPILER5_UP} + InfoTip1.Visible := False; + {$ENDIF COMPILER5_UP} + FIniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini')); + LoadSettings; + ImageListHandle := SHGetFileInfo('', 0, FileInfo, SizeOf(FileInfo), + SHGFI_SYSICONINDEX or SHGFI_SMALLICON); + SendMessage(ProcessListView.Handle, LVM_SETIMAGELIST, LVSIL_SMALL, ImageListHandle); + SetTimer(Handle, 1, 500, nil); + BuildProcessList; +end; + +procedure TMainForm.FormDestroy(Sender: TObject); +begin + SaveSettings; + FIniFile.UpdateFile; + FIniFile.Free; + Win32Check(KillTimer(Handle, 1)); +end; + +procedure TMainForm.BuildProcessList(Rebuild: Boolean = False); +var + SnapProcHandle, ProcessHandle: THandle; + ProcessEntry: TProcessEntry32; + Next: Boolean; + FileInfo: TSHFileInfo; + ProcessVersion: DWORD; + FindItem: TListItem; + I: Integer; + ProcList: TList; + Added, Changed: Boolean; + + procedure CheckChanged; +begin + if ProcessListView.ItemFocused = FindItem then Changed := True; +end; + +begin + if FDisableUpdate then Exit; + ProcList := TList.Create; + Added := False; + Changed := False; + with ProcessListView do + try + FDisableUpdate := True; + try + if Rebuild then + begin + Screen.Cursor := crHourGlass; + Items.BeginUpdate; + Items.Clear; + FProcess_Cnt := 0; + FThreads_Cnt := 0; + end else + SendMessage(Handle, WM_SETREDRAW, 0, 0); + SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if SnapProcHandle <> THandle(-1) then + begin + ProcessEntry.dwSize := Sizeof(ProcessEntry); + Next := Process32First(SnapProcHandle, ProcessEntry); + while Next do + begin + ProcList.Add(Pointer(ProcessEntry.th32ProcessID)); + FindItem := FindData(0, Pointer(ProcessEntry.th32ProcessID), True, False); + with ProcessEntry do if FindItem = nil then + begin // New Process + Added := True; + if IsWin2k then + begin + ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, th32ProcessID); + if Handle <> 0 then + begin + if GetModuleFileNameEx(ProcessHandle, 0, szExeFile, SizeOf(szExeFile)) = 0 then + StrPCopy(szExeFile, '[Idle]'); + CloseHandle(ProcessHandle); + end; + end; + ProcessVersion := SHGetFileInfo(szExeFile, 0, FileInfo, Sizeof(FileInfo), SHGFI_EXETYPE); + SHGetFileInfo(szExeFile, 0, FileInfo, Sizeof(FileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON); + with Items.Add, ProcessEntry do + begin + Caption := AnsiLowerCase(ExtractFileName(szExeFile)); + Data := Pointer(th32ProcessID); + ImageIndex := FileInfo.iIcon; + StateIndex := GetPriorityIconIndex(pcPriClassBase); + SubItems.AddObject(Format('%.8x', [th32ProcessID]), Pointer(th32ProcessID)); + SubItems.AddObject(Format('%d', [pcPriClassBase]), Pointer(pcPriClassBase)); + SubItems.AddObject(Format('%d', [cntThreads]), Pointer(cntThreads)); + SubItems.AddObject(GetProcessVersion(ProcessVersion), Pointer(ProcessVersion)); + SubItems.Add(szExeFile); + SubItems.AddObject(Format('(%.8x)', [th32ParentProcessID]), Pointer(th32ParentProcessID)); + Inc(FProcess_Cnt); + Inc(FThreads_Cnt, cntThreads); + end; + end else + with FindItem do + begin // Any changes in existing process ? + if SubItems.Objects[1] <> Pointer(pcPriClassBase) then + begin + SubItems.Objects[1] := Pointer(pcPriClassBase); + SubItems.Strings[1] := Format('%d', [pcPriClassBase]); + StateIndex := GetPriorityIconIndex(pcPriClassBase); + end; + if SubItems.Objects[2] <> Pointer(cntThreads) then + begin + Inc(FThreads_Cnt, cntThreads - DWORD(SubItems.Objects[2])); + SubItems.Objects[2] := Pointer(cntThreads); + SubItems.Strings[2] := Format('%d', [cntThreads]); + CheckChanged; + end; + end; + Next := Process32Next(SnapProcHandle, ProcessEntry); + end; + CloseHandle(SnapProcHandle); + end; + if Added then // find the names of parent processes + begin + for I := 0 to Items.Count - 1 do + begin + FindItem := FindData(0, Items[I].SubItems.Objects[5], True, False); + if FindItem <> nil then Items[I].SubItems[5] := FindItem.Caption; + end; + AlphaSort; + end; + for I := Items.Count - 1 downto 0 do // delete non-existing processes + if ProcList.IndexOf(Items[I].Data) = -1 then + begin + Dec(FProcess_Cnt); + Dec(FThreads_Cnt, DWORD(Items[I].SubItems.Objects[2])); + Items.Delete(I); + end; + if GetNextItem(nil, sdAll, [isSelected]) = nil then + begin + if ItemFocused = nil then ItemFocused := Items[0]; + ItemFocused.Selected := True; + end else + if Changed then BuildThreadsList(DWORD(ItemFocused.Data)); + UpdateStatusLine(True); + finally + if Rebuild then + Items.EndUpdate + else + SendMessage(Handle, WM_SETREDRAW, 1, 0); + end; + finally + FDisableUpdate := False; + ProcList.Free; + Screen.Cursor := crDefault; + end; +end; + +procedure TMainForm.BuildThreadsList(ProcessID: DWORD); +var + SnapProcHandle: THandle; + ThreadEntry: TThreadEntry32; + Next: Boolean; +begin + with ThreadsListView do + try + Items.BeginUpdate; + Items.Clear; + SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); + if SnapProcHandle <> THandle(-1) then + begin + ThreadEntry.dwSize := Sizeof(ThreadEntry); + Next := Thread32First(SnapProcHandle, ThreadEntry); + while Next do + begin + if ThreadEntry.th32OwnerProcessID = ProcessID then + with Items.Add, ThreadEntry do + begin + Caption := Format('%.8x', [th32ThreadID]); + Data := Pointer(th32ThreadID); + SubItems.AddObject(Format('%d', [tpDeltaPri]), Pointer(tpDeltaPri)); + end; + Next := Thread32Next(SnapProcHandle, ThreadEntry); + end; + CloseHandle(SnapProcHandle); + end; + AlphaSort; + ListViewFocusFirstItem(ThreadsListView); + finally + Items.EndUpdate; + end; +end; + +procedure TMainForm.BuildModulesList(ProcessID: DWORD); +var + SnapProcHandle: THandle; + ModuleEntry: TModuleEntry32; + Next: Boolean; + ImageBase: DWORD; +begin + with ModulesListView do + try + Items.BeginUpdate; + Items.Clear; + FModules_Cnt := 0; + FModules_Size := 0; + SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessID); + if SnapProcHandle <> THandle(-1) then + begin + ModuleEntry.dwSize := Sizeof(ModuleEntry); + Next := Module32First(SnapProcHandle, ModuleEntry); + while Next do + begin + with Items.Add, ModuleEntry do + begin + Caption := AnsiLowerCase(szModule); + SubItems.AddObject(Format('%.8x', [th32ModuleID]), Pointer(th32ModuleID)); + if CheckImageBase1.Checked then + begin + ImageBase := GetImageBase(szExePath); + if ImageBase = DWORD(modBaseAddr) then + SubItems.AddObject(sNotRelocated, Pointer(0)) + else + SubItems.AddObject(Format('%.8x', [ImageBase]), Pointer(ImageBase)); + end else + SubItems.Add(''); + SubItems.AddObject(Format('%p', [modBaseAddr]), Pointer(modBaseAddr)); + SubItems.AddObject(Format('%.0n', [IntToExtended(modBaseSize)]), Pointer(modBaseSize)); + SubItems.AddObject(Format('%d', [GlblcntUsage]), Pointer(GlblcntUsage)); + SubItems.AddObject(Format('%d', [ProccntUsage]), Pointer(ProccntUsage)); + SubItems.AddObject(Format('%.8x', [hModule]), Pointer(hModule)); + SubItems.Add(szExePath); + Inc(FModules_Cnt); + Inc(FModules_Size, modBaseSize); + end; + Next := Module32Next(SnapProcHandle, ModuleEntry); + end; + CloseHandle(SnapProcHandle); + end; + AlphaSort; + ListViewFocusFirstItem(ModulesListView); + finally + Items.EndUpdate; + end; +end; + +function TMainForm.CheckProcessesChange: Boolean; +var + SnapProcHandle: THandle; + ProcessEntry: TProcessEntry32; + Next: Boolean; + ProcessCount: Integer; + FindItem: TListItem; +begin + Result := False; + ProcessCount := 0; + SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if SnapProcHandle <> THandle(-1) then + begin + ProcessEntry.dwSize := Sizeof(ProcessEntry); + Next := Process32First(SnapProcHandle, ProcessEntry); + while Next and (not Result) do + begin + Inc(ProcessCount); + FindItem := ProcessListView.FindData(0, Pointer(ProcessEntry.th32ProcessID), True, False); + if FindItem = nil then + Result := True + else + with FindItem do + Result := (SubItems.Objects[1] <> Pointer(ProcessEntry.pcPriClassBase)) or + (SubItems.Objects[2] <> Pointer(ProcessEntry.cntThreads)); + Next := Process32Next(SnapProcHandle, ProcessEntry); + end; + CloseHandle(SnapProcHandle); + end; + Result := Result or (ProcessCount <> ProcessListView.Items.Count); +end; + +function TMainForm.FocusedFileName: TFileName; +begin + if (ActiveControl = ProcessListView) and (ProcessListView.ItemFocused <> nil) then + Result := ProcessListView.ItemFocused.SubItems[4] else + if (ActiveControl = ModulesListView) and (ModulesListView.ItemFocused <> nil) then + Result := ModulesListView.ItemFocused.SubItems[7] else + Result := ''; +end; + +procedure TMainForm.KillProcess(ProcessID: DWORD); +var + ProcessHandle: THandle; +begin + ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS{PROCESS_TERMINATE}, False, ProcessID); + if ProcessHandle <> 0 then + begin + TerminateProcess(ProcessHandle, 0); + if WaitForSingleObject(ProcessHandle, 10000) = WAIT_TIMEOUT then + MessBox(sWaitTimeout, MB_ICONWARNING); + CloseHandle(ProcessHandle); + BuildProcessList; + end else + MessBox(sCantOpenForTerminate, MB_ICONERROR); +end; + +function TMainForm.SummaryInfo: string; +begin + if (ActiveControl = ProcessListView) then + Result := Format(sProcessesSummary , [FProcess_Cnt, FThreads_Cnt]) else + if (ActiveControl = ModulesListView) then + Result := Format(sModulesSummary , [FModules_Cnt, IntToExtended(FModules_Size)]) else + Result := ''; +end; + +procedure TMainForm.TimerRefresh; +begin + if not Application.Terminated and IsWindowEnabled(Handle) and CheckProcessesChange then + begin + BuildProcessList; + if BeepOnChange1.Checked then MessageBeep(MB_OK); + end; +end; + +procedure TMainForm.UpdateStatusLine(SummaryOnly: Boolean = False); +var + FileName: TFileName; +begin + FileName := FocusedFileName; + with StatusBar.Panels do + begin + BeginUpdate; + if not SummaryOnly then + begin + Items[0].Text := ''; + Items[1].Text := ''; + if VersionResourceAvailable(FileName) then + try + with TJclFileVersionInfo.Create(FileName) do + try + StatusBar.Panels.Items[0].Text := FileVersion; + StatusBar.Panels.Items[1].Text := FileDescription; + finally + Free; + end; + except + end else + Items[0].Text := sNotFound; + end; + Items[2].Text := SummaryInfo; + EndUpdate; + end; +end; + +procedure TMainForm.ProcessListViewCompare(Sender: TObject; Item1, + Item2: TListItem; Data: Integer; var Compare: Integer); +begin + LVCompare(TListView(Sender), Item1, Item2, Compare); +end; + +procedure TMainForm.ProcessListViewColumnClick(Sender: TObject; + Column: TListColumn); +begin + LVColumnClick(Column); +end; + +procedure TMainForm.ProcessListViewEnter(Sender: TObject); +begin + UpdateStatusLine; +end; + +procedure TMainForm.Exit1Execute(Sender: TObject); +begin + Close; +end; + +procedure TMainForm.BeepOnChange1Execute(Sender: TObject); +begin + with BeepOnChange1 do + Checked := not Checked; +end; + +procedure TMainForm.HotTrack1Execute(Sender: TObject); +begin + with HotTrack1 do + begin + Checked := not Checked; + UpdateListViewsOptions; + end; +end; + +procedure TMainForm.InfoTip1Execute(Sender: TObject); +begin + with InfoTip1 do + begin + Checked := not Checked; + UpdateListViewsOptions; + end; +end; + +procedure TMainForm.CheckImageBase1Execute(Sender: TObject); +begin + with CheckImageBase1 do + begin + Checked := not Checked; + ProcessListViewSelectItem(nil, ProcessListView.Selected, Assigned(ProcessListView.Selected)); + end; +end; + +procedure TMainForm.Terminate1Execute(Sender: TObject); +begin + with ProcessListView do if (ItemFocused <> nil) and + (MessBoxFmt(sKill, [ItemFocused.Caption], MB_ICONEXCLAMATION or MB_YESNO or MB_DEFBUTTON2) = ID_YES) then + KillProcess(DWORD(ItemFocused.Data)); +end; + +procedure TMainForm.Refresh1Execute(Sender: TObject); +begin + BuildProcessList(True); +end; + +procedure TMainForm.About1Execute(Sender: TObject); +begin + ShowToolsAboutBox; +end; + +procedure TMainForm.ChangePriority1Execute(Sender: TObject); +begin + with TChangePriorityDlg.Create(Application) do + try + ProcessID := DWORD(ProcessListView.ItemFocused.Data); + ShowModal; + finally + Free; + end; +end; + +procedure TMainForm.Terminate1Update(Sender: TObject); +begin + TAction(Sender).Enabled := (ActiveControl = ProcessListView) and + (ProcessListView.ItemFocused <> nil); +end; + +procedure TMainForm.SaveToFile1Update(Sender: TObject); +begin + TAction(Sender).Enabled := ActiveControl is TListView; +end; + +procedure TMainForm.SaveToFile1Execute(Sender: TObject); +var + FileName: string; +begin + if ActiveControl = ProcessListView then + FileName := sSaveProcessesList else + if ActiveControl = ThreadsListView then + FileName := Format(sSaveThreadsList, [ProcessListView.ItemFocused.Caption]) else + if ActiveControl = ModulesListView then + FileName := Format(sSaveModulesList, [ProcessListView.ItemFocused.Caption]); + GlobalModule.ListViewToFile(ActiveControl as TListView, FileName); +end; + +procedure TMainForm.FileProperties1Update(Sender: TObject); +begin + FileProperties1.Enabled := + (ActiveControl = ProcessListView) or (ActiveControl = ModulesListView); +end; + +procedure TMainForm.FileProperties1Execute(Sender: TObject); +begin + DisplayPropDialog(Application.Handle, FocusedFileName); +end; + +procedure TMainForm.AddToViewsMenu(AForm: TForm; const ACaption: string); +var + Item: TMenuItem; +begin + Item := TMenuItem.Create(Views1); + Item.Caption := ACaption; + Item.Tag := Integer(AForm); + Item.OnClick := ViewsMenuClick; + Views1.Add(Item); + RebuildViewsMenuHotKeys; +end; + +procedure TMainForm.DeleteFromViewsMenu(AForm: TForm); +var + I: Integer; +begin + with Views1 do + for I := 0 to Count - 1 do + if Pointer(Items[I].Tag) = AForm then + begin + Items[I].Free; + System.Break; + end; + RebuildViewsMenuHotKeys; +end; + +procedure TMainForm.ViewsMenuClick(Sender: TObject); +begin + TForm(TMenuItem(Sender).Tag).BringToFront; +end; + +procedure TMainForm.RebuildViewsMenuHotKeys; +var + I: Integer; +begin + for I := 0 to Views1.Count - 1 do + if I < 9 then + Views1.Items[I].ShortCut := ShortCut(I + 49, [ssAlt]) + else + Views1.Items[I].ShortCut := 0; + Views1.Visible := Views1.Count > 0; +end; + +procedure TMainForm.Copy1Execute(Sender: TObject); +begin + GlobalModule.ListViewToClipboard(ActiveControl as TListView); +end; + +procedure TMainForm.WMTimer(var Msg: TWMTimer); +begin + if Msg.TimerID = 1 then + begin + TimerRefresh; + Msg.Result := 0; + end else inherited; +end; + +procedure TMainForm.WMMenuChar(var Msg: TWMMenuChar); +begin + inherited; + if Msg.Result = MNC_IGNORE then + PostMessage(Handle, UM_ACTIVATEMAINFORM, 0, 0); +end; + +procedure TMainForm.UMActivateMainForm(var Msg: TMessage); +begin + BringToFront; +end; + +procedure TMainForm.StatusBarResize(Sender: TObject); +begin + with StatusBar do + Panels[1].Width := Width - Panels[0].Width - Panels[2].Width; +end; + +procedure TMainForm.DumpHeap1Execute(Sender: TObject); +begin + FDisableUpdate := True; + try + with THeapDumpForm.Create(Application) do + begin + with ProcessListView.ItemFocused do SetParams(DWORD(Data), Caption); + Show; + end; + finally + FDisableUpdate := False; + end; +end; + +procedure TMainForm.DumpMemory1Execute(Sender: TObject); +begin + FDisableUpdate := True; + try + with TMemoryDumpForm.Create(Application) do + try + with ProcessListView.ItemFocused do SetParams(DWORD(Data), Caption); + Show; + except + Free; + raise + end; + finally + FDisableUpdate := False; + end; +end; + +procedure TMainForm.ProcessListViewSelectItem(Sender: TObject; + Item: TListItem; Selected: Boolean); +begin + if Selected then + begin + BuildThreadsList(DWORD(Item.Data)); + BuildModulesList(DWORD(Item.Data)); + UpdateStatusLine; + end; +end; + +procedure TMainForm.ModulesListViewSelectItem(Sender: TObject; + Item: TListItem; Selected: Boolean); +begin + if Selected and TWinControl(Sender).Focused then UpdateStatusLine; +end; + +procedure TMainForm.ProcessListViewInfoTip(Sender: TObject; + Item: TListItem; var InfoTip: string); +begin + InfoTip := InfoTipVersionString(Item.SubItems[4]); +end; + +procedure TMainForm.ModulesListViewInfoTip(Sender: TObject; + Item: TListItem; var InfoTip: string); +begin + InfoTip := InfoTipVersionString(Item.SubItems[7]); +end; + +procedure TMainForm.LoadSettings; +begin + with FIniFile do + begin + Left := ReadInteger(Name, 'Left', Left); + Top := ReadInteger(Name, 'Top', Top); + Width := ReadInteger(Name, 'Width', Width); + Height := ReadInteger(Name, 'Height', Height); + HotTrack1.Checked := ReadBool('Options', HotTrack1.Name, HotTrack1.Checked); + InfoTip1.Checked := ReadBool('Options', InfoTip1.Name, InfoTip1.Checked); + BeepOnChange1.Checked := ReadBool('Options', BeepOnChange1.Name, BeepOnChange1.Checked); + CheckImageBase1.Checked := ReadBool('Options', CheckImageBase1.Name, CheckImageBase1.Checked); + end; + UpdateListViewsOptions; +end; + +procedure TMainForm.SaveSettings; +begin + with FIniFile do + begin + WriteInteger(Name, 'Left', Left); + WriteInteger(Name, 'Top', Top); + WriteInteger(Name, 'Width', Width); + WriteInteger(Name, 'Height', Height); + WriteBool('Options', HotTrack1.Name, HotTrack1.Checked); + WriteBool('Options', InfoTip1.Name, InfoTip1.Checked); + WriteBool('Options', BeepOnChange1.Name, BeepOnChange1.Checked); + WriteBool('Options', CheckImageBase1.Name, CheckImageBase1.Checked); + end; +end; + +procedure TMainForm.UpdateListViewsOptions; +begin + ProcessListView.HotTrack := HotTrack1.Checked; + ThreadsListView.HotTrack := HotTrack1.Checked; + ModulesListView.HotTrack := HotTrack1.Checked; + ProcessListView.ShowHint := InfoTip1.Checked; + ThreadsListView.ShowHint := InfoTip1.Checked; + ModulesListView.ShowHint := InfoTip1.Checked; +end; + +procedure TMainForm.ModulesListViewCustomDrawItem(Sender: TCustomListView; + Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); +begin + if Item.SubItems.Objects[1] <> nil then + Sender.Canvas.Font.Style := [fsunderline]; +end; + +procedure TMainForm.DumpModules1Execute(Sender: TObject); +begin + if not Assigned(ModulesDumpForm) then + ModulesDumpForm := TModulesDumpForm.Create(Application); + ModulesDumpForm.Show; +end; + +procedure TMainForm.DumpPE1Update(Sender: TObject); +begin + DumpPE1.Enabled := GlobalModule.PeViewerRegistred and (Length(FocusedFileName) > 0); +end; + +procedure TMainForm.ProcessListViewDblClick(Sender: TObject); +begin + DumpPE1.Execute; +end; + +procedure TMainForm.DumpPE1Execute(Sender: TObject); +begin + GlobalModule.ViewPE(FocusedFileName); +end; + +procedure TMainForm.SendMail1Execute(Sender: TObject); +begin + SendEmail; +end; + +procedure TMainForm.CoolBar1Resize(Sender: TObject); +begin + D4FixCoolBarResizePaint(Sender); +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/MemoryDump.dfm b/official/1.104/examples/windows/delphitools/toolhelpview/MemoryDump.dfm new file mode 100644 index 0000000..5b14849 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/toolhelpview/MemoryDump.dfm @@ -0,0 +1,282 @@ +inherited MemoryDumpForm: TMemoryDumpForm + Left = 206 + Top = 116 + Width = 654 + Height = 423 + Caption = 'MemoryDumpForm' + OldCreateOrder = True + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object Splitter1: TSplitter [0] + Left = 0 + Top = 191 + Width = 646 + Height = 3 + Cursor = crVSplit + Align = alBottom + AutoSnap = False + ResizeStyle = rsUpdate + end + object Splitter2: TSplitter [1] + Left = 105 + Top = 26 + Width = 3 + Height = 165 + Cursor = crHSplit + AutoSnap = False + ResizeStyle = rsUpdate + end + inherited CoolBar: TCoolBar + Width = 646 + Bands = < + item + Control = ToolBar + ImageIndex = -1 + MinHeight = 22 + Width = 642 + end> + inherited ToolBar: TToolBar + Width = 629 + object ToolButton5: TToolButton + Left = 0 + Top = 0 + Action = Refresh1 + end + object ToolButton6: TToolButton + Left = 23 + Top = 0 + Width = 8 + Caption = 'ToolButton6' + ImageIndex = 1 + Style = tbsSeparator + end + object ToolButton1: TToolButton + Left = 31 + Top = 0 + Action = Copy1 + end + object ToolButton2: TToolButton + Left = 54 + Top = 0 + Action = SaveToFile1 + end + object ToolButton10: TToolButton + Left = 77 + Top = 0 + Action = Find1 + end + object ToolButton9: TToolButton + Left = 100 + Top = 0 + Action = SaveData1 + end + object ToolButton3: TToolButton + Left = 123 + Top = 0 + Width = 8 + Caption = 'ToolButton3' + ImageIndex = 4 + Style = tbsSeparator + end + object ToolButton4: TToolButton + Left = 131 + Top = 0 + Action = SelectAll1 + end + object ToolButton7: TToolButton + Left = 154 + Top = 0 + Width = 8 + Caption = 'ToolButton7' + ImageIndex = 18 + Style = tbsSeparator + end + object ToolButton8: TToolButton + Left = 162 + Top = 0 + Action = ViewAsText1 + Style = tbsCheck + end + end + end + object StatusBar: TStatusBar [3] + Left = 0 + Top = 377 + Width = 646 + Height = 19 + Panels = < + item + Width = 65 + end + item + Width = 130 + end + item + Width = 130 + end + item + Width = 50 + end> + SimplePanel = False + end + object PagesListView: TListView [4] + Left = 108 + Top = 26 + Width = 538 + Height = 165 + Align = alClient + AllocBy = 64 + Columns = < + item + Caption = 'Base' + Width = 80 + end + item + Caption = 'Protect' + Width = 75 + end + item + Caption = 'Allocation' + Width = 65 + end + item + Caption = 'Alloc.protect' + Width = 75 + end + item + Alignment = taRightJustify + Caption = 'Region size' + Width = 90 + end + item + Caption = 'State' + Width = 60 + end + item + Caption = 'ModuleName' + Width = 100 + end + item + Caption = 'Type' + end> + ColumnClick = False + HideSelection = False + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + PopupMenu = PopupMenu + SmallImages = GlobalModule.ToolbarImagesList + TabOrder = 1 + ViewStyle = vsReport + OnCustomDrawItem = PagesListViewCustomDrawItem + OnData = PagesListViewData + OnSelectItem = PagesListViewSelectItem + end + object DumpListView: TListView [5] + Left = 0 + Top = 194 + Width = 646 + Height = 183 + Align = alBottom + Columns = < + item + Caption = 'Address' + Width = 80 + end + item + Caption = 'Data' + Width = 350 + end + item + Caption = 'ASCII' + Width = 130 + end> + ColumnClick = False + Font.Charset = EASTEUROPE_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Courier New' + Font.Style = [] + MultiSelect = True + OwnerData = True + ReadOnly = True + RowSelect = True + ParentFont = False + PopupMenu = PopupMenu + TabOrder = 2 + ViewStyle = vsReport + OnData = DumpListViewData + end + object MemoryTreeView: TTreeView [6] + Left = 0 + Top = 26 + Width = 105 + Height = 165 + Align = alLeft + Images = GlobalModule.ToolbarImagesList + Indent = 19 + ReadOnly = True + TabOrder = 4 + OnChange = MemoryTreeViewChange + OnGetSelectedIndex = MemoryTreeViewGetSelectedIndex + end + inherited ActionList: TActionList + inherited Refresh1: TAction + OnExecute = Refresh1Execute + end + object ViewAsText1: TAction + Caption = 'View as text' + Hint = 'View as text' + ImageIndex = 23 + ShortCut = 16468 + OnExecute = ViewAsText1Execute + end + object SaveData1: TAction + Caption = 'Save data' + Hint = 'Save region data' + ImageIndex = 25 + ShortCut = 16452 + OnExecute = SaveData1Execute + OnUpdate = SaveData1Update + end + end + inherited PopupMenu: TPopupMenu + object Refresh2: TMenuItem + Action = Refresh1 + end + object N1: TMenuItem + Caption = '-' + end + object Copy2: TMenuItem + Action = Copy1 + end + object Save1: TMenuItem + Action = SaveToFile1 + end + object Savedata2: TMenuItem + Action = SaveData1 + end + object N2: TMenuItem + Caption = '-' + end + object Selectall2: TMenuItem + Action = SelectAll1 + end + object N3: TMenuItem + Caption = '-' + end + object Viewastext2: TMenuItem + Action = ViewAsText1 + end + end + object SaveDataDialog: TSaveDialog + DefaultExt = 'bin' + Filter = 'Binary files (*.bin)|*.bin|All files (*.*)|*.*' + Options = [ofOverwritePrompt, ofHideReadOnly, ofPathMustExist, ofEnableSizing] + Left = 104 + Top = 224 + end +end diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/MemoryDump.pas b/official/1.104/examples/windows/delphitools/toolhelpview/MemoryDump.pas new file mode 100644 index 0000000..3dafc32 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/toolhelpview/MemoryDump.pas @@ -0,0 +1,518 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is MemoryDump.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2008-09-09 21:32:17 +0200 (mar., 09 sept. 2008) $ } +{ } +{**************************************************************************************************} + +unit MemoryDump; + +{$I JCL.INC} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ComCtrls, ToolWin, ActnList, ExtCtrls, ViewTemplate, Menus; + +type + TMemoryInfo = packed record + MemInfo: TMemoryBasicInformation; + RepeatedItem, MappedFile: Boolean; + end; + + TMemoryDumpForm = class(TViewForm) + StatusBar: TStatusBar; + PagesListView: TListView; + Splitter1: TSplitter; + DumpListView: TListView; + ToolButton5: TToolButton; + ToolButton6: TToolButton; + MemoryTreeView: TTreeView; + Splitter2: TSplitter; + ToolButton1: TToolButton; + ToolButton2: TToolButton; + ToolButton3: TToolButton; + ToolButton4: TToolButton; + Refresh2: TMenuItem; + N1: TMenuItem; + Copy2: TMenuItem; + Save1: TMenuItem; + N2: TMenuItem; + Selectall2: TMenuItem; + ViewAsText1: TAction; + ToolButton7: TToolButton; + ToolButton8: TToolButton; + N3: TMenuItem; + Viewastext2: TMenuItem; + SaveData1: TAction; + ToolButton9: TToolButton; + Savedata2: TMenuItem; + SaveDataDialog: TSaveDialog; + ToolButton10: TToolButton; + procedure Refresh1Execute(Sender: TObject); + procedure DumpListViewData(Sender: TObject; Item: TListItem); + procedure PagesListViewSelectItem(Sender: TObject; Item: TListItem; + Selected: Boolean); + procedure FormDestroy(Sender: TObject); + procedure PagesListViewCustomDrawItem(Sender: TCustomListView; + Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); + procedure FormCreate(Sender: TObject); + procedure PagesListViewData(Sender: TObject; Item: TListItem); + procedure MemoryTreeViewChange(Sender: TObject; Node: TTreeNode); + procedure MemoryTreeViewGetSelectedIndex(Sender: TObject; + Node: TTreeNode); + procedure ViewAsText1Execute(Sender: TObject); + procedure SaveData1Update(Sender: TObject); + procedure SaveData1Execute(Sender: TObject); + private + FDumpBytesPerLine: Integer; + FProcessID: DWORD; + FProcess: THandle; + FFileName: TFileName; + FMemoryInfo: array of TMemoryInfo; + FModulesList: TStringList; + procedure BuildPagesList; + procedure BuildModulesList; + procedure UpdateDumpList; + public + procedure SetParams(ProcessID: DWORD; const FileName: TFileName); + end; + +var + MemoryDumpForm: TMemoryDumpForm; + +implementation + +uses Global, TLHelp32, ToolsUtils, FindDlg, JclBase; + +{$R *.DFM} + +resourcestring + sAllocations = 'Allocations'; + sCaption = 'Virtual Memory list - %s'; + sCommited = 'Comitted: %.0n'; + sCount = 'Count: %d'; + sModules = 'Modules'; + sReserved = 'Reserved: %.0n'; + +function AllocationProtectStr(P: DWORD): string; +begin + case P of + PAGE_NOACCESS: + Result := 'NoAccess'; + PAGE_READONLY: + Result := 'ReadOnly'; + PAGE_READWRITE: + Result := 'ReadWrite'; + PAGE_WRITECOPY: + Result := 'WriteCopy'; + PAGE_EXECUTE: + Result := 'Exec'; + PAGE_EXECUTE_READ: + Result := 'ExecRead'; + PAGE_EXECUTE_READWRITE: + Result := 'ExecReadWrite'; + PAGE_EXECUTE_WRITECOPY: + Result := 'ExecWriteCopy'; + PAGE_GUARD: + Result := 'Guard'; + PAGE_NOCACHE: + Result := 'NoCache'; + else + Result := ''; + end; +end; + +function StateStr(P: DWORD): string; +begin + case P of + MEM_COMMIT: + Result := 'Commit'; + MEM_FREE: + Result := 'Free'; + MEM_RESERVE: + Result := 'Reserve'; + else + Result := Format('%x', [P]); + end; +end; + +function TypeStr(P: DWORD): string; +begin + case P of + MEM_IMAGE: + Result := 'Image'; + MEM_MAPPED: + Result := 'Mapped'; + MEM_PRIVATE: + Result := 'Private'; + else + Result := Format('%x', [P]); + end; +end; + +function ImageIndexFromInfo(MemInfo: TMemoryInfo): Integer; +begin + with MemInfo do + if MappedFile then Result := 6 else + if RepeatedItem then Result := 21 else + Result := 19; +end; + +{ TMemoryDumpForm } + +procedure TMemoryDumpForm.FormCreate(Sender: TObject); +begin + inherited; + FModulesList := TStringList.Create; +end; + +procedure TMemoryDumpForm.FormDestroy(Sender: TObject); +begin + FModulesList.Free; + if FProcess <> 0 then CloseHandle(FProcess); +end; + +procedure TMemoryDumpForm.BuildPagesList; +var + AllocationsNode, ModulesNode, TempNode: TTreeNode; + LastAllocationBase: Pointer; + LastMappedFile: Boolean; + I, N, TotalCommit, TotalReserve: Integer; + + procedure EnumAllocations; +var + P: PChar; + MI: TMemoryBasicInformation; + Res: DWORD; + Count: Integer; +begin + FMemoryInfo := nil; + Count := 0; + P := Pointer(0); + Res := VirtualQueryEx(FProcess, P, MI, SizeOf(MI)); + if Res <> SizeOf(MI) then RaiseLastOSError; + while Res = SizeOf(MI) do + begin + if MI.AllocationBase <> nil then + begin + SetLength(FMemoryInfo, Count + 1); + FMemoryInfo[Count].MemInfo := MI; + Inc(Count); + end; + Inc(P, MI.RegionSize); + Res := VirtualQueryEx(FProcess, P, MI, SizeOf(MI)); + end; +end; + +begin + Screen.Cursor := crHourGlass; + try + PagesListView.Items.BeginUpdate; + PagesListView.Items.Count := 0; + MemoryTreeView.Items.BeginUpdate; + StatusBar.Panels.BeginUpdate; + try + EnumAllocations; + PagesListView.Items.Count := Length(FMemoryInfo); + + with MemoryTreeView.Items do + begin + Clear; + AllocationsNode := AddFirst(nil, sAllocations); + AllocationsNode.ImageIndex := 19; + ModulesNode := Add(nil, sModules); + ModulesNode.ImageIndex := 6; + LastAllocationBase := nil; + LastMappedFile := False; + for I := 0 to Length(FMemoryInfo) - 1 do + with FMemoryInfo[I] do + if LastAllocationBase <> MemInfo.AllocationBase then + begin + TempNode := AddChildObject(AllocationsNode, Format('%p', [MemInfo.AllocationBase]), Pointer(I)); + with TempNode do ImageIndex := Parent.ImageIndex; + LastAllocationBase := MemInfo.AllocationBase; + RepeatedItem := False; + N := FModulesList.IndexOfObject(LastAllocationBase); + if N <> -1 then + begin + TempNode := AddChildObject(ModulesNode, FModulesList[N], Pointer(I)); + with TempNode do ImageIndex := Parent.ImageIndex; + MappedFile := True; + end else + MappedFile := False; + LastMappedFile := MappedFile; + end else + begin + RepeatedItem := True; + MappedFile := LastMappedFile; + end; + end; + AllocationsNode.AlphaSort; + ModulesNode.AlphaSort; + + TotalCommit := 0; + TotalReserve := 0; + for I := 0 to Length(FMemoryInfo) - 1 do with FMemoryInfo[I].MemInfo do + case State of + MEM_COMMIT: Inc(TotalCommit, RegionSize); + MEM_RESERVE: Inc(TotalReserve, RegionSize); + end; + with StatusBar do + begin + Panels[0].Text := Format(sCount, [Length(FMemoryInfo)]); + Panels[1].Text := Format(sCommited, [IntToExtended(TotalCommit)]); + Panels[2].Text := Format(sReserved, [IntToExtended(TotalReserve)]); + end; + + ListViewFocusFirstItem(PagesListView); + finally + PagesListView.Items.EndUpdate; + MemoryTreeView.Items.EndUpdate; + StatusBar.Panels.EndUpdate; + end; + finally + Screen.Cursor := crDefault; + end; +end; + +procedure TMemoryDumpForm.BuildModulesList; +var + SnapProcHandle: THandle; + ModuleEntry: TModuleEntry32; + Next: Boolean; +begin + FModulesList.Clear; + SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, FProcessID); + if SnapProcHandle <> THandle(-1) then + begin + ModuleEntry.dwSize := SizeOf(ModuleEntry); + Next := Module32First(SnapProcHandle, ModuleEntry); + while Next do + begin + FModulesList.AddObject(ModuleEntry.szModule, Pointer(ModuleEntry.modBaseAddr)); + Next := Module32Next(SnapProcHandle, ModuleEntry); + end; + CloseHandle(SnapProcHandle); + end; +end; + +procedure TMemoryDumpForm.SetParams(ProcessID: DWORD; const FileName: TFileName); +begin + FProcessID := ProcessID; + FFileName := FileName; + Caption := Format(sCaption, [FFileName]); + Refresh1.Execute; +end; + +procedure TMemoryDumpForm.UpdateDumpList; +begin + with DumpListView do + begin + if ViewAsText1.Checked then + begin + FDumpBytesPerLine := 64; + Columns[1].Caption := 'Ansi text'; + Columns[2].Caption := 'Unicode text'; + end else + begin + FDumpBytesPerLine := 16; + Columns[1].Caption := 'Data'; + Columns[2].Caption := 'ASCII'; + end; + Items.Count := Integer(PagesListView.Selected.SubItems.Objects[3]) div FDumpBytesPerLine; + Invalidate; + end; +end; + +procedure TMemoryDumpForm.Refresh1Execute(Sender: TObject); +begin + if FProcess <> 0 then CloseHandle(FProcess); + FProcess := OpenProcess(PROCESS_ALL_ACCESS, False, FProcessID); + if FProcess = 0 then + begin + Close; + RaiseLastOSError; + end; + BuildModulesList; + BuildPagesList; +end; + +procedure TMemoryDumpForm.DumpListViewData(Sender: TObject; Item: TListItem); +var + Address: Pointer; + LineData: packed array[0..63] of Byte; + NR: DWORD; + Hex, Ascii, S: string; + I: Integer; + W: PWideChar; +begin + with TListView(Sender) do + if PagesListView.Selected <> nil then + begin + Address := Pointer(DWORD(FMemoryInfo[PagesListView.Selected.Index].MemInfo.BaseAddress) + DWORD(Item.Index * FDumpBytesPerLine)); + SetLength(Hex, 3 * SizeOf(LineData)); + SetLength(Ascii, 3 * SizeOf(LineData)); + Hex := ''; + Ascii := ''; + if ReadProcessMemory(FProcess, Address, @LineData, SizeOf(LineData), NR) and (NR = SizeOf(LineData)) then + begin + if ViewAsText1.Checked then + begin + for I := 0 to FDumpBytesPerLine - 1 do + begin + if LineData[I] >= 32 then + Hex := Hex + Chr(LineData[I]) + else + Hex := Hex + '.'; + end; + W := PWideChar(@LineData); + for I := 0 to FDumpBytesPerLine div 2 - 1 do + begin + SetLength(S, 1); + {$IFDEF SUPPORTS_UNICODE} + S := WideString(W^); + {$ELSE ~SUPPORTS_UNICODE} + WideCharToMultiByte(CP_ACP, 0, W, 1, PAnsiChar(S), 1, nil, nil); + {$ENDIF ~SUPPORTS_UNICODE} + S := PChar(S); + if Length(S) = 0 then S := '.'; + Ascii := Ascii + S; + Inc(W); + end; + end else + begin + for I := 0 to FDumpBytesPerLine - 1 do + begin + Hex := Hex + Format('%.2x ', [LineData[I]]); + if LineData[I] >= 32 then + Ascii := Ascii + Chr(LineData[I]) + else + Ascii := Ascii + '.'; + end; + end; + end; + Item.Caption := Format('%p', [Address]); + Item.SubItems.Add(Hex); + Item.SubItems.Add(Ascii); + end; +end; + +procedure TMemoryDumpForm.PagesListViewSelectItem(Sender: TObject; + Item: TListItem; Selected: Boolean); +begin + if Selected then + begin + if (DWORD(Item.SubItems.Objects[0]) = PAGE_NOACCESS) or + (DWORD(Item.SubItems.Objects[2]) = 0) then + begin + DumpListView.Items.Count := 0; + DumpListView.Invalidate; + end else + UpdateDumpList; + end; +end; + +procedure TMemoryDumpForm.PagesListViewData(Sender: TObject; Item: TListItem); +var + I: Integer; +begin + with Item, FMemoryInfo[Item.Index].MemInfo do + begin + Caption := Format('%p', [BaseAddress]); + SubItems.AddObject(AllocationProtectStr(Protect), Pointer(Protect)); + SubItems.AddObject(Format('%p', [AllocationBase]), AllocationBase); + SubItems.AddObject(AllocationProtectStr(AllocationProtect), Pointer(AllocationProtect)); + SubItems.AddObject(Format('%.0n', [IntToExtended(RegionSize)]), Pointer(RegionSize)); + SubItems.AddObject(StateStr(State), Pointer(State)); + I := FModulesList.IndexOfObject(AllocationBase); + if I <> - 1 then SubItems.Add(FModulesList[I]) else SubItems.Add(''); + SubItems.AddObject(TypeStr(Type_9), Pointer(Type_9)); + end; + Item.ImageIndex := ImageIndexFromInfo(FMemoryInfo[Item.Index]); +end; + +procedure TMemoryDumpForm.PagesListViewCustomDrawItem(Sender: TCustomListView; + Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); +begin + if DWORD(Item.SubItems.Objects[0]) = PAGE_NOACCESS then + Sender.Canvas.Font.Color := clBtnFace; +end; + +procedure TMemoryDumpForm.MemoryTreeViewChange(Sender: TObject; Node: TTreeNode); +begin + if Node.Level = 1 then + with PagesListView do + begin + while Assigned(Selected) do Selected.Selected := False; + ItemFocused := PagesListView.Items[Integer(Node.Data)]; + ItemFocused.Selected := True; + ItemFocused.MakeVisible(False); + end; +end; + +procedure TMemoryDumpForm.MemoryTreeViewGetSelectedIndex(Sender: TObject; + Node: TTreeNode); +begin + Node.SelectedIndex := Node.ImageIndex; +end; + +procedure TMemoryDumpForm.ViewAsText1Execute(Sender: TObject); +begin + with ViewAsText1 do + Checked := not Checked; + UpdateDumpList; +end; + +procedure TMemoryDumpForm.SaveData1Update(Sender: TObject); +begin + TAction(Sender).Enabled := (ActiveControl = PagesListView) and + (PagesListView.Selected <> nil) and + (DWORD(PagesListView.Selected.SubItems.Objects[0]) <> PAGE_NOACCESS); +end; + +procedure TMemoryDumpForm.SaveData1Execute(Sender: TObject); +var + MS: TMemoryStream; + NR: DWORD; +begin + with SaveDataDialog, FMemoryInfo[PagesListView.Selected.Index].MemInfo do + begin + FileName := ''; + if Execute then + begin + MS := TMemoryStream.Create; + try + MS.Size := RegionSize; + if ReadProcessMemory(FProcess, BaseAddress, MS.Memory, RegionSize, NR) and + (NR = RegionSize) then + MS.SaveToFile(FileName) + else + RaiseLastOSError; + finally + MS.Free; + end; + end; + end; +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/ModulesDump.dfm b/official/1.104/examples/windows/delphitools/toolhelpview/ModulesDump.dfm new file mode 100644 index 0000000..71750ff --- /dev/null +++ b/official/1.104/examples/windows/delphitools/toolhelpview/ModulesDump.dfm @@ -0,0 +1,180 @@ +inherited ModulesDumpForm: TModulesDumpForm + Left = 235 + Top = 159 + Width = 469 + Height = 336 + ActiveControl = ModulesListView + Caption = 'Modules list' + OldCreateOrder = True + PixelsPerInch = 96 + TextHeight = 13 + inherited CoolBar: TCoolBar + Width = 461 + Bands = < + item + Control = ToolBar + ImageIndex = -1 + MinHeight = 22 + Width = 457 + end> + inherited ToolBar: TToolBar + Width = 444 + object ToolButton1: TToolButton + Left = 0 + Top = 0 + Action = Refresh1 + end + object ToolButton2: TToolButton + Left = 23 + Top = 0 + Width = 8 + Caption = 'ToolButton2' + ImageIndex = 3 + Style = tbsSeparator + end + object ToolButton3: TToolButton + Left = 31 + Top = 0 + Action = Copy1 + end + object ToolButton4: TToolButton + Left = 54 + Top = 0 + Action = SaveToFile1 + end + object ToolButton10: TToolButton + Left = 77 + Top = 0 + Action = Find1 + end + object ToolButton5: TToolButton + Left = 100 + Top = 0 + Width = 8 + Caption = 'ToolButton5' + ImageIndex = 4 + Style = tbsSeparator + end + object ToolButton6: TToolButton + Left = 108 + Top = 0 + Action = SelectAll1 + end + object ToolButton7: TToolButton + Left = 131 + Top = 0 + Width = 8 + Caption = 'ToolButton7' + ImageIndex = 18 + Style = tbsSeparator + end + object ToolButton8: TToolButton + Left = 139 + Top = 0 + Action = FileProp1 + end + object ToolButton9: TToolButton + Left = 162 + Top = 0 + Action = DumpPe1 + end + end + end + object StatusBar: TStatusBar [1] + Left = 0 + Top = 290 + Width = 461 + Height = 19 + Panels = < + item + Width = 90 + end + item + Width = 50 + end> + SimplePanel = False + end + object ModulesListView: TListView [2] + Left = 0 + Top = 26 + Width = 461 + Height = 264 + Align = alClient + Columns = < + item + Caption = 'Module' + Width = 80 + end + item + Alignment = taRightJustify + Caption = 'Usage' + end + item + Alignment = taRightJustify + Caption = 'Relocated' + Width = 70 + end + item + Caption = 'Filename' + Width = 300 + end> + HideSelection = False + MultiSelect = True + ReadOnly = True + RowSelect = True + PopupMenu = PopupMenu + SmallImages = GlobalModule.ToolbarImagesList + TabOrder = 2 + ViewStyle = vsReport + OnColumnClick = ModulesListViewColumnClick + OnCompare = ModulesListViewCompare + OnInfoTip = ModulesListViewInfoTip + end + inherited ActionList: TActionList + inherited Refresh1: TAction + OnExecute = Refresh1Execute + end + object FileProp1: TAction + Caption = 'Properties' + Hint = 'File properties' + ImageIndex = 4 + ShortCut = 32781 + OnExecute = FileProp1Execute + OnUpdate = FileProp1Update + end + object DumpPe1: TAction + Caption = 'Dump PE' + Hint = 'Dump PE' + ImageIndex = 22 + ShortCut = 16452 + OnExecute = DumpPe1Execute + OnUpdate = DumpPe1Update + end + end + inherited PopupMenu: TPopupMenu + object Refresh2: TMenuItem + Action = Refresh1 + end + object N1: TMenuItem + Caption = '-' + end + object Copy2: TMenuItem + Action = Copy1 + end + object Selectall2: TMenuItem + Action = SaveToFile1 + end + object N2: TMenuItem + Caption = '-' + end + object Selectall3: TMenuItem + Action = SelectAll1 + end + object DumpPE2: TMenuItem + Action = DumpPe1 + end + object Properties1: TMenuItem + Action = FileProp1 + end + end +end diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/ModulesDump.pas b/official/1.104/examples/windows/delphitools/toolhelpview/ModulesDump.pas new file mode 100644 index 0000000..1cda690 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/toolhelpview/ModulesDump.pas @@ -0,0 +1,245 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is ModulesDump.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2006-05-30 00:02:45 +0200 (mar., 30 mai 2006) $ } +{ } +{**************************************************************************************************} + +unit ModulesDump; + +{$I JCL.INC} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ViewTemplate, Menus, ActnList, ComCtrls, ToolWin; + +type + TModulesDumpForm = class(TViewForm) + StatusBar: TStatusBar; + ModulesListView: TListView; + ToolButton1: TToolButton; + ToolButton2: TToolButton; + ToolButton3: TToolButton; + ToolButton4: TToolButton; + ToolButton5: TToolButton; + ToolButton6: TToolButton; + Refresh2: TMenuItem; + N1: TMenuItem; + Copy2: TMenuItem; + Selectall2: TMenuItem; + N2: TMenuItem; + Selectall3: TMenuItem; + FileProp1: TAction; + ToolButton7: TToolButton; + ToolButton8: TToolButton; + Properties1: TMenuItem; + DumpPe1: TAction; + ToolButton9: TToolButton; + DumpPE2: TMenuItem; + ToolButton10: TToolButton; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormShow(Sender: TObject); + procedure Refresh1Execute(Sender: TObject); + procedure ModulesListViewColumnClick(Sender: TObject; + Column: TListColumn); + procedure ModulesListViewCompare(Sender: TObject; Item1, + Item2: TListItem; Data: Integer; var Compare: Integer); + procedure FileProp1Update(Sender: TObject); + procedure FileProp1Execute(Sender: TObject); + procedure ModulesListViewInfoTip(Sender: TObject; Item: TListItem; + var InfoTip: String); + procedure DumpPe1Execute(Sender: TObject); + procedure DumpPe1Update(Sender: TObject); + private + function SelectedFileName: TFileName; + public + procedure BuildContent; override; + procedure BuildModulesList; + end; + +var + ModulesDumpForm: TModulesDumpForm; + +implementation + +{$R *.DFM} + +uses + ToolsUtils, TLHelp32, JclShell, Global; + +resourcestring + sModulesCount = 'Modules: %d'; + +procedure TModulesDumpForm.BuildContent; +begin + BuildModulesList; +end; + +procedure TModulesDumpForm.BuildModulesList; +type + TProcessData = packed record + UsageCnt: Word; + RelocateCnt: Word; + end; +var + ML: TStringList; + SnapProcHandle, SnapModuleHandle: THandle; + ProcessEntry: TProcessEntry32; + ModuleEntry: TModuleEntry32; + ProcessNext, ModuleNext: Boolean; + I: Integer; + PD: TProcessData; +begin + ML := TStringList.Create; + Screen.Cursor := crHourGlass; + try + ML.Sorted := True; + ML.Duplicates := dupIgnore; + + SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if SnapProcHandle <> THandle(-1) then + begin + ProcessEntry.dwSize := Sizeof(ProcessEntry); + ProcessNext := Process32First(SnapProcHandle, ProcessEntry); + while ProcessNext do + begin + SnapModuleHandle := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessEntry.th32ProcessID); + if SnapModuleHandle <> THandle(-1) then + begin + ModuleEntry.dwSize := Sizeof(ModuleEntry); + ModuleNext := Module32First(SnapModuleHandle, ModuleEntry); + while ModuleNext do + begin + I := ML.Add(ModuleEntry.szExePath); + PD := TProcessData(ML.Objects[I]); + Inc(PD.UsageCnt); + if GetImageBase(ModuleEntry.szExePath) <> DWORD(ModuleEntry.modBaseAddr) then + Inc(PD.RelocateCnt); + ML.Objects[I] := Pointer(PD); + ModuleNext := Module32Next(SnapModuleHandle, ModuleEntry); + end; + CloseHandle(SnapModuleHandle); + end; + ProcessNext := Process32Next(SnapProcHandle, ProcessEntry); + end; + CloseHandle(SnapProcHandle); + end; + + with ModulesListView do + begin + Items.BeginUpdate; + Items.Clear; + for I := 0 to ML.Count - 1 do + with Items.Add do + begin + Caption := AnsiLowerCase(ExtractFileName(ML[I])); + PD := TProcessData(ML.Objects[I]); + if PD.RelocateCnt = 0 then + ImageIndex := 20 + else + ImageIndex := 19; + with SubItems do + begin + Add(IntToStr(PD.UsageCnt)); + if PD.RelocateCnt = 0 then Add('-') else Add(IntToStr(PD.RelocateCnt)); + Add(ML[I]); + end; + end; + AlphaSort; + Items.EndUpdate; + end; + + with StatusBar do + begin + Panels.BeginUpdate; + Panels[0].Text := Format(sModulesCount, [ML.Count]); + Panels.EndUpdate; + end; + + finally + ML.Free; + Screen.Cursor := crDefault; + end; +end; + +procedure TModulesDumpForm.FormClose(Sender: TObject; var Action: TCloseAction); +begin + inherited; + ModulesDumpForm := nil; +end; + +procedure TModulesDumpForm.FormShow(Sender: TObject); +begin + inherited; + PostBuildContentMessage; +end; + +function TModulesDumpForm.SelectedFileName: TFileName; +begin + Result := ModulesListView.Selected.SubItems[2]; +end; + +procedure TModulesDumpForm.Refresh1Execute(Sender: TObject); +begin + BuildModulesList; +end; + +procedure TModulesDumpForm.ModulesListViewColumnClick(Sender: TObject; + Column: TListColumn); +begin + LVColumnClick(Column); +end; + +procedure TModulesDumpForm.ModulesListViewCompare(Sender: TObject; Item1, + Item2: TListItem; Data: Integer; var Compare: Integer); +begin + LVCompare(ModulesListView, Item1, Item2, Compare); +end; + +procedure TModulesDumpForm.FileProp1Update(Sender: TObject); +begin + FileProp1.Enabled := Assigned(ModulesListView.Selected); +end; + +procedure TModulesDumpForm.FileProp1Execute(Sender: TObject); +begin + DisplayPropDialog(Application.Handle, SelectedFileName); +end; + +procedure TModulesDumpForm.ModulesListViewInfoTip(Sender: TObject; + Item: TListItem; var InfoTip: String); +begin + InfoTip := InfoTipVersionString(Item.SubItems[2]); +end; + +procedure TModulesDumpForm.DumpPe1Execute(Sender: TObject); +begin + GlobalModule.ViewPE(ModulesListView.Selected.SubItems[2]); +end; + +procedure TModulesDumpForm.DumpPe1Update(Sender: TObject); +begin + DumpPe1.Enabled := GlobalModule.PeViewerRegistred and Assigned(ModulesListView.Selected) +end; + +end. diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/ToolHelpViewer.dof b/official/1.104/examples/windows/delphitools/toolhelpview/ToolHelpViewer.dof new file mode 100644 index 0000000..c2f51c3 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/toolhelpview/ToolHelpViewer.dof @@ -0,0 +1,134 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=0 +UnsafeCode=0 +UnsafeCast=0 +[Linker] +MapFile=0 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir=..\..\..\..\bin +UnitOutputDir= +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath=..\..\..\..\source\include;..\..\..\..\source\common;..\..\..\..\source\windows;..\..\..\..\source\vcl +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir= +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=0 +MinorVer=5 +Release=4 +Build=65 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1033 +CodePage=1252 +[Version Info Keys] +CompanyName=Petr Vones +FileDescription=ToolHelp Viewer for Win95/98/2000 +FileVersion=0.5.4.65 +InternalName=TOOLHELPVIEWER +LegalCopyright=(c) 2002 Petr Vones +LegalTrademarks= +OriginalFilename=TOOLHELPVIEWER.EXE +ProductName=ToolHelp Viewer +ProductVersion=0.5.4 diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/ToolHelpViewer.dpr b/official/1.104/examples/windows/delphitools/toolhelpview/ToolHelpViewer.dpr new file mode 100644 index 0000000..d220e93 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/toolhelpview/ToolHelpViewer.dpr @@ -0,0 +1,35 @@ +program ToolHelpViewer; + +{$I jcl.inc} + +uses + Forms, + SysUtils, + JclAppInst, + Main in 'Main.pas' {MainForm}, + ChangePriority in 'ChangePriority.pas' {ChangePriorityDlg}, + HeapDump in 'HeapDump.pas' {HeapDumpForm}, + MemoryDump in 'MemoryDump.pas' {MemoryDumpForm}, + Global in 'Global.pas' {GlobalModule: TDataModule}, + ViewTemplate in 'ViewTemplate.pas' {ViewForm}, + ModulesDump in 'ModulesDump.pas' {ModulesDumpForm}, + ToolsUtils in '..\Common\ToolsUtils.pas', + About in '..\Common\About.pas' {AboutBox}, + FindDlg in '..\Common\FindDlg.pas' {FindForm}, + ExceptDlg in '..\..\..\..\experts\debug\dialog\ExceptDlg.pas' {ExceptionDialog}; + +{$R *.RES} +{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + try + JclAppInstances.CheckSingleInstance; + Application.Initialize; + Application.Title := 'ToolHelp Viewer'; + Application.CreateForm(TGlobalModule, GlobalModule); + Application.CreateForm(TMainForm, MainForm); + Application.Run; + except // fix for Delphi 5's RTL bug + SysUtils.ShowException(ExceptObject, ExceptAddr); + end; +end. diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/ToolHelpViewer.res b/official/1.104/examples/windows/delphitools/toolhelpview/ToolHelpViewer.res new file mode 100644 index 0000000000000000000000000000000000000000..12a2ffd1fb9eacbc0d88cdb679d1c64aaf8d0168 GIT binary patch literal 1720 zcmd^;O;1x%5Qg8{A|VoKB6}O-0u8ARDMmH|;UhMwK!kuhLJ*;`v<=i4cl`nWqhiuM z_eZ#J;ZBz>jP;p0_j)fv)Rh}gJNL}@yffz(jNwp2sKWwqkL#kT^}j zl%NGDr=ac;bM@*;{MGA)jV~bU?6N8hK+B)Wy;GdidSrjqJF>cDp!n0{j=!Y z6$4X@pPylLh09SYM`kD5?dFxrK^x0va<9LVL+#X`;0y8prOXjAMW0`o28w2waNg250y)D7}2;d88x_V9m8*Lz3@USxya z@|Hl|#(JPr*Ee;CxTMaq>-W8W2mglqn&TE+8!S)oXi~xQG~nMrmetVNzT?Q}G^+>T zd&GAJl=c(cSf@=c1t(N*QVlY5O*_E_|y5=ySRQS{?`*o h=PxaL)ot%9L7m=0>8{`4Fo70*H}TBgm$Aaf!Vgnm&F}yK literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/ViewTemplate.dfm b/official/1.104/examples/windows/delphitools/toolhelpview/ViewTemplate.dfm new file mode 100644 index 0000000..9496ff8 --- /dev/null +++ b/official/1.104/examples/windows/delphitools/toolhelpview/ViewTemplate.dfm @@ -0,0 +1,109 @@ +object ViewForm: TViewForm + Left = 288 + Top = 168 + ClientWidth = 340 + ClientHeight = 284 + BorderStyle = bsSizeToolWin + Caption = 'ViewForm' + Color = clBtnFace + Constraints.MinHeight = 200 + Constraints.MinWidth = 300 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poDefaultPosOnly + ShowHint = True + OnClose = FormClose + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object CoolBar: TCoolBar + Left = 0 + Top = 0 + Width = 340 + Height = 26 + AutoSize = True + Bands = < + item + Control = ToolBar + ImageIndex = -1 + MinHeight = 22 + Width = 336 + end> + PopupMenu = ToolBarPopupMenu + object ToolBar: TToolBar + Left = 9 + Top = 0 + Width = 323 + Height = 22 + AutoSize = True + Caption = 'ToolBar' + EdgeBorders = [] + Flat = True + Images = GlobalModule.ToolbarImagesList + TabOrder = 0 + end + end + object ActionList: TActionList + Images = GlobalModule.ToolbarImagesList + Left = 8 + Top = 224 + object TextLabels1: TAction + Caption = 'Text labels' + OnExecute = TextLabels1Execute + end + object Copy1: TAction + Caption = 'Copy' + Hint = 'Copy to clipboard' + ImageIndex = 9 + ShortCut = 16451 + OnExecute = Copy1Execute + OnUpdate = Copy1Update + end + object SaveToFile1: TAction + Caption = 'Save' + Hint = 'Save to text file' + ImageIndex = 3 + ShortCut = 16467 + OnExecute = SaveToFile1Execute + OnUpdate = Copy1Update + end + object Refresh1: TAction + Caption = 'Refresh' + Hint = 'Refresh the list' + ImageIndex = 2 + ShortCut = 116 + end + object SelectAll1: TAction + Caption = 'Select all' + Hint = 'Select all listview items' + ImageIndex = 17 + ShortCut = 16449 + OnExecute = SelectAll1Execute + OnUpdate = SelectAll1Update + end + object Find1: TAction + Caption = 'Find text' + Hint = 'Find text' + ImageIndex = 7 + ShortCut = 16454 + OnExecute = Find1Execute + OnUpdate = Find1Update + end + end + object PopupMenu: TPopupMenu + Images = GlobalModule.ToolbarImagesList + Left = 40 + Top = 224 + end + object ToolBarPopupMenu: TPopupMenu + Left = 72 + Top = 224 + object Textlabels2: TMenuItem + Action = TextLabels1 + end + end +end diff --git a/official/1.104/examples/windows/delphitools/toolhelpview/ViewTemplate.pas b/official/1.104/examples/windows/delphitools/toolhelpview/ViewTemplate.pas new file mode 100644 index 0000000..d9a10df --- /dev/null +++ b/official/1.104/examples/windows/delphitools/toolhelpview/ViewTemplate.pas @@ -0,0 +1,155 @@ +{**************************************************************************************************} +{ } +{ Project JEDI Code Library (JCL) - Delphi Tools } +{ } +{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } +{ you may not use this file except in compliance with the License. You may obtain a copy of the } +{ License at http://www.mozilla.org/MPL/ } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } +{ ANY KIND, either express or implied. See the License for the specific language governing rights } +{ and limitations under the License. } +{ } +{ The Original Code is ViewTemplate.pas. } +{ } +{ The Initial Developer of the Original Code is Petr Vones. Portions created by Petr Vones are } +{ Copyright (C) of Petr Vones. All Rights Reserved. } +{ } +{ Contributor(s): } +{ } +{**************************************************************************************************} +{ } +{ Last modified: $Date: 2006-05-30 00:02:45 +0200 (mar., 30 mai 2006) $ } +{ } +{**************************************************************************************************} + +unit ViewTemplate; + +{$I JCL.INC} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ToolWin, ComCtrls, ActnList, Menus; + +const + UM_BUILD = WM_USER + $100; + +type + TViewForm = class(TForm) + CoolBar: TCoolBar; + ToolBar: TToolBar; + ActionList: TActionList; + PopupMenu: TPopupMenu; + TextLabels1: TAction; + ToolBarPopupMenu: TPopupMenu; + Textlabels2: TMenuItem; + Copy1: TAction; + SaveToFile1: TAction; + Refresh1: TAction; + SelectAll1: TAction; + Find1: TAction; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormShow(Sender: TObject); + procedure TextLabels1Execute(Sender: TObject); + procedure SelectAll1Update(Sender: TObject); + procedure SelectAll1Execute(Sender: TObject); + procedure Copy1Update(Sender: TObject); + procedure Copy1Execute(Sender: TObject); + procedure SaveToFile1Execute(Sender: TObject); + procedure Find1Update(Sender: TObject); + procedure Find1Execute(Sender: TObject); + private + procedure UpdateTextLabels; + procedure UMBuild(var Msg: TMessage); message UM_BUILD; + public + procedure BuildContent; dynamic; abstract; + procedure PostBuildContentMessage; + end; + +var + ViewForm: TViewForm; + +implementation + +uses Main, Global, ToolsUtils, About, FindDlg; + +{$R *.DFM} + +procedure TViewForm.FormClose(Sender: TObject; var Action: TCloseAction); +begin + MainForm.DeleteFromViewsMenu(Self); + Action := caFree; +end; + +procedure TViewForm.FormShow(Sender: TObject); +begin + MainForm.AddToViewsMenu(Self, Caption); +end; + +procedure TViewForm.TextLabels1Execute(Sender: TObject); +begin + with TextLabels1 do Checked := not Checked; + UpdateTextLabels; +end; + +procedure TViewForm.UpdateTextLabels; +begin + ToolBar.ShowCaptions := TextLabels1.Checked; + if not ToolBar.ShowCaptions then + begin + ToolBar.ButtonHeight := 0; + ToolBar.ButtonWidth := 0; + end; +end; + +procedure TViewForm.Copy1Update(Sender: TObject); +begin + TAction(Sender).Enabled := ActiveControl is TListView; +end; + +procedure TViewForm.SelectAll1Update(Sender: TObject); +begin + TAction(Sender).Enabled := + (ActiveControl is TListView) and TListView(ActiveControl).MultiSelect; +end; + +procedure TViewForm.SelectAll1Execute(Sender: TObject); +begin + ListViewSelectAll(ActiveControl as TListView); +end; + +procedure TViewForm.Copy1Execute(Sender: TObject); +begin + GlobalModule.ListViewToClipboard(ActiveControl as TListView); +end; + +procedure TViewForm.SaveToFile1Execute(Sender: TObject); +begin + GlobalModule.ListViewToFile(ActiveControl as TListView, Caption); +end; + +procedure TViewForm.UMBuild(var Msg: TMessage); +begin + Update; + BuildContent; +end; + +procedure TViewForm.PostBuildContentMessage; +begin + PostMessage(Handle, UM_BUILD, 0, 0); +end; + +procedure TViewForm.Find1Update(Sender: TObject); +begin + TAction(Sender).Enabled := + (ActiveControl is TListView) and not TListView(ActiveControl).HideSelection; +end; + +procedure TViewForm.Find1Execute(Sender: TObject); +begin + ShowFindDialog(ActiveControl as TListView); +end; + +end. diff --git a/official/1.104/examples/windows/edisdk/Clean.bat b/official/1.104/examples/windows/edisdk/Clean.bat new file mode 100644 index 0000000..2bca898 --- /dev/null +++ b/official/1.104/examples/windows/edisdk/Clean.bat @@ -0,0 +1,18 @@ +@echo off +if exist *.~* del *.~* +if exist *.dcu del *.dcu +if exist *.dpl del *.dpl +if exist *.bpl del *.bpl +if exist *.bpi del *.bpi +if exist *.lsp del *.lsp +if exist *.dcp del *.dcp +if exist *.dpc del *.dpc +if exist *.bak del *.bak +if exist *.obj del *.obj +if exist *.hpp del *.hpp +if exist *.lib del *.lib +if exist *.exe del *.exe +if exist *.dsk del *.dsk + + + diff --git a/official/1.104/examples/windows/edisdk/EDICOMExample.dof b/official/1.104/examples/windows/edisdk/EDICOMExample.dof new file mode 100644 index 0000000..abe45c2 --- /dev/null +++ b/official/1.104/examples/windows/edisdk/EDICOMExample.dof @@ -0,0 +1,2 @@ +[Directories] +OutputDir=..\..\..\bin diff --git a/official/1.104/examples/windows/edisdk/EDICOMExample.dpr b/official/1.104/examples/windows/edisdk/EDICOMExample.dpr new file mode 100644 index 0000000..0ba1c24 --- /dev/null +++ b/official/1.104/examples/windows/edisdk/EDICOMExample.dpr @@ -0,0 +1,16 @@ +program EDICOMExample; + +{$I jcl.inc} + +uses + Forms, + EDICOMExampleMain in 'EDICOMExampleMain.pas' {Form1}; + +{$R *.RES} +{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/official/1.104/examples/windows/edisdk/EDICOMExample.res b/official/1.104/examples/windows/edisdk/EDICOMExample.res new file mode 100644 index 0000000000000000000000000000000000000000..55f874204136d6cde31b105890029f4503c878e3 GIT binary patch literal 876 zcmaJ=Jxc>Y5Pj=~TWm~%7FH&uWyHcFg^CccPz(RS*=&<05J-d+UUf~tKNE-t+g#=E zNNH(l5wgCWy~_uF40${AX5Q>hmRkU56V3%N+_8_nsvc3Jq}FKc*DBE|gEnzRD3odT z{B9}0AJQ~9t_+D3MNzQehw#n?$2H95lfjzJMiq+xpGS}RU|YW7TGAUn=>TJR9vbuv zQKv^fLP$_BH=di&s%NpygeRq7WOL!AU~H`oJdv~Xnj7J9-%dk4aAV5-jBGG4rXS8T z#&1Awg!ePy@tV(f_@tlj=qJ`@+x_IZ=P3K1ZEocskt@zKp3bKiEbG`L>hS!nd7PP< z*YiLohG%h>ba`1aP@aA!Bu=2+E0lZZSF-?KK7q>;Epm@~@dtdZ0(&$OeF0BP;A;i7bZNA5i@Ni6 j1fWAWcYr%w;}-YC4Ibz#+kO}RH7K;(HF*{O6)AiJ<8sA5 literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/edisdk/EDICOMExampleMain.dfm b/official/1.104/examples/windows/edisdk/EDICOMExampleMain.dfm new file mode 100644 index 0000000..ac5e7df --- /dev/null +++ b/official/1.104/examples/windows/edisdk/EDICOMExampleMain.dfm @@ -0,0 +1,50 @@ +object Form1: TForm1 + Left = 192 + Top = 107 + ClientWidth = 688 + ClientHeight = 454 + Caption = 'Form1' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object Button1: TButton + Left = 32 + Top = 4 + Width = 75 + Height = 25 + Caption = 'Button1' + TabOrder = 0 + OnClick = Button1Click + end + object Memo1: TMemo + Left = 0 + Top = 36 + Width = 688 + Height = 417 + Anchors = [akLeft, akTop, akRight, akBottom] + Lines.Strings = ( + 'Memo1') + TabOrder = 1 + end + object Button2: TButton + Left = 120 + Top = 4 + Width = 75 + Height = 25 + Caption = 'Button2' + TabOrder = 2 + OnClick = Button2Click + end + object F: TEDICOMFile + AutoConnect = False + ConnectKind = ckRunningOrNew + Left = 64 + Top = 32 + end +end diff --git a/official/1.104/examples/windows/edisdk/EDICOMExampleMain.pas b/official/1.104/examples/windows/edisdk/EDICOMExampleMain.pas new file mode 100644 index 0000000..48cfdec --- /dev/null +++ b/official/1.104/examples/windows/edisdk/EDICOMExampleMain.pas @@ -0,0 +1,157 @@ +unit EDICOMExampleMain; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, OleServer, EDISDK_TLB; + +type + TForm1 = class(TForm) + F: TEDICOMFile; + Button1: TButton; + Memo1: TMemo; + Button2: TButton; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.Button1Click(Sender: TObject); +var + I: Integer; +begin + F.Options := 0; + F.Options := F.Options or foVariableDelimiterDetection; + F.Options := F.Options or foUseAltDelimiterDetection; + F.Options := F.Options or foRemoveCrLf; + F.Options := F.Options or foRemoveCr; + F.Options := F.Options or foRemoveLf; + F.Options := F.Options or foIgnoreGarbageAtEndOfFile; + F.LoadFromFile(ExtractFileDir(Application.ExeName) + '\sample.edi'); + Memo1.Lines.Add( F.Data ); + F.Disassemble; + Memo1.Lines.Add(F.Interchange[0].SegmentISA.SegmentId); + Memo1.Lines.Add(F.Interchange[0].FunctionalGroup[0].SegmentGS.SegmentId); + Memo1.Lines.Add(F.Interchange[0].FunctionalGroup[0].TransactionSet[0].SegmentST.SegmentId); + for I := 0 to F.Interchange[0].FunctionalGroup[0].TransactionSet[0].SegmentCount - 1 do + begin + F.Interchange[0].FunctionalGroup[0].TransactionSet[0].Segment[I].Assemble; + Memo1.Lines.Add( F.Interchange[0].FunctionalGroup[0].TransactionSet[0].Segment[I].Data ); + end; + Memo1.Lines.Add(F.Interchange[0].FunctionalGroup[0].TransactionSet[0].Segment[0].Data); + Memo1.Lines.Add(F.Interchange[0].FunctionalGroup[0].TransactionSet[0].SegmentSE.SegmentId); + Memo1.Lines.Add(F.Interchange[0].FunctionalGroup[0].SegmentGE.SegmentId); + Memo1.Lines.Add(F.Interchange[0].SegmentIEA.SegmentId); +end; + +procedure TForm1.Button2Click(Sender: TObject); +var + C: IEDICOMFile; + I, F, T, S: Integer; +begin + Memo1.Lines.Clear; + + C := CoEDICOMFile.Create; + I := C.AddInterchange; + C.Interchange[I].SetDelimiters('~' + #13#10, '*', '>'); + with C.Interchange[I].SegmentISA do + begin + SegmentId := 'ISA'; + DeleteElements; + AddElements(17); + Element[0].Data := 'data'; + Element[1].Data := 'data'; + Element[2].Data := 'data'; + Element[3].Data := 'data'; + Element[4].Data := 'data'; + Element[5].Data := 'data'; + Element[6].Data := 'data'; + Element[7].Data := 'data'; + Element[8].Data := 'data'; + Element[9].Data := 'data'; + Element[10].Data := 'data'; + Element[11].Data := 'data'; + Element[12].Data := 'data'; + Element[13].Data := 'data'; + Element[14].Data := 'data'; + Element[15].Data := 'data'; + Element[16].Data := C.Interchange[I].Delimiters.SS; + end; + + F := C.Interchange[I].AddFunctionalGroup; + with C.Interchange[I].FunctionalGroup[F].SegmentGS do + begin + SegmentId := 'GS'; + DeleteElements; + AddElements(8); + Element[0].Data := 'data'; + Element[1].Data := 'data'; + Element[2].Data := 'data'; + Element[3].Data := 'data'; + Element[4].Data := 'data'; + Element[5].Data := 'data'; + Element[6].Data := 'data'; + Element[7].Data := 'data'; + end; + + T := C.Interchange[I].FunctionalGroup[F].AddTransactionSet; + with C.Interchange[I].FunctionalGroup[F].TransactionSet[T].SegmentST do + begin + SegmentId := 'ST'; + DeleteElements; + AddElements(2); + Element[0].Data := 'data'; + Element[1].Data := 'data'; + end; + + S := C.Interchange[I].FunctionalGroup[F].TransactionSet[T].AddSegment; + with C.Interchange[I].FunctionalGroup[F].TransactionSet[T].Segment[S] do + begin + SegmentId := 'TST'; + AddElements(2); + Element[0].Data := 'data 1'; + Element[1].Data := 'data 2'; + end; + + with C.Interchange[I].FunctionalGroup[F].TransactionSet[T].SegmentSE do + begin + SegmentId := 'SE'; + DeleteElements; + AddElements(2); + Element[0].Data := 'data'; + Element[1].Data := 'data'; + end; + + with C.Interchange[I].FunctionalGroup[F].SegmentGE do + begin + SegmentId := 'GE'; + DeleteElements; + AddElements(2); + Element[0].Data := 'data'; + Element[1].Data := 'data'; + end; + + with C.Interchange[I].SegmentIEA do + begin + SegmentId := 'IEA'; + DeleteElements; + AddElements(2); + Element[0].Data := 'data'; + Element[1].Data := 'data'; + end; + + Memo1.Lines.Add( C.Assemble ); +end; + +end. diff --git a/official/1.104/examples/windows/edisdk/EDISDK_TLB.dcr b/official/1.104/examples/windows/edisdk/EDISDK_TLB.dcr new file mode 100644 index 0000000000000000000000000000000000000000..4961f7d1c6912782561e3d71e9f346f29de7f8e1 GIT binary patch literal 3338 zcmbuBeN5F=7{|W}F3fx@H5&iOpg zbDrn?egN<))zf2%-Cm#Ho(Cp!q^D;95-=4X;3G^y9A;t~dowsqT$;#XN&8AsGGZF;PR-k2QYZW3LraMjrCWg0Kr1@o{m>hRfVNHb{M@|Q30%9@6Y;ztd9keu|J@- zweyMmvSV?%xfuzYH~R^D_Q0!k?1!yIMMdpXv6R`>)rCu!E}?M$e$33z_X;H?=%tu7 zUf!*nH&K$B+Dpx~k7vtYXU^cg!-s)$=PaE*4Xj!P6#Rjtj2$RFbPmnU9Vm*6!zTS!%HqsMvw%-rE80edWDLm z1|UOb;Tw6$8ebHQA7f$yVy51^*W17Qy!rEYBIV~4q)D2oYprcz-z83@%6N=p`ld+& z$3_`H^FMSVko{cN+KNe6uNpCtfWkuKUsRNMIm)sXFY&A$>zGKBapcXW-r#;R)tFCq z4fNMuyLJuVGG9K^oY6hJas~KYFlLeRvtYH+`0uYfBNz= zB@;7bhGB+FIOfSbjF1s{nat6YGr)K%PwW5S!Gjp0^}ydaaRP7)LMARjUS2U;T3U>c z%A79K5zKs@BXbZcpp&Jt#|6U0sblp5tGiJZbr;F`X=!Ia@F`>oufEis2zoMA`wp_bi_%kOPUuk}G?syTD zmzO`X25md;GB)~tV0iQw#l^s|d0ZhkLZ4mcRd{-4D|SUBjNM zJk1;COhm+HKj!PUU-$3NVy?B5Z~I}^*~FaEHTqLQf%OijYwX@_Jrfs`H_M-=>w0a| zKI8x0#*JvB&E9K_8MbYEFfTXPdZ)1KP}kVI*W4RHUv0a6+qr#w#M-s+tXyg0nSS=H zWzY5N;34L(W5>+(a9&SmzJ+p+jQz~p{&=nArS)ZQ*}`2hH{{RhZmCpbG literal 0 HcmV?d00001 diff --git a/official/1.104/examples/windows/edisdk/EDISDK_TLB.pas b/official/1.104/examples/windows/edisdk/EDISDK_TLB.pas new file mode 100644 index 0000000..b2ea6d5 --- /dev/null +++ b/official/1.104/examples/windows/edisdk/EDISDK_TLB.pas @@ -0,0 +1,1021 @@ +unit EDISDK_TLB; + +// ************************************************************************ // +// WARNING +// ------- +// The types declared in this file were generated from data read from a +// Type Library. If this type library is explicitly or indirectly (via +// another type library referring to this type library) re-imported, or the +// 'Refresh' command of the Type Library Editor activated while editing the +// Type Library, the contents of this file will be regenerated and all +// manual modifications will be lost. +// ************************************************************************ // + +// PASTLWTR : $Revision: 1658 $ +// File generated on 17.7.2004 03:10:43 from Type Library described below. + +// *************************************************************************// +// NOTE: +// Items guarded by $IFDEF_LIVE_SERVER_AT_DESIGN_TIME are used by properties +// which return objects that may need to be explicitly created via a function +// call prior to any access via the property. These items have been disabled +// in order to prevent accidental use from within the object inspector. You +// may enable them by defining LIVE_SERVER_AT_DESIGN_TIME or by selectively +// removing them from the $IFDEF blocks. However, such items must still be +// programmatically created via a method of the appropriate CoClass before +// they can be used. +// ************************************************************************ // +// Type Lib: I:\Quellen\jedi\jcl\examples\vcl\edisdk\comserver\EDISDK.dll (1) +// IID\LCID: {AF3BB992-62DF-41B7-92C7-FA41BDBB427E}\0 +// Helpfile: +// DepndLst: +// (1) v2.0 stdole, (F:\WINNT\system32\STDOLE2.TLB) +// (2) v4.0 StdVCL, (F:\WINNT\system32\STDVCL40.DLL) +// ************************************************************************ // +{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. +interface + +uses Windows, ActiveX, Classes, Graphics, OleServer, OleCtrls, StdVCL; + +// *********************************************************************// +// GUIDS declared in the TypeLibrary. Following prefixes are used: +// Type Libraries : LIBID_xxxx +// CoClasses : CLASS_xxxx +// DISPInterfaces : DIID_xxxx +// Non-DISP interfaces: IID_xxxx +// *********************************************************************// +const + // TypeLibrary Major and minor versions + EDISDKMajorVersion = 1; + EDISDKMinorVersion = 0; + + LIBID_EDISDK: TGUID = '{AF3BB992-62DF-41B7-92C7-FA41BDBB427E}'; + + IID_IEDICOMDelimiters: TGUID = '{A0181BBD-2F88-4FDC-9752-8303519D2D62}'; + CLASS_EDICOMDelimiters: TGUID = '{30B8A020-5D35-4ED8-B889-C13F309AE308}'; + IID_IEDICOMDataObject: TGUID = '{C7037767-05C8-4C6F-8201-655A6B5A4CF4}'; + IID_IEDICOMDataObjectGroup: TGUID = '{AEADBE04-6D1C-493E-BE6B-51E96BAD3680}'; + IID_IEDICOMElement: TGUID = '{E4ED3376-38AA-423C-9160-AAD190ACCB35}'; + CLASS_EDICOMElement: TGUID = '{4EFCADAA-60D0-4D61-875C-A27D6BCE932B}'; + IID_IEDICOMSegment: TGUID = '{467C692E-C22F-44B5-ACDB-C7A337B68675}'; + CLASS_EDICOMSegment: TGUID = '{63946EB6-DBDF-44FB-AAA4-123E7C2275B6}'; + IID_IEDICOMTransactionSet: TGUID = '{B2300104-4FF0-40A3-ABED-29E2A36C1844}'; + CLASS_EDICOMTransactionSet: TGUID = '{B540FDFC-B0D0-4E74-A7F4-B09DC260E656}'; + IID_IEDICOMFunctionalGroup: TGUID = '{C2FDB4EF-6252-4E67-BAD4-E7200B9CEA31}'; + CLASS_EDICOMFunctionalGroup: TGUID = '{C69EA833-88BF-4D55-AFC0-264F1B7ED54C}'; + IID_IEDICOMInterchangeControl: TGUID = '{B7FF3E84-8D1E-44F5-BC6A-578881CF7B5A}'; + CLASS_EDICOMInterchangeControl: TGUID = '{EF07065C-6E35-41B6-9564-D2D5714600A8}'; + IID_IEDICOMFile: TGUID = '{DEA6D2C3-98EE-4276-AA08-0AB4F1AEAC0F}'; + CLASS_EDICOMFile: TGUID = '{E8400822-5701-4226-8F78-A784B3777CB9}'; + +// *********************************************************************// +// Declaration of Enumerations defined in Type Library +// *********************************************************************// +// Constants for enum EDICOMDataObjectDataState +type + EDICOMDataObjectDataState = TOleEnum; +const + ediCreated = $00000000; + ediAssembled = $00000001; + ediDisassembled = $00000002; + +// Constants for enum EDIFileOptions +type + EDIFileOptions = TOleEnum; +const + foNone = $00000000; + foVariableDelimiterDetection = $00000001; + foUseAltDelimiterDetection = $00000002; + foRemoveCrLf = $00000004; + foRemoveCr = $00000008; + foRemoveLf = $00000010; + foIgnoreGarbageAtEndOfFile = $00000020; + +type + +// *********************************************************************// +// Forward declaration of types defined in TypeLibrary +// *********************************************************************// + IEDICOMDelimiters = interface; + IEDICOMDelimitersDisp = dispinterface; + IEDICOMDataObject = interface; + IEDICOMDataObjectDisp = dispinterface; + IEDICOMDataObjectGroup = interface; + IEDICOMDataObjectGroupDisp = dispinterface; + IEDICOMElement = interface; + IEDICOMElementDisp = dispinterface; + IEDICOMSegment = interface; + IEDICOMSegmentDisp = dispinterface; + IEDICOMTransactionSet = interface; + IEDICOMTransactionSetDisp = dispinterface; + IEDICOMFunctionalGroup = interface; + IEDICOMFunctionalGroupDisp = dispinterface; + IEDICOMInterchangeControl = interface; + IEDICOMInterchangeControlDisp = dispinterface; + IEDICOMFile = interface; + IEDICOMFileDisp = dispinterface; + +// *********************************************************************// +// Declaration of CoClasses defined in Type Library +// (NOTE: Here we map each CoClass to its Default Interface) +// *********************************************************************// + EDICOMDelimiters = IEDICOMDelimiters; + EDICOMElement = IEDICOMElement; + EDICOMSegment = IEDICOMSegment; + EDICOMTransactionSet = IEDICOMTransactionSet; + EDICOMFunctionalGroup = IEDICOMFunctionalGroup; + EDICOMInterchangeControl = IEDICOMInterchangeControl; + EDICOMFile = IEDICOMFile; + + +// *********************************************************************// +// Interface: IEDICOMDelimiters +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {A0181BBD-2F88-4FDC-9752-8303519D2D62} +// *********************************************************************// + IEDICOMDelimiters = interface(IDispatch) + ['{A0181BBD-2F88-4FDC-9752-8303519D2D62}'] + function Get_SD: WideString; safecall; + procedure Set_SD(const Value: WideString); safecall; + function Get_ED: WideString; safecall; + procedure Set_ED(const Value: WideString); safecall; + function Get_SS: WideString; safecall; + procedure Set_SS(const Value: WideString); safecall; + function Get_SDLen: Integer; safecall; + function Get_EDLen: Integer; safecall; + function Get_SSLen: Integer; safecall; + property SD: WideString read Get_SD write Set_SD; + property ED: WideString read Get_ED write Set_ED; + property SS: WideString read Get_SS write Set_SS; + property SDLen: Integer read Get_SDLen; + property EDLen: Integer read Get_EDLen; + property SSLen: Integer read Get_SSLen; + end; + +// *********************************************************************// +// DispIntf: IEDICOMDelimitersDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {A0181BBD-2F88-4FDC-9752-8303519D2D62} +// *********************************************************************// + IEDICOMDelimitersDisp = dispinterface + ['{A0181BBD-2F88-4FDC-9752-8303519D2D62}'] + property SD: WideString dispid 201; + property ED: WideString dispid 202; + property SS: WideString dispid 203; + property SDLen: Integer readonly dispid 204; + property EDLen: Integer readonly dispid 205; + property SSLen: Integer readonly dispid 206; + end; + +// *********************************************************************// +// Interface: IEDICOMDataObject +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {C7037767-05C8-4C6F-8201-655A6B5A4CF4} +// *********************************************************************// + IEDICOMDataObject = interface(IDispatch) + ['{C7037767-05C8-4C6F-8201-655A6B5A4CF4}'] + function Assemble: WideString; safecall; + procedure Disassemble; safecall; + function Get_State: Integer; safecall; + function Get_Data: WideString; safecall; + procedure Set_Data(const Value: WideString); safecall; + function Get_DataLength: Integer; safecall; + function Get_Delimiters: IEDICOMDelimiters; safecall; + property State: Integer read Get_State; + property Data: WideString read Get_Data write Set_Data; + property DataLength: Integer read Get_DataLength; + property Delimiters: IEDICOMDelimiters read Get_Delimiters; + end; + +// *********************************************************************// +// DispIntf: IEDICOMDataObjectDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {C7037767-05C8-4C6F-8201-655A6B5A4CF4} +// *********************************************************************// + IEDICOMDataObjectDisp = dispinterface + ['{C7037767-05C8-4C6F-8201-655A6B5A4CF4}'] + function Assemble: WideString; dispid 201; + procedure Disassemble; dispid 202; + property State: Integer readonly dispid 203; + property Data: WideString dispid 205; + property DataLength: Integer readonly dispid 204; + property Delimiters: IEDICOMDelimiters readonly dispid 206; + end; + +// *********************************************************************// +// Interface: IEDICOMDataObjectGroup +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {AEADBE04-6D1C-493E-BE6B-51E96BAD3680} +// *********************************************************************// + IEDICOMDataObjectGroup = interface(IEDICOMDataObject) + ['{AEADBE04-6D1C-493E-BE6B-51E96BAD3680}'] + end; + +// *********************************************************************// +// DispIntf: IEDICOMDataObjectGroupDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {AEADBE04-6D1C-493E-BE6B-51E96BAD3680} +// *********************************************************************// + IEDICOMDataObjectGroupDisp = dispinterface + ['{AEADBE04-6D1C-493E-BE6B-51E96BAD3680}'] + function Assemble: WideString; dispid 201; + procedure Disassemble; dispid 202; + property State: Integer readonly dispid 203; + property Data: WideString dispid 205; + property DataLength: Integer readonly dispid 204; + property Delimiters: IEDICOMDelimiters readonly dispid 206; + end; + +// *********************************************************************// +// Interface: IEDICOMElement +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {E4ED3376-38AA-423C-9160-AAD190ACCB35} +// *********************************************************************// + IEDICOMElement = interface(IEDICOMDataObject) + ['{E4ED3376-38AA-423C-9160-AAD190ACCB35}'] + end; + +// *********************************************************************// +// DispIntf: IEDICOMElementDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {E4ED3376-38AA-423C-9160-AAD190ACCB35} +// *********************************************************************// + IEDICOMElementDisp = dispinterface + ['{E4ED3376-38AA-423C-9160-AAD190ACCB35}'] + function Assemble: WideString; dispid 201; + procedure Disassemble; dispid 202; + property State: Integer readonly dispid 203; + property Data: WideString dispid 205; + property DataLength: Integer readonly dispid 204; + property Delimiters: IEDICOMDelimiters readonly dispid 206; + end; + +// *********************************************************************// +// Interface: IEDICOMSegment +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {467C692E-C22F-44B5-ACDB-C7A337B68675} +// *********************************************************************// + IEDICOMSegment = interface(IEDICOMDataObjectGroup) + ['{467C692E-C22F-44B5-ACDB-C7A337B68675}'] + function Get_Element(Index: Integer): IEDICOMElement; safecall; + function Get_SegmentId: WideString; safecall; + procedure Set_SegmentId(const Value: WideString); safecall; + function AddElement: Integer; safecall; + function InsertElement(InsertIndex: Integer): Integer; safecall; + procedure DeleteElement(Index: Integer); safecall; + function AddElements(Count: Integer): Integer; safecall; + function InsertElements(InsertIndex: Integer; Count: Integer): Integer; safecall; + procedure DeleteElements; safecall; + function Get_ElementCount: Integer; safecall; + property Element[Index: Integer]: IEDICOMElement read Get_Element; + property SegmentId: WideString read Get_SegmentId write Set_SegmentId; + property ElementCount: Integer read Get_ElementCount; + end; + +// *********************************************************************// +// DispIntf: IEDICOMSegmentDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {467C692E-C22F-44B5-ACDB-C7A337B68675} +// *********************************************************************// + IEDICOMSegmentDisp = dispinterface + ['{467C692E-C22F-44B5-ACDB-C7A337B68675}'] + property Element[Index: Integer]: IEDICOMElement readonly dispid 401; + property SegmentId: WideString dispid 402; + function AddElement: Integer; dispid 403; + function InsertElement(InsertIndex: Integer): Integer; dispid 404; + procedure DeleteElement(Index: Integer); dispid 405; + function AddElements(Count: Integer): Integer; dispid 406; + function InsertElements(InsertIndex: Integer; Count: Integer): Integer; dispid 407; + procedure DeleteElements; dispid 408; + property ElementCount: Integer readonly dispid 409; + function Assemble: WideString; dispid 201; + procedure Disassemble; dispid 202; + property State: Integer readonly dispid 203; + property Data: WideString dispid 205; + property DataLength: Integer readonly dispid 204; + property Delimiters: IEDICOMDelimiters readonly dispid 206; + end; + +// *********************************************************************// +// Interface: IEDICOMTransactionSet +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {B2300104-4FF0-40A3-ABED-29E2A36C1844} +// *********************************************************************// + IEDICOMTransactionSet = interface(IEDICOMDataObjectGroup) + ['{B2300104-4FF0-40A3-ABED-29E2A36C1844}'] + function Get_SegmentST: IEDICOMSegment; safecall; + function Get_SegmentSE: IEDICOMSegment; safecall; + function Get_Segment(Index: Integer): IEDICOMSegment; safecall; + function AddSegment: Integer; safecall; + function InsertSegment(InsertIndex: Integer): Integer; safecall; + procedure DeleteSegment(Index: Integer); safecall; + function AddSegments(Count: Integer): Integer; safecall; + function InsertSegments(InsertIndex: Integer; Count: Integer): Integer; safecall; + procedure DeleteSegments; safecall; + function Get_SegmentCount: Integer; safecall; + property SegmentST: IEDICOMSegment read Get_SegmentST; + property SegmentSE: IEDICOMSegment read Get_SegmentSE; + property Segment[Index: Integer]: IEDICOMSegment read Get_Segment; + property SegmentCount: Integer read Get_SegmentCount; + end; + +// *********************************************************************// +// DispIntf: IEDICOMTransactionSetDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {B2300104-4FF0-40A3-ABED-29E2A36C1844} +// *********************************************************************// + IEDICOMTransactionSetDisp = dispinterface + ['{B2300104-4FF0-40A3-ABED-29E2A36C1844}'] + property SegmentST: IEDICOMSegment readonly dispid 401; + property SegmentSE: IEDICOMSegment readonly dispid 402; + property Segment[Index: Integer]: IEDICOMSegment readonly dispid 403; + function AddSegment: Integer; dispid 404; + function InsertSegment(InsertIndex: Integer): Integer; dispid 405; + procedure DeleteSegment(Index: Integer); dispid 406; + function AddSegments(Count: Integer): Integer; dispid 407; + function InsertSegments(InsertIndex: Integer; Count: Integer): Integer; dispid 408; + procedure DeleteSegments; dispid 409; + property SegmentCount: Integer readonly dispid 410; + function Assemble: WideString; dispid 201; + procedure Disassemble; dispid 202; + property State: Integer readonly dispid 203; + property Data: WideString dispid 205; + property DataLength: Integer readonly dispid 204; + property Delimiters: IEDICOMDelimiters readonly dispid 206; + end; + +// *********************************************************************// +// Interface: IEDICOMFunctionalGroup +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {C2FDB4EF-6252-4E67-BAD4-E7200B9CEA31} +// *********************************************************************// + IEDICOMFunctionalGroup = interface(IEDICOMDataObjectGroup) + ['{C2FDB4EF-6252-4E67-BAD4-E7200B9CEA31}'] + function Get_SegmentGS: IEDICOMSegment; safecall; + function Get_SegmentGE: IEDICOMSegment; safecall; + function Get_TransactionSet(Index: Integer): IEDICOMTransactionSet; safecall; + function AddTransactionSet: Integer; safecall; + function InsertTransactionSet(InsertIndex: Integer): Integer; safecall; + procedure DeleteTransactionSet(Index: Integer); safecall; + function AddTransactionSets(Count: Integer): Integer; safecall; + function InsertTransactionSets(InsertIndex: Integer; Count: Integer): Integer; safecall; + procedure DeleteTransactionSets; safecall; + function Get_TransactionSetCount: Integer; safecall; + property SegmentGS: IEDICOMSegment read Get_SegmentGS; + property SegmentGE: IEDICOMSegment read Get_SegmentGE; + property TransactionSet[Index: Integer]: IEDICOMTransactionSet read Get_TransactionSet; + property TransactionSetCount: Integer read Get_TransactionSetCount; + end; + +// *********************************************************************// +// DispIntf: IEDICOMFunctionalGroupDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {C2FDB4EF-6252-4E67-BAD4-E7200B9CEA31} +// *********************************************************************// + IEDICOMFunctionalGroupDisp = dispinterface + ['{C2FDB4EF-6252-4E67-BAD4-E7200B9CEA31}'] + property SegmentGS: IEDICOMSegment readonly dispid 401; + property SegmentGE: IEDICOMSegment readonly dispid 402; + property TransactionSet[Index: Integer]: IEDICOMTransactionSet readonly dispid 403; + function AddTransactionSet: Integer; dispid 404; + function InsertTransactionSet(InsertIndex: Integer): Integer; dispid 405; + procedure DeleteTransactionSet(Index: Integer); dispid 406; + function AddTransactionSets(Count: Integer): Integer; dispid 407; + function InsertTransactionSets(InsertIndex: Integer; Count: Integer): Integer; dispid 408; + procedure DeleteTransactionSets; dispid 409; + property TransactionSetCount: Integer readonly dispid 410; + function Assemble: WideString; dispid 201; + procedure Disassemble; dispid 202; + property State: Integer readonly dispid 203; + property Data: WideString dispid 205; + property DataLength: Integer readonly dispid 204; + property Delimiters: IEDICOMDelimiters readonly dispid 206; + end; + +// *********************************************************************// +// Interface: IEDICOMInterchangeControl +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {B7FF3E84-8D1E-44F5-BC6A-578881CF7B5A} +// *********************************************************************// + IEDICOMInterchangeControl = interface(IEDICOMDataObjectGroup) + ['{B7FF3E84-8D1E-44F5-BC6A-578881CF7B5A}'] + function Get_SegmentISA: IEDICOMSegment; safecall; + function Get_SegmentIEA: IEDICOMSegment; safecall; + function Get_FunctionalGroup(Index: Integer): IEDICOMFunctionalGroup; safecall; + function AddFunctionalGroup: Integer; safecall; + function InsertFunctionalGroup(InsertIndex: Integer): Integer; safecall; + procedure DeleteFunctionalGroup(Index: Integer); safecall; + function AddFunctionalGroups(InsertIndex: Integer): Integer; safecall; + function InsertFunctionalGroups(InsertIndex: Integer; Count: Integer): Integer; safecall; + procedure DeleteFunctionalGroups; safecall; + procedure SetDelimiters(const SD: WideString; const ED: WideString; const SS: WideString); safecall; + function Get_FunctionalGroupCount: Integer; safecall; + property SegmentISA: IEDICOMSegment read Get_SegmentISA; + property SegmentIEA: IEDICOMSegment read Get_SegmentIEA; + property FunctionalGroup[Index: Integer]: IEDICOMFunctionalGroup read Get_FunctionalGroup; + property FunctionalGroupCount: Integer read Get_FunctionalGroupCount; + end; + +// *********************************************************************// +// DispIntf: IEDICOMInterchangeControlDisp +// Flags: (4432) Hidden Dual OleAutomation Dispatchable +// GUID: {B7FF3E84-8D1E-44F5-BC6A-578881CF7B5A} +// *********************************************************************// + IEDICOMInterchangeControlDisp = dispinterface + ['{B7FF3E84-8D1E-44F5-BC6A-578881CF7B5A}'] + property SegmentISA: IEDICOMSegment readonly dispid 401; + property SegmentIEA: IEDICOMSegment readonly dispid 402; + property FunctionalGroup[Index: Integer]: IEDICOMFunctionalGroup readonly dispid 403; + function AddFunctionalGroup: Integer; dispid 404; + function InsertFunctionalGroup(InsertIndex: Integer): Integer; dispid 405; + procedure DeleteFunctionalGroup(Index: Integer); dispid 406; + function AddFunctionalGroups(InsertIndex: Integer): Integer; dispid 407; + function InsertFunctionalGroups(InsertIndex: Integer; Count: Integer): Integer; dispid 408; + procedure DeleteFunctionalGroups; dispid 409; + procedure SetDelimiters(const SD: WideString; const ED: WideString; const SS: WideString); dispid 410; + property FunctionalGroupCount: Integer readonly dispid 411; + function Assemble: WideString; dispid 201; + procedure Disassemble; dispid 202; + property State: Integer readonly dispid 203; + property Data: WideString dispid 205; + property DataLength: Integer readonly dispid 204; + property Delimiters: IEDICOMDelimiters readonly dispid 206; + end; + +// *********************************************************************// +// Interface: IEDICOMFile +// Flags: (4416) Dual OleAutomation Dispatchable +// GUID: {DEA6D2C3-98EE-4276-AA08-0AB4F1AEAC0F} +// *********************************************************************// + IEDICOMFile = interface(IEDICOMDataObjectGroup) + ['{DEA6D2C3-98EE-4276-AA08-0AB4F1AEAC0F}'] + procedure LoadFromFile(const FileName: WideString); safecall; + procedure ReLoadFromFile; safecall; + procedure SaveToFile; safecall; + procedure SaveAsToFile(const FileName: WideString); safecall; + function Get_FileName: WideString; safecall; + procedure Set_FileName(const Value: WideString); safecall; + function Get_Interchange(Index: Integer): IEDICOMInterchangeControl; safecall; + function Get_Options: Byte; safecall; + procedure Set_Options(Value: Byte); safecall; + function AddInterchange: Integer; safecall; + function InsertInterchange(InsertIndex: Integer): Integer; safecall; + procedure DeleteInterchange(Index: Integer); safecall; + function AddInterchanges(Count: Integer): Integer; safecall; + function InsertInterchanges(InsertIndex: Integer; Count: Integer): Integer; safecall; + procedure DeleteInterchanges; safecall; + function Get_InterchangeCount: Integer; safecall; + property FileName: WideString read Get_FileName write Set_FileName; + property Interchange[Index: Integer]: IEDICOMInterchangeControl read Get_Interchange; + property Options: Byte read Get_Options write Set_Options; + property InterchangeCount: Integer read Get_InterchangeCount; + end; + +// *********************************************************************// +// DispIntf: IEDICOMFileDisp +// Flags: (4416) Dual OleAutomation Dispatchable +// GUID: {DEA6D2C3-98EE-4276-AA08-0AB4F1AEAC0F} +// *********************************************************************// + IEDICOMFileDisp = dispinterface + ['{DEA6D2C3-98EE-4276-AA08-0AB4F1AEAC0F}'] + procedure LoadFromFile(const FileName: WideString); dispid 401; + procedure ReLoadFromFile; dispid 402; + procedure SaveToFile; dispid 403; + procedure SaveAsToFile(const FileName: WideString); dispid 404; + property FileName: WideString dispid 405; + property Interchange[Index: Integer]: IEDICOMInterchangeControl readonly dispid 406; + property Options: Byte dispid 407; + function AddInterchange: Integer; dispid 408; + function InsertInterchange(InsertIndex: Integer): Integer; dispid 409; + procedure DeleteInterchange(Index: Integer); dispid 410; + function AddInterchanges(Count: Integer): Integer; dispid 411; + function InsertInterchanges(InsertIndex: Integer; Count: Integer): Integer; dispid 412; + procedure DeleteInterchanges; dispid 413; + property InterchangeCount: Integer readonly dispid 414; + function Assemble: WideString; dispid 201; + procedure Disassemble; dispid 202; + property State: Integer readonly dispid 203; + property Data: WideString dispid 205; + property DataLength: Integer readonly dispid 204; + property Delimiters: IEDICOMDelimiters readonly dispid 206; + end; + +// *********************************************************************// +// The Class CoEDICOMDelimiters provides a Create and CreateRemote method to +// create instances of the default interface IEDICOMDelimiters exposed by +// the CoClass EDICOMDelimiters. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoEDICOMDelimiters = class + class function Create: IEDICOMDelimiters; + class function CreateRemote(const MachineName: string): IEDICOMDelimiters; + end; + +// *********************************************************************// +// The Class CoEDICOMElement provides a Create and CreateRemote method to +// create instances of the default interface IEDICOMElement exposed by +// the CoClass EDICOMElement. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoEDICOMElement = class + class function Create: IEDICOMElement; + class function CreateRemote(const MachineName: string): IEDICOMElement; + end; + +// *********************************************************************// +// The Class CoEDICOMSegment provides a Create and CreateRemote method to +// create instances of the default interface IEDICOMSegment exposed by +// the CoClass EDICOMSegment. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoEDICOMSegment = class + class function Create: IEDICOMSegment; + class function CreateRemote(const MachineName: string): IEDICOMSegment; + end; + +// *********************************************************************// +// The Class CoEDICOMTransactionSet provides a Create and CreateRemote method to +// create instances of the default interface IEDICOMTransactionSet exposed by +// the CoClass EDICOMTransactionSet. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoEDICOMTransactionSet = class + class function Create: IEDICOMTransactionSet; + class function CreateRemote(const MachineName: string): IEDICOMTransactionSet; + end; + +// *********************************************************************// +// The Class CoEDICOMFunctionalGroup provides a Create and CreateRemote method to +// create instances of the default interface IEDICOMFunctionalGroup exposed by +// the CoClass EDICOMFunctionalGroup. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoEDICOMFunctionalGroup = class + class function Create: IEDICOMFunctionalGroup; + class function CreateRemote(const MachineName: string): IEDICOMFunctionalGroup; + end; + +// *********************************************************************// +// The Class CoEDICOMInterchangeControl provides a Create and CreateRemote method to +// create instances of the default interface IEDICOMInterchangeControl exposed by +// the CoClass EDICOMInterchangeControl. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoEDICOMInterchangeControl = class + class function Create: IEDICOMInterchangeControl; + class function CreateRemote(const MachineName: string): IEDICOMInterchangeControl; + end; + +// *********************************************************************// +// The Class CoEDICOMFile provides a Create and CreateRemote method to +// create instances of the default interface IEDICOMFile exposed by +// the CoClass EDICOMFile. The functions are intended to be used by +// clients wishing to automate the CoClass objects exposed by the +// server of this typelibrary. +// *********************************************************************// + CoEDICOMFile = class + class function Create: IEDICOMFile; + class function CreateRemote(const MachineName: string): IEDICOMFile; + end; + + +// *********************************************************************// +// OLE Server Proxy class declaration +// Server Object : TEDICOMFile +// Help String : +// Default Interface: IEDICOMFile +// Def. Intf. DISP? : No +// Event Interface: +// TypeFlags : (2) CanCreate +// *********************************************************************// +{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} + TEDICOMFileProperties= class; +{$ENDIF} + TEDICOMFile = class(TOleServer) + private + FIntf: IEDICOMFile; +{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} + FProps: TEDICOMFileProperties; + function GetServerProperties: TEDICOMFileProperties; +{$ENDIF} + function GetDefaultInterface: IEDICOMFile; + protected + procedure InitServerData; override; + function Get_State: Integer; + function Get_Data: WideString; + procedure Set_Data(const Value: WideString); + function Get_DataLength: Integer; + function Get_Delimiters: IEDICOMDelimiters; + function Get_FileName: WideString; + procedure Set_FileName(const Value: WideString); + function Get_Interchange(Index: Integer): IEDICOMInterchangeControl; + function Get_Options: Byte; + procedure Set_Options(Value: Byte); + function Get_InterchangeCount: Integer; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Connect; override; + procedure ConnectTo(svrIntf: IEDICOMFile); + procedure Disconnect; override; + function Assemble: WideString; + procedure Disassemble; + procedure LoadFromFile(const FileName: WideString); + procedure ReLoadFromFile; + procedure SaveToFile; + procedure SaveAsToFile(const FileName: WideString); + function AddInterchange: Integer; + function InsertInterchange(InsertIndex: Integer): Integer; + procedure DeleteInterchange(Index: Integer); + function AddInterchanges(Count: Integer): Integer; + function InsertInterchanges(InsertIndex: Integer; Count: Integer): Integer; + procedure DeleteInterchanges; + property DefaultInterface: IEDICOMFile read GetDefaultInterface; + property State: Integer read Get_State; + property DataLength: Integer read Get_DataLength; + property Delimiters: IEDICOMDelimiters read Get_Delimiters; + property Interchange[Index: Integer]: IEDICOMInterchangeControl read Get_Interchange; + property InterchangeCount: Integer read Get_InterchangeCount; + property Data: WideString read Get_Data write Set_Data; + property FileName: WideString read Get_FileName write Set_FileName; + property Options: Byte read Get_Options write Set_Options; + published +{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} + property Server: TEDICOMFileProperties read GetServerProperties; +{$ENDIF} + end; + +{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} +// *********************************************************************// +// OLE Server Properties Proxy Class +// Server Object : TEDICOMFile +// (This object is used by the IDE's Property Inspector to allow editing +// of the properties of this server) +// *********************************************************************// + TEDICOMFileProperties = class(TPersistent) + private + FServer: TEDICOMFile; + function GetDefaultInterface: IEDICOMFile; + constructor Create(AServer: TEDICOMFile); + protected + function Get_State: Integer; + function Get_Data: WideString; + procedure Set_Data(const Value: WideString); + function Get_DataLength: Integer; + function Get_Delimiters: IEDICOMDelimiters; + function Get_FileName: WideString; + procedure Set_FileName(const Value: WideString); + function Get_Interchange(Index: Integer): IEDICOMInterchangeControl; + function Get_Options: Byte; + procedure Set_Options(Value: Byte); + function Get_InterchangeCount: Integer; + public + property DefaultInterface: IEDICOMFile read GetDefaultInterface; + published + property Data: WideString read Get_Data write Set_Data; + property FileName: WideString read Get_FileName write Set_FileName; + property Options: Byte read Get_Options write Set_Options; + end; +{$ENDIF} + + +procedure Register; + +implementation + +uses ComObj; + +class function CoEDICOMDelimiters.Create: IEDICOMDelimiters; +begin + Result := CreateComObject(CLASS_EDICOMDelimiters) as IEDICOMDelimiters; +end; + +class function CoEDICOMDelimiters.CreateRemote(const MachineName: string): IEDICOMDelimiters; +begin + Result := CreateRemoteComObject(MachineName, CLASS_EDICOMDelimiters) as IEDICOMDelimiters; +end; + +class function CoEDICOMElement.Create: IEDICOMElement; +begin + Result := CreateComObject(CLASS_EDICOMElement) as IEDICOMElement; +end; + +class function CoEDICOMElement.CreateRemote(const MachineName: string): IEDICOMElement; +begin + Result := CreateRemoteComObject(MachineName, CLASS_EDICOMElement) as IEDICOMElement; +end; + +class function CoEDICOMSegment.Create: IEDICOMSegment; +begin + Result := CreateComObject(CLASS_EDICOMSegment) as IEDICOMSegment; +end; + +class function CoEDICOMSegment.CreateRemote(const MachineName: string): IEDICOMSegment; +begin + Result := CreateRemoteComObject(MachineName, CLASS_EDICOMSegment) as IEDICOMSegment; +end; + +class function CoEDICOMTransactionSet.Create: IEDICOMTransactionSet; +begin + Result := CreateComObject(CLASS_EDICOMTransactionSet) as IEDICOMTransactionSet; +end; + +class function CoEDICOMTransactionSet.CreateRemote(const MachineName: string): IEDICOMTransactionSet; +begin + Result := CreateRemoteComObject(MachineName, CLASS_EDICOMTransactionSet) as IEDICOMTransactionSet; +end; + +class function CoEDICOMFunctionalGroup.Create: IEDICOMFunctionalGroup; +begin + Result := CreateComObject(CLASS_EDICOMFunctionalGroup) as IEDICOMFunctionalGroup; +end; + +class function CoEDICOMFunctionalGroup.CreateRemote(const MachineName: string): IEDICOMFunctionalGroup; +begin + Result := CreateRemoteComObject(MachineName, CLASS_EDICOMFunctionalGroup) as IEDICOMFunctionalGroup; +end; + +class function CoEDICOMInterchangeControl.Create: IEDICOMInterchangeControl; +begin + Result := CreateComObject(CLASS_EDICOMInterchangeControl) as IEDICOMInterchangeControl; +end; + +class function CoEDICOMInterchangeControl.CreateRemote(const MachineName: string): IEDICOMInterchangeControl; +begin + Result := CreateRemoteComObject(MachineName, CLASS_EDICOMInterchangeControl) as IEDICOMInterchangeControl; +end; + +class function CoEDICOMFile.Create: IEDICOMFile; +begin + Result := CreateComObject(CLASS_EDICOMFile) as IEDICOMFile; +end; + +class function CoEDICOMFile.CreateRemote(const MachineName: string): IEDICOMFile; +begin + Result := CreateRemoteComObject(MachineName, CLASS_EDICOMFile) as IEDICOMFile; +end; + +procedure TEDICOMFile.InitServerData; +const + CServerData: TServerData = ( + ClassID: '{E8400822-5701-4226-8F78-A784B3777CB9}'; + IntfIID: '{DEA6D2C3-98EE-4276-AA08-0AB4F1AEAC0F}'; + EventIID: ''; + LicenseKey: nil; + Version: 500); +begin + ServerData := @CServerData; +end; + +procedure TEDICOMFile.Connect; +var + punk: IUnknown; +begin + if FIntf = nil then + begin + punk := GetServer; + Fintf:= punk as IEDICOMFile; + end; +end; + +procedure TEDICOMFile.ConnectTo(svrIntf: IEDICOMFile); +begin + Disconnect; + FIntf := svrIntf; +end; + +procedure TEDICOMFile.DisConnect; +begin + if Fintf <> nil then + begin + FIntf := nil; + end; +end; + +function TEDICOMFile.GetDefaultInterface: IEDICOMFile; +begin + if FIntf = nil then + Connect; + Assert(FIntf <> nil, 'DefaultInterface is NULL. Component is not connected to Server. You must call ''Connect'' or ''ConnectTo'' before this operation'); + Result := FIntf; +end; + +constructor TEDICOMFile.Create(AOwner: TComponent); +begin + inherited Create(AOwner); +{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} + FProps := TEDICOMFileProperties.Create(Self); +{$ENDIF} +end; + +destructor TEDICOMFile.Destroy; +begin +{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} + FProps.Free; +{$ENDIF} + inherited Destroy; +end; + +{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} +function TEDICOMFile.GetServerProperties: TEDICOMFileProperties; +begin + Result := FProps; +end; +{$ENDIF} + +function TEDICOMFile.Get_State: Integer; +begin + Result := DefaultInterface.Get_State; +end; + +function TEDICOMFile.Get_Data: WideString; +begin + Result := DefaultInterface.Get_Data; +end; + +procedure TEDICOMFile.Set_Data(const Value: WideString); +begin + DefaultInterface.Set_Data(Value); +end; + +function TEDICOMFile.Get_DataLength: Integer; +begin + Result := DefaultInterface.Get_DataLength; +end; + +function TEDICOMFile.Get_Delimiters: IEDICOMDelimiters; +begin + Result := DefaultInterface.Get_Delimiters; +end; + +function TEDICOMFile.Get_FileName: WideString; +begin + Result := DefaultInterface.Get_FileName; +end; + +procedure TEDICOMFile.Set_FileName(const Value: WideString); +begin + DefaultInterface.Set_FileName(Value); +end; + +function TEDICOMFile.Get_Interchange(Index: Integer): IEDICOMInterchangeControl; +begin + Result := DefaultInterface.Get_Interchange(Index); +end; + +function TEDICOMFile.Get_Options: Byte; +begin + Result := DefaultInterface.Get_Options; +end; + +procedure TEDICOMFile.Set_Options(Value: Byte); +begin + DefaultInterface.Set_Options(Value); +end; + +function TEDICOMFile.Get_InterchangeCount: Integer; +begin + Result := DefaultInterface.Get_InterchangeCount; +end; + +function TEDICOMFile.Assemble: WideString; +begin + Result := DefaultInterface.Assemble; +end; + +procedure TEDICOMFile.Disassemble; +begin + DefaultInterface.Disassemble; +end; + +procedure TEDICOMFile.LoadFromFile(const FileName: WideString); +begin + DefaultInterface.LoadFromFile(FileName); +end; + +procedure TEDICOMFile.ReLoadFromFile; +begin + DefaultInterface.ReLoadFromFile; +end; + +procedure TEDICOMFile.SaveToFile; +begin + DefaultInterface.SaveToFile; +end; + +procedure TEDICOMFile.SaveAsToFile(const FileName: WideString); +begin + DefaultInterface.SaveAsToFile(FileName); +end; + +function TEDICOMFile.AddInterchange: Integer; +begin + Result := DefaultInterface.AddInterchange; +end; + +function TEDICOMFile.InsertInterchange(InsertIndex: Integer): Integer; +begin + Result := DefaultInterface.InsertInterchange(InsertIndex); +end; + +procedure TEDICOMFile.DeleteInterchange(Index: Integer); +begin + DefaultInterface.DeleteInterchange(Index); +end; + +function TEDICOMFile.AddInterchanges(Count: Integer): Integer; +begin + Result := DefaultInterface.AddInterchanges(Count); +end; + +function TEDICOMFile.InsertInterchanges(InsertIndex: Integer; Count: Integer): Integer; +begin + Result := DefaultInterface.InsertInterchanges(InsertIndex, Count); +end; + +procedure TEDICOMFile.DeleteInterchanges; +begin + DefaultInterface.DeleteInterchanges; +end; + +{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} +constructor TEDICOMFileProperties.Create(AServer: TEDICOMFile); +begin + inherited Create; + FServer := AServer; +end; + +function TEDICOMFileProperties.GetDefaultInterface: IEDICOMFile; +begin + Result := FServer.DefaultInterface; +end; + +function TEDICOMFileProperties.Get_State: Integer; +begin + Result := DefaultInterface.Get_State; +end; + +function TEDICOMFileProperties.Get_Data: WideString; +begin + Result := DefaultInterface.Get_Data; +end; + +procedure TEDICOMFileProperties.Set_Data(const Value: WideString); +begin + DefaultInterface.Set_Data(Value); +end; + +function TEDICOMFileProperties.Get_DataLength: Integer; +begin + Result := DefaultInterface.Get_DataLength; +end; + +function TEDICOMFileProperties.Get_Delimiters: IEDICOMDelimiters; +begin + Result := DefaultInterface.Get_Delimiters; +end; + +function TEDICOMFileProperties.Get_FileName: WideString; +begin + Result := DefaultInterface.Get_FileName; +end; + +procedure TEDICOMFileProperties.Set_FileName(const Value: WideString); +begin + DefaultInterface.Set_FileName(Value); +end; + +function TEDICOMFileProperties.Get_Interchange(Index: Integer): IEDICOMInterchangeControl; +begin + Result := DefaultInterface.Get_Interchange(Index); +end; + +function TEDICOMFileProperties.Get_Options: Byte; +begin + Result := DefaultInterface.Get_Options; +end; + +procedure TEDICOMFileProperties.Set_Options(Value: Byte); +begin + DefaultInterface.Set_Options(Value); +end; + +function TEDICOMFileProperties.Get_InterchangeCount: Integer; +begin + Result := DefaultInterface.Get_InterchangeCount; +end; + +{$ENDIF} + +procedure Register; +begin + RegisterComponents('ActiveX',[TEDICOMFile]); +end; + +end. diff --git a/official/1.104/examples/windows/edisdk/comserver/Clean.bat b/official/1.104/examples/windows/edisdk/comserver/Clean.bat new file mode 100644 index 0000000..2bca898 --- /dev/null +++ b/official/1.104/examples/windows/edisdk/comserver/Clean.bat @@ -0,0 +1,18 @@ +@echo off +if exist *.~* del *.~* +if exist *.dcu del *.dcu +if exist *.dpl del *.dpl +if exist *.bpl del *.bpl +if exist *.bpi del *.bpi +if exist *.lsp del *.lsp +if exist *.dcp del *.dcp +if exist *.dpc del *.dpc +if exist *.bak del *.bak +if exist *.obj del *.obj +if exist *.hpp del *.hpp +if exist *.lib del *.lib +if exist *.exe del *.exe +if exist *.dsk del *.dsk + + + diff --git a/official/1.104/examples/windows/edisdk/comserver/EDISDK.dof b/official/1.104/examples/windows/edisdk/comserver/EDISDK.dof new file mode 100644 index 0000000..4575b9a --- /dev/null +++ b/official/1.104/examples/windows/edisdk/comserver/EDISDK.dof @@ -0,0 +1,13 @@ +[Directories] +OutputDir=..\..\..\..\bin +[Version Info Keys] +CompanyName=Ray's JEDI Projects +FileDescription=EDI SDK COM Object Library +FileVersion=1.0.0.24 +InternalName= +LegalCopyright=Raymond Alexander +LegalTrademarks= +OriginalFilename=EDISDK.dll +ProductName=EDI SDK COM Object Library +ProductVersion=1.0.0.0 +Comments=Beta version for testing only! diff --git a/official/1.104/examples/windows/edisdk/comserver/EDISDK.dpr b/official/1.104/examples/windows/edisdk/comserver/EDISDK.dpr new file mode 100644 index 0000000..4a71302 --- /dev/null +++ b/official/1.104/examples/windows/edisdk/comserver/EDISDK.dpr @@ -0,0 +1,23 @@ +library EDISDK; + +{$I jcl.inc} + +uses + ComServ, + EDISDK_TLB in 'EDISDK_TLB.pas', + JclEDICOM_ANSIX12 in 'JclEDICOM_ANSIX12.pas'; + +{$R *.TLB} + +{$E dll} + +exports + DllGetClassObject, + DllCanUnloadNow, + DllRegisterServer, + DllUnregisterServer; + +{$R *.RES} + +begin +end. diff --git a/official/1.104/examples/windows/edisdk/comserver/EDISDK.res b/official/1.104/examples/windows/edisdk/comserver/EDISDK.res new file mode 100644 index 0000000000000000000000000000000000000000..2aff2bdd3ed65c94d0112f0ef33d6d139bb5a19a GIT binary patch literal 1792 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

    8Q;rrD;Tz6=OS& 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 `+xTFim4cb*cw3?gYGre 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℘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