xtool/imports/LZODLL.pas

125 lines
3.8 KiB
ObjectPascal

unit LZODLL;
interface
uses
InitCode,
Utils, LibImport,
WinAPI.Windows,
System.SysUtils;
const
Success = 0;
GenericError = -1;
OutOfMemory = -2;
NotCompressible = -3;
InputOverrun = -4;
OutputOverrun = -5;
LookbehindOverrun = -6;
EndOfFileNotFound = -7;
InputNotConsumed = -8;
NotImplemented = -9;
InvalidArgument = -10;
type
lzo_free_func_t = procedure(self: Pointer; ptr: Pointer); cdecl;
lzo_alloc_func_t = function(self: Pointer; items, size: LongWord)
: Pointer; cdecl;
lzo_progress_func_t = procedure(self: Pointer; a, b: LongWord;
c: integer); cdecl;
lzo_callback_t = Record
nalloc: lzo_alloc_func_t;
nfree: lzo_free_func_t;
nprogress: lzo_progress_func_t;
user1: Pointer;
user2: LongWord;
user3: LongWord;
end;
var
lzo1x_1_compress: function(const src: Pointer; src_len: NativeUInt;
dst: Pointer; dst_len: PNativeUInt; wrkmem: Pointer): integer; cdecl;
lzo1x_1_11_compress: function(const src: Pointer; src_len: NativeUInt;
dst: Pointer; dst_len: PNativeUInt; wrkmem: Pointer): integer; cdecl;
lzo1x_1_12_compress: function(const src: Pointer; src_len: NativeUInt;
dst: Pointer; dst_len: PNativeUInt; wrkmem: Pointer): integer; cdecl;
lzo1x_1_15_compress: function(const src: Pointer; src_len: NativeUInt;
dst: Pointer; dst_len: PNativeUInt; wrkmem: Pointer): integer; cdecl;
lzo1x_999_compress: function(const src: Pointer; src_len: NativeUInt;
dst: Pointer; dst_len: PNativeUInt; wrkmem: Pointer): integer; cdecl;
lzo1x_999_compress_level: function(const src: Pointer; src_len: NativeUInt;
dst: Pointer; dst_len: PNativeUInt; wrkmem: Pointer; const dict: Pointer;
dict_len: Cardinal; cb: Pointer; compression_level: integer)
: integer; cdecl;
lzo1x_decompress_safe: function(const src: Pointer; src_len: NativeUInt;
dst: Pointer; dst_len: PNativeUInt): integer cdecl;
lzo1c_999_compress: function(const src: Pointer; src_len: NativeUInt;
dst: Pointer; dst_len: PNativeUInt; wrkmem: Pointer): integer; cdecl;
lzo1c_decompress_safe: function(const src: Pointer; src_len: NativeUInt;
dst: Pointer; dst_len: PNativeUInt): integer cdecl;
lzo2a_999_compress: function(const src: Pointer; src_len: NativeUInt;
dst: Pointer; dst_len: PNativeUInt; wrkmem: Pointer): integer; cdecl;
lzo2a_decompress_safe: function(const src: Pointer; src_len: NativeUInt;
dst: Pointer; dst_len: PNativeUInt): integer cdecl;
DLLLoaded: Boolean = False;
implementation
var
Lib: TLibImport;
procedure Init(Filename: String);
begin
Lib := TLibImport.Create;
Lib.LoadLib(ExpandPath(Filename, True));
if Lib.Loaded then
begin
@lzo1x_1_compress := Lib.GetProcAddr('lzo1x_1_compress');
@lzo1x_1_11_compress := Lib.GetProcAddr('lzo1x_1_11_compress');
@lzo1x_1_12_compress := Lib.GetProcAddr('lzo1x_1_12_compress');
@lzo1x_1_15_compress := Lib.GetProcAddr('lzo1x_1_15_compress');
@lzo1x_999_compress := Lib.GetProcAddr('lzo1x_999_compress');
@lzo1x_999_compress_level := Lib.GetProcAddr('lzo1x_999_compress_level');
@lzo1x_decompress_safe := Lib.GetProcAddr('lzo1x_decompress_safe');
@lzo1c_999_compress := Lib.GetProcAddr('lzo1c_999_compress');
@lzo1c_decompress_safe := Lib.GetProcAddr('lzo1c_decompress_safe');
@lzo2a_999_compress := Lib.GetProcAddr('lzo2a_999_compress');
@lzo2a_decompress_safe := Lib.GetProcAddr('lzo2a_decompress_safe');
DLLLoaded := Assigned(lzo1x_decompress_safe);
end;
end;
procedure Deinit;
begin
Lib.Free;
end;
const
DLLParam = '-lzo';
var
I: integer;
DLLFile: String;
initialization
DLLFile := PluginsPath + 'lzo2.dll';
for I := 1 to ParamCount do
begin
if ParamStr(I).StartsWith(DLLParam) then
begin
DLLFile := ParamStr(I).Substring(DLLParam.Length);
break;
end;
end;
Init(DLLFile);
finalization
Deinit;
end.