1398 lines
50 KiB
Plaintext
1398 lines
50 KiB
Plaintext
|
unit IdZLibHeaders;
|
||
|
|
||
|
{
|
||
|
zlibpas -- Pascal interface to the zlib data compression library
|
||
|
* Gabriel Corneanu (gabrielcorneanu(AT)yahoo.com)
|
||
|
Derived from original sources by Bob Dellaca and Cosmin Truta.
|
||
|
- TZStreamType
|
||
|
- deflateInitEx
|
||
|
- inflateInitEx
|
||
|
*}
|
||
|
{
|
||
|
JPM - note that I made dynamic loading for FreePascal (since that still may not
|
||
|
suppport external .obj files properly. It also makes it easier to support several
|
||
|
different platforms in one file.
|
||
|
}
|
||
|
|
||
|
interface
|
||
|
|
||
|
{$I IdCompilerDefines.inc}
|
||
|
|
||
|
{$WRITEABLECONST OFF}
|
||
|
{
|
||
|
TODO: Wait for Emb to decide how to approach ZLib for their 64-bit support
|
||
|
before we proceed at our end.
|
||
|
}
|
||
|
{$UNDEF STATICLOAD_ZLIB}
|
||
|
{$UNDEF STATIC_CDECL_PROCS}
|
||
|
{$IFDEF DCC}
|
||
|
{$IFDEF WIN32}
|
||
|
{
|
||
|
For Win32, we use some .obj files. These .objs were compiled from the ZLib
|
||
|
source-code folder with "make -f contrib\delphi\zlibd32.mak" using Borland's
|
||
|
"make" and "bcc32". The .objs are compiled with the
|
||
|
"-DZEXPORT=__fastcall -DZEXPORTVA=__cdecl" parameter. Do NOT change
|
||
|
the function calling conventions unless you know what you are doing and
|
||
|
the C++ objects are compiled appropriately.
|
||
|
|
||
|
The only things that still are cdecl are the callback functions.
|
||
|
}
|
||
|
{$IFNDEF BCB5_DUMMY_BUILD}
|
||
|
{$DEFINE STATICLOAD_ZLIB}
|
||
|
{$IFDEF VCL_XE2_OR_ABOVE}
|
||
|
{$DEFINE STATIC_CDECL_PROCS}
|
||
|
{$ENDIF}
|
||
|
{$ENDIF}
|
||
|
{$ALIGN OFF}
|
||
|
{$ENDIF}
|
||
|
{$IFDEF WIN64}
|
||
|
{$ALIGN ON}
|
||
|
{$MINENUMSIZE 4}
|
||
|
{$IFNDEF BCB5_DUMMY_BUILD}
|
||
|
{$DEFINE STATICLOAD_ZLIB}
|
||
|
{$ENDIF}
|
||
|
{$ENDIF}
|
||
|
{$ELSE}
|
||
|
{$packrecords C}
|
||
|
{$ENDIF}
|
||
|
|
||
|
uses
|
||
|
//reference off_t
|
||
|
{$IFDEF KYLIXCOMPAT}
|
||
|
libc,
|
||
|
{$ENDIF}
|
||
|
{$IFDEF USE_VCL_POSIX}
|
||
|
Posix.SysTypes,
|
||
|
{$ENDIF}
|
||
|
{$IFDEF USE_BASEUNIX}
|
||
|
baseunix,
|
||
|
{$ENDIF}
|
||
|
IdGlobal, IdCTypes
|
||
|
{$IFNDEF STATICLOAD_ZLIB}
|
||
|
, IdException
|
||
|
{$ENDIF};
|
||
|
|
||
|
{$IFDEF STATICLOAD_ZLIB}
|
||
|
(*$HPPEMIT '// For Win32, we use some .obj files. These .objs were compiled from the ZLib'*)
|
||
|
(*$HPPEMIT '// source-code folder with "make -f contrib\delphi\zlibd32.mak" using Borland's'*)
|
||
|
(*$HPPEMIT '// "make" and "bcc32". The .objs are compiled with the'*)
|
||
|
(*$HPPEMIT '// "-DZEXPORT=__fastcall -DZEXPORTVA=__cdecl" parameter. Do NOT change'*)
|
||
|
(*$HPPEMIT '// the function calling conventions unless you know what you are doing and'*)
|
||
|
(*$HPPEMIT '// the C++ objects are compiled appropriately.'*)
|
||
|
(*$HPPEMIT '//'*)
|
||
|
(*$HPPEMIT '// The only things that still are cdecl are the callback functions.'*)
|
||
|
(*$HPPEMIT ''*)
|
||
|
{$IFDEF STATIC_CDECL_PROCS}
|
||
|
(*$HPPEMIT '#define ZEXPORT __cdecl'*)
|
||
|
{$ELSE}
|
||
|
(*$HPPEMIT '#define ZEXPORT __fastcall'*)
|
||
|
{$ENDIF}
|
||
|
{$ELSE}
|
||
|
(*$HPPEMIT '#define ZEXPORT __cdecl'*)
|
||
|
{$ENDIF}
|
||
|
(*$HPPEMIT '#define ZEXPORTVA __cdecl'*)
|
||
|
(*$HPPEMIT '#if !defined(__MACTYPES__)'*)
|
||
|
(*$HPPEMIT ' // We are defining __MACTYPES__ in order to skip the declaration of "Byte" as it causes'*)
|
||
|
(*$HPPEMIT ' // ambiguity with System::Byte'*)
|
||
|
(*$HPPEMIT ' #define __MACTYPES__'*)
|
||
|
(*$HPPEMIT ' #define __REMOVE_MACTYPES__'*)
|
||
|
(*$HPPEMIT '#endif'*)
|
||
|
(*$HPPEMIT '#if defined(__USE_ZLIBH__)'*)
|
||
|
(*$HPPEMIT ' #include "ZLib\zlib.h"'*)
|
||
|
(*$HPPEMIT '#else'*)
|
||
|
(*$HPPEMIT 'typedef void * __cdecl (*alloc_func)(void * opaque, unsigned items, unsigned size);'*)
|
||
|
(*$HPPEMIT ''*)
|
||
|
(*$HPPEMIT 'typedef void __cdecl (*free_func)(void * opaque, void * address);'*)
|
||
|
(*$HPPEMIT ''*)
|
||
|
(*$HPPEMIT '#pragma pack(push,1)'*)
|
||
|
{$IFDEF VCL_XE_OR_ABOVE}
|
||
|
(*$HPPEMIT 'struct DECLSPEC_DRECORD z_stream'*)
|
||
|
{$ELSE}
|
||
|
(*$HPPEMIT 'struct z_stream'*)
|
||
|
{$ENDIF}
|
||
|
(*$HPPEMIT '{'*)
|
||
|
(*$HPPEMIT ' '*)
|
||
|
(*$HPPEMIT 'public:'*)
|
||
|
(*$HPPEMIT ' char *next_in;'*)
|
||
|
(*$HPPEMIT ' unsigned avail_in;'*)
|
||
|
(*$HPPEMIT ' unsigned total_in;'*)
|
||
|
(*$HPPEMIT ' char *next_out;'*)
|
||
|
(*$HPPEMIT ' unsigned avail_out;'*)
|
||
|
(*$HPPEMIT ' unsigned total_out;'*)
|
||
|
(*$HPPEMIT ' char *msg;'*)
|
||
|
(*$HPPEMIT ' void *state;'*)
|
||
|
(*$HPPEMIT ' alloc_func zalloc;'*)
|
||
|
(*$HPPEMIT ' free_func zfree;'*)
|
||
|
(*$HPPEMIT ' void *opaque;'*)
|
||
|
(*$HPPEMIT ' int data_type;'*)
|
||
|
(*$HPPEMIT ' unsigned adler;'*)
|
||
|
(*$HPPEMIT ' unsigned reserved;'*)
|
||
|
(*$HPPEMIT '};'*)
|
||
|
(*$HPPEMIT '#pragma pack(pop)'*)
|
||
|
(*$HPPEMIT ''*)
|
||
|
(*$HPPEMIT '#if !defined(__clang__) && !defined(__CPP__)'*)
|
||
|
(*$HPPEMIT '#if sizeof(z_stream) < 56'*)
|
||
|
(*$HPPEMIT '#pragma message "Pascal/C++ size mismatch: (C++) sizeof(z_stream) < (Pascal) [size: 56, align: 1] (WARNING)"'*)
|
||
|
(*$HPPEMIT '#pragma sizeof(z_stream)'*)
|
||
|
(*$HPPEMIT '#endif'*)
|
||
|
(*$HPPEMIT ''*)
|
||
|
(*$HPPEMIT '#if sizeof(z_stream) > 56'*)
|
||
|
(*$HPPEMIT '#pragma message "Pascal/C++ size mismatch: (C++) sizeof(z_stream) > (Pascal) [size: 56, align: 1] (WARNING)"'*)
|
||
|
(*$HPPEMIT '#pragma sizeof(z_stream)'*)
|
||
|
(*$HPPEMIT '#endif'*)
|
||
|
(*$HPPEMIT ''*)
|
||
|
(*$HPPEMIT '#if alignof(z_stream) < 1'*)
|
||
|
(*$HPPEMIT '#pragma message "Pascal/C++ alignment mismatch: (C++) alignof(z_stream) < (Pascal) [size: 56, align: 1] (WARNING)"'*)
|
||
|
(*$HPPEMIT '#endif'*)
|
||
|
(*$HPPEMIT ''*)
|
||
|
(*$HPPEMIT '#if alignof(z_stream) > 1'*)
|
||
|
(*$HPPEMIT '#pragma message "Pascal/C++ alignment mismatch: (C++) alignof(z_stream) > (Pascal) [size: 56, align: 1] (WARNING)"'*)
|
||
|
(*$HPPEMIT '#endif'*)
|
||
|
(*$HPPEMIT '#endif'*)
|
||
|
(*$HPPEMIT ''*)
|
||
|
(*$HPPEMIT ''*)
|
||
|
(*$HPPEMIT 'struct gz_header;'*)
|
||
|
(*$HPPEMIT 'typedef gz_header *gz_headerp;'*)
|
||
|
(*$HPPEMIT ''*)
|
||
|
(*$HPPEMIT '#pragma pack(push,1)'*)
|
||
|
{$IFDEF VCL_XE_OR_ABOVE}
|
||
|
(*$HPPEMIT 'struct DECLSPEC_DRECORD gz_header'*)
|
||
|
{$ELSE}
|
||
|
(*$HPPEMIT 'struct gz_header'*)
|
||
|
{$ENDIF}
|
||
|
(*$HPPEMIT '{'*)
|
||
|
(*$HPPEMIT ' '*)
|
||
|
(*$HPPEMIT 'public:'*)
|
||
|
(*$HPPEMIT ' int text;'*)
|
||
|
(*$HPPEMIT ' unsigned time;'*)
|
||
|
(*$HPPEMIT ' int xflags;'*)
|
||
|
(*$HPPEMIT ' int os;'*)
|
||
|
(*$HPPEMIT ' System::Byte *extra;'*)
|
||
|
(*$HPPEMIT ' unsigned extra_len;'*)
|
||
|
(*$HPPEMIT ' unsigned extra_max;'*)
|
||
|
(*$HPPEMIT ' char *name;'*)
|
||
|
(*$HPPEMIT ' unsigned name_max;'*)
|
||
|
(*$HPPEMIT ' char *comment;'*)
|
||
|
(*$HPPEMIT ' unsigned comm_max;'*)
|
||
|
(*$HPPEMIT ' int hcrc;'*)
|
||
|
(*$HPPEMIT ' int done;'*)
|
||
|
(*$HPPEMIT '};'*)
|
||
|
(*$HPPEMIT '#pragma pack(pop)'*)
|
||
|
(*$HPPEMIT ''*)
|
||
|
(*$HPPEMIT '#if !defined(__clang__) && !defined(__CPP__)'*)
|
||
|
(*$HPPEMIT '#if sizeof(gz_header) < 52'*)
|
||
|
(*$HPPEMIT '#pragma message "Pascal/C++ size mismatch: (C++) sizeof(gz_header) < (Pascal) [size: 52, align: 1] (WARNING)"'*)
|
||
|
(*$HPPEMIT '#pragma sizeof(gz_header)'*)
|
||
|
(*$HPPEMIT '#endif'*)
|
||
|
(*$HPPEMIT ''*)
|
||
|
(*$HPPEMIT '#if sizeof(gz_header) > 52'*)
|
||
|
(*$HPPEMIT '#pragma message "Pascal/C++ size mismatch: (C++) sizeof(gz_header) > (Pascal) [size: 52, align: 1] (WARNING)"'*)
|
||
|
(*$HPPEMIT '#pragma sizeof(gz_header)'*)
|
||
|
(*$HPPEMIT '#endif'*)
|
||
|
(*$HPPEMIT ''*)
|
||
|
(*$HPPEMIT '#if alignof(gz_header) < 1'*)
|
||
|
(*$HPPEMIT '#pragma message "Pascal/C++ alignment mismatch: (C++) alignof(gz_header) < (Pascal) [size: 52, align: 1] (WARNING)"'*)
|
||
|
(*$HPPEMIT '#endif'*)
|
||
|
(*$HPPEMIT ''*)
|
||
|
(*$HPPEMIT '#if alignof(gz_header) > 1'*)
|
||
|
(*$HPPEMIT '#pragma message "Pascal/C++ alignment mismatch: (C++) alignof(gz_header) > (Pascal) [size: 52, align: 1] (WARNING)"'*)
|
||
|
(*$HPPEMIT '#endif'*)
|
||
|
(*$HPPEMIT '#endif'*)
|
||
|
(*$HPPEMIT '#endif'*)
|
||
|
(*$HPPEMIT '#if defined(__REMOVE_MACTYPES__)'*)
|
||
|
(*$HPPEMIT ' // Cleanup workaround for "Byte" ambiguity'*)
|
||
|
(*$HPPEMIT ' #if defined(__MACTYPES__)'*)
|
||
|
(*$HPPEMIT ' #undef __MACTYPES__'*)
|
||
|
(*$HPPEMIT ' #endif'*)
|
||
|
(*$HPPEMIT ' #undef __REMOVE_MACTYPES__'*)
|
||
|
(*$HPPEMIT '#endif'*)
|
||
|
|
||
|
const
|
||
|
{$EXTERNALSYM ZLIB_VERSION}
|
||
|
ZLIB_VERSION = '1.2.5';
|
||
|
{$EXTERNALSYM ZLIB_VERNUM}
|
||
|
ZLIB_VERNUM = $1250;
|
||
|
{$EXTERNALSYM ZLIB_VER_MAJOR}
|
||
|
ZLIB_VER_MAJOR = 1;
|
||
|
{$EXTERNALSYM ZLIB_VER_MINOR}
|
||
|
ZLIB_VER_MINOR = 2;
|
||
|
{$EXTERNALSYM ZLIB_VER_REVISION}
|
||
|
ZLIB_VER_REVISION = 5;
|
||
|
{$EXTERNALSYM ZLIB_VER_SUBREVISION}
|
||
|
ZLIB_VER_SUBREVISION = 0;
|
||
|
|
||
|
type
|
||
|
{JPM - I made some types from our old header to the new C types defined originally
|
||
|
for compatability.}
|
||
|
{$EXTERNALSYM z_off_t}
|
||
|
{$IFDEF USE_VCL_POSIX}
|
||
|
z_off_t = off_t;
|
||
|
{$ENDIF}
|
||
|
{$IFDEF KYLIXCOMPAT}
|
||
|
z_off_t = off_t;
|
||
|
{$ENDIF}
|
||
|
{$IFDEF USE_BASEUNIX}
|
||
|
z_off_t = off_t;
|
||
|
{$ENDIF}
|
||
|
{$IFDEF WINDOWS}
|
||
|
z_off_t = TIdC_LONG;
|
||
|
{$ENDIF}
|
||
|
|
||
|
{$EXTERNALSYM alloc_func}
|
||
|
alloc_func = function(opaque: Pointer; items, size: TIdC_UINT): Pointer; cdecl;
|
||
|
{$EXTERNALSYM TAlloc}
|
||
|
TAlloc = alloc_func;
|
||
|
{$EXTERNALSYM free_func}
|
||
|
free_func = procedure(opaque, address: Pointer); cdecl;
|
||
|
{$EXTERNALSYM TFree}
|
||
|
TFree = free_func;
|
||
|
{$EXTERNALSYM in_func}
|
||
|
in_func = function(opaque: Pointer; var buf: PByte): TIdC_UNSIGNED; cdecl;
|
||
|
{$EXTERNALSYM TInFunc}
|
||
|
TInFunc = in_func;
|
||
|
{$EXTERNALSYM out_func}
|
||
|
out_func = function(opaque: Pointer; buf: PByte; size: TIdC_UNSIGNED): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM TOutFunc}
|
||
|
TOutFunc = out_func;
|
||
|
{$EXTERNALSYM z_streamp}
|
||
|
z_streamp = ^z_stream;
|
||
|
{$EXTERNALSYM z_stream}
|
||
|
z_stream = record
|
||
|
next_in: PIdAnsiChar; (* next input byte *)
|
||
|
avail_in: TIdC_UINT; (* number of bytes available at next_in *)
|
||
|
total_in: TIdC_ULONG; (* total nb of input bytes read so far *)
|
||
|
|
||
|
next_out: PIdAnsiChar; (* next output byte should be put there *)
|
||
|
avail_out: TIdC_UINT; (* remaining free space at next_out *)
|
||
|
total_out: TIdC_ULONG; (* total nb of bytes output so far *)
|
||
|
|
||
|
msg: PIdAnsiChar; (* last error message, NULL if no error *)
|
||
|
state: Pointer; (* not visible by applications *)
|
||
|
|
||
|
zalloc: alloc_func; (* used to allocate the internal state *)
|
||
|
zfree: free_func; (* used to free the internal state *)
|
||
|
opaque: Pointer; (* private data object passed to zalloc and zfree *)
|
||
|
|
||
|
data_type: TIdC_INT; (* best guess about the data type: ascii or binary *)
|
||
|
adler: TIdC_ULONG; (* adler32 value of the uncompressed data *)
|
||
|
reserved: TIdC_ULONG; (* reserved for future use *)
|
||
|
end;
|
||
|
{$EXTERNALSYM TZStreamRec}
|
||
|
TZStreamRec = z_stream;
|
||
|
{$EXTERNALSYM PZStreamRec}
|
||
|
PZStreamRec = z_streamp;
|
||
|
|
||
|
(*
|
||
|
gzip header information passed to and from zlib routines. See RFC 1952
|
||
|
for more details on the meanings of these fields.
|
||
|
*)
|
||
|
{$EXTERNALSYM gz_headerp}
|
||
|
gz_headerp = ^gz_header;
|
||
|
{$EXTERNALSYM gz_header}
|
||
|
gz_header = record
|
||
|
text : TIdC_INT; //* true if compressed data believed to be text */
|
||
|
time : TIdC_ULONG; //* modification time */
|
||
|
xflags : TIdC_INT; //* extra flags (not used when writing a gzip file) */
|
||
|
os : TIdC_INT; //* operating system */
|
||
|
extra : PByte; //* pointer to extra field or Z_NULL if none */
|
||
|
extra_len : TIdC_UINT; //* extra field length (valid if extra != Z_NULL) */
|
||
|
extra_max : TIdC_UINT; //* space at extra (only when reading header) */
|
||
|
name : PIdAnsiChar; //* pointer to zero-terminated file name or Z_NULL */
|
||
|
name_max : TIdC_UINT; //* space at name (only when reading header) */
|
||
|
comment : PIdAnsiChar; //* pointer to zero-terminated comment or Z_NULL */
|
||
|
comm_max : TIdC_UINT; //* space at comment (only when reading header) */
|
||
|
hcrc : TIdC_INT; //* true if there was or will be a header crc */
|
||
|
done : TIdC_INT; //* true when done reading gzip header (not used when writing a gzip file) */
|
||
|
end;
|
||
|
{$EXTERNALSYM PgzHeaderRec}
|
||
|
PgzHeaderRec = gz_headerp;
|
||
|
{$EXTERNALSYM TgzHeaderRec}
|
||
|
TgzHeaderRec = gz_header;
|
||
|
|
||
|
type
|
||
|
TZStreamType = (
|
||
|
zsZLib, //standard zlib stream
|
||
|
zsGZip, //gzip stream
|
||
|
zsRaw); //raw stream (without any header)
|
||
|
|
||
|
(* constants *)
|
||
|
const
|
||
|
Z_NO_FLUSH = 0;
|
||
|
{$EXTERNALSYM Z_NO_FLUSH}
|
||
|
Z_PARTIAL_FLUSH = 1;
|
||
|
{$EXTERNALSYM Z_PARTIAL_FLUSH}
|
||
|
Z_SYNC_FLUSH = 2;
|
||
|
{$EXTERNALSYM Z_SYNC_FLUSH}
|
||
|
Z_FULL_FLUSH = 3;
|
||
|
{$EXTERNALSYM Z_FULL_FLUSH}
|
||
|
Z_FINISH = 4;
|
||
|
{$EXTERNALSYM Z_FINISH}
|
||
|
Z_BLOCK = 5;
|
||
|
{$EXTERNALSYM Z_BLOCK}
|
||
|
Z_TREES = 6;
|
||
|
{$EXTERNALSYM Z_TREES}
|
||
|
Z_OK = 0;
|
||
|
{$EXTERNALSYM Z_OK}
|
||
|
Z_STREAM_END = 1;
|
||
|
{$EXTERNALSYM Z_STREAM_END}
|
||
|
Z_NEED_DICT = 2;
|
||
|
{$EXTERNALSYM Z_NEED_DICT}
|
||
|
Z_ERRNO = -1;
|
||
|
{$EXTERNALSYM Z_ERRNO}
|
||
|
Z_STREAM_ERROR = -2;
|
||
|
{$EXTERNALSYM Z_STREAM_ERROR}
|
||
|
Z_DATA_ERROR = -3;
|
||
|
{$EXTERNALSYM Z_DATA_ERROR}
|
||
|
Z_MEM_ERROR = -4;
|
||
|
{$EXTERNALSYM Z_MEM_ERROR}
|
||
|
Z_BUF_ERROR = -5;
|
||
|
{$EXTERNALSYM Z_BUF_ERROR}
|
||
|
Z_VERSION_ERROR = -6;
|
||
|
{$EXTERNALSYM Z_VERSION_ERROR}
|
||
|
|
||
|
Z_NO_COMPRESSION = 0;
|
||
|
{$EXTERNALSYM Z_NO_COMPRESSION}
|
||
|
Z_BEST_SPEED = 1;
|
||
|
{$EXTERNALSYM Z_BEST_SPEED}
|
||
|
Z_BEST_COMPRESSION = 9;
|
||
|
{$EXTERNALSYM Z_BEST_COMPRESSION}
|
||
|
Z_DEFAULT_COMPRESSION = -1;
|
||
|
{$EXTERNALSYM Z_DEFAULT_COMPRESSION}
|
||
|
|
||
|
Z_FILTERED = 1;
|
||
|
{$EXTERNALSYM Z_FILTERED}
|
||
|
Z_HUFFMAN_ONLY = 2;
|
||
|
{$EXTERNALSYM Z_HUFFMAN_ONLY}
|
||
|
Z_RLE = 3;
|
||
|
{$EXTERNALSYM Z_RLE}
|
||
|
Z_DEFAULT_STRATEGY = 0;
|
||
|
{$EXTERNALSYM Z_DEFAULT_STRATEGY}
|
||
|
|
||
|
Z_BINARY = 0;
|
||
|
{$EXTERNALSYM Z_BINARY}
|
||
|
Z_TEXT = 1;
|
||
|
{$EXTERNALSYM Z_TEXT}
|
||
|
Z_ASCII = Z_TEXT; //* for compatibility with 1.2.2 and earlier */
|
||
|
{$EXTERNALSYM Z_ASCII}
|
||
|
Z_UNKNOWN = 2;
|
||
|
{$EXTERNALSYM Z_UNKNOWN}
|
||
|
|
||
|
Z_DEFLATED = 8;
|
||
|
{$EXTERNALSYM Z_DEFLATED}
|
||
|
Z_NULL = 0; //* for initializing zalloc, zfree, opaque */
|
||
|
{$EXTERNALSYM Z_NULL}
|
||
|
|
||
|
MAX_WBITS = 15; { 32K LZ77 window }
|
||
|
{$EXTERNALSYM MAX_WBITS}
|
||
|
|
||
|
MAX_MEM_LEVEL = 9;
|
||
|
{$EXTERNALSYM MAX_MEM_LEVEL}
|
||
|
DEF_MEM_LEVEL = 8; { if MAX_MEM_LEVEL > 8 }
|
||
|
{$EXTERNALSYM DEF_MEM_LEVEL}
|
||
|
|
||
|
{$EXTERNALSYM inflateInit}
|
||
|
function inflateInit(var strm: z_stream): TIdC_INT;
|
||
|
{$IFDEF USE_INLINE} inline; {$ENDIF}
|
||
|
|
||
|
{$EXTERNALSYM inflateBackInit}
|
||
|
function inflateBackInit(var strm: z_stream;
|
||
|
windowBits: TIdC_INT; window: PIdAnsiChar): TIdC_INT;
|
||
|
{$IFDEF USE_INLINE} inline; {$ENDIF}
|
||
|
|
||
|
{$EXTERNALSYM inflateInit2}
|
||
|
function inflateInit2(var strm: z_stream; windowBits: TIdC_INT): TIdC_INT;
|
||
|
{$IFDEF USE_INLINE} inline; {$ENDIF}
|
||
|
|
||
|
{$EXTERNALSYM deflateInit}
|
||
|
function deflateInit(var strm: z_stream; level: TIdC_INT): TIdC_INT;
|
||
|
{$IFDEF USE_INLINE} inline; {$ENDIF}
|
||
|
|
||
|
{$EXTERNALSYM deflateInit2}
|
||
|
function deflateInit2(var strm: z_stream; level, method, windowBits,
|
||
|
memLevel, strategy: TIdC_INT): TIdC_INT;
|
||
|
{$IFDEF USE_INLINE} inline; {$ENDIF}
|
||
|
|
||
|
{not sure if these should be externalsymed but might not be a bad idea}
|
||
|
|
||
|
{$EXTERNALSYM deflateInitEx}
|
||
|
function deflateInitEx(var strm: z_stream; level: TIdC_INT; streamtype: TZStreamType = zsZLib): TIdC_INT;
|
||
|
|
||
|
{$EXTERNALSYM inflateInitEx}
|
||
|
function inflateInitEx(var strm: z_stream; streamtype: TZStreamType = zsZLib): TIdC_INT;
|
||
|
|
||
|
{$EXTERNALSYM adler32}
|
||
|
{$EXTERNALSYM adler32_combine}
|
||
|
{$EXTERNALSYM compress}
|
||
|
{$EXTERNALSYM compress2}
|
||
|
{$EXTERNALSYM compressBound}
|
||
|
{$EXTERNALSYM crc32}
|
||
|
{$EXTERNALSYM crc32_combine}
|
||
|
{$EXTERNALSYM deflate}
|
||
|
{$EXTERNALSYM deflateBound}
|
||
|
{$EXTERNALSYM deflateCopy}
|
||
|
{$EXTERNALSYM deflateEnd}
|
||
|
{$EXTERNALSYM deflateInit_}
|
||
|
{$EXTERNALSYM deflateInit2_}
|
||
|
{$EXTERNALSYM deflateParams}
|
||
|
{$EXTERNALSYM deflatePrime}
|
||
|
{$EXTERNALSYM deflateTune}
|
||
|
{$EXTERNALSYM deflateReset}
|
||
|
{$EXTERNALSYM deflateSetDictionary}
|
||
|
{$EXTERNALSYM inflate}
|
||
|
{$EXTERNALSYM inflateBack}
|
||
|
{$EXTERNALSYM inflateBackEnd}
|
||
|
{$EXTERNALSYM inflateBackInit_}
|
||
|
{$EXTERNALSYM inflateCopy}
|
||
|
{$EXTERNALSYM inflateEnd; external}
|
||
|
{$EXTERNALSYM inflateInit_}
|
||
|
{$EXTERNALSYM inflateInit2_}
|
||
|
{$EXTERNALSYM inflateReset}
|
||
|
{$EXTERNALSYM inflateReset2}
|
||
|
{$EXTERNALSYM inflateSetDictionary}
|
||
|
{$EXTERNALSYM inflateSync}
|
||
|
{$EXTERNALSYM uncompress}
|
||
|
{$EXTERNALSYM zlibCompileFlags}
|
||
|
{$EXTERNALSYM zError}
|
||
|
{$EXTERNALSYM inflateSyncPoint}
|
||
|
{$EXTERNALSYM get_crc_table}
|
||
|
{$EXTERNALSYM inflateUndermine}
|
||
|
{$EXTERNALSYM zlibVersion}
|
||
|
{$EXTERNALSYM deflateSetHeader}
|
||
|
{$EXTERNALSYM inflatePrime}
|
||
|
{$EXTERNALSYM inflateMark}
|
||
|
{$EXTERNALSYM inflateGetHeader}
|
||
|
|
||
|
{$IFNDEF STATICLOAD_ZLIB}
|
||
|
type
|
||
|
EIdZLibStubError = class(EIdException)
|
||
|
protected
|
||
|
FError : UInt32;
|
||
|
FErrorMessage : String;
|
||
|
FTitle : String;
|
||
|
public
|
||
|
constructor Build(const ATitle : String; AError : UInt32);
|
||
|
property Error : UInt32 read FError;
|
||
|
property ErrorMessage : String read FErrorMessage;
|
||
|
property Title : String read FTitle;
|
||
|
end;
|
||
|
|
||
|
type
|
||
|
{$EXTERNALSYM LPN_adler32}
|
||
|
LPN_adler32 = function (adler: TIdC_ULONG;
|
||
|
const buf: PIdAnsiChar; len: TIdC_UINT): TIdC_ULONG; cdecl;
|
||
|
{$EXTERNALSYM LPN_adler32_combine}
|
||
|
LPN_adler32_combine = function (crc1, crc2 : TIdC_ULONG;
|
||
|
len2 : z_off_t) : TIdC_ULONG; cdecl;
|
||
|
{$EXTERNALSYM LPN_compress}
|
||
|
LPN_compress = function (dest: PIdAnsiChar; var destLen: TIdC_ULONG;
|
||
|
const source: PIdAnsiChar; sourceLen: TIdC_ULONG): TIdC_INT;cdecl;
|
||
|
{$EXTERNALSYM LPN_compress2}
|
||
|
LPN_compress2 = function(dest: PIdAnsiChar; var destLen: TIdC_ULONG;
|
||
|
const source: PIdAnsiChar; sourceLen: TIdC_ULONG;
|
||
|
level: TIdC_INT): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_compressBound}
|
||
|
LPN_compressBound = function (sourceLen: TIdC_ULONG): TIdC_ULONG;cdecl;
|
||
|
{$EXTERNALSYM LPN_crc32}
|
||
|
LPN_crc32 = function (crc: TIdC_ULONG; const buf: PIdAnsiChar;
|
||
|
len: TIdC_UINT): TIdC_ULONG; cdecl;
|
||
|
{$EXTERNALSYM LPN_crc32_combine}
|
||
|
LPN_crc32_combine = function (crc1, crc2 : TIdC_ULONG;
|
||
|
len2 : z_off_t) : TIdC_ULONG; cdecl;
|
||
|
{$EXTERNALSYM LPN_deflate}
|
||
|
LPN_deflate = function (var strm: z_stream; flush: TIdC_INT): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_deflateBound}
|
||
|
LPN_deflateBound = function (var strm: z_stream;
|
||
|
sourceLen: TIdC_ULONG): TIdC_ULONG; cdecl;
|
||
|
{$EXTERNALSYM LPN_deflateCopy}
|
||
|
LPN_deflateCopy = function (var dest, source: z_stream): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_deflateEnd}
|
||
|
LPN_deflateEnd = function (var strm: z_stream): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_deflateInit_}
|
||
|
LPN_deflateInit_ = function (var strm: z_stream; level: TIdC_INT;
|
||
|
const version: PIdAnsiChar; stream_size: TIdC_INT): TIdC_INT;cdecl;
|
||
|
{$EXTERNALSYM LPN_deflateInit2_}
|
||
|
LPN_deflateInit2_ = function (var strm: z_stream;
|
||
|
level, method, windowBits, memLevel, strategy: TIdC_INT;
|
||
|
const version: PIdAnsiChar; stream_size: TIdC_INT): TIdC_INT;cdecl;
|
||
|
{$EXTERNALSYM LPN_deflateParams}
|
||
|
LPN_deflateParams = function (var strm: z_stream; level, strategy: TIdC_INT): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_deflatePrime}
|
||
|
LPN_deflatePrime = function (var strm: z_stream; bits, value: TIdC_INT): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_deflateTune}
|
||
|
LPN_deflateTune = function (var strm : z_stream; good_length : TIdC_INT;
|
||
|
max_lazy, nice_length, max_chain : TIdC_INT) : TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_deflateReset}
|
||
|
LPN_deflateReset = function (var strm: z_stream): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_deflateSetDictionary}
|
||
|
LPN_deflateSetDictionary = function (var strm: z_stream; const dictionary: PIdAnsiChar;
|
||
|
dictLength: TIdC_UINT): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflate}
|
||
|
LPN_inflate = function (var strm: z_stream; flush: TIdC_INT): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateBack}
|
||
|
LPN_inflateBack = function (var strm: z_stream; in_fn: in_func; in_desc: Pointer;
|
||
|
out_fn: out_func; out_desc: Pointer): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateBackEnd}
|
||
|
LPN_inflateBackEnd = function (var strm: z_stream): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateBackInit_}
|
||
|
LPN_inflateBackInit_ = function (var strm: z_stream;
|
||
|
windowBits: TIdC_INT; window: PIdAnsiChar;
|
||
|
const version: PIdAnsiChar; stream_size: TIdC_INT): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateCopy}
|
||
|
LPN_inflateCopy = function (var dest, source: z_stream): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateEnd}
|
||
|
LPN_inflateEnd = function (var strm: z_stream): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateInit_}
|
||
|
LPN_inflateInit_ = function (var strm: z_stream; const version: PIdAnsiChar;
|
||
|
stream_size: TIdC_INT): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateInit2_}
|
||
|
LPN_inflateInit2_ = function (var strm: z_stream; windowBits: TIdC_INT;
|
||
|
const version: PIdAnsiChar; stream_size: TIdC_INT): TIdC_INT;cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateReset}
|
||
|
LPN_inflateReset = function (var strm: z_stream): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateReset2}
|
||
|
LPN_inflateReset2 = function (var strm : z_stream; windowBits : TIdC_INT) : TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflatePrime}
|
||
|
LPN_inflatePrime = function (var strm : z_stream; bits, value : TIdC_INT ) : TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateMark}
|
||
|
LPN_inflateMark = function (var strm : z_stream) : TIdC_LONG; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateSetDictionary}
|
||
|
LPN_inflateSetDictionary = function (var strm: z_stream; const dictionary: PIdAnsiChar;
|
||
|
dictLength: TIdC_UINT): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateSync}
|
||
|
LPN_inflateSync = function (var strm: z_stream): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_uncompress}
|
||
|
LPN_uncompress = function (dest: PIdAnsiChar; var destLen: TIdC_ULONG;
|
||
|
const source: PIdAnsiChar; sourceLen: TIdC_ULONG): TIdC_INT;cdecl;
|
||
|
{$EXTERNALSYM LPN_zlibCompileFlags}
|
||
|
LPN_zlibCompileFlags = function : TIdC_ULONG; cdecl;
|
||
|
{$EXTERNALSYM LPN_zError}
|
||
|
LPN_zError = function (err : TIdC_INT) : PIdAnsiChar; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateSyncPoint}
|
||
|
LPN_inflateSyncPoint = function (var z : TZStreamRec) : TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_get_crc_table}
|
||
|
LPN_get_crc_table = function : PIdC_ULONG; cdecl;
|
||
|
{$EXTERNALSYM LPN_zlibVersion}
|
||
|
LPN_zlibVersion = function : PIdAnsiChar; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateUndermine}
|
||
|
LPN_inflateUndermine = function (var strm: z_stream; subvert : TIdC_INT ) : TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_deflateSetHeader}
|
||
|
LPN_deflateSetHeader = function (var strm: z_stream; var head: gz_header): TIdC_INT; cdecl;
|
||
|
{$EXTERNALSYM LPN_inflateGetHeader}
|
||
|
LPN_inflateGetHeader = function (var strm: z_stream; var head: gz_header): TIdC_INT; cdecl;
|
||
|
|
||
|
{Vars}
|
||
|
var
|
||
|
adler32 : LPN_adler32 = nil;
|
||
|
adler32_combine : LPN_adler32_combine = nil;
|
||
|
compress : LPN_compress = nil;
|
||
|
compress2 : LPN_compress2 = nil;
|
||
|
compressBound : LPN_compressBound = nil;
|
||
|
crc32 : LPN_crc32 = nil;
|
||
|
crc32_combine : LPN_crc32_combine = nil;
|
||
|
deflate : LPN_deflate = nil;
|
||
|
deflateBound : LPN_deflateBound = nil;
|
||
|
deflateCopy : LPN_deflateCopy = nil;
|
||
|
deflateEnd : LPN_deflateEnd = nil;
|
||
|
deflateInit_ : LPN_deflateInit_ = nil;
|
||
|
deflateInit2_ : LPN_deflateInit2_ = nil;
|
||
|
deflateParams : LPN_deflateParams = nil;
|
||
|
|
||
|
deflatePrime :LPN_deflatePrime = nil;
|
||
|
deflateTune : LPN_deflateTune = nil;
|
||
|
deflateReset : LPN_deflateReset = nil;
|
||
|
deflateSetDictionary : LPN_deflateSetDictionary = nil;
|
||
|
inflate : LPN_inflate = nil;
|
||
|
inflateBack : LPN_inflateBack = nil;
|
||
|
inflateBackEnd : LPN_inflateBackEnd = nil;
|
||
|
inflateEnd : LPN_inflateEnd = nil;
|
||
|
inflateBackInit_ : LPN_inflateBackInit_ = nil;
|
||
|
inflateCopy : LPN_inflateCopy = nil;
|
||
|
inflateInit_ : LPN_inflateInit_ = nil;
|
||
|
inflateInit2_ : LPN_inflateInit2_ = nil;
|
||
|
inflateReset : LPN_inflateReset = nil;
|
||
|
|
||
|
inflateReset2 : LPN_inflateReset2 = nil;
|
||
|
inflatePrime : LPN_inflatePrime = nil;
|
||
|
inflateMark : LPN_inflateMark = nil;
|
||
|
|
||
|
inflateSetDictionary : LPN_inflateSetDictionary = nil;
|
||
|
inflateSync : LPN_inflateSync = nil;
|
||
|
uncompress : LPN_uncompress = nil;
|
||
|
zlibCompileFlags : LPN_zlibCompileFlags = nil;
|
||
|
zError : LPN_zError = nil;
|
||
|
inflateSyncPoint : LPN_inflateSyncPoint = nil;
|
||
|
get_crc_table : LPN_get_crc_table = nil;
|
||
|
inflateUndermine : LPN_inflateUndermine = nil;
|
||
|
zlibVersion : LPN_zlibVersion = nil;
|
||
|
deflateSetHeader : LPN_deflateSetHeader = nil;
|
||
|
inflateGetHeader : LPN_inflateGetHeader = nil;
|
||
|
|
||
|
procedure IdZLibSetLibPath(const APath: String);
|
||
|
|
||
|
{$ELSE}
|
||
|
|
||
|
(* basic functions *)
|
||
|
function zlibVersion: PIdAnsiChar; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
|
||
|
function deflate(var strm: z_stream; flush: TIdC_INT): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function deflateEnd(var strm: z_stream): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
|
||
|
function inflate(var strm: z_stream; flush: TIdC_INT): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function inflateEnd(var strm: z_stream): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
|
||
|
(* advanced functions *)
|
||
|
|
||
|
function deflateSetDictionary(var strm: z_stream; const dictionary: PIdAnsiChar;
|
||
|
dictLength: TIdC_UINT): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function deflateCopy(var dest, source: z_stream): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function deflateReset(var strm: z_stream): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function deflateParams(var strm: z_stream; level, strategy: TIdC_INT): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
{JPM Addition}
|
||
|
function deflateTune(var strm : z_stream; good_length : TIdC_INT;
|
||
|
max_lazy, nice_length, max_chain : TIdC_INT) : TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function deflateBound(var strm: z_stream;
|
||
|
sourceLen: TIdC_ULONG): TIdC_ULONG; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function deflatePrime(var strm: z_stream; bits, value: TIdC_INT): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
|
||
|
function inflateSetDictionary(var strm: z_stream; const dictionary: PIdAnsiChar;
|
||
|
dictLength: TIdC_UINT): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function inflateSync(var strm: z_stream): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function inflateCopy(var dest, source: z_stream): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function inflateReset(var strm: z_stream): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function inflateReset2(var strm : z_stream; windowBits : TIdC_INT) : TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function inflatePrime(var strm : z_stream; bits, value : TIdC_INT ) : TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function inflateMark(var strm : z_stream) : TIdC_LONG; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function inflateBack(var strm: z_stream; in_fn: in_func; in_desc: Pointer;
|
||
|
out_fn: out_func; out_desc: Pointer): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function inflateBackEnd(var strm: z_stream): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
|
||
|
function zlibCompileFlags: TIdC_ULONG; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
|
||
|
{JPM Additional functions}
|
||
|
function zError (err : TIdC_INT) : PIdAnsiChar; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function inflateSyncPoint(var z : TZStreamRec) : TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
//const uLongf * get_crc_table (void);
|
||
|
function inflateUndermine(var strm: z_stream; subvert : TIdC_INT ) : TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
|
||
|
function get_crc_table : PIdC_ULONG; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
{end JPM additions}
|
||
|
|
||
|
(* utility functions *)
|
||
|
function compress(dest: PIdAnsiChar; var destLen: TIdC_ULONG;
|
||
|
const source: PIdAnsiChar; sourceLen: TIdC_ULONG): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function compress2(dest: PIdAnsiChar; var destLen: TIdC_ULONG;
|
||
|
const source: PIdAnsiChar; sourceLen: TIdC_ULONG;
|
||
|
level: TIdC_INT): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function compressBound(sourceLen: TIdC_ULONG): TIdC_ULONG; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function uncompress(dest: PIdAnsiChar; var destLen: TIdC_ULONG;
|
||
|
const source: PIdAnsiChar; sourceLen: TIdC_ULONG): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
|
||
|
(* checksum functions *)
|
||
|
function adler32(adler: TIdC_ULONG;
|
||
|
const buf: PIdAnsiChar; len: TIdC_UINT): TIdC_ULONG; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function adler32_combine(crc1, crc2 : TIdC_ULONG; len2 : z_off_t) : TIdC_ULONG; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function crc32(crc: TIdC_ULONG; const buf: PIdAnsiChar;
|
||
|
len: TIdC_UINT): TIdC_ULONG; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function crc32_combine(crc1, crc2 : TIdC_ULONG; len2 : z_off_t) : TIdC_ULONG; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
(* various hacks, don't look :) *)
|
||
|
function deflateInit_(var strm: z_stream; level: TIdC_INT;
|
||
|
const version: PIdAnsiChar; stream_size: TIdC_INT): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function inflateInit_(var strm: z_stream; const version: PIdAnsiChar;
|
||
|
stream_size: TIdC_INT): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function deflateInit2_(var strm: z_stream;
|
||
|
level, method, windowBits, memLevel, strategy: TIdC_INT;
|
||
|
const version: PIdAnsiChar; stream_size: TIdC_INT): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function inflateInit2_(var strm: z_stream; windowBits: TIdC_INT;
|
||
|
const version: PIdAnsiChar; stream_size: TIdC_INT): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function inflateBackInit_(var strm: z_stream;
|
||
|
windowBits: TIdC_INT; window: PIdAnsiChar;
|
||
|
const version: PIdAnsiChar; stream_size: TIdC_INT): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
|
||
|
function deflateSetHeader(var strm: z_stream; var head: gz_header): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
function inflateGetHeader(var strm: z_stream; var head: gz_header): TIdC_INT; {$IFDEF STATIC_CDECL_PROCS} cdecl; {$ENDIF}
|
||
|
{$ENDIF}
|
||
|
|
||
|
{$EXTERNALSYM zlibAllocMem}
|
||
|
function zlibAllocMem(AppData: Pointer; Items, Size: TIdC_UINT): Pointer; cdecl;
|
||
|
{$EXTERNALSYM zlibFreeMem}
|
||
|
procedure zlibFreeMem(AppData, Block: Pointer); cdecl;
|
||
|
{$EXTERNALSYM Load}
|
||
|
function Load : Boolean;
|
||
|
{$EXTERNALSYM Unload}
|
||
|
procedure Unload;
|
||
|
{$EXTERNALSYM Loaded}
|
||
|
function Loaded : Boolean;
|
||
|
|
||
|
{minor additional helper functions}
|
||
|
{$EXTERNALSYM _malloc}
|
||
|
function _malloc(Size: Integer): Pointer; cdecl;
|
||
|
{$EXTERNALSYM _free}
|
||
|
procedure _free(Block: Pointer); cdecl;
|
||
|
{$EXTERNALSYM _memset}
|
||
|
procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl;
|
||
|
{$EXTERNALSYM _memcpy}
|
||
|
procedure _memcpy(dest, source: Pointer; count: Integer); cdecl;
|
||
|
|
||
|
implementation
|
||
|
|
||
|
uses
|
||
|
SysUtils
|
||
|
{$IFNDEF STATICLOAD_ZLIB}
|
||
|
, IdZLibConst
|
||
|
{$IFDEF KYLIXCOMPAT}
|
||
|
, libc
|
||
|
{$ENDIF}
|
||
|
{$IFDEF FPC}
|
||
|
, DynLibs // better add DynLibs only for fpc
|
||
|
{$ENDIF}
|
||
|
{$IFDEF WINDOWS}
|
||
|
, Windows
|
||
|
{$ENDIF}
|
||
|
{$ELSE}
|
||
|
{$IFDEF VCL_XE2_OR_ABOVE}
|
||
|
, System.Win.Crtl {$NOINCLUDE System.Win.Crtl}
|
||
|
{$ENDIF}
|
||
|
{$ENDIF};
|
||
|
|
||
|
{$IFDEF STATICLOAD_ZLIB}
|
||
|
{$IFNDEF VCL_XE2_OR_ABOVE}
|
||
|
{$L adler32.obj}
|
||
|
{$L compress.obj}
|
||
|
{$L crc32.obj}
|
||
|
{$L deflate.obj}
|
||
|
{$L infback.obj}
|
||
|
{$L inffast.obj}
|
||
|
{$L inflate.obj}
|
||
|
{$L inftrees.obj}
|
||
|
{$L trees.obj}
|
||
|
{$L uncompr.obj}
|
||
|
{$L zutil.obj}
|
||
|
{$ELSE}
|
||
|
{$IFDEF WIN32}
|
||
|
{$L ZLib\i386-Win32-ZLib\zlibudec.obj} // undecorated stubs which are not needed for x64 compilation
|
||
|
{$L ZLib\i386-Win32-ZLib\deflate.obj}
|
||
|
{$L ZLib\i386-Win32-ZLib\inflate.obj}
|
||
|
{$L ZLib\i386-Win32-ZLib\infback.obj}
|
||
|
{$L ZLib\i386-Win32-ZLib\inffast.obj}
|
||
|
{$L ZLib\i386-Win32-ZLib\inftrees.obj}
|
||
|
{$L ZLib\i386-Win32-ZLib\trees.obj}
|
||
|
{$L ZLib\i386-Win32-ZLib\compress.obj}
|
||
|
{$L ZLib\i386-Win32-ZLib\uncompr.obj}
|
||
|
{$L ZLib\i386-Win32-ZLib\adler32.obj}
|
||
|
{$L ZLib\i386-Win32-ZLib\crc32.obj}
|
||
|
{$L ZLib\i386-Win32-ZLib\zutil.obj}
|
||
|
{$L ZLib\i386-Win32-ZLib\gzclose.obj}
|
||
|
{$L ZLib\i386-Win32-ZLib\gzread.obj}
|
||
|
{$L ZLib\i386-Win32-ZLib\gzwrite.obj}
|
||
|
{$L ZLib\i386-Win32-ZLib\gzlib.obj}
|
||
|
{$ENDIF}
|
||
|
{$IFDEF WIN64}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\deflate.obj}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\inflate.obj}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\infback.obj}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\inffast.obj}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\inftrees.obj}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\trees.obj}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\compress.obj}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\uncompr.obj}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\adler32.obj}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\crc32.obj}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\zutil.obj}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\gzclose.obj}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\gzread.obj}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\gzwrite.obj}
|
||
|
{$L ZLib\x86_64-Win64-ZLib\gzlib.obj}
|
||
|
{$ENDIF}
|
||
|
{$ENDIF}
|
||
|
|
||
|
function adler32; external;
|
||
|
function adler32_combine; external;
|
||
|
function compress; external;
|
||
|
function compress2; external;
|
||
|
function compressBound; external;
|
||
|
function crc32; external;
|
||
|
function crc32_combine; external;
|
||
|
function deflate; external;
|
||
|
function deflateBound; external;
|
||
|
function deflateCopy; external;
|
||
|
function deflateEnd; external;
|
||
|
function deflateInit_; external;
|
||
|
function deflateInit2_; external;
|
||
|
function deflateParams; external;
|
||
|
function deflatePrime; external;
|
||
|
function deflateTune; external;
|
||
|
function deflateReset; external;
|
||
|
function deflateSetDictionary; external;
|
||
|
function inflate; external;
|
||
|
function inflateBack; external;
|
||
|
function inflateBackEnd; external;
|
||
|
function inflateBackInit_; external;
|
||
|
function inflateCopy; external;
|
||
|
function inflateEnd; external;
|
||
|
function inflateInit_; external;
|
||
|
function inflateInit2_; external;
|
||
|
function inflateReset; external;
|
||
|
function inflateReset2; external;
|
||
|
function inflateSetDictionary; external;
|
||
|
function inflateSync; external;
|
||
|
function uncompress; external;
|
||
|
function zlibCompileFlags; external;
|
||
|
function zError; external;
|
||
|
function inflateSyncPoint; external;
|
||
|
function get_crc_table; external;
|
||
|
function inflateUndermine; external;
|
||
|
function zlibVersion; external;
|
||
|
function deflateSetHeader; external;
|
||
|
function inflatePrime; external;
|
||
|
function inflateMark; external;
|
||
|
function inflateGetHeader; external;
|
||
|
{$ELSE}
|
||
|
var
|
||
|
{$IFDEF UNIX}
|
||
|
hZlib: HModule = nilhandle;
|
||
|
{$ELSE}
|
||
|
hZLib: THandle = 0;
|
||
|
{$ENDIF}
|
||
|
|
||
|
{$IFDEF UNIX}
|
||
|
const
|
||
|
//The extensions will be resolved by IdGlobal.HackLoad
|
||
|
//This is a little messy because symbolic links to libraries may not always be the same
|
||
|
//in various Unix types. Even then, there could possibly be differences.
|
||
|
libzlib = 'libz';
|
||
|
libvers : array [0..3] of string = ('.1','','.3','.2');
|
||
|
{$ENDIF}
|
||
|
{$IFDEF NETWARE} {zlib.nlm comes with netware6}
|
||
|
const
|
||
|
libzlib = 'zlib';
|
||
|
{$ENDIF}
|
||
|
{$IFDEF WIN32}
|
||
|
//Note that this is the official ZLIB1 .DLL from the http://www.zlib.net/
|
||
|
const
|
||
|
libzlib = 'zlib1.dll';
|
||
|
{$ENDIF}
|
||
|
{$IFDEF WIN64}
|
||
|
//Note that this is not an official ZLIB .DLL. It was obtained from:
|
||
|
//http://www.winimage.com/zLibDll/
|
||
|
//
|
||
|
//It is defined with the WINAPI conventions instead of the standard cdecl
|
||
|
//conventions. Get the DLL for Win32-x86.
|
||
|
const
|
||
|
libzlib = 'zlibwapi.dll';
|
||
|
{$ENDIF}
|
||
|
{$IFDEF WINCE}
|
||
|
//Note that zlibce can be found at http://www.tenik.co.jp/~adachi/wince/zlibce/
|
||
|
const
|
||
|
libzlib = 'zlibce';
|
||
|
{$ENDIF}
|
||
|
|
||
|
constructor EIdZLibStubError.Build(const ATitle : String; AError : UInt32);
|
||
|
begin
|
||
|
FTitle := ATitle;
|
||
|
FError := AError;
|
||
|
if AError = 0 then begin
|
||
|
inherited Create(ATitle);
|
||
|
end else begin
|
||
|
FErrorMessage := SysUtils.SysErrorMessage(AError);
|
||
|
inherited Create(ATitle + ': ' + FErrorMessage); {Do not Localize}
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
function FixupStub(hDll: THandle; const AName: {$IFDEF WINCE}TIdUnicodeString{$ELSE}string{$ENDIF}): Pointer;
|
||
|
begin
|
||
|
if hDll = 0 then begin
|
||
|
raise EIdZLibStubError.Build(Format(RSZLibCallError, [AName]), 0);
|
||
|
end;
|
||
|
Result := GetProcAddress(hDll, {$IFDEF WINCE}PWideChar{$ELSE}PChar{$ENDIF}(AName));
|
||
|
if Result = nil then begin
|
||
|
raise EIdZLibStubError.Build(Format(RSZLibCallError, [AName]), 10022);
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
function stub_adler32(adler: TIdC_ULONG; const buf: PIdAnsiChar;
|
||
|
len: TIdC_UINT): TIdC_ULONG; cdecl;
|
||
|
begin
|
||
|
adler32 := FixupStub(hZLib, 'adler32'); {Do not Localize}
|
||
|
Result := adler32(adler, buf, len);
|
||
|
end;
|
||
|
|
||
|
function stub_adler32_combine (crc1, crc2 : TIdC_ULONG;
|
||
|
len2 : z_off_t) : TIdC_ULONG; cdecl;
|
||
|
begin
|
||
|
adler32_combine := FixupStub(hZLib, 'adler32_combine'); {Do not Localize}
|
||
|
Result := adler32_combine(crc1, crc2, len2);
|
||
|
end;
|
||
|
|
||
|
function stub_compress(dest: PIdAnsiChar; var destLen: TIdC_ULONG;
|
||
|
const source: PIdAnsiChar; sourceLen: TIdC_ULONG): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
compress := FixupStub(hZLib, 'compress'); {Do not Localize}
|
||
|
Result := compress(dest,destLen,source,sourceLen);
|
||
|
end;
|
||
|
|
||
|
function stub_compress2(dest: PIdAnsiChar; var destLen: TIdC_ULONG;
|
||
|
const source: PIdAnsiChar; sourceLen: TIdC_ULONG;
|
||
|
level: TIdC_INT): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
compress2 := FixupStub(hZLib, 'compress2'); {Do not Localize}
|
||
|
Result := compress2(dest, destLen, source, sourceLen, level);
|
||
|
end;
|
||
|
|
||
|
|
||
|
function stub_compressBound(sourceLen: TIdC_ULONG): TIdC_ULONG; cdecl;
|
||
|
begin
|
||
|
compressBound := FixupStub(hZLib, 'compressBound'); {Do not Localize}
|
||
|
Result := compressBound(sourcelen);
|
||
|
end;
|
||
|
|
||
|
function stub_crc32(crc: TIdC_ULONG; const buf: PIdAnsiChar;
|
||
|
len: TIdC_UINT): TIdC_ULONG; cdecl;
|
||
|
begin
|
||
|
crc32 := FixupStub(hZLib, 'crc32'); {Do not Localize}
|
||
|
Result := crc32(crc, buf, len);
|
||
|
end;
|
||
|
|
||
|
function stub_crc32_combine (crc1, crc2 : TIdC_ULONG;
|
||
|
len2 : z_off_t) : TIdC_ULONG; cdecl;
|
||
|
begin
|
||
|
crc32_combine := FixupStub(hZLib, 'crc32_combine'); {Do not Localize}
|
||
|
Result := crc32_combine(crc1, crc2, len2);
|
||
|
end;
|
||
|
|
||
|
function stub_deflate(var strm: z_stream; flush: TIdC_INT): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
deflate := FixupStub(hZLib, 'deflate'); {Do not Localize}
|
||
|
Result := deflate(strm, flush);
|
||
|
end;
|
||
|
|
||
|
function stub_deflateBound(var strm: z_stream;
|
||
|
sourceLen: TIdC_ULONG): TIdC_ULONG; cdecl;
|
||
|
begin
|
||
|
deflateBound := FixupStub(hZLib, 'deflateBound'); {Do not Localize}
|
||
|
Result := deflateBound(strm, sourceLen);
|
||
|
end;
|
||
|
|
||
|
function stub_deflateCopy(var dest, source: z_stream): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
deflateCopy := FixupStub(hZLib, 'deflateCopy'); {Do not Localize}
|
||
|
Result := deflateCopy(dest, source);
|
||
|
end;
|
||
|
|
||
|
function stub_deflateEnd(var strm: z_stream): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
deflateEnd := FixupStub(hZLib, 'deflateEnd'); {Do not Localize}
|
||
|
Result := deflateEnd(strm);
|
||
|
end;
|
||
|
|
||
|
function stub_deflateInit_(var strm: z_stream; level: TIdC_INT;
|
||
|
const version: PIdAnsiChar; stream_size: TIdC_INT): TIdC_INT;cdecl;
|
||
|
begin
|
||
|
deflateInit_ := FixupStub(hZLib, 'deflateInit_'); {Do not Localize}
|
||
|
Result := deflateInit_(strm, level, version, stream_size);
|
||
|
end;
|
||
|
|
||
|
function stub_deflateInit2_(var strm: z_stream;
|
||
|
level, method, windowBits, memLevel, strategy: TIdC_INT;
|
||
|
const version: PIdAnsiChar; stream_size: TIdC_INT): TIdC_INT;cdecl;
|
||
|
begin
|
||
|
deflateInit2_ := FixupStub(hZLib, 'deflateInit2_'); {Do not Localize}
|
||
|
Result := deflateInit2_(strm,level, method, windowBits, memLevel, strategy,
|
||
|
version, stream_size);
|
||
|
end;
|
||
|
|
||
|
function stub_deflateParams (var strm: z_stream; level, strategy: TIdC_INT): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
deflateParams := FixupStub(hZLib, 'deflateParams'); {Do not Localize}
|
||
|
Result := deflateParams (strm, level, strategy);
|
||
|
end;
|
||
|
|
||
|
function stub_deflatePrime (var strm: z_stream; bits, value: TIdC_INT): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
deflatePrime := FixupStub(hZLib, 'deflatePrime'); {Do not Localize}
|
||
|
Result := deflateParams (strm, bits, value);
|
||
|
end;
|
||
|
|
||
|
function stub_deflateTune(var strm : z_stream; good_length : TIdC_INT;
|
||
|
max_lazy, nice_length, max_chain : TIdC_INT) : TIdC_INT; cdecl;
|
||
|
begin
|
||
|
deflateTune := FixupStub(hZLib, 'deflateTune'); {Do not Localize}
|
||
|
Result := deflateTune(strm, good_length, max_lazy, nice_length, max_chain) ;
|
||
|
end;
|
||
|
|
||
|
function stub_deflateReset (var strm: z_stream): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
deflateReset := FixupStub(hZLib, 'deflateReset'); {Do not Localize}
|
||
|
Result := deflateReset(strm);
|
||
|
end;
|
||
|
|
||
|
function stub_deflateSetDictionary(var strm: z_stream; const dictionary: PIdAnsiChar;
|
||
|
dictLength: TIdC_UINT): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
deflateSetDictionary := FixupStub(hZLib, 'deflateSetDictionary'); {Do not Localize}
|
||
|
Result := deflateSetDictionary(strm, dictionary, dictLength);
|
||
|
end;
|
||
|
|
||
|
function stub_inflate(var strm: z_stream; flush: TIdC_INT): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
inflate := FixupStub(hZLib, 'inflate'); {Do not Localize}
|
||
|
Result := inflate(strm, flush);
|
||
|
end;
|
||
|
|
||
|
function stub_inflateBack(var strm: z_stream; in_fn: in_func; in_desc: Pointer;
|
||
|
out_fn: out_func; out_desc: Pointer): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
inflateBack := FixupStub(hZLib, 'inflateBack'); {Do not Localize}
|
||
|
Result := inflateBack(strm, in_fn, in_desc, out_fn, out_desc);
|
||
|
end;
|
||
|
|
||
|
function stub_inflateBackEnd(var strm: z_stream): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
inflateBackEnd := FixupStub(hZLib, 'inflateBackEnd'); {Do not Localize}
|
||
|
Result := inflateBackEnd(strm);
|
||
|
end;
|
||
|
|
||
|
function stub_inflateEnd(var strm: z_stream): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
inflateEnd := FixupStub(hZLib, 'inflateEnd'); {Do not Localize}
|
||
|
Result := inflateEnd(strm);
|
||
|
end;
|
||
|
|
||
|
function stub_inflateBackInit_(var strm: z_stream;
|
||
|
windowBits: TIdC_INT; window: PIdAnsiChar;
|
||
|
const version: PIdAnsiChar; stream_size: TIdC_INT): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
inflateBackInit_ := FixupStub(hZLib, 'inflateBackInit_'); {Do not Localize}
|
||
|
Result := inflateBackInit_(strm, windowBits, window, version, stream_size);
|
||
|
end;
|
||
|
|
||
|
function stub_inflateInit2_(var strm: z_stream; windowBits: TIdC_INT;
|
||
|
const version: PIdAnsiChar; stream_size: TIdC_INT): TIdC_INT;cdecl;
|
||
|
begin
|
||
|
inflateInit2_ := FixupStub(hZLib, 'inflateInit2_'); {Do not Localize}
|
||
|
Result := inflateInit2_(strm, windowBits, version, stream_size);
|
||
|
end;
|
||
|
|
||
|
function stub_inflateCopy(var dest, source: z_stream): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
inflateCopy := FixupStub(hZLib, 'inflateCopy'); {Do not Localize}
|
||
|
Result := inflateCopy(dest, source);
|
||
|
end;
|
||
|
|
||
|
|
||
|
function stub_inflateInit_(var strm: z_stream; const version: PIdAnsiChar;
|
||
|
stream_size: TIdC_INT): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
inflateInit_ := FixupStub(hZLib, 'inflateInit_'); {Do not Localize}
|
||
|
Result := inflateInit_(strm, version, stream_size);
|
||
|
end;
|
||
|
|
||
|
function stub_inflateReset(var strm: z_stream): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
inflateReset := FixupStub(hZLib, 'inflateReset'); {Do not Localize}
|
||
|
Result := inflateReset(strm);
|
||
|
end;
|
||
|
|
||
|
function stub_inflateReset2(var strm : z_stream; windowBits : TIdC_INT) : TIdC_INT; cdecl;
|
||
|
begin
|
||
|
inflateReset2 := FixupStub(hZLib, 'inflateReset2'); {Do not Localize}
|
||
|
Result := inflateReset2(strm, windowBits);
|
||
|
end;
|
||
|
|
||
|
function stub_inflatePrime(var strm : z_stream; bits, value : TIdC_INT ) : TIdC_INT; cdecl;
|
||
|
begin
|
||
|
inflatePrime := FixupStub(hZLib, 'inflatePrime'); {Do not Localize}
|
||
|
Result := inflatePrime(strm, bits, value);
|
||
|
end;
|
||
|
|
||
|
function stub_inflateMark(var strm : z_stream) : TIdC_LONG; cdecl;
|
||
|
begin
|
||
|
inflateMark := FixupStub(hZLib, 'inflateMark'); {Do not Localize}
|
||
|
Result := inflateMark(strm);
|
||
|
end;
|
||
|
|
||
|
function stub_inflateSetDictionary(var strm: z_stream; const dictionary: PIdAnsiChar;
|
||
|
dictLength: TIdC_UINT): TIdC_INT;cdecl;
|
||
|
begin
|
||
|
inflateSetDictionary := FixupStub(hZLib, 'inflateSetDictionary'); {Do not Localize}
|
||
|
Result := inflateSetDictionary(strm, dictionary, dictLength);
|
||
|
end;
|
||
|
|
||
|
function stub_inflateSync(var strm: z_stream): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
inflateSync := FixupStub(hZLib, 'inflateSync'); {Do not Localize}
|
||
|
Result := inflateSync(strm);
|
||
|
end;
|
||
|
|
||
|
function stub_uncompress (dest: PIdAnsiChar; var destLen: TIdC_ULONG;
|
||
|
const source: PIdAnsiChar; sourceLen: TIdC_ULONG): TIdC_INT;cdecl;
|
||
|
begin
|
||
|
uncompress := FixupStub(hZLib, 'uncompress'); {Do not Localize}
|
||
|
Result := uncompress (dest, destLen, source, sourceLen);
|
||
|
end;
|
||
|
|
||
|
function stub_zlibCompileFlags : TIdC_ULONG; cdecl;
|
||
|
begin
|
||
|
zlibCompileFlags := FixupStub(hZLib, 'zlibCompileFlags'); {Do not Localize}
|
||
|
Result := zlibCompileFlags;
|
||
|
end;
|
||
|
|
||
|
function stub_zError(err : TIdC_INT) : PIdAnsiChar; cdecl;
|
||
|
begin
|
||
|
zError := FixupStub(hZLib, 'zError'); {Do not Localize}
|
||
|
Result := zError(err);
|
||
|
end;
|
||
|
|
||
|
function stub_inflateSyncPoint(var z : TZStreamRec) : TIdC_INT; cdecl;
|
||
|
begin
|
||
|
inflateSyncPoint := FixupStub(hZLib, 'inflateSyncPoint'); {Do not Localize}
|
||
|
Result := inflateSyncPoint(z);
|
||
|
end;
|
||
|
|
||
|
function stub_get_crc_table : PIdC_ULONG; cdecl;
|
||
|
begin
|
||
|
get_crc_table := FixupStub(hZLib, 'get_crc_table'); {Do not Localize}
|
||
|
Result := get_crc_table;
|
||
|
end;
|
||
|
|
||
|
function stub_inflateUndermine(var strm: z_stream; subvert : TIdC_INT ) : TIdC_INT; cdecl;
|
||
|
begin
|
||
|
inflateUndermine := FixupStub(hZLib, 'inflateUndermine'); {Do not Localize}
|
||
|
Result := inflateUndermine(strm,subvert);
|
||
|
end;
|
||
|
|
||
|
function stub_zlibVersion : PIdAnsiChar; cdecl;
|
||
|
begin
|
||
|
Result := '';
|
||
|
zlibVersion := FixupStub(hZLib, 'zlibVersion'); {Do not Localize}
|
||
|
if Assigned(zlibVersion) then begin
|
||
|
Result := zlibVersion;
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
function stub_deflateSetHeader(var strm: z_stream; var head: gz_header): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
deflateSetHeader := FixupStub(hZLib, 'deflateSetHeader'); {Do not Localize}
|
||
|
Result := deflateSetHeader(strm, head);
|
||
|
end;
|
||
|
|
||
|
function stub_inflateGetHeader(var strm: z_stream; var head: gz_header): TIdC_INT; cdecl;
|
||
|
begin
|
||
|
inflateGetHeader := FixupStub(hZLib, 'inflateGetHeader'); {Do not Localize}
|
||
|
Result := inflateGetHeader(strm, head);
|
||
|
end;
|
||
|
|
||
|
procedure InitializeStubs;
|
||
|
begin
|
||
|
adler32 := stub_adler32;
|
||
|
adler32_combine := stub_adler32_combine;
|
||
|
compress := stub_compress;
|
||
|
compress2 := stub_compress2;
|
||
|
compressBound := stub_compressBound;
|
||
|
crc32 := stub_crc32;
|
||
|
crc32_combine := stub_crc32_combine;
|
||
|
deflate := stub_deflate;
|
||
|
deflateBound := stub_deflateBound;
|
||
|
deflateCopy := stub_deflateCopy;
|
||
|
deflateEnd := stub_deflateEnd;
|
||
|
deflateInit_ := stub_deflateInit_;
|
||
|
deflateInit2_ := stub_deflateInit2_;
|
||
|
deflateParams := stub_deflateParams;
|
||
|
deflatePrime := stub_deflatePrime;
|
||
|
deflateTune := stub_deflateTune;
|
||
|
deflateReset := stub_deflateReset;
|
||
|
deflateSetDictionary := stub_deflateSetDictionary;
|
||
|
inflate := stub_inflate;
|
||
|
inflateBack := stub_inflateBack;
|
||
|
inflateBackEnd := stub_inflateBackEnd;
|
||
|
inflateBackInit_ := stub_inflateBackInit_;
|
||
|
inflateCopy := stub_inflateCopy;
|
||
|
inflateEnd := stub_inflateEnd;
|
||
|
inflateInit_ := stub_inflateInit_;
|
||
|
inflateInit2_ := stub_inflateInit2_;
|
||
|
inflateReset := stub_inflateReset;
|
||
|
inflateReset2 := stub_inflateReset2;
|
||
|
inflatePrime := stub_inflatePrime;
|
||
|
inflateMark := stub_inflateMark;
|
||
|
|
||
|
inflateSetDictionary := stub_inflateSetDictionary;
|
||
|
inflateSync := stub_inflateSync;
|
||
|
uncompress := stub_uncompress;
|
||
|
zlibCompileFlags := stub_zlibCompileFlags;
|
||
|
zError := stub_zError;
|
||
|
inflateUndermine := stub_inflateUndermine;
|
||
|
inflateSyncPoint := stub_inflateSyncPoint;
|
||
|
|
||
|
get_crc_table := stub_get_crc_table;
|
||
|
zlibVersion := stub_zlibVersion;
|
||
|
deflateSetHeader := stub_deflateSetHeader;
|
||
|
inflateGetHeader := stub_inflateGetHeader;
|
||
|
end;
|
||
|
{$ENDIF}
|
||
|
|
||
|
function deflateInit(var strm: z_stream; level: TIdC_INT): TIdC_INT;
|
||
|
begin
|
||
|
// if not Assigned(strm.zalloc) then strm.zalloc := zlibAllocMem;
|
||
|
// if not Assigned(strm.zfree) then strm.zfree := zlibFreeMem;
|
||
|
Result := deflateInit_(strm, level, ZLIB_VERSION, sizeof(z_stream));
|
||
|
end;
|
||
|
|
||
|
function deflateInit2(var strm: z_stream; level, method, windowBits,
|
||
|
memLevel, strategy: TIdC_INT): TIdC_INT;
|
||
|
begin
|
||
|
// if not Assigned(strm.zalloc) then strm.zalloc := zlibAllocMem;
|
||
|
// if not Assigned(strm.zfree) then strm.zfree := zlibFreeMem;
|
||
|
Result := deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
|
||
|
ZLIB_VERSION, sizeof(z_stream));
|
||
|
end;
|
||
|
|
||
|
const
|
||
|
WBits : array[TZStreamType] of TIdC_INT = (MAX_WBITS, MAX_WBITS + 16, -MAX_WBITS);
|
||
|
|
||
|
function deflateInitEx(var strm: z_stream; level: TIdC_INT; streamtype: TZStreamType = zsZLib): TIdC_INT;
|
||
|
begin
|
||
|
Result := deflateInit2(strm, level, Z_DEFLATED, WBits[streamtype],
|
||
|
MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY);
|
||
|
end;
|
||
|
|
||
|
function inflateInitEx(var strm: z_stream; streamtype: TZStreamType = zsZLib): TIdC_INT;
|
||
|
begin
|
||
|
Result := inflateInit2(strm, WBits[streamtype]);
|
||
|
end;
|
||
|
|
||
|
function inflateInit(var strm: z_stream): TIdC_INT;
|
||
|
begin
|
||
|
// if not Assigned(strm.zalloc) then strm.zalloc := zlibAllocMem;
|
||
|
// if not Assigned(strm.zfree) then strm.zfree := zlibFreeMem;
|
||
|
Result := inflateInit_(strm, ZLIB_VERSION, sizeof(z_stream));
|
||
|
end;
|
||
|
|
||
|
function inflateInit2(var strm: z_stream; windowBits: TIdC_INT): TIdC_INT;
|
||
|
begin
|
||
|
if not Assigned(strm.zalloc) then begin
|
||
|
strm.zalloc := zlibAllocMem;
|
||
|
end;
|
||
|
if not Assigned(strm.zfree) then begin
|
||
|
strm.zfree := zlibFreeMem;
|
||
|
end;
|
||
|
Result := inflateInit2_(strm, windowBits, ZLIB_VERSION, SizeOf(z_stream));
|
||
|
end;
|
||
|
|
||
|
function inflateBackInit(var strm: z_stream; windowBits: TIdC_INT;
|
||
|
window: PIdAnsiChar): TIdC_INT;
|
||
|
begin
|
||
|
Result := inflateBackInit_(strm, windowBits, window, ZLIB_VERSION, SizeOf(z_stream));
|
||
|
end;
|
||
|
|
||
|
|
||
|
{minor additional helper functions}
|
||
|
function _malloc(Size: Integer): Pointer; cdecl;
|
||
|
begin
|
||
|
GetMem(Result, Size);
|
||
|
end;
|
||
|
|
||
|
procedure _free(Block: Pointer); cdecl;
|
||
|
begin
|
||
|
FreeMem(Block);
|
||
|
end;
|
||
|
|
||
|
procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl;
|
||
|
begin
|
||
|
FillChar(P^, count, B);
|
||
|
end;
|
||
|
|
||
|
procedure _memcpy(dest, source: Pointer; count: Integer); cdecl;
|
||
|
begin
|
||
|
Move(source^, dest^, count);
|
||
|
end;
|
||
|
|
||
|
function zlibAllocMem(AppData: Pointer; Items, Size: TIdC_UINT): Pointer; cdecl;
|
||
|
begin
|
||
|
GetMem(Result, Items*Size);
|
||
|
// Result := AllocMem(Items * Size);
|
||
|
end;
|
||
|
|
||
|
procedure zlibFreeMem(AppData, Block: Pointer); cdecl;
|
||
|
begin
|
||
|
FreeMem(Block);
|
||
|
end;
|
||
|
|
||
|
{$IFDEF STATICLOAD_ZLIB}
|
||
|
function Load : Boolean;
|
||
|
begin
|
||
|
Result := True;
|
||
|
end;
|
||
|
|
||
|
procedure Unload;
|
||
|
begin
|
||
|
end;
|
||
|
|
||
|
function Loaded : Boolean;
|
||
|
begin
|
||
|
Result := True;
|
||
|
end;
|
||
|
{$ELSE}
|
||
|
|
||
|
var
|
||
|
GIdZLibPath: String = '';
|
||
|
|
||
|
procedure IdZLibSetLibPath(const APath: String);
|
||
|
begin
|
||
|
if APath <> '' then begin
|
||
|
GIdZLibPath := IndyIncludeTrailingPathDelimiter(APath);
|
||
|
end else begin
|
||
|
GIdZLibPath := '';
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
function Load : Boolean;
|
||
|
begin
|
||
|
Result := Loaded;
|
||
|
if not Result then begin
|
||
|
//In Windows, you should use SafeLoadLibrary instead of the LoadLibrary API
|
||
|
//call because LoadLibrary messes with the FPU control word.
|
||
|
{$IFDEF WINDOWS}
|
||
|
hZLib := SafeLoadLibrary(GIdZLibPath + libzlib);
|
||
|
{$ELSE}
|
||
|
{$IFDEF UNIX}
|
||
|
hZLib := HackLoad(GIdZLibPath + libzlib, libvers);
|
||
|
{$ELSE}
|
||
|
hZLib := LoadLibrary(GIdZLibPath + libzlib);
|
||
|
{$IFDEF USE_INVALIDATE_MOD_CACHE}
|
||
|
InvalidateModuleCache;
|
||
|
{$ENDIF}
|
||
|
{$ENDIF}
|
||
|
{$ENDIF}
|
||
|
Result := Loaded;
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
procedure Unload;
|
||
|
begin
|
||
|
if Loaded then begin
|
||
|
FreeLibrary(hZLib);
|
||
|
{$IFDEF DELPHI_CROSS}
|
||
|
InvalidateModuleCache;
|
||
|
{$ENDIF}
|
||
|
hZLib := 0;
|
||
|
InitializeStubs;
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
function Loaded : Boolean;
|
||
|
begin
|
||
|
Result := (hZLib <> 0);
|
||
|
end;
|
||
|
{$ENDIF}
|
||
|
|
||
|
{$IFNDEF STATICLOAD_ZLIB}
|
||
|
initialization
|
||
|
InitializeStubs;
|
||
|
Load;
|
||
|
|
||
|
finalization
|
||
|
Unload;
|
||
|
InitializeStubs;
|
||
|
{$ENDIF}
|
||
|
|
||
|
end.
|