You can subscribe to this list here.
| 2006 |
Jan
|
Feb
|
Mar
|
Apr
(20) |
May
(48) |
Jun
(8) |
Jul
(23) |
Aug
(41) |
Sep
(42) |
Oct
(22) |
Nov
(17) |
Dec
(36) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2007 |
Jan
(43) |
Feb
(42) |
Mar
(17) |
Apr
(39) |
May
(16) |
Jun
(35) |
Jul
(37) |
Aug
(47) |
Sep
(49) |
Oct
(9) |
Nov
(52) |
Dec
(37) |
| 2008 |
Jan
(48) |
Feb
(21) |
Mar
(7) |
Apr
(2) |
May
(5) |
Jun
(17) |
Jul
(17) |
Aug
(40) |
Sep
(58) |
Oct
(38) |
Nov
(19) |
Dec
(32) |
| 2009 |
Jan
(67) |
Feb
(46) |
Mar
(54) |
Apr
(34) |
May
(37) |
Jun
(52) |
Jul
(67) |
Aug
(72) |
Sep
(48) |
Oct
(35) |
Nov
(27) |
Dec
(12) |
| 2010 |
Jan
(56) |
Feb
(46) |
Mar
(19) |
Apr
(14) |
May
(21) |
Jun
(3) |
Jul
(13) |
Aug
(48) |
Sep
(34) |
Oct
(51) |
Nov
(16) |
Dec
(32) |
| 2011 |
Jan
(36) |
Feb
(14) |
Mar
(12) |
Apr
(3) |
May
(5) |
Jun
(24) |
Jul
(15) |
Aug
(30) |
Sep
(21) |
Oct
(4) |
Nov
(25) |
Dec
(23) |
| 2012 |
Jan
(45) |
Feb
(42) |
Mar
(19) |
Apr
(14) |
May
(13) |
Jun
(7) |
Jul
(3) |
Aug
(46) |
Sep
(21) |
Oct
(10) |
Nov
(2) |
Dec
|
| 2013 |
Jan
(5) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <ah...@us...> - 2007-02-15 21:03:01
|
Revision: 1933
http://svn.sourceforge.net/jcl/?rev=1933&view=rev
Author: ahuser
Date: 2007-02-15 13:02:59 -0800 (Thu, 15 Feb 2007)
Log Message:
-----------
Added false positive elimination
Modified Paths:
--------------
trunk/jcl/source/common/JclResources.pas
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/common/JclResources.pas
===================================================================
--- trunk/jcl/source/common/JclResources.pas 2007-02-15 19:32:00 UTC (rev 1932)
+++ trunk/jcl/source/common/JclResources.pas 2007-02-15 21:02:59 UTC (rev 1933)
@@ -821,10 +821,12 @@
RsDebugAssertValidString = 'Invalid string passed to AssertValid';
// TMapFiles
- RsDebugMapFileExtension = '.map'; // do not localize
RsDebugNoProcessInfo = 'Unable to obtain process information';
RsDebugSnapshot = 'Failure creating toolhelp32 snapshot';
+ // JclDebugInfoExport
+ RsUnknownFunctionAt = 'Unknown function at %s';
+
//=== JclDotNet ==============================================================
resourcestring
RsEUnknownCLRVersion = '"%s" is not a known CLR version';
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-15 19:32:00 UTC (rev 1932)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-15 21:02:59 UTC (rev 1933)
@@ -238,17 +238,6 @@
property LineNumberErrors: Integer read FLineNumberErrors;
end;
-// JCL binary debug data generator and scanner
-const
- JclDbgDataSignature = $4742444A; // JDBG
- JclDbgDataResName = 'JCLDEBUG';
- JclDbgFileExtension = '.jdbg';
-
- JclDbgHeaderVersion = 1; // JCL 1.11 and 1.20
-
- MapFileExtension = '.map';
- DrcFileExtension = '.drc';
-
type
PJclDbgHeader = ^TJclDbgHeader;
TJclDbgHeader = packed record
@@ -416,6 +405,7 @@
TJclDebugInfoExports = class(TJclDebugInfoSource)
private
FBorImage: TJclPeBorImage;
+ function IsAddressInThisExportedFunction(Addr: PByteArray; FunctionStartAddr: Cardinal): Boolean;
public
destructor Destroy; override;
function InitializeSource: Boolean; override;
@@ -665,20 +655,6 @@
function JclCreateExceptFrameList(AIgnoreLevels: Integer): TJclExceptFrameList;
function JclLastExceptFrameList: TJclExceptFrameList;
-// Global exceptional stack tracker enable routines and variables
-type
- TJclStackTrackingOption =
- (stStack, stExceptFrame, stRawMode, stAllModules, stStaticModuleList,
- stDelayedTrace, stTraceEAbort, stMainThreadOnly);
- TJclStackTrackingOptions = set of TJclStackTrackingOption;
-
-var
- JclStackTrackingOptions: TJclStackTrackingOptions = [stStack];
-
- { JclDebugInfoSymbolPaths specifies a list of paths, separated by ';', in
- which the DebugInfoSymbol scanner should look for symbol information. }
- JclDebugInfoSymbolPaths: string = '';
-
function JclStartExceptionTracking: Boolean;
function JclStopExceptionTracking: Boolean;
function JclExceptionTrackingActive: Boolean;
@@ -770,6 +746,31 @@
EnvironmentVarAlternateNtSymbolPath = '_NT_ALTERNATE_SYMBOL_PATH'; // do not localize
MaxStackTraceItems = 4096;
+// JCL binary debug data generator and scanner
+const
+ JclDbgDataSignature = $4742444A; // JDBG
+ JclDbgDataResName = 'JCLDEBUG'; // do not localize
+ JclDbgHeaderVersion = 1; // JCL 1.11 and 1.20
+
+ JclDbgFileExtension = '.jdbg'; // do not localize
+ JclMapFileExtension = '.map'; // do not localize
+ DrcFileExtension = '.drc'; // do not localize
+
+// Global exceptional stack tracker enable routines and variables
+type
+ TJclStackTrackingOption =
+ (stStack, stExceptFrame, stRawMode, stAllModules, stStaticModuleList,
+ stDelayedTrace, stTraceEAbort, stMainThreadOnly);
+ TJclStackTrackingOptions = set of TJclStackTrackingOption;
+
+var
+ JclStackTrackingOptions: TJclStackTrackingOptions = [stStack];
+
+ { JclDebugInfoSymbolPaths specifies a list of paths, separated by ';', in
+ which the DebugInfoSymbol scanner should look for symbol information. }
+ JclDebugInfoSymbolPaths: string = '';
+
+
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
@@ -787,7 +788,8 @@
{$IFDEF MSWINDOWS}
JclRegistry,
{$ENDIF MSWINDOWS}
- JclHookExcept, JclLogic, JclStrings, JclSysInfo, JclSysUtils, JclWin32;
+ JclHookExcept, JclLogic, JclStrings, JclSysInfo, JclSysUtils, JclWin32,
+ JclResources;
//=== Helper assembler routines ==============================================
@@ -2766,7 +2768,7 @@
var
MapFileName: TFileName;
begin
- MapFileName := ChangeFileExt(FileName, MapFileExtension);
+ MapFileName := ChangeFileExt(FileName, JclMapFileExtension);
Result := FileExists(MapFileName);
if Result then
FScanner := TJclMapScanner.Create(MapFileName, Module);
@@ -2837,6 +2839,48 @@
inherited Destroy;
end;
+function TJclDebugInfoExports.IsAddressInThisExportedFunction(Addr: PByteArray; FunctionStartAddr: Cardinal): Boolean;
+begin
+ Dec(Cardinal(Addr), 6);
+ while Cardinal(Addr) > FunctionStartAddr do
+ begin
+ if (Addr[0] = $C2) and // ret $xxxx
+ (((Addr[3] = $90) and (Addr[4] = $90) and (Addr[5] = $90)) or // nop
+ ((Addr[3] = $CC) and (Addr[4] = $CC) and (Addr[5] = $CC))) then // int 3
+ begin
+ Result := False;
+ Exit;
+ end
+ else
+ if (Addr[0] = $C3) and // ret
+ (((Addr[1] = $90) and (Addr[2] = $90) and (Addr[3] = $90)) or // nop
+ ((Addr[1] = $CC) and (Addr[2] = $CC) and (Addr[3] = $CC))) then // int 3
+ begin
+ Result := False;
+ Exit;
+ end
+ else
+ if (Addr[0] = $E9) and // jmp rel-far
+ (((Addr[5] = $90) and (Addr[6] = $90) and (Addr[7] = $90)) or // nop
+ ((Addr[5] = $CC) and (Addr[6] = $CC) and (Addr[7] = $CC))) then // int 3
+ begin
+ Result := False;
+ Exit;
+ end
+ else
+ if (Addr[0] = $EB) and // jmp rel-near
+ (((Addr[2] = $90) and (Addr[3] = $90) and (Addr[4] = $90)) or // nop
+ ((Addr[2] = $CC) and (Addr[3] = $CC) and (Addr[4] = $CC))) then // int 3
+ begin
+ Result := False;
+ Exit;
+ end;
+
+ Dec(Cardinal(Addr));
+ end;
+ Result := True;
+end;
+
function TJclDebugInfoExports.GetLocationInfo(const Addr: Pointer; var Info: TJclLocationInfo): Boolean;
var
I, BasePos: Integer;
@@ -2890,6 +2934,14 @@
begin
Info.Address := Addr;
Info.DebugInfo := Self;
+
+ { Check if we have a valid address in an exported function. }
+ if not IsAddressInThisExportedFunction(Addr, FModule + Items[I].Address) then
+ begin
+ Info.UnitName := '[' + AnsiLowerCase(ExtractFileName(GetModulePath(FModule))) + ']';
+ Info.ProcedureName := Format(RsUnknownFunctionAt, [Info.ProcedureName]);
+ end;
+
Break;
end;
end;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ah...@us...> - 2007-02-15 19:32:04
|
Revision: 1932
http://svn.sourceforge.net/jcl/?rev=1932&view=rev
Author: ahuser
Date: 2007-02-15 11:32:00 -0800 (Thu, 15 Feb 2007)
Log Message:
-----------
Fixed: Workaround for DbgHelp.dll bug that crashes the whole application.
Modified Paths:
--------------
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-15 16:55:51 UTC (rev 1931)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-15 19:32:00 UTC (rev 1932)
@@ -675,6 +675,10 @@
var
JclStackTrackingOptions: TJclStackTrackingOptions = [stStack];
+ { JclDebugInfoSymbolPaths specifies a list of paths, separated by ';', in
+ which the DebugInfoSymbol scanner should look for symbol information. }
+ JclDebugInfoSymbolPaths: string = '';
+
function JclStartExceptionTracking: Boolean;
function JclStopExceptionTracking: Boolean;
function JclExceptionTrackingActive: Boolean;
@@ -2950,7 +2954,7 @@
TSymGetModuleInfoFunc = function (hProcess: THandle; dwAddr: DWORD;
var ModuleInfo: TImagehlpModule): Bool; stdcall;
TSymLoadModuleFunc = function (hProcess: THandle; hFile: THandle; ImageName,
- ModuleName: LPSTR; BaseOfDll, SizeOfDll: DWORD): Bool; stdcall;
+ ModuleName: LPSTR; BaseOfDll, SizeOfDll: DWORD): DWORD; stdcall;
TSymGetLineFromAddrFunc = function (hProcess: THandle; dwAddr: DWORD;
pdwDisplacement: PDWORD; var Line: TImageHlpLine): Bool; stdcall;
@@ -2978,6 +2982,23 @@
SymLoadModuleFuncName = 'SymLoadModule'; // do not localize
SymGetLineFromAddrName = 'SymGetLineFromAddr'; // do not localize
+function StrRemoveEmptyPaths(const Paths: string): string;
+var
+ List: TStrings;
+ I: Integer;
+begin
+ List := TStringList.Create;
+ try
+ StrToStrings(Paths, DirSeparator, List, False);
+ for I := 0 to List.Count - 1 do
+ if Trim(List[I]) = '' then
+ List[I] := '';
+ Result := StringsToStr(List, DirSeparator, False);
+ finally
+ List.Free;
+ end;
+end;
+
class function TJclDebugInfoSymbols.InitializeDebugSymbols: Boolean;
var
EnvironmentVarValue, SearchPath: string;
@@ -2994,16 +3015,26 @@
if Result then
begin
- SearchPath := StrEnsureSuffix(DirSeparator, ExtractFilePath(GetModulePath(GetCurrentProcess)) + GetCurrentFolder);
- if GetEnvironmentVar(EnvironmentVarNtSymbolPath, EnvironmentVarValue) then
- SearchPath := StrEnsureSuffix(DirSeparator, EnvironmentVarValue) + SearchPath;
- if GetEnvironmentVar(EnvironmentVarAlternateNtSymbolPath, EnvironmentVarValue) then
- SearchPath := StrEnsureSuffix(DirSeparator, EnvironmentVarValue) + SearchPath;
+ SearchPath := ''; // use default paths
+ if JclDebugInfoSymbolPaths <> '' then
+ begin
+ SearchPath := StrEnsureSuffix(DirSeparator, JclDebugInfoSymbolPaths);
+ SearchPath := StrEnsureNoSuffix(DirSeparator, SearchPath + GetCurrentFolder);
+ if GetEnvironmentVar(EnvironmentVarNtSymbolPath, EnvironmentVarValue) and (EnvironmentVarValue <> '') then
+ SearchPath := StrEnsureNoSuffix(DirSeparator, StrEnsureSuffix(DirSeparator, EnvironmentVarValue) + SearchPath);
+ if GetEnvironmentVar(EnvironmentVarAlternateNtSymbolPath, EnvironmentVarValue) and (EnvironmentVarValue <> '') then
+ SearchPath := StrEnsureNoSuffix(DirSeparator, StrEnsureSuffix(DirSeparator, EnvironmentVarValue) + SearchPath);
+
+ { DbgHelp.dll crashes when an empty path is specified. This also means
+ that the SearchPath must not end with a DirSeparator. }
+ SearchPath := StrRemoveEmptyPaths(SearchPath);
+ end;
+
if IsWinNT then
- Result := SymInitializeFunc(GetCurrentProcess, PChar(SearchPath), False)
+ Result := SymInitializeFunc(GetCurrentProcess, Pointer(SearchPath), False)
else
- Result := SymInitializeFunc(GetCurrentProcessId, PChar(SearchPath), False);
+ Result := SymInitializeFunc(GetCurrentProcessId, Pointer(SearchPath), False);
if Result then
begin
SymOptions := SymGetOptionsFunc or SYMOPT_DEFERRED_LOADS
@@ -3104,7 +3135,7 @@
or (ModuleInfo.BaseOfImage = 0)) then
begin
ModuleFileName := GetModulePath(Module);
- Result := (DWORD(SymLoadModuleFunc(ProcessHandle, 0, PChar(ModuleFileName), nil, HInstance, 0)) <> 0);
+ Result := SymLoadModuleFunc(ProcessHandle, 0, PChar(ModuleFileName), nil, 0, 0) <> 0;
ZeroMemory(@ModuleInfo, SizeOf(ModuleInfo));
ModuleInfo.SizeOfStruct := SizeOf(ModuleInfo);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ah...@us...> - 2007-02-15 16:56:02
|
Revision: 1931
http://svn.sourceforge.net/jcl/?rev=1931&view=rev
Author: ahuser
Date: 2007-02-15 08:55:51 -0800 (Thu, 15 Feb 2007)
Log Message:
-----------
Fixed: Delphi 7's map file set both CODE and DATA section to offset 0x0000000.
Fixed: Delphi 2005+ map files contain set the last line of "empty" unit to VA 0x00000000
Modified Paths:
--------------
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-15 00:43:57 UTC (rev 1930)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-15 16:55:51 UTC (rev 1931)
@@ -119,6 +119,7 @@
FStream: TJclFileMappingStream;
function GetLinkerBugUnitName: string;
protected
+ FModule: HMODULE;
FLastUnitName: PJclMapString;
FLastUnitFileName: PJclMapString;
procedure ClassTableItem(const Address: TJclMapAddress; Len: Integer; SectionName, GroupName: PJclMapString); virtual; abstract;
@@ -128,13 +129,14 @@
procedure LineNumberUnitItem(UnitName, UnitFileName: PJclMapString); virtual; abstract;
procedure LineNumbersItem(LineNumber: Integer; const Address: TJclMapAddress); virtual; abstract;
public
- constructor Create(const MapFileName: TFileName); virtual;
+ constructor Create(const MapFileName: TFileName; Module: HMODULE); overload; virtual;
+ constructor Create(const MapFileName: TFileName); overload;
destructor Destroy; override;
procedure Parse;
class function MapStringToStr(MapString: PJclMapString; IgnoreSpaces: Boolean = False): string;
class function MapStringToFileName(MapString: PJclMapString): string;
property LinkerBug: Boolean read FLinkerBug;
- property LinkerBugUnitName: string read GetLinkerBugUnitName;
+ property LinkerBugUnitName: string read GetLinkerBugUnitName;
property Stream: TJclFileMappingStream read FStream;
end;
@@ -224,7 +226,7 @@
procedure LineNumberUnitItem(UnitName, UnitFileName: PJclMapString); override;
procedure Scan;
public
- constructor Create(const MapFileName: TFileName); override;
+ constructor Create(const MapFileName: TFileName; Module: HMODULE); override;
// Addr are virtual addresses relative to (module base address + $10000)
function LineNumberFromAddr(Addr: DWORD): Integer; overload;
function LineNumberFromAddr(Addr: DWORD; var Offset: Integer): Integer; overload;
@@ -269,7 +271,7 @@
protected
procedure CreateData;
public
- constructor Create(const MapFileName: TFileName); override;
+ constructor Create(const MapFileName: TFileName; Module: HMODULE); override;
destructor Destroy; override;
function CalculateCheckSum: Boolean;
property DataStream: TMemoryStream read FDataStream;
@@ -987,12 +989,19 @@
//=== { TJclAbstractMapParser } ==============================================
-constructor TJclAbstractMapParser.Create(const MapFileName: TFileName);
+constructor TJclAbstractMapParser.Create(const MapFileName: TFileName; Module: HMODULE);
begin
+ inherited Create;
+ FModule := Module;
if FileExists(MapFileName) then
FStream := TJclFileMappingStream.Create(MapFileName, fmOpenRead or fmShareDenyWrite);
end;
+constructor TJclAbstractMapParser.Create(const MapFileName: TFileName);
+begin
+ Create(MapFileName, 0);
+end;
+
destructor TJclAbstractMapParser.Destroy;
begin
FreeAndNil(FStream);
@@ -1372,9 +1381,9 @@
//=== { TJclMapScanner } =====================================================
-constructor TJclMapScanner.Create(const MapFileName: TFileName);
+constructor TJclMapScanner.Create(const MapFileName: TFileName; Module: HMODULE);
begin
- inherited Create(MapFileName);
+ inherited Create(MapFileName, Module);
Scan;
end;
@@ -1398,6 +1407,7 @@
SectionName, GroupName: PJclMapString);
var
C: Integer;
+ SectionHeader: PImageSectionHeader;
begin
C := Length(FSegmentClasses);
SetLength(FSegmentClasses, C + 1);
@@ -1407,6 +1417,21 @@
FSegmentClasses[C].Len := Len;
FSegmentClasses[C].SectionName := SectionName;
FSegmentClasses[C].GroupName := GroupName;
+
+ if FModule <> 0 then
+ begin
+ { Fix the section addresses }
+ SectionHeader := PeMapImgFindSectionFromModule(Pointer(FModule), MapStringToStr(SectionName));
+ if SectionHeader = nil then
+ { before Delphi 2005 the class names where used for the section names }
+ SectionHeader := PeMapImgFindSectionFromModule(Pointer(FModule), MapStringToStr(GroupName));
+
+ if SectionHeader <> nil then
+ begin
+ FSegmentClasses[C].Addr := Cardinal(FModule) + SectionHeader.VirtualAddress;
+ FSegmentClasses[C].VA := SectionHeader.VirtualAddress;
+ end;
+ end;
end;
function TJclMapScanner.LineNumberFromAddr(Addr: DWORD): Integer;
@@ -1449,6 +1474,13 @@
and (DWORD(Address.Offset) < FSegmentClasses[SegIndex].Len) then
begin
VA := AddrToVA(DWORD(Address.Offset) + FSegmentClasses[SegIndex].Addr);
+ { Starting with Delphi 2005, "empty" units are listes with the last line and
+ the VA 0001:00000000. When we would accept 0 VAs here, System.pas functions
+ could be mapped to other units and line numbers. Discaring such items should
+ have no impact on the correct information, because there can't be a function
+ that starts at VA 0. }
+ if VA = 0 then
+ Continue;
if FLineNumbersCnt mod 256 = 0 then
SetLength(FLineNumbers, FLineNumbersCnt + 256);
FLineNumbers[FLineNumbersCnt].Segment := FSegmentClasses[SegIndex].Segment;
@@ -1805,7 +1837,7 @@
Generator: TJclBinDebugGenerator;
begin
JDbgFileName := ChangeFileExt(MapFileName, JclDbgFileExtension);
- Generator := TJclBinDebugGenerator.Create(MapFileName);
+ Generator := TJclBinDebugGenerator.Create(MapFileName, 0);
try
MapFileSize := Generator.Stream.Size;
JdbgFileSize := Generator.DataStream.Size;
@@ -1846,7 +1878,7 @@
var
BinDebug: TJclBinDebugGenerator;
begin
- BinDebug := TJclBinDebugGenerator.Create(MapFileName);
+ BinDebug := TJclBinDebugGenerator.Create(MapFileName, 0);
try
Result := InsertDebugDataIntoExecutableFile(ExecutableFileName, BinDebug,
LinkerBugUnit, MapFileSize, JclDebugDataSize, LineNumberErrors);
@@ -1977,9 +2009,9 @@
//=== { TJclBinDebugGenerator } ==============================================
-constructor TJclBinDebugGenerator.Create(const MapFileName: TFileName);
+constructor TJclBinDebugGenerator.Create(const MapFileName: TFileName; Module: HMODULE);
begin
- inherited Create(MapFileName);
+ inherited Create(MapFileName, Module);
FDataStream := TMemoryStream.Create;
FMapFileName := MapFileName;
if FStream <> nil then
@@ -2195,6 +2227,7 @@
constructor TJclBinDebugScanner.Create(AStream: TCustomMemoryStream; CacheData: Boolean);
begin
+ inherited Create;
FCacheData := CacheData;
FStream := AStream;
CheckFormat;
@@ -2712,7 +2745,7 @@
with FScanner do
begin
Info.UnitName := ModuleNameFromAddr(VA);
- Result := (Info.UnitName <> '');
+ Result := Info.UnitName <> '';
if Result then
begin
Info.Address := Addr;
@@ -2732,7 +2765,7 @@
MapFileName := ChangeFileExt(FileName, MapFileExtension);
Result := FileExists(MapFileName);
if Result then
- FScanner := TJclMapScanner.Create(MapFileName);
+ FScanner := TJclMapScanner.Create(MapFileName, Module);
end;
//=== { TJclDebugInfoBinary } ================================================
@@ -2752,7 +2785,7 @@
with FScanner do
begin
Info.UnitName := ModuleNameFromAddr(VA);
- Result := (Info.UnitName) <> '';
+ Result := Info.UnitName <> '';
if Result then
begin
Info.Address := Addr;
@@ -2880,7 +2913,7 @@
begin
VA := VAFromAddr(Addr);
Info.UnitName := FImage.TD32Scanner.ModuleNameFromAddr(VA);
- Result := (Info.UnitName) <> '';
+ Result := Info.UnitName <> '';
if Result then
with Info do
begin
@@ -3207,7 +3240,7 @@
Module : HMODULE;
begin
OffsetStr := '';
- if GetLocationInfo(Addr, Info) then
+ if GetLocationInfo(Addr, Info) then
with Info do
begin
FixedProcedureName := ProcedureName;
@@ -3702,10 +3735,8 @@
Delayed := stDelayedTrace in JclStackTrackingOptions;
if BaseOfStack = nil then
begin
- if RawMode then
- IgnoreLevels := 9
- else
- IgnoreLevels := 5;
+ BaseOfStack := GetEBP;
+ IgnoreLevels := 1;
end
else
IgnoreLevels := Cardinal(-1); // because of the "IgnoreLevels + 1" in TJclStackInfoList.StoreToList()
@@ -4310,7 +4341,7 @@
if TrackingActive and ((stTraceEAbort in JclStackTrackingOptions) or not (ExceptObj is EAbort)) and
(not (stMainThreadOnly in JclStackTrackingOptions) or (GetCurrentThreadId = MainThreadID)) then
begin
- if stStack in JclStackTrackingOptions then
+ if stStack in JclStackTrackingOptions then
DoExceptionStackTrace(ExceptObj, ExceptAddr, OSException, BaseOfStack);
if stExceptFrame in JclStackTrackingOptions then
DoExceptFrameTrace;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ah...@us...> - 2007-02-15 00:43:59
|
Revision: 1930
http://svn.sourceforge.net/jcl/?rev=1930&view=rev
Author: ahuser
Date: 2007-02-14 16:43:57 -0800 (Wed, 14 Feb 2007)
Log Message:
-----------
Fixed: Application disappeared when with XP-Theming and ComCtrl32.dll from the WinSxS directory.
Modified Paths:
--------------
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-14 23:40:16 UTC (rev 1929)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-15 00:43:57 UTC (rev 1930)
@@ -2943,7 +2943,7 @@
SymGetSymFromAddrFuncName = 'SymGetSymFromAddr'; // do not localize
SymGetModuleInfoFuncName = 'SymGetModuleInfo'; // do not localize
SymLoadModuleFuncName = 'SymLoadModule'; // do not localize
- SymGetLineFromAddrName = 'SymGetLineFromAddr'; // do not localize
+ SymGetLineFromAddrName = 'SymGetLineFromAddr'; // do not localize
class function TJclDebugInfoSymbols.InitializeDebugSymbols: Boolean;
var
@@ -3067,12 +3067,11 @@
ZeroMemory(@ModuleInfo, SizeOf(ModuleInfo));
ModuleInfo.SizeOfStruct := SizeOf(ModuleInfo);
- if Result
- and ((not SymGetModuleInfoFunc(ProcessHandle, Module, ModuleInfo))
- or (ModuleInfo.BaseOfImage = 0)) then
+ if ((not SymGetModuleInfoFunc(ProcessHandle, Module, ModuleInfo))
+ or (ModuleInfo.BaseOfImage = 0)) then
begin
ModuleFileName := GetModulePath(Module);
- Result := (DWORD(SymLoadModuleFunc(ProcessHandle, 0, PChar(ModuleFileName), nil, 0, 0)) <> 0);
+ Result := (DWORD(SymLoadModuleFunc(ProcessHandle, 0, PChar(ModuleFileName), nil, HInstance, 0)) <> 0);
ZeroMemory(@ModuleInfo, SizeOf(ModuleInfo));
ModuleInfo.SizeOfStruct := SizeOf(ModuleInfo);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-14 23:40:18
|
Revision: 1929
http://svn.sourceforge.net/jcl/?rev=1929&view=rev
Author: outchy
Date: 2007-02-14 15:40:16 -0800 (Wed, 14 Feb 2007)
Log Message:
-----------
Byte offset in the procedure was badly inserted at the beginning of the string if Line numbers are present, module name is selected and VAddress isn't.
Modified Paths:
--------------
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-14 23:31:31 UTC (rev 1928)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-14 23:40:16 UTC (rev 1929)
@@ -3251,10 +3251,12 @@
begin
Module := ModuleFromAddr(Addr);
if IncludeVAdress then
+ begin
OffsetStr := Format('(%p) ', [Pointer(DWORD(Addr) - Module - ModuleCodeOffset)]);
+ Result := OffsetStr + Result;
+ end;
if IncludeModuleName then
Insert(Format('{%-12s}', [ExtractFileName(GetModulePath(Module))]), Result, 11);
- Result := OffsetStr + Result;
end;
end;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ah...@us...> - 2007-02-14 23:31:47
|
Revision: 1928
http://svn.sourceforge.net/jcl/?rev=1928&view=rev
Author: ahuser
Date: 2007-02-14 15:31:31 -0800 (Wed, 14 Feb 2007)
Log Message:
-----------
Fixed: Trace Stack frames included the JclDebug/JclExceptHook stack frames.
Modified Paths:
--------------
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-14 23:17:33 UTC (rev 1927)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-14 23:31:31 UTC (rev 1928)
@@ -2592,6 +2592,7 @@
begin
NeedInfoSourceClassList;
+ Result := nil;
for I := 0 to InfoSourceClassList.Count - 1 do
begin
Result := TJclDebugInfoSourceClass(InfoSourceClassList.Items[I]).Create(Module);
@@ -3665,7 +3666,7 @@
procedure CorrectExceptStackListTop(List: TJclStackInfoList; SkipFirstItem: Boolean);
var
- TopItem,I, FoundPos: Integer;
+ TopItem, I, FoundPos: Integer;
begin
FoundPos := -1;
if SkipFirstItem then
@@ -3948,7 +3949,13 @@
// Get the current stack frame from the EBP register
StackFrame := FFrameEBP
else
- StackFrame := GetEBP;
+ begin
+ // We define the bottom of the valid stack to be the current ESP pointer
+ if BaseOfStack = 0 then
+ BaseOfStack := DWORD(GetEBP);
+ // Get a pointer to the current bottom of the stack
+ StackFrame := PStackFrame(BaseOfStack);
+ end;
// We define the bottom of the valid stack to be the current EBP Pointer
// There is a TIB field called pvStackUserBase, but this includes more of the
@@ -4063,7 +4070,7 @@
// First check that the address is within range of our code segment!
C8P := PDWORD(CodeAddr - 8);
C4P := PDWORD(CodeAddr - 4);
- Result := (CodeAddr > 8) and ValidCodeAddr(DWORD(C8P), FModuleInfoList) and not IsBadReadPtr(C8P, 8);
+ Result := (CodeAddr > 8) and not IsBadReadPtr(C8P, 8) and ValidCodeAddr(DWORD(C8P), FModuleInfoList);
// Now check to see if the instruction preceding the return address
// could be a valid CALL instruction
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-14 23:17:35
|
Revision: 1927
http://svn.sourceforge.net/jcl/?rev=1927&view=rev
Author: outchy
Date: 2007-02-14 15:17:33 -0800 (Wed, 14 Feb 2007)
Log Message:
-----------
Eliminating duplicates in unit names
Modified Paths:
--------------
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-14 22:44:22 UTC (rev 1926)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-14 23:17:33 UTC (rev 1927)
@@ -3203,13 +3203,17 @@
IncludeStartProcLineOffset: Boolean; IncludeVAdress: Boolean): string;
var
Info, StartProcInfo: TJclLocationInfo;
- OffsetStr, StartProcOffsetStr: string;
+ OffsetStr, StartProcOffsetStr, FixedProcedureName: string;
Module : HMODULE;
begin
OffsetStr := '';
if GetLocationInfo(Addr, Info) then
with Info do
begin
+ FixedProcedureName := ProcedureName;
+ if Pos(UnitName + '.', FixedProcedureName) = 1 then
+ FixedProcedureName := Copy(FixedProcedureName, Length(UnitName) + 2, Length(FixedProcedureName) - Length(UnitName) - 1);
+
if LineNumber > 0 then
begin
if IncludeStartProcLineOffset and GetLocationInfo(Pointer(Cardinal(Info.Address) -
@@ -3224,7 +3228,7 @@
else
OffsetStr := Format(' - $%x', [-OffsetFromLineNumber])
end;
- Result := Format('[%p] %s.%s (Line %u, "%s"%s)%s', [Addr, UnitName, ProcedureName, LineNumber,
+ Result := Format('[%p] %s.%s (Line %u, "%s"%s)%s', [Addr, UnitName, FixedProcedureName, LineNumber,
SourceName, StartProcOffsetStr, OffsetStr]);
end
else
@@ -3232,9 +3236,9 @@
if IncludeAddressOffset then
OffsetStr := Format(' + $%x', [OffsetFromProcName]);
if UnitName <> '' then
- Result := Format('[%p] %s.%s%s', [Addr, UnitName, ProcedureName, OffsetStr])
+ Result := Format('[%p] %s.%s%s', [Addr, UnitName, FixedProcedureName, OffsetStr])
else
- Result := Format('[%p] %s%s', [Addr, ProcedureName, OffsetStr]);
+ Result := Format('[%p] %s%s', [Addr, FixedProcedureName, OffsetStr]);
end;
end
else
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-14 22:44:23
|
Revision: 1926
http://svn.sourceforge.net/jcl/?rev=1926&view=rev
Author: outchy
Date: 2007-02-14 14:44:22 -0800 (Wed, 14 Feb 2007)
Log Message:
-----------
Fixing invalid project groups (uses expert was deleted)
Modified Paths:
--------------
trunk/jcl/packages/JclPackagesD100.bdsgroup
trunk/jcl/packages/JclPackagesD90.bdsgroup
Modified: trunk/jcl/packages/JclPackagesD100.bdsgroup
===================================================================
--- trunk/jcl/packages/JclPackagesD100.bdsgroup 2007-02-14 22:01:11 UTC (rev 1925)
+++ trunk/jcl/packages/JclPackagesD100.bdsgroup 2007-02-14 22:44:22 UTC (rev 1926)
@@ -17,7 +17,7 @@
<Projects Name="JclProjectAnalysisExpert100.bpl">d10\JclProjectAnalysisExpert.bdsproj</Projects>
<Projects Name="JclRepositoryExpert100.bpl">d10\JclRepositoryExpert.bdsproj</Projects>
<Projects Name="JclVersionControlExpert100.bpl">d10\JclVersionControlExpert.bdsproj</Projects>
- <Projects Name="Targets">Jcl100.bpl JclVcl100.bpl JclBaseExpert100.bpl JclDebugExpert100.bpl JclFavoriteFoldersExpert100.bpl JclProjectAnalysisExpert100.bpl JclRepositoryExpert100.bpl JclUsesExpert100.bpl JclVersionControlExpert100.bpl</Projects>
+ <Projects Name="Targets">Jcl100.bpl JclVcl100.bpl JclBaseExpert100.bpl JclDebugExpert100.bpl JclFavoriteFoldersExpert100.bpl JclProjectAnalysisExpert100.bpl JclRepositoryExpert100.bpl JclVersionControlExpert100.bpl</Projects>
</Projects>
<Dependencies/>
</Default.Personality>
Modified: trunk/jcl/packages/JclPackagesD90.bdsgroup
===================================================================
--- trunk/jcl/packages/JclPackagesD90.bdsgroup 2007-02-14 22:01:11 UTC (rev 1925)
+++ trunk/jcl/packages/JclPackagesD90.bdsgroup 2007-02-14 22:44:22 UTC (rev 1926)
@@ -19,7 +19,7 @@
<Projects Name="JclProjectAnalysisExpert90.bpl">d9\JclProjectAnalysisExpert.bdsproj</Projects>
<Projects Name="JclRepositoryExpert90.bpl">d9\JclRepositoryExpert.bdsproj</Projects>
<Projects Name="JclVersionControlExpert90.bpl">d9\JclVersionControlExpert.bdsproj</Projects>
- <Projects Name="Targets">Jcl90.bpl JclVcl90.bpl JclBaseExpert90.bpl JclDebugExpert90.bpl JclFavoriteFoldersExpert90.bpl JclProjectAnalysisExpert90.bpl JclRepositoryExpert90.bpl JclUsesExpert90.bpl JclVersionControlExpert90.bpl</Projects>
+ <Projects Name="Targets">Jcl90.bpl JclVcl90.bpl JclBaseExpert90.bpl JclDebugExpert90.bpl JclFavoriteFoldersExpert90.bpl JclProjectAnalysisExpert90.bpl JclRepositoryExpert90.bpl JclVersionControlExpert90.bpl</Projects>
</Projects>
<Dependencies/>
</Default.Personality>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-14 22:01:14
|
Revision: 1925
http://svn.sourceforge.net/jcl/?rev=1925&view=rev
Author: outchy
Date: 2007-02-14 14:01:11 -0800 (Wed, 14 Feb 2007)
Log Message:
-----------
Fixing compilations in the exception form in some combinations of options.
New option to add the stMainThreadOnly option
Modified Paths:
--------------
trunk/jcl/experts/common/JclOtaResources.pas
trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas
trunk/jcl/experts/debug/dialog/JclOtaExcDlgRepository.pas
trunk/jcl/experts/debug/dialog/JclOtaExcDlgSystemFrame.dfm
trunk/jcl/experts/debug/dialog/JclOtaExcDlgSystemFrame.pas
Modified: trunk/jcl/experts/common/JclOtaResources.pas
===================================================================
--- trunk/jcl/experts/common/JclOtaResources.pas 2007-02-14 21:53:46 UTC (rev 1924)
+++ trunk/jcl/experts/common/JclOtaResources.pas 2007-02-14 22:01:11 UTC (rev 1925)
@@ -138,6 +138,7 @@
RsModuleList = 'Module list';
RsOSInfo = 'Operating system informations';
RsActiveControls = 'List of active controls';
+ RsMainThreadOnly = 'Catch only exceptions of main thread';
//=== JclOtaExcDlgTraceFrame.pas =============================================
resourcestring
Modified: trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas 2007-02-14 21:53:46 UTC (rev 1924)
+++ trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas 2007-02-14 22:01:11 UTC (rev 1925)
@@ -281,18 +281,18 @@
procedure T%FORMNAME%.CreateReport;
var
-%if ModuleList SL: TStringList;
- I: Integer;
+ SL: TStringList;
+%if ModuleList I: Integer;
ModuleName: TFileName;
NtHeaders32: PImageNtHeaders32;
NtHeaders64: PImageNtHeaders64;
ModuleBase: Cardinal;
- ImageBaseStr: string;%endif
+ ImageBaseStr: string;
+ PETarget: TJclPeTarget;%endif
%if ActiveControls C: TWinControl;%endif
%if OSInfo CpuInfo: TCpuInfo;
ProcessorDetails: string;%endif
%if StackList StackList: TJclStackInfoList;%endif
- PETarget: TJclPeTarget;
begin
SL := TStringList.Create;
try
@@ -614,6 +614,7 @@
%if RawData JclStackTrackingOptions := JclStackTrackingOptions + [stRawMode];%endif
%if HookDll JclStackTrackingOptions := JclStackTrackingOptions + [stStaticModuleList];%endif
%if DelayedTrace JclStackTrackingOptions := JclStackTrackingOptions + [stDelayedTrace];%endif
+%if MainThreadOnly JclStackTrackingOptions := JclStackTrackingOptions + [stMainThreadOnly];%endif
JclDebugThreadList.OnSyncException := T%FORMNAME%.ExceptionThreadHandler;
JclStartExceptionTracking;
%if HookDll if HookTApplicationHandleException then
Modified: trunk/jcl/experts/debug/dialog/JclOtaExcDlgRepository.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/JclOtaExcDlgRepository.pas 2007-02-14 21:53:46 UTC (rev 1924)
+++ trunk/jcl/experts/debug/dialog/JclOtaExcDlgRepository.pas 2007-02-14 22:01:11 UTC (rev 1925)
@@ -67,6 +67,7 @@
FActiveControls: Boolean;
FStackList: Boolean;
FAutoScrollBars: Boolean;
+ FMainThreadOnly: Boolean;
public
constructor Create; reintroduce;
published
@@ -93,6 +94,7 @@
property OSInfo: Boolean read FOSInfo write FOSInfo;
property ModuleList: Boolean read FModuleList write FModuleList;
property ActiveControls: Boolean read FActiveControls write FActiveControls;
+ property MainThreadOnly: Boolean read FMainThreadOnly write FMainThreadOnly;
// trace options
property StackList: Boolean read FStackList write FStackList;
property RawData: Boolean read FRawData write FRawData;
Modified: trunk/jcl/experts/debug/dialog/JclOtaExcDlgSystemFrame.dfm
===================================================================
--- trunk/jcl/experts/debug/dialog/JclOtaExcDlgSystemFrame.dfm 2007-02-14 21:53:46 UTC (rev 1924)
+++ trunk/jcl/experts/debug/dialog/JclOtaExcDlgSystemFrame.dfm 2007-02-14 22:01:11 UTC (rev 1925)
@@ -1,7 +1,7 @@
inherited JclOtaExcDlgSystemPage: TJclOtaExcDlgSystemPage
object LabelLogFileName: TLabel
- Left = 162
- Top = 135
+ Left = 170
+ Top = 159
Width = 55
Height = 13
Caption = 'RsFileName'
@@ -16,7 +16,7 @@
end
object CheckBoxHookDll: TCheckBox
Left = 120
- Top = 65
+ Top = 57
Width = 265
Height = 17
Caption = 'RsHookDll'
@@ -24,7 +24,7 @@
end
object CheckBoxLogFile: TCheckBox
Left = 120
- Top = 104
+ Top = 121
Width = 265
Height = 17
Caption = 'RsLogFile'
@@ -33,14 +33,14 @@
end
object EditLogFileName: TEdit
Left = 240
- Top = 132
+ Top = 156
Width = 145
Height = 21
TabOrder = 3
end
object CheckBoxModuleList: TCheckBox
Left = 120
- Top = 176
+ Top = 200
Width = 265
Height = 17
Caption = 'RsModuleList'
@@ -48,7 +48,7 @@
end
object CheckBoxOSInfo: TCheckBox
Left = 120
- Top = 216
+ Top = 232
Width = 265
Height = 17
Caption = 'RsOSInfo'
@@ -56,10 +56,18 @@
end
object CheckBoxActiveControls: TCheckBox
Left = 120
- Top = 256
+ Top = 264
Width = 265
Height = 17
Caption = 'RsActiveControls'
TabOrder = 6
end
+ object CheckBoxMainThreadOnly: TCheckBox
+ Left = 120
+ Top = 89
+ Width = 265
+ Height = 17
+ Caption = 'RsMainThreadOnly'
+ TabOrder = 7
+ end
end
Modified: trunk/jcl/experts/debug/dialog/JclOtaExcDlgSystemFrame.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/JclOtaExcDlgSystemFrame.pas 2007-02-14 21:53:46 UTC (rev 1924)
+++ trunk/jcl/experts/debug/dialog/JclOtaExcDlgSystemFrame.pas 2007-02-14 22:01:11 UTC (rev 1925)
@@ -47,6 +47,7 @@
CheckBoxModuleList: TCheckBox;
CheckBoxOSInfo: TCheckBox;
CheckBoxActiveControls: TCheckBox;
+ CheckBoxMainThreadOnly: TCheckBox;
procedure CheckBoxLogFileClick(Sender: TObject);
private
FParams: TJclOtaExcDlgParams;
@@ -90,6 +91,7 @@
CheckBoxModuleList.Caption := RsModuleList;
CheckBoxOSInfo.Caption := RsOSInfo;
CheckBoxActiveControls.Caption := RsActiveControls;
+ CheckBoxMainThreadOnly.Caption := RsMainThreadOnly;
end;
function TJclOtaExcDlgSystemPage.GetSupportsNext: Boolean;
@@ -108,6 +110,7 @@
CheckBoxModuleList.Checked := Params.ModuleList;
CheckBoxOSInfo.Checked := Params.OSInfo;
CheckBoxActiveControls.Checked := Params.ActiveControls;
+ CheckBoxMainThreadOnly.Checked := Params.MainThreadOnly;
UpdateLogEdits;
end;
@@ -124,6 +127,7 @@
Params.ModuleList := CheckBoxModuleList.Checked;
Params.OSInfo := CheckBoxOSInfo.Checked;
Params.ActiveControls := CheckBoxActiveControls.Checked;
+ Params.MainThreadOnly := CheckBoxMainThreadOnly.Checked;
end;
procedure TJclOtaExcDlgSystemPage.UpdateLogEdits;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-14 21:53:47
|
Revision: 1924
http://svn.sourceforge.net/jcl/?rev=1924&view=rev
Author: outchy
Date: 2007-02-14 13:53:46 -0800 (Wed, 14 Feb 2007)
Log Message:
-----------
Uses expert doesn't exist for BDS anymore.
Modified Paths:
--------------
trunk/jcl/packages/JclPackagesD100.bdsgroup
trunk/jcl/packages/JclPackagesD90.bdsgroup
Modified: trunk/jcl/packages/JclPackagesD100.bdsgroup
===================================================================
--- trunk/jcl/packages/JclPackagesD100.bdsgroup 2007-02-14 19:41:34 UTC (rev 1923)
+++ trunk/jcl/packages/JclPackagesD100.bdsgroup 2007-02-14 21:53:46 UTC (rev 1924)
@@ -16,7 +16,6 @@
<Projects Name="JclFavoriteFoldersExpert100.bpl">d10\JclFavoriteFoldersExpert.bdsproj</Projects>
<Projects Name="JclProjectAnalysisExpert100.bpl">d10\JclProjectAnalysisExpert.bdsproj</Projects>
<Projects Name="JclRepositoryExpert100.bpl">d10\JclRepositoryExpert.bdsproj</Projects>
- <Projects Name="JclUsesExpert100.bpl">d10\JclUsesExpert.bdsproj</Projects>
<Projects Name="JclVersionControlExpert100.bpl">d10\JclVersionControlExpert.bdsproj</Projects>
<Projects Name="Targets">Jcl100.bpl JclVcl100.bpl JclBaseExpert100.bpl JclDebugExpert100.bpl JclFavoriteFoldersExpert100.bpl JclProjectAnalysisExpert100.bpl JclRepositoryExpert100.bpl JclUsesExpert100.bpl JclVersionControlExpert100.bpl</Projects>
</Projects>
Modified: trunk/jcl/packages/JclPackagesD90.bdsgroup
===================================================================
--- trunk/jcl/packages/JclPackagesD90.bdsgroup 2007-02-14 19:41:34 UTC (rev 1923)
+++ trunk/jcl/packages/JclPackagesD90.bdsgroup 2007-02-14 21:53:46 UTC (rev 1924)
@@ -18,7 +18,6 @@
<Projects Name="JclFavoriteFoldersExpert90.bpl">d9\JclFavoriteFoldersExpert.bdsproj</Projects>
<Projects Name="JclProjectAnalysisExpert90.bpl">d9\JclProjectAnalysisExpert.bdsproj</Projects>
<Projects Name="JclRepositoryExpert90.bpl">d9\JclRepositoryExpert.bdsproj</Projects>
- <Projects Name="JclUsesExpert90.bpl">d9\JclUsesExpert.bdsproj</Projects>
<Projects Name="JclVersionControlExpert90.bpl">d9\JclVersionControlExpert.bdsproj</Projects>
<Projects Name="Targets">Jcl90.bpl JclVcl90.bpl JclBaseExpert90.bpl JclDebugExpert90.bpl JclFavoriteFoldersExpert90.bpl JclProjectAnalysisExpert90.bpl JclRepositoryExpert90.bpl JclUsesExpert90.bpl JclVersionControlExpert90.bpl</Projects>
</Projects>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ah...@us...> - 2007-02-14 19:41:37
|
Revision: 1923
http://svn.sourceforge.net/jcl/?rev=1923&view=rev
Author: ahuser
Date: 2007-02-14 11:41:34 -0800 (Wed, 14 Feb 2007)
Log Message:
-----------
Added stMainThreadOnly
Modified Paths:
--------------
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-14 19:06:34 UTC (rev 1922)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-14 19:41:34 UTC (rev 1923)
@@ -667,7 +667,7 @@
type
TJclStackTrackingOption =
(stStack, stExceptFrame, stRawMode, stAllModules, stStaticModuleList,
- stDelayedTrace, stTraceEAbort);
+ stDelayedTrace, stTraceEAbort, stMainThreadOnly);
TJclStackTrackingOptions = set of TJclStackTrackingOption;
var
@@ -3616,15 +3616,17 @@
var
IsMultiThreaded: Boolean;
begin
- IsMultiThreaded := IsMultiThread;
- if IsMultiThreaded then
- FLock.Enter;
- try
- if FModulesList <> ModulesList then
+ if FModulesList <> ModulesList then
+ begin
+ IsMultiThreaded := IsMultiThread;
+ if IsMultiThreaded then
+ FLock.Enter;
+ try
FreeAndNil(ModulesList);
- finally
- if IsMultiThreaded then
- FLock.Leave;
+ finally
+ if IsMultiThreaded then
+ FLock.Leave;
+ end;
end;
end;
@@ -4293,7 +4295,8 @@
procedure DoExceptNotify(ExceptObj: TObject; ExceptAddr: Pointer; OSException: Boolean;
BaseOfStack: Pointer);
begin
- if TrackingActive and ((stTraceEAbort in JclStackTrackingOptions) or not (ExceptObj is EAbort)) then
+ if TrackingActive and ((stTraceEAbort in JclStackTrackingOptions) or not (ExceptObj is EAbort)) and
+ (not (stMainThreadOnly in JclStackTrackingOptions) or (GetCurrentThreadId = MainThreadID)) then
begin
if stStack in JclStackTrackingOptions then
DoExceptionStackTrace(ExceptObj, ExceptAddr, OSException, BaseOfStack);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ah...@us...> - 2007-02-14 19:06:39
|
Revision: 1922
http://svn.sourceforge.net/jcl/?rev=1922&view=rev
Author: ahuser
Date: 2007-02-14 11:06:34 -0800 (Wed, 14 Feb 2007)
Log Message:
-----------
Removed JclBorlandTools dependency
Modified Paths:
--------------
trunk/jcl/source/windows/JclPeImage.pas
Modified: trunk/jcl/source/windows/JclPeImage.pas
===================================================================
--- trunk/jcl/source/windows/JclPeImage.pas 2007-02-14 19:02:08 UTC (rev 1921)
+++ trunk/jcl/source/windows/JclPeImage.pas 2007-02-14 19:06:34 UTC (rev 1922)
@@ -1084,7 +1084,7 @@
implementation
uses
- JclLogic, JclResources, JclSysUtils, JclBorlandTools;
+ JclLogic, JclResources, JclSysUtils;
const
MANIFESTExtension = '.manifest';
@@ -1097,6 +1097,10 @@
DebugSectionName = '.debug';
ReadOnlySectionName = '.rdata';
+ BinaryExtensionPackage = '.bpl';
+ BinaryExtensionLibrary = '.dll';
+ CompilerExtensionDCP = '.dcp';
+
// Helper routines
function AddFlagTextRes(var Text: string; const FlagText: PResStringRec; const Value, Mask: Integer): Boolean;
begin
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ah...@us...> - 2007-02-14 19:02:13
|
Revision: 1921
http://svn.sourceforge.net/jcl/?rev=1921&view=rev
Author: ahuser
Date: 2007-02-14 11:02:08 -0800 (Wed, 14 Feb 2007)
Log Message:
-----------
Fixed missing location where the exception was raised. (StackFrames)
Modified Paths:
--------------
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-14 18:53:29 UTC (rev 1920)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-14 19:02:08 UTC (rev 1921)
@@ -3933,8 +3933,7 @@
StackFrame: PStackFrame;
StackInfo: TStackInfo;
begin
- Clear;
- Capacity := 16; // reduce ReallocMem calls
+ Capacity := 32; // reduce ReallocMem calls, must be > 1 because the caller's EIP register is already in the list
// Start at level 0
StackInfo.Level := 0;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ah...@us...> - 2007-02-14 18:54:11
|
Revision: 1920
http://svn.sourceforge.net/jcl/?rev=1920&view=rev
Author: ahuser
Date: 2007-02-14 10:53:29 -0800 (Wed, 14 Feb 2007)
Log Message:
-----------
Fixed missing location where the exception was raised.
Modified Paths:
--------------
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-12 19:14:04 UTC (rev 1919)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-14 18:53:29 UTC (rev 1920)
@@ -3962,8 +3962,7 @@
CallInstructionSize: Cardinal;
StackTop: DWORD;
begin
- Clear;
- Capacity := 16; // reduce ReallocMem calls
+ Capacity := 32; // reduce ReallocMem calls, must be > 1 because the caller's EIP register is already in the list
if DelayedTrace then
begin
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-12 19:14:55
|
Revision: 1919
http://svn.sourceforge.net/jcl/?rev=1919&view=rev
Author: outchy
Date: 2007-02-12 11:14:04 -0800 (Mon, 12 Feb 2007)
Log Message:
-----------
PCRE updated to 7.0
Static link to PCRE libraries (does not work in versions older than Delphi 2005)
TODO: fix internal errors for C++Builder 5, C++Builder 6, Delphi 5, Delphi 6 and Delphi 7
TODO: static link to pcre code without importing msvcrt.dll
Modified Paths:
--------------
trunk/jcl/source/common/pcre.pas
Added Paths:
-----------
trunk/jcl/source/windows/obj/pcre/
trunk/jcl/source/windows/obj/pcre/makefile.mak
trunk/jcl/source/windows/obj/pcre/pcre_compile.obj
trunk/jcl/source/windows/obj/pcre/pcre_config.obj
trunk/jcl/source/windows/obj/pcre/pcre_default_tables.obj
trunk/jcl/source/windows/obj/pcre/pcre_dfa_exec.obj
trunk/jcl/source/windows/obj/pcre/pcre_exec.obj
trunk/jcl/source/windows/obj/pcre/pcre_fullinfo.obj
trunk/jcl/source/windows/obj/pcre/pcre_get.obj
trunk/jcl/source/windows/obj/pcre/pcre_globals.obj
trunk/jcl/source/windows/obj/pcre/pcre_info.obj
trunk/jcl/source/windows/obj/pcre/pcre_maketables.obj
trunk/jcl/source/windows/obj/pcre/pcre_newline.obj
trunk/jcl/source/windows/obj/pcre/pcre_ord2utf8.obj
trunk/jcl/source/windows/obj/pcre/pcre_refcount.obj
trunk/jcl/source/windows/obj/pcre/pcre_study.obj
trunk/jcl/source/windows/obj/pcre/pcre_tables.obj
trunk/jcl/source/windows/obj/pcre/pcre_try_flipped.obj
trunk/jcl/source/windows/obj/pcre/pcre_ucp_searchfuncs.obj
trunk/jcl/source/windows/obj/pcre/pcre_valid_utf8.obj
trunk/jcl/source/windows/obj/pcre/pcre_version.obj
trunk/jcl/source/windows/obj/pcre/pcre_xclass.obj
trunk/thirdparty/pcre/pcre-7.0.tar.gz
Removed Paths:
-------------
trunk/thirdparty/pcre/pcre-6.7.tar.gz
Modified: trunk/jcl/source/common/pcre.pas
===================================================================
--- trunk/jcl/source/common/pcre.pas 2007-02-12 17:44:45 UTC (rev 1918)
+++ trunk/jcl/source/common/pcre.pas 2007-02-12 19:14:04 UTC (rev 1919)
@@ -52,7 +52,16 @@
// NOTE: if you enable static linking of DLL, this means that the pcre.dll *must*
// be in the users path or an AV will occur at startup
+// IMPORTANT: The static link works only for Delphi 2005 and earlier
+// (an internal error is raised on other compilers)
+// The following combinations of defines are valid
+// static link: PCRE_STATICLINK
+// static import: (nothing)
+// dynamic import: PCRE_LINKONREQUEST
+
+//{$DEFINE PCRE_STATICLINK}
{$DEFINE PCRE_LINKONREQUEST}
+
(*$HPPEMIT '#include "pcre.h"'*)
const
@@ -502,6 +511,7 @@
implementation
uses
+ SysUtils,
{$IFDEF MSWINDOWS}
Windows;
{$ENDIF MSWINDOWS}
@@ -516,6 +526,29 @@
{$ENDIF ~HAS_UNIT_LIBC}
{$ENDIF UNIX}
+{$IFDEF PCRE_STATICLINK}
+{$LINK ..\windows\obj\pcre\pcre_compile.obj}
+{$LINK ..\windows\obj\pcre\pcre_config.obj}
+{$LINK ..\windows\obj\pcre\pcre_dfa_exec.obj}
+{$LINK ..\windows\obj\pcre\pcre_exec.obj}
+{$LINK ..\windows\obj\pcre\pcre_fullinfo.obj}
+{$LINK ..\windows\obj\pcre\pcre_get.obj}
+{$LINK ..\windows\obj\pcre\pcre_globals.obj}
+{$LINK ..\windows\obj\pcre\pcre_info.obj}
+{$LINK ..\windows\obj\pcre\pcre_maketables.obj}
+{$LINK ..\windows\obj\pcre\pcre_newline.obj}
+{$LINK ..\windows\obj\pcre\pcre_ord2utf8.obj}
+{$LINK ..\windows\obj\pcre\pcre_refcount.obj}
+{$LINK ..\windows\obj\pcre\pcre_study.obj}
+{$LINK ..\windows\obj\pcre\pcre_tables.obj}
+{$LINK ..\windows\obj\pcre\pcre_try_flipped.obj}
+{$LINK ..\windows\obj\pcre\pcre_ucp_searchfuncs.obj}
+{$LINK ..\windows\obj\pcre\pcre_valid_utf8.obj}
+{$LINK ..\windows\obj\pcre\pcre_version.obj}
+{$LINK ..\windows\obj\pcre\pcre_xclass.obj}
+{$LINK ..\windows\obj\pcre\pcre_default_tables.obj}
+{$ENDIF PCRE_STATICLINK}
+
type
{$IFDEF MSWINDOWS}
TModuleHandle = HINST;
@@ -799,6 +832,72 @@
InitPCREFuncPtrs(@LibNotLoadedHandler);
end;
+{$IFDEF PCRE_STATICLINK}
+function pcre_compile; external;
+function pcre_compile2; external;
+function pcre_config; external;
+function pcre_copy_named_substring; external;
+function pcre_copy_substring; external;
+function pcre_dfa_exec; external;
+function pcre_exec; external;
+procedure pcre_free_substring; external;
+procedure pcre_free_substring_list; external;
+function pcre_fullinfo; external;
+function pcre_get_named_substring; external;
+function pcre_get_stringnumber; external;
+function pcre_get_stringtable_entries; external;
+function pcre_get_substring; external;
+function pcre_get_substring_list; external;
+function pcre_info; external;
+function pcre_maketables; external;
+function pcre_refcount; external;
+function pcre_study; external;
+function pcre_version; external;
+
+type
+ size_t = Longint;
+
+const
+ szMSVCRT = 'MSVCRT.DLL';
+
+function _memcpy(dest, src: Pointer; count: size_t): Pointer; cdecl; external szMSVCRT name 'memcpy';
+{begin
+ Move(src^, dest^, count);
+ Result := dest;
+end;}
+function _memset(dest: Pointer; val: Integer; count: size_t): Pointer; cdecl; external szMSVCRT name 'memset';
+{begin
+ FillChar(dest^, count, val);
+ Result := dest;
+end;}
+function _malloc(size: size_t): Pointer; cdecl; external szMSVCRT name 'malloc';
+{begin
+ GetMem(Result, size);
+end;}
+procedure _free(pBlock: Pointer); cdecl; external szMSVCRT name 'free';
+{begin
+ FreeMem(pBlock);
+end;}
+function _strncmp(s1: PAnsiChar; s2: PAnsiChar; n: size_t): Integer; cdecl; external szMSVCRT name 'strncmp';
+function _memcmp(s1: Pointer; s2: Pointer; n: size_t): Integer; cdecl; external szMSVCRT name 'memcmp';
+function _strlen(s: PAnsiChar): size_t; cdecl; external szMSVCRT name 'strlen';
+function __ltolower(__ch: Integer): Integer; cdecl; external szMSVCRT name '_tolower';
+function __ltoupper(__ch: Integer): Integer; cdecl; external szMSVCRT name 'toupper';
+function _isalnum(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isalnum';
+function _isalpha(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isalpha';
+function _iscntrl(__ch: Integer): Integer; cdecl; external szMSVCRT name 'iscntrl';
+function _isdigit(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isdigit';
+function _isgraph(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isgraph';
+function _islower(__ch: Integer): Integer; cdecl; external szMSVCRT name 'islower';
+function _isprint(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isprint';
+function _ispunct(__ch: Integer): Integer; cdecl; external szMSVCRT name 'ispunct';
+function _isspace(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isspace';
+function _isupper(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isupper';
+function _isxdigit(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isxdigit';
+//int _RTLENTRY _EXPFUNC isascii (int __c);
+function _strchr(__s: PChar; __c: Integer): PAnsiChar; cdecl; external szMSVCRT name 'strchr';
+
+{$ELSE ~PCRE_STATICLINK}
{$IFNDEF PCRE_LINKONREQUEST}
function pcre_compile; external libpcremodulename name PCRECompileExportName;
function pcre_compile2; external libpcremodulename name PCRECompile2ExportName;
@@ -821,6 +920,7 @@
function pcre_study; external libpcremodulename name PCREStudyExportName;
function pcre_version; external libpcremodulename name PCREVersionExportName;
{$ENDIF ~PCRE_LINKONREQUEST}
+{$ENDIF ~PCRE_STATICLINK}
end.
Property changes on: trunk/jcl/source/windows/obj/pcre
___________________________________________________________________
Name: svn:ignore
+ pcre_default_tables.c
Added: trunk/jcl/source/windows/obj/pcre/makefile.mak
===================================================================
--- trunk/jcl/source/windows/obj/pcre/makefile.mak (rev 0)
+++ trunk/jcl/source/windows/obj/pcre/makefile.mak 2007-02-12 19:14:04 UTC (rev 1919)
@@ -0,0 +1,129 @@
+#
+# makefile to make pcre .obj files using Borland's C++ compiler bcc32
+# derived from a makefile generated by BCB6' bpr2mak
+#
+# if pcre source directory is different from $(JLC)\source\pcre-7.0, use
+# "make -Dpcresrc=<path to pcre sources>" to tell make where to find the
+# source files
+#
+# Make.exe needs to reside in the same directory as bcc32.exe.
+# For example, if you have Borlands free C++ v. 5.5 compiler (available from
+# http://www.borland.com/products/downloads/download_cbuilder.html#) installed:
+#
+# >C:\Program Files\Borland\BCC55\Bin\make
+#
+# or, if you want to use C++ Builder 6:
+#
+# >C:\Program Files\Borland\CBuilder6\Bin\make
+#
+# or, if you want to use Borland Developer Studio 2006:
+#
+# >C:\Program files\Borland\BDS\4.0\bin\make
+#
+# To choose the target CPU, pass "-DCPU=n" as option to make, with n being a
+# number between 3 and 6, with the following meanings:
+#
+# n Target CPU (or compatible)
+# --------------------------------
+# 3 80386
+# 4 80486
+# 5 Pentium (default)
+# 6 Pentium Pro
+#
+# Note: This assumes -DZEXPORT=__fastcall -DZEXPORTVA=__cdecl
+#
+# Robert Rossmair, 2004-10-16
+#
+
+CallingConvention = -pr -DZEXPORT=__fastcall -DZEXPORTVA=__cdecl
+
+!if !$d(BCB)
+BCB = $(MAKEDIR)\..
+!endif
+
+BCC = $(BCB)
+
+!if !$d(pcresrc)
+pcresrc = ..\..\..\pcre-7.0
+!endif
+
+!if !$d(CPU)
+CPU = 5 # Pentium
+!endif
+
+# ---------------------------------------------------------------------------
+# IDE SECTION
+# ---------------------------------------------------------------------------
+# The following section of the project makefile is managed by the BCB IDE.
+# It is recommended to use the IDE to change any of the values in this
+# section.
+# ---------------------------------------------------------------------------
+
+VERSION = BCB.06.00
+# ---------------------------------------------------------------------------
+OBJFILES = .\pcre_compile.obj .\pcre_config.obj .\pcre_dfa_exec.obj \
+ .\pcre_exec.obj .\pcre_fullinfo.obj .\pcre_get.obj .\pcre_globals.obj \
+ .\pcre_info.obj .\pcre_maketables.obj .\pcre_newline.obj \
+ .\pcre_ord2utf8.obj .\pcre_refcount.obj .\pcre_study.obj .\pcre_tables.obj \
+ .\pcre_try_flipped.obj .\pcre_ucp_searchfuncs.obj .\pcre_valid_utf8.obj \
+ .\pcre_version.obj .\pcre_xclass.obj .\pcre_default_tables.obj
+
+# ---------------------------------------------------------------------------
+DEBUGLIBPATH = $(BCB)\lib\debug
+RELEASELIBPATH = $(BCB)\lib\release
+USERDEFINES =
+SYSDEFINES = NO_STRICT;_NO_VCL;_RTLDLL
+INCLUDEPATH = $(pcresrc);$(BCC)\include;$(BCB)\include\vcl
+LIBPATH = $(BCB)\lib\obj;$(BCB)\lib
+# LIBPATH = $(pcresrc)
+WARNINGS= -w-par -w-aus
+PATHC = .;$(pcresrc)
+# PATHOBJ = .;$(LIBPATH)
+ALLLIB = import32.lib cw32i.lib
+# ---------------------------------------------------------------------------
+CFLAG1 = -O2 -Ve -X- -a8 -$(CPU) -b -d -k- -vi -tWM- $(CallingConvention)
+
+LFLAGS = -D"" -ap -Tpe -x -Gn
+# ---------------------------------------------------------------------------
+# MAKE SECTION
+# ---------------------------------------------------------------------------
+# This section of the project file is not used by the BCB IDE. It is for
+# the benefit of building from the command-line using the MAKE utility.
+# ---------------------------------------------------------------------------
+
+.autodepend
+# ---------------------------------------------------------------------------
+
+!if !$d(BCC32)
+BCC32 = bcc32
+!endif
+
+!if !$d(LINKER)
+LINKER = ilink32
+!endif
+
+# ---------------------------------------------------------------------------
+!if $d(PATHC)
+.PATH.C = $(PATHC)
+!endif
+
+# ---------------------------------------------------------------------------
+pcre: INCLUDES TABLES $(OBJFILES)
+
+# ---------------------------------------------------------------------------
+.c.obj:
+ $(BCC)\BIN\$(BCC32) -c $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< }
+includes:
+ @copy /Y $(pcresrc)\config.h.in $(pcresrc)\config.h
+tables:
+ $(BCC)\BIN\$(BCC32) -c -tWC $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n.\ $(pcresrc)\dftables.c
+ $(BCC)\BIN\$(LINKER) $(LFLAGS) -L$(LIBPATH) c0x32.obj .\dftables.obj, .\dftables.exe,, $(ALLLIB),,
+ del dftables.tds
+ del dftables.obj
+ dftables.exe pcre_default_tables.c
+ del dftables.exe
+# ---------------------------------------------------------------------------
+
+
+
+
Added: trunk/jcl/source/windows/obj/pcre/pcre_compile.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_compile.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_config.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_config.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_default_tables.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_default_tables.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_dfa_exec.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_dfa_exec.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_exec.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_exec.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_fullinfo.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_fullinfo.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_get.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_get.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_globals.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_globals.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_info.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_info.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_maketables.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_maketables.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_newline.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_newline.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_ord2utf8.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_ord2utf8.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_refcount.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_refcount.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_study.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_study.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_tables.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_tables.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_try_flipped.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_try_flipped.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_ucp_searchfuncs.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_ucp_searchfuncs.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_valid_utf8.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_valid_utf8.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_version.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_version.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/jcl/source/windows/obj/pcre/pcre_xclass.obj
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/source/windows/obj/pcre/pcre_xclass.obj
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Deleted: trunk/thirdparty/pcre/pcre-6.7.tar.gz
===================================================================
(Binary files differ)
Added: trunk/thirdparty/pcre/pcre-7.0.tar.gz
===================================================================
(Binary files differ)
Property changes on: trunk/thirdparty/pcre/pcre-7.0.tar.gz
___________________________________________________________________
Name: svn:mime-type
+ application/x-compressed-tar
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-12 17:44:55
|
Revision: 1918
http://svn.sourceforge.net/jcl/?rev=1918&view=rev
Author: outchy
Date: 2007-02-12 09:44:45 -0800 (Mon, 12 Feb 2007)
Log Message:
-----------
memcpy and memset do have return values
Modified Paths:
--------------
trunk/jcl/source/prototypes/zlibh.pas
trunk/jcl/source/windows/zlibh.pas
Modified: trunk/jcl/source/prototypes/zlibh.pas
===================================================================
--- trunk/jcl/source/prototypes/zlibh.pas 2007-02-10 15:33:46 UTC (rev 1917)
+++ trunk/jcl/source/prototypes/zlibh.pas 2007-02-12 17:44:45 UTC (rev 1918)
@@ -1664,14 +1664,16 @@
{$ENDIF LINK_TO_MSVCRT}
{$IFNDEF LINK_LIBC}
-procedure _memcpy(dest, src: Pointer; count: size_t); cdecl;
+function _memcpy(dest, src: Pointer; count: size_t): Pointer; cdecl;
begin
Move(src^, dest^, count);
+ Result := dest;
end;
-procedure _memset(dest: Pointer; val: Integer; count: size_t); cdecl;
+function _memset(dest: Pointer; val: Integer; count: size_t): Pointer; cdecl;
begin
FillChar(dest^, count, val);
+ Result := dest;
end;
function _malloc(size: size_t): Pointer; cdecl;
Modified: trunk/jcl/source/windows/zlibh.pas
===================================================================
--- trunk/jcl/source/windows/zlibh.pas 2007-02-10 15:33:46 UTC (rev 1917)
+++ trunk/jcl/source/windows/zlibh.pas 2007-02-12 17:44:45 UTC (rev 1918)
@@ -1576,14 +1576,16 @@
{$ENDIF LINK_TO_MSVCRT}
{$IFNDEF LINK_LIBC}
-procedure _memcpy(dest, src: Pointer; count: size_t); cdecl;
+function _memcpy(dest, src: Pointer; count: size_t): Pointer; cdecl;
begin
Move(src^, dest^, count);
+ Result := dest;
end;
-procedure _memset(dest: Pointer; val: Integer; count: size_t); cdecl;
+function _memset(dest: Pointer; val: Integer; count: size_t): Pointer; cdecl;
begin
FillChar(dest^, count, val);
+ Result := dest;
end;
function _malloc(size: size_t): Pointer; cdecl;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sch...@us...> - 2007-02-10 15:33:50
|
Revision: 1917
http://svn.sourceforge.net/jcl/?rev=1917&view=rev
Author: schuettecarsten
Date: 2007-02-10 07:33:46 -0800 (Sat, 10 Feb 2007)
Log Message:
-----------
Added new property "AttachmentFiles" to specify a different file name for an attachment
Modified Paths:
--------------
trunk/jcl/source/windows/JclMapi.pas
Modified: trunk/jcl/source/windows/JclMapi.pas
===================================================================
--- trunk/jcl/source/windows/JclMapi.pas 2007-02-10 13:01:00 UTC (rev 1916)
+++ trunk/jcl/source/windows/JclMapi.pas 2007-02-10 15:33:46 UTC (rev 1917)
@@ -31,7 +31,7 @@
// Last modified: $Date$
-unit JclMapi;
+unit JclMapi;
{$I jcl.inc}
@@ -213,7 +213,9 @@
FSessionHandle: THandle;
FSubject: string;
FTaskWindowList: TJclTaskWindowsList;
+ FAttachmentFiles: TStringList;
function GetAttachments: TStrings;
+ function GetAttachmentFiles: TStrings;
function GetParentWnd: THandle;
function GetUserLogged: Boolean;
procedure SetBody(const Value: string);
@@ -242,6 +244,7 @@
function Send(ShowDialog: Boolean = True): Boolean;
procedure SortAttachments;
property Attachments: TStrings read GetAttachments;
+ property AttachmentFiles: TStrings read GetAttachmentFiles;
property Body: string read FBody write SetBody;
property FindOptions: TJclEmailFindOptions read FFindOptions write FFindOptions;
property HtmlBody: Boolean read FHtmlBody write FHtmlBody;
@@ -778,6 +781,7 @@
begin
inherited Create;
FAttachments := TStringList.Create;
+ FAttachmentFiles := TStringList.Create;
FLogonOptions := [loLogonUI];
FFindOptions := [foFifo];
FRecipients := TJclEmailRecips.Create(True);
@@ -786,6 +790,7 @@
destructor TJclEmail.Destroy;
begin
+ FreeAndNil(FAttachmentFiles);
FreeAndNil(FAttachments);
FreeAndNil(FRecipients);
inherited Destroy;
@@ -821,6 +826,7 @@
procedure TJclEmail.Clear;
begin
Attachments.Clear;
+ AttachmentFiles.Clear;
Body := '';
FSubject := '';
Recipients.Clear;
@@ -911,6 +917,11 @@
Result := FAttachments;
end;
+function TJclEmail.GetAttachmentFiles: TStrings;
+begin
+ Result := FAttachmentFiles;
+end;
+
function TJclEmail.GetParentWnd: THandle;
begin
if FParentWndValid then
@@ -936,7 +947,7 @@
Flags, Res: DWORD;
I: Integer;
MsgID: array [0..512] of AnsiChar;
- HtmlBodyFileName: string;
+ AttachmentFileName, HtmlBodyFileName: string;
begin
if not AnyClientInstalled then
raise EJclMapiError.CreateRes(@RsMapiMailNoClient);
@@ -947,6 +958,7 @@
begin
HtmlBodyFileName := FindUnusedFileName(PathAddSeparator(GetWindowsTempFolder) + 'JclMapi', 'htm', 'Temp');
Attachments.Insert(0, HtmlBodyFileName);
+ AttachmentFiles.Insert(0, '');
StringToFile(HtmlBodyFileName, Body);
end;
// Create attachments
@@ -955,13 +967,21 @@
SetLength(AttachArray, Attachments.Count);
for I := 0 to Attachments.Count - 1 do
begin
- if not FileExists(Attachments[I]) then
- MapiCheck(MAPI_E_ATTACHMENT_NOT_FOUND, False);
- Attachments[I] := ExpandFileName(Attachments[I]);
FillChar(AttachArray[I], SizeOf(TMapiFileDesc), #0);
AttachArray[I].nPosition := DWORD(-1);
- AttachArray[I].lpszFileName := nil;
- AttachArray[I].lpszPathName := PChar(Attachments[I]);
+ if (AttachmentFiles.Count > I) and (AttachmentFiles[I] <> '') then
+ begin
+ AttachmentFileName := ExpandFileName(AttachmentFiles[I]);
+ AttachArray[I].lpszFileName := PChar(Attachments[I]);
+ end
+ else
+ begin
+ AttachmentFileName := ExpandFileName(Attachments[I]);
+ AttachArray[I].lpszFileName := nil;
+ end;
+ AttachArray[I].lpszPathName := PChar(AttachmentFileName);
+ if not FileExists(AttachmentFileName) then
+ MapiCheck(MAPI_E_ATTACHMENT_NOT_FOUND, False);
end;
end
else
@@ -1240,8 +1260,37 @@
end;
procedure TJclEmail.SortAttachments;
+var
+ S, T, U: TStringList;
+ I, Nr: Integer;
begin
- FAttachments.Sort;
+ // This is confusing, quick and very dirty.
+ S := TStringList.Create;
+ try
+ S.Capacity := FAttachments.Count;
+ for I := 0 to Pred(FAttachments.Count) do
+ S.AddObject(FAttachments[I], Pointer(I));
+ S.Sort;
+ T := TStringList.Create;
+ U := TStringList.Create;
+ try
+ T.Capacity := S.Count;
+ U.Capacity := S.Count;
+ for I := 0 to Pred(S.Count) do
+ begin
+ Nr := Integer(S.Objects[I]);
+ T.AddObject(FAttachments[Nr], FAttachments.Objects[Nr]);
+ U.AddObject(FAttachmentFiles[Nr], FAttachmentFiles.Objects[Nr]);
+ end;
+ FAttachments.Assign(T);
+ FAttachmentFiles.Assign(U);
+ finally
+ U.Free;
+ T.Free;
+ end;
+ finally
+ S.Free;
+ end;
end;
//=== Simple email send function =============================================
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <usc...@us...> - 2007-02-10 13:01:02
|
Revision: 1916
http://svn.sourceforge.net/jcl/?rev=1916&view=rev
Author: uschuster
Date: 2007-02-10 05:01:00 -0800 (Sat, 10 Feb 2007)
Log Message:
-----------
fixed to compile without KEEP_DEPRECATED
Modified Paths:
--------------
trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas
trunk/jcl/experts/debug/dialog/ExceptDlg.pas
Modified: trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas 2007-02-08 17:41:45 UTC (rev 1915)
+++ trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas 2007-02-10 13:01:00 UTC (rev 1916)
@@ -94,7 +94,7 @@
uses
ClipBrd, Math,
- JclBase, JclFileUtils, JclHookExcept, JclPeImage, JclStrings, JclSysInfo;
+ JclBase, JclFileUtils, JclHookExcept, JclPeImage, JclStrings, JclSysInfo, JclWin32;
resourcestring
RsAppError = '%s - application error';
@@ -284,13 +284,15 @@
%if ModuleList SL: TStringList;
I: Integer;
ModuleName: TFileName;
- NtHeaders: PImageNtHeaders;
+ NtHeaders32: PImageNtHeaders32;
+ NtHeaders64: PImageNtHeaders64;
ModuleBase: Cardinal;
ImageBaseStr: string;%endif
%if ActiveControls C: TWinControl;%endif
%if OSInfo CpuInfo: TCpuInfo;
ProcessorDetails: string;%endif
%if StackList StackList: TJclStackInfoList;%endif
+ PETarget: TJclPeTarget;
begin
SL := TStringList.Create;
try
@@ -346,10 +348,20 @@
ModuleName := SL[I];
ModuleBase := Cardinal(SL.Objects[I]);
DetailsMemo.Lines.Add(Format('[%.8x] %s', [ModuleBase, ModuleName]));
- NtHeaders := PeMapImgNtHeaders(Pointer(ModuleBase));
- if (NtHeaders <> nil) and (NtHeaders^.OptionalHeader.ImageBase <> ModuleBase) then
- ImageBaseStr := Format('<%.8x> ', [NtHeaders^.OptionalHeader.ImageBase])
+ PETarget := PeMapImgTarget(Pointer(ModuleBase));
+ NtHeaders32 := nil;
+ NtHeaders64 := nil;
+ if PETarget = taWin32 then
+ NtHeaders32 := PeMapImgNtHeaders32(Pointer(ModuleBase))
else
+ if PETarget = taWin64 then
+ NtHeaders64 := PeMapImgNtHeaders64(Pointer(ModuleBase));
+ if (NtHeaders32 <> nil) and (NtHeaders32^.OptionalHeader.ImageBase <> ModuleBase) then
+ ImageBaseStr := Format('<%.8x> ', [NtHeaders32^.OptionalHeader.ImageBase])
+ else
+ if (NtHeaders64 <> nil) and (NtHeaders64^.OptionalHeader.ImageBase <> ModuleBase) then
+ ImageBaseStr := Format('<%.8x> ', [NtHeaders64^.OptionalHeader.ImageBase])
+ else
ImageBaseStr := StrRepeat(' ', 11);
if VersionResourceAvailable(ModuleName) then
with TJclFileVersionInfo.Create(ModuleName) do
Modified: trunk/jcl/experts/debug/dialog/ExceptDlg.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/ExceptDlg.pas 2007-02-08 17:41:45 UTC (rev 1915)
+++ trunk/jcl/experts/debug/dialog/ExceptDlg.pas 2007-02-10 13:01:00 UTC (rev 1916)
@@ -118,7 +118,7 @@
uses
ClipBrd, Math,
- JclBase, JclFileUtils, JclHookExcept, JclPeImage, JclStrings, JclSysInfo, JclSysUtils;
+ JclBase, JclFileUtils, JclHookExcept, JclPeImage, JclStrings, JclSysInfo, JclSysUtils, JclWin32;
resourcestring
RsAppError = '%s - application error';
@@ -406,10 +406,12 @@
ModuleName: TFileName;
CpuInfo: TCpuInfo;
C: TWinControl;
- NtHeaders: PImageNtHeaders;
+ NtHeaders32: PImageNtHeaders32;
+ NtHeaders64: PImageNtHeaders64;
ModuleBase: Cardinal;
ImageBaseStr: string;
StackList: TJclStackInfoList;
+ PETarget: TJclPeTarget;
begin
SL := TStringList.Create;
try
@@ -447,10 +449,20 @@
ModuleName := SL[I];
ModuleBase := Cardinal(SL.Objects[I]);
DetailsMemo.Lines.Add(Format('[%.8x] %s', [ModuleBase, ModuleName]));
- NtHeaders := PeMapImgNtHeaders(Pointer(ModuleBase));
- if (NtHeaders <> nil) and (NtHeaders^.OptionalHeader.ImageBase <> ModuleBase) then
- ImageBaseStr := Format('<%.8x> ', [NtHeaders^.OptionalHeader.ImageBase])
+ PETarget := PeMapImgTarget(Pointer(ModuleBase));
+ NtHeaders32 := nil;
+ NtHeaders64 := nil;
+ if PETarget = taWin32 then
+ NtHeaders32 := PeMapImgNtHeaders32(Pointer(ModuleBase))
else
+ if PETarget = taWin64 then
+ NtHeaders64 := PeMapImgNtHeaders64(Pointer(ModuleBase));
+ if (NtHeaders32 <> nil) and (NtHeaders32^.OptionalHeader.ImageBase <> ModuleBase) then
+ ImageBaseStr := Format('<%.8x> ', [NtHeaders32^.OptionalHeader.ImageBase])
+ else
+ if (NtHeaders64 <> nil) and (NtHeaders64^.OptionalHeader.ImageBase <> ModuleBase) then
+ ImageBaseStr := Format('<%.8x> ', [NtHeaders64^.OptionalHeader.ImageBase])
+ else
ImageBaseStr := StrRepeat(' ', 11);
if VersionResourceAvailable(ModuleName) then
with TJclFileVersionInfo.Create(ModuleName) do
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-08 17:42:20
|
Revision: 1915
http://svn.sourceforge.net/jcl/?rev=1915&view=rev
Author: outchy
Date: 2007-02-08 09:41:45 -0800 (Thu, 08 Feb 2007)
Log Message:
-----------
Scripts for Linux and Win to generate included files
Added Paths:
-----------
trunk/jcl/devtools/included_files.bat
trunk/jcl/devtools/included_files.sh
Added: trunk/jcl/devtools/included_files.bat
===================================================================
--- trunk/jcl/devtools/included_files.bat (rev 0)
+++ trunk/jcl/devtools/included_files.bat 2007-02-08 17:41:45 UTC (rev 1915)
@@ -0,0 +1,15 @@
+rem shell script to create templates
+
+copy ..\source\jcl.template.inc ..\source\jclc5.inc
+copy ..\source\jcl.template.inc ..\source\jclc6.inc
+copy ..\source\jcl.template.inc ..\source\jclkc3.inc
+copy ..\source\jcl.template.inc ..\source\jclkd3.inc
+copy ..\source\jcl.template.inc ..\source\jcld5.inc
+copy ..\source\jcl.template.inc ..\source\jcld6.inc
+copy ..\source\jcl.template.inc ..\source\jcld7.inc
+copy ..\source\jcl.template.inc ..\source\jclcs1.inc
+copy ..\source\jcl.template.inc ..\source\jcld8.inc
+copy ..\source\jcl.template.inc ..\source\jcld9.inc
+copy ..\source\jcl.template.inc ..\source\jcld9.net.inc
+copy ..\source\jcl.template.inc ..\source\jcld10.inc
+copy ..\source\jcl.template.inc ..\source\jcld10.net.inc
Property changes on: trunk/jcl/devtools/included_files.bat
___________________________________________________________________
Name: svn:keywords
+ URL HeadURL Author LastChangedBy Date LastChangedDate Rev Revision LastChangedRevision Id
Name: svn:eol-style
+ native
Added: trunk/jcl/devtools/included_files.sh
===================================================================
--- trunk/jcl/devtools/included_files.sh (rev 0)
+++ trunk/jcl/devtools/included_files.sh 2007-02-08 17:41:45 UTC (rev 1915)
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# shell script to create templates
+
+cp ../source/jcl.template.inc ../source/jclc5.inc
+cp ../source/jcl.template.inc ../source/jclc6.inc
+cp ../source/jcl.template.inc ../source/jclkc3.inc
+cp ../source/jcl.template.inc ../source/jclkd3.inc
+cp ../source/jcl.template.inc ../source/jcld5.inc
+cp ../source/jcl.template.inc ../source/jcld6.inc
+cp ../source/jcl.template.inc ../source/jcld7.inc
+cp ../source/jcl.template.inc ../source/jclcs1.inc
+cp ../source/jcl.template.inc ../source/jcld8.inc
+cp ../source/jcl.template.inc ../source/jcld9.inc
+cp ../source/jcl.template.inc ../source/jcld9.net.inc
+cp ../source/jcl.template.inc ../source/jcld10.inc
+cp ../source/jcl.template.inc ../source/jcld10.net.inc
Property changes on: trunk/jcl/devtools/included_files.sh
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ URL HeadURL Author LastChangedBy Date LastChangedDate Rev Revision LastChangedRevision Id
Name: svn:eol-style
+ native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-07 19:18:04
|
Revision: 1914
http://svn.sourceforge.net/jcl/?rev=1914&view=rev
Author: outchy
Date: 2007-02-07 11:17:57 -0800 (Wed, 07 Feb 2007)
Log Message:
-----------
Mantis 3945 Donation of file summary functions by ZENsan
Modified Paths:
--------------
trunk/jcl/source/common/JclResources.pas
trunk/jcl/source/prototypes/JclWin32.pas
trunk/jcl/source/windows/JclNTFS.pas
trunk/jcl/source/windows/JclWin32.pas
Added Paths:
-----------
trunk/jcl/examples/windows/filesummary/
trunk/jcl/examples/windows/filesummary/FileSummaryDemoMain.dfm
trunk/jcl/examples/windows/filesummary/FileSummaryDemoMain.pas
trunk/jcl/examples/windows/filesummary/FileSummaryExample.dof
trunk/jcl/examples/windows/filesummary/FileSummaryExample.dpr
trunk/jcl/examples/windows/filesummary/FileSummaryExample.res
trunk/jcl/source/prototypes/win32api/ImgGuids.int
trunk/jcl/source/prototypes/win32api/MsiDefs.int
trunk/jcl/source/prototypes/win32api/ObjBase.imp
trunk/jcl/source/prototypes/win32api/ObjBase.int
trunk/jcl/source/prototypes/win32api/PropIdl.int
trunk/jcl/source/prototypes/win32api/ShlGuid.int
Property changes on: trunk/jcl/examples/windows/filesummary
___________________________________________________________________
Name: bugtraq:url
+ http://homepages.codegear.com/jedi/issuetracker/view.php?id=%BUGID%
Name: bugtraq:message
+ (Mantis #%BUGID%)
Name: svn:ignore
+ makefile.mak
*.identcache
*.local
*.cfg
*.drc
Name: bugtraq:logregex
+ [Mm]antis #?(\d+)(,? ?#?(\d+))+
(\d+)
Added: trunk/jcl/examples/windows/filesummary/FileSummaryDemoMain.dfm
===================================================================
--- trunk/jcl/examples/windows/filesummary/FileSummaryDemoMain.dfm (rev 0)
+++ trunk/jcl/examples/windows/filesummary/FileSummaryDemoMain.dfm 2007-02-07 19:17:57 UTC (rev 1914)
@@ -0,0 +1,56 @@
+object FormMain: TFormMain
+ Left = 0
+ Top = 0
+ Width = 440
+ Height = 552
+ Caption = ';'
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ OldCreateOrder = False
+ PixelsPerInch = 96
+ TextHeight = 13
+ object DriveComboBox1: TDriveComboBox
+ Left = 8
+ Top = 8
+ Width = 193
+ Height = 19
+ Anchors = [akLeft, akTop, akRight]
+ DirList = DirectoryListBox1
+ TabOrder = 0
+ end
+ object Memo1: TMemo
+ Left = 8
+ Top = 248
+ Width = 416
+ Height = 269
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ Lines.Strings = (
+ 'Select a file to have its properties')
+ ScrollBars = ssBoth
+ TabOrder = 1
+ end
+ object FileListBox1: TFileListBox
+ Left = 207
+ Top = 8
+ Width = 217
+ Height = 234
+ Anchors = [akTop, akRight]
+ ItemHeight = 13
+ TabOrder = 2
+ OnChange = FileListBox1Change
+ end
+ object DirectoryListBox1: TDirectoryListBox
+ Left = 8
+ Top = 33
+ Width = 193
+ Height = 209
+ Anchors = [akLeft, akTop, akRight]
+ FileList = FileListBox1
+ ItemHeight = 16
+ TabOrder = 3
+ end
+end
Property changes on: trunk/jcl/examples/windows/filesummary/FileSummaryDemoMain.dfm
___________________________________________________________________
Name: svn:keywords
+ URL HeadURL Author LastChangedBy Date LastChangedDate Rev Revision LastChangedRevision Id
Name: svn:eol-style
+ native
Added: trunk/jcl/examples/windows/filesummary/FileSummaryDemoMain.pas
===================================================================
--- trunk/jcl/examples/windows/filesummary/FileSummaryDemoMain.pas (rev 0)
+++ trunk/jcl/examples/windows/filesummary/FileSummaryDemoMain.pas 2007-02-07 19:17:57 UTC (rev 1914)
@@ -0,0 +1,309 @@
+unit FileSummaryDemoMain;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
+ Dialogs, StdCtrls, FileCtrl, ActiveX, JclNTFS;
+
+type
+ TFormMain = class(TForm)
+ DriveComboBox1: TDriveComboBox;
+ Memo1: TMemo;
+ FileListBox1: TFileListBox;
+ DirectoryListBox1: TDirectoryListBox;
+ procedure FileListBox1Change(Sender: TObject);
+ private
+ FFileSummary: TJclFileSummary;
+ procedure UpdateFileSummary(const FileName: string);
+ public
+ end;
+
+var
+ FormMain: TFormMain;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ JclSysUtils;
+
+procedure TFormMain.FileListBox1Change(Sender: TObject);
+begin
+ if FileListBox1.FileName <> '' then
+ UpdateFileSummary(FileListBox1.FileName);
+end;
+
+procedure TFormMain.UpdateFileSummary(const FileName: string);
+ function FileTimeToString(const FileTime: TFileTime): string;
+ var
+ ASystemTime: TSystemTime;
+ begin
+ if FileTimeToSystemTime(FileTime, ASystemTime) then
+ Result := Format('%d/%d/%d %d:%d:%d', [ASystemTime.wYear, ASystemTime.wMonth, ASystemTime.wDay,
+ ASystemTime.wHour, ASystemTime.wMinute, ASystemTime.wSecond])
+ else
+ Result := '';
+ end;
+var
+ AFilePropertySet: TJclFilePropertySet;
+ AFileSummaryInformation: TJclFileSummaryInformation;
+ ADocumentSummaryInformation: TJclDocSummaryInformation;
+ AMediaFileSummaryInformation: TJclMediaFileSummaryInformation;
+ AMSISummaryInformation: TJclMSISummaryInformation;
+ AVideoSummaryInformation: TJclVideoSummaryInformation;
+ AAudioSummaryInformation: TJclAudioSummaryInformation;
+begin
+ Memo1.Lines.Clear;
+ FFileSummary := TJclFileSummary.Create(FileName, fsaRead, fssDenyAll);
+ try
+ FFileSummary.GetPropertySet(TJclFileSummaryInformation, AFileSummaryInformation);
+ if Assigned(AFileSummaryInformation) then
+ try
+ Memo1.Lines.Add('File summary');
+
+ Memo1.Lines.Add(' Title ' + AFileSummaryInformation.Title);
+ Memo1.Lines.Add(' Subject ' + AFileSummaryInformation.Subject);
+ Memo1.Lines.Add(' Author ' + AFileSummaryInformation.Author);
+ Memo1.Lines.Add(' Keywords ' + AFileSummaryInformation.KeyWords);
+ Memo1.Lines.Add(' Comments ' + AFileSummaryInformation.Comments);
+ Memo1.Lines.Add(' Template ' + AFileSummaryInformation.Template);
+ Memo1.Lines.Add(' Last author ' + AFileSummaryInformation.LastAuthor);
+ Memo1.Lines.Add(' Revision numer ' + AFileSummaryInformation.RevNumber);
+ Memo1.Lines.Add(' Edit time ' + FileTimeToString(AFileSummaryInformation.EditTime));
+ Memo1.Lines.Add(' Last printed time ' + FileTimeToString(AFileSummaryInformation.LastPrintedTime));
+ Memo1.Lines.Add(' Creation time ' + FileTimeToString(AFileSummaryInformation.CreationTime));
+ Memo1.Lines.Add(' Last save time ' + FileTimeToString(AFileSummaryInformation.LastSaveTime));
+ Memo1.Lines.Add(' Page count ' + IntToStr(AFileSummaryInformation.PageCount));
+ Memo1.Lines.Add(' Word count ' + IntToStr(AFileSummaryInformation.WordCount));
+ Memo1.Lines.Add(' Char count ' + IntToStr(AFileSummaryInformation.CharCount));
+ //AFileSummaryInformation.Thumnail
+ Memo1.Lines.Add(' App name ' + AFileSummaryInformation.AppName);
+ Memo1.Lines.Add(' Security ' + IntToStr(AFileSummaryInformation.Security));
+ finally
+ AFileSummaryInformation.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclDocSummaryInformation, ADocumentSummaryInformation);
+ if Assigned(ADocumentSummaryInformation) then
+ try
+ Memo1.Lines.Add('Document summary');
+ Memo1.Lines.Add(' Category ' + ADocumentSummaryInformation.Category);
+ Memo1.Lines.Add(' Pres format ' + ADocumentSummaryInformation.PresFormat);
+ Memo1.Lines.Add(' Byte count ' + IntToStr(ADocumentSummaryInformation.ByteCount));
+ Memo1.Lines.Add(' Line count ' + IntToStr(ADocumentSummaryInformation.LineCount));
+ Memo1.Lines.Add(' Par count ' + IntToStr(ADocumentSummaryInformation.ParCount));
+ Memo1.Lines.Add(' Slide count ' + IntToStr(ADocumentSummaryInformation.SlideCount));
+ Memo1.Lines.Add(' Note count ' + IntToStr(ADocumentSummaryInformation.NoteCount));
+ Memo1.Lines.Add(' Hidden count ' + IntToStr(ADocumentSummaryInformation.HiddenCount));
+ Memo1.Lines.Add(' MM Clip count ' + IntToStr(ADocumentSummaryInformation.MMClipCount));
+ Memo1.Lines.Add(' Scale ' + BooleanToStr(ADocumentSummaryInformation.Scale));
+ //ADocumentSummaryInformation.HeadingPair
+ //ADocumentSummaryInformation.DocParts
+ Memo1.Lines.Add(' Manager ' + ADocumentSummaryInformation.Manager);
+ Memo1.Lines.Add(' Company ' + ADocumentSummaryInformation.Company);
+ Memo1.Lines.Add(' Links dirty ' + BooleanToStr(ADocumentSummaryInformation.LinksDirty));
+ finally
+ ADocumentSummaryInformation.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclMediaFileSummaryInformation, AMediaFileSummaryInformation);
+ if Assigned(AMediaFileSummaryInformation) then
+ try
+ Memo1.Lines.Add('Media file');
+ Memo1.Lines.Add(' Supplier ' + AMediaFileSummaryInformation.Supplier);
+ Memo1.Lines.Add(' Source ' + AMediaFileSummaryInformation.Source);
+ Memo1.Lines.Add(' Sequence no ' + AMediaFileSummaryInformation.SequenceNo);
+ Memo1.Lines.Add(' Project ' + AMediaFileSummaryInformation.Project);
+ Memo1.Lines.Add(' Status ' + IntToStr(AMediaFileSummaryInformation.Status));
+ Memo1.Lines.Add(' Owner ' + AMediaFileSummaryInformation.Owner);
+ Memo1.Lines.Add(' Rating ' + AMediaFileSummaryInformation.Rating);
+ Memo1.Lines.Add(' Production ' + FileTimeToString(AMediaFileSummaryInformation.Production));
+ Memo1.Lines.Add(' Copyright ' + AMediaFileSummaryInformation.Copyright);
+ finally
+ AMediaFileSummaryInformation.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclMSISummaryInformation, AMSISummaryInformation);
+ if Assigned(AMSISummaryInformation) then
+ try
+ Memo1.Lines.Add('MSI summary');
+ Memo1.Lines.Add(' Version ' + IntToStr(AMSISummaryInformation.Version));
+ Memo1.Lines.Add(' Source ' + IntToStr(AMSISummaryInformation.Source));
+ Memo1.Lines.Add(' Restrict ' + IntToStr(AMSISummaryInformation.Restrict));
+ finally
+ AMSISummaryInformation.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclShellSummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Shell summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclStorageSummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Storage summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclImageSummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Image summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclDisplacedSummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Displaced summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclBriefCaseSummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Briefcase summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclMiscSummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Misc summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclWebViewSummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Webview summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclMusicSummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Music summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclDRMSummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('DRM summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclVideoSummaryInformation, AVideoSummaryInformation);
+ if Assigned(AVideoSummaryInformation) then
+ try
+ Memo1.Lines.Add('Video summary');
+ Memo1.Lines.Add(' Stream name ' + AVideoSummaryInformation.StreamName);
+ Memo1.Lines.Add(' Width ' + IntToStr(AVideoSummaryInformation.Width));
+ Memo1.Lines.Add(' Height ' + IntToStr(AVideoSummaryInformation.Height));
+ Memo1.Lines.Add(' Time length(ms) ' + IntToStr(AVideoSummaryInformation.TimeLength));
+ Memo1.Lines.Add(' Frame count ' + IntToStr(AVideoSummaryInformation.FrameCount));
+ Memo1.Lines.Add(' Frame rate ' + IntToStr(AVideoSummaryInformation.FrameRate));
+ Memo1.Lines.Add(' Data rate ' + IntToStr(AVideoSummaryInformation.DataRate));
+ Memo1.Lines.Add(' Sample size ' + IntToStr(AVideoSummaryInformation.SampleSize));
+ Memo1.Lines.Add(' Compression ' + AVideoSummaryInformation.Compression);
+ Memo1.Lines.Add(' Stream number ' + IntToStr(AVideoSummaryInformation.StreamNumber));
+ finally
+ AVideoSummaryInformation.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclAudioSummaryInformation, AAudioSummaryInformation);
+ if Assigned(AAudioSummaryInformation) then
+ try
+ Memo1.Lines.Add('Audio summary');
+ Memo1.Lines.Add(' Format ' + AAudioSummaryInformation.Format);
+ Memo1.Lines.Add(' Time length ' + IntToStr(AAudioSummaryInformation.TimeLength));
+ Memo1.Lines.Add(' Average data rate ' + IntToStr(AAudioSummaryInformation.AverageDataRate));
+ Memo1.Lines.Add(' Sample rate ' + IntToStr(AAudioSummaryInformation.SampleRate));
+ Memo1.Lines.Add(' Sample size ' + IntToStr(AAudioSummaryInformation.SampleSize));
+ Memo1.Lines.Add(' Channel count ' + IntToStr(AAudioSummaryInformation.ChannelCount));
+ Memo1.Lines.Add(' Stream number ' + IntToStr(AAudioSummaryInformation.StreamNumber));
+ Memo1.Lines.Add(' Stream name ' + AAudioSummaryInformation.StreamName);
+ Memo1.Lines.Add(' Compression ' + AAudioSummaryInformation.Compression);
+ finally
+ AAudioSummaryInformation.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclControlPanelSummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Control panel summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclVolumeSummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Volume summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclShareSummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Share summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclLinkSummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Link summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclQuerySummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Query summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclImageInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Image');
+ finally
+ AFilePropertySet.Free;
+ end;
+
+ FFileSummary.GetPropertySet(TJclJpegSummaryInformation, AFilePropertySet);
+ if Assigned(AFilePropertySet) then
+ try
+ Memo1.Lines.Add('Jpeg summary');
+ finally
+ AFilePropertySet.Free;
+ end;
+ finally
+ FreeAndNil(FFileSummary);
+ end;
+
+ if Memo1.Lines.Count = 0 then
+ Memo1.Lines.Add('No properties');
+end;
+
+end.
Property changes on: trunk/jcl/examples/windows/filesummary/FileSummaryDemoMain.pas
___________________________________________________________________
Name: svn:keywords
+ URL HeadURL Author LastChangedBy Date LastChangedDate Rev Revision LastChangedRevision Id
Name: svn:eol-style
+ native
Added: trunk/jcl/examples/windows/filesummary/FileSummaryExample.dof
===================================================================
--- trunk/jcl/examples/windows/filesummary/FileSummaryExample.dof (rev 0)
+++ trunk/jcl/examples/windows/filesummary/FileSummaryExample.dof 2007-02-07 19:17:57 UTC (rev 1914)
@@ -0,0 +1,3 @@
+[Directories]
+OutputDir=..\..\..\bin
+
Property changes on: trunk/jcl/examples/windows/filesummary/FileSummaryExample.dof
___________________________________________________________________
Name: svn:keywords
+ URL HeadURL Author LastChangedBy Date LastChangedDate Rev Revision LastChangedRevision Id
Name: svn:eol-style
+ native
Added: trunk/jcl/examples/windows/filesummary/FileSummaryExample.dpr
===================================================================
--- trunk/jcl/examples/windows/filesummary/FileSummaryExample.dpr (rev 0)
+++ trunk/jcl/examples/windows/filesummary/FileSummaryExample.dpr 2007-02-07 19:17:57 UTC (rev 1914)
@@ -0,0 +1,13 @@
+program FileSummaryExample;
+
+uses
+ Forms,
+ FileSummaryDemoMain in 'FileSummaryDemoMain.pas' {FormMain};
+
+{$R *.res}
+
+begin
+ Application.Initialize;
+ Application.CreateForm(TFormMain, FormMain);
+ Application.Run;
+end.
Property changes on: trunk/jcl/examples/windows/filesummary/FileSummaryExample.dpr
___________________________________________________________________
Name: svn:keywords
+ URL HeadURL Author LastChangedBy Date LastChangedDate Rev Revision LastChangedRevision Id
Name: svn:eol-style
+ native
Added: trunk/jcl/examples/windows/filesummary/FileSummaryExample.res
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/examples/windows/filesummary/FileSummaryExample.res
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/jcl/source/common/JclResources.pas
===================================================================
--- trunk/jcl/source/common/JclResources.pas 2007-02-06 17:28:14 UTC (rev 1913)
+++ trunk/jcl/source/common/JclResources.pas 2007-02-07 19:17:57 UTC (rev 1914)
@@ -1274,6 +1274,8 @@
resourcestring
RsInvalidArgument = '%s: Invalid argument <%s>';
RsNtfsUnableToDeleteSymbolicLink = 'Unable to delete temporary symbolic link';
+ RsEUnableToCreatePropertyStorage = 'Unable to create property storage';
+ RsEIncomatibleDataFormat = 'Incompatible data format';
//=== JclPCRE ================================================================
resourcestring
Modified: trunk/jcl/source/prototypes/JclWin32.pas
===================================================================
--- trunk/jcl/source/prototypes/JclWin32.pas 2007-02-06 17:28:14 UTC (rev 1913)
+++ trunk/jcl/source/prototypes/JclWin32.pas 2007-02-07 19:17:57 UTC (rev 1914)
@@ -98,8 +98,12 @@
{$HPPEMIT '#include "WinIoCtl.h"'}
{$HPPEMIT '#include "WinUser.h"'}
{$HPPEMIT '#include "Powrprof.h"}
-
{$HPPEMIT '#include <delayimp.h>'}
+{$HPPEMIT '#include "propidl.h"'}
+{$HPPEMIT '#include "msidefs.h"'}
+{$HPPEMIT '#include "shlguid.h"'}
+{$HPPEMIT '#include "imgguids.h"}
+{$HPPEMIT '#include "objbase.h"}
{$HPPEMIT ''}
{$IFDEF CLR}
@@ -138,8 +142,12 @@
{$I win32api\WinNLS.int}
{$I win32api\WinUser.int}
{$I win32api\PowrProf.int}
-
{$I win32api\DelayImp.int}
+{$I win32api\PropIdl.int}
+{$I win32api\MsiDefs.int}
+{$I win32api\ShlGuid.int}
+{$I win32api\imgguids.int}
+{$I win32api\ObjBase.int}
{$IFDEF MSWINDOWS}
@@ -263,6 +271,7 @@
{$I win32api\WinNLS.imp}
{$I win32api\WinNT.imp}
{$I win32api\PowrProf.imp}
+{$I win32api\ObjBase.imp}
{$IFDEF UNITVERSIONING}
initialization
Added: trunk/jcl/source/prototypes/win32api/ImgGuids.int
===================================================================
--- trunk/jcl/source/prototypes/win32api/ImgGuids.int (rev 0)
+++ trunk/jcl/source/prototypes/win32api/ImgGuids.int 2007-02-07 19:17:57 UTC (rev 1914)
@@ -0,0 +1,9 @@
+// imgguids.h line 75
+
+// Property sets
+const
+ FMTID_ImageInformation: TGUID = '{e5836cbe-5eef-4f1d-acde-ae4c43b608ce}';
+ {$EXTERNALSYM FMTID_ImageInformation}
+ FMTID_JpegAppHeaders: TGUID = '{1c4afdcd-6177-43cf-abc7-5f51af39ee85}';
+ {$EXTERNALSYM FMTID_JpegAppHeaders}
+
Property changes on: trunk/jcl/source/prototypes/win32api/ImgGuids.int
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: trunk/jcl/source/prototypes/win32api/MsiDefs.int
===================================================================
--- trunk/jcl/source/prototypes/win32api/MsiDefs.int (rev 0)
+++ trunk/jcl/source/prototypes/win32api/MsiDefs.int 2007-02-07 19:17:57 UTC (rev 1914)
@@ -0,0 +1,12 @@
+// msidefs.h line 349
+
+// PIDs given specific meanings for Installer
+
+const
+ PID_MSIVERSION = $0000000E; // integer, Installer version number (major*100+minor)
+ {$EXTERNALSYM PID_MSIVERSION}
+ PID_MSISOURCE = $0000000F; // integer, type of file image, short/long, media/tree
+ {$EXTERNALSYM PID_MSISOURCE}
+ PID_MSIRESTRICT = $00000010; // integer, transform restrictions
+ {$EXTERNALSYM PID_MSIRESTRICT}
+
Property changes on: trunk/jcl/source/prototypes/win32api/MsiDefs.int
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: trunk/jcl/source/prototypes/win32api/ObjBase.imp
===================================================================
--- trunk/jcl/source/prototypes/win32api/ObjBase.imp (rev 0)
+++ trunk/jcl/source/prototypes/win32api/ObjBase.imp 2007-02-07 19:17:57 UTC (rev 1914)
@@ -0,0 +1,36 @@
+{$IFDEF MSWINDOWS}
+
+{$IFNDEF CLR}
+
+const
+ Ole32Lib = 'ole32.dll';
+
+var
+ _StgCreateStorageEx: Pointer;
+
+function StgCreateStorageEx;
+begin
+ GetProcedureAddress(_StgCreateStorageEx, Ole32Lib, 'StgCreateStorageEx');
+ asm
+ mov esp, ebp
+ pop ebp
+ jmp [_StgCreateStorageEx]
+ end;
+end;
+
+var
+ _StgOpenStorageEx: Pointer;
+
+function StgOpenStorageEx;
+begin
+ GetProcedureAddress(_StgOpenStorageEx, Ole32Lib, 'StgOpenStorageEx');
+ asm
+ mov esp, ebp
+ pop ebp
+ jmp [_StgOpenStorageEx]
+ end;
+end;
+
+{$ENDIF ~CLR}
+
+{$ENDIF MSWINDOWS}
Property changes on: trunk/jcl/source/prototypes/win32api/ObjBase.imp
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: trunk/jcl/source/prototypes/win32api/ObjBase.int
===================================================================
--- trunk/jcl/source/prototypes/win32api/ObjBase.int (rev 0)
+++ trunk/jcl/source/prototypes/win32api/ObjBase.int 2007-02-07 19:17:57 UTC (rev 1914)
@@ -0,0 +1,42 @@
+{$IFDEF MSWINDOWS}
+
+{$IFNDEF CLR}
+
+// objbase.h line 390
+const
+ STGFMT_STORAGE = 0;
+ STGFMT_NATIVE = 1;
+ STGFMT_FILE = 3;
+ STGFMT_ANY = 4;
+ STGFMT_DOCFILE = 5;
+// This is a legacy define to allow old component to builds
+ STGFMT_DOCUMENT = 0;
+
+// objbase.h line 913
+
+type
+ tagSTGOPTIONS = record
+ usVersion: Word; // Versions 1 and 2 supported
+ reserved: Word; // must be 0 for padding
+ ulSectorSize: Cardinal; // docfile header sector size (512)
+ pwcsTemplateFile: PWideChar; // version 2 or above
+ end;
+ {$EXTERNALSYM tagSTGOPTIONS}
+ STGOPTIONS = tagSTGOPTIONS;
+ {$EXTERNALSYM STGOPTIONS}
+ PSTGOPTIONS = ^STGOPTIONS;
+ {$EXTERNALSYM PSTGOPTIONS}
+
+function StgCreateStorageEx(const pwcsName: PWideChar; grfMode: DWORD;
+ stgfmt: DWORD; grfAttrs: DWORD; pStgOptions: PSTGOPTIONS; reserved2: Pointer;
+ riid: PGUID; out stgOpen: IInterface):HResult; stdcall;
+{$EXTERNALSYM StgCreateStorageEx}
+
+function StgOpenStorageEx(const pwcsName: PWideChar; grfMode: DWORD;
+ stgfmt: DWORD; grfAttrs: DWORD; pStgOptions: PSTGOPTIONS; reserved2:Pointer;
+ riid: PGUID; out stgOpen: IInterface):HResult; stdcall;
+{$EXTERNALSYM StgOpenStorageEx}
+
+{$ENDIF ~CLR}
+
+{$ENDIF MSWINDOWS}
Property changes on: trunk/jcl/source/prototypes/win32api/ObjBase.int
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: trunk/jcl/source/prototypes/win32api/PropIdl.int
===================================================================
--- trunk/jcl/source/prototypes/win32api/PropIdl.int (rev 0)
+++ trunk/jcl/source/prototypes/win32api/PropIdl.int 2007-02-07 19:17:57 UTC (rev 1914)
@@ -0,0 +1,135 @@
+// propidl.h line 386
+
+// Reserved global Property IDs
+const
+ PID_DICTIONARY = $00000000; // integer count + array of entries
+ {$EXTERNALSYM PID_DICTIONARY}
+ PID_CODEPAGE = $00000001; // short integer
+ {$EXTERNALSYM PID_CODEPAGE}
+ PID_FIRST_USABLE = $00000002;
+ {$EXTERNALSYM PID_FIRST_USABLE}
+ PID_FIRST_NAME_DEFAULT = $00000FFF;
+ {$EXTERNALSYM PID_FIRST_NAME_DEFAULT}
+ PID_LOCALE = $80000000;
+ {$EXTERNALSYM PID_LOCALE}
+ PID_MODIFY_TIME = $80000001;
+ {$EXTERNALSYM PID_MODIFY_TIME}
+ PID_SECURITY = $80000002;
+ {$EXTERNALSYM PID_SECURITY}
+ PID_BEHAVIOR = $80000003;
+ {$EXTERNALSYM PID_BEHAVIOR}
+ PID_ILLEGAL = $FFFFFFFF;
+ {$EXTERNALSYM PID_ILLEGAL}
+
+// Range which is read-only to downlevel implementations
+
+const
+ PID_MIN_READONLY = $80000000;
+ {$EXTERNALSYM PID_MIN_READONLY}
+ PID_MAX_READONLY = $BFFFFFFF;
+ {$EXTERNALSYM PID_MAX_READONLY}
+
+// Property IDs for the DiscardableInformation Property Set
+
+const
+ PIDDI_THUMBNAIL = $00000002; // VT_BLOB
+ {$EXTERNALSYM PIDDI_THUMBNAIL}
+
+// Property IDs for the SummaryInformation Property Set
+
+const
+ PIDSI_TITLE = $00000002; // VT_LPSTR
+ {$EXTERNALSYM PIDSI_TITLE}
+ PIDSI_SUBJECT = $00000003; // VT_LPSTR
+ {$EXTERNALSYM PIDSI_SUBJECT}
+ PIDSI_AUTHOR = $00000004; // VT_LPSTR
+ {$EXTERNALSYM PIDSI_AUTHOR}
+ PIDSI_KEYWORDS = $00000005; // VT_LPSTR
+ {$EXTERNALSYM PIDSI_KEYWORDS}
+ PIDSI_COMMENTS = $00000006; // VT_LPSTR
+ {$EXTERNALSYM PIDSI_COMMENTS}
+ PIDSI_TEMPLATE = $00000007; // VT_LPSTR
+ {$EXTERNALSYM PIDSI_TEMPLATE}
+ PIDSI_LASTAUTHOR = $00000008; // VT_LPSTR
+ {$EXTERNALSYM PIDSI_LASTAUTHOR}
+ PIDSI_REVNUMBER = $00000009; // VT_LPSTR
+ {$EXTERNALSYM PIDSI_REVNUMBER}
+ PIDSI_EDITTIME = $0000000A; // VT_FILETIME (UTC)
+ {$EXTERNALSYM PIDSI_EDITTIME}
+ PIDSI_LASTPRINTED = $0000000B; // VT_FILETIME (UTC)
+ {$EXTERNALSYM PIDSI_LASTPRINTED}
+ PIDSI_CREATE_DTM = $0000000C; // VT_FILETIME (UTC)
+ {$EXTERNALSYM PIDSI_CREATE_DTM}
+ PIDSI_LASTSAVE_DTM = $0000000D; // VT_FILETIME (UTC)
+ {$EXTERNALSYM PIDSI_LASTSAVE_DTM}
+ PIDSI_PAGECOUNT = $0000000E; // VT_I4
+ {$EXTERNALSYM PIDSI_PAGECOUNT}
+ PIDSI_WORDCOUNT = $0000000F; // VT_I4
+ {$EXTERNALSYM PIDSI_WORDCOUNT}
+ PIDSI_CHARCOUNT = $00000010; // VT_I4
+ {$EXTERNALSYM PIDSI_CHARCOUNT}
+ PIDSI_THUMBNAIL = $00000011; // VT_CF
+ {$EXTERNALSYM PIDSI_THUMBNAIL}
+ PIDSI_APPNAME = $00000012; // VT_LPSTR
+ {$EXTERNALSYM PIDSI_APPNAME}
+ PIDSI_DOC_SECURITY = $00000013; // VT_I4
+ {$EXTERNALSYM PIDSI_DOC_SECURITY}
+
+// Property IDs for the DocSummaryInformation Property Set
+
+const
+ PIDDSI_CATEGORY = $00000002; // VT_LPSTR
+ {$EXTERNALSYM PIDDSI_CATEGORY}
+ PIDDSI_PRESFORMAT = $00000003; // VT_LPSTR
+ {$EXTERNALSYM PIDDSI_PRESFORMAT}
+ PIDDSI_BYTECOUNT = $00000004; // VT_I4
+ {$EXTERNALSYM PIDDSI_BYTECOUNT}
+ PIDDSI_LINECOUNT = $00000005; // VT_I4
+ {$EXTERNALSYM PIDDSI_LINECOUNT}
+ PIDDSI_PARCOUNT = $00000006; // VT_I4
+ {$EXTERNALSYM PIDDSI_PARCOUNT}
+ PIDDSI_SLIDECOUNT = $00000007; // VT_I4
+ {$EXTERNALSYM PIDDSI_SLIDECOUNT}
+ PIDDSI_NOTECOUNT = $00000008; // VT_I4
+ {$EXTERNALSYM PIDDSI_NOTECOUNT}
+ PIDDSI_HIDDENCOUNT = $00000009; // VT_I4
+ {$EXTERNALSYM PIDDSI_HIDDENCOUNT}
+ PIDDSI_MMCLIPCOUNT = $0000000A; // VT_I4
+ {$EXTERNALSYM PIDDSI_MMCLIPCOUNT}
+ PIDDSI_SCALE = $0000000B; // VT_BOOL
+ {$EXTERNALSYM PIDDSI_SCALE}
+ PIDDSI_HEADINGPAIR = $0000000C; // VT_VARIANT | VT_VECTOR
+ {$EXTERNALSYM PIDDSI_HEADINGPAIR}
+ PIDDSI_DOCPARTS = $0000000D; // VT_LPSTR | VT_VECTOR
+ {$EXTERNALSYM PIDDSI_DOCPARTS}
+ PIDDSI_MANAGER = $0000000E; // VT_LPSTR
+ {$EXTERNALSYM PIDDSI_MANAGER}
+ PIDDSI_COMPANY = $0000000F; // VT_LPSTR
+ {$EXTERNALSYM PIDDSI_COMPANY}
+ PIDDSI_LINKSDIRTY = $00000010; // VT_BOOL
+ {$EXTERNALSYM PIDDSI_LINKSDIRTY}
+
+// FMTID_MediaFileSummaryInfo - Property IDs
+
+const
+ PIDMSI_EDITOR = $00000002; // VT_LPWSTR
+ {$EXTERNALSYM PIDMSI_EDITOR}
+ PIDMSI_SUPPLIER = $00000003; // VT_LPWSTR
+ {$EXTERNALSYM PIDMSI_SUPPLIER}
+ PIDMSI_SOURCE = $00000004; // VT_LPWSTR
+ {$EXTERNALSYM PIDMSI_SOURCE}
+ PIDMSI_SEQUENCE_NO = $00000005; // VT_LPWSTR
+ {$EXTERNALSYM PIDMSI_SEQUENCE_NO}
+ PIDMSI_PROJECT = $00000006; // VT_LPWSTR
+ {$EXTERNALSYM PIDMSI_PROJECT}
+ PIDMSI_STATUS = $00000007; // VT_UI4
+ {$EXTERNALSYM PIDMSI_STATUS}
+ PIDMSI_OWNER = $00000008; // VT_LPWSTR
+ {$EXTERNALSYM PIDMSI_OWNER}
+ PIDMSI_RATING = $00000009; // VT_LPWSTR
+ {$EXTERNALSYM PIDMSI_RATING}
+ PIDMSI_PRODUCTION = $0000000A; // VT_FILETIME (UTC)
+ {$EXTERNALSYM PIDMSI_PRODUCTION}
+ PIDMSI_COPYRIGHT = $0000000B; // VT_LPWSTR
+ {$EXTERNALSYM PIDMSI_COPYRIGHT}
+
Property changes on: trunk/jcl/source/prototypes/win32api/PropIdl.int
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: trunk/jcl/source/prototypes/win32api/ShlGuid.int
===================================================================
--- trunk/jcl/source/prototypes/win32api/ShlGuid.int (rev 0)
+++ trunk/jcl/source/prototypes/win32api/ShlGuid.int 2007-02-07 19:17:57 UTC (rev 1914)
@@ -0,0 +1,192 @@
+// shlguid.h line 404
+
+const
+ FMTID_ShellDetails: TGUID = '{28636aa6-953d-11d2-b5d6-00c04fd918d0}';
+ {$EXTERNALSYM FMTID_ShellDetails}
+
+ PID_FINDDATA = 0;
+ {$EXTERNALSYM PID_FINDDATA}
+ PID_NETRESOURCE = 1;
+ {$EXTERNALSYM PID_NETRESOURCE}
+ PID_DESCRIPTIONID = 2;
+ {$EXTERNALSYM PID_DESCRIPTIONID}
+ PID_WHICHFOLDER = 3;
+ {$EXTERNALSYM PID_WHICHFOLDER}
+ PID_NETWORKLOCATION = 4;
+ {$EXTERNALSYM PID_NETWORKLOCATION}
+ PID_COMPUTERNAME = 5;
+ {$EXTERNALSYM PID_COMPUTERNAME}
+
+// PSGUID_STORAGE comes from ntquery.h
+const
+ FMTID_Storage: TGUID = '{b725f130-47ef-101a-a5f1-02608c9eebac}';
+ {$EXTERNALSYM FMTID_Storage}
+
+// Image properties
+const
+ FMTID_ImageProperties: TGUID = '{14b81da1-0135-4d31-96d9-6cbfc9671a99}';
+ {$EXTERNALSYM FMTID_ImageProperties}
+
+// The GUIDs used to identify shell item attributes (columns). See IShellFolder2::GetDetailsEx implementations...
+
+const
+ FMTID_Displaced: TGUID = '{9B174B33-40FF-11d2-A27E-00C04FC30871}';
+ {$EXTERNALSYM FMTID_Displaced}
+ PID_DISPLACED_FROM = 2;
+ {$EXTERNALSYM PID_DISPLACED_FROM}
+ PID_DISPLACED_DATE = 3;
+ {$EXTERNALSYM PID_DISPLACED_DATE}
+
+const
+ FMTID_Briefcase: TGUID = '{328D8B21-7729-4bfc-954C-902B329D56B0}';
+ {$EXTERNALSYM FMTID_Briefcase}
+ PID_SYNC_COPY_IN = 2;
+ {$EXTERNALSYM PID_SYNC_COPY_IN}
+
+const
+ FMTID_Misc: TGUID = '{9B174B34-40FF-11d2-A27E-00C04FC30871}';
+ {$EXTERNALSYM FMTID_Misc}
+ PID_MISC_STATUS = 2;
+ {$EXTERNALSYM PID_MISC_STATUS}
+ PID_MISC_ACCESSCOUNT = 3;
+ {$EXTERNALSYM PID_MISC_ACCESSCOUNT}
+ PID_MISC_OWNER = 4;
+ {$EXTERNALSYM PID_MISC_OWNER}
+ PID_HTMLINFOTIPFILE = 5;
+ {$EXTERNALSYM PID_HTMLINFOTIPFILE}
+ PID_MISC_PICS = 6;
+ {$EXTERNALSYM PID_MISC_PICS}
+
+const
+ FMTID_WebView: TGUID = '{F2275480-F782-4291-BD94-F13693513AEC}';
+ {$EXTERNALSYM FMTID_WebView}
+ PID_DISPLAY_PROPERTIES = 0;
+ {$EXTERNALSYM PID_DISPLAY_PROPERTIES}
+ PID_INTROTEXT = 1;
+ {$EXTERNALSYM PID_INTROTEXT}
+
+const
+ FMTID_MUSIC: TGUID = '{56A3372E-CE9C-11d2-9F0E-006097C686F6}';
+ {$EXTERNALSYM FMTID_MUSIC}
+ PIDSI_ARTIST = 2;
+ {$EXTERNALSYM PIDSI_ARTIST}
+ PIDSI_SONGTITLE = 3;
+ {$EXTERNALSYM PIDSI_SONGTITLE}
+ PIDSI_ALBUM = 4;
+ {$EXTERNALSYM PIDSI_ALBUM}
+ PIDSI_YEAR = 5;
+ {$EXTERNALSYM PIDSI_YEAR}
+ PIDSI_COMMENT = 6;
+ {$EXTERNALSYM PIDSI_COMMENT}
+ PIDSI_TRACK = 7;
+ {$EXTERNALSYM PIDSI_TRACK}
+ PIDSI_GENRE = 11;
+ {$EXTERNALSYM PIDSI_GENRE}
+ PIDSI_LYRICS = 12;
+ {$EXTERNALSYM PIDSI_LYRICS}
+
+const
+ FMTID_DRM: TGUID = '{AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED}';
+ {$EXTERNALSYM FMTID_DRM}
+ PIDDRSI_PROTECTED = 2;
+ {$EXTERNALSYM PIDDRSI_PROTECTED}
+ PIDDRSI_DESCRIPTION = 3;
+ {$EXTERNALSYM PIDDRSI_DESCRIPTION}
+ PIDDRSI_PLAYCOUNT = 4;
+ {$EXTERNALSYM PIDDRSI_PLAYCOUNT}
+ PIDDRSI_PLAYSTARTS = 5;
+ {$EXTERNALSYM PIDDRSI_PLAYSTARTS}
+ PIDDRSI_PLAYEXPIRES = 6;
+ {$EXTERNALSYM PIDDRSI_PLAYEXPIRES}
+
+// FMTID_VideoSummaryInformation property identifiers
+const
+ FMTID_Video: TGUID = '{64440491-4c8b-11d1-8b70-080036b11a03}';
+ {$EXTERNALSYM FMTID_Video}
+ PIDVSI_STREAM_NAME = $00000002; // "StreamName", VT_LPWSTR
+ {$EXTERNALSYM PIDVSI_STREAM_NAME}
+ PIDVSI_FRAME_WIDTH = $00000003; // "FrameWidth", VT_UI4
+ {$EXTERNALSYM PIDVSI_FRAME_WIDTH}
+ PIDVSI_FRAME_HEIGHT = $00000004; // "FrameHeight", VT_UI4
+ {$EXTERNALSYM PIDVSI_FRAME_HEIGHT}
+ PIDVSI_TIMELENGTH = $00000007; // "TimeLength", VT_UI4, milliseconds
+ {$EXTERNALSYM PIDVSI_TIMELENGTH}
+ PIDVSI_FRAME_COUNT = $00000005; // "FrameCount". VT_UI4
+ {$EXTERNALSYM PIDVSI_FRAME_COUNT}
+ PIDVSI_FRAME_RATE = $00000006; // "FrameRate", VT_UI4, frames/millisecond
+ {$EXTERNALSYM PIDVSI_FRAME_RATE}
+ PIDVSI_DATA_RATE = $00000008; // "DataRate", VT_UI4, bytes/second
+ {$EXTERNALSYM PIDVSI_DATA_RATE}
+ PIDVSI_SAMPLE_SIZE = $00000009; // "SampleSize", VT_UI4
+ {$EXTERNALSYM PIDVSI_SAMPLE_SIZE}
+ PIDVSI_COMPRESSION = $0000000A; // "Compression", VT_LPWSTR
+ {$EXTERNALSYM PIDVSI_COMPRESSION}
+ PIDVSI_STREAM_NUMBER = $0000000B; // "StreamNumber", VT_UI2
+ {$EXTERNALSYM PIDVSI_STREAM_NUMBER}
+
+// FMTID_AudioSummaryInformation property identifiers
+const
+ FMTID_Audio: TGUID = '{64440490-4c8b-11d1-8b70-080036b11a03}';
+ {$EXTERNALSYM FMTID_Audio}
+ PIDASI_FORMAT = $00000002; // VT_BSTR
+ {$EXTERNALSYM PIDASI_FORMAT}
+ PIDASI_TIMELENGTH = $00000003; // VT_UI4, milliseconds
+ {$EXTERNALSYM PIDASI_TIMELENGTH}
+ PIDASI_AVG_DATA_RATE = $00000004; // VT_UI4, Hz
+ {$EXTERNALSYM PIDASI_AVG_DATA_RATE}
+ PIDASI_SAMPLE_RATE = $00000005; // VT_UI4, bits
+ {$EXTERNALSYM PIDASI_SAMPLE_RATE}
+ PIDASI_SAMPLE_SIZE = $00000006; // VT_UI4, bits
+ {$EXTERNALSYM PIDASI_SAMPLE_SIZE}
+ PIDASI_CHANNEL_COUNT = $00000007; // VT_UI4
+ {$EXTERNALSYM PIDASI_CHANNEL_COUNT}
+ PIDASI_STREAM_NUMBER = $00000008; // VT_UI2
+ {$EXTERNALSYM PIDASI_STREAM_NUMBER}
+ PIDASI_STREAM_NAME = $00000009; // VT_LPWSTR
+ {$EXTERNALSYM PIDASI_STREAM_NAME}
+ PIDASI_COMPRESSION = $0000000A; // VT_LPWSTR
+ {$EXTERNALSYM PIDASI_COMPRESSION}
+
+const
+ FMTID_ControlPanel: TGUID = '{305CA226-D286-468e-B848-2B2E8E697B74}';
+ {$EXTERNALSYM FMTID_ControlPanel}
+ PID_CONTROLPANEL_CATEGORY = 2;
+ {$EXTERNALSYM PID_CONTROLPANEL_CATEGORY}
+
+const
+ FMTID_Volume: TGUID = '{9B174B35-40FF-11d2-A27E-00C04FC30871}';
+ {$EXTERNALSYM FMTID_Volume}
+ PID_VOLUME_FREE = 2;
+ {$EXTERNALSYM PID_VOLUME_FREE}
+ PID_VOLUME_CAPACITY = 3;
+ {$EXTERNALSYM PID_VOLUME_CAPACITY}
+ PID_VOLUME_FILESYSTEM = 4;
+ {$EXTERNALSYM PID_VOLUME_FILESYSTEM}
+
+const
+ FMTID_Share: TGUID = '{D8C3986F-813B-449c-845D-87B95D674ADE}';
+ {$EXTERNALSYM FMTID_Share}
+ PID_SHARE_CSC_STATUS = 2;
+ {$EXTERNALSYM PID_SHARE_CSC_STATUS}
+
+const
+ FMTID_Link: TGUID = '{B9B4B3FC-2B51-4a42-B5D8-324146AFCF25}';
+ {$EXTERNALSYM FMTID_Link}
+ PID_LINK_TARGET = 2;
+ {$EXTERNALSYM PID_LINK_TARGET}
+
+const
+ FMTID_Query: TGUID = '{49691c90-7e17-101a-a91c-08002b2ecda9}';
+ {$EXTERNALSYM FMTID_Query}
+ PID_QUERY_RANK = 2;
+ {$EXTERNALSYM PID_QUERY_RANK}
+
+const
+ FMTID_SummaryInformation: TGUID = '{f29f85e0-4ff9-1068-ab91-08002b27b3d9}';
+ {$EXTERNALSYM FMTID_SummaryInformation}
+ FMTID_DocumentSummaryInformation: TGUID = '{d5cdd502-2e9c-101b-9397-08002b2cf9ae}';
+ {$EXTERNALSYM FMTID_DocumentSummaryInformation}
+ FMTID_MediaFileSummaryInformation: TGUID = '{64440492-4c8b-11d1-8b70-080036b11a03}';
+ {$EXTERNALSYM FMTID_MediaFileSummaryInformation}
+ FMTID_ImageSummaryInformation: TGUID = '{6444048f-4c8b-11d1-8b70-080036b11a03}';
+ {$EXTERNALSYM FMTID_ImageSummaryInformation}
Property changes on: trunk/jcl/source/prototypes/win32api/ShlGuid.int
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Modified: trunk/jcl/source/windows/JclNTFS.pas
===================================================================
--- trunk/jcl/source/windows/JclNTFS.pas 2007-02-06 17:28:14 UTC (rev 1913)
+++ trunk/jcl/source/windows/JclNTFS.pas 2007-02-07 19:17:57 UTC (rev 1914)
@@ -21,6 +21,8 @@
{ Robert Rossmair (rrossmair) }
{ Petr Vones (pvones) }
{ Oliver Schneider (assarbad) }
+{ ZENsan }
+{ Florent Ouchet (outchy) }
{ }
{**************************************************************************************************}
{ }
@@ -50,7 +52,7 @@
{$IFDEF UNITVERSIONING}
JclUnitVersioning,
{$ENDIF UNITVERSIONING}
- Windows, Classes,
+ Windows, SysUtils, Classes, ActiveX,
JclBase, JclWin32;
// NTFS Exception
@@ -161,6 +163,397 @@
function NtfsFindHardLinks(const Path: string; const FileIndexHigh, FileIndexLow: Cardinal; const List: TStrings): Boolean;
function NtfsDeleteHardLinks(const FileName: string): Boolean;
+// NTFS File summary
+type
+ EJclFileSummaryError = class(EJclError);
+
+ TJclFileSummaryAccess = (fsaRead, fsaWrite, fsaReadWrite);
+ TJclFileSummaryShare = (fssDenyNone, fssDenyRead, fssDenyWrite, fssDenyAll);
+ TJclFileSummaryPropSetCallback = function(const FMTID: TGUID): Boolean of object;
+ TJclFileSummaryPropCallback = function(const Name: WideString; ID: TPropID;
+ Vt: TVarType): Boolean of object;
+
+ TJclFileSummary = class;
+
+ TJclFilePropertySet = class
+ private
+ FPropertyStorage: IPropertyStorage;
+ public
+ constructor Create(APropertyStorage: IPropertyStorage);
+ destructor Destroy; override;
+
+ class function GetFMTID: TGUID; virtual;
+ function GetProperty(ID: TPropID): TPropVariant; overload;
+ function GetProperty(const Name: WideString): TPropVariant; overload;
+ procedure SetProperty(ID: TPropID; const Value: TPropVariant); overload;
+ procedure SetProperty(const Name: WideString; const Value: TPropVariant;
+ AllocationBase: TPropID = PID_FIRST_USABLE); overload;
+ procedure DeleteProperty(ID: TPropID); overload;
+ procedure DeleteProperty(const Name: WideString); overload;
+ function EnumProperties(Proc: TJclFileSummaryPropCallback): Boolean;
+
+ // casted properties
+ // Type of ID changed to Integer to be compatible with indexed properties
+ // VT_LPWSTR
+ function GetWideStringProperty(const ID: Integer): WideString;
+ procedure SetWideStringProperty(const ID: Integer; const Value: WideString);
+ // VT_LPSTR
+ function GetAnsiStringProperty(const ID: Integer): AnsiString;
+ procedure SetAnsiStringProperty(const ID: Integer; const Value: AnsiString);
+ // VT_I4
+ function GetIntegerProperty(const ID: Integer): Integer;
+ procedure SetIntegerProperty(const ID: Integer; const Value: Integer);
+ // VT_UI4
+ function GetCardinalProperty(const ID: Integer): Cardinal;
+ procedure SetCardinalProperty(const ID: Integer; const Value: Cardinal);
+ // VT_FILETIME
+ function GetFileTimeProperty(const ID: Integer): TFileTime;
+ procedure SetFileTimeProperty(const ID: Integer; const Value: TFileTime);
+ // VT_CF
+ function GetClipDataProperty(const ID: Integer): PClipData;
+ procedure SetClipDataProperty(const ID: Integer; const Value: PClipData);
+ // VT_BOOL
+ function GetBooleanProperty(const ID: Integer): Boolean;
+ procedure SetBooleanProperty(const ID: Integer; const Value: Boolean);
+ // VT_VARIANT | VT_VECTOR
+ function GetTCAPROPVARIANTProperty(const ID: Integer): TCAPROPVARIANT;
+ procedure SetTCAPROPVARIANTProperty(const ID: Integer; const Value: TCAPROPVARIANT);
+ // // VT_LPSTR | VT_VECTOR
+ function GetTCALPSTRProperty(const ID: Integer): TCALPSTR;
+ procedure SetTCALPSTRProperty(const ID: Integer; const Value: TCALPSTR);
+ // VT_UI2
+ function GetWordProperty(const ID: Integer): Word;
+ procedure SetWordProperty(const ID: Integer; const Value: Word);
+ // VT_BSTR
+ function GetBSTRProperty(const ID: Integer): WideString;
+ procedure SetBSTRProperty(const ID: Integer; const Value: WideString);
+
+ // property names
+ function GetPropertyName(ID: TPropID): WideString;
+ procedure SetPropertyName(ID: TPropID; const Name: WideString);
+ procedure DeletePropertyName(ID: TPropID);
+ end;
+
+ TJclFilePropertySetClass = class of TJclFilePropertySet;
+
+ TJclFileSummary = class
+ private
+ FFileName: WideString;
+ FAccessMode: TJclFileSummaryAccess;
+ FShareMode: TJclFileSummaryShare;
+ FStorage: IPropertySetStorage;
+ public
+ constructor Create(AFileName: WideString; AAccessMode: TJclFileSummaryAccess;
+ AShareMode: TJclFileSummaryShare; AsDocument: Boolean = False;
+ ACreate: Boolean = False);
+ destructor Destroy; override;
+
+ function CreatePropertySet(AClass: TJclFilePropertySetClass; ResetExisting: Boolean): TJclFilePropertySet;
+ procedure GetPropertySet(AClass: TJclFilePropertySetClass; out Instance); overload;
+ procedure GetPropertySet(const FMTID: TGUID; out Instance); overload;
+ function GetPropertySet(const FMTID: TGUID): IPropertyStorage; overload;
+ procedure DeletePropertySet(const FMTID: TGUID); overload;
+ procedure DeletePropertySet(AClass: TJclFilePropertySetClass); overload;
+ function EnumPropertySet(Proc: TJclFileSummaryPropSetCallback): Boolean;
+
+ property FileName: WideString read FFileName;
+ property AccessMode: TJclFileSummaryAccess read FAccessMode;
+ property ShareMode: TJclFileSummaryShare read FShareMode;
+ end;
+
+ TJclFileSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+
+ property Title: AnsiString index PIDSI_TITLE read GetAnsiStringProperty
+ write SetAnsiStringProperty;
+ property Subject: AnsiString index PIDSI_SUBJECT read GetAnsiStringProperty
+ write SetAnsiStringProperty;
+ property Author: AnsiString index PIDSI_AUTHOR read GetAnsiStringProperty
+ write SetAnsiStringProperty;
+ property KeyWords: AnsiString index PIDSI_KEYWORDS read GetAnsiStringProperty
+ write SetAnsiStringProperty;
+ property Comments: AnsiString index PIDSI_COMMENTS read GetAnsiStringProperty
+ write SetAnsiStringProperty;
+ property Template: AnsiString index PIDSI_TEMPLATE read GetAnsiStringProperty
+ write SetAnsiStringProperty;
+ property LastAuthor: AnsiString index PIDSI_LASTAUTHOR read GetAnsiStringProperty
+ write SetAnsiStringProperty;
+ property RevNumber: AnsiString index PIDSI_REVNUMBER read GetAnsiStringProperty
+ write SetAnsiStringProperty;
+ property EditTime: TFileTime index PIDSI_EDITTIME read GetFileTimeProperty
+ write SetFileTimeProperty;
+ property LastPrintedTime: TFileTime index PIDSI_LASTPRINTED read GetFileTimeProperty
+ write SetFileTimeProperty;
+ property CreationTime: TFileTime index PIDSI_CREATE_DTM read GetFileTimeProperty
+ write SetFileTimeProperty;
+ property LastSaveTime: TFileTime index PIDSI_LASTSAVE_DTM read GetFileTimeProperty
+ write SetFileTimeProperty;
+ property PageCount: Integer index PIDSI_PAGECOUNT read GetIntegerProperty
+ write SetIntegerProperty;
+ property WordCount: Integer index PIDSI_WORDCOUNT read GetIntegerProperty
+ write SetIntegerProperty;
+ property CharCount: Integer index PIDSI_CHARCOUNT read GetIntegerProperty
+ write SetIntegerProperty;
+ property Thumnail: PClipData index PIDSI_THUMBNAIL read GetClipDataProperty
+ write SetClipDataProperty;
+ property AppName: AnsiString index PIDSI_APPNAME read GetAnsiStringProperty
+ write SetAnsiStringProperty;
+ property Security: Integer index PIDSI_DOC_SECURITY read GetIntegerProperty
+ write SetIntegerProperty;
+ end;
+
+ TJclDocSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+
+ property Category: AnsiString index PIDDSI_CATEGORY read GetAnsiStringProperty
+ write SetAnsiStringProperty;
+ property PresFormat: AnsiString index PIDDSI_PRESFORMAT read GetAnsiStringProperty
+ write SetAnsiStringProperty;
+ property ByteCount: Integer index PIDDSI_BYTECOUNT read GetIntegerProperty
+ write SetIntegerProperty;
+ property LineCount: Integer index PIDDSI_LINECOUNT read GetIntegerProperty
+ write SetIntegerProperty;
+ property ParCount: Integer index PIDDSI_PARCOUNT read GetIntegerProperty
+ write SetIntegerProperty;
+ property SlideCount: Integer index PIDDSI_SLIDECOUNT read GetIntegerProperty
+ write SetIntegerProperty;
+ property NoteCount: Integer index PIDDSI_NOTECOUNT read GetIntegerProperty
+ write SetIntegerProperty;
+ property HiddenCount: Integer index PIDDSI_HIDDENCOUNT read GetIntegerProperty
+ write SetIntegerProperty;
+ property MMClipCount: Integer index PIDDSI_MMCLIPCOUNT read GetIntegerProperty
+ write SetIntegerProperty;
+ property Scale: Boolean index PIDDSI_SCALE read GetBooleanProperty
+ write SetBooleanProperty;
+ property HeadingPair: TCAPROPVARIANT index PIDDSI_HEADINGPAIR read GetTCAPROPVARIANTProperty
+ write SetTCAPROPVARIANTProperty;
+ property DocParts: TCALPSTR index PIDDSI_DOCPARTS read GetTCALPSTRProperty
+ write SetTCALPSTRProperty;
+ property Manager: AnsiString index PIDDSI_MANAGER read GetAnsiStringProperty
+ write SetAnsiStringProperty;
+ property Company: AnsiString index PIDDSI_COMPANY read GetAnsiStringProperty
+ write SetAnsiStringProperty;
+ property LinksDirty: Boolean index PIDDSI_LINKSDIRTY read GetBooleanProperty
+ write SetBooleanProperty;
+ end;
+
+ TJclMediaFileSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+
+ property Editor: WideString index PIDMSI_EDITOR read GetWideStringProperty
+ write SetWideStringProperty;
+ property Supplier: WideString index PIDMSI_SUPPLIER read GetWideStringProperty
+ write SetWideStringProperty;
+ property Source: WideString index PIDMSI_SOURCE read GetWideStringProperty
+ write SetWideStringProperty;
+ property SequenceNo: WideString index PIDMSI_SEQUENCE_NO read GetWideStringProperty
+ write SetWideStringProperty;
+ property Project: WideString index PIDMSI_PROJECT read GetWideStringProperty
+ write SetWideStringProperty;
+ property Status: Cardinal index PIDMSI_STATUS read GetCardinalProperty
+ write SetCardinalProperty;
+ property Owner: WideString index PIDMSI_OWNER read GetWideStringProperty
+ write SetWideStringProperty;
+ property Rating: WideString index PIDMSI_RATING read GetWideStringProperty
+ write SetWideStringProperty;
+ property Production: TFileTime index PIDMSI_PRODUCTION read GetFileTimeProperty
+ write SetFileTimeProperty;
+ property Copyright: WideString index PIDMSI_COPYRIGHT read GetWideStringProperty
+ write SetWideStringProperty;
+ end;
+
+ TJclMSISummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+
+ property Version: Integer index PID_MSIVERSION read GetIntegerProperty
+ write SetIntegerProperty; // integer, Installer version number (major*100+minor)
+ property Source: Integer index PID_MSISOURCE read GetIntegerProperty
+ write SetIntegerProperty; // integer, type of file image, short/long, media/tree
+ property Restrict: Integer index PID_MSIRESTRICT read GetIntegerProperty
+ write SetIntegerProperty; // integer, transform restrictions
+ end;
+
+ TJclShellSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+
+ {PID_FINDDATA = 0;
+ PID_NETRESOURCE = 1;
+ PID_DESCRIPTIONID = 2;
+ PID_WHICHFOLDER = 3;
+ PID_NETWORKLOCATION = 4;
+ PID_COMPUTERNAME = 5;}
+ end;
+
+ TJclStorageSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+ end;
+
+ TJclImageSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+ end;
+
+ TJclDisplacedSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+
+ {PID_FINDDATA = 0;
+ PID_NETRESOURCE = 1;
+ PID_DESCRIPTIONID = 2;
+ PID_WHICHFOLDER = 3;
+ PID_NETWORKLOCATION = 4;
+ PID_COMPUTERNAME = 5;}
+ end;
+
+ TJclBriefCaseSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+
+ {PID_SYNC_COPY_IN = 2;}
+ end;
+
+ TJclMiscSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+
+ {PID_MISC_STATUS = 2;
+ PID_MISC_ACCESSCOUNT = 3;
+ PID_MISC_OWNER = 4;
+ PID_HTMLINFOTIPFILE = 5;
+ PID_MISC_PICS = 6;}
+ end;
+
+ TJclWebViewSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+
+ {PID_DISPLAY_PROPERTIES = 0;
+ PID_INTROTEXT = 1;}
+ end;
+
+ TJclMusicSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+ {PIDSI_ARTIST = 2;
+ PIDSI_SONGTITLE = 3;
+ PIDSI_ALBUM = 4;
+ PIDSI_YEAR = 5;
+ PIDSI_COMMENT = 6;
+ PIDSI_TRACK = 7;
+ PIDSI_GENRE = 11;
+ PIDSI_LYRICS = 12;}
+ end;
+
+ TJclDRMSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+ {PIDDRSI_PROTECTED = 2;
+ PIDDRSI_DESCRIPTION = 3;
+ PIDDRSI_PLAYCOUNT = 4;
+ PIDDRSI_PLAYSTARTS = 5;
+ PIDDRSI_PLAYEXPIRES = 6;}
+ end;
+
+ TJclVideoSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+
+ property StreamName: WideString index PIDVSI_STREAM_NAME read GetWideStringProperty
+ write SetWideStringProperty; // "StreamName", VT_LPWSTR
+ property Width: Cardinal index PIDVSI_FRAME_WIDTH read GetCardinalProperty
+ write SetCardinalProperty; // "FrameWidth", VT_UI4
+ property Height: Cardinal index PIDVSI_FRAME_HEIGHT read GetCardinalProperty
+ write SetCardinalProperty; // "FrameHeight", VT_UI4
+ property TimeLength: Cardinal index PIDVSI_TIMELENGTH read GetCardinalProperty
+ write SetCardinalProperty; // "TimeLength", VT_UI4, milliseconds
+ property FrameCount: Cardinal index PIDVSI_FRAME_COUNT read GetCardinalProperty
+ write SetCardinalProperty; // "FrameCount". VT_UI4
+ property FrameRate: Cardinal index PIDVSI_FRAME_RATE read GetCardinalProperty
+ write SetCardinalProperty; // "FrameRate", VT_UI4, frames/millisecond
+ property DataRate: Cardinal index PIDVSI_DATA_RATE read GetCardinalProperty
+ write SetCardinalProperty; // "DataRate", VT_UI4, bytes/second
+ property SampleSize: Cardinal index PIDVSI_SAMPLE_SIZE read GetCardinalProperty
+ write SetCardinalProperty; // "SampleSize", VT_UI4
+ property Compression: WideString index PIDVSI_COMPRESSION read GetWideStringProperty
+ write SetWideStringProperty; // "Compression", VT_LPWSTR
+ property StreamNumber: Word index PIDVSI_STREAM_NUMBER read GetWordProperty
+ write SetWordProperty; // "StreamNumber", VT_UI2}
+ end;
+
+ TJclAudioSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+
+ property Format: WideString index PIDASI_FORMAT read GetBSTRProperty
+ write SetBSTRProperty; // VT_BSTR
+ property TimeLength: Cardinal index PIDASI_TIMELENGTH read GetCardinalProperty
+ write SetCardinalProperty; // VT_UI4, milliseconds
+ property AverageDataRate: Cardinal index PIDASI_AVG_DATA_RATE read GetCardinalProperty
+ write SetCardinalProperty; // VT_UI4, Hz
+ property SampleRate: Cardinal index PIDASI_SAMPLE_RATE read GetCardinalProperty
+ write SetCardinalProperty; // VT_UI4, bits
+ property SampleSize: Cardinal index PIDASI_SAMPLE_SIZE read GetCardinalProperty
+ write SetCardinalProperty; // VT_UI4, bits
+ property ChannelCount: Cardinal index PIDASI_CHANNEL_COUNT read GetCardinalProperty
+ write SetCardinalProperty; // VT_UI4
+ property StreamNumber: Word index PIDASI_STREAM_NUMBER read GetWordProperty
+ write SetWordProperty; // VT_UI2
+ property StreamName: WideString index PIDASI_STREAM_NAME read GetWideStringProperty
+ write SetWideStringProperty; // VT_LPWSTR
+ property Compression: WideString index PIDASI_COMPRESSION read GetWideStringProperty
+ write SetWideStringProperty; // VT_LPWSTR}
+ end;
+
+ TJclControlPanelSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+ {PID_CONTROLPANEL_CATEGORY = 2;}
+ end;
+
+ TJclVolumeSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+ {PID_VOLUME_FREE = 2;
+ PID_VOLUME_CAPACITY = 3;
+ PID_VOLUME_FILESYSTEM = 4;}
+ end;
+
+ TJclShareSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+ {PID_SHARE_CSC_STATUS = 2;}
+ end;
+
+ TJclLinkSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+ {PID_LINK_TARGET = 2;}
+ end;
+
+ TJclQuerySummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+ {PID_QUERY_RANK = 2;}
+ end;
+
+ TJclImageInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+ {FMTID_ImageInformation}
+ end;
+
+ TJclJpegSummaryInformation = class(TJclFilePropertySet)
+ public
+ class function GetFMTID: TGUID; override;
+ {FMTID_JpegAppHeaders}
+ end;
+
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
@@ -177,7 +570,7 @@
{$IFDEF FPC}
WinSysUt,
{$ENDIF FPC}
- SysUtils, Hardlinks,
+ ComObj, Hardlinks,
JclFileUtils, JclSysInfo, JclResources, JclSecurity;
//=== NTFS - Compression =====================================================
@@ -1164,6 +1557,745 @@
end;
end;
+//=== { TJclFileSummary } ====================================================
+
+const
+ AccessModes: array [TJclFileSummaryAccess] of DWORD =
+ ( STGM_READ, STGM_WRITE, STGM_READWRITE );
+ ShareModes: array [TJclFileSummaryShare] of DWORD =
+ ( STGM_SHARE_DENY_NONE, STGM_SHARE_DENY_READ, STGM_SHARE_DENY_WRITE,
+ STGM_SHARE_EXCLUSIVE );
+
+constructor TJclFileSummary.Create(AFileName: WideString; AAccessMode: TJclFileSummaryAccess;
+ AShareMode: TJclFileSummaryShare; AsDocument: Boolean; ACreate: Boolean);
+var
+ Format: DWORD;
+ IntfGUID: TGUID;
+ AIntf: IInterface;
+begin
+ inherited Create;
+ FAccessMode := AAccessMode;
+ FShareMode := AShareMode;
+ FFileName := AFileName;
+
+ if AsDocument then
+ Format := STGFMT_DOCFILE
+ else
+ if ACreate then
+ Format := STGFMT_FILE
+ else
+ Format := STGFMT_ANY;
+ IntfGUID := IPropertySetStorage;
+
+ if ACreate then
+ OleCheck(StgCreateStorageEx(PWideChar(AFileName),
+ STGM_DIRECT or AccessModes[AAccessMode] or ShareModes[AShareMode], Format, 0,
+ nil, nil, @IntfGUID, AIntf))
+ else
+ OleCheck(StgOpenStorageEx(PWideChar(AFileName),
+ STGM_DIRECT or AccessModes[AAccessMode] or ShareModes[AShareMode], Format, 0,
+ nil, nil, @IntfGUID, AIntf));
+
+ FStorage := AIntf as IPropertySetStorage;
+end;
+
+function TJclFileSummary.CreatePropertySet(AClass: TJclFilePropertySetClass;
+ ResetExisting: Boolean): TJclFilePropertySet;
+var
+ PropertyStorage: IPropertyStorage;
+begin
+ OleCheck(FStorage.Create(AClass.GetFMTID, AClass.GetFMTID, PROPSETFLAG_DEFAULT,
+ STGM_CREATE or STGM_DIRECT or AccessModes[AccessMode] or ShareModes[ShareMode],
+ PropertyStorage));
+ if Assigned(PropertyStorage) then
+ Result := AClass.Create(PropertyStorage)
+ else
+ raise EJclFileSummaryError.CreateRes(@RsEUnableToCreatePropertyStorage);
+end;
+
+procedure TJclFileSummary.DeletePropertySet(AClass: TJclFilePropertySetClass);
+begin
+ DeletePropertySet(AClass.GetFMTID);
+end;
+
+procedure TJclFileSummary.DeletePropertySet(const FMTID: TGUID);
+begin
+ OleCheck(FStorage.Delete(FMTID));
+end;
+
+destructor TJclFileSummary.Destroy;
+begin
+ FStorage := nil;
+ inherited Destroy;
+end;
+
+function TJclFileSummary.EnumPropertySet(
+ Proc: TJclFileSummaryPropSetCallback): Boolean;
+var
+ Enum: IEnumSTATPROPSETSTG;
+ PropSet: STATPROPSETSTG;
+ Returned: ULONG;
+ Status: HRESULT;
+begin
+ OleCheck(FStorage.Enum(Enum));
+ ZeroMemory(@PropSet, SizeOf(PropSet));
+
+ OleCheck(Enum.Reset);
+ Status := Enum.Next(1, PropSet, @Returned);
+ Result := True;
+
+ while Result and (Status = S_OK) and (Returned = 1) do
+ begin
+ Result := Proc(PropSet.fmtid);
+ if Result then
+ Status := Enum.Next(1, PropSet, @Returned);
+ end;
+end;
+
+procedure TJclFileSummary.GetPropertySet(AClass: TJclFilePropertySetClass;
+ out Instance);
+var
+ PropertyStorage: IPropertyStorage;
+begin
+ TJclFilePropertySet(Instance) := nil;
+ PropertyStorage := GetPropertySet(AClass.GetFMTID);
+ if Assigned(PropertyStorage) then
+ TJclFilePropertySet(Instance) := AClass.Create(PropertyStorage);
+end;
+
+procedure TJclFileSummary.GetPropertySet(const FMTID: TGUID; out Instance);
+var
+ PropertyStorage: IPropertyStorage;
+begin
+ TJclFilePropertySet(Instance) := nil;
+ PropertyStorage := GetPropertySet(FMTID);
+ if Assigned(PropertyStorage) then
+ TJclFilePropertySet(Instance) := TJclFilePropertySet.Create(PropertyStorage);
+end;
+
+function TJclFileSummary.GetPropertySet(const FMTID: TGUID): IPropertyStorage;
+var
+ Status: HRESULT;
+begin
+ Status := FStorage.Open(FMTID,
+ STGM_DIRECT or AccessModes[AccessMode] or ShareModes[ShareMode],
+ Result);
+ if (Status = STG_E_FILENOTFOUND) then
+ begin
+ if AccessMode = fsaRead then
+ Result := nil
+ else
+ OleCheck(FStorage.Create(FMTID, FMTID, PROPSETFLAG_DEFAULT,
+ STGM_CREATE or STGM_DIRECT or AccessModes[AccessMode] or ShareModes[ShareMode],
+ Result))
+ end
+ else
+ OleCheck(Status);
+end;
+
+//=== { TJclFilePropertySet } ================================================
+
+constructor TJclFilePropertySet.Create(APropertyStorage: IPropertyStorage);
+begin
+ inherited Create;
+ FPropertyStorage := APropertyStorage;
+end;
+
+procedure TJclFilePropertySet.DeleteProperty(const Name: WideString);
+var
+ Prop: TPropSpec;
+begin
+ Prop.ulKind := PRSPEC_LPWSTR;
+ Prop.lpwstr := PWideChar(Name);
+ OleCheck(FPropertyStorage.DeleteMultiple(1, @Prop));
+end;
+
+procedure TJclFilePropertySet.DeletePropertyName(ID: TPropID);
+begin
+ OleCheck(FPropertyStorage.DeletePropertyNames(1, @ID)...
[truncated message content] |
|
From: <ou...@us...> - 2007-02-06 17:28:20
|
Revision: 1913
http://svn.sourceforge.net/jcl/?rev=1913&view=rev
Author: outchy
Date: 2007-02-06 09:28:14 -0800 (Tue, 06 Feb 2007)
Log Message:
-----------
Handle MAP files made by Delphi 2005 and earlier versions of the IDE: the modules can now contain more than one segment of code (used to be named "CODE" and "ICODE").
Both segments (if present to keep backward compatibility with previous versions of Delphi) are stored in Jedi Debug Data (either inserted in the binary or placed in the .jdbg file).
Minor change: symbols in MAP files generated by C++Builder may contain spaces in their names, they are now kept.
Modified Paths:
--------------
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-04 18:37:27 UTC (rev 1912)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-06 17:28:14 UTC (rev 1913)
@@ -131,7 +131,7 @@
constructor Create(const MapFileName: TFileName); virtual;
destructor Destroy; override;
procedure Parse;
- class function MapStringToStr(MapString: PJclMapString): string;
+ class function MapStringToStr(MapString: PJclMapString; IgnoreSpaces: Boolean = False): string;
class function MapStringToFileName(MapString: PJclMapString): string;
property LinkerBug: Boolean read FLinkerBug;
property LinkerBugUnitName: string read GetLinkerBugUnitName;
@@ -170,38 +170,52 @@
end;
// MAP file scanner
+ PJclMapSegmentClass = ^TJclMapSegmentClass;
+ TJclMapSegmentClass = record
+ Segment: Word;
+ Addr: DWORD;
+ VA: DWORD;
+ Len: DWORD;
+ SectionName: PJclMapString;
+ GroupName: PJclMapString;
+ end;
+
PJclMapSegment = ^TJclMapSegment;
TJclMapSegment = record
- StartAddr: DWORD;
- EndAddr: DWORD;
+ Segment: Word;
+ StartVA: DWORD; // VA relative to (module base address + $10000)
+ EndVA: DWORD;
UnitName: PJclMapString;
end;
PJclMapProcName = ^TJclMapProcName;
TJclMapProcName = record
- Addr: DWORD;
+ Segment: Word;
+ VA: DWORD; // VA relative to (module base address + $10000)
ProcName: PJclMapString;
end;
PJclMapLineNumber = ^TJclMapLineNumber;
TJclMapLineNumber = record
- Addr: DWORD;
+ Segment: Word;
+ VA: DWORD; // VA relative to (module base address + $10000)
LineNumber: Integer;
end;
TJclMapScanner = class(TJclAbstractMapParser)
private
+ FSegmentClasses: array of TJclMapSegmentClass;
FLineNumbers: array of TJclMapLineNumber;
FProcNames: array of TJclMapProcName;
FSegments: array of TJclMapSegment;
FSourceNames: array of TJclMapProcName;
- FLastValidAddr: TJclMapAddress;
FLineNumbersCnt: Integer;
FLineNumberErrors: Integer;
FNewUnitFileName: PJclMapString;
FProcNamesCnt: Integer;
- FTopValidAddr: Integer;
+ FSegmentCnt: Integer;
protected
+ function AddrToVA(const Addr: DWORD): DWORD;
procedure ClassTableItem(const Address: TJclMapAddress; Len: Integer; SectionName, GroupName: PJclMapString); override;
procedure SegmentItem(const Address: TJclMapAddress; Len: Integer; GroupName, UnitName: PJclMapString); override;
procedure PublicsByNameItem(const Address: TJclMapAddress; Name: PJclMapString); override;
@@ -211,6 +225,7 @@
procedure Scan;
public
constructor Create(const MapFileName: TFileName); override;
+ // Addr are virtual addresses relative to (module base address + $10000)
function LineNumberFromAddr(Addr: DWORD): Integer; overload;
function LineNumberFromAddr(Addr: DWORD; var Offset: Integer): Integer; overload;
function ModuleNameFromAddr(Addr: DWORD): string;
@@ -1022,7 +1037,8 @@
SetString(Result, PStart, PEnd - PStart);
end;
-class function TJclAbstractMapParser.MapStringToStr(MapString: PJclMapString): string;
+class function TJclAbstractMapParser.MapStringToStr(MapString: PJclMapString;
+ IgnoreSpaces: Boolean): string;
var
P: PChar;
begin
@@ -1041,8 +1057,12 @@
else
begin
P := MapString;
- while not (P^ in [AnsiSpace, AnsiCarriageReturn, '(']) do
- Inc(P);
+ if IgnoreSpaces then
+ while not (P^ in [AnsiCarriageReturn, '(']) do
+ Inc(P)
+ else
+ while not (P^ in [AnsiSpace, AnsiCarriageReturn, '(']) do
+ Inc(P);
end;
SetString(Result, MapString, P - MapString);
end;
@@ -1267,7 +1287,7 @@
begin
A := ReadAddress;
P1 := ReadString;
- SkipWhiteSpace;
+ SkipEndLine; // compatibility with C++Builder MAP files
PublicsByNameItem(A, P1);
end;
if SyncToHeader(PublicsByValueHeader) then
@@ -1275,7 +1295,7 @@
begin
A := ReadAddress;
P1 := ReadString;
- SkipWhiteSpace;
+ SkipEndLine; // compatibility with C++Builder MAP files
PublicsByValueItem(A, P1);
end;
while SyncToPrefix(LineNumbersPrefix) do
@@ -1331,14 +1351,16 @@
Name: PJclMapString);
begin
if Assigned(FOnPublicsByName) then
- FOnPublicsByName(Self, Address, MapStringToStr(Name));
+ // MAP files generated by C++Builder have spaces in their identifier names
+ FOnPublicsByName(Self, Address, MapStringToStr(Name, True));
end;
procedure TJclMapParser.PublicsByValueItem(const Address: TJclMapAddress;
Name: PJclMapString);
begin
if Assigned(FOnPublicsByValue) then
- FOnPublicsByValue(Self, Address, MapStringToStr(Name));
+ // MAP files generated by C++Builder have spaces in their identifier names
+ FOnPublicsByValue(Self, Address, MapStringToStr(Name, True));
end;
procedure TJclMapParser.SegmentItem(const Address: TJclMapAddress;
@@ -1356,9 +1378,35 @@
Scan;
end;
+function TJclMapScanner.AddrToVA(const Addr: DWORD): DWORD;
+begin
+ // MAP file format was changed in Delphi 2005
+ // before Delphi 2005: segments started at offset 0
+ // only one segment of code
+ // after Delphi 2005: segments started at code base address (module base address + $10000)
+ // 2 segments of code
+ if (Length(FSegmentClasses) > 0) and (FSegmentClasses[0].Addr > 0) then
+ // Delphi 2005 and earlier
+ // The first segment should be code starting at module base address + $10000
+ Result := Addr - FSegmentClasses[0].Addr
+ else
+ // before Delphi 2005
+ Result := Addr;
+end;
+
procedure TJclMapScanner.ClassTableItem(const Address: TJclMapAddress; Len: Integer;
SectionName, GroupName: PJclMapString);
+var
+ C: Integer;
begin
+ C := Length(FSegmentClasses);
+ SetLength(FSegmentClasses, C + 1);
+ FSegmentClasses[C].Segment := Address.Segment;
+ FSegmentClasses[C].Addr := Address.Offset;
+ FSegmentClasses[C].VA := AddrToVA(Address.Offset);
+ FSegmentClasses[C].Len := Len;
+ FSegmentClasses[C].SectionName := SectionName;
+ FSegmentClasses[C].GroupName := GroupName;
end;
function TJclMapScanner.LineNumberFromAddr(Addr: DWORD): Integer;
@@ -1370,7 +1418,7 @@
function Search_MapLineNumber(Item1, Item2: Pointer): Integer;
begin
- Result := Integer(PJclMapLineNumber(Item1)^.Addr) - PInteger(Item2)^;
+ Result := Integer(PJclMapLineNumber(Item1)^.VA) - PInteger(Item2)^;
end;
function TJclMapScanner.LineNumberFromAddr(Addr: DWORD; var Offset: Integer): Integer;
@@ -1382,37 +1430,44 @@
Result := 0;
Offset := 0;
I := SearchDynArray(FLineNumbers, SizeOf(FLineNumbers[0]), Search_MapLineNumber, @Addr, True);
- if (I <> -1) and (FLineNumbers[I].Addr >= ModuleStartAddr) then
+ if (I <> -1) and (FLineNumbers[I].VA >= ModuleStartAddr) then
begin
Result := FLineNumbers[I].LineNumber;
- Offset := Addr - FLineNumbers[I].Addr;
+ Offset := Addr - FLineNumbers[I].VA;
end;
end;
procedure TJclMapScanner.LineNumbersItem(LineNumber: Integer; const Address: TJclMapAddress);
var
- C: Integer;
+ SegIndex, C: Integer;
+ VA: DWORD;
+ Added: Boolean;
begin
- // Try to eliminate invalid line numbers caused by bug in the linker
- if (FLastValidAddr.Offset = 0) or ((Address.Offset > 0) and (Address.Offset <= FTopValidAddr) and
- (FLastValidAddr.Segment = Address.Segment) and (FLastValidAddr.Offset < Address.Offset)) then
+ Added := False;
+ for SegIndex := Low(FSegmentClasses) to High(FSegmentClasses) do
+ if (FSegmentClasses[SegIndex].Segment = Address.Segment)
+ and (DWORD(Address.Offset) < FSegmentClasses[SegIndex].Len) then
begin
- FLastValidAddr := Address;
+ VA := AddrToVA(DWORD(Address.Offset) + FSegmentClasses[SegIndex].Addr);
if FLineNumbersCnt mod 256 = 0 then
SetLength(FLineNumbers, FLineNumbersCnt + 256);
- FLineNumbers[FLineNumbersCnt].Addr := Address.Offset;
+ FLineNumbers[FLineNumbersCnt].Segment := FSegmentClasses[SegIndex].Segment;
+ FLineNumbers[FLineNumbersCnt].VA := VA;
FLineNumbers[FLineNumbersCnt].LineNumber := LineNumber;
Inc(FLineNumbersCnt);
+ Added := True;
if FNewUnitFileName <> nil then
begin
C := Length(FSourceNames);
SetLength(FSourceNames, C + 1);
- FSourceNames[C].Addr := Address.Offset;
+ FSourceNames[C].Segment := FSegmentClasses[SegIndex].Segment;
+ FSourceNames[C].VA := VA;
FSourceNames[C].ProcName := FNewUnitFileName;
FNewUnitFileName := nil;
end;
- end
- else
+ Break;
+ end;
+ if not Added then
Inc(FLineNumberErrors);
end;
@@ -1427,7 +1482,7 @@
begin
Result := '';
for I := Length(FSegments) - 1 downto 0 do
- if (FSegments[I].StartAddr <= Addr) and (FSegments[I].EndAddr >= Addr) then
+ if (FSegments[I].StartVA <= Addr) and (Addr < FSegments[I].EndVA) then
begin
Result := MapStringToStr(FSegments[I].UnitName);
Break;
@@ -1440,9 +1495,9 @@
begin
Result := DWORD(-1);
for I := Length(FSegments) - 1 downto 0 do
- if (FSegments[I].StartAddr <= Addr) and (FSegments[I].EndAddr >= Addr) then
+ if (FSegments[I].StartVA <= Addr) and (Addr < FSegments[I].EndVA) then
begin
- Result := FSegments[I].StartAddr;
+ Result := FSegments[I].StartVA;
Break;
end;
end;
@@ -1456,7 +1511,7 @@
function Search_MapProcName(Item1, Item2: Pointer): Integer;
begin
- Result := Integer(PJclMapProcName(Item1)^.Addr) - PInteger(Item2)^;
+ Result := Integer(PJclMapProcName(Item1)^.VA) - PInteger(Item2)^;
end;
function TJclMapScanner.ProcNameFromAddr(Addr: DWORD; var Offset: Integer): string;
@@ -1468,10 +1523,10 @@
Result := '';
Offset := 0;
I := SearchDynArray(FProcNames, SizeOf(FProcNames[0]), Search_MapProcName, @Addr, True);
- if (I <> -1) and (FProcNames[I].Addr >= ModuleStartAddr) then
+ if (I <> -1) and (FProcNames[I].VA >= ModuleStartAddr) then
begin
- Result := MapStringToStr(FProcNames[I].ProcName);
- Offset := Addr - FProcNames[I].Addr;
+ Result := MapStringToStr(FProcNames[I].ProcName, True);
+ Offset := Addr - FProcNames[I].VA;
end;
end;
@@ -1481,53 +1536,84 @@
end;
procedure TJclMapScanner.PublicsByValueItem(const Address: TJclMapAddress; Name: PJclMapString);
+var
+ SegIndex: Integer;
begin
- if Address.Segment = 1 then
+ for SegIndex := Low(FSegmentClasses) to High(FSegmentClasses) do
+ if (FSegmentClasses[SegIndex].Segment = Address.Segment)
+ and (DWORD(Address.Offset) < FSegmentClasses[SegIndex].Len) then
begin
if FProcNamesCnt mod 256 = 0 then
SetLength(FProcNames, FProcNamesCnt + 256);
- FProcNames[FProcNamesCnt].Addr := Address.Offset;
+ FProcNames[FProcNamesCnt].Segment := FSegmentClasses[SegIndex].Segment;
+ FProcNames[FProcNamesCnt].VA := AddrToVA(DWORD(Address.Offset) + FSegmentClasses[SegIndex].Addr);
FProcNames[FProcNamesCnt].ProcName := Name;
Inc(FProcNamesCnt);
+ Break;
end;
end;
+function Sort_MapLineNumber(Item1, Item2: Pointer): Integer;
+begin
+ Result := Integer(PJclMapLineNumber(Item1)^.VA) - Integer(PJclMapLineNumber(Item2)^.VA);
+end;
+
+function Sort_MapProcName(Item1, Item2: Pointer): Integer;
+begin
+ Result := Integer(PJclMapProcName(Item1)^.VA) - Integer(PJclMapProcName(Item2)^.VA);
+end;
+
+function Sort_MapSegment(Item1, Item2: Pointer): Integer;
+begin
+ Result := Integer(PJclMapSegment(Item1)^.StartVA) - Integer(PJclMapSegment(Item2)^.StartVA);
+end;
+
procedure TJclMapScanner.Scan;
begin
- FLastValidAddr.Segment := 0;
- FLastValidAddr.Offset := 0;
- FTopValidAddr := 0;
FLineNumberErrors := 0;
+ FSegmentCnt := 0;
+ FProcNamesCnt := 0;
Parse;
SetLength(FLineNumbers, FLineNumbersCnt);
SetLength(FProcNames, FProcNamesCnt);
+ SetLength(FSegments, FSegmentCnt);
+ SortDynArray(FLineNumbers, SizeOf(FLineNumbers[0]), Sort_MapLineNumber);
+ SortDynArray(FProcNames, SizeOf(FProcNames[0]), Sort_MapProcName);
+ SortDynArray(FSegments, SizeOf(FSegments[0]), Sort_MapSegment);
+ SortDynArray(FSourceNames, SizeOf(FSourceNames[0]), Sort_MapProcName);
end;
procedure TJclMapScanner.SegmentItem(const Address: TJclMapAddress; Len: Integer;
GroupName, UnitName: PJclMapString);
var
- C: Integer;
+ SegIndex: Integer;
+ VA: DWORD;
begin
- if Address.Segment = 1 then
+ for SegIndex := Low(FSegmentClasses) to High(FSegmentClasses) do
+ if (FSegmentClasses[SegIndex].Segment = Address.Segment)
+ and (DWORD(Address.Offset) < FSegmentClasses[SegIndex].Len) then
begin
- C := Length(FSegments);
- SetLength(FSegments, C + 1);
- FSegments[C].StartAddr := Address.Offset;
- FSegments[C].EndAddr := Address.Offset + Len;
- FSegments[C].UnitName := UnitName;
- FTopValidAddr := Max(FTopValidAddr, Address.Offset + Len);
+ VA := AddrToVA(DWORD(Address.Offset) + FSegmentClasses[SegIndex].Addr);
+ if FSegmentCnt mod 16 = 0 then
+ SetLength(FSegments, FSegmentCnt + 16);
+ FSegments[FSegmentCnt].Segment := FSegmentClasses[SegIndex].Segment;
+ FSegments[FSegmentCnt].StartVA := VA;
+ FSegments[FSegmentCnt].EndVA := VA + DWORD(Len);
+ FSegments[FSegmentCnt].UnitName := UnitName;
+ Inc(FSegmentCnt);
+ Break;
end;
end;
function TJclMapScanner.SourceNameFromAddr(Addr: DWORD): string;
var
I: Integer;
- ModuleStartAddr: DWORD;
+ ModuleStartVA: DWORD;
begin
- ModuleStartAddr := ModuleStartFromAddr(Addr);
+ ModuleStartVA := ModuleStartFromAddr(Addr);
Result := '';
I := SearchDynArray(FSourceNames, SizeOf(FSourceNames[0]), Search_MapProcName, @Addr, True);
- if (I <> -1) and (FSourceNames[I].Addr >= ModuleStartAddr) then
+ if (I <> -1) and (FSourceNames[I].VA >= ModuleStartVA) then
Result := MapStringToStr(FSourceNames[I].ProcName);
end;
@@ -1932,13 +2018,10 @@
procedure TJclBinDebugGenerator.CreateData;
var
- FileHeader: TJclDbgHeader;
WordList: TStringList;
WordStream: TMemoryStream;
- I, D: Integer;
- S: string;
- L1, L2, L3: Integer;
- FirstWord, SecondWord: Integer;
+ LastSegmentID: Word;
+ LastSegmentStored: Boolean;
function AddWord(const S: string): Integer;
var
@@ -1988,7 +2071,35 @@
LastValue := Value;
end;
+ function IsSegmentStored(SegID: Word): Boolean;
+ var
+ SegIndex: Integer;
+ GroupName: string;
+ begin
+ if (SegID <> LastSegmentID) then
+ begin
+ LastSegmentID := $FFFF;
+ LastSegmentStored := False;
+ for SegIndex := Low(FSegmentClasses) to High(FSegmentClasses) do
+ if FSegmentClasses[SegIndex].Segment = SegID then
+ begin
+ LastSegmentID := FSegmentClasses[SegIndex].Segment;
+ GroupName := MapStringToStr(FSegmentClasses[SegIndex].GroupName);
+ LastSegmentStored := (GroupName = 'CODE') or (GroupName = 'ICODE');
+ Break;
+ end;
+ end;
+ Result := LastSegmentStored;
+ end;
+
+var
+ FileHeader: TJclDbgHeader;
+ I, D: Integer;
+ S: string;
+ L1, L2, L3: Integer;
+ FirstWord, SecondWord: Integer;
begin
+ LastSegmentID := $FFFF;
WordStream := TMemoryStream.Create;
WordList := TStringList.Create;
try
@@ -2006,8 +2117,9 @@
L1 := 0;
L2 := 0;
for I := 0 to Length(FSegments) - 1 do
+ if IsSegmentStored(FSegments[I].Segment) then
begin
- WriteValueOfs(FSegments[I].StartAddr, L1);
+ WriteValueOfs(FSegments[I].StartVA, L1);
WriteValueOfs(AddWord(MapStringToStr(FSegments[I].UnitName)), L2);
end;
WriteValue(MaxInt);
@@ -2016,8 +2128,9 @@
L1 := 0;
L2 := 0;
for I := 0 to Length(FSourceNames) - 1 do
+ if IsSegmentStored(FSourceNames[I].Segment) then
begin
- WriteValueOfs(FSourceNames[I].Addr, L1);
+ WriteValueOfs(FSourceNames[I].VA, L1);
WriteValueOfs(AddWord(MapStringToStr(FSourceNames[I].ProcName)), L2);
end;
WriteValue(MaxInt);
@@ -2027,9 +2140,11 @@
L2 := 0;
L3 := 0;
for I := 0 to Length(FProcNames) - 1 do
+ if IsSegmentStored(FProcNames[I].Segment) then
begin
- WriteValueOfs(FProcNames[I].Addr, L1);
- S := MapStringToStr(FProcNames[I].ProcName);
+ WriteValueOfs(FProcNames[I].VA, L1);
+ // MAP files generated by C++Builder have spaces in their names
+ S := MapStringToStr(FProcNames[I].ProcName, True);
D := Pos('.', S);
if D = 1 then
begin
@@ -2056,8 +2171,9 @@
L1 := 0;
L2 := 0;
for I := 0 to Length(FLineNumbers) - 1 do
+ if IsSegmentStored(FLineNumbers[I].Segment) then
begin
- WriteValueOfs(FLineNumbers[I].Addr, L1);
+ WriteValueOfs(FLineNumbers[I].VA, L1);
WriteValueOfs(FLineNumbers[I].LineNumber, L2);
end;
WriteValue(MaxInt);
@@ -2088,18 +2204,18 @@
var
P: Pointer;
Value, LineNumber, C, Ln: Integer;
- CurrAddr: DWORD;
+ CurrVA: DWORD;
begin
if FLineNumbers = nil then
begin
LineNumber := 0;
- CurrAddr := 0;
+ CurrVA := 0;
C := 0;
Ln := 0;
P := MakePtr(PJclDbgHeader(FStream.Memory)^.LineNumbers);
while ReadValue(P, Value) do
begin
- Inc(CurrAddr, Value);
+ Inc(CurrVA, Value);
ReadValue(P, Value);
Inc(LineNumber, Value);
if C = Ln then
@@ -2110,7 +2226,7 @@
Ln := Ln + Ln div 4;
SetLength(FLineNumbers, Ln);
end;
- FLineNumbers[C].Addr := CurrAddr;
+ FLineNumbers[C].VA := CurrVA;
FLineNumbers[C].LineNumber := LineNumber;
Inc(C);
end;
@@ -2215,21 +2331,21 @@
var
P: Pointer;
Value, LineNumber: Integer;
- CurrAddr, ModuleStartAddr, ItemAddr: DWORD;
+ CurrVA, ModuleStartVA, ItemVA: DWORD;
begin
- ModuleStartAddr := ModuleStartFromAddr(Addr);
+ ModuleStartVA := ModuleStartFromAddr(Addr);
LineNumber := 0;
Offset := 0;
if FCacheData then
begin
CacheLineNumbers;
for Value := Length(FLineNumbers) - 1 downto 0 do
- if FLineNumbers[Value].Addr <= Addr then
+ if FLineNumbers[Value].VA <= Addr then
begin
- if FLineNumbers[Value].Addr >= ModuleStartAddr then
+ if FLineNumbers[Value].VA >= ModuleStartVA then
begin
LineNumber := FLineNumbers[Value].LineNumber;
- Offset := Addr - FLineNumbers[Value].Addr;
+ Offset := Addr - FLineNumbers[Value].VA;
end;
Break;
end;
@@ -2237,14 +2353,14 @@
else
begin
P := MakePtr(PJclDbgHeader(FStream.Memory)^.LineNumbers);
- CurrAddr := 0;
- ItemAddr := 0;
+ CurrVA := 0;
+ ItemVA := 0;
while ReadValue(P, Value) do
begin
- Inc(CurrAddr, Value);
- if Addr < CurrAddr then
+ Inc(CurrVA, Value);
+ if Addr < CurrVA then
begin
- if ItemAddr < ModuleStartAddr then
+ if ItemVA < ModuleStartVA then
begin
LineNumber := 0;
Offset := 0;
@@ -2253,10 +2369,10 @@
end
else
begin
- ItemAddr := CurrAddr;
+ ItemVA := CurrVA;
ReadValue(P, Value);
Inc(LineNumber, Value);
- Offset := Addr - CurrAddr;
+ Offset := Addr - CurrVA;
end;
end;
end;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-04 18:37:32
|
Revision: 1912
http://svn.sourceforge.net/jcl/?rev=1912&view=rev
Author: outchy
Date: 2007-02-04 10:37:27 -0800 (Sun, 04 Feb 2007)
Log Message:
-----------
Branch "PE_64" merged into the trunk of development.
Modified Paths:
--------------
trunk/jcl/examples/windows/delphitools/common/ToolsUtils.pas
trunk/jcl/examples/windows/delphitools/peviewer/PeDump.pas
trunk/jcl/source/common/JclResources.pas
trunk/jcl/source/common/JclUnitVersioningProviders.pas
trunk/jcl/source/prototypes/win32api/DelayImp.int
trunk/jcl/source/prototypes/win32api/ImageHlp.imp
trunk/jcl/source/prototypes/win32api/ImageHlp.int
trunk/jcl/source/windows/JclCLR.pas
trunk/jcl/source/windows/JclDebug.pas
trunk/jcl/source/windows/JclPeImage.pas
trunk/jcl/source/windows/JclWin32.pas
Modified: trunk/jcl/examples/windows/delphitools/common/ToolsUtils.pas
===================================================================
--- trunk/jcl/examples/windows/delphitools/common/ToolsUtils.pas 2007-02-04 09:39:18 UTC (rev 1911)
+++ trunk/jcl/examples/windows/delphitools/common/ToolsUtils.pas 2007-02-04 18:37:27 UTC (rev 1912)
@@ -78,7 +78,7 @@
implementation
uses
- About, CommCtrl, JclPeImage;
+ About, CommCtrl, JclPeImage, JclWin32;
resourcestring
RsJCLLink = 'Jedi Code Library;http://delphi-jedi.org/Jedi:CODELIBJCL';
@@ -119,11 +119,24 @@
function GetImageBase(const FileName: TFileName): DWORD;
var
- NtHeaders: TImageNtHeaders;
+ NtHeaders32: TImageNtHeaders32;
+ NtHeaders64: TImageNtHeaders64;
+ ImageStream: TMemoryStream;
+ PETarget: TJclPeTarget;
begin
- if PeGetNtHeaders(FileName, NtHeaders) then
- Result := NtHeaders.OptionalHeader.ImageBase
+ 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;
Modified: trunk/jcl/examples/windows/delphitools/peviewer/PeDump.pas
===================================================================
--- trunk/jcl/examples/windows/delphitools/peviewer/PeDump.pas 2007-02-04 09:39:18 UTC (rev 1911)
+++ trunk/jcl/examples/windows/delphitools/peviewer/PeDump.pas 2007-02-04 18:37:27 UTC (rev 1912)
@@ -502,16 +502,33 @@
var
Percent: Single;
begin
- with Item, FPeImage.OptionalHeader do
+ if FPeImage.Target = taWin64 then
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]);
+ 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;
@@ -644,7 +661,10 @@
Caption := ImageSectionNames[Item.Index];
with ImageSectionHeaders[Item.Index] do
begin
- Percent := SizeOfRawData * 100 / OptionalHeader.SizeOfImage;
+ 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]));
Modified: trunk/jcl/source/common/JclResources.pas
===================================================================
--- trunk/jcl/source/common/JclResources.pas 2007-02-04 09:39:18 UTC (rev 1911)
+++ trunk/jcl/source/common/JclResources.pas 2007-02-04 18:37:27 UTC (rev 1912)
@@ -1311,6 +1311,7 @@
// TJclPeImage
RsPeCantOpen = 'Cannot open file "%s"';
RsPeNotPE = 'This is not a PE format';
+ RsPeUnknownTarget = 'Unknown PE target';
RsPeNotResDir = 'Not a resource directory';
RsPeNotAvailableForAttached = 'Feature is not available for attached images';
RsPeSectionNotFound = 'Section "%s" not found';
@@ -1385,13 +1386,34 @@
RsPeEditList = 'EditList';
// Machine names
- RsPeMACHINE_UNKNOWN = 'Unknown';
- RsPeMACHINE_I386 = 'Intel 386';
- RsPeMACHINE_R3000 = 'MIPS little-endian R3000';
- RsPeMACHINE_R4000 = 'MIPS little-endian R4000';
- RsPeMACHINE_R10000 = 'MIPS little-endian R10000';
- RsPeMACHINE_ALPHA = 'Alpha_AXP';
- RsPeMACHINE_POWERPC = 'IBM PowerPC Little-Endian';
+ RsPeMACHINE_UNKNOWN = 'Unknown';
+ RsPeMACHINE_I386 = 'Intel 386';
+ RsPeMACHINE_R3000 = 'MIPS little-endian R3000';
+ RsPeMACHINE_R4000 = 'MIPS little-endian R4000';
+ RsPeMACHINE_R10000 = 'MIPS little-endian R10000';
+ RsPeMACHINE_WCEMIPSV2 = 'MIPS little-endian WCE v2';
+ RsPeMACHINE_ALPHA = 'Alpha_AXP';
+ RsPeMACHINE_SH3 = 'SH3 little-endian';
+ RsPeMACHINE_SH3DSP = 'SH3 DSP';
+ RsPeMACHINE_SH3E = 'SH3E little-endian';
+ RsPeMACHINE_SH4 = 'SH4 little-endian';
+ RsPeMACHINE_SH5 = 'SH5';
+ RsPeMACHINE_ARM = 'ARM Little-Endian';
+ RsPeMACHINE_THUMB = 'THUMB';
+ RsPeMACHINE_AM33 = 'AM33';
+ RsPeMACHINE_POWERPC = 'IBM PowerPC Little-Endian';
+ RsPeMACHINE_POWERPCFP = 'IBM PowerPC FP';
+ RsPeMACHINE_IA64 = 'Intel 64';
+ RsPeMACHINE_MIPS16 = 'MIPS16';
+ RsPeMACHINE_AMPHA64 = 'ALPHA64';
+ RsPeMACHINE_MIPSFPU = 'MIPSFPU';
+ RsPeMACHINE_MIPSFPU16 = 'MIPSFPU16';
+ RsPeMACHINE_TRICORE = 'Infineon';
+ RsPeMACHINE_CEF = 'CEF';
+ RsPeMACHINE_EBC = 'EFI Byte Code';
+ RsPeMACHINE_AMD64 = 'AMD64 (K8)';
+ RsPeMACHINE_M32R = 'M32R little-endian';
+ RsPeMACHINE_CEE = 'CEE';
// Subsystem names
RsPeSUBSYSTEM_UNKNOWN = 'Unknown';
@@ -1690,9 +1712,9 @@
RsIntelCacheDescr66 = '1st-level data cache: 8 KBytes, 4-way set associative, 64 byte line size';
RsIntelCacheDescr67 = '1st-level data cache: 16 KBytes, 4-way set associative, 64 byte line size';
RsIntelCacheDescr68 = '1st-level data cache: 32 KBytes, 4-way set associative, 64 byte line size';
- RsIntelCacheDescr70 = 'Trace cache: 12 K-\xB5Ops, 8-way set associative';
- RsIntelCacheDescr71 = 'Trace cache: 16 K-\xB5Ops, 8-way set associative';
- RsIntelCacheDescr72 = 'Trace cache: 32 K-\xB5Ops, 8-way set associative';
+ RsIntelCacheDescr70 = 'Trace cache: 12 K-Ops, 8-way set associative';
+ RsIntelCacheDescr71 = 'Trace cache: 16 K-Ops, 8-way set associative';
+ RsIntelCacheDescr72 = 'Trace cache: 32 K-Ops, 8-way set associative';
RsIntelCacheDescr78 = '2nd-level cache: 1 MBytes, 4-way set associative, 64 bytes line size';
RsIntelCacheDescr79 = '2nd-level cache: 128 KBytes, 8-way set associative, 64 bytes line size, 2 lines per sector';
RsIntelCacheDescr7A = '2nd-level cache: 256 KBytes, 8-way set associative, 64 bytes line size, 2 lines per sector';
Modified: trunk/jcl/source/common/JclUnitVersioningProviders.pas
===================================================================
--- trunk/jcl/source/common/JclUnitVersioningProviders.pas 2007-02-04 09:39:18 UTC (rev 1911)
+++ trunk/jcl/source/common/JclUnitVersioningProviders.pas 2007-02-04 18:37:27 UTC (rev 1912)
@@ -232,7 +232,7 @@
PeSectionStream: TJclPeSectionStream;
begin
Result := False;
- if PeMapImgFindSection(PeMapImgNtHeaders(Pointer(AModule)), JclUnitVersioningDataResName) <> nil then
+ if PeMapImgFindSectionFromModule(Pointer(AModule), JclUnitVersioningDataResName) <> nil then
begin
PeSectionStream := TJclPeSectionStream.Create(AModule, JclUnitVersioningDataResName);
try
Modified: trunk/jcl/source/prototypes/win32api/DelayImp.int
===================================================================
--- trunk/jcl/source/prototypes/win32api/DelayImp.int 2007-02-04 09:39:18 UTC (rev 1911)
+++ trunk/jcl/source/prototypes/win32api/DelayImp.int 2007-02-04 18:37:27 UTC (rev 1912)
@@ -1,51 +1,13 @@
{$IFNDEF CLR}
type
- { TODO : Source unknown }
- {$EXTERNALSYM ImgDelayDescr}
- ImgDelayDescr = packed record
- grAttrs: DWORD; // attributes
- szName: DWORD; // pointer to dll name
- phmod: PDWORD; // address of module handle
- { TODO : probably wrong declaration }
- pIAT: TImageThunkData; // address of the IAT
- { TODO : probably wrong declaration }
- pINT: TImageThunkData; // address of the INT
- { TODO : probably wrong declaration }
- pBoundIAT: TImageThunkData; // address of the optional bound IAT
- { TODO : probably wrong declaration }
- pUnloadIAT: TImageThunkData; // address of optional copy of original IAT
- dwTimeStamp: DWORD; // 0 if not bound,
- // O.W. date/time stamp of DLL bound to (Old BIND)
- end;
- TImgDelayDescr = ImgDelayDescr;
- PImgDelayDescr = ^ImgDelayDescr;
-
-(*
- // DelayImp.h, Borland BCC 5.5
- {$EXTERNALSYM ImgDelayDescr}
- ImgDelayDescr = packed record
- grAttrs: DWORD; // attributes
- szName: LPCSTR; // pointer to dll name
- { TODO : probably wrong declaration }
- hmod: HMODULE; // address of module handle
- pIAT: PIMAGE_THUNK_DATA; // address of the IAT
- pINT: PIMAGE_THUNK_DATA; // address of the INT
- pBoundIAT: PIMAGE_THUNK_DATA; // address of the optional bound IAT
- pUnloadIAT: PIMAGE_THUNK_DATA; // address of optional copy of original IAT
- dwTimeStamp: DWORD; // 0 if not bound,
- // O.W. date/time stamp of DLL bound to (Old BIND)
- end;
- TImgDelayDescr = ImgDelayDescr;
- PImgDelayDescr = ^ImgDelayDescr;
-
-
// Microsoft version (64 bit SDK)
{$EXTERNALSYM RVA}
RVA = DWORD;
- {$EXTERNALSYM ImgDelayDescr}
- ImgDelayDescr = packed record
+ // 64-bit PE
+ {$EXTERNALSYM ImgDelayDescrV2}
+ ImgDelayDescrV2 = packed record
grAttrs: DWORD; // attributes
rvaDLLName: RVA; // RVA to dll name
rvaHmod: RVA; // RVA of module handle
@@ -56,9 +18,34 @@
dwTimeStamp: DWORD; // 0 if not bound,
// O.W. date/time stamp of DLL bound to (Old BIND)
end;
- {$EXTERNALSYM PImgDelayDescr}
- PImgDelayDescr = ImgDelayDescr;
- TImgDelayDescr = ImgDelayDescr;
-*)
+ {$EXTERNALSYM TImgDelayDescrV2}
+ TImgDelayDescrV2 = ImgDelayDescrV2;
+ {$EXTERNALSYM PImgDelayDescrV2}
+ PImgDelayDescrV2 = ^ImgDelayDescrV2;
+ {$EXTERNALSYM PHMODULE}
+ PHMODULE = ^HMODULE;
+
+ // 32-bit PE
+ {$EXTERNALSYM ImgDelayDescrV1}
+ ImgDelayDescrV1 = packed record
+ grAttrs: DWORD; // attributes
+ szName: LPCSTR; // pointer to dll name
+ phmod: PHMODULE; // address of module handle
+ pIAT: PImageThunkData32; // address of the IAT
+ pINT: PImageThunkData32; // address of the INT
+ pBoundIAT: PImageThunkData32; // address of the optional bound IAT
+ pUnloadIAT: PImageThunkData32; // address of optional copy of original IAT
+ dwTimeStamp: DWORD; // 0 if not bound,
+ // O.W. date/time stamp of DLL bound to (Old BIND)
+ end;
+ {$EXTERNALSYM TImgDelayDescrV1}
+ TImgDelayDescrV1 = ImgDelayDescrV1;
+ {$EXTERNALSYM PImgDelayDescrV1}
+ PImgDelayDescrV1 = ^ImgDelayDescrV1;
+
+ //{$EXTERNALSYM PImgDelayDescr}
+ //PImgDelayDescr = ImgDelayDescr;
+ //TImgDelayDescr = ImgDelayDescr;
+
{$ENDIF ~CLR}
\ No newline at end of file
Modified: trunk/jcl/source/prototypes/win32api/ImageHlp.imp
===================================================================
--- trunk/jcl/source/prototypes/win32api/ImageHlp.imp 2007-02-04 09:39:18 UTC (rev 1911)
+++ trunk/jcl/source/prototypes/win32api/ImageHlp.imp 2007-02-04 18:37:27 UTC (rev 1912)
@@ -18,6 +18,19 @@
end;
var
+ _ReBaseImage64: Pointer;
+
+function ReBaseImage64;
+begin
+ GetProcedureAddress(_ReBaseImage64, ImageHlpLib, 'ReBaseImage64');
+ asm
+ mov esp, ebp
+ pop ebp
+ jmp [_ReBaseImage64]
+ end;
+end;
+
+var
_CheckSumMappedFile: Pointer;
function CheckSumMappedFile;
Modified: trunk/jcl/source/prototypes/win32api/ImageHlp.int
===================================================================
--- trunk/jcl/source/prototypes/win32api/ImageHlp.int 2007-02-04 09:39:18 UTC (rev 1911)
+++ trunk/jcl/source/prototypes/win32api/ImageHlp.int 2007-02-04 18:37:27 UTC (rev 1912)
@@ -36,6 +36,12 @@
var NewImageBase: ULONG_PTR; TimeStamp: ULONG): BOOL; stdcall;
{$EXTERNALSYM ReBaseImage}
+function ReBaseImage64(CurrentImageName: PAnsiChar; SymbolPath: PAnsiChar; fReBase: BOOL;
+ fRebaseSysfileOk: BOOL; fGoingDown: BOOL; CheckImageSize: ULONG;
+ var OldImageSize: ULONG; var OldImageBase: TJclAddr64; var NewImageSize: ULONG;
+ var NewImageBase: TJclAddr64; TimeStamp: ULONG): BOOL; stdcall;
+{$EXTERNALSYM ReBaseImage64}
+
// line 199
//
Modified: trunk/jcl/source/windows/JclCLR.pas
===================================================================
--- trunk/jcl/source/windows/JclCLR.pas 2007-02-04 09:39:18 UTC (rev 1911)
+++ trunk/jcl/source/windows/JclCLR.pas 2007-02-04 18:37:27 UTC (rev 1912)
@@ -1506,9 +1506,22 @@
begin
with TStringList.Create do
try
- Add(Format('.imagebase 0x%.8x', [Image.OptionalHeader.ImageBase]));
- Add(Format('.subsystem 0x%.8x', [Image.OptionalHeader.SubSystem]));
- Add(Format('.file alignment %d', [Image.OptionalHeader.FileAlignment]));
+ case Image.Target of
+ taWin32:
+ begin
+ Add(Format('.imagebase 0x%.8x', [Image.OptionalHeader32.ImageBase]));
+ Add(Format('.subsystem 0x%.8x', [Image.OptionalHeader32.SubSystem]));
+ Add(Format('.file alignment %d', [Image.OptionalHeader32.FileAlignment]));
+ end;
+ taWin64:
+ begin
+ Add(Format('.imagebase 0x%.16x', [Image.OptionalHeader64.ImageBase]));
+ Add(Format('.subsystem 0x%.8x', [Image.OptionalHeader64.SubSystem]));
+ Add(Format('.file alignment %d', [Image.OptionalHeader64.FileAlignment]));
+ end;
+ //taUnknown: ;
+ end;
+
if Assigned(FTableStream) then
begin
FTableStream.Update;
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-04 09:39:18 UTC (rev 1911)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-04 18:37:27 UTC (rev 1912)
@@ -910,19 +910,19 @@
function TJclModuleInfoList.CreateItemForAddress(Addr: Pointer; SystemModule: Boolean): TJclModuleInfo;
var
Module: HMODULE;
- NtHeaders: PImageNtHeaders;
+ ModuleSize: DWORD;
begin
Result := nil;
Module := ModuleFromAddr(Addr);
if Module > 0 then
begin
- NtHeaders := PeMapImgNtHeaders(Pointer(Module));
- if NtHeaders <> nil then
+ ModuleSize := PeMapImgSize(Pointer(Module));
+ if ModuleSize <> 0 then
begin
Result := TJclModuleInfo.Create;
Result.FStartAddr := Pointer(Module);
- Result.FSize := NtHeaders^.OptionalHeader.SizeOfImage;
- Result.FEndAddr := Pointer(Module + Result.FSize - 1);
+ Result.FSize := ModuleSize;
+ Result.FEndAddr := Pointer(Module + ModuleSize - 1);
if SystemModule then
Result.FSystemModule := True
else
@@ -1779,12 +1779,13 @@
MapFileSize, JclDebugDataSize, Dummy);
end;
+// TODO 64 bit version
function InsertDebugDataIntoExecutableFile(const ExecutableFileName: TFileName;
BinDebug: TJclBinDebugGenerator; var LinkerBugUnit: string;
var MapFileSize, JclDebugDataSize, LineNumberErrors: Integer): Boolean;
var
ImageStream: TMemoryStream;
- NtHeaders: PImageNtHeaders;
+ NtHeaders32: PImageNtHeaders32;
Sections, LastSection, JclDebugSection: PImageSectionHeader;
VirtualAlignedSize: DWORD;
I, X, NeedFill: Integer;
@@ -1818,63 +1819,68 @@
try
try
ImageStream.LoadFromFile(ExecutableFileName);
- MapFileSize := BinDebug.Stream.Size;
- JclDebugDataSize := BinDebug.DataStream.Size;
- NtHeaders := PeMapImgNtHeaders(ImageStream.Memory);
- Assert(NtHeaders <> nil);
- Sections := PeMapImgSections(NtHeaders);
- Assert(Sections <> nil);
- // Check whether there is not a section with the name already. If so, return True (#0000069)
- if PeMapImgFindSection(NtHeaders, JclDbgDataResName) <> nil then
+ if PeMapImgTarget(ImageStream.Memory) = taWin32 then
begin
- Result := True;
- Exit;
- end;
+ MapFileSize := BinDebug.Stream.Size;
+ JclDebugDataSize := BinDebug.DataStream.Size;
+ NtHeaders32 := PeMapImgNtHeaders32(ImageStream.Memory);
+ Assert(NtHeaders32 <> nil);
+ Sections := PeMapImgSections32(NtHeaders32);
+ Assert(Sections <> nil);
+ // Check whether there is not a section with the name already. If so, return True (#0000069)
+ if PeMapImgFindSection32(NtHeaders32, JclDbgDataResName) <> nil then
+ begin
+ Result := True;
+ Exit;
+ end;
- LastSection := Sections;
- Inc(LastSection, NtHeaders^.FileHeader.NumberOfSections - 1);
- JclDebugSection := LastSection;
- Inc(JclDebugSection);
-
- // Increase the number of sections
- Inc(NtHeaders^.FileHeader.NumberOfSections);
- FillChar(JclDebugSection^, SizeOf(TImageSectionHeader), #0);
- // JCLDEBUG Virtual Address
- JclDebugSection^.VirtualAddress := LastSection^.VirtualAddress + LastSection^.Misc.VirtualSize;
- RoundUpToAlignment(JclDebugSection^.VirtualAddress, NtHeaders^.OptionalHeader.SectionAlignment);
- // JCLDEBUG Physical Offset
- JclDebugSection^.PointerToRawData := LastSection^.PointerToRawData + LastSection^.SizeOfRawData;
- RoundUpToAlignment(JclDebugSection^.PointerToRawData, NtHeaders^.OptionalHeader.FileAlignment);
- // JCLDEBUG Section name
- StrPLCopy(PChar(@JclDebugSection^.Name), JclDbgDataResName, IMAGE_SIZEOF_SHORT_NAME);
- // JCLDEBUG Characteristics flags
- JclDebugSection^.Characteristics := IMAGE_SCN_MEM_READ or IMAGE_SCN_CNT_INITIALIZED_DATA;
-
- // Size of virtual data area
- JclDebugSection^.Misc.VirtualSize := JclDebugDataSize;
- VirtualAlignedSize := JclDebugDataSize;
- RoundUpToAlignment(VirtualAlignedSize, NtHeaders^.OptionalHeader.SectionAlignment);
- // Update Size of Image
- Inc(NtHeaders^.OptionalHeader.SizeOfImage, VirtualAlignedSize);
- // Raw data size
- JclDebugSection^.SizeOfRawData := JclDebugDataSize;
- RoundUpToAlignment(JclDebugSection^.SizeOfRawData, NtHeaders^.OptionalHeader.FileAlignment);
- // Update Initialized data size
- Inc(NtHeaders^.OptionalHeader.SizeOfInitializedData, JclDebugSection^.SizeOfRawData);
-
- // Fill data to alignment
- NeedFill := Integer(JclDebugSection^.SizeOfRawData) - JclDebugDataSize;
-
- // Note: Delphi linker seems to generate incorrect (unaligned) size of
- // the executable when adding TD32 debug data so the position could be
- // behind the size of the file then.
- ImageStream.Seek(JclDebugSection^.PointerToRawData, soFromBeginning);
- ImageStream.CopyFrom(BinDebug.DataStream, 0);
- X := 0;
- for I := 1 to NeedFill do
- ImageStream.WriteBuffer(X, 1);
-
- ImageStream.SaveToFile(ExecutableFileName);
+ LastSection := Sections;
+ Inc(LastSection, NtHeaders32^.FileHeader.NumberOfSections - 1);
+ JclDebugSection := LastSection;
+ Inc(JclDebugSection);
+
+ // Increase the number of sections
+ Inc(NtHeaders32^.FileHeader.NumberOfSections);
+ FillChar(JclDebugSection^, SizeOf(TImageSectionHeader), #0);
+ // JCLDEBUG Virtual Address
+ JclDebugSection^.VirtualAddress := LastSection^.VirtualAddress + LastSection^.Misc.VirtualSize;
+ RoundUpToAlignment(JclDebugSection^.VirtualAddress, NtHeaders32^.OptionalHeader.SectionAlignment);
+ // JCLDEBUG Physical Offset
+ JclDebugSection^.PointerToRawData := LastSection^.PointerToRawData + LastSection^.SizeOfRawData;
+ RoundUpToAlignment(JclDebugSection^.PointerToRawData, NtHeaders32^.OptionalHeader.FileAlignment);
+ // JCLDEBUG Section name
+ StrPLCopy(PChar(@JclDebugSection^.Name), JclDbgDataResName, IMAGE_SIZEOF_SHORT_NAME);
+ // JCLDEBUG Characteristics flags
+ JclDebugSection^.Characteristics := IMAGE_SCN_MEM_READ or IMAGE_SCN_CNT_INITIALIZED_DATA;
+
+ // Size of virtual data area
+ JclDebugSection^.Misc.VirtualSize := JclDebugDataSize;
+ VirtualAlignedSize := JclDebugDataSize;
+ RoundUpToAlignment(VirtualAlignedSize, NtHeaders32^.OptionalHeader.SectionAlignment);
+ // Update Size of Image
+ Inc(NtHeaders32^.OptionalHeader.SizeOfImage, VirtualAlignedSize);
+ // Raw data size
+ JclDebugSection^.SizeOfRawData := JclDebugDataSize;
+ RoundUpToAlignment(JclDebugSection^.SizeOfRawData, NtHeaders32^.OptionalHeader.FileAlignment);
+ // Update Initialized data size
+ Inc(NtHeaders32^.OptionalHeader.SizeOfInitializedData, JclDebugSection^.SizeOfRawData);
+
+ // Fill data to alignment
+ NeedFill := Integer(JclDebugSection^.SizeOfRawData) - JclDebugDataSize;
+
+ // Note: Delphi linker seems to generate incorrect (unaligned) size of
+ // the executable when adding TD32 debug data so the position could be
+ // behind the size of the file then.
+ ImageStream.Seek(JclDebugSection^.PointerToRawData, soFromBeginning);
+ ImageStream.CopyFrom(BinDebug.DataStream, 0);
+ X := 0;
+ for I := 1 to NeedFill do
+ ImageStream.WriteBuffer(X, 1);
+
+ ImageStream.SaveToFile(ExecutableFileName);
+ end
+ else
+ Result := False;
except
Result := False;
end;
@@ -2648,7 +2654,7 @@
VerifyFileName: Boolean;
begin
VerifyFileName := False;
- Result := (PeMapImgFindSection(PeMapImgNtHeaders(Pointer(Module)), JclDbgDataResName) <> nil);
+ Result := (PeMapImgFindSectionFromModule(Pointer(Module), JclDbgDataResName) <> nil);
if Result then
FStream := TJclPeSectionStream.Create(Module, JclDbgDataResName)
else
Modified: trunk/jcl/source/windows/JclPeImage.pas
===================================================================
--- trunk/jcl/source/windows/JclPeImage.pas 2007-02-04 09:39:18 UTC (rev 1911)
+++ trunk/jcl/source/windows/JclPeImage.pas 2007-02-04 18:37:27 UTC (rev 1912)
@@ -49,7 +49,7 @@
{$ENDIF UNITVERSIONING}
Windows, Classes, SysUtils, TypInfo, Contnrs,
JclBase, JclDateTime, JclFileUtils, JclStrings, JclSysInfo, JclWin32;
-
+
type
// Smart name compare function
TJclSmartCompOption = (scSimpleCompare, scIgnoreCase);
@@ -113,29 +113,33 @@
TJclPeImportLibItem = class;
+ // Created from a IMAGE_THUNK_DATA64 or IMAGE_THUNK_DATA32 record
TJclPeImportFuncItem = class(TObject)
private
- FOrdinal: Word;
+ FOrdinal: Word; // word in 32/64
FHint: Word;
FImportLib: TJclPeImportLibItem;
- FName: PChar;
FIndirectImportName: Boolean;
+ FName: string;
FResolveCheck: TJclPeResolveCheck;
function GetIsByOrdinal: Boolean;
- function GetName: string;
protected
- procedure SetIndirectImportName(P: PChar);
+ procedure SetName(const Value: string);
+ procedure SetIndirectImportName(const Value: string);
+ procedure SetResolveCheck(Value: TJclPeResolveCheck);
public
- destructor Destroy; override;
+ constructor Create(AImportLib: TJclPeImportLibItem; AOrdinal: Word;
+ AHint: Word; const AName: string);
property Ordinal: Word read FOrdinal;
property Hint: Word read FHint;
property ImportLib: TJclPeImportLibItem read FImportLib;
property IndirectImportName: Boolean read FIndirectImportName;
property IsByOrdinal: Boolean read GetIsByOrdinal;
- property Name: string read GetName;
+ property Name: string read FName;
property ResolveCheck: TJclPeResolveCheck read FResolveCheck;
end;
+ // Created from a IMAGE_IMPORT_DESCRIPTOR
TJclPeImportLibItem = class(TJclPeImageBaseList)
private
FImportDescriptor: Pointer;
@@ -143,21 +147,30 @@
FImportKind: TJclPeImportKind;
FLastSortType: TJclPeImportSort;
FLastSortDescending: Boolean;
- FName: PChar;
+ FName: string;
FSorted: Boolean;
FTotalResolveCheck: TJclPeResolveCheck;
- FThunk: PImageThunkData;
- FThunkData: PImageThunkData;
+ FThunk: Pointer;
+ FThunkData: Pointer;
function GetCount: Integer;
function GetFileName: TFileName;
function GetItems(Index: Integer): TJclPeImportFuncItem;
- function GetOriginalName: string;
function GetName: string;
+ {$IFDEF KEEP_DEPRECATED}
+ function GetThunkData: PImageThunkData;
+ {$ENDIF KEEP_DEPRECATED}
+ function GetThunkData32: PImageThunkData32;
+ function GetThunkData64: PImageThunkData64;
protected
procedure CheckImports(ExportImage: TJclPeImage);
procedure CreateList;
+ procedure SetImportDirectoryIndex(Value: Integer);
+ procedure SetImportKind(Value: TJclPeImportKind);
+ procedure SetSorted(Value: Boolean);
+ procedure SetThunk(Value: Pointer);
public
- constructor Create(AImage: TJclPeImage);
+ constructor Create(AImage: TJclPeImage; AImportDescriptor: Pointer;
+ AImportKind: TJclPeImportKind; const AName: string; AThunk: Pointer);
procedure SortList(SortType: TJclPeImportSort; Descending: Boolean = False);
property Count: Integer read GetCount;
property FileName: TFileName read GetFileName;
@@ -166,8 +179,12 @@
property ImportKind: TJclPeImportKind read FImportKind;
property Items[Index: Integer]: TJclPeImportFuncItem read GetItems; default;
property Name: string read GetName;
- property OriginalName: string read GetOriginalName;
- property ThunkData: PImageThunkData read FThunkData;
+ property OriginalName: string read FName;
+ {$IFDEF KEEP_DEPRECATED}
+ property ThunkData: PImageThunkData read GetThunkData;
+ {$ENDIF KEEP_DEPRECATED}
+ property ThunkData32: PImageThunkData32 read GetThunkData32;
+ property ThunkData64: PImageThunkData64 read GetThunkData64;
property TotalResolveCheck: TJclPeResolveCheck read FTotalResolveCheck;
end;
@@ -178,7 +195,7 @@
FLastAllSortType: TJclPeImportSort;
FLastAllSortDescending: Boolean;
FLinkerProducer: TJclPeLinkerProducer;
- FparallelImportTable: array of Pointer;
+ FParallelImportTable: array of Pointer;
FUniqueNamesList: TStringList;
function GetAllItemCount: Integer;
function GetAllItems(Index: Integer): TJclPeImportFuncItem;
@@ -216,40 +233,41 @@
TJclPeExportFuncList = class;
+ // Created from a IMAGE_EXPORT_DIRECTORY
TJclPeExportFuncItem = class(TObject)
private
FAddress: DWORD;
FExportList: TJclPeExportFuncList;
- FForwardedName: PChar;
- FForwardedDotPos: PChar;
+ FForwardedName: string;
+ FForwardedDotPos: string;
FHint: Word;
- FName: PChar;
+ FName: string;
FOrdinal: Word;
FResolveCheck: TJclPeResolveCheck;
function GetAddressOrForwardStr: string;
function GetForwardedFuncName: string;
function GetForwardedLibName: string;
function GetForwardedFuncOrdinal: DWORD;
- function GetForwardedName: string;
function GetIsExportedVariable: Boolean;
function GetIsForwarded: Boolean;
- function GetName: string;
function GetSectionName: string;
function GetMappedAddress: Pointer;
protected
- procedure FindForwardedDotPos;
+ procedure SetResolveCheck(Value: TJclPeResolveCheck);
public
+ constructor Create(AExportList: TJclPeExportFuncList; const AName, AForwardedName: string;
+ AAddress: DWORD; AHint: Word; AOrdinal: Word; AResolveCheck: TJclPeResolveCheck);
property Address: DWORD read FAddress;
property AddressOrForwardStr: string read GetAddressOrForwardStr;
property IsExportedVariable: Boolean read GetIsExportedVariable;
property IsForwarded: Boolean read GetIsForwarded;
- property ForwardedName: string read GetForwardedName;
+ property ForwardedName: string read FForwardedName;
property ForwardedLibName: string read GetForwardedLibName;
property ForwardedFuncOrdinal: DWORD read GetForwardedFuncOrdinal;
property ForwardedFuncName: string read GetForwardedFuncName;
property Hint: Word read FHint;
property MappedAddress: Pointer read GetMappedAddress;
- property Name: string read GetName;
+ property Name: string read FName;
property Ordinal: Word read FOrdinal;
property ResolveCheck: TJclPeResolveCheck read FResolveCheck;
property SectionName: string read GetSectionName;
@@ -428,6 +446,7 @@
function GetSize: DWORD;
function GetVirtualAddress: DWORD;
public
+ constructor Create(AChunk: PImageBaseRelocation; ACount: Integer);
property Count: Integer read FCount;
property Relocations[Index: Integer]: TJclPeRelocation read GetRelocations; default;
property Size: DWORD read GetSize;
@@ -465,6 +484,7 @@
FData: Pointer;
FHeader: TWinCertificate;
public
+ constructor Create(AHeader: TWinCertificate; AData: Pointer);
property Data: Pointer read FData;
property Header: TWinCertificate read FHeader;
end;
@@ -561,7 +581,8 @@
Attributes: Integer;
end;
- TJclPeImageStatus = (stNotLoaded, stOk, stNotPE, stNotFound, stError);
+ TJclPeImageStatus = (stNotLoaded, stOk, stNotPE, stNotSupported, stNotFound, stError);
+ TJclPeTarget = (taUnknown, taWin32, taWin64);
TJclPeImage = class(TObject)
private
@@ -578,8 +599,9 @@
FReadOnlyAccess: Boolean;
FRelocationList: TJclPeRelocList;
FResourceList: TJclPeRootResourceList;
- FResourceVA: DWORD;
+ FResourceVA: TJclAddr;
FStatus: TJclPeImageStatus;
+ FTarget: TJclPeTarget;
FVersionInfo: TJclFileVersionInfo;
function GetCertificateList: TJclPeCertificateList;
function GetCLRHeader: TJclPeCLRHeader;
@@ -596,8 +618,12 @@
function GetImportList: TJclPeImportList;
function GetHeaderValues(Index: TJclPeHeader): string;
function GetLoadConfigValues(Index: TJclLoadConfig): string;
- function GetMappedAddress: DWORD;
+ function GetMappedAddress: TJclAddr;
+ {$IFDEF KEEP_DEPRECATED}
function GetOptionalHeader: TImageOptionalHeader;
+ {$ENDIF KEEP_DEPRECATED}
+ function GetOptionalHeader32: TImageOptionalHeader32;
+ function GetOptionalHeader64: TImageOptionalHeader64;
function GetRelocationList: TJclPeRelocList;
function GetResourceList: TJclPeRootResourceList;
function GetUnusedHeaderBytes: TImageDataDirectory;
@@ -627,10 +653,11 @@
function IsBrokenFormat: Boolean;
function IsCLR: Boolean;
function IsSystemImage: Boolean;
- function RawToVa(Raw: DWORD): Pointer;
- function RvaToSection(Rva: DWORD): PImageSectionHeader;
- function RvaToVa(Rva: DWORD): Pointer;
- function RvaToVaEx(Rva: DWORD): Pointer;
+ // RVA are always DWORD
+ function RawToVa(Raw: DWORD): Pointer; overload;
+ function RvaToSection(Rva: DWORD): PImageSectionHeader; overload;
+ function RvaToVa(Rva: DWORD): Pointer; overload;
+ function RvaToVaEx(Rva: DWORD): Pointer; overload;
function StatusOK: Boolean;
procedure TryGetNamesForOrdinalImports;
function VerifyCheckSum: Boolean;
@@ -640,6 +667,7 @@
class function HeaderNames(Index: TJclPeHeader): string;
class function LoadConfigNames(Index: TJclLoadConfig): string;
class function ShortSectionInfo(Characteristics: DWORD): string;
+ class function DateTimeToStamp(const DateTime: TDateTime): DWORD;
class function StampToDateTime(TimeDateStamp: DWORD): TDateTime;
property AttachedImage: Boolean read FAttachedImage;
property CertificateList: TJclPeCertificateList read GetCertificateList;
@@ -659,12 +687,18 @@
property ImportList: TJclPeImportList read GetImportList;
property LoadConfigValues[Index: TJclLoadConfig]: string read GetLoadConfigValues;
property LoadedImage: TLoadedImage read FLoadedImage;
- property MappedAddress: DWORD read GetMappedAddress;
+ property MappedAddress: TJclAddr read GetMappedAddress;
+ {$IFDEF KEEP_DEPRECATED}
property OptionalHeader: TImageOptionalHeader read GetOptionalHeader;
+ {$ENDIF KEEP_DEPRECATED}
+ property OptionalHeader32: TImageOptionalHeader32 read GetOptionalHeader32;
+ property OptionalHeader64: TImageOptionalHeader64 read GetOptionalHeader64;
property ReadOnlyAccess: Boolean read FReadOnlyAccess write FReadOnlyAccess;
property RelocationList: TJclPeRelocList read GetRelocationList;
+ property ResourceVA: DWORD read FResourceVA;
property ResourceList: TJclPeRootResourceList read GetResourceList;
property Status: TJclPeImageStatus read FStatus;
+ property Target: TJclPeTarget read FTarget;
property UnusedHeaderBytes: TImageDataDirectory read GetUnusedHeaderBytes;
property VersionInfo: TJclFileVersionInfo read GetVersionInfo;
property VersionInfoAvailable: Boolean read GetVersionInfoAvailable;
@@ -689,6 +723,7 @@
function GetRequiresNames(Index: Integer): string;
protected
procedure ReadPackageInfo(ALibHandle: THandle);
+ procedure SetDcpName(const Value: string);
public
constructor Create(ALibHandle: THandle);
destructor Destroy; override;
@@ -719,6 +754,8 @@
FResItem: TJclPeResourceItem;
function GetDisplayName: string;
public
+ constructor Create(AResItem: TJclPeResourceItem; AFormFlags: TFilerFlags;
+ AFormPosition: Integer; const AFormClassName, AFormObjectName: string);
procedure ConvertFormToText(const Stream: TStream); overload;
procedure ConvertFormToText(const Strings: TStrings); overload;
property FormClassName: string read FFormClassName;
@@ -797,25 +834,45 @@
// PE Image miscellaneous functions
type
- TJclRebaseImageInfo = record
+ TJclRebaseImageInfo32 = record
OldImageSize: DWORD;
- OldImageBase: DWORD;
+ OldImageBase: TJclAddr32;
NewImageSize: DWORD;
- NewImageBase: DWORD;
+ NewImageBase: TJclAddr32;
end;
+ TJclRebaseImageInfo64 = record
+ OldImageSize: DWORD;
+ OldImageBase: TJclAddr64;
+ NewImageSize: DWORD;
+ NewImageBase: TJclAddr64;
+ end;
+{$IFDEF KEEP_DEPRECATED}
+type
+ TJclRebaseImageInfo = TJclRebaseImageInfo32;
+{$ENDIF KEEP_DEPRECATED}
{ Image validity }
function IsValidPeFile(const FileName: TFileName): Boolean;
+{$IFDEF KEEP_DEPRECATED}
function PeGetNtHeaders(const FileName: TFileName; var NtHeaders: TImageNtHeaders): Boolean;
+{$ENDIF KEEP_DEPRECATED}
+function PeGetNtHeaders32(const FileName: TFileName; var NtHeaders: TImageNtHeaders32): Boolean;
+function PeGetNtHeaders64(const FileName: TFileName; var NtHeaders: TImageNtHeaders64): Boolean;
{ Image modifications }
function PeCreateNameHintTable(const FileName: TFileName): Boolean;
+{$IFDEF KEEP_DEPRECATED}
function PeRebaseImage(const ImageName: TFileName; NewBase: DWORD = 0; TimeStamp: DWORD = 0;
MaxNewSize: DWORD = 0): TJclRebaseImageInfo;
+{$ENDIF KEEP_DEPRECATED}
+function PeRebaseImage32(const ImageName: TFileName; NewBase: TJclAddr32 = 0; TimeStamp: DWORD = 0;
+ MaxNewSize: DWORD = 0): TJclRebaseImageInfo32;
+function PeRebaseImage64(const ImageName: TFileName; NewBase: TJclAddr64 = 0; TimeStamp: DWORD = 0;
+ MaxNewSize: DWORD = 0): TJclRebaseImageInfo64;
function PeUpdateLinkerTimeStamp(const FileName: string; const Time: TDateTime): Boolean;
function PeReadLinkerTimeStamp(const FileName: string): TDateTime;
@@ -880,15 +937,34 @@
function PeCreateRequiredImportList(const FileName: TFileName; RequiredImportsList: TStrings): Boolean;
// Mapped or loaded image related routines
+{$IFDEF KEEP_DEPRECATED}
function PeMapImgNtHeaders(const BaseAddress: Pointer): PImageNtHeaders;
+{$ENDIF KEEP_DEPRECATED}
+function PeMapImgNtHeaders32(const BaseAddress: Pointer): PImageNtHeaders32;
+function PeMapImgNtHeaders64(const BaseAddress: Pointer): PImageNtHeaders64;
function PeMapImgLibraryName(const BaseAddress: Pointer): string;
+function PeMapImgSize(const BaseAddress: Pointer): DWORD;
+function PeMapImgTarget(const BaseAddress: Pointer): TJclPeTarget;
+{$IFDEF KEEP_DEPRECATED}
function PeMapImgSections(NtHeaders: PImageNtHeaders): PImageSectionHeader;
+{$ENDIF KEEP_DEPRECATED}
+function PeMapImgSections32(NtHeaders: PImageNtHeaders32): PImageSectionHeader;
+function PeMapImgSections64(NtHeaders: PImageNtHeaders64): PImageSectionHeader;
+{$IFDEF KEEP_DEPRECATED}
function PeMapImgFindSection(NtHeaders: PImageNtHeaders;
const SectionName: string): PImageSectionHeader;
+{$ENDIF KEEP_DEPRECATED}
+function PeMapImgFindSection32(NtHeaders: PImageNtHeaders32;
+ const SectionName: string): PImageSectionHeader;
+function PeMapImgFindSection64(NtHeaders: PImageNtHeaders64;
+ const SectionName: string): PImageSectionHeader;
+function PeMapImgFindSectionFromModule(const BaseAddress: Pointer;
+ const SectionName: string): PImageSectionHeader;
+
function PeMapImgExportedVariables(const Module: HMODULE; const VariablesList: TStrings): Boolean;
function PeMapImgResolvePackageThunk(Address: Pointer): Pointer;
@@ -922,6 +998,8 @@
protected
function InternalUnhook: Boolean;
public
+ constructor Create(AList: TObjectList; const AFunctionName, AModuleName: string;
+ ABaseAddress, ANewAddress, AOriginalAddress: Pointer);
destructor Destroy; override;
function Unhook: Boolean;
property BaseAddress: Pointer read FBaseAddress;
@@ -951,11 +1029,24 @@
end;
// Image access under a debbuger
+{$IFDEF KEEP_DEPRECATED}
function PeDbgImgNtHeaders(ProcessHandle: THandle; BaseAddress: Pointer;
- var NtHeaders: TImageNtHeaders): Boolean;
+ var NtHeaders: TImageNtHeaders32): Boolean;
+{$ENDIF KEEP_DEPRECATED}
+function PeDbgImgNtHeaders32(ProcessHandle: THandle; BaseAddress: TJclAddr32;
+ var NtHeaders: TImageNtHeaders32): Boolean;
+// TODO 64 bit version
+//function PeDbgImgNtHeaders64(ProcessHandle: THandle; BaseAddress: TJclAddr64;
+// var NtHeaders: TImageNtHeaders64): Boolean;
+{$IFDEF KEEP_DEPRECATED}
function PeDbgImgLibraryName(ProcessHandle: THandle; BaseAddress: Pointer;
var Name: string): Boolean;
+{$ENDIF KEEP_DEPRECATED}
+function PeDbgImgLibraryName32(ProcessHandle: THandle; BaseAddress: TJclAddr32;
+ var Name: string): Boolean;
+//function PeDbgImgLibraryName64(ProcessHandle: THandle; BaseAddress: TJclAddr64;
+// var Name: string): Boolean;
// Borland BPL packages name unmangling
type
@@ -993,11 +1084,9 @@
implementation
uses
- JclLogic, JclResources, JclSysUtils;
+ JclLogic, JclResources, JclSysUtils, JclBorlandTools;
const
- BPLExtension = '.bpl';
- DCPExtension = '.dcp';
MANIFESTExtension = '.manifest';
PackageInfoResName = 'PACKAGEINFO';
@@ -1196,9 +1285,9 @@
function ImportSortByName(Item1, Item2: Pointer): Integer;
begin
- Result := StrComp(TJclPeImportFuncItem(Item1).FName, TJclPeImportFuncItem(Item2).FName);
+ Result := CompareStr(TJclPeImportFuncItem(Item1).Name, TJclPeImportFuncItem(Item2).Name);
if Result = 0 then
- Result := StrComp(TJclPeImportFuncItem(Item1).ImportLib.FName, TJclPeImportFuncItem(Item2).ImportLib.FName);
+ Result := CompareStr(TJclPeImportFuncItem(Item1).ImportLib.Name, TJclPeImportFuncItem(Item2).ImportLib.Name);
if Result = 0 then
Result := TJclPeImportFuncItem(Item1).Ordinal - TJclPeImportFuncItem(Item2).Ordinal;
end;
@@ -1220,7 +1309,7 @@
function ImportSortByDll(Item1, Item2: Pointer): Integer;
begin
- Result := AnsiCompareStr(TJclPeImportFuncItem(Item1).ImportLib.Name,
+ Result := CompareStr(TJclPeImportFuncItem(Item1).ImportLib.Name,
TJclPeImportFuncItem(Item2).ImportLib.Name);
if Result = 0 then
Result := ImportSortByName(Item1, Item2);
@@ -1233,8 +1322,8 @@
function ImportSortByOrdinal(Item1, Item2: Pointer): Integer;
begin
- Result := StrComp(TJclPeImportFuncItem(Item1).ImportLib.FName,
- TJclPeImportFuncItem(Item2).ImportLib.FName);
+ Result := CompareStr(TJclPeImportFuncItem(Item1).ImportLib.Name,
+ TJclPeImportFuncItem(Item2).ImportLib.Name);
if Result = 0 then
Result := TJclPeImportFuncItem(Item1).Ordinal - TJclPeImportFuncItem(Item2).Ordinal;
end;
@@ -1279,10 +1368,16 @@
//=== { TJclPeImportFuncItem } ===============================================
-destructor TJclPeImportFuncItem.Destroy;
+constructor TJclPeImportFuncItem.Create(AImportLib: TJclPeImportLibItem;
+ AOrdinal: Word; AHint: Word; const AName: string);
begin
- SetIndirectImportName(nil);
- inherited Destroy;
+ inherited Create;
+ FImportLib := AImportLib;
+ FOrdinal := AOrdinal;
+ FHint := AHint;
+ FName := AName;
+ FResolveCheck := icNotChecked;
+ FIndirectImportName := False;
end;
function TJclPeImportFuncItem.GetIsByOrdinal: Boolean;
@@ -1290,32 +1385,36 @@
Result := FOrdinal <> 0;
end;
-function TJclPeImportFuncItem.GetName: string;
+procedure TJclPeImportFuncItem.SetIndirectImportName(const Value: string);
begin
- Result := FName;
+ FName := Value;
+ FIndirectImportName := True;
end;
-procedure TJclPeImportFuncItem.SetIndirectImportName(P: PChar);
+procedure TJclPeImportFuncItem.SetName(const Value: string);
begin
- if FIndirectImportName then
- begin
- StrDispose(FName);
- FIndirectImportName := False;
- FName := '';
- end;
- if P <> nil then
- begin
- FName := StrNew(P);
- FIndirectImportName := True;
- end;
+ FName := Value;
+ FIndirectImportName := False;
end;
+procedure TJclPeImportFuncItem.SetResolveCheck(Value: TJclPeResolveCheck);
+begin
+ FResolveCheck := Value;
+end;
+
//=== { TJclPeImportLibItem } ================================================
-constructor TJclPeImportLibItem.Create(AImage: TJclPeImage);
+constructor TJclPeImportLibItem.Create(AImage: TJclPeImage;
+ AImportDescriptor: Pointer; AImportKind: TJclPeImportKind; const AName: string;
+ AThunk: Pointer);
begin
inherited Create(AImage);
FTotalResolveCheck := icNotChecked;
+ FImportDescriptor := AImportDescriptor;
+ FImportKind := AImportKind;
+ FName := AName;
+ FThunk := AThunk;
+ FThunkData := AThunk;
end;
procedure TJclPeImportLibItem.CheckImports(ExportImage: TJclPeImage);
@@ -1333,20 +1432,20 @@
if IsByOrdinal then
begin
if ExportList.OrdinalValid(Ordinal) then
- FResolveCheck := icResolved
+ SetResolveCheck(icResolved)
else
begin
- FResolveCheck := icUnresolved;
+ SetResolveCheck(icUnresolved);
Self.FTotalResolveCheck := icUnresolved;
end;
end
else
begin
if ExportList.ItemFromName[Items[I].Name] <> nil then
- FResolveCheck := icResolved
+ SetResolveCheck(icResolved)
else
begin
- FResolveCheck := icUnresolved;
+ SetResolveCheck(icUnresolved);
Self.FTotalResolveCheck := icUnresolved;
end;
end;
@@ -1356,43 +1455,97 @@
begin
FTotalResolveCheck := icUnresolved;
for I := 0 to Count - 1 do
- Items[I].FResolveCheck := icUnresolved;
+ Items[I].SetResolveCheck(icUnresolved);
end;
end;
procedure TJclPeImportLibItem.CreateList;
-var
- FuncItem: TJclPeImportFuncItem;
- OrdinalName: PImageImportByName;
-begin
- if FThunk = nil then
- Exit;
- while FThunk^.Function_ <> 0 do
+ procedure CreateList32;
+ var
+ Thunk32: PImageThunkData32;
+ OrdinalName: PImageImportByName;
+ Ordinal, Hint: Word;
+ Name: PChar;
begin
- FuncItem := TJclPeImportFuncItem.Create;
- FuncItem.FImportLib := Self;
- FuncItem.FResolveCheck := icNotChecked;
- if FThunk^.Ordinal and IMAGE_ORDINAL_FLAG <> 0 then
+ Thunk32 := PImageThunkData32(FThunk);
+ while Thunk32^.Function_ <> 0 do
begin
- FuncItem.FOrdinal := IMAGE_ORDINAL(FThunk^.Ordinal);
- FuncItem.FName := #0;
- end
- else
+ Ordinal := 0;
+ Hint := 0;
+ Name := nil;
+ if Thunk32^.Ordinal and IMAGE_ORDINAL_FLAG32 = 0 then
+ begin
+ case ImportKind of
+ ikImport, ikBoundImport:
+ begin
+ OrdinalName := PImageImportByName(Image.RvaToVa(Thunk32^.AddressOfData));
+ Hint := OrdinalName.Hint;
+ Name := OrdinalName.Name;
+ end;
+ ikDelayImport:
+ begin
+ OrdinalName := PImageImportByName(Image.RvaToVaEx(Thunk32^.AddressOfData));
+ Hint := OrdinalName.Hint;
+ Name := OrdinalName.Name;
+ end;
+ end;
+ end
+ else
+ Ordinal := IMAGE_ORDINAL32(Thunk32^.Ordinal);
+
+ Add(TJclPeImportFuncItem.Create(Self, Ordinal, Hint, Name));
+ Inc(Thunk32);
+ end;
+ end;
+
+ procedure CreateList64;
+ var
+ Thunk64: PImageThunkData64;
+ OrdinalName: PImageImportByName;
+ Ordinal, Hint: Word;
+ Name: PChar;
+ begin
+ Thunk64 := PImageThunkData64(FThunk);
+ while Thunk64^.Function_ <> 0 do
begin
- case ImportKind of
- ikImport, ikBoundImport:
- OrdinalName := PImageImportByName(Image.RvaToVa(DWORD(FThunk^.AddressOfData)));
- ikDelayImport:
- OrdinalName := PImageImportByName(Image.RvaToVaEx(DWORD(FThunk^.AddressOfData)));
+ Ordinal := 0;
+ Hint := 0;
+ Name := nil;
+ if Thunk64^.Ordinal and IMAGE_ORDINAL_FLAG64 = 0 then
+ begin
+ case ImportKind of
+ ikImport, ikBoundImport:
+ begin
+ OrdinalName := PImageImportByName(Image.RvaToVa(Thunk64^.AddressOfData));
+ Hint := OrdinalName.Hint;
+ Name := OrdinalName.Name;
+ end;
+ ikDelayImport:
+ begin
+ OrdinalName := PImageImportByName(Image.RvaToVaEx(Thunk64^.AddressOfData));
+ Hint := OrdinalName.Hint;
+ Name := OrdinalName.Name;
+ end;
+ end;
+ end
else
- OrdinalName := nil;
- end;
- FuncItem.FHint := OrdinalName.Hint;
- FuncItem.FName := OrdinalName.Name;
+ Ordinal := IMAGE_ORDINAL64(Thunk64^.Ordinal);
+
+ Add(TJclPeImportFuncItem.Create(Self, Ordinal, Hint, Name));
+ Inc(Thunk64);
end;
- Add(FuncItem);
- Inc(FThunk);
end;
+begin
+ if FThunk = nil then
+ Exit;
+
+ case Image.Target of
+ taWin32:
+ CreateList32;
+ taWin64:
+ CreateList64;
+ end;
+
FThunk := nil;
end;
@@ -1405,7 +1558,7 @@
function TJclPeImportLibItem.GetFileName: TFileName;
begin
- Result := FImage.ExpandModuleName(Name);
+ Result := Image.ExpandModuleName(Name);
end;
function TJclPeImportLibItem.GetItems(Index: Integer): TJclPeImportFuncItem;
@@ -1418,11 +1571,50 @@
Result := AnsiLowerCase(OriginalName);
end;
-function TJclPeImportLibItem.GetOriginalName: string;
+{$IFDEF KEEP_DEPRECATED}
+function TJclPeImportLibItem.GetThunkData: PImageThunkData;
begin
- Result := FName;
+ Result := FThunkData;
end;
+{$ENDIF KEEP_DEPRECATED}
+function TJclPeImportLibItem.GetThunkData32: PImageThunkData32;
+begin
+ if Image.Target = taWin32 then
+ Result := FThunkData
+ else
+ Result := nil;
+end;
+
+function TJclPeImportLibItem.GetThunkData64: PImageThunkData64;
+begin
+ if Image.Target = taWin64 then
+ Result := FThunkData
+ else
+ Result := nil;
+end;
+
+procedure TJclPeImportLibItem.SetImportDirectoryIndex(Value: Integer);
+begin
+ FImportDirectoryIndex := Value;
+end;
+
+procedure TJclPeImportLibItem.SetImportKind(Value: TJclPeImportKind);
+begin
+ FImportKind := Value;
+end;
+
+procedure TJclPeImportLibItem.SetSorted(Value: Boolean);
+begin
+ FSorted := Value;
+end;
+
+procedure TJclPeImportLibItem.SetThunk(Value: Pointer);
+begin
+ FThunk := Value;
+ FThunkData := Value;
+end;
+
procedure TJclPeImportLibItem.SortList(SortType: TJclPeImportSort; Descending: Boolean);
begin
if not FSorted or (SortType <> FLastSortType) or (Descending <> FLastSortDescending) then
@@ -1466,7 +1658,7 @@
I: Integer;
ExportPeImage: TJclPeImage;
begin
- FImage.CheckNotAttached;
+ Image.CheckNotAttached;
if PeImageCache <> nil then
ExportPeImage := nil // to make the compiler happy
else
@@ -1489,13 +1681,41 @@
end;
procedure TJclPeImportList.CreateList;
+ procedure CreateDelayImportList32(DelayImportDesc: PImgDelayDescrV1);
+ var
+ LibItem: TJclPeImportLibItem;
+ begin
+ while DelayImportDesc^.szName <> nil do
+ begin
+ LibItem := TJclPeImportLibItem.Create(Image, DelayImportDesc, ikDelayImport,
+ PChar(Image.RvaToVaEx(DWORD(DelayImportDesc^.szName))), Image.RvaToVaEx(DWORD(DelayImportDesc^.pINT)));
+ Add(LibItem);
+ FUniqueNamesList.AddObject(AnsiLowerCase(LibItem.Name), LibItem);
+ Inc(DelayImportDesc);
+ end;
+ end;
+
+ procedure CreateDelayImportList64(DelayImportDesc: PImgDelayDescrV2);
+ var
+ LibItem: TJclPeImportLibItem;
+ begin
+ while DelayImportDesc^.rvaDLLName <> 0 do
+ begin
+ LibItem := TJclPeImportLibItem.Create(Image, DelayImportDesc, ikDelayImport,
+ PChar(Image.RvaToVa(DelayImportDesc^.rvaDLLName)), Image.RvaToVa(DelayImportDesc^.rvaINT));
+ Add(LibItem);
+ FUniqueNamesList.AddObject(AnsiLowerCase(LibItem.Name), LibItem);
+ Inc(DelayImportDesc);
+ end;
+ end;
var
ImportDesc: PImageImportDescriptor;
LibItem: TJclPeImportLibItem;
- DelayImportDesc: PImgDelayDescr;
+ DelayImportDesc: Pointer;
BoundImports, BoundImport: PImageBoundImportDescriptor;
S: string;
I: Integer;
+ Thunk: Pointer;
begin
SetCapacity(100);
with Image do
@@ -1506,24 +1726,20 @@
if ImportDesc <> nil then
while ImportDesc^.Name <> 0 do
begin
- LibItem := TJclPeImportLibItem.Create(Image);
- LibItem.FImportDescriptor := ImportDesc;
- LibItem.FName := RvaToVa(ImportDesc^.Name);
- LibItem.FImportKind := ikImport;
if ImportDesc^.Union.Characteristics = 0 then
begin
- if FAttachedImage then // Borland images doesn't have two parallel arrays
- LibItem.FThunk := nil // see MakeBorlandImportTableForMappedImage method
+ if AttachedImage then // Borland images doesn't have two parallel arrays
+ Thunk := nil // see MakeBorlandImportTableForMappedImage method
else
- LibItem.FThunk := PImageThunkData(RvaToVa(ImportDesc^.FirstThunk));
+ Thunk := RvaToVa(ImportDesc^.FirstThunk);
FLinkerProducer := lrBorland;
end
else
begin
- LibItem.FThunk := PImageThunkData(RvaToVa(ImportDesc^.Union.Characteristics));
+ Thunk := RvaToVa(ImportDesc^.Union.Characteristics);
FLinkerProducer := lrMicrosoft;
end;
- LibItem.FThunkData := LibItem.FThunk;
+ LibItem := TJclPeImportLibItem.Create(Image, ImportDesc, ikImport, PAnsiChar(RvaToVa(ImportDesc^.Name)), Thunk);
Add(LibItem);
FUniqueNamesList.AddObject(AnsiLowerCase(LibItem.Name), LibItem);
Inc(ImportDesc);
@@ -1531,16 +1747,11 @@
DelayImportDesc := DirectoryEntryToData(IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT);
if DelayImportDesc <> nil then
begin
- while DelayImportDesc^.szName <> 0 do
- begin
- LibItem := TJclPeImportLibItem.Create(Image);
- LibItem.FImportKind := ikDelayImport;
- LibItem.FImportDescriptor := DelayImportDesc;
- LibItem.FName := RvaToVaEx(DelayImportDesc^.szName);
- LibItem.FThunk := PImageThunkData(RvaToVaEx(DelayImportDesc^.pINT.AddressOfData));
- Add(LibItem);
- FUniqueNamesList.AddObject(AnsiLowerCase(LibItem.Name), LibItem);
- Inc(DelayImportDesc);
+ case Target of
+ taWin32:
+ CreateDelayImportList32(DelayImportDesc);
+ taWin64:
+ CreateDelayImportList64(DelayImportDesc);
end;
end;
BoundImports := DirectoryEntryToData(IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT);
@@ -1549,10 +1760,10 @@
BoundImport := BoundImports;
while BoundImport^.OffsetModuleName <> 0 do
begin
- S := AnsiLowerCase(PChar(DWORD(BoundImports) + BoundImport^.OffsetModuleName));
+ S := AnsiLowerCase(PChar(TJclAddr(BoundImports) + BoundImport^.OffsetModuleName));
I := FUniqueNamesList.IndexOf(S);
if I >= 0 then
- TJclPeImportLibItem(FUniqueNamesList.Objects[I]).FImportKind := ikBoundImport;
+ TJclPeImportLibItem(FUniqueNamesList.Objects[I]).SetImportKind(ikBoundImport);
for I := 1 to BoundImport^.NumberOfModuleForwarderRefs do
Inc(PImageBoundForwarderRef(BoundImport)); // skip forward information
Inc(BoundImport);
@@ -1560,7 +1771,7 @@
end;
end;
for I := 0 to Count - 1 do
- Items[I].FImportDirectoryIndex := I;
+ Items[I].SetImportDirectoryIndex(I);
end;
function TJclPeImportList.GetAllItemCount: Integer;
@@ -1614,12 +1825,12 @@
FileImage: TJclPeImage;
I, TableSize: Integer;
begin
- if FImage.FAttachedImage and (FLinkerProducer = lrBorland) and
+ if Image.AttachedImage and (LinkerProducer = lrBorland) and
(Length(FParallelImportTable) = 0) then
begin
FileImage := TJclPeImage.Create(True);
try
- FileImage.FileName := FImage.FileName;
+ FileImage.FileName := Image.FileName;
Result := FileImage.StatusOK;
if Result then
begin
@@ -1627,10 +1838,23 @@
for I := 0 to FileImage.ImportList.Count - 1 do
begin
Assert(Items[I].ImportKind = ikImport); // Borland doesn't have Delay load or Bound imports
- TableSize := (FileImage.ImportList[I].Count + 1) * SizeOf(TImageThunkData);
- GetMem(FParallelImportTable[I], TableSize);
- System.Move(FileImage.ImportList[I].ThunkData^, FParallelImportTable[I]^, TableSize);
- Items[I].FThunk := FParallelImportTable[I];
+ TableSize := (FileImage.ImportList[I].Count + 1);
+ case Image.Target of
+ taWin32:
+ begin
+ TableSize := TableSize * SizeOf(TImageThunkData32);
+ GetMem(FParallelImportTable[I], TableSize);
+ System.Move(FileImage.ImportList[I].ThunkData32^, FParallelImportTable[I]^, TableSize);
+ Items[I].SetThunk(FParallelImportTable[I]);
+ end;
+ taWin64:
+ begin
+ TableSize := TableSize * SizeOf(TImageThunkData64);
+ GetMem(FParallelImportTable[I], TableSize);
+ System.Move(FileImage.ImportList[I].ThunkData64^, FParallelImportTable[I]^, TableSize);
+ Items[I].SetThunk(FParallelImportTable[I]);
+ end;
+ end;
end;
end;
finally
@@ -1713,10 +1937,10 @@
ExportItem: TJclPeExportFuncItem;
ExportList: TJclPeExportFuncList;
begin
- if FImage.FAttachedImage then
+ if Image.AttachedImage then
LibPeDump.AttachLoadedModule(GetModuleHandle(PChar(ModuleName)))
else
- LibPeDump.FileName := FImage.ExpandModuleName(ModuleName);
+ LibPeDump.FileName := Image.ExpandModuleName(ModuleName);
if not LibPeDump.StatusOK then
Exit;
ExportList := LibPeDump.ExportList;
@@ -1731,11 +1955,11 @@
if Item.IsByOrdinal then
begin
ExportItem := ExportList.ItemFromOrdinal[Item.Ordinal];
- if (ExportItem <> nil) and (ExportItem.FName <> nil) then
- Item.SetIndirectImportName(ExportItem.FName);
+ if (ExportItem <> nil) and (ExportItem.Name <> '') then
+ Item.SetIndirectImportName(ExportItem.Name);
end;
end;
- ImportLibItem.FSorted := False;
+ ImportLibItem.SetSorted(False);
end;
end;
end;
@@ -1765,10 +1989,26 @@
//=== { TJclPeExportFuncItem } ===============================================
-procedure TJclPeExportFuncItem.FindForwardedDotPos;
+constructor TJclPeExportFuncItem.Create(AExportList: TJclPeExportFuncList;
+ const AName, AForwardedName: string; AAddress: DWORD; AHint: Word;
+ AOrdinal: Word; AResolveCheck: TJclPeResolveCheck);
+var
+ DotPos: Integer;
begin
- if (FForwardedName <> nil) and (FForwardedDotPos = nil) then
- FForwardedDotPos := StrPos(FForwardedName, '.');
+ inherited Create;
+ FExportList := AExportList;
+ FName := AName;
+ FForwardedName := AForwardedName;
+ FAddress := AAddress;
+ FHint := AHint;
+ FOrdinal := AOrdinal;
+ FResolveCheck := AResolveCheck;
+
+ DotPos := AnsiPos('.', ForwardedName);
+ if DotPos > 0 then
+ FForwardedDotPos := Copy(ForwardedName, DotPos + 1, Length(ForwardedName) - DotPos)
+ else
+ FForwardedDotPos := '';
end;
function TJclPeExportFuncItem.GetAddressOrForwardStr: string;
@@ -1781,72 +2021,70 @@
function TJclPeExportFuncItem.GetForwardedFuncName: string;
begin
- FindForwardedDotPos;
- if (FForwardedDotPos <> nil) and (FForwardedDotPos + 1 <> '#') then
- Result := PChar(FForwardedDotPos + 1)
+ if (Length(FForwardedDotPos) > 0) and (FForwardedDotPos[1] <> '#') then
+ Result := FForwardedDotPos
else
Result := '';
end;
function TJclPeExportFuncItem.GetForwardedFuncOrdinal: DWORD;
begin
- FindForwardedDotPos;
- if (FForwardedDotPos <> nil) and (FForwardedDotPos + 1 = '#') then
- Result := StrToIntDef(FForwardedDotPos + 2, 0)
+ if (Length(FForwardedDotPos) > 0) and (FForwardedDotPos[1] = '#') then
+ Result := StrToIntDef(FForwardedDotPos, 0)
else
Result := 0;
end;
function TJclPeExportFuncItem.GetForwardedLibName: string;
begin
- FindForwardedDotPos;
- if FForwardedDotPos = nil then
+ if Length(FForwardedDotPos) = 0 then
Result := ''
else
- begin
- SetString(Result, FForwardedName, FForwardedDotPos - FForwardedName);
- Result := AnsiLowerCase(Result) + '.dll';
- end;
+ Result := AnsiLowerCase(Copy(FForwardedName, 1, Length(FForwardedName) - Length(FForwardedDotPos) - 1)) + BinaryExtensionLibrary;
end;
-function TJclPeExportFuncItem.GetForwardedName: string;
-begin
- Result := FForwardedName;
-end;
-
function TJclPeExportFuncItem.GetIsExportedVariable: Boolean;
begin
- Result := (Address >= FExportList.FImage.OptionalHeader.BaseOfData);
+ case FExportList.Image.Target of
+ taWin32:
+ Result := (Address >= FExportList.Image.OptionalHeader32.BaseOfData);
+ taWin64:
+ Result := False;
+ // TODO equivalent for 64-bit modules
+ //Result := (Address >= FExportList.Image.OptionalHeader64.BaseOfData);
+ else
+ Result := False;
+ end;
end;
function TJclPeExportFuncItem.GetIsForwarded: Boolean;
begin
- Result := FForwardedName <> nil;
+ Result := Length(FForwardedName) <> 0;
end;
function TJclPeExportFuncItem.GetMappedAddress: Pointer;
begin
- Result := FExportList.FImage.RvaToVa(FAddress);
+ Result := FExportList.Image.RvaTo...
[truncated message content] |
|
From: <ou...@us...> - 2007-02-04 09:39:22
|
Revision: 1911
http://svn.sourceforge.net/jcl/?rev=1911&view=rev
Author: outchy
Date: 2007-02-04 01:39:18 -0800 (Sun, 04 Feb 2007)
Log Message:
-----------
muting stderror
Modified Paths:
--------------
trunk/shell/bin/postnew.sh
Modified: trunk/shell/bin/postnew.sh
===================================================================
--- trunk/shell/bin/postnew.sh 2007-02-03 13:25:07 UTC (rev 1910)
+++ trunk/shell/bin/postnew.sh 2007-02-04 09:39:18 UTC (rev 1911)
@@ -70,7 +70,7 @@
rm -f jcl.zip
# create a 7zip with all files and copy to daily
-/home/groups/j/jc/jcl/bin/7zip a -bd -r jcl.7z . > /dev/null
+/home/groups/j/jc/jcl/bin/7zip a -bd -r jcl.7z . 2> /dev/null
cp jcl.7z $DAILYDIR/jcl-$DATESTRING.7z
rm -f jcl.7z
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-03 13:25:09
|
Revision: 1910
http://svn.sourceforge.net/jcl/?rev=1910&view=rev
Author: outchy
Date: 2007-02-03 05:25:07 -0800 (Sat, 03 Feb 2007)
Log Message:
-----------
Build 2530 for JCL 1.98
Added Paths:
-----------
tags/JCL198-Build2530/
Copied: tags/JCL198-Build2530 (from rev 1909, branches/JCL_1.98)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-02 17:56:07
|
Revision: 1909
http://svn.sourceforge.net/jcl/?rev=1909&view=rev
Author: outchy
Date: 2007-02-02 09:55:34 -0800 (Fri, 02 Feb 2007)
Log Message:
-----------
Changing copyright year from 2005 to 2007.
Modified Paths:
--------------
trunk/jcl/packages/c5/JclBaseExpertC50.rc
trunk/jcl/packages/c5/JclBaseExpertC50.res
trunk/jcl/packages/c5/JclC50.rc
trunk/jcl/packages/c5/JclC50.res
trunk/jcl/packages/c5/JclDebugExpertC50.RES
trunk/jcl/packages/c5/JclDebugExpertC50.rc
trunk/jcl/packages/c5/JclDebugExpertDLLC50.rc
trunk/jcl/packages/c5/JclDebugExpertDLLC50.res
trunk/jcl/packages/c5/JclFavoriteFoldersExpertC50.rc
trunk/jcl/packages/c5/JclFavoriteFoldersExpertC50.res
trunk/jcl/packages/c5/JclFavoriteFoldersExpertDLLC50.rc
trunk/jcl/packages/c5/JclFavoriteFoldersExpertDLLC50.res
trunk/jcl/packages/c5/JclProjectAnalysisExpertC50.RES
trunk/jcl/packages/c5/JclProjectAnalysisExpertC50.rc
trunk/jcl/packages/c5/JclProjectAnalysisExpertDLLC50.rc
trunk/jcl/packages/c5/JclProjectAnalysisExpertDLLC50.res
trunk/jcl/packages/c5/JclRepositoryExpertC50.rc
trunk/jcl/packages/c5/JclRepositoryExpertC50.res
trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.rc
trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.res
trunk/jcl/packages/c5/JclSIMDViewExpertC50.rc
trunk/jcl/packages/c5/JclSIMDViewExpertC50.res
trunk/jcl/packages/c5/JclSIMDViewExpertDLLC50.rc
trunk/jcl/packages/c5/JclSIMDViewExpertDLLC50.res
trunk/jcl/packages/c5/JclThreadNameExpertC50.RES
trunk/jcl/packages/c5/JclThreadNameExpertC50.rc
trunk/jcl/packages/c5/JclThreadNameExpertDLLC50.rc
trunk/jcl/packages/c5/JclThreadNameExpertDLLC50.res
trunk/jcl/packages/c5/JclUsesExpertC50.RES
trunk/jcl/packages/c5/JclUsesExpertC50.rc
trunk/jcl/packages/c5/JclUsesExpertDLLC50.rc
trunk/jcl/packages/c5/JclUsesExpertDLLC50.res
trunk/jcl/packages/c5/JclVersionControlExpertC50.rc
trunk/jcl/packages/c5/JclVersionControlExpertC50.res
trunk/jcl/packages/c5/JclVersionControlExpertDLLC50.rc
trunk/jcl/packages/c5/JclVersionControlExpertDLLC50.res
trunk/jcl/packages/c5/template.rc
trunk/jcl/packages/c6/Jcl.RES
trunk/jcl/packages/c6/Jcl.rc
trunk/jcl/packages/c6/JclBaseExpert.rc
trunk/jcl/packages/c6/JclBaseExpert.res
trunk/jcl/packages/c6/JclDebugExpert.RES
trunk/jcl/packages/c6/JclDebugExpert.rc
trunk/jcl/packages/c6/JclDebugExpertDLL.rc
trunk/jcl/packages/c6/JclDebugExpertDLL.res
trunk/jcl/packages/c6/JclFavoriteFoldersExpert.RES
trunk/jcl/packages/c6/JclFavoriteFoldersExpert.rc
trunk/jcl/packages/c6/JclFavoriteFoldersExpertDLL.rc
trunk/jcl/packages/c6/JclFavoriteFoldersExpertDLL.res
trunk/jcl/packages/c6/JclProjectAnalysisExpert.RES
trunk/jcl/packages/c6/JclProjectAnalysisExpert.rc
trunk/jcl/packages/c6/JclProjectAnalysisExpertDLL.rc
trunk/jcl/packages/c6/JclProjectAnalysisExpertDLL.res
trunk/jcl/packages/c6/JclRepositoryExpert.rc
trunk/jcl/packages/c6/JclRepositoryExpert.res
trunk/jcl/packages/c6/JclRepositoryExpertDLL.rc
trunk/jcl/packages/c6/JclRepositoryExpertDLL.res
trunk/jcl/packages/c6/JclSIMDViewExpert.rc
trunk/jcl/packages/c6/JclSIMDViewExpert.res
trunk/jcl/packages/c6/JclSIMDViewExpertDLL.rc
trunk/jcl/packages/c6/JclSIMDViewExpertDLL.res
trunk/jcl/packages/c6/JclThreadNameExpert.RES
trunk/jcl/packages/c6/JclThreadNameExpert.rc
trunk/jcl/packages/c6/JclThreadNameExpertDLL.rc
trunk/jcl/packages/c6/JclThreadNameExpertDLL.res
trunk/jcl/packages/c6/JclUsesExpert.RES
trunk/jcl/packages/c6/JclUsesExpert.rc
trunk/jcl/packages/c6/JclUsesExpertDLL.rc
trunk/jcl/packages/c6/JclUsesExpertDLL.res
trunk/jcl/packages/c6/JclVClx.RES
trunk/jcl/packages/c6/JclVClx.rc
trunk/jcl/packages/c6/JclVcl.RES
trunk/jcl/packages/c6/JclVcl.rc
trunk/jcl/packages/c6/JclVersionControlExpert.rc
trunk/jcl/packages/c6/JclVersionControlExpert.res
trunk/jcl/packages/c6/JclVersionControlExpertDLL.rc
trunk/jcl/packages/c6/JclVersionControlExpertDLL.res
trunk/jcl/packages/c6/template.rc
trunk/jcl/packages/cs1/Jcl.RES
trunk/jcl/packages/cs1/Jcl.bdsproj
trunk/jcl/packages/cs1/Jcl.rc
trunk/jcl/packages/cs1/JclBaseExpert.RES
trunk/jcl/packages/cs1/JclBaseExpert.bdsproj
trunk/jcl/packages/cs1/JclBaseExpert.rc
trunk/jcl/packages/cs1/JclFavoriteFoldersExpertDLL.RES
trunk/jcl/packages/cs1/JclFavoriteFoldersExpertDLL.bdsproj
trunk/jcl/packages/cs1/JclFavoriteFoldersExpertDLL.rc
trunk/jcl/packages/cs1/JclVersionControlExpertDLL.bdsproj
trunk/jcl/packages/cs1/JclVersionControlExpertDLL.rc
trunk/jcl/packages/cs1/JclVersionControlExpertDLL.res
trunk/jcl/packages/cs1/template.bdsproj
trunk/jcl/packages/cs1/template.rc
trunk/jcl/packages/d10/Jcl.bdsproj
trunk/jcl/packages/d10/Jcl.rc
trunk/jcl/packages/d10/Jcl.res
trunk/jcl/packages/d10/JclBaseExpert.bdsproj
trunk/jcl/packages/d10/JclBaseExpert.rc
trunk/jcl/packages/d10/JclBaseExpert.res
trunk/jcl/packages/d10/JclDebugExpert.bdsproj
trunk/jcl/packages/d10/JclDebugExpert.rc
trunk/jcl/packages/d10/JclDebugExpert.res
trunk/jcl/packages/d10/JclDebugExpertDLL.bdsproj
trunk/jcl/packages/d10/JclDebugExpertDLL.rc
trunk/jcl/packages/d10/JclDebugExpertDLL.res
trunk/jcl/packages/d10/JclFavoriteFoldersExpert.bdsproj
trunk/jcl/packages/d10/JclFavoriteFoldersExpert.rc
trunk/jcl/packages/d10/JclFavoriteFoldersExpert.res
trunk/jcl/packages/d10/JclFavoriteFoldersExpertDLL.bdsproj
trunk/jcl/packages/d10/JclFavoriteFoldersExpertDLL.rc
trunk/jcl/packages/d10/JclFavoriteFoldersExpertDLL.res
trunk/jcl/packages/d10/JclProjectAnalysisExpert.RES
trunk/jcl/packages/d10/JclProjectAnalysisExpert.bdsproj
trunk/jcl/packages/d10/JclProjectAnalysisExpert.rc
trunk/jcl/packages/d10/JclProjectAnalysisExpertDLL.bdsproj
trunk/jcl/packages/d10/JclProjectAnalysisExpertDLL.rc
trunk/jcl/packages/d10/JclProjectAnalysisExpertDLL.res
trunk/jcl/packages/d10/JclRepositoryExpert.bdsproj
trunk/jcl/packages/d10/JclRepositoryExpert.rc
trunk/jcl/packages/d10/JclRepositoryExpert.res
trunk/jcl/packages/d10/JclRepositoryExpertDLL.bdsproj
trunk/jcl/packages/d10/JclRepositoryExpertDLL.rc
trunk/jcl/packages/d10/JclRepositoryExpertDLL.res
trunk/jcl/packages/d10/JclSIMDViewExpert.bdsproj
trunk/jcl/packages/d10/JclSIMDViewExpert.rc
trunk/jcl/packages/d10/JclSIMDViewExpert.res
trunk/jcl/packages/d10/JclSIMDViewExpertDLL.bdsproj
trunk/jcl/packages/d10/JclSIMDViewExpertDLL.rc
trunk/jcl/packages/d10/JclSIMDViewExpertDLL.res
trunk/jcl/packages/d10/JclThreadNameExpert.bdsproj
trunk/jcl/packages/d10/JclThreadNameExpert.rc
trunk/jcl/packages/d10/JclThreadNameExpert.res
trunk/jcl/packages/d10/JclThreadNameExpertDLL.bdsproj
trunk/jcl/packages/d10/JclThreadNameExpertDLL.rc
trunk/jcl/packages/d10/JclThreadNameExpertDLL.res
trunk/jcl/packages/d10/JclVcl.bdsproj
trunk/jcl/packages/d10/JclVcl.rc
trunk/jcl/packages/d10/JclVcl.res
trunk/jcl/packages/d10/JclVersionControlExpert.bdsproj
trunk/jcl/packages/d10/JclVersionControlExpert.rc
trunk/jcl/packages/d10/JclVersionControlExpert.res
trunk/jcl/packages/d10/JclVersionControlExpertDLL.bdsproj
trunk/jcl/packages/d10/JclVersionControlExpertDLL.rc
trunk/jcl/packages/d10/JclVersionControlExpertDLL.res
trunk/jcl/packages/d10/template.bdsproj
trunk/jcl/packages/d10/template.rc
trunk/jcl/packages/d10.net/Jedi.Jcl.bdsproj
trunk/jcl/packages/d10.net/template.bdsproj
trunk/jcl/packages/d5/JclBaseExpertD50.rc
trunk/jcl/packages/d5/JclBaseExpertD50.res
trunk/jcl/packages/d5/JclD50.RES
trunk/jcl/packages/d5/JclD50.rc
trunk/jcl/packages/d5/JclDebugExpertD50.RES
trunk/jcl/packages/d5/JclDebugExpertD50.rc
trunk/jcl/packages/d5/JclDebugExpertDLLD50.RES
trunk/jcl/packages/d5/JclDebugExpertDLLD50.rc
trunk/jcl/packages/d5/JclFavoriteFoldersExpertD50.RES
trunk/jcl/packages/d5/JclFavoriteFoldersExpertD50.rc
trunk/jcl/packages/d5/JclFavoriteFoldersExpertDLLD50.RES
trunk/jcl/packages/d5/JclFavoriteFoldersExpertDLLD50.rc
trunk/jcl/packages/d5/JclProjectAnalysisExpertD50.RES
trunk/jcl/packages/d5/JclProjectAnalysisExpertD50.rc
trunk/jcl/packages/d5/JclProjectAnalysisExpertDLLD50.RES
trunk/jcl/packages/d5/JclProjectAnalysisExpertDLLD50.rc
trunk/jcl/packages/d5/JclRepositoryExpertD50.rc
trunk/jcl/packages/d5/JclRepositoryExpertD50.res
trunk/jcl/packages/d5/JclRepositoryExpertDLLD50.rc
trunk/jcl/packages/d5/JclRepositoryExpertDLLD50.res
trunk/jcl/packages/d5/JclSIMDViewExpertD50.RES
trunk/jcl/packages/d5/JclSIMDViewExpertD50.rc
trunk/jcl/packages/d5/JclSIMDViewExpertDLLD50.RES
trunk/jcl/packages/d5/JclSIMDViewExpertDLLD50.rc
trunk/jcl/packages/d5/JclThreadNameExpertD50.RES
trunk/jcl/packages/d5/JclThreadNameExpertD50.rc
trunk/jcl/packages/d5/JclThreadNameExpertDLLD50.RES
trunk/jcl/packages/d5/JclThreadNameExpertDLLD50.rc
trunk/jcl/packages/d5/JclUsesExpertD50.RES
trunk/jcl/packages/d5/JclUsesExpertD50.rc
trunk/jcl/packages/d5/JclUsesExpertDLLD50.RES
trunk/jcl/packages/d5/JclUsesExpertDLLD50.rc
trunk/jcl/packages/d5/JclVersionControlExpertD50.rc
trunk/jcl/packages/d5/JclVersionControlExpertD50.res
trunk/jcl/packages/d5/JclVersionControlExpertDLLD50.rc
trunk/jcl/packages/d5/JclVersionControlExpertDLLD50.res
trunk/jcl/packages/d5/template.rc
trunk/jcl/packages/d6/Jcl.rc
trunk/jcl/packages/d6/Jcl.res
trunk/jcl/packages/d6/JclBaseExpert.rc
trunk/jcl/packages/d6/JclBaseExpert.res
trunk/jcl/packages/d6/JclDebugExpert.rc
trunk/jcl/packages/d6/JclDebugExpert.res
trunk/jcl/packages/d6/JclDebugExpertDLL.RES
trunk/jcl/packages/d6/JclDebugExpertDLL.rc
trunk/jcl/packages/d6/JclFavoriteFoldersExpert.rc
trunk/jcl/packages/d6/JclFavoriteFoldersExpert.res
trunk/jcl/packages/d6/JclFavoriteFoldersExpertDLL.RES
trunk/jcl/packages/d6/JclFavoriteFoldersExpertDLL.rc
trunk/jcl/packages/d6/JclProjectAnalysisExpert.RES
trunk/jcl/packages/d6/JclProjectAnalysisExpert.rc
trunk/jcl/packages/d6/JclProjectAnalysisExpertDLL.RES
trunk/jcl/packages/d6/JclProjectAnalysisExpertDLL.rc
trunk/jcl/packages/d6/JclRepositoryExpert.rc
trunk/jcl/packages/d6/JclRepositoryExpert.res
trunk/jcl/packages/d6/JclRepositoryExpertDLL.rc
trunk/jcl/packages/d6/JclRepositoryExpertDLL.res
trunk/jcl/packages/d6/JclSIMDViewExpert.rc
trunk/jcl/packages/d6/JclSIMDViewExpert.res
trunk/jcl/packages/d6/JclSIMDViewExpertDLL.RES
trunk/jcl/packages/d6/JclSIMDViewExpertDLL.rc
trunk/jcl/packages/d6/JclThreadNameExpert.rc
trunk/jcl/packages/d6/JclThreadNameExpert.res
trunk/jcl/packages/d6/JclThreadNameExpertDLL.RES
trunk/jcl/packages/d6/JclThreadNameExpertDLL.rc
trunk/jcl/packages/d6/JclUsesExpert.rc
trunk/jcl/packages/d6/JclUsesExpert.res
trunk/jcl/packages/d6/JclUsesExpertDLL.RES
trunk/jcl/packages/d6/JclUsesExpertDLL.rc
trunk/jcl/packages/d6/JclVClx.rc
trunk/jcl/packages/d6/JclVClx.res
trunk/jcl/packages/d6/JclVcl.rc
trunk/jcl/packages/d6/JclVcl.res
trunk/jcl/packages/d6/JclVersionControlExpert.rc
trunk/jcl/packages/d6/JclVersionControlExpert.res
trunk/jcl/packages/d6/JclVersionControlExpertDLL.rc
trunk/jcl/packages/d6/JclVersionControlExpertDLL.res
trunk/jcl/packages/d6/template.rc
trunk/jcl/packages/d7/Jcl.rc
trunk/jcl/packages/d7/Jcl.res
trunk/jcl/packages/d7/JclBaseExpert.rc
trunk/jcl/packages/d7/JclBaseExpert.res
trunk/jcl/packages/d7/JclDebugExpert.rc
trunk/jcl/packages/d7/JclDebugExpert.res
trunk/jcl/packages/d7/JclDebugExpertDLL.RES
trunk/jcl/packages/d7/JclDebugExpertDLL.rc
trunk/jcl/packages/d7/JclFavoriteFoldersExpert.rc
trunk/jcl/packages/d7/JclFavoriteFoldersExpert.res
trunk/jcl/packages/d7/JclFavoriteFoldersExpertDLL.RES
trunk/jcl/packages/d7/JclFavoriteFoldersExpertDLL.rc
trunk/jcl/packages/d7/JclProjectAnalysisExpert.RES
trunk/jcl/packages/d7/JclProjectAnalysisExpert.rc
trunk/jcl/packages/d7/JclProjectAnalysisExpertDLL.RES
trunk/jcl/packages/d7/JclProjectAnalysisExpertDLL.rc
trunk/jcl/packages/d7/JclRepositoryExpert.rc
trunk/jcl/packages/d7/JclRepositoryExpert.res
trunk/jcl/packages/d7/JclRepositoryExpertDLL.rc
trunk/jcl/packages/d7/JclRepositoryExpertDLL.res
trunk/jcl/packages/d7/JclSIMDViewExpert.rc
trunk/jcl/packages/d7/JclSIMDViewExpert.res
trunk/jcl/packages/d7/JclSIMDViewExpertDLL.RES
trunk/jcl/packages/d7/JclSIMDViewExpertDLL.rc
trunk/jcl/packages/d7/JclThreadNameExpert.rc
trunk/jcl/packages/d7/JclThreadNameExpert.res
trunk/jcl/packages/d7/JclThreadNameExpertDLL.RES
trunk/jcl/packages/d7/JclThreadNameExpertDLL.rc
trunk/jcl/packages/d7/JclUsesExpert.rc
trunk/jcl/packages/d7/JclUsesExpert.res
trunk/jcl/packages/d7/JclUsesExpertDLL.RES
trunk/jcl/packages/d7/JclUsesExpertDLL.rc
trunk/jcl/packages/d7/JclVClx.rc
trunk/jcl/packages/d7/JclVClx.res
trunk/jcl/packages/d7/JclVcl.rc
trunk/jcl/packages/d7/JclVcl.res
trunk/jcl/packages/d7/JclVersionControlExpert.rc
trunk/jcl/packages/d7/JclVersionControlExpert.res
trunk/jcl/packages/d7/JclVersionControlExpertDLL.rc
trunk/jcl/packages/d7/JclVersionControlExpertDLL.res
trunk/jcl/packages/d7/template.rc
trunk/jcl/packages/d8/Jcl.RES
trunk/jcl/packages/d8/Jcl.bdsproj
trunk/jcl/packages/d8/Jcl.rc
trunk/jcl/packages/d8/JclBaseExpert.RES
trunk/jcl/packages/d8/JclBaseExpert.bdsproj
trunk/jcl/packages/d8/JclBaseExpert.rc
trunk/jcl/packages/d8/JclFavoriteFoldersExpertDLL.RES
trunk/jcl/packages/d8/JclFavoriteFoldersExpertDLL.bdsproj
trunk/jcl/packages/d8/JclFavoriteFoldersExpertDLL.rc
trunk/jcl/packages/d8/JclVersionControlExpertDLL.bdsproj
trunk/jcl/packages/d8/JclVersionControlExpertDLL.rc
trunk/jcl/packages/d8/JclVersionControlExpertDLL.res
trunk/jcl/packages/d8/template.bdsproj
trunk/jcl/packages/d8/template.rc
trunk/jcl/packages/d9/Jcl.RES
trunk/jcl/packages/d9/Jcl.bdsproj
trunk/jcl/packages/d9/Jcl.rc
trunk/jcl/packages/d9/JclBaseExpert.bdsproj
trunk/jcl/packages/d9/JclBaseExpert.rc
trunk/jcl/packages/d9/JclBaseExpert.res
trunk/jcl/packages/d9/JclDebugExpert.RES
trunk/jcl/packages/d9/JclDebugExpert.bdsproj
trunk/jcl/packages/d9/JclDebugExpert.rc
trunk/jcl/packages/d9/JclDebugExpertDLL.RES
trunk/jcl/packages/d9/JclDebugExpertDLL.bdsproj
trunk/jcl/packages/d9/JclDebugExpertDLL.rc
trunk/jcl/packages/d9/JclFavoriteFoldersExpert.bdsproj
trunk/jcl/packages/d9/JclFavoriteFoldersExpert.rc
trunk/jcl/packages/d9/JclFavoriteFoldersExpert.res
trunk/jcl/packages/d9/JclFavoriteFoldersExpertDLL.RES
trunk/jcl/packages/d9/JclFavoriteFoldersExpertDLL.bdsproj
trunk/jcl/packages/d9/JclFavoriteFoldersExpertDLL.rc
trunk/jcl/packages/d9/JclProjectAnalysisExpert.RES
trunk/jcl/packages/d9/JclProjectAnalysisExpert.bdsproj
trunk/jcl/packages/d9/JclProjectAnalysisExpert.rc
trunk/jcl/packages/d9/JclProjectAnalysisExpertDLL.RES
trunk/jcl/packages/d9/JclProjectAnalysisExpertDLL.bdsproj
trunk/jcl/packages/d9/JclProjectAnalysisExpertDLL.rc
trunk/jcl/packages/d9/JclRepositoryExpert.bdsproj
trunk/jcl/packages/d9/JclRepositoryExpert.rc
trunk/jcl/packages/d9/JclRepositoryExpert.res
trunk/jcl/packages/d9/JclRepositoryExpertDLL.bdsproj
trunk/jcl/packages/d9/JclRepositoryExpertDLL.rc
trunk/jcl/packages/d9/JclRepositoryExpertDLL.res
trunk/jcl/packages/d9/JclSIMDViewExpert.bdsproj
trunk/jcl/packages/d9/JclSIMDViewExpert.rc
trunk/jcl/packages/d9/JclSIMDViewExpertDLL.RES
trunk/jcl/packages/d9/JclSIMDViewExpertDLL.bdsproj
trunk/jcl/packages/d9/JclSIMDViewExpertDLL.rc
trunk/jcl/packages/d9/JclSimdViewExpert.RES
trunk/jcl/packages/d9/JclThreadNameExpert.RES
trunk/jcl/packages/d9/JclThreadNameExpert.bdsproj
trunk/jcl/packages/d9/JclThreadNameExpert.rc
trunk/jcl/packages/d9/JclThreadNameExpertDLL.RES
trunk/jcl/packages/d9/JclThreadNameExpertDLL.bdsproj
trunk/jcl/packages/d9/JclThreadNameExpertDLL.rc
trunk/jcl/packages/d9/JclVcl.RES
trunk/jcl/packages/d9/JclVcl.bdsproj
trunk/jcl/packages/d9/JclVcl.rc
trunk/jcl/packages/d9/JclVersionControlExpert.bdsproj
trunk/jcl/packages/d9/JclVersionControlExpert.rc
trunk/jcl/packages/d9/JclVersionControlExpert.res
trunk/jcl/packages/d9/JclVersionControlExpertDLL.bdsproj
trunk/jcl/packages/d9/JclVersionControlExpertDLL.rc
trunk/jcl/packages/d9/JclVersionControlExpertDLL.res
trunk/jcl/packages/d9/template.bdsproj
trunk/jcl/packages/d9/template.rc
trunk/jcl/packages/d9.net/Jedi.Jcl.bdsproj
trunk/jcl/packages/d9.net/template.bdsproj
trunk/jcl/packages/k3/Jcl.rc
trunk/jcl/packages/k3/Jcl.res
trunk/jcl/packages/k3/JclVClx.rc
trunk/jcl/packages/k3/JclVClx.res
trunk/jcl/packages/k3/template.rc
Modified: trunk/jcl/packages/c5/JclBaseExpertC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclBaseExpertC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclBaseExpertC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Package containing common units for JCL Experts\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclBaseExpertC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclBaseExpertC50C50.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclBaseExpertC50.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JEDI Code Library RTL package\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclC50C50.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclC50.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclDebugExpertC50.RES
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclDebugExpertC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclDebugExpertC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclDebugExpertC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Debug IDE extension\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclDebugExpertC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclDebugExpertC50C50.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclDebugExpertDLLC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclDebugExpertDLLC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclDebugExpertDLLC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Debug IDE extension\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclDebugExpertDLLC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclDebugExpertDLLC50C50.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclDebugExpertDLLC50.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclFavoriteFoldersExpertC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclFavoriteFoldersExpertC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclFavoriteFoldersExpertC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Open and Save IDE dialogs with favorite folders\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclFavoriteFoldersExpertC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclFavoriteFoldersExpertC50C50.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclFavoriteFoldersExpertC50.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclFavoriteFoldersExpertDLLC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclFavoriteFoldersExpertDLLC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclFavoriteFoldersExpertDLLC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Open and Save IDE dialogs with favorite folders\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclFavoriteFoldersExpertDLLC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclFavoriteFoldersExpertDLLC50C50.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclFavoriteFoldersExpertDLLC50.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclProjectAnalysisExpertC50.RES
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclProjectAnalysisExpertC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclProjectAnalysisExpertC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclProjectAnalysisExpertC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Project Analyzer\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclProjectAnalysisExpertC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclProjectAnalysisExpertC50C50.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclProjectAnalysisExpertDLLC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclProjectAnalysisExpertDLLC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclProjectAnalysisExpertDLLC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Project Analyzer\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclProjectAnalysisExpertDLLC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclProjectAnalysisExpertDLLC50C50.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclProjectAnalysisExpertDLLC50.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclRepositoryExpertC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclRepositoryExpertC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclRepositoryExpertC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Package containing repository wizards\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclRepositoryExpertC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclRepositoryExpertC50C50.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclRepositoryExpertC50.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Package containing repository wizards\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclRepositoryExpertDLLC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclRepositoryExpertDLLC50C50.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclSIMDViewExpertC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclSIMDViewExpertC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclSIMDViewExpertC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Debug Window of XMM registers\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclSIMDViewExpertC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclSIMDViewExpertC50C50.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclSIMDViewExpertC50.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclSIMDViewExpertDLLC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclSIMDViewExpertDLLC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclSIMDViewExpertDLLC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Debug Window of XMM registers\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclSIMDViewExpertDLLC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclSIMDViewExpertDLLC50C50.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclSIMDViewExpertDLLC50.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclThreadNameExpertC50.RES
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclThreadNameExpertC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclThreadNameExpertC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclThreadNameExpertC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Thread Name IDE expert\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclThreadNameExpertC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclThreadNameExpertC50C50.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclThreadNameExpertDLLC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclThreadNameExpertDLLC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclThreadNameExpertDLLC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Thread Name IDE expert\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclThreadNameExpertDLLC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclThreadNameExpertDLLC50C50.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclThreadNameExpertDLLC50.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclUsesExpertC50.RES
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclUsesExpertC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclUsesExpertC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclUsesExpertC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Uses Wizard\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclUsesExpertC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclUsesExpertC50C50.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclUsesExpertDLLC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclUsesExpertDLLC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclUsesExpertDLLC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Uses Wizard\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclUsesExpertDLLC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclUsesExpertDLLC50C50.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclUsesExpertDLLC50.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclVersionControlExpertC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclVersionControlExpertC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclVersionControlExpertC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Integration of version control systems in the IDE\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclVersionControlExpertC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclVersionControlExpertC50C50.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclVersionControlExpertC50.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/JclVersionControlExpertDLLC50.rc
===================================================================
--- trunk/jcl/packages/c5/JclVersionControlExpertDLLC50.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/JclVersionControlExpertDLLC50.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Integration of version control systems in the IDE\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclVersionControlExpertDLLC50\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclVersionControlExpertDLLC50C50.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c5/JclVersionControlExpertDLLC50.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c5/template.rc
===================================================================
--- trunk/jcl/packages/c5/template.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c5/template.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "%DESCRIPTION%\0"
VALUE "FileVersion", "%VERSION_MAJOR_NUMBER%.%VERSION_MINOR_NUMBER%.%RELEASE_NUMBER%.%BUILD_NUMBER%\0"
VALUE "InternalName", "%NAME%\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "%NAME%C50%BINEXTENSION%\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "%VERSION_MAJOR_NUMBER%.%VERSION_MINOR_NUMBER% Build %BUILD_NUMBER%\0"
Modified: trunk/jcl/packages/c6/Jcl.RES
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/Jcl.rc
===================================================================
--- trunk/jcl/packages/c6/Jcl.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/Jcl.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JEDI Code Library RTL package\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "Jcl\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclC60.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclBaseExpert.rc
===================================================================
--- trunk/jcl/packages/c6/JclBaseExpert.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclBaseExpert.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Package containing common units for JCL Experts\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclBaseExpert\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclBaseExpertC60.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclBaseExpert.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclDebugExpert.RES
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclDebugExpert.rc
===================================================================
--- trunk/jcl/packages/c6/JclDebugExpert.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclDebugExpert.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Debug IDE extension\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclDebugExpert\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclDebugExpertC60.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclDebugExpertDLL.rc
===================================================================
--- trunk/jcl/packages/c6/JclDebugExpertDLL.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclDebugExpertDLL.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Debug IDE extension\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclDebugExpertDLL\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclDebugExpertDLLC60.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclDebugExpertDLL.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclFavoriteFoldersExpert.RES
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclFavoriteFoldersExpert.rc
===================================================================
--- trunk/jcl/packages/c6/JclFavoriteFoldersExpert.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclFavoriteFoldersExpert.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Open and Save IDE dialogs with favorite folders\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclFavoriteFoldersExpert\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclFavoriteFoldersExpertC60.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclFavoriteFoldersExpertDLL.rc
===================================================================
--- trunk/jcl/packages/c6/JclFavoriteFoldersExpertDLL.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclFavoriteFoldersExpertDLL.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Open and Save IDE dialogs with favorite folders\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclFavoriteFoldersExpertDLL\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclFavoriteFoldersExpertDLLC60.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclFavoriteFoldersExpertDLL.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclProjectAnalysisExpert.RES
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclProjectAnalysisExpert.rc
===================================================================
--- trunk/jcl/packages/c6/JclProjectAnalysisExpert.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclProjectAnalysisExpert.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Project Analyzer\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclProjectAnalysisExpert\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclProjectAnalysisExpertC60.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclProjectAnalysisExpertDLL.rc
===================================================================
--- trunk/jcl/packages/c6/JclProjectAnalysisExpertDLL.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclProjectAnalysisExpertDLL.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Project Analyzer\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclProjectAnalysisExpertDLL\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclProjectAnalysisExpertDLLC60.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclProjectAnalysisExpertDLL.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclRepositoryExpert.rc
===================================================================
--- trunk/jcl/packages/c6/JclRepositoryExpert.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclRepositoryExpert.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Package containing repository wizards\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclRepositoryExpert\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclRepositoryExpertC60.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclRepositoryExpert.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclRepositoryExpertDLL.rc
===================================================================
--- trunk/jcl/packages/c6/JclRepositoryExpertDLL.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclRepositoryExpertDLL.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Package containing repository wizards\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclRepositoryExpertDLL\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclRepositoryExpertDLLC60.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclRepositoryExpertDLL.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclSIMDViewExpert.rc
===================================================================
--- trunk/jcl/packages/c6/JclSIMDViewExpert.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclSIMDViewExpert.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Debug Window of XMM registers\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclSIMDViewExpert\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclSIMDViewExpertC60.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclSIMDViewExpert.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclSIMDViewExpertDLL.rc
===================================================================
--- trunk/jcl/packages/c6/JclSIMDViewExpertDLL.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclSIMDViewExpertDLL.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Debug Window of XMM registers\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclSIMDViewExpertDLL\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclSIMDViewExpertDLLC60.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclSIMDViewExpertDLL.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclThreadNameExpert.RES
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclThreadNameExpert.rc
===================================================================
--- trunk/jcl/packages/c6/JclThreadNameExpert.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclThreadNameExpert.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Thread Name IDE expert\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclThreadNameExpert\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclThreadNameExpertC60.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclThreadNameExpertDLL.rc
===================================================================
--- trunk/jcl/packages/c6/JclThreadNameExpertDLL.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclThreadNameExpertDLL.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Thread Name IDE expert\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclThreadNameExpertDLL\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclThreadNameExpertDLLC60.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclThreadNameExpertDLL.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclUsesExpert.RES
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclUsesExpert.rc
===================================================================
--- trunk/jcl/packages/c6/JclUsesExpert.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclUsesExpert.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Uses Wizard\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclUsesExpert\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclUsesExpertC60.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclUsesExpertDLL.rc
===================================================================
--- trunk/jcl/packages/c6/JclUsesExpertDLL.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclUsesExpertDLL.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Uses Wizard\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclUsesExpertDLL\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclUsesExpertDLLC60.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclUsesExpertDLL.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclVClx.RES
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclVClx.rc
===================================================================
--- trunk/jcl/packages/c6/JclVClx.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclVClx.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JEDI Code Library VisualCLX package\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclVClx\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclVClxC60.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclVcl.RES
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclVcl.rc
===================================================================
--- trunk/jcl/packages/c6/JclVcl.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclVcl.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JEDI Code Library VCL package\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclVcl\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclVclC60.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclVersionControlExpert.rc
===================================================================
--- trunk/jcl/packages/c6/JclVersionControlExpert.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclVersionControlExpert.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Integration of version control systems in the IDE\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclVersionControlExpert\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclVersionControlExpertC60.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclVersionControlExpert.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/JclVersionControlExpertDLL.rc
===================================================================
--- trunk/jcl/packages/c6/JclVersionControlExpertDLL.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/JclVersionControlExpertDLL.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Integration of version control systems in the IDE\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclVersionControlExpertDLL\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "JclVersionControlExpertDLLC60.dll\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/c6/JclVersionControlExpertDLL.res
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/c6/template.rc
===================================================================
--- trunk/jcl/packages/c6/template.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/c6/template.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "%DESCRIPTION%\0"
VALUE "FileVersion", "%VERSION_MAJOR_NUMBER%.%VERSION_MINOR_NUMBER%.%RELEASE_NUMBER%.%BUILD_NUMBER%\0"
VALUE "InternalName", "%NAME%\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "%NAME%C60%BINEXTENSION%\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "%VERSION_MAJOR_NUMBER%.%VERSION_MINOR_NUMBER% Build %BUILD_NUMBER%\0"
Modified: trunk/jcl/packages/cs1/Jcl.RES
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/cs1/Jcl.bdsproj
===================================================================
--- trunk/jcl/packages/cs1/Jcl.bdsproj 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/cs1/Jcl.bdsproj 2007-02-02 17:55:34 UTC (rev 1909)
@@ -164,7 +164,7 @@
<VersionInfoKeys Name="FileDescription">JEDI Code Library RTL package</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.99.0.2509</VersionInfoKeys>
<VersionInfoKeys Name="InternalName">Jcl</VersionInfoKeys>
- <VersionInfoKeys Name="LegalCopyright">Copyright (C) 1999, 2005 Project JEDI</VersionInfoKeys>
+ <VersionInfoKeys Name="LegalCopyright">Copyright (C) 1999, 2007 Project JEDI</VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename">Jcl71.bpl</VersionInfoKeys>
<VersionInfoKeys Name="ProductName">Jedi Code Library</VersionInfoKeys>
Modified: trunk/jcl/packages/cs1/Jcl.rc
===================================================================
--- trunk/jcl/packages/cs1/Jcl.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/cs1/Jcl.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JEDI Code Library RTL package\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "Jcl\0"
- VALUE "LegalCopyright", "Copyright (C) 1999, 2005 Project JEDI\0"
+ VALUE "LegalCopyright", "Copyright (C) 1999, 2007 Project JEDI\0"
VALUE "OriginalFilename", "Jcl71.bpl\0"
VALUE "ProductName", "Jedi Code Library\0"
VALUE "ProductVersion", "1.99 Build 2509\0"
Modified: trunk/jcl/packages/cs1/JclBaseExpert.RES
===================================================================
(Binary files differ)
Modified: trunk/jcl/packages/cs1/JclBaseExpert.bdsproj
===================================================================
--- trunk/jcl/packages/cs1/JclBaseExpert.bdsproj 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/cs1/JclBaseExpert.bdsproj 2007-02-02 17:55:34 UTC (rev 1909)
@@ -164,7 +164,7 @@
<VersionInfoKeys Name="FileDescription">JCL Package containing common units for JCL Experts</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.99.0.2509</VersionInfoKeys>
<VersionInfoKeys Name="InternalName">JclBaseExpert</VersionInfoKeys>
- <VersionInfoKeys Name="LegalCopyright">Copyright (C) 1999, 2005 Project JEDI</VersionInfoKeys>
+ <VersionInfoKeys Name="LegalCopyright">Copyright (C) 1999, 2007 Project JEDI</VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename">JclBaseExpert71.bpl</VersionInfoKeys>
<VersionInfoKeys Name="ProductName">Jedi Code Library</VersionInfoKeys>
Modified: trunk/jcl/packages/cs1/JclBaseExpert.rc
===================================================================
--- trunk/jcl/packages/cs1/JclBaseExpert.rc 2007-02-02 17:41:10 UTC (rev 1908)
+++ trunk/jcl/packages/cs1/JclBaseExpert.rc 2007-02-02 17:55:34 UTC (rev 1909)
@@ -19,7 +19,7 @@
VALUE "FileDescription", "JCL Package containing common units for JCL Experts\0"
VALUE "FileVersion", "1.99.0.2509\0"
VALUE "InternalName", "JclBaseExpert\0"
- VALUE "LegalCo...
[truncated message content] |