diff --git a/.gitignore b/.gitignore
index 61c33a8..4e4e83f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -75,7 +75,9 @@ backup/
*.ppu
*.o
*.or
-FPCTests/*.ico
+FPCTest/*.ico
+FPCTest/test.log
+FPCTest/test2.log
*.ini
Tests/Win32
\ No newline at end of file
diff --git a/AG.Logs.pas b/AG.Logs.pas
index 5e56b8b..5a7be72 100644
--- a/AG.Logs.pas
+++ b/AG.Logs.pas
@@ -2,6 +2,10 @@ unit AG.Logs;
interface
+{$IFDEF FPC}
+ {$UNDEF MSWINDOWS}
+{$ENDIF}
+
uses
{$IFDEF MSWINDOWS}{$IFDEF FPC}Windows{$ELSE}Winapi.Windows{$ENDIF},{$ENDIF}
{$IFDEF FPC}FGL{$ELSE}System.Generics.Collections{$ENDIF},
@@ -9,9 +13,7 @@ uses
{$IFDEF FPC}Classes{$ELSE}System.Classes{$ENDIF},
{$IFDEF FPC}DateUtils{$ELSE}System.DateUtils{$ENDIF},
{$IFDEF FPC}SyncObjs{$ELSE}System.SyncObjs{$ENDIF}
- {$IFNDEF MSWINDOWS},
- {$IFNDEF FPC}System.IOUtils{$ENDIF}
- {$ENDIF};
+ {$IFNDEF MSWINDOWS}{$IFNDEF FPC},System.IOUtils{$ENDIF}{$ENDIF};
type
TAGLog=class abstract
@@ -40,7 +42,7 @@ type
TAGDiskLog=class(TAGLog)
strict protected
{$IFNDEF MSWINDOWS}
- Stream:TStream;
+ Stream:TFileStream;//TStream;
{$ELSE}
buf1:WideString;
onbuf:boolean;
@@ -105,6 +107,9 @@ type
procedure UnTab();override;
destructor Destroy();overload;override;
end;
+
+const
+ CharSize=SizeOf(char);//{$IFDEF FPC}1{$ELSE}2{$ENDIF};
Implementation
@@ -179,25 +184,38 @@ end;
constructor TAGDiskLog.Create(FileName:WideString);
{$IFDEF MSWINDOWS}
begin
-Lock:=TCriticalSection.Create;
-WantTerminate:=False;
-tabs:=0;
-tabstr:='';
-buf1:='';
-LogHandle:=CreateFileW(Pwidechar(FileName),GENERIC_WRITE,0,nil,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
-SetFilePointer(LogHandle,0,nil,FILE_END);
-ThreadHandle:=CreateThread(nil,0,{$IFDEF FPC}Self.MethodAddress('Init'){$ELSE}addr(TAGDiskLog.Init){$ENDIF},self,0,ThreadID);
-{$ELSE}
+ Lock:=TCriticalSection.Create;
+ WantTerminate:=False;
+ tabs:=0;
+ tabstr:='';
+ buf1:='';
+ LogHandle:=CreateFileW(Pwidechar(FileName),GENERIC_WRITE,0,nil,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
+ SetFilePointer(LogHandle,0,nil,FILE_END);
+ ThreadHandle:=CreateThread(nil,0,{$IFDEF FPC}Self.MethodAddress('Init'){$ELSE}addr(TAGDiskLog.Init){$ENDIF},self,0,ThreadID);
+{$ELSE}
var
s:TBytes;
begin
-try
- s:=TFile.ReadAllBytes(FileName);
-except
- s:=TBytes.Create();
-end;
-Stream:=TFileStream.Create(FileName,fmCreate+fmOpenReadWrite+fmShareDenyWrite);
-Stream.WriteBuffer(s,length(s));
+ {$IFDEF FPC}
+ Stream:=nil;
+ try
+ Stream:=TFileStream.Create('test2.log',fmOpenRead);
+ SetLength(s,Stream.Size);
+ Stream.Read(s[0],Stream.Size);
+ except
+ SetLength(s,0);
+ end;
+ FreeAndNil(Stream);
+ {$ELSE}
+ try
+ s:=TFile.ReadAllBytes(FileName);
+ except
+ s:=TBytes.Create();
+ end;
+ {$ENDIF}
+ Stream:=TFileStream.Create(FileName,fmCreate+fmOpenReadWrite+fmShareDenyWrite);
+ Stream.WriteBuffer(s[0],length(s));
+ SetLength(s,0);
{$ENDIF}
inherited Create;
end;
@@ -206,16 +224,16 @@ end;
procedure TAGDiskLog.Init();stdcall;
var
n:cardinal;
- buf:PWideChar;
+ buf:PChar;
begin
buf:='';
while Lock<>nil do
begin
Lock.Enter;
if buf<>'' then
- WriteFile(LogHandle,buf^,2*n,n,nil);
+ WriteFile(LogHandle,buf^,CharSize*n,n,nil);
n:=Length(buf1);
- buf:=Pwidechar(Copy(buf1,0,n));
+ buf:=PChar(Copy(buf1,0,n));
buf1:='';
Lock.Leave;
if WantTerminate then
@@ -223,9 +241,9 @@ begin
Sleep(0);
Lock.Enter;
if buf<>'' then
- WriteFile(LogHandle,buf^,2*n,n,nil);
+ WriteFile(LogHandle,buf^,CharSize*n,n,nil);
n:=Length(buf1);
- buf:=Pwidechar(Copy(buf1,0,n));
+ buf:=PChar(Copy(buf1,0,n));
buf1:='';
Lock.Leave;
WantTerminate:=False;
@@ -247,7 +265,11 @@ var
s:string;
begin
s:=GenerateLogString(tabstr+text,o);
-Stream.WriteData(PWideChar(s),Length(s)*2);
+ {$IFDEF FPC}
+ Stream.Write(PChar(s)^,Length(s)*CharSize);
+ {$ELSE}
+ Stream.WriteData(PChar(s),Length(s)*CharSize);
+ {$ENDIF}
{$ENDIF}
end;
@@ -322,7 +344,7 @@ var
s:string;
begin
s:=GenerateLogString(Text,o);
-stream.Write(PWideChar(s)^,2*length(s));
+stream.Write(PChar(s)^,CharSize*length(s));
end;
{TAGCallBackLog}
diff --git a/FPCTest/fpcunitproject1.lpi b/FPCTest/fpcunitproject1.lpi
index 0f98ec1..8e9491a 100644
--- a/FPCTest/fpcunitproject1.lpi
+++ b/FPCTest/fpcunitproject1.lpi
@@ -10,9 +10,6 @@
-
-
-
@@ -22,6 +19,7 @@
+
@@ -57,11 +55,18 @@
-
+
+
+
+
+
+
+
+
-
+
@@ -71,6 +76,9 @@
+
+
+
diff --git a/FPCTest/fpcunitproject1.lps b/FPCTest/fpcunitproject1.lps
index 0d75166..e4022b7 100644
--- a/FPCTest/fpcunitproject1.lps
+++ b/FPCTest/fpcunitproject1.lps
@@ -4,22 +4,21 @@
-
+
-
-
-
-
+
+
-
-
+
+
+
@@ -27,64 +26,149 @@
-
-
+
+
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FPCTest/testcase1.pas b/FPCTest/testcase1.pas
index ad97e61..df59b9e 100644
--- a/FPCTest/testcase1.pas
+++ b/FPCTest/testcase1.pas
@@ -26,15 +26,20 @@ MultiLog:=TAGMultiLog.Create(nil);
(MultiLog as TAGMultiLog).Logs.Add(TAGNullLog.Create());
(MultiLog as TAGMultiLog).Logs.Add(TAGDiskLog.Create('test.log'));
(MultiLog as TAGMultiLog).Logs.Add(TAGRamLog.Create());
-{$IFNDEF MSWINDOWS}(MultiLog as TAGMultiLog).Logs.Add(TAGCommandLineLog.Create(GetStdHandle(STD_OUTPUT_HANDLE))){$ENDIF};
+{$IFNDEF MSWINDOWS}(MultiLog as TAGMultiLog).Logs.Add(TAGCommandLineLog.Create(GetStdHandle(STD_OUTPUT_HANDLE))){$ENDIF};
+Stream:=nil;
try
- //s:=TFile.ReadAllBytes('test2.log');
+ Stream:=TFileStream.Create('test2.log',fmOpenRead);
+ SetLength(s,Stream.Size);
+ Stream.Read(s[0],Stream.Size);
except
- //s:=TBytes.Create();
+ SetLength(s,0);
end;
+FreeAndNil(Stream);
Stream:=TFileStream.Create('test2.log',fmCreate+fmOpenReadWrite+fmShareDenyWrite);
-Stream.WriteBuffer(s,length(s));
-(MultiLog as TAGMultiLog).Logs.Add(TAGStreamLog.Create(Stream));
+Stream.Write(s[0],Length(s));
+(MultiLog as TAGMultiLog).Logs.Add(TAGStreamLog.Create(Stream));
+SetLength(s,0);
{(MultiLog as TAGMultiLog).Logs.Add(TAGCallBackLog.Create(procedure(s:string)
begin
Self.WriteLn(s);