1 (* zlibpas -- Pascal interface to the zlib data compression library 2 * 3 * Copyright (C) 2003 Cosmin Truta. 4 * Derived from original sources by Bob Dellaca. 5 * For conditions of distribution and use, see copyright notice in readme.txt 6 *) 7 8 unit zlibpas; 9 10 interface 11 12 const 13 ZLIB_VERSION = '1.2.3'; 14 15 type 16 alloc_func = function(opaque: Pointer; items, size: Integer): Pointer; 17 cdecl; 18 free_func = procedure(opaque, address: Pointer); 19 cdecl; 20 21 in_func = function(opaque: Pointer; var buf: PByte): Integer; 22 cdecl; 23 out_func = function(opaque: Pointer; buf: PByte; size: Integer): Integer; 24 cdecl; 25 26 z_streamp = ^z_stream; 27 z_stream = packed record 28 next_in: PChar; (* next input byte *) 29 avail_in: Integer; (* number of bytes available at next_in *) 30 total_in: LongInt; (* total nb of input bytes read so far *) 31 32 next_out: PChar; (* next output byte should be put there *) 33 avail_out: Integer; (* remaining free space at next_out *) 34 total_out: LongInt; (* total nb of bytes output so far *) 35 36 msg: PChar; (* last error message, NULL if no error *) 37 state: Pointer; (* not visible by applications *) 38 39 zalloc: alloc_func; (* used to allocate the internal state *) 40 zfree: free_func; (* used to free the internal state *) 41 opaque: Pointer; (* private data object passed to zalloc and zfree *) 42 43 data_type: Integer; (* best guess about the data type: ascii or binary *) 44 adler: LongInt; (* adler32 value of the uncompressed data *) 45 reserved: LongInt; (* reserved for future use *) 46 end; 47 48 (* constants *) 49 const 50 Z_NO_FLUSH = 0; 51 Z_PARTIAL_FLUSH = 1; 52 Z_SYNC_FLUSH = 2; 53 Z_FULL_FLUSH = 3; 54 Z_FINISH = 4; 55 56 Z_OK = 0; 57 Z_STREAM_END = 1; 58 Z_NEED_DICT = 2; 59 Z_ERRNO = -1; 60 Z_STREAM_ERROR = -2; 61 Z_DATA_ERROR = -3; 62 Z_MEM_ERROR = -4; 63 Z_BUF_ERROR = -5; 64 Z_VERSION_ERROR = -6; 65 66 Z_NO_COMPRESSION = 0; 67 Z_BEST_SPEED = 1; 68 Z_BEST_COMPRESSION = 9; 69 Z_DEFAULT_COMPRESSION = -1; 70 71 Z_FILTERED = 1; 72 Z_HUFFMAN_ONLY = 2; 73 Z_RLE = 3; 74 Z_DEFAULT_STRATEGY = 0; 75 76 Z_BINARY = 0; 77 Z_ASCII = 1; 78 Z_UNKNOWN = 2; 79 80 Z_DEFLATED = 8; 81 82 (* basic functions *) 83 function zlibVersion: PChar; 84 function deflateInit(var strm: z_stream; level: Integer): Integer; 85 function deflate(var strm: z_stream; flush: Integer): Integer; 86 function deflateEnd(var strm: z_stream): Integer; 87 function inflateInit(var strm: z_stream): Integer; 88 function inflate(var strm: z_stream; flush: Integer): Integer; 89 function inflateEnd(var strm: z_stream): Integer; 90 91 (* advanced functions *) 92 function deflateInit2(var strm: z_stream; level, method, windowBits, 93 memLevel, strategy: Integer): Integer; 94 function deflateSetDictionary(var strm: z_stream; const dictionary: PChar; 95 dictLength: Integer): Integer; 96 function deflateCopy(var dest, source: z_stream): Integer; 97 function deflateReset(var strm: z_stream): Integer; 98 function deflateParams(var strm: z_stream; level, strategy: Integer): Integer; 99 function deflateBound(var strm: z_stream; sourceLen: LongInt): LongInt; 100 function deflatePrime(var strm: z_stream; bits, value: Integer): Integer; 101 function inflateInit2(var strm: z_stream; windowBits: Integer): Integer; 102 function inflateSetDictionary(var strm: z_stream; const dictionary: PChar; 103 dictLength: Integer): Integer; 104 function inflateSync(var strm: z_stream): Integer; 105 function inflateCopy(var dest, source: z_stream): Integer; 106 function inflateReset(var strm: z_stream): Integer; 107 function inflateBackInit(var strm: z_stream; 108 windowBits: Integer; window: PChar): Integer; 109 function inflateBack(var strm: z_stream; in_fn: in_func; in_desc: Pointer; 110 out_fn: out_func; out_desc: Pointer): Integer; 111 function inflateBackEnd(var strm: z_stream): Integer; 112 function zlibCompileFlags: LongInt; 113 114 (* utility functions *) 115 function compress(dest: PChar; var destLen: LongInt; 116 const source: PChar; sourceLen: LongInt): Integer; 117 function compress2(dest: PChar; var destLen: LongInt; 118 const source: PChar; sourceLen: LongInt; 119 level: Integer): Integer; 120 function compressBound(sourceLen: LongInt): LongInt; 121 function uncompress(dest: PChar; var destLen: LongInt; 122 const source: PChar; sourceLen: LongInt): Integer; 123 124 (* checksum functions *) 125 function adler32(adler: LongInt; const buf: PChar; len: Integer): LongInt; 126 function crc32(crc: LongInt; const buf: PChar; len: Integer): LongInt; 127 128 (* various hacks, don't look :) *) 129 function deflateInit_(var strm: z_stream; level: Integer; 130 const version: PChar; stream_size: Integer): Integer; 131 function inflateInit_(var strm: z_stream; const version: PChar; 132 stream_size: Integer): Integer; 133 function deflateInit2_(var strm: z_stream; 134 level, method, windowBits, memLevel, strategy: Integer; 135 const version: PChar; stream_size: Integer): Integer; 136 function inflateInit2_(var strm: z_stream; windowBits: Integer; 137 const version: PChar; stream_size: Integer): Integer; 138 function inflateBackInit_(var strm: z_stream; 139 windowBits: Integer; window: PChar; 140 const version: PChar; stream_size: Integer): Integer; 141 142 143 implementation 144 145 {$L adler32.obj} 146 {$L compress.obj} 147 {$L crc32.obj} 148 {$L deflate.obj} 149 {$L infback.obj} 150 {$L inffast.obj} 151 {$L inflate.obj} 152 {$L inftrees.obj} 153 {$L trees.obj} 154 {$L uncompr.obj} 155 {$L zutil.obj} 156 157 function adler32; external; 158 function compress; external; 159 function compress2; external; 160 function compressBound; external; 161 function crc32; external; 162 function deflate; external; 163 function deflateBound; external; 164 function deflateCopy; external; 165 function deflateEnd; external; 166 function deflateInit_; external; 167 function deflateInit2_; external; 168 function deflateParams; external; 169 function deflatePrime; external; 170 function deflateReset; external; 171 function deflateSetDictionary; external; 172 function inflate; external; 173 function inflateBack; external; 174 function inflateBackEnd; external; 175 function inflateBackInit_; external; 176 function inflateCopy; external; 177 function inflateEnd; external; 178 function inflateInit_; external; 179 function inflateInit2_; external; 180 function inflateReset; external; 181 function inflateSetDictionary; external; 182 function inflateSync; external; 183 function uncompress; external; 184 function zlibCompileFlags; external; 185 function zlibVersion; external; 186 187 function deflateInit(var strm: z_stream; level: Integer): Integer; 188 begin 189 Result := deflateInit_(strm, level, ZLIB_VERSION, sizeof(z_stream)); 190 end; 191 192 function deflateInit2(var strm: z_stream; level, method, windowBits, memLevel, 193 strategy: Integer): Integer; 194 begin 195 Result := deflateInit2_(strm, level, method, windowBits, memLevel, strategy, 196 ZLIB_VERSION, sizeof(z_stream)); 197 end; 198 199 function inflateInit(var strm: z_stream): Integer; 200 begin 201 Result := inflateInit_(strm, ZLIB_VERSION, sizeof(z_stream)); 202 end; 203 204 function inflateInit2(var strm: z_stream; windowBits: Integer): Integer; 205 begin 206 Result := inflateInit2_(strm, windowBits, ZLIB_VERSION, sizeof(z_stream)); 207 end; 208 209 function inflateBackInit(var strm: z_stream; 210 windowBits: Integer; window: PChar): Integer; 211 begin 212 Result := inflateBackInit_(strm, windowBits, window, 213 ZLIB_VERSION, sizeof(z_stream)); 214 end; 215 216 function _malloc(Size: Integer): Pointer; cdecl; 217 begin 218 GetMem(Result, Size); 219 end; 220 221 procedure _free(Block: Pointer); cdecl; 222 begin 223 FreeMem(Block); 224 end; 225 226 procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl; 227 begin 228 FillChar(P^, count, B); 229 end; 230 231 procedure _memcpy(dest, source: Pointer; count: Integer); cdecl; 232 begin 233 Move(source^, dest^, count); 234 end; 235 236 end. 237