(* * zlib pascal headers * This file is part of Free Pascal, released under the LGPL. *) {$ifdef FPC} {$ifndef NO_SMART_LINK} {$smartlink on} {$endif} {$endif} unit zlib; interface {$ifdef FPC} {$mode objfpc} // Needed for array of const {$H+} // use long strings {$PACKRECORDS C} {$endif} uses ctypes; const ZLIB_VERSION = '1.2.3'; {$ifdef MSWINDOWS} libz = 'zlib1'; {$else} libz = 'z'; {$IFDEF DARWIN} {$linklib libz} {$ENDIF} {$endif} type { Compatible with paszlib } uInt = cuint; uLong = culong; uLongf = uLong; {FAR} PuLongf = ^uLongf; z_off_t = clong; pbyte = ^byte; bytef = byte; {FAR} pbytef = ^byte; voidpf = pointer; TAllocfunc = function (opaque: voidpf; items: uInt; size: uInt): voidpf; cdecl; TFreeFunc = procedure (opaque: voidpf; address: voidpf); cdecl; TInternalState = record end; PInternalState = ^TInternalstate; TZStream = record next_in: pbytef; avail_in: uInt; total_in: uLong; next_out: pbytef; avail_out: uInt; total_out: uLong; msg: pchar; state: PInternalState; zalloc: TAllocFunc; zfree: TFreeFunc; opaque: voidpf; data_type: cint; adler: uLong; reserved: uLong; end; TZStreamRec = TZStream; PZstream = ^TZStream; gzFile = pointer; const Z_NO_FLUSH = 0; Z_PARTIAL_FLUSH = 1; Z_SYNC_FLUSH = 2; Z_FULL_FLUSH = 3; Z_FINISH = 4; Z_BLOCK = 5; Z_OK = 0; Z_STREAM_END = 1; Z_NEED_DICT = 2; Z_ERRNO = -(1); Z_STREAM_ERROR = -(2); Z_DATA_ERROR = -(3); Z_MEM_ERROR = -(4); Z_BUF_ERROR = -(5); Z_VERSION_ERROR = -(6); Z_NO_COMPRESSION = 0; Z_BEST_SPEED = 1; Z_BEST_COMPRESSION = 9; Z_DEFAULT_COMPRESSION = -(1); Z_FILTERED = 1; Z_HUFFMAN_ONLY = 2; Z_RLE = 3; Z_FIXED = 4; Z_DEFAULT_STRATEGY = 0; Z_BINARY = 0; Z_TEXT = 1; Z_ASCII = Z_TEXT; Z_UNKNOWN = 2; Z_DEFLATED = 8; Z_NULL = 0; function zlibVersionpchar(): pchar; cdecl; external libz name 'zlibVersion'; function zlibVersion(): string; function deflate(var strm: TZStream; flush: integer): integer; cdecl; external libz name 'deflate'; function deflateEnd(var strm: TZStream): integer; cdecl; external libz name 'deflateEnd'; function inflate(var strm: TZStream; flush: integer): integer; cdecl; external libz name 'inflate'; function inflateEnd(var strm: TZStream): integer; cdecl; external libz name 'inflateEnd'; function deflateSetDictionary(var strm: TZStream; dictionary: pbytef; dictLength: uInt): integer; cdecl; external libz name 'deflateSetDictionary'; function deflateCopy(var dest, source: TZstream): integer; cdecl; external libz name 'deflateCopy'; function deflateReset(var strm: TZStream): integer; cdecl; external libz name 'deflateReset'; function deflateParams(var strm: TZStream; level: integer; strategy: integer): integer; cdecl; external libz name 'deflateParams'; //... function inflateSetDictionary(var strm: TZStream; dictionary: pbytef; dictLength: uInt): integer; cdecl; external libz name 'inflateSetDictionary'; function inflateSync(var strm: TZStream): integer; cdecl; external libz name 'inflateSync'; //... function inflateReset(var strm: TZStream): integer; cdecl; external libz name 'inflateReset'; function compress(dest: pbytef; destLen: puLongf; source : pbytef; sourceLen: uLong): integer; cdecl; external libz name 'compress'; function compress2(dest: pbytef; destLen: puLongf; source : pbytef; sourceLen: uLong; level: integer): integer; cdecl; external libz name 'compress2'; function uncompress(dest: pbytef; destLen: puLongf; source : pbytef; sourceLen: uLong): integer; cdecl; external libz name 'uncompress'; function gzopen(path: pchar; mode: pchar): gzFile; cdecl; external libz name 'gzopen'; function gzdopen(fd: integer; mode: pchar): gzFile; cdecl; external libz name 'gzdopen'; function gzsetparams(thefile: gzFile; level: integer; strategy: integer): integer; cdecl; external libz name 'gzsetparams'; function gzread(thefile: gzFile; buf: pointer; len: cardinal): integer; cdecl; external libz name 'gzread'; function gzwrite(thefile: gzFile; buf: pointer; len: cardinal): integer; cdecl; external libz name 'gzwrite'; function gzprintf(thefile: gzFile; format: pbytef; args: array of const): integer; cdecl; external libz name 'gzprintf'; function gzputs(thefile: gzFile; s: pbytef): integer; cdecl; external libz name 'gzputs'; function gzgets(thefile: gzFile; buf: pbytef; len: integer): pchar; cdecl; external libz name 'gzgets'; function gzputc(thefile: gzFile; c: integer): integer; cdecl; external libz name 'gzputc'; function gzgetc(thefile: gzFile): integer; cdecl; external libz name 'gzgetc'; function gzflush(thefile: gzFile; flush: integer): integer; cdecl; external libz name 'gzflush'; function gzseek(thefile: gzFile; offset: z_off_t; whence: integer): z_off_t; cdecl; external libz name 'gzseek'; function gzrewind(thefile: gzFile): integer; cdecl; external libz name 'gzrewind'; function gztell(thefile: gzFile): z_off_t; cdecl; external libz name 'gztell'; function gzeof(thefile: gzFile): integer; cdecl; external libz name 'gzeof'; function gzclose(thefile: gzFile): integer; cdecl; external libz name 'gzclose'; function gzerror(thefile: gzFile; var errnum: integer): pchar; cdecl; external libz name 'gzerror'; function adler32(adler: uLong; buf: pbytef; len: uInt): uLong; cdecl; external libz name 'adler32'; function crc32(crc: uLong; buf: pbytef; len: uInt): uLong; cdecl; external libz name 'crc32'; function deflateInit_(var strm: TZStream; level: integer; version: pchar; stream_size: integer): integer; cdecl; external libz name 'deflateInit_'; function deflateInit(var strm: TZStream; level : integer) : integer; function inflateInit_(var strm: TZStream; version: pchar; stream_size: integer): integer; cdecl; external libz name 'inflateInit_'; function inflateInit(var strm:TZStream) : integer; function deflateInit2_(var strm: TZStream; level: integer; method: integer; windowBits: integer; memLevel: integer; strategy: integer; version: pchar; stream_size: integer): integer; cdecl; external libz name 'deflateInit2_'; function deflateInit2(var strm: TZStream; level, method, windowBits, memLevel, strategy: integer): integer; function inflateInit2_(var strm: TZStream; windowBits: integer; version: pchar; stream_size: integer): integer; cdecl; external libz name 'inflateInit2_'; function inflateInit2(var strm: TZStream; windowBits: integer): integer; function zErrorpchar(err: integer): pchar; cdecl; external libz name 'zError'; function zError(err: integer): string; function inflateSyncPoint(z: PZstream): integer; cdecl; external libz name 'inflateSyncPoint'; function get_crc_table(): pointer; cdecl; external libz name 'get_crc_table'; function zlibAllocMem(AppData: Pointer; Items, Size: Integer): Pointer; cdecl; procedure zlibFreeMem(AppData, Block: Pointer); cdecl; implementation function zlibversion(): string; begin zlibversion := string(zlibversionpchar); end; function deflateInit(var strm: TZStream; level: integer) : integer; begin deflateInit := deflateInit_(strm, level, ZLIB_VERSION, sizeof(TZStream)); end; function inflateInit(var strm: TZStream): integer; begin inflateInit := inflateInit_(strm, ZLIB_VERSION, sizeof(TZStream)); end; function deflateInit2(var strm: TZStream; level, method, windowBits, memLevel, strategy: integer) : integer; begin deflateInit2 := deflateInit2_(strm, level, method, windowBits, memLevel, strategy, ZLIB_VERSION, sizeof(TZStream)); end; function inflateInit2(var strm: TZStream; windowBits: integer): integer; begin inflateInit2 := inflateInit2_(strm, windowBits, ZLIB_VERSION, sizeof(TZStream)); end; function zError(err: integer): string; begin zerror := string(zErrorpchar(err)); end; function zlibAllocMem(AppData: Pointer; Items, Size: Integer): Pointer; cdecl; begin Result := GetMemory(Items * Size); end; procedure zlibFreeMem(AppData, Block: Pointer); cdecl; begin FreeMem(Block); end; end.