The MRCI API compression and decompression services require the
address of this structure in DS:SI on entry.  It describes what data
to be processed and where to put the result.

Offset Size Contents
+0      4  pfbSrc       far address of source buffer
+4      2  wSrcLen      size of source buffer, in bytes
+6      2  wRes         reserved
+8      4  pfbDest      address of destination buffer
+0cH     2  wDestLen     size of destination data or buffer, in bytes
+0eH     2  wChunkLen    "early-out" chunk size, in bytes
+10H     4  lIncInfo     used in incremental decompression
20              size of a MRCRequestRec structure

pfbSrc  FAR address of source data:
Compress: Address of data to compress
Decompress: Address of data to decompress
Inc. Decompress: FIRST CALL: start of compressed block
OTHER CALLS: updated automatically

wSrcLen  length, in bytes, of source data:
Compress: Amount of data to compress
Decompress: ignored (data length is given by wDestLen)
Inc. Decompress: ignored

pfbDest  FAR address of destination buffer:
Compress: Address of buffer to receive compressed data
Decompress: address if buffer to receive decompressed data
Inc. Decompress: FIRST CALL: start of dest buffer
OTHER CALLS: updated automatically

wDestLen  length, in bytes, of destination data:
Compress:  ENTRY: Size of the destination buffer
RETURN: Size of the compressed data
Decompress: Exact size of the uncompressed data (MRCI
uses this to know when to stop decompressing)
Inc. Decompress: FIRST CALL: must be 0
OTHER CALLS: desired bytes of uncompressed
data.  Take care to avoid asking for more
data than was originally compressed!

wChunkLen  Use for compression performance.  If the MRCI server cannot
save at least wChunkLen bytes across the length specified in
wSrcLen, then MRCI returns an MRCI API Error Code of 0004H
(incompressible data).

It also provides a means for the server to provide a speed
optimization:  After compressing for a while, it may notice
that the remaining uncompressed data will fit within an even-
multiple of wChunkLen.  In that case, it can store the data
verbatim or use a simplified compression technique on the
remaining data.

DoubleSpace uses a chunk size of 512 (since it allocates disk
space in sectors).  The Flash File system uses 1-byte chunks
to minimize sector slack.

lIncInfo  is used only during Incremental Compression (MRCI Fn 0020H).
FIRST CALL: set this DWORD to 0.
OTHER CALLS: this is updated by MRCI; leave it alone.

See Also: MRCI API
- -