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-03-23 00:43:56
|
Revision: 1959
http://svn.sourceforge.net/jcl/?rev=1959&view=rev
Author: ahuser
Date: 2007-03-22 17:43:54 -0700 (Thu, 22 Mar 2007)
Log Message:
-----------
Added additional bootstap process for Delphi (dcc32ex.exe)
Added Paths:
-----------
trunk/jcl/InstallForDelphi.bat
trunk/jcl/install/build/dcc32ex.dpr
trunk/jcl/install/build/dcc32ex.exe
Added: trunk/jcl/InstallForDelphi.bat
===================================================================
--- trunk/jcl/InstallForDelphi.bat (rev 0)
+++ trunk/jcl/InstallForDelphi.bat 2007-03-23 00:43:54 UTC (rev 1959)
@@ -0,0 +1,38 @@
+@echo off
+
+cd install
+
+::jpp prototypes
+
+..\devtools\jpp.exe -c -dVCL -dMSWINDOWS -uVisualCLX -uUnix -uKYLIX -xVclGui VclGui\JediGUIMain.pas
+if ERRORLEVEL 1 goto FailedCompile
+..\devtools\jpp.exe -c -dVCL -dMSWINDOWS -uVisualCLX -uUnix -uKYLIX -xVclGui VClGui\JediGUIReadme.pas
+if ERRORLEVEL 1 goto FailedCompile
+..\devtools\jpp.exe -c -dVCL -dMSWINDOWS -uVisualCLX -uUnix -uKYLIX -xVclGui VclGui\JediGUIInstall.pas
+if ERRORLEVEL 1 goto FailedCompile
+
+
+:: compile installer
+
+build\dcc32ex.exe --use-search-paths -q -w -dJCLINSTALL -E..\bin -I..\source -U..\source\common;..\source\windows JediInstaller.dpr
+if ERRORLEVEL 1 goto FailedCompile
+
+
+echo Launching JCL installer...
+
+start ..\bin\JediInstaller.exe
+if ERRORLEVEL 1 goto FailStart
+goto FINI
+
+:FailStart
+..\bin\JediInstaller.exe
+goto FINI
+
+:FailedCompile
+echo.
+echo.
+echo An error occured while compiling the installer. Installation aborted.
+echo.
+
+:FINI
+cd ..
Added: trunk/jcl/install/build/dcc32ex.dpr
===================================================================
--- trunk/jcl/install/build/dcc32ex.dpr (rev 0)
+++ trunk/jcl/install/build/dcc32ex.dpr 2007-03-23 00:43:54 UTC (rev 1959)
@@ -0,0 +1,728 @@
+{$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W+,X+,Y+,Z1}
+{$WARN UNSAFE_TYPE OFF}
+{$WARN UNSAFE_CODE OFF}
+{$WARN UNSAFE_CAST OFF}
+program dcc32ex;
+
+{$APPTYPE CONSOLE}
+
+uses
+ Windows;
+
+var
+ DxgettextDir: string;
+ ExtraUnitDirs: string;
+ UseSearchPaths: Boolean;
+ RequireJcl: Boolean;
+ RequireJvcl: Boolean;
+
+{ Helper functions because no SysUtils unit is used. }
+{******************************************************************************}
+function ExtractFileDir(const S: string): string;
+var
+ ps: Integer;
+begin
+ ps := Length(S);
+ while (ps > 1) and (S[ps] <> '\') do
+ Dec(ps);
+ Result := Copy(S, 1, ps - 1);
+end;
+{******************************************************************************}
+function ExtractFileName(const S: string): string;
+var
+ ps: Integer;
+begin
+ ps := Length(S);
+ while (ps > 1) and (S[ps] <> '\') do
+ Dec(ps);
+ Result := Copy(S, ps + 1, MaxInt);
+end;
+{******************************************************************************}
+function ChangeFileExt(const Filename, NewExt: string): string;
+var
+ ps: Integer;
+begin
+ ps := Length(Filename);
+ while (ps > 1) and (Filename[ps] <> '.') do
+ Dec(ps);
+ if ps > 0 then
+ Result := Copy(Filename, 1, ps - 1) + NewExt
+ else
+ Result := Filename + NewExt;
+end;
+{******************************************************************************}
+function ExcludeTrailingPathDelimiter(const S: string): string;
+begin
+ if (S <> '') and (S[Length(S)] = '\') then
+ Result := Copy(S, 1, Length(S) - 1)
+ else
+ Result := S;
+end;
+{******************************************************************************}
+function StrLen(P: PChar): Integer;
+begin
+ Result := 0;
+ while P[Result] <> #0 do
+ Inc(Result);
+end;
+{******************************************************************************}
+function StrToInt(const S: string): Integer;
+var
+ Error: Integer;
+begin
+ Val(S, Result, Error);
+end;
+{******************************************************************************}
+function IntToStr(Value: Integer): string;
+begin
+ Str(Value, Result);
+end;
+{******************************************************************************}
+function SameText(const S1, S2: string): Boolean;
+var
+ i, len: Integer;
+begin
+ Result := False;
+ len := Length(S1);
+ if len = Length(S2) then
+ begin
+ for i := 1 to len do
+ if UpCase(S1[i]) <> UpCase(S2[i]) then
+ Exit;
+ Result := True;
+ end;
+end;
+{******************************************************************************}
+function StartsText(const SubStr, S: string): Boolean;
+var
+ i, len: Integer;
+begin
+ Result := False;
+ len := Length(SubStr);
+ if len <= Length(S) then
+ begin
+ for i := 1 to len do
+ if UpCase(SubStr[i]) <> UpCase(S[i]) then
+ Exit;
+ Result := True;
+ end;
+end;
+{******************************************************************************}
+function GetEnvironmentVariable(const Name: string): string;
+begin
+ SetLength(Result, 8 * 1024);
+ SetLength(Result, Windows.GetEnvironmentVariable(PChar(Name), PChar(Result), Length(Result)));
+end;
+{******************************************************************************}
+function ExpandDirMacros(const Path, RootDir: string): string;
+var
+ i: Integer;
+ Start, Len: Integer;
+ NewS, S: string;
+begin
+ Result := Path;
+ Len := Length(Result);
+ i := 1;
+ while i <= Len do
+ begin
+ if (Result[i] = '$') and (i < Len - 1) and (Result[i + 1] = '(') then
+ begin
+ Start := i;
+ while (i <= Len) and (Result[i] <> ')') do
+ Inc(i);
+ if i <= Len then
+ begin
+ S := Copy(Result, Start + 2, i - Start - 2);
+
+ if SameText(S, 'BDS') or SameText(S, 'BCB') or SameText(S, 'DELPHI') then
+ NewS := ExtractFileDir(RootDir)
+ else
+ NewS := GetEnvironmentVariable(S);
+
+ Delete(Result, Start, i - Start + 1);
+ Insert(NewS, Result, Start);
+ Dec(i, Length(S) + 3);
+ Inc(i, Length(NewS));
+ Len := Length(Result);
+ end;
+ end;
+ Inc(i);
+ end;
+end;
+{******************************************************************************}
+function FileExists(const Filename: string): Boolean;
+var
+ Attr: Cardinal;
+begin
+ Attr := GetFileAttributes(PChar(Filename));
+ Result := (Attr <> $FFFFFFFF) and (Attr and FILE_ATTRIBUTE_DIRECTORY = 0);
+end;
+{******************************************************************************}
+function DirectoryExists(const Filename: string): Boolean;
+var
+ Attr: Cardinal;
+begin
+ Attr := GetFileAttributes(PChar(Filename));
+ Result := (Attr <> $FFFFFFFF) and (Attr and FILE_ATTRIBUTE_DIRECTORY <> 0);
+end;
+{******************************************************************************}
+function Execute(const Cmd, StartDir: string; HideOutput: Boolean): Integer;
+var
+ ProcessInfo: TProcessInformation;
+ StartupInfo: TStartupInfo;
+begin
+ StartupInfo.cb := SizeOf(StartupInfo);
+ GetStartupInfo(StartupInfo);
+ if HideOutput then
+ begin
+ StartupInfo.hStdOutput := 0;
+ StartupInfo.hStdError := 0;
+ StartupInfo.dwFlags := STARTF_USESTDHANDLES;
+ end;
+ if CreateProcess(nil, PChar(Cmd), nil, nil, True, 0, nil,
+ Pointer(StartDir), StartupInfo, ProcessInfo) then
+ begin
+ CloseHandle(ProcessInfo.hThread);
+ WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
+ GetExitCodeProcess(ProcessInfo.hProcess, Cardinal(Result));
+ CloseHandle(ProcessInfo.hProcess);
+ end
+ else
+ Result := -1;
+end;
+{******************************************************************************}
+function GetTempDir: string;
+begin
+ SetLength(Result, MAX_PATH);
+ SetLength(Result, GetTempPath(Length(Result), PChar(Result)));
+ Result := ExcludeTrailingPathDelimiter(Result);
+ if Result = '' then
+ Result := ExcludeTrailingPathDelimiter(GetEnvironmentVariable('TEMP'));
+ if Result = '' then
+ Result := '.';
+end;
+{******************************************************************************}
+procedure FindDxgettext(Version: Integer);
+var
+ reg: HKEY;
+ len: Longint;
+ RegTyp: LongWord;
+ i: Integer;
+ S: string;
+begin
+ // dxgettext detection
+ if RegOpenKeyEx(HKEY_CLASSES_ROOT, 'bplfile\Shell\Extract strings\Command', 0, KEY_QUERY_VALUE or KEY_READ, reg) <> ERROR_SUCCESS then
+ Exit;
+ SetLength(S, MAX_PATH);
+ len := MAX_PATH;
+ RegQueryValueEx(reg, '', nil, @RegTyp, PByte(S), @len);
+ SetLength(S, StrLen(PChar(S)));
+ RegCloseKey(reg);
+
+ if S <> '' then
+ begin
+ if S[1] = '"' then
+ begin
+ Delete(S, 1, 1);
+ i := 1;
+ while (i <= Length(S)) and (S[i] <> '"') do
+ Inc(i);
+ SetLength(S, i - 1);
+ end;
+ S := ExtractFileDir(S);
+ DxgettextDir := S;
+ if not FileExists(DxgettextDir + '\msgfmt.exe') then
+ DxgettextDir := ''
+ else
+ begin
+ if Version = 5 then
+ S := S + '\delphi5';
+ if ExtraUnitDirs <> '' then
+ ExtraUnitDirs := ExtraUnitDirs + ';' + S
+ else
+ ExtraUnitDirs := S;
+ end;
+ end;
+end;
+{******************************************************************************}
+
+type
+ TTargetType = (ttNone, ttDelphi, ttBCB, ttBDS);
+const
+ ttFirst = ttDelphi;
+ TargetNames: array[TTargetType] of PChar = (
+ 'none', 'Delphi', 'C++Builder', 'Delphi'
+ );
+
+type
+ TTarget = record
+ Typ: TTargetType;
+ Version: Integer;
+ IDEVersion: Integer;
+ RootDir: string;
+ LibDirs: string;
+ SearchPaths: string;
+ KeyName: string;
+ Id: string; // ["d"|"c"]<version>
+ InstalledJcl: Boolean;
+ InstalledJvcl: Boolean;
+ end;
+
+function ReadTargetInfo(Typ: TTargetType; IDEVersion: Integer): TTarget;
+var
+ Reg: HKEY;
+ RegTyp: LongWord;
+
+ function ReadStr(const Name: string): string;
+ var
+ Len: Longint;
+ begin
+ Len := MAX_PATH;
+ SetLength(Result, MAX_PATH);
+ RegQueryValueEx(Reg, PChar(Name), nil, @RegTyp, PByte(Result), @Len);
+ SetLength(Result, StrLen(PChar(Result)));
+ end;
+
+var
+ IDEVersionStr: string;
+ JediLibDirs, Dir, DcpDir, RootDir: string;
+begin
+ Result.Typ := ttNone;
+ Result.Version := 0;
+ Result.IDEVersion := 0;
+ Result.RootDir := '';
+ Result.KeyName := '';
+ Result.Id := '';
+ Result.InstalledJcl := False;
+ Result.InstalledJvcl := False;
+
+ Str(IDEVersion, IDEVersionStr);
+ case Typ of
+ ttDelphi:
+ begin
+ Result.KeyName := 'Software\Borland\Delphi\' + IDEVersionStr + '.0';
+ Result.Id := 'd';
+ end;
+ ttBCB:
+ begin
+ Result.KeyName := 'Software\Borland\C++Builder\' + IDEVersionStr + '.0';
+ Result.Id := 'c';
+ end;
+ ttBDS:
+ begin
+ Result.KeyName := 'Software\Borland\BDS\' + IDEVersionStr + '.0';
+ Result.Id := 'd';
+ end;
+ end;
+
+ if RegOpenKeyEx(HKEY_LOCAL_MACHINE, PChar(Result.KeyName), 0,
+ KEY_QUERY_VALUE or KEY_READ, Reg) = ERROR_SUCCESS then
+ begin
+ Result.RootDir := ExcludeTrailingPathDelimiter(ReadStr('RootDir'));
+ RegCloseKey(Reg);
+ if Result.RootDir = '' then
+ Exit;
+ Result.Version := IDEVersion;
+ if Typ = ttBDS then
+ begin
+ if IDEVersion <= 2 then // C#Builder 1 and Delphi 8 can't build the installer
+ begin
+ Result.Typ := ttNone;
+ Result.Version := 0;
+ Result.IDEVersion := 0;
+ Result.RootDir := '';
+ Result.KeyName := '';
+ Result.Id := '';
+ Exit;
+ end;
+ Inc(Result.Version, 6); // 3.0 => 9
+ end;
+ Result.Typ := Typ;
+ Result.IDEVersion := IDEVersion;
+ Result.LibDirs := Result.RootDir + '\Lib';
+ if Typ = ttBCB then
+ Result.LibDirs := Result.LibDirs + ';' + Result.RootDir + '\Lib\Obj';
+ Result.Id := Result.Id + IntToStr(Result.Version);
+
+
+ if RegOpenKeyEx(HKEY_CURRENT_USER, PChar(Result.KeyName + '\Library'), 0,
+ KEY_QUERY_VALUE or KEY_READ, Reg) = ERROR_SUCCESS then
+ begin
+ Result.SearchPaths := ExpandDirMacros(ExcludeTrailingPathDelimiter(ReadStr('Search Path')), Result.RootDir);
+ RegCloseKey(Reg);
+ if UseSearchPaths then
+ Result.LibDirs := Result.LibDirs + ';' + Result.SearchPaths;
+ end;
+
+ JediLibDirs := '';
+ if RequireJcl and
+ (RegOpenKeyEx(HKEY_CURRENT_USER, PChar(Result.KeyName + '\Jedi\JCL'), 0,
+ KEY_QUERY_VALUE or KEY_READ, Reg) = ERROR_SUCCESS) then
+ begin
+ DcpDir := ExcludeTrailingPathDelimiter(ExpandDirMacros(ExcludeTrailingPathDelimiter(ReadStr('DcpDir')), Result.RootDir));
+ RootDir := ExcludeTrailingPathDelimiter(ExpandDirMacros(ExcludeTrailingPathDelimiter(ReadStr('RootDir')), Result.RootDir));
+ RegCloseKey(Reg);
+ Dir := RootDir + '\lib\' + Result.Id;
+ if FileExists(Dir + '\JclBase.dcu') then
+ begin
+ if not SameText(Dir, DcpDir) then
+ JediLibDirs := JediLibDirs + ';' + Dir + ';' + DcpDir
+ else
+ JediLibDirs := JediLibDirs + ';' + Dir;
+ JediLibDirs := JediLibDirs + ';' + RootDir + '\source';
+ Result.InstalledJcl := True;
+ end
+ else if FileExists(RootDir + '\source\common\JclBase.pas') then
+ begin
+ JediLibDirs := JediLibDirs + ';' + RootDir + '\source;' + RootDir + '\source\common;' + RootDir + '\source\vcl;' + RootDir + '\source\visclx';
+ {$IFDEF WIN32}
+ JediLibDirs := JediLibDirs + ';' + RootDir + '\source\windows';
+ {$ELSE}
+ JediLibDirs := JediLibDirs + ':' + RootDir + '\source\unix';
+ {$ENDIF WINDOWS}
+ Result.InstalledJcl := True;
+ end;
+ end;
+ if RequireJvcl and
+ (RegOpenKeyEx(HKEY_CURRENT_USER, PChar(Result.KeyName + '\Jedi\JVCL'), 0,
+ KEY_QUERY_VALUE or KEY_READ, Reg) = ERROR_SUCCESS) then
+ begin
+ DcpDir := ExcludeTrailingPathDelimiter(ExpandDirMacros(ExcludeTrailingPathDelimiter(ReadStr('DcpDir')), Result.RootDir));
+ RootDir := ExcludeTrailingPathDelimiter(ExpandDirMacros(ExcludeTrailingPathDelimiter(ReadStr('RootDir')), Result.RootDir));
+ RegCloseKey(Reg);
+ Dir := RootDir + '\lib\' + Result.Id;
+ if FileExists(Dir + '\JVCLVer.dcu') then
+ begin
+ if not SameText(Dir, DcpDir) then
+ JediLibDirs := JediLibDirs + ';' + Dir + ';' + DcpDir
+ else
+ JediLibDirs := JediLibDirs + ';' + Dir;
+ JediLibDirs := JediLibDirs + ';' + RootDir + '\common;' + RootDir + '\Resources';
+ Result.InstalledJvcl := True;
+ end;
+ end;
+ if JediLibDirs <> '' then
+ Result.LibDirs := Result.LibDirs + JediLibDirs; // leading ';' is already in JediLibDirs
+ end
+ else
+ begin
+ Result.KeyName := '';
+ Exit;
+ end;
+end;
+{******************************************************************************}
+procedure TestDelphi6Update2(const Target: TTarget);
+var
+ f: TextFile;
+ TestFilename: string;
+ Status: Integer;
+begin
+ // Test for Delphi 6 Update 2
+ TestFilename := GetTempDir + '\delphi6compiletest.dpr';
+ AssignFile(f, Testfilename);
+ {$I-}
+ Rewrite(f);
+ WriteLn(f, 'program delphi6compiletest;');
+ WriteLn(f, 'uses Windows, Graphics;');
+ WriteLn(f, 'begin');
+ WriteLn(f, ' ExitCode := ');
+ WriteLn(f, ' {$IF declared(clHotLight)}');
+ WriteLn(f, ' 0;');
+ WriteLn(f, ' {$ELSE}');
+ WriteLn(f, ' 1;');
+ WriteLn(f, ' {$IFEND}');
+ WriteLn(f, 'end.');
+ CloseFile(f);
+ {$I+}
+ if IOResult <> 0 then
+ begin
+ WriteLn(ErrOutput, 'Failed to write file ', TestFilename);
+ DeleteFile(PChar(TestFilename));
+ end
+ else
+ begin
+ // compile <TestFilename>.dpr
+ Status := Execute('"' + Target.RootDir + '\bin\dcc32.exe" ' +
+ '-Q -E. -N. -U"' + Target.LibDirs + '" ' + ExtractFileName(TestFilename),
+ ExtractFileDir(TestFilename), True);
+ DeleteFile(PChar(TestFilename));
+ if Status <> 0 then
+ begin
+ if Status = -1 then
+ WriteLn(ErrOutput, 'Failed to start "', Target.RootDir, '\bin\dcc32.exe"')
+ else
+ ;//WriteLn(ErrOutput, 'Compilation of "', TestFilename, '" failed.');
+ Halt(1);
+ end;
+
+ // start <TextFilename>.exe
+ Status := Execute('"' + ChangeFileExt(TestFilename, '.exe') + '"',
+ ExtractFileDir(TestFilename), False);
+ DeleteFile(PChar(ChangeFileExt(TestFilename, '.exe')));
+ if Status <> 0 then
+ begin
+ if Status = -1 then
+ WriteLn(ErrOutput, '"' + ChangeFileExt(TestFilename, '.exe') + '"')
+ else
+ begin
+ WriteLn(ErrOutput, 'Delphi 6 Update 2 is not installed.');
+ MessageBox(0, 'Delphi 6 Update 2 is not installed.', 'dcc32ex.exe', MB_ICONERROR or MB_OK);
+ end;
+ Halt(1);
+ end;
+ end;
+end;
+
+function SkipOption(CmdLine: PChar): PChar;
+begin
+ Result := CmdLine;
+ if Result <> nil then
+ begin
+ if Result[0] = '"' then
+ begin
+ Inc(Result);
+ while (Result[0] <> #0) and (Result[0] <> '"') do
+ Inc(Result);
+ if Result[0] = '"' then
+ Inc(Result);
+ end
+ else
+ begin
+ while (Result[0] <> #0) and (Result[0] <> ' ') and (Result[0] <> #9) do
+ begin
+ if Result[0] = '"' then // embedded quotes: -U"C:\Program Files\Borland\Delphi7\Lib"
+ begin
+ Inc(Result);
+ while (Result[0] <> #0) and (Result[0] <> '"') do
+ Inc(Result);
+ if Result[0] = '"' then
+ Inc(Result);
+ end;
+ Inc(Result);
+ end;
+ if Result[0] in [' ', #9] then
+ Inc(Result);
+ end;
+
+ // skip whitespaces
+ while Result[0] = ' ' do
+ Inc(Result);
+
+ if Result[0] = #0 then
+ Result := nil;
+ end;
+end;
+
+function ParseParams(CmdLine: PChar): PChar;
+var
+ S: string;
+ i: Integer;
+begin
+ Result := CmdLine;
+ while CmdLine <> nil do
+ begin
+ CmdLine := SkipOption(Result);
+ if CmdLine = nil then
+ S := Result
+ else
+ SetString(S, Result, CmdLine - Result);
+
+ // delete right spaces
+ i := Length(S);
+ while (i > 0) and (S[i] = ' ') do
+ Dec(i);
+ if i <> Length(S) then
+ S := Copy(S, 1, i);
+
+ if (S <> '') and (S[1] = '"') then
+ S := Copy(S, 2, Length(S) - 2);
+ if SameText(S, '--use-search-paths') then
+ UseSearchPaths := True
+ else
+ if SameText(S, '--requires-jcl') then
+ RequireJcl := True
+ else
+ if SameText(S, '--requires-jvcl') then
+ RequireJvcl := True
+ else
+ Break;
+ Result := CmdLine;
+ end;
+end;
+
+var
+ Typ: TTargetType;
+ IDEVersion: Integer;
+ NewestTarget: TTarget;
+ Target: TTarget;
+ InvalidFound: Boolean;
+ DependencyCheckFailed: Boolean;
+ f: TextFile;
+ Status: Integer;
+ Dcc32Cfg, CurDir, ExtraOpts: string;
+ CmdLine: PChar;
+ DelphiVersion: string;
+ PreferedTyp: TTargetType;
+ PreferedVersion: Integer;
+ PreferedTarget: TTarget;
+ Err: Integer;
+ ErrMsg: string;
+begin
+ CmdLine := GetCommandLine;
+ CmdLine := SkipOption(CmdLine); // skip executable name
+ CmdLine := ParseParams(CmdLine);
+{ UseSearchPaths := GetEnvironmentVariable('UseSeachPaths') = '1';
+ RequireJcl := GetEnvironmentVariable('RequireJCL') = '1';
+ RequireJvcl := GetEnvironmentVariable('RequireJVCL') = '1';}
+
+
+ PreferedTyp := ttNone;
+ PreferedVersion := 0;
+ DelphiVersion := GetEnvironmentVariable('DelphiVersion');
+ if DelphiVersion <> '' then
+ begin
+ Val(Copy(DelphiVersion, 2, MaxInt), PreferedVersion, Err);
+ if (Err = 0) and (PreferedVersion >= 5) then
+ begin
+ if DelphiVersion[1] in ['D', 'd'] then
+ PreferedTyp := ttDelphi;
+ if DelphiVersion[1] in ['C', 'c'] then
+ begin
+ if PreferedVersion <> 7 then
+ PreferedTyp := ttBCB;
+ end;
+ if PreferedVersion > 7 then
+ PreferedTyp := ttBDS;
+ end;
+ end;
+ PreferedTarget.Typ := ttNone;
+
+ NewestTarget.Typ := ttNone;
+ DependencyCheckFailed := False;
+ InvalidFound := False;
+ for Typ := ttFirst to High(TTargetType) do
+ begin
+ for IDEVersion := 1 to 20 do
+ begin
+ Target := ReadTargetInfo(Typ, IDEVersion);
+ if (Target.Typ <> ttNone) and (Target.Version >= 5) then
+ begin
+ // is the target valid
+ if FileExists(Target.RootDir + '\bin\dcc32.exe') and
+ (FileExists(Target.RootDir + '\lib\System.dcu') or FileExists(Target.RootDir + '\lib\obj\System.dcu')) then
+ begin
+ if (not RequireJcl or Target.InstalledJcl) and (not RequireJvcl or Target.InstalledJvcl) then
+ begin
+ if (NewestTarget.Typ = ttNone) or (NewestTarget.Version < Target.Version) then
+ NewestTarget := Target;
+
+ if (Target.Typ = PreferedTyp) and (Target.Version = PreferedVersion) then
+ PreferedTarget := Target;
+ end
+ else
+ begin
+ WriteLn('Missing dependencies for ', TargetNames[Target.Typ], ' ', Target.Version);
+ if RequireJcl and not Target.InstalledJcl then
+ WriteLn(' - JCL is required but not installed. (http://jcl.sourceforge.net)');
+ if RequireJvcl and not Target.InstalledJvcl then
+ WriteLn(' - JVCL is required but not installed. (http://jvcl.sourceforge.net)');
+ WriteLn;
+ DependencyCheckFailed := True;
+ InvalidFound := True;
+ end;
+ end
+ else
+ begin
+ WriteLn(TargetNames[Target.Typ], ' ', Target.Version, ' is no valid installation');
+ if not DirectoryExists(Target.RootDir) then
+ WriteLn(' - RootDir registry entry is not valid')
+ else
+ begin
+ if not FileExists(Target.RootDir + '\bin\dcc32.exe') then
+ WriteLn(' - dcc32.exe missing');
+ if not (FileExists(Target.RootDir + '\lib\System.dcu') or FileExists(Target.RootDir + '\lib\obj\System.dcu')) then
+ WriteLn(' - System.dcu missing');
+ end;
+ WriteLn;
+ InvalidFound := True;
+ end;
+ end;
+ end;
+ end;
+
+ if PreferedTarget.Typ <> ttNone then
+ NewestTarget := PreferedTarget;
+
+ if NewestTarget.Typ = ttNone then
+ begin
+ if InvalidFound then
+ begin
+ if DependencyCheckFailed then
+ ErrMsg := 'Dependencies are missing. Please install them first.'
+ else
+ ErrMsg := 'No valid Delphi/BCB/BDS version found. Are your registry settings correct?';
+ end
+ else
+ ErrMsg := 'No Delphi/BCB/BDS version installed.';
+ WriteLn(ErrOutput, ErrMsg);
+ MessageBox(0, PChar(ErrMsg), 'dcc32ex.exe', MB_ICONERROR or MB_OK);
+ Halt(1);
+ end;
+
+ Target := NewestTarget;
+ WriteLn('Using ', TargetNames[Target.Typ], ' ', Target.Version);
+ if Target.Version = 6 then
+ TestDelphi6Update2(Target);
+
+ ExtraOpts := '';
+ // dxgettext
+ FindDxgettext(Target.Version);
+ if ExtraUnitDirs <> '' then
+ begin
+ Target.LibDirs := Target.LibDirs + ';' + ExtraUnitDirs;
+ ExtraOpts := ExtraOpts + '-DUSE_DXGETTEXT ';
+ end;
+
+ // start dcc32.exe
+ GetDir(0, CurDir);
+ CurDir := ExcludeTrailingPathDelimiter(CurDir);
+ Dcc32Cfg := CurDir + '\dcc32.cfg';
+ SetFileAttributes(PChar(Dcc32Cfg), FILE_ATTRIBUTE_NORMAL);
+ AssignFile(f, Dcc32Cfg);
+ {$I-}
+ Rewrite(f);
+ WriteLn(f, '-U"' + Target.LibDirs + '"');
+ WriteLn(f, '-I"' + Target.LibDirs + '"');
+ WriteLn(f, '-R"' + Target.LibDirs + '"');
+ WriteLn(f, '-O"' + Target.LibDirs + '"');
+ CloseFile(f);
+ {$I+}
+ if IOResult <> 0 then
+ begin
+ //WriteLn(ErrOutput, 'Failed to write file ', Dcc32Cfg);
+ ExtraOpts := ExtraOpts + '-U"' + Target.LibDirs + '" -I"' + Target.LibDirs + '" -R"' + Target.LibDirs + '" -O"' + Target.LibDirs + '" ';
+ DeleteFile(PChar(Dcc32Cfg));
+ Dcc32Cfg := '';
+ end;
+
+ Status := Execute('"' + Target.RootDir + '\bin\dcc32.exe" ' + ExtraOpts + CmdLine, CurDir, False);
+ if Dcc32Cfg <> '' then
+ DeleteFile(PChar(Dcc32Cfg));
+
+ if ParamCount = 0 then
+ begin
+ WriteLn;
+ WriteLn('Additional options (must be specified before any dcc32 parameter):');
+ WriteLn(' --use-search-paths Use the IDE''s search paths');
+ WriteLn(' --requires-jcl Requires an installed JCL');
+ WriteLn(' --requires-jvcl Requires an installed JVCL');
+ WriteLn;
+ WriteLn('Environment variables:');
+ WriteLn(' DELPHIVERSION = d10 Prefer this Delphi/BCB/BDS version');
+ WriteLn(' (d5, d6, d7, c5, c6, d9, d10, ...)');
+ end;
+
+ ExitCode := Status;
+ {if DebugHook <> 0 then
+ ReadLn;}
+end.
Added: trunk/jcl/install/build/dcc32ex.exe
===================================================================
(Binary files differ)
Property changes on: trunk/jcl/install/build/dcc32ex.exe
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-03-19 00:05:00
|
Revision: 1957
http://svn.sourceforge.net/jcl/?rev=1957&view=rev
Author: outchy
Date: 2007-03-18 17:04:57 -0700 (Sun, 18 Mar 2007)
Log Message:
-----------
Support for Delphi 2007
Modified Paths:
--------------
trunk/jcl/Install.txt
trunk/jcl/devtools/included_files.bat
trunk/jcl/devtools/included_files.sh
trunk/jcl/docs/Readme.html
trunk/jcl/docs/Readme.txt
trunk/jcl/experts/common/JclOtaUtils.pas
trunk/jcl/experts/debug/converter/JclDebugIdeImpl.pas
trunk/jcl/experts/projectanalyzer/ProjAnalyzerImpl.pas
trunk/jcl/install/JclInstall.pas
trunk/jcl/install/build/build.dpr
trunk/jcl/install/build/build.exe
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/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/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/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.net/Jedi.Jcl.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/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/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/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/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.net/Jedi.Jcl.bdsproj
trunk/jcl/packages/k3/Jcl.bpk
trunk/jcl/packages/k3/Jcl.dpk
trunk/jcl/packages/k3/Jcl.rc
trunk/jcl/packages/k3/Jcl.res
trunk/jcl/packages/k3/JclVClx.bpk
trunk/jcl/packages/k3/JclVClx.dpk
trunk/jcl/packages/k3/JclVClx.rc
trunk/jcl/packages/k3/JclVClx.res
trunk/jcl/packages/xml/Jcl-L.xml
trunk/jcl/packages/xml/Jcl-R.xml
trunk/jcl/packages/xml/JclBaseExpert-D.xml
trunk/jcl/packages/xml/JclDebugExpert-D.xml
trunk/jcl/packages/xml/JclDebugExpertDLL-L.xml
trunk/jcl/packages/xml/JclFavoriteFoldersExpert-D.xml
trunk/jcl/packages/xml/JclFavoriteFoldersExpertDLL-L.xml
trunk/jcl/packages/xml/JclProjectAnalysisExpert-D.xml
trunk/jcl/packages/xml/JclProjectAnalysisExpertDLL-L.xml
trunk/jcl/packages/xml/JclRepositoryExpert-D.xml
trunk/jcl/packages/xml/JclRepositoryExpertDLL-L.xml
trunk/jcl/packages/xml/JclSIMDViewExpert-D.xml
trunk/jcl/packages/xml/JclSIMDViewExpertDLL-L.xml
trunk/jcl/packages/xml/JclThreadNameExpert-D.xml
trunk/jcl/packages/xml/JclThreadNameExpertDLL-L.xml
trunk/jcl/packages/xml/JclUsesExpert-D.xml
trunk/jcl/packages/xml/JclUsesExpertDLL-L.xml
trunk/jcl/packages/xml/JclVClx-R.xml
trunk/jcl/packages/xml/JclVcl-R.xml
trunk/jcl/packages/xml/JclVersionControlExpert-D.xml
trunk/jcl/packages/xml/JclVersionControlExpertDLL-L.xml
trunk/jcl/source/common/JclBase.pas
trunk/jcl/source/common/JclBorlandTools.pas
trunk/jcl/source/common/JclResources.pas
trunk/jcl/source/common/JclSysInfo.pas
trunk/jcl/source/common/JclSysUtils.pas
trunk/jcl/source/jcl.inc
trunk/jcl/source/jedi.inc
Property Changed:
----------------
trunk/jcl/source/
Modified: trunk/jcl/Install.txt
===================================================================
--- trunk/jcl/Install.txt 2007-03-18 23:59:28 UTC (rev 1956)
+++ trunk/jcl/Install.txt 2007-03-19 00:04:57 UTC (rev 1957)
@@ -10,6 +10,7 @@
- Borland Kylix 3
- Borland Delphi 2005
- Borland Developer Studio 2006 (also known as Delphi 2006, C++Builder 2006)
+- CodeGear Delphi 2007
For more detailed information, see docs\Readme.html.
@@ -67,4 +68,4 @@
Kylix 3 installation) in case your system is not set up to do that at startup.
--------------------------------
-Document last updated 2005-10-30
+Document last updated 2007-02-20
Modified: trunk/jcl/devtools/included_files.bat
===================================================================
--- trunk/jcl/devtools/included_files.bat 2007-03-18 23:59:28 UTC (rev 1956)
+++ trunk/jcl/devtools/included_files.bat 2007-03-19 00:04:57 UTC (rev 1957)
@@ -13,3 +13,4 @@
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
+copy ..\source\jcl.template.inc ..\source\jcld11.inc
\ No newline at end of file
Modified: trunk/jcl/devtools/included_files.sh
===================================================================
--- trunk/jcl/devtools/included_files.sh 2007-03-18 23:59:28 UTC (rev 1956)
+++ trunk/jcl/devtools/included_files.sh 2007-03-19 00:04:57 UTC (rev 1957)
@@ -15,3 +15,4 @@
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
+cp ../source/jcl.template.inc ../source/jcld11.inc
\ No newline at end of file
Modified: trunk/jcl/docs/Readme.html
===================================================================
--- trunk/jcl/docs/Readme.html 2007-03-18 23:59:28 UTC (rev 1956)
+++ trunk/jcl/docs/Readme.html 2007-03-19 00:04:57 UTC (rev 1957)
@@ -9,9 +9,9 @@
<body>
<hr><br>
<h1>Jedi Code Library</h1>
-<p>Release 1.98<br>
-Build 2509<br>
-13-January-2007</p>
+<p>Release 1.99<br>
+Build 2551
+24-Februray-2007</p>
<hr><br>
<h3>Content of this file</h3>
<ul>
@@ -28,23 +28,28 @@
</ul>
<hr><br>
<h3><a name="about">About this release</a></h3>
-<p>JCL release 1.98 provide an updated support for all targets (including Borland
-Developer Studio 2006 and Turbo Delphi) and an installation of some experts in C#Builder 1 and Delphi 8.</p>
-<p>As always, multiple bugs have been fixed; for detailed change logs,
+<p>JCL release 1.99 provide an updated support for all targets (including CodeGear Delphi 2007 for Win32).</p>
+<p>As always, multiple bugs have been fixed; for detailed change logs,
use the facilities of our Subversion repository at Sourceforge.net
<a href="http://sourceforge.net/projects/jcl/">http://sourceforge.net/projects/jcl/</a>
, see below.</p>
<p><span style="FONT-WEIGHT: bold">Head changes:</span>
</p>
<ul>
- <li>Integration of the JCL help into the help system of Delphi 2005, BDS 2006 and Turbo Delphi.</li>
+ <li>JclPeImage is significantly updated: it now supports 64-bit applications and libraries.
+</li>
+ <li>JclDebug is significantly updated: .jdbg files contain informations about all segments of code. A new option was added to limit exception handling to the main thread of the application.
+</li>
+ <li>PCRE (http://www.pcre.org/) updated to version 7.0. PCRE code can be included in the application not requiring "pcre.dll" anymore (experimental - read the comments at the beginning of source\common\pcre.pas for details and modifications to enable this feature).
+</li>
+ <li>JclMail : different file names can be specified for attachements
+</li>
<li>Collection of stream classes to make basic operations easier (getting random data, multiplexing several streams,
- buffering an other stream, being notifyed on changes, reading common data types, scoping a stream, delegating read/write/seek operations.</li>
- <li>Speed-up of the stack analysis of JclDebug: exception driven execution will not be slowed by activating JclDebug in the application.</li>
- <li>ZLIB (http://www.zlib.net/) updated to 1.2.3 (fixes a major issue while deflating corrupted data).</li>
- <li>PCRE (http://www.pcre.org/) updated to version 6.7.</li>
- <li>Unicode support updated to 4.1.0.</li>
- <li>New IDE expert to have subversion (http://subversion.tigris.org/) and cvs (http://www.cvsnt.org/) commands integrated in all support IDE.</li>
+ buffering an other stream, being notifyed on changes, reading common data types, scoping a stream, delegating read/write/seek operations.
+</li>
+ <li>Integration of the JCL help into the help system of Delphi 2005, BDS 2006, Turbo Delphi and Delphi 2007 for Win32.
+</li>
+ <li>New IDE expert to have TortoiseSVN (<a href="http://tortoisesvn.tigris.org/">http://tortoisesvn.tigris.org/</a>) and TortoiseCVS (<a href="http://tortoisecvs.sourceforge.net/">http://tortoisecvs.sourceforge.net/</a>) commands integrated in all supportted IDE.</li>
</ul>
<p><span style="FONT-WEIGHT: bold">Important:</span>
</p>
@@ -55,26 +60,26 @@
is added for each target to the BPL file name (for BDS 2006, the library file is named jcl100.bpl).
The installer tries to remove old packages. 3rd party packages requiring old DJcl* resp. CJcl* packages need to be changed
to accomodate the new naming scheme or they will cause conflicts in the IDE at load time.</p></li>
- <li><p>DCP files are now created in the lib\target subdirectory of the JCL
-installation. 3rd party packages requiring JCL packages need to have this path
+ <li><p>DCP files are now created in the lib\target subdirectory of the JCL
+installation. 3rd party packages requiring JCL packages need to have this path
in their "browse path" option to compile.</p></li>
</ul>
<p><span style="FONT-WEIGHT: bold">(Windows only) Installation options:</span></p>
-<p>Packages compiled by the JCL installer don't contain any debug
+<p>Packages compiled by the JCL installer don't contain any debug
informations to keep their size as small as possible.</p>
-<p>The Jedi Code Library packages are required by some 3rd party packages
-(including the Jedi Visual Component Library - JVCL), the installer generates
+<p>The Jedi Code Library packages are required by some 3rd party packages
+(including the Jedi Visual Component Library - JVCL), the installer generates
them if the "Packages" node is checked.</p>
-<p>The installer can generate MAP informations for each package. These informations
-can be linked into binaries to become JCL debug data or be converted to .jdbg files.
+<p>The installer can generate MAP informations for each package. These informations
+can be linked into binaries to become JCL debug data or be converted to .jdbg files.
Once linked MAP files could be deleted. These options are subnodes of the "Packages" node.</p>
-<p>For BDS 2006, the compiler introduced a new option to make the same packages available in C++,
-by checking the "Dual packages" option of the "Packages" node, you will be able to call functions
+<p>For BDS 2006, the compiler introduced a new option to make the same packages available in C++,
+by checking the "Dual packages" option of the "Packages" node, you will be able to call functions
of the JCL from C++ code.</p>
<p><span style="FONT-WEIGHT: bold">.net Framework support:</span></p>
-<p>A subset of JCL units was worked over to support Delphi.Net (Delphi 2005
-& BDS 2006). The packages belong to the Jedi.Jcl namespace. The installer can generate these
-packages for Delphi 2005 and BDS 2006, it displays an other tab to configure options and directory.
+<p>A subset of JCL units was worked over to support Delphi.Net (Delphi 2005
+& BDS 2006). The packages belong to the Jedi.Jcl namespace. The installer can generate these
+packages for Delphi 2005 and BDS 2006, it displays an other tab to configure options and directory.
The installation process is similar to the native targets.</p>
<hr><br>
<h3><a name="targets">Supported Tools</a></h3>
@@ -86,95 +91,116 @@
<p><span style="FONT-WEIGHT: bold">Only design-time support (only experts):</span></p>
<ul>
- <li>C#Builder 1 (cf <a href="#notes">Installation notes</a>).</li>
+ <li>C#Builder 1 (cf <a href="#notes">Installation notes</a>).
+</li>
<li>Delphi 8.net (cf <a href="#notes">Installation notes</a>).</li>
</ul>
<p><span style="FONT-WEIGHT: bold">Both supports (run time and design time):</span></p>
<ul>
- <li>Delphi version 5, 6, 7.</li>
- <li>C++Builder version 5 & 6.</li>
- <li>Delphi 2005 (Delphi Win32 and Delphi.net personalities).</li>
- <li>Borland Developer Studio 2006 (Delphi Win32, C++ Builder Win32, Delphi.net and C#Builder personalities).</li>
- <li>Turbo Delphi (explorer and professional - cf <a href="#notes">Installation notes</a>).</li>
+ <li>Delphi version 5, 6, 7.
+</li>
+ <li>C++Builder version 5 & 6.
+</li>
+ <li>Delphi 2005 (Delphi Win32 and Delphi.net personalities).
+</li>
+ <li>Borland Developer Studio 2006 (Delphi Win32, C++ Builder Win32, Delphi.net and C#Builder personalities).
+</li>
+ <li>Turbo Delphi (explorer and professional - cf <a href="#notes">Installation notes</a>).
+</li>
+ <li>CodeGear Delphi 2007 for Win32.</li>
</ul>
<hr><br>
<h3><a name="notes">Installation notes</a></h3>
<ul>
<li>Not every unit supports all tools. Look out for <tt>*.exc</tt>
- files in the tool-specific <tt>lib/</tt>subdirectories for a list of units
- excluded from compilation.</li>
+ files in the tool-specific <tt>lib/</tt>subdirectories for a list of units
+ excluded from compilation.
+</li>
<li>Kylix 3 Delphi/C++ installation is back but specific code has not been tested with the latest
- versions of the kernel. Please ensure you use the flavor of the JCL with Unix EOL.</li>
- <li>Free Pascal (<a href="http://www.freepascal.org/">http://www.freepascal.org/</a>)
+ versions of the kernel. Please ensure you use the flavor of the JCL with Unix EOL.
+</li>
+ <li>Free Pascal (<a href="http://www.freepascal.org/">http://www.freepascal.org/</a>)
support has not been updated for this release; most units from
source/common should work with FP 2.0, as tests with a 2.0 beta (1.9.8)
indicated, but this has not been verified. Note that there are no plans
- to support FP versions from the 1.0 branch.</li>
+ to support FP versions from the 1.0 branch.</li>
</ul>
<p><span style="FONT-WEIGHT: bold">Installation for Turbo Delphi</span></p>
-<p>The Jedi Code Library can be compiled targetting Turbo Delphi Explorer and Turbo Delphi Professional.
-Turbo Delphi Professional is recognized as BDS 2006, you have to download its command line compiler from
-CodeGear website at <a href="http://www.codegear.com/Default.aspx?tabid=160">http://www.codegear.com/Default.aspx?tabid=160</a>
+<p>The Jedi Code Library can be compiled targetting Turbo Delphi Explorer and Turbo Delphi Professional.
+Turbo Delphi Professional is recognized as BDS 2006, you have to download its command line compiler from
+CodeGear website at <a href="http://www.codegear.com/Default.aspx?tabid=160">http://www.codegear.com/Default.aspx?tabid=160</a>
to install the full JCL on this tool.</p>
<p>To install the JCL targetting Turbo Delphi Explorer, consider the following checks:</p>
<ul>
<li>If you have an other supported version of Delphi/C++Builder on this computer, it should automatically be
- detected and the installer will process as usual.</li>
+ detected and the installer will process as usual.
+</li>
<li>If you only have Turbo Delphi Explorer (and no other tools) on the computer, the installer cannot be
compiled. You have to use the Turbo Explorer flavor of the JCL that contains a precompiled installer. However,
- you will not be able to install any experts.</li>
+ you will not be able to install any experts.</li>
</ul>
<p><span style="FONT-WEIGHT: bold">Installation on C#Builder 1 and Delphi 8:</span></p>
<ul>
<li>These products cannot be used to build the JCL installer, you need an
- other supported product to install JCL experts on these products.</li>
+ other supported product to install JCL experts on these products.
+</li>
<li>These products are not able to use the JCL library as a runtime library.
- You cannot write managed applications and managed packages based on the JCL.</li>
+ You cannot write managed applications and managed packages based on the JCL.
+</li>
<li>These products are not shipped with their native compilers, you have to
- download it from codecentral (<a href="http://cc.codegear.com/">http://cc.codegear.com/</a>).
- The item (<a href="http://codecentral.codegear.com/Download.aspx?id=21333">http://codecentral.codegear.com/Download.aspx?id=21333</a>)
+ download it from codecentral (<a href="http://cc.codegear.com/">http://cc.codegear.com/</a>).
+ The item (<a href="http://codecentral.codegear.com/Download.aspx?id=21333">http://codecentral.codegear.com/Download.aspx?id=21333</a>)
contains the native compiler to be installed in Delphi 8.
- The item (<a href="http://codecentral.codegear.com/Download.aspx?id=21334">http://codecentral.codegear.com/Download.aspx?id=21334</a>)
+ The item (<a href="http://codecentral.codegear.com/Download.aspx?id=21334">http://codecentral.codegear.com/Download.aspx?id=21334</a>)
contains the native compiler to be installed in C#Builder 1.
- These zip files have to be extracted in the products directory using the standard pattern:</li>
+ These zip files have to be extracted in the products directory using the standard pattern:</li>
</ul>
<pre> Executable files (exe and dll) - BDS\X.0\bin
Compiler files (dcp and dcu) - BDS\X.0\lib
Toolsapi source files - BDS\X.0\source\ToolsAPI
</pre>
<p><span style="FONT-WEIGHT: bold">Default installation</span></p>
-<p>For all others versions of Delphi, C++Builder and BDS, simply launch Install.bat
+<p>For all others versions of Delphi, C++Builder and BDS, simply launch Install.bat
and the installer window will let you configure options and install the library.</p>
<hr><br>
<h3><a name="manual">Manual Installation</a></h3>
-<p>Although it is not recommended, a manual installation is possible. You will have
-to manually configure options for the library. That is done by modifying an included
+<p>Although it is not recommended, a manual installation is possible. You will have
+to manually configure options for the library. That is done by modifying an included
file.
<p>
<p>For each tool you want to install the JCL in, repeat the following steps:</p>
<ol>
- <li>Copy source\jcl.template.inc to a fixed file name:
- <ul>
- <li>For Kylix 3 (Delphi): source\jclkd3.inc</li>
- <li>For Kylix 3 (C++Builder): source\jclkc3.inc</li>
- <li>For C++Builder 5: source\jclc5.inc</li>
- <li>For C++Builder 6: source\jclc6.inc</li>
- <li>For Delphi 5: source\jcld5.inc</li>
- <li>For Delphi 6: source\jcld6.inc</li>
- <li>For Delphi 7: source\jcld7.inc</li>
- <li>For Delphi 2005: source\jcld9.inc</li>
- <li>For Delphi.net 2005: source\jcld9.net.inc</li>
- <li>For BDS 2006 (Delphi and C++Builder): source\jcld10.inc</li>
+ <li>Open and edit included file to customize options:</li><ul>
+ <li>For Kylix 3 (Delphi): source\jclkd3.inc
+</li>
+ <li>For Kylix 3 (C++Builder): source\jclkc3.inc
+</li>
+ <li>For C++Builder 5: source\jclc5.inc
+</li>
+ <li>For C++Builder 6: source\jclc6.inc
+</li>
+ <li>For Delphi 5: source\jcld5.inc
+</li>
+ <li>For Delphi 6: source\jcld6.inc
+</li>
+ <li>For Delphi 7: source\jcld7.inc
+</li>
+ <li>For Delphi 2005: source\jcld9.inc
+</li>
+ <li>For Delphi.net 2005: source\jcld9.net.inc
+</li>
+ <li>For BDS 2006 (Delphi and C++Builder) and CodeGear Delphi 2007 for Win32 : source\jcld10.inc
+</li>
<li>For Delphi.net 2006: source\jcld10.net.inc</li>
- </ul></li>
- <li>Open and edit that file to customize options.</li>
+ </ul>
<li>In the IDE, open and compile package Jcl.dpk (or Jcl.bpk for C++Builder)
located in a subdirectory of the "packages" directory matching your version of
the IDE. This package doesn't have to be installed since it doesn't provide
- any components.</li>
- <li>If you want to install experts, open package JclBaseExpert.dpk and compile it,
+ any components.
+</li>
+ <li>If you want to install experts, open package JclBaseExpert.dpk and compile it,
then you can install all the experts you want (packages are located in the same
- directory).</li>
+ directory).</li>
</ol>
<hr><br>
<h3><a name="files">Distribution content</a></h3>
@@ -215,65 +241,70 @@
drop us a note. There are several ways to get in contact with us:
<ul>
<li>Newsgroup is the recommended way to contact other JCL users and the team itself.
-They are hosted at <a href="news://forums.talkto.net/jedi.jcl">news://forums.talkto.net/jedi.jcl</a>.</li>
- <li>Write to <a href="mailto:jc...@de...">jc...@de...</a>
-or to <a href="mailto:jcl...@de...">jcl...@de...</a>
-This email account should not be used for support requests. If you need
-support please use either the newsgroups or the mailing list.</li>
- <li>If you want to keep up to date about JCL then you can join the
+They are hosted at <a href="news://forums.talkto.net/jedi.jcl">news://forums.talkto.net/jedi.jcl</a>.
+</li>
+ <li>Write to <a href="mailto:jc...@de...">jc...@de...</a>
+or to <a href="mailto:jcl...@de...">jcl...@de...</a>
+This email account should not be used for support requests. If you need
+support please use either the newsgroups or the mailing list.
+</li>
+ <li>If you want to keep up to date about JCL then you can join the
JCL mailing list by going to <a href="http://tech.groups.yahoo.com/group/JEDI-JCL/">http://tech.groups.yahoo.com/group/JEDI-JCL/</a>
You can also use this list to voice your opinion, comments or suggestions.</li>
</ul>
<hr>
<h3><a name="issues">Reporting bugs</a></h3>
-<p>The general rule is: <b><font color="#ff0000">If you want to get a
+<p>The general rule is: <b><font color="#ff0000">If you want to get a
bug fixed you need to log it!</font></b></p>
<p>An issue tracking tool can be accessed via ('Code Library' category):
<a href="http://homepages.codegear.com/jedi/issuetracker/">http://homepages.codegear.com/jedi/issuetracker/</a></p>
<p>Please be aware that you are allowed there to enter feature request and code donations as well.</p>
-<p>The JEDI issue tracker is based up on the Mantis BugTracker Open
+<p>The JEDI issue tracker is based up on the Mantis BugTracker Open
Source project. More background information about it is available on its homepage
<a href="http://mantisbt.sourceforge.net/">http://mantisbt.sourceforge.net</a></p>
<hr><br>
<h3><a name="releases">Downloads of stable sources</a></h3>
-<p>These sources are official JCL releases and file status can be considered as
-stable for use in final applications. During the past years, there have been around 2
+<p>These sources are official JCL releases and file status can be considered as
+stable for use in final applications. During the past years, there have been around 2
or 3 releases per year.</p>
<p>Jedi Code Library: File List on SourceForge:
<a href="http://sourceforge.net/project/showfiles.php?group_id=47514">http://sourceforge.net/project/showfiles.php?group_id=47514</a>
</p>
<hr><br>
<h3><a name="development">Development sources</a></h3>
-<p>These files are under active development and may cause some incompatibilities
-and some conflicts with existing code. You should not use these files in final
-applications. The JCL development team provides these files for testing and
+<p>These files are under active development and may cause some incompatibilities
+and some conflicts with existing code. You should not use these files in final
+applications. The JCL development team provides these files for testing and
feedback from users.</p>
-<p>You can download snapshots of the Subversion repository updated every day in the JCL daily page
+<p>You can download snapshots of the Subversion repository updated every day in the JCL daily page
<a href="http://jcl.sourceforge.net/daily/">http://jcl.sourceforge.net/daily/</a></p>
-<p>To always have access to the most recent changes in the JCL, you
+<p>To always have access to the most recent changes in the JCL, you
should install a Subversion client (we recommend TortoiseSVN <a href="http://tortoisesvn.tigris.org/">http://tortoisesvn.tigris.org/</a>
-and RapidSVN <a href="http://rapidsvn.tigris.org/">http://rapidsvn.tigris.org/</a>) and download the
-SVN repository files to your computer as explained in the repository page of the JEDI Wiki at
-<a href="http://homepages.codegear.com/jedi/wiki/index.php?title=Repository">http://homepages.codegear.com/jedi/wiki/index.php?title=Repository</a>
-With the SVN client, you can update your local repository at any time.
+and RapidSVN <a href="http://rapidsvn.tigris.org/">http://rapidsvn.tigris.org/</a>) and download the
+SVN repository files to your computer as explained in the repository page of the JEDI Wiki at
+<a href="http://homepages.codegear.com/jedi/wiki/index.php?title=Repository">http://homepages.codegear.com/jedi/wiki/index.php?title=Repository</a>
+With the SVN client, you can update your local repository at any time.
You can also view the repository online via the web interface at <a href="http://jcl.svn.sourceforge.net/">http://jcl.svn.sourceforge.net/</a></p>
<hr><br>
<h3><a name="contribute">Getting involved in JCL development</a></h3>
-If you want to help out making JCL better or bigger or just plain
-cooler, there are several ways in which you can help out. Here are some of the
+If you want to help out making JCL better or bigger or just plain
+cooler, there are several ways in which you can help out. Here are some of the
things we need your help on:
<ul>
- <li>Donate source code</li>
- <li>Donate time writing help</li>
- <li>Donate time writing demos</li>
+ <li>Donate source code
+</li>
+ <li>Donate time writing help
+</li>
+ <li>Donate time writing demos
+</li>
<li>Donate time fixing bugs</li>
<li>Share your experience by helping users in newsgroups and mailing lists</li>
</ul>
-<p>JCL accepts donations from developers as long as the source fullfills the
-requirements set up by the JEDI and JCL teams. To read more about these
+<p>JCL accepts donations from developers as long as the source fullfills the
+requirements set up by the JEDI and JCL teams. To read more about these
requirements, visit the page http://homepages.codegear.com/jedi/jcl</p>
-<p>You can also donate your time by writing help for the source already
-in JCL. We currently use Doc-o-Matic to create the finished help files but
+<p>You can also donate your time by writing help for the source already
+in JCL. We currently use Doc-o-Matic to create the finished help files but
the actual help sources are plain text files in a simple to understand format.
We can provide you with auto-generated templates with all classes, properties,
types etc already inserted. The "only" thing left to do is fill in the actual
Modified: trunk/jcl/docs/Readme.txt
===================================================================
--- trunk/jcl/docs/Readme.txt 2007-03-18 23:59:28 UTC (rev 1956)
+++ trunk/jcl/docs/Readme.txt 2007-03-19 00:04:57 UTC (rev 1957)
@@ -1,95 +1,102 @@
--------------------------------------------------------------------------------
Jedi Code Library
-Release 1.98
-Build 2509
-13-January-2007
+Release 1.99
+Build 2551
+24-Februray-2007
--------------------------------------------------------------------------------
Content of this file
- - About this release
- - Supported tools
- - Installation notes
- - Manual installation
- - Distribution content
- - Giving your feedback
- - Reporting bugs
- - Downloads of stable sources
- - Development sources
- - Getting involved in JCL development
+About this release
+Supported tools
+Installation notes
+Manual installation
+Distribution content
+Giving your feedback
+Reporting bugs
+Downloads of stable sources
+Development sources
+Getting involved in JCL development
--------------------------------------------------------------------------------
About this release
+JCL release 1.99 provide an updated support for all targets (including CodeGear
+Delphi 2007 for Win32).
-JCL release 1.98 provide an updated support for all targets (including Borland
-Developer Studio 2006 and Turbo Delphi) and an installation of some experts in
-C#Builder 1 and Delphi 8.
As always, multiple bugs have been fixed; for detailed change logs, use the
facilities of our Subversion repository at Sourceforge.net
-http://sourceforge.net/projects/jcl/ , see below.
+http://sourceforge.net/projects/jcl/, see below.
Head changes:
- - Integration of the JCL help into the help system of Delphi 2005, BDS 2006
- and Turbo Delphi.
+
+ - JclPeImage is significantly updated: it now supports 64-bit applications and
+ libraries.
+ - JclDebug is significantly updated: .jdbg files contain informations about all
+ segments of code. A new option was added to limit exception handling to the
+ main thread of the application.
+ - PCRE (http://www.pcre.org/) updated to version 7.0. PCRE code can be included
+ in the application not requiring "pcre.dll" anymore (experimental - read the
+ comments at the beginning of source\common\pcre.pas for details and
+ modifications to enable this feature).
+ - JclMail : different file names can be specified for attachements
- Collection of stream classes to make basic operations easier (getting random
data, multiplexing several streams, buffering an other stream, being notifyed
- on changes, reading common data types, scoping a stream,
- delegating read/write/seek operations.
- - Speed-up of the stack analysis of JclDebug: exception driven execution will
- not be slowed by activating JclDebug in the application.
- - ZLIB (http://www.zlib.net/) updated to 1.2.3 (fixes a major issue while
- deflating corrupted data).
- - PCRE (http://www.pcre.org/) updated to version 6.7.
- - Unicode support updated to 4.1.0.
- - New IDE expert to have subversion (http://subversion.tigris.org/) and
- cvs (http://www.cvsnt.org/) commands integrated in all support IDE.
+ on changes, reading common data types, scoping a stream, delegating
+ read/write/seek operations.
+ - Integration of the JCL help into the help system of Delphi 2005, BDS 2006,
+ Turbo Delphi and Delphi 2007 for Win32.
+ - New IDE expert to have TortoiseSVN (http://tortoisesvn.tigris.org/) and
+ TortoiseCVS (http://tortoisecvs.sourceforge.net/) commands integrated in all
+ supportted IDE.
Important:
- - Note that the package naming has changed: the same package name is used by all
- versions of the compiler supporting suffixes (C++Builder 6, Delphi 6, Delphi 7,
- C#Builder 1, Delphi 8, Delphi 2005 and BDS 2006); a different suffix is added
- for each target to the BPL file name (for BDS 2006, the library file is named
- jcl100.bpl). The installer tries to remove old packages. 3rd party packages
- requiring old DJcl* resp. CJcl* packages need to be changed to accomodate the
- new naming scheme or they will cause conflicts in the IDE at load time.
+ - Note that the package naming has changed: the same package name is used by
+ all versions of the compiler supporting suffixes (C++Builder 6, Delphi 6,
+ Delphi 7, C#Builder 1, Delphi 8, Delphi 2005 and BDS 2006); a different
+ suffix is added for each target to the BPL file name (for BDS 2006, the
+ library file is named jcl100.bpl). The installer tries to remove old
+ packages. 3rd party packages requiring old DJcl* resp. CJcl* packages need to
+ be changed to accomodate the new naming scheme or they will cause conflicts
+ in the IDE at load time.
+
- DCP files are now created in the lib\target subdirectory of the JCL
- installation. 3rd party packages requiring JCL packages need to have this path
- in their "browse path" option to compile.
+ installation. 3rd party packages requiring JCL packages need to have this
+ path in their "browse path" option to compile.
(Windows only) Installation options:
-Packages compiled by the JCL installer don't contain any debug informations to
+
+ Packages compiled by the JCL installer don't contain any debug informations to
keep their size as small as possible.
-The Jedi Code Library packages are required by some 3rd party packages
+ The Jedi Code Library packages are required by some 3rd party packages
(including the Jedi Visual Component Library - JVCL), the installer generates
them if the "Packages" node is checked.
-The installer can generate MAP informations for each package. These informations
-can be linked into binaries to become JCL debug data or be converted to .jdbg
-files. Once linked MAP files could be deleted. These options are subnodes of the
-"Packages" node.
+ The installer can generate MAP informations for each package. These
+informations can be linked into binaries to become JCL debug data or be
+converted to .jdbg files. Once linked MAP files could be deleted. These options
+are subnodes of the "Packages" node.
-For BDS 2006, the compiler introduced a new option to make the same packages
+ For BDS 2006, the compiler introduced a new option to make the same packages
available in C++, by checking the "Dual packages" option of the "Packages" node,
you will be able to call functions of the JCL from C++ code.
.net Framework support:
-A subset of JCL units was worked over to support Delphi.Net (Delphi 2005 & BDS
-2006). The packages belong to the Jedi.Jcl namespace. The installer can generate
-these packages for Delphi 2005 and BDS 2006, it displays an other tab to
-configure options and directory. The installation process is similar to the
+
+A subset of JCL units was worked over to support Delphi.Net (Delphi 2005
+& BDS 2006). The packages belong to the Jedi.Jcl namespace. The installer can
+generate these packages for Delphi 2005 and BDS 2006, it displays an other tab
+to configure options and directory. The installation process is similar to the
native targets.
--------------------------------------------------------------------------------
Supported Tools
+The JCL can be compiled and installed in the following environments
-The Jedi Code Library can be compiled and installed in the following
-environments
-
Only runtime support:
- Kylix 3 (cf Installation notes)
@@ -104,20 +111,22 @@
- Borland Developer Studio 2006 (Delphi Win32, C++ Builder Win32, Delphi.net
and C#Builder personalities).
- Turbo Delphi (explorer and professional - cf Installation notes).
+ - CodeGear Delphi 2007 for Win32.
--------------------------------------------------------------------------------
Installation notes
- - Not every unit supports all tools. Look out for *.exc files in the
- tool-specific lib/subdirectories for a list of units excluded from
- compilation.
+ - Not every unit supports all tools. Look out for *.exc files in the tool-
+ specific lib/subdirectories for a list of units excluded from compilation.
+
- Kylix 3 Delphi/C++ installation is back but specific code has not been tested
with the latest versions of the kernel. Please ensure you use the flavor of
the JCL with Unix EOL.
+
- Free Pascal (http://www.freepascal.org/) support has not been updated for
- this release; most units from source/common should work with FP 2.0, as tests
- with a 2.0 beta (1.9.8) indicated, but this has not been verified. Note that
+ this release; most units fromsource/common should work with FP 2.0, as tests
+ with a 2.0 beta (1.9.8)indicated, but this has not been verified. Note that
there are no plans to support FP versions from the 1.0 branch.
Installation for Turbo Delphi
@@ -130,25 +139,27 @@
To install the JCL targetting Turbo Delphi Explorer, consider the following
checks:
+
- If you have an other supported version of Delphi/C++Builder on this computer,
it should automatically be detected and the installer will process as usual.
- If you only have Turbo Delphi Explorer (and no other tools) on the computer,
- the installer cannot be compiled. You have to use the Turbo Explorer flavor
- of the JCL that contains a precompiled installer. However, you will not be
- able to install any experts.
+ the installer cannot becompiled. You have to use the Turbo Explorer flavor of
+ the JCL that contains a precompiled installer. However, you will not be able
+ to install any experts.
Installation on C#Builder 1 and Delphi 8:
+
- These products cannot be used to build the JCL installer, you need an other
supported product to install JCL experts on these products.
- These products are not able to use the JCL library as a runtime library. You
cannot write managed applications and managed packages based on the JCL.
- These products are not shipped with their native compilers, you have to
- download it from codecentral (http://cc.codegear.com/).
- The item (http://codecentral.codegear.com/Download.aspx?id=21333) contains
- the native compiler to be installed in Delphi 8.
- The item (http://codecentral.codegear.com/Download.aspx?id=21334) contains
- the native compiler to be installed in C#Builder 1. These zip files have to
- be extracted in the products directory using the standard pattern:
+ download it from codecentral (http://cc.codegear.com/). The item
+ (http://codecentral.codegear.com/Download.aspx?id=21333) contains the native
+ compiler to be installed in Delphi 8. The item
+ (http://codecentral.codegear.com/Download.aspx?id=21334) contains the native
+ compiler to be installed in C#Builder 1. These zip files have to be extracted
+ in the products directory using the standard pattern:
Executable files (exe and dll) - BDS\X.0\bin
Compiler files (dcp and dcu) - BDS\X.0\lib
Toolsapi source files - BDS\X.0\source\ToolsAPI
@@ -161,37 +172,38 @@
--------------------------------------------------------------------------------
Manual Installation
-
Although it is not recommended, a manual installation is possible. You will have
to manually configure options for the library. That is done by modifying an
included file.
For each tool you want to install the JCL in, repeat the following steps:
- 1 Copy source\jcl.template.inc to a fixed file name:
- - For Kylix 3 (Delphi): source\jclkd3.inc
- - For Kylix 3 (C++Builder): source\jclkc3.inc
- - For C++Builder 5: source\jclc5.inc
- - For C++Builder 6: source\jclc6.inc
- - For Delphi 5: source\jcld5.inc
- - For Delphi 6: source\jcld6.inc
- - For Delphi 7: source\jcld7.inc
- - For Delphi 2005: source\jcld9.inc
- - For Delphi.net 2005: source\jcld9.net.inc
- - For BDS 2006 (Delphi and C++Builder): source\jcld10.inc
- - For Delphi.net 2006: source\jcld10.net.inc
- 2 Open and edit that file to customize options.
- 3 In the IDE, open and compile package Jcl.dpk (or Jcl.bpk for C++Builder)
- located in the subdirectory of the "packages" directory matching your version
- of the IDE. This package doesn't have to be installed since it doesn't
- provide any components.
- 4 If you want to install experts, open package JclBaseExpert.dpk and compile
- it, then you can install all the experts you want (packages are located in
- the same directory).
+1. Open and edit included file to customize options:
+ - For Kylix 3 (Delphi): source\jclkd3.inc
+ - For Kylix 3 (C++Builder): source\jclkc3.inc
+ - For C++Builder 5: source\jclc5.inc
+ - For C++Builder 6: source\jclc6.inc
+ - For Delphi 5: source\jcld5.inc
+ - For Delphi 6: source\jcld6.inc
+ - For Delphi 7: source\jcld7.inc
+ - For Delphi 2005: source\jcld9.inc
+ - For Delphi.net 2005: source\jcld9.net.inc
+ - For BDS 2006 (Delphi and C++Builder) and CodeGear Delphi 2007 for Win32 :
+ source\jcld10.inc
+ - For Delphi.net 2006: source\jcld10.net.inc
+
+2. In the IDE, open and compile package Jcl.dpk (or Jcl.bpk for C++Builder)
+located in a subdirectory of the "packages" directory matching your version of
+the IDE. This package doesn't have to be installed since it doesn't provide any
+components.
+
+3. If you want to install experts, open package JclBaseExpert.dpk and compile
+it, then you can install all the experts you want (packages are located in the
+same directory).
+
--------------------------------------------------------------------------------
Distribution content
-
Install.bat - Compile and run VCL version of the JCL Installer (Win32)
QInstall.bat - Compile and run CLX version of JCL Installer (Win32)
install.sh - Compile and run JCL Installer (Linux)
@@ -235,8 +247,8 @@
account should not be used for support requests. If you need support please
use either the newsgroups or the mailing list.
- If you want to keep up to date about JCL then you can join the JCL mailing
- list by going to http://tech.groups.yahoo.com/group/JEDI-JCL/ You can also
- use this list to voice your opinion, comments or suggestions.
+ list by going to http://tech.groups.yahoo.com/group/JEDI-JCL/You can also use
+ this list to voice your opinion, comments or suggestions.
--------------------------------------------------------------------------------
@@ -246,6 +258,7 @@
An issue tracking tool can be accessed via ('Code Library' category):
http://homepages.codegear.com/jedi/issuetracker/
+
Please be aware that you are allowed there to enter feature request and code
donations as well.
@@ -277,7 +290,7 @@
JCL daily page http://jcl.sourceforge.net/daily/
To always have access to the most recent changes in the JCL, you should install
-a Subversion client (we recommend TortoiseSVN http://tortoisesvn.tigris.org/ and
+a Subversion client (we recommend TortoiseSVN http://tortoisesvn.tigris.org/and
RapidSVN http://rapidsvn.tigris.org/) and download the SVN repository files to
your computer as explained in the repository page of the JEDI Wiki at
http://homepages.codegear.com/jedi/wiki/index.php?title=Repository With the SVN
@@ -287,6 +300,7 @@
--------------------------------------------------------------------------------
Getting involved in JCL development
+
If you want to help out making JCL better or bigger or just plain cooler, there
are several ways in which you can help out. Here are some of the things we need
your help on:
@@ -294,21 +308,22 @@
- Donate time writing help
- Donate time writing demos
- Donate time fixing bugs
+ - Share your experience by helping users in newsgroups and mailing lists
-Share your experience by helping users in newsgroups and mailing lists
-JCL accepts donations from developers as long as the source fullfills the
+ JCL accepts donations from developers as long as the source fullfills the
requirements set up by the JEDI and JCL teams. To read more about these
requirements, visit the page http://homepages.codegear.com/jedi/jcl
-You can also donate your time by writing help for the source already in JCL.
+ You can also donate your time by writing help for the source already in JCL.
We currently use Doc-o-Matic to create the finished help files but the actual
help sources are plain text files in a simple to understand format. We can
-provide you with auto-generated templates with all classes, properties, types etc
-already inserted. The "only" thing left to do is fill in the actual help text
-for the help items. If you are interested in writing help, contact us.
+provide you with auto-generated templates with all classes, properties,
+types etc already inserted. The "only" thing left to do is fill in the actual
+help text for the help items. If you are interested in writing help, contact us.
If you want to help fix bugs in JCL, go to Mantis and check the bug report
there. You can post replies as well as fixes directly in the bug report. One of
the JCL developers will pick up the report/fix and update the Subversion
repository if the fi is satisfactory. If you report and fix a lot of bugs, you
might even get developer access to SVN so you can update the JCL files directly.
+
Modified: trunk/jcl/experts/common/JclOtaUtils.pas
===================================================================
--- trunk/jcl/experts/common/JclOtaUtils.pas 2007-03-18 23:59:28 UTC (rev 1956)
+++ trunk/jcl/experts/common/JclOtaUtils.pas 2007-03-19 00:04:57 UTC (rev 1957)
@@ -220,7 +220,7 @@
{$IFDEF MSWINDOWS}
ImageHlp, JclRegistry,
{$ENDIF MSWINDOWS}
- JclFileUtils, JclStrings, JclSysInfo,
+ JclFileUtils, JclStrings, JclSysInfo, JclSimpleXml,
JclOtaConsts, JclOtaResources, JclOtaExceptionForm, JclOtaConfigurationForm,
JclOtaActionConfigureSheet, JclOtaWizardForm, JclOtaWizardFrame;
@@ -861,9 +861,11 @@
function TJclOTAExpertBase.IsPackage(const Project: IOTAProject): Boolean;
var
- FileName, FileExtension, ProjectContent: string;
- Index, SourceNodePosition: Integer;
- ProjectFile: TStrings;
+ FileName, FileExtension: string;
+ Index: Integer;
+ ProjectFile: TJclSimpleXML;
+ PersonalityNode, SourceNode, ProjectExtensions, ProjectTypeNode: TJclSimpleXMLElem;
+ NameProp: TJclSimpleXMLProp;
begin
if not Assigned(Project) then
raise EJclExpertException.CreateTrace(RsENoActiveProject);
@@ -871,17 +873,53 @@
FileName := Project.FileName;
FileExtension := ExtractFileExt(FileName);
+ if AnsiSameText(FileExtension, SourceExtensionDProject) and FileExists(FileName) then
+ begin
+ Result := False;
+ ProjectFile := TJclSimpleXML.Create;
+ try
+ ProjectFile.Options := ProjectFile.Options - [sxoAutoCreate];
+ ProjectFile.LoadFromFile(FileName);
+ ProjectExtensions := Proje...
[truncated message content] |
|
From: <ou...@us...> - 2007-03-19 00:01:55
|
Revision: 1950
http://svn.sourceforge.net/jcl/?rev=1950&view=rev
Author: outchy
Date: 2007-03-18 10:17:24 -0700 (Sun, 18 Mar 2007)
Log Message:
-----------
Preparing JCL 1.99 (with support for Delphi 2007)
Added Paths:
-----------
trunk/JCL_1.99/
Copied: trunk/JCL_1.99 (from rev 1947, trunk)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-03-19 00:01:53
|
Revision: 1952
http://svn.sourceforge.net/jcl/?rev=1952&view=rev
Author: outchy
Date: 2007-03-18 10:27:55 -0700 (Sun, 18 Mar 2007)
Log Message:
-----------
Copied to wrong location
Removed Paths:
-------------
trunk/JCL_1.99/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-03-18 23:59:30
|
Revision: 1956
http://svn.sourceforge.net/jcl/?rev=1956&view=rev
Author: outchy
Date: 2007-03-18 16:59:28 -0700 (Sun, 18 Mar 2007)
Log Message:
-----------
Tagging JCL 1.99 with fixed support for Kylix
Added Paths:
-----------
tags/JCL199-Build2551/
Copied: tags/JCL199-Build2551 (from rev 1955, branches/JCL_1.99)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-03-18 23:58:18
|
Revision: 1954
http://svn.sourceforge.net/jcl/?rev=1954&view=rev
Author: outchy
Date: 2007-03-18 16:28:50 -0700 (Sun, 18 Mar 2007)
Log Message:
-----------
tagging JCL 1.99 released on Delphi 2007 partner DVD.
Added Paths:
-----------
tags/JCL199-Build2551-Delphi2007-PartnerDVD/
Copied: tags/JCL199-Build2551-Delphi2007-PartnerDVD (from rev 1953, branches/JCL_1.99)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-03-18 23:58:18
|
Revision: 1955
http://svn.sourceforge.net/jcl/?rev=1955&view=rev
Author: outchy
Date: 2007-03-18 16:30:02 -0700 (Sun, 18 Mar 2007)
Log Message:
-----------
fixing support for Kylix
Modified Paths:
--------------
branches/JCL_1.99/jcl/packages/k3/Jcl.kof
branches/JCL_1.99/jcl/packages/k3/JclVClx.kof
branches/JCL_1.99/jcl/source/common/JclBorlandTools.pas
branches/JCL_1.99/jcl/source/common/JclSysUtils.pas
Modified: branches/JCL_1.99/jcl/packages/k3/Jcl.kof
===================================================================
--- branches/JCL_1.99/jcl/packages/k3/Jcl.kof 2007-03-18 23:28:50 UTC (rev 1954)
+++ branches/JCL_1.99/jcl/packages/k3/Jcl.kof 2007-03-18 23:30:02 UTC (rev 1955)
@@ -1,3 +1,4 @@
[Directories]
UnitOutputDir=../../lib/k3
SearchPath=../../source:../../source/common:../../source/visclx
+
Modified: branches/JCL_1.99/jcl/packages/k3/JclVClx.kof
===================================================================
--- branches/JCL_1.99/jcl/packages/k3/JclVClx.kof 2007-03-18 23:28:50 UTC (rev 1954)
+++ branches/JCL_1.99/jcl/packages/k3/JclVClx.kof 2007-03-18 23:30:02 UTC (rev 1955)
@@ -1,3 +1,4 @@
[Directories]
UnitOutputDir=../../lib/k3
SearchPath=../../source:../../source/common:../../source/visclx
+
Modified: branches/JCL_1.99/jcl/source/common/JclBorlandTools.pas
===================================================================
--- branches/JCL_1.99/jcl/source/common/JclBorlandTools.pas 2007-03-18 23:28:50 UTC (rev 1954)
+++ branches/JCL_1.99/jcl/source/common/JclBorlandTools.pas 2007-03-18 23:30:02 UTC (rev 1955)
@@ -1429,6 +1429,8 @@
Result := SameText(ExtractFileExt(FileName), SourceExtensionBCBProject);
end;
+{$IFDEF MSWINDOWS}
+
function LoadResStrings(const BaseBinName: string;
const ResId: array of Integer): string;
var
@@ -1479,7 +1481,6 @@
end;
end;
-{$IFDEF MSWINDOWS}
function RegGetValueNamesAndValues(const RootKey: HKEY; const Key: string; const List: TStrings): Boolean;
var
I: Integer;
@@ -3900,6 +3901,8 @@
FVersionNumber := 0;
end;
end;
+ FIDEVersionNumber := VersionNumber;
+
{$ELSE ~KYLIX}
RegGetValueNamesAndValues(HKEY_LOCAL_MACHINE, Key, Globals);
Modified: branches/JCL_1.99/jcl/source/common/JclSysUtils.pas
===================================================================
--- branches/JCL_1.99/jcl/source/common/JclSysUtils.pas 2007-03-18 23:28:50 UTC (rev 1954)
+++ branches/JCL_1.99/jcl/source/common/JclSysUtils.pas 2007-03-18 23:30:02 UTC (rev 1955)
@@ -501,10 +501,11 @@
end;
{$IFNDEF CLR}
+
type
TJclSimpleLog = class (TObject)
private
- FLogFileHandle: Integer;
+ FLogFileHandle: THandle;
FLogFileName: string;
FLogWasEmpty: Boolean;
function GetLogOpen: Boolean;
@@ -522,6 +523,7 @@
property LogFileName: string read FLogFileName;
property LogOpen: Boolean read GetLogOpen;
end;
+
{$ENDIF ~CLR}
{$IFDEF UNITVERSIONING}
@@ -3039,7 +3041,10 @@
//=== { TJclSimpleLog } ======================================================
-{$IFDEF MSWINDOWS}
+{$IFDEF LINUX}
+const
+ INVALID_HANDLE_VALUE = 0;
+{$ENDIF LINUX}
procedure TJclSimpleLog.ClearLog;
begin
@@ -3053,7 +3058,7 @@
if LogOpen then
begin
FileClose(FLogFileHandle);
- FLogFileHandle := Integer(INVALID_HANDLE_VALUE);
+ FLogFileHandle := INVALID_HANDLE_VALUE;
FLogWasEmpty := False;
end;
end;
@@ -3064,7 +3069,7 @@
FLogFileName := CreateDefaultFileName
else
FLogFileName := ALogFileName;
- FLogFileHandle := Integer(INVALID_HANDLE_VALUE);
+ FLogFileHandle := INVALID_HANDLE_VALUE;
end;
function TJclSimpleLog.CreateDefaultFileName: string;
@@ -3081,18 +3086,18 @@
function TJclSimpleLog.GetLogOpen: Boolean;
begin
- Result := (FLogFileHandle <> 0) and (FLogFileHandle <> Integer(INVALID_HANDLE_VALUE));
+ Result := FLogFileHandle <> INVALID_HANDLE_VALUE;
end;
procedure TJclSimpleLog.OpenLog;
begin
if not LogOpen then
begin
- FLogFileHandle := FileOpen(FLogFileName, fmShareDenyWrite or fmOpenReadWrite);
+ FLogFileHandle := FileOpen(FLogFileName, fmOpenWrite or fmShareDenyWrite);
if not LogOpen then
FLogFileHandle := FileCreate(FLogFileName);
if LogOpen then
- FLogWasEmpty := SetFilePointer(FLogFileHandle, 0, nil, FILE_END) = 0;
+ FLogWasEmpty := FileSeek(FLogFileHandle, 0, soFromEnd) = 0;
end
else
FLogWasEmpty := False;
@@ -3112,7 +3117,7 @@
for I := 0 to SL.Count - 1 do
begin
S := StringOfChar(' ', Indent) + StrEnsureSuffix(AnsiCrLf, TrimRight(SL[I]));
- FileWrite(FLogFileHandle, Pointer(S)^, Length(S));
+ FileWrite(Integer(FLogFileHandle), Pointer(S)^, Length(S));
end;
finally
SL.Free;
@@ -3140,7 +3145,6 @@
Write(StrRepeat('=', SeparatorLen));
end;
-{$ENDIF MSWINDOWS}
{$ENDIF ~CLR}
initialization
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-03-18 23:34:41
|
Revision: 1953
http://svn.sourceforge.net/jcl/?rev=1953&view=rev
Author: outchy
Date: 2007-03-18 10:48:59 -0700 (Sun, 18 Mar 2007)
Log Message:
-----------
Support for Delphi 2007
Preparing JCL 1.99 Build 2551
Modified Paths:
--------------
branches/JCL_1.99/jcl/Install.txt
branches/JCL_1.99/jcl/devtools/included_files.bat
branches/JCL_1.99/jcl/devtools/included_files.sh
branches/JCL_1.99/jcl/docs/Readme.html
branches/JCL_1.99/jcl/docs/Readme.txt
branches/JCL_1.99/jcl/experts/common/JclOtaUtils.pas
branches/JCL_1.99/jcl/experts/debug/converter/JclDebugIdeImpl.pas
branches/JCL_1.99/jcl/experts/projectanalyzer/ProjAnalyzerImpl.pas
branches/JCL_1.99/jcl/install/JclInstall.pas
branches/JCL_1.99/jcl/install/build/build.dpr
branches/JCL_1.99/jcl/install/build/build.exe
branches/JCL_1.99/jcl/packages/c5/JclBaseExpertC50.rc
branches/JCL_1.99/jcl/packages/c5/JclBaseExpertC50.res
branches/JCL_1.99/jcl/packages/c5/JclC50.rc
branches/JCL_1.99/jcl/packages/c5/JclC50.res
branches/JCL_1.99/jcl/packages/c5/JclDebugExpertC50.RES
branches/JCL_1.99/jcl/packages/c5/JclDebugExpertC50.rc
branches/JCL_1.99/jcl/packages/c5/JclDebugExpertDLLC50.rc
branches/JCL_1.99/jcl/packages/c5/JclDebugExpertDLLC50.res
branches/JCL_1.99/jcl/packages/c5/JclFavoriteFoldersExpertC50.rc
branches/JCL_1.99/jcl/packages/c5/JclFavoriteFoldersExpertC50.res
branches/JCL_1.99/jcl/packages/c5/JclFavoriteFoldersExpertDLLC50.rc
branches/JCL_1.99/jcl/packages/c5/JclFavoriteFoldersExpertDLLC50.res
branches/JCL_1.99/jcl/packages/c5/JclProjectAnalysisExpertC50.RES
branches/JCL_1.99/jcl/packages/c5/JclProjectAnalysisExpertC50.rc
branches/JCL_1.99/jcl/packages/c5/JclProjectAnalysisExpertDLLC50.rc
branches/JCL_1.99/jcl/packages/c5/JclProjectAnalysisExpertDLLC50.res
branches/JCL_1.99/jcl/packages/c5/JclRepositoryExpertC50.rc
branches/JCL_1.99/jcl/packages/c5/JclRepositoryExpertC50.res
branches/JCL_1.99/jcl/packages/c5/JclRepositoryExpertDLLC50.rc
branches/JCL_1.99/jcl/packages/c5/JclRepositoryExpertDLLC50.res
branches/JCL_1.99/jcl/packages/c5/JclSIMDViewExpertC50.rc
branches/JCL_1.99/jcl/packages/c5/JclSIMDViewExpertC50.res
branches/JCL_1.99/jcl/packages/c5/JclSIMDViewExpertDLLC50.rc
branches/JCL_1.99/jcl/packages/c5/JclSIMDViewExpertDLLC50.res
branches/JCL_1.99/jcl/packages/c5/JclThreadNameExpertC50.RES
branches/JCL_1.99/jcl/packages/c5/JclThreadNameExpertC50.rc
branches/JCL_1.99/jcl/packages/c5/JclThreadNameExpertDLLC50.rc
branches/JCL_1.99/jcl/packages/c5/JclThreadNameExpertDLLC50.res
branches/JCL_1.99/jcl/packages/c5/JclUsesExpertC50.RES
branches/JCL_1.99/jcl/packages/c5/JclUsesExpertC50.rc
branches/JCL_1.99/jcl/packages/c5/JclUsesExpertDLLC50.rc
branches/JCL_1.99/jcl/packages/c5/JclUsesExpertDLLC50.res
branches/JCL_1.99/jcl/packages/c5/JclVersionControlExpertC50.rc
branches/JCL_1.99/jcl/packages/c5/JclVersionControlExpertC50.res
branches/JCL_1.99/jcl/packages/c5/JclVersionControlExpertDLLC50.rc
branches/JCL_1.99/jcl/packages/c5/JclVersionControlExpertDLLC50.res
branches/JCL_1.99/jcl/packages/c6/Jcl.RES
branches/JCL_1.99/jcl/packages/c6/Jcl.rc
branches/JCL_1.99/jcl/packages/c6/JclBaseExpert.rc
branches/JCL_1.99/jcl/packages/c6/JclBaseExpert.res
branches/JCL_1.99/jcl/packages/c6/JclDebugExpert.RES
branches/JCL_1.99/jcl/packages/c6/JclDebugExpert.rc
branches/JCL_1.99/jcl/packages/c6/JclDebugExpertDLL.rc
branches/JCL_1.99/jcl/packages/c6/JclDebugExpertDLL.res
branches/JCL_1.99/jcl/packages/c6/JclFavoriteFoldersExpert.RES
branches/JCL_1.99/jcl/packages/c6/JclFavoriteFoldersExpert.rc
branches/JCL_1.99/jcl/packages/c6/JclFavoriteFoldersExpertDLL.rc
branches/JCL_1.99/jcl/packages/c6/JclFavoriteFoldersExpertDLL.res
branches/JCL_1.99/jcl/packages/c6/JclProjectAnalysisExpert.RES
branches/JCL_1.99/jcl/packages/c6/JclProjectAnalysisExpert.rc
branches/JCL_1.99/jcl/packages/c6/JclProjectAnalysisExpertDLL.rc
branches/JCL_1.99/jcl/packages/c6/JclProjectAnalysisExpertDLL.res
branches/JCL_1.99/jcl/packages/c6/JclRepositoryExpert.rc
branches/JCL_1.99/jcl/packages/c6/JclRepositoryExpert.res
branches/JCL_1.99/jcl/packages/c6/JclRepositoryExpertDLL.rc
branches/JCL_1.99/jcl/packages/c6/JclRepositoryExpertDLL.res
branches/JCL_1.99/jcl/packages/c6/JclSIMDViewExpert.rc
branches/JCL_1.99/jcl/packages/c6/JclSIMDViewExpert.res
branches/JCL_1.99/jcl/packages/c6/JclSIMDViewExpertDLL.rc
branches/JCL_1.99/jcl/packages/c6/JclSIMDViewExpertDLL.res
branches/JCL_1.99/jcl/packages/c6/JclThreadNameExpert.RES
branches/JCL_1.99/jcl/packages/c6/JclThreadNameExpert.rc
branches/JCL_1.99/jcl/packages/c6/JclThreadNameExpertDLL.rc
branches/JCL_1.99/jcl/packages/c6/JclThreadNameExpertDLL.res
branches/JCL_1.99/jcl/packages/c6/JclUsesExpert.RES
branches/JCL_1.99/jcl/packages/c6/JclUsesExpert.rc
branches/JCL_1.99/jcl/packages/c6/JclUsesExpertDLL.rc
branches/JCL_1.99/jcl/packages/c6/JclUsesExpertDLL.res
branches/JCL_1.99/jcl/packages/c6/JclVClx.RES
branches/JCL_1.99/jcl/packages/c6/JclVClx.rc
branches/JCL_1.99/jcl/packages/c6/JclVcl.RES
branches/JCL_1.99/jcl/packages/c6/JclVcl.rc
branches/JCL_1.99/jcl/packages/c6/JclVersionControlExpert.rc
branches/JCL_1.99/jcl/packages/c6/JclVersionControlExpert.res
branches/JCL_1.99/jcl/packages/c6/JclVersionControlExpertDLL.rc
branches/JCL_1.99/jcl/packages/c6/JclVersionControlExpertDLL.res
branches/JCL_1.99/jcl/packages/cs1/Jcl.RES
branches/JCL_1.99/jcl/packages/cs1/Jcl.bdsproj
branches/JCL_1.99/jcl/packages/cs1/Jcl.rc
branches/JCL_1.99/jcl/packages/cs1/JclBaseExpert.RES
branches/JCL_1.99/jcl/packages/cs1/JclBaseExpert.bdsproj
branches/JCL_1.99/jcl/packages/cs1/JclBaseExpert.rc
branches/JCL_1.99/jcl/packages/cs1/JclFavoriteFoldersExpertDLL.RES
branches/JCL_1.99/jcl/packages/cs1/JclFavoriteFoldersExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/cs1/JclFavoriteFoldersExpertDLL.rc
branches/JCL_1.99/jcl/packages/cs1/JclVersionControlExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/cs1/JclVersionControlExpertDLL.rc
branches/JCL_1.99/jcl/packages/cs1/JclVersionControlExpertDLL.res
branches/JCL_1.99/jcl/packages/d10/Jcl.bdsproj
branches/JCL_1.99/jcl/packages/d10/Jcl.rc
branches/JCL_1.99/jcl/packages/d10/Jcl.res
branches/JCL_1.99/jcl/packages/d10/JclBaseExpert.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclBaseExpert.rc
branches/JCL_1.99/jcl/packages/d10/JclBaseExpert.res
branches/JCL_1.99/jcl/packages/d10/JclDebugExpert.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclDebugExpert.rc
branches/JCL_1.99/jcl/packages/d10/JclDebugExpert.res
branches/JCL_1.99/jcl/packages/d10/JclDebugExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclDebugExpertDLL.rc
branches/JCL_1.99/jcl/packages/d10/JclDebugExpertDLL.res
branches/JCL_1.99/jcl/packages/d10/JclFavoriteFoldersExpert.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclFavoriteFoldersExpert.rc
branches/JCL_1.99/jcl/packages/d10/JclFavoriteFoldersExpert.res
branches/JCL_1.99/jcl/packages/d10/JclFavoriteFoldersExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclFavoriteFoldersExpertDLL.rc
branches/JCL_1.99/jcl/packages/d10/JclFavoriteFoldersExpertDLL.res
branches/JCL_1.99/jcl/packages/d10/JclProjectAnalysisExpert.RES
branches/JCL_1.99/jcl/packages/d10/JclProjectAnalysisExpert.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclProjectAnalysisExpert.rc
branches/JCL_1.99/jcl/packages/d10/JclProjectAnalysisExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclProjectAnalysisExpertDLL.rc
branches/JCL_1.99/jcl/packages/d10/JclProjectAnalysisExpertDLL.res
branches/JCL_1.99/jcl/packages/d10/JclRepositoryExpert.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclRepositoryExpert.rc
branches/JCL_1.99/jcl/packages/d10/JclRepositoryExpert.res
branches/JCL_1.99/jcl/packages/d10/JclRepositoryExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclRepositoryExpertDLL.rc
branches/JCL_1.99/jcl/packages/d10/JclRepositoryExpertDLL.res
branches/JCL_1.99/jcl/packages/d10/JclSIMDViewExpert.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclSIMDViewExpert.rc
branches/JCL_1.99/jcl/packages/d10/JclSIMDViewExpert.res
branches/JCL_1.99/jcl/packages/d10/JclSIMDViewExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclSIMDViewExpertDLL.rc
branches/JCL_1.99/jcl/packages/d10/JclSIMDViewExpertDLL.res
branches/JCL_1.99/jcl/packages/d10/JclThreadNameExpert.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclThreadNameExpert.rc
branches/JCL_1.99/jcl/packages/d10/JclThreadNameExpert.res
branches/JCL_1.99/jcl/packages/d10/JclThreadNameExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclThreadNameExpertDLL.rc
branches/JCL_1.99/jcl/packages/d10/JclThreadNameExpertDLL.res
branches/JCL_1.99/jcl/packages/d10/JclVcl.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclVcl.rc
branches/JCL_1.99/jcl/packages/d10/JclVcl.res
branches/JCL_1.99/jcl/packages/d10/JclVersionControlExpert.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclVersionControlExpert.rc
branches/JCL_1.99/jcl/packages/d10/JclVersionControlExpert.res
branches/JCL_1.99/jcl/packages/d10/JclVersionControlExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d10/JclVersionControlExpertDLL.rc
branches/JCL_1.99/jcl/packages/d10/JclVersionControlExpertDLL.res
branches/JCL_1.99/jcl/packages/d10.net/Jedi.Jcl.bdsproj
branches/JCL_1.99/jcl/packages/d5/JclBaseExpertD50.rc
branches/JCL_1.99/jcl/packages/d5/JclBaseExpertD50.res
branches/JCL_1.99/jcl/packages/d5/JclD50.RES
branches/JCL_1.99/jcl/packages/d5/JclD50.rc
branches/JCL_1.99/jcl/packages/d5/JclDebugExpertD50.RES
branches/JCL_1.99/jcl/packages/d5/JclDebugExpertD50.rc
branches/JCL_1.99/jcl/packages/d5/JclDebugExpertDLLD50.RES
branches/JCL_1.99/jcl/packages/d5/JclDebugExpertDLLD50.rc
branches/JCL_1.99/jcl/packages/d5/JclFavoriteFoldersExpertD50.RES
branches/JCL_1.99/jcl/packages/d5/JclFavoriteFoldersExpertD50.rc
branches/JCL_1.99/jcl/packages/d5/JclFavoriteFoldersExpertDLLD50.RES
branches/JCL_1.99/jcl/packages/d5/JclFavoriteFoldersExpertDLLD50.rc
branches/JCL_1.99/jcl/packages/d5/JclProjectAnalysisExpertD50.RES
branches/JCL_1.99/jcl/packages/d5/JclProjectAnalysisExpertD50.rc
branches/JCL_1.99/jcl/packages/d5/JclProjectAnalysisExpertDLLD50.RES
branches/JCL_1.99/jcl/packages/d5/JclProjectAnalysisExpertDLLD50.rc
branches/JCL_1.99/jcl/packages/d5/JclRepositoryExpertD50.rc
branches/JCL_1.99/jcl/packages/d5/JclRepositoryExpertD50.res
branches/JCL_1.99/jcl/packages/d5/JclRepositoryExpertDLLD50.rc
branches/JCL_1.99/jcl/packages/d5/JclRepositoryExpertDLLD50.res
branches/JCL_1.99/jcl/packages/d5/JclSIMDViewExpertD50.RES
branches/JCL_1.99/jcl/packages/d5/JclSIMDViewExpertD50.rc
branches/JCL_1.99/jcl/packages/d5/JclSIMDViewExpertDLLD50.RES
branches/JCL_1.99/jcl/packages/d5/JclSIMDViewExpertDLLD50.rc
branches/JCL_1.99/jcl/packages/d5/JclThreadNameExpertD50.RES
branches/JCL_1.99/jcl/packages/d5/JclThreadNameExpertD50.rc
branches/JCL_1.99/jcl/packages/d5/JclThreadNameExpertDLLD50.RES
branches/JCL_1.99/jcl/packages/d5/JclThreadNameExpertDLLD50.rc
branches/JCL_1.99/jcl/packages/d5/JclUsesExpertD50.RES
branches/JCL_1.99/jcl/packages/d5/JclUsesExpertD50.rc
branches/JCL_1.99/jcl/packages/d5/JclUsesExpertDLLD50.RES
branches/JCL_1.99/jcl/packages/d5/JclUsesExpertDLLD50.rc
branches/JCL_1.99/jcl/packages/d5/JclVersionControlExpertD50.rc
branches/JCL_1.99/jcl/packages/d5/JclVersionControlExpertD50.res
branches/JCL_1.99/jcl/packages/d5/JclVersionControlExpertDLLD50.rc
branches/JCL_1.99/jcl/packages/d5/JclVersionControlExpertDLLD50.res
branches/JCL_1.99/jcl/packages/d6/Jcl.rc
branches/JCL_1.99/jcl/packages/d6/Jcl.res
branches/JCL_1.99/jcl/packages/d6/JclBaseExpert.rc
branches/JCL_1.99/jcl/packages/d6/JclBaseExpert.res
branches/JCL_1.99/jcl/packages/d6/JclDebugExpert.rc
branches/JCL_1.99/jcl/packages/d6/JclDebugExpert.res
branches/JCL_1.99/jcl/packages/d6/JclDebugExpertDLL.RES
branches/JCL_1.99/jcl/packages/d6/JclDebugExpertDLL.rc
branches/JCL_1.99/jcl/packages/d6/JclFavoriteFoldersExpert.rc
branches/JCL_1.99/jcl/packages/d6/JclFavoriteFoldersExpert.res
branches/JCL_1.99/jcl/packages/d6/JclFavoriteFoldersExpertDLL.RES
branches/JCL_1.99/jcl/packages/d6/JclFavoriteFoldersExpertDLL.rc
branches/JCL_1.99/jcl/packages/d6/JclProjectAnalysisExpert.RES
branches/JCL_1.99/jcl/packages/d6/JclProjectAnalysisExpert.rc
branches/JCL_1.99/jcl/packages/d6/JclProjectAnalysisExpertDLL.RES
branches/JCL_1.99/jcl/packages/d6/JclProjectAnalysisExpertDLL.rc
branches/JCL_1.99/jcl/packages/d6/JclRepositoryExpert.rc
branches/JCL_1.99/jcl/packages/d6/JclRepositoryExpert.res
branches/JCL_1.99/jcl/packages/d6/JclRepositoryExpertDLL.rc
branches/JCL_1.99/jcl/packages/d6/JclRepositoryExpertDLL.res
branches/JCL_1.99/jcl/packages/d6/JclSIMDViewExpert.rc
branches/JCL_1.99/jcl/packages/d6/JclSIMDViewExpert.res
branches/JCL_1.99/jcl/packages/d6/JclSIMDViewExpertDLL.RES
branches/JCL_1.99/jcl/packages/d6/JclSIMDViewExpertDLL.rc
branches/JCL_1.99/jcl/packages/d6/JclThreadNameExpert.rc
branches/JCL_1.99/jcl/packages/d6/JclThreadNameExpert.res
branches/JCL_1.99/jcl/packages/d6/JclThreadNameExpertDLL.RES
branches/JCL_1.99/jcl/packages/d6/JclThreadNameExpertDLL.rc
branches/JCL_1.99/jcl/packages/d6/JclUsesExpert.rc
branches/JCL_1.99/jcl/packages/d6/JclUsesExpert.res
branches/JCL_1.99/jcl/packages/d6/JclUsesExpertDLL.RES
branches/JCL_1.99/jcl/packages/d6/JclUsesExpertDLL.rc
branches/JCL_1.99/jcl/packages/d6/JclVClx.rc
branches/JCL_1.99/jcl/packages/d6/JclVClx.res
branches/JCL_1.99/jcl/packages/d6/JclVcl.rc
branches/JCL_1.99/jcl/packages/d6/JclVcl.res
branches/JCL_1.99/jcl/packages/d6/JclVersionControlExpert.rc
branches/JCL_1.99/jcl/packages/d6/JclVersionControlExpert.res
branches/JCL_1.99/jcl/packages/d6/JclVersionControlExpertDLL.rc
branches/JCL_1.99/jcl/packages/d6/JclVersionControlExpertDLL.res
branches/JCL_1.99/jcl/packages/d7/Jcl.rc
branches/JCL_1.99/jcl/packages/d7/Jcl.res
branches/JCL_1.99/jcl/packages/d7/JclBaseExpert.rc
branches/JCL_1.99/jcl/packages/d7/JclBaseExpert.res
branches/JCL_1.99/jcl/packages/d7/JclDebugExpert.rc
branches/JCL_1.99/jcl/packages/d7/JclDebugExpert.res
branches/JCL_1.99/jcl/packages/d7/JclDebugExpertDLL.RES
branches/JCL_1.99/jcl/packages/d7/JclDebugExpertDLL.rc
branches/JCL_1.99/jcl/packages/d7/JclFavoriteFoldersExpert.rc
branches/JCL_1.99/jcl/packages/d7/JclFavoriteFoldersExpert.res
branches/JCL_1.99/jcl/packages/d7/JclFavoriteFoldersExpertDLL.RES
branches/JCL_1.99/jcl/packages/d7/JclFavoriteFoldersExpertDLL.rc
branches/JCL_1.99/jcl/packages/d7/JclProjectAnalysisExpert.RES
branches/JCL_1.99/jcl/packages/d7/JclProjectAnalysisExpert.rc
branches/JCL_1.99/jcl/packages/d7/JclProjectAnalysisExpertDLL.RES
branches/JCL_1.99/jcl/packages/d7/JclProjectAnalysisExpertDLL.rc
branches/JCL_1.99/jcl/packages/d7/JclRepositoryExpert.rc
branches/JCL_1.99/jcl/packages/d7/JclRepositoryExpert.res
branches/JCL_1.99/jcl/packages/d7/JclRepositoryExpertDLL.rc
branches/JCL_1.99/jcl/packages/d7/JclRepositoryExpertDLL.res
branches/JCL_1.99/jcl/packages/d7/JclSIMDViewExpert.rc
branches/JCL_1.99/jcl/packages/d7/JclSIMDViewExpert.res
branches/JCL_1.99/jcl/packages/d7/JclSIMDViewExpertDLL.RES
branches/JCL_1.99/jcl/packages/d7/JclSIMDViewExpertDLL.rc
branches/JCL_1.99/jcl/packages/d7/JclThreadNameExpert.rc
branches/JCL_1.99/jcl/packages/d7/JclThreadNameExpert.res
branches/JCL_1.99/jcl/packages/d7/JclThreadNameExpertDLL.RES
branches/JCL_1.99/jcl/packages/d7/JclThreadNameExpertDLL.rc
branches/JCL_1.99/jcl/packages/d7/JclUsesExpert.rc
branches/JCL_1.99/jcl/packages/d7/JclUsesExpert.res
branches/JCL_1.99/jcl/packages/d7/JclUsesExpertDLL.RES
branches/JCL_1.99/jcl/packages/d7/JclUsesExpertDLL.rc
branches/JCL_1.99/jcl/packages/d7/JclVClx.rc
branches/JCL_1.99/jcl/packages/d7/JclVClx.res
branches/JCL_1.99/jcl/packages/d7/JclVcl.rc
branches/JCL_1.99/jcl/packages/d7/JclVcl.res
branches/JCL_1.99/jcl/packages/d7/JclVersionControlExpert.rc
branches/JCL_1.99/jcl/packages/d7/JclVersionControlExpert.res
branches/JCL_1.99/jcl/packages/d7/JclVersionControlExpertDLL.rc
branches/JCL_1.99/jcl/packages/d7/JclVersionControlExpertDLL.res
branches/JCL_1.99/jcl/packages/d8/Jcl.RES
branches/JCL_1.99/jcl/packages/d8/Jcl.bdsproj
branches/JCL_1.99/jcl/packages/d8/Jcl.rc
branches/JCL_1.99/jcl/packages/d8/JclBaseExpert.RES
branches/JCL_1.99/jcl/packages/d8/JclBaseExpert.bdsproj
branches/JCL_1.99/jcl/packages/d8/JclBaseExpert.rc
branches/JCL_1.99/jcl/packages/d8/JclFavoriteFoldersExpertDLL.RES
branches/JCL_1.99/jcl/packages/d8/JclFavoriteFoldersExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d8/JclFavoriteFoldersExpertDLL.rc
branches/JCL_1.99/jcl/packages/d8/JclVersionControlExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d8/JclVersionControlExpertDLL.rc
branches/JCL_1.99/jcl/packages/d8/JclVersionControlExpertDLL.res
branches/JCL_1.99/jcl/packages/d9/Jcl.RES
branches/JCL_1.99/jcl/packages/d9/Jcl.bdsproj
branches/JCL_1.99/jcl/packages/d9/Jcl.rc
branches/JCL_1.99/jcl/packages/d9/JclBaseExpert.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclBaseExpert.rc
branches/JCL_1.99/jcl/packages/d9/JclBaseExpert.res
branches/JCL_1.99/jcl/packages/d9/JclDebugExpert.RES
branches/JCL_1.99/jcl/packages/d9/JclDebugExpert.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclDebugExpert.rc
branches/JCL_1.99/jcl/packages/d9/JclDebugExpertDLL.RES
branches/JCL_1.99/jcl/packages/d9/JclDebugExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclDebugExpertDLL.rc
branches/JCL_1.99/jcl/packages/d9/JclFavoriteFoldersExpert.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclFavoriteFoldersExpert.rc
branches/JCL_1.99/jcl/packages/d9/JclFavoriteFoldersExpert.res
branches/JCL_1.99/jcl/packages/d9/JclFavoriteFoldersExpertDLL.RES
branches/JCL_1.99/jcl/packages/d9/JclFavoriteFoldersExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclFavoriteFoldersExpertDLL.rc
branches/JCL_1.99/jcl/packages/d9/JclProjectAnalysisExpert.RES
branches/JCL_1.99/jcl/packages/d9/JclProjectAnalysisExpert.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclProjectAnalysisExpert.rc
branches/JCL_1.99/jcl/packages/d9/JclProjectAnalysisExpertDLL.RES
branches/JCL_1.99/jcl/packages/d9/JclProjectAnalysisExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclProjectAnalysisExpertDLL.rc
branches/JCL_1.99/jcl/packages/d9/JclRepositoryExpert.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclRepositoryExpert.rc
branches/JCL_1.99/jcl/packages/d9/JclRepositoryExpert.res
branches/JCL_1.99/jcl/packages/d9/JclRepositoryExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclRepositoryExpertDLL.rc
branches/JCL_1.99/jcl/packages/d9/JclRepositoryExpertDLL.res
branches/JCL_1.99/jcl/packages/d9/JclSIMDViewExpert.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclSIMDViewExpert.rc
branches/JCL_1.99/jcl/packages/d9/JclSIMDViewExpertDLL.RES
branches/JCL_1.99/jcl/packages/d9/JclSIMDViewExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclSIMDViewExpertDLL.rc
branches/JCL_1.99/jcl/packages/d9/JclSimdViewExpert.RES
branches/JCL_1.99/jcl/packages/d9/JclThreadNameExpert.RES
branches/JCL_1.99/jcl/packages/d9/JclThreadNameExpert.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclThreadNameExpert.rc
branches/JCL_1.99/jcl/packages/d9/JclThreadNameExpertDLL.RES
branches/JCL_1.99/jcl/packages/d9/JclThreadNameExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclThreadNameExpertDLL.rc
branches/JCL_1.99/jcl/packages/d9/JclVcl.RES
branches/JCL_1.99/jcl/packages/d9/JclVcl.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclVcl.rc
branches/JCL_1.99/jcl/packages/d9/JclVersionControlExpert.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclVersionControlExpert.rc
branches/JCL_1.99/jcl/packages/d9/JclVersionControlExpert.res
branches/JCL_1.99/jcl/packages/d9/JclVersionControlExpertDLL.bdsproj
branches/JCL_1.99/jcl/packages/d9/JclVersionControlExpertDLL.rc
branches/JCL_1.99/jcl/packages/d9/JclVersionControlExpertDLL.res
branches/JCL_1.99/jcl/packages/d9.net/Jedi.Jcl.bdsproj
branches/JCL_1.99/jcl/packages/k3/Jcl.bpk
branches/JCL_1.99/jcl/packages/k3/Jcl.dpk
branches/JCL_1.99/jcl/packages/k3/Jcl.rc
branches/JCL_1.99/jcl/packages/k3/Jcl.res
branches/JCL_1.99/jcl/packages/k3/JclVClx.bpk
branches/JCL_1.99/jcl/packages/k3/JclVClx.dpk
branches/JCL_1.99/jcl/packages/k3/JclVClx.rc
branches/JCL_1.99/jcl/packages/k3/JclVClx.res
branches/JCL_1.99/jcl/packages/xml/Jcl-L.xml
branches/JCL_1.99/jcl/packages/xml/Jcl-R.xml
branches/JCL_1.99/jcl/packages/xml/JclBaseExpert-D.xml
branches/JCL_1.99/jcl/packages/xml/JclDebugExpert-D.xml
branches/JCL_1.99/jcl/packages/xml/JclDebugExpertDLL-L.xml
branches/JCL_1.99/jcl/packages/xml/JclFavoriteFoldersExpert-D.xml
branches/JCL_1.99/jcl/packages/xml/JclFavoriteFoldersExpertDLL-L.xml
branches/JCL_1.99/jcl/packages/xml/JclProjectAnalysisExpert-D.xml
branches/JCL_1.99/jcl/packages/xml/JclProjectAnalysisExpertDLL-L.xml
branches/JCL_1.99/jcl/packages/xml/JclRepositoryExpert-D.xml
branches/JCL_1.99/jcl/packages/xml/JclRepositoryExpertDLL-L.xml
branches/JCL_1.99/jcl/packages/xml/JclSIMDViewExpert-D.xml
branches/JCL_1.99/jcl/packages/xml/JclSIMDViewExpertDLL-L.xml
branches/JCL_1.99/jcl/packages/xml/JclThreadNameExpert-D.xml
branches/JCL_1.99/jcl/packages/xml/JclThreadNameExpertDLL-L.xml
branches/JCL_1.99/jcl/packages/xml/JclUsesExpert-D.xml
branches/JCL_1.99/jcl/packages/xml/JclUsesExpertDLL-L.xml
branches/JCL_1.99/jcl/packages/xml/JclVClx-R.xml
branches/JCL_1.99/jcl/packages/xml/JclVcl-R.xml
branches/JCL_1.99/jcl/packages/xml/JclVersionControlExpert-D.xml
branches/JCL_1.99/jcl/packages/xml/JclVersionControlExpertDLL-L.xml
branches/JCL_1.99/jcl/source/common/JclBase.pas
branches/JCL_1.99/jcl/source/common/JclBorlandTools.pas
branches/JCL_1.99/jcl/source/common/JclResources.pas
branches/JCL_1.99/jcl/source/common/JclSysInfo.pas
branches/JCL_1.99/jcl/source/jcl.inc
branches/JCL_1.99/jcl/source/jedi.inc
Property Changed:
----------------
branches/JCL_1.99/jcl/source/
Modified: branches/JCL_1.99/jcl/Install.txt
===================================================================
--- branches/JCL_1.99/jcl/Install.txt 2007-03-18 17:27:55 UTC (rev 1952)
+++ branches/JCL_1.99/jcl/Install.txt 2007-03-18 17:48:59 UTC (rev 1953)
@@ -10,6 +10,7 @@
- Borland Kylix 3
- Borland Delphi 2005
- Borland Developer Studio 2006 (also known as Delphi 2006, C++Builder 2006)
+- CodeGear Delphi 2007
For more detailed information, see docs\Readme.html.
@@ -67,4 +68,4 @@
Kylix 3 installation) in case your system is not set up to do that at startup.
--------------------------------
-Document last updated 2005-10-30
+Document last updated 2007-02-20
Modified: branches/JCL_1.99/jcl/devtools/included_files.bat
===================================================================
--- branches/JCL_1.99/jcl/devtools/included_files.bat 2007-03-18 17:27:55 UTC (rev 1952)
+++ branches/JCL_1.99/jcl/devtools/included_files.bat 2007-03-18 17:48:59 UTC (rev 1953)
@@ -13,3 +13,4 @@
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
+copy ..\source\jcl.template.inc ..\source\jcld11.inc
\ No newline at end of file
Modified: branches/JCL_1.99/jcl/devtools/included_files.sh
===================================================================
--- branches/JCL_1.99/jcl/devtools/included_files.sh 2007-03-18 17:27:55 UTC (rev 1952)
+++ branches/JCL_1.99/jcl/devtools/included_files.sh 2007-03-18 17:48:59 UTC (rev 1953)
@@ -15,3 +15,4 @@
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
+cp ../source/jcl.template.inc ../source/jcld11.inc
\ No newline at end of file
Modified: branches/JCL_1.99/jcl/docs/Readme.html
===================================================================
--- branches/JCL_1.99/jcl/docs/Readme.html 2007-03-18 17:27:55 UTC (rev 1952)
+++ branches/JCL_1.99/jcl/docs/Readme.html 2007-03-18 17:48:59 UTC (rev 1953)
@@ -9,9 +9,9 @@
<body>
<hr><br>
<h1>Jedi Code Library</h1>
-<p>Release 1.98<br>
-Build 2509<br>
-13-January-2007</p>
+<p>Release 1.99<br>
+Build 2551
+24-Februray-2007</p>
<hr><br>
<h3>Content of this file</h3>
<ul>
@@ -28,23 +28,28 @@
</ul>
<hr><br>
<h3><a name="about">About this release</a></h3>
-<p>JCL release 1.98 provide an updated support for all targets (including Borland
-Developer Studio 2006 and Turbo Delphi) and an installation of some experts in C#Builder 1 and Delphi 8.</p>
-<p>As always, multiple bugs have been fixed; for detailed change logs,
+<p>JCL release 1.99 provide an updated support for all targets (including CodeGear Delphi 2007 for Win32).</p>
+<p>As always, multiple bugs have been fixed; for detailed change logs,
use the facilities of our Subversion repository at Sourceforge.net
<a href="http://sourceforge.net/projects/jcl/">http://sourceforge.net/projects/jcl/</a>
, see below.</p>
<p><span style="FONT-WEIGHT: bold">Head changes:</span>
</p>
<ul>
- <li>Integration of the JCL help into the help system of Delphi 2005, BDS 2006 and Turbo Delphi.</li>
+ <li>JclPeImage is significantly updated: it now supports 64-bit applications and libraries.
+</li>
+ <li>JclDebug is significantly updated: .jdbg files contain informations about all segments of code. A new option was added to limit exception handling to the main thread of the application.
+</li>
+ <li>PCRE (http://www.pcre.org/) updated to version 7.0. PCRE code can be included in the application not requiring "pcre.dll" anymore (experimental - read the comments at the beginning of source\common\pcre.pas for details and modifications to enable this feature).
+</li>
+ <li>JclMail : different file names can be specified for attachements
+</li>
<li>Collection of stream classes to make basic operations easier (getting random data, multiplexing several streams,
- buffering an other stream, being notifyed on changes, reading common data types, scoping a stream, delegating read/write/seek operations.</li>
- <li>Speed-up of the stack analysis of JclDebug: exception driven execution will not be slowed by activating JclDebug in the application.</li>
- <li>ZLIB (http://www.zlib.net/) updated to 1.2.3 (fixes a major issue while deflating corrupted data).</li>
- <li>PCRE (http://www.pcre.org/) updated to version 6.7.</li>
- <li>Unicode support updated to 4.1.0.</li>
- <li>New IDE expert to have subversion (http://subversion.tigris.org/) and cvs (http://www.cvsnt.org/) commands integrated in all support IDE.</li>
+ buffering an other stream, being notifyed on changes, reading common data types, scoping a stream, delegating read/write/seek operations.
+</li>
+ <li>Integration of the JCL help into the help system of Delphi 2005, BDS 2006, Turbo Delphi and Delphi 2007 for Win32.
+</li>
+ <li>New IDE expert to have TortoiseSVN (<a href="http://tortoisesvn.tigris.org/">http://tortoisesvn.tigris.org/</a>) and TortoiseCVS (<a href="http://tortoisecvs.sourceforge.net/">http://tortoisecvs.sourceforge.net/</a>) commands integrated in all supportted IDE.</li>
</ul>
<p><span style="FONT-WEIGHT: bold">Important:</span>
</p>
@@ -55,26 +60,26 @@
is added for each target to the BPL file name (for BDS 2006, the library file is named jcl100.bpl).
The installer tries to remove old packages. 3rd party packages requiring old DJcl* resp. CJcl* packages need to be changed
to accomodate the new naming scheme or they will cause conflicts in the IDE at load time.</p></li>
- <li><p>DCP files are now created in the lib\target subdirectory of the JCL
-installation. 3rd party packages requiring JCL packages need to have this path
+ <li><p>DCP files are now created in the lib\target subdirectory of the JCL
+installation. 3rd party packages requiring JCL packages need to have this path
in their "browse path" option to compile.</p></li>
</ul>
<p><span style="FONT-WEIGHT: bold">(Windows only) Installation options:</span></p>
-<p>Packages compiled by the JCL installer don't contain any debug
+<p>Packages compiled by the JCL installer don't contain any debug
informations to keep their size as small as possible.</p>
-<p>The Jedi Code Library packages are required by some 3rd party packages
-(including the Jedi Visual Component Library - JVCL), the installer generates
+<p>The Jedi Code Library packages are required by some 3rd party packages
+(including the Jedi Visual Component Library - JVCL), the installer generates
them if the "Packages" node is checked.</p>
-<p>The installer can generate MAP informations for each package. These informations
-can be linked into binaries to become JCL debug data or be converted to .jdbg files.
+<p>The installer can generate MAP informations for each package. These informations
+can be linked into binaries to become JCL debug data or be converted to .jdbg files.
Once linked MAP files could be deleted. These options are subnodes of the "Packages" node.</p>
-<p>For BDS 2006, the compiler introduced a new option to make the same packages available in C++,
-by checking the "Dual packages" option of the "Packages" node, you will be able to call functions
+<p>For BDS 2006, the compiler introduced a new option to make the same packages available in C++,
+by checking the "Dual packages" option of the "Packages" node, you will be able to call functions
of the JCL from C++ code.</p>
<p><span style="FONT-WEIGHT: bold">.net Framework support:</span></p>
-<p>A subset of JCL units was worked over to support Delphi.Net (Delphi 2005
-& BDS 2006). The packages belong to the Jedi.Jcl namespace. The installer can generate these
-packages for Delphi 2005 and BDS 2006, it displays an other tab to configure options and directory.
+<p>A subset of JCL units was worked over to support Delphi.Net (Delphi 2005
+& BDS 2006). The packages belong to the Jedi.Jcl namespace. The installer can generate these
+packages for Delphi 2005 and BDS 2006, it displays an other tab to configure options and directory.
The installation process is similar to the native targets.</p>
<hr><br>
<h3><a name="targets">Supported Tools</a></h3>
@@ -86,95 +91,116 @@
<p><span style="FONT-WEIGHT: bold">Only design-time support (only experts):</span></p>
<ul>
- <li>C#Builder 1 (cf <a href="#notes">Installation notes</a>).</li>
+ <li>C#Builder 1 (cf <a href="#notes">Installation notes</a>).
+</li>
<li>Delphi 8.net (cf <a href="#notes">Installation notes</a>).</li>
</ul>
<p><span style="FONT-WEIGHT: bold">Both supports (run time and design time):</span></p>
<ul>
- <li>Delphi version 5, 6, 7.</li>
- <li>C++Builder version 5 & 6.</li>
- <li>Delphi 2005 (Delphi Win32 and Delphi.net personalities).</li>
- <li>Borland Developer Studio 2006 (Delphi Win32, C++ Builder Win32, Delphi.net and C#Builder personalities).</li>
- <li>Turbo Delphi (explorer and professional - cf <a href="#notes">Installation notes</a>).</li>
+ <li>Delphi version 5, 6, 7.
+</li>
+ <li>C++Builder version 5 & 6.
+</li>
+ <li>Delphi 2005 (Delphi Win32 and Delphi.net personalities).
+</li>
+ <li>Borland Developer Studio 2006 (Delphi Win32, C++ Builder Win32, Delphi.net and C#Builder personalities).
+</li>
+ <li>Turbo Delphi (explorer and professional - cf <a href="#notes">Installation notes</a>).
+</li>
+ <li>CodeGear Delphi 2007 for Win32.</li>
</ul>
<hr><br>
<h3><a name="notes">Installation notes</a></h3>
<ul>
<li>Not every unit supports all tools. Look out for <tt>*.exc</tt>
- files in the tool-specific <tt>lib/</tt>subdirectories for a list of units
- excluded from compilation.</li>
+ files in the tool-specific <tt>lib/</tt>subdirectories for a list of units
+ excluded from compilation.
+</li>
<li>Kylix 3 Delphi/C++ installation is back but specific code has not been tested with the latest
- versions of the kernel. Please ensure you use the flavor of the JCL with Unix EOL.</li>
- <li>Free Pascal (<a href="http://www.freepascal.org/">http://www.freepascal.org/</a>)
+ versions of the kernel. Please ensure you use the flavor of the JCL with Unix EOL.
+</li>
+ <li>Free Pascal (<a href="http://www.freepascal.org/">http://www.freepascal.org/</a>)
support has not been updated for this release; most units from
source/common should work with FP 2.0, as tests with a 2.0 beta (1.9.8)
indicated, but this has not been verified. Note that there are no plans
- to support FP versions from the 1.0 branch.</li>
+ to support FP versions from the 1.0 branch.</li>
</ul>
<p><span style="FONT-WEIGHT: bold">Installation for Turbo Delphi</span></p>
-<p>The Jedi Code Library can be compiled targetting Turbo Delphi Explorer and Turbo Delphi Professional.
-Turbo Delphi Professional is recognized as BDS 2006, you have to download its command line compiler from
-CodeGear website at <a href="http://www.codegear.com/Default.aspx?tabid=160">http://www.codegear.com/Default.aspx?tabid=160</a>
+<p>The Jedi Code Library can be compiled targetting Turbo Delphi Explorer and Turbo Delphi Professional.
+Turbo Delphi Professional is recognized as BDS 2006, you have to download its command line compiler from
+CodeGear website at <a href="http://www.codegear.com/Default.aspx?tabid=160">http://www.codegear.com/Default.aspx?tabid=160</a>
to install the full JCL on this tool.</p>
<p>To install the JCL targetting Turbo Delphi Explorer, consider the following checks:</p>
<ul>
<li>If you have an other supported version of Delphi/C++Builder on this computer, it should automatically be
- detected and the installer will process as usual.</li>
+ detected and the installer will process as usual.
+</li>
<li>If you only have Turbo Delphi Explorer (and no other tools) on the computer, the installer cannot be
compiled. You have to use the Turbo Explorer flavor of the JCL that contains a precompiled installer. However,
- you will not be able to install any experts.</li>
+ you will not be able to install any experts.</li>
</ul>
<p><span style="FONT-WEIGHT: bold">Installation on C#Builder 1 and Delphi 8:</span></p>
<ul>
<li>These products cannot be used to build the JCL installer, you need an
- other supported product to install JCL experts on these products.</li>
+ other supported product to install JCL experts on these products.
+</li>
<li>These products are not able to use the JCL library as a runtime library.
- You cannot write managed applications and managed packages based on the JCL.</li>
+ You cannot write managed applications and managed packages based on the JCL.
+</li>
<li>These products are not shipped with their native compilers, you have to
- download it from codecentral (<a href="http://cc.codegear.com/">http://cc.codegear.com/</a>).
- The item (<a href="http://codecentral.codegear.com/Download.aspx?id=21333">http://codecentral.codegear.com/Download.aspx?id=21333</a>)
+ download it from codecentral (<a href="http://cc.codegear.com/">http://cc.codegear.com/</a>).
+ The item (<a href="http://codecentral.codegear.com/Download.aspx?id=21333">http://codecentral.codegear.com/Download.aspx?id=21333</a>)
contains the native compiler to be installed in Delphi 8.
- The item (<a href="http://codecentral.codegear.com/Download.aspx?id=21334">http://codecentral.codegear.com/Download.aspx?id=21334</a>)
+ The item (<a href="http://codecentral.codegear.com/Download.aspx?id=21334">http://codecentral.codegear.com/Download.aspx?id=21334</a>)
contains the native compiler to be installed in C#Builder 1.
- These zip files have to be extracted in the products directory using the standard pattern:</li>
+ These zip files have to be extracted in the products directory using the standard pattern:</li>
</ul>
<pre> Executable files (exe and dll) - BDS\X.0\bin
Compiler files (dcp and dcu) - BDS\X.0\lib
Toolsapi source files - BDS\X.0\source\ToolsAPI
</pre>
<p><span style="FONT-WEIGHT: bold">Default installation</span></p>
-<p>For all others versions of Delphi, C++Builder and BDS, simply launch Install.bat
+<p>For all others versions of Delphi, C++Builder and BDS, simply launch Install.bat
and the installer window will let you configure options and install the library.</p>
<hr><br>
<h3><a name="manual">Manual Installation</a></h3>
-<p>Although it is not recommended, a manual installation is possible. You will have
-to manually configure options for the library. That is done by modifying an included
+<p>Although it is not recommended, a manual installation is possible. You will have
+to manually configure options for the library. That is done by modifying an included
file.
<p>
<p>For each tool you want to install the JCL in, repeat the following steps:</p>
<ol>
- <li>Copy source\jcl.template.inc to a fixed file name:
- <ul>
- <li>For Kylix 3 (Delphi): source\jclkd3.inc</li>
- <li>For Kylix 3 (C++Builder): source\jclkc3.inc</li>
- <li>For C++Builder 5: source\jclc5.inc</li>
- <li>For C++Builder 6: source\jclc6.inc</li>
- <li>For Delphi 5: source\jcld5.inc</li>
- <li>For Delphi 6: source\jcld6.inc</li>
- <li>For Delphi 7: source\jcld7.inc</li>
- <li>For Delphi 2005: source\jcld9.inc</li>
- <li>For Delphi.net 2005: source\jcld9.net.inc</li>
- <li>For BDS 2006 (Delphi and C++Builder): source\jcld10.inc</li>
+ <li>Open and edit included file to customize options:</li><ul>
+ <li>For Kylix 3 (Delphi): source\jclkd3.inc
+</li>
+ <li>For Kylix 3 (C++Builder): source\jclkc3.inc
+</li>
+ <li>For C++Builder 5: source\jclc5.inc
+</li>
+ <li>For C++Builder 6: source\jclc6.inc
+</li>
+ <li>For Delphi 5: source\jcld5.inc
+</li>
+ <li>For Delphi 6: source\jcld6.inc
+</li>
+ <li>For Delphi 7: source\jcld7.inc
+</li>
+ <li>For Delphi 2005: source\jcld9.inc
+</li>
+ <li>For Delphi.net 2005: source\jcld9.net.inc
+</li>
+ <li>For BDS 2006 (Delphi and C++Builder) and CodeGear Delphi 2007 for Win32 : source\jcld10.inc
+</li>
<li>For Delphi.net 2006: source\jcld10.net.inc</li>
- </ul></li>
- <li>Open and edit that file to customize options.</li>
+ </ul>
<li>In the IDE, open and compile package Jcl.dpk (or Jcl.bpk for C++Builder)
located in a subdirectory of the "packages" directory matching your version of
the IDE. This package doesn't have to be installed since it doesn't provide
- any components.</li>
- <li>If you want to install experts, open package JclBaseExpert.dpk and compile it,
+ any components.
+</li>
+ <li>If you want to install experts, open package JclBaseExpert.dpk and compile it,
then you can install all the experts you want (packages are located in the same
- directory).</li>
+ directory).</li>
</ol>
<hr><br>
<h3><a name="files">Distribution content</a></h3>
@@ -215,65 +241,70 @@
drop us a note. There are several ways to get in contact with us:
<ul>
<li>Newsgroup is the recommended way to contact other JCL users and the team itself.
-They are hosted at <a href="news://forums.talkto.net/jedi.jcl">news://forums.talkto.net/jedi.jcl</a>.</li>
- <li>Write to <a href="mailto:jc...@de...">jc...@de...</a>
-or to <a href="mailto:jcl...@de...">jcl...@de...</a>
-This email account should not be used for support requests. If you need
-support please use either the newsgroups or the mailing list.</li>
- <li>If you want to keep up to date about JCL then you can join the
+They are hosted at <a href="news://forums.talkto.net/jedi.jcl">news://forums.talkto.net/jedi.jcl</a>.
+</li>
+ <li>Write to <a href="mailto:jc...@de...">jc...@de...</a>
+or to <a href="mailto:jcl...@de...">jcl...@de...</a>
+This email account should not be used for support requests. If you need
+support please use either the newsgroups or the mailing list.
+</li>
+ <li>If you want to keep up to date about JCL then you can join the
JCL mailing list by going to <a href="http://tech.groups.yahoo.com/group/JEDI-JCL/">http://tech.groups.yahoo.com/group/JEDI-JCL/</a>
You can also use this list to voice your opinion, comments or suggestions.</li>
</ul>
<hr>
<h3><a name="issues">Reporting bugs</a></h3>
-<p>The general rule is: <b><font color="#ff0000">If you want to get a
+<p>The general rule is: <b><font color="#ff0000">If you want to get a
bug fixed you need to log it!</font></b></p>
<p>An issue tracking tool can be accessed via ('Code Library' category):
<a href="http://homepages.codegear.com/jedi/issuetracker/">http://homepages.codegear.com/jedi/issuetracker/</a></p>
<p>Please be aware that you are allowed there to enter feature request and code donations as well.</p>
-<p>The JEDI issue tracker is based up on the Mantis BugTracker Open
+<p>The JEDI issue tracker is based up on the Mantis BugTracker Open
Source project. More background information about it is available on its homepage
<a href="http://mantisbt.sourceforge.net/">http://mantisbt.sourceforge.net</a></p>
<hr><br>
<h3><a name="releases">Downloads of stable sources</a></h3>
-<p>These sources are official JCL releases and file status can be considered as
-stable for use in final applications. During the past years, there have been around 2
+<p>These sources are official JCL releases and file status can be considered as
+stable for use in final applications. During the past years, there have been around 2
or 3 releases per year.</p>
<p>Jedi Code Library: File List on SourceForge:
<a href="http://sourceforge.net/project/showfiles.php?group_id=47514">http://sourceforge.net/project/showfiles.php?group_id=47514</a>
</p>
<hr><br>
<h3><a name="development">Development sources</a></h3>
-<p>These files are under active development and may cause some incompatibilities
-and some conflicts with existing code. You should not use these files in final
-applications. The JCL development team provides these files for testing and
+<p>These files are under active development and may cause some incompatibilities
+and some conflicts with existing code. You should not use these files in final
+applications. The JCL development team provides these files for testing and
feedback from users.</p>
-<p>You can download snapshots of the Subversion repository updated every day in the JCL daily page
+<p>You can download snapshots of the Subversion repository updated every day in the JCL daily page
<a href="http://jcl.sourceforge.net/daily/">http://jcl.sourceforge.net/daily/</a></p>
-<p>To always have access to the most recent changes in the JCL, you
+<p>To always have access to the most recent changes in the JCL, you
should install a Subversion client (we recommend TortoiseSVN <a href="http://tortoisesvn.tigris.org/">http://tortoisesvn.tigris.org/</a>
-and RapidSVN <a href="http://rapidsvn.tigris.org/">http://rapidsvn.tigris.org/</a>) and download the
-SVN repository files to your computer as explained in the repository page of the JEDI Wiki at
-<a href="http://homepages.codegear.com/jedi/wiki/index.php?title=Repository">http://homepages.codegear.com/jedi/wiki/index.php?title=Repository</a>
-With the SVN client, you can update your local repository at any time.
+and RapidSVN <a href="http://rapidsvn.tigris.org/">http://rapidsvn.tigris.org/</a>) and download the
+SVN repository files to your computer as explained in the repository page of the JEDI Wiki at
+<a href="http://homepages.codegear.com/jedi/wiki/index.php?title=Repository">http://homepages.codegear.com/jedi/wiki/index.php?title=Repository</a>
+With the SVN client, you can update your local repository at any time.
You can also view the repository online via the web interface at <a href="http://jcl.svn.sourceforge.net/">http://jcl.svn.sourceforge.net/</a></p>
<hr><br>
<h3><a name="contribute">Getting involved in JCL development</a></h3>
-If you want to help out making JCL better or bigger or just plain
-cooler, there are several ways in which you can help out. Here are some of the
+If you want to help out making JCL better or bigger or just plain
+cooler, there are several ways in which you can help out. Here are some of the
things we need your help on:
<ul>
- <li>Donate source code</li>
- <li>Donate time writing help</li>
- <li>Donate time writing demos</li>
+ <li>Donate source code
+</li>
+ <li>Donate time writing help
+</li>
+ <li>Donate time writing demos
+</li>
<li>Donate time fixing bugs</li>
<li>Share your experience by helping users in newsgroups and mailing lists</li>
</ul>
-<p>JCL accepts donations from developers as long as the source fullfills the
-requirements set up by the JEDI and JCL teams. To read more about these
+<p>JCL accepts donations from developers as long as the source fullfills the
+requirements set up by the JEDI and JCL teams. To read more about these
requirements, visit the page http://homepages.codegear.com/jedi/jcl</p>
-<p>You can also donate your time by writing help for the source already
-in JCL. We currently use Doc-o-Matic to create the finished help files but
+<p>You can also donate your time by writing help for the source already
+in JCL. We currently use Doc-o-Matic to create the finished help files but
the actual help sources are plain text files in a simple to understand format.
We can provide you with auto-generated templates with all classes, properties,
types etc already inserted. The "only" thing left to do is fill in the actual
Modified: branches/JCL_1.99/jcl/docs/Readme.txt
===================================================================
--- branches/JCL_1.99/jcl/docs/Readme.txt 2007-03-18 17:27:55 UTC (rev 1952)
+++ branches/JCL_1.99/jcl/docs/Readme.txt 2007-03-18 17:48:59 UTC (rev 1953)
@@ -1,95 +1,102 @@
--------------------------------------------------------------------------------
Jedi Code Library
-Release 1.98
-Build 2509
-13-January-2007
+Release 1.99
+Build 2551
+24-Februray-2007
--------------------------------------------------------------------------------
Content of this file
- - About this release
- - Supported tools
- - Installation notes
- - Manual installation
- - Distribution content
- - Giving your feedback
- - Reporting bugs
- - Downloads of stable sources
- - Development sources
- - Getting involved in JCL development
+About this release
+Supported tools
+Installation notes
+Manual installation
+Distribution content
+Giving your feedback
+Reporting bugs
+Downloads of stable sources
+Development sources
+Getting involved in JCL development
--------------------------------------------------------------------------------
About this release
+JCL release 1.99 provide an updated support for all targets (including CodeGear
+Delphi 2007 for Win32).
-JCL release 1.98 provide an updated support for all targets (including Borland
-Developer Studio 2006 and Turbo Delphi) and an installation of some experts in
-C#Builder 1 and Delphi 8.
As always, multiple bugs have been fixed; for detailed change logs, use the
facilities of our Subversion repository at Sourceforge.net
-http://sourceforge.net/projects/jcl/ , see below.
+http://sourceforge.net/projects/jcl/, see below.
Head changes:
- - Integration of the JCL help into the help system of Delphi 2005, BDS 2006
- and Turbo Delphi.
+
+ - JclPeImage is significantly updated: it now supports 64-bit applications and
+ libraries.
+ - JclDebug is significantly updated: .jdbg files contain informations about all
+ segments of code. A new option was added to limit exception handling to the
+ main thread of the application.
+ - PCRE (http://www.pcre.org/) updated to version 7.0. PCRE code can be included
+ in the application not requiring "pcre.dll" anymore (experimental - read the
+ comments at the beginning of source\common\pcre.pas for details and
+ modifications to enable this feature).
+ - JclMail : different file names can be specified for attachements
- Collection of stream classes to make basic operations easier (getting random
data, multiplexing several streams, buffering an other stream, being notifyed
- on changes, reading common data types, scoping a stream,
- delegating read/write/seek operations.
- - Speed-up of the stack analysis of JclDebug: exception driven execution will
- not be slowed by activating JclDebug in the application.
- - ZLIB (http://www.zlib.net/) updated to 1.2.3 (fixes a major issue while
- deflating corrupted data).
- - PCRE (http://www.pcre.org/) updated to version 6.7.
- - Unicode support updated to 4.1.0.
- - New IDE expert to have subversion (http://subversion.tigris.org/) and
- cvs (http://www.cvsnt.org/) commands integrated in all support IDE.
+ on changes, reading common data types, scoping a stream, delegating
+ read/write/seek operations.
+ - Integration of the JCL help into the help system of Delphi 2005, BDS 2006,
+ Turbo Delphi and Delphi 2007 for Win32.
+ - New IDE expert to have TortoiseSVN (http://tortoisesvn.tigris.org/) and
+ TortoiseCVS (http://tortoisecvs.sourceforge.net/) commands integrated in all
+ supportted IDE.
Important:
- - Note that the package naming has changed: the same package name is used by all
- versions of the compiler supporting suffixes (C++Builder 6, Delphi 6, Delphi 7,
- C#Builder 1, Delphi 8, Delphi 2005 and BDS 2006); a different suffix is added
- for each target to the BPL file name (for BDS 2006, the library file is named
- jcl100.bpl). The installer tries to remove old packages. 3rd party packages
- requiring old DJcl* resp. CJcl* packages need to be changed to accomodate the
- new naming scheme or they will cause conflicts in the IDE at load time.
+ - Note that the package naming has changed: the same package name is used by
+ all versions of the compiler supporting suffixes (C++Builder 6, Delphi 6,
+ Delphi 7, C#Builder 1, Delphi 8, Delphi 2005 and BDS 2006); a different
+ suffix is added for each target to the BPL file name (for BDS 2006, the
+ library file is named jcl100.bpl). The installer tries to remove old
+ packages. 3rd party packages requiring old DJcl* resp. CJcl* packages need to
+ be changed to accomodate the new naming scheme or they will cause conflicts
+ in the IDE at load time.
+
- DCP files are now created in the lib\target subdirectory of the JCL
- installation. 3rd party packages requiring JCL packages need to have this path
- in their "browse path" option to compile.
+ installation. 3rd party packages requiring JCL packages need to have this
+ path in their "browse path" option to compile.
(Windows only) Installation options:
-Packages compiled by the JCL installer don't contain any debug informations to
+
+ Packages compiled by the JCL installer don't contain any debug informations to
keep their size as small as possible.
-The Jedi Code Library packages are required by some 3rd party packages
+ The Jedi Code Library packages are required by some 3rd party packages
(including the Jedi Visual Component Library - JVCL), the installer generates
them if the "Packages" node is checked.
-The installer can generate MAP informations for each package. These informations
-can be linked into binaries to become JCL debug data or be converted to .jdbg
-files. Once linked MAP files could be deleted. These options are subnodes of the
-"Packages" node.
+ The installer can generate MAP informations for each package. These
+informations can be linked into binaries to become JCL debug data or be
+converted to .jdbg files. Once linked MAP files could be deleted. These options
+are subnodes of the "Packages" node.
-For BDS 2006, the compiler introduced a new option to make the same packages
+ For BDS 2006, the compiler introduced a new option to make the same packages
available in C++, by checking the "Dual packages" option of the "Packages" node,
you will be able to call functions of the JCL from C++ code.
.net Framework support:
-A subset of JCL units was worked over to support Delphi.Net (Delphi 2005 & BDS
-2006). The packages belong to the Jedi.Jcl namespace. The installer can generate
-these packages for Delphi 2005 and BDS 2006, it displays an other tab to
-configure options and directory. The installation process is similar to the
+
+A subset of JCL units was worked over to support Delphi.Net (Delphi 2005
+& BDS 2006). The packages belong to the Jedi.Jcl namespace. The installer can
+generate these packages for Delphi 2005 and BDS 2006, it displays an other tab
+to configure options and directory. The installation process is similar to the
native targets.
--------------------------------------------------------------------------------
Supported Tools
+The JCL can be compiled and installed in the following environments
-The Jedi Code Library can be compiled and installed in the following
-environments
-
Only runtime support:
- Kylix 3 (cf Installation notes)
@@ -104,20 +111,22 @@
- Borland Developer Studio 2006 (Delphi Win32, C++ Builder Win32, Delphi.net
and C#Builder personalities).
- Turbo Delphi (explorer and professional - cf Installation notes).
+ - CodeGear Delphi 2007 for Win32.
--------------------------------------------------------------------------------
Installation notes
- - Not every unit supports all tools. Look out for *.exc files in the
- tool-specific lib/subdirectories for a list of units excluded from
- compilation.
+ - Not every unit supports all tools. Look out for *.exc files in the tool-
+ specific lib/subdirectories for a list of units excluded from compilation.
+
- Kylix 3 Delphi/C++ installation is back but specific code has not been tested
with the latest versions of the kernel. Please ensure you use the flavor of
the JCL with Unix EOL.
+
- Free Pascal (http://www.freepascal.org/) support has not been updated for
- this release; most units from source/common should work with FP 2.0, as tests
- with a 2.0 beta (1.9.8) indicated, but this has not been verified. Note that
+ this release; most units fromsource/common should work with FP 2.0, as tests
+ with a 2.0 beta (1.9.8)indicated, but this has not been verified. Note that
there are no plans to support FP versions from the 1.0 branch.
Installation for Turbo Delphi
@@ -130,25 +139,27 @@
To install the JCL targetting Turbo Delphi Explorer, consider the following
checks:
+
- If you have an other supported version of Delphi/C++Builder on this computer,
it should automatically be detected and the installer will process as usual.
- If you only have Turbo Delphi Explorer (and no other tools) on the computer,
- the installer cannot be compiled. You have to use the Turbo Explorer flavor
- of the JCL that contains a precompiled installer. However, you will not be
- able to install any experts.
+ the installer cannot becompiled. You have to use the Turbo Explorer flavor of
+ the JCL that contains a precompiled installer. However, you will not be able
+ to install any experts.
Installation on C#Builder 1 and Delphi 8:
+
- These products cannot be used to build the JCL installer, you need an other
supported product to install JCL experts on these products.
- These products are not able to use the JCL library as a runtime library. You
cannot write managed applications and managed packages based on the JCL.
- These products are not shipped with their native compilers, you have to
- download it from codecentral (http://cc.codegear.com/).
- The item (http://codecentral.codegear.com/Download.aspx?id=21333) contains
- the native compiler to be installed in Delphi 8.
- The item (http://codecentral.codegear.com/Download.aspx?id=21334) contains
- the native compiler to be installed in C#Builder 1. These zip files have to
- be extracted in the products directory using the standard pattern:
+ download it from codecentral (http://cc.codegear.com/). The item
+ (http://codecentral.codegear.com/Download.aspx?id=21333) contains the native
+ compiler to be installed in Delphi 8. The item
+ (http://codecentral.codegear.com/Download.aspx?id=21334) contains the native
+ compiler to be installed in C#Builder 1. These zip files have to be extracted
+ in the products directory using the standard pattern:
Executable files (exe and dll) - BDS\X.0\bin
Compiler files (dcp and dcu) - BDS\X.0\lib
Toolsapi source files - BDS\X.0\source\ToolsAPI
@@ -161,37 +172,38 @@
--------------------------------------------------------------------------------
Manual Installation
-
Although it is not recommended, a manual installation is possible. You will have
to manually configure options for the library. That is done by modifying an
included file.
For each tool you want to install the JCL in, repeat the following steps:
- 1 Copy source\jcl.template.inc to a fixed file name:
- - For Kylix 3 (Delphi): source\jclkd3.inc
- - For Kylix 3 (C++Builder): source\jclkc3.inc
- - For C++Builder 5: source\jclc5.inc
- - For C++Builder 6: source\jclc6.inc
- - For Delphi 5: source\jcld5.inc
- - For Delphi 6: source\jcld6.inc
- - For Delphi 7: source\jcld7.inc
- - For Delphi 2005: source\jcld9.inc
- - For Delphi.net 2005: source\jcld9.net.inc
- - For BDS 2006 (Delphi and C++Builder): source\jcld10.inc
- - For Delphi.net 2006: source\jcld10.net.inc
- 2 Open and edit that file to customize options.
- 3 In the IDE, open and compile package Jcl.dpk (or Jcl.bpk for C++Builder)
- located in the subdirectory of the "packages" directory matching your version
- of the IDE. This package doesn't have to be installed since it doesn't
- provide any components.
- 4 If you want to install experts, open package JclBaseExpert.dpk and compile
- it, then you can install all the experts you want (packages are located in
- the same directory).
+1. Open and edit included file to customize options:
+ - For Kylix 3 (Delphi): source\jclkd3.inc
+ - For Kylix 3 (C++Builder): source\jclkc3.inc
+ - For C++Builder 5: source\jclc5.inc
+ - For C++Builder 6: source\jclc6.inc
+ - For Delphi 5: source\jcld5.inc
+ - For Delphi 6: source\jcld6.inc
+ - For Delphi 7: source\jcld7.inc
+ - For Delphi 2005: source\jcld9.inc
+ - For Delphi.net 2005: source\jcld9.net.inc
+ - For BDS 2006 (Delphi and C++Builder) and CodeGear Delphi 2007 for Win32 :
+ source\jcld10.inc
+ - For Delphi.net 2006: source\jcld10.net.inc
+
+2. In the IDE, open and compile package Jcl.dpk (or Jcl.bpk for C++Builder)
+located in a subdirectory of the "packages" directory matching your version of
+the IDE. This package doesn't have to be installed since it doesn't provide any
+components.
+
+3. If you want to install experts, open package JclBaseExpert.dpk and compile
+it, then you can install all the experts you want (packages are located in the
+same directory).
+
--------------------------------------------------------------------------------
Distribution content
-
Install.bat - Compile and run VCL version of the JCL Installer (Win32)
QInstall.bat - Compile and run CLX version of JCL Installer (Win32)
install.sh - Compile and run JCL Installer (Linux)
@@ -235,8 +247,8 @@
account should not be used for support requests. If you need support please
use either the newsgroups or the mailing list.
- If you want to keep up to date about JCL then you can join the JCL mailing
- list by going to http://tech.groups.yahoo.com/group/JEDI-JCL/ You can also
- use this list to voice your opinion, comments or suggestions.
+ list by going to http://tech.groups.yahoo.com/group/JEDI-JCL/You ca...
[truncated message content] |
|
From: <ou...@us...> - 2007-03-18 23:32:49
|
Revision: 1951
http://svn.sourceforge.net/jcl/?rev=1951&view=rev
Author: outchy
Date: 2007-03-18 10:24:01 -0700 (Sun, 18 Mar 2007)
Log Message:
-----------
Preparing JCL 1.99 (with support for Delphi 2007)
Added Paths:
-----------
branches/JCL_1.99/
Copied: branches/JCL_1.99 (from rev 1947, trunk)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-03-14 21:51:28
|
Revision: 1949
http://svn.sourceforge.net/jcl/?rev=1949&view=rev
Author: outchy
Date: 2007-03-14 14:51:25 -0700 (Wed, 14 Mar 2007)
Log Message:
-----------
Adding an option to have all stack traces in exception dialogs
Fixing a bug in JclDebug: Raw parameter unused in JclCreateThreadStackTrace
Modified Paths:
--------------
trunk/jcl/experts/common/JclOtaResources.pas
trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas
trunk/jcl/experts/debug/dialog/ExceptDlg.pas
trunk/jcl/experts/debug/dialog/ExceptDlgMail.dfm
trunk/jcl/experts/debug/dialog/ExceptDlgMail.pas
trunk/jcl/experts/debug/dialog/JclOtaExcDlgRepository.pas
trunk/jcl/experts/debug/dialog/JclOtaExcDlgTraceFrame.dfm
trunk/jcl/experts/debug/dialog/JclOtaExcDlgTraceFrame.pas
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/experts/common/JclOtaResources.pas
===================================================================
--- trunk/jcl/experts/common/JclOtaResources.pas 2007-03-13 21:39:07 UTC (rev 1948)
+++ trunk/jcl/experts/common/JclOtaResources.pas 2007-03-14 21:51:25 UTC (rev 1949)
@@ -151,6 +151,7 @@
RsVirtualAddress = '&Virtual address';
RsModuleOffset = 'Module &offset';
RsPreview = '&Preview:';
+ RsAllThreads = 'Include traces for registered &threads';
//=== JclOtaExcDlgIgnoreFrame.pas ============================================
resourcestring
Modified: trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas 2007-03-13 21:39:07 UTC (rev 1948)
+++ trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas 2007-03-14 21:51:25 UTC (rev 1949)
@@ -54,7 +54,7 @@
private
private
FDetailsVisible: Boolean;
- FIsMainThead: Boolean;
+ FThreadID: DWORD;
%if ActiveControls FLastActiveControl: TWinControl;%endif
FNonDetailsHeight: Integer;
FFullHeight: Integer;
@@ -76,7 +76,7 @@
procedure CopyReportToClipboard;
class procedure ExceptionHandler(Sender: TObject; E: Exception);
class procedure ExceptionThreadHandler(Thread: TJclDebugThread);
- class procedure ShowException(E: Exception; Thread: TJclDebugThread);
+ class procedure ShowException(E: TObject; Thread: TJclDebugThread);
property DetailsVisible: Boolean read FDetailsVisible
write SetDetailsVisible;
property ReportAsText: string read GetReportAsText;
@@ -99,6 +99,7 @@
resourcestring
RsAppError = '%s - application error';
RsExceptionClass = 'Exception class: %s';
+ RsExceptionMessage = 'Exception message: %s';
RsExceptionAddr = 'Exception address: %p';
RsStackList = 'Stack list, generated %s';
RsModulesList = 'List of loaded modules:';
@@ -109,6 +110,8 @@
RsActiveControl = 'Active Controls hierarchy:';
RsThread = 'Thread: %s';
RsMissingVersionInfo = '(no version info)';
+%if AllThreads RsMainThreadCallStack = 'Call stack for main thread';
+ RsThreadCallStack = 'Call stack for thread %s';%endif
var
%FORMNAME%: T%FORMNAME%;
@@ -291,20 +294,57 @@
%if ActiveControls C: TWinControl;%endif
%if OSInfo CpuInfo: TCpuInfo;
ProcessorDetails: string;%endif
-%if StackList StackList: TJclStackInfoList;%endif
+%if StackList StackList: TJclStackInfoList;
+%if AllThreads ThreadList: TJclDebugThreadList;
+ AThreadID: DWORD;%endif %endif
PETarget: TJclPeTarget;
begin
SL := TStringList.Create;
try
%if StackList // Stack list
- StackList := JclLastExceptStackList;
+ StackList := JclGetExceptStackList(FThreadID);
if Assigned(StackList) then
begin
DetailsMemo.Lines.Add(Format(RsStackList, [DateTimeToStr(StackList.TimeStamp)]));
StackList.AddToStrings(DetailsMemo.Lines, %BoolValue ModuleName, %BoolValue ModuleOffset, %BoolValue CodeDetails, %BoolValue VirtualAddress);
NextDetailBlock;
end;
+%if AllThreads // Main thread
+ if FThreadID <> MainThreadID then
+ begin
+ StackList := JclCreateThreadStackTraceFromID(%BoolValue RawData, MainThreadID);
+ if Assigned(StackList) then
+ begin
+ DetailsMemo.Lines.Add(RsMainThreadCallStack);
+ DetailsMemo.Lines.Add(Format(RsStackList, [DateTimeToStr(StackList.TimeStamp)]));
+ StackList.AddToStrings(DetailsMemo.Lines, %BoolValue ModuleName, %BoolValue ModuleOffset, %BoolValue CodeDetails, %BoolValue VirtualAddress);
+ NextDetailBlock;
+ end;
+ end;
+ // All threads
+ ThreadList := JclDebugThreadList;
+ ThreadList.Lock.Enter; // avoid modifications
+ try
+ for I := 0 to ThreadList.ThreadIDCount - 1 do
+ begin
+ AThreadID := ThreadList.ThreadIDs[I];
+ if (AThreadID <> FThreadID) then
+ begin
+ StackList := JclCreateThreadStackTrace(%BoolValue RawData, ThreadList.ThreadHandles[I]);
+ if Assigned(StackList) then
+ begin
+ DetailsMemo.Lines.Add(Format(RsThreadCallStack, [ThreadList.ThreadInfos[AThreadID]]));
+ DetailsMemo.Lines.Add(Format(RsStackList, [DateTimeToStr(StackList.TimeStamp)]));
+ StackList.AddToStrings(DetailsMemo.Lines, %BoolValue ModuleName, %BoolValue ModuleOffset, %BoolValue CodeDetails, %BoolValue VirtualAddress);
+ NextDetailBlock;
+ end;
+ end;
+ end;
+ finally
+ ThreadList.Lock.Leave;
+ end;
%endif
+%endif
%if OSInfo // System and OS information
DetailsMemo.Lines.Add(Format(RsOSVersion, [GetWindowsVersionString, NtProductTypeString,
@@ -409,7 +449,7 @@
class procedure T%FORMNAME%.ExceptionHandler(Sender: TObject; E: Exception);
begin
if ExceptionShowing then
- Application.ShowException(E)
+ Application.ShowException(Exception(E))
else if Assigned(E) and not IsIgnoredException(E.ClassType) then
begin
ExceptionShowing := True;
@@ -426,7 +466,10 @@
class procedure T%FORMNAME%.ExceptionThreadHandler(Thread: TJclDebugThread);
begin
if ExceptionShowing then
- Application.ShowException(Thread.SyncException)
+ begin
+ if Thread.SyncException is EXception then
+ Application.ShowException(Exception(Thread.SyncException));
+ end
else
begin
ExceptionShowing := True;
@@ -487,7 +530,7 @@
begin
BeforeCreateDetails;
MessageBeep(MB_ICONERROR);
- if FIsMainThead and (GetWindowThreadProcessId(Handle, nil) = MainThreadID) then
+ if (GetCurrentThreadId = MainThreadID) and (GetWindowThreadProcessId(Handle, nil) = MainThreadID) then
PostMessage(Handle, UM_CREATEDETAILS, 0, 0)
else
CreateReport;
@@ -562,18 +605,26 @@
//--------------------------------------------------------------------------------------------------
-class procedure T%FORMNAME%.ShowException(E: Exception; Thread: TJclDebugThread);
+class procedure T%FORMNAME%.ShowException(E: TObject; Thread: TJclDebugThread);
begin
if %FORMNAME% = nil then
%FORMNAME% := T%FORMNAME%Class.Create(Application);
try
with %FORMNAME% do
begin
- FIsMainThead := (GetCurrentThreadId = MainThreadID);
+ if Assigned(Thread) then
+ FThreadID := Thread.ThreadID
+ else
+ FThreadID := MainThreadID;
%if ActiveControls FLastActiveControl := Screen.ActiveControl;%endif
- TextLabel.Text := AdjustLineBreaks(StrEnsureSuffix('.', E.Message));
+ if E is Exception then
+ TextLabel.Text := AdjustLineBreaks(StrEnsureSuffix('.', Exception(E).Message))
+ else
+ TextLabel.Text := AdjustLineBreaks(StrEnsureSuffix('.', E.ClassName));
UpdateTextLabelScrollbars;
DetailsMemo.Lines.Add(Format(RsExceptionClass, [E.ClassName]));
+ if E is Exception then
+ DetailsMemo.Lines.Add(Format(RsExceptionMessage, [StrEnsureSuffix('.', Exception(E).Message)]));
if Thread = nil then
DetailsMemo.Lines.Add(Format(RsExceptionAddr, [ExceptAddr]))
else
Modified: trunk/jcl/experts/debug/dialog/ExceptDlg.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/ExceptDlg.pas 2007-03-13 21:39:07 UTC (rev 1948)
+++ trunk/jcl/experts/debug/dialog/ExceptDlg.pas 2007-03-14 21:51:25 UTC (rev 1949)
@@ -54,7 +54,7 @@
private
private
FDetailsVisible: Boolean;
- FIsMainThead: Boolean;
+ FThreadID: DWORD;
FLastActiveControl: TWinControl;
FNonDetailsHeight: Integer;
FFullHeight: Integer;
@@ -76,7 +76,7 @@
procedure CopyReportToClipboard;
class procedure ExceptionHandler(Sender: TObject; E: Exception);
class procedure ExceptionThreadHandler(Thread: TJclDebugThread);
- class procedure ShowException(E: Exception; Thread: TJclDebugThread);
+ class procedure ShowException(E: TObject; Thread: TJclDebugThread);
property DetailsVisible: Boolean read FDetailsVisible
write SetDetailsVisible;
property ReportAsText: string read GetReportAsText;
@@ -99,6 +99,7 @@
resourcestring
RsAppError = '%s - application error';
RsExceptionClass = 'Exception class: %s';
+ RsExceptionMessage = 'Exception message: %s';
RsExceptionAddr = 'Exception address: %p';
RsStackList = 'Stack list, generated %s';
RsModulesList = 'List of loaded modules:';
@@ -110,6 +111,7 @@
RsThread = 'Thread: %s';
RsMissingVersionInfo = '(no version info)';
+
var
ExceptionDialog: TExceptionDialog;
@@ -272,12 +274,13 @@
CpuInfo: TCpuInfo;
ProcessorDetails: string;
StackList: TJclStackInfoList;
+
PETarget: TJclPeTarget;
begin
SL := TStringList.Create;
try
// Stack list
- StackList := JclLastExceptStackList;
+ StackList := JclGetExceptStackList(FThreadID);
if Assigned(StackList) then
begin
DetailsMemo.Lines.Add(Format(RsStackList, [DateTimeToStr(StackList.TimeStamp)]));
@@ -286,6 +289,7 @@
end;
+
// System and OS information
DetailsMemo.Lines.Add(Format(RsOSVersion, [GetWindowsVersionString, NtProductTypeString,
Win32MajorVersion, Win32MinorVersion, Win32BuildNumber, Win32CSDVersion]));
@@ -389,7 +393,7 @@
class procedure TExceptionDialog.ExceptionHandler(Sender: TObject; E: Exception);
begin
if ExceptionShowing then
- Application.ShowException(E)
+ Application.ShowException(Exception(E))
else if Assigned(E) and not IsIgnoredException(E.ClassType) then
begin
ExceptionShowing := True;
@@ -406,7 +410,10 @@
class procedure TExceptionDialog.ExceptionThreadHandler(Thread: TJclDebugThread);
begin
if ExceptionShowing then
- Application.ShowException(Thread.SyncException)
+ begin
+ if Thread.SyncException is EXception then
+ Application.ShowException(Exception(Thread.SyncException));
+ end
else
begin
ExceptionShowing := True;
@@ -467,7 +474,7 @@
begin
BeforeCreateDetails;
MessageBeep(MB_ICONERROR);
- if FIsMainThead and (GetWindowThreadProcessId(Handle, nil) = MainThreadID) then
+ if (GetCurrentThreadId = MainThreadID) and (GetWindowThreadProcessId(Handle, nil) = MainThreadID) then
PostMessage(Handle, UM_CREATEDETAILS, 0, 0)
else
CreateReport;
@@ -542,18 +549,26 @@
//--------------------------------------------------------------------------------------------------
-class procedure TExceptionDialog.ShowException(E: Exception; Thread: TJclDebugThread);
+class procedure TExceptionDialog.ShowException(E: TObject; Thread: TJclDebugThread);
begin
if ExceptionDialog = nil then
ExceptionDialog := TExceptionDialogClass.Create(Application);
try
with ExceptionDialog do
begin
- FIsMainThead := (GetCurrentThreadId = MainThreadID);
+ if Assigned(Thread) then
+ FThreadID := Thread.ThreadID
+ else
+ FThreadID := MainThreadID;
FLastActiveControl := Screen.ActiveControl;
- TextLabel.Text := AdjustLineBreaks(StrEnsureSuffix('.', E.Message));
+ if E is Exception then
+ TextLabel.Text := AdjustLineBreaks(StrEnsureSuffix('.', Exception(E).Message))
+ else
+ TextLabel.Text := AdjustLineBreaks(StrEnsureSuffix('.', E.ClassName));
UpdateTextLabelScrollbars;
DetailsMemo.Lines.Add(Format(RsExceptionClass, [E.ClassName]));
+ if E is Exception then
+ DetailsMemo.Lines.Add(Format(RsExceptionMessage, [StrEnsureSuffix('.', Exception(E).Message)]));
if Thread = nil then
DetailsMemo.Lines.Add(Format(RsExceptionAddr, [ExceptAddr]))
else
Modified: trunk/jcl/experts/debug/dialog/ExceptDlgMail.dfm
===================================================================
--- trunk/jcl/experts/debug/dialog/ExceptDlgMail.dfm 2007-03-13 21:39:07 UTC (rev 1948)
+++ trunk/jcl/experts/debug/dialog/ExceptDlgMail.dfm 2007-03-14 21:51:25 UTC (rev 1949)
@@ -1,9 +1,9 @@
-object ExceptionDialog: TExceptionDialog
+object ExceptionDialogMail: TExceptionDialogMail
Left = 310
Top = 255
BorderIcons = [biSystemMenu]
- Caption = 'ExceptionDialog'
+ Caption = 'ExceptionDialogMail'
ClientHeight = 255
ClientWidth = 432
Color = clBtnFace
Modified: trunk/jcl/experts/debug/dialog/ExceptDlgMail.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/ExceptDlgMail.pas 2007-03-13 21:39:07 UTC (rev 1948)
+++ trunk/jcl/experts/debug/dialog/ExceptDlgMail.pas 2007-03-14 21:51:25 UTC (rev 1949)
@@ -36,7 +36,7 @@
UM_CREATEDETAILS = WM_USER + $100;
type
- TExceptionDialog = class(TForm)
+ TExceptionDialogMail = class(TForm)
SendBtn: TButton;
TextLabel: TMemo;
OkBtn: TButton;
@@ -54,7 +54,7 @@
private
private
FDetailsVisible: Boolean;
- FIsMainThead: Boolean;
+ FThreadID: DWORD;
FLastActiveControl: TWinControl;
FNonDetailsHeight: Integer;
FFullHeight: Integer;
@@ -76,17 +76,17 @@
procedure CopyReportToClipboard;
class procedure ExceptionHandler(Sender: TObject; E: Exception);
class procedure ExceptionThreadHandler(Thread: TJclDebugThread);
- class procedure ShowException(E: Exception; Thread: TJclDebugThread);
+ class procedure ShowException(E: TObject; Thread: TJclDebugThread);
property DetailsVisible: Boolean read FDetailsVisible
write SetDetailsVisible;
property ReportAsText: string read GetReportAsText;
property SimpleLog: TJclSimpleLog read FSimpleLog;
end;
- TExceptionDialogClass = class of TExceptionDialog;
+ TExceptionDialogMailClass = class of TExceptionDialogMail;
var
- ExceptionDialogClass: TExceptionDialogClass = TExceptionDialog;
+ ExceptionDialogMailClass: TExceptionDialogMailClass = TExceptionDialogMail;
implementation
@@ -99,6 +99,7 @@
resourcestring
RsAppError = '%s - application error';
RsExceptionClass = 'Exception class: %s';
+ RsExceptionMessage = 'Exception message: %s';
RsExceptionAddr = 'Exception address: %p';
RsStackList = 'Stack list, generated %s';
RsModulesList = 'List of loaded modules:';
@@ -110,8 +111,9 @@
RsThread = 'Thread: %s';
RsMissingVersionInfo = '(no version info)';
+
var
- ExceptionDialog: TExceptionDialog;
+ ExceptionDialogMail: TExceptionDialogMail;
//============================================================================
// Helper routines
@@ -148,7 +150,7 @@
begin
if JclValidateModuleAddress(ExceptAddr)
and (ExceptObject.InstanceSize >= Exception.InstanceSize) then
- TExceptionDialog.ExceptionHandler(nil, Exception(ExceptObject))
+ TExceptionDialogMail.ExceptionHandler(nil, Exception(ExceptObject))
else
SysUtils.ShowException(ExceptObject, ExceptAddr);
end;
@@ -207,30 +209,30 @@
var
ExceptionShowing: Boolean;
-//=== { TExceptionDialog } ===============================================
+//=== { TExceptionDialogMail } ===============================================
-procedure TExceptionDialog.AfterCreateDetails;
+procedure TExceptionDialogMail.AfterCreateDetails;
begin
SendBtn.Enabled := True;
end;
//----------------------------------------------------------------------------
-procedure TExceptionDialog.BeforeCreateDetails;
+procedure TExceptionDialogMail.BeforeCreateDetails;
begin
SendBtn.Enabled := False;
end;
//----------------------------------------------------------------------------
-function TExceptionDialog.ReportMaxColumns: Integer;
+function TExceptionDialogMail.ReportMaxColumns: Integer;
begin
Result := 78;
end;
//----------------------------------------------------------------------------
-procedure TExceptionDialog.SendBtnClick(Sender: TObject);
+procedure TExceptionDialogMail.SendBtnClick(Sender: TObject);
begin
with TJclEmail.Create do
try
@@ -251,14 +253,14 @@
//----------------------------------------------------------------------------
-procedure TExceptionDialog.CopyReportToClipboard;
+procedure TExceptionDialogMail.CopyReportToClipboard;
begin
ClipBoard.AsText := ReportAsText;
end;
//----------------------------------------------------------------------------
-procedure TExceptionDialog.CreateDetails;
+procedure TExceptionDialogMail.CreateDetails;
begin
Screen.Cursor := crHourGlass;
DetailsMemo.Lines.BeginUpdate;
@@ -279,7 +281,7 @@
//----------------------------------------------------------------------------
-procedure TExceptionDialog.CreateReport;
+procedure TExceptionDialogMail.CreateReport;
var
SL: TStringList;
I: Integer;
@@ -292,12 +294,13 @@
CpuInfo: TCpuInfo;
ProcessorDetails: string;
StackList: TJclStackInfoList;
+
PETarget: TJclPeTarget;
begin
SL := TStringList.Create;
try
// Stack list
- StackList := JclLastExceptStackList;
+ StackList := JclGetExceptStackList(FThreadID);
if Assigned(StackList) then
begin
DetailsMemo.Lines.Add(Format(RsStackList, [DateTimeToStr(StackList.TimeStamp)]));
@@ -306,6 +309,7 @@
end;
+
// System and OS information
DetailsMemo.Lines.Add(Format(RsOSVersion, [GetWindowsVersionString, NtProductTypeString,
Win32MajorVersion, Win32MinorVersion, Win32BuildNumber, Win32CSDVersion]));
@@ -399,17 +403,17 @@
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialog.DetailsBtnClick(Sender: TObject);
+procedure TExceptionDialogMail.DetailsBtnClick(Sender: TObject);
begin
DetailsVisible := not DetailsVisible;
end;
//--------------------------------------------------------------------------------------------------
-class procedure TExceptionDialog.ExceptionHandler(Sender: TObject; E: Exception);
+class procedure TExceptionDialogMail.ExceptionHandler(Sender: TObject; E: Exception);
begin
if ExceptionShowing then
- Application.ShowException(E)
+ Application.ShowException(Exception(E))
else if Assigned(E) and not IsIgnoredException(E.ClassType) then
begin
ExceptionShowing := True;
@@ -423,10 +427,13 @@
//--------------------------------------------------------------------------------------------------
-class procedure TExceptionDialog.ExceptionThreadHandler(Thread: TJclDebugThread);
+class procedure TExceptionDialogMail.ExceptionThreadHandler(Thread: TJclDebugThread);
begin
if ExceptionShowing then
- Application.ShowException(Thread.SyncException)
+ begin
+ if Thread.SyncException is EXception then
+ Application.ShowException(Exception(Thread.SyncException));
+ end
else
begin
ExceptionShowing := True;
@@ -440,7 +447,7 @@
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialog.FormCreate(Sender: TObject);
+procedure TExceptionDialogMail.FormCreate(Sender: TObject);
begin
FSimpleLog := TJclSimpleLog.Create('filename.log');
FFullHeight := ClientHeight;
@@ -450,14 +457,14 @@
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialog.FormDestroy(Sender: TObject);
+procedure TExceptionDialogMail.FormDestroy(Sender: TObject);
begin
FreeAndNil(FSimpleLog);
end;
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialog.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
+procedure TExceptionDialogMail.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key = Ord('C')) and (ssCtrl in Shift) then
begin
@@ -468,7 +475,7 @@
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialog.FormPaint(Sender: TObject);
+procedure TExceptionDialogMail.FormPaint(Sender: TObject);
begin
DrawIcon(Canvas.Handle, TextLabel.Left - GetSystemMetrics(SM_CXICON) - 15,
TextLabel.Top, LoadIcon(0, IDI_ERROR));
@@ -476,18 +483,18 @@
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialog.FormResize(Sender: TObject);
+procedure TExceptionDialogMail.FormResize(Sender: TObject);
begin
UpdateTextLabelScrollbars;
end;
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialog.FormShow(Sender: TObject);
+procedure TExceptionDialogMail.FormShow(Sender: TObject);
begin
BeforeCreateDetails;
MessageBeep(MB_ICONERROR);
- if FIsMainThead and (GetWindowThreadProcessId(Handle, nil) = MainThreadID) then
+ if (GetCurrentThreadId = MainThreadID) and (GetWindowThreadProcessId(Handle, nil) = MainThreadID) then
PostMessage(Handle, UM_CREATEDETAILS, 0, 0)
else
CreateReport;
@@ -495,28 +502,28 @@
//--------------------------------------------------------------------------------------------------
-function TExceptionDialog.GetReportAsText: string;
+function TExceptionDialogMail.GetReportAsText: string;
begin
Result := StrEnsureSuffix(AnsiCrLf, TextLabel.Text) + AnsiCrLf + DetailsMemo.Text;
end;
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialog.NextDetailBlock;
+procedure TExceptionDialogMail.NextDetailBlock;
begin
DetailsMemo.Lines.Add(StrRepeat(ReportNewBlockDelimiterChar, ReportMaxColumns));
end;
//--------------------------------------------------------------------------------------------------
-function TExceptionDialog.ReportNewBlockDelimiterChar: Char;
+function TExceptionDialogMail.ReportNewBlockDelimiterChar: Char;
begin
Result := '-';
end;
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialog.ReportToLog;
+procedure TExceptionDialogMail.ReportToLog;
begin
FSimpleLog.WriteStamp(ReportMaxColumns);
try
@@ -528,7 +535,7 @@
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialog.SetDetailsVisible(const Value: Boolean);
+procedure TExceptionDialogMail.SetDetailsVisible(const Value: Boolean);
var
DetailsCaption: string;
begin
@@ -562,18 +569,26 @@
//--------------------------------------------------------------------------------------------------
-class procedure TExceptionDialog.ShowException(E: Exception; Thread: TJclDebugThread);
+class procedure TExceptionDialogMail.ShowException(E: TObject; Thread: TJclDebugThread);
begin
- if ExceptionDialog = nil then
- ExceptionDialog := TExceptionDialogClass.Create(Application);
+ if ExceptionDialogMail = nil then
+ ExceptionDialogMail := TExceptionDialogMailClass.Create(Application);
try
- with ExceptionDialog do
+ with ExceptionDialogMail do
begin
- FIsMainThead := (GetCurrentThreadId = MainThreadID);
+ if Assigned(Thread) then
+ FThreadID := Thread.ThreadID
+ else
+ FThreadID := MainThreadID;
FLastActiveControl := Screen.ActiveControl;
- TextLabel.Text := AdjustLineBreaks(StrEnsureSuffix('.', E.Message));
+ if E is Exception then
+ TextLabel.Text := AdjustLineBreaks(StrEnsureSuffix('.', Exception(E).Message))
+ else
+ TextLabel.Text := AdjustLineBreaks(StrEnsureSuffix('.', E.ClassName));
UpdateTextLabelScrollbars;
DetailsMemo.Lines.Add(Format(RsExceptionClass, [E.ClassName]));
+ if E is Exception then
+ DetailsMemo.Lines.Add(Format(RsExceptionMessage, [StrEnsureSuffix('.', Exception(E).Message)]));
if Thread = nil then
DetailsMemo.Lines.Add(Format(RsExceptionAddr, [ExceptAddr]))
else
@@ -582,13 +597,13 @@
ShowModal;
end;
finally
- FreeAndNil(ExceptionDialog);
+ FreeAndNil(ExceptionDialogMail);
end;
end;
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialog.UMCreateDetails(var Message: TMessage);
+procedure TExceptionDialogMail.UMCreateDetails(var Message: TMessage);
begin
Update;
CreateDetails;
@@ -596,7 +611,7 @@
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialog.UpdateTextLabelScrollbars;
+procedure TExceptionDialogMail.UpdateTextLabelScrollbars;
begin
Canvas.Font := TextLabel.Font;
if TextLabel.Lines.Count * Canvas.TextHeight('Wg') > TextLabel.ClientHeight then
@@ -617,11 +632,11 @@
JclStackTrackingOptions := JclStackTrackingOptions + [stRawMode];
JclStackTrackingOptions := JclStackTrackingOptions + [stStaticModuleList];
JclStackTrackingOptions := JclStackTrackingOptions + [stDelayedTrace];
- JclDebugThreadList.OnSyncException := TExceptionDialog.ExceptionThreadHandler;
+ JclDebugThreadList.OnSyncException := TExceptionDialogMail.ExceptionThreadHandler;
JclStartExceptionTracking;
if HookTApplicationHandleException then
JclTrackExceptionsFromLibraries;
- Application.OnException := TExceptionDialog.ExceptionHandler;
+ Application.OnException := TExceptionDialogMail.ExceptionHandler;
end;
//--------------------------------------------------------------------------------------------------
Modified: trunk/jcl/experts/debug/dialog/JclOtaExcDlgRepository.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/JclOtaExcDlgRepository.pas 2007-03-13 21:39:07 UTC (rev 1948)
+++ trunk/jcl/experts/debug/dialog/JclOtaExcDlgRepository.pas 2007-03-14 21:51:25 UTC (rev 1949)
@@ -67,6 +67,7 @@
FStackList: Boolean;
FAutoScrollBars: Boolean;
FMainThreadOnly: Boolean;
+ FAllThreads: Boolean;
FTraceEAbort: Boolean;
FIgnoredExceptions: TStrings;
FTraceAllExceptions: Boolean;
@@ -110,6 +111,7 @@
property RawData: Boolean read FRawData write FRawData;
property ModuleName: Boolean read FModuleName write FModuleName;
property ModuleOffset: Boolean read FModuleOffset write FModuleOffset;
+ property AllThreads: Boolean read FAllThreads write FAllThreads;
//property AddressOffset: Boolean read FAddressOffset write FAddressOffset;
property CodeDetails: Boolean read FCodeDetails write FCodeDetails;
property VirtualAddress: Boolean read FVirtualAddress write FVirtualAddress;
Modified: trunk/jcl/experts/debug/dialog/JclOtaExcDlgTraceFrame.dfm
===================================================================
--- trunk/jcl/experts/debug/dialog/JclOtaExcDlgTraceFrame.dfm 2007-03-13 21:39:07 UTC (rev 1948)
+++ trunk/jcl/experts/debug/dialog/JclOtaExcDlgTraceFrame.dfm 2007-03-14 21:51:25 UTC (rev 1949)
@@ -2,7 +2,7 @@
object LabelPreview: TLabel
Left = 303
Top = 7
- Width = 50
+ Width = 51
Height = 13
Caption = 'RsPreview'
end
@@ -71,4 +71,13 @@
TabOrder = 5
OnClick = CheckBoxStackListClick
end
+ object CheckBoxAllThreads: TCheckBox
+ Left = 56
+ Top = 248
+ Width = 233
+ Height = 17
+ Caption = 'RsAllThreads'
+ TabOrder = 7
+ OnClick = CheckBoxClick
+ end
end
Modified: trunk/jcl/experts/debug/dialog/JclOtaExcDlgTraceFrame.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/JclOtaExcDlgTraceFrame.pas 2007-03-13 21:39:07 UTC (rev 1948)
+++ trunk/jcl/experts/debug/dialog/JclOtaExcDlgTraceFrame.pas 2007-03-14 21:51:25 UTC (rev 1949)
@@ -34,7 +34,7 @@
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls,
+ Dialogs, StdCtrls, JclDebug,
JclOtaExcDlgRepository, JclOtaWizardFrame;
type
@@ -47,14 +47,17 @@
MemoStack: TMemo;
LabelPreview: TLabel;
CheckBoxStackList: TCheckBox;
+ CheckBoxAllThreads: TCheckBox;
procedure CheckBoxClick(Sender: TObject);
procedure CheckBoxStackListClick(Sender: TObject);
private
FParams: TJclOtaExcDlgParams;
+ FTestThread: TJclDebugThread;
procedure UpdatePreview;
procedure UpdateCheckBoxes;
public
constructor Create(AOwner: TComponent; AParams: TJclOtaExcDlgParams); reintroduce;
+ destructor Destroy; override;
procedure PageActivated(Direction: TJclWizardDirection); override;
procedure PageDesactivated(Direction: TJclWizardDirection); override;
@@ -62,14 +65,46 @@
property Params: TJclOtaExcDlgParams read FParams write FParams;
end;
+ // in interface to be exported and have basic debug informations based on exports
+ TTestThread = class(TJclDebugThread)
+ private
+ procedure ExecuteTask;
+ procedure ExecuteSubTask;
+ protected
+ procedure Execute; override;
+ end;
+
implementation
{$R *.dfm}
uses
- JclDebug,
JclOtaResources;
+//=== { TTestThread } ========================================================
+
+{$W+}
+
+procedure TTestThread.Execute;
+begin
+ ExecuteTask;
+end;
+
+{$IFNDEF STACKFRAMES_ON}
+{$W-}
+{$ENDIF ~STACKFRAMES_ON}
+
+procedure TTestThread.ExecuteTask;
+begin
+ ExecuteSubTask;
+end;
+
+procedure TTestThread.ExecuteSubTask;
+begin
+ while not Terminated do
+ Sleep(100);
+end;
+
//=== { TJclOtaExcDlgTracePage } =============================================
procedure TJclOtaExcDlgTracePage.CheckBoxClick(Sender: TObject);
@@ -87,6 +122,7 @@
begin
FParams := AParams;
inherited Create(AOwner);
+ FTestThread := TTestThread.Create(False, 'MyTaskThread');
Caption := RsExcDlgTraceOptions;
CheckBoxStackList.Caption := RsStackList;
@@ -97,8 +133,15 @@
CheckBoxVirtualAddress.Caption := RsVirtualAddress;
CheckBoxModuleOffset.Caption := RsModuleOffset;
LabelPreview.Caption := RsPreview;
+ CheckBoxAllThreads.Caption := RsAllThreads;
end;
+destructor TJclOtaExcDlgTracePage.Destroy;
+begin
+ FTestThread.Free;
+ inherited Destroy;
+end;
+
procedure TJclOtaExcDlgTracePage.PageActivated(Direction: TJclWizardDirection);
begin
inherited PageActivated(Direction);
@@ -110,6 +153,7 @@
CheckBoxCodeDetails.Checked := Params.CodeDetails;
CheckBoxVirtualAddress.Checked := Params.VirtualAddress;
CheckBoxModuleOffset.Checked := Params.ModuleOffset;
+ CheckBoxAllThreads.Checked := Params.AllThreads;
UpdateCheckBoxes;
end;
@@ -126,6 +170,7 @@
Params.CodeDetails := CheckBoxCodeDetails.Checked;
Params.VirtualAddress := CheckBoxVirtualAddress.Checked;
Params.ModuleOffset := CheckBoxModuleOffset.Checked;
+ Params.AllThreads := CheckBoxAllThreads.Checked;
end;
procedure TJclOtaExcDlgTracePage.UpdateCheckBoxes;
@@ -145,14 +190,31 @@
var
AStack: TJclStackInfoList;
begin
+ MemoStack.Lines.Clear;
+
+ if CheckBoxAllThreads.Checked then
+ MemoStack.Lines.Add('Main thread stack trace');
+
AStack := TJclStackInfoList.Create(CheckBoxRawData.Checked, 0, nil, False);
try
- MemoStack.Lines.Clear;
AStack.AddToStrings(MemoStack.Lines, CheckBoxModuleName.Checked,
CheckBoxModuleOffset.Checked, CheckBoxCodeDetails.Checked, CheckBoxVirtualAddress.Checked);
finally
AStack.Free;
end;
+
+ if CheckBoxAllThreads.Checked then
+ begin
+ MemoStack.Lines.Add('');
+ MemoStack.Lines.Add(Format('Stack trace for thread: "%s" (%s)', [FTestThread.ThreadName, FTestThread.ClassName]));
+ AStack := JclCreateThreadStackTrace(CheckBoxRawData.Checked, FTestThread.Handle);
+ try
+ AStack.AddToStrings(MemoStack.Lines, CheckBoxModuleName.Checked,
+ CheckBoxModuleOffset.Checked, CheckBoxCodeDetails.Checked, CheckBoxVirtualAddress.Checked);
+ finally
+ AStack.Free;
+ end;
+ end;
end;
end.
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-03-13 21:39:07 UTC (rev 1948)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-03-14 21:51:25 UTC (rev 1949)
@@ -578,12 +578,18 @@
DelayedTrace: Boolean; BaseOfStack, TopOfStack: Pointer): TJclStackInfoList; overload;
function JclCreateThreadStackTrace(Raw: Boolean; const ThreadHandle: THandle): TJclStackInfoList;
+function JclCreateThreadStackTraceFromID(Raw: Boolean; ThreadID: DWORD): TJclStackInfoList;
function JclLastExceptStackList: TJclStackInfoList;
function JclLastExceptStackListToStrings(Strings: TStrings; IncludeModuleName: Boolean = False;
IncludeAddressOffset: Boolean = False; IncludeStartProcLineOffset: Boolean = False;
IncludeVAdress: Boolean = False): Boolean;
+function JclGetExceptStackList(ThreadID: DWORD): TJclStackInfoList;
+function JclGetExceptStackListToStrings(ThreadID: DWORD; Strings: TStrings;
+ IncludeModuleName: Boolean = False; IncludeAddressOffset: Boolean = False;
+ IncludeStartProcLineOffset: Boolean = False; IncludeVAdress: Boolean = False): Boolean;
+
// Exception frame info routines
type
PJmpInstruction = ^TJmpInstruction;
@@ -661,6 +667,7 @@
function JclCreateExceptFrameList(AIgnoreLevels: Integer): TJclExceptFrameList;
function JclLastExceptFrameList: TJclExceptFrameList;
+function JclGetExceptFrameList(ThreadID: DWORD): TJclExceptFrameList;
function JclStartExceptionTracking: Boolean;
function JclStopExceptionTracking: Boolean;
@@ -672,18 +679,18 @@
type
TJclDebugThread = class(TThread)
private
- FSyncException: Exception;
+ FSyncException: TObject;
FThreadName: string;
procedure DoHandleException;
function GetThreadInfo: string;
protected
procedure DoNotify;
procedure DoSyncHandleException; dynamic;
- procedure HandleException;
+ procedure HandleException(Sender: TObject = nil);
public
constructor Create(Suspended: Boolean; const AThreadName: string = '');
destructor Destroy; override;
- property SyncException: Exception read FSyncException;
+ property SyncException: TObject read FSyncException;
property ThreadInfo: string read GetThreadInfo;
property ThreadName: string read FThreadName;
end;
@@ -706,9 +713,11 @@
function GetThreadNames(ThreadID: DWORD): string;
procedure DoSyncThreadRegistered;
procedure DoSyncThreadUnregistered;
- function GetThreadIDs(Index: Integer): DWORD;
+ function GetThreadHandle(Index: Integer): THandle;
+ function GetThreadID(Index: Integer): DWORD;
function GetThreadIDCount: Integer;
function GetThreadValues(ThreadID: DWORD; Index: Integer): string;
+ function IndexOfThreadID(ThreadID: DWORD): Integer;
protected
procedure DoSyncException(Thread: TJclDebugThread);
procedure DoThreadRegistered(Thread: TThread);
@@ -723,7 +732,8 @@
property Lock: TJclCriticalSection read FLock;
//property ThreadClassNames[ThreadID: DWORD]: string index 1 read GetThreadValues;
property ThreadClassNames[ThreadID: DWORD]: string read GetThreadClassNames;
- property ThreadIDs[Index: Integer]: DWORD read GetThreadIDs;
+ property ThreadHandles[Index: Integer]: DWORD read GetThreadHandle;
+ property ThreadIDs[Index: Integer]: DWORD read GetThreadID;
property ThreadIDCount: Integer read GetThreadIDCount;
//property ThreadInfos[ThreadID: DWORD]: string index 2 read GetThreadValues;
property ThreadInfos[ThreadID: DWORD]: string read GetThreadInfos;
@@ -3568,8 +3578,8 @@
private
FLockedTID: DWORD;
FTIDLocked: Boolean;
- function GetExceptStackInfo: TJclStackInfoList;
- function GetLastExceptFrameList: TJclExceptFrameList;
+ function GetExceptStackInfo(TID: DWORD): TJclStackInfoList;
+ function GetLastExceptFrameList(TID: DWORD): TJclExceptFrameList;
procedure ItemDestroyed(Sender: TObject);
public
destructor Destroy; override;
@@ -3577,8 +3587,8 @@
procedure LockThreadID(TID: DWORD);
procedure UnlockThreadID;
function FindObject(TID: DWORD; AClass: TJclStackBaseListClass): TJclStackBaseList;
- property ExceptStackInfo: TJclStackInfoList read GetExceptStackInfo;
- property LastExceptFrameList: TJclExceptFrameList read GetLastExceptFrameList;
+ property ExceptStackInfo[TID: DWORD]: TJclStackInfoList read GetExceptStackInfo;
+ property LastExceptFrameList[TID: DWORD]: TJclExceptFrameList read GetLastExceptFrameList;
end;
var
@@ -3639,14 +3649,14 @@
end;
end;
-function TJclGlobalStackList.GetExceptStackInfo: TJclStackInfoList;
+function TJclGlobalStackList.GetExceptStackInfo(TID: DWORD): TJclStackInfoList;
begin
- Result := TJclStackInfoList(FindObject(GetCurrentThreadId, TJclStackInfoList));
+ Result := TJclStackInfoList(FindObject(TID, TJclStackInfoList));
end;
-function TJclGlobalStackList.GetLastExceptFrameList: TJclExceptFrameList;
+function TJclGlobalStackList.GetLastExceptFrameList(TID: DWORD): TJclExceptFrameList;
begin
- Result := TJclExceptFrameList(FindObject(GetCurrentThreadId, TJclExceptFrameList));
+ Result := TJclExceptFrameList(FindObject(TID, TJclExceptFrameList));
end;
procedure TJclGlobalStackList.ItemDestroyed(Sender: TObject);
@@ -3846,7 +3856,7 @@
function JclLastExceptStackList: TJclStackInfoList;
begin
- Result := GlobalStackList.ExceptStackInfo;
+ Result := GlobalStackList.ExceptStackInfo[GetCurrentThreadID];
end;
function JclLastExceptStackListToStrings(Strings: TStrings; IncludeModuleName, IncludeAddressOffset,
@@ -3861,6 +3871,24 @@
IncludeVAdress);
end;
+function JclGetExceptStackList(ThreadID: DWORD): TJclStackInfoList;
+begin
+ Result := GlobalStackList.ExceptStackInfo[ThreadID];
+end;
+
+function JclGetExceptStackListToStrings(ThreadID: DWORD; Strings: TStrings;
+ IncludeModuleName: Boolean = False; IncludeAddressOffset: Boolean = False;
+ IncludeStartProcLineOffset: Boolean = False; IncludeVAdress: Boolean = False): Boolean;
+var
+ List: TJclStackInfoList;
+begin
+ List := JclGetExceptStackList(ThreadID);
+ Result := Assigned(List);
+ if Result then
+ List.AddToStrings(Strings, IncludeModuleName, IncludeAddressOffset, IncludeStartProcLineOffset,
+ IncludeVAdress);
+end;
+
function JclCreateStackList(Raw: Boolean; AIgnoreLevels: DWORD; FirstCaller: Pointer): TJclStackInfoList;
begin
Result := TJclStackInfoList.Create(Raw, AIgnoreLevels, FirstCaller, False, nil, nil);
@@ -3908,10 +3936,39 @@
C.ContextFlags := CONTEXT_FULL;
if GetThreadContext(ThreadHandle, C)
and GetThreadSelectorEntry(ThreadHandle, C.SegFs, Entry) then
- Result := JclCreateStackList(True, DWORD(-1), Pointer(C.Eip), False, Pointer(C.Ebp),
+ Result := JclCreateStackList(Raw, DWORD(-1), Pointer(C.Eip), False, Pointer(C.Ebp),
Pointer(GetThreadFs(C, Entry)));
end;
+function JclCreateThreadStackTraceFromID(Raw: Boolean; ThreadID: DWORD): TJclStackInfoList;
+type
+ TOpenThreadFunc = function(DesiredAccess: DWORD; InheritHandle: BOOL; ThreadID: DWORD): THandle; stdcall;
+const
+ THREAD_GET_CONTEXT = $0008;
+ THREAD_QUERY_INFORMATION = $0040;
+var
+ Kernel32Lib, ThreadHandle: THandle;
+ OpenThreadFunc: TOpenThreadFunc;
+begin
+ Result := nil;
+ Kernel32Lib := GetModuleHandle(kernel32);
+ if Kernel32Lib <> 0 then
+ begin
+ // OpenThread only exists since Windows ME
+ OpenThreadFunc := GetProcAddress(Kernel32Lib, 'OpenThread');
+ if Assigned(OpenThreadFunc) then
+ begin
+ ThreadHandle := OpenThreadFunc(THREAD_GET_CONTEXT or THREAD_QUERY_INFORMATION, False, ThreadID);
+ if ThreadHandle <> 0 then
+ try
+ Result := JclCreateThreadStackTrace(Raw, ThreadHandle);
+ finally
+ CloseHandle(ThreadHandle);
+ end;
+ end;
+ end;
+end;
+
//=== { TJclStackInfoItem } ==================================================
function TJclStackInfoItem.GetCallerAdr: Pointer;
@@ -4299,9 +4356,14 @@
function JclLastExceptFrameList: TJclExceptFrameList;
begin
- Result := GlobalStackList.LastExceptFrameList;
+ Result := GlobalStackList.LastExceptFrameList[GetCurrentThreadID];
end;
+function JclGetExceptFrameList(ThreadID: DWORD): TJclExceptFrameList;
+begin
+ Result := GlobalStackList.LastExceptFrameList[ThreadID];
+end;
+
procedure DoExceptFrameTrace;
begin
// Ignore first 2 levels; the First level is an undefined frame (I haven't a
@@ -4627,10 +4689,12 @@
Result := JclDebugThreadList.ThreadInfos[ThreadID];
end;
-procedure TJclDebugThread.HandleException;
+procedure TJclDebugThread.HandleException(Sender: TObject);
begin
- FSyncException := Exception(ExceptObject);
+ FSyncException := Sender;
try
+ if not Assigned(FSyncException) then
+ FSyncException := Exception(ExceptObject);
if Assigned(FSyncException) and not IsIgnoredException(FSyncException.ClassType) then
Synchronize(DoHandleException);
finally
@@ -4643,6 +4707,12 @@
type
TThreadAccess = class(TThread);
+ TThreadListRec = record
+ ThreadID: DWORD;
+ ThreadHandle: THandle;
+ end;
+ PThreadListRec = ^TThreadListRec;
+
constructor TJclDebugThreadList.Create;
begin
FLock := TJclCriticalSection.Create;
@@ -4651,7 +4721,18 @@
end;
destructor TJclDebugThreadList.Destroy;
+var
+ I: Integer;
+ ThreadRec: PThreadListRec;
begin
+ if Assigned(FList) then
+ begin
+ for I := FList.Count - 1 downto 0 do
+ begin
+ ThreadRec := PThreadListRec(FList.Objects[I]);
+ Dispose(ThreadRec);
+ end;
+ end;
FreeAndNil(FList);
FreeAndNil(FLock);
FreeAndNil(FReadLock);
@@ -4709,11 +4790,26 @@
end;
end;
-function TJclDebugThreadList.GetThreadIDs(Index: Integer): DWORD;
+function TJclDebugThreadList.GetThreadHandle(Index: Integer): DWORD;
begin
- Result := DWORD(FList.Objects[Index]);
+ FReadLock.Enter;
+ try
+ Result := PThreadListRec(FList.Objects[Index])^.ThreadHandle;
+ finally
+ FReadLock.Leave;
+ end;
end;
+function TJclDebugThreadList.GetThreadID(Index: Integer): DWORD;
+begin
+ FReadLock.Enter;
+ try
+ Result := PThreadListRec(FList.Objects[Index])^.ThreadID;
+ finally
+ FReadLock.Leave;
+ end;
+end;
+
function TJclDebugThreadList.GetThreadInfos(ThreadID: DWORD): string;
begin
Result := GetThreadValues(ThreadID, 2);
@@ -4730,14 +4826,14 @@
function ThreadName: string;
begin
- Result := FList[I];
+ Result := FList.Strings[I];
Delete(Result, 1, Pos('=', Result));
end;
begin
FReadLock.Enter;
try
- I := FList.IndexOfObject(Pointer(ThreadID));
+ I := IndexOfThreadID(ThreadID);
if I <> -1 then
begin
case Index of
@@ -4756,9 +4852,27 @@
end;
end;
+function TJclDebugThreadList.IndexOfThreadID(ThreadID: DWORD): Integer;
+var
+ I: Integer;
+ ThreadRec: PThreadListRec;
+begin
+ Result := -1;
+ for I := FList.Count - 1 downto 0 do
+ begin
+ ThreadRec := PThreadListRec(FList.Objects[I]);
+ if ThreadRec^.ThreadID = ThreadID then
+ begin
+ Result := I;
+ Break;
+ end;
+ end;
+end;
+
procedure TJclDebugThreadList.InternalRegisterThread(Thread: TThread; const ThreadName: string);
var
I: Integer;
+ ThreadRec: PThreadListRec;
function FormatInternalName: string;
begin
@@ -4768,12 +4882,15 @@
begin
FLock.Enter;
try
- I := FList.IndexOfObject(Pointer(Thread.ThreadID));
+ I := IndexOfThreadID(Thread.ThreadID);
if I = -1 then
begin
FReadLock.Enter;
try
- FList.AddObject(FormatInternalName, Pointer(Thread.ThreadID));
+ New(ThreadRec);
+ ThreadRec^.ThreadID := Thread.ThreadID;
+ ThreadRec^.ThreadHandle := Thread.Handle;
+ FList.AddObject(FormatInternalName, TObject(ThreadRec));
finally
FReadLock.Leave;
end;
@@ -4787,15 +4904,18 @@
procedure TJclDebugThreadList.InternalUnregisterThread(Thread: TThread);
var
I: Integer;
+ ThreadRec: PThreadListRec;
begin
FLock.Enter;
try
- I := FList.IndexOfObject(Pointer(Thread.ThreadID));
+ I := IndexOfThreadID(Thread.ThreadID);
if I <> -1 then
begin
DoThreadUnregistered(Thread);
FReadLock.Enter;
try
+ ThreadRec := PThreadListRec(FList.Objects[I]);
+ Dispose(ThreadRec);
FList.Delete(I);
finally
FReadLock.Leave;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-03-13 21:39:10
|
Revision: 1948
http://svn.sourceforge.net/jcl/?rev=1948&view=rev
Author: outchy
Date: 2007-03-13 14:39:07 -0700 (Tue, 13 Mar 2007)
Log Message:
-----------
Donation from Soeren Muehlbauer: stack traces for threads.
Modified Paths:
--------------
trunk/jcl/source/prototypes/win32api/WinNT.int
trunk/jcl/source/windows/JclDebug.pas
trunk/jcl/source/windows/JclWin32.pas
Modified: trunk/jcl/source/prototypes/win32api/WinNT.int
===================================================================
--- trunk/jcl/source/prototypes/win32api/WinNT.int 2007-02-22 08:29:11 UTC (rev 1947)
+++ trunk/jcl/source/prototypes/win32api/WinNT.int 2007-03-13 21:39:07 UTC (rev 1948)
@@ -653,7 +653,49 @@
SE_CREATE_GLOBAL_NAME = 'SeCreateGlobalPrivilege';
{$EXTERNALSYM SE_CREATE_GLOBAL_NAME}
+//
+// Thread Information Block (TIB)
+//
+type
+ NT_TIB32 = packed record
+ ExceptionList: DWORD;
+ StackBase: DWORD;
+ StackLimit: DWORD;
+ SubSystemTib: DWORD;
+ case Integer of
+ 0 : (
+ FiberData: DWORD;
+ ArbitraryUserPointer: DWORD;
+ Self: DWORD;
+ );
+ 1 : (
+ Version: DWORD;
+ );
+ end;
+ {$EXTERNALSYM NT_TIB32}
+ PNT_TIB32 = ^NT_TIB32;
+ {$EXTERNALSYM PNT_TIB32}
+
+ NT_TIB64 = packed record
+ ExceptionList: TJclAddr64;
+ StackBase: TJclAddr64;
+ StackLimit: TJclAddr64;
+ SubSystemTib: TJclAddr64;
+ case Integer of
+ 0 : (
+ FiberData: TJclAddr64;
+ ArbitraryUserPointer: TJclAddr64;
+ Self: TJclAddr64;
+ );
+ 1 : (
+ Version: DWORD;
+ );
+ end;
+ {$EXTERNALSYM NT_TIB64}
+ PNT_TIB64 = ^NT_TIB64;
+ {$EXTERNALSYM PNT_TIB64}
+
// line 2686
//
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-22 08:29:11 UTC (rev 1947)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-03-13 21:39:07 UTC (rev 1948)
@@ -24,6 +24,7 @@
{ Robert Rossmair (rrossmair) }
{ Andreas Hausladen (ahuser) }
{ Petr Vones (pvones) }
+{ Soeren Muehlbauer }
{ }
{**************************************************************************************************}
{ }
@@ -554,6 +555,8 @@
AFirstCaller: Pointer; ADelayedTrace: Boolean); overload;
constructor Create(ARaw: Boolean; AIgnoreLevels: DWORD;
AFirstCaller: Pointer; ADelayedTrace: Boolean; ABaseOfStack: Pointer); overload;
+ constructor Create(ARaw: Boolean; AIgnoreLevels: DWORD;
+ AFirstCaller: Pointer; ADelayedTrace: Boolean; ABaseOfStack, ATopOfStack: Pointer); overload;
destructor Destroy; override;
procedure ForceStackTracing;
procedure AddToStrings(Strings: TStrings; IncludeModuleName: Boolean = False;
@@ -571,7 +574,11 @@
DelayedTrace: Boolean): TJclStackInfoList; overload;
function JclCreateStackList(Raw: Boolean; AIgnoreLevels: DWORD; FirstCaller: Pointer;
DelayedTrace: Boolean; BaseOfStack: Pointer): TJclStackInfoList; overload;
+function JclCreateStackList(Raw: Boolean; AIgnoreLevels: DWORD; FirstCaller: Pointer;
+ DelayedTrace: Boolean; BaseOfStack, TopOfStack: Pointer): TJclStackInfoList; overload;
+function JclCreateThreadStackTrace(Raw: Boolean; const ThreadHandle: THandle): TJclStackInfoList;
+
function JclLastExceptStackList: TJclStackInfoList;
function JclLastExceptStackListToStrings(Strings: TStrings; IncludeModuleName: Boolean = False;
IncludeAddressOffset: Boolean = False; IncludeStartProcLineOffset: Boolean = False;
@@ -829,7 +836,8 @@
function GetStackTop: DWORD;
asm
- MOV EAX, FS:[4]
+ // TODO: 64 bit version
+ MOV EAX, FS:[0].NT_TIB32.StackBase
end;
{$IFDEF STACKFRAMES_ON}
@@ -3272,7 +3280,7 @@
end;
end
else
- with TJclStackInfoList.Create(False, 1, nil, False, nil) do
+ with TJclStackInfoList.Create(False, 1, nil, False, nil, nil) do
try
if Level < Count then
Result := Items[Level].CallerAdr;
@@ -3855,25 +3863,57 @@
function JclCreateStackList(Raw: Boolean; AIgnoreLevels: DWORD; FirstCaller: Pointer): TJclStackInfoList;
begin
- Result := TJclStackInfoList.Create(Raw, AIgnoreLevels, FirstCaller, False, nil);
+ Result := TJclStackInfoList.Create(Raw, AIgnoreLevels, FirstCaller, False, nil, nil);
GlobalStackList.AddObject(Result);
end;
function JclCreateStackList(Raw: Boolean; AIgnoreLevels: DWORD; FirstCaller: Pointer;
DelayedTrace: Boolean): TJclStackInfoList;
begin
- Result := TJclStackInfoList.Create(Raw, AIgnoreLevels, FirstCaller, DelayedTrace, nil);
+ Result := TJclStackInfoList.Create(Raw, AIgnoreLevels, FirstCaller, DelayedTrace, nil, nil);
GlobalStackList.AddObject(Result);
end;
function JclCreateStackList(Raw: Boolean; AIgnoreLevels: DWORD; FirstCaller: Pointer;
DelayedTrace: Boolean; BaseOfStack: Pointer): TJclStackInfoList;
begin
- Result := TJclStackInfoList.Create(Raw, AIgnoreLevels, FirstCaller, DelayedTrace, BaseOfStack);
+ Result := TJclStackInfoList.Create(Raw, AIgnoreLevels, FirstCaller, DelayedTrace, BaseOfStack, nil);
GlobalStackList.AddObject(Result);
end;
-//=== { TJclStackInfoItem 0 ==================================================
+function JclCreateStackList(Raw: Boolean; AIgnoreLevels: DWORD; FirstCaller: Pointer;
+ DelayedTrace: Boolean; BaseOfStack, TopOfStack: Pointer): TJclStackInfoList;
+begin
+ Result := TJclStackInfoList.Create(Raw, AIgnoreLevels, FirstCaller, DelayedTrace, BaseOfStack, TopOfStack);
+ GlobalStackList.AddObject(Result);
+end;
+
+function GetThreadFs(const Context: TContext; const Entry: TLDTEntry): DWORD;
+// TODO: 64 bit version
+var
+ FsBase: PNT_TIB32;
+begin
+ FsBase := PNT_TIB32((DWord(Entry.BaseHi) shl 24) or (DWord(Entry.BaseMid) shl 16) or DWord(Entry.BaseLow));
+ Result := FsBase^.StackBase;
+end;
+
+function JclCreateThreadStackTrace(Raw: Boolean; const ThreadHandle: THandle): TJclStackInfoList;
+var
+ C : CONTEXT;
+ Entry: TLDTEntry;
+begin
+ Result := nil;
+ FillChar(C, SizeOf(C), 0);
+ FillChar(Entry, SizeOf(Entry), #0);
+ C.ContextFlags := CONTEXT_FULL;
+ if GetThreadContext(ThreadHandle, C)
+ and GetThreadSelectorEntry(ThreadHandle, C.SegFs, Entry) then
+ Result := JclCreateStackList(True, DWORD(-1), Pointer(C.Eip), False, Pointer(C.Ebp),
+ Pointer(GetThreadFs(C, Entry)));
+end;
+
+//=== { TJclStackInfoItem } ==================================================
+
function TJclStackInfoItem.GetCallerAdr: Pointer;
begin
Result := Pointer(FStackInfo.CallerAdr);
@@ -3889,17 +3929,23 @@
constructor TJclStackInfoList.Create(ARaw: Boolean; AIgnoreLevels: DWORD;
AFirstCaller: Pointer);
begin
- Create(ARaw, AIgnoreLevels, AFirstCaller, False, nil);
+ Create(ARaw, AIgnoreLevels, AFirstCaller, False, nil, nil);
end;
constructor TJclStackInfoList.Create(ARaw: Boolean; AIgnoreLevels: DWORD;
AFirstCaller: Pointer; ADelayedTrace: Boolean);
begin
- Create(ARaw, AIgnoreLevels, AFirstCaller, ADelayedTrace, nil);
+ Create(ARaw, AIgnoreLevels, AFirstCaller, ADelayedTrace, nil, nil);
end;
constructor TJclStackInfoList.Create(ARaw: Boolean; AIgnoreLevels: DWORD;
AFirstCaller: Pointer; ADelayedTrace: Boolean; ABaseOfStack: Pointer);
+begin
+ Create(ARaw, AIgnoreLevels, AFirstCaller, ADelayedTrace, ABaseOfStack, nil);
+end;
+
+constructor TJclStackInfoList.Create(ARaw: Boolean; AIgnoreLevels: DWORD;
+ AFirstCaller: Pointer; ADelayedTrace: Boolean; ABaseOfStack, ATopOfStack: Pointer);
var
Item: TJclStackInfoItem;
begin
@@ -3911,7 +3957,10 @@
FStackOffset := 0;
FFrameEBP := ABaseOfStack;
- TopOfStack := GetStackTop;
+ if ATopOfStack = nil then
+ TopOfStack := GetStackTop
+ else
+ TopOfStack := Cardinal(ATopOfStack);
FModuleInfoList := GlobalModulesList.CreateModulesList;
if AFirstCaller <> nil then
Modified: trunk/jcl/source/windows/JclWin32.pas
===================================================================
--- trunk/jcl/source/windows/JclWin32.pas 2007-02-22 08:29:11 UTC (rev 1947)
+++ trunk/jcl/source/windows/JclWin32.pas 2007-03-13 21:39:07 UTC (rev 1948)
@@ -326,7 +326,7 @@
MAX_NATURAL_ALIGNMENT = SizeOf(ULONG);
{$EXTERNALSYM MAX_NATURAL_ALIGNMENT}
-// line 72
+// line\xB2 72
const
VER_SERVER_NT = DWORD($80000000);
@@ -853,7 +853,49 @@
SE_CREATE_GLOBAL_NAME = 'SeCreateGlobalPrivilege';
{$EXTERNALSYM SE_CREATE_GLOBAL_NAME}
+//
+// Thread Information Block (TIB)
+//
+type
+ NT_TIB32 = packed record
+ ExceptionList: DWORD;
+ StackBase: DWORD;
+ StackLimit: DWORD;
+ SubSystemTib: DWORD;
+ case Integer of
+ 0 : (
+ FiberData: DWORD;
+ ArbitraryUserPointer: DWORD;
+ Self: DWORD;
+ );
+ 1 : (
+ Version: DWORD;
+ );
+ end;
+ {$EXTERNALSYM NT_TIB32}
+ PNT_TIB32 = ^NT_TIB32;
+ {$EXTERNALSYM PNT_TIB32}
+
+ NT_TIB64 = packed record
+ ExceptionList: TJclAddr64;
+ StackBase: TJclAddr64;
+ StackLimit: TJclAddr64;
+ SubSystemTib: TJclAddr64;
+ case Integer of
+ 0 : (
+ FiberData: TJclAddr64;
+ ArbitraryUserPointer: TJclAddr64;
+ Self: TJclAddr64;
+ );
+ 1 : (
+ Version: DWORD;
+ );
+ end;
+ {$EXTERNALSYM NT_TIB64}
+ PNT_TIB64 = ^NT_TIB64;
+ {$EXTERNALSYM PNT_TIB64}
+
// line 2686
//
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-22 08:29:19
|
Revision: 1947
http://svn.sourceforge.net/jcl/?rev=1947&view=rev
Author: outchy
Date: 2007-02-22 00:29:11 -0800 (Thu, 22 Feb 2007)
Log Message:
-----------
Extracted runtime code of the repository expert
Introduction of CreateStdDialogs.dpr to generate standard exception dialogs: ExceptDlg.dfm ExceptDlg.pas ExceptDlgMail.dfm ExceptDlgMail.pas
Side note: regenerating ExceptDlg.pas makes examples successfully compiled.
Modified Paths:
--------------
trunk/jcl/experts/debug/dialog/ExceptDlg.dfm
trunk/jcl/experts/debug/dialog/ExceptDlg.pas
trunk/jcl/experts/debug/dialog/ExceptDlgMail.dfm
trunk/jcl/experts/debug/dialog/ExceptDlgMail.pas
trunk/jcl/experts/debug/dialog/JclOtaExcDlgRepository.pas
trunk/jcl/experts/debug/dialog/JclOtaRepositoryReg.pas
trunk/jcl/experts/debug/dialog/JclOtaRepositoryUtils.pas
trunk/jcl/experts/debug/dialog/JclOtaTemplates.pas
Added Paths:
-----------
trunk/jcl/experts/debug/dialog/CreateStdDialogs.dpr
Added: trunk/jcl/experts/debug/dialog/CreateStdDialogs.dpr
===================================================================
--- trunk/jcl/experts/debug/dialog/CreateStdDialogs.dpr (rev 0)
+++ trunk/jcl/experts/debug/dialog/CreateStdDialogs.dpr 2007-02-22 08:29:11 UTC (rev 1947)
@@ -0,0 +1,84 @@
+program CreateStdDialogs;
+
+{$APPTYPE CONSOLE}
+
+uses
+ SysUtils,
+ Classes,
+ JclBorlandTools,
+ JclOtaTemplates in 'JclOtaTemplates.pas',
+ JclOtaExcDlgRepository in 'JclOtaExcDlgRepository.pas';
+
+function LoadTemplate(const FileName: string): string;
+var
+ AFileStream: TFileStream;
+begin
+ AFileStream := TFileStream.Create(FileName, fmOpenRead, fmShareDenyWrite);
+ try
+ SetLength(Result, AFileStream.Size);
+ AFileStream.ReadBuffer(Result[1], AFileStream.Size);
+ finally
+ AFileStream.Free;
+ end;
+end;
+
+procedure SaveFile(const FileName, FileContent: string);
+var
+ AFileStream: TFileStream;
+begin
+ AFileStream := TFileStream.Create(FileName, fmOpenWrite, fmShareExclusive);
+ try
+ AFileStream.Size := 0;
+ AFileStream.Write(FileContent[1], Length(FileContent));
+ finally
+ AFileStream.Free;
+ end;
+end;
+
+var
+ Params: TJclOtaExcDlgParams;
+begin
+ try
+ Params := TJclOtaExcDlgParams.Create;
+ try
+ Params.ActivePersonality := bpDelphi32;
+ Params.FormName := 'ExceptionDialog';
+ Params.FormAncestor := 'TForm';
+ Params.ModalDialog := True;
+ Params.SendEMail := False;
+ Params.SizeableDialog := True;
+ Params.AutoScrollBars := True;
+ Params.DelayedTrace := True;
+ Params.HookDll := True;
+ Params.LogFile := True;
+ Params.LogFileName := '''filename.log''';
+ Params.OSInfo := True;
+ Params.ModuleList := True;
+ Params.ActiveControls := True;
+ Params.MainThreadOnly := False;
+ Params.TraceAllExceptions := False;
+ Params.StackList := True;
+ Params.RawData := True;
+ Params.ModuleName := True;
+ Params.ModuleOffset := True;
+ Params.CodeDetails := True;
+ Params.VirtualAddress := True;
+
+ SaveFile('ExceptDlg.pas', GetFinalSourceContent(ApplyTemplate(LoadTemplate('ExceptDlg.Delphi32.pas'), Params), 'ExceptDlg', 'ExceptionDialog', 'TForm'));
+ SaveFile('ExceptDlg.dfm', GetFinalSourceContent(ApplyTemplate(LoadTemplate('ExceptDlg.Delphi32.dfm'), Params), 'ExceptDlg', 'ExceptionDialog', 'TForm'));
+
+ Params.FormName := 'ExceptionDialogMail';
+ Params.SendEMail := True;
+ Params.EMailAddress := '''na...@do...''';
+ Params.EMailSubject := '''email subject''';
+
+ SaveFile('ExceptDlgMail.pas', GetFinalSourceContent(ApplyTemplate(LoadTemplate('ExceptDlg.Delphi32.pas'), Params), 'ExceptDlgMail', 'ExceptionDialogMail', 'TForm'));
+ SaveFile('ExceptDlgMail.dfm', GetFinalSourceContent(ApplyTemplate(LoadTemplate('ExceptDlg.Delphi32.dfm'), Params), 'ExceptDlgMail', 'ExceptionDialogMail', 'TForm'));
+ finally
+ Params.Free;
+ end;
+ except
+ on E:Exception do
+ Writeln(E.Classname, ': ', E.Message);
+ end;
+end.
Property changes on: trunk/jcl/experts/debug/dialog/CreateStdDialogs.dpr
___________________________________________________________________
Name: svn:keywords
+ URL HeadURL Author LastChangedBy Date LastChangedDate Rev Revision LastChangedRevision Id
Name: svn:eol-style
+ native
Modified: trunk/jcl/experts/debug/dialog/ExceptDlg.dfm
===================================================================
--- trunk/jcl/experts/debug/dialog/ExceptDlg.dfm 2007-02-21 22:34:14 UTC (rev 1946)
+++ trunk/jcl/experts/debug/dialog/ExceptDlg.dfm 2007-02-22 08:29:11 UTC (rev 1947)
@@ -1,9 +1,8 @@
object ExceptionDialog: TExceptionDialog
- Left = 363
- Top = 284
- ActiveControl = OkBtn
- AutoScroll = False
+ Left = 310
+ Top = 255
BorderIcons = [biSystemMenu]
+
Caption = 'ExceptionDialog'
ClientHeight = 255
ClientWidth = 432
@@ -26,14 +25,32 @@
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
- object Bevel1: TBevel
+ object BevelDetails: TBevel
Left = 3
Top = 91
- Width = 428
+ Width = 422
Height = 9
Anchors = [akLeft, akTop, akRight]
Shape = bsTopLine
end
+
+ object TextLabel: TMemo
+ Left = 56
+ Top = 8
+ Width = 281
+ Height = 75
+ Hint = 'Use Ctrl+C to copy the report to the clipboard'
+ Anchors = [akLeft, akTop, akRight]
+ BorderStyle = bsNone
+ Ctl3D = True
+ Lines.Strings = (
+ 'TextLabel')
+ ParentColor = True
+ ParentCtl3D = False
+ ReadOnly = True
+ TabOrder = 1
+ WantReturns = False
+ end
object OkBtn: TButton
Left = 352
Top = 4
@@ -43,13 +60,25 @@
Caption = '&OK'
Default = True
ModalResult = 1
- TabOrder = 1
+ TabOrder = 2
end
+ object DetailsBtn: TButton
+ Left = 352
+ Top = 60
+ Width = 75
+ Height = 25
+ Hint = 'Show or hide additional information|'
+ Anchors = [akTop, akRight]
+ Caption = '&Details'
+ Enabled = False
+ TabOrder = 3
+ OnClick = DetailsBtnClick
+ end
object DetailsMemo: TMemo
Left = 4
Top = 101
- Width = 424
- Height = 150
+ Width = 421
+ Height = 147
Anchors = [akLeft, akTop, akRight, akBottom]
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
@@ -60,37 +89,8 @@
ParentFont = False
ReadOnly = True
ScrollBars = ssBoth
- TabOrder = 3
+ TabOrder = 4
WantReturns = False
WordWrap = False
end
- object DetailsBtn: TButton
- Left = 352
- Top = 60
- Width = 75
- Height = 25
- Hint = 'Show or hide additional information|'
- Anchors = [akTop, akRight]
- Caption = '&Details'
- Enabled = False
- TabOrder = 2
- OnClick = DetailsBtnClick
- end
- object TextLabel: TMemo
- Left = 56
- Top = 8
- Width = 281
- Height = 75
- Hint = 'Use Ctrl+C to copy the report to the clipboard'
- Anchors = [akLeft, akTop, akRight]
- BorderStyle = bsNone
- Ctl3D = True
- Lines.Strings = (
- 'TextLabel')
- ParentColor = True
- ParentCtl3D = False
- ReadOnly = True
- TabOrder = 0
- WantReturns = False
- end
end
Modified: trunk/jcl/experts/debug/dialog/ExceptDlg.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/ExceptDlg.pas 2007-02-21 22:34:14 UTC (rev 1946)
+++ trunk/jcl/experts/debug/dialog/ExceptDlg.pas 2007-02-22 08:29:11 UTC (rev 1947)
@@ -1,74 +1,49 @@
-{**************************************************************************************************}
-{ }
-{ Project JEDI Code Library (JCL) }
-{ }
-{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); }
-{ you may not use this file except in compliance with the License. You may obtain a copy of the }
-{ License at http://www.mozilla.org/MPL/ }
-{ }
-{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF }
-{ ANY KIND, either express or implied. See the License for the specific language governing rights }
-{ and limitations under the License. }
-{ }
-{ The Original Code is ExceptDlg.pas. }
-{ }
-{ The Initial Developer of the Original Code is Petr Vones. }
-{ Portions created by Petr Vones are Copyright (C) of Petr Vones. }
-{ }
-{**************************************************************************************************}
-{ }
-{ Sample Application exception dialog replacement }
-{ }
-{ Last modified: $Date$ }
-{ }
-{**************************************************************************************************}
+{****************************************************************************}
+{ }
+{ Project JEDI Code Library (JCL) }
+{ }
+{ The contents of this file are subject to the Mozilla Public License }
+{ Version 1.1 (the "License"); you may not use this file except in }
+{ compliance with the License. You may obtain a copy of the License at }
+{ http://www.mozilla.org/MPL/ }
+{ }
+{ Software distributed under the License is distributed on an "AS IS" basis, }
+{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License }
+{ for the specific language governing rights and limitations under the }
+{ License. }
+{ }
+{ The Original Code is ExceptDlg.pas. }
+{ }
+{ The Initial Developer of the Original Code is Petr Vones. }
+{ Portions created by Petr Vones are Copyright (C) of Petr Vones. }
+{ }
+{****************************************************************************}
+{ }
+{ Last modified: $Date$ }
+{ }
+{****************************************************************************}
unit ExceptDlg;
-{$I jcl.inc}
-
interface
uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, ExtCtrls, JclDebug;
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
+ Dialogs, StdCtrls, ExtCtrls,
+ JclSysUtils, JclDebug;
const
UM_CREATEDETAILS = WM_USER + $100;
- ReportToLogEnabled = $00000001; // TExceptionDialog.Tag property
- DisableTextScrollbar = $00000002; // TExceptionDialog.Tag property
-
type
- TSimpleExceptionLog = class (TObject)
- private
- FLogFileHandle: THandle;
- FLogFileName: string;
- FLogWasEmpty: Boolean;
- function GetLogOpen: Boolean;
- protected
- function CreateDefaultFileName: string;
- public
- constructor Create(const ALogFileName: string = '');
- destructor Destroy; override;
- procedure CloseLog;
- procedure OpenLog;
- procedure Write(const Text: string; Indent: Integer = 0); overload;
- procedure Write(Strings: TStrings; Indent: Integer = 0); overload;
- procedure WriteStamp(SeparatorLen: Integer = 0);
- property LogFileName: string read FLogFileName;
- property LogOpen: Boolean read GetLogOpen;
- end;
-
- TExcDialogSystemInfo = (siStackList, siOsInfo, siModuleList, siActiveControls);
- TExcDialogSystemInfos = set of TExcDialogSystemInfo;
-
TExceptionDialog = class(TForm)
+
+ TextLabel: TMemo;
OkBtn: TButton;
- DetailsMemo: TMemo;
DetailsBtn: TButton;
- Bevel1: TBevel;
- TextLabel: TMemo;
+ BevelDetails: TBevel;
+ DetailsMemo: TMemo;
+
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
@@ -77,22 +52,22 @@
procedure FormDestroy(Sender: TObject);
procedure FormResize(Sender: TObject);
private
+ private
FDetailsVisible: Boolean;
FIsMainThead: Boolean;
FLastActiveControl: TWinControl;
FNonDetailsHeight: Integer;
FFullHeight: Integer;
- FSimpleLog: TSimpleExceptionLog;
- procedure CreateDetails;
- function GetReportAsText: string;
+ FSimpleLog: TJclSimpleLog;
procedure ReportToLog;
+ function GetReportAsText: string;
procedure SetDetailsVisible(const Value: Boolean);
procedure UMCreateDetails(var Message: TMessage); message UM_CREATEDETAILS;
protected
procedure AfterCreateDetails; dynamic;
procedure BeforeCreateDetails; dynamic;
- procedure CreateDetailInfo; dynamic;
- procedure CreateReport(const SystemInfo: TExcDialogSystemInfos);
+ procedure CreateDetails; dynamic;
+ procedure CreateReport;
function ReportMaxColumns: Integer; virtual;
function ReportNewBlockDelimiterChar: Char; virtual;
procedure NextDetailBlock;
@@ -102,9 +77,10 @@
class procedure ExceptionHandler(Sender: TObject; E: Exception);
class procedure ExceptionThreadHandler(Thread: TJclDebugThread);
class procedure ShowException(E: Exception; Thread: TJclDebugThread);
- property DetailsVisible: Boolean read FDetailsVisible write SetDetailsVisible;
+ property DetailsVisible: Boolean read FDetailsVisible
+ write SetDetailsVisible;
property ReportAsText: string read GetReportAsText;
- property SimpleLog: TSimpleExceptionLog read FSimpleLog;
+ property SimpleLog: TJclSimpleLog read FSimpleLog;
end;
TExceptionDialogClass = class of TExceptionDialog;
@@ -114,11 +90,11 @@
implementation
-{$R *.DFM}
+{$R *.dfm}
uses
ClipBrd, Math,
- JclBase, JclFileUtils, JclHookExcept, JclPeImage, JclStrings, JclSysInfo, JclSysUtils, JclWin32;
+ JclBase, JclFileUtils, JclHookExcept, JclPeImage, JclStrings, JclSysInfo, JclWin32;
resourcestring
RsAppError = '%s - application error';
@@ -127,7 +103,8 @@
RsStackList = 'Stack list, generated %s';
RsModulesList = 'List of loaded modules:';
RsOSVersion = 'System : %s %s, Version: %d.%d, Build: %x, "%s"';
- RsProcessor = 'Processor: %s, %s, %d MHz %s%s';
+ RsProcessor = 'Processor: %s, %s, %d MHz';
+ RsMemory = 'Memory: %d; free %d';
RsScreenRes = 'Display : %dx%d pixels, %d bpp';
RsActiveControl = 'Active Controls hierarchy:';
RsThread = 'Thread: %s';
@@ -136,29 +113,30 @@
var
ExceptionDialog: TExceptionDialog;
-//==================================================================================================
+//============================================================================
// Helper routines
-//==================================================================================================
+//============================================================================
-function GetBPP: Integer;
+// SortModulesListByAddressCompare
+// sorts module by address
+function SortModulesListByAddressCompare(List: TStringList;
+ Index1, Index2: Integer): Integer;
var
- DC: HDC;
+ Addr1, Addr2: Cardinal;
begin
- DC := GetDC(0);
- Result := GetDeviceCaps(DC, BITSPIXEL) * GetDeviceCaps(DC, PLANES);
- ReleaseDC(0, DC);
+ Addr1 := Cardinal(List.Objects[Index1]);
+ Addr2 := Cardinal(List.Objects[Index2]);
+ if Addr1 > Addr2 then
+ Result := 1
+ else if Addr1 < Addr2 then
+ Result := -1
+ else
+ Result := 0;
end;
-//--------------------------------------------------------------------------------------------------
-
-function SortModulesListByAddressCompare(List: TStringList; Index1, Index2: Integer): Integer;
-begin
- Result := Integer(List.Objects[Index1]) - Integer(List.Objects[Index2]);
-end;
-
-//==================================================================================================
+//============================================================================
// TApplication.HandleException method code hooking for exceptions from DLLs
-//==================================================================================================
+//============================================================================
// We need to catch the last line of TApplication.HandleException method:
// [...]
@@ -168,13 +146,14 @@
procedure HookShowException(ExceptObject: TObject; ExceptAddr: Pointer);
begin
- if JclValidateModuleAddress(ExceptAddr) and (ExceptObject.InstanceSize >= Exception.InstanceSize) then
+ if JclValidateModuleAddress(ExceptAddr)
+ and (ExceptObject.InstanceSize >= Exception.InstanceSize) then
TExceptionDialog.ExceptionHandler(nil, Exception(ExceptObject))
else
SysUtils.ShowException(ExceptObject, ExceptAddr);
end;
-//--------------------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------
function HookTApplicationHandleException: Boolean;
const
@@ -190,7 +169,7 @@
TApplicationHandleExceptionAddr, SysUtilsShowExceptionAddr: Pointer;
CALLInstruction: TCALLInstruction;
CallAddress: Pointer;
- OldProtect, Dummy: DWORD;
+ WrittenBytes: Cardinal;
function CheckAddressForOffset(Offset: Cardinal): Boolean;
begin
@@ -207,7 +186,7 @@
end;
except
Result := False;
- end;
+ end;
end;
begin
@@ -216,171 +195,55 @@
Result := CheckAddressForOffset(CallOffset) or CheckAddressForOffset(CallOffsetDebug);
if Result then
begin
- Result := VirtualProtect(CallAddress, sizeof(CallInstruction), PAGE_EXECUTE_READWRITE, OldProtect);
- if Result then
- try
- CALLInstruction.Address := Integer(@HookShowException) - Integer(CallAddress) - SizeOf(CALLInstruction);
- PCALLInstruction(CallAddress)^ := CALLInstruction;
- if Result then
- FlushInstructionCache(GetCurrentProcess, CallAddress, SizeOf(CALLInstruction));
- finally
- VirtualProtect(CallAddress, sizeof(CallInstruction), OldProtect, Dummy);
- end;
+ CALLInstruction.Address := Integer(@HookShowException) - Integer(CallAddress) - SizeOf(CALLInstruction);
+ Result := WriteProtectedMemory(CallAddress, @CallInstruction, SizeOf(CallInstruction), WrittenBytes);
end;
end;
-//==================================================================================================
-// TSimpleExceptionLog
-//==================================================================================================
+//============================================================================
+// Exception dialog with Send
+//============================================================================
-procedure TSimpleExceptionLog.CloseLog;
-begin
- if LogOpen then
- begin
- CloseHandle(FLogFileHandle);
- FLogFileHandle := INVALID_HANDLE_VALUE;
- FLogWasEmpty := False;
- end;
-end;
+var
+ ExceptionShowing: Boolean;
-//--------------------------------------------------------------------------------------------------
+//=== { TExceptionDialog } ===============================================
-constructor TSimpleExceptionLog.Create(const ALogFileName: string);
+procedure TExceptionDialog.AfterCreateDetails;
begin
- if ALogFileName = '' then
- FLogFileName := CreateDefaultFileName
- else
- FLogFileName := ALogFileName;
- FLogFileHandle := INVALID_HANDLE_VALUE;
-end;
-//--------------------------------------------------------------------------------------------------
-
-function TSimpleExceptionLog.CreateDefaultFileName: string;
-begin
- Result := PathExtractFileDirFixed(ParamStr(0)) + PathExtractFileNameNoExt(ParamStr(0)) + '_Err.log';
end;
-//--------------------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------
-destructor TSimpleExceptionLog.Destroy;
+procedure TExceptionDialog.BeforeCreateDetails;
begin
- CloseLog;
- inherited;
-end;
-//--------------------------------------------------------------------------------------------------
-
-function TSimpleExceptionLog.GetLogOpen: Boolean;
-begin
- Result := FLogFileHandle <> INVALID_HANDLE_VALUE;
end;
-//--------------------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------
-procedure TSimpleExceptionLog.OpenLog;
+function TExceptionDialog.ReportMaxColumns: Integer;
begin
- if not LogOpen then
- begin
- FLogFileHandle := CreateFile(PChar(FLogFileName), GENERIC_WRITE, FILE_SHARE_READ, nil,
- OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
- if LogOpen then
- FLogWasEmpty := SetFilePointer(FLogFileHandle, 0, nil, FILE_END) = 0;
- end
- else
- FLogWasEmpty := False;
+ Result := 78;
end;
-//--------------------------------------------------------------------------------------------------
-procedure TSimpleExceptionLog.Write(const Text: string; Indent: Integer);
-var
- S: string;
- SL: TStringList;
- I: Integer;
-begin
- if LogOpen then
- begin
- SL := TStringList.Create;
- try
- SL.Text := Text;
- for I := 0 to SL.Count - 1 do
- begin
- S := StringOfChar(' ', Indent) + StrEnsureSuffix(AnsiCrLf, TrimRight(SL[I]));
- FileWrite(Integer(FLogFileHandle), Pointer(S)^, Length(S));
- end;
- finally
- SL.Free;
- end;
- end;
-end;
+//----------------------------------------------------------------------------
-//--------------------------------------------------------------------------------------------------
-
-procedure TSimpleExceptionLog.Write(Strings: TStrings; Indent: Integer);
-var
- I: Integer;
-begin
- for I := 0 to Strings.Count - 1 do
- Write(Strings[I], Indent);
-end;
-
-//--------------------------------------------------------------------------------------------------
-
-procedure TSimpleExceptionLog.WriteStamp(SeparatorLen: Integer);
-begin
- if SeparatorLen = 0 then
- SeparatorLen := 100;
- SeparatorLen := Max(SeparatorLen, 20);
- OpenLog;
- if not FLogWasEmpty then
- Write(AnsiCrLf);
- Write(StrRepeat('=', SeparatorLen));
- Write(Format('= %-*s =', [SeparatorLen - 4, DateTimeToStr(Now)]));
- Write(StrRepeat('=', SeparatorLen));
-end;
-
-//==================================================================================================
-// Exception dialog
-//==================================================================================================
-
-var
- ExceptionShowing: Boolean;
-
-{ TExceptionDialog }
-
-procedure TExceptionDialog.AfterCreateDetails;
-begin
-end;
-
-//--------------------------------------------------------------------------------------------------
-
-procedure TExceptionDialog.BeforeCreateDetails;
-begin
-end;
-
-//--------------------------------------------------------------------------------------------------
-
procedure TExceptionDialog.CopyReportToClipboard;
begin
ClipBoard.AsText := ReportAsText;
end;
-//--------------------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------
-procedure TExceptionDialog.CreateDetailInfo;
-begin
- CreateReport([siStackList, siOsInfo, siModuleList, siActiveControls]);
-end;
-
-//--------------------------------------------------------------------------------------------------
-
procedure TExceptionDialog.CreateDetails;
begin
Screen.Cursor := crHourGlass;
DetailsMemo.Lines.BeginUpdate;
try
- CreateDetailInfo;
+ CreateReport;
ReportToLog;
DetailsMemo.SelStart := 0;
SendMessage(DetailsMemo.Handle, EM_SCROLLCARET, 0, 0);
@@ -394,53 +257,69 @@
end;
end;
-//--------------------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------
-procedure TExceptionDialog.CreateReport(const SystemInfo: TExcDialogSystemInfos);
-const
- MMXText: array[Boolean] of PChar = ('', 'MMX');
- FDIVText: array[Boolean] of PChar = (' [FDIV Bug]', '');
+procedure TExceptionDialog.CreateReport;
var
SL: TStringList;
I: Integer;
ModuleName: TFileName;
- CpuInfo: TCpuInfo;
- C: TWinControl;
NtHeaders32: PImageNtHeaders32;
NtHeaders64: PImageNtHeaders64;
ModuleBase: Cardinal;
ImageBaseStr: string;
+ C: TWinControl;
+ CpuInfo: TCpuInfo;
+ ProcessorDetails: string;
StackList: TJclStackInfoList;
PETarget: TJclPeTarget;
begin
SL := TStringList.Create;
try
// Stack list
- if siStackList in SystemInfo then
+ StackList := JclLastExceptStackList;
+ if Assigned(StackList) then
begin
- StackList := JclLastExceptStackList;
- if Assigned(StackList) then
- begin
- DetailsMemo.Lines.Add(Format(RsStackList, [DateTimeToStr(StackList.TimeStamp)]));
- StackList.AddToStrings(DetailsMemo.Lines, False, True, True);
- NextDetailBlock;
- end;
+ DetailsMemo.Lines.Add(Format(RsStackList, [DateTimeToStr(StackList.TimeStamp)]));
+ StackList.AddToStrings(DetailsMemo.Lines, True, True, True, True);
+ NextDetailBlock;
end;
+
+
// System and OS information
- if siOsInfo in SystemInfo then
+ DetailsMemo.Lines.Add(Format(RsOSVersion, [GetWindowsVersionString, NtProductTypeString,
+ Win32MajorVersion, Win32MinorVersion, Win32BuildNumber, Win32CSDVersion]));
+ GetCpuInfo(CpuInfo);
+ with CpuInfo do
begin
- DetailsMemo.Lines.Add(Format(RsOSVersion, [GetWindowsVersionString, NtProductTypeString,
- Win32MajorVersion, Win32MinorVersion, Win32BuildNumber, Win32CSDVersion]));
- GetCpuInfo(CpuInfo);
- with CpuInfo do
- DetailsMemo.Lines.Add(Format(RsProcessor, [Manufacturer, CpuName,
- RoundFrequency(FrequencyInfo.NormFreq),
- MMXText[MMX], FDIVText[IsFDIVOK]]));
- DetailsMemo.Lines.Add(Format(RsScreenRes, [Screen.Width, Screen.Height, GetBPP]));
- NextDetailBlock;
+ ProcessorDetails := Format(RsProcessor, [Manufacturer, CpuName,
+ RoundFrequency(FrequencyInfo.NormFreq)]);
+ if not IsFDIVOK then
+ ProcessorDetails := ProcessorDetails + ' [FDIV Bug]';
+ if ExMMX then
+ ProcessorDetails := ProcessorDetails + ' MMXex'
+ else if MMX then
+ ProcessorDetails := ProcessorDetails + ' MMX';
+ if SSE > 0 then
+ ProcessorDetails := Format('%s SSE%d', [ProcessorDetails, SSE]);
+ if Ex3DNow then
+ ProcessorDetails := ProcessorDetails + ' 3DNow!ex'
+ else if _3DNow then
+ ProcessorDetails := ProcessorDetails + ' 3DNow!';
+ if Is64Bits then
+ ProcessorDetails := ProcessorDetails + ' 64 bits';
+ if DEPCapable then
+ ProcessorDetails := ProcessorDetails + ' DEP';
end;
+ DetailsMemo.Lines.Add(ProcessorDetails);
+ DetailsMemo.Lines.Add(Format(RsMemory, [GetTotalPhysicalMemory div 1024 div 1024,
+ GetFreePhysicalMemory div 1024 div 1024]));
+ DetailsMemo.Lines.Add(Format(RsScreenRes, [Screen.Width, Screen.Height, GetBPP]));
+ NextDetailBlock;
+
+
// Modules list
- if (siModuleList in SystemInfo) and LoadedModulesList(SL, GetCurrentProcessId) then
+ if LoadedModulesList(SL, GetCurrentProcessId) then
begin
DetailsMemo.Lines.Add(RsModulesList);
SL.CustomSort(SortModulesListByAddressCompare);
@@ -478,8 +357,10 @@
end;
NextDetailBlock;
end;
+
+
// Active controls
- if (siActiveControls in SystemInfo) and (FLastActiveControl <> nil) then
+ if (FLastActiveControl <> nil) then
begin
DetailsMemo.Lines.Add(RsActiveControl);
C := FLastActiveControl;
@@ -490,6 +371,7 @@
end;
NextDetailBlock;
end;
+
finally
SL.Free;
end;
@@ -508,7 +390,7 @@
begin
if ExceptionShowing then
Application.ShowException(E)
- else
+ else if Assigned(E) and not IsIgnoredException(E.ClassType) then
begin
ExceptionShowing := True;
try
@@ -540,7 +422,7 @@
procedure TExceptionDialog.FormCreate(Sender: TObject);
begin
- FSimpleLog := TSimpleExceptionLog.Create;
+ FSimpleLog := TJclSimpleLog.Create('filename.log');
FFullHeight := ClientHeight;
DetailsVisible := False;
Caption := Format(RsAppError, [Application.Title]);
@@ -588,7 +470,7 @@
if FIsMainThead and (GetWindowThreadProcessId(Handle, nil) = MainThreadID) then
PostMessage(Handle, UM_CREATEDETAILS, 0, 0)
else
- CreateDetails;
+ CreateReport;
end;
//--------------------------------------------------------------------------------------------------
@@ -607,13 +489,6 @@
//--------------------------------------------------------------------------------------------------
-function TExceptionDialog.ReportMaxColumns: Integer;
-begin
- Result := 100;
-end;
-
-//--------------------------------------------------------------------------------------------------
-
function TExceptionDialog.ReportNewBlockDelimiterChar: Char;
begin
Result := '-';
@@ -623,14 +498,11 @@
procedure TExceptionDialog.ReportToLog;
begin
- if Tag and ReportToLogEnabled <> 0 then
- begin
- FSimpleLog.WriteStamp(ReportMaxColumns);
- try
- FSimpleLog.Write(ReportAsText);
- finally
- FSimpleLog.CloseLog;
- end;
+ FSimpleLog.WriteStamp(ReportMaxColumns);
+ try
+ FSimpleLog.Write(ReportAsText);
+ finally
+ FSimpleLog.CloseLog;
end;
end;
@@ -656,7 +528,7 @@
DetailsCaption := DetailsCaption + ' >>';
if FNonDetailsHeight = 0 then
begin
- ClientHeight := Bevel1.Top;
+ ClientHeight := BevelDetails.Top;
FNonDetailsHeight := Height;
end
else
@@ -673,7 +545,7 @@
class procedure TExceptionDialog.ShowException(E: Exception; Thread: TJclDebugThread);
begin
if ExceptionDialog = nil then
- ExceptionDialog := ExceptionDialogClass.Create(Application);
+ ExceptionDialog := TExceptionDialogClass.Create(Application);
try
with ExceptionDialog do
begin
@@ -706,14 +578,11 @@
procedure TExceptionDialog.UpdateTextLabelScrollbars;
begin
- if Tag and DisableTextScrollbar = 0 then
- begin
- Canvas.Font := TextLabel.Font;
- if TextLabel.Lines.Count * Canvas.TextHeight('Wg') > TextLabel.ClientHeight then
- TextLabel.ScrollBars := ssVertical
- else
- TextLabel.ScrollBars := ssNone;
- end;
+ Canvas.Font := TextLabel.Font;
+ if TextLabel.Lines.Count * Canvas.TextHeight('Wg') > TextLabel.ClientHeight then
+ TextLabel.ScrollBars := ssVertical
+ else
+ TextLabel.ScrollBars := ssNone;
end;
//==================================================================================================
@@ -722,16 +591,16 @@
procedure InitializeHandler;
begin
+
+
+
JclStackTrackingOptions := JclStackTrackingOptions + [stRawMode];
- {$IFNDEF HOOK_DLL_EXCEPTIONS}
JclStackTrackingOptions := JclStackTrackingOptions + [stStaticModuleList];
- {$ENDIF HOOK_DLL_EXCEPTIONS}
+ JclStackTrackingOptions := JclStackTrackingOptions + [stDelayedTrace];
JclDebugThreadList.OnSyncException := TExceptionDialog.ExceptionThreadHandler;
JclStartExceptionTracking;
- {$IFDEF HOOK_DLL_EXCEPTIONS}
if HookTApplicationHandleException then
JclTrackExceptionsFromLibraries;
- {$ENDIF HOOK_DLL_EXCEPTIONS}
Application.OnException := TExceptionDialog.ExceptionHandler;
end;
Modified: trunk/jcl/experts/debug/dialog/ExceptDlgMail.dfm
===================================================================
--- trunk/jcl/experts/debug/dialog/ExceptDlgMail.dfm 2007-02-21 22:34:14 UTC (rev 1946)
+++ trunk/jcl/experts/debug/dialog/ExceptDlgMail.dfm 2007-02-22 08:29:11 UTC (rev 1947)
@@ -1,9 +1,9 @@
-object ExceptionDialogMail: TExceptionDialogMail
+object ExceptionDialog: TExceptionDialog
Left = 310
Top = 255
- AutoScroll = False
BorderIcons = [biSystemMenu]
- Caption = 'ExceptionDialogMail'
+
+ Caption = 'ExceptionDialog'
ClientHeight = 255
ClientWidth = 432
Color = clBtnFace
@@ -25,7 +25,7 @@
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
- object Bevel1: TBevel
+ object BevelDetails: TBevel
Left = 3
Top = 91
Width = 422
@@ -33,6 +33,7 @@
Anchors = [akLeft, akTop, akRight]
Shape = bsTopLine
end
+
object SendBtn: TButton
Left = 351
Top = 32
Modified: trunk/jcl/experts/debug/dialog/ExceptDlgMail.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/ExceptDlgMail.pas 2007-02-21 22:34:14 UTC (rev 1946)
+++ trunk/jcl/experts/debug/dialog/ExceptDlgMail.pas 2007-02-22 08:29:11 UTC (rev 1947)
@@ -1,28 +1,27 @@
-{**************************************************************************************************}
-{ }
-{ Project JEDI Code Library (JCL) }
-{ }
-{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); }
-{ you may not use this file except in compliance with the License. You may obtain a copy of the }
-{ License at http://www.mozilla.org/MPL/ }
-{ }
-{ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF }
-{ ANY KIND, either express or implied. See the License for the specific language governing rights }
-{ and limitations under the License. }
-{ }
-{ The Original Code is ExceptDlg.pas. }
-{ }
-{ The Initial Developer of the Original Code is Petr Vones. }
-{ Portions created by Petr Vones are Copyright (C) of Petr Vones. }
-{ }
-{**************************************************************************************************}
-{ }
-{ Sample Application exception dialog replacement with sending report by the default mail client }
-{ functionality }
-{ }
-{ Last modified: $Date$ }
-{ }
-{**************************************************************************************************}
+{****************************************************************************}
+{ }
+{ Project JEDI Code Library (JCL) }
+{ }
+{ The contents of this file are subject to the Mozilla Public License }
+{ Version 1.1 (the "License"); you may not use this file except in }
+{ compliance with the License. You may obtain a copy of the License at }
+{ http://www.mozilla.org/MPL/ }
+{ }
+{ Software distributed under the License is distributed on an "AS IS" basis, }
+{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License }
+{ for the specific language governing rights and limitations under the }
+{ License. }
+{ }
+{ The Original Code is ExceptDlg.pas. }
+{ }
+{ The Initial Developer of the Original Code is Petr Vones. }
+{ Portions created by Petr Vones are Copyright (C) of Petr Vones. }
+{ }
+{****************************************************************************}
+{ }
+{ Last modified: $Date$ }
+{ }
+{****************************************************************************}
unit ExceptDlgMail;
@@ -30,44 +29,19 @@
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ExtCtrls, JclMapi, JclDebug;
+ Dialogs, StdCtrls, ExtCtrls,
+ JclSysUtils, JclMapi, JclDebug;
const
UM_CREATEDETAILS = WM_USER + $100;
- ReportToLogEnabled = $00000001; // TExceptionDialog.Tag property
- DisableTextScrollbar = $00000002; // TExceptionDialog.Tag property
-
type
- TSimpleExceptionLog = class (TObject)
- private
- FLogFileHandle: THandle;
- FLogFileName: string;
- FLogWasEmpty: Boolean;
- function GetLogOpen: Boolean;
- protected
- function CreateDefaultFileName: string;
- public
- constructor Create(const ALogFileName: string = '');
- destructor Destroy; override;
- procedure CloseLog;
- procedure OpenLog;
- procedure Write(const Text: string; Indent: Integer = 0); overload;
- procedure Write(Strings: TStrings; Indent: Integer = 0); overload;
- procedure WriteStamp(SeparatorLen: Integer = 0);
- property LogFileName: string read FLogFileName;
- property LogOpen: Boolean read GetLogOpen;
- end;
-
- TExcDialogSystemInfo = (siStackList, siOsInfo, siModuleList, siActiveControls);
- TExcDialogSystemInfos = set of TExcDialogSystemInfo;
-
- TExceptionDialogMail = class(TForm)
+ TExceptionDialog = class(TForm)
SendBtn: TButton;
TextLabel: TMemo;
OkBtn: TButton;
DetailsBtn: TButton;
- Bevel1: TBevel;
+ BevelDetails: TBevel;
DetailsMemo: TMemo;
procedure SendBtnClick(Sender: TObject);
procedure FormPaint(Sender: TObject);
@@ -84,17 +58,16 @@
FLastActiveControl: TWinControl;
FNonDetailsHeight: Integer;
FFullHeight: Integer;
- FSimpleLog: TSimpleExceptionLog;
- procedure CreateDetails;
- function GetReportAsText: string;
+ FSimpleLog: TJclSimpleLog;
procedure ReportToLog;
+ function GetReportAsText: string;
procedure SetDetailsVisible(const Value: Boolean);
procedure UMCreateDetails(var Message: TMessage); message UM_CREATEDETAILS;
protected
procedure AfterCreateDetails; dynamic;
procedure BeforeCreateDetails; dynamic;
- procedure CreateDetailInfo; dynamic;
- procedure CreateReport(const SystemInfo: TExcDialogSystemInfos);
+ procedure CreateDetails; dynamic;
+ procedure CreateReport;
function ReportMaxColumns: Integer; virtual;
function ReportNewBlockDelimiterChar: Char; virtual;
procedure NextDetailBlock;
@@ -104,15 +77,16 @@
class procedure ExceptionHandler(Sender: TObject; E: Exception);
class procedure ExceptionThreadHandler(Thread: TJclDebugThread);
class procedure ShowException(E: Exception; Thread: TJclDebugThread);
- property DetailsVisible: Boolean read FDetailsVisible write SetDetailsVisible;
+ property DetailsVisible: Boolean read FDetailsVisible
+ write SetDetailsVisible;
property ReportAsText: string read GetReportAsText;
- property SimpleLog: TSimpleExceptionLog read FSimpleLog;
+ property SimpleLog: TJclSimpleLog read FSimpleLog;
end;
- TExceptionDialogMailClass = class of TExceptionDialogMail;
+ TExceptionDialogClass = class of TExceptionDialog;
var
- ExceptionDialogMailClass: TExceptionDialogMailClass = TExceptionDialogMail;
+ ExceptionDialogClass: TExceptionDialogClass = TExceptionDialog;
implementation
@@ -120,7 +94,7 @@
uses
ClipBrd, Math,
- JclBase, JclFileUtils, JclHookExcept, JclPeImage, JclStrings, JclSysInfo, JclSysUtils;
+ JclBase, JclFileUtils, JclHookExcept, JclPeImage, JclStrings, JclSysInfo, JclWin32;
resourcestring
RsAppError = '%s - application error';
@@ -129,41 +103,40 @@
RsStackList = 'Stack list, generated %s';
RsModulesList = 'List of loaded modules:';
RsOSVersion = 'System : %s %s, Version: %d.%d, Build: %x, "%s"';
- RsProcessor = 'Processor: %s, %s, %d MHz %s%s';
+ RsProcessor = 'Processor: %s, %s, %d MHz';
+ RsMemory = 'Memory: %d; free %d';
RsScreenRes = 'Display : %dx%d pixels, %d bpp';
RsActiveControl = 'Active Controls hierarchy:';
RsThread = 'Thread: %s';
RsMissingVersionInfo = '(no version info)';
- RsSendBugReportAddress = 'bug...@yo...';
- RsSendBugReportSubject = 'Bug Report';
-
var
- ExceptionDialogMail: TExceptionDialogMail;
+ ExceptionDialog: TExceptionDialog;
-//==================================================================================================
+//============================================================================
// Helper routines
-//==================================================================================================
+//============================================================================
-function GetBPP: Integer;
+// SortModulesListByAddressCompare
+// sorts module by address
+function SortModulesListByAddressCompare(List: TStringList;
+ Index1, Index2: Integer): Integer;
var
- DC: HDC;
+ Addr1, Addr2: Cardinal;
begin
- DC := GetDC(0);
- Result := GetDeviceCaps(DC, BITSPIXEL) * GetDeviceCaps(DC, PLANES);
- ReleaseDC(0, DC);
+ Addr1 := Cardinal(List.Objects[Index1]);
+ Addr2 := Cardinal(List.Objects[Index2]);
+ if Addr1 > Addr2 then
+ Result := 1
+ else if Addr1 < Addr2 then
+ Result := -1
+ else
+ Result := 0;
end;
-//--------------------------------------------------------------------------------------------------
-
-function SortModulesListByAddressCompare(List: TStringList; Index1, Index2: Integer): Integer;
-begin
- Result := Integer(List.Objects[Index1]) - Integer(List.Objects[Index2]);
-end;
-
-//==================================================================================================
+//============================================================================
// TApplication.HandleException method code hooking for exceptions from DLLs
-//==================================================================================================
+//============================================================================
// We need to catch the last line of TApplication.HandleException method:
// [...]
@@ -173,13 +146,14 @@
procedure HookShowException(ExceptObject: TObject; ExceptAddr: Pointer);
begin
- if JclValidateModuleAddress(ExceptAddr) and (ExceptObject.InstanceSize >= Exception.InstanceSize) then
- TExceptionDialogMail.ExceptionHandler(nil, Exception(ExceptObject))
+ if JclValidateModuleAddress(ExceptAddr)
+ and (ExceptObject.InstanceSize >= Exception.InstanceSize) then
+ TExceptionDialog.ExceptionHandler(nil, Exception(ExceptObject))
else
SysUtils.ShowException(ExceptObject, ExceptAddr);
end;
-//--------------------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------
function HookTApplicationHandleException: Boolean;
const
@@ -195,7 +169,7 @@
TApplicationHandleExceptionAddr, SysUtilsShowExceptionAddr: Pointer;
CALLInstruction: TCALLInstruction;
CallAddress: Pointer;
- OldProtect, Dummy: DWORD;
+ WrittenBytes: Cardinal;
function CheckAddressForOffset(Offset: Cardinal): Boolean;
begin
@@ -212,7 +186,7 @@
end;
except
Result := False;
- end;
+ end;
end;
begin
@@ -221,193 +195,75 @@
Result := CheckAddressForOffset(CallOffset) or CheckAddressForOffset(CallOffsetDebug);
if Result then
begin
- Result := VirtualProtect(CallAddress, sizeof(CallInstruction), PAGE_EXECUTE_READWRITE, OldProtect);
- if Result then
- try
- CALLInstruction.Address := Integer(@HookShowException) - Integer(CallAddress) - SizeOf(CALLInstruction);
- PCALLInstruction(CallAddress)^ := CALLInstruction;
- if Result then
- FlushInstructionCache(GetCurrentProcess, CallAddress, SizeOf(CALLInstruction));
- finally
- VirtualProtect(CallAddress, sizeof(CallInstruction), OldProtect, Dummy);
- end;
+ CALLInstruction.Address := Integer(@HookShowException) - Integer(CallAddress) - SizeOf(CALLInstruction);
+ Result := WriteProtectedMemory(CallAddress, @CallInstruction, SizeOf(CallInstruction), WrittenBytes);
end;
end;
-//==================================================================================================
-// TSimpleExceptionLog
-//==================================================================================================
-
-procedure TSimpleExceptionLog.CloseLog;
-begin
- if LogOpen then
- begin
- CloseHandle(FLogFileHandle);
- FLogFileHandle := INVALID_HANDLE_VALUE;
- FLogWasEmpty := False;
- end;
-end;
-
-//--------------------------------------------------------------------------------------------------
-
-constructor TSimpleExceptionLog.Create(const ALogFileName: string);
-begin
- if ALogFileName = '' then
- FLogFileName := CreateDefaultFileName
- else
- FLogFileName := ALogFileName;
- FLogFileHandle := INVALID_HANDLE_VALUE;
-end;
-
-//--------------------------------------------------------------------------------------------------
-
-function TSimpleExceptionLog.CreateDefaultFileName: string;
-begin
- Result := PathExtractFileDirFixed(ParamStr(0)) + PathExtractFileNameNoExt(ParamStr(0)) + '_Err.log';
-end;
-
-//--------------------------------------------------------------------------------------------------
-
-destructor TSimpleExceptionLog.Destroy;
-begin
- CloseLog;
- inherited;
-end;
-
-//--------------------------------------------------------------------------------------------------
-
-function TSimpleExceptionLog.GetLogOpen: Boolean;
-begin
- Result := FLogFileHandle <> INVALID_HANDLE_VALUE;
-end;
-
-//--------------------------------------------------------------------------------------------------
-
-procedure TSimpleExceptionLog.OpenLog;
-begin
- if not LogOpen then
- begin
- FLogFileHandle := CreateFile(PChar(FLogFileName), GENERIC_WRITE, FILE_SHARE_READ, nil,
- OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
- if LogOpen then
- FLogWasEmpty := SetFilePointer(FLogFileHandle, 0, nil, FILE_END) = 0;
- end
- else
- FLogWasEmpty := False;
-end;
-
-//--------------------------------------------------------------------------------------------------
-
-procedure TSimpleExceptionLog.Write(const Text: string; Indent: Integer);
-var
- S: string;
- SL: TStringList;
- I: Integer;
-begin
- if LogOpen then
- begin
- SL := TStringList.Create;
- try
- SL.Text := Text;
- for I := 0 to SL.Count - 1 do
- begin
- S := StringOfChar(' ', Indent) + StrEnsureSuffix(AnsiCrLf, TrimRight(SL[I]));
- FileWrite(Integer(FLogFileHandle), Pointer(S)^, Length(S));
- end;
- finally
- SL.Free;
- end;
- end;
-end;
-
-//--------------------------------------------------------------------------------------------------
-
-procedure TSimpleExceptionLog.Write(Strings: TStrings; Indent: Integer);
-var
- I: Integer;
-begin
- for I := 0 to Strings.Count - 1 do
- Write(Strings[I], Indent);
-end;
-
-//--------------------------------------------------------------------------------------------------
-
-procedure TSimpleExceptionLog.WriteStamp(SeparatorLen: Integer);
-begin
- if SeparatorLen = 0 then
- SeparatorLen := 100;
- SeparatorLen := Max(SeparatorLen, 20);
- OpenLog;
- if not FLogWasEmpty then
- Write(AnsiCrLf);
- Write(StrRepeat('=', SeparatorLen));
- Write(Format('= %-*s =', [SeparatorLen - 4, DateTimeToStr(Now)]));
- Write(StrRepeat('=', SeparatorLen));
-end;
-
-//==================================================================================================
+//============================================================================
// Exception dialog with Send
-//==================================================================================================
+//============================================================================
var
ExceptionShowing: Boolean;
-{ TExceptionDialogMail }
+//=== { TExceptionDialog } ===============================================
-procedure TExceptionDialogMail.AfterCreateDetails;
+procedure TExceptionDialog.AfterCreateDetails;
begin
SendBtn.Enabled := True;
end;
-procedure TExceptionDialogMail.BeforeCreateDetails;
+//----------------------------------------------------------------------------
+
+procedure TExceptionDialog.BeforeCreateDetails;
begin
SendBtn.Enabled := False;
end;
-function TExceptionDialogMail.ReportMaxColumns: Integer;
+//----------------------------------------------------------------------------
+
+function TExceptionDialog.ReportMaxColumns: Integer;
begin
Result := 78;
end;
-procedure TExceptionDialogMail.SendBtnClick(Sender: TObject);
+//----------------------------------------------------------------------------
+
+procedure TExceptionDialog.SendBtnClick(Sender: TObject);
begin
with TJclEmail.Create do
try
ParentWnd := Application.Handle;
- Recipients.Add(RsSendBugReportAddress);
- Subject := RsSendBugReportSubject;
+ Recipients.Add('na...@do...');
+ Subject := 'email subject';
Body := ReportAsText;
SaveTaskWindows;
try
Send(True);
finally
RestoreTaskWindows;
- end;
+ end;
finally
Free;
end;
end;
-procedure TExceptionDialogMail.CopyReportToClipboard;
+//----------------------------------------------------------------------------
+
+procedure TExceptionDialog.CopyReportToClipboard;
begin
ClipBoard.AsText := ReportAsText;
end;
-//--------------------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------
-procedure TExceptionDialogMail.CreateDetailInfo;
+procedure TExceptionDialog.CreateDetails;
begin
- CreateReport([siStackList, siOsInfo, siModuleList, siActiveControls]);
-end;
-
-//--------------------------------------------------------------------------------------------------
-
-procedure TExceptionDialogMail.CreateDetails;
-begin
Screen.Cursor := crHourGlass;
DetailsMemo.Lines.BeginUpdate;
try
- CreateDetailInfo;
+ CreateReport;
ReportToLog;
DetailsMemo.SelStart := 0;
SendMessage(DetailsMemo.Handle, EM_SCROLLCARET, 0, 0);
@@ -421,51 +277,69 @@
end;
end;
-//--------------------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------
-procedure TExceptionDialogMail.CreateReport(const SystemInfo: TExcDialogSystemInfos);
-const
- MMXText: array[Boolean] of PChar = ('', 'MMX');
- FDIVText: array[Boolean] of PChar = (' [FDIV Bug]', '');
+procedure TExceptionDialog.CreateReport;
var
SL: TStringList;
I: Integer;
ModuleName: TFileName;
- CpuInfo: TCpuInfo;
- C: TWinControl;
- NtHeaders: PImageNtHeaders;
+ NtHeaders32: PImageNtHeaders32;
+ NtHeaders64: PImageNtHeaders64;
ModuleBase: Cardinal;
ImageBaseStr: string;
+ C: TWinControl;
+ CpuInfo: TCpuInfo;
+ ProcessorDetails: string;
StackList: TJclStackInfoList;
+ PETarget: TJclPeTarget;
begin
SL := TStringList.Create;
try
// Stack list
- if siStackList in SystemInfo then
+ StackList := JclLastExceptStackList;
+ if Assigned(StackList) then
begin
- StackList := JclLastExceptStackList;
- if Assigned(StackList) then
- begin
- DetailsMemo.Lines.Add(Format(RsStackList, [DateTimeToStr(StackList.TimeStamp)]));
- StackList.AddToStrings(DetailsMemo.Lines, False, True, True);
- NextDetailBlock;
- end;
+ DetailsMemo.Lines.Add(Format(RsStackList, [DateTimeToStr(StackList.TimeStamp)]));
+ StackList.AddToStrings(DetailsMemo.Lines, True, True, True, True);
+ NextDetailBlock;
end;
+
+
// System and OS information
- if siOsInfo in SystemInfo then
+ DetailsMemo.Lines.Add(Format(RsOSVersion, [GetWindowsVersionString, NtProductTypeString,
+ Win32MajorVersion, Win32MinorVersion, Win32BuildNumber, Win32CSDVersion]));
+ GetCpuInfo(CpuInfo);
+ with CpuInfo do
begin
- DetailsMemo.Lines.Add(Format(RsOSVersion, [GetWindowsVersionString, NtProductTypeString,
- Win32MajorVersion, Win32MinorVersion, Win32BuildNumber, Win32CSDVersion]));
- GetCpuInfo(CpuInfo);
- with CpuInfo do
- DetailsMemo.Lines.Add(Format(RsProcessor, [Manufacturer, CpuName,
- RoundFrequency(FrequencyInfo.NormFreq),
- MMXText[MMX], FDIVText[IsFDIVOK]]));
- DetailsMemo.Lines.Add(Format(RsScreenRes, [Screen.Width, Screen.Height, GetBPP]));
- NextDetailBlock;
+ ProcessorDetails := Format(RsProcessor, [Manufacturer, CpuName,
+ RoundFrequency(FrequencyInfo.NormFreq)]);
+ if not IsFDIVOK then
+ ProcessorDetails := ProcessorDetails + ' [FDIV Bug]';
+ if ExMMX then
+ ProcessorDetails := ProcessorDetails + ' MMXex'
+ else if MMX then
+ ProcessorDetails := ProcessorDetails + ' MMX';
+ if SSE > 0 then
+ ProcessorDetails := Format('%s SSE%d', [ProcessorDetails, SSE]);
+ if Ex3DNow then
+ ProcessorDetails := ProcessorDetails + ' 3DNow!ex'
+ else if _3DNow then
+ ProcessorDetails := ProcessorDetails + ' 3DNow!';
+ if Is64Bits then
+ ProcessorDetails := ProcessorDetails + ' 64 bits';
+ if DEPCapable then
+ ProcessorDetails := ProcessorDetails + ' DEP';
end;
+ DetailsMemo.Lines.Add(ProcessorDetails);
+ DetailsMemo.Lines.Add(Format(RsMemory, [GetTotalPhysicalMemory div 1024 div 1024,
+ GetFreePhysicalMemory div 1024 div 1024]));
+ DetailsMemo.Lines.Add(Format(RsScreenRes, [Screen.Width, Screen.Height, GetBPP]));
+ NextDetailBlock;
+
+
// Modules list
- if (siModuleList in SystemInfo) and LoadedModulesList(SL, GetCurrentProcessId) then
+ if LoadedModulesList(SL, GetCurrentProcessId) then
begin
DetailsMemo.Lines.Add(RsModulesList);
SL.CustomSort(SortModulesListByAddressCompare);
@@ -474,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
@@ -493,8 +377,10 @@
end;
NextDetailBlock;
end;
+
+
// Active controls
- if (siActiveControls in SystemInfo) and (FLastActiveControl <> nil) then
+ if (FLastActiveControl <> nil) then
begin
DetailsMemo.Lines.Add(RsActiveControl);
C := FLastActiveControl;
@@ -505,6 +391,7 @@
end;
NextDetailBlock;
end;
+
finally
SL.Free;
end;
@@ -512,18 +399,18 @@
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialogMail.DetailsBtnClick(Sender: TObject);
+procedure TExceptionDialog.DetailsBtnClick(Sender: TObject);
begin
DetailsVisible := not DetailsVisible;
end;
//--------------------------------------------------------------------------------------------------
-class procedure TExceptionDialogMail.ExceptionHandler(Sender: TObject; E: Exception);
+class procedure TExceptionDialog.ExceptionHandler(Sender: TObject; E: Exception);
begin
if ExceptionShowing then
Application.ShowException(E)
- else
+ else if Assigned(E) and not IsIgnoredException(E.ClassType) then
begin
ExceptionShowing := True;
try
@@ -536,7 +423,7 @@
//--------------------------------------------------------------------------------------------------
-class procedure TExceptionDialogMail.ExceptionThreadHandler(Thread: TJclDebugThread);
+class procedure TExceptionDialog.ExceptionThreadHandler(Thread: TJclDebugThread);
begin
if ExceptionShowing then
Application.ShowException(Thread.SyncException)
@@ -553,9 +440,9 @@
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialogMail.FormCreate(Sender: TObject);
+procedure TExceptionDialog.FormCreate(Sender: TObject);
begin
- FSimpleLog := TSimpleExceptionLog.Create;
+ FSimpleLog := TJclSimpleLog.Create('filename.log');
FFullHeight := ClientHeight;
DetailsVisible := False;
Caption := Format(RsAppError, [Application.Title]);
@@ -563,14 +450,14 @@
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialogMail.FormDestroy(Sender: TObject);
+procedure TExceptionDialog.FormDestroy(Sender: TObject);
begin
FreeAndNil(FSimpleLog);
end;
//--------------------------------------------------------------------------------------------------
-procedure TExceptionDialogMail.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
+procedure TExceptionDialog.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key = Ord('C')) and (ssCtrl in Shift) then
begin
@@ -581,7 +468,7 @@
//--------------------------------------------------------------------------------------------------...
[truncated message content] |
|
From: <ou...@us...> - 2007-02-21 22:34:17
|
Revision: 1946
http://svn.sourceforge.net/jcl/?rev=1946&view=rev
Author: outchy
Date: 2007-02-21 14:34:14 -0800 (Wed, 21 Feb 2007)
Log Message:
-----------
Fixing compilation of the PCRE demo
Modified Paths:
--------------
trunk/jcl/examples/common/pcre/PCREDemoMain.pas
Modified: trunk/jcl/examples/common/pcre/PCREDemoMain.pas
===================================================================
--- trunk/jcl/examples/common/pcre/PCREDemoMain.pas 2007-02-21 12:34:30 UTC (rev 1945)
+++ trunk/jcl/examples/common/pcre/PCREDemoMain.pas 2007-02-21 22:34:14 UTC (rev 1946)
@@ -44,7 +44,7 @@
{ Private declarations }
RE: TJclAnsiRegEx;
FMatchIndex: integer;
- procedure SelectText(Offset: TJclAnsiCaptureOffset);
+ procedure SelectText(Range: TJclAnsiCaptureRange);
procedure Match;
function GetUIOptions: TJclAnsiRegExOptions;
procedure UpdateUIOptions;
@@ -88,10 +88,10 @@
Match;
end;
-procedure TfrmMain.SelectText(Offset: TJclAnsiCaptureOffset);
+procedure TfrmMain.SelectText(Range: TJclAnsiCaptureRange);
begin
- reFile.SelStart := Offset.FirstPos;
- reFile.SelLength := Offset.LastPos - Offset.FirstPos;
+ reFile.SelStart := Range.FirstPos;
+ reFile.SelLength := Range.LastPos - Range.FirstPos;
end;
procedure TfrmMain.Match;
@@ -104,8 +104,8 @@
end
else
begin
- SelectText(RE.CaptureOffset[0]);
- FMatchIndex := RE.CaptureOffset[0].LastPos;
+ SelectText(RE.CaptureRanges[0]);
+ FMatchIndex := RE.CaptureRanges[0].LastPos;
end;
UpdateUIOptions;
end;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-21 12:34:37
|
Revision: 1945
http://svn.sourceforge.net/jcl/?rev=1945&view=rev
Author: outchy
Date: 2007-02-21 04:34:30 -0800 (Wed, 21 Feb 2007)
Log Message:
-----------
minor fix for rad tool names
Modified Paths:
--------------
trunk/jcl/source/common/JclBorlandTools.pas
Modified: trunk/jcl/source/common/JclBorlandTools.pas
===================================================================
--- trunk/jcl/source/common/JclBorlandTools.pas 2007-02-21 12:22:21 UTC (rev 1944)
+++ trunk/jcl/source/common/JclBorlandTools.pas 2007-02-21 12:34:30 UTC (rev 1945)
@@ -4646,10 +4646,11 @@
function TJclBDSInstallation.GetName: string;
begin
- if VersionNumber in [Low(BDSVersions)..High(BDSVersions)] then
- Result := Format('%s %s', [RadToolName, BDSVersions[VersionNumber].VersionStr])
+ // The name comes from the IDEVersionNumber
+ if IDEVersionNumber in [Low(BDSVersions)..High(BDSVersions)] then
+ Result := Format('%s %s', [RadToolName, BDSVersions[IDEVersionNumber].VersionStr])
else
- Result := Format('%s ***%s***', [RadToolName, VersionNumber]);
+ Result := Format('%s ***%s***', [RadToolName, IDEVersionNumber]);
end;
function TJclBDSInstallation.GetVclIncludeDir: string;
@@ -4676,8 +4677,9 @@
function TJclBDSInstallation.RadToolName: string;
begin
- if VersionNumber in [Low(BDSVersions)..High(BDSVersions)] then
- Result := BDSVersions[VersionNumber].Name
+ // The name comes from IDEVersionNumber
+ if IDEVersionNumber in [Low(BDSVersions)..High(BDSVersions)] then
+ Result := BDSVersions[IDEVersionNumber].Name
else
Result := RsBDSName;
end;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-21 12:22:22
|
Revision: 1944
http://svn.sourceforge.net/jcl/?rev=1944&view=rev
Author: outchy
Date: 2007-02-21 04:22:21 -0800 (Wed, 21 Feb 2007)
Log Message:
-----------
Fix for locks of log files by antivir softwares
Modified Paths:
--------------
trunk/jcl/install/JclInstall.pas
trunk/jcl/source/common/JclSysUtils.pas
Modified: trunk/jcl/install/JclInstall.pas
===================================================================
--- trunk/jcl/install/JclInstall.pas 2007-02-20 16:53:22 UTC (rev 1943)
+++ trunk/jcl/install/JclInstall.pas 2007-02-21 12:22:21 UTC (rev 1944)
@@ -113,7 +113,7 @@
FLibObjDir: string;
FJclDcpPath: string;
FDemoList: TStringList;
- FLogLines: TStringList;
+ FLogLines: TJclSimpleLog;
FDemoSectionName: string;
FLogFileName: string;
procedure AddDemo(const Directory: string; const FileInfo: TSearchRec);
@@ -165,7 +165,6 @@
property Enabled: Boolean read GetEnabled;
property OptionCheckedById[Id: Integer]: Boolean read GetOptionCheckedById;
property OptionChecked[Option: TJclOption]: Boolean read GetOptionChecked;
- property LogLines: TStringList read FLogLines;
property LogFileName: string read FLogFileName;
end;
@@ -720,8 +719,8 @@
if InstallTarget is TJclBCBInstallation then
FLibObjDir := MakePath(Distribution.FLibObjDirMask);
FDemoSectionName := Target.Name + ' demos';
- FLogLines := TStringList.Create;
FLogFileName := Format('%sbin%s%s.log', [Distribution.JclPath, DirDelimiter, TargetName]);
+ FLogLines := TJclSimpleLog.Create(FLogFileName);
end;
destructor TJclInstallation.Destroy;
@@ -1800,7 +1799,7 @@
GUIPage.BeginInstall;
end;
- FLogLines.Clear;
+ FLogLines.ClearLog;
WriteIntroduction;
Result := CheckDirectories and SetStaticOptions and SetEnvironment
@@ -1809,6 +1808,8 @@
and InstallRepository and MakeDemos;
if not Result then
Uninstall;
+
+ FLogLines.CloseLog;
finally
Target.OutputCallback := nil;
WriteLog('');
@@ -2104,10 +2105,7 @@
begin
Line := InstallCore.ProcessLogLine(Msg, LineType, GUIPage);
if Line <> '' then
- begin
- LogLines.Add(Line);
- LogLines.SaveToFile(LogFileName);
- end;
+ FLogLines.Write(Line);
end;
function TJclInstallation.GetBplPath: string;
Modified: trunk/jcl/source/common/JclSysUtils.pas
===================================================================
--- trunk/jcl/source/common/JclSysUtils.pas 2007-02-20 16:53:22 UTC (rev 1943)
+++ trunk/jcl/source/common/JclSysUtils.pas 2007-02-21 12:22:21 UTC (rev 1944)
@@ -501,11 +501,10 @@
end;
{$IFNDEF CLR}
-{$IFDEF MSWINDOWS}
type
TJclSimpleLog = class (TObject)
private
- FLogFileHandle: THandle;
+ FLogFileHandle: Integer;
FLogFileName: string;
FLogWasEmpty: Boolean;
function GetLogOpen: Boolean;
@@ -514,6 +513,7 @@
public
constructor Create(const ALogFileName: string = '');
destructor Destroy; override;
+ procedure ClearLog;
procedure CloseLog;
procedure OpenLog;
procedure Write(const Text: string; Indent: Integer = 0); overload;
@@ -522,7 +522,6 @@
property LogFileName: string read FLogFileName;
property LogOpen: Boolean read GetLogOpen;
end;
-{$ENDIF MSWINDOWS}
{$ENDIF ~CLR}
{$IFDEF UNITVERSIONING}
@@ -3042,12 +3041,19 @@
{$IFDEF MSWINDOWS}
+procedure TJclSimpleLog.ClearLog;
+begin
+ CloseLog;
+ FLogFileHandle := FileCreate(FLogFileName);
+ FLogWasEmpty := True;
+end;
+
procedure TJclSimpleLog.CloseLog;
begin
if LogOpen then
begin
- CloseHandle(FLogFileHandle);
- FLogFileHandle := INVALID_HANDLE_VALUE;
+ FileClose(FLogFileHandle);
+ FLogFileHandle := Integer(INVALID_HANDLE_VALUE);
FLogWasEmpty := False;
end;
end;
@@ -3058,7 +3064,7 @@
FLogFileName := CreateDefaultFileName
else
FLogFileName := ALogFileName;
- FLogFileHandle := INVALID_HANDLE_VALUE;
+ FLogFileHandle := Integer(INVALID_HANDLE_VALUE);
end;
function TJclSimpleLog.CreateDefaultFileName: string;
@@ -3075,15 +3081,16 @@
function TJclSimpleLog.GetLogOpen: Boolean;
begin
- Result := FLogFileHandle <> INVALID_HANDLE_VALUE;
+ Result := (FLogFileHandle <> 0) and (FLogFileHandle <> Integer(INVALID_HANDLE_VALUE));
end;
procedure TJclSimpleLog.OpenLog;
begin
if not LogOpen then
begin
- FLogFileHandle := CreateFile(PChar(FLogFileName), GENERIC_WRITE,
- FILE_SHARE_READ, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
+ FLogFileHandle := FileOpen(FLogFileName, fmShareDenyWrite or fmOpenReadWrite);
+ if not LogOpen then
+ FLogFileHandle := FileCreate(FLogFileName);
if LogOpen then
FLogWasEmpty := SetFilePointer(FLogFileHandle, 0, nil, FILE_END) = 0;
end
@@ -3105,7 +3112,7 @@
for I := 0 to SL.Count - 1 do
begin
S := StringOfChar(' ', Indent) + StrEnsureSuffix(AnsiCrLf, TrimRight(SL[I]));
- FileWrite(Integer(FLogFileHandle), Pointer(S)^, Length(S));
+ FileWrite(FLogFileHandle, Pointer(S)^, Length(S));
end;
finally
SL.Free;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-20 16:53:28
|
Revision: 1943
http://svn.sourceforge.net/jcl/?rev=1943&view=rev
Author: outchy
Date: 2007-02-20 08:53:22 -0800 (Tue, 20 Feb 2007)
Log Message:
-----------
Lower, upper, title and fold case mapping are overriden by special casing only if they don't exist yet.
Modified Paths:
--------------
trunk/jcl/source/windows/JclUnicode.rc
trunk/jcl/source/windows/JclUnicode.res
trunk/thirdparty/unicode_data_extractor/UDExtract.dpr
Modified: trunk/jcl/source/windows/JclUnicode.rc
===================================================================
--- trunk/jcl/source/windows/JclUnicode.rc 2007-02-19 20:25:59 UTC (rev 1942)
+++ trunk/jcl/source/windows/JclUnicode.rc 2007-02-20 16:53:22 UTC (rev 1943)
@@ -856,144 +856,143 @@
'01 00 00 00 65 00 00 00 00 00 00 00 00 00 00 00 46 00 00 00 01 00 00 00 66 00 00 00 01 00 00 00'
'66 00 00 00 00 00 00 00 00 00 00 00 47 00 00 00 01 00 00 00 67 00 00 00 01 00 00 00 67 00 00 00'
'00 00 00 00 00 00 00 00 48 00 00 00 01 00 00 00 68 00 00 00 01 00 00 00 68 00 00 00 00 00 00 00'
- '00 00 00 00 49 00 00 00 01 00 00 00 69 00 00 00 01 00 00 00 31 01 00 00 01 00 00 00 49 00 00 00'
- '01 00 00 00 49 00 00 00 4A 00 00 00 01 00 00 00 6A 00 00 00 02 00 00 00 6A 00 00 00 07 03 00 00'
- '01 00 00 00 4A 00 00 00 01 00 00 00 4A 00 00 00 4B 00 00 00 01 00 00 00 6B 00 00 00 01 00 00 00'
- '6B 00 00 00 00 00 00 00 00 00 00 00 4C 00 00 00 01 00 00 00 6C 00 00 00 01 00 00 00 6C 00 00 00'
- '00 00 00 00 00 00 00 00 4D 00 00 00 01 00 00 00 6D 00 00 00 01 00 00 00 6D 00 00 00 00 00 00 00'
- '00 00 00 00 4E 00 00 00 01 00 00 00 6E 00 00 00 01 00 00 00 6E 00 00 00 00 00 00 00 00 00 00 00'
- '4F 00 00 00 01 00 00 00 6F 00 00 00 01 00 00 00 6F 00 00 00 00 00 00 00 00 00 00 00 50 00 00 00'
- '01 00 00 00 70 00 00 00 01 00 00 00 70 00 00 00 00 00 00 00 00 00 00 00 51 00 00 00 01 00 00 00'
- '71 00 00 00 01 00 00 00 71 00 00 00 00 00 00 00 00 00 00 00 52 00 00 00 01 00 00 00 72 00 00 00'
- '01 00 00 00 72 00 00 00 00 00 00 00 00 00 00 00 53 00 00 00 01 00 00 00 73 00 00 00 01 00 00 00'
- '73 00 00 00 00 00 00 00 00 00 00 00 54 00 00 00 01 00 00 00 74 00 00 00 01 00 00 00 74 00 00 00'
- '00 00 00 00 00 00 00 00 55 00 00 00 01 00 00 00 75 00 00 00 01 00 00 00 75 00 00 00 00 00 00 00'
- '00 00 00 00 56 00 00 00 01 00 00 00 76 00 00 00 01 00 00 00 76 00 00 00 00 00 00 00 00 00 00 00'
- '57 00 00 00 01 00 00 00 77 00 00 00 01 00 00 00 77 00 00 00 00 00 00 00 00 00 00 00 58 00 00 00'
- '01 00 00 00 78 00 00 00 01 00 00 00 78 00 00 00 00 00 00 00 00 00 00 00 59 00 00 00 01 00 00 00'
- '79 00 00 00 01 00 00 00 79 00 00 00 00 00 00 00 00 00 00 00 5A 00 00 00 01 00 00 00 7A 00 00 00'
- '01 00 00 00 7A 00 00 00 00 00 00 00 00 00 00 00 61 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- '41 00 00 00 01 00 00 00 41 00 00 00 62 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 42 00 00 00'
- '01 00 00 00 42 00 00 00 63 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 43 00 00 00 01 00 00 00'
- '43 00 00 00 64 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 44 00 00 00 01 00 00 00 44 00 00 00'
- '65 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 45 00 00 00 01 00 00 00 45 00 00 00 66 00 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 46 00 00 00 01 00 00 00 46 00 00 00 67 00 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 47 00 00 00 01 00 00 00 47 00 00 00 68 00 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 48 00 00 00 01 00 00 00 48 00 00 00 69 00 00 00 00 00 00 00 01 00 00 00 69 00 00 00'
- '01 00 00 00 30 01 00 00 01 00 00 00 30 01 00 00 6A 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- '4A 00 00 00 01 00 00 00 4A 00 00 00 6B 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 4B 00 00 00'
- '01 00 00 00 4B 00 00 00 6C 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 4C 00 00 00 01 00 00 00'
- '4C 00 00 00 6D 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 4D 00 00 00 01 00 00 00 4D 00 00 00'
- '6E 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 4E 00 00 00 01 00 00 00 4E 00 00 00 6F 00 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 4F 00 00 00 01 00 00 00 4F 00 00 00 70 00 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 50 00 00 00 01 00 00 00 50 00 00 00 71 00 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 51 00 00 00 01 00 00 00 51 00 00 00 72 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- '52 00 00 00 01 00 00 00 52 00 00 00 73 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 53 00 00 00'
- '01 00 00 00 53 00 00 00 74 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 54 00 00 00 01 00 00 00'
- '54 00 00 00 75 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 55 00 00 00 01 00 00 00 55 00 00 00'
- '76 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 56 00 00 00 01 00 00 00 56 00 00 00 77 00 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 57 00 00 00 01 00 00 00 57 00 00 00 78 00 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 58 00 00 00 01 00 00 00 58 00 00 00 79 00 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 59 00 00 00 01 00 00 00 59 00 00 00 7A 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- '5A 00 00 00 01 00 00 00 5A 00 00 00 B5 00 00 00 01 00 00 00 BC 03 00 00 00 00 00 00 01 00 00 00'
- '9C 03 00 00 01 00 00 00 9C 03 00 00 C0 00 00 00 01 00 00 00 E0 00 00 00 01 00 00 00 E0 00 00 00'
- '00 00 00 00 00 00 00 00 C1 00 00 00 01 00 00 00 E1 00 00 00 01 00 00 00 E1 00 00 00 00 00 00 00'
- '00 00 00 00 C2 00 00 00 01 00 00 00 E2 00 00 00 01 00 00 00 E2 00 00 00 00 00 00 00 00 00 00 00'
- 'C3 00 00 00 01 00 00 00 E3 00 00 00 01 00 00 00 E3 00 00 00 00 00 00 00 00 00 00 00 C4 00 00 00'
- '01 00 00 00 E4 00 00 00 01 00 00 00 E4 00 00 00 00 00 00 00 00 00 00 00 C5 00 00 00 01 00 00 00'
- 'E5 00 00 00 01 00 00 00 E5 00 00 00 00 00 00 00 00 00 00 00 C6 00 00 00 01 00 00 00 E6 00 00 00'
- '01 00 00 00 E6 00 00 00 00 00 00 00 00 00 00 00 C7 00 00 00 01 00 00 00 E7 00 00 00 01 00 00 00'
- 'E7 00 00 00 00 00 00 00 00 00 00 00 C8 00 00 00 01 00 00 00 E8 00 00 00 01 00 00 00 E8 00 00 00'
- '00 00 00 00 00 00 00 00 C9 00 00 00 01 00 00 00 E9 00 00 00 01 00 00 00 E9 00 00 00 00 00 00 00'
- '00 00 00 00 CA 00 00 00 01 00 00 00 EA 00 00 00 01 00 00 00 EA 00 00 00 00 00 00 00 00 00 00 00'
- 'CB 00 00 00 01 00 00 00 EB 00 00 00 01 00 00 00 EB 00 00 00 00 00 00 00 00 00 00 00 CC 00 00 00'
- '01 00 00 00 EC 00 00 00 03 00 00 00 69 00 00 00 07 03 00 00 00 03 00 00 01 00 00 00 CC 00 00 00'
- '01 00 00 00 CC 00 00 00 CD 00 00 00 01 00 00 00 ED 00 00 00 03 00 00 00 69 00 00 00 07 03 00 00'
- '01 03 00 00 01 00 00 00 CD 00 00 00 01 00 00 00 CD 00 00 00 CE 00 00 00 01 00 00 00 EE 00 00 00'
- '01 00 00 00 EE 00 00 00 00 00 00 00 00 00 00 00 CF 00 00 00 01 00 00 00 EF 00 00 00 01 00 00 00'
- 'EF 00 00 00 00 00 00 00 00 00 00 00 D0 00 00 00 01 00 00 00 F0 00 00 00 01 00 00 00 F0 00 00 00'
- '00 00 00 00 00 00 00 00 D1 00 00 00 01 00 00 00 F1 00 00 00 01 00 00 00 F1 00 00 00 00 00 00 00'
- '00 00 00 00 D2 00 00 00 01 00 00 00 F2 00 00 00 01 00 00 00 F2 00 00 00 00 00 00 00 00 00 00 00'
- 'D3 00 00 00 01 00 00 00 F3 00 00 00 01 00 00 00 F3 00 00 00 00 00 00 00 00 00 00 00 D4 00 00 00'
- '01 00 00 00 F4 00 00 00 01 00 00 00 F4 00 00 00 00 00 00 00 00 00 00 00 D5 00 00 00 01 00 00 00'
- 'F5 00 00 00 01 00 00 00 F5 00 00 00 00 00 00 00 00 00 00 00 D6 00 00 00 01 00 00 00 F6 00 00 00'
- '01 00 00 00 F6 00 00 00 00 00 00 00 00 00 00 00 D8 00 00 00 01 00 00 00 F8 00 00 00 01 00 00 00'
- 'F8 00 00 00 00 00 00 00 00 00 00 00 D9 00 00 00 01 00 00 00 F9 00 00 00 01 00 00 00 F9 00 00 00'
- '00 00 00 00 00 00 00 00 DA 00 00 00 01 00 00 00 FA 00 00 00 01 00 00 00 FA 00 00 00 00 00 00 00'
- '00 00 00 00 DB 00 00 00 01 00 00 00 FB 00 00 00 01 00 00 00 FB 00 00 00 00 00 00 00 00 00 00 00'
- 'DC 00 00 00 01 00 00 00 FC 00 00 00 01 00 00 00 FC 00 00 00 00 00 00 00 00 00 00 00 DD 00 00 00'
- '01 00 00 00 FD 00 00 00 01 00 00 00 FD 00 00 00 00 00 00 00 00 00 00 00 DE 00 00 00 01 00 00 00'
- 'FE 00 00 00 01 00 00 00 FE 00 00 00 00 00 00 00 00 00 00 00 DF 00 00 00 02 00 00 00 73 00 00 00'
- '73 00 00 00 01 00 00 00 DF 00 00 00 02 00 00 00 53 00 00 00 73 00 00 00 02 00 00 00 53 00 00 00'
- '53 00 00 00 E0 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C0 00 00 00 01 00 00 00 C0 00 00 00'
- 'E1 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C1 00 00 00 01 00 00 00 C1 00 00 00 E2 00 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 C2 00 00 00 01 00 00 00 C2 00 00 00 E3 00 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 C3 00 00 00 01 00 00 00 C3 00 00 00 E4 00 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 C4 00 00 00 01 00 00 00 C4 00 00 00 E5 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- 'C5 00 00 00 01 00 00 00 C5 00 00 00 E6 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C6 00 00 00'
- '01 00 00 00 C6 00 00 00 E7 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C7 00 00 00 01 00 00 00'
- 'C7 00 00 00 E8 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C8 00 00 00 01 00 00 00 C8 00 00 00'
- 'E9 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C9 00 00 00 01 00 00 00 C9 00 00 00 EA 00 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 CA 00 00 00 01 00 00 00 CA 00 00 00 EB 00 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 CB 00 00 00 01 00 00 00 CB 00 00 00 EC 00 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 CC 00 00 00 01 00 00 00 CC 00 00 00 ED 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- 'CD 00 00 00 01 00 00 00 CD 00 00 00 EE 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 CE 00 00 00'
- '01 00 00 00 CE 00 00 00 EF 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 CF 00 00 00 01 00 00 00'
- 'CF 00 00 00 F0 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 D0 00 00 00 01 00 00 00 D0 00 00 00'
- 'F1 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 D1 00 00 00 01 00 00 00 D1 00 00 00 F2 00 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 D2 00 00 00 01 00 00 00 D2 00 00 00 F3 00 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 D3 00 00 00 01 00 00 00 D3 00 00 00 F4 00 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 D4 00 00 00 01 00 00 00 D4 00 00 00 F5 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- 'D5 00 00 00 01 00 00 00 D5 00 00 00 F6 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 D6 00 00 00'
- '01 00 00 00 D6 00 00 00 F8 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 D8 00 00 00 01 00 00 00'
- 'D8 00 00 00 F9 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 D9 00 00 00 01 00 00 00 D9 00 00 00'
- 'FA 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 DA 00 00 00 01 00 00 00 DA 00 00 00 FB 00 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 DB 00 00 00 01 00 00 00 DB 00 00 00 FC 00 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 DC 00 00 00 01 00 00 00 DC 00 00 00 FD 00 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 DD 00 00 00 01 00 00 00 DD 00 00 00 FE 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- 'DE 00 00 00 01 00 00 00 DE 00 00 00 FF 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 78 01 00 00'
- '01 00 00 00 78 01 00 00 00 01 00 00 01 00 00 00 01 01 00 00 01 00 00 00 01 01 00 00 00 00 00 00'
- '00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 01 00 00 01 00 00 00 00 01 00 00'
- '02 01 00 00 01 00 00 00 03 01 00 00 01 00 00 00 03 01 00 00 00 00 00 00 00 00 00 00 03 01 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 02 01 00 00 01 00 00 00 02 01 00 00 04 01 00 00 01 00 00 00'
- '05 01 00 00 01 00 00 00 05 01 00 00 00 00 00 00 00 00 00 00 05 01 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 04 01 00 00 01 00 00 00 04 01 00 00 06 01 00 00 01 00 00 00 07 01 00 00 01 00 00 00'
- '07 01 00 00 00 00 00 00 00 00 00 00 07 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 06 01 00 00'
- '01 00 00 00 06 01 00 00 08 01 00 00 01 00 00 00 09 01 00 00 01 00 00 00 09 01 00 00 00 00 00 00'
- '00 00 00 00 09 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 08 01 00 00 01 00 00 00 08 01 00 00'
- '0A 01 00 00 01 00 00 00 0B 01 00 00 01 00 00 00 0B 01 00 00 00 00 00 00 00 00 00 00 0B 01 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 0A 01 00 00 01 00 00 00 0A 01 00 00 0C 01 00 00 01 00 00 00'
- '0D 01 00 00 01 00 00 00 0D 01 00 00 00 00 00 00 00 00 00 00 0D 01 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 0C 01 00 00 01 00 00 00 0C 01 00 00 0E 01 00 00 01 00 00 00 0F 01 00 00 01 00 00 00'
- '0F 01 00 00 00 00 00 00 00 00 00 00 0F 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 0E 01 00 00'
- '01 00 00 00 0E 01 00 00 10 01 00 00 01 00 00 00 11 01 00 00 01 00 00 00 11 01 00 00 00 00 00 00'
- '00 00 00 00 11 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 10 01 00 00 01 00 00 00 10 01 00 00'
- '12 01 00 00 01 00 00 00 13 01 00 00 01 00 00 00 13 01 00 00 00 00 00 00 00 00 00 00 13 01 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 12 01 00 00 01 00 00 00 12 01 00 00 14 01 00 00 01 00 00 00'
- '15 01 00 00 01 00 00 00 15 01 00 00 00 00 00 00 00 00 00 00 15 01 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 14 01 00 00 01 00 00 00 14 01 00 00 16 01 00 00 01 00 00 00 17 01 00 00 01 00 00 00'
- '17 01 00 00 00 00 00 00 00 00 00 00 17 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 16 01 00 00'
- '01 00 00 00 16 01 00 00 18 01 00 00 01 00 00 00 19 01 00 00 01 00 00 00 19 01 00 00 00 00 00 00'
- '00 00 00 00 19 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 18 01 00 00 01 00 00 00 18 01 00 00'
- '1A 01 00 00 01 00 00 00 1B 01 00 00 01 00 00 00 1B 01 00 00 00 00 00 00 00 00 00 00 1B 01 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 1A 01 00 00 01 00 00 00 1A 01 00 00 1C 01 00 00 01 00 00 00'
- '1D 01 00 00 01 00 00 00 1D 01 00 00 00 00 00 00 00 00 00 00 1D 01 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 1C 01 00 00 01 00 00 00 1C 01 00 00 1E 01 00 00 01 00 00 00 1F 01 00 00 01 00 00 00'
- '1F 01 00 00 00 00 00 00 00 00 00 00 1F 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 1E 01 00 00'
- '01 00 00 00 1E 01 00 00 20 01 00 00 01 00 00 00 21 01 00 00 01 00 00 00 21 01 00 00 00 00 00 00'
- '00 00 00 00 21 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 20 01 00 00 01 00 00 00 20 01 00 00'
- '22 01 00 00 01 00 00 00 23 01 00 00 01 00 00 00 23 01 00 00 00 00 00 00 00 00 00 00 23 01 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 22 01 00 00 01 00 00 00 22 01 00 00 24 01 00 00 01 00 00 00'
- '25 01 00 00 01 00 00 00 25 01 00 00 00 00 00 00 00 00 00 00 25 01 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 24 01 00 00 01 00 00 00 24 01 00 00 26 01 00 00 01 00 00 00 27 01 00 00 01 00 00 00'
- '27 01 00 00 00 00 00 00 00 00 00 00 27 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 26 01 00 00'
- '01 00 00 00 26 01 00 00 28 01 00 00 01 00 00 00 29 01 00 00 03 00 00 00 69 00 00 00 07 03 00 00'
- '03 03 00 00 01 00 00 00 28 01 00 00 01 00 00 00 28 01 00 00 29 01 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 28 01 00 00 01 00 00 00 28 01 00 00 2A 01 00 00 01 00 00 00 2B 01 00 00 01 00 00 00'
- '2B 01 00 00 00 00 00 00 00 00 00 00 2B 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 2A 01 00 00'
- '01 00 00 00 2A 01 00 00 2C 01 00 00 01 00 00 00 2D 01 00 00 01 00 00 00 2D 01 00 00 00 00 00 00'
- '00 00 00 00 2D 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 2C 01 00 00 01 00 00 00 2C 01 00 00'
- '2E 01 00 00 01 00 00 00 2F 01 00 00 02 00 00 00 2F 01 00 00 07 03 00 00 01 00 00 00 2E 01 00 00'
+ '00 00 00 00 49 00 00 00 01 00 00 00 69 00 00 00 01 00 00 00 69 00 00 00 01 00 00 00 49 00 00 00'
+ '01 00 00 00 49 00 00 00 4A 00 00 00 01 00 00 00 6A 00 00 00 01 00 00 00 6A 00 00 00 01 00 00 00'
+ '4A 00 00 00 01 00 00 00 4A 00 00 00 4B 00 00 00 01 00 00 00 6B 00 00 00 01 00 00 00 6B 00 00 00'
+ '00 00 00 00 00 00 00 00 4C 00 00 00 01 00 00 00 6C 00 00 00 01 00 00 00 6C 00 00 00 00 00 00 00'
+ '00 00 00 00 4D 00 00 00 01 00 00 00 6D 00 00 00 01 00 00 00 6D 00 00 00 00 00 00 00 00 00 00 00'
+ '4E 00 00 00 01 00 00 00 6E 00 00 00 01 00 00 00 6E 00 00 00 00 00 00 00 00 00 00 00 4F 00 00 00'
+ '01 00 00 00 6F 00 00 00 01 00 00 00 6F 00 00 00 00 00 00 00 00 00 00 00 50 00 00 00 01 00 00 00'
+ '70 00 00 00 01 00 00 00 70 00 00 00 00 00 00 00 00 00 00 00 51 00 00 00 01 00 00 00 71 00 00 00'
+ '01 00 00 00 71 00 00 00 00 00 00 00 00 00 00 00 52 00 00 00 01 00 00 00 72 00 00 00 01 00 00 00'
+ '72 00 00 00 00 00 00 00 00 00 00 00 53 00 00 00 01 00 00 00 73 00 00 00 01 00 00 00 73 00 00 00'
+ '00 00 00 00 00 00 00 00 54 00 00 00 01 00 00 00 74 00 00 00 01 00 00 00 74 00 00 00 00 00 00 00'
+ '00 00 00 00 55 00 00 00 01 00 00 00 75 00 00 00 01 00 00 00 75 00 00 00 00 00 00 00 00 00 00 00'
+ '56 00 00 00 01 00 00 00 76 00 00 00 01 00 00 00 76 00 00 00 00 00 00 00 00 00 00 00 57 00 00 00'
+ '01 00 00 00 77 00 00 00 01 00 00 00 77 00 00 00 00 00 00 00 00 00 00 00 58 00 00 00 01 00 00 00'
+ '78 00 00 00 01 00 00 00 78 00 00 00 00 00 00 00 00 00 00 00 59 00 00 00 01 00 00 00 79 00 00 00'
+ '01 00 00 00 79 00 00 00 00 00 00 00 00 00 00 00 5A 00 00 00 01 00 00 00 7A 00 00 00 01 00 00 00'
+ '7A 00 00 00 00 00 00 00 00 00 00 00 61 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 41 00 00 00'
+ '01 00 00 00 41 00 00 00 62 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 42 00 00 00 01 00 00 00'
+ '42 00 00 00 63 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 43 00 00 00 01 00 00 00 43 00 00 00'
+ '64 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 44 00 00 00 01 00 00 00 44 00 00 00 65 00 00 00'
+ '00 00 00 00 00 00 00 00 01 00 00 00 45 00 00 00 01 00 00 00 45 00 00 00 66 00 00 00 00 00 00 00'
+ '00 00 00 00 01 00 00 00 46 00 00 00 01 00 00 00 46 00 00 00 67 00 00 00 00 00 00 00 00 00 00 00'
+ '01 00 00 00 47 00 00 00 01 00 00 00 47 00 00 00 68 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
+ '48 00 00 00 01 00 00 00 48 00 00 00 69 00 00 00 00 00 00 00 01 00 00 00 69 00 00 00 01 00 00 00'
+ '49 00 00 00 01 00 00 00 49 00 00 00 6A 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 4A 00 00 00'
+ '01 00 00 00 4A 00 00 00 6B 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 4B 00 00 00 01 00 00 00'
+ '4B 00 00 00 6C 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 4C 00 00 00 01 00 00 00 4C 00 00 00'
+ '6D 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 4D 00 00 00 01 00 00 00 4D 00 00 00 6E 00 00 00'
+ '00 00 00 00 00 00 00 00 01 00 00 00 4E 00 00 00 01 00 00 00 4E 00 00 00 6F 00 00 00 00 00 00 00'
+ '00 00 00 00 01 00 00 00 4F 00 00 00 01 00 00 00 4F 00 00 00 70 00 00 00 00 00 00 00 00 00 00 00'
+ '01 00 00 00 50 00 00 00 01 00 00 00 50 00 00 00 71 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
+ '51 00 00 00 01 00 00 00 51 00 00 00 72 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 52 00 00 00'
+ '01 00 00 00 52 00 00 00 73 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 53 00 00 00 01 00 00 00'
+ '53 00 00 00 74 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 54 00 00 00 01 00 00 00 54 00 00 00'
+ '75 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 55 00 00 00 01 00 00 00 55 00 00 00 76 00 00 00'
+ '00 00 00 00 00 00 00 00 01 00 00 00 56 00 00 00 01 00 00 00 56 00 00 00 77 00 00 00 00 00 00 00'
+ '00 00 00 00 01 00 00 00 57 00 00 00 01 00 00 00 57 00 00 00 78 00 00 00 00 00 00 00 00 00 00 00'
+ '01 00 00 00 58 00 00 00 01 00 00 00 58 00 00 00 79 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
+ '59 00 00 00 01 00 00 00 59 00 00 00 7A 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 5A 00 00 00'
+ '01 00 00 00 5A 00 00 00 B5 00 00 00 01 00 00 00 BC 03 00 00 00 00 00 00 01 00 00 00 9C 03 00 00'
+ '01 00 00 00 9C 03 00 00 C0 00 00 00 01 00 00 00 E0 00 00 00 01 00 00 00 E0 00 00 00 00 00 00 00'
+ '00 00 00 00 C1 00 00 00 01 00 00 00 E1 00 00 00 01 00 00 00 E1 00 00 00 00 00 00 00 00 00 00 00'
+ 'C2 00 00 00 01 00 00 00 E2 00 00 00 01 00 00 00 E2 00 00 00 00 00 00 00 00 00 00 00 C3 00 00 00'
+ '01 00 00 00 E3 00 00 00 01 00 00 00 E3 00 00 00 00 00 00 00 00 00 00 00 C4 00 00 00 01 00 00 00'
+ 'E4 00 00 00 01 00 00 00 E4 00 00 00 00 00 00 00 00 00 00 00 C5 00 00 00 01 00 00 00 E5 00 00 00'
+ '01 00 00 00 E5 00 00 00 00 00 00 00 00 00 00 00 C6 00 00 00 01 00 00 00 E6 00 00 00 01 00 00 00'
+ 'E6 00 00 00 00 00 00 00 00 00 00 00 C7 00 00 00 01 00 00 00 E7 00 00 00 01 00 00 00 E7 00 00 00'
+ '00 00 00 00 00 00 00 00 C8 00 00 00 01 00 00 00 E8 00 00 00 01 00 00 00 E8 00 00 00 00 00 00 00'
+ '00 00 00 00 C9 00 00 00 01 00 00 00 E9 00 00 00 01 00 00 00 E9 00 00 00 00 00 00 00 00 00 00 00'
+ 'CA 00 00 00 01 00 00 00 EA 00 00 00 01 00 00 00 EA 00 00 00 00 00 00 00 00 00 00 00 CB 00 00 00'
+ '01 00 00 00 EB 00 00 00 01 00 00 00 EB 00 00 00 00 00 00 00 00 00 00 00 CC 00 00 00 01 00 00 00'
+ 'EC 00 00 00 01 00 00 00 EC 00 00 00 01 00 00 00 CC 00 00 00 01 00 00 00 CC 00 00 00 CD 00 00 00'
+ '01 00 00 00 ED 00 00 00 01 00 00 00 ED 00 00 00 01 00 00 00 CD 00 00 00 01 00 00 00 CD 00 00 00'
+ 'CE 00 00 00 01 00 00 00 EE 00 00 00 01 00 00 00 EE 00 00 00 00 00 00 00 00 00 00 00 CF 00 00 00'
+ '01 00 00 00 EF 00 00 00 01 00 00 00 EF 00 00 00 00 00 00 00 00 00 00 00 D0 00 00 00 01 00 00 00'
+ 'F0 00 00 00 01 00 00 00 F0 00 00 00 00 00 00 00 00 00 00 00 D1 00 00 00 01 00 00 00 F1 00 00 00'
+ '01 00 00 00 F1 00 00 00 00 00 00 00 00 00 00 00 D2 00 00 00 01 00 00 00 F2 00 00 00 01 00 00 00'
+ 'F2 00 00 00 00 00 00 00 00 00 00 00 D3 00 00 00 01 00 00 00 F3 00 00 00 01 00 00 00 F3 00 00 00'
+ '00 00 00 00 00 00 00 00 D4 00 00 00 01 00 00 00 F4 00 00 00 01 00 00 00 F4 00 00 00 00 00 00 00'
+ '00 00 00 00 D5 00 00 00 01 00 00 00 F5 00 00 00 01 00 00 00 F5 00 00 00 00 00 00 00 00 00 00 00'
+ 'D6 00 00 00 01 00 00 00 F6 00 00 00 01 00 00 00 F6 00 00 00 00 00 00 00 00 00 00 00 D8 00 00 00'
+ '01 00 00 00 F8 00 00 00 01 00 00 00 F8 00 00 00 00 00 00 00 00 00 00 00 D9 00 00 00 01 00 00 00'
+ 'F9 00 00 00 01 00 00 00 F9 00 00 00 00 00 00 00 00 00 00 00 DA 00 00 00 01 00 00 00 FA 00 00 00'
+ '01 00 00 00 FA 00 00 00 00 00 00 00 00 00 00 00 DB 00 00 00 01 00 00 00 FB 00 00 00 01 00 00 00'
+ 'FB 00 00 00 00 00 00 00 00 00 00 00 DC 00 00 00 01 00 00 00 FC 00 00 00 01 00 00 00 FC 00 00 00'
+ '00 00 00 00 00 00 00 00 DD 00 00 00 01 00 00 00 FD 00 00 00 01 00 00 00 FD 00 00 00 00 00 00 00'
+ '00 00 00 00 DE 00 00 00 01 00 00 00 FE 00 00 00 01 00 00 00 FE 00 00 00 00 00 00 00 00 00 00 00'
+ 'DF 00 00 00 02 00 00 00 73 00 00 00 73 00 00 00 01 00 00 00 DF 00 00 00 02 00 00 00 53 00 00 00'
+ '73 00 00 00 02 00 00 00 53 00 00 00 53 00 00 00 E0 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
+ 'C0 00 00 00 01 00 00 00 C0 00 00 00 E1 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C1 00 00 00'
+ '01 00 00 00 C1 00 00 00 E2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C2 00 00 00 01 00 00 00'
+ 'C2 00 00 00 E3 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C3 00 00 00 01 00 00 00 C3 00 00 00'
+ 'E4 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C4 00 00 00 01 00 00 00 C4 00 00 00 E5 00 00 00'
+ '00 00 00 00 00 00 00 00 01 00 00 00 C5 00 00 00 01 00 00 00 C5 00 00 00 E6 00 00 00 00 00 00 00'
+ '00 00 00 00 01 00 00 00 C6 00 00 00 01 00 00 00 C6 00 00 00 E7 00 00 00 00 00 00 00 00 00 00 00'
+ '01 00 00 00 C7 00 00 00 01 00 00 00 C7 00 00 00 E8 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
+ 'C8 00 00 00 01 00 00 00 C8 00 00 00 E9 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C9 00 00 00'
+ '01 00 00 00 C9 00 00 00 EA 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 CA 00 00 00 01 00 00 00'
+ 'CA 00 00 00 EB 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 CB 00 00 00 01 00 00 00 CB 00 00 00'
+ 'EC 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 CC 00 00 00 01 00 00 00 CC 00 00 00 ED 00 00 00'
+ '00 00 00 00 00 00 00 00 01 00 00 00 CD 00 00 00 01 00 00 00 CD 00 00 00 EE 00 00 00 00 00 00 00'
+ '00 00 00 00 01 00 00 00 CE 00 00 00 01 00 00 00 CE 00 00 00 EF 00 00 00 00 00 00 00 00 00 00 00'
+ '01 00 00 00 CF 00 00 00 01 00 00 00 CF 00 00 00 F0 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
+ 'D0 00 00 00 01 00 00 00 D0 00 00 00 F1 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 D1 00 00 00'
+ '01 00 00 00 D1 00 00 00 F2 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 D2 00 00 00 01 00 00 00'
+ 'D2 00 00 00 F3 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 D3 00 00 00 01 00 00 00 D3 00 00 00'
+ 'F4 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 D4 00 00 00 01 00 00 00 D4 00 00 00 F5 00 00 00'
+ '00 00 00 00 00 00 00 00 01 00 00 00 D5 00 00 00 01 00 00 00 D5 00 00 00 F6 00 00 00 00 00 00 00'
+ '00 00 00 00 01 00 00 00 D6 00 00 00 01 00 00 00 D6 00 00 00 F8 00 00 00 00 00 00 00 00 00 00 00'
+ '01 00 00 00 D8 00 00 00 01 00 00 00 D8 00 00 00 F9 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
+ 'D9 00 00 00 01 00 00 00 D9 00 00 00 FA 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 DA 00 00 00'
+ '01 00 00 00 DA 00 00 00 FB 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 DB 00 00 00 01 00 00 00'
+ 'DB 00 00 00 FC 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 DC 00 00 00 01 00 00 00 DC 00 00 00'
+ 'FD 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 DD 00 00 00 01 00 00 00 DD 00 00 00 FE 00 00 00'
+ '00 00 00 00 00 00 00 00 01 00 00 00 DE 00 00 00 01 00 00 00 DE 00 00 00 FF 00 00 00 00 00 00 00'
+ '00 00 00 00 01 00 00 00 78 01 00 00 01 00 00 00 78 01 00 00 00 01 00 00 01 00 00 00 01 01 00 00'
+ '01 00 00 00 01 01 00 00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
+ '00 01 00 00 01 00 00 00 00 01 00 00 02 01 00 00 01 00 00 00 03 01 00 00 01 00 00 00 03 01 00 00'
+ '00 00 00 00 00 00 00 00 03 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 02 01 00 00 01 00 00 00'
+ '02 01 00 00 04 01 00 00 01 00 00 00 05 01 00 00 01 00 00 00 05 01 00 00 00 00 00 00 00 00 00 00'
+ '05 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 04 01 00 00 01 00 00 00 04 01 00 00 06 01 00 00'
+ '01 00 00 00 07 01 00 00 01 00 00 00 07 01 00 00 00 00 00 00 00 00 00 00 07 01 00 00 00 00 00 00'
+ '00 00 00 00 01 00 00 00 06 01 00 00 01 00 00 00 06 01 00 00 08 01 00 00 01 00 00 00 09 01 00 00'
+ '01 00 00 00 09 01 00 00 00 00 00 00 00 00 00 00 09 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
+ '08 01 00 00 01 00 00 00 08 01 00 00 0A 01 00 00 01 00 00 00 0B 01 00 00 01 00 00 00 0B 01 00 00'
+ '00 00 00 00 00 00 00 00 0B 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 0A 01 00 00 01 00 00 00'
+ '0A 01 00 00 0C 01 00 00 01 00 00 00 0D 01 00 00 01 00 00 00 0D 01 00 00 00 00 00 00 00 00 00 00'
+ '0D 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 0C 01 00 00 01 00 00 00 0C 01 00 00 0E 01 00 00'
+ '01 00 00 00 0F 01 00 00 01 00 00 00 0F 01 00 00 00 00 00 00 00 00 00 00 0F 01 00 00 00 00 00 00'
+ '00 00 00 00 01 00 00 00 0E 01 00 00 01 00 00 00 0E 01 00 00 10 01 00 00 01 00 00 00 11 01 00 00'
+ '01 00 00 00 11 01 00 00 00 00 00 00 00 00 00 00 11 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
+ '10 01 00 00 01 00 00 00 10 01 00 00 12 01 00 00 01 00 00 00 13 01 00 00 01 00 00 00 13 01 00 00'
+ '00 00 00 00 00 00 00 00 13 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 12 01 00 00 01 00 00 00'
+ '12 01 00 00 14 01 00 00 01 00 00 00 15 01 00 00 01 00 00 00 15 01 00 00 00 00 00 00 00 00 00 00'
+ '15 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 14 01 00 00 01 00 00 00 14 01 00 00 16 01 00 00'
+ '01 00 00 00 17 01 00 00 01 00 00 00 17 01 00 00 00 00 00 00 00 00 00 00 17 01 00 00 00 00 00 00'
+ '00 00 00 00 01 00 00 00 16 01 00 00 01 00 00 00 16 01 00 00 18 01 00 00 01 00 00 00 19 01 00 00'
+ '01 00 00 00 19 01 00 00 00 00 00 00 00 00 00 00 19 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
+ '18 01 00 00 01 00 00 00 18 01 00 00 1A 01 00 00 01 00 00 00 1B 01 00 00 01 00 00 00 1B 01 00 00'
+ '00 00 00 00 00 00 00 00 1B 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 1A 01 00 00 01 00 00 00'
+ '1A 01 00 00 1C 01 00 00 01 00 00 00 1D 01 00 00 01 00 00 00 1D 01 00 00 00 00 00 00 00 00 00 00'
+ '1D 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 1C 01 00 00 01 00 00 00 1C 01 00 00 1E 01 00 00'
+ '01 00 00 00 1F 01 00 00 01 00 00 00 1F 01 00 00 00 00 00 00 00 00 00 00 1F 01 00 00 00 00 00 00'
+ '00 00 00 00 01 00 00 00 1E 01 00 00 01 00 00 00 1E 01 00 00 20 01 00 00 01 00 00 00 21 01 00 00'
+ '01 00 00 00 21 01 00 00 00 00 00 00 00 00 00 00 21 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
+ '20 01 00 00 01 00 00 00 20 01 00 00 22 01 00 00 01 00 00 00 23 01 00 00 01 00 00 00 23 01 00 00'
+ '00 00 00 00 00 00 00 00 23 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 22 01 00 00 01 00 00 00'
+ '22 01 00 00 24 01 00 00 01 00 00 00 25 01 00 00 01 00 00 00 25 01 00 00 00 00 00 00 00 00 00 00'
+ '25 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 24 01 00 00 01 00 00 00 24 01 00 00 26 01 00 00'
+ '01 00 00 00 27 01 00 00 01 00 00 00 27 01 00 00 00 00 00 00 00 00 00 00 27 01 00 00 00 00 00 00'
+ '00 00 00 00 01 00 00 00 26 01 00 00 01 00 00 00 26 01 00 00 28 01 00 00 01 00 00 00 29 01 00 00'
+ '01 00 00 00 29 01 00 00 01 00 00 00 28 01 00 00 01 00 00 00 28 01 00 00 29 01 00 00 00 00 00 00'
+ '00 00 00 00 01 00 00 00 28 01 00 00 01 00 00 00 28 01 00 00 2A 01 00 00 01 00 00 00 2B 01 00 00'
+ '01 00 00 00 2B 01 00 00 00 00 00 00 00 00 00 00 2B 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
+ '2A 01 00 00 01 00 00 00 2A 01 00 00 2C 01 00 00 01 00 00 00 2D 01 00 00 01 00 00 00 2D 01 00 00'
+ '00 00 00 00 00 00 00 00 2D 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 2C 01 00 00 01 00 00 00'
+ '2C 01 00 00 2E 01 00 00 01 00 00 00 2F 01 00 00 01 00 00 00 2F 01 00 00 01 00 00 00 2E 01 00 00'
'01 00 00 00 2E 01 00 00 2F 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 2E 01 00 00 01 00 00 00'
'2E 01 00 00 30 01 00 00 02 00 00 00 69 00 00 00 07 03 00 00 01 00 00 00 69 00 00 00 01 00 00 00'
'30 01 00 00 01 00 00 00 30 01 00 00 31 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 49 00 00 00'
@@ -1260,7 +1259,7 @@
'01 00 00 00 BF 03 00 00 01 00 00 00 BF 03 00 00 00 00 00 00 00 00 00 00 A0 03 00 00 01 00 00 00'
'C0 03 00 00 01 00 00 00 C0 03 00 00 00 00 00 00 00 00 00 00 A1 03 00 00 01 00 00 00 C1 03 00 00'
'01 00 00 00 C1 03 00 00 00 00 00 00 00 00 00 00 A3 03 00 00 01 00 00 00 C3 03 00 00 01 00 00 00'
- 'C2 03 00 00 01 00 00 00 A3 03 00 00 01 00 00 00 A3 03 00 00 A4 03 00 00 01 00 00 00 C4 03 00 00'
+ 'C3 03 00 00 01 00 00 00 A3 03 00 00 01 00 00 00 A3 03 00 00 A4 03 00 00 01 00 00 00 C4 03 00 00'
'01 00 00 00 C4 03 00 00 00 00 00 00 00 00 00 00 A5 03 00 00 01 00 00 00 C5 03 00 00 01 00 00 00'
'C5 03 00 00 00 00 00 00 00 00 00 00 A6 03 00 00 01 00 00 00 C6 03 00 00 01 00 00 00 C6 03 00 00'
'00 00 00 00 00 00 00 00 A7 03 00 00 01 00 00 00 C7 03 00 00 01 00 00 00 C7 03 00 00 00 00 00 00'
@@ -1981,18 +1980,17 @@
'7B 1F 00 00 00 00 00 00 00 00 00 00 01 00 00 00 EB 1F 00 00 01 00 00 00 EB 1F 00 00 7C 1F 00 00'
'00 00 00 00 00 00 00 00 01 00 00 00 FA 1F 00 00 01 00 00 00 FA 1F 00 00 7D 1F 00 00 00 00 00 00'
'00 00 00 00 01 00 00 00 FB 1F 00 00 01 00 00 00 FB 1F 00 00 80 1F 00 00 02 00 00 00 00 1F 00 00'
+ 'B9 03 00 00 01 00 00 00 80 1F 00 00 01 00 00 00 88 1F 00 00 01 00 00 00 88 1F 00 00 81 1F 00 00'
+ '02 00 00 00 01 1F 00 00 B9 03 00 00 01 00 00 00 81 1F 00 00 01 00 00 00 89 1F 00 00 01 00 00 00'
+ '89 1F 00 00 82 1F 00 00 02 00 00 00 02 1F 00 00 B9 03 00 00 01 00 00 00 82 1F 00 00 01 00 00 00'
+ '8A 1F 00 00 01 00 00 00 8A 1F 00 00 83 1F 00 00 02 00 00 00 03 1F 00 00 B9 03 00 00 01 00 00 00'
+ '83 1F 00 00 01 00 00 00 8B 1F 00 00 01 00 00 00 8B 1F 00 00 84 1F 00 00 02 00 00 00 04 1F 00 00'
+ 'B9 03 00 00 01 00 00 00 84 1F 00 00 01 00 00 00 8C 1F 00 00 01 00 00 00 8C 1F 00 00 85 1F 00 00'
+ '02 00 00 00 05 1F 00 00 B9 03 00 00 01 00 00 00 85 1F 00 00 01 00 00 00 8D 1F 00 00 01 00 00 00'
+ '8D 1F 00 00 86 1F 00 00 02 00 00 00 06 1F 00 00 B9 03 00 00 01 00 00 00 86 1F 00 00 01 00 00 00'
+ '8E 1F 00 00 01 00 00 00 8E 1F 00 00 87 1F 00 00 02 00 00 00 07 1F 00 00 B9 03 00 00 01 00 00 00'
+ '87 1F 00 00 01 00 00 00 8F 1F 00 00 01 00 00 00 8F 1F 00 00 88 1F 00 00 02 00 00 00 00 1F 00 00'
'B9 03 00 00 01 00 00 00 80 1F 00 00 01 00 00 00 88 1F 00 00 02 00 00 00 08 1F 00 00 99 03 00 00'
- '81 1F 00 00 02 00 00 00 01 1F 00 00 B9 03 00 00 01 00 00 00 81 1F 00 00 01 00 00 00 89 1F 00 00'
- '02 00 00 00 09 1F 00 00 99 03 00 00 82 1F 00 00 02 00 00 00 02 1F 00 00 B9 03 00 00 01 00 00 00'
- '82 1F 00 00 01 00 00 00 8A 1F 00 00 02 00 00 00 0A 1F 00 00 99 03 00 00 83 1F 00 00 02 00 00 00'
- '03 1F 00 00 B9 03 00 00 01 00 00 00 83 1F 00 00 01 00 00 00 8B 1F 00 00 02 00 00 00 0B 1F 00 00'
- '99 03 00 00 84 1F 00 00 02 00 00 00 04 1F 00 00 B9 03 00 00 01 00 00 00 84 1F 00 00 01 00 00 00'
- '8C 1F 00 00 02 00 00 00 0C 1F 00 00 99 03 00 00 85 1F 00 00 02 00 00 00 05 1F 00 00 B9 03 00 00'
- '01 00 00 00 85 1F 00 00 01 00 00 00 8D 1F 00 00 02 00 00 00 0D 1F 00 00 99 03 00 00 86 1F 00 00'
- '02 00 00 00 06 1F 00 00 B9 03 00 00 01 00 00 00 86 1F 00 00 01 00 00 00 8E 1F 00 00 02 00 00 00'
- '0E 1F 00 00 99 03 00 00 87 1F 00 00 02 00 00 00 07 1F 00 00 B9 03 00 00 01 00 00 00 87 1F 00 00'
- '01 00 00 00 8F 1F 00 00 02 00 00 00 0F 1F 00 00 99 03 00 00 88 1F 00 00 02 00 00 00 00 1F 00 00'
- 'B9 03 00 00 01 00 00 00 80 1F 00 00 01 00 00 00 88 1F 00 00 02 00 00 00 08 1F 00 00 99 03 00 00'
'89 1F 00 00 02 00 00 00 01 1F 00 00 B9 03 00 00 01 00 00 00 81 1F 00 00 01 00 00 00 89 1F 00 00'
'02 00 00 00 09 1F 00 00 99 03 00 00 8A 1F 00 00 02 00 00 00 02 1F 00 00 B9 03 00 00 01 00 00 00'
'82 1F 00 00 01 00 00 00 8A 1F 00 00 02 00 00 00 0A 1F 00 00 99 03 00 00 8B 1F 00 00 02 00 00 00'
@@ -2003,18 +2001,17 @@
'02 00 00 00 06 1F 00 00 B9 03 00 00 01 00 00 00 86 1F 00 00 01 00 00 00 8E 1F 00 00 02 00 00 00'
'0E 1F 00 00 99 03 00 00 8F 1F 00 00 02 00 00 00 07 1F 00 00 B9 03 00 00 01 00 00 00 87 1F 00 00'
'01 00 00 00 8F 1F 00 00 02 00 00 00 0F 1F 00 00 99 03 00 00 90 1F 00 00 02 00 00 00 20 1F 00 00'
+ 'B9 03 00 00 01 00 00 00 90 1F 00 00 01 00 00 00 98 1F 00 00 01 00 00 00 98 1F 00 00 91 1F 00 00'
+ '02 00 00 00 21 1F 00 00 B9 03 00 00 01 00 00 00 91 1F 00 00 01 00 00 00 99 1F 00 00 01 00 00 00'
+ '99 1F 00 00 92 1F 00 00 02 00 00 00 22 1F 00 00 B9 03 00 00 01 00 00 00 92 1F 00 00 01 00 00 00'
+ '9A 1F 00 00 01 00 00 00 9A 1F 00 00 93 1F 00 00 02 00 00 00 23 1F 00 00 B9 03 00 00 01 00 00 00'
+ '93 1F 00 00 01 00 00 00 9B 1F 00 00 01 00 00 00 9B 1F 00 00 94 1F 00 00 02 00 00 00 24 1F 00 00'
+ 'B9 03 00 00 01 00 00 00 94 1F 00 00 01 00 00 00 9C 1F 00 00 01 00 00 00 9C 1F 00 00 95 1F 00 00'
+ '02 00 00 00 25 1F 00 00 B9 03 00 00 01 00 00 00 95 1F 00 00 01 00 00 00 9D 1F 00 00 01 00 00 00'
+ '9D 1F 00 00 96 1F 00 00 02 00 00 00 26 1F 00 00 B9 03 00 00 01 00 00 00 96 1F 00 00 01 00 00 00'
+ '9E 1F 00 00 01 00 00 00 9E 1F 00 00 97 1F 00 00 02 00 00 00 27 1F 00 00 B9 03 00 00 01 00 00 00'
+ '97 1F 00 00 01 00 00 00 9F 1F 00 00 01 00 00 00 9F 1F 00 00 98 1F 00 00 02 00 00 00 20 1F 00 00'
'B9 03 00 00 01 00 00 00 90 1F 00 00 01 00 00 00 98 1F 00 00 02 00 00 00 28 1F 00 00 99 03 00 00'
- '91 1F 00 00 02 00 00 00 21 1F 00 00 B9 03 00 00 01 00 00 00 91 1F 00 00 01 00 00 00 99 1F 00 00'
- '02 00 00 00 29 1F 00 00 99 03 00 00 92 1F 00 00 02 00 00 00 22 1F 00 00 B9 03 00 00 01 00 00 00'
- '92 1F 00 00 01 00 00 00 9A 1F 00 00 02 00 00 00 2A 1F 00 00 99 03 00 00 93 1F 00 00 02 00 00 00'
- '23 1F 00 00 B9 03 00 00 01 00 00 00 93 1F 00 00 01 00 00 00 9B 1F 00 00 02 00 00 00 2B 1F 00 00'
- '99 03 00 00 94 1F 00 00 02 00 00 00 24 1F 00 00 B9 03 00 00 01 00 00 00 94 1F 00 00 01 00 00 00'
- '9C 1F 00 00 02 00 00 00 2C 1F 00 00 99 03 00 00 95 1F 00 00 02 00 00 00 25 1F 00 00 B9 03 00 00'
- '01 00 00 00 95 1F 00 00 01 00 00 00 9D 1F 00 00 02 00 00 00 2D 1F 00 00 99 03 00 00 96 1F 00 00'
- '02 00 00 00 26 1F 00 00 B9 03 00 00 01 00 00 00 96 1F 00 00 01 00 00 00 9E 1F 00 00 02 00 00 00'
- '2E 1F 00 00 99 03 00 00 97 1F 00 00 02 00 00 00 27 1F 00 00 B9 03 00 00 01 00 00 00 97 1F 00 00'
- '01 00 00 00 9F 1F 00 00 02 00 00 00 2F 1F 00 00 99 03 00 00 98 1F 00 00 02 00 00 00 20 1F 00 00'
- 'B9 03 00 00 01 00 00 00 90 1F 00 00 01 00 00 00 98 1F 00 00 02 00 00 00 28 1F 00 00 99 03 00 00'
'99 1F 00 00 02 00 00 00 21 1F 00 00 B9 03 00 00 01 00 00 00 91 1F 00 00 01 00 00 00 99 1F 00 00'
'02 00 00 00 29 1F 00 00 99 03 00 00 9A 1F 00 00 02 00 00 00 22 1F 00 00 B9 03 00 00 01 00 00 00'
'92 1F 00 00 01 00 00 00 9A 1F 00 00 02 00 00 00 2A 1F 00 00 99 03 00 00 9B 1F 00 00 02 00 00 00'
@@ -2025,18 +2022,17 @@
'02 00 00 00 26 1F 00 00 B9 03 00 00 01 00 00 00 96 1F 00 00 01 00 00 00 9E 1F 00 00 02 00 00 00'
'2E 1F 00 00 99 03 00 00 9F 1F 00 00 02 00 00 00 27 1F 00 00 B9 03 00 00 01 00 00 00 97 1F 00 00'
'01 00 00 00 9F 1F 00 00 02 00 00 00 2F 1F 00 00 99 03 00 00 A0 1F 00 00 02 00 00 00 60 1F 00 00'
+ 'B9 03 00 00 01 00 00 00 A0 1F 00 00 01 00 00 00 A8 1F 00 00 01 00 00 00 A8 1F 00 00 A1 1F 00 00'
+ '02 00 00 00 61 1F 00 00 B9 03 00 00 01 00 00 00 A1 1F 00 00 01 00 00 00 A9 1F 00 00 01 00 00 00'
+ 'A9 1F 00 00 A2 1F 00 00 02 00 00 00 62 1F 00 00 B9 03 00 00 01 00 00 00 A2 1F 00 00 01 00 00 00'
+ 'AA 1F 00 00 01 00 00 00 AA 1F 00 00 A3 1F 00 00 02 00 00 00 63 1F 00 00 B9 03 00 00 01 00 00 00'
+ 'A3 1F 00 00 01 00 00 00 AB 1F 00 00 01 00 00 00 AB 1F 00 00 A4 1F 00 00 02 00 00 00 64 1F 00 00'
+ 'B9 03 00 00 01 00 00 00 A4 1F 00 00 01 00 00 00 AC 1F 00 00 01 00 00 00 AC 1F 00 00 A5 1F 00 00'
+ '02 00 00 00 65 1F 00 00 B9 03 00 00 01 00 00 00 A5 1F 00 00 01 00 00 00 AD 1F 00 00 01 00 00 00'
+ 'AD 1F 00 00 A6 1F 00 00 02 00 00 00 66 1F 00 00 B9 03 00 00 01 00 00 00 A6 1F 00 00 01 00 00 00'
+ 'AE 1F 00 00 01 00 00 00 AE 1F 00 00 A7 1F 00 00 02 00 00 00 67 1F 00 00 B9 03 00 00 01 00 00 00'
+ 'A7 1F 00 00 01 00 00 00 AF 1F 00 00 01 00 00 00 AF 1F 00 00 A8 1F 00 00 02 00 00 00 60 1F 00 00'
'B9 03 00 00 01 00 00 00 A0 1F 00 00 01 00 00 00 A8 1F 00 00 02 00 00 00 68 1F 00 00 99 03 00 00'
- 'A1 1F 00 00 02 00 00 00 61 1F 00 00 B9 03 00 00 01 00 00 00 A1 1F 00 00 01 00 00 00 A9 1F 00 00'
- '02 00 00 00 69 1F 00 00 99 03 00 00 A2 1F 00 00 02 00 00 00 62 1F 00 00 B9 03 00 00 01 00 00 00'
- 'A2 1F 00 00 01 00 00 00 AA 1F 00 00 02 00 00 00 6A 1F 00 00 99 03 00 00 A3 1F 00 00 02 00 00 00'
- '63 1F 00 00 B9 03 00 00 01 00 00 00 A3 1F 00 00 01 00 00 00 AB 1F 00 00 02 00 00 00 6B 1F 00 00'
- '99 03 00 00 A4 1F 00 00 02 00 00 00 64 1F 00 00 B9 03 00 00 01 00 00 00 A4 1F 00 00 01 00 00 00'
- 'AC 1F 00 00 02 00 00 00 6C 1F 00 00 99 03 00 00 A5 1F 00 00 02 00 00 00 65 1F 00 00 B9 03 00 00'
- '01 00 00 00 A5 1F 00 00 01 00 00 00 AD 1F 00 00 02 00 00 00 6D 1F 00 00 99 03 00 00 A6 1F 00 00'
- '02 00 00 00 66 1F 00 00 B9 03 00 00 01 00 00 00 A6 1F 00 00 01 00 00 00 AE 1F 00 00 02 00 00 00'
- '6E 1F 00 00 99 03 00 00 A7 1F 00 00 02 00 00 00 67 1F 00 00 B9 03 00 00 01 00 00 00 A7 1F 00 00'
- '01 00 00 00 AF 1F 00 00 02 00 00 00 6F 1F 00 00 99 03 00 00 A8 1F 00 00 02 00 00 00 60 1F 00 00'
- 'B9 03 00 00 01 00 00 00 A0 1F 00 00 01 00 00 00 A8 1F 00 00 02 00 00 00 68 1F 00 00 99 03 00 00'
'A9 1F 00 00 02 00 00 00 61 1F 00 00 B9 03 00 00 01 00 00 00 A1 1F 00 00 01 00 00 00 A9 1F 00 00'
'02 00 00 00 69 1F 00 00 99 03 00 00 AA 1F 00 00 02 00 00 00 62 1F 00 00 B9 03 00 00 01 00 00 00'
'A2 1F 00 00 01 00 00 00 AA 1F 00 00 02 00 00 00 6A 1F 00 00 99 03 00 00 AB 1F 00 00 02 00 00 00'
@@ -2050,485 +2046,485 @@
'01 00 00 00 B8 1F 00 00 01 00 00 00 B8 1F 00 00 B1 1F 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
'B9 1F 00 00 01 00 00 00 B9 1F 00 00 B2 1F 00 00 02 00 00 00 70 1F 00 00 B9 03 00 00 01 00 00 00'
'B2 1F 00 00 02 00 00 00 BA 1F 00 00 45 03 00 00 02 00 00 00 BA 1F 00 00 99 03 00 00 B3 1F 00 00'
- '02 00 00 00 B1 03 00 00 B9 03 00 00 01 00 00 00 B3 1F 00 00 01 00 00 00 BC 1F 00 00 02 00 00 00'
- '91 03 00 00 99 03 00 00 B4 1F 00 00 02 00 00 00 AC 03 00 00 B9 03 00 00 01 00 00 00 B4 1F 00 00'
- '02 00 00 00 86 03 00 00 45 03 00 00 02 00 00 00 86 03 00 00 99 03 00 00 B6 1F 00 00 02 00 00 00'
- 'B1 03 00 00 42 03 00 00 01 00 00 00 B6 1F 00 00 02 00 00 00 91 03 00 00 42 03 00 00 02 00 00 00'
- '91 03 00 00 42 03 00 00 B7 1F 00 00 03 00 00 00 B1 03 00 00 42 03 00 00 B9 03 00 00 01 00 00 00'
- 'B7 1F 00 00 03 00 00 00 91 03 00 00 42 03 00 00 45 03 00 00 03 00 00 00 91 03 00 00 42 03 00 00'
- '99 03 00 00 B8 1F 00 00 01 00 00 00 B0 1F 00 00 01 00 00 00 B0 1F 00 00 00 00 00 00 00 00 00 00'
- 'B9 1F 00 00 01 00 00 00 B1 1F 00 00 01 00 00 00 B1 1F 00 00 00 00 00 00 00 00 00 00 BA 1F 00 00'
- '01 00 00 00 70 1F 00 00 01 00 00 00 70 1F 00 00 00 00 00 00 00 00 00 00 BB 1F 00 00 01 00 00 00'
- '71 1F 00 00 01 00 00 00 71 1F 00 00 00 00 00 00 00 00 00 00 BC 1F 00 00 02 00 00 00 B1 03 00 00'
- 'B9 03 00 00 01 00 00 00 B3 1F 00 00 01 00 00 00 BC 1F 00 00 02 00 00 00 91 03 00 00 99 03 00 00'
- 'BE 1F 00 00 01 00 00 00 B9 03 00 00 00 00 00 00 01 00 00 00 99 03 00 00 01 00 00 00 99 03 00 00'
- 'C2 1F 00 00 02 00 00 00 74 1F 00 00 B9 03 00 00 01 00 00 00 C2 1F 00 00 02 00 00 00 CA 1F 00 00'
- '45 03 00 00 02 00 00 00 CA 1F 00 00 99 03 00 00 C3 1F 00 00 02 00 00 00 B7 03 00 00 B9 03 00 00'
- '01 00 00 00 C3 1F 00 00 01 00 00 00 CC 1F 00 00 02 00 00 00 97 03 00 00 99 03 00 00 C4 1F 00 00'
- '02 00 00 00 AE 03 00 00 B9 03 00 00 01 00 00 00 C4 1F 00 00 02 00 00 00 89 03 00 00 45 03 00 00'
- '02 00 00 00 89 03 00 00 99 03 00 00 C6 1F 00 00 02 00 00 00 B7 03 00 00 42 03 00 00 01 00 00 00'
- 'C6 1F 00 00 02 00 00 00 97 03 00 00 42 03 00 00 02 00 00 00 97 03 00 00 42 03 00 00 C7 1F 00 00'
- '03 00 00 00 B7 03 00 00 42 03 00 00 B9 03 00 00 01 00 00 00 C7 1F 00 00 03 00 00 00 97 03 00 00'
- '42 03 00 00 45 03 00 00 03 00 00 00 97 03 00 00 42 03 00 00 99 03 00 00 C8 1F 00 00 01 00 00 00'
- '72 1F 00 00 01 00 00 00 72 1F 00 00 00 00 00 00 00 00 00 00 C9 1F 00 00 01 00 00 00 73 1F 00 00'
- '01 00 00 00 73 1F 00 00 00 00 00 00 00 00 00 00 CA 1F 00 00 01 00 00 00 74 1F 00 00 01 00 00 00'
- '74 1F 00 00 00 00 00 00 00 00 00 00 CB 1F 00 00 01 00 00 00 75 1F 00 00 01 00 00 00 75 1F 00 00'
- '00 00 00 00 00 00 00 00 CC 1F 00 00 02 00 00 00 B7 03 00 00 B9 03 00 00 01 00 00 00 C3 1F 00 00'
- '01 00 00 00 CC 1F 00 00 02 00 00 00 97 03 00 00 99 03 00 00 D0 1F 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 D8 1F 00 00 01 00 00 00 D8 1F 00 00 D1 1F 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- 'D9 1F 00 00 01 00 00 00 D9 1F 00 00 D2 1F 00 00 03 00 00 00 B9 03 00 00 08 03 00 00 00 03 00 00'
- '01 00 00 00 D2 1F 00 00 03 00 00 00 99 03 00 00 08 03 00 00 00 03 00 00 03 00 00 00 99 03 00 00'
- '08 03 00 00 00 03 00 00 D3 1F 00 00 03 00 00 00 B9 03 00 00 08 03 00 00 01 03 00 00 01 00 00 00'
- 'D3 1F 00 00 03 00 00 00 99 03 00 00 08 03 00 00 01 03 00 00 03 00 00 00 99 03 00 00 08 03 00 00'
- '01 03 00 00 D6 1F 00 00 02 00 00 00 B9 03 00 00 42 03 00 00 01 00 00 00 D6 1F 00 00 02 00 00 00'
- '99 03 00 00 42 03 00 00 02 00 00 00 99 03 00 00 42 03 00 00 D7 1F 00 00 03 00 00 00 B9 03 00 00'
- '08 03 00 00 42 03 00 00 01 00 00 00 D7 1F 00 00 03 00 00 00 99 03 00 00 08 03 00 00 42 03 00 00'
- '03 00 00 00 99 03 00 00 08 03 00 00 42 03 00 00 D8 1F 00 00 01 00 00 00 D0 1F 00 00 01 00 00 00'
- 'D0 1F 00 00 00 00 00 00 00 00 00 00 D9 1F 00 00 01 00 00 00 D1 1F 00 00 01 00 00 00 D1 1F 00 00'
- '00 00 00 00 00 00 00 00 DA 1F 00 00 01 00 00 00 76 1F 00 00 01 00 00 00 76 1F 00 00 00 00 00 00'
- '00 00 00 00 DB 1F 00 00 01 00 00 00 77 1F 00 00 01 00 00 00 77 1F 00 00 00 00 00 00 00 00 00 00'
- 'E0 1F 00 00 00 00 00 00 00 00 00 00 01 00 00 00 E8 1F 00 00 01 00 00 00 E8 1F 00 00 E1 1F 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 E9 1F 00 00 01 00 00 00 E9 1F 00 00 E2 1F 00 00 03 00 00 00'
- 'C5 03 00 00 08 03 00 00 00 03 00 00 01 00 00 00 E2 1F 00 00 03 00 00 00 A5 03 00 00 08 03 00 00'
- '00 03 00 00 03 00 00 00 A5 03 00 00 08 03 00 00 00 03 00 00 E3 1F 00 00 03 00 00 00 C5 03 00 00'
- '08 03 00 00 01 03 00 00 01 00 00 00 E3 1F 00 00 03 00 00 00 A5 03 00 00 08 03 00 00 01 03 00 00'
- '03 00 00 00 A5 03 00 00 08 03 00 00 01 03 00 00 E4 1F 00 00 02 00 00 00 C1 03 00 00 13 03 00 00'
- '01 00 00 00 E4 1F 00 00 02 00 00 00 A1 03 00 00 13 03 00 00 02 00 00 00 A1 03 00 00 13 03 00 00'
- 'E5 1F 00 00 00 00 00 00 00 00 00 00 01 00 00 00 EC 1F 00 00 01 00 00 00 EC 1F 00 00 E6 1F 00 00'
- '02 00 00 00 C5 03 00 00 42 03 00 00 01 00 00 00 E6 1F 00 00 02 00 00 00 A5 03 00 00 42 03 00 00'
- '02 00 00 00 A5 03 00 00 42 03 00 00 E7 1F 00 00 03 00 00 00 C5 03 00 00 08 03 00 00 42 03 00 00'
- '01 00 00 00 E7 1F 00 00 03 00 00 00 A5 03 00 00 08 03 00 00 42 03 00 00 03 00 00 00 A5 03 00 00'
- '08 03 00 00 42 03 00 00 E8 1F 00 00 01 00 00 00 E0 1F 00 00 01 00 00 00 E0 1F 00 00 00 00 00 00'
- '00 00 00 00 E9 1F 00 00 01 00 00 00 E1 1F 00 00 01 00 00 00 E1 1F 00 00 00 00 00 00 00 00 00 00'
- 'EA 1F 00 00 01 00 00 00 7A 1F 00 00 01 00 00 00 7A 1F 00 00 00 00 00 00 00 00 00 00 EB 1F 00 00'
- '01 00 00 00 7B 1F 00 00 01 00 00 00 7B 1F 00 00 00 00 00 00 00 00 00 00 EC 1F 00 00 01 00 00 00'
- 'E5 1F 00 00 01 00 00 00 E5 1F 00 00 00 00 00 00 00 00 00 00 F2 1F 00 00 02 00 00 00 7C 1F 00 00'
- 'B9 03 00 00 01 00 00 00 F2 1F 00 00 02 00 00 00 FA 1F 00 00 45 03 00 00 02 00 00 00 FA 1F 00 00'
- '99 03 00 00 F3 1F 00 00 02 00 00 00 C9 03 00 00 B9 03 00 00 01 00 00 00 F3 1F 00 00 01 00 00 00'
- 'FC 1F 00 00 02 00 00 00 A9 03 00 00 99 03 00 00 F4 1F 00 00 02 00 00 00 CE 03 00 00 B9 03 00 00'
- '01 00 00 00 F4 1F 00 00 02 00 00 00 8F 03 00 00 45 03 00 00 02 00 00 00 8F 03 00 00 99 03 00 00'
- 'F6 1F 00 00 02 00 00 00 C9 03 00 00 42 03 00 00 01 00 00 00 F6 1F 00 00 02 00 00 00 A9 03 00 00'
- '42 03 00 00 02 00 00 00 A9 03 00 00 42 03 00 00 F7 1F 00 00 03 00 00 00 C9 03 00 00 42 03 00 00'
- 'B9 03 00 00 01 00 00 00 F7 1F 00 00 03 00 00 00 A9 03 00 00 42 03 00 00 45 03 00 00 03 00 00 00'
- 'A9 03 00 00 42 03 00 00 99 03 00 00 F8 1F 00 00 01 00 00 00 78 1F 00 00 01 00 00 00 78 1F 00 00'
- '00 00 00 00 00 00 00 00 F9 1F 00 00 01 00 00 00 79 1F 00 00 01 00 00 00 79 1F 00 00 00 00 00 00'
- '00 00 00 00 FA 1F 00 00 01 00 00 00 7C 1F 00 00 01 00 00 00 7C 1F 00 00 00 00 00 00 00 00 00 00'
- 'FB 1F 00 00 01 00 00 00 7D 1F 00 00 01 00 00 00 7D 1F 00 00 00 00 00 00 00 00 00 00 FC 1F 00 00'
- '02 00 00 00 C9 03 00 00 B9 03 00 00 01 00 00 00 F3 1F 00 00 01 00 00 00 FC 1F 00 00 02 00 00 00'
- 'A9 03 00 00 99 03 00 00 26 21 00 00 01 00 00 00 C9 03 00 00 01 00 00 00 C9 03 00 00 00 00 00 00'
- '00 00 00 00 2A 21 00 00 01 00 00 00 6B 00 00 00 01 00 00 00 6B 00 00 00 00 00 00 00 00 00 00 00'
- '2B 21 00 00 01 00 00 00 E5 00 00 00 01 00 00 00 E5 00 00 00 00 00 00 00 00 00 00 00 60 21 00 00'
- '01 00 00 00 70 21 00 00 01 00 00 00 70 21 00 00 00 00 00 00 00 00 00 00 61 21 00 00 01 00 00 00'
- '71 21 00 00 01 00 00 00 71 21 00 00 00 00 00 00 00 00 00 00 62 21 00 00 01 00 00 00 72 21 00 00'
- '01 00 00 00 72 21 00 00 00 00 00 00 00 00 00 00 63 21 00 00 01 00 00 00 73 21 00 00 01 00 00 00'
- '73 21 00 00 00 00 00 00 00 00 00 00 64 21 00 00 01 00 00 00 74 21 00 00 01 00 00 00 74 21 00 00'
- '00 00 00 00 00 00 00 00 65 21 00 00 01 00 00 00 75 21 00 00 01 00 00 00 75 21 00 00 00 00 00 00'
- '00 00 00 00 66 21 00 00 01 00 00 00 76 21 00 00 01 00 00 00 76 21 00 00 00 00 00 00 00 00 00 00'
- '67 21 00 00 01 00 00 00 77 21 00 00 01 00 00 00 77 21 00 00 00 00 00 00 00 00 00 00 68 21 00 00'
- '01 00 00 00 78 21 00 00 01 00 00 00 78 21 00 00 00 00 00 00 00 00 00 00 69 21 00 00 01 00 00 00'
- '79 21 00 00 01 00 00 00 79 21 00 00 00 00 00 00 00 00 00 00 6A 21 00 00 01 00 00 00 7A 21 00 00'
- '01 00 00 00 7A 21 00 00 00 00 00 00 00 00 00 00 6B 21 00 00 01 00 00 00 7B 21 00 00 01 00 00 00'
- '7B 21 00 00 00 00 00 00 00 00 00 00 6C 21 00 00 01 00 00 00 7C 21 00 00 01 00 00 00 7C 21 00 00'
- '00 00 00 00 00 00 00 00 6D 21 00 00 01 00 00 00 7D 21 00 00 01 00 00 00 7D 21 00 00 00 00 00 00'
- '00 00 00 00 6E 21 00 00 01 00 00 00 7E 21 00 00 01 00 00 00 7E 21 00 00 00 00 00 00 00 00 00 00'
- '6F 21 00 00 01 00 00 00 7F 21 00 00 01 00 00 00 7F 21 00 00 00 00 00 00 00 00 00 00 70 21 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 60 21 00 00 01 00 00 00 60 21 00 00 71 21 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 61 21 00 00 01 00 00 00 61 21 00 00 72 21 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 62 21 00 00 01 00 00 00 62 21 00 00 73 21 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- '63 21 00 00 01 00 00 00 63 21 00 00 74 21 00 00 00 00 00 00 00 00 00 00 01 00 00 00 64 21 00 00'
- '01 00 00 00 64 21 00 00 75 21 00 00 00 00 00 00 00 00 00 00 01 00 00 00 65 21 00 00 01 00 00 00'
- '65 21 00 00 76 21 00 00 00 00 00 00 00 00 00 00 01 00 00 00 66 21 00 00 01 00 00 00 66 21 00 00'
- '77 21 00 00 00 00 00 00 00 00 00 00 01 00 00 00 67 21 00 00 01 00 00 00 67 21 00 00 78 21 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 68 21 00 00 01 00 00 00 68 21 00 00 79 21 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 69 21 00 00 01 00 00 00 69 21 00 00 7A 21 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 6A 21 00 00 01 00 00 00 6A 21 00 00 7B 21 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- '6B 21 00 00 01 00 00 00 6B 21 00 00 7C 21 00 00 00 00 00 00 00 00 00 00 01 00 00 00 6C 21 00 00'
- '01 00 00 00 6C 21 00 00 7D 21 00 00 00 00 00 00 00 00 00 00 01 00 00 00 6D 21 00 00 01 00 00 00'
- '6D 21 00 00 7E 21 00 00 00 00 00 00 00 00 00 00 01 00 00 00 6E 21 00 00 01 00 00 00 6E 21 00 00'
- '7F 21 00 00 00 00 00 00 00 00 00 00 01 00 00 00 6F 21 00 00 01 00 00 00 6F 21 00 00 B6 24 00 00'
- '01 00 00 00 D0 24 00 00 01 00 00 00 D0 24 00 00 00 00 00 00 00 00 00 00 B7 24 00 00 01 00 00 00'
- 'D1 24 00 00 01 00 00 00 D1 24 00 00 00 00 00 00 00 00 00 00 B8 24 00 00 01 00 00 00 D2 24 00 00'
- '01 00 00 00 D2 24 00 00 00 00 00 00 00 00 00 00 B9 24 00 00 01 00 00 00 D3 24 00 00 01 00 00 00'
- 'D3 24 00 00 00 00 00 00 00 00 00 00 BA 24 00 00 01 00 00 00 D4 24 00 00 01 00 00 00 D4 24 00 00'
- '00 00 00 00 00 00 00 00 BB 24 00 00 01 00 00 00 D5 24 00 00 01 00 00 00 D5 24 00 00 00 00 00 00'
- '00 00 00 00 BC 24 00 00 01 00 00 00 D6 24 00 00 01 00 00 00 D6 24 00 00 00 00 00 00 00 00 00 00'
- 'BD 24 00 00 01 00 00 00 D7 24 00 00 01 00 00 00 D7 24 00 00 00 00 00 00 00 00 00 00 BE 24 00 00'
- '01 00 00 00 D8 24 00 00 01 00 00 00 D8 24 00 00 00 00 00 00 00 00 00 00 BF 24 00 00 01 00 00 00'
- 'D9 24 00 00 01 00 00 00 D9 24 00 00 00 00 00 00 00 00 00 00 C0 24 00 00 01 00 00 00 DA 24 00 00'
- '01 00 00 00 DA 24 00 00 00 00 00 00 00 00 00 00 C1 24 00 00 01 00 00 00 DB 24 00 00 01 00 00 00'
- 'DB 24 00 00 00 00 00 00 00 00 00 00 C2 24 00 00 01 00 00 00 DC 24 00 00 01 00 00 00 DC 24 00 00'
- '00 00 00 00 00 00 00 00 C3 24 00 00 01 00 00 00 DD 24 00 00 01 00 00 00 DD 24 00 00 00 00 00 00'
- '00 00 00 00 C4 24 00 00 01 00 00 00 DE 24 00 00 01 00 00 00 DE 24 00 00 00 00 00 00 00 00 00 00'
- 'C5 24 00 00 01 00 00 00 DF 24 00 00 01 00 00 00 DF 24 00 00 00 00 00 00 00 00 00 00 C6 24 00 00'
- '01 00 00 00 E0 24 00 00 01 00 00 00 E0 24 00 00 00 00 00 00 00 00 00 00 C7 24 00 00 01 00 00 00'
- 'E1 24 00 00 01 00 00 00 E1 24 00 00 00 00 00 00 00 00 00 00 C8 24 00 00 01 00 00 00 E2 24 00 00'
- '01 00 00 00 E2 24 00 00 00 00 00 00 00 00 00 00 C9 24 00 00 01 00 00 00 E3 24 00 00 01 00 00 00'
- 'E3 24 00 00 00 00 00 00 00 00 00 00 CA 24 00 00 01 00 00 00 E4 24 00 00 01 00 00 00 E4 24 00 00'
- '00 00 00 00 00 00 00 00 CB 24 00 00 01 00 00 00 E5 24 00 00 01 00 00 00 E5 24 00 00 00 00 00 00'
- '00 00 00 00 CC 24 00 00 01 00 00 00 E6 24 00 00 01 00 00 00 E6 24 00 00 00 00 00 00 00 00 00 00'
- 'CD 24 00 00 01 00 00 00 E7 24 00 00 01 00 00 00 E7 24 00 00 00 00 00 00 00 00 00 00 CE 24 00 00'
- '01 00 00 00 E8 24 00 00 01 00 00 00 E8 24 00 00 00 00 00 00 00 00 00 00 CF 24 00 00 01 00 00 00'
- 'E9 24 00 00 01 00 00 00 E9 24 00 00 00 00 00 00 00 00 00 00 D0 24 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 B6 24 00 00 01 00 00 00 B6 24 00 00 D1 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- 'B7 24 00 00 01 00 00 00 B7 24 00 00 D2 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00 B8 24 00 00'
- '01 00 00 00 B8 24 00 00 D3 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00 B9 24 00 00 01 00 00 00'
- 'B9 24 00 00 D4 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00 BA 24 00 00 01 00 00 00 BA 24 00 00'
- 'D5 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00 BB 24 00 00 01 00 00 00 BB 24 00 00 D6 24 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 BC 24 00 00 01 00 00 00 BC 24 00 00 D7 24 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 BD 24 00 00 01 00 00 00 BD 24 00 00 D8 24 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 BE 24 00 00 01 00 00 00 BE 24 00 00 D9 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- 'BF 24 00 00 01 00 00 00 BF 24 00 00 DA 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C0 24 00 00'
- '01 00 00 00 C0 24 00 00 DB 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C1 24 00 00 01 00 00 00'
- 'C1 24 00 00 DC 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C2 24 00 00 01 00 00 00 C2 24 00 00'
- 'DD 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C3 24 00 00 01 00 00 00 C3 24 00 00 DE 24 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 C4 24 00 00 01 00 00 00 C4 24 00 00 DF 24 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 C5 24 00 00 01 00 00 00 C5 24 00 00 E0 24 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 C6 24 00 00 01 00 00 00 C6 24 00 00 E1 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- 'C7 24 00 00 01 00 00 00 C7 24 00 00 E2 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C8 24 00 00'
- '01 00 00 00 C8 24 00 00 E3 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00 C9 24 00 00 01 00 00 00'
- 'C9 24 00 00 E4 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00 CA 24 00 00 01 00 00 00 CA 24 00 00'
- 'E5 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00 CB 24 00 00 01 00 00 00 CB 24 00 00 E6 24 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 CC 24 00 00 01 00 00 00 CC 24 00 00 E7 24 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 CD 24 00 00 01 00 00 00 CD 24 00 00 E8 24 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 CE 24 00 00 01 00 00 00 CE 24 00 00 E9 24 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- 'CF 24 00 00 01 00 00 00 CF 24 00 00 00 2C 00 00 01 00 00 00 30 2C 00 00 01 00 00 00 30 2C 00 00'
- '00 00 00 00 00 00 00 00 01 2C 00 00 01 00 00 00 31 2C 00 00 01 00 00 00 31 2C 00 00 00 00 00 00'
- '00 00 00 00 02 2C 00 00 01 00 00 00 32 2C 00 00 01 00 00 00 32 2C 00 00 00 00 00 00 00 00 00 00'
- '03 2C 00 00 01 00 00 00 33 2C 00 00 01 00 00 00 33 2C 00 00 00 00 00 00 00 00 00 00 04 2C 00 00'
- '01 00 00 00 34 2C 00 00 01 00 00 00 34 2C 00 00 00 00 00 00 00 00 00 00 05 2C 00 00 01 00 00 00'
- '35 2C 00 00 01 00 00 00 35 2C 00 00 00 00 00 00 00 00 00 00 06 2C 00 00 01 00 00 00 36 2C 00 00'
- '01 00 00 00 36 2C 00 00 00 00 00 00 00 00 00 00 07 2C 00 00 01 00 00 00 37 2C 00 00 01 00 00 00'
- '37 2C 00 00 00 00 00 00 00 00 00 00 08 2C 00 00 01 00 00 00 38 2C 00 00 01 00 00 00 38 2C 00 00'
- '00 00 00 00 00 00 00 00 09 2C 00 00 01 00 00 00 39 2C 00 00 01 00 00 00 39 2C 00 00 00 00 00 00'
- '00 00 00 00 0A 2C 00 00 01 00 00 00 3A 2C 00 00 01 00 00 00 3A 2C 00 00 00 00 00 00 00 00 00 00'
- '0B 2C 00 00 01 00 00 00 3B 2C 00 00 01 00 00 00 3B 2C 00 00 00 00 00 00 00 00 00 00 0C 2C 00 00'
- '01 00 00 00 3C 2C 00 00 01 00 00 00 3C 2C 00 00 00 00 00 00 00 00 00 00 0D 2C 00 00 01 00 00 00'
- '3D 2C 00 00 01 00 00 00 3D 2C 00 00 00 00 00 00 00 00 00 00 0E 2C 00 00 01 00 00 00 3E 2C 00 00'
- '01 00 00 00 3E 2C 00 00 00 00 00 00 00 00 00 00 0F 2C 00 00 01 00 00 00 3F 2C 00 00 01 00 00 00'
- '3F 2C 00 00 00 00 00 00 00 00 00 00 10 2C 00 00 01 00 00 00 40 2C 00 00 01 00 00 00 40 2C 00 00'
- '00 00 00 00 00 00 00 00 11 2C 00 00 01 00 00 00 41 2C 00 00 01 00 00 00 41 2C 00 00 00 00 00 00'
- '00 00 00 00 12 2C 00 00 01 00 00 00 42 2C 00 00 01 00 00 00 42 2C 00 00 00 00 00 00 00 00 00 00'
- '13 2C 00 00 01 00 00 00 43 2C 00 00 01 00 00 00 43 2C 00 00 00 00 00 00 00 00 00 00 14 2C 00 00'
- '01 00 00 00 44 2C 00 00 01 00 00 00 44 2C 00 00 00 00 00 00 00 00 00 00 15 2C 00 00 01 00 00 00'
- '45 2C 00 00 01 00 00 00 45 2C 00 00 00 00 00 00 00 00 00 00 16 2C 00 00 01 00 00 00 46 2C 00 00'
- '01 00 00 00 46 2C 00 00 00 00 00 00 00 00 00 00 17 2C 00 00 01 00 00 00 47 2C 00 00 01 00 00 00'
- '47 2C 00 00 00 00 00 00 00 00 00 00 18 2C 00 00 01 00 00 00 48 2C 00 00 01 00 00 00 48 2C 00 00'
- '00 00 00 00 00 00 00 00 19 2C 00 00 01 00 00 00 49 2C 00 00 01 00 00 00 49 2C 00 00 00 00 00 00'
- '00 00 00 00 1A 2C 00 00 01 00 00 00 4A 2C 00 00 01 00 00 00 4A 2C 00 00 00 00 00 00 00 00 00 00'
- '1B 2C 00 00 01 00 00 00 4B 2C 00 00 01 00 00 00 4B 2C 00 00 00 00 00 00 00 00 00 00 1C 2C 00 00'
- '01 00 00 00 4C 2C 00 00 01 00 00 00 4C 2C 00 00 00 00 00 00 00 00 00 00 1D 2C 00 00 01 00 00 00'
- '4D 2C 00 00 01 00 00 00 4D 2C 00 00 00 00 00 00 00 00 00 00 1E 2C 00 00 01 00 00 00 4E 2C 00 00'
- '01 00 00 00 4E 2C 00 00 00 00 00 00 00 00 00 00 1F 2C 00 00 01 00 00 00 4F 2C 00 00 01 00 00 00'
- '4F 2C 00 00 00 00 00 00 00 00 00 00 20 2C 00 00 01 00 00 00 50 2C 00 00 01 00 00 00 50 2C 00 00'
- '00 00 00 00 00 00 00 00 21 2C 00 00 01 00 00 00 51 2C 00 00 01 00 00 00 51 2C 00 00 00 00 00 00'
- '00 00 00 00 22 2C 00 00 01 00 00 00 52 2C 00 00 01 00 00 00 52 2C 00 00 00 00 00 00 00 00 00 00'
- '23 2C 00 00 01 00 00 00 53 2C 00 00 01 00 00 00 53 2C 00 00 00 00 00 00 00 00 00 00 24 2C 00 00'
- '01 00 00 00 54 2C 00 00 01 00 00 00 54 2C 00 00 00 00 00 00 00 00 00 00 25 2C 00 00 01 00 00 00'
- '55 2C 00 00 01 00 00 00 55 2C 00 00 00 00 00 00 00 00 00 00 26 2C 00 00 01 00 00 00 56 2C 00 00'
- '01 00 00 00 56 2C 00 00 00 00 00 00 00 00 00 00 27 2C 00 00 01 00 00 00 57 2C 00 00 01 00 00 00'
- '57 2C 00 00 00 00 00 00 00 00 00 00 28 2C 00 00 01 00 00 00 58 2C 00 00 01 00 00 00 58 2C 00 00'
- '00 00 00 00 00 00 00 00 29 2C 00 00 01 00 00 00 59 2C 00 00 01 00 00 00 59 2C 00 00 00 00 00 00'
- '00 00 00 00 2A 2C 00 00 01 00 00 00 5A 2C 00 00 01 00 00 00 5A 2C 00 00 00 00 00 00 00 00 00 00'
- '2B 2C 00 00 01 00 00 00 5B 2C 00 00 01 00 00 00 5B 2C 00 00 00 00 00 00 00 00 00 00 2C 2C 00 00'
- '01 00 00 00 5C 2C 00 00 01 00 00 00 5C 2C 00 00 00 00 00 00 00 00 00 00 2D 2C 00 00 01 00 00 00'
- '5D 2C 00 00 01 00 00 00 5D 2C 00 00 00 00 00 00 00 00 00 00 2E 2C 00 00 01 00 00 00 5E 2C 00 00'
- '01 00 00 00 5E 2C 00 00 00 00 00 00 00 00 00 00 30 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- '00 2C 00 00 01 00 00 00 00 2C 00 00 31 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 01 2C 00 00'
- '01 00 00 00 01 2C 00 00 32 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 02 2C 00 00 01 00 00 00'
- '02 2C 00 00 33 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 03 2C 00 00 01 00 00 00 03 2C 00 00'
- '34 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 04 2C 00 00 01 00 00 00 04 2C 00 00 35 2C 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 05 2C 00 00 01 00 00 00 05 2C 00 00 36 2C 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 06 2C 00 00 01 00 00 00 06 2C 00 00 37 2C 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 07 2C 00 00 01 00 00 00 07 2C 00 00 38 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- '08 2C 00 00 01 00 00 00 08 2C 00 00 39 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 09 2C 00 00'
- '01 00 00 00 09 2C 00 00 3A 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 0A 2C 00 00 01 00 00 00'
- '0A 2C 00 00 3B 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 0B 2C 00 00 01 00 00 00 0B 2C 00 00'
- '3C 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 0C 2C 00 00 01 00 00 00 0C 2C 00 00 3D 2C 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 0D 2C 00 00 01 00 00 00 0D 2C 00 00 3E 2C 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 0E 2C 00 00 01 00 00 00 0E 2C 00 00 3F 2C 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 0F 2C 00 00 01 00 00 00 0F 2C 00 00 40 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- '10 2C 00 00 01 00 00 00 10 2C 00 00 41 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 11 2C 00 00'
- '01 00 00 00 11 2C 00 00 42 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 12 2C 00 00 01 00 00 00'
- '12 2C 00 00 43 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 13 2C 00 00 01 00 00 00 13 2C 00 00'
- '44 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 14 2C 00 00 01 00 00 00 14 2C 00 00 45 2C 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 15 2C 00 00 01 00 00 00 15 2C 00 00 46 2C 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 16 2C 00 00 01 00 00 00 16 2C 00 00 47 2C 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 17 2C 00 00 01 00 00 00 17 2C 00 00 48 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- '18 2C 00 00 01 00 00 00 18 2C 00 00 49 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 19 2C 00 00'
- '01 00 00 00 19 2C 00 00 4A 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 1A 2C 00 00 01 00 00 00'
- '1A 2C 00 00 4B 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 1B 2C 00 00 01 00 00 00 1B 2C 00 00'
- '4C 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 1C 2C 00 00 01 00 00 00 1C 2C 00 00 4D 2C 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 1D 2C 00 00 01 00 00 00 1D 2C 00 00 4E 2C 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 1E 2C 00 00 01 00 00 00 1E 2C 00 00 4F 2C 00 00 00 00 00 00 00 00 00 00'
- '01 00 00 00 1F 2C 00 00 01 00 00 00 1F 2C 00 00 50 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00'
- '20 2C 00 00 01 00 00 00 20 2C 00 00 51 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 21 2C 00 00'
- '01 00 00 00 21 2C 00 00 52 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 22 2C 00 00 01 00 00 00'
- '22 2C 00 00 53 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 23 2C 00 00 01 00 00 00 23 2C 00 00'
- '54 2C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 24 2C 00 00 01 00 00 00 24 2C 00 00 55 2C 00 00'
- '00 00 00 00 00 00 00 00 01 00 00 00 25 2C 00 00 01 00 00 00 25 2C 00 00 56 2C 00 00 00 00 00 00'
- '00 00 00 00 01 00 00 00 26 2C 00 00 01 00 00 00 26 2...
[truncated message content] |
|
From: <mo...@us...> - 2007-02-19 20:26:04
|
Revision: 1942
http://svn.sourceforge.net/jcl/?rev=1942&view=rev
Author: morrac
Date: 2007-02-19 12:25:59 -0800 (Mon, 19 Feb 2007)
Log Message:
-----------
- Oops! Commited the wrong file in r1941. Sorry.
Add missing constants in array initialization.
Modified Paths:
--------------
trunk/jcl/source/common/JclPCRE.pas
Modified: trunk/jcl/source/common/JclPCRE.pas
===================================================================
--- trunk/jcl/source/common/JclPCRE.pas 2007-02-19 20:19:31 UTC (rev 1941)
+++ trunk/jcl/source/common/JclPCRE.pas 2007-02-19 20:25:59 UTC (rev 1942)
@@ -312,7 +312,8 @@
(PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, PCRE_EXTENDED, PCRE_ANCHORED,
PCRE_DOLLAR_ENDONLY, PCRE_EXTRA, 0, 0, PCRE_UNGREEDY, 0, PCRE_UTF8,
PCRE_NO_AUTO_CAPTURE, PCRE_NO_UTF8_CHECK, PCRE_AUTO_CALLOUT, 0, 0, 0, 0,
- PCRE_DUPNAMES, PCRE_NEWLINE_CR, PCRE_NEWLINE_LF);
+ PCRE_DUPNAMES, PCRE_NEWLINE_CR, PCRE_NEWLINE_LF, PCRE_NEWLINE_CRLF,
+ PCRE_NEWLINE_ANY);
cRunOptions: array [TJclAnsiRegExOption] of Integer =
(0, 0, 0, 0, 0, 0, 0, PCRE_NOTBOL, PCRE_NOTEOL, 0, PCRE_NOTEMPTY, 0, 0,
PCRE_NO_UTF8_CHECK, 0, PCRE_PARTIAL, 0, 0, 0, 0, PCRE_NEWLINE_CR,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mo...@us...> - 2007-02-19 20:19:41
|
Revision: 1941
http://svn.sourceforge.net/jcl/?rev=1941&view=rev
Author: morrac
Date: 2007-02-19 12:19:31 -0800 (Mon, 19 Feb 2007)
Log Message:
-----------
- Fix Compile: it did not create the result vector for matches of
patterns without subpatterns. Fix propposed by octweak.
- Add a missing regex option and a new option introduced in v7.0, as
suggested by octweak.
Modified Paths:
--------------
trunk/jcl/source/common/JclPCRE.pas
trunk/jcl/source/common/pcre.pas
Modified: trunk/jcl/source/common/JclPCRE.pas
===================================================================
--- trunk/jcl/source/common/JclPCRE.pas 2007-02-16 21:32:52 UTC (rev 1940)
+++ trunk/jcl/source/common/JclPCRE.pas 2007-02-19 20:19:31 UTC (rev 1941)
@@ -24,7 +24,7 @@
{ }
{ Class wrapper for PCRE (PERL Compatible Regular Expression) }
{ }
-{ Unit owner: Peter Th\xF6rnqvist }
+{ Unit owner: Peter Th�nqvist }
{ Last modified: $Date$ }
{ }
{**************************************************************************************************}
@@ -73,7 +73,7 @@
roAnchored, roDollarEndOnly, roExtra, roNotBOL, roNotEOL, roUnGreedy,
roNotEmpty, roUTF8, roNoAutoCapture, roNoUTF8Check, roAutoCallout,
roPartial, roDfaShortest, roDfaRestart, roDfaFirstLine, roDupNames,
- roNewLineCR, roNewLineLF);
+ roNewLineCR, roNewLineLF, roNewLineCRLF, roNewLineAny);
TJclAnsiRegExOptions = set of TJclAnsiRegExOption;
TJclAnsiCaptureRange = record
FirstPos: Integer;
@@ -295,10 +295,7 @@
else
begin
PCRECheck(pcre_fullinfo(FCode, FExtra, PCRE_INFO_CAPTURECOUNT, @FCaptureCount));
- if FCaptureCount > 0 then
- FVectorSize := (FCaptureCount + 1) * 3
- else
- FVectorSize := 0;
+ FVectorSize := (FCaptureCount + 1) * 3;
end;
ReAllocMem(FVector, FVectorSize * SizeOf(Integer));
end;
@@ -310,7 +307,7 @@
roAnchored, roDollarEndOnly, roExtra, roNotBOL, roNotEOL, roUnGreedy,
roNotEmpty, roUTF8, roNoAutoCapture, roNoUTF8Check, roAutoCallout,
roPartial, roDfaShortest, roDfaRestart, roDfaFirstLine, roDupNames,
- roNewLineCR, roNewLineLF }
+ roNewLineCR, roNewLineLF, roNewLineCRLF, roNewLineAny }
cDesignOptions: array [TJclAnsiRegExOption] of Integer =
(PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, PCRE_EXTENDED, PCRE_ANCHORED,
PCRE_DOLLAR_ENDONLY, PCRE_EXTRA, 0, 0, PCRE_UNGREEDY, 0, PCRE_UTF8,
@@ -319,7 +316,7 @@
cRunOptions: array [TJclAnsiRegExOption] of Integer =
(0, 0, 0, 0, 0, 0, 0, PCRE_NOTBOL, PCRE_NOTEOL, 0, PCRE_NOTEMPTY, 0, 0,
PCRE_NO_UTF8_CHECK, 0, PCRE_PARTIAL, 0, 0, 0, 0, PCRE_NEWLINE_CR,
- PCRE_NEWLINE_LF);
+ PCRE_NEWLINE_LF, PCRE_NEWLINE_CRLF, PCRE_NEWLINE_ANY);
var
I: TJclAnsiRegExOption;
begin
Modified: trunk/jcl/source/common/pcre.pas
===================================================================
--- trunk/jcl/source/common/pcre.pas 2007-02-16 21:32:52 UTC (rev 1940)
+++ trunk/jcl/source/common/pcre.pas 2007-02-19 20:19:31 UTC (rev 1941)
@@ -122,6 +122,8 @@
{$EXTERNALSYM PCRE_NEWLINE_LF}
PCRE_NEWLINE_CRLF = $00300000;
{$EXTERNALSYM PCRE_NEWLINE_CRLF}
+ PCRE_NEWLINE_ANY = $00400000;
+ {$EXTERNALSYM PCRE_NEWLINE_ANY}
(* Exec-time and get-time error codes *)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-16 21:32:54
|
Revision: 1940
http://svn.sourceforge.net/jcl/?rev=1940&view=rev
Author: outchy
Date: 2007-02-16 13:32:52 -0800 (Fri, 16 Feb 2007)
Log Message:
-----------
New option to configure exception classes to ignore in JCL exception dialog wizard
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/JclOtaExcDlgWizard.pas
trunk/jcl/experts/debug/dialog/JclOtaTemplates.pas
trunk/jcl/packages/c5/JclRepositoryExpertC50.bpk
trunk/jcl/packages/c5/JclRepositoryExpertC50.cpp
trunk/jcl/packages/c5/JclRepositoryExpertC50.dpk
trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.bpf
trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.bpr
trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.cpp
trunk/jcl/packages/c6/JclRepositoryExpert.bpk
trunk/jcl/packages/c6/JclRepositoryExpert.cpp
trunk/jcl/packages/c6/JclRepositoryExpert.dpk
trunk/jcl/packages/c6/JclRepositoryExpertDLL.bpf
trunk/jcl/packages/c6/JclRepositoryExpertDLL.bpr
trunk/jcl/packages/c6/JclRepositoryExpertDLL.cpp
trunk/jcl/packages/d10/JclRepositoryExpert.dpk
trunk/jcl/packages/d10/JclRepositoryExpertDLL.dpr
trunk/jcl/packages/d5/JclRepositoryExpertD50.dpk
trunk/jcl/packages/d5/JclRepositoryExpertDLLD50.dpr
trunk/jcl/packages/d6/JclRepositoryExpert.dpk
trunk/jcl/packages/d6/JclRepositoryExpertDLL.dpr
trunk/jcl/packages/d7/JclRepositoryExpert.dpk
trunk/jcl/packages/d7/JclRepositoryExpertDLL.dpr
trunk/jcl/packages/d9/JclRepositoryExpert.dpk
trunk/jcl/packages/d9/JclRepositoryExpertDLL.dpr
trunk/jcl/packages/xml/JclRepositoryExpert-D.xml
trunk/jcl/packages/xml/JclRepositoryExpertDLL-L.xml
Added Paths:
-----------
trunk/jcl/experts/debug/dialog/JclOtaExcDlgIgnoreFrame.dfm
trunk/jcl/experts/debug/dialog/JclOtaExcDlgIgnoreFrame.pas
Modified: trunk/jcl/experts/common/JclOtaResources.pas
===================================================================
--- trunk/jcl/experts/common/JclOtaResources.pas 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/experts/common/JclOtaResources.pas 2007-02-16 21:32:52 UTC (rev 1940)
@@ -113,45 +113,52 @@
//=== JclOtaExcDlgFileFrame.pas ==============================================
resourcestring
RsExcDlgFileOptions = 'file options';
- RsLanguage = 'Language:';
- RsFileName = 'File name:';
- RsFormName = 'Form name:';
- RsFormAncestor = 'Form ancestor:';
- RsFileNameDialog = 'Save new file as...';
+ RsLanguage = '&Language:';
+ RsFileName = '&File name:';
+ RsFormName = 'Form &name:';
+ RsFormAncestor = 'Form &ancestor:';
+ RsFileNameDialog = '&Save new file as...';
//=== JclOtaExcDlgFormFrame.pas ==============================================
resourcestring
RsExcDlgFormOptions = 'form options';
- RsDialogWithMailButton = 'Button to send stack trace by mail';
- RsEMail = 'EMail:';
- RsSubject = 'Subject:';
- RsModalDialog = 'Modal dialog';
- RsSizeableDialog = 'Sizeable dialog';
- RsAutoScrollBars = 'Automatic scroll bars';
+ RsDialogWithMailButton = '&Button to send stack trace by mail';
+ RsEMail = '&EMail:';
+ RsSubject = '&Subject:';
+ RsModalDialog = '&Modal dialog';
+ RsSizeableDialog = 'S&izeable dialog';
+ RsAutoScrollBars = '&Automatic scroll bars';
//=== JclOtaExcDlgSystemFrame.pas ============================================
resourcestring
RsExcDlgSystemOptions = 'system options';
- RsDelayedStackTrace = 'Delayed stack traces (faster)';
- RsLogTrace = 'Add crash data to log file';
- RsHookDll = 'Hook DLL';
- RsModuleList = 'Module list';
- RsOSInfo = 'Operating system informations';
- RsActiveControls = 'List of active controls';
- RsMainThreadOnly = 'Catch only exceptions of main thread';
+ RsDelayedStackTrace = '&Delayed stack traces (faster)';
+ RsLogTrace = '&Add crash data to log file';
+ RsHookDll = '&Hook DLL';
+ RsModuleList = '&Module list';
+ RsOSInfo = '&Operating system informations';
+ RsActiveControls = '&List of active controls';
+ RsMainThreadOnly = '&Catch only exceptions of main thread';
//=== JclOtaExcDlgTraceFrame.pas =============================================
resourcestring
RsExcDlgTraceOptions = 'trace options';
- RsStackList = 'Stack list';
- RsRawData = 'Raw analysis of the stack';
- RsModuleName = 'Module name';
+ RsStackList = '&Stack list';
+ RsRawData = '&Raw analysis of the stack';
+ RsModuleName = '&Module name';
//RsAddressOffset = 'Address offset';
- RsCodeDetails = 'Code details';
- RsVirtualAddress = 'Virtual address';
- RsModuleOffset = 'Module offset';
- RsPreview = 'Preview:';
+ RsCodeDetails = '&Code details';
+ RsVirtualAddress = '&Virtual address';
+ RsModuleOffset = 'Module &offset';
+ RsPreview = '&Preview:';
+//=== JclOtaExcDlgIgnoreFrame.pas ============================================
+resourcestring
+ RsExcDlgIgnoreOptions = 'ignored exceptions';
+ RsTraceAllExceptions = '&Trace all exceptions';
+ RsTraceEAbort = 'Trace &EAbort and its descendants';
+ RsIgnoredExceptions = '&Ancestor exception classes to ignore (one per line)';
+
//=== OpenDlgFavAdapter.pas ==================================================
resourcestring
RsAdd = '<- Add';
Modified: trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas 2007-02-16 21:32:52 UTC (rev 1940)
@@ -611,6 +611,9 @@
procedure InitializeHandler;
begin
+%repeatline IgnoredExceptionsCount AddIgnoredException(%IgnoredExceptions);
+%if TraceEAbort RemoveIgnoredException(EAbort);%endif
+%if TraceAllExceptions JclStackTrackingOptions := JclStackTrackingOptions + [stTraceAllExceptions];%endif
%if RawData JclStackTrackingOptions := JclStackTrackingOptions + [stRawMode];%endif
%if HookDll JclStackTrackingOptions := JclStackTrackingOptions + [stStaticModuleList];%endif
%if DelayedTrace JclStackTrackingOptions := JclStackTrackingOptions + [stDelayedTrace];%endif
Added: trunk/jcl/experts/debug/dialog/JclOtaExcDlgIgnoreFrame.dfm
===================================================================
--- trunk/jcl/experts/debug/dialog/JclOtaExcDlgIgnoreFrame.dfm (rev 0)
+++ trunk/jcl/experts/debug/dialog/JclOtaExcDlgIgnoreFrame.dfm 2007-02-16 21:32:52 UTC (rev 1940)
@@ -0,0 +1,34 @@
+inherited JclOtaExcDlgIgnorePage: TJclOtaExcDlgIgnorePage
+ object LabelIgnoredExceptions: TLabel
+ Left = 120
+ Top = 80
+ Width = 102
+ Height = 13
+ Caption = 'RsIgnoredExceptions'
+ FocusControl = MemoIgnoredExceptions
+ end
+ object CheckBoxTraceAllExceptions: TCheckBox
+ Left = 96
+ Top = 16
+ Width = 393
+ Height = 17
+ Caption = 'RsTraceAllExceptions'
+ TabOrder = 0
+ OnClick = CheckBoxTraceAllExceptionsClick
+ end
+ object CheckBoxTraceEAbort: TCheckBox
+ Left = 120
+ Top = 48
+ Width = 369
+ Height = 17
+ Caption = 'RsTraceEAbort'
+ TabOrder = 1
+ end
+ object MemoIgnoredExceptions: TMemo
+ Left = 120
+ Top = 99
+ Width = 369
+ Height = 177
+ TabOrder = 2
+ end
+end
Property changes on: trunk/jcl/experts/debug/dialog/JclOtaExcDlgIgnoreFrame.dfm
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/jcl/experts/debug/dialog/JclOtaExcDlgIgnoreFrame.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/JclOtaExcDlgIgnoreFrame.pas (rev 0)
+++ trunk/jcl/experts/debug/dialog/JclOtaExcDlgIgnoreFrame.pas 2007-02-16 21:32:52 UTC (rev 1940)
@@ -0,0 +1,124 @@
+{****************************************************************************}
+{ }
+{ Project JEDI Code Library (JCL) }
+{ }
+{ The contents of this file are subject to the Mozilla Public License }
+{ Version 1.1 (the "License"); }
+{ you may not use this file except in compliance with the License. You may }
+{ obtain a copy of the License at http://www.mozilla.org/MPL/ }
+{ }
+{ Software distributed under the License is distributed on an "AS IS" basis, }
+{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License }
+{ for the specific language governing rights and limitations under the }
+{ License. }
+{ }
+{ The Original Code is JclOtaExcDlgIgnoreFrame.pas. }
+{ }
+{ The Initial Developer of the Original Code is Florent Ouchet }
+{ <outchy att users dott sourceforge dott net> }
+{ Portions created by Florent Ouchet are Copyright (C) of Florent Ouchet. }
+{ }
+{ Contributors: }
+{ }
+{****************************************************************************}
+{ }
+{ Last modified: $Date$ }
+{ }
+{****************************************************************************}
+
+unit JclOtaExcDlgIgnoreFrame;
+
+interface
+
+{$I jcl.inc}
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
+ Dialogs, StdCtrls,
+ JclOtaExcDlgRepository, JclOtaWizardFrame;
+
+type
+ TJclOtaExcDlgIgnorePage = class(TJclWizardFrame)
+ CheckBoxTraceAllExceptions: TCheckBox;
+ CheckBoxTraceEAbort: TCheckBox;
+ LabelIgnoredExceptions: TLabel;
+ MemoIgnoredExceptions: TMemo;
+ procedure CheckBoxTraceAllExceptionsClick(Sender: TObject);
+ private
+ FParams: TJclOtaExcDlgParams;
+ procedure UpdateControls;
+ public
+ constructor Create(AOwner: TComponent; AParams: TJclOtaExcDlgParams); reintroduce;
+
+ procedure PageActivated(Direction: TJclWizardDirection); override;
+ procedure PageDesactivated(Direction: TJclWizardDirection); override;
+
+ property Params: TJclOtaExcDlgParams read FParams write FParams;
+ end;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ JclOtaResources;
+
+//=== { TJclOtaExcDlgIgnorePage } ============================================
+
+procedure TJclOtaExcDlgIgnorePage.CheckBoxTraceAllExceptionsClick(
+ Sender: TObject);
+begin
+ UpdateControls;
+end;
+
+constructor TJclOtaExcDlgIgnorePage.Create(AOwner: TComponent;
+ AParams: TJclOtaExcDlgParams);
+begin
+ FParams := AParams;
+ inherited Create(AOwner);
+
+ Caption := RsExcDlgIgnoreOptions;
+ CheckBoxTraceAllExceptions.Caption := RsTraceAllExceptions;
+ CheckBoxTraceEAbort.Caption := RsTraceEAbort;
+ LabelIgnoredExceptions.Caption := RsIgnoredExceptions;
+end;
+
+procedure TJclOtaExcDlgIgnorePage.PageActivated(Direction: TJclWizardDirection);
+begin
+ inherited PageActivated(Direction);
+
+ CheckBoxTraceAllExceptions.Checked := Params.TraceAllExceptions;
+ CheckBoxTraceEAbort.Checked := Params.TraceEAbort;
+ MemoIgnoredExceptions.Lines.Assign(Params.IgnoredExceptions);
+ UpdateControls;
+end;
+
+procedure TJclOtaExcDlgIgnorePage.PageDesactivated(
+ Direction: TJclWizardDirection);
+begin
+ inherited PageDesactivated(Direction);
+
+ Params.TraceAllExceptions := CheckBoxTraceAllExceptions.Checked;
+ Params.TraceEAbort := CheckBoxTraceEAbort.Checked;
+ Params.IgnoredExceptions.Assign(MemoIgnoredExceptions.Lines);
+end;
+
+procedure TJclOtaExcDlgIgnorePage.UpdateControls;
+begin
+ if CheckBoxTraceAllExceptions.Checked then
+ begin
+ CheckBoxTraceEAbort.Enabled := False;
+ MemoIgnoredExceptions.Enabled := False;
+ LabelIgnoredExceptions.Enabled := False;
+ MemoIgnoredExceptions.ParentColor := True;
+ end
+ else
+ begin
+ CheckBoxTraceEAbort.Enabled := True;
+ MemoIgnoredExceptions.Enabled := True;
+ LabelIgnoredExceptions.Enabled := True;
+ MemoIgnoredExceptions.Color := clWindow;
+ end;
+end;
+
+end.
Property changes on: trunk/jcl/experts/debug/dialog/JclOtaExcDlgIgnoreFrame.pas
___________________________________________________________________
Name: svn:keywords
+ URL HeadURL Author LastChangedBy Date LastChangedDate Rev Revision LastChangedRevision Id
Name: svn:eol-style
+ native
Modified: trunk/jcl/experts/debug/dialog/JclOtaExcDlgRepository.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/JclOtaExcDlgRepository.pas 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/experts/debug/dialog/JclOtaExcDlgRepository.pas 2007-02-16 21:32:52 UTC (rev 1940)
@@ -33,7 +33,7 @@
{$I jcl.inc}
uses
- SysUtils,
+ SysUtils, Classes,
ToolsAPI,
JclBorlandTools,
JclOtaUtils, JclOtaTemplates, JclOtaRepositoryUtils;
@@ -68,8 +68,13 @@
FStackList: Boolean;
FAutoScrollBars: Boolean;
FMainThreadOnly: Boolean;
+ FTraceEAbort: Boolean;
+ FIgnoredExceptions: TStrings;
+ FTraceAllExceptions: Boolean;
+ function GetIgnoredExceptionsCount: Integer;
public
constructor Create; reintroduce;
+ destructor Destroy; override;
published
// file options
property Languages: TJclBorPersonalities read FLanguages write FLanguages;
@@ -95,6 +100,12 @@
property ModuleList: Boolean read FModuleList write FModuleList;
property ActiveControls: Boolean read FActiveControls write FActiveControls;
property MainThreadOnly: Boolean read FMainThreadOnly write FMainThreadOnly;
+ // ignored exceptions
+ property TraceAllExceptions: Boolean read FTraceAllExceptions
+ write FTraceAllExceptions;
+ property TraceEAbort: Boolean read FTraceEAbort write FTraceEAbort;
+ property IgnoredExceptions: TStrings read FIgnoredExceptions write FIgnoredExceptions;
+ property IgnoredExceptionsCount: Integer read GetIgnoredExceptionsCount;
// trace options
property StackList: Boolean read FStackList write FStackList;
property RawData: Boolean read FRawData write FRawData;
@@ -133,7 +144,7 @@
{$R JclOtaExcDlgIcons.res}
uses
- Windows, Classes, Forms,
+ Windows, Forms,
JclStrings, JclFileUtils, JclSysInfo, JclResources, JclRegistry,
JclOtaConsts, JclOtaResources, JclOtaExcDlgWizard;
@@ -142,7 +153,7 @@
constructor TJclOtaExcDlgParams.Create;
begin
inherited Create;
-
+
FHookDll := True;
FLanguage := bpUnknown;
FLanguages := [bpUnknown];
@@ -170,8 +181,23 @@
FActiveControls := True;
FStackList := True;
FAutoScrollBars := True;
+ FMainThreadOnly := False;
+ FTraceEAbort := False;
+ FTraceAllExceptions := False;
+ FIgnoredExceptions := TStringList.Create;
end;
+destructor TJclOtaExcDlgParams.Destroy;
+begin
+ FIgnoredExceptions.Free;
+ inherited Destroy;
+end;
+
+function TJclOtaExcDlgParams.GetIgnoredExceptionsCount: Integer;
+begin
+ Result := FIgnoredExceptions.Count;
+end;
+
//=== { TJclExcDlgExpert } ===================================================
procedure TJclExcDlgExpert.CreateExceptionDialog(
Modified: trunk/jcl/experts/debug/dialog/JclOtaExcDlgWizard.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/JclOtaExcDlgWizard.pas 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/experts/debug/dialog/JclOtaExcDlgWizard.pas 2007-02-16 21:32:52 UTC (rev 1940)
@@ -57,7 +57,7 @@
uses
JclOtaResources,
JclOtaExcDlgFileFrame, JclOtaExcDlgFormFrame,
- JclOtaExcDlgSystemFrame, JclOtaExcDlgTraceFrame;
+ JclOtaExcDlgSystemFrame, JclOtaExcDlgTraceFrame, JclOtaExcDlgIgnoreFrame;
function ExcDlgWizard(var AParams: TJclOtaExcDlgParams): Boolean;
var
@@ -66,7 +66,7 @@
begin
Result := False;
OwnsParams := False;
-
+
if not Assigned(AParams) then
begin
OwnsParams := True;
@@ -98,10 +98,11 @@
begin
inherited FormCreate(Sender);
Caption := RsExceptionDialogConfigure;
-
+
AddPage(TJclOtaExcDlgFilePage.Create(Self, Params));
AddPage(TJclOtaExcDlgFormPage.Create(Self, Params));
AddPage(TJclOtaExcDlgSystemPage.Create(Self, Params));
+ AddPage(TJclOtaExcDlgIgnorePage.Create(Self, Params));
AddPage(TJclOtaExcDlgTracePage.Create(Self, Params));
end;
Modified: trunk/jcl/experts/debug/dialog/JclOtaTemplates.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/JclOtaTemplates.pas 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/experts/debug/dialog/JclOtaTemplates.pas 2007-02-16 21:32:52 UTC (rev 1940)
@@ -44,6 +44,7 @@
function IsDefined(const Name: string): Boolean; virtual;
function GetStrValue(const Name: string): string; virtual;
function GetIntValue(const Name: string): Integer; virtual;
+ function GetStringsValue(const Name: string): TStrings; virtual;
property Language: TJclBorPersonality read FLanguage write FLanguage;
end;
@@ -101,8 +102,9 @@
end;
var
IndexInput, IndexOutput, TokenPos, CharCountIn, CharCountOut,
- IfCount: Integer;
- Identifier, Symbol, StrValue: string;
+ IfCount, StrIndex, RepeatCount: Integer;
+ Identifier, Symbol, StrValue, RepeatPattern, RepeatValue: string;
+ StrList: TStrings;
begin
CharCountIn := Length(Template);
CharCountOut := 2*CharCountIn;
@@ -197,6 +199,41 @@
CopyStr(Result, IndexOutput, CharCountOut, StrValue, 1, Length(StrValue));
end;
end
+ else if Identifier = '%REPEATLINE' then
+ begin
+ TokenPos := SkipBlanks(Template, TokenPos, CharCountIn);
+ Symbol := GetIdentifier(Template, TokenPos, CharCountIn);
+ if IfCount = 0 then
+ begin
+ RepeatCount := Params.GetIntValue(Symbol);
+ StrIndex := TokenPos;
+ while (StrIndex <= CharCountIn) and not (Template[StrIndex] in [AnsiLineFeed, AnsiCarriageReturn]) do
+ Inc(StrIndex);
+ RepeatPattern := Copy(Template, TokenPos, StrIndex - TokenPos);
+ TokenPos := StrIndex;
+
+ while RepeatCount > 0 do
+ begin
+ StrValue := RepeatPattern;
+ StrIndex := Pos('%', StrValue);
+ while StrIndex > 0 do
+ begin
+ Inc(StrIndex);
+ Symbol := GetIdentifier(StrValue, StrIndex, Length(StrValue));
+ StrList := Params.GetStringsValue(Symbol);
+ if Assigned(StrList) then
+ RepeatValue := StrList.Strings[RepeatCount - 1]
+ else
+ RepeatValue := '';
+ StrReplace(StrValue, '%' + Symbol, RepeatValue, [rfReplaceAll, rfIgnoreCase]);
+ StrIndex := Pos('%', StrValue);
+ end;
+ CopyStr(Result, IndexOutput, CharCountOut, StrValue, 1, Length(StrValue));
+ CopyStr(Result, IndexOutput, CharCountOut, AnsiLineBreak, 1, Length(AnsiLineBreak));
+ Dec(RepeatCount);
+ end;
+ end;
+ end
else if IfCount = 0 then
CopyStr(Result, IndexOutput, CharCountOut, Identifier, 1, Length(Identifier));
@@ -223,6 +260,17 @@
Result := Integer(VariantValue);
end;
+function TJclOtaTemplateParams.GetStringsValue(const Name: string): TStrings;
+var
+ AInstance: TObject;
+begin
+ AInstance := TObject(GetOrdProp(Self, Name));
+ if Assigned(Result) and (Result is TStrings) then
+ Result := TStrings(AInstance)
+ else
+ Result := nil;
+end;
+
function TJclOtaTemplateParams.GetStrValue(const Name: string): string;
var
VariantValue: Variant;
Modified: trunk/jcl/packages/c5/JclRepositoryExpertC50.bpk
===================================================================
--- trunk/jcl/packages/c5/JclRepositoryExpertC50.bpk 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/c5/JclRepositoryExpertC50.bpk 2007-02-16 21:32:52 UTC (rev 1940)
@@ -5,7 +5,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpert-D.xml)
- Last generated: 24-09-2006 19:22:39 UTC
+ Last generated: 16-02-2007 19:07:51 UTC
*****************************************************************************
-->
<PROJECT>
@@ -23,6 +23,7 @@
..\..\lib\c5\JclOtaExcDlgSystemFrame.obj
..\..\lib\c5\JclOtaExcDlgTraceFrame.obj
..\..\lib\c5\JclOtaTemplates.obj
+ ..\..\lib\c5\JclOtaExcDlgIgnoreFrame.obj
"/>
<RESFILES value="JclRepositoryExpertC50.res"/>
<IDLFILES value=""/>
@@ -34,6 +35,7 @@
..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.dfm
..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.dfm
..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.dfm
+ ..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.dfm
"/>
<LIBFILES value="
"/>
Modified: trunk/jcl/packages/c5/JclRepositoryExpertC50.cpp
===================================================================
--- trunk/jcl/packages/c5/JclRepositoryExpertC50.cpp 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/c5/JclRepositoryExpertC50.cpp 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpert-D.xml)
- Last generated: 21-05-2006 13:04:21 UTC
+ Last generated: 16-02-2007 19:07:51 UTC
-----------------------------------------------------------------------------
*/
@@ -20,6 +20,7 @@
USEUNIT("..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas");
USEUNIT("..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas");
USEUNIT("..\..\experts\debug\dialog\JclOtaTemplates.pas");
+USEUNIT("..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas");
USEPACKAGE("vcl50.bpi");
USEPACKAGE("dsnide50.bpi");
USEPACKAGE("JclC50.bpi");
Modified: trunk/jcl/packages/c5/JclRepositoryExpertC50.dpk
===================================================================
--- trunk/jcl/packages/c5/JclRepositoryExpertC50.dpk 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/c5/JclRepositoryExpertC50.dpk 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpert-D.xml)
- Last generated: 21-05-2006 13:04:21 UTC
+ Last generated: 16-02-2007 19:07:51 UTC
-----------------------------------------------------------------------------
}
@@ -50,7 +50,8 @@
JclOtaExcDlgFormFrame in '..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.pas' {JclOtaExcDlgFormPage: TFrame},
JclOtaExcDlgSystemFrame in '..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas' {JclOtaExcDlgSystemPage: TFrame},
JclOtaExcDlgTraceFrame in '..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas' {JclOtaExcDlgTracePage: TFrame},
- JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas'
+ JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas' ,
+ JclOtaExcDlgIgnoreFrame in '..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas' {JclOtaExcDlgIgnoredPage: TFrame}
;
end.
Modified: trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.bpf
===================================================================
--- trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.bpf 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.bpf 2007-02-16 21:32:52 UTC (rev 1940)
@@ -7,6 +7,7 @@
USEUNIT("..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas");
USEUNIT("..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas");
USEUNIT("..\..\experts\debug\dialog\JclOtaTemplates.pas");
+USEUNIT("..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas");
USEDEF("JclRepositoryExpertDLLC50.def");
Project file
DllEntryPoint
Modified: trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.bpr
===================================================================
--- trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.bpr 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.bpr 2007-02-16 21:32:52 UTC (rev 1940)
@@ -5,7 +5,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpertDLL-L.xml)
- Last generated: 24-09-2006 19:22:39 UTC
+ Last generated: 16-02-2007 19:07:51 UTC
*****************************************************************************
-->
<PROJECT>
@@ -23,6 +23,7 @@
..\..\lib\c5\JclOtaExcDlgSystemFrame.obj
..\..\lib\c5\JclOtaExcDlgTraceFrame.obj
..\..\lib\c5\JclOtaTemplates.obj
+ ..\..\lib\c5\JclOtaExcDlgIgnoreFrame.obj
"/>
<RESFILES value="JclRepositoryExpertDLLC50.res"/>
<IDLFILES value=""/>
@@ -34,6 +35,7 @@
..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.dfm
..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.dfm
..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.dfm
+ ..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.dfm
"/>
<LIBFILES value="
"/>
Modified: trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.cpp
===================================================================
--- trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.cpp 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/c5/JclRepositoryExpertDLLC50.cpp 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpertDLL-L.xml)
- Last generated: 23-05-2006 00:21:43 UTC
+ Last generated: 16-02-2007 19:07:51 UTC
-----------------------------------------------------------------------------
*/
@@ -20,6 +20,7 @@
USEUNIT("..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas");
USEUNIT("..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas");
USEUNIT("..\..\experts\debug\dialog\JclOtaTemplates.pas");
+USEUNIT("..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas");
USEPACKAGE("vcl50.bpi");
USEPACKAGE("dsnide50.bpi");
USEPACKAGE("JclC50.bpi");
Modified: trunk/jcl/packages/c6/JclRepositoryExpert.bpk
===================================================================
--- trunk/jcl/packages/c6/JclRepositoryExpert.bpk 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/c6/JclRepositoryExpert.bpk 2007-02-16 21:32:52 UTC (rev 1940)
@@ -5,7 +5,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpert-D.xml)
- Last generated: 24-09-2006 19:28:07 UTC
+ Last generated: 16-02-2007 19:07:51 UTC
*****************************************************************************
-->
<PROJECT>
@@ -23,6 +23,7 @@
..\..\lib\c6\obj\JclOtaExcDlgSystemFrame.obj
..\..\lib\c6\obj\JclOtaExcDlgTraceFrame.obj
..\..\lib\c6\obj\JclOtaTemplates.obj
+ ..\..\lib\c6\obj\JclOtaExcDlgIgnoreFrame.obj
"/>
<RESFILES value="JclRepositoryExpert.res"/>
<IDLFILES value=""/>
@@ -34,6 +35,7 @@
..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.dfm
..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.dfm
..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.dfm
+ ..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.dfm
"/>
<LIBFILES value="
"/>
@@ -96,6 +98,7 @@
<FILE FILENAME="..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas" FORMNAME="JclOtaExcDlgSystemPage" UNITNAME="JclOtaExcDlgSystemFrame" CONTAINERID="PascalCompiler" DESIGNCLASS="TFrame" LOCALCOMMAND=""/>
<FILE FILENAME="..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas" FORMNAME="JclOtaExcDlgTracePage" UNITNAME="JclOtaExcDlgTraceFrame" CONTAINERID="PascalCompiler" DESIGNCLASS="TFrame" LOCALCOMMAND=""/>
<FILE FILENAME="..\..\experts\debug\dialog\JclOtaTemplates.pas" FORMNAME="" UNITNAME="JclOtaTemplates" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+ <FILE FILENAME="..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas" FORMNAME="JclOtaExcDlgIgnoredPage" UNITNAME="JclOtaExcDlgIgnoreFrame" CONTAINERID="PascalCompiler" DESIGNCLASS="TFrame" LOCALCOMMAND=""/>
</FILELIST>
<BUILDTOOLS>
</BUILDTOOLS>
Modified: trunk/jcl/packages/c6/JclRepositoryExpert.cpp
===================================================================
--- trunk/jcl/packages/c6/JclRepositoryExpert.cpp 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/c6/JclRepositoryExpert.cpp 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpert-D.xml)
- Last generated: 21-05-2006 13:04:22 UTC
+ Last generated: 16-02-2007 19:07:51 UTC
-----------------------------------------------------------------------------
*/
@@ -16,6 +16,7 @@
USEFORMNS("..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.pas", Jclotaexcdlgformframe, JclOtaExcDlgFormPage); /* TFrame: File Type */
USEFORMNS("..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas", Jclotaexcdlgsystemframe, JclOtaExcDlgSystemPage); /* TFrame: File Type */
USEFORMNS("..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas", Jclotaexcdlgtraceframe, JclOtaExcDlgTracePage); /* TFrame: File Type */
+USEFORMNS("..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas", Jclotaexcdlgignoreframe, JclOtaExcDlgIgnoredPage); /* TFrame: File Type */
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
Modified: trunk/jcl/packages/c6/JclRepositoryExpert.dpk
===================================================================
--- trunk/jcl/packages/c6/JclRepositoryExpert.dpk 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/c6/JclRepositoryExpert.dpk 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpert-D.xml)
- Last generated: 21-05-2006 13:04:23 UTC
+ Last generated: 16-02-2007 19:07:51 UTC
-----------------------------------------------------------------------------
}
@@ -51,6 +51,7 @@
JclOtaExcDlgFormFrame in '..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.pas' {JclOtaExcDlgFormPage: TFrame},
JclOtaExcDlgSystemFrame in '..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas' {JclOtaExcDlgSystemPage: TFrame},
JclOtaExcDlgTraceFrame in '..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas' {JclOtaExcDlgTracePage: TFrame},
- JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas'
+ JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas' ,
+ JclOtaExcDlgIgnoreFrame in '..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas' {JclOtaExcDlgIgnoredPage: TFrame}
;
end.
Modified: trunk/jcl/packages/c6/JclRepositoryExpertDLL.bpf
===================================================================
--- trunk/jcl/packages/c6/JclRepositoryExpertDLL.bpf 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/c6/JclRepositoryExpertDLL.bpf 2007-02-16 21:32:52 UTC (rev 1940)
@@ -7,6 +7,7 @@
USEUNIT("..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas");
USEUNIT("..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas");
USEUNIT("..\..\experts\debug\dialog\JclOtaTemplates.pas");
+USEUNIT("..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas");
USEDEF("JclRepositoryExpertDLL.def");
Project file
DllEntryPoint
Modified: trunk/jcl/packages/c6/JclRepositoryExpertDLL.bpr
===================================================================
--- trunk/jcl/packages/c6/JclRepositoryExpertDLL.bpr 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/c6/JclRepositoryExpertDLL.bpr 2007-02-16 21:32:52 UTC (rev 1940)
@@ -5,7 +5,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpertDLL-L.xml)
- Last generated: 24-09-2006 19:28:07 UTC
+ Last generated: 16-02-2007 19:07:51 UTC
*****************************************************************************
-->
<PROJECT>
@@ -23,6 +23,7 @@
..\..\lib\c6\obj\JclOtaExcDlgSystemFrame.obj
..\..\lib\c6\obj\JclOtaExcDlgTraceFrame.obj
..\..\lib\c6\obj\JclOtaTemplates.obj
+ ..\..\lib\c6\obj\JclOtaExcDlgIgnoreFrame.obj
"/>
<RESFILES value=""/>
<IDLFILES value=""/>
@@ -34,6 +35,7 @@
..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.dfm
..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.dfm
..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.dfm
+ ..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.dfm
"/>
<LIBFILES value="
"/>
@@ -94,6 +96,7 @@
<FILE FILENAME="..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas" FORMNAME="JclOtaExcDlgSystemPage" UNITNAME="JclOtaExcDlgSystemFrame" CONTAINERID="PascalCompiler" DESIGNCLASS="TFrame" LOCALCOMMAND=""/>
<FILE FILENAME="..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas" FORMNAME="JclOtaExcDlgTracePage" UNITNAME="JclOtaExcDlgTraceFrame" CONTAINERID="PascalCompiler" DESIGNCLASS="TFrame" LOCALCOMMAND=""/>
<FILE FILENAME="..\..\experts\debug\dialog\JclOtaTemplates.pas" FORMNAME="" UNITNAME="JclOtaTemplates" CONTAINERID="PascalCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
+ <FILE FILENAME="..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas" FORMNAME="JclOtaExcDlgIgnorePage" UNITNAME="JclOtaExcDlgIgnoreFrame" CONTAINERID="PascalCompiler" DESIGNCLASS="TFrame" LOCALCOMMAND=""/>
</FILELIST>
<BUILDTOOLS>
</BUILDTOOLS>
Modified: trunk/jcl/packages/c6/JclRepositoryExpertDLL.cpp
===================================================================
--- trunk/jcl/packages/c6/JclRepositoryExpertDLL.cpp 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/c6/JclRepositoryExpertDLL.cpp 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpertDLL-L.xml)
- Last generated: 23-05-2006 00:21:43 UTC
+ Last generated: 16-02-2007 19:07:51 UTC
-----------------------------------------------------------------------------
*/
@@ -16,6 +16,7 @@
USEFORMNS("..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.pas", Jclotaexcdlgformframe, JclOtaExcDlgFormPage); /* TFrame: File Type */
USEFORMNS("..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas", Jclotaexcdlgsystemframe, JclOtaExcDlgSystemPage); /* TFrame: File Type */
USEFORMNS("..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas", Jclotaexcdlgtraceframe, JclOtaExcDlgTracePage); /* TFrame: File Type */
+USEFORMNS("..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas", Jclotaexcdlgignoreframe, JclOtaExcDlgIgnorePage); /* TFrame: File Type */
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
Modified: trunk/jcl/packages/d10/JclRepositoryExpert.dpk
===================================================================
--- trunk/jcl/packages/d10/JclRepositoryExpert.dpk 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/d10/JclRepositoryExpert.dpk 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpert-D.xml)
- Last generated: 23-05-2006 00:14:02 UTC
+ Last generated: 16-02-2007 19:07:53 UTC
-----------------------------------------------------------------------------
}
@@ -52,7 +52,8 @@
JclOtaExcDlgFormFrame in '..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.pas' {JclOtaExcDlgFormPage: TFrame},
JclOtaExcDlgSystemFrame in '..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas' {JclOtaExcDlgSystemPage: TFrame},
JclOtaExcDlgTraceFrame in '..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas' {JclOtaExcDlgTracePage: TFrame},
- JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas'
+ JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas' ,
+ JclOtaExcDlgIgnoreFrame in '..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas' {JclOtaExcDlgIgnoredPage: TFrame}
;
end.
Modified: trunk/jcl/packages/d10/JclRepositoryExpertDLL.dpr
===================================================================
--- trunk/jcl/packages/d10/JclRepositoryExpertDLL.dpr 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/d10/JclRepositoryExpertDLL.dpr 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpertDLL-L.xml)
- Last generated: 23-05-2006 00:21:44 UTC
+ Last generated: 16-02-2007 19:07:53 UTC
-----------------------------------------------------------------------------
}
@@ -44,7 +44,8 @@
JclOtaExcDlgFormFrame in '..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.pas' {JclOtaExcDlgFormPage: TFrame},
JclOtaExcDlgSystemFrame in '..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas' {JclOtaExcDlgSystemPage: TFrame},
JclOtaExcDlgTraceFrame in '..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas' {JclOtaExcDlgTracePage: TFrame},
- JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas'
+ JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas' ,
+ JclOtaExcDlgIgnoreFrame in '..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas' {JclOtaExcDlgIgnorePage: TFrame}
;
exports
Modified: trunk/jcl/packages/d5/JclRepositoryExpertD50.dpk
===================================================================
--- trunk/jcl/packages/d5/JclRepositoryExpertD50.dpk 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/d5/JclRepositoryExpertD50.dpk 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpert-D.xml)
- Last generated: 21-05-2006 13:04:24 UTC
+ Last generated: 16-02-2007 19:07:51 UTC
-----------------------------------------------------------------------------
}
@@ -50,7 +50,8 @@
JclOtaExcDlgFormFrame in '..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.pas' {JclOtaExcDlgFormPage: TFrame},
JclOtaExcDlgSystemFrame in '..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas' {JclOtaExcDlgSystemPage: TFrame},
JclOtaExcDlgTraceFrame in '..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas' {JclOtaExcDlgTracePage: TFrame},
- JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas'
+ JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas' ,
+ JclOtaExcDlgIgnoreFrame in '..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas' {JclOtaExcDlgIgnoredPage: TFrame}
;
end.
Modified: trunk/jcl/packages/d5/JclRepositoryExpertDLLD50.dpr
===================================================================
--- trunk/jcl/packages/d5/JclRepositoryExpertDLLD50.dpr 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/d5/JclRepositoryExpertDLLD50.dpr 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpertDLL-L.xml)
- Last generated: 23-05-2006 00:21:43 UTC
+ Last generated: 16-02-2007 19:07:52 UTC
-----------------------------------------------------------------------------
}
@@ -43,7 +43,8 @@
JclOtaExcDlgFormFrame in '..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.pas' {JclOtaExcDlgFormPage: TFrame},
JclOtaExcDlgSystemFrame in '..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas' {JclOtaExcDlgSystemPage: TFrame},
JclOtaExcDlgTraceFrame in '..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas' {JclOtaExcDlgTracePage: TFrame},
- JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas'
+ JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas' ,
+ JclOtaExcDlgIgnoreFrame in '..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas' {JclOtaExcDlgIgnorePage: TFrame}
;
exports
Modified: trunk/jcl/packages/d6/JclRepositoryExpert.dpk
===================================================================
--- trunk/jcl/packages/d6/JclRepositoryExpert.dpk 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/d6/JclRepositoryExpert.dpk 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpert-D.xml)
- Last generated: 21-05-2006 13:04:25 UTC
+ Last generated: 16-02-2007 19:07:52 UTC
-----------------------------------------------------------------------------
}
@@ -52,7 +52,8 @@
JclOtaExcDlgFormFrame in '..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.pas' {JclOtaExcDlgFormPage: TFrame},
JclOtaExcDlgSystemFrame in '..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas' {JclOtaExcDlgSystemPage: TFrame},
JclOtaExcDlgTraceFrame in '..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas' {JclOtaExcDlgTracePage: TFrame},
- JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas'
+ JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas' ,
+ JclOtaExcDlgIgnoreFrame in '..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas' {JclOtaExcDlgIgnoredPage: TFrame}
;
end.
Modified: trunk/jcl/packages/d6/JclRepositoryExpertDLL.dpr
===================================================================
--- trunk/jcl/packages/d6/JclRepositoryExpertDLL.dpr 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/d6/JclRepositoryExpertDLL.dpr 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpertDLL-L.xml)
- Last generated: 23-05-2006 00:21:44 UTC
+ Last generated: 16-02-2007 19:07:52 UTC
-----------------------------------------------------------------------------
}
@@ -44,7 +44,8 @@
JclOtaExcDlgFormFrame in '..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.pas' {JclOtaExcDlgFormPage: TFrame},
JclOtaExcDlgSystemFrame in '..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas' {JclOtaExcDlgSystemPage: TFrame},
JclOtaExcDlgTraceFrame in '..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas' {JclOtaExcDlgTracePage: TFrame},
- JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas'
+ JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas' ,
+ JclOtaExcDlgIgnoreFrame in '..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas' {JclOtaExcDlgIgnorePage: TFrame}
;
exports
Modified: trunk/jcl/packages/d7/JclRepositoryExpert.dpk
===================================================================
--- trunk/jcl/packages/d7/JclRepositoryExpert.dpk 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/d7/JclRepositoryExpert.dpk 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpert-D.xml)
- Last generated: 21-05-2006 13:04:27 UTC
+ Last generated: 16-02-2007 19:07:52 UTC
-----------------------------------------------------------------------------
}
@@ -52,7 +52,8 @@
JclOtaExcDlgFormFrame in '..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.pas' {JclOtaExcDlgFormPage: TFrame},
JclOtaExcDlgSystemFrame in '..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas' {JclOtaExcDlgSystemPage: TFrame},
JclOtaExcDlgTraceFrame in '..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas' {JclOtaExcDlgTracePage: TFrame},
- JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas'
+ JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas' ,
+ JclOtaExcDlgIgnoreFrame in '..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas' {JclOtaExcDlgIgnoredPage: TFrame}
;
end.
Modified: trunk/jcl/packages/d7/JclRepositoryExpertDLL.dpr
===================================================================
--- trunk/jcl/packages/d7/JclRepositoryExpertDLL.dpr 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/d7/JclRepositoryExpertDLL.dpr 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpertDLL-L.xml)
- Last generated: 23-05-2006 00:21:44 UTC
+ Last generated: 16-02-2007 19:07:52 UTC
-----------------------------------------------------------------------------
}
@@ -44,7 +44,8 @@
JclOtaExcDlgFormFrame in '..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.pas' {JclOtaExcDlgFormPage: TFrame},
JclOtaExcDlgSystemFrame in '..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas' {JclOtaExcDlgSystemPage: TFrame},
JclOtaExcDlgTraceFrame in '..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas' {JclOtaExcDlgTracePage: TFrame},
- JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas'
+ JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas' ,
+ JclOtaExcDlgIgnoreFrame in '..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas' {JclOtaExcDlgIgnorePage: TFrame}
;
exports
Modified: trunk/jcl/packages/d9/JclRepositoryExpert.dpk
===================================================================
--- trunk/jcl/packages/d9/JclRepositoryExpert.dpk 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/d9/JclRepositoryExpert.dpk 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpert-D.xml)
- Last generated: 21-05-2006 13:04:30 UTC
+ Last generated: 16-02-2007 19:07:53 UTC
-----------------------------------------------------------------------------
}
@@ -52,7 +52,8 @@
JclOtaExcDlgFormFrame in '..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.pas' {JclOtaExcDlgFormPage: TFrame},
JclOtaExcDlgSystemFrame in '..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas' {JclOtaExcDlgSystemPage: TFrame},
JclOtaExcDlgTraceFrame in '..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas' {JclOtaExcDlgTracePage: TFrame},
- JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas'
+ JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas' ,
+ JclOtaExcDlgIgnoreFrame in '..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas' {JclOtaExcDlgIgnoredPage: TFrame}
;
end.
Modified: trunk/jcl/packages/d9/JclRepositoryExpertDLL.dpr
===================================================================
--- trunk/jcl/packages/d9/JclRepositoryExpertDLL.dpr 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/d9/JclRepositoryExpertDLL.dpr 2007-02-16 21:32:52 UTC (rev 1940)
@@ -4,7 +4,7 @@
DO NOT EDIT THIS FILE, IT IS GENERATED BY THE PACKAGE GENERATOR
ALWAYS EDIT THE RELATED XML FILE (JclRepositoryExpertDLL-L.xml)
- Last generated: 23-05-2006 00:21:44 UTC
+ Last generated: 16-02-2007 19:07:53 UTC
-----------------------------------------------------------------------------
}
@@ -44,7 +44,8 @@
JclOtaExcDlgFormFrame in '..\..\experts\debug\dialog\JclOtaExcDlgFormFrame.pas' {JclOtaExcDlgFormPage: TFrame},
JclOtaExcDlgSystemFrame in '..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas' {JclOtaExcDlgSystemPage: TFrame},
JclOtaExcDlgTraceFrame in '..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas' {JclOtaExcDlgTracePage: TFrame},
- JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas'
+ JclOtaTemplates in '..\..\experts\debug\dialog\JclOtaTemplates.pas' ,
+ JclOtaExcDlgIgnoreFrame in '..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas' {JclOtaExcDlgIgnorePage: TFrame}
;
exports
Modified: trunk/jcl/packages/xml/JclRepositoryExpert-D.xml
===================================================================
--- trunk/jcl/packages/xml/JclRepositoryExpert-D.xml 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/xml/JclRepositoryExpert-D.xml 2007-02-16 21:32:52 UTC (rev 1940)
@@ -31,5 +31,6 @@
<File Name="..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas" Targets="Windows" Formname="JclOtaExcDlgSystemPage: TFrame" Condition=""/>
<File Name="..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas" Targets="Windows" Formname="JclOtaExcDlgTracePage: TFrame" Condition=""/>
<File Name="..\..\experts\debug\dialog\JclOtaTemplates.pas" Targets="Windows" Formname="" Condition=""/>
+ <File Name="..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas" Targets="Windows" Formname="JclOtaExcDlgIgnoredPage: TFrame" Condition=""/>
</Contains>
</Package>
Modified: trunk/jcl/packages/xml/JclRepositoryExpertDLL-L.xml
===================================================================
--- trunk/jcl/packages/xml/JclRepositoryExpertDLL-L.xml 2007-02-16 19:04:22 UTC (rev 1939)
+++ trunk/jcl/packages/xml/JclRepositoryExpertDLL-L.xml 2007-02-16 21:32:52 UTC (rev 1940)
@@ -31,5 +31,6 @@
<File Name="..\..\experts\debug\dialog\JclOtaExcDlgSystemFrame.pas" Targets="Windows" Formname="JclOtaExcDlgSystemPage: TFrame" Condition=""/>
<File Name="..\..\experts\debug\dialog\JclOtaExcDlgTraceFrame.pas" Targets="Windows" Formname="JclOtaExcDlgTracePage: TFrame" Condition=""/>
<File Name="..\..\experts\debug\dialog\JclOtaTemplates.pas" Targets="Windows" Formname="" Condition=""/>
+ <File Name="..\..\experts\debug\dialog\JclOtaExcDlgIgnoreFrame.pas" Targets="Windows" Formname="JclOtaExcDlgIgnorePage: TFrame" Condition=""/>
</Contains>
</Package>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ah...@us...> - 2007-02-16 19:04:24
|
Revision: 1939
http://svn.sourceforge.net/jcl/?rev=1939&view=rev
Author: ahuser
Date: 2007-02-16 11:04:22 -0800 (Fri, 16 Feb 2007)
Log Message:
-----------
Added WideStartsText and WideStartsStr
Modified Paths:
--------------
trunk/jcl/source/common/JclWideStrings.pas
Modified: trunk/jcl/source/common/JclWideStrings.pas
===================================================================
--- trunk/jcl/source/common/JclWideStrings.pas 2007-02-16 17:17:06 UTC (rev 1938)
+++ trunk/jcl/source/common/JclWideStrings.pas 2007-02-16 19:04:22 UTC (rev 1939)
@@ -288,6 +288,9 @@
function TrimLeftLengthW(const S: WideString): Integer;
function TrimRightLengthW(const S: WideString): Integer;
+function WideStartsText(const SubStr, S: WideString): Boolean;
+function WideStartsStr(const SubStr, S: WideString): Boolean;
+
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
@@ -1041,6 +1044,23 @@
Dec(Result);
end;
+function WideStartsText(const SubStr, S: WideString): Boolean;
+var
+ Len: Integer;
+begin
+ Len := Length(SubStr);
+ Result := (Len <= Length(S)) and (StrLICompW(PWideChar(SubStr), PWideChar(S), Len) = 0);
+end;
+
+function WideStartsStr(const SubStr, S: WideString): Boolean;
+var
+ Len: Integer;
+begin
+ Len := Length(SubStr);
+ Result := (Len <= Length(S)) and (StrLCompW(PWideChar(SubStr), PWideChar(S), Len) = 0);
+end;
+
+
//=== { TWStrings } ==========================================================
constructor TWStrings.Create;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-16 17:17:14
|
Revision: 1938
http://svn.sourceforge.net/jcl/?rev=1938&view=rev
Author: outchy
Date: 2007-02-16 09:17:06 -0800 (Fri, 16 Feb 2007)
Log Message:
-----------
fix a problem where the exception stack tracing mechanism seemed to go into an infinite loop (the StackFrame^.CallersEBP was the same as the StackFrame)
Modified Paths:
--------------
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-16 16:57:47 UTC (rev 1937)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-16 17:17:06 UTC (rev 1938)
@@ -4030,6 +4030,8 @@
StackInfo.CallerAdr := StackFrameCallerAdr;
StackInfo.DumpSize := StackFrameCallersEBP - DWORD(StackFrame);
StackInfo.ParamSize := (StackInfo.DumpSize - SizeOf(TStackFrame)) div 4;
+ if PStackFrame(StackFrame^.CallersEBP) = StackFrame then
+ Break;
// Step to the next stack frame by following the EBP pointer
StackFrame := PStackFrame(StackFrameCallersEBP + FStackOffset);
Result := True;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-16 16:57:58
|
Revision: 1937
http://svn.sourceforge.net/jcl/?rev=1937&view=rev
Author: outchy
Date: 2007-02-16 08:57:47 -0800 (Fri, 16 Feb 2007)
Log Message:
-----------
Added ignore mask on exception classes
Modified Paths:
--------------
trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas
===================================================================
--- trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas 2007-02-16 00:34:14 UTC (rev 1936)
+++ trunk/jcl/experts/debug/dialog/ExceptDlg.Delphi32.pas 2007-02-16 16:57:47 UTC (rev 1937)
@@ -281,18 +281,18 @@
procedure T%FORMNAME%.CreateReport;
var
- SL: TStringList;
-%if ModuleList I: Integer;
+%if ModuleList SL: TStringList;
+ I: Integer;
ModuleName: TFileName;
NtHeaders32: PImageNtHeaders32;
NtHeaders64: PImageNtHeaders64;
ModuleBase: Cardinal;
- ImageBaseStr: string;
- PETarget: TJclPeTarget;%endif
+ 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
@@ -410,7 +410,7 @@
begin
if ExceptionShowing then
Application.ShowException(E)
- else
+ else if Assigned(E) and not IsIgnoredException(E.ClassType) then
begin
ExceptionShowing := True;
try
@@ -614,7 +614,6 @@
%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/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-16 00:34:14 UTC (rev 1936)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-16 16:57:47 UTC (rev 1937)
@@ -760,9 +760,15 @@
type
TJclStackTrackingOption =
(stStack, stExceptFrame, stRawMode, stAllModules, stStaticModuleList,
- stDelayedTrace, stTraceEAbort, stMainThreadOnly);
+ stDelayedTrace, stTraceAllExceptions, stMainThreadOnly);
TJclStackTrackingOptions = set of TJclStackTrackingOption;
+{$IFDEF KEEP_DEPRECATED}
+const
+ // replaced by RemoveIgnoredException(EAbort)
+ stTraceEAbort = stTraceAllExceptions;
+{$ENDIF KEEP_DEPRECATED}
+
var
JclStackTrackingOptions: TJclStackTrackingOptions = [stStack];
@@ -770,6 +776,10 @@
which the DebugInfoSymbol scanner should look for symbol information. }
JclDebugInfoSymbolPaths: string = '';
+// functions to add/remove exception classes to be ignored if StTraceAllExceptions is not set
+procedure AddIgnoredException(const ExceptionClass: TClass);
+procedure RemoveIgnoredException(const ExceptionClass: TClass);
+function IsIgnoredException(const ExceptionClass: TClass): Boolean;
{$IFDEF UNITVERSIONING}
const
@@ -4410,14 +4420,63 @@
var
TrackingActive: Boolean;
+ IgnoredExceptions: TThreadList = nil;
+procedure AddIgnoredException(const ExceptionClass: TClass);
+begin
+ if Assigned(ExceptionClass) then
+ begin
+ if not Assigned(IgnoredExceptions) then
+ IgnoredExceptions := TThreadList.Create;
+
+ IgnoredExceptions.Add(ExceptionClass);
+ end;
+end;
+
+procedure RemoveIgnoredException(const ExceptionClass: TClass);
+var
+ ClassList: TList;
+begin
+ if Assigned(ExceptionClass) and Assigned(IgnoredExceptions) then
+ begin
+ ClassList := IgnoredExceptions.LockList;
+ try
+ ClassList.Remove(ExceptionClass);
+ finally
+ IgnoredExceptions.UnlockList;
+ end;
+ end;
+end;
+
+function IsIgnoredException(const ExceptionClass: TClass): Boolean;
+var
+ ClassList: TList;
+ Index: Integer;
+begin
+ Result := False;
+ if Assigned(IgnoredExceptions) and not (stTraceAllExceptions in JclStackTrackingOptions) then
+ begin
+ ClassList := IgnoredExceptions.LockList;
+ try
+ for Index := 0 to ClassList.Count - 1 do
+ if ExceptionClass.InheritsFrom(TClass(ClassList.Items[Index])) then
+ begin
+ Result := True;
+ Break;
+ end;
+ finally
+ IgnoredExceptions.UnlockList;
+ end;
+ end;
+end;
+
procedure DoExceptNotify(ExceptObj: TObject; ExceptAddr: Pointer; OSException: Boolean;
BaseOfStack: Pointer);
begin
- if TrackingActive and ((stTraceEAbort in JclStackTrackingOptions) or not (ExceptObj is EAbort)) and
+ if TrackingActive and Assigned(ExceptObj) and (not IsIgnoredException(ExceptObj.ClassType)) 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;
@@ -4521,7 +4580,7 @@
begin
FSyncException := Exception(ExceptObject);
try
- if not (FSyncException is EAbort) then
+ if Assigned(FSyncException) and not IsIgnoredException(FSyncException.ClassType) then
Synchronize(DoHandleException);
finally
FSyncException := nil;
@@ -4774,6 +4833,7 @@
DebugInfoCritSect := TJclCriticalSection.Create;
GlobalModulesList := TJclGlobalModulesList.Create;
GlobalStackList := TJclGlobalStackList.Create;
+ AddIgnoredException(EAbort);
{$IFDEF UNITVERSIONING}
RegisterUnitVersion(HInstance, UnitVersioning);
{$ENDIF UNITVERSIONING}
@@ -4794,6 +4854,7 @@
FreeAndNil(GlobalModulesList);
FreeAndNil(DebugInfoCritSect);
FreeAndNil(InfoSourceClassList);
+ FreeAndNil(IgnoredExceptions);
TJclDebugInfoSymbols.CleanupDebugSymbols;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ah...@us...> - 2007-02-16 00:34:16
|
Revision: 1936
http://svn.sourceforge.net/jcl/?rev=1936&view=rev
Author: ahuser
Date: 2007-02-15 16:34:14 -0800 (Thu, 15 Feb 2007)
Log Message:
-----------
Fixed access violation by IsBadReadPtr.
Modified Paths:
--------------
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-15 22:12:47 UTC (rev 1935)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-16 00:34:14 UTC (rev 1936)
@@ -4178,7 +4178,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 not IsBadReadPtr(C8P, 8) and ValidCodeAddr(DWORD(C8P), FModuleInfoList);
+ Result := (CodeAddr > 8) and ValidCodeAddr(DWORD(C8P), FModuleInfoList) and not IsBadReadPtr(C8P, 8);
// 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: <ah...@us...> - 2007-02-15 22:12:50
|
Revision: 1935
http://svn.sourceforge.net/jcl/?rev=1935&view=rev
Author: ahuser
Date: 2007-02-15 14:12:47 -0800 (Thu, 15 Feb 2007)
Log Message:
-----------
Unitname not modified for "Unknown functions"
Modified Paths:
--------------
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-15 21:50:24 UTC (rev 1934)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-15 22:12:47 UTC (rev 1935)
@@ -2931,7 +2931,7 @@
{ 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.UnitName := '[' + AnsiLowerCase(ExtractFileName(GetModulePath(FModule))) + ']'
Info.ProcedureName := Format(RsUnknownFunctionAt, [Info.ProcedureName]);
end;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ou...@us...> - 2007-02-15 21:50:26
|
Revision: 1934
http://svn.sourceforge.net/jcl/?rev=1934&view=rev
Author: outchy
Date: 2007-02-15 13:50:24 -0800 (Thu, 15 Feb 2007)
Log Message:
-----------
Minor style cleaning
Validating memory before read
Modified Paths:
--------------
trunk/jcl/source/windows/JclDebug.pas
Modified: trunk/jcl/source/windows/JclDebug.pas
===================================================================
--- trunk/jcl/source/windows/JclDebug.pas 2007-02-15 21:02:59 UTC (rev 1933)
+++ trunk/jcl/source/windows/JclDebug.pas 2007-02-15 21:50:24 UTC (rev 1934)
@@ -2842,39 +2842,32 @@
function TJclDebugInfoExports.IsAddressInThisExportedFunction(Addr: PByteArray; FunctionStartAddr: Cardinal): Boolean;
begin
Dec(Cardinal(Addr), 6);
- while Cardinal(Addr) > FunctionStartAddr do
+ Result := False;
+
+ while (Cardinal(Addr) > FunctionStartAddr) do
begin
+ if IsBadReadPtr(Addr, 6) then
+ Exit;
+
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;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|