Provides compression and decompression via the system zlib library. Supports Raw deflate, Zlib, and Gzip formats in both streaming and one-shot modes. Caller provides all buffers, so there is no hidden allocation on the Modula-2 side. Requires -lz at link time.
- Stream (ADDRESS) -- Opaque zlib stream handle.
- Status --
Ok,StreamEnd,NeedMore,Error. - Level --
NoCompression,BestSpeed,Default,BestCompression. - Format --
Raw,ZlibFmt,Gzip.
-
PROCEDURE DeflateInit(VAR s: Stream; level: Level; fmt: Format): StatusInitialise a compression stream. -
PROCEDURE Deflate(VAR s: Stream; src: ADDRESS; srcLen: CARDINAL; dst: ADDRESS; dstMax: CARDINAL; VAR produced: CARDINAL; flush: BOOLEAN): StatusCompress from src into dst. Set flush to TRUE to finalise the stream. produced is set to the number of bytes written to dst. -
PROCEDURE DeflateEnd(VAR s: Stream): StatusFree compression stream resources.
-
PROCEDURE InflateInit(VAR s: Stream; fmt: Format): StatusInitialise a decompression stream. -
PROCEDURE Inflate(VAR s: Stream; src: ADDRESS; srcLen: CARDINAL; dst: ADDRESS; dstMax: CARDINAL; VAR produced: CARDINAL): StatusDecompress from src into dst. produced is set to the number of bytes written to dst. -
PROCEDURE InflateEnd(VAR s: Stream): StatusFree decompression stream resources.
-
PROCEDURE Compress(src: ADDRESS; srcLen: CARDINAL; dst: ADDRESS; dstMax: CARDINAL; VAR dstLen: CARDINAL; fmt: Format): StatusCompress an entire buffer in one call. -
PROCEDURE Decompress(src: ADDRESS; srcLen: CARDINAL; dst: ADDRESS; dstMax: CARDINAL; VAR dstLen: CARDINAL; fmt: Format): StatusDecompress an entire buffer in one call.
MODULE ZlibDemo;
FROM SYSTEM IMPORT ADR;
FROM InOut IMPORT WriteString, WriteLn, WriteCard;
FROM Zlib IMPORT Status, Level, Format, Ok, Default, Gzip,
Compress, Decompress;
VAR
src: ARRAY [0..63] OF CHAR;
compressed: ARRAY [0..255] OF CHAR;
decompressed: ARRAY [0..255] OF CHAR;
compLen, decompLen: CARDINAL;
s: Status;
BEGIN
src := "Hello, compressed world!";
s := Compress(ADR(src), 24, ADR(compressed), 256, compLen, Gzip);
IF s = Ok THEN
WriteString("compressed to ");
WriteCard(compLen, 0);
WriteString(" bytes"); WriteLn;
s := Decompress(ADR(compressed), compLen,
ADR(decompressed), 256, decompLen, Gzip);
IF s = Ok THEN
WriteString(decompressed); WriteLn
END
END
END ZlibDemo.