xtool/cls_xtool.dpr

137 lines
4.2 KiB
ObjectPascal

library cls_xtool;
{$R *.res}
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
{$DEFINE UseFastMM}
uses
{$IFDEF UseFastMM}
FastMM4 in 'contrib\FastMM4-AVX\FastMM4.pas',
FastMM4Messages in 'contrib\FastMM4-AVX\FastMM4Messages.pas',
{$ENDIF }
WinAPI.Windows,
System.SysUtils,
System.StrUtils,
System.Classes,
System.Types,
System.Math,
System.IOUtils,
System.SyncObjs,
CLS in 'common\CLS.pas',
DStorage in 'common\DStorage.pas',
LibImport in 'common\LibImport.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',
SynCommons in 'contrib\mORMot\SynCommons.pas',
SynCrypto in 'contrib\mORMot\SynCrypto.pas',
SynLZ in 'contrib\mORMot\SynLZ.pas',
SynTable in 'contrib\mORMot\SynTable.pas',
oObjects in 'contrib\ParseExpression\oObjects.pas',
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',
FLZMA2DLL in 'imports\FLZMA2DLL.pas',
JoJpegDLL in 'imports\JoJpegDLL.pas',
LZ4DLL in 'imports\LZ4DLL.pas',
LZODLL in 'imports\LZODLL.pas',
OodleDLL in 'imports\OodleDLL.pas',
PackJPGDLL in 'imports\PackJPGDLL.pas',
PreflateDLL in 'imports\PreflateDLL.pas',
ReflateDLL in 'imports\ReflateDLL.pas',
ZLibDLL in 'imports\ZLibDLL.pas',
ZSTDDLL in 'imports\ZSTDDLL.pas',
lz4 in 'sources\lz4.pas',
PrecompMain in 'precompressor\PrecompMain.pas',
PrecompUtils in 'precompressor\PrecompUtils.pas',
PrecompCrypto in 'precompressor\PrecompCrypto.pas',
PrecompZLib in 'precompressor\PrecompZLib.pas',
PrecompLZ4 in 'precompressor\PrecompLZ4.pas',
PrecompLZO in 'precompressor\PrecompLZO.pas',
PrecompZSTD in 'precompressor\PrecompZSTD.pas',
PrecompMedia in 'precompressor\PrecompMedia.pas',
PrecompOodle in 'precompressor\PrecompOodle.pas',
PrecompINI in 'precompressor\PrecompINI.pas',
PrecompINIEx in 'precompressor\PrecompINIEx.pas',
PrecompSearch in 'precompressor\PrecompSearch.pas',
PrecompDLL in 'precompressor\PrecompDLL.pas',
PrecompEXE in 'precompressor\PrecompEXE.pas',
PrecompDStorage in 'precompressor\PrecompDStorage.pas';
{$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE}
function ClsMain(operation: Integer; Callback: CLS_CALLBACK; Instance: Pointer)
: Integer cdecl;
const
BufferSize = 1048576;
var
CLS: TCLSStream;
PrecompEnc: PrecompMain.TEncodeOptions;
PrecompDec: PrecompMain.TDecodeOptions;
I: Integer;
Str: array [0 .. 255] of AnsiChar;
StrArray: TArray<String>;
begin
Result := CLS_ERROR_GENERAL;
case (operation) of
CLS_COMPRESS:
begin
CLS := TCLSStream.Create(Callback, Instance);
try
FillChar(Str, Length(Str), 0);
Callback(Instance, CLS_GET_PARAMSTR, @Str[0], Length(Str));
StrArray := DecodeStr(String(Str), ':');
for I := Low(StrArray) to High(StrArray) do
StrArray[I] := '-' + StrArray[I];
PrecompMain.Parse(StrArray, PrecompEnc);
try
PrecompMain.Encode(CLS, CLS, PrecompEnc);
Result := CLS_OK;
except
Result := CLS_ERROR_GENERAL;
end;
finally
CLS.Free;
end;
end;
CLS_DECOMPRESS:
begin
CLS := TCLSStream.Create(Callback, Instance);
try
CLS.ReadBuffer(I, I.Size);
case I of
XTOOL_PRECOMP:
begin
PrecompMain.Parse(['-t100p'], PrecompDec);
try
PrecompMain.Decode(CLS, CLS, PrecompDec);
Result := CLS_OK;
except
Result := CLS_ERROR_GENERAL;
end;
end;
end;
finally
CLS.Free;
end;
end;
else
Result := CLS_ERROR_NOT_IMPLEMENTED;
end;
end;
exports ClsMain;
begin
end.