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);