update to 0.7.3

This commit is contained in:
Razor12911 2023-06-30 05:02:05 +02:00
parent 7e8bbfcd86
commit 30ce6f00fc
94 changed files with 43027 additions and 858 deletions

View File

@ -3589,7 +3589,7 @@ object Form1: TForm1
Size.Width = 110.000000000000000000
Size.Height = 20.000000000000000000
Size.PlatformDefault = False
TabOrder = 2
TabOrder = 1
Text = 'Skip verification'
end
object CheckBox6: TCheckBox
@ -3615,51 +3615,9 @@ object Form1: TForm1
Size.Width = 110.000000000000000000
Size.Height = 20.000000000000000000
Size.PlatformDefault = False
TabOrder = 5
TabOrder = 3
Text = 'Low memory'
end
object Label8: TLabel
Align = Left
Margins.Left = 8.000000000000000000
Margins.Top = 8.000000000000000000
Margins.Bottom = 8.000000000000000000
Position.X = 362.000000000000000000
Position.Y = 8.000000000000000000
Size.Width = 80.000000000000000000
Size.Height = 20.000000000000000000
Size.PlatformDefault = False
Text = 'GPU'
TabOrder = 1
end
object ComboEdit3: TComboEdit
Touch.InteractiveGestures = [LongTap, DoubleTap]
Align = Left
TabOrder = 4
ItemHeight = 19.000000000000000000
Items.Strings = (
'0%'
'10%'
'25%'
'50%'
'75%'
'64MB'
'128MB'
'256MB'
'512MB'
'1GB'
'2GB'
'4GB')
ItemIndex = 0
Text = '0%'
Position.X = 450.000000000000000000
Position.Y = 8.000000000000000000
Margins.Left = 8.000000000000000000
Margins.Top = 8.000000000000000000
Margins.Bottom = 8.000000000000000000
Size.Width = 80.000000000000000000
Size.Height = 20.000000000000000000
Size.PlatformDefault = False
end
end
end
object GroupBox3: TGroupBox
@ -6041,7 +5999,7 @@ object Form1: TForm1
object SpinBox13: TSpinBox
Touch.InteractiveGestures = [LongTap, DoubleTap]
Align = Left
TabOrder = 2
TabOrder = 1
Cursor = crIBeam
DecimalDigits = 0
Min = 1.000000000000000000
@ -6066,51 +6024,9 @@ object Form1: TForm1
Size.Width = 110.000000000000000000
Size.Height = 20.000000000000000000
Size.PlatformDefault = False
TabOrder = 5
TabOrder = 3
Text = 'Verbose'
end
object Label22: TLabel
Align = Left
Margins.Left = 8.000000000000000000
Margins.Top = 8.000000000000000000
Margins.Bottom = 8.000000000000000000
Position.X = 302.000000000000000000
Position.Y = 8.000000000000000000
Size.Width = 80.000000000000000000
Size.Height = 20.000000000000000000
Size.PlatformDefault = False
Text = 'GPU'
TabOrder = 1
end
object ComboEdit4: TComboEdit
Touch.InteractiveGestures = [LongTap, DoubleTap]
Align = Left
TabOrder = 4
ItemHeight = 19.000000000000000000
Items.Strings = (
'0%'
'10%'
'25%'
'50%'
'75%'
'64MB'
'128MB'
'256MB'
'512MB'
'1GB'
'2GB'
'4GB')
ItemIndex = 0
Text = '0%'
Position.X = 390.000000000000000000
Position.Y = 8.000000000000000000
Margins.Left = 8.000000000000000000
Margins.Top = 8.000000000000000000
Margins.Bottom = 8.000000000000000000
Size.Width = 80.000000000000000000
Size.Height = 20.000000000000000000
Size.PlatformDefault = False
end
end
end
object GroupBox36: TGroupBox

View File

@ -242,10 +242,6 @@ type
Label3: TLabel;
SpinBox3: TSpinBox;
CheckBox6: TCheckBox;
Label8: TLabel;
ComboEdit3: TComboEdit;
Label22: TLabel;
ComboEdit4: TComboEdit;
procedure FormShow(Sender: TObject);
procedure SearchEditButton1Click(Sender: TObject);
procedure SearchEditButton3Click(Sender: TObject);
@ -383,8 +379,6 @@ begin
Insert('-t' + SpinBox13.Text, CmdStr, Length(CmdStr));
if CheckBox7.IsChecked then
Insert('-v', CmdStr, Length(CmdStr));
Insert('-g' + ReplaceText(ReplaceText(ComboEdit4.Text, '%', 'p'), ' ', ''),
CmdStr, Length(CmdStr));
Insert('-bd' + Edit6.Text, CmdStr, Length(CmdStr));
Insert(Edit25.Text, CmdStr, Length(CmdStr));
case DecodeMode of
@ -425,8 +419,6 @@ begin
Insert('-l' + SpinBox7.Text + IfThen(SameText(ComboEdit2.Text, 'Auto'), '',
'x') + S, CmdStr, Length(CmdStr));
end;
Insert('-g' + ReplaceText(ReplaceText(ComboEdit3.Text, '%', 'p'), ' ', ''),
CmdStr, Length(CmdStr));
Insert('-bd' + Edit6.Text, CmdStr, Length(CmdStr));
Insert(Edit1.Text, CmdStr, Length(CmdStr));
if ComboBox3.ItemIndex = 1 then

View File

@ -1,3 +1,6 @@
ES_R48 (0.7.3)
- minor bug fixes
ES_R47 (0.7.2)
- memory usage optimizations

View File

@ -3,7 +3,7 @@ unit Utils;
interface
uses
Threading, OpenCL, SynCommons,
Threading, OpenCL, SynCommons, lz4lib, ZSTDLib,
WinAPI.Windows, WinAPI.PsAPI,
System.SysUtils, System.Classes, System.SyncObjs, System.Math, System.Types,
System.AnsiStrings, System.StrUtils, System.IniFiles, System.IOUtils,
@ -11,6 +11,12 @@ uses
System.Net.HttpClient,
System.Generics.Defaults, System.Generics.Collections;
const
{$IFDEF CPU32BITS}
MEM_LIMIT = 1792 * 1024 * 1024;
{$ELSE}
MEM_LIMIT = Int64.MaxValue;
{$ENDIF}
procedure ShowMessage(Msg: string; Caption: string = '');
procedure WriteLine(S: String);
function GetModuleName: string;
@ -45,16 +51,6 @@ procedure SetBits(var Data: UInt64; Value: Int64; Index: TInt64_BitIndex;
Count: TInt64_BitCount); overload;
type
PDynArrayRec = ^TDynArrayRec;
TDynArrayRec = packed record
{$IFDEF CPUX64}
_Padding: LongInt;
{$ENDIF}
RefCnt: LongInt;
Length: NativeInt;
end;
TListEx<T> = class(TList<T>)
private
FIndex: Integer;
@ -280,26 +276,53 @@ type
property OutSize: Int64 read FOutSize;
end;
TStoreStream = class(TMemoryStreamEx)
protected
FOnFull: TStreamProc;
public
constructor Create(ASize: NativeInt); overload;
destructor Destroy; override;
function Write(const Buffer; Count: Integer): Integer; override;
procedure Flush;
property OnFull: TStreamProc read FOnFull write FOnFull;
end;
TCacheCompression = (ccNone, ccLZ4, ccZSTD);
TCacheReadStream = class(TStream)
protected
function FCallback(ASize: Int64): Boolean;
procedure FOnFull(Stream: TStream);
private const
FBufferSize = 4 * 1024 * 1024;
private
FSync: TSynLocker;
FOwnStream: Boolean;
FInput, FCache: TStream;
FBuffer: Pointer;
FStorage1: TStoreStream;
FStorage2: TMemoryStreamEx;
FCompBuffer: Pointer;
FCompBufferSize: Integer;
FTask: TTask;
FPosition1, FPosition2: Int64;
FAvaiSize, FMaxSize: Int64;
FUsedSize, FMaxSize: Int64;
FDone: Boolean;
FComp: TCacheCompression;
FCCtx: ZSTD_CCtx;
FDCtx: ZSTD_DCtx;
FCached: Int64;
procedure CacheMemory;
public
constructor Create(Input, Cache: TStream; AOwnStream: Boolean = True);
constructor Create(Input, Cache: TStream; AOwnStream: Boolean = True;
AComp: TCacheCompression = ccNone);
destructor Destroy; override;
function Read(var Buffer; Count: Integer): Integer; override;
function Cached(Compressed: PInt64): Int64;
end;
TCacheWriteStream = class(TStream)
protected
procedure FOnFull(Stream: TStream);
private const
FBufferSize = 4 * 1024 * 1024;
private
@ -307,15 +330,24 @@ type
FOwnStream: Boolean;
FOutput, FCache: TStream;
FBuffer: Pointer;
FStorage: TStoreStream;
FCompBuffer: Pointer;
FCompBufferSize: Integer;
FTask: TTask;
FPosition1, FPosition2: Int64;
FUsedSize, FMaxSize: Int64;
FDone: Boolean;
FComp: TCacheCompression;
FCCtx: ZSTD_CCtx;
FDCtx: ZSTD_DCtx;
FCached: Int64;
procedure CacheMemory;
public
constructor Create(Output, Cache: TStream; AOwnStream: Boolean = True);
constructor Create(Output, Cache: TStream; AOwnStream: Boolean = True;
AComp: TCacheCompression = ccNone);
destructor Destroy; override;
function Write(const Buffer; Count: LongInt): LongInt; override;
function Cached(Compressed: PInt64): Int64;
end;
TGPUMemoryStream = class(TStream)
@ -484,9 +516,9 @@ function GenerateGUID: string;
function CalculateEntropy(Buffer: Pointer; BufferSize: Integer): Single;
function CopyStream(AStream1, AStream2: TStream; ASize: Int64 = Int64.MaxValue;
ACallback: TProc<Int64> = nil): Int64;
ACallback: TFunc<Int64, Boolean> = nil): Int64;
procedure CopyStreamEx(AStream1, AStream2: TStream; ASize: Int64;
ACallback: TProc<Int64> = nil);
ACallback: TFunc<Int64, Boolean> = nil);
function EndianSwap(A: Single): Single; overload;
function EndianSwap(A: double): double; overload;
@ -1156,7 +1188,7 @@ begin
if FileExists(FPath) then
FBaseDir := ExtractFilePath(TPath.GetFullPath(FPath))
else if DirectoryExists(FPath) then
FBaseDir := IncludeTrailingBackSlash(TPath.GetFullPath(FPath))
FBaseDir := IncludeTrailingPathDelimiter(TPath.GetFullPath(FPath))
else
FBaseDir := ExtractFilePath(TPath.GetFullPath(FPath));
FList := GetFileList([FPath], True);
@ -1258,7 +1290,7 @@ constructor TDirOutputStream.Create(const APath: String);
begin
inherited Create;
FState := TState.oNone;
FPath := IncludeTrailingBackSlash(TPath.GetFullPath(APath));
FPath := IncludeTrailingPathDelimiter(TPath.GetFullPath(APath));
FStream := nil;
end;
@ -1921,7 +1953,42 @@ begin
Result := WaitForSingleObject(FProcessInfo.hProcess, 0) = WAIT_TIMEOUT;
end;
constructor TCacheReadStream.Create(Input, Cache: TStream; AOwnStream: Boolean);
constructor TStoreStream.Create(ASize: NativeInt);
begin
inherited Create(False, GetMemory(ASize), ASize);
end;
destructor TStoreStream.Destroy;
begin
if Assigned(FOnFull) then
if Size > 0 then
FOnFull(Self);
if Assigned(FMemory) then
FreeMemory(FMemory);
inherited Destroy;
end;
function TStoreStream.Write(const Buffer; Count: Integer): Integer;
begin
if FSize = FMaxSize then
begin
if Assigned(FOnFull) then
FOnFull(Self);
Size := 0;
end;
Result := inherited Write(Buffer, Count);
end;
procedure TStoreStream.Flush;
begin
if Assigned(FOnFull) then
if Size > 0 then
FOnFull(Self);
Size := 0;
end;
constructor TCacheReadStream.Create(Input, Cache: TStream; AOwnStream: Boolean;
AComp: TCacheCompression);
begin
inherited Create;
FSync.Init;
@ -1930,17 +1997,35 @@ begin
FCache := Cache;
FPosition1 := 0;
FPosition2 := 0;
FAvaiSize := 0;
FUsedSize := 0;
if Assigned(FCache) then
FMaxSize := FCache.Size
else
FMaxSize := 0;
FDone := False;
FComp := AComp;
FTask := TTask.Create;
FTask.Perform(CacheMemory);
if FMaxSize > 0 then
if FMaxSize > FBufferSize then
begin
GetMem(FBuffer, FBufferSize);
FStorage1 := TStoreStream.Create(FBufferSize);
FStorage1.OnFull := FOnFull;
FStorage2 := TMemoryStreamEx.Create(False, GetMemory(FBufferSize),
FBufferSize);
case FComp of
ccLZ4:
FCompBufferSize := LZ4_compressBound(FBufferSize);
ccZSTD:
begin
FCCtx := ZSTD_createCCtx;
FDCtx := ZSTD_createDCtx;
FCompBufferSize := ZSTD_compressBound(FBufferSize);
end;
else
FCompBufferSize := FBufferSize;
end;
if FComp > ccNone then
GetMem(FCompBuffer, FCompBufferSize);
FTask.Start;
end;
end;
@ -1948,91 +2033,181 @@ end;
destructor TCacheReadStream.Destroy;
begin
FDone := True;
if FMaxSize > 0 then
if FMaxSize > FBufferSize then
begin
FTask.Wait;
FreeMem(FBuffer);
case FComp of
ccZSTD:
begin
ZSTD_freeCCtx(FCCtx);
ZSTD_freeDCtx(FDCtx);
end;
end;
FStorage1.Free;
if Assigned(FStorage2.Memory) then
FreeMemory(FStorage2.Memory);
FStorage2.Free;
if FComp > ccNone then
FreeMem(FCompBuffer);
end;
FTask.Free;
if FOwnStream then
if FMaxSize > 0 then
if FMaxSize > FBufferSize then
FCache.Free;
FSync.Done;
inherited Destroy;
end;
procedure TCacheReadStream.CacheMemory;
var
I: Int64;
begin
AtomicExchange(I, FAvaiSize);
I := FInput.Read(FBuffer^, Min(FBufferSize, Min(FMaxSize - I,
FMaxSize - (FPosition1 mod FMaxSize))));
FSync.Lock;
try
FCache.Position := FPosition1 mod FMaxSize;
FCache.WriteBuffer(FBuffer^, I);
finally
FSync.UnLock;
end;
while (I > 0) and (FDone = False) do
begin
Inc(FPosition1, I);
I := AtomicIncrement(FAvaiSize, I);
while I = FMaxSize do
begin
Sleep(1);
AtomicExchange(I, FAvaiSize);
if FDone then
exit;
end;
I := FInput.Read(FBuffer^, Min(FBufferSize, Min(FMaxSize - I,
FMaxSize - (FPosition1 mod FMaxSize))));
FSync.Lock;
try
FCache.Position := FPosition1 mod FMaxSize;
FCache.WriteBuffer(FBuffer^, I);
finally
FSync.UnLock;
end;
end;
CopyStream(FInput, FStorage1, Int64.MaxValue, FCallback);
FStorage1.Flush;
FDone := True;
end;
function TCacheReadStream.Read(var Buffer; Count: Integer): Integer;
var
I: Int64;
J: Integer;
procedure DoRead;
begin
J := I;
if (FPosition2 mod FMaxSize) + FCompBufferSize >= FMaxSize then
FCache.ReadBuffer(FStorage2.Memory^, I)
else
begin
if FComp > ccNone then
begin
FCache.ReadBuffer(J, J.Size);
FCache.ReadBuffer(FCompBuffer^, J);
I := J.Size + J;
end;
case FComp of
ccLZ4:
J := LZ4_decompress_safe(FCompBuffer, FStorage2.Memory, J,
FCompBufferSize);
ccZSTD:
J := ZSTD_decompressDCtx(FDCtx, FStorage2.Memory, FCompBufferSize,
FCompBuffer, J);
else
FCache.ReadBuffer(FStorage2.Memory^, I);
end;
end;
FStorage2.Size := J;
AtomicDecrement(FCached, J);
end;
begin
if FMaxSize <= 0 then
if FMaxSize <= FBufferSize then
begin
Result := FInput.Read(Buffer, Count);
exit;
end;
if Count <= 0 then
exit(0);
AtomicExchange(I, FAvaiSize);
if I = 0 then
while True do
begin
Sleep(1);
AtomicExchange(I, FAvaiSize);
if (I > 0) or ((I = 0) and FDone) then
break;
if FStorage2.Position = FStorage2.Size then
begin
AtomicExchange(I, FUsedSize);
if I = 0 then
while True do
begin
Sleep(1);
AtomicExchange(I, FUsedSize);
if (I > 0) or ((I = 0) and FDone) then
break;
end;
I := Min(FBufferSize, Min(I, FMaxSize - (FPosition2 mod FMaxSize)));
if I <= 0 then
exit(0);
FSync.Lock;
try
FCache.Position := FPosition2 mod FMaxSize;
DoRead;
finally
FSync.UnLock;
end;
Result := Min(Count, Min(I, FMaxSize - (FPosition2 mod FMaxSize)));
FSync.Lock;
try
FCache.Position := FPosition2 mod FMaxSize;
FCache.ReadBuffer(Buffer, Result);
finally
FSync.UnLock;
Inc(FPosition2, I);
AtomicDecrement(FUsedSize, I);
FStorage2.Position := 0;
end;
Inc(FPosition2, Result);
AtomicDecrement(FAvaiSize, Result);
Result := FStorage2.Read(Buffer, Count);
end;
function TCacheReadStream.FCallback(ASize: Int64): Boolean;
begin
Result := FDone = False;
end;
procedure TCacheReadStream.FOnFull(Stream: TStream);
var
I: Int64;
J, X, Y: Integer;
Ptr: PByte;
begin
X := 0;
while X < Stream.Size do
begin
repeat
AtomicExchange(I, FUsedSize);
while I = FMaxSize do
begin
Sleep(1);
AtomicExchange(I, FUsedSize);
if FDone then
break;
end;
I := Min(Stream.Size - X, Min(FMaxSize - I,
FMaxSize - (FPosition1 mod FMaxSize)));
Sleep(1);
until I > 0;
AtomicIncrement(FCached, I);
Ptr := PByte(TStoreStream(Stream).Memory) + X;
Inc(X, I);
FSync.Lock;
try
FCache.Position := FPosition1 mod FMaxSize;
if (FPosition1 mod FMaxSize) + FCompBufferSize >= FMaxSize then
FCache.WriteBuffer(Ptr^, I)
else
begin
case FComp of
ccLZ4:
J := LZ4_compress_fast(Pointer(Ptr), FCompBuffer, I,
FCompBufferSize, 1);
ccZSTD:
J := ZSTD_compressCCtx(FCCtx, FCompBuffer, FCompBufferSize,
Pointer(Ptr), I, 1);
else
FCache.WriteBuffer(Ptr^, I);
end;
if FComp > ccNone then
begin
FCache.WriteBuffer(J, J.Size);
FCache.WriteBuffer(FCompBuffer^, J);
I := J.Size + J;
end;
end;
finally
FSync.UnLock;
end;
Inc(FPosition1, I);
AtomicIncrement(FUsedSize, I);
end;
end;
function TCacheReadStream.Cached(Compressed: PInt64): Int64;
begin
AtomicExchange(Result, FUsedSize);
if Assigned(Compressed) then
if FComp > ccNone then
Compressed^ := FCached
else
Compressed^ := 0;
end;
constructor TCacheWriteStream.Create(Output, Cache: TStream;
AOwnStream: Boolean);
AOwnStream: Boolean; AComp: TCacheCompression);
begin
inherited Create;
FSync.Init;
@ -2047,37 +2222,56 @@ begin
else
FMaxSize := 0;
FDone := False;
FComp := AComp;
FTask := TTask.Create;
FTask.Perform(CacheMemory);
if FMaxSize > 0 then
if FMaxSize > FBufferSize then
begin
GetMem(FBuffer, FBufferSize);
FStorage := TStoreStream.Create(FBufferSize);
FStorage.OnFull := FOnFull;
case FComp of
ccLZ4:
FCompBufferSize := LZ4_compressBound(FBufferSize);
ccZSTD:
begin
FCCtx := ZSTD_createCCtx;
FDCtx := ZSTD_createDCtx;
FCompBufferSize := ZSTD_compressBound(FBufferSize);
end;
else
FCompBufferSize := FBufferSize;
end;
if FComp > ccNone then
GetMem(FCompBuffer, FCompBufferSize);
FTask.Start;
end;
FCached := 0;
end;
destructor TCacheWriteStream.Destroy;
var
I: Int64;
begin
if FMaxSize > 0 then
begin
AtomicExchange(I, FUsedSize);
while I > 0 do
begin
Sleep(1);
AtomicExchange(I, FUsedSize);
end;
end;
FDone := True;
if FMaxSize > 0 then
if FMaxSize > FBufferSize then
begin
FStorage.Free;
FDone := True;
FTask.Wait;
case FComp of
ccZSTD:
begin
ZSTD_freeCCtx(FCCtx);
ZSTD_freeDCtx(FDCtx);
end;
end;
FreeMem(FBuffer);
if FComp > ccNone then
FreeMem(FCompBuffer);
end;
FTask.Free;
if FOwnStream then
if FMaxSize > 0 then
if FMaxSize > FBufferSize then
FCache.Free;
FSync.Done;
inherited Destroy;
@ -2086,17 +2280,36 @@ end;
procedure TCacheWriteStream.CacheMemory;
var
I: Int64;
begin
AtomicExchange(I, FUsedSize);
I := Min(FBufferSize, Min(I, FMaxSize - (FPosition1 mod FMaxSize)));
FSync.Lock;
try
FCache.Position := FPosition1 mod FMaxSize;
FCache.ReadBuffer(FBuffer^, I);
finally
FSync.UnLock;
J: Integer;
procedure DoRead;
begin
J := I;
if (FPosition1 mod FMaxSize) + FCompBufferSize >= FMaxSize then
FCache.ReadBuffer(FBuffer^, I)
else
begin
if FComp > ccNone then
begin
FCache.ReadBuffer(J, J.Size);
FCache.ReadBuffer(FCompBuffer^, J);
I := J.Size + J;
end;
case FComp of
ccLZ4:
J := LZ4_decompress_safe(FCompBuffer, FBuffer, J, FCompBufferSize);
ccZSTD:
J := ZSTD_decompressDCtx(FDCtx, FBuffer, FCompBufferSize,
FCompBuffer, J);
else
FCache.ReadBuffer(FBuffer^, I);
end;
end;
AtomicDecrement(FCached, J);
end;
FOutput.WriteBuffer(FBuffer^, I);
begin
I := 0;
while True do
begin
Inc(FPosition1, I);
@ -2110,46 +2323,94 @@ begin
FSync.Lock;
try
FCache.Position := FPosition1 mod FMaxSize;
FCache.ReadBuffer(FBuffer^, I);
DoRead;
finally
FSync.UnLock;
end;
FOutput.WriteBuffer(FBuffer^, I);
FOutput.WriteBuffer(FBuffer^, J);
if FDone and (FPosition1 = FPosition2) then
break;
end;
end;
function TCacheWriteStream.Write(const Buffer; Count: LongInt): LongInt;
var
I: Int64;
begin
if FMaxSize <= 0 then
if FMaxSize < FBufferSize then
begin
FOutput.WriteBuffer(Buffer, Count);
exit(Count);
end;
if Count <= 0 then
exit(0);
AtomicExchange(I, FUsedSize);
if I = FMaxSize then
while True do
begin
Sleep(1);
Result := FStorage.Write(Buffer, Count);
end;
procedure TCacheWriteStream.FOnFull(Stream: TStream);
var
I: Int64;
J, X, Y: Integer;
Ptr: PByte;
begin
X := 0;
while X < Stream.Size do
begin
repeat
AtomicExchange(I, FUsedSize);
if (I < FMaxSize) then
break;
if I = FMaxSize then
while True do
begin
Sleep(1);
AtomicExchange(I, FUsedSize);
if (I < FMaxSize) then
break;
end;
I := Min(Stream.Size - X, Min(FMaxSize - I,
FMaxSize - (FPosition2 mod FMaxSize)));
Sleep(1);
until I > 0;
AtomicIncrement(FCached, I);
Ptr := PByte(TStoreStream(Stream).Memory) + X;
Inc(X, I);
FSync.Lock;
try
FCache.Position := FPosition2 mod FMaxSize;
if (FPosition2 mod FMaxSize) + FCompBufferSize >= FMaxSize then
FCache.WriteBuffer(Ptr^, I)
else
begin
case FComp of
ccLZ4:
J := LZ4_compress_fast(Pointer(Ptr), FCompBuffer, I,
FCompBufferSize, 1);
ccZSTD:
J := ZSTD_compressCCtx(FCCtx, FCompBuffer, FCompBufferSize,
Pointer(Ptr), I, 1);
else
FCache.WriteBuffer(Ptr^, I);
end;
if FComp > ccNone then
begin
FCache.WriteBuffer(J, J.Size);
FCache.WriteBuffer(FCompBuffer^, J);
I := J.Size + J;
end;
end;
finally
FSync.UnLock;
end;
Result := Min(Count, Min(FMaxSize - I, FMaxSize - (FPosition2 mod FMaxSize)));
FSync.Lock;
try
FCache.Position := FPosition2 mod FMaxSize;
FCache.WriteBuffer(Buffer, Result);
finally
FSync.UnLock;
Inc(FPosition2, I);
AtomicIncrement(FUsedSize, I);
end;
Inc(FPosition2, Result);
AtomicIncrement(FUsedSize, Result);
end;
function TCacheWriteStream.Cached(Compressed: PInt64): Int64;
begin
AtomicExchange(Result, FUsedSize);
if Assigned(Compressed) then
if FComp > ccNone then
Compressed^ := FCached
else
Compressed^ := 0;
end;
constructor TGPUMemoryStream.Create(ASize: NativeInt);
@ -3084,7 +3345,7 @@ begin
end;
function CopyStream(AStream1, AStream2: TStream; ASize: Int64;
ACallback: TProc<Int64>): Int64;
ACallback: TFunc<Int64, Boolean>): Int64;
const
FBufferSize = 65536;
var
@ -3102,14 +3363,15 @@ begin
AStream2.WriteBuffer(FBuff[0], I);
Dec(FSize, I);
if Assigned(ACallback) then
ACallback(ASize - FSize);
if not ACallback(ASize - FSize) then
break;
Result := ASize - FSize;
I := AStream1.Read(FBuff[0], Min(FBufferSize, FSize));
end;
end;
procedure CopyStreamEx(AStream1, AStream2: TStream; ASize: Int64;
ACallback: TProc<Int64>);
ACallback: TFunc<Int64, Boolean>);
const
FBufferSize = 65536;
var
@ -3127,7 +3389,8 @@ begin
AStream2.WriteBuffer(FBuff[0], I);
Dec(FSize, I);
if Assigned(ACallback) then
ACallback(ASize - FSize);
if not ACallback(ASize - FSize) then
break;
I := Min(FBufferSize, FSize);
AStream1.ReadBuffer(FBuff[0], I);
end;
@ -3159,106 +3422,6 @@ begin
C[7] := d[0];
end;
{$IFDEF PUREPASCAL}
function EndianSwap(A: Int64): Int64;
asm
{$IF DEFINED(CPUX64)}
.NOFRAME
{$IFDEF win64}
mov rax, rcx
{$ELSE}
mov rax, rdi
{$ENDIF win64}
bswap rax
{$ELSE}
mov edx, A.Int64Rec.Lo
mov eax, A.Int64Rec.Hi
bswap edx
bswap eax
{$ENDIF}
end;
function EndianSwap(A: UInt64): UInt64;
asm
{$IF DEFINED(CPUX64)}
.NOFRAME
{$IFDEF win64}
mov rax, rcx
{$ELSE}
mov rax, rdi
{$ENDIF win64}
bswap rax
{$ELSE}
mov edx, A.Int64Rec.Lo
mov eax, A.Int64Rec.Hi
bswap edx
bswap eax
{$ENDIF}
end;
function EndianSwap(A: Int32): Int32;
asm
{$IF DEFINED(CPUX64)}
.NOFRAME
{$IF DEFINED(WIN64)}
mov eax, ecx
{$ELSE}
mov eax, edi
{$ENDIF}
bswap eax
{$ELSEIF DEFINED(CPUX86)}
bswap eax
{$ENDIF}
end;
function EndianSwap(A: UInt32): UInt32;
asm
{$IF DEFINED(CPUX64)}
.NOFRAME
{$IF DEFINED(WIN64)}
mov eax, ecx
{$ELSE}
mov eax, edi
{$ENDIF}
bswap eax
{$ELSEIF DEFINED(CPUX86)}
bswap eax
{$ENDIF}
end;
function EndianSwap(A: Int16): Int16;
asm
{$IF DEFINED(CPUX64)}
.NOFRAME
{$IF DEFINED(WIN64)}
mov ax, cx
{$ELSE}
mov ax, di
{$ENDIF}
rol ax,8
{$ELSEIF DEFINED(CPUX86)}
rol ax,8
{$ENDIF}
end;
function EndianSwap(A: UInt16): UInt16;
asm
{$IF DEFINED(CPUX64)}
.NOFRAME
{$IF DEFINED(WIN64)}
mov ax, cx
{$ELSE}
mov ax, di
{$ENDIF}
rol ax,8
{$ELSEIF DEFINED(CPUX86)}
rol ax,8
{$ENDIF}
end;
{$ELSE}
function EndianSwap(A: Int64): Int64;
var
C: array [0 .. 7] of Byte absolute Result;
@ -3328,7 +3491,6 @@ begin
C[0] := d[1];
C[1] := d[0];
end;
{$ENDIF}
function BinarySearch(SrcMem: Pointer; SrcPos, SrcSize: NativeInt;
SearchMem: Pointer; SearchSize: NativeInt; var ResultPos: NativeInt): Boolean;

54
contrib/LIBC/.gitignore vendored Normal file
View File

@ -0,0 +1,54 @@
*.exe
*.dcu
__history/*.*
__recovery/*.*
Win32/*.*
Win64/*.*
__history/libc.pas.~1~
__history/libc.pas.~2~
__history/libc.pas.~3~
__history/libgcc.pas.~11~
__history/libgcc.pas.~12~
__history/libgcc.pas.~13~
__history/libgcc.pas.~14~
__history/libgcc.pas.~15~
__history/libgcc.pas.~16~
__history/libgcc.pas.~17~
__history/libgcc.pas.~18~
__history/libgcc.pas.~19~
__history/libgcc.pas.~20~
__history/libmsvcrt.pas.~1~
__history/libmsvcrt.pas.~2~
__history/libmsvcrt.pas.~3~
__history/libmsvcrt.pas.~4~
__history/libmsvcrt.pas.~5~
__history/libmsvcrt.pas.~6~
__history/libmsvcrt.pas.~7~
__history/libmsvcrt.pas.~8~
__history/libmsvcrt.pas.~9~
__history/libucrt.pas.~10~
__history/libucrt.pas.~11~
__history/libucrt.pas.~12~
__history/libucrt.pas.~13~
__history/libucrt.pas.~14~
__history/libucrt.pas.~15~
__history/libucrt.pas.~6~
__history/libucrt.pas.~7~
__history/libucrt.pas.~8~
__history/libucrt.pas.~9~
__history/pkglibc.dpk.~1~
__history/pkglibc.dpk.~2~
__history/pkglibc.dpk.~3~
__history/testlibgcc.pas.~1~
__history/testlibmsvcrt.pas.~1~
__history/testlibmsvcrt.pas.~2~
__history/testlibmsvcrt.pas.~3~
__history/testlibmsvcrt.pas.~4~
__history/testlibmsvcrt.pas.~5~
__history/testlibucrt.pas.~1~
__history/testlibucrt.pas.~2~
__history/testucrt.dpr.~1~
__history/testucrt.dpr.~2~
__history/testucrt.dpr.~3~
__history/testucrt.dpr.~4~
__history/testucrt.dpr.~5~

8
contrib/LIBC/README.md Normal file
View File

@ -0,0 +1,8 @@
# LIBC
a C Run Time library for Delphi, helps link with other C object files
Delphi come up a build in unit named System.Win.Crtl do the same job. How ever, this build in Unit didn't cover enough C functions.
I just copy paste this Unit, and Appends any functions I found when linking other C object files into it.
So, it is a better way to use this unit than the buildin one.
系统自带单元System.Win.Crtl的复制粘贴+扩展版本覆盖更多的C标准库和一些特定编译器的内建函数当你想链接的C目标文件调用到这些函数时添加一句uses libc可能可以帮助你成功链接。

BIN
contrib/LIBC/_chkstk.x86.o Normal file

Binary file not shown.

BIN
contrib/LIBC/chkstk.x64.o Normal file

Binary file not shown.

BIN
contrib/LIBC/chkstk.x86.o Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
contrib/LIBC/cpu_disp.x64.o Normal file

Binary file not shown.

BIN
contrib/LIBC/cpu_disp.x86.o Normal file

Binary file not shown.

BIN
contrib/LIBC/ctzdi2.x86.o Normal file

Binary file not shown.

BIN
contrib/LIBC/ctzti2.x86.o Normal file

Binary file not shown.

BIN
contrib/LIBC/divdi3.x86.o Normal file

Binary file not shown.

BIN
contrib/LIBC/int_util.x86.o Normal file

Binary file not shown.

1096
contrib/LIBC/libc.pas Normal file

File diff suppressed because it is too large Load Diff

1088
contrib/LIBC/libgcc.pas Normal file

File diff suppressed because it is too large Load Diff

7620
contrib/LIBC/libmsvcrt.pas Normal file

File diff suppressed because it is too large Load Diff

15799
contrib/LIBC/libucrt.pas Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,457 @@
unit libvcruntime140;
interface
{$IFDEF WIN64}
procedure wcsstr;external;
{$L x64/libvcruntime140_apps00070.o}
procedure wcsrchr;external;
{$L x64/libvcruntime140_apps00069.o}
procedure wcschr;external;
{$L x64/libvcruntime140_apps00068.o}
procedure unexpected;external;
{$L x64/libvcruntime140_apps00067.o}
procedure strstr;external;
{$L x64/libvcruntime140_apps00066.o}
procedure strrchr;external;
{$L x64/libvcruntime140_apps00065.o}
procedure strchr;external;
{$L x64/libvcruntime140_apps00064.o}
procedure set_unexpected;external;
{$L x64/libvcruntime140_apps00063.o}
procedure memset;external;
{$L x64/libvcruntime140_apps00062.o}
procedure memmove;external;
{$L x64/libvcruntime140_apps00061.o}
procedure memcpy;external;
{$L x64/libvcruntime140_apps00060.o}
procedure memcmp;external;
{$L x64/libvcruntime140_apps00059.o}
procedure memchr;external;
{$L x64/libvcruntime140_apps00058.o}
procedure longjmp;external;
{$L x64/libvcruntime140_apps00057.o}
procedure _set_se_translator;external;
{$L x64/libvcruntime140_apps00056.o}
procedure _set_purecall_handler;external;
{$L x64/libvcruntime140_apps00055.o}
procedure _purecall;external;
{$L x64/libvcruntime140_apps00054.o}
procedure _local_unwind;external;
{$L x64/libvcruntime140_apps00053.o}
procedure _is_exception_typeof;external;
{$L x64/libvcruntime140_apps00052.o}
procedure _get_unexpected;external;
{$L x64/libvcruntime140_apps00051.o}
procedure _get_purecall_handler;external;
{$L x64/libvcruntime140_apps00050.o}
procedure __vcrt_LoadLibraryExW;external;
{$L x64/libvcruntime140_apps00049.o}
procedure __vcrt_InitializeCriticalSectionEx;external;
{$L x64/libvcruntime140_apps00048.o}
procedure __vcrt_GetModuleHandleW;external;
{$L x64/libvcruntime140_apps00047.o}
procedure __vcrt_GetModuleFileNameW;external;
{$L x64/libvcruntime140_apps00046.o}
procedure __uncaught_exceptions;external;
{$L x64/libvcruntime140_apps00045.o}
procedure __uncaught_exception;external;
{$L x64/libvcruntime140_apps00044.o}
procedure __unDNameEx;external;
{$L x64/libvcruntime140_apps00043.o}
procedure __unDName;external;
{$L x64/libvcruntime140_apps00042.o}
procedure __telemetry_main_return_trigger;external;
{$L x64/libvcruntime140_apps00041.o}
procedure __telemetry_main_invoke_trigger;external;
{$L x64/libvcruntime140_apps00040.o}
procedure __std_type_info_name;external;
{$L x64/libvcruntime140_apps00039.o}
procedure __std_type_info_hash;external;
{$L x64/libvcruntime140_apps00038.o}
procedure __std_type_info_destroy_list;external;
{$L x64/libvcruntime140_apps00037.o}
procedure __std_type_info_compare;external;
{$L x64/libvcruntime140_apps00036.o}
procedure __std_terminate;external;
{$L x64/libvcruntime140_apps00035.o}
procedure __std_exception_destroy;external;
{$L x64/libvcruntime140_apps00034.o}
procedure __std_exception_copy;external;
{$L x64/libvcruntime140_apps00033.o}
procedure __report_gsfailure;external;
{$L x64/libvcruntime140_apps00032.o}
procedure __processing_throw;external;
{$L x64/libvcruntime140_apps00031.o}
procedure __intrinsic_setjmpex;external;
{$L x64/libvcruntime140_apps00030.o}
procedure __intrinsic_setjmp;external;
{$L x64/libvcruntime140_apps00029.o}
procedure __current_exception_context;external;
{$L x64/libvcruntime140_apps00028.o}
procedure __current_exception;external;
{$L x64/libvcruntime140_apps00027.o}
procedure __TypeMatch;external;
{$L x64/libvcruntime140_apps00026.o}
procedure __RTtypeid;external;
{$L x64/libvcruntime140_apps00025.o}
procedure __RTDynamicCast;external;
{$L x64/libvcruntime140_apps00024.o}
procedure __RTCastToVoid;external;
{$L x64/libvcruntime140_apps00023.o}
procedure __NLG_Return2;external;
{$L x64/libvcruntime140_apps00022.o}
procedure __NLG_Dispatch2;external;
{$L x64/libvcruntime140_apps00021.o}
procedure __GetPlatformExceptionInfo;external;
{$L x64/libvcruntime140_apps00020.o}
procedure __FrameUnwindFilter;external;
{$L x64/libvcruntime140_apps00019.o}
procedure __DestructExceptionObject;external;
{$L x64/libvcruntime140_apps00018.o}
procedure __CxxUnregisterExceptionObject;external;
{$L x64/libvcruntime140_apps00017.o}
procedure __CxxRegisterExceptionObject;external;
{$L x64/libvcruntime140_apps00016.o}
procedure __CxxQueryExceptionSize;external;
{$L x64/libvcruntime140_apps00015.o}
procedure __CxxFrameHandler3;external;
{$L x64/libvcruntime140_apps00014.o}
procedure __CxxFrameHandler2;external;
{$L x64/libvcruntime140_apps00013.o}
procedure __CxxFrameHandler;external;
{$L x64/libvcruntime140_apps00012.o}
procedure __CxxExceptionFilter;external;
{$L x64/libvcruntime140_apps00011.o}
procedure __CxxDetectRethrow;external;
{$L x64/libvcruntime140_apps00010.o}
procedure __C_specific_handler_noexcept;external;
{$L x64/libvcruntime140_apps00009.o}
procedure __C_specific_handler;external;
{$L x64/libvcruntime140_apps00008.o}
procedure __BuildCatchObjectHelper;external;
{$L x64/libvcruntime140_apps00007.o}
procedure __BuildCatchObject;external;
{$L x64/libvcruntime140_apps00006.o}
procedure __AdjustPointer;external;
{$L x64/libvcruntime140_apps00005.o}
procedure _SetWinRTOutOfMemoryExceptionCallback;external;
{$L x64/libvcruntime140_apps00004.o}
procedure _IsExceptionObjectToBeDestroyed;external;
{$L x64/libvcruntime140_apps00003.o}
procedure _FindAndUnlinkFrame;external;
{$L x64/libvcruntime140_apps00002.o}
procedure _CxxThrowException;external;
{$L x64/libvcruntime140_apps00001.o}
procedure _CreateFrameInfo;external;
{$L x64/libvcruntime140_apps00000.o}
var
__lib64_libvcruntime140_app_a_iname : UInt64;
_head_lib64_libvcruntime140_app_a : UInt64;
__imp_wcsstr : UInt64;
__imp_wcsrchr : UInt64;
__imp_wcschr : UInt64;
__imp_unexpected : UInt64;
__imp_strstr : UInt64;
__imp_strrchr : UInt64;
__imp_strchr : UInt64;
__imp_set_unexpected : UInt64;
__imp_memset : UInt64;
__imp_memmove : UInt64;
__imp_memcpy : UInt64;
__imp_memcmp : UInt64;
__imp_memchr : UInt64;
__imp_longjmp : UInt64;
__imp__set_se_translator : UInt64;
__imp__set_purecall_handler : UInt64;
__imp__purecall : UInt64;
__imp__local_unwind : UInt64;
__imp__is_exception_typeof : UInt64;
__imp__get_unexpected : UInt64;
__imp__get_purecall_handler : UInt64;
__imp___vcrt_LoadLibraryExW : UInt64;
__imp___vcrt_InitializeCriticalSectionEx : UInt64;
__imp___vcrt_GetModuleHandleW : UInt64;
__imp___vcrt_GetModuleFileNameW : UInt64;
__imp___uncaught_exceptions : UInt64;
__imp___uncaught_exception : UInt64;
__imp___unDNameEx : UInt64;
__imp___unDName : UInt64;
__imp___telemetry_main_return_trigger : UInt64;
__imp___telemetry_main_invoke_trigger : UInt64;
__imp___std_type_info_name : UInt64;
__imp___std_type_info_hash : UInt64;
__imp___std_type_info_destroy_list : UInt64;
__imp___std_type_info_compare : UInt64;
__imp___std_terminate : UInt64;
__imp___std_exception_destroy : UInt64;
__imp___std_exception_copy : UInt64;
__imp___report_gsfailure : UInt64;
__imp___processing_throw : UInt64;
__imp___intrinsic_setjmpex : UInt64;
__imp___intrinsic_setjmp : UInt64;
__imp___current_exception_context : UInt64;
__imp___current_exception : UInt64;
__imp___TypeMatch : UInt64;
__imp___RTtypeid : UInt64;
__imp___RTDynamicCast : UInt64;
__imp___RTCastToVoid : UInt64;
__imp___NLG_Return2 : UInt64;
__imp___NLG_Dispatch2 : UInt64;
__imp___GetPlatformExceptionInfo : UInt64;
__imp___FrameUnwindFilter : UInt64;
__imp___DestructExceptionObject : UInt64;
__imp___CxxUnregisterExceptionObject : UInt64;
__imp___CxxRegisterExceptionObject : UInt64;
__imp___CxxQueryExceptionSize : UInt64;
__imp___CxxFrameHandler3 : UInt64;
__imp___CxxFrameHandler2 : UInt64;
__imp___CxxFrameHandler : UInt64;
__imp___CxxExceptionFilter : UInt64;
__imp___CxxDetectRethrow : UInt64;
__imp___C_specific_handler_noexcept : UInt64;
__imp___C_specific_handler : UInt64;
__imp___BuildCatchObjectHelper : UInt64;
__imp___BuildCatchObject : UInt64;
__imp___AdjustPointer : UInt64;
__imp__SetWinRTOutOfMemoryExceptionCallback : UInt64;
__imp__IsExceptionObjectToBeDestroyed : UInt64;
__imp__FindAndUnlinkFrame : UInt64;
__imp__CxxThrowException : UInt64;
__imp__CreateFrameInfo : UInt64;
{$ELSE}
procedure _wcsstr;external;
{$L x86/libvcruntime140_apps00080.o}
procedure _wcsrchr;external;
{$L x86/libvcruntime140_apps00079.o}
procedure _wcschr;external;
{$L x86/libvcruntime140_apps00078.o}
procedure _unexpected;external;
{$L x86/libvcruntime140_apps00077.o}
procedure _strstr;external;
{$L x86/libvcruntime140_apps00076.o}
procedure _strrchr;external;
{$L x86/libvcruntime140_apps00075.o}
procedure _strchr;external;
{$L x86/libvcruntime140_apps00074.o}
procedure _set_unexpected;external;
{$L x86/libvcruntime140_apps00073.o}
procedure _memset;external;
{$L x86/libvcruntime140_apps00072.o}
procedure _memmove;external;
{$L x86/libvcruntime140_apps00071.o}
procedure _memcpy;external;
{$L x86/libvcruntime140_apps00070.o}
procedure _memcmp;external;
{$L x86/libvcruntime140_apps00069.o}
procedure _memchr;external;
{$L x86/libvcruntime140_apps00068.o}
procedure _longjmp;external;
{$L x86/libvcruntime140_apps00067.o}
procedure __setjmp3;external;
{$L x86/libvcruntime140_apps00066.o}
procedure __set_se_translator;external;
{$L x86/libvcruntime140_apps00065.o}
procedure __set_purecall_handler;external;
{$L x86/libvcruntime140_apps00064.o}
procedure __purecall;external;
{$L x86/libvcruntime140_apps00061.o}
procedure __longjmpex;external;
{$L x86/libvcruntime140_apps00060.o}
procedure __local_unwind4;external;
{$L x86/libvcruntime140_apps00059.o}
procedure __local_unwind2;external;
{$L x86/libvcruntime140_apps00058.o}
procedure __is_exception_typeof;external;
{$L x86/libvcruntime140_apps00057.o}
procedure __global_unwind2;external;
{$L x86/libvcruntime140_apps00056.o}
procedure __get_unexpected;external;
{$L x86/libvcruntime140_apps00055.o}
procedure __get_purecall_handler;external;
{$L x86/libvcruntime140_apps00054.o}
procedure __except_handler4_common;external;
{$L x86/libvcruntime140_apps00053.o}
procedure __except_handler3;external;
{$L x86/libvcruntime140_apps00052.o}
procedure __except_handler2;external;
{$L x86/libvcruntime140_apps00051.o}
procedure __chkesp;external;
{$L x86/libvcruntime140_apps00050.o}
procedure ___vcrt_LoadLibraryExW;external;
{$L x86/libvcruntime140_apps00049.o}
procedure ___vcrt_InitializeCriticalSectionEx;external;
{$L x86/libvcruntime140_apps00048.o}
procedure ___vcrt_GetModuleHandleW;external;
{$L x86/libvcruntime140_apps00047.o}
procedure ___vcrt_GetModuleFileNameW;external;
{$L x86/libvcruntime140_apps00046.o}
procedure ___uncaught_exceptions;external;
{$L x86/libvcruntime140_apps00045.o}
procedure ___uncaught_exception;external;
{$L x86/libvcruntime140_apps00044.o}
procedure ___unDNameEx;external;
{$L x86/libvcruntime140_apps00043.o}
procedure ___unDName;external;
{$L x86/libvcruntime140_apps00042.o}
procedure ___telemetry_main_return_trigger;external;
{$L x86/libvcruntime140_apps00041.o}
procedure ___telemetry_main_invoke_trigger;external;
{$L x86/libvcruntime140_apps00040.o}
procedure ___std_type_info_name;external;
{$L x86/libvcruntime140_apps00039.o}
procedure ___std_type_info_hash;external;
{$L x86/libvcruntime140_apps00038.o}
procedure ___std_type_info_destroy_list;external;
{$L x86/libvcruntime140_apps00037.o}
procedure ___std_type_info_compare;external;
{$L x86/libvcruntime140_apps00036.o}
procedure ___std_terminate;external;
{$L x86/libvcruntime140_apps00035.o}
procedure ___std_exception_destroy;external;
{$L x86/libvcruntime140_apps00034.o}
procedure ___std_exception_copy;external;
{$L x86/libvcruntime140_apps00033.o}
procedure ___report_gsfailure;external;
{$L x86/libvcruntime140_apps00032.o}
procedure ___processing_throw;external;
{$L x86/libvcruntime140_apps00031.o}
procedure ___intrinsic_setjmp;external;
{$L x86/libvcruntime140_apps00030.o}
procedure ___current_exception_context;external;
{$L x86/libvcruntime140_apps00029.o}
procedure ___current_exception;external;
{$L x86/libvcruntime140_apps00028.o}
procedure ___TypeMatch;external;
{$L x86/libvcruntime140_apps00027.o}
procedure ___RTtypeid;external;
{$L x86/libvcruntime140_apps00026.o}
procedure ___RTDynamicCast;external;
{$L x86/libvcruntime140_apps00025.o}
procedure ___RTCastToVoid;external;
{$L x86/libvcruntime140_apps00024.o}
procedure ___GetPlatformExceptionInfo;external;
{$L x86/libvcruntime140_apps00023.o}
procedure ___FrameUnwindFilter;external;
{$L x86/libvcruntime140_apps00022.o}
procedure ___DestructExceptionObject;external;
{$L x86/libvcruntime140_apps00021.o}
procedure ___CxxUnregisterExceptionObject;external;
{$L x86/libvcruntime140_apps00020.o}
procedure ___CxxRegisterExceptionObject;external;
{$L x86/libvcruntime140_apps00019.o}
procedure ___CxxQueryExceptionSize;external;
{$L x86/libvcruntime140_apps00018.o}
procedure ___CxxFrameHandler3;external;
{$L x86/libvcruntime140_apps00016.o}
procedure ___CxxFrameHandler2;external;
{$L x86/libvcruntime140_apps00015.o}
procedure ___CxxFrameHandler;external;
{$L x86/libvcruntime140_apps00014.o}
procedure ___CxxExceptionFilter;external;
{$L x86/libvcruntime140_apps00013.o}
procedure ___CxxDetectRethrow;external;
{$L x86/libvcruntime140_apps00012.o}
procedure ___BuildCatchObjectHelper;external;
{$L x86/libvcruntime140_apps00011.o}
procedure ___BuildCatchObject;external;
{$L x86/libvcruntime140_apps00010.o}
procedure ___AdjustPointer;external;
{$L x86/libvcruntime140_apps00009.o}
procedure __SetWinRTOutOfMemoryExceptionCallback;external;
{$L x86/libvcruntime140_apps00008.o}
procedure __NLG_Return2;external;
{$L x86/libvcruntime140_apps00007.o}
procedure __NLG_Return;external;
{$L x86/libvcruntime140_apps00006.o}
procedure __NLG_Dispatch2;external;
{$L x86/libvcruntime140_apps00005.o}
procedure __IsExceptionObjectToBeDestroyed;external;
{$L x86/libvcruntime140_apps00004.o}
procedure __FindAndUnlinkFrame;external;
{$L x86/libvcruntime140_apps00003.o}
procedure __EH_prolog;external;
{$L x86/libvcruntime140_apps00002.o}
procedure __CreateFrameInfo;external;
{$L x86/libvcruntime140_apps00000.o}
var
__lib32_libvcruntime140_app_a_iname : UInt64;
__head_lib32_libvcruntime140_app_a : UInt64;
__imp__wcsstr : UInt64;
__imp__wcsrchr : UInt64;
__imp__wcschr : UInt64;
__imp__unexpected : UInt64;
__imp__strstr : UInt64;
__imp__strrchr : UInt64;
__imp__strchr : UInt64;
__imp__set_unexpected : UInt64;
__imp__memset : UInt64;
__imp__memmove : UInt64;
__imp__memcpy : UInt64;
__imp__memcmp : UInt64;
__imp__memchr : UInt64;
__imp__longjmp : UInt64;
__imp___setjmp3 : UInt64;
__imp___set_se_translator : UInt64;
__imp___set_purecall_handler : UInt64;
__imp___purecall : UInt64;
__imp___longjmpex : UInt64;
__imp___local_unwind4 : UInt64;
__imp___local_unwind2 : UInt64;
__imp___is_exception_typeof : UInt64;
__imp___global_unwind2 : UInt64;
__imp___get_unexpected : UInt64;
__imp___get_purecall_handler : UInt64;
__imp___except_handler4_common : UInt64;
__imp___except_handler3 : UInt64;
__imp___except_handler2 : UInt64;
__imp___chkesp : UInt64;
__imp____vcrt_LoadLibraryExW : UInt64;
__imp____vcrt_InitializeCriticalSectionEx : UInt64;
__imp____vcrt_GetModuleHandleW : UInt64;
__imp____vcrt_GetModuleFileNameW : UInt64;
__imp____uncaught_exceptions : UInt64;
__imp____uncaught_exception : UInt64;
__imp____unDNameEx : UInt64;
__imp____unDName : UInt64;
__imp____telemetry_main_return_trigger : UInt64;
__imp____telemetry_main_invoke_trigger : UInt64;
__imp____std_type_info_name : UInt64;
__imp____std_type_info_hash : UInt64;
__imp____std_type_info_destroy_list : UInt64;
__imp____std_type_info_compare : UInt64;
__imp____std_terminate : UInt64;
__imp____std_exception_destroy : UInt64;
__imp____std_exception_copy : UInt64;
__imp____report_gsfailure : UInt64;
__imp____processing_throw : UInt64;
__imp____intrinsic_setjmp : UInt64;
__imp____current_exception_context : UInt64;
__imp____current_exception : UInt64;
__imp____TypeMatch : UInt64;
__imp____RTtypeid : UInt64;
__imp____RTDynamicCast : UInt64;
__imp____RTCastToVoid : UInt64;
__imp____GetPlatformExceptionInfo : UInt64;
__imp____FrameUnwindFilter : UInt64;
__imp____DestructExceptionObject : UInt64;
__imp____CxxUnregisterExceptionObject : UInt64;
__imp____CxxRegisterExceptionObject : UInt64;
__imp____CxxQueryExceptionSize : UInt64;
__imp____CxxFrameHandler3 : UInt64;
__imp____CxxFrameHandler2 : UInt64;
__imp____CxxFrameHandler : UInt64;
__imp____CxxExceptionFilter : UInt64;
__imp____CxxDetectRethrow : UInt64;
__imp____BuildCatchObjectHelper : UInt64;
__imp____BuildCatchObject : UInt64;
__imp____AdjustPointer : UInt64;
__imp___SetWinRTOutOfMemoryExceptionCallback : UInt64;
__imp___NLG_Return2 : UInt64;
__imp___NLG_Return : UInt64;
__imp___NLG_Dispatch2 : UInt64;
__imp___IsExceptionObjectToBeDestroyed : UInt64;
__imp___FindAndUnlinkFrame : UInt64;
__imp___EH_prolog : UInt64;
__imp___CreateFrameInfo : UInt64;
{$ENDIF}
implementation
end.

BIN
contrib/LIBC/llmul.x86.o Normal file

Binary file not shown.

BIN
contrib/LIBC/memcmp.x64.o Normal file

Binary file not shown.

BIN
contrib/LIBC/memcmp.x86.o Normal file

Binary file not shown.

BIN
contrib/LIBC/memcpy.x64.o Normal file

Binary file not shown.

BIN
contrib/LIBC/memcpy.x86.o Normal file

Binary file not shown.

BIN
contrib/LIBC/memmove.x86.o Normal file

Binary file not shown.

BIN
contrib/LIBC/memset.x64.o Normal file

Binary file not shown.

BIN
contrib/LIBC/memset.x86.o Normal file

Binary file not shown.

3
contrib/LIBC/pkglibc.bpi Normal file
View File

@ -0,0 +1,3 @@
/* 'pkglibc' Package */
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( bplpkglibc.so pkglibc_nonshared.a )

36
contrib/LIBC/pkglibc.dpk Normal file
View File

@ -0,0 +1,36 @@
package pkglibc;
{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE RELEASE}
{$ENDIF IMPLICITBUILDING}
{$IMPLICITBUILD ON}
requires
rtl;
contains
libc in 'libc.pas';
end.

956
contrib/LIBC/pkglibc.dproj Normal file
View File

@ -0,0 +1,956 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{4BF86541-AFCF-4EAD-AF66-367AE6174BAF}</ProjectGuid>
<MainSource>pkglibc.dpk</MainSource>
<ProjectVersion>19.4</ProjectVersion>
<FrameworkType>None</FrameworkType>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Release</Config>
<Platform Condition="'$(Platform)'==''">Win64</Platform>
<TargetedPlatforms>131</TargetedPlatforms>
<AppType>Package</AppType>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
<Base_Android>true</Base_Android>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Android64' and '$(Base)'=='true') or '$(Base_Android64)'!=''">
<Base_Android64>true</Base_Android64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='iOSDevice64' and '$(Base)'=='true') or '$(Base_iOSDevice64)'!=''">
<Base_iOSDevice64>true</Base_iOSDevice64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='OSX64' and '$(Base)'=='true') or '$(Base_OSX64)'!=''">
<Base_OSX64>true</Base_OSX64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='OSXARM64' and '$(Base)'=='true') or '$(Base_OSXARM64)'!=''">
<Base_OSXARM64>true</Base_OSXARM64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
<Cfg_1_Win32>true</Cfg_1_Win32>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win64)'!=''">
<Cfg_2_Win64>true</Cfg_2_Win64>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_DcuOutput>..\$(ProductVersion)\$(Platform)\$(Config)</DCC_DcuOutput>
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
<DCC_E>false</DCC_E>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
<GenDll>true</GenDll>
<GenPackage>true</GenPackage>
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
<DCC_CBuilderOutput>All</DCC_CBuilderOutput>
<SanitizedProjectName>pkglibc</SanitizedProjectName>
<VerInfo_Locale>2052</VerInfo_Locale>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<DCC_BAD_GLOBAL_SYMBOL>false</DCC_BAD_GLOBAL_SYMBOL>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Android)'!=''">
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
<EnabledSysJars>android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar</EnabledSysJars>
<Android_LauncherIcon192>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png</Android_LauncherIcon192>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Android64)'!=''">
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
<EnabledSysJars>android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar</EnabledSysJars>
<Android_LauncherIcon192>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png</Android_LauncherIcon192>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_iOSDevice64)'!=''">
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
<iOS_AppStore1024>$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png</iOS_AppStore1024>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_OSX64)'!=''">
<VerInfo_Keys>CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple&apos;s speech recognition servers</VerInfo_Keys>
<BT_BuildType>Debug</BT_BuildType>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_OSXARM64)'!=''">
<VerInfo_Keys>CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple&apos;s speech recognition servers</VerInfo_Keys>
<BT_BuildType>Debug</BT_BuildType>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_DebugDCUs>true</DCC_DebugDCUs>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
<DCC_RemoteDebug>true</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
<DCC_RemoteDebug>false</DCC_RemoteDebug>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>0</DCC_DebugInformation>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="libc.pas"/>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">pkglibc.dpk</Source>
</Source>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k280.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp280.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
<Platforms>
<Platform value="Android">False</Platform>
<Platform value="Android64">False</Platform>
<Platform value="iOSDevice64">False</Platform>
<Platform value="Linux64">True</Platform>
<Platform value="OSX64">False</Platform>
<Platform value="OSXARM64">False</Platform>
<Platform value="Win32">True</Platform>
<Platform value="Win64">True</Platform>
</Platforms>
<Deployment Version="3">
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\21.0\Bpl\Win64\pkglibc.bpl" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win64">
<RemoteName>pkglibc.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\pkglibc.bpl" Configuration="Release" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>pkglibc.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\Win64\pkglibc.bpl" Configuration="Release" Class="ProjectOutput">
<Platform Name="Win64">
<RemoteName>pkglibc.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidClasses">
<Platform Name="Android">
<RemoteDir>classes</RemoteDir>
<Operation>64</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>classes</RemoteDir>
<Operation>64</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidClassesDexFile">
<Platform Name="Android">
<RemoteDir>classes</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>classes</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidFileProvider">
<Platform Name="Android">
<RemoteDir>res\xml</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\xml</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidGDBServer">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeArmeabiFile">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeArmeabiv7aFile">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeMipsFile">
<Platform Name="Android">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput_Android32">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashImageDef">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStyles">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStylesV21">
<Platform Name="Android">
<RemoteDir>res\values-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_Colors">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_DefaultAppIcon">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon144">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon192">
<Platform Name="Android">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon24">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage426">
<Platform Name="Android">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage470">
<Platform Name="Android">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage640">
<Platform Name="Android">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage960">
<Platform Name="Android">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_Strings">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DebugSymbols">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyFramework">
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyModule">
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.dll;.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="DependencyPackage">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Name="File">
<Platform Name="Android">
<Operation>0</Operation>
</Platform>
<Platform Name="Android64">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX64">
<Operation>0</Operation>
</Platform>
<Platform Name="OSXARM64">
<Operation>0</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iOS_AppStore1024">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_AppIcon152">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_AppIcon167">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_LaunchDark2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Notification40">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Setting58">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_SpotLight80">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_AppIcon120">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_AppIcon180">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch3x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_LaunchDark2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_LaunchDark3x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Notification40">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Notification60">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Setting58">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Setting87">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Spotlight120">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Spotlight80">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectAndroidManifest">
<Platform Name="Android">
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceDebug">
<Platform Name="iOSDevice32">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceResourceRules"/>
<DeployClass Name="ProjectiOSEntitlements"/>
<DeployClass Name="ProjectiOSInfoPList"/>
<DeployClass Name="ProjectiOSLaunchScreen"/>
<DeployClass Name="ProjectiOSResource">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXDebug"/>
<DeployClass Name="ProjectOSXEntitlements"/>
<DeployClass Name="ProjectOSXInfoPList"/>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="ProjectOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="Linux64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOutput_Android32">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectUWPManifest">
<Platform Name="Win32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo150">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo44">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
</Deployment>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
</Project>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<Transactions>
<Transaction>2020/06/16 10:18:17.000.397,=rtl.dcp</Transaction>
<Transaction>2020/06/16 10:18:43.000.119,D:\Users\YW\Documents\Embarcadero\Studio\Projects\Package1.dproj=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\pkglibc.dproj</Transaction>
<Transaction>2020/06/16 10:22:07.000.080,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\Unit1.pas</Transaction>
<Transaction>2020/06/16 10:22:24.000.216,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\libc\Unit1.pas=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\Unit1.pas</Transaction>
<Transaction>2020/06/16 10:22:42.000.105,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\libc\pkglibc.dproj=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\pkglibc.dproj</Transaction>
<Transaction>2020/06/16 10:23:03.000.712,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\libc\libc.pas=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\libc\Unit1.pas</Transaction>
<Transaction>2022/04/15 10:09:52.000.440,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\libucrt.pas</Transaction>
<Transaction>2022/04/15 12:22:21.000.777,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\libgcc.pas</Transaction>
<Transaction>2022/04/17 16:36:03.763,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\libgcc.pas=</Transaction>
<Transaction>2022/04/17 16:36:03.813,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\libucrt.pas=</Transaction>
</Transactions>
</BorlandProject>

Binary file not shown.

BIN
contrib/LIBC/pkglibc.res Normal file

Binary file not shown.

Binary file not shown.

438
contrib/LIBC/testlibgcc.pas Normal file
View File

@ -0,0 +1,438 @@
unit testlibgcc;
interface
uses SysUtils,libgcc;
procedure test_libgcc;
implementation
procedure test_libgcc;
begin
try
{$IFDEF WIN64}
writeln('__alloca: ',NativeInt(@__alloca));
writeln('___chkstk_ms: ',NativeInt(@___chkstk_ms));
writeln('__multi3: ',NativeInt(@__multi3));
writeln('__negti2: ',NativeInt(@__negti2));
writeln('__lshrti3: ',NativeInt(@__lshrti3));
writeln('__ashlti3: ',NativeInt(@__ashlti3));
writeln('__ashrti3: ',NativeInt(@__ashrti3));
writeln('__cmpti2: ',NativeInt(@__cmpti2));
writeln('__ucmpti2: ',NativeInt(@__ucmpti2));
writeln('__clear_cache: ',NativeInt(@__clear_cache));
writeln('getpagesize: ',NativeInt(@getpagesize));
writeln('__do_global_dtors: ',NativeInt(@__do_global_dtors));
writeln('__absvdi2: ',NativeInt(@__absvdi2));
writeln('__absvti2: ',NativeInt(@__absvti2));
writeln('__addvdi3: ',NativeInt(@__addvdi3));
writeln('__addvti3: ',NativeInt(@__addvti3));
writeln('__subvdi3: ',NativeInt(@__subvdi3));
writeln('__subvti3: ',NativeInt(@__subvti3));
writeln('__mulvdi3: ',NativeInt(@__mulvdi3));
writeln('__mulvti3: ',NativeInt(@__mulvti3));
writeln('__negvdi2: ',NativeInt(@__negvdi2));
writeln('__negvti2: ',NativeInt(@__negvti2));
writeln('__ffsdi2: ',NativeInt(@__ffsdi2));
writeln('__ffsti2: ',NativeInt(@__ffsti2));
writeln('__clzdi2: ',NativeInt(@__clzdi2));
writeln('__clzti2: ',NativeInt(@__clzti2));
writeln('__ctzdi2: ',NativeInt(@__ctzdi2));
writeln('__ctzti2: ',NativeInt(@__ctzti2));
writeln('__popcountdi2: ',NativeInt(@__popcountdi2));
writeln('__popcountti2: ',NativeInt(@__popcountti2));
writeln('__paritydi2: ',NativeInt(@__paritydi2));
writeln('__parityti2: ',NativeInt(@__parityti2));
writeln('__powisf2: ',NativeInt(@__powisf2));
writeln('__powidf2: ',NativeInt(@__powidf2));
writeln('__powixf2: ',NativeInt(@__powixf2));
writeln('__powitf2: ',NativeInt(@__powitf2));
writeln('__mulsc3: ',NativeInt(@__mulsc3));
writeln('__muldc3: ',NativeInt(@__muldc3));
writeln('__mulxc3: ',NativeInt(@__mulxc3));
writeln('__multc3: ',NativeInt(@__multc3));
writeln('__divsc3: ',NativeInt(@__divsc3));
writeln('__divdc3: ',NativeInt(@__divdc3));
writeln('__divxc3: ',NativeInt(@__divxc3));
writeln('__divtc3: ',NativeInt(@__divtc3));
writeln('__bswapsi2: ',NativeInt(@__bswapsi2));
writeln('__bswapdi2: ',NativeInt(@__bswapdi2));
writeln('__clrsbdi2: ',NativeInt(@__clrsbdi2));
writeln('__clrsbti2: ',NativeInt(@__clrsbti2));
writeln('__fixunssfdi: ',NativeInt(@__fixunssfdi));
writeln('__fixunsdfdi: ',NativeInt(@__fixunsdfdi));
writeln('__fixunsxfdi: ',NativeInt(@__fixunsxfdi));
writeln('__fixsfti: ',NativeInt(@__fixsfti));
writeln('__fixdfti: ',NativeInt(@__fixdfti));
writeln('__fixxfti: ',NativeInt(@__fixxfti));
writeln('__fixunssfti: ',NativeInt(@__fixunssfti));
writeln('__fixunsdfti: ',NativeInt(@__fixunsdfti));
writeln('__fixunsxfti: ',NativeInt(@__fixunsxfti));
writeln('__floattisf: ',NativeInt(@__floattisf));
writeln('__floattidf: ',NativeInt(@__floattidf));
writeln('__floattixf: ',NativeInt(@__floattixf));
writeln('__floatuntisf: ',NativeInt(@__floatuntisf));
writeln('__floatuntidf: ',NativeInt(@__floatuntidf));
writeln('__floatuntixf: ',NativeInt(@__floatuntixf));
writeln('__gcc_bcmp: ',NativeInt(@__gcc_bcmp));
writeln('__divti3: ',NativeInt(@__divti3));
writeln('__modti3: ',NativeInt(@__modti3));
writeln('__divmodti4: ',NativeInt(@__divmodti4));
writeln('__udivti3: ',NativeInt(@__udivti3));
writeln('__umodti3: ',NativeInt(@__umodti3));
writeln('__udivmodti4: ',NativeInt(@__udivmodti4));
writeln('__udiv_w_sdiv: ',NativeInt(@__udiv_w_sdiv));
writeln('__dfp_set_round: ',NativeInt(@__dfp_set_round));
writeln('__bid32_to_binary32: ',NativeInt(@__bid32_to_binary32));
writeln('isinfd32: ',NativeInt(@isinfd32));
writeln('isinfd64: ',NativeInt(@isinfd64));
writeln('isinfd128: ',NativeInt(@isinfd128));
writeln('__bid64_isSigned: ',NativeInt(@__bid64_isSigned));
writeln('__bid128_isSigned: ',NativeInt(@__bid128_isSigned));
writeln('__bid_round64_2_18: ',NativeInt(@__bid_round64_2_18));
writeln('__bid64_from_int32: ',NativeInt(@__bid64_from_int32));
writeln('__bid64_add: ',NativeInt(@__bid64_add));
writeln('__bid64dq_add: ',NativeInt(@__bid64dq_add));
writeln('__bid64_mul: ',NativeInt(@__bid64_mul));
writeln('__bid64qq_mul: ',NativeInt(@__bid64qq_mul));
writeln('__bid64_quiet_equal: ',NativeInt(@__bid64_quiet_equal));
writeln('__bid128_quiet_equal: ',NativeInt(@__bid128_quiet_equal));
writeln('__bid32_to_bid64: ',NativeInt(@__bid32_to_bid64));
writeln('__bid32_to_bid128: ',NativeInt(@__bid32_to_bid128));
writeln('__bid64_to_bid128: ',NativeInt(@__bid64_to_bid128));
writeln('__bid64_to_int32_rnint: ',NativeInt(@__bid64_to_int32_rnint));
writeln('__bid64_to_int64_rnint: ',NativeInt(@__bid64_to_int64_rnint));
writeln('__bid64_to_uint32_rnint: ',NativeInt(@__bid64_to_uint32_rnint));
writeln('__bid64_to_uint64_rnint: ',NativeInt(@__bid64_to_uint64_rnint));
writeln('__bid128_to_int32_rnint: ',NativeInt(@__bid128_to_int32_rnint));
writeln('__bid128_to_int64_rnint: ',NativeInt(@__bid128_to_int64_rnint));
writeln('__bid128_to_uint32_rnint: ',NativeInt(@__bid128_to_uint32_rnint));
writeln('__bid128_to_uint64_rnint: ',NativeInt(@__bid128_to_uint64_rnint));
writeln('__bid_addsd3: ',NativeInt(@__bid_addsd3));
writeln('__bid_divsd3: ',NativeInt(@__bid_divsd3));
writeln('__bid_mulsd3: ',NativeInt(@__bid_mulsd3));
writeln('__bid_eqsd2: ',NativeInt(@__bid_eqsd2));
writeln('__bid_nesd2: ',NativeInt(@__bid_nesd2));
writeln('__bid_ltsd2: ',NativeInt(@__bid_ltsd2));
writeln('__bid_gtsd2: ',NativeInt(@__bid_gtsd2));
writeln('__bid_lesd2: ',NativeInt(@__bid_lesd2));
writeln('__bid_gesd2: ',NativeInt(@__bid_gesd2));
writeln('__bid_fixsdsi: ',NativeInt(@__bid_fixsdsi));
writeln('__bid_fixsddi: ',NativeInt(@__bid_fixsddi));
writeln('__bid_fixunssdsi: ',NativeInt(@__bid_fixunssdsi));
writeln('__bid_fixunssddi: ',NativeInt(@__bid_fixunssddi));
writeln('__bid_floatsisd: ',NativeInt(@__bid_floatsisd));
writeln('__bid_floatdisd: ',NativeInt(@__bid_floatdisd));
writeln('__bid_floatunssisd: ',NativeInt(@__bid_floatunssisd));
writeln('__bid_floatunsdisd: ',NativeInt(@__bid_floatunsdisd));
writeln('__bid_truncsdsf: ',NativeInt(@__bid_truncsdsf));
writeln('__bid_extendsddf: ',NativeInt(@__bid_extendsddf));
writeln('__bid_extendsdxf: ',NativeInt(@__bid_extendsdxf));
writeln('__bid_extendsdtf: ',NativeInt(@__bid_extendsdtf));
writeln('__bid_extendsfsd: ',NativeInt(@__bid_extendsfsd));
writeln('__bid_truncdfsd: ',NativeInt(@__bid_truncdfsd));
writeln('__bid_truncxfsd: ',NativeInt(@__bid_truncxfsd));
writeln('__bid_trunctfsd: ',NativeInt(@__bid_trunctfsd));
writeln('__bid_extendsddd2: ',NativeInt(@__bid_extendsddd2));
writeln('__bid_extendsdtd2: ',NativeInt(@__bid_extendsdtd2));
writeln('__bid_unordsd2: ',NativeInt(@__bid_unordsd2));
writeln('__bid_adddd3: ',NativeInt(@__bid_adddd3));
writeln('__bid_divdd3: ',NativeInt(@__bid_divdd3));
writeln('__bid_muldd3: ',NativeInt(@__bid_muldd3));
writeln('__bid_eqdd2: ',NativeInt(@__bid_eqdd2));
writeln('__bid_nedd2: ',NativeInt(@__bid_nedd2));
writeln('__bid_ltdd2: ',NativeInt(@__bid_ltdd2));
writeln('__bid_gtdd2: ',NativeInt(@__bid_gtdd2));
writeln('__bid_ledd2: ',NativeInt(@__bid_ledd2));
writeln('__bid_gedd2: ',NativeInt(@__bid_gedd2));
writeln('__bid_fixddsi: ',NativeInt(@__bid_fixddsi));
writeln('__bid_fixdddi: ',NativeInt(@__bid_fixdddi));
writeln('__bid_fixunsddsi: ',NativeInt(@__bid_fixunsddsi));
writeln('__bid_fixunsdddi: ',NativeInt(@__bid_fixunsdddi));
writeln('__bid_floatsidd: ',NativeInt(@__bid_floatsidd));
writeln('__bid_floatdidd: ',NativeInt(@__bid_floatdidd));
writeln('__bid_floatunssidd: ',NativeInt(@__bid_floatunssidd));
writeln('__bid_floatunsdidd: ',NativeInt(@__bid_floatunsdidd));
writeln('__bid_truncddsf: ',NativeInt(@__bid_truncddsf));
writeln('__bid_truncdddf: ',NativeInt(@__bid_truncdddf));
writeln('__bid_extendddxf: ',NativeInt(@__bid_extendddxf));
writeln('__bid_extendddtf: ',NativeInt(@__bid_extendddtf));
writeln('__bid_extendsfdd: ',NativeInt(@__bid_extendsfdd));
writeln('__bid_extenddfdd: ',NativeInt(@__bid_extenddfdd));
writeln('__bid_truncxfdd: ',NativeInt(@__bid_truncxfdd));
writeln('__bid_trunctfdd: ',NativeInt(@__bid_trunctfdd));
writeln('__bid_truncddsd2: ',NativeInt(@__bid_truncddsd2));
writeln('__bid_extendddtd2: ',NativeInt(@__bid_extendddtd2));
writeln('__bid_unorddd2: ',NativeInt(@__bid_unorddd2));
writeln('__bid_addtd3: ',NativeInt(@__bid_addtd3));
writeln('__bid_divtd3: ',NativeInt(@__bid_divtd3));
writeln('__bid_multd3: ',NativeInt(@__bid_multd3));
writeln('__bid_eqtd2: ',NativeInt(@__bid_eqtd2));
writeln('__bid_netd2: ',NativeInt(@__bid_netd2));
writeln('__bid_lttd2: ',NativeInt(@__bid_lttd2));
writeln('__bid_gttd2: ',NativeInt(@__bid_gttd2));
writeln('__bid_letd2: ',NativeInt(@__bid_letd2));
writeln('__bid_getd2: ',NativeInt(@__bid_getd2));
writeln('__bid_fixtdsi: ',NativeInt(@__bid_fixtdsi));
writeln('__bid_fixtddi: ',NativeInt(@__bid_fixtddi));
writeln('__bid_fixunstdsi: ',NativeInt(@__bid_fixunstdsi));
writeln('__bid_fixunstddi: ',NativeInt(@__bid_fixunstddi));
writeln('__bid_floatsitd: ',NativeInt(@__bid_floatsitd));
writeln('__bid_floatditd: ',NativeInt(@__bid_floatditd));
writeln('__bid_floatunssitd: ',NativeInt(@__bid_floatunssitd));
writeln('__bid_floatunsditd: ',NativeInt(@__bid_floatunsditd));
writeln('__bid_trunctdsf: ',NativeInt(@__bid_trunctdsf));
writeln('__bid_trunctddf: ',NativeInt(@__bid_trunctddf));
writeln('__bid_trunctdxf: ',NativeInt(@__bid_trunctdxf));
writeln('__bid_trunctdtf: ',NativeInt(@__bid_trunctdtf));
writeln('__bid_extendsftd: ',NativeInt(@__bid_extendsftd));
writeln('__bid_extenddftd: ',NativeInt(@__bid_extenddftd));
writeln('__bid_extendxftd: ',NativeInt(@__bid_extendxftd));
writeln('__bid_extendtftd: ',NativeInt(@__bid_extendtftd));
writeln('__bid_trunctdsd2: ',NativeInt(@__bid_trunctdsd2));
writeln('__bid_trunctddd2: ',NativeInt(@__bid_trunctddd2));
writeln('__bid_unordtd2: ',NativeInt(@__bid_unordtd2));
writeln('__sfp_handle_exceptions: ',NativeInt(@__sfp_handle_exceptions));
writeln('__addtf3: ',NativeInt(@__addtf3));
writeln('__divtf3: ',NativeInt(@__divtf3));
writeln('__eqtf2: ',NativeInt(@__eqtf2));
writeln('__netf2: ',NativeInt(@__netf2));
writeln('__getf2: ',NativeInt(@__getf2));
writeln('__gttf2: ',NativeInt(@__gttf2));
writeln('__letf2: ',NativeInt(@__letf2));
writeln('__lttf2: ',NativeInt(@__lttf2));
writeln('__multf3: ',NativeInt(@__multf3));
writeln('__negtf2: ',NativeInt(@__negtf2));
writeln('__subtf3: ',NativeInt(@__subtf3));
writeln('__unordtf2: ',NativeInt(@__unordtf2));
writeln('__fixtfsi: ',NativeInt(@__fixtfsi));
writeln('__fixunstfsi: ',NativeInt(@__fixunstfsi));
writeln('__floatsitf: ',NativeInt(@__floatsitf));
writeln('__floatunsitf: ',NativeInt(@__floatunsitf));
writeln('__fixtfdi: ',NativeInt(@__fixtfdi));
writeln('__fixunstfdi: ',NativeInt(@__fixunstfdi));
writeln('__floatditf: ',NativeInt(@__floatditf));
writeln('__floatunditf: ',NativeInt(@__floatunditf));
writeln('__fixtfti: ',NativeInt(@__fixtfti));
writeln('__fixunstfti: ',NativeInt(@__fixunstfti));
writeln('__floattitf: ',NativeInt(@__floattitf));
writeln('__floatuntitf: ',NativeInt(@__floatuntitf));
writeln('__extendsftf2: ',NativeInt(@__extendsftf2));
writeln('__extenddftf2: ',NativeInt(@__extenddftf2));
writeln('__extendxftf2: ',NativeInt(@__extendxftf2));
writeln('__trunctfsf2: ',NativeInt(@__trunctfsf2));
writeln('__trunctfdf2: ',NativeInt(@__trunctfdf2));
writeln('__trunctfxf2: ',NativeInt(@__trunctfxf2));
writeln('__enable_execute_stack: ',NativeInt(@__enable_execute_stack));
{$ELSE}
writeln('___chkstk: ',NativeInt(@___chkstk));
writeln('__alloca: ',NativeInt(@__alloca));
writeln('___chkstk_ms: ',NativeInt(@___chkstk_ms));
writeln('___muldi3: ',NativeInt(@___muldi3));
writeln('___negdi2: ',NativeInt(@___negdi2));
writeln('___lshrdi3: ',NativeInt(@___lshrdi3));
writeln('___ashldi3: ',NativeInt(@___ashldi3));
writeln('___ashrdi3: ',NativeInt(@___ashrdi3));
writeln('___cmpdi2: ',NativeInt(@___cmpdi2));
writeln('___ucmpdi2: ',NativeInt(@___ucmpdi2));
writeln('___clear_cache: ',NativeInt(@___clear_cache));
writeln('___do_global_dtors: ',NativeInt(@___do_global_dtors));
writeln('___absvsi2: ',NativeInt(@___absvsi2));
writeln('___absvdi2: ',NativeInt(@___absvdi2));
writeln('___addvsi3: ',NativeInt(@___addvsi3));
writeln('___addvdi3: ',NativeInt(@___addvdi3));
writeln('___subvsi3: ',NativeInt(@___subvsi3));
writeln('___subvdi3: ',NativeInt(@___subvdi3));
writeln('___mulvsi3: ',NativeInt(@___mulvsi3));
writeln('___mulvdi3: ',NativeInt(@___mulvdi3));
writeln('___negvsi2: ',NativeInt(@___negvsi2));
writeln('___negvdi2: ',NativeInt(@___negvdi2));
writeln('___ffssi2: ',NativeInt(@___ffssi2));
writeln('___ffsdi2: ',NativeInt(@___ffsdi2));
writeln('___clzsi2: ',NativeInt(@___clzsi2));
writeln('___clzdi2: ',NativeInt(@___clzdi2));
writeln('___ctzsi2: ',NativeInt(@___ctzsi2));
writeln('___ctzdi2: ',NativeInt(@___ctzdi2));
writeln('___popcountsi2: ',NativeInt(@___popcountsi2));
writeln('___popcountdi2: ',NativeInt(@___popcountdi2));
writeln('___paritysi2: ',NativeInt(@___paritysi2));
writeln('___paritydi2: ',NativeInt(@___paritydi2));
writeln('___powisf2: ',NativeInt(@___powisf2));
writeln('___powidf2: ',NativeInt(@___powidf2));
writeln('___powixf2: ',NativeInt(@___powixf2));
writeln('___powitf2: ',NativeInt(@___powitf2));
writeln('___mulsc3: ',NativeInt(@___mulsc3));
writeln('___muldc3: ',NativeInt(@___muldc3));
writeln('___mulxc3: ',NativeInt(@___mulxc3));
writeln('___multc3: ',NativeInt(@___multc3));
writeln('___divsc3: ',NativeInt(@___divsc3));
writeln('___divdc3: ',NativeInt(@___divdc3));
writeln('___divxc3: ',NativeInt(@___divxc3));
writeln('___divtc3: ',NativeInt(@___divtc3));
writeln('___bswapsi2: ',NativeInt(@___bswapsi2));
writeln('___bswapdi2: ',NativeInt(@___bswapdi2));
writeln('___clrsbsi2: ',NativeInt(@___clrsbsi2));
writeln('___clrsbdi2: ',NativeInt(@___clrsbdi2));
writeln('___fixunssfsi: ',NativeInt(@___fixunssfsi));
writeln('___fixunsdfsi: ',NativeInt(@___fixunsdfsi));
writeln('___fixunsxfsi: ',NativeInt(@___fixunsxfsi));
writeln('___fixsfdi: ',NativeInt(@___fixsfdi));
writeln('___fixdfdi: ',NativeInt(@___fixdfdi));
writeln('___fixxfdi: ',NativeInt(@___fixxfdi));
writeln('___fixunssfdi: ',NativeInt(@___fixunssfdi));
writeln('___fixunsdfdi: ',NativeInt(@___fixunsdfdi));
writeln('___fixunsxfdi: ',NativeInt(@___fixunsxfdi));
writeln('___floatdisf: ',NativeInt(@___floatdisf));
writeln('___floatdidf: ',NativeInt(@___floatdidf));
writeln('___floatdixf: ',NativeInt(@___floatdixf));
writeln('___floatundisf: ',NativeInt(@___floatundisf));
writeln('___floatundidf: ',NativeInt(@___floatundidf));
writeln('___floatundixf: ',NativeInt(@___floatundixf));
writeln('___gcc_bcmp: ',NativeInt(@___gcc_bcmp));
writeln('___divdi3: ',NativeInt(@___divdi3));
writeln('___moddi3: ',NativeInt(@___moddi3));
writeln('___divmoddi4: ',NativeInt(@___divmoddi4));
writeln('___udivdi3: ',NativeInt(@___udivdi3));
writeln('___umoddi3: ',NativeInt(@___umoddi3));
writeln('___udivmoddi4: ',NativeInt(@___udivmoddi4));
writeln('___udiv_w_sdiv: ',NativeInt(@___udiv_w_sdiv));
writeln('___dfp_set_round: ',NativeInt(@___dfp_set_round));
writeln('___bid32_to_binary32: ',NativeInt(@___bid32_to_binary32));
writeln('_isinfd32: ',NativeInt(@_isinfd32));
writeln('_isinfd64: ',NativeInt(@_isinfd64));
writeln('_isinfd128: ',NativeInt(@_isinfd128));
writeln('___bid64_isSigned: ',NativeInt(@___bid64_isSigned));
writeln('___bid128_isSigned: ',NativeInt(@___bid128_isSigned));
writeln('___bid_round64_2_18: ',NativeInt(@___bid_round64_2_18));
writeln('___bid64_from_int32: ',NativeInt(@___bid64_from_int32));
writeln('___bid64_add: ',NativeInt(@___bid64_add));
writeln('___bid64dq_add: ',NativeInt(@___bid64dq_add));
writeln('___bid64_mul: ',NativeInt(@___bid64_mul));
writeln('___bid64qq_mul: ',NativeInt(@___bid64qq_mul));
writeln('___bid64_quiet_equal: ',NativeInt(@___bid64_quiet_equal));
writeln('___bid128_quiet_equal: ',NativeInt(@___bid128_quiet_equal));
writeln('___bid32_to_bid64: ',NativeInt(@___bid32_to_bid64));
writeln('___bid32_to_bid128: ',NativeInt(@___bid32_to_bid128));
writeln('___bid64_to_bid128: ',NativeInt(@___bid64_to_bid128));
writeln('___bid64_to_int32_rnint: ',NativeInt(@___bid64_to_int32_rnint));
writeln('___bid64_to_int64_rnint: ',NativeInt(@___bid64_to_int64_rnint));
writeln('___bid64_to_uint32_rnint: ',NativeInt(@___bid64_to_uint32_rnint));
writeln('___bid64_to_uint64_rnint: ',NativeInt(@___bid64_to_uint64_rnint));
writeln('___bid128_to_int32_rnint: ',NativeInt(@___bid128_to_int32_rnint));
writeln('___bid128_to_int64_rnint: ',NativeInt(@___bid128_to_int64_rnint));
writeln('___bid128_to_uint32_rnint: ',NativeInt(@___bid128_to_uint32_rnint));
writeln('___bid128_to_uint64_rnint: ',NativeInt(@___bid128_to_uint64_rnint));
writeln('___bid_addsd3: ',NativeInt(@___bid_addsd3));
writeln('___bid_divsd3: ',NativeInt(@___bid_divsd3));
writeln('___bid_mulsd3: ',NativeInt(@___bid_mulsd3));
writeln('___bid_eqsd2: ',NativeInt(@___bid_eqsd2));
writeln('___bid_nesd2: ',NativeInt(@___bid_nesd2));
writeln('___bid_ltsd2: ',NativeInt(@___bid_ltsd2));
writeln('___bid_gtsd2: ',NativeInt(@___bid_gtsd2));
writeln('___bid_lesd2: ',NativeInt(@___bid_lesd2));
writeln('___bid_gesd2: ',NativeInt(@___bid_gesd2));
writeln('___bid_fixsdsi: ',NativeInt(@___bid_fixsdsi));
writeln('___bid_fixsddi: ',NativeInt(@___bid_fixsddi));
writeln('___bid_fixunssdsi: ',NativeInt(@___bid_fixunssdsi));
writeln('___bid_fixunssddi: ',NativeInt(@___bid_fixunssddi));
writeln('___bid_floatsisd: ',NativeInt(@___bid_floatsisd));
writeln('___bid_floatdisd: ',NativeInt(@___bid_floatdisd));
writeln('___bid_floatunssisd: ',NativeInt(@___bid_floatunssisd));
writeln('___bid_floatunsdisd: ',NativeInt(@___bid_floatunsdisd));
writeln('___bid_truncsdsf: ',NativeInt(@___bid_truncsdsf));
writeln('___bid_extendsddf: ',NativeInt(@___bid_extendsddf));
writeln('___bid_extendsdxf: ',NativeInt(@___bid_extendsdxf));
writeln('___bid_extendsdtf: ',NativeInt(@___bid_extendsdtf));
writeln('___bid_extendsfsd: ',NativeInt(@___bid_extendsfsd));
writeln('___bid_truncdfsd: ',NativeInt(@___bid_truncdfsd));
writeln('___bid_truncxfsd: ',NativeInt(@___bid_truncxfsd));
writeln('___bid_trunctfsd: ',NativeInt(@___bid_trunctfsd));
writeln('___bid_extendsddd2: ',NativeInt(@___bid_extendsddd2));
writeln('___bid_extendsdtd2: ',NativeInt(@___bid_extendsdtd2));
writeln('___bid_unordsd2: ',NativeInt(@___bid_unordsd2));
writeln('___bid_adddd3: ',NativeInt(@___bid_adddd3));
writeln('___bid_divdd3: ',NativeInt(@___bid_divdd3));
writeln('___bid_muldd3: ',NativeInt(@___bid_muldd3));
writeln('___bid_eqdd2: ',NativeInt(@___bid_eqdd2));
writeln('___bid_nedd2: ',NativeInt(@___bid_nedd2));
writeln('___bid_ltdd2: ',NativeInt(@___bid_ltdd2));
writeln('___bid_gtdd2: ',NativeInt(@___bid_gtdd2));
writeln('___bid_ledd2: ',NativeInt(@___bid_ledd2));
writeln('___bid_gedd2: ',NativeInt(@___bid_gedd2));
writeln('___bid_fixddsi: ',NativeInt(@___bid_fixddsi));
writeln('___bid_fixdddi: ',NativeInt(@___bid_fixdddi));
writeln('___bid_fixunsddsi: ',NativeInt(@___bid_fixunsddsi));
writeln('___bid_fixunsdddi: ',NativeInt(@___bid_fixunsdddi));
writeln('___bid_floatsidd: ',NativeInt(@___bid_floatsidd));
writeln('___bid_floatdidd: ',NativeInt(@___bid_floatdidd));
writeln('___bid_floatunssidd: ',NativeInt(@___bid_floatunssidd));
writeln('___bid_floatunsdidd: ',NativeInt(@___bid_floatunsdidd));
writeln('___bid_truncddsf: ',NativeInt(@___bid_truncddsf));
writeln('___bid_truncdddf: ',NativeInt(@___bid_truncdddf));
writeln('___bid_extendddxf: ',NativeInt(@___bid_extendddxf));
writeln('___bid_extendddtf: ',NativeInt(@___bid_extendddtf));
writeln('___bid_extendsfdd: ',NativeInt(@___bid_extendsfdd));
writeln('___bid_extenddfdd: ',NativeInt(@___bid_extenddfdd));
writeln('___bid_truncxfdd: ',NativeInt(@___bid_truncxfdd));
writeln('___bid_trunctfdd: ',NativeInt(@___bid_trunctfdd));
writeln('___bid_truncddsd2: ',NativeInt(@___bid_truncddsd2));
writeln('___bid_extendddtd2: ',NativeInt(@___bid_extendddtd2));
writeln('___bid_unorddd2: ',NativeInt(@___bid_unorddd2));
writeln('___bid_addtd3: ',NativeInt(@___bid_addtd3));
writeln('___bid_divtd3: ',NativeInt(@___bid_divtd3));
writeln('___bid_multd3: ',NativeInt(@___bid_multd3));
writeln('___bid_eqtd2: ',NativeInt(@___bid_eqtd2));
writeln('___bid_netd2: ',NativeInt(@___bid_netd2));
writeln('___bid_lttd2: ',NativeInt(@___bid_lttd2));
writeln('___bid_gttd2: ',NativeInt(@___bid_gttd2));
writeln('___bid_letd2: ',NativeInt(@___bid_letd2));
writeln('___bid_getd2: ',NativeInt(@___bid_getd2));
writeln('___bid_fixtdsi: ',NativeInt(@___bid_fixtdsi));
writeln('___bid_fixtddi: ',NativeInt(@___bid_fixtddi));
writeln('___bid_fixunstdsi: ',NativeInt(@___bid_fixunstdsi));
writeln('___bid_fixunstddi: ',NativeInt(@___bid_fixunstddi));
writeln('___bid_floatsitd: ',NativeInt(@___bid_floatsitd));
writeln('___bid_floatditd: ',NativeInt(@___bid_floatditd));
writeln('___bid_floatunssitd: ',NativeInt(@___bid_floatunssitd));
writeln('___bid_floatunsditd: ',NativeInt(@___bid_floatunsditd));
writeln('___bid_trunctdsf: ',NativeInt(@___bid_trunctdsf));
writeln('___bid_trunctddf: ',NativeInt(@___bid_trunctddf));
writeln('___bid_trunctdxf: ',NativeInt(@___bid_trunctdxf));
writeln('___bid_trunctdtf: ',NativeInt(@___bid_trunctdtf));
writeln('___bid_extendsftd: ',NativeInt(@___bid_extendsftd));
writeln('___bid_extenddftd: ',NativeInt(@___bid_extenddftd));
writeln('___bid_extendxftd: ',NativeInt(@___bid_extendxftd));
writeln('___bid_extendtftd: ',NativeInt(@___bid_extendtftd));
writeln('___bid_trunctdsd2: ',NativeInt(@___bid_trunctdsd2));
writeln('___bid_trunctddd2: ',NativeInt(@___bid_trunctddd2));
writeln('___bid_unordtd2: ',NativeInt(@___bid_unordtd2));
writeln('___copysigntf3: ',NativeInt(@___copysigntf3));
writeln('___sfp_handle_exceptions: ',NativeInt(@___sfp_handle_exceptions));
writeln('___addtf3: ',NativeInt(@___addtf3));
writeln('___divtf3: ',NativeInt(@___divtf3));
writeln('___eqtf2: ',NativeInt(@___eqtf2));
writeln('___netf2: ',NativeInt(@___netf2));
writeln('___getf2: ',NativeInt(@___getf2));
writeln('___gttf2: ',NativeInt(@___gttf2));
writeln('___letf2: ',NativeInt(@___letf2));
writeln('___lttf2: ',NativeInt(@___lttf2));
writeln('___multf3: ',NativeInt(@___multf3));
writeln('___negtf2: ',NativeInt(@___negtf2));
writeln('___subtf3: ',NativeInt(@___subtf3));
writeln('___unordtf2: ',NativeInt(@___unordtf2));
writeln('___fixtfsi: ',NativeInt(@___fixtfsi));
writeln('___fixunstfsi: ',NativeInt(@___fixunstfsi));
writeln('___floatsitf: ',NativeInt(@___floatsitf));
writeln('___floatunsitf: ',NativeInt(@___floatunsitf));
writeln('___fixtfdi: ',NativeInt(@___fixtfdi));
writeln('___fixunstfdi: ',NativeInt(@___fixunstfdi));
writeln('___floatditf: ',NativeInt(@___floatditf));
writeln('___floatunditf: ',NativeInt(@___floatunditf));
writeln('___extendsftf2: ',NativeInt(@___extendsftf2));
writeln('___extenddftf2: ',NativeInt(@___extenddftf2));
writeln('___extendxftf2: ',NativeInt(@___extendxftf2));
writeln('___trunctfsf2: ',NativeInt(@___trunctfsf2));
writeln('___trunctfdf2: ',NativeInt(@___trunctfdf2));
writeln('___trunctfxf2: ',NativeInt(@___trunctfxf2));
{$ENDIF}
except
on E : Exception do Writeln(E.ClassName,': ',E.Message);
end;
end;
end.

File diff suppressed because it is too large Load Diff

5191
contrib/LIBC/testlibucrt.pas Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,164 @@
unit testlibvcruntime140;
interface
uses SysUtils,libvcruntime140;
procedure test_libvcruntime140;
implementation
procedure test_libvcruntime140;
begin
try
{$IFDEF WIN64}
writeln('wcsstr: ',NativeInt(@wcsstr));
writeln('wcsrchr: ',NativeInt(@wcsrchr));
writeln('wcschr: ',NativeInt(@wcschr));
writeln('unexpected: ',NativeInt(@unexpected));
writeln('strstr: ',NativeInt(@strstr));
writeln('strrchr: ',NativeInt(@strrchr));
writeln('strchr: ',NativeInt(@strchr));
writeln('set_unexpected: ',NativeInt(@set_unexpected));
writeln('memset: ',NativeInt(@memset));
writeln('memmove: ',NativeInt(@memmove));
writeln('memcpy: ',NativeInt(@memcpy));
writeln('memcmp: ',NativeInt(@memcmp));
writeln('memchr: ',NativeInt(@memchr));
writeln('longjmp: ',NativeInt(@longjmp));
writeln('_set_se_translator: ',NativeInt(@_set_se_translator));
writeln('_set_purecall_handler: ',NativeInt(@_set_purecall_handler));
writeln('_purecall: ',NativeInt(@_purecall));
writeln('_local_unwind: ',NativeInt(@_local_unwind));
writeln('_is_exception_typeof: ',NativeInt(@_is_exception_typeof));
writeln('_get_unexpected: ',NativeInt(@_get_unexpected));
writeln('_get_purecall_handler: ',NativeInt(@_get_purecall_handler));
writeln('__vcrt_LoadLibraryExW: ',NativeInt(@__vcrt_LoadLibraryExW));
writeln('__vcrt_InitializeCriticalSectionEx: ',NativeInt(@__vcrt_InitializeCriticalSectionEx));
writeln('__vcrt_GetModuleHandleW: ',NativeInt(@__vcrt_GetModuleHandleW));
writeln('__vcrt_GetModuleFileNameW: ',NativeInt(@__vcrt_GetModuleFileNameW));
writeln('__uncaught_exceptions: ',NativeInt(@__uncaught_exceptions));
writeln('__uncaught_exception: ',NativeInt(@__uncaught_exception));
writeln('__unDNameEx: ',NativeInt(@__unDNameEx));
writeln('__unDName: ',NativeInt(@__unDName));
writeln('__telemetry_main_return_trigger: ',NativeInt(@__telemetry_main_return_trigger));
writeln('__telemetry_main_invoke_trigger: ',NativeInt(@__telemetry_main_invoke_trigger));
writeln('__std_type_info_name: ',NativeInt(@__std_type_info_name));
writeln('__std_type_info_hash: ',NativeInt(@__std_type_info_hash));
writeln('__std_type_info_destroy_list: ',NativeInt(@__std_type_info_destroy_list));
writeln('__std_type_info_compare: ',NativeInt(@__std_type_info_compare));
writeln('__std_terminate: ',NativeInt(@__std_terminate));
writeln('__std_exception_destroy: ',NativeInt(@__std_exception_destroy));
writeln('__std_exception_copy: ',NativeInt(@__std_exception_copy));
writeln('__report_gsfailure: ',NativeInt(@__report_gsfailure));
writeln('__processing_throw: ',NativeInt(@__processing_throw));
writeln('__intrinsic_setjmpex: ',NativeInt(@__intrinsic_setjmpex));
writeln('__intrinsic_setjmp: ',NativeInt(@__intrinsic_setjmp));
writeln('__current_exception_context: ',NativeInt(@__current_exception_context));
writeln('__current_exception: ',NativeInt(@__current_exception));
writeln('__TypeMatch: ',NativeInt(@__TypeMatch));
writeln('__RTtypeid: ',NativeInt(@__RTtypeid));
writeln('__RTDynamicCast: ',NativeInt(@__RTDynamicCast));
writeln('__RTCastToVoid: ',NativeInt(@__RTCastToVoid));
writeln('__NLG_Return2: ',NativeInt(@__NLG_Return2));
writeln('__NLG_Dispatch2: ',NativeInt(@__NLG_Dispatch2));
writeln('__GetPlatformExceptionInfo: ',NativeInt(@__GetPlatformExceptionInfo));
writeln('__FrameUnwindFilter: ',NativeInt(@__FrameUnwindFilter));
writeln('__DestructExceptionObject: ',NativeInt(@__DestructExceptionObject));
writeln('__CxxUnregisterExceptionObject: ',NativeInt(@__CxxUnregisterExceptionObject));
writeln('__CxxRegisterExceptionObject: ',NativeInt(@__CxxRegisterExceptionObject));
writeln('__CxxQueryExceptionSize: ',NativeInt(@__CxxQueryExceptionSize));
writeln('__CxxFrameHandler3: ',NativeInt(@__CxxFrameHandler3));
writeln('__CxxFrameHandler2: ',NativeInt(@__CxxFrameHandler2));
writeln('__CxxFrameHandler: ',NativeInt(@__CxxFrameHandler));
writeln('__CxxExceptionFilter: ',NativeInt(@__CxxExceptionFilter));
writeln('__CxxDetectRethrow: ',NativeInt(@__CxxDetectRethrow));
writeln('__C_specific_handler_noexcept: ',NativeInt(@__C_specific_handler_noexcept));
writeln('__C_specific_handler: ',NativeInt(@__C_specific_handler));
writeln('__BuildCatchObjectHelper: ',NativeInt(@__BuildCatchObjectHelper));
writeln('__BuildCatchObject: ',NativeInt(@__BuildCatchObject));
writeln('__AdjustPointer: ',NativeInt(@__AdjustPointer));
writeln('_SetWinRTOutOfMemoryExceptionCallback: ',NativeInt(@_SetWinRTOutOfMemoryExceptionCallback));
writeln('_IsExceptionObjectToBeDestroyed: ',NativeInt(@_IsExceptionObjectToBeDestroyed));
writeln('_FindAndUnlinkFrame: ',NativeInt(@_FindAndUnlinkFrame));
writeln('_CxxThrowException: ',NativeInt(@_CxxThrowException));
writeln('_CreateFrameInfo: ',NativeInt(@_CreateFrameInfo));
{$ELSE}
writeln('_wcsstr: ',NativeInt(@_wcsstr));
writeln('_wcsrchr: ',NativeInt(@_wcsrchr));
writeln('_wcschr: ',NativeInt(@_wcschr));
writeln('_unexpected: ',NativeInt(@_unexpected));
writeln('_strstr: ',NativeInt(@_strstr));
writeln('_strrchr: ',NativeInt(@_strrchr));
writeln('_strchr: ',NativeInt(@_strchr));
writeln('_set_unexpected: ',NativeInt(@_set_unexpected));
writeln('_memset: ',NativeInt(@_memset));
writeln('_memmove: ',NativeInt(@_memmove));
writeln('_memcpy: ',NativeInt(@_memcpy));
writeln('_memcmp: ',NativeInt(@_memcmp));
writeln('_memchr: ',NativeInt(@_memchr));
writeln('_longjmp: ',NativeInt(@_longjmp));
writeln('__setjmp3: ',NativeInt(@__setjmp3));
writeln('__set_se_translator: ',NativeInt(@__set_se_translator));
writeln('__set_purecall_handler: ',NativeInt(@__set_purecall_handler));
writeln('__purecall: ',NativeInt(@__purecall));
writeln('__longjmpex: ',NativeInt(@__longjmpex));
writeln('__local_unwind4: ',NativeInt(@__local_unwind4));
writeln('__local_unwind2: ',NativeInt(@__local_unwind2));
writeln('__is_exception_typeof: ',NativeInt(@__is_exception_typeof));
writeln('__global_unwind2: ',NativeInt(@__global_unwind2));
writeln('__get_unexpected: ',NativeInt(@__get_unexpected));
writeln('__get_purecall_handler: ',NativeInt(@__get_purecall_handler));
writeln('__except_handler4_common: ',NativeInt(@__except_handler4_common));
writeln('__except_handler3: ',NativeInt(@__except_handler3));
writeln('__except_handler2: ',NativeInt(@__except_handler2));
writeln('__chkesp: ',NativeInt(@__chkesp));
writeln('___vcrt_LoadLibraryExW: ',NativeInt(@___vcrt_LoadLibraryExW));
writeln('___vcrt_InitializeCriticalSectionEx: ',NativeInt(@___vcrt_InitializeCriticalSectionEx));
writeln('___vcrt_GetModuleHandleW: ',NativeInt(@___vcrt_GetModuleHandleW));
writeln('___vcrt_GetModuleFileNameW: ',NativeInt(@___vcrt_GetModuleFileNameW));
writeln('___uncaught_exceptions: ',NativeInt(@___uncaught_exceptions));
writeln('___uncaught_exception: ',NativeInt(@___uncaught_exception));
writeln('___unDNameEx: ',NativeInt(@___unDNameEx));
writeln('___unDName: ',NativeInt(@___unDName));
writeln('___telemetry_main_return_trigger: ',NativeInt(@___telemetry_main_return_trigger));
writeln('___telemetry_main_invoke_trigger: ',NativeInt(@___telemetry_main_invoke_trigger));
writeln('___std_type_info_name: ',NativeInt(@___std_type_info_name));
writeln('___std_type_info_hash: ',NativeInt(@___std_type_info_hash));
writeln('___std_type_info_destroy_list: ',NativeInt(@___std_type_info_destroy_list));
writeln('___std_type_info_compare: ',NativeInt(@___std_type_info_compare));
writeln('___std_terminate: ',NativeInt(@___std_terminate));
writeln('___std_exception_destroy: ',NativeInt(@___std_exception_destroy));
writeln('___std_exception_copy: ',NativeInt(@___std_exception_copy));
writeln('___report_gsfailure: ',NativeInt(@___report_gsfailure));
writeln('___processing_throw: ',NativeInt(@___processing_throw));
writeln('___intrinsic_setjmp: ',NativeInt(@___intrinsic_setjmp));
writeln('___current_exception_context: ',NativeInt(@___current_exception_context));
writeln('___current_exception: ',NativeInt(@___current_exception));
writeln('___TypeMatch: ',NativeInt(@___TypeMatch));
writeln('___RTtypeid: ',NativeInt(@___RTtypeid));
writeln('___RTDynamicCast: ',NativeInt(@___RTDynamicCast));
writeln('___RTCastToVoid: ',NativeInt(@___RTCastToVoid));
writeln('___GetPlatformExceptionInfo: ',NativeInt(@___GetPlatformExceptionInfo));
writeln('___FrameUnwindFilter: ',NativeInt(@___FrameUnwindFilter));
writeln('___DestructExceptionObject: ',NativeInt(@___DestructExceptionObject));
writeln('___CxxUnregisterExceptionObject: ',NativeInt(@___CxxUnregisterExceptionObject));
writeln('___CxxRegisterExceptionObject: ',NativeInt(@___CxxRegisterExceptionObject));
writeln('___CxxQueryExceptionSize: ',NativeInt(@___CxxQueryExceptionSize));
writeln('___CxxFrameHandler3: ',NativeInt(@___CxxFrameHandler3));
writeln('___CxxFrameHandler2: ',NativeInt(@___CxxFrameHandler2));
writeln('___CxxFrameHandler: ',NativeInt(@___CxxFrameHandler));
writeln('___CxxExceptionFilter: ',NativeInt(@___CxxExceptionFilter));
writeln('___CxxDetectRethrow: ',NativeInt(@___CxxDetectRethrow));
writeln('___BuildCatchObjectHelper: ',NativeInt(@___BuildCatchObjectHelper));
writeln('___BuildCatchObject: ',NativeInt(@___BuildCatchObject));
writeln('___AdjustPointer: ',NativeInt(@___AdjustPointer));
writeln('__SetWinRTOutOfMemoryExceptionCallback: ',NativeInt(@__SetWinRTOutOfMemoryExceptionCallback));
writeln('__NLG_Return2: ',NativeInt(@__NLG_Return2));
writeln('__NLG_Return: ',NativeInt(@__NLG_Return));
writeln('__NLG_Dispatch2: ',NativeInt(@__NLG_Dispatch2));
writeln('__IsExceptionObjectToBeDestroyed: ',NativeInt(@__IsExceptionObjectToBeDestroyed));
writeln('__FindAndUnlinkFrame: ',NativeInt(@__FindAndUnlinkFrame));
writeln('__EH_prolog: ',NativeInt(@__EH_prolog));
writeln('__CreateFrameInfo: ',NativeInt(@__CreateFrameInfo));
{$ENDIF}
except
on E : Exception do Writeln(E.ClassName,': ',E.Message);
end;
end;
end.

21
contrib/LIBC/testucrt.dpr Normal file
View File

@ -0,0 +1,21 @@
program testucrt;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
libgcc in 'libgcc.pas',
testlibgcc in 'testlibgcc.pas';
begin
try
{ TODO -oUser -cConsole Main : Insert code here }
test_libgcc;
readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.

1080
contrib/LIBC/testucrt.dproj Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<Transactions>
<Transaction>1899/12/30 00:00:00.000.157,=C:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>1899/12/30 00:00:00.000.596,=C:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>1899/12/30 00:00:00.000.680,=C:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2019/04/24 23:50:32.000.328,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2019/04/26 01:15:08.000.033,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2019/05/03 10:43:39.000.280,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2019/05/16 22:31:10.000.241,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2019/07/10 20:20:16.000.151,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2019/08/03 13:20:55.000.938,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2019/08/27 01:11:51.000.854,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2019/10/24 11:19:25.000.828,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2019/12/12 16:39:55.000.737,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2020/04/08 13:06:27.000.170,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2020/05/01 17:35:37.000.296,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2020/05/01 17:53:21.000.989,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2020/05/01 17:59:06.000.707,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2020/05/08 01:21:22.000.549,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2020/05/20 01:42:41.000.362,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2020/06/10 10:39:06.000.314,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2020/07/17 20:09:31.000.050,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2020/07/20 18:01:04.000.080,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2020/12/08 22:12:28.000.722,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2020/12/08 22:13:36.000.368,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2021/07/06 12:33:04.000.158,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2021/08/27 15:32:19.000.611,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2021/12/15 01:20:45.000.206,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/01/07 20:18:22.000.353,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/03/19 01:21:32.000.940,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/03/19 22:56:28.000.170,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/03/21 17:17:07.000.537,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/03/21 21:12:56.000.622,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/03/22 17:09:11.000.369,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/03/23 02:13:02.000.497,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/03/23 02:14:08.000.449,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/03/23 02:37:50.000.699,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/03/24 20:58:17.000.488,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/04/08 11:49:19.000.209,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/04/08 13:06:44.000.204,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/04/08 20:53:18.000.172,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/04/09 11:11:16.000.067,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Unit2.pas</Transaction>
<Transaction>2022/04/14 20:23:40.000.390,D:\Users\YW\Documents\Embarcadero\Studio\Projects\Project1.dproj=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\testucrt.dproj</Transaction>
<Transaction>2022/04/14 20:23:52.000.769,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\libmsvcrt.pas</Transaction>
<Transaction>2022/04/14 20:24:50.000.186,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\testlibmsvcrt.pas</Transaction>
<Transaction>2022/04/14 20:59:07.000.736,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\testlibvcruntime140.pas</Transaction>
<Transaction>2022/04/14 20:59:07.000.720,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\libvcruntime140.pas</Transaction>
<Transaction>2022/04/14 21:00:27.000.751,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\testlibvcruntime140.pas=</Transaction>
<Transaction>2022/04/14 21:00:27.000.711,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\libvcruntime140.pas=</Transaction>
<Transaction>2022/04/15 01:46:00.000.287,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\testlibmsvcrt.pas=</Transaction>
<Transaction>2022/04/15 01:46:00.000.224,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\libmsvcrt.pas=</Transaction>
<Transaction>2022/04/15 01:46:17.000.280,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\libucrt.pas</Transaction>
<Transaction>2022/04/15 01:46:17.000.484,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\testlibucrt.pas</Transaction>
<Transaction>2022/04/15 11:15:34.772,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\libucrt.pas=</Transaction>
<Transaction>2022/04/15 11:15:34.821,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\testlibucrt.pas=</Transaction>
<Transaction>2022/04/15 11:16:14.544,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\libgcc.pas</Transaction>
<Transaction>2022/04/15 11:16:14.747,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\LIBC\testlibgcc.pas</Transaction>
</Transactions>
<ActiveMobileDevice>
<NoProfile iOSSimulator="iPhone5" Android="Android6_API23"/>
</ActiveMobileDevice>
</BorlandProject>

Binary file not shown.

BIN
contrib/LIBC/testucrt.res Normal file

Binary file not shown.

BIN
contrib/LIBC/udivdi3.x86.o Normal file

Binary file not shown.

BIN
contrib/LIBC/ulldiv.x86.o Normal file

Binary file not shown.

BIN
contrib/LIBC/ullshr.x86.o Normal file

Binary file not shown.

69
contrib/LZ4Delphi/.gitignore vendored Normal file
View File

@ -0,0 +1,69 @@
# Uncomment these types if you want even more clean repository. But be careful.
# It can make harm to an existing project source. Read explanations below.
#
# Resource files are binaries containing manifest, project icon and version info.
# They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files.
#*.res
#
# Type library file (binary). In old Delphi versions it should be stored.
# Since Delphi 2009 it is produced from .ridl file and can safely be ignored.
#*.tlb
#
# Diagram Portfolio file. Used by the diagram editor up to Delphi 7.
# Uncomment this if you are not using diagrams or use newer Delphi version.
#*.ddp
#
# Visual LiveBindings file. Added in Delphi XE2.
# Uncomment this if you are not using LiveBindings Designer.
#*.vlb
#
# Deployment Manager configuration file for your project. Added in Delphi XE2.
# Uncomment this if it is not mobile development and you do not use remote debug feature.
#*.deployproj
#
# C++ object files produced when C/C++ Output file generation is configured.
# Uncomment this if you are not using external objects (zlib library for example).
#*.obj
#
# Delphi compiler-generated binaries (safe to delete)
*.exe
*.dll
*.bpl
*.bpi
*.dcp
*.so
*.apk
*.drc
*.map
*.dres
*.rsm
*.tds
*.dcu
*.lib
*.a
*.o
*.ocx
# Delphi autogenerated files (duplicated info)
*.cfg
*.hpp
*Resource.rc
# Delphi local files (user-specific info)
*.local
*.identcache
*.projdata
*.tvsconfig
*.dsk
# Delphi history and backups
__history/
__recovery/
*.~*
# Castalia statistics file (since XE7 Castalia is distributed with Delphi)
*.stat
# Boss dependency manager vendor folder https://github.com/HashLoad/boss
modules/

403
contrib/LZ4Delphi/LZ4.pas Normal file
View File

@ -0,0 +1,403 @@
unit LZ4;
interface
uses classes, sysutils, LZ4Lib
{$IFDEF YWRTL},YWTypes{$ENDIF};
const
LZ4_VERSION_MAJOR = LZ4Lib.LZ4_VERSION_MAJOR;
LZ4_VERSION_MINOR = LZ4Lib.LZ4_VERSION_MINOR;
LZ4_VERSION_RELEASE = LZ4Lib.LZ4_VERSION_RELEASE;
LZ4_VERSION_NUMBER = LZ4_VERSION_MAJOR*100*100+LZ4_VERSION_MINOR*100+
LZ4_VERSION_RELEASE;
LZ4_VERSION_STRING = '1.9.3';
LZ4HC_CLEVEL_DEFAULT = LZ4Lib.LZ4HC_CLEVEL_DEFAULT;
type
LZ4_Buffer = record
src : Pointer;
size, pos : NativeInt;
end;
LZ4_outBuffer = record
dst : Pointer;
size, pos : NativeInt;
end;
TCustomLZ4Stream = class(TStream)
private
FStream: TStream;
FStreamStartPos: Int64;
FStreamPos: Int64;
_buf : Pointer;
_bufPos : NativeUInt;
total_in, total_out : NativeInt;
public
constructor Create(stream: TStream);
destructor Destroy; override;
end;
TLZ4CompressStream=class(TCustomLZ4Stream)
private
pref : LZ4F_preferences_t;
CCTX : PLZ4F_cctx;
function GetCompressionRate: Single;
procedure DoCompress(buf : Pointer);
public
constructor Create(dest: TStream; compressionLevel: Integer=2);
function Read(var buffer; count: Longint): Longint; override;
function Write(const buffer; count: Longint): Longint; override;
function Read(Buffer: TBytes; Offset, Count: Longint): Longint; override;
function Write(const Buffer: TBytes; Offset: Longint=0; Count:Longint =-1): Longint; override;
destructor Destroy; override;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
property CompressionRate: Single read GetCompressionRate;
end;
TLZ4DecompressStream = class(TCustomLZ4Stream)
private
FOwnsStream: Boolean;
_eof : boolean;
_bufSize : NativeUInt;
DCTX : PLZ4F_dctx;
public
constructor Create(source: TStream; OwnsStream: Boolean=false);
destructor Destroy; override;
function Read(var buffer; count: Longint): Longint; override;
function Write(const buffer; count: Longint): Longint; override;
function Read(Buffer: TBytes; Offset:LongInt=0;Count: Longint=-1): Longint; override;
function Write(const Buffer: TBytes; Offset, Count: Longint): Longint; override;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
end;
function CompressData(source : Pointer;srcSize:NativeInt; dst:Pointer;
dstCapacity:NativeInt; compressionLevel:integer=2):NativeInt; overload;
function DecompressData(Source:Pointer;srcSize:NativeInt;dst:Pointer;
dstCapacity:NativeInt):NativeInt; overload;
function CompressData(source :TBytes;index:NativeInt=0;size:NativeInt=-1;
compressionLevel:integer=2):TBytes; overload;
function DecompressData(Source:TBytes;index:NativeInt=0;Size:NativeInt=-1):TBytes; overload;
implementation
uses libc;
type
Context = record
class var _DCTX:PLZ4F_dctx;
class var _CCTX:PLZ4F_cctx;
class function GetDCTX:PLZ4F_dctx; inline; static;
class procedure FreeDCTX(C : PLZ4F_dctx); inline; static;
class function GetCCTX:PLZ4F_cctx; inline; static;
class procedure FreeCCTX(C : PLZ4F_cctx); inline; static;
class constructor Create;
class destructor Destroy;
end;
var
[volatile]_state : Pointer;
function GetBuffer : Pointer; inline;
begin
{$IFDEF YWRTL}Result:=BufferPool256K.GetBuffer{$ELSE}GetMem(Result,256*1024){$ENDIF};
end;
procedure FreeBuffer(b : Pointer); inline;
begin
{$IFDEF YWRTL}BufferPool256K.FreeBuffer(b){$ELSE}Freemem(b){$ENDIF};
end;
function GetBuffer512:Pointer;inline;
begin
{$IFDEF YWRTL}
Result := BufferPool512K.GetBuffer
{$ELSE}
GetMem(Result,512*1024);
{$ENDIF}
end;
procedure FreeBuffer512(var b : Pointer); inline;
begin
{$IFDEF YWRTL}
BufferPool512K.FreeBuffer(b)
{$ELSE}
FreeMem(b);
{$ENDIF}
end;
function CompressData(source : Pointer;srcSize:NativeInt; dst:Pointer;
dstCapacity:NativeInt; compressionLevel:integer=2):NativeInt; overload;
begin
var P := LZ4F_INIT_PREFERENCES;
P. compressionLevel :=compressionLevel;
Result := LZ4F_compressFrame(dst,dstCapacity,source,srcSize,@P);
if LZ4F_isError(Result)<>0 then raise Exception.Create(LZ4F_getErrorName(Result));
end;
function CompressData(source :TBytes;index:NativeInt=0;size:NativeInt=-1;compressionLevel:integer=2):TBytes;
overload;
begin
if size=-1 then size := Length(source);
if size=0 then exit(nil);
var P := LZ4F_INIT_PREFERENCES;
P. compressionLevel :=compressionLevel;
var s := LZ4F_compressFrameBound(size,@P);
SetLength(Result,s);
s := LZ4F_compressFrame(@Result[0],s,@source[index],Size,@P);
if s>0 then SetLength(Result,s)
else Result := nil;
end;
function DecompressData(Source:Pointer;srcSize:NativeInt;dst:Pointer;
dstCapacity:NativeInt):NativeInt; overload;
var TX : PLZ4F_dctx;
ds,ss,r : NativeUInt;
s,d : PByte;
begin
TX := Context.GetDCTX;
Result := 0;
try
s := Source; d := dst;
repeat
ds := dstCapacity;
ss := srcSize;
r := LZ4F_decompress(TX,d,@ds,s,@ss,nil);
if LZ4F_isError(r)<>0 then exit(-abs(r));
inc(Result,ds);
dec(dstCapacity,ds);
dec(srcSize,ss);
s := s+ss;
d := d+ds;
until (dstCapacity=0)or(srcSize=0);
finally
Context.FreeDCTX(TX);
end;
end;
function DecompressData(Source:TBytes;index:NativeInt=0;Size:NativeInt=-1):TBytes; overload;
var s : Nativeint;
begin
if Size=-1 then Size := Length(Source);
SetLength(Result,Size*32);
s := DecompressData(@Source[Index],Size,@Result[0],Length(Result));
if s<0 then raise Exception.Create('LZ4 Decompress Error!');
SetLength(Result,S);
end;
{ TLZ4Stream }
constructor TLZ4CompressStream.Create(dest: TStream; compressionLevel: Integer=2);
begin
inherited Create(dest);
pref := LZ4F_INIT_PREFERENCES;
pref.compressionLevel :=compressionLevel;
CCTX := Context.GetCCTX;
FStream.Write(_buf^,LZ4F_compressBegin(CCTX,_buf,256*1024,@pref));
end;
destructor TLZ4CompressStream.Destroy;
begin
if _BufPos>0 then begin
var b := GetBuffer512;
try
var s := LZ4F_compressUpdate(CCTX,b,512*1024,_buf,_bufPos,nil);
if LZ4F_isError(s)<>0 then raise Exception.Create(LZ4F_getErrorName(s));
FStream.Write(b^,s);
finally
FreeBuffer512(b);
end;
end;
FStream.Write(_buf^,LZ4F_compressEnd(CCTX,_buf,256*1024,nil));
Context.FreeCCTX(CCTX);
inherited;
end;
procedure TLZ4CompressStream.DoCompress(buf: Pointer);
begin
var b := GetBuffer512;
try
var s := LZ4F_compressUpdate(CCTX,b,512*1024,buf,256*1024,nil);
if LZ4F_isError(s)<>0 then raise Exception.Create(LZ4F_getErrorName(s));
inc(total_out,s);
FStream.Write(b^,s);
finally
FreeBuffer512(b);
end;
end;
function TLZ4CompressStream.GetCompressionRate: Single;
begin
if total_in = 0 then result := 0
else result := (1.0 - (total_out / total_in)) * 100.0;
end;
function TLZ4CompressStream.Read(var buffer; count: Longint): Longint;
begin
raise Exception.Create('Compress Stream is WriteOnly');
end;
function TLZ4CompressStream.Read(Buffer: TBytes; Offset, Count: Longint): Longint;
begin
raise Exception.Create('Compress Stream is WriteOnly');
end;
function TLZ4CompressStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
begin
if (offset = 0) and (origin = soCurrent) then
begin
result := total_in;
end
else Result := -1;
end;
function TLZ4CompressStream.Write(const Buffer: TBytes; Offset: Longint=0; Count:Longint =-1): Longint;
begin
if Count=-1 then Count := Length(Buffer)-Offset;
Result := Write(Buffer[Offset],Count);
end;
function TLZ4CompressStream.Write(const buffer; count: Longint): Longint;
var s : Cardinal;
source : PByte;
begin
Result := Count;
inc(total_in,Count);
source := @buffer;
while count>0 do begin
if (_bufpos>0)or(count<256*1024) then begin
s := count; if s>256*1024-_bufpos then s:= 256*1024-_bufpos;
{$IFDEF POSIX}
move(source^,(PByte(_buf)+_bufPos)^,s);
{$ELSE}
memmove(PByte(_buf)+_bufPos,source,s);
{$ENDIF}
inc(_bufPos,s);
dec(count,s);
inc(source,s);
if _bufPos=256*1024 then begin
DoCompress(_buf);
_bufPos := 0;
end
end else begin
DoCompress(source);
dec(count,256*1024);
inc(source,256*1024);
end;
end;
end;
{ TCustomLZ4Stream }
constructor TCustomLZ4Stream.Create(stream: TStream);
begin
inherited Create;
FStream := stream;
FStreamStartPos := Stream.Position;
FStreamPos := FStreamStartPos;
_buf := GetBuffer;
end;
{ TZDecompressionStream }
constructor TLZ4DecompressStream.Create(source: TStream; OwnsStream: Boolean=false);
begin
inherited Create(source);
FOwnsStream := OwnsStream;
DCTX := Context.GetDCTX;
_eof := false;
end;
destructor TLZ4DecompressStream.Destroy;
begin
if FOwnsStream then
FStream.Free;
Context.FreeDCTX(DCTX);
inherited;
end;
function TLZ4DecompressStream.Read(Buffer: TBytes; Offset:LongInt=0;Count: Longint=-1): Longint;
begin
if Count=-1 then Count := Length(Buffer)-Offset;
if Offset+Count>Length(Buffer) then SetLength(Buffer,Offset+Count);
Result := Read(Buffer[Offset],Count);
end;
function TLZ4DecompressStream.Read(var buffer; count: Longint): Longint;
var dst : PByte;
t,r,w : NativeInt;
begin
Dst := @buffer;
Result := 0;
while (count>0) do
if _bufPos<_bufSize then begin
w := count; r := _bufSize-_bufPos;
t := LZ4F_decompress(DCTX,Dst,@w,PByte(_buf)+_bufPos,@r,nil);
if LZ4F_isError(t)<>0 then raise Exception.Create(LZ4F_getErrorName(t));
inc(total_in,w);
dec(count,w);
inc(Dst,w);
inc(Result,w);
inc(_bufPos,r);
inc(total_out,r);
end else if _eof then break
else begin
_BufSize := FStream.Read(_Buf^,256*1024);
_bufPos := 0;
_eof := _BufSize<256*1024;
end;
end;
function TLZ4DecompressStream.Seek(const Offset: Int64;
Origin: TSeekOrigin): Int64;
begin
Result := -1;
end;
function TLZ4DecompressStream.Write(const Buffer: TBytes; Offset,
Count: Longint): Longint;
begin
raise Exception.Create('Compress Stream is ReadOnly');
end;
function TLZ4DecompressStream.Write(const buffer; count: Longint): Longint;
begin
raise Exception.Create('Compress Stream is ReadOnly');
end;
destructor TCustomLZ4Stream.Destroy;
begin
FreeBuffer(_buf);
inherited;
end;
{ Context }
class constructor Context.Create;
begin
_DCTX := nil;
_CCTX := nil;
end;
class destructor Context.Destroy;
begin
if _DCTX<>nil then LZ4F_freeDecompressionContext(_DCTX);
if _CCTX<>nil then LZ4F_freeCompressionContext(_CCTX);
end;
class procedure Context.FreeCCTX(C: PLZ4F_cctx);
begin
C := atomicexchange(_CCTX,C);
if C<>nil then LZ4F_freeCompressionContext(C);
end;
class procedure Context.FreeDCTX(C: PLZ4F_dctx);
begin
LZ4F_resetDecompressionContext(C);
C := atomicexchange(_DCTX,C);
if C<>nil then LZ4F_freeDecompressionContext(C);
end;
class function Context.GetCCTX: PLZ4F_cctx;
begin
Result := nil;
Result := atomicexchange(_CCTX,Result);
if Result = nil then LZ4F_createCompressionContext(@Result,LZ4F_VERSION);
end;
class function Context.GetDCTX: PLZ4F_dctx;
begin
Result := nil;
Result := atomicexchange(_DCTX,Result);
if Result = nil then LZ4F_createDecompressionContext(@Result,LZ4F_VERSION);
end;
end.

View File

@ -0,0 +1,37 @@
package PKGLZ4;
{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE RELEASE}
{$ENDIF IMPLICITBUILDING}
{$IMPLICITBUILD ON}
requires
rtl;
contains
lz4lib in 'lz4lib.pas',
LZ4 in 'LZ4.pas';
end.

View File

@ -0,0 +1,928 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{4E7B2FC9-A63E-48D8-9E21-89F56754E11A}</ProjectGuid>
<MainSource>PKGLZ4.dpk</MainSource>
<ProjectVersion>19.4</ProjectVersion>
<FrameworkType>None</FrameworkType>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Release</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>3</TargetedPlatforms>
<AppType>Package</AppType>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
<Base_Android>true</Base_Android>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Android64' and '$(Base)'=='true') or '$(Base_Android64)'!=''">
<Base_Android64>true</Base_Android64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='iOSDevice64' and '$(Base)'=='true') or '$(Base_iOSDevice64)'!=''">
<Base_iOSDevice64>true</Base_iOSDevice64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='OSX64' and '$(Base)'=='true') or '$(Base_OSX64)'!=''">
<Base_OSX64>true</Base_OSX64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='OSXARM64' and '$(Base)'=='true') or '$(Base_OSXARM64)'!=''">
<Base_OSXARM64>true</Base_OSXARM64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
<Cfg_1_Win32>true</Cfg_1_Win32>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
<DCC_E>false</DCC_E>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
<GenDll>true</GenDll>
<GenPackage>true</GenPackage>
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
<DCC_CBuilderOutput>All</DCC_CBuilderOutput>
<SanitizedProjectName>PKGLZ4</SanitizedProjectName>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Android)'!=''">
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
<EnabledSysJars>annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.0.dex.jar</EnabledSysJars>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Android64)'!=''">
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
<EnabledSysJars>annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.0.dex.jar</EnabledSysJars>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_iOSDevice64)'!=''">
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_OSX64)'!=''">
<VerInfo_Keys>CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple&apos;s speech recognition servers</VerInfo_Keys>
<BT_BuildType>Debug</BT_BuildType>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_OSXARM64)'!=''">
<VerInfo_Keys>CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple&apos;s speech recognition servers</VerInfo_Keys>
<BT_BuildType>Debug</BT_BuildType>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_DebugDCUs>true</DCC_DebugDCUs>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
<DCC_RemoteDebug>true</DCC_RemoteDebug>
<DCC_IntegerOverflowCheck>true</DCC_IntegerOverflowCheck>
<DCC_RangeChecking>true</DCC_RangeChecking>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
<DCC_RemoteDebug>false</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>0</DCC_DebugInformation>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="lz4lib.pas"/>
<DCCReference Include="LZ4.pas"/>
<None Include="lz4delphi.c"/>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">PKGLZ4.dpk</Source>
</Source>
</Delphi.Personality>
<Deployment Version="3">
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\PKGLZ4.bpl" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>PKGLZ4.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\PKGLZ4.bpl" Configuration="Release" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>PKGLZ4.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\Win64\PKGLZ4.bpl" Configuration="Release" Class="ProjectOutput">
<Platform Name="Win64">
<RemoteName>PKGLZ4.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidClasses">
<Platform Name="Android">
<RemoteDir>classes</RemoteDir>
<Operation>64</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>classes</RemoteDir>
<Operation>64</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidFileProvider">
<Platform Name="Android">
<RemoteDir>res\xml</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\xml</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidGDBServer">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeArmeabiFile">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeArmeabiv7aFile">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeMipsFile">
<Platform Name="Android">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput_Android32">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashImageDef">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStyles">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStylesV21">
<Platform Name="Android">
<RemoteDir>res\values-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_Colors">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_DefaultAppIcon">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon144">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon192">
<Platform Name="Android">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon24">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage426">
<Platform Name="Android">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage470">
<Platform Name="Android">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage640">
<Platform Name="Android">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage960">
<Platform Name="Android">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_Strings">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DebugSymbols">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyFramework">
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyModule">
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.dll;.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="DependencyPackage">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Name="File">
<Platform Name="Android">
<Operation>0</Operation>
</Platform>
<Platform Name="Android64">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX64">
<Operation>0</Operation>
</Platform>
<Platform Name="OSXARM64">
<Operation>0</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iOS_AppStore1024">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_AppIcon152">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_AppIcon167">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_LaunchDark2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Notification40">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Setting58">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_SpotLight80">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_AppIcon120">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_AppIcon180">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch3x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_LaunchDark2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_LaunchDark3x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Notification40">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Notification60">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Setting58">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Setting87">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Spotlight120">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Spotlight80">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectAndroidManifest">
<Platform Name="Android">
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceDebug">
<Platform Name="iOSDevice32">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSEntitlements"/>
<DeployClass Name="ProjectiOSInfoPList"/>
<DeployClass Name="ProjectiOSLaunchScreen"/>
<DeployClass Name="ProjectiOSResource">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXDebug"/>
<DeployClass Name="ProjectOSXEntitlements"/>
<DeployClass Name="ProjectOSXInfoPList"/>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="ProjectOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="Linux64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOutput_Android32">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectUWPManifest">
<Platform Name="Win32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo150">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo44">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
</Deployment>
<Platforms>
<Platform value="Android">False</Platform>
<Platform value="Android64">False</Platform>
<Platform value="iOSDevice64">False</Platform>
<Platform value="Linux64">False</Platform>
<Platform value="OSX64">False</Platform>
<Platform value="OSXARM64">False</Platform>
<Platform value="Win32">True</Platform>
<Platform value="Win64">True</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
</Project>

Binary file not shown.

View File

@ -0,0 +1,7 @@
# LZ4Delphi
LZ4 Static Link Library for Delphi
For Demos Check [YW_DEMOS](https://github.com/YWtheGod/YW_DEMOS)
LZ4压缩静态链接库
LZ4算法速度很快但是压缩率不高但一个很大的优点是即使设置到最高压缩率其解压速度依然是极端的快所以适合单次压缩频繁高速解压的应用场景。
示范程序,参看 [YW_DEMOS](https://gitee.com/YWtheGod/YW_DEMOS)

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@
#include "..\..\..\lib\lz4.c"
#include "..\..\..\lib\lz4hc.c"
#include "..\..\..\lib\lz4frame.c"

Binary file not shown.

Binary file not shown.

1295
contrib/LZ4Delphi/lz4lib.pas Normal file

File diff suppressed because it is too large Load Diff

View File

@ -338,6 +338,7 @@ function XXH64_update;begin exit(_XXH64_update(state,input,length))end;
function XXH64_digest;begin exit(_XXH64_digest(state))end;
procedure XXH64_canonicalFromHash;begin _XXH64_canonicalFromHash(dst,hash)end;
function XXH64_hashFromCanonical;begin exit(_XXH64_hashFromCanonical(src))end;
function XXH3_64bits;begin exit(_XXH3_64bits(data,len))end;
function XXH3_128bits;begin exit(_XXH3_128bits(data,len))end;
function XXH3_128bits_withSeed;begin exit(_XXH3_128bits_withSeed(data,len,seed))end;
function XXH3_128bits_withSecret;begin exit(_XXH3_128bits_withSecret(data,len,secret,secretSize))end;

1
contrib/ZSTD4Delphi/.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
*.tar filter=lfs diff=lfs merge=lfs -text

2
contrib/ZSTD4Delphi/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.~*

View File

@ -0,0 +1,39 @@
# ZSTD static link library for DELPHI
I got a lot problem try linking zstd with delphi since 1.5.1, everything is smooth when it was 1.5.0
I got AV error when using mingw GCC 11.2, and failed to compile when using mingw clang 13.0.1
And finally I got it success compiled with VS 17.1.1, but delphi raise a internal AV error when linking with 32bit object files.
So, I compiled 32bit object file with VS Clang 13.0 tool set, seems it work, but it won't work on 64bit mode(AV in run time).
So, VC tool set only works on 64bit mode, and Clang only works on 32bit mode, I just combined two together...
Some thing you should know:
This library depends on other two librarys:
- [libc](https://github.com/YWtheGod/LIBC)
- [XXHASH4DELPHI](https://github.com/YWtheGod/XXHASH4Delphi)
- ZSTD on Github: [ZSTD](https://github.com/facebook/zstd)
- For Demos: [YW_DEMOS](https://github.com/YWtheGod/YW_DEMOS)
ZSTD comes with a xxhash source code with its own, but I thought sharing a library would be better.
And I didn't compiled legecy supporting code into the object files, so it can't decompress data that was compressed by very old zstd library(before 1.0 I thought), if it will be a problem, let me known.
Now I compiled both AVX2 and SSE2 version of the codes, but if to run it on CPU that don't have AVX2 support, you also need to compile my XXHASH4Delphi library in SSE2 mode too.
It didn't use ASM codes for huffman decompressing on Windows platform, I don't think decompressing is really a matter, so I just let it be.
And finally, the 1.5.2 version of zstd runs about same speeds with 1.5.0, slighly slower in high compressing rate setting. but it also got slighly better compression rates on all compression levels.
我在编译1.5.1以上版本时遇到很多问题, gcc编译出来的代码总是AV错, mingw上的Clang编译不过
最终用的是VC 17.1.1编译过了64位初步测试正常, 32位下Delphi链接时报内部AV错了!
用VC切换到Clang工具集, 32位下初步测试过了64位竟然继续报AV错!
没办法最终提供的目标文件64位是VC++工具集编译的, 32位是VS Clang 13.0工具集编译的。
这个库依赖另外两个库,需要另外下载安装:
- [libc](https://github.com/YWtheGod/LIBC)
- [XXHASH4DELPHI](https://github.com/YWtheGod/XXHASH4Delphi)
- ZSTD官方Github: [ZSTD](https://github.com/facebook/zstd)
- 使用范例: [YW_DEMOS](https://gitee.com/YWtheGod/YW_DEMOS)
ZSTD自带一个xxhash源码并且它修改了xxhash源码的命名前缀以独占这些代码我取消了独占前缀让它与其他模块共享独立安装的XXHASH库。
我并没有将ZSTD老算法兼容代码编译进去所以它不能解压一些很老版本的ZSTD压缩数据(我估计起码老于1.0版本).
这次我附带了AVX2和SSE2版本的目标文件通过编译开关可以切换但是单独切换ZSTD还不够你还得在编译XXHASH4DELPHI时也选择同样的SSE2版本才能在没有AVX2的CPU上运行。
ZSTD在Windows平台下没有采用汇编代码的哈夫曼解压我觉得解压也不需要极限速度所以我就由得它没动它的汇编代码。
最后1.5.2速度基本和1.5.0版本差不多,高压缩设定下轻微慢一点点,但是在所有压缩率设定下,压缩体积都要更小一点点

View File

@ -0,0 +1,356 @@
unit ZSTD;
interface
uses classes, sysutils, ZSTDLib
{$IFDEF YWRTL},YWTypes{$ENDIF}
;
const
ZSTD_VERSION_MAJOR = ZSTDLib.ZSTD_VERSION_MAJOR;
ZSTD_VERSION_MINOR = ZSTDLib.ZSTD_VERSION_MINOR;
ZSTD_VERSION_RELEASE = ZSTDLib.ZSTD_VERSION_RELEASE;
ZSTD_VERSION_NUMBER = ZSTD_VERSION_MAJOR*100*100+ZSTD_VERSION_MINOR*100+
ZSTD_VERSION_RELEASE;
ZSTD_VERSION_STRING = ZSTDLib.ZSTD_VERSION_STRING;
ZSTD_CLEVEL_DEFAULT = ZSTDLib.ZSTD_CLEVEL_DEFAULT;
type
TCustomZSTDStream = class(TStream)
private
FStream: TStream;
FStreamStartPos: Int64;
FStreamPos: Int64;
FInBuffer :ZSTD_inBuffer;
FOutBuffer : ZSTD_outBuffer;
total_in, total_out : NativeInt;
protected
constructor Create(stream: TStream);
end;
TZSTDCompressStream=class(TCustomZSTDStream)
private
FCStream : ZSTD_CStream;
flevel : integer;
function GetCompressionRate: Single;
public
constructor Create(dest: TStream; compressionLevel: Integer=3);
destructor Destroy; override;
function Read(var buffer; count: Longint): Longint; override;
function Write(const buffer; count: Longint): Longint; override;
function Read(Buffer: TBytes; Offset, Count: Longint): Longint; override;
function Write(const Buffer: TBytes; Offset: Longint=0;Count:LongInt=-1): Longint; override;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
property CompressionRate: Single read GetCompressionRate;
end;
TZSTDDecompressStream = class(TCustomZSTDStream)
private
FOwnsStream: Boolean;
FDStream : ZSTD_DStream;
_eof : boolean;
public
constructor Create(source: TStream; OwnsStream: Boolean=false);
destructor Destroy; override;
function Read(var buffer; count: Longint): Longint; override;
function Write(const buffer; count: Longint): Longint; override;
function Read(Buffer: TBytes; Offset, Count: Longint): Longint; override;
function Write(const Buffer: TBytes; Offset, Count: Longint): Longint; override;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
end;
function CompressData(source : Pointer;srcSize:NativeInt; dst:Pointer;
dstCapacity:NativeInt; compressionLevel:integer=3):NativeInt; overload;
function DecompressData(Source:Pointer;srcSize:NativeInt;dst:Pointer;
dstCapacity:NativeInt):NativeInt; overload;
function CompressData(source :TBytes;index:NativeInt=0;size:NativeInt=-1;
compressionLevel:integer=3):TBytes; overload;
function DecompressData(Source:TBytes;Size:NativeInt=-1):TBytes; overload;
implementation
type
Context = record
class var [volatile]_CCTX : ZSTD_CCtx;
class var [volatile]_DCTX : ZSTD_DCtx;
class var [volatile]_CStream : ZSTD_CStream;
class var [volatile]_DStream : ZSTD_DStream;
class function GetCCTX:ZSTD_CCTX; inline; static;
class function GetDCTX:ZSTD_DCTX; inline; static;
class procedure FreeCCTX(C : ZSTD_CCTX); inline; static;
class procedure FreeDCTX(C : ZSTD_DCTX); inline; static;
class function GetCStream(cl:integer):ZSTD_CStream; inline; static;
class function GetDStream:ZSTD_DStream; inline; static;
class procedure FreeCStream(C : ZSTD_CStream); inline; static;
class procedure FreeDStream(C : ZSTD_DStream); inline; static;
class constructor Create;
class destructor Destroy;
end;
function GetBuffer : Pointer; inline;
begin
{$IFDEF YWRTL}Result:=BufferPool256K.GetBuffer{$ELSE}GetMem(Result,256*1024){$ENDIF}
end;
procedure FreeBuffer(var b : Pointer); inline;
begin
{$IFDEF YWRTL}BufferPool256K.FreeBuffer(b){$ELSE}FreeMem(b){$ENDIF}
end;
function CompressData(source : Pointer;srcSize:NativeInt; dst:Pointer;
dstCapacity:NativeInt; compressionLevel:integer=3):NativeInt; overload;
var TX : ZSTD_CCTX;
begin
TX := Context.GetCCTX;
try
Result:= ZSTD_CompressCCTX(TX,dst,dstCapacity,source,srcSize,compressionLevel);
finally
Context.FreeCCTX(TX);
end;
end;
function CompressData(source :TBytes;index:NativeInt=0;size:NativeInt=-1;compressionLevel:integer=3):TBytes;
overload;
begin
if size=-1 then size := Length(source);
if size=0 then exit(nil);
setlength(Result,ZSTD_COMPRESSBOUND(size));
setLength(Result,CompressData(@Source[0],size,@Result[0],Length(Result),
compressionLevel));
end;
function DecompressData(Source:Pointer;srcSize:NativeInt;dst:Pointer;
dstCapacity:NativeInt):NativeInt; overload;
var TX : ZSTD_DCTX;
begin
TX := Context.GetDCTX;
try
Result := ZSTD_decompressDCTX(TX,dst,dstCapacity,source,srcSize);
finally
Context.FreeDCTX(TX);
end;
end;
function DecompressData(Source:TBytes;Size:NativeInt=-1):TBytes; overload;
begin
if Size=-1 then Size := Length(Source);
SetLength(Result,Size*32);
SetLength(Result,DecompressData(@Source[0],Size,@Result[0],Length(Result)));
end;
{ TZSTDStream }
constructor TZSTDCompressStream.Create(dest: TStream; compressionLevel: Integer=3);
begin
inherited Create(dest);
flevel :=compressionLevel;
FCStream := Context.GetCStream(flevel);
FoutBuffer.size := 256*1024;
FoutBuffer.dst := GetBuffer;
FoutBuffer.pos := 0;
end;
destructor TZSTDCompressStream.Destroy;
begin
ZSTD_flushStream(FCStream,FoutBuffer);
FStream.Write(FoutBuffer.dst^,FoutBuffer.pos);
FreeBuffer(FoutBuffer.dst);
Context.FreeCStream(FCStream);
inherited;
end;
function TZSTDCompressStream.GetCompressionRate: Single;
begin
if total_in = 0 then result := 0
else result := (1.0 - (total_out / total_in)) * 100.0;
end;
function TZSTDCompressStream.Read(var buffer; count: Longint): Longint;
begin
raise Exception.Create('Compress Stream is WriteOnly');
end;
function TZSTDCompressStream.Read(Buffer: TBytes; Offset, Count: Longint): Longint;
begin
raise Exception.Create('Compress Stream is WriteOnly');
end;
function TZSTDCompressStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
begin
if (offset = 0) and (origin = soCurrent) then
begin
result := total_in;
end
else Result := -1;
end;
function TZSTDCompressStream.Write(const Buffer: TBytes; Offset: Longint=0;Count:LongInt=-1): Longint;
begin
if Count=-1 then Count := Length(Buffer)-Offset;
Result := Write(Buffer[Offset],Count);
end;
function TZSTDCompressStream.Write(const buffer; count: Longint): Longint;
begin
Finbuffer.src := @buffer;
Finbuffer.size := count;
Finbuffer.pos := 0;
while Finbuffer.pos<Finbuffer.size do begin
ZSTD_compressStream2(FCStream,Foutbuffer,FinBuffer,ZSTD_e_continue);
if FoutBuffer.pos>0 then begin
FStream.Write(FoutBuffer.dst^,FoutBuffer.pos);
total_out := total_out+FoutBuffer.pos;
FoutBuffer.pos := 0;
end;
end;
total_in := total_in+count;
Result := Count;
end;
{ TCustomZSTDStream }
constructor TCustomZSTDStream.Create(stream: TStream);
begin
inherited Create;
FStream := stream;
FStreamStartPos := Stream.Position;
FStreamPos := FStreamStartPos;
end;
{ TZDecompressionStream }
constructor TZSTDDecompressStream.Create(source: TStream; OwnsStream: Boolean=false);
begin
inherited Create(source);
FOwnsStream := OwnsStream;
FDStream := Context.GetDStream;
FinBuffer.size := 256*1024; //128K
FinBuffer.src := GetBuffer;
total_in := FStream.Read(FinBuffer.src^,FinBuffer.size);
_eof := total_in<FinBuffer.size;
FinBuffer.size := total_in;
end;
destructor TZSTDDecompressStream.Destroy;
begin
FreeBuffer(FinBuffer.src);
Context.FreeDStream(FDStream);
if FOwnsStream then
FStream.Free;
inherited;
end;
function TZSTDDecompressStream.Read(Buffer: TBytes; Offset,
Count: Longint): Longint;
begin
Result := Read(Buffer[Offset],Count);
end;
function TZSTDDecompressStream.Read(var buffer; count: Longint): Longint;
var a,b : NativeInt;
begin
FoutBuffer.dst := @Buffer;
FoutBuffer.size := Count;
FoutBuffer.pos := 0;
repeat
b := ZSTD_decompressStream(FDStream,FoutBuffer,FinBuffer);
if ZSTD_iserror(b)<>0 then raise Exception.Create('ZSTD Error '+b.toString);
if (FInBuffer.pos=FInBuffer.size) then begin
if _eof then break;
a := FStream.Read(FInBuffer.src^,FInBuffer.size);
total_in := total_in+a;
_eof := a<FInBuffer.size;
FInBuffer.size:= a;
FInBuffer.pos := 0;
end;
until FoutBuffer.pos=FoutBuffer.size;
total_out:=total_out+FoutBuffer.pos;
Result := FOutBuffer.pos;
end;
function TZSTDDecompressStream.Seek(const Offset: Int64;
Origin: TSeekOrigin): Int64;
begin
Result := -1;
end;
function TZSTDDecompressStream.Write(const Buffer: TBytes; Offset,
Count: Longint): Longint;
begin
raise Exception.Create('Compress Stream is ReadOnly');
end;
function TZSTDDecompressStream.Write(const buffer; count: Longint): Longint;
begin
raise Exception.Create('Compress Stream is ReadOnly');
end;
{ Contex }
class constructor Context.Create;
begin
_CCtx := nil;
_DCTX := nil;
_CStream := nil;
_DStream := nil;
end;
class destructor Context.Destroy;
begin
if _CCTX<>nil then ZSTD_FreeCCTX(_CCtx);
if _DCTX<>nil then ZSTD_FreeDCTX(_DCTX);
if _CStream<>nil then ZSTD_FreeCStream(_CStream);
if _DStream<>nil then ZSTD_FreeDStream(_DStream);
end;
class procedure Context.FreeCCTX(C: ZSTD_CCTX);
begin
ZSTD_CCTX_reset(C,ZSTD_reset_session_only);
C := atomicExchange(_CCTX,C);
if C<>nil then ZSTD_FreeCCTX(c);
end;
class procedure Context.FreeCStream(C: ZSTD_CStream);
begin
C := atomicExchange(_CStream,C);
if C<>nil then ZSTD_FreeCStream(c);
end;
class procedure Context.FreeDCTX(C: ZSTD_DCTX);
begin
ZSTD_CCTX_reset(C,ZSTD_reset_session_only);
C := atomicExchange(_DCTX,C);
if C<>nil then ZSTD_FreeDCTX(c);
end;
class procedure Context.FreeDStream(C: ZSTD_DStream);
begin
ZSTD_initDStream(C);
C := atomicExchange(_DStream,C);
if C<>nil then ZSTD_FreeDStream(c);
end;
class function Context.GetCCTX: ZSTD_CCTX;
begin
Result := nil;
Result := atomicExchange(_CCTX,Result);
if Result=nil then Result := ZSTD_CreateCCTX;
end;
class function Context.GetCStream(cl: integer): ZSTD_CStream;
begin
Result := nil;
Result := atomicExchange(_CStream,Result);
if Result = nil then Result := ZSTD_createCStream;
ZSTD_initCStream(Result,cl);
end;
class function Context.GetDCTX: ZSTD_DCTX;
begin
Result := nil;
Result := atomicExchange(_DCTX,Result);
if Result=nil then Result := ZSTD_CreateDCTX;
end;
class function Context.GetDStream: ZSTD_DStream;
begin
Result := nil;
Result := atomicExchange(_DStream,Result);
if Result=nil then Result := ZSTD_CreateDStream;
end;
end.

View File

@ -0,0 +1,38 @@
package ZSTD4Delphi;
{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE RELEASE}
{$ENDIF IMPLICITBUILDING}
{$IMPLICITBUILD ON}
requires
rtl,
pkglibc;
contains
ZSTDLib in 'ZSTDLib.pas',
ZSTD in 'ZSTD.pas';
end.

View File

@ -0,0 +1,975 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{AFFD1778-C01B-4A4A-9F25-E26FCD58EC71}</ProjectGuid>
<MainSource>ZSTD4Delphi.dpk</MainSource>
<ProjectVersion>19.4</ProjectVersion>
<FrameworkType>None</FrameworkType>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Release</Config>
<Platform Condition="'$(Platform)'==''">Win64</Platform>
<TargetedPlatforms>3</TargetedPlatforms>
<AppType>Package</AppType>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
<Base_Android>true</Base_Android>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Android64' and '$(Base)'=='true') or '$(Base_Android64)'!=''">
<Base_Android64>true</Base_Android64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='iOSDevice64' and '$(Base)'=='true') or '$(Base_iOSDevice64)'!=''">
<Base_iOSDevice64>true</Base_iOSDevice64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='OSX64' and '$(Base)'=='true') or '$(Base_OSX64)'!=''">
<Base_OSX64>true</Base_OSX64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='OSXARM64' and '$(Base)'=='true') or '$(Base_OSXARM64)'!=''">
<Base_OSXARM64>true</Base_OSXARM64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
<Cfg_1_Win32>true</Cfg_1_Win32>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win64)'!=''">
<Cfg_2_Win64>true</Cfg_2_Win64>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_DcuOutput>..\$(ProductVersion)\$(Platform)\$(Config)</DCC_DcuOutput>
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
<DCC_E>false</DCC_E>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
<GenDll>true</GenDll>
<GenPackage>true</GenPackage>
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
<DCC_CBuilderOutput>All</DCC_CBuilderOutput>
<SanitizedProjectName>ZSTD4Delphi</SanitizedProjectName>
<VerInfo_Locale>2052</VerInfo_Locale>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Android)'!=''">
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
<EnabledSysJars>android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar</EnabledSysJars>
<Android_LauncherIcon192>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png</Android_LauncherIcon192>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Android64)'!=''">
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
<EnabledSysJars>android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar</EnabledSysJars>
<Android_LauncherIcon192>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png</Android_LauncherIcon192>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_iOSDevice64)'!=''">
<DCC_CBuilderOutput>None</DCC_CBuilderOutput>
<iOS_AppStore1024>$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png</iOS_AppStore1024>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_OSX64)'!=''">
<VerInfo_Keys>CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple&apos;s speech recognition servers</VerInfo_Keys>
<BT_BuildType>Debug</BT_BuildType>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_OSXARM64)'!=''">
<VerInfo_Keys>CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple&apos;s speech recognition servers</VerInfo_Keys>
<BT_BuildType>Debug</BT_BuildType>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_DebugDCUs>true</DCC_DebugDCUs>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
<DCC_RemoteDebug>true</DCC_RemoteDebug>
<DCC_Inlining>off</DCC_Inlining>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
<DCC_RemoteDebug>false</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>0</DCC_DebugInformation>
<DCC_Inlining>auto</DCC_Inlining>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
<DCC_DcuOutput>..\$(ProductVersion)\$(Platform)\$(Config)</DCC_DcuOutput>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="pkglibc.dcp"/>
<DCCReference Include="ZSTDLib.pas"/>
<DCCReference Include="ZSTD.pas"/>
<None Include="zstd4delphi.c"/>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">ZSTD4Delphi.dpk</Source>
</Source>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k280.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp280.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
<Platforms>
<Platform value="Android">False</Platform>
<Platform value="Android64">False</Platform>
<Platform value="iOSDevice64">False</Platform>
<Platform value="Linux64">False</Platform>
<Platform value="OSX64">False</Platform>
<Platform value="OSXARM64">False</Platform>
<Platform value="Win32">True</Platform>
<Platform value="Win64">True</Platform>
</Platforms>
<Deployment Version="3">
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\21.0\Bpl\Win64\ZSTD4Delphi.bpl" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win64">
<RemoteName>ZSTD4Delphi.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\21.0\Bpl\ZSTD4Delphi.bpl" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>ZSTD4Delphi.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\21.0\Bpl\ZSTD4Delphi.bpl" Configuration="Release" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>ZSTD4Delphi.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\Win64\ZSTD4Delphi.bpl" Configuration="Release" Class="ProjectOutput">
<Platform Name="Win64">
<RemoteName>ZSTD4Delphi.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidClasses">
<Platform Name="Android">
<RemoteDir>classes</RemoteDir>
<Operation>64</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>classes</RemoteDir>
<Operation>64</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidClassesDexFile">
<Platform Name="Android">
<RemoteDir>classes</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>classes</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidFileProvider">
<Platform Name="Android">
<RemoteDir>res\xml</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\xml</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidGDBServer">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeArmeabiFile">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeArmeabiv7aFile">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeMipsFile">
<Platform Name="Android">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput_Android32">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashImageDef">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStyles">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStylesV21">
<Platform Name="Android">
<RemoteDir>res\values-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_Colors">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_DefaultAppIcon">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon144">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon192">
<Platform Name="Android">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon24">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage426">
<Platform Name="Android">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage470">
<Platform Name="Android">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage640">
<Platform Name="Android">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage960">
<Platform Name="Android">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_Strings">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DebugSymbols">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyFramework">
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyModule">
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.dll;.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="DependencyPackage">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Name="File">
<Platform Name="Android">
<Operation>0</Operation>
</Platform>
<Platform Name="Android64">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX64">
<Operation>0</Operation>
</Platform>
<Platform Name="OSXARM64">
<Operation>0</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iOS_AppStore1024">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_AppIcon152">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_AppIcon167">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_LaunchDark2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Notification40">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Setting58">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_SpotLight80">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_AppIcon120">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_AppIcon180">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch3x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_LaunchDark2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_LaunchDark3x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Notification40">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Notification60">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Setting58">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Setting87">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Spotlight120">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Spotlight80">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectAndroidManifest">
<Platform Name="Android">
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceDebug">
<Platform Name="iOSDevice32">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceResourceRules"/>
<DeployClass Name="ProjectiOSEntitlements"/>
<DeployClass Name="ProjectiOSInfoPList"/>
<DeployClass Name="ProjectiOSLaunchScreen"/>
<DeployClass Name="ProjectiOSResource">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXDebug"/>
<DeployClass Name="ProjectOSXEntitlements"/>
<DeployClass Name="ProjectOSXInfoPList"/>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="ProjectOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="Linux64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOutput_Android32">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectUWPManifest">
<Platform Name="Win32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo150">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo44">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
</Deployment>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
</Project>

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<Transactions>
<Transaction>2020/06/16 01:28:10.000.042,=rtl.dcp</Transaction>
<Transaction>2020/06/16 01:28:41.000.583,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd\ZSTD.dproj=D:\Users\YW\Documents\Embarcadero\Studio\Projects\Package1.dproj</Transaction>
<Transaction>2020/06/16 01:28:54.000.792,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd\Unit1.pas</Transaction>
<Transaction>2020/06/16 01:29:04.000.967,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd\ZSTDLib.pas=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd\Unit1.pas</Transaction>
<Transaction>2020/06/16 08:05:04.000.477,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd\Unit1.pas</Transaction>
<Transaction>2020/06/16 08:05:13.000.496,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd\libc.pas=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd\Unit1.pas</Transaction>
<Transaction>2020/06/16 13:10:08.000.869,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd\libc.pas=</Transaction>
<Transaction>2020/06/16 14:00:05.000.919,=pkglibc.dcp</Transaction>
<Transaction>2020/06/18 14:33:14.000.515,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd\Unit1.pas</Transaction>
<Transaction>2020/06/18 14:33:33.000.922,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd\Unit1.pas=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd\ZSTDStream.pas</Transaction>
<Transaction>2020/12/24 22:59:00.000.255,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd148\ZSTD.dproj=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd148\ZSTD148.dproj</Transaction>
<Transaction>2021/01/25 20:51:35.000.742,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd148\ZSTDStream.pas=</Transaction>
<Transaction>2021/01/25 20:51:44.000.149,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd148\ZSTD.pas</Transaction>
<Transaction>2021/04/19 22:24:34.000.284,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd149\ZSTD148.dproj=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd149\ZSTD149.dproj</Transaction>
<Transaction>2021/05/20 22:52:35.000.767,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd150\ZSTD150.dproj=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd150\ZSTD149.dproj</Transaction>
<Transaction>2022/03/08 17:01:53.000.619,D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd\ZSTD4Delphi.dproj=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd\ZSTD150.dproj</Transaction>
<Transaction>2022/03/09 19:37:43.000.296,=D:\Users\YW\Documents\Embarcadero\Studio\Projects\YWLIB\zstd\zstd4delphi.c</Transaction>
</Transactions>
<ProjectSortOrder AutoSort="0" SortType="0">
<File Path="ZSTD.pas"/>
<File Path="zstd4delphi.c"/>
<File Path="ZSTDLib.pas"/>
<File Path="pkglibc.dcp"/>
<File Path="rtl.dcp"/>
</ProjectSortOrder>
</BorlandProject>

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,24 @@
#define ZSTD_NO_TRACE
#define XXH_NAMESPACE
#include"common/error_private.c"
#include"common/zstd_common.c"
#include"compress/zstd_compress.c"
#include"compress/zstd_ldm.c"
#include"compress/zstd_double_fast.c"
#include"compress/zstd_fast.c"
#include"compress/zstd_opt.c"
#include"compress/zstd_lazy.c"
#include"compress/zstd_compress_literals.c"
#include"compress/hist.c"
#include"compress/zstd_compress_sequences.c"
#include"compress/zstd_compress_superblock.c"
#include"compress/huf_compress.c"
#define FSE_isError entropy_FSE_isErr
#define HUF_isError entropy_HUF_isErr
#include"common/entropy_common.c"
#include"compress/fse_compress.c"
#include"common/fse_decompress.c"
#include"decompress/zstd_decompress.c"
#include"decompress/zstd_ddict.c"
#include"decompress/zstd_decompress_block.c"
#include"decompress/huf_decompress.c"

Binary file not shown.

Binary file not shown.

View File

@ -193,7 +193,7 @@ begin
if FileExists(Input1) then
BaseDir := ExtractFilePath(TPath.GetFullPath(Input1))
else if DirectoryExists(Input1) then
BaseDir := IncludeTrailingBackSlash(TPath.GetFullPath(Input1))
BaseDir := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input1))
else
BaseDir := ExtractFilePath(TPath.GetFullPath(Input1));
LList := GetFileList([Input1], True);
@ -305,7 +305,7 @@ begin
if FileExists(Input2) then
BaseDir := ExtractFilePath(TPath.GetFullPath(Input2))
else if DirectoryExists(Input2) then
BaseDir := IncludeTrailingBackSlash(TPath.GetFullPath(Input2))
BaseDir := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input2))
else
BaseDir := ExtractFilePath(TPath.GetFullPath(Input2));
LList := GetFileList([Input2], True);

View File

@ -97,7 +97,7 @@ begin
if FileExists(Input[I]) then
BaseDir := ExtractFilePath(TPath.GetFullPath(Input[I]))
else if DirectoryExists(Input[I]) then
BaseDir := IncludeTrailingBackSlash(TPath.GetFullPath(Input[I]))
BaseDir := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input[I]))
else
BaseDir := ExtractFilePath(TPath.GetFullPath(Input[I]));
LList := GetFileList([Input[I]], True);
@ -136,7 +136,7 @@ var
LBytes: TBytes;
FStream: TFileStream;
begin
BaseDir := IncludeTrailingBackSlash(Output);
BaseDir := IncludeTrailingPathDelimiter(Output);
Input.ReadBuffer(I, I.Size);
while I >= 0 do
begin

View File

@ -93,13 +93,13 @@ begin
if FileExists(Input2) then
BaseDir1 := ExtractFilePath(TPath.GetFullPath(Input2))
else if DirectoryExists(Input2) then
BaseDir1 := IncludeTrailingBackSlash(TPath.GetFullPath(Input2))
BaseDir1 := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input2))
else
BaseDir1 := ExtractFilePath(TPath.GetFullPath(Input2));
if FileExists(Output) then
BaseDir2 := ExtractFilePath(TPath.GetFullPath(Output))
else if DirectoryExists(Output) then
BaseDir2 := IncludeTrailingBackSlash(TPath.GetFullPath(Output))
BaseDir2 := IncludeTrailingPathDelimiter(TPath.GetFullPath(Output))
else
BaseDir2 := ExtractFilePath(TPath.GetFullPath(Output));
while true do
@ -154,13 +154,13 @@ begin
if FileExists(Input2) then
BaseDir1 := ExtractFilePath(TPath.GetFullPath(Input2))
else if DirectoryExists(Input2) then
BaseDir1 := IncludeTrailingBackSlash(TPath.GetFullPath(Input2))
BaseDir1 := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input2))
else
BaseDir1 := ExtractFilePath(TPath.GetFullPath(Input2));
if FileExists(Output) then
BaseDir2 := ExtractFilePath(TPath.GetFullPath(Output))
else if DirectoryExists(Output) then
BaseDir2 := IncludeTrailingBackSlash(TPath.GetFullPath(Output))
BaseDir2 := IncludeTrailingPathDelimiter(TPath.GetFullPath(Output))
else
BaseDir2 := ExtractFilePath(TPath.GetFullPath(Output));
while true do

View File

@ -123,7 +123,7 @@ begin
if FileExists(Input1) then
BaseDir := ExtractFilePath(TPath.GetFullPath(Input1))
else if DirectoryExists(Input1) then
BaseDir := IncludeTrailingBackSlash(TPath.GetFullPath(Input1))
BaseDir := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input1))
else
BaseDir := ExtractFilePath(TPath.GetFullPath(Input1));
LList := GetFileList([Input1], True);
@ -235,7 +235,7 @@ begin
if FileExists(Input2) then
BaseDir := ExtractFilePath(TPath.GetFullPath(Input2))
else if DirectoryExists(Input2) then
BaseDir := IncludeTrailingBackSlash(TPath.GetFullPath(Input2))
BaseDir := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input2))
else
BaseDir := ExtractFilePath(TPath.GetFullPath(Input2));
LList := GetFileList([Input2], True);

View File

@ -215,7 +215,7 @@ begin
SS := TSharedMemoryStream.Create
(LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF2)),
IncludeTrailingBackSlash(PString(WorkDir)^) + InFile);
IncludeTrailingPathDelimiter(PString(WorkDir)^) + InFile);
try
Res := ExecStdin(Exec, Param, PString(WorkDir)^,
SS.Memory, SS.Size);
@ -226,7 +226,7 @@ begin
STDOUT_MODE:
begin
TFS := TFileStream.Create
(IncludeTrailingBackSlash(PString(WorkDir)^) + OutFile,
(IncludeTrailingPathDelimiter(PString(WorkDir)^) + OutFile,
fmCreate);
try
Res := ExecStdout(Exec, Param, PString(WorkDir)^, Callback);
@ -239,9 +239,9 @@ begin
SS := TSharedMemoryStream.Create
(LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF2)),
IncludeTrailingBackSlash(PString(WorkDir)^) + InFile);
IncludeTrailingPathDelimiter(PString(WorkDir)^) + InFile);
TFS := TFileStream.Create
(IncludeTrailingBackSlash(PString(WorkDir)^) + OutFile,
(IncludeTrailingPathDelimiter(PString(WorkDir)^) + OutFile,
fmCreate);
try
Res := ExecStdio(Exec, Param, PString(WorkDir)^, SS.Memory,
@ -278,11 +278,11 @@ var
procedure Load(X: Integer);
begin
DeleteFile(IncludeTrailingBackSlash(WorkDir[X]) + LCtx.InFile);
DeleteFile(IncludeTrailingBackSlash(WorkDir[X]) + LCtx.OutFile);
DeleteFile(IncludeTrailingPathDelimiter(WorkDir[X]) + LCtx.InFile);
DeleteFile(IncludeTrailingPathDelimiter(WorkDir[X]) + LCtx.OutFile);
if not Done then
begin
FStream := TFileStream.Create(IncludeTrailingBackSlash(WorkDir[X]) +
FStream := TFileStream.Create(IncludeTrailingPathDelimiter(WorkDir[X]) +
LCtx.InFile, fmCreate);
try
Done := CopyStream(Input, FStream, Options.ChunkSize) = 0;
@ -307,7 +307,7 @@ begin
SetLength(State, Options.Threads);
for I := Low(Tasks) to High(Tasks) do
begin
WorkDir[I] := IncludeTrailingBackSlash(GetCurrentDir) +
WorkDir[I] := IncludeTrailingPathDelimiter(GetCurrentDir) +
LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF1));
CreateDir(WorkDir[I]);
@ -333,10 +333,10 @@ begin
continue;
B := 0;
if State[I] = STATE_EXECUTED then
S := IncludeTrailingBackSlash(WorkDir[I]) + LCtx.OutFile
S := IncludeTrailingPathDelimiter(WorkDir[I]) + LCtx.OutFile
else
begin
S := IncludeTrailingBackSlash(WorkDir[I]) + LCtx.InFile;
S := IncludeTrailingPathDelimiter(WorkDir[I]) + LCtx.InFile;
B := 1;
end;
SStream := TSharedMemoryStream.Create
@ -386,8 +386,8 @@ var
B: Byte;
I64: Int64;
begin
DeleteFile(IncludeTrailingBackSlash(WorkDir[X]) + LCtx.InFile);
DeleteFile(IncludeTrailingBackSlash(WorkDir[X]) + LCtx.OutFile);
DeleteFile(IncludeTrailingPathDelimiter(WorkDir[X]) + LCtx.InFile);
DeleteFile(IncludeTrailingPathDelimiter(WorkDir[X]) + LCtx.OutFile);
if not Done then
begin
repeat
@ -395,7 +395,7 @@ var
Input.ReadBuffer(I64, I64.Size);
if I64 >= 0 then
begin
FStream := TFileStream.Create(IncludeTrailingBackSlash(WorkDir[X]) +
FStream := TFileStream.Create(IncludeTrailingPathDelimiter(WorkDir[X]) +
LCtx.InFile, fmCreate);
try
if B = 0 then
@ -425,7 +425,7 @@ begin
SetLength(State, Options.Threads);
for I := Low(Tasks) to High(Tasks) do
begin
WorkDir[I] := IncludeTrailingBackSlash(GetCurrentDir) +
WorkDir[I] := IncludeTrailingPathDelimiter(GetCurrentDir) +
LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF1));
CreateDir(WorkDir[I]);
@ -450,7 +450,7 @@ begin
if State[I] = STATE_DONE then
continue;
if State[I] = STATE_EXECUTED then
S := IncludeTrailingBackSlash(WorkDir[I]) + LCtx.OutFile
S := IncludeTrailingPathDelimiter(WorkDir[I]) + LCtx.OutFile
else
raise Exception.CreateRes(@SWriteError);
SStream := TSharedMemoryStream.Create

View File

@ -123,7 +123,7 @@ begin
if FileExists(Input1) then
BaseDir := ExtractFilePath(TPath.GetFullPath(Input1))
else if DirectoryExists(Input1) then
BaseDir := IncludeTrailingBackSlash(TPath.GetFullPath(Input1))
BaseDir := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input1))
else
BaseDir := ExtractFilePath(TPath.GetFullPath(Input1));
LList := GetFileList([Input1], True);
@ -235,7 +235,7 @@ begin
if FileExists(Input2) then
BaseDir := ExtractFilePath(TPath.GetFullPath(Input2))
else if DirectoryExists(Input2) then
BaseDir := IncludeTrailingBackSlash(TPath.GetFullPath(Input2))
BaseDir := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input2))
else
BaseDir := ExtractFilePath(TPath.GetFullPath(Input2));
LList := GetFileList([Input2], True);

View File

@ -131,7 +131,7 @@ begin
if FileExists(Input1) then
BaseDir1 := ExtractFilePath(TPath.GetFullPath(Input1))
else if DirectoryExists(Input1) then
BaseDir1 := IncludeTrailingBackSlash(TPath.GetFullPath(Input1))
BaseDir1 := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input1))
else
BaseDir1 := ExtractFilePath(TPath.GetFullPath(Input1));
LList1 := GetFileList([Input1], True);
@ -140,7 +140,7 @@ begin
if FileExists(Input2) then
BaseDir2 := ExtractFilePath(TPath.GetFullPath(Input2))
else if DirectoryExists(Input2) then
BaseDir2 := IncludeTrailingBackSlash(TPath.GetFullPath(Input2))
BaseDir2 := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input2))
else
BaseDir2 := ExtractFilePath(TPath.GetFullPath(Input2));
LList2 := GetFileList([Input2], True);
@ -223,7 +223,7 @@ begin
end;
Delete(LList2, I, 1);
end;
TempDir := IncludeTrailingBackSlash(GetCurrentDir) +
TempDir := IncludeTrailingPathDelimiter(GetCurrentDir) +
LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF1));
if not DirectoryExists(TempDir) then
@ -250,7 +250,7 @@ begin
Y := AtomicIncrement(J);
while Y < Z do
begin
S1 := IncludeTrailingBackSlash(TempDir) + Y.ToHexString +
S1 := IncludeTrailingPathDelimiter(TempDir) + Y.ToHexString +
XTOOL_MAPSUF3;
if C then
S2 := Input1
@ -296,7 +296,7 @@ begin
begin
while I >= K do
Sleep(10);
LFilename := IncludeTrailingBackSlash(TempDir) + I.ToHexString +
LFilename := IncludeTrailingPathDelimiter(TempDir) + I.ToHexString +
XTOOL_MAPSUF3;
if FileExists(LFilename) then
begin
@ -357,10 +357,10 @@ begin
if FileExists(Output) then
BaseDir := ExtractFilePath(TPath.GetFullPath(Output))
else if DirectoryExists(Output) then
BaseDir := IncludeTrailingBackSlash(TPath.GetFullPath(Output))
BaseDir := IncludeTrailingPathDelimiter(TPath.GetFullPath(Output))
else
BaseDir := ExtractFilePath(TPath.GetFullPath(Output));
S1 := IncludeTrailingBackSlash(GetCurrentDir) +
S1 := IncludeTrailingPathDelimiter(GetCurrentDir) +
LowerCase(ChangeFileExt(ExtractFileName(Utils.GetModuleName),
'_' + Random($7FFFFFFF).ToHexString + XTOOL_MAPSUF3));
SStream0 := TSharedMemoryStream.Create

View File

@ -126,7 +126,7 @@ begin
if FileExists(Input1) then
BaseDir1 := ExtractFilePath(TPath.GetFullPath(Input1))
else if DirectoryExists(Input1) then
BaseDir1 := IncludeTrailingBackSlash(TPath.GetFullPath(Input1))
BaseDir1 := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input1))
else
BaseDir1 := ExtractFilePath(TPath.GetFullPath(Input1));
LList := GetFileList([Input1], True);
@ -238,13 +238,13 @@ begin
if FileExists(Input2) then
BaseDir1 := ExtractFilePath(TPath.GetFullPath(Input2))
else if DirectoryExists(Input2) then
BaseDir1 := IncludeTrailingBackSlash(TPath.GetFullPath(Input2))
BaseDir1 := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input2))
else
BaseDir1 := ExtractFilePath(TPath.GetFullPath(Input2));
if FileExists(Input3) then
BaseDir2 := ExtractFilePath(TPath.GetFullPath(Input3))
else if DirectoryExists(Input3) then
BaseDir2 := IncludeTrailingBackSlash(TPath.GetFullPath(Input3))
BaseDir2 := IncludeTrailingPathDelimiter(TPath.GetFullPath(Input3))
else
BaseDir2 := ExtractFilePath(TPath.GetFullPath(Input3));
LList := GetFileList([Input3], True);

View File

@ -452,11 +452,11 @@ begin
for Y := Low(CodecSize) to High(CodecSize) do
begin
repeat
CodecExe[X].WorkDir[Y, Z] := IncludeTrailingBackSlash
(IncludeTrailingBackSlash(GetCurrentDir) + CodecExe[X].Name + '_' +
CodecExe[X].WorkDir[Y, Z] := IncludeTrailingPathDelimiter
(IncludeTrailingPathDelimiter(GetCurrentDir) + CodecExe[X].Name + '_' +
IntToHex(Random($10000), 4));
until DirectoryExists(CodecExe[X].WorkDir[Y, Z]) = False;
IncludeTrailingBackSlash(CodecExe[X].WorkDir[Y, Z]);
IncludeTrailingPathDelimiter(CodecExe[X].WorkDir[Y, Z]);
if CodecExe[X].Mode[Z] = STDIO_MODE then
CodecExe[X].Ctx[Y, Z] := ExecStdioInit(Y, PChar(CodecExe[X].Exec[Z]),
PChar(CodecExe[X].Param[Z]), PChar(CodecExe[X].WorkDir[Y, Z]),

View File

@ -66,13 +66,15 @@ procedure PrecompLogPatch1(OldSize, NewSize, PatchSize: Integer;
Status: Boolean)cdecl;
procedure PrecompLogPatch2(OldSize, NewSize, PatchSize: Integer;
Status: Boolean)cdecl;
procedure PrecompLogReprocess(Method: PChar; Size1, Size2, Size3: Integer;
Status: Boolean)cdecl;
procedure PrecompOutput1(Instance: Integer; const Buffer: Pointer;
Size: Integer);
Size: Integer)cdecl;
procedure PrecompOutput2(Instance: Integer; const Buffer: Pointer;
Size: Integer);
Size: Integer)cdecl;
procedure PrecompOutput3(Instance: Integer; const Buffer: Pointer;
Size: Integer);
Size: Integer)cdecl;
procedure PrecompAddStream(Instance: Integer; Info: PStrInfo1; Codec: PChar;
DepthInfo: PDepthInfo)cdecl;
procedure PrecompTransfer(Instance: Integer; Codec: PChar)cdecl;
@ -98,6 +100,7 @@ type
DupCount: Integer;
InSize, InflSize, SrepSize, CompSize: Int64;
SrepMem: Integer;
CachedComp, CachedUsed: Int64;
end;
var
@ -114,6 +117,7 @@ var
VERBOSE: Boolean = False;
EXTRACT: Boolean = False;
NOVERIFY: Boolean = False;
REPROCESS: String = '';
COMPRESS: Byte = 0;
EXTCOMP: String = '';
GPUMEM: Int64 = 0;
@ -140,31 +144,30 @@ var
I, J: Integer;
S: string;
begin
WriteLn(ErrOutput, 'precomp - data precompressor');
WriteLn(ErrOutput, '');
WriteLn(ErrOutput, 'Usage:');
WriteLn(ErrOutput, ' xtool precomp [parameters] input output');
WriteLn(ErrOutput, '');
WriteLn(ErrOutput, '');
WriteLn(ErrOutput, 'Parameters:');
WriteLn(ErrOutput,
WriteLine('precomp - data precompressor');
WriteLine('');
WriteLine('Usage:');
WriteLine(' xtool precomp [parameters] input output');
WriteLine('');
WriteLine('');
WriteLine('Parameters:');
WriteLine(
' -m# - codecs to use for precompression (separate with "+" if more than one)');
WriteLn(ErrOutput, ' -c# - scanning range of precompressor [16mb]');
WriteLn(ErrOutput, ' -t# - number of working threads [50p]');
WriteLn(ErrOutput, ' -d# - scan depth [0]');
WriteLn(ErrOutput, ' -dd - use stream deduplication');
WriteLn(ErrOutput,
WriteLine(' -c# - scanning range of precompressor [16mb]');
WriteLine(' -t# - number of working threads [50p]');
WriteLine(' -d# - scan depth [0]');
WriteLine(' -dd - use stream deduplication');
WriteLine(
' -l# - compress data using fast lzma2 (separate params with ":")');
WriteLn(ErrOutput, ' d# - dictionary size');
WriteLn(ErrOutput, ' -lm - low memory mode');
WriteLn(ErrOutput, ' -s - skip stream verification');
WriteLn(ErrOutput, ' -v - enables verbose');
WriteLn(ErrOutput, ' -df# - set xdelta threshold to accept streams [5p]');
WriteLn(ErrOutput, ' -x# - extract streams to directory path');
WriteLn(ErrOutput,
' -dm# - deduplication memory usage limit (#=size) [75p]');
WriteLn(ErrOutput, ' -sm# - srep memory usage limit (#=size) [75p]');
WriteLn(ErrOutput, '');
WriteLine(' d# - dictionary size');
WriteLine(' -lm - low memory mode');
WriteLine(' -s - skip stream verification');
WriteLine(' -v - enables verbose');
WriteLine(' -df# - set xdelta threshold to accept streams [5p]');
WriteLine(' -x# - extract streams to directory path');
WriteLine(' -dm# - deduplication memory usage limit (#=size) [75p]');
WriteLine(' -sm# - srep memory usage limit (#=size) [75p]');
WriteLine('');
end;
procedure Parse(ParamArg: TArray<string>; out Options: TEncodeOptions);
@ -211,6 +214,8 @@ begin
S := ReplaceText(S, 'K', '* 1024^1');
S := ReplaceText(S, 'M', '* 1024^2');
S := ReplaceText(S, 'G', '* 1024^3');
if GPUMEM > MEM_LIMIT then
GPUMEM := MEM_LIMIT;
Options.ChunkSize := EnsureRange(Round(ExpParse.Evaluate(S)),
4 * 1024 * 1024, 2047 * 1024 * 1024);
S := ArgParse.AsString('-t', 0, '50p');
@ -304,6 +309,8 @@ begin
EXTCOMP := ArgParse.AsString('-e');
if FileExists(ExpandPath(PluginsPath + ExtractExec(EXTCOMP), True)) then
COMPRESS := 2;
REPROCESS := ReplaceStr(ArgParse.AsString('-r'), SPrecompSep3,
SPrecompSep2);
finally
ArgParse.Free;
ExpParse.Free;
@ -528,11 +535,11 @@ begin
S := '(%d >> %d)';
if (OutSize > 0) and (Position < DataStore.Size(0)) and
(MemOutput1[0].Position - CurPos1[0] = OutSize) then
WriteLn(ErrOutput, Format('[%d] Actual %s stream found at %s ' + S,
WriteLine(Format('[%d] Actual %s stream found at %s ' + S,
[CurDepth[0], Codec, (DataStore.Position(0) + Position).ToHexString,
InSize, OutSize]))
else
WriteLn(ErrOutput, Format('[%d] Possible %s stream located at %s ' + S,
WriteLine(Format('[%d] Possible %s stream located at %s ' + S,
[CurDepth[0], Codec, (DataStore.Position(0) + Position).ToHexString,
InSize, OutSize]));
end;
@ -548,8 +555,8 @@ begin
S := '(%d)'
else
S := '(%d >> %d)';
WriteLn(ErrOutput, Format('[%d] Confirmed %s stream at %s ' + S,
[CurDepth[0], Codec, LogInt64.ToHexString, InSize, OutSize]));
WriteLine(Format('[%d] Confirmed %s stream at %s ' + S, [CurDepth[0], Codec,
LogInt64.ToHexString, InSize, OutSize]));
end;
procedure PrecompLogProcess(Codec, Method: PChar; Size1, Size2, Size3: Integer;
@ -573,8 +580,8 @@ begin
S2 := '[%d] Processing %s stream at %s ' + S1 +
IfThen(String(Method) <> '', ' using ' + String(Method), '') +
' has failed';
WriteLn(ErrOutput, Format(S2, [CurDepth[0], Codec, LogInt64.ToHexString,
Size1, Size2, Size3]));
WriteLine(Format(S2, [CurDepth[0], Codec, LogInt64.ToHexString, Size1,
Size2, Size3]));
end;
if EXTRACT and (CurDepth[0] = 0) then
begin
@ -608,8 +615,8 @@ begin
else
S2 := '[%d] Restoring %s stream at %s ' + S1 + IfThen(String(Method) <> '',
' using ' + String(Method), '') + ' has failed';
WriteLn(ErrOutput, Format(S2, [CurDepth[0], Codec, LogInt64.ToHexString,
Size1, Size2, Size3]));
WriteLine(Format(S2, [CurDepth[0], Codec, LogInt64.ToHexString, Size1,
Size2, Size3]));
end;
procedure PrecompLogPatch1(OldSize, NewSize, PatchSize: Integer;
@ -623,8 +630,8 @@ begin
S := '[%d] - Patched stream at %s (%d >> %d) [%d] successfully'
else
S := '[%d] - Patching stream at %s (%d >> %d) [%d] has failed';
WriteLn(ErrOutput, Format(S, [CurDepth[0], LogInt64.ToHexString, OldSize,
NewSize, PatchSize]));
WriteLine(Format(S, [CurDepth[0], LogInt64.ToHexString, OldSize, NewSize,
PatchSize]));
end;
procedure PrecompLogPatch2(OldSize, NewSize, PatchSize: Integer;
@ -638,8 +645,44 @@ begin
S := '[%d] - Patched stream at %s (%d >> %d) [%d] successfully'
else
S := '[%d] - Patching stream at %s (%d >> %d) [%d] has failed';
WriteLn(ErrOutput, Format(S, [CurDepth[0], LogInt64.ToHexString, OldSize,
NewSize, PatchSize]));
WriteLine(Format(S, [CurDepth[0], LogInt64.ToHexString, OldSize, NewSize,
PatchSize]));
end;
procedure PrecompLogReprocess(Method: PChar; Size1, Size2, Size3: Integer;
Status: Boolean);
var
S1, S2: String;
begin
if VERBOSE then
begin
if Size2 < 0 then
S1 := '(%d)'
else if Size3 < 0 then
S1 := '(%d >> %d)'
else
S1 := '(%d >> %d >> %d)';
if Status then
S2 := '[%d] Reprocessed stream at %s ' + S1 + IfThen(String(Method) <> '',
' using ' + String(Method), '') + ' successfully'
else
S2 := '[%d] Reprocessing stream at %s ' + S1 +
IfThen(String(Method) <> '', ' using ' + String(Method), '') +
' has failed';
WriteLine(Format(S2, [CurDepth[0], LogInt64.ToHexString, Size1,
Size2, Size3]));
end;
if EXTRACT and (CurDepth[0] = 0) then
begin
S1 := '%s_%s.raw';
with TFileStream.Create(ExtDir + Format(S1, [LogInt64.ToHexString]),
fmCreate) do
try
WriteBuffer(LogPtr^, Size1);
finally
Free;
end;
end;
end;
procedure PrecompOutput1(Instance: Integer; const Buffer: Pointer;
@ -1087,6 +1130,36 @@ var
LValid: Boolean;
LCodec: Byte;
LOption: Integer;
function Reproc(Method: String): Boolean;
var
Buffer: Pointer;
Res: Integer;
begin
Result := False;
with ComVars1[Depth] do
begin
Buffer := PrecompAllocator(ThreadIndex, SI1.NewSize);
Res := PrecompCompress(PChar(Method),
PByte(MemOutput1[ThreadIndex].Memory) + SI2.StorePosition, SI1.NewSize,
Buffer, SI1.NewSize, nil, 0);
if (Res > 0) and (Res < SI1.OldSize) then
begin
ThreadSync[ThreadIndex].Acquire;
try
Move(Buffer^, (PByte(DataStore.Slot(ThreadIndex).Memory) +
SI2.ActualPosition)^, Res);
FillChar((PByte(DataStore.Slot(ThreadIndex).Memory) +
SI2.ActualPosition + Res)^, SI1.OldSize - Res, 0);
Result := True;
finally
ThreadSync[ThreadIndex].Release;
end;
end;
PrecompLogReprocess(PChar(Method), SI1.OldSize, SI1.NewSize, Res, Result);
end;
end;
begin
Result := False;
with ComVars1[Depth] do
@ -1119,6 +1192,12 @@ begin
try
if NOVERIFY and not(SI2.Codec in [5]) then
Result := True
else if (REPROCESS <> '') and not(SI2.Codec in [5]) then
begin
Result := False;
if Reproc(REPROCESS) then
AtomicIncrement(EncInfo.Processed);
end
else
Result := Codecs[SI2.Codec].Process(Index, Depth,
PByte(DataStore.Slot(ThreadIndex).Memory) + SI2.ActualPosition,
@ -1296,14 +1375,13 @@ begin
if InRange(Y, Low(InfoStore1), High(InfoStore1)) then
begin
if VERBOSE then
WriteLn(ErrOutput,
Format('[%d] Performing scan from block %s to %s (%d)',
WriteLine(Format('[%d] Performing scan from block %s to %s (%d)',
[W, DataStore.Position(0).ToHexString,
(DataStore.Position(0) + Pred(DataStore.Size(0))).ToHexString,
DataStore.Size(0)]));
Scan1(Y, W);
if VERBOSE then
WriteLn(ErrOutput, '');
WriteLine('');
if W = 0 then
begin
Scanned1[Y] := True;
@ -1334,8 +1412,7 @@ begin
else
Z := Y;
if VERBOSE and (InfoStore1[Z].Count > 0) then
WriteLn(ErrOutput,
Format('[%d] Processing streams on block %s to %s (%d)',
WriteLine(Format('[%d] Processing streams on block %s to %s (%d)',
[W, DataStore.Position(0).ToHexString,
(DataStore.Position(0) + Pred(DataStore.Size(0))).ToHexString,
DataStore.Size(0)]));
@ -1362,7 +1439,7 @@ begin
while not BoolArray(Helping, False) do
Sleep(10);
if VERBOSE and (InfoStore1[Z].Count > 0) then
WriteLn(ErrOutput, '');
WriteLine('');
if W = 0 then
begin
if Z < -1 then
@ -1392,7 +1469,8 @@ begin
for I := Low(ThreadSync) to High(ThreadSync) do
ThreadSync[I] := TCriticalSection.Create;
I := XTOOL_PRECOMP;
Output.WriteBuffer(I, I.Size);
if REPROCESS = '' then
Output.WriteBuffer(I, I.Size);
if UseDB then
begin
SetLength(DBInfo, $10000);
@ -1505,7 +1583,8 @@ begin
end;
end;
ExtDir := IncludeTrailingBackSlash(Options^.ExtractDir);
Output.WriteBuffer(Options^.Depth, Options^.Depth.Size);
if REPROCESS = '' then
Output.WriteBuffer(Options^.Depth, Options^.Depth.Size);
DoScan2 := True;
for J := 0 to ExternalMethods.Count - 1 do
begin
@ -1558,23 +1637,26 @@ begin
else
S := S + SPrecompSep1 + ExternalMethods[J];
end;
Bytes := BytesOf(S);
B := Length(Bytes);
Output.WriteBuffer(B, B.Size);
Output.WriteBuffer(Bytes[0], B);
I := Length(Resources);
Output.WriteBuffer(I, I.Size);
for J := Low(Resources) to High(Resources) do
if REPROCESS = '' then
begin
Bytes := BytesOf(Resources[J].Name);
Bytes := BytesOf(S);
B := Length(Bytes);
Output.WriteBuffer(B, B.Size);
Output.WriteBuffer(Bytes[0], B);
Output.WriteBuffer(Resources[J].Size, Resources[J].Size.Size);
Output.WriteBuffer(Resources[J].Data^, Resources[J].Size);
I := Length(Resources);
Output.WriteBuffer(I, I.Size);
for J := Low(Resources) to High(Resources) do
begin
Bytes := BytesOf(Resources[J].Name);
B := Length(Bytes);
Output.WriteBuffer(B, B.Size);
Output.WriteBuffer(Bytes[0], B);
Output.WriteBuffer(Resources[J].Size, Resources[J].Size.Size);
Output.WriteBuffer(Resources[J].Data^, Resources[J].Size);
end;
ResCount := Length(Resources);
Output.WriteBuffer(StoreDD, StoreDD.Size);
end;
ResCount := Length(Resources);
Output.WriteBuffer(StoreDD, StoreDD.Size);
end;
procedure EncFree;
@ -1721,8 +1803,7 @@ begin
'-dd.tmp')), fmCreate or fmShareDenyNone), False, XTOOL_BSIZE)
else
LOutput := Output;
TempOutput := TBufferedStream.Create(TCacheWriteStream.Create(LOutput,
LCache), False, XTOOL_BSIZE);
TempOutput := TCacheWriteStream.Create(LOutput, LCache, True, ccZSTD);
end
else
TempOutput := Output;
@ -1882,8 +1963,11 @@ begin
MemStream[I].Position := 0;
MemStream[I].WriteBuffer(StreamCount, StreamCount.Size);
MemStream[I].WriteBuffer(BlockSize, BlockSize.Size);
SaveResources;
TempOutput.WriteBuffer(MemStream[I].Memory^, I64);
if REPROCESS = '' then
begin
SaveResources;
TempOutput.WriteBuffer(MemStream[I].Memory^, I64);
end;
if Depth = 0 then
Inc(EncInfo.InflSize, I64);
InfoStore1[I].Index := LastIndex;
@ -1950,7 +2034,8 @@ begin
UI32 := Max(DataStore.Size(I) - LastPos, 0)
else
UI32 := 0;
TempOutput.WriteBuffer(UI32, UI32.Size);
if REPROCESS = '' then
TempOutput.WriteBuffer(UI32, UI32.Size);
if UI32 > 0 then
TempOutput.WriteBuffer
((PByte(DataStore.Slot(I).Memory) + LastPos)^, UI32);
@ -1958,6 +2043,9 @@ begin
Inc(EncInfo.InflSize, UI32 + UI32.Size);
until LastIndex = InfoStore1[I].Count;
LastStream := Max(LastStream - DataStore.Size(I), 0);
if Depth = 0 then
EncInfo.CachedUsed := TCacheWriteStream(TempOutput)
.Cached(@EncInfo.CachedComp);
if Depth = 0 then
if I > 0 then
TDataStore1(DataStore).LoadEx;
@ -1972,11 +2060,18 @@ begin
else
break;
end;
SaveResources;
StreamCount := StreamCount.MinValue;
TempOutput.WriteBuffer(StreamCount, StreamCount.Size);
if REPROCESS = '' then
begin
SaveResources;
StreamCount := StreamCount.MinValue;
TempOutput.WriteBuffer(StreamCount, StreamCount.Size);
end;
if Depth = 0 then
begin
Inc(EncInfo.InflSize, StreamCount.Size);
EncInfo.CachedUsed := TCacheWriteStream(TempOutput)
.Cached(@EncInfo.CachedComp);
end;
end;
if Depth = 0 then
begin
@ -2148,6 +2243,8 @@ begin
Result := Max(0, Abs(DupSysMem) - GetUsedProcessMemory(GetCurrentProcess))
else
Result := Max(0, DupSysMem - GetUsedSystemMemory);
if Result > MEM_LIMIT then
Result := MEM_LIMIT;
end;
var
@ -2531,12 +2628,10 @@ begin
True), '-d -s -mem' + SrepMemCfg + ' - -', GetCurrentDir, Input, nil);
if not LStream.Execute then
raise EReadError.CreateRes(@SReadError);
DecInput[Index] := TBufferedStream.Create(TCacheReadStream.Create(LStream,
LCache), True, XTOOL_BSIZE);
DecInput[Index] := TCacheReadStream.Create(LStream, LCache, True, ccZSTD);
end
else if Depth = 0 then
DecInput[Index] := TBufferedStream.Create(TCacheReadStream.Create(Input,
LCache), True, XTOOL_BSIZE)
DecInput[Index] := TCacheReadStream.Create(Input, LCache, True, ccZSTD)
else
DecInput[Index] := Input;
DecOutput[Index] := Output;
@ -2681,7 +2776,7 @@ var
procedure Update;
var
I: Integer;
I, J: Integer;
TS: TTimeSpan;
CreationTime, ExitTime, KernelTime, UserTime: TFileTime;
TT: TSystemTime;
@ -2690,10 +2785,19 @@ var
GetProcessTimes(GetCurrentProcess, CreationTime, ExitTime, KernelTime,
UserTime);
FileTimeToSystemTime(TFileTime(Int64(UserTime) + Int64(KernelTime)), TT);
SL[0] := 'Streams: ' + EncInfo.Processed.ToString + ' / ' +
if GPUMEM > 0 then
begin
SL[0] := GPUName + ' (' + ConvertKB2TB(EncInfo.CachedUsed div 1024) + ') '
+ IfThen(EncInfo.CachedComp > 0,
'[' + ConvertKB2TB(EncInfo.CachedComp div 1024) + ']', '') + ' ';
I := 1;
end
else
I := 0;
SL[I] := 'Streams: ' + EncInfo.Processed.ToString + ' / ' +
EncInfo.Count.ToString;
TS := Stopwatch.Elapsed;
SL[1] := 'Time: ' + Format('%0:.2d:%1:.2d:%2:.2d',
SL[I + 1] := 'Time: ' + Format('%0:.2d:%1:.2d:%2:.2d',
[TS.Hours + TS.Days * 24, TS.Minutes, TS.Seconds]) + ' (CPU ' +
Format('%0:.2d:%1:.2d:%2:.2d', [TT.wHour + Pred(TT.wDay) * 24, TT.wMinute,
TT.wSecond]) + ')';
@ -2701,23 +2805,23 @@ var
I64 := I64 div 1024;
if StoreDD > -2 then
begin
I := 4;
SL[2] := 'Duplicates: ' + EncInfo.DupCount.ToString + ' (' +
J := I + 4;
SL[I + 2] := 'Duplicates: ' + EncInfo.DupCount.ToString + ' (' +
ConvertKB2TB(EncInfo.DecMem2 div 1024) + ') [' +
ConvertKB2TB(EncInfo.DupSize1 div 1024) + ' >> ' +
ConvertKB2TB(EncInfo.DupSize2 div 1024) + '] ';
if StoreDD > 0 then
begin
I := 5;
SL[3] := 'Srep decompression memory: ' +
J := I + 5;
SL[I + 3] := 'Srep decompression memory: ' +
ConvertKB2TB(EncInfo.SrepMem * 1024) + ' [' +
ConvertKB2TB((EncInfo.SrepMem * 1024) + (EncInfo.DecMem3 div 1024)) +
IfThen(EncInfo.DecMem3 > 0, '*', '') + '] ';
end;
end
else
I := 3;
SL[I] := 'Size: ' + ConvertKB2TB(EncInfo.InSize div 1024) +
J := I + 3;
SL[J] := 'Size: ' + ConvertKB2TB(EncInfo.InSize div 1024) +
IfThen(StoreDD > -2,
' >> ' + ConvertKB2TB((EncInfo.InflSize + EncInfo.DupSize2) div 1024), '')
+ ' >> ' + ConvertKB2TB(EncInfo.InflSize div 1024) +
@ -2734,6 +2838,8 @@ begin
Coords.X := 0;
Coords.Y := SBInfo.dwCursorPosition.Y;
SL := TStringList.Create;
if GPUMEM > 0 then
SL.Add('Streams: 0 / 0');
SL.Add('Streams: 0 / 0');
SL.Add('Time: 00:00:00');
if StoreDD > -2 then
@ -2817,9 +2923,6 @@ begin
NULLOUT := TBufferedStream(Output).Instance is TNullStream;
FillChar(EncInfo, SizeOf(EncInfo), 0);
ConTask := TTask.Create;
if GPUMEM > 0 then
WriteLn(ErrOutput, GPUName + ' (' + ConvertKB2TB(GPUMEM div 1024) +
' loaded)');
Stopwatch := TStopwatch.Create;
Stopwatch.Start;
ConTask.Perform(EncodeStats);
@ -2828,7 +2931,8 @@ begin
try
EncInit(LInput, Output, @Options);
Compressed := COMPRESS;
Output.WriteBuffer(Compressed, Compressed.Size);
if REPROCESS = '' then
Output.WriteBuffer(Compressed, Compressed.Size);
if COMPRESS > 0 then
begin
case COMPRESS of
@ -2901,8 +3005,7 @@ begin
FillChar(EncInfo, SizeOf(EncInfo), 0);
ConTask := TTask.Create;
if GPUMEM > 0 then
WriteLn(ErrOutput, GPUName + ' (' + ConvertKB2TB(GPUMEM div 1024) +
' loaded)');
WriteLine(GPUName + ' (' + ConvertKB2TB(GPUMEM div 1024) + ')');
Stopwatch := TStopwatch.Create;
Stopwatch.Start;
ConTask.Perform(DecodeStats);

View File

@ -201,9 +201,9 @@ type
end;
_PrecompOutput = procedure(Instance: Integer; const Buffer: Pointer;
Size: Integer);
Size: Integer)cdecl;
_PrecompAdd = procedure(Instance: Integer; Info: PStrInfo1; Codec: PChar;
DepthInfo: PDepthInfo);
DepthInfo: PDepthInfo)cdecl;
_PrecompInit = function(Command: PChar; Count: Integer;
Funcs: PPrecompFuncs): Boolean;
@ -476,7 +476,7 @@ begin
FSuffix1));
if FileExists(FFilename) then
DeleteFile(FFilename);
{$IFDEF WIN32}
{$IFDEF CPU32BITS}
FStream := TFileStream.Create(FFilename, fmCreate);
{$ELSE}
FStream := TSharedMemoryStream.Create

View File

@ -46,6 +46,8 @@ uses
OpenCL in 'common\OpenCL.pas',
Threading in 'common\Threading.pas',
Utils in 'common\Utils.pas',
libc in 'contrib\LIBC\libc.pas',
lz4lib in 'contrib\LZ4Delphi\lz4lib.pas',
FuncHook in 'contrib\Delphi_MemoryModule\FuncHook.pas',
MemoryModule in 'contrib\Delphi_MemoryModule\MemoryModule.pas',
MemoryModuleHook in 'contrib\Delphi_MemoryModule\MemoryModuleHook.pas',
@ -57,6 +59,7 @@ uses
ParseClass in 'contrib\ParseExpression\ParseClass.pas',
ParseExpr in 'contrib\ParseExpression\ParseExpr.pas',
XXHASHLIB in 'contrib\XXHASH4Delphi\XXHASHLIB.pas',
ZSTDLib in 'contrib\ZSTD4Delphi\ZSTDLib.pas',
InitCode in 'InitCode.pas',
BrunsliDLL in 'imports\BrunsliDLL.pas',
FLACDLL in 'imports\FLACDLL.pas',
@ -262,18 +265,33 @@ begin
end;
var
MS: TMemoryStream;
I64: Int64;
MS, MS2: TMemoryStream;
GS: TGPUMemoryStream;
FS: TFileStream;
begin
{ MS := TMemoryStream.Create;
MS.LoadFromFile('1.mp4');
FS := TFileStream.Create('2.mp4', fmCreate);
GS := TGPUMemoryStream.Create(60 * 1024 * 1024);
GS.Size := 60 * 1024 * 1024;
with TCacheWriteStream.Create(FS, GS) do
MS.LoadFromFile('UI.sb');
MS2 := TMemoryStream.Create;
MS2.Size := MS.Size;
GS := TGPUMemoryStream.Create(3 * 1024 * 1024);
GS.Size := 3 * 1024 * 1024;
with TCacheReadStream.Create(MS, GS, True, ccLZ4) do
begin
ReadBuffer(MS2.Memory^, MS2.Size);
Free;
end;
FS.Free;
MS2.SaveToFile('UI2.sb');
ShowMessage('');
exit;
MS := TMemoryStream.Create;
MS.LoadFromFile('UI.sb');
FS := TFileStream.Create('UI.sb2', fmCreate);
GS := TGPUMemoryStream.Create(5 * 1024 * 1024);
GS.Size := 5 * 1024 * 1024;
with TCacheWriteStream.Create(FS, GS, True, ccLZ4) do
begin
WriteBuffer(MS.Memory^, MS.Size);
Free;

View File

@ -6,13 +6,18 @@
<MainSource>xtool.dpr</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Release</Config>
<Platform Condition="'$(Platform)'==''">Win64</Platform>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>3</TargetedPlatforms>
<AppType>Console</AppType>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Linux64' and '$(Base)'=='true') or '$(Base_Linux64)'!=''">
<Base_Linux64>true</Base_Linux64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
@ -51,6 +56,9 @@
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
<SanitizedProjectName>xtool</SanitizedProjectName>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Linux64)'!=''">
<DCC_UnitSearchPath>$(fmxlinux)\Lib\$(ProductVersion)\$(Config);$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;emsclientfiredac;DataSnapFireDAC;svnui;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;FireDACIBDriver;fmx;fmxdae;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;CEF4Delphi_FMX;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;emsserverresource;DbxClientDriver;FireDACDSDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
@ -84,6 +92,9 @@
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=0.0.0.0;InternalName=;LegalCopyright=Razor12911;LegalTrademarks=;OriginalFilename=xtool.exe;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=0.0.0.0;Comments=Created by Razor12911</VerInfo_Keys>
<VerInfo_MajorVer>0</VerInfo_MajorVer>
<DCC_PEOSVersion>5.1</DCC_PEOSVersion>
<DCC_PESubSysVersion>5.1</DCC_PESubSysVersion>
<AppDPIAwarenessMode>none</AppDPIAwarenessMode>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
<DCC_DcuOutput>.\$(Platform)\DCUs</DCC_DcuOutput>
@ -93,6 +104,8 @@
<VerInfo_MajorVer>0</VerInfo_MajorVer>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=0.0.0.0;InternalName=;LegalCopyright=Razor12911;LegalTrademarks=;OriginalFilename=xtool.exe;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=0.0.0.0;Comments=Created by Razor12911</VerInfo_Keys>
<AppDPIAwarenessMode>none</AppDPIAwarenessMode>
<DCC_PEOSVersion>5.1</DCC_PEOSVersion>
<DCC_PESubSysVersion>5.1</DCC_PESubSysVersion>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
@ -104,6 +117,8 @@
<DCCReference Include="common\OpenCL.pas"/>
<DCCReference Include="common\Threading.pas"/>
<DCCReference Include="common\Utils.pas"/>
<DCCReference Include="contrib\LIBC\libc.pas"/>
<DCCReference Include="contrib\LZ4Delphi\lz4lib.pas"/>
<DCCReference Include="contrib\Delphi_MemoryModule\FuncHook.pas"/>
<DCCReference Include="contrib\Delphi_MemoryModule\MemoryModule.pas"/>
<DCCReference Include="contrib\Delphi_MemoryModule\MemoryModuleHook.pas"/>
@ -115,6 +130,7 @@
<DCCReference Include="contrib\ParseExpression\ParseClass.pas"/>
<DCCReference Include="contrib\ParseExpression\ParseExpr.pas"/>
<DCCReference Include="contrib\XXHASH4Delphi\XXHASHLIB.pas"/>
<DCCReference Include="contrib\ZSTD4Delphi\ZSTDLib.pas"/>
<DCCReference Include="InitCode.pas"/>
<DCCReference Include="imports\BrunsliDLL.pas"/>
<DCCReference Include="imports\FLACDLL.pas"/>
@ -194,6 +210,20 @@
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="Win32\Release\xtool.exe" Configuration="Release" Class="ProjectOutput"/>
<DeployFile LocalName="Win32\Release\xtool.exe" Configuration="Release" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>xtool.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="Win64\Release\xtool.exe" Configuration="Release" Class="ProjectOutput"/>
<DeployFile LocalName="Win64\Release\xtool.exe" Configuration="Release" Class="ProjectOutput">
<Platform Name="Win64">
<RemoteName>xtool.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="changes.txt" Configuration="Release" Class="ProjectFile"/>
<DeployFile LocalName="changes.txt" Configuration="Release" Class="ProjectFile">
<Platform Name="Win32">
@ -213,20 +243,6 @@
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="Win32\Release\xtool.exe" Configuration="Release" Class="ProjectOutput"/>
<DeployFile LocalName="Win32\Release\xtool.exe" Configuration="Release" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>xtool.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="Win64\Release\xtool.exe" Configuration="Release" Class="ProjectOutput"/>
<DeployFile LocalName="Win64\Release\xtool.exe" Configuration="Release" Class="ProjectOutput">
<Platform Name="Win64">
<RemoteName>xtool.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
@ -647,6 +663,197 @@
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectAndroidManifest">
<Platform Name="Android">
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXDebug">
<Platform Name="OSX64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXEntitlements">
<Platform Name="OSX32">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXInfoPList">
<Platform Name="OSX32">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="ProjectOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
<Platform Name="Linux64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOutput_Android32">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectUWPManifest">
<Platform Name="Win32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceDebug">
<Platform Name="iOSDevice32">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSEntitlements">
<Platform Name="iOSDevice32">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSInfoPList">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSLaunchScreen">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir>
<Operation>64</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir>
<Operation>64</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSResource">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo150">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo44">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iOS_AppStore1024">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
@ -847,197 +1054,6 @@
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectAndroidManifest">
<Platform Name="Android">
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceDebug">
<Platform Name="iOSDevice32">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSEntitlements">
<Platform Name="iOSDevice32">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSInfoPList">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSLaunchScreen">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir>
<Operation>64</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir>
<Operation>64</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSResource">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXDebug">
<Platform Name="OSX64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXEntitlements">
<Platform Name="OSX32">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXInfoPList">
<Platform Name="OSX32">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="ProjectOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
<Platform Name="Linux64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOutput_Android32">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectUWPManifest">
<Platform Name="Win32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo150">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo44">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
@ -1052,6 +1068,7 @@
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
</Deployment>
<Platforms>
<Platform value="Linux64">False</Platform>
<Platform value="Win32">True</Platform>
<Platform value="Win64">True</Platform>
</Platforms>

BIN
xtool.res

Binary file not shown.

View File

@ -87,10 +87,11 @@ begin
Funcs^.IsPackJPGLoaded or Funcs^.IsJoJpegLoaded;
Form2.RadioButton1.Enabled := Funcs^.IsBrunsliLoaded;
Form2.RadioButton2.Enabled := Funcs^.IsPackJPGLoaded;
Form2.RadioButton3.Enabled := Funcs^.IsJoJpegLoaded;
Form1.GroupBox5.Enabled := Funcs^.IsLZMALoaded; }
Form2.RadioButton3.Enabled := Funcs^.IsJoJpegLoaded; }
Form1.GroupBox5.Enabled := Funcs^.IsLZMALoaded;
if not Funcs^.IsSrepAvailable then
Form1.ComboBox5.Items.Delete(2);
Form1.ComboBox5.ItemIndex := 0;
for I := Low(Methods) to High(Methods) do
begin
case Methods[I].FType of

View File

@ -5,7 +5,7 @@
<FrameworkType>FMX</FrameworkType>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Release</Config>
<Platform Condition="'$(Platform)'==''">Win64</Platform>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>3</TargetedPlatforms>
<AppType>Library</AppType>
<MainSource>xtoolui.dpr</MainSource>
@ -82,6 +82,8 @@
<AppDPIAwarenessMode>none</AppDPIAwarenessMode>
<VerInfo_MajorVer>0</VerInfo_MajorVer>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=0.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=xtoolui.dll;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=0.0.0.0;Comments=Created by Razor12911</VerInfo_Keys>
<DCC_PEOSVersion>5.1</DCC_PEOSVersion>
<DCC_PESubSysVersion>5.1</DCC_PESubSysVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
<DCC_DcuOutput>.\$(Platform)\DCUs</DCC_DcuOutput>
@ -92,6 +94,8 @@
<VerInfo_MajorVer>0</VerInfo_MajorVer>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=0.0.0.0;InternalName=;LegalCopyright=Razor12911;LegalTrademarks=;OriginalFilename=xtooui.dll;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=0.0.0.0;Comments=Created by Razor12911</VerInfo_Keys>
<Debugger_HostApplication>Win64\Release\xtool.exe</Debugger_HostApplication>
<DCC_PEOSVersion>5.1</DCC_PEOSVersion>
<DCC_PESubSysVersion>5.1</DCC_PESubSysVersion>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
@ -572,6 +576,197 @@
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectAndroidManifest">
<Platform Name="Android">
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXDebug">
<Platform Name="OSX64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXEntitlements">
<Platform Name="OSX32">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXInfoPList">
<Platform Name="OSX32">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="ProjectOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
<Platform Name="Linux64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOutput_Android32">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectUWPManifest">
<Platform Name="Win32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceDebug">
<Platform Name="iOSDevice32">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSEntitlements">
<Platform Name="iOSDevice32">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSInfoPList">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSLaunchScreen">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir>
<Operation>64</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir>
<Operation>64</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSResource">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo150">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo44">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iOS_AppStore1024">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
@ -772,197 +967,6 @@
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectAndroidManifest">
<Platform Name="Android">
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceDebug">
<Platform Name="iOSDevice32">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSEntitlements">
<Platform Name="iOSDevice32">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSInfoPList">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSLaunchScreen">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir>
<Operation>64</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir>
<Operation>64</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSResource">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXDebug">
<Platform Name="OSX64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXEntitlements">
<Platform Name="OSX32">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXInfoPList">
<Platform Name="OSX32">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="ProjectOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
<Platform Name="Linux64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOutput_Android32">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectUWPManifest">
<Platform Name="Win32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo150">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo44">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
@ -976,6 +980,7 @@
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
</Deployment>
<Platforms>
<Platform value="Linux64">False</Platform>
<Platform value="Win32">True</Platform>
<Platform value="Win64">True</Platform>
</Platforms>

Binary file not shown.