From d1706ff40250514653ae011aa99f82336f16f054 Mon Sep 17 00:00:00 2001 From: Artem3213212 Date: Wed, 14 Mar 2018 21:07:54 +0300 Subject: [PATCH] Add FPC Compabulity --- FPCTests/fpcunitproject1.lps | 165 +++++++++++++++++++---------------- Source/FasmOnDelphi.pas | 44 ++++------ 2 files changed, 108 insertions(+), 101 deletions(-) diff --git a/FPCTests/fpcunitproject1.lps b/FPCTests/fpcunitproject1.lps index c799b8e..4d60343 100644 --- a/FPCTests/fpcunitproject1.lps +++ b/FPCTests/fpcunitproject1.lps @@ -4,58 +4,58 @@ - + - - + + - + - - + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - @@ -87,134 +87,153 @@ - + - + + + + + + + + + - - + + - + - - + + - + - - + + - + - + - + - - + + - - + + - + - - + + - + - + - - + + - - + + - + - + - - + + - + - + - + - - + + - - + + - - + + - + - - + + - - + + - + - + + + + + + + + + + + + diff --git a/Source/FasmOnDelphi.pas b/Source/FasmOnDelphi.pas index 3e1c173..b5d3bca 100644 --- a/Source/FasmOnDelphi.pas +++ b/Source/FasmOnDelphi.pas @@ -182,38 +182,26 @@ implementation function GetLongPathNameA(lpszShortPath: LPSTR; lpszLongPath: LPSTR; cchBuffer: DWORD): DWORD; stdcall;external 'Kernel32.dll'; -function Pos(const SubStr,Str:AnsiString;Offset:Integer): Integer; overload; +function Pos(const SubStr,Str:AnsiString;Offset:Integer=0):Integer; var - I, LIterCnt, L, J: Integer; - PSubStr, PS: PAnsiChar; + f:boolean; begin - L := Length(SubStr); - { Calculate the number of possible iterations. Not valid if Offset < 1. } - LIterCnt := Length(Str) - Offset - L + 1; - - { Only continue if the number of iterations is positive or zero (there is space to check) } - if (Offset > 0) and (LIterCnt >= 0) and (L > 0) then +for Result:=Offset+1 to length(Str)-length(SubStr)+1 do +begin + if SubStr[1]=Str[Result] then begin - PSubStr := PAnsiChar(SubStr); - PS := PAnsiChar(Str); - Inc(PS, Offset - 1); - - for I := 0 to LIterCnt do - begin - J := 0; - while (J >= 0) and (J < L) do + f:=true; + for Offset:=1 to Length(SubStr)-1 do + if SubStr[1+Offset]<>Str[Result+Offset] then begin - if PS[I + J] = PSubStr[J] then - Inc(J) - else - J := -1; + f:=false; + break; end; - if J >= L then - Exit(I + Offset); - end; + if f then + exit; end; - - Result := 0; +end; +Result:=0; end; {$ENDIF} @@ -360,7 +348,7 @@ begin FileHandle:=CreateFile(PChar(s),GENERIC_READ,0,nil,3,128,0); Result.sb:=GetFileSize(FileHandle,nil); getmem(Result.OutData,Result.sb); - ReadFile(FileHandle,Result.OutData,Result.sb,nr,nil); + ReadFile(FileHandle,Result.OutData^,Result.sb,nr,nil); CloseHandle(FileHandle); DeleteFile(PChar(s)); end @@ -547,7 +535,7 @@ begin FileHandle:=CreateFile(PChar(s),GENERIC_READ,0,nil,3,128,0); Result.sb:=GetFileSize(FileHandle,nil); getmem(Result.OutData,Result.sb); - ReadFile(FileHandle,Result.OutData,Result.sb,nr,nil); + ReadFile(FileHandle,Result.OutData^,Result.sb,nr,nil); CloseHandle(FileHandle); DeleteFile(PChar(s)); end