&& once local Destination Destination = ('.\zlib.dll') declare integer compress in (Destination) ; string @Dest, integer @DestLen, ; string @Source, integer SourceLen declare integer compress2 in (Destination) ; string @Dest, integer @DestLen, ; string @Source, integer SourceLen, integer CompressionLevel declare integer uncompress in (Destination) ; string @Dest, integer @DestLen, ; string @Source, integer SourceLen
&& some sample code I took from a class of mine *-------------------------------------------------------- && call with (src, @dest) hidden function FlateDecode_Decode(Src, Dest) local DestLen, SrcLen, sts && you must allocate the max possible uncompressed length if you do not know the uncompressed length && if you do know the uncompressed length (stored it somewhere), then alloc that space Dest = repl(chr(0), 1024*1024) DestLen = len(Dest) SrcLen = len(Src) sts = uncompress(@Dest, @DestLen, @Src, SrcLen) do case case sts >= 0 Dest = left(Dest, DestLen) return (sts == 0) otherwise Dest = '' return FALSE endcase endfunc *-------------------------------------------------------- #define Z_NO_COMPRESSION 0 #define Z_BEST_SPEED 1 #define Z_BEST_COMPRESSION 9 #define Z_DEFAULT_COMPRESSION (-1) && call with (src, @dest) hidden function FlateDecode_Encode(Src, Dest) local DestLen, SrcLen, sts SrcLen = len(Src) DestLen = ceiling(len(Src) + 1.01 + 12) Dest = repl(chr(0), DestLen) sts = compress2(@Dest, @DestLen, @Src, SrcLen, Z_BEST_COMPRESSION) do case case sts >= 0 Dest = left(Dest, DestLen) return (sts == 0) otherwise Dest = '' return FALSE endcase endfunc *---------------------------------------------------------------------------